Commit 69050f8d6d07 for kernel

commit 69050f8d6d075dc01af7a5f2f550a8067510366f
Author: Kees Cook <kees@kernel.org>
Date:   Fri Feb 20 23:49:23 2026 -0800

    treewide: Replace kmalloc with kmalloc_obj for non-scalar types

    This is the result of running the Coccinelle script from
    scripts/coccinelle/api/kmalloc_objs.cocci. The script is designed to
    avoid scalar types (which need careful case-by-case checking), and
    instead replace kmalloc-family calls that allocate struct or union
    object instances:

    Single allocations:     kmalloc(sizeof(TYPE), ...)
    are replaced with:      kmalloc_obj(TYPE, ...)

    Array allocations:      kmalloc_array(COUNT, sizeof(TYPE), ...)
    are replaced with:      kmalloc_objs(TYPE, COUNT, ...)

    Flex array allocations: kmalloc(struct_size(PTR, FAM, COUNT), ...)
    are replaced with:      kmalloc_flex(*PTR, FAM, COUNT, ...)

    (where TYPE may also be *VAR)

    The resulting allocations no longer return "void *", instead returning
    "TYPE *".

    Signed-off-by: Kees Cook <kees@kernel.org>

diff --git a/arch/alpha/kernel/core_marvel.c b/arch/alpha/kernel/core_marvel.c
index d38f4d6759e4..b5b547732398 100644
--- a/arch/alpha/kernel/core_marvel.c
+++ b/arch/alpha/kernel/core_marvel.c
@@ -861,7 +861,7 @@ marvel_agp_setup(alpha_agp_info *agp)
 	if (!alpha_agpgart_size)
 		return -ENOMEM;

-	aper = kmalloc(sizeof(*aper), GFP_KERNEL);
+	aper = kmalloc_obj(*aper, GFP_KERNEL);
 	if (aper == NULL) return -ENOMEM;

 	aper->arena = agp->hose->sg_pci;
@@ -1059,7 +1059,7 @@ marvel_agp_info(void)
 	/*
 	 * Allocate the info structure.
 	 */
-	agp = kmalloc(sizeof(*agp), GFP_KERNEL);
+	agp = kmalloc_obj(*agp, GFP_KERNEL);
 	if (!agp)
 		return NULL;

diff --git a/arch/alpha/kernel/core_titan.c b/arch/alpha/kernel/core_titan.c
index 77f5d68ed04b..ddaef7b75ba7 100644
--- a/arch/alpha/kernel/core_titan.c
+++ b/arch/alpha/kernel/core_titan.c
@@ -594,7 +594,7 @@ titan_agp_setup(alpha_agp_info *agp)
 	if (!alpha_agpgart_size)
 		return -ENOMEM;

-	aper = kmalloc(sizeof(struct titan_agp_aperture), GFP_KERNEL);
+	aper = kmalloc_obj(struct titan_agp_aperture, GFP_KERNEL);
 	if (aper == NULL)
 		return -ENOMEM;

@@ -760,7 +760,7 @@ titan_agp_info(void)
 	/*
 	 * Allocate the info structure.
 	 */
-	agp = kmalloc(sizeof(*agp), GFP_KERNEL);
+	agp = kmalloc_obj(*agp, GFP_KERNEL);
 	if (!agp)
 		return NULL;

diff --git a/arch/alpha/kernel/module.c b/arch/alpha/kernel/module.c
index cbefa5a77384..6fbc2d179e93 100644
--- a/arch/alpha/kernel/module.c
+++ b/arch/alpha/kernel/module.c
@@ -46,7 +46,7 @@ process_reloc_for_got(Elf64_Rela *rela,
 			goto found_entry;
 		}

-	g = kmalloc (sizeof (*g), GFP_KERNEL);
+	g = kmalloc_obj(*g, GFP_KERNEL);
 	g->next = chains[r_sym].next;
 	g->r_addend = r_addend;
 	g->got_offset = *poffset;
@@ -93,7 +93,7 @@ module_frob_arch_sections(Elf64_Ehdr *hdr, Elf64_Shdr *sechdrs,
 	}

 	nsyms = symtab->sh_size / sizeof(Elf64_Sym);
-	chains = kcalloc(nsyms, sizeof(struct got_entry), GFP_KERNEL);
+	chains = kzalloc_objs(struct got_entry, nsyms, GFP_KERNEL);
 	if (!chains) {
 		printk(KERN_ERR
 		       "module %s: no memory for symbol chain buffer\n",
diff --git a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c
index 8e9b4ac86b7e..93eb07018e6b 100644
--- a/arch/alpha/kernel/pci.c
+++ b/arch/alpha/kernel/pci.c
@@ -220,7 +220,7 @@ static void pdev_save_srm_config(struct pci_dev *dev)
 		printed = 1;
 	}

-	tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kmalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp) {
 		printk(KERN_ERR "%s: kmalloc() failed!\n", __func__);
 		return;
diff --git a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c
index f0af444a69a4..ea4e7243c0e9 100644
--- a/arch/alpha/kernel/setup.c
+++ b/arch/alpha/kernel/setup.c
@@ -392,7 +392,7 @@ register_cpus(void)
 	int i;

 	for_each_possible_cpu(i) {
-		struct cpu *p = kzalloc(sizeof(*p), GFP_KERNEL);
+		struct cpu *p = kzalloc_obj(*p, GFP_KERNEL);
 		if (!p)
 			return -ENOMEM;
 		register_cpu(p, i);
diff --git a/arch/arc/kernel/unwind.c b/arch/arc/kernel/unwind.c
index 789cfb9ea14e..dcdc8bd916db 100644
--- a/arch/arc/kernel/unwind.c
+++ b/arch/arc/kernel/unwind.c
@@ -366,7 +366,7 @@ void *unwind_add_table(struct module *module, const void *table_start,
 	if (table_size <= 0)
 		return NULL;

-	table = kmalloc(sizeof(*table), GFP_KERNEL);
+	table = kmalloc_obj(*table, GFP_KERNEL);
 	if (!table)
 		return NULL;

diff --git a/arch/arc/net/bpf_jit_core.c b/arch/arc/net/bpf_jit_core.c
index e3628922c24a..5695da795536 100644
--- a/arch/arc/net/bpf_jit_core.c
+++ b/arch/arc/net/bpf_jit_core.c
@@ -1140,7 +1140,7 @@ static int jit_prepare_final_mem_alloc(struct jit_context *ctx)
 	}

 	if (ctx->need_extra_pass) {
-		ctx->jit_data = kzalloc(sizeof(*ctx->jit_data), GFP_KERNEL);
+		ctx->jit_data = kzalloc_obj(*ctx->jit_data, GFP_KERNEL);
 		if (!ctx->jit_data)
 			return -ENOMEM;
 	}
diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
index cb6ef449b987..4820b1094dfa 100644
--- a/arch/arm/common/locomo.c
+++ b/arch/arm/common/locomo.c
@@ -222,7 +222,7 @@ locomo_init_one_child(struct locomo *lchip, struct locomo_dev_info *info)
 	struct locomo_dev *dev;
 	int ret;

-	dev = kzalloc(sizeof(struct locomo_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct locomo_dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto out;
@@ -277,7 +277,7 @@ static int locomo_suspend(struct platform_device *dev, pm_message_t state)
 	struct locomo_save_data *save;
 	unsigned long flags;

-	save = kmalloc(sizeof(struct locomo_save_data), GFP_KERNEL);
+	save = kmalloc_obj(struct locomo_save_data, GFP_KERNEL);
 	if (!save)
 		return -ENOMEM;

@@ -360,7 +360,7 @@ __locomo_probe(struct device *me, struct resource *mem, int irq)
 	unsigned long r;
 	int i, ret = -ENODEV;

-	lchip = kzalloc(sizeof(struct locomo), GFP_KERNEL);
+	lchip = kzalloc_obj(struct locomo, GFP_KERNEL);
 	if (!lchip)
 		return -ENOMEM;

diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index 04ff75dcc20e..8bd217789439 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -737,7 +737,7 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
 	unsigned i;
 	int ret;

-	dev = kzalloc(sizeof(struct sa1111_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct sa1111_dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err_alloc;
@@ -969,7 +969,7 @@ static int sa1111_suspend_noirq(struct device *dev)
 	unsigned int val;
 	void __iomem *base;

-	save = kmalloc(sizeof(struct sa1111_save_data), GFP_KERNEL);
+	save = kmalloc_obj(struct sa1111_save_data, GFP_KERNEL);
 	if (!save)
 		return -ENOMEM;
 	sachip->saved_state = save;
diff --git a/arch/arm/common/scoop.c b/arch/arm/common/scoop.c
index dddb73c96826..10e8e9716bd3 100644
--- a/arch/arm/common/scoop.c
+++ b/arch/arm/common/scoop.c
@@ -185,7 +185,7 @@ static int scoop_probe(struct platform_device *pdev)
 	if (!mem)
 		return -EINVAL;

-	devptr = kzalloc(sizeof(struct scoop_dev), GFP_KERNEL);
+	devptr = kzalloc_obj(struct scoop_dev, GFP_KERNEL);
 	if (!devptr)
 		return -ENOMEM;

diff --git a/arch/arm/kernel/atags_proc.c b/arch/arm/kernel/atags_proc.c
index cd09f8ab93e3..6106385d25a0 100644
--- a/arch/arm/kernel/atags_proc.c
+++ b/arch/arm/kernel/atags_proc.c
@@ -54,7 +54,7 @@ static int __init init_atags_procfs(void)

 	WARN_ON(tag->hdr.tag != ATAG_NONE);

-	b = kmalloc(struct_size(b, data, size), GFP_KERNEL);
+	b = kmalloc_flex(*b, data, size, GFP_KERNEL);
 	if (!b)
 		goto nomem;

diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 50999886a8b5..504f22b420a8 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -108,7 +108,7 @@ static unsigned long get_arch_pgd(pgd_t *pgd)
 static int secondary_biglittle_prepare(unsigned int cpu)
 {
 	if (!cpu_vtable[cpu])
-		cpu_vtable[cpu] = kzalloc(sizeof(*cpu_vtable[cpu]), GFP_KERNEL);
+		cpu_vtable[cpu] = kzalloc_obj(*cpu_vtable[cpu], GFP_KERNEL);

 	return cpu_vtable[cpu] ? 0 : -ENOMEM;
 }
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c
index 2944721e82a2..fe73d759d078 100644
--- a/arch/arm/kernel/sys_oabi-compat.c
+++ b/arch/arm/kernel/sys_oabi-compat.c
@@ -349,7 +349,7 @@ asmlinkage long sys_oabi_semtimedop(int semid,
 		return -E2BIG;
 	if (nsops < 1 || nsops > SEMOPM)
 		return -EINVAL;
-	sops = kvmalloc_array(nsops, sizeof(*sops), GFP_KERNEL);
+	sops = kvmalloc_objs(*sops, nsops, GFP_KERNEL);
 	if (!sops)
 		return -ENOMEM;
 	err = 0;
diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c
index f60547dadc93..2b40c22234a9 100644
--- a/arch/arm/kernel/unwind.c
+++ b/arch/arm/kernel/unwind.c
@@ -574,7 +574,7 @@ struct unwind_table *unwind_table_add(unsigned long start, unsigned long size,
 				      unsigned long text_size)
 {
 	unsigned long flags;
-	struct unwind_table *tab = kmalloc(sizeof(*tab), GFP_KERNEL);
+	struct unwind_table *tab = kmalloc_obj(*tab, GFP_KERNEL);

 	pr_debug("%s(%08lx, %08lx, %08lx, %08lx)\n", __func__, start, size,
 		 text_addr, text_size);
diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c
index 0108f33d6bed..884f1899dfba 100644
--- a/arch/arm/kernel/vdso.c
+++ b/arch/arm/kernel/vdso.c
@@ -179,8 +179,7 @@ static int __init vdso_init(void)
 	text_pages = (vdso_end - vdso_start) >> PAGE_SHIFT;

 	/* Allocate the VDSO text pagelist */
-	vdso_text_pagelist = kcalloc(text_pages, sizeof(struct page *),
-				     GFP_KERNEL);
+	vdso_text_pagelist = kzalloc_objs(struct page *, text_pages, GFP_KERNEL);
 	if (vdso_text_pagelist == NULL)
 		return -ENOMEM;

diff --git a/arch/arm/mach-footbridge/dc21285.c b/arch/arm/mach-footbridge/dc21285.c
index 6521ab3d24fa..765a97a30b8a 100644
--- a/arch/arm/mach-footbridge/dc21285.c
+++ b/arch/arm/mach-footbridge/dc21285.c
@@ -262,7 +262,7 @@ int __init dc21285_setup(int nr, struct pci_sys_data *sys)
 {
 	struct resource *res;

-	res = kcalloc(2, sizeof(struct resource), GFP_KERNEL);
+	res = kzalloc_objs(struct resource, 2, GFP_KERNEL);
 	if (!res) {
 		printk("out of memory for root bus resources");
 		return 0;
diff --git a/arch/arm/mach-footbridge/ebsa285.c b/arch/arm/mach-footbridge/ebsa285.c
index 21cf9a358b90..d75fc4b541f1 100644
--- a/arch/arm/mach-footbridge/ebsa285.c
+++ b/arch/arm/mach-footbridge/ebsa285.c
@@ -84,7 +84,7 @@ static int __init ebsa285_leds_init(void)
 	for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) {
 		struct ebsa285_led *led;

-		led = kzalloc(sizeof(*led), GFP_KERNEL);
+		led = kzalloc_obj(*led, GFP_KERNEL);
 		if (!led)
 			break;

diff --git a/arch/arm/mach-footbridge/netwinder-hw.c b/arch/arm/mach-footbridge/netwinder-hw.c
index 5f7265b1b34c..ae5cf7f1f74a 100644
--- a/arch/arm/mach-footbridge/netwinder-hw.c
+++ b/arch/arm/mach-footbridge/netwinder-hw.c
@@ -727,7 +727,7 @@ static int __init netwinder_leds_init(void)
 	for (i = 0; i < ARRAY_SIZE(netwinder_leds); i++) {
 		struct netwinder_led *led;

-		led = kzalloc(sizeof(*led), GFP_KERNEL);
+		led = kzalloc_obj(*led, GFP_KERNEL);
 		if (!led)
 			break;

diff --git a/arch/arm/mach-imx/mmdc.c b/arch/arm/mach-imx/mmdc.c
index 94e4f4a2f73f..d1d1ef3aa927 100644
--- a/arch/arm/mach-imx/mmdc.c
+++ b/arch/arm/mach-imx/mmdc.c
@@ -477,7 +477,7 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
 	char *name;
 	int ret;

-	pmu_mmdc = kzalloc(sizeof(*pmu_mmdc), GFP_KERNEL);
+	pmu_mmdc = kzalloc_obj(*pmu_mmdc, GFP_KERNEL);
 	if (!pmu_mmdc) {
 		pr_err("failed to allocate PMU device!\n");
 		return -ENOMEM;
diff --git a/arch/arm/mach-mvebu/board-v7.c b/arch/arm/mach-mvebu/board-v7.c
index 04ad651d13a0..f7f142d6e49e 100644
--- a/arch/arm/mach-mvebu/board-v7.c
+++ b/arch/arm/mach-mvebu/board-v7.c
@@ -127,7 +127,7 @@ static void __init i2c_quirk(void)
 	for_each_compatible_node(np, NULL, "marvell,mv78230-i2c") {
 		struct property *new_compat;

-		new_compat = kzalloc(sizeof(*new_compat), GFP_KERNEL);
+		new_compat = kzalloc_obj(*new_compat, GFP_KERNEL);

 		new_compat->name = kstrdup("compatible", GFP_KERNEL);
 		new_compat->length = sizeof("marvell,mv78230-a0-i2c");
diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
index a6b621ff0b87..4af0df12f654 100644
--- a/arch/arm/mach-mvebu/coherency.c
+++ b/arch/arm/mach-mvebu/coherency.c
@@ -190,7 +190,7 @@ static void __init armada_375_380_coherency_init(struct device_node *np)
 	for_each_compatible_node(cache_dn, NULL, "arm,pl310-cache") {
 		struct property *p;

-		p = kzalloc(sizeof(*p), GFP_KERNEL);
+		p = kzalloc_obj(*p, GFP_KERNEL);
 		p->name = kstrdup("arm,io-coherent", GFP_KERNEL);
 		of_add_property(cache_dn, p);
 	}
diff --git a/arch/arm/mach-mvebu/mvebu-soc-id.c b/arch/arm/mach-mvebu/mvebu-soc-id.c
index f436c7b8c7ae..ea4159a5b567 100644
--- a/arch/arm/mach-mvebu/mvebu-soc-id.c
+++ b/arch/arm/mach-mvebu/mvebu-soc-id.c
@@ -154,7 +154,7 @@ static int __init mvebu_soc_device(void)
 	if (!is_id_valid)
 		return 0;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c
index 6e017fa306c8..24dd8a0c6567 100644
--- a/arch/arm/mach-mxs/mach-mxs.c
+++ b/arch/arm/mach-mxs/mach-mxs.c
@@ -387,7 +387,7 @@ static void __init mxs_machine_init(void)
 	const u32 *ocotp = mxs_get_ocotp();
 	int ret;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return;

diff --git a/arch/arm/mach-omap1/dma.c b/arch/arm/mach-omap1/dma.c
index 756966cb715f..491254010c0c 100644
--- a/arch/arm/mach-omap1/dma.c
+++ b/arch/arm/mach-omap1/dma.c
@@ -319,7 +319,7 @@ static int __init omap1_system_dma_init(void)
 		goto exit_iounmap;
 	}

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		ret = -ENOMEM;
 		goto exit_iounmap;
diff --git a/arch/arm/mach-omap1/mcbsp.c b/arch/arm/mach-omap1/mcbsp.c
index 37863bdce9ea..a4dae1baae99 100644
--- a/arch/arm/mach-omap1/mcbsp.c
+++ b/arch/arm/mach-omap1/mcbsp.c
@@ -294,8 +294,8 @@ static void omap_mcbsp_register_board_cfg(struct resource *res, int res_count,
 {
 	int i;

-	omap_mcbsp_devices = kcalloc(size, sizeof(struct platform_device *),
-				     GFP_KERNEL);
+	omap_mcbsp_devices = kzalloc_objs(struct platform_device *, size,
+					  GFP_KERNEL);
 	if (!omap_mcbsp_devices) {
 		printk(KERN_ERR "Could not register McBSP devices\n");
 		return;
diff --git a/arch/arm/mach-omap1/timer.c b/arch/arm/mach-omap1/timer.c
index 81a912c1145a..09dab51d5728 100644
--- a/arch/arm/mach-omap1/timer.c
+++ b/arch/arm/mach-omap1/timer.c
@@ -125,7 +125,7 @@ static int __init omap1_dm_timer_init(void)
 			goto err_free_pdev;
 		}

-		pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+		pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 		if (!pdata) {
 			ret = -ENOMEM;
 			goto err_free_pdata;
diff --git a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c
index 96c5cdc718c8..0b9d4c7b6711 100644
--- a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c
+++ b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c
@@ -237,7 +237,7 @@ void omap2xxx_clkt_vps_init(void)
 	omap2xxx_clkt_vps_late_init();
 	omap2xxx_clkt_vps_check_bootloader_rates();

-	hw = kzalloc(sizeof(*hw), GFP_KERNEL);
+	hw = kzalloc_obj(*hw, GFP_KERNEL);
 	if (!hw)
 		return;
 	init.name = "virt_prcm_set";
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index 7f387706368a..fd9e4146db35 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -787,7 +787,7 @@ void __init omap_soc_device_init(void)
 	struct soc_device *soc_dev;
 	struct soc_device_attribute *soc_dev_attr;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return;

diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c
index 9c8a85198e16..debc3f0d0184 100644
--- a/arch/arm/mach-omap2/omap-iommu.c
+++ b/arch/arm/mach-omap2/omap-iommu.c
@@ -99,7 +99,7 @@ static struct powerdomain *_get_pwrdm(struct device *dev)
 		return NULL;
 	}

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (entry) {
 		entry->dev = dev;
 		entry->pwrdm = pwrdm;
diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
index 800980057373..ab8adccbd7dd 100644
--- a/arch/arm/mach-omap2/omap_device.c
+++ b/arch/arm/mach-omap2/omap_device.c
@@ -156,7 +156,7 @@ static int omap_device_build_from_dt(struct platform_device *pdev)
 	    !omap_hwmod_parse_module_range(NULL, node, &res))
 		return -ENODEV;

-	hwmods = kcalloc(oh_cnt, sizeof(struct omap_hwmod *), GFP_KERNEL);
+	hwmods = kzalloc_objs(struct omap_hwmod *, oh_cnt, GFP_KERNEL);
 	if (!hwmods) {
 		ret = -ENOMEM;
 		goto odbfd_exit;
@@ -309,7 +309,7 @@ static struct omap_device *omap_device_alloc(struct platform_device *pdev,
 	int i;
 	struct omap_hwmod **hwmods;

-	od = kzalloc(sizeof(struct omap_device), GFP_KERNEL);
+	od = kzalloc_obj(struct omap_device, GFP_KERNEL);
 	if (!od)
 		goto oda_exit1;

diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
index 111677878d9c..3591ca1f59c6 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -3392,7 +3392,7 @@ static int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh,
 	void __iomem *regs = NULL;
 	unsigned long flags;

-	sysc = kzalloc(sizeof(*sysc), GFP_KERNEL);
+	sysc = kzalloc_obj(*sysc, GFP_KERNEL);
 	if (!sysc)
 		return -ENOMEM;

@@ -3422,7 +3422,7 @@ static int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh,
 	}

 	if (list_empty(&oh->slave_ports)) {
-		oi = kzalloc(sizeof(*oi), GFP_KERNEL);
+		oi = kzalloc_obj(*oi, GFP_KERNEL);
 		if (!oi)
 			goto out_free_class;

@@ -3525,7 +3525,7 @@ int omap_hwmod_init_module(struct device *dev,

 	oh = _lookup(data->name);
 	if (!oh) {
-		oh = kzalloc(sizeof(*oh), GFP_KERNEL);
+		oh = kzalloc_obj(*oh, GFP_KERNEL);
 		if (!oh)
 			return -ENOMEM;

@@ -3536,7 +3536,7 @@ int omap_hwmod_init_module(struct device *dev,
 		/* Unused, can be handled by PRM driver handling resets */
 		oh->prcm.omap4.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT;

-		oh->class = kzalloc(sizeof(*oh->class), GFP_KERNEL);
+		oh->class = kzalloc_obj(*oh->class, GFP_KERNEL);
 		if (!oh->class) {
 			kfree(oh);
 			return -ENOMEM;
diff --git a/arch/arm/mach-omap2/pm33xx-core.c b/arch/arm/mach-omap2/pm33xx-core.c
index 4abb86dc98fd..e3f47fb2d4ef 100644
--- a/arch/arm/mach-omap2/pm33xx-core.c
+++ b/arch/arm/mach-omap2/pm33xx-core.c
@@ -410,7 +410,7 @@ static int __init amx3_idle_init(struct device_node *cpu_node, int cpu)
 		state_count++;
 	}

-	idle_states = kcalloc(state_count, sizeof(*idle_states), GFP_KERNEL);
+	idle_states = kzalloc_objs(*idle_states, state_count, GFP_KERNEL);
 	if (!idle_states)
 		return -ENOMEM;

diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 68975771e633..9992549c7336 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -410,7 +410,7 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
 	if (!pwrdm->pwrsts)
 		return 0;

-	pwrst = kmalloc(sizeof(struct power_state), GFP_ATOMIC);
+	pwrst = kmalloc_obj(struct power_state, GFP_ATOMIC);
 	if (!pwrst)
 		return -ENOMEM;
 	pwrst->pwrdm = pwrdm;
diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c
index 37b168119fe4..554352e9e1c6 100644
--- a/arch/arm/mach-omap2/pm44xx.c
+++ b/arch/arm/mach-omap2/pm44xx.c
@@ -132,7 +132,7 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
 	    !strncmp(pwrdm->name, "l4per", 5))
 		pwrdm_set_logic_retst(pwrdm, PWRDM_POWER_OFF);

-	pwrst = kmalloc(sizeof(struct power_state), GFP_ATOMIC);
+	pwrst = kmalloc_obj(struct power_state, GFP_ATOMIC);
 	if (!pwrst)
 		return -ENOMEM;

diff --git a/arch/arm/mach-omap2/sr_device.c b/arch/arm/mach-omap2/sr_device.c
index d2133423b0c9..9d1a14771590 100644
--- a/arch/arm/mach-omap2/sr_device.c
+++ b/arch/arm/mach-omap2/sr_device.c
@@ -39,7 +39,7 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data,
 	while (volt_data[count].volt_nominal)
 		count++;

-	nvalue_table = kcalloc(count, sizeof(*nvalue_table), GFP_KERNEL);
+	nvalue_table = kzalloc_objs(*nvalue_table, count, GFP_KERNEL);
 	if (!nvalue_table)
 		return;

diff --git a/arch/arm/mach-orion5x/pci.c b/arch/arm/mach-orion5x/pci.c
index 3313bc5a63ea..2ee1ff7335db 100644
--- a/arch/arm/mach-orion5x/pci.c
+++ b/arch/arm/mach-orion5x/pci.c
@@ -169,7 +169,7 @@ static int __init pcie_setup(struct pci_sys_data *sys)
 	/*
 	 * Request resources.
 	 */
-	res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+	res = kzalloc_obj(struct resource, GFP_KERNEL);
 	if (!res)
 		panic("pcie_setup unable to alloc resources");

@@ -490,7 +490,7 @@ static int __init pci_setup(struct pci_sys_data *sys)
 	/*
 	 * Request resources
 	 */
-	res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+	res = kzalloc_obj(struct resource, GFP_KERNEL);
 	if (!res)
 		panic("pci_setup unable to alloc resources");

diff --git a/arch/arm/mach-rpc/ecard.c b/arch/arm/mach-rpc/ecard.c
index 2cde4c83b7f9..9f0edac1697c 100644
--- a/arch/arm/mach-rpc/ecard.c
+++ b/arch/arm/mach-rpc/ecard.c
@@ -692,7 +692,7 @@ static struct expansion_card *__init ecard_alloc_card(int type, int slot)
 	unsigned long base;
 	int i;

-	ec = kzalloc(sizeof(ecard_t), GFP_KERNEL);
+	ec = kzalloc_obj(ecard_t, GFP_KERNEL);
 	if (!ec) {
 		ec = ERR_PTR(-ENOMEM);
 		goto nomem;
diff --git a/arch/arm/mach-sa1100/clock.c b/arch/arm/mach-sa1100/clock.c
index e8691921c69a..e4c7a0b78783 100644
--- a/arch/arm/mach-sa1100/clock.c
+++ b/arch/arm/mach-sa1100/clock.c
@@ -107,7 +107,7 @@ int __init sa11xx_clk_init(void)

 	clk_hw_register_clkdev(hw, "OSTIMER0", NULL);

-	hw = kzalloc(sizeof(*hw), GFP_KERNEL);
+	hw = kzalloc_obj(*hw, GFP_KERNEL);
 	if (!hw)
 		return -ENOMEM;
 	hw->init = &clk_mpll_init_data;
@@ -129,7 +129,7 @@ int __init sa11xx_clk_init(void)
 				 FAlnMsk(TUCR_TSEL), 0, &tucr_lock);
 	clk_set_rate(hw->clk, 3686400);

-	hw = kzalloc(sizeof(*hw), GFP_KERNEL);
+	hw = kzalloc_obj(*hw, GFP_KERNEL);
 	if (!hw)
 		return -ENOMEM;
 	hw->init = &clk_gpio27_init_data;
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c
index 5383a26f5116..078667b52b8a 100644
--- a/arch/arm/mach-sa1100/generic.c
+++ b/arch/arm/mach-sa1100/generic.c
@@ -321,7 +321,7 @@ int __init sa11x0_register_fixed_regulator(int n,
 {
 	struct regulator_init_data *id;

-	cfg->init_data = id = kzalloc(sizeof(*cfg->init_data), GFP_KERNEL);
+	cfg->init_data = id = kzalloc_obj(*cfg->init_data, GFP_KERNEL);
 	if (!cfg->init_data)
 		return -ENOMEM;

diff --git a/arch/arm/mach-sa1100/neponset.c b/arch/arm/mach-sa1100/neponset.c
index 88fe79f0a4ed..f8960373fa06 100644
--- a/arch/arm/mach-sa1100/neponset.c
+++ b/arch/arm/mach-sa1100/neponset.c
@@ -276,7 +276,7 @@ static int neponset_probe(struct platform_device *dev)
 		goto err_alloc;
 	}

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		ret = -ENOMEM;
 		goto err_alloc;
diff --git a/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c b/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
index 117e7b07995b..c6659131f21b 100644
--- a/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
@@ -164,7 +164,7 @@ static int __init rcar_gen2_regulator_quirk(void)
 		if (ret)	/* Skip invalid entry and continue */
 			continue;

-		quirk = kzalloc(sizeof(*quirk), GFP_KERNEL);
+		quirk = kzalloc_obj(*quirk, GFP_KERNEL);
 		if (!quirk) {
 			ret = -ENOMEM;
 			of_node_put(np);
diff --git a/arch/arm/mach-versatile/spc.c b/arch/arm/mach-versatile/spc.c
index 2d27777a00d3..d77ed8ce5f32 100644
--- a/arch/arm/mach-versatile/spc.c
+++ b/arch/arm/mach-versatile/spc.c
@@ -395,7 +395,7 @@ static int ve_spc_populate_opps(uint32_t cluster)
 	uint32_t data = 0, off, ret, idx;
 	struct ve_spc_opp *opps;

-	opps = kcalloc(MAX_OPPS, sizeof(*opps), GFP_KERNEL);
+	opps = kzalloc_objs(*opps, MAX_OPPS, GFP_KERNEL);
 	if (!opps)
 		return -ENOMEM;

@@ -442,7 +442,7 @@ static int ve_init_opp_table(struct device *cpu_dev)
 int __init ve_spc_init(void __iomem *baseaddr, u32 a15_clusid, int irq)
 {
 	int ret;
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -525,7 +525,7 @@ static struct clk *ve_spc_clk_register(struct device *cpu_dev)
 	struct clk_init_data init;
 	struct clk_spc *spc;

-	spc = kzalloc(sizeof(*spc), GFP_KERNEL);
+	spc = kzalloc_obj(*spc, GFP_KERNEL);
 	if (!spc)
 		return ERR_PTR(-ENOMEM);

diff --git a/arch/arm/mach-versatile/versatile.c b/arch/arm/mach-versatile/versatile.c
index f0c80d4663ca..53d02ce2ad43 100644
--- a/arch/arm/mach-versatile/versatile.c
+++ b/arch/arm/mach-versatile/versatile.c
@@ -142,7 +142,7 @@ static void __init versatile_dt_pci_init(void)
 		goto out_put_node;
 	}

-	newprop = kzalloc(sizeof(*newprop), GFP_KERNEL);
+	newprop = kzalloc_obj(*newprop, GFP_KERNEL);
 	if (!newprop)
 		goto out_put_node;

diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c
index 15e8a321a713..ddb06d5ca55d 100644
--- a/arch/arm/mach-zynq/common.c
+++ b/arch/arm/mach-zynq/common.c
@@ -108,7 +108,7 @@ static void __init zynq_init_machine(void)
 	struct soc_device *soc_dev;
 	struct device *parent = NULL;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		goto out;

diff --git a/arch/arm/mm/cache-l2x0-pmu.c b/arch/arm/mm/cache-l2x0-pmu.c
index 93ef0502b7ff..3d62bd48086b 100644
--- a/arch/arm/mm/cache-l2x0-pmu.c
+++ b/arch/arm/mm/cache-l2x0-pmu.c
@@ -507,7 +507,7 @@ static __init int l2x0_pmu_init(void)
 	if (!l2x0_base)
 		return 0;

-	l2x0_pmu = kzalloc(sizeof(*l2x0_pmu), GFP_KERNEL);
+	l2x0_pmu = kzalloc_obj(*l2x0_pmu, GFP_KERNEL);
 	if (!l2x0_pmu) {
 		pr_warn("Unable to allocate L2x0 PMU\n");
 		return -ENOMEM;
diff --git a/arch/arm/mm/cache-uniphier.c b/arch/arm/mm/cache-uniphier.c
index 84a2f17ff32d..c601532f7a77 100644
--- a/arch/arm/mm/cache-uniphier.c
+++ b/arch/arm/mm/cache-uniphier.c
@@ -342,7 +342,7 @@ static int __init __uniphier_cache_init(struct device_node *np,
 		return -EINVAL;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index a4c765d24692..7aca3e747ad5 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -558,8 +558,8 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
 	}
 #endif

-	buf = kzalloc(sizeof(*buf),
-		      gfp & ~(__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM));
+	buf = kzalloc_obj(*buf,
+			  gfp & ~(__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM));
 	if (!buf)
 		return NULL;

@@ -1504,7 +1504,7 @@ arm_iommu_create_mapping(struct device *dev, dma_addr_t base, u64 size)
 		bitmap_size = PAGE_SIZE;
 	}

-	mapping = kzalloc(sizeof(struct dma_iommu_mapping), GFP_KERNEL);
+	mapping = kzalloc_obj(struct dma_iommu_mapping, GFP_KERNEL);
 	if (!mapping)
 		goto err;

diff --git a/arch/arm/mm/pgd.c b/arch/arm/mm/pgd.c
index 4eb81b7ed03a..447945836c3f 100644
--- a/arch/arm/mm/pgd.c
+++ b/arch/arm/mm/pgd.c
@@ -17,7 +17,7 @@
 #include "mm.h"

 #ifdef CONFIG_ARM_LPAE
-#define _pgd_alloc(mm)		kmalloc_array(PTRS_PER_PGD, sizeof(pgd_t), GFP_KERNEL | __GFP_ZERO)
+#define _pgd_alloc(mm)		kmalloc_objs(pgd_t, PTRS_PER_PGD, GFP_KERNEL | __GFP_ZERO)
 #define _pgd_free(mm, pgd)	kfree(pgd)
 #else
 #define _pgd_alloc(mm)		__pgd_alloc(mm, 2)
diff --git a/arch/arm/probes/kprobes/test-core.c b/arch/arm/probes/kprobes/test-core.c
index 171c7076b89f..ef93f2f1db62 100644
--- a/arch/arm/probes/kprobes/test-core.c
+++ b/arch/arm/probes/kprobes/test-core.c
@@ -763,9 +763,8 @@ static int coverage_start_fn(const struct decode_header *h, void *args)

 static int coverage_start(const union decode_item *table)
 {
-	coverage.base = kmalloc_array(MAX_COVERAGE_ENTRIES,
-				      sizeof(struct coverage_entry),
-				      GFP_KERNEL);
+	coverage.base = kmalloc_objs(struct coverage_entry,
+				     MAX_COVERAGE_ENTRIES, GFP_KERNEL);
 	coverage.num_entries = 0;
 	coverage.nesting = 0;
 	return table_iter(table, coverage_start_fn, &coverage);
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index 8655bc3d3634..9c3e6145b810 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -339,7 +339,7 @@ int __init arch_xen_unpopulated_init(struct resource **res)
 		return -EINVAL;
 	}

-	regs = kcalloc(nr_reg, sizeof(*regs), GFP_KERNEL);
+	regs = kzalloc_objs(*regs, nr_reg, GFP_KERNEL);
 	if (!regs) {
 		of_node_put(np);
 		return -ENOMEM;
@@ -383,7 +383,7 @@ int __init arch_xen_unpopulated_init(struct resource **res)
 		start = regs[i - 1].end + 1;
 		end = regs[i].start - 1;

-		tmp_res = kzalloc(sizeof(*tmp_res), GFP_KERNEL);
+		tmp_res = kzalloc_obj(*tmp_res, GFP_KERNEL);
 		if (!tmp_res) {
 			rc = -ENOMEM;
 			goto err;
diff --git a/arch/arm/xen/p2m.c b/arch/arm/xen/p2m.c
index 9da57a5b81c7..d911d91d5832 100644
--- a/arch/arm/xen/p2m.c
+++ b/arch/arm/xen/p2m.c
@@ -176,7 +176,7 @@ bool __set_phys_to_machine_multi(unsigned long pfn,
 		return true;
 	}

-	p2m_entry = kzalloc(sizeof(*p2m_entry), GFP_NOWAIT);
+	p2m_entry = kzalloc_obj(*p2m_entry, GFP_NOWAIT);
 	if (!p2m_entry)
 		return false;

diff --git a/arch/arm64/kernel/machine_kexec_file.c b/arch/arm64/kernel/machine_kexec_file.c
index 410060ebd86d..9038d46dacf5 100644
--- a/arch/arm64/kernel/machine_kexec_file.c
+++ b/arch/arm64/kernel/machine_kexec_file.c
@@ -52,7 +52,7 @@ static int prepare_elf_headers(void **addr, unsigned long *sz)
 	for_each_mem_range(i, &start, &end)
 		nr_ranges++;

-	cmem = kmalloc(struct_size(cmem, ranges, nr_ranges), GFP_KERNEL);
+	cmem = kmalloc_flex(*cmem, ranges, nr_ranges, GFP_KERNEL);
 	if (!cmem)
 		return -ENOMEM;

diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
index 78ddf6bdecad..34d761ef08b0 100644
--- a/arch/arm64/kernel/vdso.c
+++ b/arch/arm64/kernel/vdso.c
@@ -81,9 +81,8 @@ static int __init __vdso_init(enum vdso_abi abi)
 			vdso_info[abi].vdso_code_start) >>
 			PAGE_SHIFT;

-	vdso_pagelist = kcalloc(vdso_info[abi].vdso_pages,
-				sizeof(struct page *),
-				GFP_KERNEL);
+	vdso_pagelist = kzalloc_objs(struct page *, vdso_info[abi].vdso_pages,
+				     GFP_KERNEL);
 	if (vdso_pagelist == NULL)
 		return -ENOMEM;

diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index 94d5b0b99fd1..29f0326f7e00 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -854,8 +854,8 @@ static void kvm_init_mpidr_data(struct kvm *kvm)
 	 * iterative method. Single vcpu VMs do not need this either.
 	 */
 	if (struct_size(data, cmpidr_to_idx, nr_entries) <= PAGE_SIZE)
-		data = kzalloc(struct_size(data, cmpidr_to_idx, nr_entries),
-			       GFP_KERNEL_ACCOUNT);
+		data = kzalloc_flex(*data, cmpidr_to_idx, nr_entries,
+				    GFP_KERNEL_ACCOUNT);

 	if (!data)
 		goto out;
diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
index 8c5d259810b2..f6d8b294525d 100644
--- a/arch/arm64/kvm/mmu.c
+++ b/arch/arm64/kvm/mmu.c
@@ -487,7 +487,7 @@ static int share_pfn_hyp(u64 pfn)
 		goto unlock;
 	}

-	this = kzalloc(sizeof(*this), GFP_KERNEL);
+	this = kzalloc_obj(*this, GFP_KERNEL);
 	if (!this) {
 		ret = -ENOMEM;
 		goto unlock;
@@ -978,7 +978,7 @@ int kvm_init_stage2_mmu(struct kvm *kvm, struct kvm_s2_mmu *mmu, unsigned long t
 	if (err)
 		return err;

-	pgt = kzalloc(sizeof(*pgt), GFP_KERNEL_ACCOUNT);
+	pgt = kzalloc_obj(*pgt, GFP_KERNEL_ACCOUNT);
 	if (!pgt)
 		return -ENOMEM;

@@ -1155,7 +1155,8 @@ int topup_hyp_memcache(struct kvm_hyp_memcache *mc, unsigned long min_pages)
 		return 0;

 	if (!mc->mapping) {
-		mc->mapping = kzalloc(sizeof(struct pkvm_mapping), GFP_KERNEL_ACCOUNT);
+		mc->mapping = kzalloc_obj(struct pkvm_mapping,
+					  GFP_KERNEL_ACCOUNT);
 		if (!mc->mapping)
 			return -ENOMEM;
 	}
@@ -2328,7 +2329,7 @@ int __init kvm_mmu_init(u32 hyp_va_bits)
 		goto out;
 	}

-	hyp_pgtable = kzalloc(sizeof(*hyp_pgtable), GFP_KERNEL);
+	hyp_pgtable = kzalloc_obj(*hyp_pgtable, GFP_KERNEL);
 	if (!hyp_pgtable) {
 		kvm_err("Hyp mode page-table not allocated\n");
 		err = -ENOMEM;
diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c
index eeea5e692370..620126d1f0dc 100644
--- a/arch/arm64/kvm/nested.c
+++ b/arch/arm64/kvm/nested.c
@@ -1215,8 +1215,8 @@ int kvm_vcpu_allocate_vncr_tlb(struct kvm_vcpu *vcpu)
 	if (!kvm_has_feat(vcpu->kvm, ID_AA64MMFR4_EL1, NV_frac, NV2_ONLY))
 		return 0;

-	vcpu->arch.vncr_tlb = kzalloc(sizeof(*vcpu->arch.vncr_tlb),
-				      GFP_KERNEL_ACCOUNT);
+	vcpu->arch.vncr_tlb = kzalloc_obj(*vcpu->arch.vncr_tlb,
+					  GFP_KERNEL_ACCOUNT);
 	if (!vcpu->arch.vncr_tlb)
 		return -ENOMEM;

@@ -1704,8 +1704,8 @@ int kvm_init_nv_sysregs(struct kvm_vcpu *vcpu)
 	if (kvm->arch.sysreg_masks)
 		goto out;

-	kvm->arch.sysreg_masks = kzalloc(sizeof(*(kvm->arch.sysreg_masks)),
-					 GFP_KERNEL_ACCOUNT);
+	kvm->arch.sysreg_masks = kzalloc_obj(*(kvm->arch.sysreg_masks),
+					     GFP_KERNEL_ACCOUNT);
 	if (!kvm->arch.sysreg_masks)
 		return -ENOMEM;

diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c
index b03dbda7f1ab..3a7b6e78a949 100644
--- a/arch/arm64/kvm/pmu-emul.c
+++ b/arch/arm64/kvm/pmu-emul.c
@@ -797,7 +797,7 @@ void kvm_host_pmu_init(struct arm_pmu *pmu)

 	guard(mutex)(&arm_pmus_lock);

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return;

diff --git a/arch/arm64/kvm/ptdump.c b/arch/arm64/kvm/ptdump.c
index 6cbe018fd6fd..6a8836207a79 100644
--- a/arch/arm64/kvm/ptdump.c
+++ b/arch/arm64/kvm/ptdump.c
@@ -119,7 +119,7 @@ static struct kvm_ptdump_guest_state *kvm_ptdump_parser_create(struct kvm *kvm)
 	struct kvm_pgtable *pgtable = mmu->pgt;
 	int ret;

-	st = kzalloc(sizeof(struct kvm_ptdump_guest_state), GFP_KERNEL_ACCOUNT);
+	st = kzalloc_obj(struct kvm_ptdump_guest_state, GFP_KERNEL_ACCOUNT);
 	if (!st)
 		return ERR_PTR(-ENOMEM);

diff --git a/arch/arm64/kvm/vgic/vgic-debug.c b/arch/arm64/kvm/vgic/vgic-debug.c
index 2c6776a1779b..fa1de8784617 100644
--- a/arch/arm64/kvm/vgic/vgic-debug.c
+++ b/arch/arm64/kvm/vgic/vgic-debug.c
@@ -104,7 +104,7 @@ static void *vgic_debug_start(struct seq_file *s, loff_t *pos)
 	struct kvm *kvm = s->private;
 	struct vgic_state_iter *iter;

-	iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kmalloc_obj(*iter, GFP_KERNEL);
 	if (!iter)
 		return ERR_PTR(-ENOMEM);

@@ -375,7 +375,7 @@ static void *vgic_its_debug_start(struct seq_file *s, loff_t *pos)
 	if (!dev)
 		return NULL;

-	iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kmalloc_obj(*iter, GFP_KERNEL);
 	if (!iter)
 		return ERR_PTR(-ENOMEM);

diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-init.c
index a53f93546aa0..6eb273100ade 100644
--- a/arch/arm64/kvm/vgic/vgic-init.c
+++ b/arch/arm64/kvm/vgic/vgic-init.c
@@ -199,7 +199,7 @@ static int kvm_vgic_dist_init(struct kvm *kvm, unsigned int nr_spis)
 	int i;

 	dist->active_spis = (atomic_t)ATOMIC_INIT(0);
-	dist->spis = kcalloc(nr_spis, sizeof(struct vgic_irq), GFP_KERNEL_ACCOUNT);
+	dist->spis = kzalloc_objs(struct vgic_irq, nr_spis, GFP_KERNEL_ACCOUNT);
 	if (!dist->spis)
 		return  -ENOMEM;

@@ -269,9 +269,9 @@ static int vgic_allocate_private_irqs_locked(struct kvm_vcpu *vcpu, u32 type)
 	if (vgic_cpu->private_irqs)
 		return 0;

-	vgic_cpu->private_irqs = kcalloc(VGIC_NR_PRIVATE_IRQS,
-					 sizeof(struct vgic_irq),
-					 GFP_KERNEL_ACCOUNT);
+	vgic_cpu->private_irqs = kzalloc_objs(struct vgic_irq,
+					      VGIC_NR_PRIVATE_IRQS,
+					      GFP_KERNEL_ACCOUNT);

 	if (!vgic_cpu->private_irqs)
 		return -ENOMEM;
@@ -654,7 +654,7 @@ static struct gic_kvm_info *gic_kvm_info;
 void __init vgic_set_kvm_info(const struct gic_kvm_info *info)
 {
 	BUG_ON(gic_kvm_info != NULL);
-	gic_kvm_info = kmalloc(sizeof(*gic_kvm_info), GFP_KERNEL);
+	gic_kvm_info = kmalloc_obj(*gic_kvm_info, GFP_KERNEL);
 	if (gic_kvm_info)
 		*gic_kvm_info = *info;
 }
diff --git a/arch/arm64/kvm/vgic/vgic-irqfd.c b/arch/arm64/kvm/vgic/vgic-irqfd.c
index c314c016659a..b9b86e3a6c86 100644
--- a/arch/arm64/kvm/vgic/vgic-irqfd.c
+++ b/arch/arm64/kvm/vgic/vgic-irqfd.c
@@ -140,7 +140,7 @@ int kvm_vgic_setup_default_irq_routing(struct kvm *kvm)
 	u32 nr = dist->nr_spis;
 	int i, ret;

-	entries = kcalloc(nr, sizeof(*entries), GFP_KERNEL_ACCOUNT);
+	entries = kzalloc_objs(*entries, nr, GFP_KERNEL_ACCOUNT);
 	if (!entries)
 		return -ENOMEM;

diff --git a/arch/arm64/kvm/vgic/vgic-its.c b/arch/arm64/kvm/vgic/vgic-its.c
index 3f1c4b10fed9..2ea9f1c7ebcd 100644
--- a/arch/arm64/kvm/vgic/vgic-its.c
+++ b/arch/arm64/kvm/vgic/vgic-its.c
@@ -85,7 +85,7 @@ static struct vgic_irq *vgic_add_lpi(struct kvm *kvm, u32 intid,
 	if (irq)
 		return irq;

-	irq = kzalloc(sizeof(struct vgic_irq), GFP_KERNEL_ACCOUNT);
+	irq = kzalloc_obj(struct vgic_irq, GFP_KERNEL_ACCOUNT);
 	if (!irq)
 		return ERR_PTR(-ENOMEM);

@@ -960,7 +960,7 @@ static int vgic_its_alloc_collection(struct vgic_its *its,
 {
 	struct its_collection *collection;

-	collection = kzalloc(sizeof(*collection), GFP_KERNEL_ACCOUNT);
+	collection = kzalloc_obj(*collection, GFP_KERNEL_ACCOUNT);
 	if (!collection)
 		return -ENOMEM;

@@ -1004,7 +1004,7 @@ static struct its_ite *vgic_its_alloc_ite(struct its_device *device,
 {
 	struct its_ite *ite;

-	ite = kzalloc(sizeof(*ite), GFP_KERNEL_ACCOUNT);
+	ite = kzalloc_obj(*ite, GFP_KERNEL_ACCOUNT);
 	if (!ite)
 		return ERR_PTR(-ENOMEM);

@@ -1131,7 +1131,7 @@ static struct its_device *vgic_its_alloc_device(struct vgic_its *its,
 {
 	struct its_device *device;

-	device = kzalloc(sizeof(*device), GFP_KERNEL_ACCOUNT);
+	device = kzalloc_obj(*device, GFP_KERNEL_ACCOUNT);
 	if (!device)
 		return ERR_PTR(-ENOMEM);

@@ -1846,7 +1846,7 @@ static int vgic_its_create(struct kvm_device *dev, u32 type)
 	if (type != KVM_DEV_TYPE_ARM_VGIC_ITS)
 		return -ENODEV;

-	its = kzalloc(sizeof(struct vgic_its), GFP_KERNEL_ACCOUNT);
+	its = kzalloc_obj(struct vgic_its, GFP_KERNEL_ACCOUNT);
 	if (!its)
 		return -ENOMEM;

diff --git a/arch/arm64/kvm/vgic/vgic-mmio-v3.c b/arch/arm64/kvm/vgic/vgic-mmio-v3.c
index 70d50c77e5dc..89edb84d1ac6 100644
--- a/arch/arm64/kvm/vgic/vgic-mmio-v3.c
+++ b/arch/arm64/kvm/vgic/vgic-mmio-v3.c
@@ -929,7 +929,7 @@ static int vgic_v3_alloc_redist_region(struct kvm *kvm, uint32_t index,
 	if (vgic_v3_rdist_overlap(kvm, base, size))
 		return -EINVAL;

-	rdreg = kzalloc(sizeof(*rdreg), GFP_KERNEL_ACCOUNT);
+	rdreg = kzalloc_obj(*rdreg, GFP_KERNEL_ACCOUNT);
 	if (!rdreg)
 		return -ENOMEM;

diff --git a/arch/arm64/kvm/vgic/vgic-v4.c b/arch/arm64/kvm/vgic/vgic-v4.c
index 09c3e9eb23f8..ed236f083f0d 100644
--- a/arch/arm64/kvm/vgic/vgic-v4.c
+++ b/arch/arm64/kvm/vgic/vgic-v4.c
@@ -256,8 +256,8 @@ int vgic_v4_init(struct kvm *kvm)

 	nr_vcpus = atomic_read(&kvm->online_vcpus);

-	dist->its_vm.vpes = kcalloc(nr_vcpus, sizeof(*dist->its_vm.vpes),
-				    GFP_KERNEL_ACCOUNT);
+	dist->its_vm.vpes = kzalloc_objs(*dist->its_vm.vpes, nr_vcpus,
+					 GFP_KERNEL_ACCOUNT);
 	if (!dist->its_vm.vpes)
 		return -ENOMEM;

diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
index 7a530ea4f5ae..da036853ee8a 100644
--- a/arch/arm64/net/bpf_jit_comp.c
+++ b/arch/arm64/net/bpf_jit_comp.c
@@ -2040,7 +2040,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)

 	jit_data = prog->aux->jit_data;
 	if (!jit_data) {
-		jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
+		jit_data = kzalloc_obj(*jit_data, GFP_KERNEL);
 		if (!jit_data) {
 			prog = orig_prog;
 			goto out;
@@ -2078,7 +2078,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
 	memset(&ctx, 0, sizeof(ctx));
 	ctx.prog = prog;

-	ctx.offset = kvcalloc(prog->len + 1, sizeof(int), GFP_KERNEL);
+	ctx.offset = kvzalloc_objs(int, prog->len + 1, GFP_KERNEL);
 	if (ctx.offset == NULL) {
 		prog = orig_prog;
 		goto out_off;
diff --git a/arch/csky/kernel/vdso.c b/arch/csky/kernel/vdso.c
index c54d019d66bc..0f49ce6919e6 100644
--- a/arch/csky/kernel/vdso.c
+++ b/arch/csky/kernel/vdso.c
@@ -20,7 +20,7 @@ static int __init vdso_init(void)

 	vdso_pages = (vdso_end - vdso_start) >> PAGE_SHIFT;
 	vdso_pagelist =
-		kcalloc(vdso_pages, sizeof(struct page *), GFP_KERNEL);
+		kzalloc_objs(struct page *, vdso_pages, GFP_KERNEL);
 	if (unlikely(vdso_pagelist == NULL)) {
 		pr_err("vdso: pagelist allocation failed\n");
 		return -ENOMEM;
diff --git a/arch/loongarch/kernel/machine_kexec_file.c b/arch/loongarch/kernel/machine_kexec_file.c
index fb57026f5f25..602fe9105381 100644
--- a/arch/loongarch/kernel/machine_kexec_file.c
+++ b/arch/loongarch/kernel/machine_kexec_file.c
@@ -68,7 +68,7 @@ static int prepare_elf_headers(void **addr, unsigned long *sz)
 	for_each_mem_range(i, &start, &end)
 		nr_ranges++;

-	cmem = kmalloc(struct_size(cmem, ranges, nr_ranges), GFP_KERNEL);
+	cmem = kmalloc_flex(*cmem, ranges, nr_ranges, GFP_KERNEL);
 	if (!cmem)
 		return -ENOMEM;

diff --git a/arch/loongarch/kernel/setup.c b/arch/loongarch/kernel/setup.c
index 50a12c518dee..839b23edee87 100644
--- a/arch/loongarch/kernel/setup.c
+++ b/arch/loongarch/kernel/setup.c
@@ -470,7 +470,7 @@ static int __init add_legacy_isa_io(struct fwnode_handle *fwnode,
 	unsigned long vaddr;
 	struct logic_pio_hwaddr *range;

-	range = kzalloc(sizeof(*range), GFP_ATOMIC);
+	range = kzalloc_obj(*range, GFP_ATOMIC);
 	if (!range)
 		return -ENOMEM;

diff --git a/arch/loongarch/kernel/vdso.c b/arch/loongarch/kernel/vdso.c
index dee1a15d7f4c..222be8fc4aec 100644
--- a/arch/loongarch/kernel/vdso.c
+++ b/arch/loongarch/kernel/vdso.c
@@ -52,7 +52,8 @@ static int __init init_vdso(void)

 	vdso_info.size = PAGE_ALIGN(vdso_end - vdso_start);
 	vdso_info.code_mapping.pages =
-		kcalloc(vdso_info.size / PAGE_SIZE, sizeof(struct page *), GFP_KERNEL);
+		kzalloc_objs(struct page *, vdso_info.size / PAGE_SIZE,
+			     GFP_KERNEL);

 	if (!vdso_info.code_mapping.pages)
 		return -ENOMEM;
diff --git a/arch/loongarch/kvm/intc/eiointc.c b/arch/loongarch/kvm/intc/eiointc.c
index e498a3f1e136..fe4173b4a102 100644
--- a/arch/loongarch/kvm/intc/eiointc.c
+++ b/arch/loongarch/kvm/intc/eiointc.c
@@ -622,7 +622,7 @@ static int kvm_eiointc_create(struct kvm_device *dev, u32 type)
 	if (kvm->arch.eiointc)
 		return -EINVAL;

-	s = kzalloc(sizeof(struct loongarch_eiointc), GFP_KERNEL);
+	s = kzalloc_obj(struct loongarch_eiointc, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

diff --git a/arch/loongarch/kvm/intc/ipi.c b/arch/loongarch/kvm/intc/ipi.c
index 6a044a74c095..6e87cefbb3e2 100644
--- a/arch/loongarch/kvm/intc/ipi.c
+++ b/arch/loongarch/kvm/intc/ipi.c
@@ -409,7 +409,7 @@ static int kvm_ipi_create(struct kvm_device *dev, u32 type)
 		return -EINVAL;
 	}

-	s = kzalloc(sizeof(struct loongarch_ipi), GFP_KERNEL);
+	s = kzalloc_obj(struct loongarch_ipi, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

diff --git a/arch/loongarch/kvm/intc/pch_pic.c b/arch/loongarch/kvm/intc/pch_pic.c
index a175f52fcf7f..1fead3f36f4d 100644
--- a/arch/loongarch/kvm/intc/pch_pic.c
+++ b/arch/loongarch/kvm/intc/pch_pic.c
@@ -402,7 +402,7 @@ static int kvm_setup_default_irq_routing(struct kvm *kvm)
 	u32 nr = KVM_IRQCHIP_NUM_PINS;
 	struct kvm_irq_routing_entry *entries;

-	entries = kcalloc(nr, sizeof(*entries), GFP_KERNEL);
+	entries = kzalloc_objs(*entries, nr, GFP_KERNEL);
 	if (!entries)
 		return -ENOMEM;

@@ -432,7 +432,7 @@ static int kvm_pch_pic_create(struct kvm_device *dev, u32 type)
 	if (ret)
 		return -ENOMEM;

-	s = kzalloc(sizeof(struct loongarch_pch_pic), GFP_KERNEL);
+	s = kzalloc_obj(struct loongarch_pch_pic, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

diff --git a/arch/loongarch/kvm/main.c b/arch/loongarch/kvm/main.c
index ac38d0f19dd3..c86f9f5fedb5 100644
--- a/arch/loongarch/kvm/main.c
+++ b/arch/loongarch/kvm/main.c
@@ -358,7 +358,7 @@ static int kvm_loongarch_env_init(void)
 		return -ENOMEM;
 	}

-	kvm_loongarch_ops = kzalloc(sizeof(*kvm_loongarch_ops), GFP_KERNEL);
+	kvm_loongarch_ops = kzalloc_obj(*kvm_loongarch_ops, GFP_KERNEL);
 	if (!kvm_loongarch_ops) {
 		free_percpu(vmcs);
 		vmcs = NULL;
diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c
index 550c0d05666a..483ed31f2008 100644
--- a/arch/loongarch/kvm/vcpu.c
+++ b/arch/loongarch/kvm/vcpu.c
@@ -1547,7 +1547,7 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)

 	vcpu->arch.handle_exit = kvm_handle_exit;
 	vcpu->arch.guest_eentry = (unsigned long)kvm_loongarch_ops->exc_entry;
-	vcpu->arch.csr = kzalloc(sizeof(struct loongarch_csrs), GFP_KERNEL);
+	vcpu->arch.csr = kzalloc_obj(struct loongarch_csrs, GFP_KERNEL);
 	if (!vcpu->arch.csr)
 		return -ENOMEM;

diff --git a/arch/loongarch/kvm/vm.c b/arch/loongarch/kvm/vm.c
index 9681ade890c6..63fd40530aa9 100644
--- a/arch/loongarch/kvm/vm.c
+++ b/arch/loongarch/kvm/vm.c
@@ -68,7 +68,8 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 	if (!kvm->arch.pgd)
 		return -ENOMEM;

-	kvm->arch.phyid_map = kvzalloc(sizeof(struct kvm_phyid_map), GFP_KERNEL_ACCOUNT);
+	kvm->arch.phyid_map = kvzalloc_obj(struct kvm_phyid_map,
+					   GFP_KERNEL_ACCOUNT);
 	if (!kvm->arch.phyid_map) {
 		free_page((unsigned long)kvm->arch.pgd);
 		kvm->arch.pgd = NULL;
diff --git a/arch/loongarch/net/bpf_jit.c b/arch/loongarch/net/bpf_jit.c
index d7de5a87d081..07f876834b24 100644
--- a/arch/loongarch/net/bpf_jit.c
+++ b/arch/loongarch/net/bpf_jit.c
@@ -1943,7 +1943,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)

 	jit_data = prog->aux->jit_data;
 	if (!jit_data) {
-		jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
+		jit_data = kzalloc_obj(*jit_data, GFP_KERNEL);
 		if (!jit_data) {
 			prog = orig_prog;
 			goto out;
diff --git a/arch/loongarch/pci/acpi.c b/arch/loongarch/pci/acpi.c
index 50c9016641a4..324a19d88ca1 100644
--- a/arch/loongarch/pci/acpi.c
+++ b/arch/loongarch/pci/acpi.c
@@ -101,7 +101,7 @@ static struct pci_config_window *arch_pci_ecam_create(struct device *dev,
 	if (busr->start > busr->end)
 		return ERR_PTR(-EINVAL);

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return ERR_PTR(-ENOMEM);

@@ -199,13 +199,13 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
 	int domain = root->segment;
 	int busnum = root->secondary.start;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		pr_warn("pci_bus %04x:%02x: ignored (out of memory)\n", domain, busnum);
 		return NULL;
 	}

-	root_ops = kzalloc(sizeof(*root_ops), GFP_KERNEL);
+	root_ops = kzalloc_obj(*root_ops, GFP_KERNEL);
 	if (!root_ops) {
 		kfree(info);
 		return NULL;
diff --git a/arch/m68k/amiga/chipram.c b/arch/m68k/amiga/chipram.c
index a537953bc10c..388cb652e51e 100644
--- a/arch/m68k/amiga/chipram.c
+++ b/arch/m68k/amiga/chipram.c
@@ -47,7 +47,7 @@ void *amiga_chip_alloc(unsigned long size, const char *name)
 	struct resource *res;
 	void *p;

-	res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+	res = kzalloc_obj(struct resource, GFP_KERNEL);
 	if (!res)
 		return NULL;

diff --git a/arch/m68k/atari/stram.c b/arch/m68k/atari/stram.c
index 922e53bcb853..958c12a29884 100644
--- a/arch/m68k/atari/stram.c
+++ b/arch/m68k/atari/stram.c
@@ -161,7 +161,7 @@ void *atari_stram_alloc(unsigned long size, const char *owner)
 	/* round up */
 	size = PAGE_ALIGN(size);

-	res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+	res = kzalloc_obj(struct resource, GFP_KERNEL);
 	if (!res)
 		return NULL;

diff --git a/arch/m68k/emu/nfblock.c b/arch/m68k/emu/nfblock.c
index 94a4fadc651a..921a96ea83df 100644
--- a/arch/m68k/emu/nfblock.c
+++ b/arch/m68k/emu/nfblock.c
@@ -112,7 +112,7 @@ static int __init nfhd_init_one(int id, u32 blocks, u32 bsize)
 		return -EINVAL;
 	}

-	dev = kmalloc(sizeof(struct nfhd_device), GFP_KERNEL);
+	dev = kmalloc_obj(struct nfhd_device, GFP_KERNEL);
 	if (!dev)
 		goto out;

diff --git a/arch/m68k/mm/kmap.c b/arch/m68k/mm/kmap.c
index 7594a945732b..0ef6e6894a96 100644
--- a/arch/m68k/mm/kmap.c
+++ b/arch/m68k/mm/kmap.c
@@ -110,7 +110,7 @@ static struct vm_struct *get_io_area(unsigned long size)
 	unsigned long addr;
 	struct vm_struct **p, *tmp, *area;

-	area = kmalloc(sizeof(*area), GFP_KERNEL);
+	area = kmalloc_obj(*area, GFP_KERNEL);
 	if (!area)
 		return NULL;
 	addr = KMAP_START;
diff --git a/arch/mips/alchemy/common/clock.c b/arch/mips/alchemy/common/clock.c
index 551b0d21d9dc..7ed84f26ac40 100644
--- a/arch/mips/alchemy/common/clock.c
+++ b/arch/mips/alchemy/common/clock.c
@@ -154,7 +154,7 @@ static struct clk __init *alchemy_clk_setup_cpu(const char *parent_name,
 	struct clk_hw *h;
 	struct clk *clk;

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return ERR_PTR(-ENOMEM);

@@ -249,7 +249,7 @@ static struct clk __init *alchemy_clk_setup_aux(const char *parent_name,
 	struct clk *c;
 	struct alchemy_auxpll_clk *a;

-	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	a = kzalloc_obj(*a, GFP_KERNEL);
 	if (!a)
 		return ERR_PTR(-ENOMEM);

@@ -775,7 +775,7 @@ static int __init alchemy_clk_init_fgens(int ctype)
 	}
 	id.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE;

-	a = kcalloc(6, sizeof(*a), GFP_KERNEL);
+	a = kzalloc_objs(*a, 6, GFP_KERNEL);
 	if (!a)
 		return -ENOMEM;

@@ -996,7 +996,7 @@ static int __init alchemy_clk_setup_imux(int ctype)
 		return -ENODEV;
 	}

-	a = kcalloc(6, sizeof(*a), GFP_KERNEL);
+	a = kzalloc_objs(*a, 6, GFP_KERNEL);
 	if (!a)
 		return -ENOMEM;

diff --git a/arch/mips/alchemy/common/dbdma.c b/arch/mips/alchemy/common/dbdma.c
index 6c2c2010bbae..eb420a6f2f9f 100644
--- a/arch/mips/alchemy/common/dbdma.c
+++ b/arch/mips/alchemy/common/dbdma.c
@@ -310,7 +310,7 @@ u32 au1xxx_dbdma_chan_alloc(u32 srcid, u32 destid,
 			 * If kmalloc fails, it is caught below same
 			 * as a channel not available.
 			 */
-			ctp = kmalloc(sizeof(chan_tab_t), GFP_ATOMIC);
+			ctp = kmalloc_obj(chan_tab_t, GFP_ATOMIC);
 			chan_tab_ptr[i] = ctp;
 			break;
 		}
@@ -412,8 +412,8 @@ u32 au1xxx_dbdma_ring_alloc(u32 chanid, int entries)
 	 * and if we try that first we are likely to not waste larger
 	 * slabs of memory.
 	 */
-	desc_base = (u32)kmalloc_array(entries, sizeof(au1x_ddma_desc_t),
-				       GFP_KERNEL|GFP_DMA);
+	desc_base = (u32) kmalloc_objs(au1x_ddma_desc_t, entries,
+				       GFP_KERNEL | GFP_DMA);
 	if (desc_base == 0)
 		return 0;

@@ -1057,7 +1057,7 @@ static int __init dbdma_setup(unsigned int irq, dbdev_tab_t *idtable)
 {
 	int ret;

-	dbdev_tab = kcalloc(DBDEV_TAB_SIZE, sizeof(dbdev_tab_t), GFP_KERNEL);
+	dbdev_tab = kzalloc_objs(dbdev_tab_t, DBDEV_TAB_SIZE, GFP_KERNEL);
 	if (!dbdev_tab)
 		return -ENOMEM;

diff --git a/arch/mips/alchemy/common/platform.c b/arch/mips/alchemy/common/platform.c
index da74cae6b43a..931cf459facb 100644
--- a/arch/mips/alchemy/common/platform.c
+++ b/arch/mips/alchemy/common/platform.c
@@ -202,10 +202,10 @@ static unsigned long alchemy_ehci_data[][2] __initdata = {

 static int __init _new_usbres(struct resource **r, struct platform_device **d)
 {
-	*r = kcalloc(2, sizeof(struct resource), GFP_KERNEL);
+	*r = kzalloc_objs(struct resource, 2, GFP_KERNEL);
 	if (!*r)
 		return -ENOMEM;
-	*d = kzalloc(sizeof(struct platform_device), GFP_KERNEL);
+	*d = kzalloc_obj(struct platform_device, GFP_KERNEL);
 	if (!*d) {
 		kfree(*r);
 		return -ENOMEM;
diff --git a/arch/mips/alchemy/devboards/platform.c b/arch/mips/alchemy/devboards/platform.c
index 754bdd2ca630..40e804a898ec 100644
--- a/arch/mips/alchemy/devboards/platform.c
+++ b/arch/mips/alchemy/devboards/platform.c
@@ -87,7 +87,7 @@ int __init db1x_register_pcmcia_socket(phys_addr_t pcmcia_attr_start,
 	if (stschg_irq)
 		cnt++;

-	sr = kcalloc(cnt, sizeof(struct resource), GFP_KERNEL);
+	sr = kzalloc_objs(struct resource, cnt, GFP_KERNEL);
 	if (!sr)
 		return -ENOMEM;

@@ -162,15 +162,15 @@ int __init db1x_register_norflash(unsigned long size, int width,
 		return -EINVAL;

 	ret = -ENOMEM;
-	parts = kcalloc(5, sizeof(struct mtd_partition), GFP_KERNEL);
+	parts = kzalloc_objs(struct mtd_partition, 5, GFP_KERNEL);
 	if (!parts)
 		goto out;

-	res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+	res = kzalloc_obj(struct resource, GFP_KERNEL);
 	if (!res)
 		goto out1;

-	pfd = kzalloc(sizeof(struct physmap_flash_data), GFP_KERNEL);
+	pfd = kzalloc_obj(struct physmap_flash_data, GFP_KERNEL);
 	if (!pfd)
 		goto out2;

diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c
index 38ed61b4bd96..d9e569af0d86 100644
--- a/arch/mips/bcm47xx/setup.c
+++ b/arch/mips/bcm47xx/setup.c
@@ -187,7 +187,7 @@ static struct device * __init bcm47xx_setup_device(void)
 	struct device *dev;
 	int err;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c
index 5c3de175ef5b..2a91e678fc1a 100644
--- a/arch/mips/cavium-octeon/octeon-irq.c
+++ b/arch/mips/cavium-octeon/octeon-irq.c
@@ -100,7 +100,7 @@ static int octeon_irq_set_ciu_mapping(int irq, int line, int bit, int gpio_line,
 {
 	struct octeon_ciu_chip_data *cd;

-	cd = kzalloc(sizeof(*cd), GFP_KERNEL);
+	cd = kzalloc_obj(*cd, GFP_KERNEL);
 	if (!cd)
 		return -ENOMEM;

@@ -1462,7 +1462,7 @@ static int __init octeon_irq_init_ciu(
 	struct irq_domain *ciu_domain = NULL;
 	struct octeon_irq_ciu_domain_data *dd;

-	dd = kzalloc(sizeof(*dd), GFP_KERNEL);
+	dd = kzalloc_obj(*dd, GFP_KERNEL);
 	if (!dd)
 		return -ENOMEM;

@@ -1633,7 +1633,7 @@ static int __init octeon_irq_init_gpio(
 		return -EINVAL;
 	}

-	gpiod = kzalloc(sizeof(*gpiod), GFP_KERNEL);
+	gpiod = kzalloc_obj(*gpiod, GFP_KERNEL);
 	if (gpiod) {
 		/* gpio domain host_data is the base hwirq number. */
 		gpiod->base_hwirq = base_hwirq;
@@ -2223,7 +2223,7 @@ static int octeon_irq_cib_map(struct irq_domain *d,
 		return -EINVAL;
 	}

-	cd = kzalloc(sizeof(*cd), GFP_KERNEL);
+	cd = kzalloc_obj(*cd, GFP_KERNEL);
 	if (!cd)
 		return -ENOMEM;

@@ -2304,7 +2304,7 @@ static int __init octeon_irq_init_cib(struct device_node *ciu_node,
 		return -EINVAL;
 	}

-	host_data = kzalloc(sizeof(*host_data), GFP_KERNEL);
+	host_data = kzalloc_obj(*host_data, GFP_KERNEL);
 	if (!host_data)
 		return -ENOMEM;
 	raw_spin_lock_init(&host_data->lock);
diff --git a/arch/mips/kernel/module.c b/arch/mips/kernel/module.c
index ba0f62d8eff5..9ef50013c818 100644
--- a/arch/mips/kernel/module.c
+++ b/arch/mips/kernel/module.c
@@ -72,7 +72,7 @@ static int apply_r_mips_hi16(struct module *me, u32 *location, Elf_Addr v,
 	 * the carry we need to add.  Save the information, and let LO16 do the
 	 * actual relocation.
 	 */
-	n = kmalloc(sizeof *n, GFP_KERNEL);
+	n = kmalloc_obj(*n, GFP_KERNEL);
 	if (!n)
 		return -ENOMEM;

diff --git a/arch/mips/kernel/smp-cps.c b/arch/mips/kernel/smp-cps.c
index 22d4f9ff3ae2..ef5dca1313b2 100644
--- a/arch/mips/kernel/smp-cps.c
+++ b/arch/mips/kernel/smp-cps.c
@@ -341,9 +341,8 @@ static void __init cps_prepare_cpus(unsigned int max_cpus)

 	/* Allocate cluster boot configuration structs */
 	nclusters = mips_cps_numclusters();
-	mips_cps_cluster_bootcfg = kcalloc(nclusters,
-					   sizeof(*mips_cps_cluster_bootcfg),
-					   GFP_KERNEL);
+	mips_cps_cluster_bootcfg = kzalloc_objs(*mips_cps_cluster_bootcfg,
+						nclusters, GFP_KERNEL);
 	if (!mips_cps_cluster_bootcfg)
 		goto err_out;

@@ -353,8 +352,7 @@ static void __init cps_prepare_cpus(unsigned int max_cpus)
 	for (cl = 0; cl < nclusters; cl++) {
 		/* Allocate core boot configuration structs */
 		ncores = mips_cps_numcores(cl);
-		core_bootcfg = kcalloc(ncores, sizeof(*core_bootcfg),
-					GFP_KERNEL);
+		core_bootcfg = kzalloc_objs(*core_bootcfg, ncores, GFP_KERNEL);
 		if (!core_bootcfg)
 			goto err_out;
 		mips_cps_cluster_bootcfg[cl].core_config = core_bootcfg;
@@ -369,9 +367,9 @@ static void __init cps_prepare_cpus(unsigned int max_cpus)
 		for (c = 0; c < ncores; c++) {
 			int v;
 			core_vpes = core_vpe_count(cl, c);
-			core_bootcfg[c].vpe_config = kcalloc(core_vpes,
-					sizeof(*core_bootcfg[c].vpe_config),
-					GFP_KERNEL);
+			core_bootcfg[c].vpe_config = kzalloc_objs(*core_bootcfg[c].vpe_config,
+								  core_vpes,
+								  GFP_KERNEL);
 			for (v = 0; v < core_vpes; v++)
 				cpumask_set_cpu(nvpe++, &mips_cps_cluster_bootcfg[cl].cpumask);
 			if (!core_bootcfg[c].vpe_config)
diff --git a/arch/mips/kernel/vpe.c b/arch/mips/kernel/vpe.c
index 2b67c44adab9..fdbb5c4de834 100644
--- a/arch/mips/kernel/vpe.c
+++ b/arch/mips/kernel/vpe.c
@@ -94,7 +94,7 @@ struct vpe *alloc_vpe(int minor)
 {
 	struct vpe *v;

-	v = kzalloc(sizeof(struct vpe), GFP_KERNEL);
+	v = kzalloc_obj(struct vpe, GFP_KERNEL);
 	if (v == NULL)
 		goto out;

@@ -115,7 +115,7 @@ struct tc *alloc_tc(int index)
 {
 	struct tc *tc;

-	tc = kzalloc(sizeof(struct tc), GFP_KERNEL);
+	tc = kzalloc_obj(struct tc, GFP_KERNEL);
 	if (tc == NULL)
 		goto out;

@@ -318,7 +318,7 @@ static int apply_r_mips_hi16(struct module *me, uint32_t *location,
 	 * the carry we need to add.  Save the information, and let LO16 do the
 	 * actual relocation.
 	 */
-	n = kmalloc(sizeof(*n), GFP_KERNEL);
+	n = kmalloc_obj(*n, GFP_KERNEL);
 	if (!n)
 		return -ENOMEM;

diff --git a/arch/mips/lantiq/falcon/sysctrl.c b/arch/mips/lantiq/falcon/sysctrl.c
index 577e6e6309a6..ee0e634f6fe1 100644
--- a/arch/mips/lantiq/falcon/sysctrl.c
+++ b/arch/mips/lantiq/falcon/sysctrl.c
@@ -161,7 +161,7 @@ static void falcon_gpe_enable(void)
 static inline void clkdev_add_sys(const char *dev, unsigned int module,
 					unsigned int bits)
 {
-	struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
+	struct clk *clk = kzalloc_obj(struct clk, GFP_KERNEL);

 	if (!clk)
 		return;
diff --git a/arch/mips/lantiq/xway/gptu.c b/arch/mips/lantiq/xway/gptu.c
index 484c9e3000c1..f8f3f5383a34 100644
--- a/arch/mips/lantiq/xway/gptu.c
+++ b/arch/mips/lantiq/xway/gptu.c
@@ -121,7 +121,7 @@ static void gptu_disable(struct clk *clk)
 static inline void clkdev_add_gptu(struct device *dev, const char *con,
 							unsigned int timer)
 {
-	struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
+	struct clk *clk = kzalloc_obj(struct clk, GFP_KERNEL);

 	if (!clk)
 		return;
diff --git a/arch/mips/lantiq/xway/sysctrl.c b/arch/mips/lantiq/xway/sysctrl.c
index d9aa80afdf9d..b7be6c710a15 100644
--- a/arch/mips/lantiq/xway/sysctrl.c
+++ b/arch/mips/lantiq/xway/sysctrl.c
@@ -331,7 +331,7 @@ static int clkout_enable(struct clk *clk)
 static void clkdev_add_pmu(const char *dev, const char *con, bool deactivate,
 			   unsigned int module, unsigned int bits)
 {
-	struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
+	struct clk *clk = kzalloc_obj(struct clk, GFP_KERNEL);

 	if (!clk)
 		return;
@@ -356,7 +356,7 @@ static void clkdev_add_pmu(const char *dev, const char *con, bool deactivate,
 static void clkdev_add_cgu(const char *dev, const char *con,
 					unsigned int bits)
 {
-	struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
+	struct clk *clk = kzalloc_obj(struct clk, GFP_KERNEL);

 	if (!clk)
 		return;
@@ -374,8 +374,8 @@ static unsigned long valid_pci_rates[] = {CLOCK_33M, CLOCK_62_5M, 0};

 static void clkdev_add_pci(void)
 {
-	struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
-	struct clk *clk_ext = kzalloc(sizeof(struct clk), GFP_KERNEL);
+	struct clk *clk = kzalloc_obj(struct clk, GFP_KERNEL);
+	struct clk *clk_ext = kzalloc_obj(struct clk, GFP_KERNEL);

 	/* main pci clock */
 	if (clk) {
@@ -423,7 +423,7 @@ static void clkdev_add_clkout(void)
 			continue;
 		sprintf(name, "clkout%d", i);

-		clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
+		clk = kzalloc_obj(struct clk, GFP_KERNEL);
 		if (!clk) {
 			kfree(name);
 			continue;
diff --git a/arch/mips/loongson64/init.c b/arch/mips/loongson64/init.c
index b9f90f33fc9a..5f73f8663ab2 100644
--- a/arch/mips/loongson64/init.c
+++ b/arch/mips/loongson64/init.c
@@ -156,7 +156,7 @@ static int __init add_legacy_isa_io(struct fwnode_handle *fwnode, resource_size_
 	struct logic_pio_hwaddr *range;
 	unsigned long vaddr;

-	range = kzalloc(sizeof(*range), GFP_ATOMIC);
+	range = kzalloc_obj(*range, GFP_ATOMIC);
 	if (!range)
 		return -ENOMEM;

diff --git a/arch/mips/pci/pci-alchemy.c b/arch/mips/pci/pci-alchemy.c
index 6bfee0f71803..d5b4f0e6bee3 100644
--- a/arch/mips/pci/pci-alchemy.c
+++ b/arch/mips/pci/pci-alchemy.c
@@ -380,7 +380,7 @@ static int alchemy_pci_probe(struct platform_device *pdev)
 		goto out;
 	}

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		dev_err(&pdev->dev, "no memory for pcictl context\n");
 		ret = -ENOMEM;
diff --git a/arch/mips/pci/pci-xtalk-bridge.c b/arch/mips/pci/pci-xtalk-bridge.c
index e00c38620d14..c78f99eebe1a 100644
--- a/arch/mips/pci/pci-xtalk-bridge.c
+++ b/arch/mips/pci/pci-xtalk-bridge.c
@@ -341,7 +341,7 @@ static int bridge_domain_alloc(struct irq_domain *domain, unsigned int virq,
 	if (nr_irqs > 1 || !info)
 		return -EINVAL;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/arch/mips/ralink/mt7620.c b/arch/mips/ralink/mt7620.c
index 672249a13a09..c493fe67802c 100644
--- a/arch/mips/ralink/mt7620.c
+++ b/arch/mips/ralink/mt7620.c
@@ -198,7 +198,7 @@ static int __init mt7620_soc_dev_init(void)
 	struct soc_device *soc_dev;
 	struct soc_device_attribute *soc_dev_attr;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/arch/mips/ralink/mt7621.c b/arch/mips/ralink/mt7621.c
index 5a9fd3fe41d7..ca70966da6f7 100644
--- a/arch/mips/ralink/mt7621.c
+++ b/arch/mips/ralink/mt7621.c
@@ -144,7 +144,7 @@ static int __init mt7621_soc_dev_init(void)
 	struct soc_device *soc_dev;
 	struct soc_device_attribute *soc_dev_attr;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/arch/mips/ralink/rt288x.c b/arch/mips/ralink/rt288x.c
index ce8b5b6025bb..d60fd84e4b9c 100644
--- a/arch/mips/ralink/rt288x.c
+++ b/arch/mips/ralink/rt288x.c
@@ -68,7 +68,7 @@ static int __init rt2880_soc_dev_init(void)
 	struct soc_device *soc_dev;
 	struct soc_device_attribute *soc_dev_attr;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/arch/mips/ralink/rt305x.c b/arch/mips/ralink/rt305x.c
index 1f422470b029..6abd2a56ba27 100644
--- a/arch/mips/ralink/rt305x.c
+++ b/arch/mips/ralink/rt305x.c
@@ -171,7 +171,7 @@ static int __init rt305x_soc_dev_init(void)
 	struct soc_device *soc_dev;
 	struct soc_device_attribute *soc_dev_attr;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/arch/mips/ralink/rt3883.c b/arch/mips/ralink/rt3883.c
index 21ce00da5758..60605941b4b2 100644
--- a/arch/mips/ralink/rt3883.c
+++ b/arch/mips/ralink/rt3883.c
@@ -68,7 +68,7 @@ static int __init rt3883_soc_dev_init(void)
 	struct soc_device *soc_dev;
 	struct soc_device_attribute *soc_dev_attr;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/arch/mips/sgi-ip22/ip22-gio.c b/arch/mips/sgi-ip22/ip22-gio.c
index 19b70928d6dc..08604e5836bc 100644
--- a/arch/mips/sgi-ip22/ip22-gio.c
+++ b/arch/mips/sgi-ip22/ip22-gio.c
@@ -361,7 +361,7 @@ static void ip22_check_gio(int slotno, unsigned long addr, int irq)
 		}
 		printk(KERN_INFO "GIO: slot %d : %s (id %x)\n",
 		       slotno, name, id);
-		gio_dev = kzalloc(sizeof *gio_dev, GFP_KERNEL);
+		gio_dev = kzalloc_obj(*gio_dev, GFP_KERNEL);
 		if (!gio_dev)
 			return;
 		gio_dev->name = name;
diff --git a/arch/mips/sgi-ip27/ip27-irq.c b/arch/mips/sgi-ip27/ip27-irq.c
index 20ef663af16e..fb3e9bfa6abf 100644
--- a/arch/mips/sgi-ip27/ip27-irq.c
+++ b/arch/mips/sgi-ip27/ip27-irq.c
@@ -129,7 +129,7 @@ static int hub_domain_alloc(struct irq_domain *domain, unsigned int virq,
 	if (nr_irqs > 1 || !info)
 		return -EINVAL;

-	hd = kzalloc(sizeof(*hd), GFP_KERNEL);
+	hd = kzalloc_obj(*hd, GFP_KERNEL);
 	if (!hd)
 		return -ENOMEM;

diff --git a/arch/mips/sgi-ip27/ip27-xtalk.c b/arch/mips/sgi-ip27/ip27-xtalk.c
index 5143d1cf8984..5504c3234d5a 100644
--- a/arch/mips/sgi-ip27/ip27-xtalk.c
+++ b/arch/mips/sgi-ip27/ip27-xtalk.c
@@ -34,7 +34,7 @@ static void bridge_platform_create(nasid_t nasid, int widget, int masterwid)

 	offset = NODE_OFFSET(nasid);

-	wd = kzalloc(sizeof(*wd), GFP_KERNEL);
+	wd = kzalloc_obj(*wd, GFP_KERNEL);
 	if (!wd) {
 		pr_warn("xtalk:n%d/%x bridge create out of memory\n", nasid, widget);
 		return;
@@ -69,7 +69,7 @@ static void bridge_platform_create(nasid_t nasid, int widget, int masterwid)
 	/* platform_device_add_data() duplicates the data */
 	kfree(wd);

-	bd = kzalloc(sizeof(*bd), GFP_KERNEL);
+	bd = kzalloc_obj(*bd, GFP_KERNEL);
 	if (!bd) {
 		pr_warn("xtalk:n%d/%x bridge create out of memory\n", nasid, widget);
 		goto err_unregister_pdev_wd;
diff --git a/arch/mips/sgi-ip30/ip30-irq.c b/arch/mips/sgi-ip30/ip30-irq.c
index 9fb905e2cf14..1ffa97c578fa 100644
--- a/arch/mips/sgi-ip30/ip30-irq.c
+++ b/arch/mips/sgi-ip30/ip30-irq.c
@@ -209,7 +209,7 @@ static int heart_domain_alloc(struct irq_domain *domain, unsigned int virq,
 	if (nr_irqs > 1 || !info)
 		return -EINVAL;

-	hd = kzalloc(sizeof(*hd), GFP_KERNEL);
+	hd = kzalloc_obj(*hd, GFP_KERNEL);
 	if (!hd)
 		return -ENOMEM;

diff --git a/arch/mips/sgi-ip30/ip30-xtalk.c b/arch/mips/sgi-ip30/ip30-xtalk.c
index d798ee8c998c..e5525f1b617e 100644
--- a/arch/mips/sgi-ip30/ip30-xtalk.c
+++ b/arch/mips/sgi-ip30/ip30-xtalk.c
@@ -44,7 +44,7 @@ static void bridge_platform_create(int widget, int masterwid)
 	struct platform_device *pdev_bd;
 	struct resource w1_res;

-	wd = kzalloc(sizeof(*wd), GFP_KERNEL);
+	wd = kzalloc_obj(*wd, GFP_KERNEL);
 	if (!wd) {
 		pr_warn("xtalk:%x bridge create out of memory\n", widget);
 		return;
@@ -79,7 +79,7 @@ static void bridge_platform_create(int widget, int masterwid)
 	/* platform_device_add_data() duplicates the data */
 	kfree(wd);

-	bd = kzalloc(sizeof(*bd), GFP_KERNEL);
+	bd = kzalloc_obj(*bd, GFP_KERNEL);
 	if (!bd) {
 		pr_warn("xtalk:%x bridge create out of memory\n", widget);
 		goto err_unregister_pdev_wd;
diff --git a/arch/mips/txx9/generic/pci.c b/arch/mips/txx9/generic/pci.c
index d9249f5a632e..1976c06ee667 100644
--- a/arch/mips/txx9/generic/pci.c
+++ b/arch/mips/txx9/generic/pci.c
@@ -120,7 +120,7 @@ txx9_alloc_pci_controller(struct pci_controller *pcic,
 	int min_size = 0x10000;

 	if (!pcic) {
-		new = kzalloc(sizeof(*new), GFP_KERNEL);
+		new = kzalloc_obj(*new, GFP_KERNEL);
 		if (!new)
 			return NULL;
 		new->r_mem[0].name = "PCI mem";
diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c
index 03f8a3a95637..5cf490edea5a 100644
--- a/arch/mips/txx9/generic/setup.c
+++ b/arch/mips/txx9/generic/setup.c
@@ -648,7 +648,7 @@ void __init txx9_iocled_init(unsigned long baseaddr,

 	if (!deftriggers)
 		deftriggers = default_triggers;
-	iocled = kzalloc(sizeof(*iocled), GFP_KERNEL);
+	iocled = kzalloc_obj(*iocled, GFP_KERNEL);
 	if (!iocled)
 		return;
 	iocled->mmioaddr = ioremap(baseaddr, 1);
@@ -822,7 +822,7 @@ void __init txx9_sramc_init(struct resource *r)
 	err = subsys_system_register(&txx9_sramc_subsys, NULL);
 	if (err)
 		return;
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return;
 	size = resource_size(r);
diff --git a/arch/nios2/platform/platform.c b/arch/nios2/platform/platform.c
index 9737a87121fa..567e41095a40 100644
--- a/arch/nios2/platform/platform.c
+++ b/arch/nios2/platform/platform.c
@@ -28,7 +28,7 @@ static int __init nios2_soc_device_init(void)
 	struct soc_device_attribute *soc_dev_attr;
 	const char *machine;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (soc_dev_attr) {
 		machine = of_flat_dt_get_machine_name();
 		if (machine)
diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c
index 7707158a7840..0a5868035ff0 100644
--- a/arch/parisc/kernel/drivers.c
+++ b/arch/parisc/kernel/drivers.c
@@ -418,7 +418,7 @@ static void setup_bus_id(struct parisc_device *padev)
 static struct parisc_device * __init create_tree_node(char id,
 						      struct device *parent)
 {
-	struct parisc_device *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	struct parisc_device *dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/arch/parisc/kernel/inventory.c b/arch/parisc/kernel/inventory.c
index 05798355cff4..af827d32bcca 100644
--- a/arch/parisc/kernel/inventory.c
+++ b/arch/parisc/kernel/inventory.c
@@ -193,7 +193,7 @@ pat_query_module(ulong pcell_loc, ulong mod_index)
 	long status;		/* PDC return value status */
 	struct parisc_device *dev;

-	pa_pdc_cell = kmalloc(sizeof (*pa_pdc_cell), GFP_KERNEL);
+	pa_pdc_cell = kmalloc_obj(*pa_pdc_cell, GFP_KERNEL);
 	if (!pa_pdc_cell)
 		panic("couldn't allocate memory for PDC_PAT_CELL!");

@@ -536,7 +536,7 @@ add_system_map_addresses(struct parisc_device *dev, int num_addrs,
 	long status;
 	struct pdc_system_map_addr_info addr_result;

-	dev->addr = kmalloc_array(num_addrs, sizeof(*dev->addr), GFP_KERNEL);
+	dev->addr = kmalloc_objs(*dev->addr, num_addrs, GFP_KERNEL);
 	if(!dev->addr) {
 		printk(KERN_ERR "%s %s(): memory allocation failure\n",
 		       __FILE__, __func__);
diff --git a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c
index beb30c5de097..742e831de73c 100644
--- a/arch/parisc/kernel/processor.c
+++ b/arch/parisc/kernel/processor.c
@@ -110,7 +110,7 @@ static int __init processor_probe(struct parisc_device *dev)
 		unsigned long bytecnt;
 	        pdc_pat_cell_mod_maddr_block_t *pa_pdc_cell;

-		pa_pdc_cell = kmalloc(sizeof (*pa_pdc_cell), GFP_KERNEL);
+		pa_pdc_cell = kmalloc_obj(*pa_pdc_cell, GFP_KERNEL);
 		if (!pa_pdc_cell)
 			panic("couldn't allocate memory for PDC_PAT_CELL!");

diff --git a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c
index 7ac88ff13d3c..32103a270a8e 100644
--- a/arch/parisc/kernel/unwind.c
+++ b/arch/parisc/kernel/unwind.c
@@ -157,7 +157,7 @@ unwind_table_add(const char *name, unsigned long base_addr,

 	unwind_table_sort(s, e);

-	table = kmalloc(sizeof(struct unwind_table), GFP_USER);
+	table = kmalloc_obj(struct unwind_table, GFP_USER);
 	if (table == NULL)
 		return NULL;
 	unwind_table_init(table, name, base_addr, gp, start, end);
@@ -408,7 +408,7 @@ void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info, struct
 	struct pt_regs *r = &t->thread.regs;
 	struct pt_regs *r2;

-	r2 = kmalloc(sizeof(struct pt_regs), GFP_ATOMIC);
+	r2 = kmalloc_obj(struct pt_regs, GFP_ATOMIC);
 	if (!r2)
 		return;
 	*r2 = *r;
diff --git a/arch/parisc/kernel/vdso.c b/arch/parisc/kernel/vdso.c
index c5cbfce7a84c..a91a6a67d680 100644
--- a/arch/parisc/kernel/vdso.c
+++ b/arch/parisc/kernel/vdso.c
@@ -102,7 +102,7 @@ static struct page ** __init vdso_setup_pages(void *start, void *end)
 	struct page **pagelist;
 	int i;

-	pagelist = kcalloc(pages + 1, sizeof(struct page *), GFP_KERNEL);
+	pagelist = kzalloc_objs(struct page *, pages + 1, GFP_KERNEL);
 	if (!pagelist)
 		panic("%s: Cannot allocate page list for VDSO", __func__);
 	for (i = 0; i < pages; i++)
diff --git a/arch/parisc/net/bpf_jit_core.c b/arch/parisc/net/bpf_jit_core.c
index 06cbcd6fe87b..af852116adf8 100644
--- a/arch/parisc/net/bpf_jit_core.c
+++ b/arch/parisc/net/bpf_jit_core.c
@@ -63,7 +63,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)

 	jit_data = prog->aux->jit_data;
 	if (!jit_data) {
-		jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
+		jit_data = kzalloc_obj(*jit_data, GFP_KERNEL);
 		if (!jit_data) {
 			prog = orig_prog;
 			goto out;
@@ -80,7 +80,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
 	}

 	ctx->prog = prog;
-	ctx->offset = kcalloc(prog->len, sizeof(int), GFP_KERNEL);
+	ctx->offset = kzalloc_objs(int, prog->len, GFP_KERNEL);
 	if (!ctx->offset) {
 		prog = orig_prog;
 		goto out_offset;
diff --git a/arch/powerpc/kernel/cacheinfo.c b/arch/powerpc/kernel/cacheinfo.c
index 0fcc463b02e2..1298c868f9b6 100644
--- a/arch/powerpc/kernel/cacheinfo.c
+++ b/arch/powerpc/kernel/cacheinfo.c
@@ -157,7 +157,7 @@ static struct cache *new_cache(int type, int level,
 {
 	struct cache *cache;

-	cache = kzalloc(sizeof(*cache), GFP_KERNEL);
+	cache = kzalloc_obj(*cache, GFP_KERNEL);
 	if (cache)
 		cache_init(cache, type, level, ofnode, group_id);

@@ -540,7 +540,7 @@ static struct cache_dir *cacheinfo_create_cache_dir(unsigned int cpu_id)
 	if (!kobj)
 		goto err;

-	cache_dir = kzalloc(sizeof(*cache_dir), GFP_KERNEL);
+	cache_dir = kzalloc_obj(*cache_dir, GFP_KERNEL);
 	if (!cache_dir)
 		goto err;

@@ -788,7 +788,7 @@ static void cacheinfo_create_index_dir(struct cache *cache, int index,
 	struct cache_index_dir *index_dir;
 	int rc;

-	index_dir = kzalloc(sizeof(*index_dir), GFP_KERNEL);
+	index_dir = kzalloc_obj(*index_dir, GFP_KERNEL);
 	if (!index_dir)
 		return;

diff --git a/arch/powerpc/kernel/eeh_cache.c b/arch/powerpc/kernel/eeh_cache.c
index 2f9dbf8ad2ee..57e5382f790a 100644
--- a/arch/powerpc/kernel/eeh_cache.c
+++ b/arch/powerpc/kernel/eeh_cache.c
@@ -138,7 +138,7 @@ eeh_addr_cache_insert(struct pci_dev *dev, resource_size_t alo,
 			return piar;
 		}
 	}
-	piar = kzalloc(sizeof(struct pci_io_addr_range), GFP_ATOMIC);
+	piar = kzalloc_obj(struct pci_io_addr_range, GFP_ATOMIC);
 	if (!piar)
 		return NULL;

diff --git a/arch/powerpc/kernel/eeh_event.c b/arch/powerpc/kernel/eeh_event.c
index c23a454af08a..279c1ceccd6d 100644
--- a/arch/powerpc/kernel/eeh_event.c
+++ b/arch/powerpc/kernel/eeh_event.c
@@ -104,7 +104,7 @@ int __eeh_send_failure_event(struct eeh_pe *pe)
 	unsigned long flags;
 	struct eeh_event *event;

-	event = kzalloc(sizeof(*event), GFP_ATOMIC);
+	event = kzalloc_obj(*event, GFP_ATOMIC);
 	if (!event) {
 		pr_err("EEH: out of memory, event not handled\n");
 		return -ENOMEM;
diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c
index f9c6568a9137..0c0d3c30432b 100644
--- a/arch/powerpc/kernel/nvram_64.c
+++ b/arch/powerpc/kernel/nvram_64.c
@@ -890,7 +890,7 @@ loff_t __init nvram_create_partition(const char *name, int sig,
 		return -ENOSPC;

 	/* Create our OS partition */
-	new_part = kzalloc(sizeof(*new_part), GFP_KERNEL);
+	new_part = kzalloc_obj(*new_part, GFP_KERNEL);
 	if (!new_part) {
 		pr_err("%s: kmalloc failed\n", __func__);
 		return -ENOMEM;
@@ -1030,7 +1030,7 @@ int __init nvram_scan_partitions(void)
 			       "detected: 0-length partition\n");
 			goto out;
 		}
-		tmp_part = kmalloc(sizeof(*tmp_part), GFP_KERNEL);
+		tmp_part = kmalloc_obj(*tmp_part, GFP_KERNEL);
 		err = -ENOMEM;
 		if (!tmp_part) {
 			printk(KERN_ERR "nvram_scan_partitions: kmalloc failed\n");
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index eac84d687b53..7845c9c7f136 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -125,7 +125,7 @@ struct pci_controller *pcibios_alloc_controller(struct device_node *dev)
 {
 	struct pci_controller *phb;

-	phb = kzalloc(sizeof(struct pci_controller), GFP_KERNEL);
+	phb = kzalloc_obj(struct pci_controller, GFP_KERNEL);
 	if (phb == NULL)
 		return NULL;

@@ -432,7 +432,7 @@ static int pci_read_irq_line(struct pci_dev *pci_dev)
 	struct pci_intx_virq *vi, *vitmp;

 	/* Preallocate vi as rewind is complex if this fails after mapping */
-	vi = kzalloc(sizeof(struct pci_intx_virq), GFP_KERNEL);
+	vi = kzalloc_obj(struct pci_intx_virq, GFP_KERNEL);
 	if (!vi)
 		return -1;

@@ -1368,7 +1368,7 @@ static void __init pcibios_reserve_legacy_regions(struct pci_bus *bus)
 	if (!(hose->io_resource.flags & IORESOURCE_IO))
 		goto no_io;
 	offset = (unsigned long)hose->io_base_virt - _IO_BASE;
-	res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+	res = kzalloc_obj(struct resource, GFP_KERNEL);
 	BUG_ON(res == NULL);
 	res->name = "Legacy IO";
 	res->flags = IORESOURCE_IO;
@@ -1396,7 +1396,7 @@ static void __init pcibios_reserve_legacy_regions(struct pci_bus *bus)
 	}
 	if (i >= 3)
 		return;
-	res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+	res = kzalloc_obj(struct resource, GFP_KERNEL);
 	BUG_ON(res == NULL);
 	res->name = "Legacy VGA memory";
 	res->flags = IORESOURCE_MEM;
diff --git a/arch/powerpc/kernel/pci_dn.c b/arch/powerpc/kernel/pci_dn.c
index 38561d6a2079..25310680fcc5 100644
--- a/arch/powerpc/kernel/pci_dn.c
+++ b/arch/powerpc/kernel/pci_dn.c
@@ -130,7 +130,7 @@ static struct eeh_dev *eeh_dev_init(struct pci_dn *pdn)
 	struct eeh_dev *edev;

 	/* Allocate EEH device */
-	edev = kzalloc(sizeof(*edev), GFP_KERNEL);
+	edev = kzalloc_obj(*edev, GFP_KERNEL);
 	if (!edev)
 		return NULL;

@@ -154,7 +154,7 @@ static struct pci_dn *add_one_sriov_vf_pdn(struct pci_dn *parent,
 	if (!parent)
 		return NULL;

-	pdn = kzalloc(sizeof(*pdn), GFP_KERNEL);
+	pdn = kzalloc_obj(*pdn, GFP_KERNEL);
 	if (!pdn)
 		return NULL;

@@ -290,7 +290,7 @@ struct pci_dn *pci_add_device_node_info(struct pci_controller *hose,
 	struct eeh_dev *edev;
 #endif

-	pdn = kzalloc(sizeof(*pdn), GFP_KERNEL);
+	pdn = kzalloc_obj(*pdn, GFP_KERNEL);
 	if (pdn == NULL)
 		return NULL;
 	dn->data = pdn;
diff --git a/arch/powerpc/kernel/secvar-sysfs.c b/arch/powerpc/kernel/secvar-sysfs.c
index 4111b21962eb..6b2a7ab69d78 100644
--- a/arch/powerpc/kernel/secvar-sysfs.c
+++ b/arch/powerpc/kernel/secvar-sysfs.c
@@ -151,7 +151,7 @@ static __init int add_var(const char *name)
 	struct kobject *kobj;
 	int rc;

-	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
+	kobj = kzalloc_obj(*kobj, GFP_KERNEL);
 	if (!kobj)
 		return -ENOMEM;

diff --git a/arch/powerpc/kernel/smp-tbsync.c b/arch/powerpc/kernel/smp-tbsync.c
index 21c39355b25e..5f26c0352538 100644
--- a/arch/powerpc/kernel/smp-tbsync.c
+++ b/arch/powerpc/kernel/smp-tbsync.c
@@ -117,7 +117,7 @@ void smp_generic_give_timebase(void)
 	pr_debug("Software timebase sync\n");

 	/* if this fails then this kernel won't work anyway... */
-	tbsync = kzalloc( sizeof(*tbsync), GFP_KERNEL );
+	tbsync = kzalloc_obj(*tbsync, GFP_KERNEL);
 	mb();
 	running = 1;

diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index cad3358fa4c3..288763d59adb 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -1172,7 +1172,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
 		 * Assumption: if boot_cpuid doesn't have a chip-id, then no
 		 * other CPUs, will also not have chip-id.
 		 */
-		chip_id_lookup_table = kcalloc(idx, sizeof(int), GFP_KERNEL);
+		chip_id_lookup_table = kzalloc_objs(int, idx, GFP_KERNEL);
 		if (chip_id_lookup_table)
 			memset(chip_id_lookup_table, -1, sizeof(int) * idx);
 	}
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
index ab7c4cc80943..2729631d9d07 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -245,7 +245,7 @@ static struct page ** __init vdso_setup_pages(void *start, void *end)
 	struct page **pagelist;
 	int pages = (end - start) >> PAGE_SHIFT;

-	pagelist = kcalloc(pages + 1, sizeof(struct page *), GFP_KERNEL);
+	pagelist = kzalloc_objs(struct page *, pages + 1, GFP_KERNEL);
 	if (!pagelist)
 		panic("%s: Cannot allocate page list for VDSO", __func__);

diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c
index f305395cf26e..347847aec315 100644
--- a/arch/powerpc/kvm/book3s_64_mmu_hv.c
+++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c
@@ -1494,7 +1494,7 @@ int kvm_vm_ioctl_resize_hpt_prepare(struct kvm *kvm,

 	/* start new resize */

-	resize = kzalloc(sizeof(*resize), GFP_KERNEL);
+	resize = kzalloc_obj(*resize, GFP_KERNEL);
 	if (!resize) {
 		ret = -ENOMEM;
 		goto out;
@@ -1943,7 +1943,7 @@ int kvm_vm_ioctl_get_htab_fd(struct kvm *kvm, struct kvm_get_htab_fd *ghf)
 	/* reject flags we don't recognize */
 	if (ghf->flags & ~(KVM_GET_HTAB_BOLTED_ONLY | KVM_GET_HTAB_WRITE))
 		return -EINVAL;
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	kvm_get_kvm(kvm);
@@ -1985,7 +1985,7 @@ static int debugfs_htab_open(struct inode *inode, struct file *file)
 	struct kvm *kvm = inode->i_private;
 	struct debugfs_htab_state *p;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c b/arch/powerpc/kvm/book3s_64_mmu_radix.c
index b3e6e73d6a08..82af0508993c 100644
--- a/arch/powerpc/kvm/book3s_64_mmu_radix.c
+++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c
@@ -1256,7 +1256,7 @@ static int debugfs_radix_open(struct inode *inode, struct file *file)
 	struct kvm *kvm = inode->i_private;
 	struct debugfs_radix_state *p;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
index 742aa58a7c7e..70c73864aab8 100644
--- a/arch/powerpc/kvm/book3s_64_vio.c
+++ b/arch/powerpc/kvm/book3s_64_vio.c
@@ -178,7 +178,7 @@ long kvm_spapr_tce_attach_iommu_group(struct kvm *kvm, int tablefd,
 	}
 	rcu_read_unlock();

-	stit = kzalloc(sizeof(*stit), GFP_KERNEL);
+	stit = kzalloc_obj(*stit, GFP_KERNEL);
 	if (!stit) {
 		iommu_tce_table_put(tbl);
 		return -ENOMEM;
@@ -305,7 +305,7 @@ int kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm,
 		return ret;

 	ret = -ENOMEM;
-	stt = kzalloc(struct_size(stt, pages, npages), GFP_KERNEL | __GFP_NOWARN);
+	stt = kzalloc_flex(*stt, pages, npages, GFP_KERNEL | __GFP_NOWARN);
 	if (!stt)
 		goto fail_acct;

diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
index 7667563fb9ff..e6f6a58c5e36 100644
--- a/arch/powerpc/kvm/book3s_hv.c
+++ b/arch/powerpc/kvm/book3s_hv.c
@@ -2790,7 +2790,7 @@ static struct kvmppc_vcore *kvmppc_vcore_create(struct kvm *kvm, int id)
 {
 	struct kvmppc_vcore *vcore;

-	vcore = kzalloc(sizeof(struct kvmppc_vcore), GFP_KERNEL);
+	vcore = kzalloc_obj(struct kvmppc_vcore, GFP_KERNEL);

 	if (vcore == NULL)
 		return NULL;
@@ -2842,7 +2842,7 @@ static int debugfs_timings_open(struct inode *inode, struct file *file)
 	struct kvm_vcpu *vcpu = inode->i_private;
 	struct debugfs_timings_state *p;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

@@ -5637,7 +5637,7 @@ void kvmppc_alloc_host_rm_ops(void)
 	if (kvmppc_host_rm_ops_hv != NULL)
 		return;

-	ops = kzalloc(sizeof(struct kvmppc_host_rm_ops), GFP_KERNEL);
+	ops = kzalloc_obj(struct kvmppc_host_rm_ops, GFP_KERNEL);
 	if (!ops)
 		return;

@@ -5960,7 +5960,7 @@ void kvmppc_free_pimap(struct kvm *kvm)

 static struct kvmppc_passthru_irqmap *kvmppc_alloc_pimap(void)
 {
-	return kzalloc(sizeof(struct kvmppc_passthru_irqmap), GFP_KERNEL);
+	return kzalloc_obj(struct kvmppc_passthru_irqmap, GFP_KERNEL);
 }

 static int kvmppc_set_passthru_irq(struct kvm *kvm, int host_irq, int guest_gsi)
diff --git a/arch/powerpc/kvm/book3s_hv_nested.c b/arch/powerpc/kvm/book3s_hv_nested.c
index 5f8c2321cfb5..9bbac7fe2046 100644
--- a/arch/powerpc/kvm/book3s_hv_nested.c
+++ b/arch/powerpc/kvm/book3s_hv_nested.c
@@ -726,7 +726,7 @@ static struct kvm_nested_guest *kvmhv_alloc_nested(struct kvm *kvm, unsigned int
 	struct kvm_nested_guest *gp;
 	long shadow_lpid;

-	gp = kzalloc(sizeof(*gp), GFP_KERNEL);
+	gp = kzalloc_obj(*gp, GFP_KERNEL);
 	if (!gp)
 		return NULL;
 	gp->l1_host = kvm;
@@ -1671,7 +1671,7 @@ static long int __kvmhv_nested_page_fault(struct kvm_vcpu *vcpu,

 	/* 4. Insert the pte into our shadow_pgtable */

-	n_rmap = kzalloc(sizeof(*n_rmap), GFP_KERNEL);
+	n_rmap = kzalloc_obj(*n_rmap, GFP_KERNEL);
 	if (!n_rmap)
 		return RESUME_GUEST; /* Let the guest try again */
 	n_rmap->rmap = (n_gpa & RMAP_NESTED_GPA_MASK) |
diff --git a/arch/powerpc/kvm/book3s_hv_uvmem.c b/arch/powerpc/kvm/book3s_hv_uvmem.c
index 7cf9310de0ec..f960294dfc79 100644
--- a/arch/powerpc/kvm/book3s_hv_uvmem.c
+++ b/arch/powerpc/kvm/book3s_hv_uvmem.c
@@ -249,7 +249,7 @@ int kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot)
 {
 	struct kvmppc_uvmem_slot *p;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;
 	p->pfns = vcalloc(slot->npages, sizeof(*p->pfns));
@@ -711,7 +711,7 @@ static struct page *kvmppc_uvmem_get_page(unsigned long gpa, struct kvm *kvm)
 	bitmap_set(kvmppc_uvmem_bitmap, bit, 1);
 	spin_unlock(&kvmppc_uvmem_bitmap_lock);

-	pvt = kzalloc(sizeof(*pvt), GFP_KERNEL);
+	pvt = kzalloc_obj(*pvt, GFP_KERNEL);
 	if (!pvt)
 		goto out_clear;

diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c
index 83bcdc80ce51..b7fdb089f2af 100644
--- a/arch/powerpc/kvm/book3s_pr.c
+++ b/arch/powerpc/kvm/book3s_pr.c
@@ -1738,8 +1738,8 @@ static int kvmppc_core_vcpu_create_pr(struct kvm_vcpu *vcpu)
 	vcpu->arch.book3s = vcpu_book3s;

 #ifdef CONFIG_KVM_BOOK3S_32_HANDLER
-	vcpu->arch.shadow_vcpu =
-		kzalloc(sizeof(*vcpu->arch.shadow_vcpu), GFP_KERNEL);
+	vcpu->arch.shadow_vcpu = kzalloc_obj(*vcpu->arch.shadow_vcpu,
+					     GFP_KERNEL);
 	if (!vcpu->arch.shadow_vcpu)
 		goto free_vcpu3s;
 #endif
diff --git a/arch/powerpc/kvm/book3s_rtas.c b/arch/powerpc/kvm/book3s_rtas.c
index 6808bda0dbc1..d6f8f33cc98b 100644
--- a/arch/powerpc/kvm/book3s_rtas.c
+++ b/arch/powerpc/kvm/book3s_rtas.c
@@ -183,7 +183,7 @@ static int rtas_token_define(struct kvm *kvm, char *name, u64 token)
 	if (!found)
 		return -ENOENT;

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d)
 		return -ENOMEM;

diff --git a/arch/powerpc/kvm/book3s_xics.c b/arch/powerpc/kvm/book3s_xics.c
index 589a8f257120..3ba148b1d22f 100644
--- a/arch/powerpc/kvm/book3s_xics.c
+++ b/arch/powerpc/kvm/book3s_xics.c
@@ -1037,7 +1037,7 @@ static struct kvmppc_ics *kvmppc_xics_create_ics(struct kvm *kvm,
 		goto out;

 	/* Create the ICS */
-	ics = kzalloc(sizeof(struct kvmppc_ics), GFP_KERNEL);
+	ics = kzalloc_obj(struct kvmppc_ics, GFP_KERNEL);
 	if (!ics)
 		goto out;

@@ -1069,7 +1069,7 @@ static int kvmppc_xics_create_icp(struct kvm_vcpu *vcpu, unsigned long server_nu
 	if (kvmppc_xics_find_server(vcpu->kvm, server_num))
 		return -EEXIST;

-	icp = kzalloc(sizeof(struct kvmppc_icp), GFP_KERNEL);
+	icp = kzalloc_obj(struct kvmppc_icp, GFP_KERNEL);
 	if (!icp)
 		return -ENOMEM;

@@ -1388,7 +1388,7 @@ static struct kvmppc_xics *kvmppc_xics_get_device(struct kvm *kvm)
 	struct kvmppc_xics *xics = *kvm_xics_device;

 	if (!xics) {
-		xics = kzalloc(sizeof(*xics), GFP_KERNEL);
+		xics = kzalloc_obj(*xics, GFP_KERNEL);
 		*kvm_xics_device = xics;
 	} else {
 		memset(xics, 0, sizeof(*xics));
diff --git a/arch/powerpc/kvm/book3s_xive.c b/arch/powerpc/kvm/book3s_xive.c
index 89a1b8c21ab4..ae69a1e1dd17 100644
--- a/arch/powerpc/kvm/book3s_xive.c
+++ b/arch/powerpc/kvm/book3s_xive.c
@@ -1924,7 +1924,7 @@ int kvmppc_xive_connect_vcpu(struct kvm_device *dev,
 	if (r)
 		goto bail;

-	xc = kzalloc(sizeof(*xc), GFP_KERNEL);
+	xc = kzalloc_obj(*xc, GFP_KERNEL);
 	if (!xc) {
 		r = -ENOMEM;
 		goto bail;
@@ -2276,7 +2276,7 @@ struct kvmppc_xive_src_block *kvmppc_xive_create_src_block(
 		goto out;

 	/* Create the ICS */
-	sb = kzalloc(sizeof(*sb), GFP_KERNEL);
+	sb = kzalloc_obj(*sb, GFP_KERNEL);
 	if (!sb)
 		goto out;

@@ -2719,7 +2719,7 @@ struct kvmppc_xive *kvmppc_xive_get_device(struct kvm *kvm, u32 type)
 	struct kvmppc_xive *xive = *kvm_xive_device;

 	if (!xive) {
-		xive = kzalloc(sizeof(*xive), GFP_KERNEL);
+		xive = kzalloc_obj(*xive, GFP_KERNEL);
 		*kvm_xive_device = xive;
 	} else {
 		memset(xive, 0, sizeof(*xive));
diff --git a/arch/powerpc/kvm/book3s_xive_native.c b/arch/powerpc/kvm/book3s_xive_native.c
index d9bf1bc3ff61..179bd6094d62 100644
--- a/arch/powerpc/kvm/book3s_xive_native.c
+++ b/arch/powerpc/kvm/book3s_xive_native.c
@@ -145,7 +145,7 @@ int kvmppc_xive_native_connect_vcpu(struct kvm_device *dev,
 	if (rc)
 		goto bail;

-	xc = kzalloc(sizeof(*xc), GFP_KERNEL);
+	xc = kzalloc_obj(*xc, GFP_KERNEL);
 	if (!xc) {
 		rc = -ENOMEM;
 		goto bail;
diff --git a/arch/powerpc/kvm/e500.c b/arch/powerpc/kvm/e500.c
index b0f695428733..891c936af1df 100644
--- a/arch/powerpc/kvm/e500.c
+++ b/arch/powerpc/kvm/e500.c
@@ -119,7 +119,7 @@ static inline void local_sid_destroy_all(void)

 static void *kvmppc_e500_id_table_alloc(struct kvmppc_vcpu_e500 *vcpu_e500)
 {
-	vcpu_e500->idt = kzalloc(sizeof(struct vcpu_id_table), GFP_KERNEL);
+	vcpu_e500->idt = kzalloc_obj(struct vcpu_id_table, GFP_KERNEL);
 	return vcpu_e500->idt;
 }

diff --git a/arch/powerpc/kvm/e500_mmu.c b/arch/powerpc/kvm/e500_mmu.c
index e131fbecdcc4..ecbd7c4cd93d 100644
--- a/arch/powerpc/kvm/e500_mmu.c
+++ b/arch/powerpc/kvm/e500_mmu.c
@@ -772,7 +772,7 @@ int kvm_vcpu_ioctl_config_tlb(struct kvm_vcpu *vcpu,

 	num_pages = DIV_ROUND_UP(cfg->array + array_len - 1, PAGE_SIZE) -
 		    cfg->array / PAGE_SIZE;
-	pages = kmalloc_array(num_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, num_pages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

@@ -792,13 +792,13 @@ int kvm_vcpu_ioctl_config_tlb(struct kvm_vcpu *vcpu,
 		goto put_pages;
 	}

-	privs[0] = kcalloc(params.tlb_sizes[0], sizeof(*privs[0]), GFP_KERNEL);
+	privs[0] = kzalloc_objs(*privs[0], params.tlb_sizes[0], GFP_KERNEL);
 	if (!privs[0]) {
 		ret = -ENOMEM;
 		goto put_pages;
 	}

-	privs[1] = kcalloc(params.tlb_sizes[1], sizeof(*privs[1]), GFP_KERNEL);
+	privs[1] = kzalloc_objs(*privs[1], params.tlb_sizes[1], GFP_KERNEL);
 	if (!privs[1]) {
 		ret = -ENOMEM;
 		goto free_privs_first;
@@ -912,25 +912,24 @@ int kvmppc_e500_tlb_init(struct kvmppc_vcpu_e500 *vcpu_e500)
 	vcpu_e500->gtlb_params[1].ways = KVM_E500_TLB1_SIZE;
 	vcpu_e500->gtlb_params[1].sets = 1;

-	vcpu_e500->gtlb_arch = kmalloc_array(KVM_E500_TLB0_SIZE +
-					     KVM_E500_TLB1_SIZE,
-					     sizeof(*vcpu_e500->gtlb_arch),
-					     GFP_KERNEL);
+	vcpu_e500->gtlb_arch = kmalloc_objs(*vcpu_e500->gtlb_arch,
+					    KVM_E500_TLB0_SIZE + KVM_E500_TLB1_SIZE,
+					    GFP_KERNEL);
 	if (!vcpu_e500->gtlb_arch)
 		return -ENOMEM;

 	vcpu_e500->gtlb_offset[0] = 0;
 	vcpu_e500->gtlb_offset[1] = KVM_E500_TLB0_SIZE;

-	vcpu_e500->gtlb_priv[0] = kcalloc(vcpu_e500->gtlb_params[0].entries,
-					  sizeof(struct tlbe_ref),
-					  GFP_KERNEL);
+	vcpu_e500->gtlb_priv[0] = kzalloc_objs(struct tlbe_ref,
+					       vcpu_e500->gtlb_params[0].entries,
+					       GFP_KERNEL);
 	if (!vcpu_e500->gtlb_priv[0])
 		goto free_vcpu;

-	vcpu_e500->gtlb_priv[1] = kcalloc(vcpu_e500->gtlb_params[1].entries,
-					  sizeof(struct tlbe_ref),
-					  GFP_KERNEL);
+	vcpu_e500->gtlb_priv[1] = kzalloc_objs(struct tlbe_ref,
+					       vcpu_e500->gtlb_params[1].entries,
+					       GFP_KERNEL);
 	if (!vcpu_e500->gtlb_priv[1])
 		goto free_vcpu;

diff --git a/arch/powerpc/kvm/guest-state-buffer.c b/arch/powerpc/kvm/guest-state-buffer.c
index 871cf60ddeb6..42843eca6727 100644
--- a/arch/powerpc/kvm/guest-state-buffer.c
+++ b/arch/powerpc/kvm/guest-state-buffer.c
@@ -28,7 +28,7 @@ struct kvmppc_gs_buff *kvmppc_gsb_new(size_t size, unsigned long guest_id,
 {
 	struct kvmppc_gs_buff *gsb;

-	gsb = kzalloc(sizeof(*gsb), flags);
+	gsb = kzalloc_obj(*gsb, flags);
 	if (!gsb)
 		return NULL;

@@ -540,7 +540,7 @@ struct kvmppc_gs_msg *kvmppc_gsm_new(struct kvmppc_gs_msg_ops *ops, void *data,
 {
 	struct kvmppc_gs_msg *gsm;

-	gsm = kzalloc(sizeof(*gsm), gfp_flags);
+	gsm = kzalloc_obj(*gsm, gfp_flags);
 	if (!gsm)
 		return NULL;

diff --git a/arch/powerpc/kvm/mpic.c b/arch/powerpc/kvm/mpic.c
index 23e9c2bd9f27..a8ee6204cc08 100644
--- a/arch/powerpc/kvm/mpic.c
+++ b/arch/powerpc/kvm/mpic.c
@@ -1642,7 +1642,7 @@ static int mpic_set_default_irq_routing(struct openpic *opp)
 	struct kvm_irq_routing_entry *routing;

 	/* Create a nop default map, so that dereferencing it still works */
-	routing = kzalloc((sizeof(*routing)), GFP_KERNEL);
+	routing = kzalloc_obj(*routing, GFP_KERNEL);
 	if (!routing)
 		return -ENOMEM;

@@ -1661,7 +1661,7 @@ static int mpic_create(struct kvm_device *dev, u32 type)
 	if (dev->kvm->arch.mpic)
 		return -EINVAL;

-	opp = kzalloc(sizeof(struct openpic), GFP_KERNEL);
+	opp = kzalloc_obj(struct openpic, GFP_KERNEL);
 	if (!opp)
 		return -ENOMEM;

diff --git a/arch/powerpc/lib/rheap.c b/arch/powerpc/lib/rheap.c
index 6aa774aa5b16..d6d72719801b 100644
--- a/arch/powerpc/lib/rheap.c
+++ b/arch/powerpc/lib/rheap.c
@@ -54,7 +54,7 @@ static int grow(rh_info_t * info, int max_blocks)

 	new_blocks = max_blocks - info->max_blocks;

-	block = kmalloc_array(max_blocks, sizeof(rh_block_t), GFP_ATOMIC);
+	block = kmalloc_objs(rh_block_t, max_blocks, GFP_ATOMIC);
 	if (block == NULL)
 		return -ENOMEM;

@@ -258,7 +258,7 @@ rh_info_t *rh_create(unsigned int alignment)
 	if ((alignment & (alignment - 1)) != 0)
 		return ERR_PTR(-EINVAL);

-	info = kmalloc(sizeof(*info), GFP_ATOMIC);
+	info = kmalloc_obj(*info, GFP_ATOMIC);
 	if (info == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/arch/powerpc/mm/book3s64/iommu_api.c b/arch/powerpc/mm/book3s64/iommu_api.c
index c0e8d597e4cb..f9aa4e08b5bb 100644
--- a/arch/powerpc/mm/book3s64/iommu_api.c
+++ b/arch/powerpc/mm/book3s64/iommu_api.c
@@ -70,7 +70,7 @@ static long mm_iommu_do_alloc(struct mm_struct *mm, unsigned long ua,
 		locked_entries = entries;
 	}

-	mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+	mem = kzalloc_obj(*mem, GFP_KERNEL);
 	if (!mem) {
 		ret = -ENOMEM;
 		goto unlock_exit;
diff --git a/arch/powerpc/mm/book3s64/mmu_context.c b/arch/powerpc/mm/book3s64/mmu_context.c
index fb9dcf9ca599..c7302dd2ef25 100644
--- a/arch/powerpc/mm/book3s64/mmu_context.c
+++ b/arch/powerpc/mm/book3s64/mmu_context.c
@@ -96,8 +96,8 @@ static int hash__init_new_context(struct mm_struct *mm)
 {
 	int index;

-	mm->context.hash_context = kmalloc(sizeof(struct hash_mm_context),
-					   GFP_KERNEL);
+	mm->context.hash_context = kmalloc_obj(struct hash_mm_context,
+					       GFP_KERNEL);
 	if (!mm->context.hash_context)
 		return -ENOMEM;

@@ -124,8 +124,8 @@ static int hash__init_new_context(struct mm_struct *mm)
 #ifdef CONFIG_PPC_SUBPAGE_PROT
 		/* inherit subpage prot details if we have one. */
 		if (current->mm->context.hash_context->spt) {
-			mm->context.hash_context->spt = kmalloc(sizeof(struct subpage_prot_table),
-								GFP_KERNEL);
+			mm->context.hash_context->spt = kmalloc_obj(struct subpage_prot_table,
+								    GFP_KERNEL);
 			if (!mm->context.hash_context->spt) {
 				kfree(mm->context.hash_context);
 				return -ENOMEM;
diff --git a/arch/powerpc/mm/book3s64/subpage_prot.c b/arch/powerpc/mm/book3s64/subpage_prot.c
index 07c47673bba2..240880a38965 100644
--- a/arch/powerpc/mm/book3s64/subpage_prot.c
+++ b/arch/powerpc/mm/book3s64/subpage_prot.c
@@ -221,7 +221,7 @@ SYSCALL_DEFINE3(subpage_prot, unsigned long, addr,
 		 * Allocate subpage prot table if not already done.
 		 * Do this with mmap_lock held
 		 */
-		spt = kzalloc(sizeof(struct subpage_prot_table), GFP_KERNEL);
+		spt = kzalloc_obj(struct subpage_prot_table, GFP_KERNEL);
 		if (!spt) {
 			err = -ENOMEM;
 			goto out;
diff --git a/arch/powerpc/mm/drmem.c b/arch/powerpc/mm/drmem.c
index 8dd7b340d51f..45c1d47ec458 100644
--- a/arch/powerpc/mm/drmem.c
+++ b/arch/powerpc/mm/drmem.c
@@ -41,7 +41,7 @@ static struct property *clone_property(struct property *prop, u32 prop_sz)
 {
 	struct property *new_prop;

-	new_prop = kzalloc(sizeof(*new_prop), GFP_KERNEL);
+	new_prop = kzalloc_obj(*new_prop, GFP_KERNEL);
 	if (!new_prop)
 		return NULL;

@@ -430,8 +430,7 @@ static void __init init_drmem_v1_lmbs(const __be32 *prop)
 	if (drmem_info->n_lmbs == 0)
 		return;

-	drmem_info->lmbs = kcalloc(drmem_info->n_lmbs, sizeof(*lmb),
-				   GFP_KERNEL);
+	drmem_info->lmbs = kzalloc_objs(*lmb, drmem_info->n_lmbs, GFP_KERNEL);
 	if (!drmem_info->lmbs)
 		return;

@@ -458,8 +457,7 @@ static void __init init_drmem_v2_lmbs(const __be32 *prop)
 		drmem_info->n_lmbs += dr_cell.seq_lmbs;
 	}

-	drmem_info->lmbs = kcalloc(drmem_info->n_lmbs, sizeof(*lmb),
-				   GFP_KERNEL);
+	drmem_info->lmbs = kzalloc_objs(*lmb, drmem_info->n_lmbs, GFP_KERNEL);
 	if (!drmem_info->lmbs)
 		return;

diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 29bf347f6012..bab22aabbb9b 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -318,7 +318,7 @@ static int __init add_system_ram_resources(void)
 	for_each_mem_range(i, &start, &end) {
 		struct resource *res;

-		res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+		res = kzalloc_obj(struct resource, GFP_KERNEL);
 		WARN_ON(!res);

 		if (res) {
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index b75dd53584d5..baf5b6e69647 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -165,7 +165,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)

 	jit_data = fp->aux->jit_data;
 	if (!jit_data) {
-		jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
+		jit_data = kzalloc_obj(*jit_data, GFP_KERNEL);
 		if (!jit_data) {
 			fp = org_fp;
 			goto out;
diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c
index e42677cc254a..210d16c76b40 100644
--- a/arch/powerpc/perf/hv-24x7.c
+++ b/arch/powerpc/perf/hv-24x7.c
@@ -451,7 +451,7 @@ static ssize_t coresperchip_show(struct device *dev,

 static struct attribute *device_str_attr_create_(char *name, char *str)
 {
-	struct dev_ext_attribute *attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	struct dev_ext_attribute *attr = kzalloc_obj(*attr, GFP_KERNEL);

 	if (!attr)
 		return NULL;
@@ -647,7 +647,7 @@ static int event_uniq_add(struct rb_root *root, const char *name, int nl,
 		}
 	}

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -905,21 +905,20 @@ static int create_events_from_catalog(struct attribute ***events_,
 		pr_warn("event buffer ended before listed # of events were parsed (got %zu, wanted %zu, junk %zu)\n",
 				event_idx_last, event_entry_count, junk_events);

-	events = kmalloc_array(attr_max + 1, sizeof(*events), GFP_KERNEL);
+	events = kmalloc_objs(*events, attr_max + 1, GFP_KERNEL);
 	if (!events) {
 		ret = -ENOMEM;
 		goto e_event_data;
 	}

-	event_descs = kmalloc_array(event_idx + 1, sizeof(*event_descs),
-				GFP_KERNEL);
+	event_descs = kmalloc_objs(*event_descs, event_idx + 1, GFP_KERNEL);
 	if (!event_descs) {
 		ret = -ENOMEM;
 		goto e_event_attrs;
 	}

-	event_long_descs = kmalloc_array(event_idx + 1,
-			sizeof(*event_long_descs), GFP_KERNEL);
+	event_long_descs = kmalloc_objs(*event_long_descs, event_idx + 1,
+					GFP_KERNEL);
 	if (!event_long_descs) {
 		ret = -ENOMEM;
 		goto e_event_descs;
diff --git a/arch/powerpc/perf/hv-gpci.c b/arch/powerpc/perf/hv-gpci.c
index 241551d1282f..11e774857030 100644
--- a/arch/powerpc/perf/hv-gpci.c
+++ b/arch/powerpc/perf/hv-gpci.c
@@ -910,7 +910,7 @@ static struct device_attribute *sysinfo_device_attr_create(int
 	 * attribute array, only for valid return types.
 	 */
 	if (!ret || ret == H_AUTHORITY || ret == H_PARAMETER) {
-		attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+		attr = kzalloc_obj(*attr, GFP_KERNEL);
 		if (!attr)
 			return NULL;

diff --git a/arch/powerpc/perf/imc-pmu.c b/arch/powerpc/perf/imc-pmu.c
index 8664a7d297ad..c4b2c0a19f58 100644
--- a/arch/powerpc/perf/imc-pmu.c
+++ b/arch/powerpc/perf/imc-pmu.c
@@ -136,7 +136,7 @@ static struct attribute *device_str_attr_create(const char *name, const char *st
 {
 	struct perf_pmu_events_attr *attr;

-	attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_obj(*attr, GFP_KERNEL);
 	if (!attr)
 		return NULL;
 	sysfs_attr_init(&attr->attr.attr);
@@ -257,7 +257,7 @@ static int update_events_in_group(struct device_node *node, struct imc_pmu *pmu)
 	of_property_read_u32(node, "reg", &base_reg);

 	/* Allocate memory for the events */
-	pmu->events = kcalloc(ct, sizeof(struct imc_events), GFP_KERNEL);
+	pmu->events = kzalloc_objs(struct imc_events, ct, GFP_KERNEL);
 	if (!pmu->events) {
 		of_node_put(pmu_events);
 		return -ENOMEM;
@@ -274,7 +274,7 @@ static int update_events_in_group(struct device_node *node, struct imc_pmu *pmu)
 	of_node_put(pmu_events);

 	/* Allocate memory for attribute group */
-	attr_group = kzalloc(sizeof(*attr_group), GFP_KERNEL);
+	attr_group = kzalloc_obj(*attr_group, GFP_KERNEL);
 	if (!attr_group) {
 		imc_free_events(pmu->events, ct);
 		return -ENOMEM;
@@ -288,7 +288,7 @@ static int update_events_in_group(struct device_node *node, struct imc_pmu *pmu)
 	 * So allocate three times the "ct" (this includes event, event_scale and
 	 * event_unit).
 	 */
-	attrs = kcalloc(((ct * 3) + 1), sizeof(struct attribute *), GFP_KERNEL);
+	attrs = kzalloc_objs(struct attribute *, ((ct * 3) + 1), GFP_KERNEL);
 	if (!attrs) {
 		kfree(attr_group);
 		imc_free_events(pmu->events, ct);
@@ -1527,8 +1527,8 @@ static int init_nest_pmu_ref(void)
 {
 	int nid, i, cpu;

-	nest_imc_refc = kcalloc(num_possible_nodes(), sizeof(*nest_imc_refc),
-								GFP_KERNEL);
+	nest_imc_refc = kzalloc_objs(*nest_imc_refc, num_possible_nodes(),
+				     GFP_KERNEL);

 	if (!nest_imc_refc)
 		return -ENOMEM;
@@ -1699,9 +1699,9 @@ static int imc_mem_init(struct imc_pmu *pmu_ptr, struct device_node *parent,

 		/* Needed for hotplug/migration */
 		if (!per_nest_pmu_arr) {
-			per_nest_pmu_arr = kcalloc(get_max_nest_dev() + 1,
-						sizeof(struct imc_pmu *),
-						GFP_KERNEL);
+			per_nest_pmu_arr = kzalloc_objs(struct imc_pmu *,
+							get_max_nest_dev() + 1,
+							GFP_KERNEL);
 			if (!per_nest_pmu_arr)
 				goto err;
 		}
@@ -1714,14 +1714,14 @@ static int imc_mem_init(struct imc_pmu *pmu_ptr, struct device_node *parent,
 			goto err;

 		nr_cores = DIV_ROUND_UP(num_possible_cpus(), threads_per_core);
-		pmu_ptr->mem_info = kcalloc(nr_cores, sizeof(struct imc_mem_info),
-								GFP_KERNEL);
+		pmu_ptr->mem_info = kzalloc_objs(struct imc_mem_info, nr_cores,
+						 GFP_KERNEL);

 		if (!pmu_ptr->mem_info)
 			goto err;

-		core_imc_refc = kcalloc(nr_cores, sizeof(struct imc_pmu_ref),
-								GFP_KERNEL);
+		core_imc_refc = kzalloc_objs(struct imc_pmu_ref, nr_cores,
+					     GFP_KERNEL);

 		if (!core_imc_refc) {
 			kfree(pmu_ptr->mem_info);
@@ -1754,8 +1754,8 @@ static int imc_mem_init(struct imc_pmu *pmu_ptr, struct device_node *parent,
 			return -ENOMEM;

 		nr_cores = DIV_ROUND_UP(num_possible_cpus(), threads_per_core);
-		trace_imc_refc = kcalloc(nr_cores, sizeof(struct imc_pmu_ref),
-								GFP_KERNEL);
+		trace_imc_refc = kzalloc_objs(struct imc_pmu_ref, nr_cores,
+					      GFP_KERNEL);
 		if (!trace_imc_refc)
 			return -ENOMEM;

diff --git a/arch/powerpc/perf/vpa-dtl.c b/arch/powerpc/perf/vpa-dtl.c
index 3c1d1c28deb9..ab19101a8928 100644
--- a/arch/powerpc/perf/vpa-dtl.c
+++ b/arch/powerpc/perf/vpa-dtl.c
@@ -523,7 +523,7 @@ static void *vpa_dtl_setup_aux(struct perf_event *event, void **pages,
 	if (!buf)
 		return NULL;

-	pglist = kcalloc(nr_pages, sizeof(*pglist), GFP_KERNEL);
+	pglist = kzalloc_objs(*pglist, nr_pages, GFP_KERNEL);
 	if (!pglist)
 		return NULL;

diff --git a/arch/powerpc/platforms/44x/hsta_msi.c b/arch/powerpc/platforms/44x/hsta_msi.c
index c6bd846b0d65..a6b1c004888e 100644
--- a/arch/powerpc/platforms/44x/hsta_msi.c
+++ b/arch/powerpc/platforms/44x/hsta_msi.c
@@ -151,8 +151,7 @@ static int hsta_msi_probe(struct platform_device *pdev)
 	if (ret)
 		goto out;

-	ppc4xx_hsta_msi.irq_map = kmalloc_array(irq_count, sizeof(int),
-						GFP_KERNEL);
+	ppc4xx_hsta_msi.irq_map = kmalloc_objs(int, irq_count, GFP_KERNEL);
 	if (!ppc4xx_hsta_msi.irq_map) {
 		ret = -ENOMEM;
 		goto out1;
diff --git a/arch/powerpc/platforms/44x/pci.c b/arch/powerpc/platforms/44x/pci.c
index 364aeb86ab64..6ac53865b872 100644
--- a/arch/powerpc/platforms/44x/pci.c
+++ b/arch/powerpc/platforms/44x/pci.c
@@ -1339,8 +1339,7 @@ static int __init ppc4xx_pciex_check_core_init(struct device_node *np)
 	count = ppc4xx_pciex_hwops->core_init(np);
 	if (count > 0) {
 		ppc4xx_pciex_ports =
-		       kcalloc(count, sizeof(struct ppc4xx_pciex_port),
-			       GFP_KERNEL);
+		       kzalloc_objs(struct ppc4xx_pciex_port, count, GFP_KERNEL);
 		if (ppc4xx_pciex_ports) {
 			ppc4xx_pciex_port_count = count;
 			return 0;
diff --git a/arch/powerpc/platforms/44x/uic.c b/arch/powerpc/platforms/44x/uic.c
index 85daf841fd3f..a484474df432 100644
--- a/arch/powerpc/platforms/44x/uic.c
+++ b/arch/powerpc/platforms/44x/uic.c
@@ -233,7 +233,7 @@ static struct uic * __init uic_init_one(struct device_node *node)

 	BUG_ON(! of_device_is_compatible(node, "ibm,uic"));

-	uic = kzalloc(sizeof(*uic), GFP_KERNEL);
+	uic = kzalloc_obj(*uic, GFP_KERNEL);
 	if (! uic)
 		return NULL; /* FIXME: panic? */

diff --git a/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c b/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
index 80d944f29288..d8cdd077a554 100644
--- a/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
+++ b/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
@@ -146,7 +146,7 @@ static int mcu_probe(struct i2c_client *client)
 	struct mcu *mcu;
 	int ret;

-	mcu = kzalloc(sizeof(*mcu), GFP_KERNEL);
+	mcu = kzalloc_obj(*mcu, GFP_KERNEL);
 	if (!mcu)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/book3s/vas-api.c b/arch/powerpc/platforms/book3s/vas-api.c
index 49b15e7a8265..6f6c9d776dd7 100644
--- a/arch/powerpc/platforms/book3s/vas-api.c
+++ b/arch/powerpc/platforms/book3s/vas-api.c
@@ -266,7 +266,7 @@ static int coproc_open(struct inode *inode, struct file *fp)
 {
 	struct coproc_instance *cp_inst;

-	cp_inst = kzalloc(sizeof(*cp_inst), GFP_KERNEL);
+	cp_inst = kzalloc_obj(*cp_inst, GFP_KERNEL);
 	if (!cp_inst)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c
index 3c8624870967..2c536040ae0a 100644
--- a/arch/powerpc/platforms/cell/spu_base.c
+++ b/arch/powerpc/platforms/cell/spu_base.c
@@ -558,7 +558,7 @@ static int __init create_spu(void *data)
 	unsigned long flags;

 	ret = -ENOMEM;
-	spu = kzalloc(sizeof (*spu), GFP_KERNEL);
+	spu = kzalloc_obj(*spu, GFP_KERNEL);
 	if (!spu)
 		goto out;

diff --git a/arch/powerpc/platforms/cell/spufs/context.c b/arch/powerpc/platforms/cell/spufs/context.c
index 7a39cc414f09..ade2a5e041a3 100644
--- a/arch/powerpc/platforms/cell/spufs/context.c
+++ b/arch/powerpc/platforms/cell/spufs/context.c
@@ -26,7 +26,7 @@ struct spu_context *alloc_spu_context(struct spu_gang *gang)
 {
 	struct spu_context *ctx;

-	ctx = kzalloc(sizeof *ctx, GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		goto out;
 	/* Binding to physical processor deferred
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c
index ce839783c0df..60d9b9154997 100644
--- a/arch/powerpc/platforms/cell/spufs/file.c
+++ b/arch/powerpc/platforms/cell/spufs/file.c
@@ -47,7 +47,7 @@ static int spufs_attr_open(struct inode *inode, struct file *file,
 {
 	struct spufs_attr *attr;

-	attr = kmalloc(sizeof(*attr), GFP_KERNEL);
+	attr = kmalloc_obj(*attr, GFP_KERNEL);
 	if (!attr)
 		return -ENOMEM;

@@ -2281,8 +2281,8 @@ static int spufs_switch_log_open(struct inode *inode, struct file *file)
 		goto out;
 	}

-	ctx->switch_log = kmalloc(struct_size(ctx->switch_log, log,
-				  SWITCH_LOG_BUFSIZE), GFP_KERNEL);
+	ctx->switch_log = kmalloc_flex(*ctx->switch_log, log,
+				       SWITCH_LOG_BUFSIZE, GFP_KERNEL);

 	if (!ctx->switch_log) {
 		rc = -ENOMEM;
diff --git a/arch/powerpc/platforms/cell/spufs/gang.c b/arch/powerpc/platforms/cell/spufs/gang.c
index 2c2999de6bfa..6ab8122bc833 100644
--- a/arch/powerpc/platforms/cell/spufs/gang.c
+++ b/arch/powerpc/platforms/cell/spufs/gang.c
@@ -16,7 +16,7 @@ struct spu_gang *alloc_spu_gang(void)
 {
 	struct spu_gang *gang;

-	gang = kzalloc(sizeof *gang, GFP_KERNEL);
+	gang = kzalloc_obj(*gang, GFP_KERNEL);
 	if (!gang)
 		goto out;

diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c
index 577a00c25217..419ce7fee040 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -727,11 +727,11 @@ static int spufs_init_fs_context(struct fs_context *fc)
 	struct spufs_fs_context *ctx;
 	struct spufs_sb_info *sbi;

-	ctx = kzalloc(sizeof(struct spufs_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct spufs_fs_context, GFP_KERNEL);
 	if (!ctx)
 		goto nomem;

-	sbi = kzalloc(sizeof(struct spufs_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct spufs_sb_info, GFP_KERNEL);
 	if (!sbi)
 		goto nomem_ctx;

diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c
index 8e7ed010bfde..f61fa34b62f1 100644
--- a/arch/powerpc/platforms/cell/spufs/sched.c
+++ b/arch/powerpc/platforms/cell/spufs/sched.c
@@ -1082,7 +1082,7 @@ int __init spu_sched_init(void)
 	struct proc_dir_entry *entry;
 	int err = -ENOMEM, i;

-	spu_prio = kzalloc(sizeof(struct spu_prio_array), GFP_KERNEL);
+	spu_prio = kzalloc_obj(struct spu_prio_array, GFP_KERNEL);
 	if (!spu_prio)
 		goto out;

diff --git a/arch/powerpc/platforms/pasemi/gpio_mdio.c b/arch/powerpc/platforms/pasemi/gpio_mdio.c
index e4538d471256..fd31677b38e2 100644
--- a/arch/powerpc/platforms/pasemi/gpio_mdio.c
+++ b/arch/powerpc/platforms/pasemi/gpio_mdio.c
@@ -214,7 +214,7 @@ static int gpio_mdio_probe(struct platform_device *ofdev)
 	int err;

 	err = -ENOMEM;
-	priv = kzalloc(sizeof(struct gpio_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct gpio_priv, GFP_KERNEL);
 	if (!priv)
 		goto out;

diff --git a/arch/powerpc/platforms/powermac/low_i2c.c b/arch/powerpc/platforms/powermac/low_i2c.c
index 02474e27df9b..ec4b03fbfab2 100644
--- a/arch/powerpc/platforms/powermac/low_i2c.c
+++ b/arch/powerpc/platforms/powermac/low_i2c.c
@@ -489,7 +489,7 @@ static struct pmac_i2c_host_kw *__init kw_i2c_host_init(struct device_node *np)
 	const u32		*psteps, *prate, *addrp;
 	u32			steps;

-	host = kzalloc(sizeof(*host), GFP_KERNEL);
+	host = kzalloc_obj(*host, GFP_KERNEL);
 	if (host == NULL) {
 		printk(KERN_ERR "low_i2c: Can't allocate host for %pOF\n",
 		       np);
@@ -569,7 +569,7 @@ static void __init kw_i2c_add(struct pmac_i2c_host_kw *host,
 {
 	struct pmac_i2c_bus *bus;

-	bus = kzalloc(sizeof(struct pmac_i2c_bus), GFP_KERNEL);
+	bus = kzalloc_obj(struct pmac_i2c_bus, GFP_KERNEL);
 	if (bus == NULL)
 		return;

@@ -1254,7 +1254,7 @@ static void* pmac_i2c_do_begin(struct pmf_function *func, struct pmf_args *args)
 	 * near OOM that need to be resolved, the allocator itself should
 	 * probably make GFP_NOIO implicit during suspend
 	 */
-	inst = kzalloc(sizeof(struct pmac_i2c_pf_inst), GFP_KERNEL);
+	inst = kzalloc_obj(struct pmac_i2c_pf_inst, GFP_KERNEL);
 	if (inst == NULL) {
 		pmac_i2c_close(bus);
 		return NULL;
diff --git a/arch/powerpc/platforms/powermac/pfunc_core.c b/arch/powerpc/platforms/powermac/pfunc_core.c
index 22741ddfd5b2..d1e2e557de15 100644
--- a/arch/powerpc/platforms/powermac/pfunc_core.c
+++ b/arch/powerpc/platforms/powermac/pfunc_core.c
@@ -644,7 +644,7 @@ static int pmf_add_function_prop(struct pmf_device *dev, void *driverdata,

 	while (length >= 12) {
 		/* Allocate a structure */
-		func = kzalloc(sizeof(*func), GFP_KERNEL);
+		func = kzalloc_obj(*func, GFP_KERNEL);
 		if (func == NULL)
 			goto bail;
 		kref_init(&func->ref);
@@ -720,7 +720,7 @@ int pmf_register_driver(struct device_node *np,
 		return -EBUSY;
 	}

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		DBG("pmf: no memory !\n");
 		return -ENOMEM;
diff --git a/arch/powerpc/platforms/powernv/idle.c b/arch/powerpc/platforms/powernv/idle.c
index e4f4e907f6e3..1389a3131993 100644
--- a/arch/powerpc/platforms/powernv/idle.c
+++ b/arch/powerpc/platforms/powernv/idle.c
@@ -1336,8 +1336,8 @@ static int __init pnv_parse_cpuidle_dt(void)
 	nr_idle_states = of_property_count_u32_elems(np,
 						"ibm,cpu-idle-state-flags");

-	pnv_idle_states = kcalloc(nr_idle_states, sizeof(*pnv_idle_states),
-				  GFP_KERNEL);
+	pnv_idle_states = kzalloc_objs(*pnv_idle_states, nr_idle_states,
+				       GFP_KERNEL);
 	temp_u32 = kcalloc(nr_idle_states, sizeof(u32),  GFP_KERNEL);
 	temp_u64 = kcalloc(nr_idle_states, sizeof(u64),  GFP_KERNEL);
 	temp_string = kcalloc(nr_idle_states, sizeof(char *),  GFP_KERNEL);
diff --git a/arch/powerpc/platforms/powernv/memtrace.c b/arch/powerpc/platforms/powernv/memtrace.c
index 2ea30b343354..5214e2d43e78 100644
--- a/arch/powerpc/platforms/powernv/memtrace.c
+++ b/arch/powerpc/platforms/powernv/memtrace.c
@@ -133,8 +133,8 @@ static int memtrace_init_regions_runtime(u64 size)
 	u32 nid;
 	u64 m;

-	memtrace_array = kcalloc(num_online_nodes(),
-				sizeof(struct memtrace_entry), GFP_KERNEL);
+	memtrace_array = kzalloc_objs(struct memtrace_entry, num_online_nodes(),
+				      GFP_KERNEL);
 	if (!memtrace_array) {
 		pr_err("Failed to allocate memtrace_array\n");
 		return -EINVAL;
diff --git a/arch/powerpc/platforms/powernv/ocxl.c b/arch/powerpc/platforms/powernv/ocxl.c
index f8139948348e..5ae7e3960364 100644
--- a/arch/powerpc/platforms/powernv/ocxl.c
+++ b/arch/powerpc/platforms/powernv/ocxl.c
@@ -149,7 +149,7 @@ static struct npu_link *find_link(struct pci_dev *dev)
 	}

 	/* link doesn't exist yet. Allocate one */
-	link = kzalloc(sizeof(struct npu_link), GFP_KERNEL);
+	link = kzalloc_obj(struct npu_link, GFP_KERNEL);
 	if (!link)
 		return NULL;
 	link->domain = pci_domain_nr(dev->bus);
@@ -439,7 +439,7 @@ int pnv_ocxl_spa_setup(struct pci_dev *dev, void *spa_mem, int PE_mask,
 	u32 bdfn;
 	int rc;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/powernv/opal-async.c b/arch/powerpc/platforms/powernv/opal-async.c
index c094fdf5825c..2cacfe5407c9 100644
--- a/arch/powerpc/platforms/powernv/opal-async.c
+++ b/arch/powerpc/platforms/powernv/opal-async.c
@@ -265,8 +265,8 @@ int __init opal_async_comp_init(void)
 	}

 	opal_max_async_tokens = be32_to_cpup(async);
-	opal_async_tokens = kcalloc(opal_max_async_tokens,
-			sizeof(*opal_async_tokens), GFP_KERNEL);
+	opal_async_tokens = kzalloc_objs(*opal_async_tokens,
+					 opal_max_async_tokens, GFP_KERNEL);
 	if (!opal_async_tokens) {
 		err = -ENOMEM;
 		goto out_opal_node;
diff --git a/arch/powerpc/platforms/powernv/opal-core.c b/arch/powerpc/platforms/powernv/opal-core.c
index 784602a48afb..4f1533bcaa10 100644
--- a/arch/powerpc/platforms/powernv/opal-core.c
+++ b/arch/powerpc/platforms/powernv/opal-core.c
@@ -81,7 +81,7 @@ bool kernel_initiated;

 static struct opalcore * __init get_new_element(void)
 {
-	return kzalloc(sizeof(struct opalcore), GFP_KERNEL);
+	return kzalloc_obj(struct opalcore, GFP_KERNEL);
 }

 static inline int is_opalcore_usable(void)
@@ -497,7 +497,7 @@ static void __init opalcore_config_init(void)
 	opalc_cpu_metadata = __va(addr);

 	/* Allocate memory for config buffer */
-	oc_conf = kzalloc(sizeof(struct opalcore_config), GFP_KERNEL);
+	oc_conf = kzalloc_obj(struct opalcore_config, GFP_KERNEL);
 	if (oc_conf == NULL)
 		goto error_out;

diff --git a/arch/powerpc/platforms/powernv/opal-dump.c b/arch/powerpc/platforms/powernv/opal-dump.c
index cc3cc9ddf9d1..a832afb4cbf5 100644
--- a/arch/powerpc/platforms/powernv/opal-dump.c
+++ b/arch/powerpc/platforms/powernv/opal-dump.c
@@ -329,7 +329,7 @@ static void create_dump_obj(uint32_t id, size_t size, uint32_t type)
 	struct dump_obj *dump;
 	int rc;

-	dump = kzalloc(sizeof(*dump), GFP_KERNEL);
+	dump = kzalloc_obj(*dump, GFP_KERNEL);
 	if (!dump)
 		return;

diff --git a/arch/powerpc/platforms/powernv/opal-elog.c b/arch/powerpc/platforms/powernv/opal-elog.c
index c3fc5d258146..39e9eb162ed7 100644
--- a/arch/powerpc/platforms/powernv/opal-elog.c
+++ b/arch/powerpc/platforms/powernv/opal-elog.c
@@ -190,7 +190,7 @@ static void create_elog_obj(uint64_t id, size_t size, uint64_t type)
 	struct elog_obj *elog;
 	int rc;

-	elog = kzalloc(sizeof(*elog), GFP_KERNEL);
+	elog = kzalloc_obj(*elog, GFP_KERNEL);
 	if (!elog)
 		return;

diff --git a/arch/powerpc/platforms/powernv/opal-hmi.c b/arch/powerpc/platforms/powernv/opal-hmi.c
index f0c1830deb51..182719995d05 100644
--- a/arch/powerpc/platforms/powernv/opal-hmi.c
+++ b/arch/powerpc/platforms/powernv/opal-hmi.c
@@ -342,7 +342,7 @@ static int opal_handle_hmi_event(struct notifier_block *nb,
 	hmi_evt = (struct OpalHMIEvent *)&hmi_msg->params[0];

 	/* Delay the logging of HMI events to workqueue. */
-	msg_node = kzalloc(sizeof(*msg_node), GFP_ATOMIC);
+	msg_node = kzalloc_obj(*msg_node, GFP_ATOMIC);
 	if (!msg_node) {
 		pr_err("HMI: out of memory, Opal message event not handled\n");
 		return -ENOMEM;
diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c
index 828fc4d88471..c57525c1fecd 100644
--- a/arch/powerpc/platforms/powernv/opal-imc.c
+++ b/arch/powerpc/platforms/powernv/opal-imc.c
@@ -108,8 +108,8 @@ static int imc_get_mem_addr_nest(struct device_node *node,
 								nr_chips))
 		goto error;

-	pmu_ptr->mem_info = kcalloc(nr_chips + 1, sizeof(*pmu_ptr->mem_info),
-				    GFP_KERNEL);
+	pmu_ptr->mem_info = kzalloc_objs(*pmu_ptr->mem_info, nr_chips + 1,
+					 GFP_KERNEL);
 	if (!pmu_ptr->mem_info)
 		goto error;

@@ -146,7 +146,7 @@ static struct imc_pmu *imc_pmu_create(struct device_node *parent, int pmu_index,
 		return NULL;

 	/* memory for pmu */
-	pmu_ptr = kzalloc(sizeof(*pmu_ptr), GFP_KERNEL);
+	pmu_ptr = kzalloc_obj(*pmu_ptr, GFP_KERNEL);
 	if (!pmu_ptr)
 		return NULL;

diff --git a/arch/powerpc/platforms/powernv/opal-irqchip.c b/arch/powerpc/platforms/powernv/opal-irqchip.c
index e180bd8e1400..7cf5cae6ef42 100644
--- a/arch/powerpc/platforms/powernv/opal-irqchip.c
+++ b/arch/powerpc/platforms/powernv/opal-irqchip.c
@@ -221,7 +221,7 @@ int __init opal_event_init(void)
 		 opal_irq_count, old_style ? "old" : "new");

 	/* Allocate an IRQ resources array */
-	opal_irqs = kcalloc(opal_irq_count, sizeof(struct resource), GFP_KERNEL);
+	opal_irqs = kzalloc_objs(struct resource, opal_irq_count, GFP_KERNEL);
 	if (WARN_ON(!opal_irqs)) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/arch/powerpc/platforms/powernv/opal-lpc.c b/arch/powerpc/platforms/powernv/opal-lpc.c
index 8a7f39e106bd..c41ca500669d 100644
--- a/arch/powerpc/platforms/powernv/opal-lpc.c
+++ b/arch/powerpc/platforms/powernv/opal-lpc.c
@@ -355,7 +355,7 @@ static int opal_lpc_debugfs_create_type(struct dentry *folder,
 					enum OpalLPCAddressType type)
 {
 	struct lpc_debugfs_entry *entry;
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;
 	entry->lpc_type = type;
diff --git a/arch/powerpc/platforms/powernv/opal-memory-errors.c b/arch/powerpc/platforms/powernv/opal-memory-errors.c
index a1754a28265d..54815882d7c0 100644
--- a/arch/powerpc/platforms/powernv/opal-memory-errors.c
+++ b/arch/powerpc/platforms/powernv/opal-memory-errors.c
@@ -93,7 +93,7 @@ static int opal_memory_err_event(struct notifier_block *nb,
 	if (msg_type != OPAL_MSG_MEM_ERR)
 		return 0;

-	msg_node = kzalloc(sizeof(*msg_node), GFP_ATOMIC);
+	msg_node = kzalloc_obj(*msg_node, GFP_ATOMIC);
 	if (!msg_node) {
 		pr_err("MEMORY_ERROR: out of memory, Opal message event not"
 		       "handled\n");
diff --git a/arch/powerpc/platforms/powernv/opal-powercap.c b/arch/powerpc/platforms/powernv/opal-powercap.c
index ea917266aa17..d530ac77b0e2 100644
--- a/arch/powerpc/platforms/powernv/opal-powercap.c
+++ b/arch/powerpc/platforms/powernv/opal-powercap.c
@@ -150,8 +150,7 @@ void __init opal_powercap_init(void)
 		return;
 	}

-	pcaps = kcalloc(of_get_child_count(powercap), sizeof(*pcaps),
-			GFP_KERNEL);
+	pcaps = kzalloc_objs(*pcaps, of_get_child_count(powercap), GFP_KERNEL);
 	if (!pcaps)
 		goto out_put_powercap;

@@ -182,13 +181,13 @@ void __init opal_powercap_init(void)
 			has_cur = true;
 		}

-		pcaps[i].pattrs = kcalloc(j, sizeof(struct powercap_attr),
-					  GFP_KERNEL);
+		pcaps[i].pattrs = kzalloc_objs(struct powercap_attr, j,
+					       GFP_KERNEL);
 		if (!pcaps[i].pattrs)
 			goto out_pcaps_pattrs;

-		pcaps[i].pg.attrs = kcalloc(j + 1, sizeof(struct attribute *),
-					    GFP_KERNEL);
+		pcaps[i].pg.attrs = kzalloc_objs(struct attribute *, j + 1,
+						 GFP_KERNEL);
 		if (!pcaps[i].pg.attrs) {
 			kfree(pcaps[i].pattrs);
 			goto out_pcaps_pattrs;
diff --git a/arch/powerpc/platforms/powernv/opal-psr.c b/arch/powerpc/platforms/powernv/opal-psr.c
index 6441e17b6996..731d8b355343 100644
--- a/arch/powerpc/platforms/powernv/opal-psr.c
+++ b/arch/powerpc/platforms/powernv/opal-psr.c
@@ -132,8 +132,8 @@ void __init opal_psr_init(void)
 		return;
 	}

-	psr_attrs = kcalloc(of_get_child_count(psr), sizeof(*psr_attrs),
-			    GFP_KERNEL);
+	psr_attrs = kzalloc_objs(*psr_attrs, of_get_child_count(psr),
+				 GFP_KERNEL);
 	if (!psr_attrs)
 		goto out_put_psr;

diff --git a/arch/powerpc/platforms/powernv/opal-sensor-groups.c b/arch/powerpc/platforms/powernv/opal-sensor-groups.c
index 9944376b115c..c91e48d773ff 100644
--- a/arch/powerpc/platforms/powernv/opal-sensor-groups.c
+++ b/arch/powerpc/platforms/powernv/opal-sensor-groups.c
@@ -168,7 +168,7 @@ void __init opal_sensor_groups_init(void)
 		return;
 	}

-	sgs = kcalloc(of_get_child_count(sg), sizeof(*sgs), GFP_KERNEL);
+	sgs = kzalloc_objs(*sgs, of_get_child_count(sg), GFP_KERNEL);
 	if (!sgs)
 		goto out_sg_put;

@@ -190,14 +190,13 @@ void __init opal_sensor_groups_init(void)
 		if (!nr_attrs)
 			continue;

-		sgs[i].sgattrs = kcalloc(nr_attrs, sizeof(*sgs[i].sgattrs),
-					 GFP_KERNEL);
+		sgs[i].sgattrs = kzalloc_objs(*sgs[i].sgattrs, nr_attrs,
+					      GFP_KERNEL);
 		if (!sgs[i].sgattrs)
 			goto out_sgs_sgattrs;

-		sgs[i].sg.attrs = kcalloc(nr_attrs + 1,
-					  sizeof(*sgs[i].sg.attrs),
-					  GFP_KERNEL);
+		sgs[i].sg.attrs = kzalloc_objs(*sgs[i].sg.attrs, nr_attrs + 1,
+					       GFP_KERNEL);

 		if (!sgs[i].sg.attrs) {
 			kfree(sgs[i].sgattrs);
diff --git a/arch/powerpc/platforms/powernv/opal-sysparam.c b/arch/powerpc/platforms/powernv/opal-sysparam.c
index a12312afe4ef..358d1b8a3e86 100644
--- a/arch/powerpc/platforms/powernv/opal-sysparam.c
+++ b/arch/powerpc/platforms/powernv/opal-sysparam.c
@@ -222,7 +222,7 @@ void __init opal_sys_param_init(void)
 		goto out_free_perm;
 	}

-	attr = kcalloc(count, sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_objs(*attr, count, GFP_KERNEL);
 	if (!attr) {
 		pr_err("SYSPARAM: Failed to allocate memory for parameter "
 				"attributes\n");
diff --git a/arch/powerpc/platforms/powernv/opal-xscom.c b/arch/powerpc/platforms/powernv/opal-xscom.c
index 748c2b97fa53..bd788d62af5f 100644
--- a/arch/powerpc/platforms/powernv/opal-xscom.c
+++ b/arch/powerpc/platforms/powernv/opal-xscom.c
@@ -158,7 +158,7 @@ static int scom_debug_init_one(struct dentry *root, struct device_node *dn,
 	struct scom_debug_entry *ent;
 	struct dentry *dir;

-	ent = kzalloc(sizeof(*ent), GFP_KERNEL);
+	ent = kzalloc_obj(*ent, GFP_KERNEL);
 	if (!ent)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
index 09bd93464b4f..b1b1d3496739 100644
--- a/arch/powerpc/platforms/powernv/opal.c
+++ b/arch/powerpc/platforms/powernv/opal.c
@@ -251,7 +251,7 @@ static void queue_replay_msg(void *msg)
 	struct opal_msg_node *msg_node;

 	if (msg_list_size < OPAL_MSG_QUEUE_MAX) {
-		msg_node = kzalloc(sizeof(*msg_node), GFP_ATOMIC);
+		msg_node = kzalloc_obj(*msg_node, GFP_ATOMIC);
 		if (msg_node) {
 			INIT_LIST_HEAD(&msg_node->list);
 			memcpy(&msg_node->msg, msg, sizeof(struct opal_msg));
@@ -801,7 +801,7 @@ static int opal_add_one_export(struct kobject *parent, const char *export_name,
 	if (rc)
 		goto out;

-	attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_obj(*attr, GFP_KERNEL);
 	if (!attr) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 1c78fdfb7b03..d77ff328eb37 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -2522,7 +2522,7 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
 	phb_id = be64_to_cpup(prop64);
 	pr_debug("  PHB-ID  : 0x%016llx\n", phb_id);

-	phb = kzalloc(sizeof(*phb), GFP_KERNEL);
+	phb = kzalloc_obj(*phb, GFP_KERNEL);
 	if (!phb)
 		panic("%s: Failed to allocate %zu bytes\n", __func__,
 		      sizeof(*phb));
diff --git a/arch/powerpc/platforms/powernv/pci-sriov.c b/arch/powerpc/platforms/powernv/pci-sriov.c
index cc7b1dd54ac6..f1a8fcfdb2ba 100644
--- a/arch/powerpc/platforms/powernv/pci-sriov.c
+++ b/arch/powerpc/platforms/powernv/pci-sriov.c
@@ -149,7 +149,7 @@ static void pnv_pci_ioda_fixup_iov_resources(struct pci_dev *pdev)
 	struct pnv_iov_data *iov;
 	int mul;

-	iov = kzalloc(sizeof(*iov), GFP_KERNEL);
+	iov = kzalloc_obj(*iov, GFP_KERNEL);
 	if (!iov)
 		goto disable_iov;
 	pdev->dev.archdata.iov_data = iov;
diff --git a/arch/powerpc/platforms/powernv/rng.c b/arch/powerpc/platforms/powernv/rng.c
index 196aa70fe043..6034f2cdcaf2 100644
--- a/arch/powerpc/platforms/powernv/rng.c
+++ b/arch/powerpc/platforms/powernv/rng.c
@@ -120,7 +120,7 @@ static __init int rng_create(struct device_node *dn)
 	struct resource res;
 	unsigned long val;

-	rng = kzalloc(sizeof(*rng), GFP_KERNEL);
+	rng = kzalloc_obj(*rng, GFP_KERNEL);
 	if (!rng)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/powernv/vas-window.c b/arch/powerpc/platforms/powernv/vas-window.c
index 5147df3a18ac..06748e0d5c32 100644
--- a/arch/powerpc/platforms/powernv/vas-window.c
+++ b/arch/powerpc/platforms/powernv/vas-window.c
@@ -543,7 +543,7 @@ static struct pnv_vas_window *vas_window_alloc(struct vas_instance *vinst)
 	if (winid < 0)
 		return ERR_PTR(winid);

-	window = kzalloc(sizeof(*window), GFP_KERNEL);
+	window = kzalloc_obj(*window, GFP_KERNEL);
 	if (!window)
 		goto out_free;

diff --git a/arch/powerpc/platforms/powernv/vas.c b/arch/powerpc/platforms/powernv/vas.c
index 9c9650319f3b..ca3553003b7c 100644
--- a/arch/powerpc/platforms/powernv/vas.c
+++ b/arch/powerpc/platforms/powernv/vas.c
@@ -74,7 +74,7 @@ static int init_vas_instance(struct platform_device *pdev)
 		return -ENODEV;
 	}

-	vinst = kzalloc(sizeof(*vinst), GFP_KERNEL);
+	vinst = kzalloc_obj(*vinst, GFP_KERNEL);
 	if (!vinst)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/ps3/device-init.c b/arch/powerpc/platforms/ps3/device-init.c
index 22d91ac424dd..74e7fb0adcdb 100644
--- a/arch/powerpc/platforms/ps3/device-init.c
+++ b/arch/powerpc/platforms/ps3/device-init.c
@@ -31,7 +31,7 @@ static int __init ps3_register_lpm_devices(void)

 	pr_debug(" -> %s:%d\n", __func__, __LINE__);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

@@ -126,7 +126,7 @@ static int __init ps3_setup_gelic_device(
 	BUG_ON(repo->bus_type != PS3_BUS_TYPE_SB);
 	BUG_ON(repo->dev_type != PS3_DEV_TYPE_SB_GELIC);

-	p = kzalloc(sizeof(struct layout), GFP_KERNEL);
+	p = kzalloc_obj(struct layout, GFP_KERNEL);

 	if (!p) {
 		result = -ENOMEM;
@@ -197,7 +197,7 @@ static int __init ps3_setup_uhc_device(
 	BUG_ON(repo->bus_type != PS3_BUS_TYPE_SB);
 	BUG_ON(repo->dev_type != PS3_DEV_TYPE_SB_USB);

-	p = kzalloc(sizeof(struct layout), GFP_KERNEL);
+	p = kzalloc_obj(struct layout, GFP_KERNEL);

 	if (!p) {
 		result = -ENOMEM;
@@ -294,7 +294,7 @@ static int __init ps3_setup_vuart_device(enum ps3_match_id match_id,
 	pr_debug(" -> %s:%d: match_id %u, port %u\n", __func__, __LINE__,
 		match_id, port_number);

-	p = kzalloc(sizeof(struct layout), GFP_KERNEL);
+	p = kzalloc_obj(struct layout, GFP_KERNEL);

 	if (!p)
 		return -ENOMEM;
@@ -344,7 +344,7 @@ static int ps3_setup_storage_dev(const struct ps3_repository_device *repo,
 		 repo->dev_index, repo->dev_type, port, blk_size, num_blocks,
 		 num_regions);

-	p = kzalloc(struct_size(p, regions, num_regions), GFP_KERNEL);
+	p = kzalloc_flex(*p, regions, num_regions, GFP_KERNEL);
 	if (!p) {
 		result = -ENOMEM;
 		goto fail_malloc;
@@ -447,7 +447,7 @@ static int __init ps3_register_sound_devices(void)

 	pr_debug(" -> %s:%d\n", __func__, __LINE__);

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

@@ -481,7 +481,7 @@ static int __init ps3_register_graphics_devices(void)

 	pr_debug(" -> %s:%d\n", __func__, __LINE__);

-	p = kzalloc(sizeof(struct layout), GFP_KERNEL);
+	p = kzalloc_obj(struct layout, GFP_KERNEL);

 	if (!p)
 		return -ENOMEM;
@@ -516,7 +516,7 @@ static int __init ps3_register_ramdisk_device(void)

 	pr_debug(" -> %s:%d\n", __func__, __LINE__);

-	p = kzalloc(sizeof(struct layout), GFP_KERNEL);
+	p = kzalloc_obj(struct layout, GFP_KERNEL);

 	if (!p)
 		return -ENOMEM;
@@ -783,7 +783,7 @@ static int ps3_probe_thread(void *data)

 	pr_debug(" -> %s:%u: kthread started\n", __func__, __LINE__);

-	local = kzalloc(sizeof(*local), GFP_KERNEL);
+	local = kzalloc_obj(*local, GFP_KERNEL);
 	if (!local)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c
index 1326de55fda6..20fc5b68faee 100644
--- a/arch/powerpc/platforms/ps3/mm.c
+++ b/arch/powerpc/platforms/ps3/mm.c
@@ -516,7 +516,7 @@ static int dma_sb_map_pages(struct ps3_dma_region *r, unsigned long phys_addr,
 	int result;
 	struct dma_chunk *c;

-	c = kzalloc(sizeof(*c), GFP_ATOMIC);
+	c = kzalloc_obj(*c, GFP_ATOMIC);
 	if (!c) {
 		result = -ENOMEM;
 		goto fail_alloc;
@@ -561,7 +561,7 @@ static int dma_ioc0_map_pages(struct ps3_dma_region *r, unsigned long phys_addr,

 	DBG(KERN_ERR "%s: phy=%#lx, lpar%#lx, len=%#lx\n", __func__,
 	    phys_addr, ps3_mm_phys_to_lpar(phys_addr), len);
-	c = kzalloc(sizeof(*c), GFP_ATOMIC);
+	c = kzalloc_obj(*c, GFP_ATOMIC);
 	if (!c) {
 		result = -ENOMEM;
 		goto fail_alloc;
diff --git a/arch/powerpc/platforms/ps3/spu.c b/arch/powerpc/platforms/ps3/spu.c
index 61b37c9400b2..cd4ff2032cb0 100644
--- a/arch/powerpc/platforms/ps3/spu.c
+++ b/arch/powerpc/platforms/ps3/spu.c
@@ -336,8 +336,7 @@ static int __init ps3_create_spu(struct spu *spu, void *data)

 	pr_debug("%s:%d spu_%d\n", __func__, __LINE__, spu->number);

-	spu->pdata = kzalloc(sizeof(struct spu_pdata),
-		GFP_KERNEL);
+	spu->pdata = kzalloc_obj(struct spu_pdata, GFP_KERNEL);

 	if (!spu->pdata) {
 		result = -ENOMEM;
diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c
index 979487da6522..ea5e97f1f054 100644
--- a/arch/powerpc/platforms/pseries/dlpar.c
+++ b/arch/powerpc/platforms/pseries/dlpar.c
@@ -53,7 +53,7 @@ static struct property *dlpar_parse_cc_property(struct cc_workarea *ccwa)
 	char *name;
 	char *value;

-	prop = kzalloc(sizeof(*prop), GFP_KERNEL);
+	prop = kzalloc_obj(*prop, GFP_KERNEL);
 	if (!prop)
 		return NULL;

@@ -80,7 +80,7 @@ static struct device_node *dlpar_parse_cc_node(struct cc_workarea *ccwa)
 	struct device_node *dn;
 	const char *name;

-	dn = kzalloc(sizeof(*dn), GFP_KERNEL);
+	dn = kzalloc_obj(*dn, GFP_KERNEL);
 	if (!dn)
 		return NULL;

@@ -633,7 +633,7 @@ void queue_hotplug_event(struct pseries_hp_errorlog *hp_errlog)
 	if (!hp_errlog_copy)
 		return;

-	work = kmalloc(sizeof(struct pseries_hp_work), GFP_ATOMIC);
+	work = kmalloc_obj(struct pseries_hp_work, GFP_ATOMIC);
 	if (work) {
 		INIT_WORK((struct work_struct *)work, pseries_hp_work_fn);
 		work->errlog = hp_errlog_copy;
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
index 38dc4f7c9296..a040d34c4e40 100644
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -33,7 +33,7 @@ static struct property *dlpar_clone_property(struct property *prop,
 {
 	struct property *new_prop;

-	new_prop = kzalloc(sizeof(*new_prop), GFP_KERNEL);
+	new_prop = kzalloc_obj(*new_prop, GFP_KERNEL);
 	if (!new_prop)
 		return NULL;

diff --git a/arch/powerpc/platforms/pseries/hvcserver.c b/arch/powerpc/platforms/pseries/hvcserver.c
index d48c9c7ce10f..80e310a45f14 100644
--- a/arch/powerpc/platforms/pseries/hvcserver.c
+++ b/arch/powerpc/platforms/pseries/hvcserver.c
@@ -160,8 +160,8 @@ int hvcs_get_partner_info(uint32_t unit_address, struct list_head *head,

 		/* This is a very small struct and will be freed soon in
 		 * hvcs_free_partner_info(). */
-		next_partner_info = kmalloc(sizeof(struct hvcs_partner_info),
-				GFP_ATOMIC);
+		next_partner_info = kmalloc_obj(struct hvcs_partner_info,
+						GFP_ATOMIC);

 		if (!next_partner_info) {
 			printk(KERN_WARNING "HVCONSOLE: kmalloc() failed to"
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index 5497b130e026..27de08d8fa15 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -1000,7 +1000,7 @@ static void copy_property(struct device_node *pdn, const char *from, const char
 	if (!src)
 		return;

-	dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+	dst = kzalloc_obj(*dst, GFP_KERNEL);
 	if (!dst)
 		return;

@@ -1089,7 +1089,7 @@ static struct dma_win *ddw_list_new_entry(struct device_node *pdn,
 {
 	struct dma_win *window;

-	window = kzalloc(sizeof(*window), GFP_KERNEL);
+	window = kzalloc_obj(*window, GFP_KERNEL);
 	if (!window)
 		return NULL;

@@ -1409,12 +1409,12 @@ static struct property *ddw_property_create(const char *propname, u32 liobn, u64
 	struct dynamic_dma_window_prop *ddwprop;
 	struct property *win64;

-	win64 = kzalloc(sizeof(*win64), GFP_KERNEL);
+	win64 = kzalloc_obj(*win64, GFP_KERNEL);
 	if (!win64)
 		return NULL;

 	win64->name = kstrdup(propname, GFP_KERNEL);
-	ddwprop = kzalloc(sizeof(*ddwprop), GFP_KERNEL);
+	ddwprop = kzalloc_obj(*ddwprop, GFP_KERNEL);
 	win64->value = ddwprop;
 	win64->length = sizeof(*ddwprop);
 	if (!win64->name || !win64->value) {
@@ -1760,7 +1760,7 @@ static bool enable_ddw(struct pci_dev *dev, struct device_node *pdn, u64 dma_mas
 	if (default_win_removed || limited_addr_enabled)
 		reset_dma_window(dev, pdn);

-	fpdn = kzalloc(sizeof(*fpdn), GFP_KERNEL);
+	fpdn = kzalloc_obj(*fpdn, GFP_KERNEL);
 	if (!fpdn)
 		goto out_unlock;
 	fpdn->pdn = pdn;
@@ -2235,7 +2235,7 @@ static long spapr_tce_create_table(struct iommu_table_group *table_group, int nu
 	__remove_dma_window(pdn, ddw_avail, create.liobn);

 out_failed:
-	fpdn = kzalloc(sizeof(*fpdn), GFP_KERNEL);
+	fpdn = kzalloc_obj(*fpdn, GFP_KERNEL);
 	if (!fpdn)
 		goto out_unlock;
 	fpdn->pdn = pdn;
@@ -2322,7 +2322,7 @@ static long spapr_tce_unset_window(struct iommu_table_group *table_group, int nu
 	goto out_unlock;

 out_failed:
-	fpdn = kzalloc(sizeof(*fpdn), GFP_KERNEL);
+	fpdn = kzalloc_obj(*fpdn, GFP_KERNEL);
 	if (!fpdn)
 		goto out_unlock;
 	fpdn->pdn = pdn;
diff --git a/arch/powerpc/platforms/pseries/lparcfg.c b/arch/powerpc/platforms/pseries/lparcfg.c
index 6554537984fb..bf6f9789167f 100644
--- a/arch/powerpc/platforms/pseries/lparcfg.c
+++ b/arch/powerpc/platforms/pseries/lparcfg.c
@@ -146,7 +146,7 @@ static void show_gpci_data(struct seq_file *m)
 	unsigned int affinity_score;
 	long ret;

-	buf = kmalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kmalloc_obj(*buf, GFP_KERNEL);
 	if (buf == NULL)
 		return;

diff --git a/arch/powerpc/platforms/pseries/mobility.c b/arch/powerpc/platforms/pseries/mobility.c
index 95fe802ccdfd..892f59c41d83 100644
--- a/arch/powerpc/platforms/pseries/mobility.c
+++ b/arch/powerpc/platforms/pseries/mobility.c
@@ -146,7 +146,7 @@ static int update_dt_property(struct device_node *dn, struct property **prop,
 		new_prop->value = new_data;
 		new_prop->length += vd;
 	} else {
-		new_prop = kzalloc(sizeof(*new_prop), GFP_KERNEL);
+		new_prop = kzalloc_obj(*new_prop, GFP_KERNEL);
 		if (!new_prop)
 			return -ENOMEM;

diff --git a/arch/powerpc/platforms/pseries/msi.c b/arch/powerpc/platforms/pseries/msi.c
index 4cd70a8201f1..3bc617a96671 100644
--- a/arch/powerpc/platforms/pseries/msi.c
+++ b/arch/powerpc/platforms/pseries/msi.c
@@ -441,7 +441,7 @@ static int pseries_msi_ops_prepare(struct irq_domain *domain, struct device *dev
 	int ret;

 	struct pseries_msi_device *pseries_dev __free(kfree)
-		= kmalloc(sizeof(*pseries_dev), GFP_KERNEL);
+		= kmalloc_obj(*pseries_dev, GFP_KERNEL);
 	if (!pseries_dev)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/pseries/papr-hvpipe.c b/arch/powerpc/platforms/pseries/papr-hvpipe.c
index dd7b668799d9..14ae480d060a 100644
--- a/arch/powerpc/platforms/pseries/papr-hvpipe.c
+++ b/arch/powerpc/platforms/pseries/papr-hvpipe.c
@@ -495,7 +495,7 @@ static int papr_hvpipe_dev_create_handle(u32 srcID)
 	}
 	spin_unlock(&hvpipe_src_list_lock);

-	src_info = kzalloc(sizeof(*src_info), GFP_KERNEL_ACCOUNT);
+	src_info = kzalloc_obj(*src_info, GFP_KERNEL_ACCOUNT);
 	if (!src_info)
 		return -ENOMEM;

@@ -762,7 +762,7 @@ static int __init papr_hvpipe_init(void)
 		!rtas_function_implemented(RTAS_FN_IBM_RECEIVE_HVPIPE_MSG))
 		return -ENODEV;

-	papr_hvpipe_work = kzalloc(sizeof(struct work_struct), GFP_ATOMIC);
+	papr_hvpipe_work = kzalloc_obj(struct work_struct, GFP_ATOMIC);
 	if (!papr_hvpipe_work)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/pseries/papr-phy-attest.c b/arch/powerpc/platforms/pseries/papr-phy-attest.c
index 1907f2411567..20a0e1581302 100644
--- a/arch/powerpc/platforms/pseries/papr-phy-attest.c
+++ b/arch/powerpc/platforms/pseries/papr-phy-attest.c
@@ -225,7 +225,7 @@ static long papr_phy_attest_create_handle(struct papr_phy_attest_io_block __user
 	/*
 	 * Freed in phy_attest_sequence_end().
 	 */
-	params =  kzalloc(sizeof(*params), GFP_KERNEL_ACCOUNT);
+	params = kzalloc_obj(*params, GFP_KERNEL_ACCOUNT);
 	if (!params)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/pseries/papr-platform-dump.c b/arch/powerpc/platforms/pseries/papr-platform-dump.c
index be633c9a0e75..fb7ea84bf98a 100644
--- a/arch/powerpc/platforms/pseries/papr-platform-dump.c
+++ b/arch/powerpc/platforms/pseries/papr-platform-dump.c
@@ -321,8 +321,8 @@ static long papr_platform_dump_create_handle(u64 dump_tag)
 		}
 	}

-	params =  kzalloc(sizeof(struct ibm_platform_dump_params),
-			GFP_KERNEL_ACCOUNT);
+	params =  kzalloc_obj(struct ibm_platform_dump_params,
+			      GFP_KERNEL_ACCOUNT);
 	if (!params)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/pseries/papr-rtas-common.c b/arch/powerpc/platforms/pseries/papr-rtas-common.c
index 1630e0cd210c..6bf4d1f15000 100644
--- a/arch/powerpc/platforms/pseries/papr-rtas-common.c
+++ b/arch/powerpc/platforms/pseries/papr-rtas-common.c
@@ -83,7 +83,7 @@ papr_rtas_blob_generate(struct papr_rtas_sequence *seq)
 	size_t len;
 	int err = 0;

-	blob  = kzalloc(sizeof(*blob), GFP_KERNEL_ACCOUNT);
+	blob = kzalloc_obj(*blob, GFP_KERNEL_ACCOUNT);
 	if (!blob)
 		return NULL;

diff --git a/arch/powerpc/platforms/pseries/papr-sysparm.c b/arch/powerpc/platforms/pseries/papr-sysparm.c
index 7063ce8884e4..7974750ab868 100644
--- a/arch/powerpc/platforms/pseries/papr-sysparm.c
+++ b/arch/powerpc/platforms/pseries/papr-sysparm.c
@@ -19,7 +19,7 @@

 struct papr_sysparm_buf *papr_sysparm_buf_alloc(void)
 {
-	struct papr_sysparm_buf *buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	struct papr_sysparm_buf *buf = kzalloc_obj(*buf, GFP_KERNEL);

 	return buf;
 }
diff --git a/arch/powerpc/platforms/pseries/papr_platform_attributes.c b/arch/powerpc/platforms/pseries/papr_platform_attributes.c
index eea2041b270b..a7821279661a 100644
--- a/arch/powerpc/platforms/pseries/papr_platform_attributes.c
+++ b/arch/powerpc/platforms/pseries/papr_platform_attributes.c
@@ -295,7 +295,7 @@ static int __init papr_init(void)
 		goto out_free_esi_buf;
 	}

-	papr_groups = kcalloc(num_attrs, sizeof(*papr_groups), GFP_KERNEL);
+	papr_groups = kzalloc_objs(*papr_groups, num_attrs, GFP_KERNEL);
 	if (!papr_groups)
 		goto out_free_esi_buf;

@@ -313,9 +313,9 @@ static int __init papr_init(void)

 	/* Allocate the groups before registering */
 	for (idx = 0; idx < num_attrs; idx++) {
-		papr_groups[idx].pg.attrs = kcalloc(KOBJ_MAX_ATTRS + 1,
-					    sizeof(*papr_groups[idx].pg.attrs),
-					    GFP_KERNEL);
+		papr_groups[idx].pg.attrs = kzalloc_objs(*papr_groups[idx].pg.attrs,
+							 KOBJ_MAX_ATTRS + 1,
+							 GFP_KERNEL);
 		if (!papr_groups[idx].pg.attrs)
 			goto out_pgattrs;

diff --git a/arch/powerpc/platforms/pseries/papr_scm.c b/arch/powerpc/platforms/pseries/papr_scm.c
index f7c9271bda58..5d41c0223f10 100644
--- a/arch/powerpc/platforms/pseries/papr_scm.c
+++ b/arch/powerpc/platforms/pseries/papr_scm.c
@@ -445,7 +445,7 @@ static void papr_scm_pmu_register(struct papr_scm_priv *p)
 	struct nvdimm_pmu *nd_pmu;
 	int rc, nodeid;

-	nd_pmu = kzalloc(sizeof(*nd_pmu), GFP_KERNEL);
+	nd_pmu = kzalloc_obj(*nd_pmu, GFP_KERNEL);
 	if (!nd_pmu) {
 		rc = -ENOMEM;
 		goto pmu_err_print;
@@ -1398,7 +1398,7 @@ static int papr_scm_probe(struct platform_device *pdev)
 	 */
 	update_numa_distance(dn);

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
index 6dbc73eb2ca2..8ce3f591a2b4 100644
--- a/arch/powerpc/platforms/pseries/pci.c
+++ b/arch/powerpc/platforms/pseries/pci.c
@@ -141,9 +141,7 @@ static int pseries_pci_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
 	}

 	pdn = pci_get_pdn(pdev);
-	pdn->pe_num_map = kmalloc_array(num_vfs,
-					sizeof(*pdn->pe_num_map),
-					GFP_KERNEL);
+	pdn->pe_num_map = kmalloc_objs(*pdn->pe_num_map, num_vfs, GFP_KERNEL);
 	if (!pdn->pe_num_map)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/pseries/reconfig.c b/arch/powerpc/platforms/pseries/reconfig.c
index 599bd2c78514..38f4312f5210 100644
--- a/arch/powerpc/platforms/pseries/reconfig.c
+++ b/arch/powerpc/platforms/pseries/reconfig.c
@@ -25,7 +25,7 @@ static int pSeries_reconfig_add_node(const char *path, struct property *proplist
 	struct device_node *np;
 	int err = -ENOMEM;

-	np = kzalloc(sizeof(*np), GFP_KERNEL);
+	np = kzalloc_obj(*np, GFP_KERNEL);
 	if (!np)
 		goto out_err;

@@ -168,7 +168,7 @@ static char * parse_next_property(char *buf, char *end, char **name, int *length
 static struct property *new_property(const char *name, const int length,
 				     const unsigned char *value, struct property *last)
 {
-	struct property *new = kzalloc(sizeof(*new), GFP_KERNEL);
+	struct property *new = kzalloc_obj(*new, GFP_KERNEL);

 	if (!new)
 		return NULL;
diff --git a/arch/powerpc/platforms/pseries/vas-sysfs.c b/arch/powerpc/platforms/pseries/vas-sysfs.c
index 9e05a0e99cad..44ed41dd4b5f 100644
--- a/arch/powerpc/platforms/pseries/vas-sysfs.c
+++ b/arch/powerpc/platforms/pseries/vas-sysfs.c
@@ -202,7 +202,7 @@ int sysfs_add_vas_caps(struct vas_cop_feat_caps *caps)
 	int ret = 0;
 	char *name;

-	centry = kzalloc(sizeof(*centry), GFP_KERNEL);
+	centry = kzalloc_obj(*centry, GFP_KERNEL);
 	if (!centry)
 		return -ENOMEM;

diff --git a/arch/powerpc/platforms/pseries/vas.c b/arch/powerpc/platforms/pseries/vas.c
index c25eb1a38185..d8890b62197b 100644
--- a/arch/powerpc/platforms/pseries/vas.c
+++ b/arch/powerpc/platforms/pseries/vas.c
@@ -324,7 +324,7 @@ static struct vas_window *vas_allocate_window(int vas_id, u64 flags,
 	struct pseries_vas_window *txwin;
 	int rc;

-	txwin = kzalloc(sizeof(*txwin), GFP_KERNEL);
+	txwin = kzalloc_obj(*txwin, GFP_KERNEL);
 	if (!txwin)
 		return ERR_PTR(-ENOMEM);

@@ -1087,7 +1087,7 @@ static int __init pseries_vas_init(void)
 		return -ENOTSUPP;
 	}

-	hv_caps = kmalloc(sizeof(*hv_caps), GFP_KERNEL);
+	hv_caps = kmalloc_obj(*hv_caps, GFP_KERNEL);
 	if (!hv_caps)
 		return -ENOMEM;
 	/*
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index 18cffac5468f..4cb192cd5aa9 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -744,8 +744,7 @@ static int vio_cmo_bus_probe(struct vio_dev *viodev)
 			viodev->cmo.desired = VIO_CMO_MIN_ENT;
 		size = VIO_CMO_MIN_ENT;

-		dev_ent = kmalloc(sizeof(struct vio_cmo_dev_entry),
-		                  GFP_KERNEL);
+		dev_ent = kmalloc_obj(struct vio_cmo_dev_entry, GFP_KERNEL);
 		if (!dev_ent)
 			return -ENOMEM;

@@ -1165,7 +1164,7 @@ static struct iommu_table *vio_build_iommu_table(struct vio_dev *dev)
 	if (!dma_window)
 		return NULL;

-	tbl = kzalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kzalloc_obj(*tbl, GFP_KERNEL);
 	if (tbl == NULL)
 		return NULL;

@@ -1376,7 +1375,7 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node)
 	}

 	/* allocate a vio_dev for this node */
-	viodev = kzalloc(sizeof(struct vio_dev), GFP_KERNEL);
+	viodev = kzalloc_obj(struct vio_dev, GFP_KERNEL);
 	if (viodev == NULL) {
 		pr_warn("%s: allocation failure for VIO device.\n", __func__);
 		return NULL;
diff --git a/arch/powerpc/sysdev/ehv_pic.c b/arch/powerpc/sysdev/ehv_pic.c
index b6f9774038e1..c4c61216b96a 100644
--- a/arch/powerpc/sysdev/ehv_pic.c
+++ b/arch/powerpc/sysdev/ehv_pic.c
@@ -263,7 +263,7 @@ void __init ehv_pic_init(void)
 		return;
 	}

-	ehv_pic = kzalloc(sizeof(struct ehv_pic), GFP_KERNEL);
+	ehv_pic = kzalloc_obj(struct ehv_pic, GFP_KERNEL);
 	if (!ehv_pic) {
 		of_node_put(np);
 		return;
diff --git a/arch/powerpc/sysdev/fsl_gtm.c b/arch/powerpc/sysdev/fsl_gtm.c
index 3dabc9621810..fabf39586eba 100644
--- a/arch/powerpc/sysdev/fsl_gtm.c
+++ b/arch/powerpc/sysdev/fsl_gtm.c
@@ -382,7 +382,7 @@ static int __init fsl_gtm_init(void)
 		const u32 *clock;
 		int size;

-		gtm = kzalloc(sizeof(*gtm), GFP_KERNEL);
+		gtm = kzalloc_obj(*gtm, GFP_KERNEL);
 		if (!gtm) {
 			pr_err("%pOF: unable to allocate memory\n",
 				np);
diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c
index 7ed07232a69a..01ddc6ac8277 100644
--- a/arch/powerpc/sysdev/fsl_lbc.c
+++ b/arch/powerpc/sysdev/fsl_lbc.c
@@ -283,7 +283,7 @@ static int fsl_lbc_ctrl_probe(struct platform_device *dev)
 		return -EFAULT;
 	}

-	fsl_lbc_ctrl_dev = kzalloc(sizeof(*fsl_lbc_ctrl_dev), GFP_KERNEL);
+	fsl_lbc_ctrl_dev = kzalloc_obj(*fsl_lbc_ctrl_dev, GFP_KERNEL);
 	if (!fsl_lbc_ctrl_dev)
 		return -ENOMEM;

@@ -363,7 +363,7 @@ static int fsl_lbc_syscore_suspend(void *data)
 	if (!lbc)
 		goto out;

-	ctrl->saved_regs = kmalloc(sizeof(struct fsl_lbc_regs), GFP_KERNEL);
+	ctrl->saved_regs = kmalloc_obj(struct fsl_lbc_regs, GFP_KERNEL);
 	if (!ctrl->saved_regs)
 		return -ENOMEM;

diff --git a/arch/powerpc/sysdev/fsl_mpic_timer_wakeup.c b/arch/powerpc/sysdev/fsl_mpic_timer_wakeup.c
index 06d9101a5d49..43d6fba2bd42 100644
--- a/arch/powerpc/sysdev/fsl_mpic_timer_wakeup.c
+++ b/arch/powerpc/sysdev/fsl_mpic_timer_wakeup.c
@@ -111,7 +111,7 @@ static int __init fsl_wakeup_sys_init(void)
 	struct device *dev_root;
 	int ret = -EINVAL;

-	fsl_wakeup = kzalloc(sizeof(struct fsl_mpic_timer_wakeup), GFP_KERNEL);
+	fsl_wakeup = kzalloc_obj(struct fsl_mpic_timer_wakeup, GFP_KERNEL);
 	if (!fsl_wakeup)
 		return -ENOMEM;

diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c
index 2a007bfb038d..525ea894c14a 100644
--- a/arch/powerpc/sysdev/fsl_msi.c
+++ b/arch/powerpc/sysdev/fsl_msi.c
@@ -361,7 +361,7 @@ static int fsl_msi_setup_hwirq(struct fsl_msi *msi, struct platform_device *dev,
 		return 0;
 	}

-	cascade_data = kzalloc(sizeof(struct fsl_msi_cascade_data), GFP_KERNEL);
+	cascade_data = kzalloc_obj(struct fsl_msi_cascade_data, GFP_KERNEL);
 	if (!cascade_data) {
 		dev_err(&dev->dev, "No memory for MSI cascade data\n");
 		return -ENOMEM;
@@ -405,7 +405,7 @@ static int fsl_of_msi_probe(struct platform_device *dev)

 	printk(KERN_DEBUG "Setting up Freescale MSI support\n");

-	msi = kzalloc(sizeof(struct fsl_msi), GFP_KERNEL);
+	msi = kzalloc_obj(struct fsl_msi, GFP_KERNEL);
 	if (!msi) {
 		dev_err(&dev->dev, "No memory for MSI structure\n");
 		return -ENOMEM;
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 4e501654cb41..0952b5ff8a16 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -767,7 +767,7 @@ static int __init mpc83xx_pcie_setup(struct pci_controller *hose,
 	u32 cfg_bar;
 	int ret = -ENOMEM;

-	pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
+	pcie = kzalloc_obj(*pcie, GFP_KERNEL);
 	if (!pcie)
 		return ret;

diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c
index f9b214b299e7..249b876daaee 100644
--- a/arch/powerpc/sysdev/fsl_rio.c
+++ b/arch/powerpc/sysdev/fsl_rio.c
@@ -470,7 +470,7 @@ static int fsl_rio_setup(struct platform_device *dev)
 		goto err_rio_regs;
 	}

-	ops = kzalloc(sizeof(struct rio_ops), GFP_KERNEL);
+	ops = kzalloc_obj(struct rio_ops, GFP_KERNEL);
 	if (!ops) {
 		rc = -ENOMEM;
 		goto err_ops;
@@ -517,7 +517,7 @@ static int fsl_rio_setup(struct platform_device *dev)
 		rc = -ENODEV;
 		goto err_dbell;
 	}
-	dbell = kzalloc(sizeof(struct fsl_rio_dbell), GFP_KERNEL);
+	dbell = kzalloc_obj(struct fsl_rio_dbell, GFP_KERNEL);
 	if (!(dbell)) {
 		dev_err(&dev->dev, "Can't alloc memory for 'fsl_rio_dbell'\n");
 		rc = -ENOMEM;
@@ -543,7 +543,7 @@ static int fsl_rio_setup(struct platform_device *dev)
 		rc = -ENODEV;
 		goto err_pw;
 	}
-	pw = kzalloc(sizeof(struct fsl_rio_pw), GFP_KERNEL);
+	pw = kzalloc_obj(struct fsl_rio_pw, GFP_KERNEL);
 	if (!(pw)) {
 		dev_err(&dev->dev, "Can't alloc memory for 'fsl_rio_pw'\n");
 		rc = -ENOMEM;
@@ -580,7 +580,7 @@ static int fsl_rio_setup(struct platform_device *dev)
 		dev_info(&dev->dev, "%pOF: LAW %pR\n",
 				np, &res);

-		port = kzalloc(sizeof(struct rio_mport), GFP_KERNEL);
+		port = kzalloc_obj(struct rio_mport, GFP_KERNEL);
 		if (!port)
 			continue;

@@ -593,7 +593,7 @@ static int fsl_rio_setup(struct platform_device *dev)
 		i = *port_index - 1;
 		port->index = (unsigned char)i;

-		priv = kzalloc(sizeof(struct rio_priv), GFP_KERNEL);
+		priv = kzalloc_obj(struct rio_priv, GFP_KERNEL);
 		if (!priv) {
 			dev_err(&dev->dev, "Can't alloc memory for 'priv'\n");
 			kfree(port);
diff --git a/arch/powerpc/sysdev/fsl_rmu.c b/arch/powerpc/sysdev/fsl_rmu.c
index f956591cb64e..c0e358cf7822 100644
--- a/arch/powerpc/sysdev/fsl_rmu.c
+++ b/arch/powerpc/sysdev/fsl_rmu.c
@@ -1079,7 +1079,7 @@ int fsl_rio_setup_rmu(struct rio_mport *mport, struct device_node *node)
 		return -EINVAL;
 	}

-	rmu = kzalloc(sizeof(struct fsl_rmu), GFP_KERNEL);
+	rmu = kzalloc_obj(struct fsl_rmu, GFP_KERNEL);
 	if (!rmu)
 		return -ENOMEM;

diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c
index 290ba8427239..2351604cc24a 100644
--- a/arch/powerpc/sysdev/ipic.c
+++ b/arch/powerpc/sysdev/ipic.c
@@ -707,7 +707,7 @@ struct ipic * __init ipic_init(struct device_node *node, unsigned int flags)
 	if (ret)
 		return NULL;

-	ipic = kzalloc(sizeof(*ipic), GFP_KERNEL);
+	ipic = kzalloc_obj(*ipic, GFP_KERNEL);
 	if (ipic == NULL)
 		return NULL;

diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 67e51998d1ae..cb4cdd853cc8 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -547,7 +547,7 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic)
 	printk(KERN_INFO "mpic: Setting up HT PICs workarounds for U3/U4\n");

 	/* Allocate fixups array */
-	mpic->fixups = kcalloc(128, sizeof(*mpic->fixups), GFP_KERNEL);
+	mpic->fixups = kzalloc_objs(*mpic->fixups, 128, GFP_KERNEL);
 	BUG_ON(mpic->fixups == NULL);

 	/* Init spinlock */
@@ -1273,7 +1273,7 @@ struct mpic * __init mpic_alloc(struct device_node *node,
 		mpic_tm_chip.flags |= IRQCHIP_SKIP_SET_WAKE;
 	}

-	mpic = kzalloc(sizeof(struct mpic), GFP_KERNEL);
+	mpic = kzalloc_obj(struct mpic, GFP_KERNEL);
 	if (mpic == NULL)
 		goto err_of_node_put;

@@ -1639,9 +1639,8 @@ void __init mpic_init(struct mpic *mpic)

 #ifdef CONFIG_PM
 	/* allocate memory to save mpic state */
-	mpic->save_data = kmalloc_array(mpic->num_sources,
-				        sizeof(*mpic->save_data),
-				        GFP_KERNEL);
+	mpic->save_data = kmalloc_objs(*mpic->save_data, mpic->num_sources,
+				       GFP_KERNEL);
 	BUG_ON(mpic->save_data == NULL);
 #endif

diff --git a/arch/powerpc/sysdev/mpic_msgr.c b/arch/powerpc/sysdev/mpic_msgr.c
index 7b449cc51aef..8b1c02f5b1b3 100644
--- a/arch/powerpc/sysdev/mpic_msgr.c
+++ b/arch/powerpc/sysdev/mpic_msgr.c
@@ -188,8 +188,8 @@ static int mpic_msgr_probe(struct platform_device *dev)
 		dev_info(&dev->dev, "Found %d message registers\n",
 				mpic_msgr_count);

-		mpic_msgrs = kcalloc(mpic_msgr_count, sizeof(*mpic_msgrs),
-							 GFP_KERNEL);
+		mpic_msgrs = kzalloc_objs(*mpic_msgrs, mpic_msgr_count,
+					  GFP_KERNEL);
 		if (!mpic_msgrs) {
 			dev_err(&dev->dev,
 				"No memory for message register blocks\n");
@@ -227,7 +227,7 @@ static int mpic_msgr_probe(struct platform_device *dev)
 		struct mpic_msgr *msgr;
 		unsigned int reg_number;

-		msgr = kzalloc(sizeof(struct mpic_msgr), GFP_KERNEL);
+		msgr = kzalloc_obj(struct mpic_msgr, GFP_KERNEL);
 		if (!msgr) {
 			dev_err(&dev->dev, "No memory for message register\n");
 			return -ENOMEM;
diff --git a/arch/powerpc/sysdev/mpic_timer.c b/arch/powerpc/sysdev/mpic_timer.c
index 60f5b3934b51..7b237b6f7151 100644
--- a/arch/powerpc/sysdev/mpic_timer.c
+++ b/arch/powerpc/sysdev/mpic_timer.c
@@ -464,7 +464,7 @@ static void __init timer_group_init(struct device_node *np)
 	unsigned int i = 0;
 	int ret;

-	priv = kzalloc(sizeof(struct timer_group_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct timer_group_priv, GFP_KERNEL);
 	if (!priv) {
 		pr_err("%pOF: cannot allocate memory for group.\n", np);
 		return;
diff --git a/arch/powerpc/sysdev/of_rtc.c b/arch/powerpc/sysdev/of_rtc.c
index 2211937d3788..6c2ba4c44b11 100644
--- a/arch/powerpc/sysdev/of_rtc.c
+++ b/arch/powerpc/sysdev/of_rtc.c
@@ -33,7 +33,7 @@ void __init of_instantiate_rtc(void)
 					 of_rtc_table[i].compatible) {
 			struct resource *res;

-			res = kmalloc(sizeof(*res), GFP_KERNEL);
+			res = kmalloc_obj(*res, GFP_KERNEL);
 			if (!res) {
 				printk(KERN_ERR "OF RTC: Out of memory "
 				       "allocating resource structure for %pOF\n",
diff --git a/arch/powerpc/sysdev/xics/ics-native.c b/arch/powerpc/sysdev/xics/ics-native.c
index 112c8a1e8159..50634a0ae478 100644
--- a/arch/powerpc/sysdev/xics/ics-native.c
+++ b/arch/powerpc/sysdev/xics/ics-native.c
@@ -186,7 +186,7 @@ static int __init ics_native_add_one(struct device_node *np)
 	u32 ranges[2];
 	int rc, count;

-	ics = kzalloc(sizeof(struct ics_native), GFP_KERNEL);
+	ics = kzalloc_obj(struct ics_native, GFP_KERNEL);
 	if (!ics)
 		return -ENOMEM;
 	ics->node = of_node_get(np);
diff --git a/arch/powerpc/sysdev/xive/common.c b/arch/powerpc/sysdev/xive/common.c
index 8d0123b0ae84..f0fbee162f47 100644
--- a/arch/powerpc/sysdev/xive/common.c
+++ b/arch/powerpc/sysdev/xive/common.c
@@ -1016,7 +1016,7 @@ static struct xive_irq_data *xive_irq_alloc_data(unsigned int virq, irq_hw_numbe
 	struct xive_irq_data *xd;
 	int rc;

-	xd = kzalloc(sizeof(struct xive_irq_data), GFP_KERNEL);
+	xd = kzalloc_obj(struct xive_irq_data, GFP_KERNEL);
 	if (!xd)
 		return ERR_PTR(-ENOMEM);
 	rc = xive_ops->populate_irq_data(hw, xd);
@@ -1144,7 +1144,8 @@ static int __init xive_init_ipis(void)
 	if (!ipi_domain)
 		goto out_free_fwnode;

-	xive_ipis = kcalloc(nr_node_ids, sizeof(*xive_ipis), GFP_KERNEL | __GFP_NOFAIL);
+	xive_ipis = kzalloc_objs(*xive_ipis, nr_node_ids,
+				 GFP_KERNEL | __GFP_NOFAIL);
 	if (!xive_ipis)
 		goto out_free_domain;

diff --git a/arch/powerpc/sysdev/xive/spapr.c b/arch/powerpc/sysdev/xive/spapr.c
index 5aedbe3e8e6a..dca293f07303 100644
--- a/arch/powerpc/sysdev/xive/spapr.c
+++ b/arch/powerpc/sysdev/xive/spapr.c
@@ -52,7 +52,7 @@ static int __init xive_irq_bitmap_add(int base, int count)
 {
 	struct xive_irq_bitmap *xibm;

-	xibm = kzalloc(sizeof(*xibm), GFP_KERNEL);
+	xibm = kzalloc_obj(*xibm, GFP_KERNEL);
 	if (!xibm)
 		return -ENOMEM;

diff --git a/arch/riscv/kernel/hibernate.c b/arch/riscv/kernel/hibernate.c
index 671b686c0158..0e31c02cb554 100644
--- a/arch/riscv/kernel/hibernate.c
+++ b/arch/riscv/kernel/hibernate.c
@@ -415,7 +415,7 @@ int hibernate_resume_nonboot_cpu_disable(void)

 static int __init riscv_hibernate_init(void)
 {
-	hibernate_cpu_context = kzalloc(sizeof(*hibernate_cpu_context), GFP_KERNEL);
+	hibernate_cpu_context = kzalloc_obj(*hibernate_cpu_context, GFP_KERNEL);

 	if (WARN_ON(!hibernate_cpu_context))
 		return -ENOMEM;
diff --git a/arch/riscv/kernel/machine_kexec_file.c b/arch/riscv/kernel/machine_kexec_file.c
index dd9d92a96517..a780d3e0955c 100644
--- a/arch/riscv/kernel/machine_kexec_file.c
+++ b/arch/riscv/kernel/machine_kexec_file.c
@@ -64,7 +64,7 @@ static int prepare_elf_headers(void **addr, unsigned long *sz)
 	nr_ranges = 1; /* For exclusion of crashkernel region */
 	walk_system_ram_res(0, -1, &nr_ranges, get_nr_ram_ranges_callback);

-	cmem = kmalloc(struct_size(cmem, ranges, nr_ranges), GFP_KERNEL);
+	cmem = kmalloc_flex(*cmem, ranges, nr_ranges, GFP_KERNEL);
 	if (!cmem)
 		return -ENOMEM;

diff --git a/arch/riscv/kernel/module.c b/arch/riscv/kernel/module.c
index 7f6147c18033..addc7dac2424 100644
--- a/arch/riscv/kernel/module.c
+++ b/arch/riscv/kernel/module.c
@@ -663,7 +663,7 @@ static int add_relocation_to_accumulate(struct module *me, int type,
 	struct used_bucket *bucket;
 	unsigned long hash;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);

 	if (!entry)
 		return -ENOMEM;
@@ -697,7 +697,7 @@ static int add_relocation_to_accumulate(struct module *me, int type,
 	 * relocation_entry.
 	 */
 	if (!found) {
-		rel_head = kmalloc(sizeof(*rel_head), GFP_KERNEL);
+		rel_head = kmalloc_obj(*rel_head, GFP_KERNEL);

 		if (!rel_head) {
 			kfree(entry);
@@ -709,7 +709,7 @@ static int add_relocation_to_accumulate(struct module *me, int type,
 		INIT_HLIST_NODE(&rel_head->node);
 		if (!current_head->first) {
 			bucket =
-				kmalloc(sizeof(struct used_bucket), GFP_KERNEL);
+				kmalloc_obj(struct used_bucket, GFP_KERNEL);

 			if (!bucket) {
 				kfree(entry);
@@ -753,9 +753,8 @@ initialize_relocation_hashtable(unsigned int num_relocations,
 	hashtable_size <<= should_double_size;

 	/* Number of relocations may be large, so kvmalloc it */
-	*relocation_hashtable = kvmalloc_array(hashtable_size,
-					       sizeof(**relocation_hashtable),
-					       GFP_KERNEL);
+	*relocation_hashtable = kvmalloc_objs(**relocation_hashtable,
+					      hashtable_size, GFP_KERNEL);
 	if (!*relocation_hashtable)
 		return 0;

diff --git a/arch/riscv/kernel/tests/kprobes/test-kprobes.c b/arch/riscv/kernel/tests/kprobes/test-kprobes.c
index 664535ca0a98..c0526c0c7527 100644
--- a/arch/riscv/kernel/tests/kprobes/test-kprobes.c
+++ b/arch/riscv/kernel/tests/kprobes/test-kprobes.c
@@ -20,7 +20,7 @@ static void test_kprobe_riscv(struct kunit *test)
 	while (test_kprobes_addresses[num_kprobe])
 		num_kprobe++;

-	kp = kcalloc(num_kprobe, sizeof(*kp), GFP_KERNEL);
+	kp = kzalloc_objs(*kp, num_kprobe, GFP_KERNEL);
 	KUNIT_EXPECT_TRUE(test, kp);
 	if (!kp)
 		return;
diff --git a/arch/riscv/kernel/unaligned_access_speed.c b/arch/riscv/kernel/unaligned_access_speed.c
index 70b5e6927620..63ed6e6b24eb 100644
--- a/arch/riscv/kernel/unaligned_access_speed.c
+++ b/arch/riscv/kernel/unaligned_access_speed.c
@@ -139,7 +139,7 @@ static void __init check_unaligned_access_speed_all_cpus(void)
 {
 	unsigned int cpu;
 	unsigned int cpu_count = num_possible_cpus();
-	struct page **bufs = kcalloc(cpu_count, sizeof(*bufs), GFP_KERNEL);
+	struct page **bufs = kzalloc_objs(*bufs, cpu_count, GFP_KERNEL);

 	if (!bufs) {
 		pr_warn("Allocation failure, not measuring misaligned performance\n");
diff --git a/arch/riscv/kernel/vdso.c b/arch/riscv/kernel/vdso.c
index 43f70198ac3c..7e3749131c59 100644
--- a/arch/riscv/kernel/vdso.c
+++ b/arch/riscv/kernel/vdso.c
@@ -55,9 +55,8 @@ static void __init __vdso_init(struct __vdso_info *vdso_info)
 		vdso_info->vdso_code_start) >>
 		PAGE_SHIFT;

-	vdso_pagelist = kcalloc(vdso_info->vdso_pages,
-				sizeof(struct page *),
-				GFP_KERNEL);
+	vdso_pagelist = kzalloc_objs(struct page *, vdso_info->vdso_pages,
+				     GFP_KERNEL);
 	if (vdso_pagelist == NULL)
 		panic("vDSO kcalloc failed!\n");

diff --git a/arch/riscv/kvm/aia_aplic.c b/arch/riscv/kvm/aia_aplic.c
index f59d1c0c8c43..25d9c2a3a85a 100644
--- a/arch/riscv/kvm/aia_aplic.c
+++ b/arch/riscv/kvm/aia_aplic.c
@@ -580,7 +580,7 @@ int kvm_riscv_aia_aplic_init(struct kvm *kvm)
 		return 0;

 	/* Allocate APLIC global state */
-	aplic = kzalloc(sizeof(*aplic), GFP_KERNEL);
+	aplic = kzalloc_obj(*aplic, GFP_KERNEL);
 	if (!aplic)
 		return -ENOMEM;
 	kvm->arch.aia.aplic_state = aplic;
@@ -588,8 +588,7 @@ int kvm_riscv_aia_aplic_init(struct kvm *kvm)
 	/* Setup APLIC IRQs */
 	aplic->nr_irqs = kvm->arch.aia.nr_sources + 1;
 	aplic->nr_words = DIV_ROUND_UP(aplic->nr_irqs, 32);
-	aplic->irqs = kcalloc(aplic->nr_irqs,
-			      sizeof(*aplic->irqs), GFP_KERNEL);
+	aplic->irqs = kzalloc_objs(*aplic->irqs, aplic->nr_irqs, GFP_KERNEL);
 	if (!aplic->irqs) {
 		ret = -ENOMEM;
 		goto fail_free_aplic;
diff --git a/arch/riscv/kvm/aia_imsic.c b/arch/riscv/kvm/aia_imsic.c
index 60da5fa155a6..aafa19629524 100644
--- a/arch/riscv/kvm/aia_imsic.c
+++ b/arch/riscv/kvm/aia_imsic.c
@@ -1095,7 +1095,7 @@ int kvm_riscv_vcpu_aia_imsic_init(struct kvm_vcpu *vcpu)
 		return -EINVAL;

 	/* Allocate IMSIC context */
-	imsic = kzalloc(sizeof(*imsic), GFP_KERNEL);
+	imsic = kzalloc_obj(*imsic, GFP_KERNEL);
 	if (!imsic)
 		return -ENOMEM;
 	vcpu->arch.aia_context.imsic_state = imsic;
diff --git a/arch/riscv/kvm/vcpu_sbi_fwft.c b/arch/riscv/kvm/vcpu_sbi_fwft.c
index 62cc9c3d5759..14cea431b863 100644
--- a/arch/riscv/kvm/vcpu_sbi_fwft.c
+++ b/arch/riscv/kvm/vcpu_sbi_fwft.c
@@ -352,8 +352,8 @@ static int kvm_sbi_ext_fwft_init(struct kvm_vcpu *vcpu)
 	struct kvm_sbi_fwft_config *conf;
 	int i;

-	fwft->configs = kcalloc(ARRAY_SIZE(features), sizeof(struct kvm_sbi_fwft_config),
-				GFP_KERNEL);
+	fwft->configs = kzalloc_objs(struct kvm_sbi_fwft_config,
+				     ARRAY_SIZE(features), GFP_KERNEL);
 	if (!fwft->configs)
 		return -ENOMEM;

diff --git a/arch/riscv/kvm/vm.c b/arch/riscv/kvm/vm.c
index 66d91ae6e9b2..ca3da58dc968 100644
--- a/arch/riscv/kvm/vm.c
+++ b/arch/riscv/kvm/vm.c
@@ -95,7 +95,7 @@ int kvm_riscv_setup_default_irq_routing(struct kvm *kvm, u32 lines)
 	struct kvm_irq_routing_entry *ents;
 	int i, rc;

-	ents = kcalloc(lines, sizeof(*ents), GFP_KERNEL);
+	ents = kzalloc_objs(*ents, lines, GFP_KERNEL);
 	if (!ents)
 		return -ENOMEM;

diff --git a/arch/riscv/net/bpf_jit_comp64.c b/arch/riscv/net/bpf_jit_comp64.c
index f065b45e8d8f..4d1c2639a64f 100644
--- a/arch/riscv/net/bpf_jit_comp64.c
+++ b/arch/riscv/net/bpf_jit_comp64.c
@@ -1195,7 +1195,7 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,
 	}

 	if (fmod_ret->nr_links) {
-		branches_off = kcalloc(fmod_ret->nr_links, sizeof(int), GFP_KERNEL);
+		branches_off = kzalloc_objs(int, fmod_ret->nr_links, GFP_KERNEL);
 		if (!branches_off)
 			return -ENOMEM;

diff --git a/arch/riscv/net/bpf_jit_core.c b/arch/riscv/net/bpf_jit_core.c
index f6ca5cfa6b2f..af48c94e300a 100644
--- a/arch/riscv/net/bpf_jit_core.c
+++ b/arch/riscv/net/bpf_jit_core.c
@@ -63,7 +63,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)

 	jit_data = prog->aux->jit_data;
 	if (!jit_data) {
-		jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
+		jit_data = kzalloc_obj(*jit_data, GFP_KERNEL);
 		if (!jit_data) {
 			prog = orig_prog;
 			goto out;
@@ -82,7 +82,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
 	ctx->arena_vm_start = bpf_arena_get_kern_vm_start(prog->aux->arena);
 	ctx->user_vm_start = bpf_arena_get_user_vm_start(prog->aux->arena);
 	ctx->prog = prog;
-	ctx->offset = kcalloc(prog->len, sizeof(int), GFP_KERNEL);
+	ctx->offset = kzalloc_objs(int, prog->len, GFP_KERNEL);
 	if (!ctx->offset) {
 		prog = orig_prog;
 		goto out_offset;
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c
index feb43db63f30..0d6725fd881e 100644
--- a/arch/s390/appldata/appldata_base.c
+++ b/arch/s390/appldata/appldata_base.c
@@ -140,7 +140,7 @@ int appldata_diag(char record_nr, u16 function, unsigned long buffer,
 	struct appldata_product_id *id;
 	int rc;

-	parm_list = kmalloc(sizeof(*parm_list), GFP_KERNEL);
+	parm_list = kmalloc_obj(*parm_list, GFP_KERNEL);
 	id = kmemdup(&appldata_id, sizeof(appldata_id), GFP_KERNEL);
 	rc = -ENOMEM;
 	if (parm_list && id) {
@@ -350,7 +350,7 @@ int appldata_register_ops(struct appldata_ops *ops)
 	if (ops->size > APPLDATA_MAX_REC_SIZE)
 		return -EINVAL;

-	ops->ctl_table = kcalloc(1, sizeof(struct ctl_table), GFP_KERNEL);
+	ops->ctl_table = kzalloc_objs(struct ctl_table, 1, GFP_KERNEL);
 	if (!ops->ctl_table)
 		return -ENOMEM;

diff --git a/arch/s390/appldata/appldata_mem.c b/arch/s390/appldata/appldata_mem.c
index fc608f9b79ab..e24369ec3134 100644
--- a/arch/s390/appldata/appldata_mem.c
+++ b/arch/s390/appldata/appldata_mem.c
@@ -130,7 +130,7 @@ static int __init appldata_mem_init(void)
 {
 	int ret;

-	ops.data = kzalloc(sizeof(struct appldata_mem_data), GFP_KERNEL);
+	ops.data = kzalloc_obj(struct appldata_mem_data, GFP_KERNEL);
 	if (!ops.data)
 		return -ENOMEM;

diff --git a/arch/s390/appldata/appldata_net_sum.c b/arch/s390/appldata/appldata_net_sum.c
index 59c282ca002f..3a0574f33664 100644
--- a/arch/s390/appldata/appldata_net_sum.c
+++ b/arch/s390/appldata/appldata_net_sum.c
@@ -132,7 +132,7 @@ static int __init appldata_net_init(void)
 {
 	int ret;

-	ops.data = kzalloc(sizeof(struct appldata_net_sum_data), GFP_KERNEL);
+	ops.data = kzalloc_obj(struct appldata_net_sum_data, GFP_KERNEL);
 	if (!ops.data)
 		return -ENOMEM;

diff --git a/arch/s390/hypfs/hypfs_dbfs.c b/arch/s390/hypfs/hypfs_dbfs.c
index 41a0d2066fa0..8002bdc692d6 100644
--- a/arch/s390/hypfs/hypfs_dbfs.c
+++ b/arch/s390/hypfs/hypfs_dbfs.c
@@ -16,7 +16,7 @@ static struct hypfs_dbfs_data *hypfs_dbfs_data_alloc(struct hypfs_dbfs_file *f)
 {
 	struct hypfs_dbfs_data *data;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;
 	data->dbfs_file = f;
diff --git a/arch/s390/hypfs/hypfs_diag0c.c b/arch/s390/hypfs/hypfs_diag0c.c
index 61220e717af0..5e27dc7a7569 100644
--- a/arch/s390/hypfs/hypfs_diag0c.c
+++ b/arch/s390/hypfs/hypfs_diag0c.c
@@ -35,13 +35,12 @@ static void *diag0c_store(unsigned int *count)

 	cpus_read_lock();
 	cpu_count = num_online_cpus();
-	cpu_vec = kmalloc_array(num_possible_cpus(), sizeof(*cpu_vec),
-				GFP_KERNEL);
+	cpu_vec = kmalloc_objs(*cpu_vec, num_possible_cpus(), GFP_KERNEL);
 	if (!cpu_vec)
 		goto fail_unlock_cpus;
 	/* Note: Diag 0c needs 8 byte alignment and real storage */
-	diag0c_data = kzalloc(struct_size(diag0c_data, entry, cpu_count),
-			      GFP_KERNEL | GFP_DMA);
+	diag0c_data = kzalloc_flex(*diag0c_data, entry, cpu_count,
+				   GFP_KERNEL | GFP_DMA);
 	if (!diag0c_data)
 		goto fail_kfree_cpu_vec;
 	i = 0;
diff --git a/arch/s390/hypfs/hypfs_sprp.c b/arch/s390/hypfs/hypfs_sprp.c
index a72576221cab..2e8847048dc1 100644
--- a/arch/s390/hypfs/hypfs_sprp.c
+++ b/arch/s390/hypfs/hypfs_sprp.c
@@ -74,7 +74,7 @@ static int __hypfs_sprp_ioctl(void __user *user_area)

 	rc = -ENOMEM;
 	data = (void *)get_zeroed_page(GFP_KERNEL);
-	diag304 = kzalloc(sizeof(*diag304), GFP_KERNEL);
+	diag304 = kzalloc_obj(*diag304, GFP_KERNEL);
 	if (!data || !diag304)
 		goto out;

diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c
index 3a47c2e24b6e..0f4a9113ec1a 100644
--- a/arch/s390/hypfs/inode.c
+++ b/arch/s390/hypfs/inode.c
@@ -292,7 +292,7 @@ static int hypfs_init_fs_context(struct fs_context *fc)
 {
 	struct hypfs_sb_info *sbi;

-	sbi = kzalloc(sizeof(struct hypfs_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct hypfs_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

diff --git a/arch/s390/include/asm/idals.h b/arch/s390/include/asm/idals.h
index e5000ee6cdc6..94de4ddf503f 100644
--- a/arch/s390/include/asm/idals.h
+++ b/arch/s390/include/asm/idals.h
@@ -94,7 +94,7 @@ static inline int set_normalized_cda(struct ccw1 *ccw, void *vaddr)
 		return -EINVAL;
 	nridaws = idal_nr_words(vaddr, ccw->count);
 	if (nridaws > 0) {
-		idal = kcalloc(nridaws, sizeof(*idal), GFP_ATOMIC | GFP_DMA);
+		idal = kzalloc_objs(*idal, nridaws, GFP_ATOMIC | GFP_DMA);
 		if (!idal)
 			return -ENOMEM;
 		idal_create_words(idal, vaddr, ccw->count);
@@ -137,7 +137,7 @@ static inline struct idal_buffer *idal_buffer_alloc(size_t size, int page_order)

 	nr_ptrs = (size + IDA_BLOCK_SIZE - 1) >> IDA_SIZE_SHIFT;
 	nr_chunks = (PAGE_SIZE << page_order) >> IDA_SIZE_SHIFT;
-	ib = kmalloc(struct_size(ib, data, nr_ptrs), GFP_DMA | GFP_KERNEL);
+	ib = kmalloc_flex(*ib, data, nr_ptrs, GFP_DMA | GFP_KERNEL);
 	if (!ib)
 		return ERR_PTR(-ENOMEM);
 	ib->size = size;
@@ -195,7 +195,7 @@ static inline struct idal_buffer **idal_buffer_array_alloc(size_t size, int page
 	int i;

 	count = (size + CCW_MAX_BYTE_COUNT - 1) / CCW_MAX_BYTE_COUNT;
-	ibs = kmalloc_array(count + 1, sizeof(*ibs), GFP_KERNEL);
+	ibs = kmalloc_objs(*ibs, count + 1, GFP_KERNEL);
 	for (i = 0; i < count; i++) {
 		/* Determine size for the current idal buffer */
 		ib_size = min(size, CCW_MAX_BYTE_COUNT);
diff --git a/arch/s390/kernel/cert_store.c b/arch/s390/kernel/cert_store.c
index c217a5e64094..8e3964c33ebb 100644
--- a/arch/s390/kernel/cert_store.c
+++ b/arch/s390/kernel/cert_store.c
@@ -322,7 +322,7 @@ static int invalidate_keyring_keys(struct key *keyring)

 	keyring_payload_len = key_type_keyring.read(keyring, NULL, 0);
 	num_keys = keyring_payload_len / sizeof(key_serial_t);
-	key_array = kcalloc(num_keys, sizeof(key_serial_t), GFP_KERNEL);
+	key_array = kzalloc_objs(key_serial_t, num_keys, GFP_KERNEL);
 	if (!key_array)
 		return -ENOMEM;

diff --git a/arch/s390/kernel/debug.c b/arch/s390/kernel/debug.c
index e722243841f8..a917b4c899ef 100644
--- a/arch/s390/kernel/debug.c
+++ b/arch/s390/kernel/debug.c
@@ -181,14 +181,13 @@ static debug_entry_t ***debug_areas_alloc(int pages_per_area, int nr_areas)
 	debug_entry_t ***areas;
 	int i, j;

-	areas = kmalloc_array(nr_areas, sizeof(debug_entry_t **), GFP_KERNEL);
+	areas = kmalloc_objs(debug_entry_t **, nr_areas, GFP_KERNEL);
 	if (!areas)
 		goto fail_malloc_areas;
 	for (i = 0; i < nr_areas; i++) {
 		/* GFP_NOWARN to avoid user triggerable WARN, we handle fails */
-		areas[i] = kmalloc_array(pages_per_area,
-					 sizeof(debug_entry_t *),
-					 GFP_KERNEL | __GFP_NOWARN);
+		areas[i] = kmalloc_objs(debug_entry_t *, pages_per_area,
+					GFP_KERNEL | __GFP_NOWARN);
 		if (!areas[i])
 			goto fail_malloc_areas2;
 		for (j = 0; j < pages_per_area; j++) {
@@ -225,13 +224,13 @@ static debug_info_t *debug_info_alloc(const char *name, int pages_per_area,
 	debug_info_t *rc;

 	/* alloc everything */
-	rc = kmalloc(sizeof(debug_info_t), GFP_KERNEL);
+	rc = kmalloc_obj(debug_info_t, GFP_KERNEL);
 	if (!rc)
 		goto fail_malloc_rc;
-	rc->active_entries = kcalloc(nr_areas, sizeof(int), GFP_KERNEL);
+	rc->active_entries = kzalloc_objs(int, nr_areas, GFP_KERNEL);
 	if (!rc->active_entries)
 		goto fail_malloc_active_entries;
-	rc->active_pages = kcalloc(nr_areas, sizeof(int), GFP_KERNEL);
+	rc->active_pages = kzalloc_objs(int, nr_areas, GFP_KERNEL);
 	if (!rc->active_pages)
 		goto fail_malloc_active_pages;
 	if ((mode == ALL_AREAS) && (pages_per_area != 0)) {
@@ -631,7 +630,7 @@ static file_private_info_t *debug_file_private_alloc(debug_info_t *debug_info,

 	if (!debug_info_snapshot)
 		return NULL;
-	p_info = kmalloc(sizeof(file_private_info_t), GFP_KERNEL);
+	p_info = kmalloc_obj(file_private_info_t, GFP_KERNEL);
 	if (!p_info) {
 		debug_info_free(debug_info_snapshot);
 		return NULL;
diff --git a/arch/s390/kernel/guarded_storage.c b/arch/s390/kernel/guarded_storage.c
index cf26d7a37425..4d4101f19e3c 100644
--- a/arch/s390/kernel/guarded_storage.c
+++ b/arch/s390/kernel/guarded_storage.c
@@ -24,7 +24,7 @@ static int gs_enable(void)
 	struct gs_cb *gs_cb;

 	if (!current->thread.gs_cb) {
-		gs_cb = kzalloc(sizeof(*gs_cb), GFP_KERNEL);
+		gs_cb = kzalloc_obj(*gs_cb, GFP_KERNEL);
 		if (!gs_cb)
 			return -ENOMEM;
 		gs_cb->gsd = 25;
@@ -55,7 +55,7 @@ static int gs_set_bc_cb(struct gs_cb __user *u_gs_cb)

 	gs_cb = current->thread.gs_bc_cb;
 	if (!gs_cb) {
-		gs_cb = kzalloc(sizeof(*gs_cb), GFP_KERNEL);
+		gs_cb = kzalloc_obj(*gs_cb, GFP_KERNEL);
 		if (!gs_cb)
 			return -ENOMEM;
 		current->thread.gs_bc_cb = gs_cb;
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c
index bdf9c7cb5685..f81723bc8856 100644
--- a/arch/s390/kernel/irq.c
+++ b/arch/s390/kernel/irq.c
@@ -312,7 +312,7 @@ int register_external_irq(u16 code, ext_int_handler_t handler)
 	unsigned long flags;
 	int index;

-	p = kmalloc(sizeof(*p), GFP_ATOMIC);
+	p = kmalloc_obj(*p, GFP_ATOMIC);
 	if (!p)
 		return -ENOMEM;
 	p->code = code;
diff --git a/arch/s390/kernel/os_info.c b/arch/s390/kernel/os_info.c
index 94fa44776d0c..37ab1c671b4d 100644
--- a/arch/s390/kernel/os_info.c
+++ b/arch/s390/kernel/os_info.c
@@ -154,7 +154,7 @@ static void os_info_old_init(void)
 		goto fail;
 	if (addr == 0 || addr % PAGE_SIZE)
 		goto fail;
-	os_info_old = kzalloc(sizeof(*os_info_old), GFP_KERNEL);
+	os_info_old = kzalloc_obj(*os_info_old, GFP_KERNEL);
 	if (!os_info_old)
 		goto fail;
 	if (copy_oldmem_kernel(os_info_old, addr, sizeof(*os_info_old)))
diff --git a/arch/s390/kernel/perf_cpum_cf.c b/arch/s390/kernel/perf_cpum_cf.c
index 408ab93112bf..0c4074e717d4 100644
--- a/arch/s390/kernel/perf_cpum_cf.c
+++ b/arch/s390/kernel/perf_cpum_cf.c
@@ -252,7 +252,7 @@ static int cpum_cf_alloc_cpu(int cpu)
 	cpuhw = p->cpucf;

 	if (!cpuhw) {
-		cpuhw = kzalloc(sizeof(*cpuhw), GFP_KERNEL);
+		cpuhw = kzalloc_obj(*cpuhw, GFP_KERNEL);
 		if (cpuhw) {
 			p->cpucf = cpuhw;
 			refcount_set(&cpuhw->refcnt, 1);
@@ -1616,7 +1616,7 @@ static long cfset_ioctl_start(unsigned long arg, struct file *file)
 	if (!start.counter_sets)
 		return -EINVAL;		/* No counter set at all? */

-	preq = kzalloc(sizeof(*preq), GFP_KERNEL);
+	preq = kzalloc_obj(*preq, GFP_KERNEL);
 	if (!preq)
 		return -ENOMEM;
 	cpumask_clear(&preq->mask);
diff --git a/arch/s390/kernel/perf_cpum_cf_events.c b/arch/s390/kernel/perf_cpum_cf_events.c
index 7ace1f9e4ccf..eb067beb5c51 100644
--- a/arch/s390/kernel/perf_cpum_cf_events.c
+++ b/arch/s390/kernel/perf_cpum_cf_events.c
@@ -976,7 +976,7 @@ static __init struct attribute **merge_attr(struct attribute **a,
 		j++;
 	j++;

-	new = kmalloc_array(j, sizeof(struct attribute *), GFP_KERNEL);
+	new = kmalloc_objs(struct attribute *, j, GFP_KERNEL);
 	if (!new)
 		return NULL;
 	j = 0;
diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c
index e8bd19ac82c7..d0adeabfce0c 100644
--- a/arch/s390/kernel/perf_cpum_sf.c
+++ b/arch/s390/kernel/perf_cpum_sf.c
@@ -1609,7 +1609,7 @@ static void *aux_buffer_setup(struct perf_event *event, void **pages,
 	}

 	/* Allocate aux_buffer struct for the event */
-	aux = kzalloc(sizeof(struct aux_buffer), GFP_KERNEL);
+	aux = kzalloc_obj(struct aux_buffer, GFP_KERNEL);
 	if (!aux)
 		goto no_aux;
 	sfb = &aux->sfb;
diff --git a/arch/s390/kernel/perf_pai.c b/arch/s390/kernel/perf_pai.c
index 810f5b6c5e01..4c2ce0a2a8e4 100644
--- a/arch/s390/kernel/perf_pai.c
+++ b/arch/s390/kernel/perf_pai.c
@@ -252,7 +252,7 @@ static int pai_alloc_cpu(struct perf_event *event, int cpu)
 	cpump = mp->mapptr;
 	if (!cpump) {			/* Paicrypt_map allocated? */
 		rc = -ENOMEM;
-		cpump = kzalloc(sizeof(*cpump), GFP_KERNEL);
+		cpump = kzalloc_obj(*cpump, GFP_KERNEL);
 		if (!cpump)
 			goto undo;
 		/* Allocate memory for counter page and counter extraction.
@@ -281,9 +281,9 @@ static int pai_alloc_cpu(struct perf_event *event, int cpu)
 			cpump->paiext_cb = kzalloc(PAIE1_CB_SZ, GFP_KERNEL);
 			need_paiext_cb = true;
 		}
-		cpump->save = kvmalloc_array(pai_pmu[idx].num_avail + 1,
-					     sizeof(struct pai_userdata),
-					     GFP_KERNEL);
+		cpump->save = kvmalloc_objs(struct pai_userdata,
+					    pai_pmu[idx].num_avail + 1,
+					    GFP_KERNEL);
 		if (!cpump->area || !cpump->save ||
 		    (need_paiext_cb && !cpump->paiext_cb)) {
 			pai_free(mp);
@@ -315,7 +315,7 @@ static int pai_alloc(struct perf_event *event)
 	struct cpumask *maskptr;
 	int cpu, rc = -ENOMEM;

-	maskptr = kzalloc(sizeof(*maskptr), GFP_KERNEL);
+	maskptr = kzalloc_obj(*maskptr, GFP_KERNEL);
 	if (!maskptr)
 		goto out;

@@ -1070,7 +1070,7 @@ static struct attribute * __init attr_event_init_one(int num,
 {
 	struct perf_pmu_events_attr *pa;

-	pa = kzalloc(sizeof(*pa), GFP_KERNEL);
+	pa = kzalloc_obj(*pa, GFP_KERNEL);
 	if (!pa)
 		return NULL;

@@ -1089,7 +1089,7 @@ static struct attribute ** __init attr_event_init(struct pai_pmu *p)
 	struct attribute **attrs;
 	unsigned int i;

-	attrs = kmalloc_array(min_attr + 1, sizeof(*attrs), GFP_KERNEL | __GFP_ZERO);
+	attrs = kmalloc_objs(*attrs, min_attr + 1, GFP_KERNEL | __GFP_ZERO);
 	if (!attrs)
 		goto out;
 	for (i = 0; i < min_attr; i++) {
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
index ceaa1726e328..3a08f8f6c865 100644
--- a/arch/s390/kernel/ptrace.c
+++ b/arch/s390/kernel/ptrace.c
@@ -749,7 +749,7 @@ static int s390_gs_cb_set(struct task_struct *target,
 	if (!cpu_has_gs())
 		return -ENODEV;
 	if (!target->thread.gs_cb) {
-		data = kzalloc(sizeof(*data), GFP_KERNEL);
+		data = kzalloc_obj(*data, GFP_KERNEL);
 		if (!data)
 			return -ENOMEM;
 	}
@@ -800,7 +800,7 @@ static int s390_gs_bc_set(struct task_struct *target,
 	if (!cpu_has_gs())
 		return -ENODEV;
 	if (!data) {
-		data = kzalloc(sizeof(*data), GFP_KERNEL);
+		data = kzalloc_obj(*data, GFP_KERNEL);
 		if (!data)
 			return -ENOMEM;
 		target->thread.gs_bc_cb = data;
@@ -861,7 +861,7 @@ static int s390_runtime_instr_set(struct task_struct *target,
 		return -ENODEV;

 	if (!target->thread.ri_cb) {
-		data = kzalloc(sizeof(*data), GFP_KERNEL);
+		data = kzalloc_obj(*data, GFP_KERNEL);
 		if (!data)
 			return -ENOMEM;
 	}
diff --git a/arch/s390/kernel/runtime_instr.c b/arch/s390/kernel/runtime_instr.c
index 1788a5454b6f..0331ee7af39d 100644
--- a/arch/s390/kernel/runtime_instr.c
+++ b/arch/s390/kernel/runtime_instr.c
@@ -83,7 +83,7 @@ SYSCALL_DEFINE2(s390_runtime_instr, int, command, int, signum)
 		return -EINVAL;

 	if (!current->thread.ri_cb) {
-		cb = kzalloc(sizeof(*cb), GFP_KERNEL);
+		cb = kzalloc_obj(*cb, GFP_KERNEL);
 		if (!cb)
 			return -ENOMEM;
 	} else {
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index eb334539444a..615b76a7f2a0 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -1145,7 +1145,7 @@ int __ref smp_rescan_cpus(bool early)
 	struct sclp_core_info *info;
 	int nr;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	smp_get_core_info(info, 0);
diff --git a/arch/s390/kernel/vdso.c b/arch/s390/kernel/vdso.c
index a27a90a199be..1838a4696747 100644
--- a/arch/s390/kernel/vdso.c
+++ b/arch/s390/kernel/vdso.c
@@ -132,7 +132,7 @@ static struct page ** __init vdso_setup_pages(void *start, void *end)
 	struct page **pagelist;
 	int i;

-	pagelist = kcalloc(pages + 1, sizeof(struct page *), GFP_KERNEL);
+	pagelist = kzalloc_objs(struct page *, pages + 1, GFP_KERNEL);
 	if (!pagelist)
 		panic("%s: Cannot allocate page list for VDSO", __func__);
 	for (i = 0; i < pages; i++)
diff --git a/arch/s390/kvm/dat.c b/arch/s390/kvm/dat.c
index 129dc55a4a0d..670404d4fa44 100644
--- a/arch/s390/kvm/dat.c
+++ b/arch/s390/kvm/dat.c
@@ -45,7 +45,7 @@ int kvm_s390_mmu_cache_topup(struct kvm_s390_mmu_cache *mc)
 		mc->pts[mc->n_pts] = o;
 	}
 	for ( ; mc->n_rmaps < KVM_S390_MMU_CACHE_N_RMAPS; mc->n_rmaps++) {
-		o = kzalloc(sizeof(*mc->rmaps[0]), GFP_KERNEL_ACCOUNT);
+		o = kzalloc_obj(*mc->rmaps[0], GFP_KERNEL_ACCOUNT);
 		if (!o)
 			return -ENOMEM;
 		mc->rmaps[mc->n_rmaps] = o;
diff --git a/arch/s390/kvm/dat.h b/arch/s390/kvm/dat.h
index 8c7ae07dcc28..123e11dcd70d 100644
--- a/arch/s390/kvm/dat.h
+++ b/arch/s390/kvm/dat.h
@@ -572,7 +572,7 @@ static inline struct vsie_rmap *kvm_s390_mmu_cache_alloc_rmap(struct kvm_s390_mm
 {
 	if (mc->n_rmaps)
 		return mc->rmaps[--mc->n_rmaps];
-	return kzalloc(sizeof(struct vsie_rmap), GFP_KVM_S390_MMU_CACHE);
+	return kzalloc_obj(struct vsie_rmap, GFP_KVM_S390_MMU_CACHE);
 }

 static inline struct crst_table *crste_table_start(union crste *crstep)
@@ -920,7 +920,7 @@ static inline struct kvm_s390_mmu_cache *kvm_s390_new_mmu_cache(void)
 {
 	struct kvm_s390_mmu_cache *mc __free(kvm_s390_mmu_cache) = NULL;

-	mc = kzalloc(sizeof(*mc), GFP_KERNEL_ACCOUNT);
+	mc = kzalloc_obj(*mc, GFP_KERNEL_ACCOUNT);
 	if (mc && !kvm_s390_mmu_cache_topup(mc))
 		return_ptr(mc);
 	return NULL;
diff --git a/arch/s390/kvm/gmap.c b/arch/s390/kvm/gmap.c
index 26cd2b208b6f..ef0c6ebfdde2 100644
--- a/arch/s390/kvm/gmap.c
+++ b/arch/s390/kvm/gmap.c
@@ -57,7 +57,7 @@ struct gmap *gmap_new(struct kvm *kvm, gfn_t limit)

 	type = gmap_limit_to_type(limit);

-	gmap = kzalloc(sizeof(*gmap), GFP_KERNEL_ACCOUNT);
+	gmap = kzalloc_obj(*gmap, GFP_KERNEL_ACCOUNT);
 	if (!gmap)
 		return NULL;
 	INIT_LIST_HEAD(&gmap->children);
@@ -918,7 +918,7 @@ int gmap_insert_rmap(struct gmap *sg, gfn_t p_gfn, gfn_t r_gfn, int level)
 	KVM_BUG_ON(!is_shadow(sg), sg->kvm);
 	lockdep_assert_held(&sg->host_to_rmap_lock);

-	rmap = kzalloc(sizeof(*rmap), GFP_ATOMIC);
+	rmap = kzalloc_obj(*rmap, GFP_ATOMIC);
 	if (!rmap)
 		return -ENOMEM;

diff --git a/arch/s390/kvm/guestdbg.c b/arch/s390/kvm/guestdbg.c
index 80879fc73c90..69835e1d4f20 100644
--- a/arch/s390/kvm/guestdbg.c
+++ b/arch/s390/kvm/guestdbg.c
@@ -232,18 +232,14 @@ int kvm_s390_import_bp_data(struct kvm_vcpu *vcpu,
 	}

 	if (nr_wp > 0) {
-		wp_info = kmalloc_array(nr_wp,
-					sizeof(*wp_info),
-					GFP_KERNEL_ACCOUNT);
+		wp_info = kmalloc_objs(*wp_info, nr_wp, GFP_KERNEL_ACCOUNT);
 		if (!wp_info) {
 			ret = -ENOMEM;
 			goto error;
 		}
 	}
 	if (nr_bp > 0) {
-		bp_info = kmalloc_array(nr_bp,
-					sizeof(*bp_info),
-					GFP_KERNEL_ACCOUNT);
+		bp_info = kmalloc_objs(*bp_info, nr_bp, GFP_KERNEL_ACCOUNT);
 		if (!bp_info) {
 			ret = -ENOMEM;
 			goto error;
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index 1c2bb5cd7e12..18932a65ca68 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -1749,7 +1749,7 @@ struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm,
 		goto out;
 	}
 gisa_out:
-	tmp_inti = kzalloc(sizeof(*inti), GFP_KERNEL_ACCOUNT);
+	tmp_inti = kzalloc_obj(*inti, GFP_KERNEL_ACCOUNT);
 	if (tmp_inti) {
 		tmp_inti->type = KVM_S390_INT_IO(1, 0, 0, 0);
 		tmp_inti->io.io_int_word = isc_to_int_word(isc);
@@ -1968,7 +1968,7 @@ int kvm_s390_inject_vm(struct kvm *kvm,
 	struct kvm_s390_interrupt_info *inti;
 	int rc;

-	inti = kzalloc(sizeof(*inti), GFP_KERNEL_ACCOUNT);
+	inti = kzalloc_obj(*inti, GFP_KERNEL_ACCOUNT);
 	if (!inti)
 		return -ENOMEM;

@@ -2374,7 +2374,7 @@ static int enqueue_floating_irq(struct kvm_device *dev,
 		return -EINVAL;

 	while (len >= sizeof(struct kvm_s390_irq)) {
-		inti = kzalloc(sizeof(*inti), GFP_KERNEL_ACCOUNT);
+		inti = kzalloc_obj(*inti, GFP_KERNEL_ACCOUNT);
 		if (!inti)
 			return -ENOMEM;

@@ -2422,7 +2422,7 @@ static int register_io_adapter(struct kvm_device *dev,
 	if (dev->kvm->arch.adapters[adapter_info.id] != NULL)
 		return -EINVAL;

-	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL_ACCOUNT);
+	adapter = kzalloc_obj(*adapter, GFP_KERNEL_ACCOUNT);
 	if (!adapter)
 		return -ENOMEM;

diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index de645025db0f..7a175d86cef0 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1418,7 +1418,7 @@ static int kvm_s390_set_processor(struct kvm *kvm, struct kvm_device_attr *attr)
 		ret = -EBUSY;
 		goto out;
 	}
-	proc = kzalloc(sizeof(*proc), GFP_KERNEL_ACCOUNT);
+	proc = kzalloc_obj(*proc, GFP_KERNEL_ACCOUNT);
 	if (!proc) {
 		ret = -ENOMEM;
 		goto out;
@@ -1618,7 +1618,7 @@ static int kvm_s390_get_processor(struct kvm *kvm, struct kvm_device_attr *attr)
 	struct kvm_s390_vm_cpu_processor *proc;
 	int ret = 0;

-	proc = kzalloc(sizeof(*proc), GFP_KERNEL_ACCOUNT);
+	proc = kzalloc_obj(*proc, GFP_KERNEL_ACCOUNT);
 	if (!proc) {
 		ret = -ENOMEM;
 		goto out;
@@ -1646,7 +1646,7 @@ static int kvm_s390_get_machine(struct kvm *kvm, struct kvm_device_attr *attr)
 	struct kvm_s390_vm_cpu_machine *mach;
 	int ret = 0;

-	mach = kzalloc(sizeof(*mach), GFP_KERNEL_ACCOUNT);
+	mach = kzalloc_obj(*mach, GFP_KERNEL_ACCOUNT);
 	if (!mach) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/arch/s390/kvm/pci.c b/arch/s390/kvm/pci.c
index 8c40154ff50f..2ac911e388bd 100644
--- a/arch/s390/kvm/pci.c
+++ b/arch/s390/kvm/pci.c
@@ -54,7 +54,7 @@ static int zpci_setup_aipb(u8 nisc)
 	struct page *page;
 	int size, rc;

-	zpci_aipb = kzalloc(sizeof(union zpci_sic_iib), GFP_KERNEL);
+	zpci_aipb = kzalloc_obj(union zpci_sic_iib, GFP_KERNEL);
 	if (!zpci_aipb)
 		return -ENOMEM;

@@ -126,8 +126,8 @@ int kvm_s390_pci_aen_init(u8 nisc)
 		return -EPERM;

 	mutex_lock(&aift->aift_lock);
-	aift->kzdev = kcalloc(ZPCI_NR_DEVICES, sizeof(struct kvm_zdev *),
-			      GFP_KERNEL);
+	aift->kzdev = kzalloc_objs(struct kvm_zdev *, ZPCI_NR_DEVICES,
+				   GFP_KERNEL);
 	if (!aift->kzdev) {
 		rc = -ENOMEM;
 		goto unlock;
@@ -404,7 +404,7 @@ static int kvm_s390_pci_dev_open(struct zpci_dev *zdev)
 {
 	struct kvm_zdev *kzdev;

-	kzdev = kzalloc(sizeof(struct kvm_zdev), GFP_KERNEL);
+	kzdev = kzalloc_obj(struct kvm_zdev, GFP_KERNEL);
 	if (!kzdev)
 		return -ENOMEM;

@@ -666,7 +666,7 @@ int __init kvm_s390_pci_init(void)
 	if (!kvm_s390_pci_interp_allowed())
 		return 0;

-	aift = kzalloc(sizeof(struct zpci_aift), GFP_KERNEL);
+	aift = kzalloc_obj(struct zpci_aift, GFP_KERNEL);
 	if (!aift)
 		return -ENOMEM;

diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c
index 461b413c76a3..fd34a2f46ce3 100644
--- a/arch/s390/kvm/pv.c
+++ b/arch/s390/kvm/pv.c
@@ -466,7 +466,7 @@ int kvm_s390_pv_set_aside(struct kvm *kvm, u16 *rc, u16 *rrc)
 	if (kvm->arch.gmap->asce.dt == TABLE_TYPE_SEGMENT)
 		return -EINVAL;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/arch/s390/mm/extmem.c b/arch/s390/mm/extmem.c
index 6cc33c705de2..db1ef34ad03e 100644
--- a/arch/s390/mm/extmem.c
+++ b/arch/s390/mm/extmem.c
@@ -171,8 +171,8 @@ query_segment_type (struct dcss_segment *seg)
 	struct qout64 *qout;
 	struct qin64 *qin;

-	qin = kmalloc(sizeof(*qin), GFP_KERNEL | GFP_DMA);
-	qout = kmalloc(sizeof(*qout), GFP_KERNEL | GFP_DMA);
+	qin = kmalloc_obj(*qin, GFP_KERNEL | GFP_DMA);
+	qout = kmalloc_obj(*qout, GFP_KERNEL | GFP_DMA);
 	if ((qin == NULL) || (qout == NULL)) {
 		rc = -ENOMEM;
 		goto out_free;
@@ -302,7 +302,7 @@ __segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long

 	start_addr = end_addr = 0;
 	segtype = -1;
-	seg = kmalloc(sizeof(*seg), GFP_KERNEL | GFP_DMA);
+	seg = kmalloc_obj(*seg, GFP_KERNEL | GFP_DMA);
 	if (seg == NULL) {
 		rc = -ENOMEM;
 		goto out;
@@ -317,7 +317,7 @@ __segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long
 		goto out_free;
 	}

-	seg->res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+	seg->res = kzalloc_obj(struct resource, GFP_KERNEL);
 	if (seg->res == NULL) {
 		rc = -ENOMEM;
 		goto out_free;
diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
index 579461d471bb..582afb486093 100644
--- a/arch/s390/net/bpf_jit_comp.c
+++ b/arch/s390/net/bpf_jit_comp.c
@@ -2323,7 +2323,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)

 	jit_data = fp->aux->jit_data;
 	if (!jit_data) {
-		jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
+		jit_data = kzalloc_obj(*jit_data, GFP_KERNEL);
 		if (!jit_data) {
 			fp = orig_fp;
 			goto out;
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
index 97bab20bc163..b75065130639 100644
--- a/arch/s390/pci/pci.c
+++ b/arch/s390/pci/pci.c
@@ -523,7 +523,7 @@ static struct resource *__alloc_res(struct zpci_dev *zdev, unsigned long start,
 {
 	struct resource *r;

-	r = kzalloc(sizeof(*r), GFP_KERNEL);
+	r = kzalloc_obj(*r, GFP_KERNEL);
 	if (!r)
 		return NULL;

@@ -824,7 +824,7 @@ struct zpci_dev *zpci_create_device(u32 fid, u32 fh, enum zpci_state state)
 	struct zpci_dev *zdev;
 	int rc;

-	zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
+	zdev = kzalloc_obj(*zdev, GFP_KERNEL);
 	if (!zdev)
 		return ERR_PTR(-ENOMEM);

@@ -1073,8 +1073,8 @@ static int zpci_mem_init(void)
 	if (!zdev_fmb_cache)
 		goto error_fmb;

-	zpci_iomap_start = kcalloc(ZPCI_IOMAP_ENTRIES,
-				   sizeof(*zpci_iomap_start), GFP_KERNEL);
+	zpci_iomap_start = kzalloc_objs(*zpci_iomap_start, ZPCI_IOMAP_ENTRIES,
+					GFP_KERNEL);
 	if (!zpci_iomap_start)
 		goto error_iomap;

diff --git a/arch/s390/pci/pci_bus.c b/arch/s390/pci/pci_bus.c
index 42a13e451f64..3eba87a036b1 100644
--- a/arch/s390/pci/pci_bus.c
+++ b/arch/s390/pci/pci_bus.c
@@ -315,7 +315,7 @@ static struct zpci_bus *zpci_bus_alloc(int topo, bool topo_is_tid)
 {
 	struct zpci_bus *zbus;

-	zbus = kzalloc(sizeof(*zbus), GFP_KERNEL);
+	zbus = kzalloc_obj(*zbus, GFP_KERNEL);
 	if (!zbus)
 		return NULL;

diff --git a/arch/s390/pci/pci_irq.c b/arch/s390/pci/pci_irq.c
index e9dd45f3c09d..441356767437 100644
--- a/arch/s390/pci/pci_irq.c
+++ b/arch/s390/pci/pci_irq.c
@@ -563,8 +563,7 @@ static int __init zpci_directed_irq_init(void)
 	iib.diib.disb_addr = virt_to_phys(zpci_sbv->vector);
 	zpci_set_irq_ctrl(SIC_IRQ_MODE_DIRECT, 0, &iib);

-	zpci_ibv = kcalloc(num_possible_cpus(), sizeof(*zpci_ibv),
-			   GFP_KERNEL);
+	zpci_ibv = kzalloc_objs(*zpci_ibv, num_possible_cpus(), GFP_KERNEL);
 	if (!zpci_ibv)
 		return -ENOMEM;

@@ -590,7 +589,7 @@ static int __init zpci_directed_irq_init(void)

 static int __init zpci_floating_irq_init(void)
 {
-	zpci_ibv = kcalloc(ZPCI_NR_DEVICES, sizeof(*zpci_ibv), GFP_KERNEL);
+	zpci_ibv = kzalloc_objs(*zpci_ibv, ZPCI_NR_DEVICES, GFP_KERNEL);
 	if (!zpci_ibv)
 		return -ENOMEM;

diff --git a/arch/sh/drivers/dma/dmabrg.c b/arch/sh/drivers/dma/dmabrg.c
index 5b2c1fd254d7..72f90f0c799e 100644
--- a/arch/sh/drivers/dma/dmabrg.c
+++ b/arch/sh/drivers/dma/dmabrg.c
@@ -153,8 +153,7 @@ static int __init dmabrg_init(void)
 	unsigned long or;
 	int ret;

-	dmabrg_handlers = kcalloc(10, sizeof(struct dmabrg_handler),
-				  GFP_KERNEL);
+	dmabrg_handlers = kzalloc_objs(struct dmabrg_handler, 10, GFP_KERNEL);
 	if (!dmabrg_handlers)
 		return -ENOMEM;

diff --git a/arch/sh/drivers/heartbeat.c b/arch/sh/drivers/heartbeat.c
index 42103038a7d0..aae320cef692 100644
--- a/arch/sh/drivers/heartbeat.c
+++ b/arch/sh/drivers/heartbeat.c
@@ -91,7 +91,7 @@ static int heartbeat_drv_probe(struct platform_device *pdev)
 	if (pdev->dev.platform_data) {
 		hd = pdev->dev.platform_data;
 	} else {
-		hd = kzalloc(sizeof(struct heartbeat_data), GFP_KERNEL);
+		hd = kzalloc_obj(struct heartbeat_data, GFP_KERNEL);
 		if (unlikely(!hd))
 			return -ENOMEM;
 	}
diff --git a/arch/sh/drivers/pci/pcie-sh7786.c b/arch/sh/drivers/pci/pcie-sh7786.c
index a78b9a935585..1e67082eb3b4 100644
--- a/arch/sh/drivers/pci/pcie-sh7786.c
+++ b/arch/sh/drivers/pci/pcie-sh7786.c
@@ -558,8 +558,8 @@ static int __init sh7786_pcie_init(void)
 	if (unlikely(nr_ports == 0))
 		return -ENODEV;

-	sh7786_pcie_ports = kcalloc(nr_ports, sizeof(struct sh7786_pcie_port),
-				    GFP_KERNEL);
+	sh7786_pcie_ports = kzalloc_objs(struct sh7786_pcie_port, nr_ports,
+					 GFP_KERNEL);
 	if (unlikely(!sh7786_pcie_ports))
 		return -ENOMEM;

diff --git a/arch/sh/drivers/push-switch.c b/arch/sh/drivers/push-switch.c
index 443cc6fd26a8..492315fc96fd 100644
--- a/arch/sh/drivers/push-switch.c
+++ b/arch/sh/drivers/push-switch.c
@@ -46,7 +46,7 @@ static int switch_drv_probe(struct platform_device *pdev)
 	struct push_switch *psw;
 	int ret, irq;

-	psw = kzalloc(sizeof(struct push_switch), GFP_KERNEL);
+	psw = kzalloc_obj(struct push_switch, GFP_KERNEL);
 	if (unlikely(!psw))
 		return -ENOMEM;

diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c
index d289e99dc118..2a465c440168 100644
--- a/arch/sh/kernel/cpu/sh4/sq.c
+++ b/arch/sh/kernel/cpu/sh4/sq.c
@@ -342,7 +342,7 @@ static int sq_dev_add(struct device *dev, struct subsys_interface *sif)
 	struct kobject *kobj;
 	int error;

-	sq_kobject[cpu] = kzalloc(sizeof(struct kobject), GFP_KERNEL);
+	sq_kobject[cpu] = kzalloc_obj(struct kobject, GFP_KERNEL);
 	if (unlikely(!sq_kobject[cpu]))
 		return -ENOMEM;

diff --git a/arch/sh/kernel/dwarf.c b/arch/sh/kernel/dwarf.c
index a1b54bedc929..46df80942418 100644
--- a/arch/sh/kernel/dwarf.c
+++ b/arch/sh/kernel/dwarf.c
@@ -741,7 +741,7 @@ static int dwarf_parse_cie(void *entry, void *p, unsigned long len,
 	unsigned long flags;
 	int count;

-	cie = kzalloc(sizeof(*cie), GFP_KERNEL);
+	cie = kzalloc_obj(*cie, GFP_KERNEL);
 	if (!cie)
 		return -ENOMEM;

@@ -874,7 +874,7 @@ static int dwarf_parse_fde(void *entry, u32 entry_type,
 	int count;
 	void *p = start;

-	fde = kzalloc(sizeof(*fde), GFP_KERNEL);
+	fde = kzalloc_obj(*fde, GFP_KERNEL);
 	if (!fde)
 		return -ENOMEM;

diff --git a/arch/sparc/kernel/central.c b/arch/sparc/kernel/central.c
index a1a6485c9183..904c4223230f 100644
--- a/arch/sparc/kernel/central.c
+++ b/arch/sparc/kernel/central.c
@@ -63,7 +63,7 @@ static int clock_board_calc_nslots(struct clock_board *p)

 static int clock_board_probe(struct platform_device *op)
 {
-	struct clock_board *p = kzalloc(sizeof(*p), GFP_KERNEL);
+	struct clock_board *p = kzalloc_obj(*p, GFP_KERNEL);
 	int err = -ENOMEM;

 	if (!p) {
@@ -159,7 +159,7 @@ static struct platform_driver clock_board_driver = {

 static int fhc_probe(struct platform_device *op)
 {
-	struct fhc *p = kzalloc(sizeof(*p), GFP_KERNEL);
+	struct fhc *p = kzalloc_obj(*p, GFP_KERNEL);
 	int err = -ENOMEM;
 	u32 reg;

diff --git a/arch/sparc/kernel/chmc.c b/arch/sparc/kernel/chmc.c
index d4c74d6b2e1b..663b2d7ff7bc 100644
--- a/arch/sparc/kernel/chmc.c
+++ b/arch/sparc/kernel/chmc.c
@@ -417,7 +417,7 @@ static int jbusmc_probe(struct platform_device *op)
 	num_mem_regs = len / sizeof(*mem_regs);

 	err = -ENOMEM;
-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p) {
 		printk(KERN_ERR PFX "Cannot allocate struct jbusmc.\n");
 		goto out;
@@ -718,7 +718,7 @@ static int chmc_probe(struct platform_device *op)
 	}

 	err = -ENOMEM;
-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p) {
 		printk(KERN_ERR PFX "Could not allocate struct chmc.\n");
 		goto out;
diff --git a/arch/sparc/kernel/cpumap.c b/arch/sparc/kernel/cpumap.c
index 8fcf2d8c6bd2..d51ff010176c 100644
--- a/arch/sparc/kernel/cpumap.c
+++ b/arch/sparc/kernel/cpumap.c
@@ -194,7 +194,7 @@ static struct cpuinfo_tree *build_cpuinfo_tree(void)

 	n = enumerate_cpuinfo_nodes(tmp_level);

-	new_tree = kzalloc(struct_size(new_tree, nodes, n), GFP_ATOMIC);
+	new_tree = kzalloc_flex(*new_tree, nodes, n, GFP_ATOMIC);
 	if (!new_tree)
 		return NULL;

diff --git a/arch/sparc/kernel/ds.c b/arch/sparc/kernel/ds.c
index f7fc6f2af2f2..df3fa6d96074 100644
--- a/arch/sparc/kernel/ds.c
+++ b/arch/sparc/kernel/ds.c
@@ -1175,7 +1175,7 @@ static int ds_probe(struct vio_dev *vdev, const struct vio_device_id *id)
 	if (ds_version_printed++ == 0)
 		printk(KERN_INFO "%s", version);

-	dp = kzalloc(sizeof(*dp), GFP_KERNEL);
+	dp = kzalloc_obj(*dp, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!dp)
 		goto out_err;
diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c
index 5ebca5c7af1e..82d248e6b822 100644
--- a/arch/sparc/kernel/ioport.c
+++ b/arch/sparc/kernel/ioport.c
@@ -238,7 +238,7 @@ unsigned long sparc_dma_alloc_resource(struct device *dev, size_t len)
 {
 	struct resource *res;

-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (!res)
 		return 0;
 	res->name = dev->of_node->full_name;
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index ded463c82abd..c5466a9fd560 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -628,7 +628,7 @@ unsigned int build_irq(int inofixup, unsigned long iclr, unsigned long imap)
 	if (unlikely(handler_data))
 		goto out;

-	handler_data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
+	handler_data = kzalloc_obj(struct irq_handler_data, GFP_ATOMIC);
 	if (unlikely(!handler_data)) {
 		prom_printf("IRQ: kzalloc(irq_handler_data) failed.\n");
 		prom_halt();
@@ -654,7 +654,7 @@ static unsigned int sun4v_build_common(u32 devhandle, unsigned int devino,
 	if (!irq)
 		goto out;

-	data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
+	data = kzalloc_obj(struct irq_handler_data, GFP_ATOMIC);
 	if (unlikely(!data)) {
 		pr_err("IRQ handler data allocation failed.\n");
 		irq_free(irq);
diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c
index 7f3cdb6f644d..4fd357d5fc29 100644
--- a/arch/sparc/kernel/ldc.c
+++ b/arch/sparc/kernel/ldc.c
@@ -1171,7 +1171,7 @@ struct ldc_channel *ldc_alloc(unsigned long id,

 	mssbuf = NULL;

-	lp = kzalloc(sizeof(*lp), GFP_KERNEL);
+	lp = kzalloc_obj(*lp, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!lp)
 		goto out_err;
diff --git a/arch/sparc/kernel/leon_pci_grpci2.c b/arch/sparc/kernel/leon_pci_grpci2.c
index 9f662340b5b2..c6d5cec12b67 100644
--- a/arch/sparc/kernel/leon_pci_grpci2.c
+++ b/arch/sparc/kernel/leon_pci_grpci2.c
@@ -721,7 +721,7 @@ static int grpci2_of_probe(struct platform_device *ofdev)
 		goto err1;
 	}

-	priv = grpci2priv = kzalloc(sizeof(struct grpci2_priv), GFP_KERNEL);
+	priv = grpci2priv = kzalloc_obj(struct grpci2_priv, GFP_KERNEL);
 	if (grpci2priv == NULL) {
 		err = -ENOMEM;
 		goto err1;
diff --git a/arch/sparc/kernel/of_device_32.c b/arch/sparc/kernel/of_device_32.c
index 284a4cafa432..51e90a093ee0 100644
--- a/arch/sparc/kernel/of_device_32.c
+++ b/arch/sparc/kernel/of_device_32.c
@@ -340,7 +340,7 @@ static void __init build_device_resources(struct platform_device *op,
 static struct platform_device * __init scan_one_device(struct device_node *dp,
 						 struct device *parent)
 {
-	struct platform_device *op = kzalloc(sizeof(*op), GFP_KERNEL);
+	struct platform_device *op = kzalloc_obj(*op, GFP_KERNEL);
 	const struct linux_prom_irqs *intr;
 	struct dev_archdata *sd;
 	int len, i;
diff --git a/arch/sparc/kernel/of_device_64.c b/arch/sparc/kernel/of_device_64.c
index f53092b07b9e..c30ad34525bd 100644
--- a/arch/sparc/kernel/of_device_64.c
+++ b/arch/sparc/kernel/of_device_64.c
@@ -633,7 +633,7 @@ static unsigned int __init build_one_device_irq(struct platform_device *op,
 static struct platform_device * __init scan_one_device(struct device_node *dp,
 						 struct device *parent)
 {
-	struct platform_device *op = kzalloc(sizeof(*op), GFP_KERNEL);
+	struct platform_device *op = kzalloc_obj(*op, GFP_KERNEL);
 	const unsigned int *irq;
 	struct dev_archdata *sd;
 	int len, i;
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
index b290107170e9..432f83cf61aa 100644
--- a/arch/sparc/kernel/pci.c
+++ b/arch/sparc/kernel/pci.c
@@ -650,7 +650,7 @@ static void pci_claim_legacy_resources(struct pci_dev *dev)
 	if ((dev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
 		return;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return;

diff --git a/arch/sparc/kernel/pci_common.c b/arch/sparc/kernel/pci_common.c
index 2576f4f31309..588cfc595b84 100644
--- a/arch/sparc/kernel/pci_common.c
+++ b/arch/sparc/kernel/pci_common.c
@@ -336,7 +336,7 @@ static void pci_register_iommu_region(struct pci_pbm_info *pbm)
 					  NULL);

 	if (vdma) {
-		struct resource *rp = kzalloc(sizeof(*rp), GFP_KERNEL);
+		struct resource *rp = kzalloc_obj(*rp, GFP_KERNEL);

 		if (!rp) {
 			pr_info("%s: Cannot allocate IOMMU resource.\n",
diff --git a/arch/sparc/kernel/pci_fire.c b/arch/sparc/kernel/pci_fire.c
index 0b91bde80fdc..b72cf5acbdba 100644
--- a/arch/sparc/kernel/pci_fire.c
+++ b/arch/sparc/kernel/pci_fire.c
@@ -468,13 +468,13 @@ static int fire_probe(struct platform_device *op)
 	portid = of_getintprop_default(dp, "portid", 0xff);

 	err = -ENOMEM;
-	pbm = kzalloc(sizeof(*pbm), GFP_KERNEL);
+	pbm = kzalloc_obj(*pbm, GFP_KERNEL);
 	if (!pbm) {
 		printk(KERN_ERR PFX "Cannot allocate pci_pbminfo.\n");
 		goto out_err;
 	}

-	iommu = kzalloc(sizeof(struct iommu), GFP_KERNEL);
+	iommu = kzalloc_obj(struct iommu, GFP_KERNEL);
 	if (!iommu) {
 		printk(KERN_ERR PFX "Cannot allocate PBM iommu.\n");
 		goto out_free_controller;
diff --git a/arch/sparc/kernel/pci_psycho.c b/arch/sparc/kernel/pci_psycho.c
index 1efc98305ec7..9880b341a631 100644
--- a/arch/sparc/kernel/pci_psycho.c
+++ b/arch/sparc/kernel/pci_psycho.c
@@ -519,7 +519,7 @@ static int psycho_probe(struct platform_device *op)
 	upa_portid = of_getintprop_default(dp, "upa-portid", 0xff);

 	err = -ENOMEM;
-	pbm = kzalloc(sizeof(*pbm), GFP_KERNEL);
+	pbm = kzalloc_obj(*pbm, GFP_KERNEL);
 	if (!pbm) {
 		printk(KERN_ERR PFX "Cannot allocate pci_pbm_info.\n");
 		goto out_err;
@@ -529,7 +529,7 @@ static int psycho_probe(struct platform_device *op)
 	if (pbm->sibling) {
 		iommu = pbm->sibling->iommu;
 	} else {
-		iommu = kzalloc(sizeof(struct iommu), GFP_KERNEL);
+		iommu = kzalloc_obj(struct iommu, GFP_KERNEL);
 		if (!iommu) {
 			printk(KERN_ERR PFX "Cannot allocate PBM iommu.\n");
 			goto out_free_controller;
diff --git a/arch/sparc/kernel/pci_sabre.c b/arch/sparc/kernel/pci_sabre.c
index a84598568300..3b4116f23862 100644
--- a/arch/sparc/kernel/pci_sabre.c
+++ b/arch/sparc/kernel/pci_sabre.c
@@ -482,13 +482,13 @@ static int sabre_probe(struct platform_device *op)
 	}

 	err = -ENOMEM;
-	pbm = kzalloc(sizeof(*pbm), GFP_KERNEL);
+	pbm = kzalloc_obj(*pbm, GFP_KERNEL);
 	if (!pbm) {
 		printk(KERN_ERR PFX "Cannot allocate pci_pbm_info.\n");
 		goto out_err;
 	}

-	iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
+	iommu = kzalloc_obj(*iommu, GFP_KERNEL);
 	if (!iommu) {
 		printk(KERN_ERR PFX "Cannot allocate PBM iommu.\n");
 		goto out_free_controller;
diff --git a/arch/sparc/kernel/pci_schizo.c b/arch/sparc/kernel/pci_schizo.c
index 93cd9e5a8099..519a80a639d6 100644
--- a/arch/sparc/kernel/pci_schizo.c
+++ b/arch/sparc/kernel/pci_schizo.c
@@ -1426,7 +1426,7 @@ static int __schizo_init(struct platform_device *op, unsigned long chip_type)
 	portid = of_getintprop_default(dp, "portid", 0xff);

 	err = -ENOMEM;
-	pbm = kzalloc(sizeof(*pbm), GFP_KERNEL);
+	pbm = kzalloc_obj(*pbm, GFP_KERNEL);
 	if (!pbm) {
 		printk(KERN_ERR PFX "Cannot allocate pci_pbm_info.\n");
 		goto out_err;
@@ -1434,7 +1434,7 @@ static int __schizo_init(struct platform_device *op, unsigned long chip_type)

 	pbm->sibling = schizo_find_sibling(portid, chip_type);

-	iommu = kzalloc(sizeof(struct iommu), GFP_KERNEL);
+	iommu = kzalloc_obj(struct iommu, GFP_KERNEL);
 	if (!iommu) {
 		printk(KERN_ERR PFX "Cannot allocate PBM A iommu.\n");
 		goto out_free_pbm;
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
index 791f0a76665f..4e842fb48602 100644
--- a/arch/sparc/kernel/pci_sun4v.c
+++ b/arch/sparc/kernel/pci_sun4v.c
@@ -754,7 +754,7 @@ static int pci_sun4v_atu_alloc_iotsb(struct pci_pbm_info *pbm)
 	unsigned long order;
 	unsigned long err;

-	iotsb = kzalloc(sizeof(*iotsb), GFP_KERNEL);
+	iotsb = kzalloc_obj(*iotsb, GFP_KERNEL);
 	if (!iotsb) {
 		err = -ENOMEM;
 		goto out_err;
@@ -1292,13 +1292,13 @@ static int pci_sun4v_probe(struct platform_device *op)
 		iommu_batch_initialized = 1;
 	}

-	pbm = kzalloc(sizeof(*pbm), GFP_KERNEL);
+	pbm = kzalloc_obj(*pbm, GFP_KERNEL);
 	if (!pbm) {
 		printk(KERN_ERR PFX "Could not allocate pci_pbm_info\n");
 		goto out_err;
 	}

-	iommu = kzalloc(sizeof(struct iommu), GFP_KERNEL);
+	iommu = kzalloc_obj(struct iommu, GFP_KERNEL);
 	if (!iommu) {
 		printk(KERN_ERR PFX "Could not allocate pbm iommu\n");
 		goto out_free_controller;
@@ -1307,7 +1307,7 @@ static int pci_sun4v_probe(struct platform_device *op)
 	pbm->iommu = iommu;
 	iommu->atu = NULL;
 	if (hv_atu) {
-		atu = kzalloc(sizeof(*atu), GFP_KERNEL);
+		atu = kzalloc_obj(*atu, GFP_KERNEL);
 		if (!atu)
 			pr_err(PFX "Could not allocate atu\n");
 		else
diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c
index d7c911724435..4cd32ccc5191 100644
--- a/arch/sparc/kernel/pcic.c
+++ b/arch/sparc/kernel/pcic.c
@@ -466,7 +466,7 @@ static int pdev_to_pnode(struct linux_pbm_info *pbm, struct pci_dev *pdev)

 static inline struct pcidev_cookie *pci_devcookie_alloc(void)
 {
-	return kmalloc(sizeof(struct pcidev_cookie), GFP_ATOMIC);
+	return kmalloc_obj(struct pcidev_cookie, GFP_ATOMIC);
 }

 static void pcic_map_pci_device(struct linux_pcic *pcic,
diff --git a/arch/sparc/kernel/sbus.c b/arch/sparc/kernel/sbus.c
index 0bababf6f2bc..bb2794ce7aad 100644
--- a/arch/sparc/kernel/sbus.c
+++ b/arch/sparc/kernel/sbus.c
@@ -556,8 +556,8 @@ static void __init sbus_iommu_init(struct platform_device *op)
 	}
 	regs = pr->phys_addr;

-	iommu = kzalloc(sizeof(*iommu), GFP_ATOMIC);
-	strbuf = kzalloc(sizeof(*strbuf), GFP_ATOMIC);
+	iommu = kzalloc_obj(*iommu, GFP_ATOMIC);
+	strbuf = kzalloc_obj(*strbuf, GFP_ATOMIC);
 	if (!iommu || !strbuf)
 		goto fatal_memory_error;

diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c
index 704375c061e7..46a7b53737d4 100644
--- a/arch/sparc/kernel/setup_32.c
+++ b/arch/sparc/kernel/setup_32.c
@@ -388,7 +388,7 @@ static int __init topology_init(void)

 	err = 0;
 	for_each_online_cpu(i) {
-		struct cpu *p = kzalloc(sizeof(*p), GFP_KERNEL);
+		struct cpu *p = kzalloc_obj(*p, GFP_KERNEL);
 		if (!p)
 			err = -ENOMEM;
 		else
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
index 5cbd6ed5ef6f..81f0be76f48a 100644
--- a/arch/sparc/kernel/smp_64.c
+++ b/arch/sparc/kernel/smp_64.c
@@ -297,8 +297,8 @@ static void ldom_startcpu_cpuid(unsigned int cpu, unsigned long thread_reg,
 	unsigned long hv_err;
 	int i;

-	hdesc = kzalloc(struct_size(hdesc, maps, num_kernel_image_mappings),
-			GFP_KERNEL);
+	hdesc = kzalloc_flex(*hdesc, maps, num_kernel_image_mappings,
+		             GFP_KERNEL);
 	if (!hdesc) {
 		printk(KERN_ERR "ldom_startcpu_cpuid: Cannot allocate "
 		       "hvtramp_descr.\n");
diff --git a/arch/sparc/kernel/starfire.c b/arch/sparc/kernel/starfire.c
index b8cd57d9182b..7736dc34f6ad 100644
--- a/arch/sparc/kernel/starfire.c
+++ b/arch/sparc/kernel/starfire.c
@@ -50,7 +50,7 @@ void starfire_hookup(int upaid)
 	struct starfire_irqinfo *p;
 	unsigned long treg_base, hwmid, i;

-	p = kmalloc(sizeof(*p), GFP_KERNEL);
+	p = kmalloc_obj(*p, GFP_KERNEL);
 	if (!p) {
 		prom_printf("starfire_hookup: No memory, this is insane.\n");
 		prom_halt();
diff --git a/arch/sparc/kernel/sun4d_irq.c b/arch/sparc/kernel/sun4d_irq.c
index 9a137c70e8d1..95683ecdc590 100644
--- a/arch/sparc/kernel/sun4d_irq.c
+++ b/arch/sparc/kernel/sun4d_irq.c
@@ -304,7 +304,7 @@ static unsigned int _sun4d_build_device_irq(unsigned int real_irq,
 	if (unlikely(handler_data))
 		goto err_out;

-	handler_data = kzalloc(sizeof(struct sun4d_handler_data), GFP_ATOMIC);
+	handler_data = kzalloc_obj(struct sun4d_handler_data, GFP_ATOMIC);
 	if (unlikely(!handler_data)) {
 		prom_printf("IRQ: kzalloc(sun4d_handler_data) failed.\n");
 		prom_halt();
diff --git a/arch/sparc/kernel/sun4m_irq.c b/arch/sparc/kernel/sun4m_irq.c
index 1079638986b5..fe8cfb1cdd3a 100644
--- a/arch/sparc/kernel/sun4m_irq.c
+++ b/arch/sparc/kernel/sun4m_irq.c
@@ -268,7 +268,7 @@ static unsigned int sun4m_build_device_irq(struct platform_device *op,
 	if (unlikely(handler_data))
 		goto out;

-	handler_data = kzalloc(sizeof(struct sun4m_handler_data), GFP_ATOMIC);
+	handler_data = kzalloc_obj(struct sun4m_handler_data, GFP_ATOMIC);
 	if (unlikely(!handler_data)) {
 		prom_printf("IRQ: kzalloc(sun4m_handler_data) failed.\n");
 		prom_halt();
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
index dbf118b40601..8d5e2d5c0bc5 100644
--- a/arch/sparc/kernel/sys_sparc_64.c
+++ b/arch/sparc/kernel/sys_sparc_64.c
@@ -647,8 +647,8 @@ SYSCALL_DEFINE5(utrap_install, utrap_entry_t, type,
 	}
 	if (!current_thread_info()->utraps) {
 		current_thread_info()->utraps =
-			kcalloc(UT_TRAP_INSTRUCTION_31 + 1, sizeof(long),
-				GFP_KERNEL);
+			kzalloc_objs(long, UT_TRAP_INSTRUCTION_31 + 1,
+				     GFP_KERNEL);
 		if (!current_thread_info()->utraps)
 			return -ENOMEM;
 		current_thread_info()->utraps[0] = 1;
@@ -658,9 +658,8 @@ SYSCALL_DEFINE5(utrap_install, utrap_entry_t, type,
 			unsigned long *p = current_thread_info()->utraps;

 			current_thread_info()->utraps =
-				kmalloc_array(UT_TRAP_INSTRUCTION_31 + 1,
-					      sizeof(long),
-					      GFP_KERNEL);
+				kmalloc_objs(long, UT_TRAP_INSTRUCTION_31 + 1,
+					     GFP_KERNEL);
 			if (!current_thread_info()->utraps) {
 				current_thread_info()->utraps = p;
 				return -ENOMEM;
diff --git a/arch/sparc/kernel/vio.c b/arch/sparc/kernel/vio.c
index 8c7dd72ef334..0d21a8e567da 100644
--- a/arch/sparc/kernel/vio.c
+++ b/arch/sparc/kernel/vio.c
@@ -325,7 +325,7 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
 		return NULL;
 	}

-	vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
+	vdev = kzalloc_obj(*vdev, GFP_KERNEL);
 	if (!vdev) {
 		printk(KERN_ERR "VIO: Could not allocate vio_dev\n");
 		return NULL;
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 3c3a6607fa51..2c4986e95713 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -3070,7 +3070,7 @@ static int __init report_memory(void)
 	kernel_lds_init();

 	for (i = 0; i < pavail_ents; i++) {
-		res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+		res = kzalloc_obj(struct resource, GFP_KERNEL);

 		if (!res) {
 			pr_warn("Failed to allocate source.\n");
diff --git a/arch/sparc/mm/io-unit.c b/arch/sparc/mm/io-unit.c
index d409cb450de4..2b5e40cc9d58 100644
--- a/arch/sparc/mm/io-unit.c
+++ b/arch/sparc/mm/io-unit.c
@@ -44,7 +44,7 @@ static void __init iounit_iommu_init(struct platform_device *op)
 	iopte_t __iomem *xpt;
 	iopte_t __iomem *xptend;

-	iounit = kzalloc(sizeof(struct iounit_struct), GFP_ATOMIC);
+	iounit = kzalloc_obj(struct iounit_struct, GFP_ATOMIC);
 	if (!iounit) {
 		prom_printf("SUN4D: Cannot alloc iounit, halting.\n");
 		prom_halt();
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c
index f48adf62724a..3ca7cc2b9bfb 100644
--- a/arch/sparc/mm/iommu.c
+++ b/arch/sparc/mm/iommu.c
@@ -64,7 +64,7 @@ static void __init sbus_iommu_init(struct platform_device *op)
 	unsigned long base;
 	unsigned long tmp;

-	iommu = kmalloc(sizeof(struct iommu_struct), GFP_KERNEL);
+	iommu = kmalloc_obj(struct iommu_struct, GFP_KERNEL);
 	if (!iommu) {
 		prom_printf("Unable to allocate iommu structure\n");
 		prom_halt();
diff --git a/arch/sparc/net/bpf_jit_comp_64.c b/arch/sparc/net/bpf_jit_comp_64.c
index 73bf0aea8baf..884b201259d6 100644
--- a/arch/sparc/net/bpf_jit_comp_64.c
+++ b/arch/sparc/net/bpf_jit_comp_64.c
@@ -1505,7 +1505,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)

 	jit_data = prog->aux->jit_data;
 	if (!jit_data) {
-		jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
+		jit_data = kzalloc_obj(*jit_data, GFP_KERNEL);
 		if (!jit_data) {
 			prog = orig_prog;
 			goto out;
diff --git a/arch/sparc/vdso/vma.c b/arch/sparc/vdso/vma.c
index bab7a59575e8..bba84959c69d 100644
--- a/arch/sparc/vdso/vma.c
+++ b/arch/sparc/vdso/vma.c
@@ -266,7 +266,7 @@ static int __init init_vdso_image(const struct vdso_image *image,
 	if (WARN_ON(image->size % PAGE_SIZE != 0))
 		goto oom;

-	cpp = kcalloc(cnpages, sizeof(struct page *), GFP_KERNEL);
+	cpp = kzalloc_objs(struct page *, cnpages, GFP_KERNEL);
 	vdso_mapping->pages = cpp;

 	if (!cpp)
@@ -288,7 +288,7 @@ static int __init init_vdso_image(const struct vdso_image *image,
 		dnpages = (sizeof(struct vvar_data) / PAGE_SIZE) + 1;
 		if (WARN_ON(dnpages != 1))
 			goto oom;
-		dpp = kcalloc(dnpages, sizeof(struct page *), GFP_KERNEL);
+		dpp = kzalloc_objs(struct page *, dnpages, GFP_KERNEL);
 		vvar_mapping.pages = dpp;

 		if (!dpp)
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c
index 26442db7d608..db2bb032be30 100644
--- a/arch/um/drivers/chan_kern.c
+++ b/arch/um/drivers/chan_kern.c
@@ -504,7 +504,7 @@ static struct chan *parse_chan(struct line *line, char *str, int device,
 		return NULL;
 	}

-	chan = kmalloc(sizeof(*chan), GFP_ATOMIC);
+	chan = kmalloc_obj(*chan, GFP_ATOMIC);
 	if (chan == NULL) {
 		*error_out = "Memory allocation failed";
 		return NULL;
diff --git a/arch/um/drivers/hostaudio_kern.c b/arch/um/drivers/hostaudio_kern.c
index 0ac149de1ac0..6983a35a9ead 100644
--- a/arch/um/drivers/hostaudio_kern.c
+++ b/arch/um/drivers/hostaudio_kern.c
@@ -186,7 +186,7 @@ static int hostaudio_open(struct inode *inode, struct file *file)
 	kernel_param_unlock(THIS_MODULE);
 #endif

-	state = kmalloc(sizeof(struct hostaudio_state), GFP_KERNEL);
+	state = kmalloc_obj(struct hostaudio_state, GFP_KERNEL);
 	if (state == NULL)
 		return -ENOMEM;

@@ -247,7 +247,7 @@ static int hostmixer_open_mixdev(struct inode *inode, struct file *file)
 	printk(KERN_DEBUG "hostmixer: open called (host: %s)\n", mixer);
 #endif

-	state = kmalloc(sizeof(struct hostmixer_state), GFP_KERNEL);
+	state = kmalloc_obj(struct hostmixer_state, GFP_KERNEL);
 	if (state == NULL)
 		return -ENOMEM;

diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c
index 43d8959cc746..62545319d0eb 100644
--- a/arch/um/drivers/line.c
+++ b/arch/um/drivers/line.c
@@ -672,7 +672,7 @@ void register_winch_irq(int fd, int tty_fd, int pid, struct tty_port *port,
 {
 	struct winch *winch;

-	winch = kmalloc(sizeof(*winch), GFP_KERNEL);
+	winch = kmalloc_obj(*winch, GFP_KERNEL);
 	if (winch == NULL) {
 		printk(KERN_ERR "register_winch_irq - kmalloc failed\n");
 		goto cleanup;
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c
index ff4bda95b9c7..e2a9e8879f58 100644
--- a/arch/um/drivers/mconsole_kern.c
+++ b/arch/um/drivers/mconsole_kern.c
@@ -87,7 +87,7 @@ static irqreturn_t mconsole_interrupt(int irq, void *dev_id)
 		if (req.cmd->context == MCONSOLE_INTR)
 			(*req.cmd->handler)(&req);
 		else {
-			new = kmalloc(sizeof(*new), GFP_NOWAIT);
+			new = kmalloc_obj(*new, GFP_NOWAIT);
 			if (new == NULL)
 				mconsole_reply(&req, "Out of memory", 1, 0);
 			else {
diff --git a/arch/um/drivers/port_kern.c b/arch/um/drivers/port_kern.c
index a4508470df78..c51d6ca4de70 100644
--- a/arch/um/drivers/port_kern.c
+++ b/arch/um/drivers/port_kern.c
@@ -88,7 +88,7 @@ static int port_accept(struct port_list *port)
 		goto out;
 	}

-	conn = kmalloc(sizeof(*conn), GFP_ATOMIC);
+	conn = kmalloc_obj(*conn, GFP_ATOMIC);
 	if (conn == NULL) {
 		printk(KERN_ERR "port_accept : failed to allocate "
 		       "connection\n");
@@ -170,7 +170,7 @@ void *port_data(int port_num)
 		if (port->port == port_num)
 			goto found;
 	}
-	port = kmalloc(sizeof(struct port_list), GFP_KERNEL);
+	port = kmalloc_obj(struct port_list, GFP_KERNEL);
 	if (port == NULL) {
 		printk(KERN_ERR "Allocation of port list failed\n");
 		goto out;
@@ -202,7 +202,7 @@ void *port_data(int port_num)
 	list_add(&port->list, &ports);

  found:
-	dev = kmalloc(sizeof(struct port_dev), GFP_KERNEL);
+	dev = kmalloc_obj(struct port_dev, GFP_KERNEL);
 	if (dev == NULL) {
 		printk(KERN_ERR "Allocation of port device entry failed\n");
 		goto out;
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
index 37455e74d314..42f392e6add3 100644
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -1069,20 +1069,16 @@ static int __init ubd_init(void)
 	if (register_blkdev(UBD_MAJOR, "ubd"))
 		return -1;

-	irq_req_buffer = kmalloc_array(UBD_REQ_BUFFER_SIZE,
-				       sizeof(struct io_thread_req *),
-				       GFP_KERNEL
-		);
+	irq_req_buffer = kmalloc_objs(struct io_thread_req *,
+				      UBD_REQ_BUFFER_SIZE, GFP_KERNEL);
 	irq_remainder = 0;

 	if (irq_req_buffer == NULL) {
 		printk(KERN_ERR "Failed to initialize ubd buffering\n");
 		return -ENOMEM;
 	}
-	io_req_buffer = kmalloc_array(UBD_REQ_BUFFER_SIZE,
-				      sizeof(struct io_thread_req *),
-				      GFP_KERNEL
-		);
+	io_req_buffer = kmalloc_objs(struct io_thread_req *,
+				     UBD_REQ_BUFFER_SIZE, GFP_KERNEL);

 	io_remainder = 0;

diff --git a/arch/um/drivers/vector_kern.c b/arch/um/drivers/vector_kern.c
index 28cfe1c700f0..8882ad7c983a 100644
--- a/arch/um/drivers/vector_kern.c
+++ b/arch/um/drivers/vector_kern.c
@@ -515,7 +515,7 @@ static struct vector_queue *create_queue(
 	struct iovec *iov;
 	struct mmsghdr *mmsg_vector;

-	result = kmalloc(sizeof(struct vector_queue), GFP_KERNEL);
+	result = kmalloc_obj(struct vector_queue, GFP_KERNEL);
 	if (result == NULL)
 		return NULL;
 	result->max_depth = max_size;
@@ -544,15 +544,11 @@ static struct vector_queue *create_queue(
 	result->max_iov_frags = num_extra_frags;
 	for (i = 0; i < max_size; i++) {
 		if (vp->header_size > 0)
-			iov = kmalloc_array(3 + num_extra_frags,
-					    sizeof(struct iovec),
-					    GFP_KERNEL
-			);
+			iov = kmalloc_objs(struct iovec, 3 + num_extra_frags,
+					   GFP_KERNEL);
 		else
-			iov = kmalloc_array(2 + num_extra_frags,
-					    sizeof(struct iovec),
-					    GFP_KERNEL
-			);
+			iov = kmalloc_objs(struct iovec, 2 + num_extra_frags,
+					   GFP_KERNEL);
 		if (iov == NULL)
 			goto out_fail;
 		mmsg_vector->msg_hdr.msg_iov = iov;
@@ -1385,7 +1381,7 @@ static int vector_net_load_bpf_flash(struct net_device *dev,
 		kfree(vp->bpf->filter);
 		vp->bpf->filter = NULL;
 	} else {
-		vp->bpf = kmalloc(sizeof(struct sock_fprog), GFP_ATOMIC);
+		vp->bpf = kmalloc_obj(struct sock_fprog, GFP_ATOMIC);
 		if (vp->bpf == NULL) {
 			netdev_err(dev, "failed to allocate memory for firmware\n");
 			goto flash_fail;
@@ -1587,7 +1583,7 @@ static void vector_eth_configure(
 	struct vector_private *vp;
 	int err;

-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (device == NULL) {
 		pr_err("Failed to allocate struct vector_device for vec%d\n", n);
 		return;
diff --git a/arch/um/drivers/vector_transports.c b/arch/um/drivers/vector_transports.c
index 0794d23f07cb..da5d2083ed49 100644
--- a/arch/um/drivers/vector_transports.c
+++ b/arch/um/drivers/vector_transports.c
@@ -245,7 +245,7 @@ static int build_gre_transport_data(struct vector_private *vp)
 	int temp_rx;
 	int temp_tx;

-	vp->transport_data = kmalloc(sizeof(struct uml_gre_data), GFP_KERNEL);
+	vp->transport_data = kmalloc_obj(struct uml_gre_data, GFP_KERNEL);
 	if (vp->transport_data == NULL)
 		return -ENOMEM;
 	td = vp->transport_data;
@@ -307,8 +307,7 @@ static int build_l2tpv3_transport_data(struct vector_private *vp)
 	unsigned long temp_rx;
 	unsigned long temp_tx;

-	vp->transport_data = kmalloc(
-		sizeof(struct uml_l2tpv3_data), GFP_KERNEL);
+	vp->transport_data = kmalloc_obj(struct uml_l2tpv3_data, GFP_KERNEL);

 	if (vp->transport_data == NULL)
 		return -ENOMEM;
diff --git a/arch/um/drivers/vfio_kern.c b/arch/um/drivers/vfio_kern.c
index 915812a79bfc..5f349be2fce7 100644
--- a/arch/um/drivers/vfio_kern.c
+++ b/arch/um/drivers/vfio_kern.c
@@ -107,7 +107,7 @@ static int uml_vfio_open_group(int group_id)
 		}
 	}

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group)
 		return -ENOMEM;

@@ -514,9 +514,8 @@ static void uml_vfio_open_device(struct uml_vfio_device *dev)
 		goto teardown_udev;
 	}

-	dev->intr_ctx = kmalloc_array(dev->udev.irq_count,
-				      sizeof(struct uml_vfio_intr_ctx),
-				      GFP_KERNEL);
+	dev->intr_ctx = kmalloc_objs(struct uml_vfio_intr_ctx,
+				     dev->udev.irq_count, GFP_KERNEL);
 	if (!dev->intr_ctx) {
 		pr_err("Failed to allocate interrupt context (%s)\n",
 		       dev->name);
@@ -600,7 +599,7 @@ static struct uml_vfio_device *uml_vfio_add_device(const char *device)
 	if (uml_vfio_find_device(device))
 		return ERR_PTR(-EEXIST);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/arch/um/drivers/virtio_pcidev.c b/arch/um/drivers/virtio_pcidev.c
index f9b4b6f7582c..5db9a4461766 100644
--- a/arch/um/drivers/virtio_pcidev.c
+++ b/arch/um/drivers/virtio_pcidev.c
@@ -537,7 +537,7 @@ static int virtio_pcidev_virtio_probe(struct virtio_device *vdev)
 	struct virtio_pcidev_device *dev;
 	int err;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/arch/um/drivers/virtio_uml.c b/arch/um/drivers/virtio_uml.c
index c24da0cf1627..ac269e6148fc 100644
--- a/arch/um/drivers/virtio_uml.c
+++ b/arch/um/drivers/virtio_uml.c
@@ -965,7 +965,7 @@ static struct virtqueue *vu_setup_vq(struct virtio_device *vdev,
 	int num = MAX_SUPPORTED_QUEUE_SIZE;
 	int rc;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		rc = -ENOMEM;
 		goto error_kzalloc;
@@ -1217,7 +1217,7 @@ static int virtio_uml_probe(struct platform_device *pdev)
 			return PTR_ERR(pdata);
 	}

-	vu_dev = kzalloc(sizeof(*vu_dev), GFP_KERNEL);
+	vu_dev = kzalloc_obj(*vu_dev, GFP_KERNEL);
 	if (!vu_dev)
 		return -ENOMEM;

diff --git a/arch/um/drivers/xterm_kern.c b/arch/um/drivers/xterm_kern.c
index 3971252cb1a6..7740d9a3b090 100644
--- a/arch/um/drivers/xterm_kern.c
+++ b/arch/um/drivers/xterm_kern.c
@@ -45,7 +45,7 @@ int xterm_fd(int socket, int *pid_out)
 	struct xterm_wait *data;
 	int err, ret;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (data == NULL) {
 		printk(KERN_ERR "xterm_fd : failed to allocate xterm_wait\n");
 		return -ENOMEM;
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c
index f4b13f15a9c1..5929d498b65f 100644
--- a/arch/um/kernel/irq.c
+++ b/arch/um/kernel/irq.c
@@ -326,7 +326,7 @@ static int activate_fd(int irq, int fd, enum um_irq_type type, void *dev_id,

 		/* don't restore interrupts */
 		raw_spin_unlock(&irq_lock);
-		new = kzalloc(sizeof(*irq_entry), GFP_ATOMIC);
+		new = kzalloc_obj(*irq_entry, GFP_ATOMIC);
 		if (!new) {
 			local_irq_restore(flags);
 			return -ENOMEM;
diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c
index 1b86f48c7e84..7bf44927519d 100644
--- a/arch/x86/coco/sev/core.c
+++ b/arch/x86/coco/sev/core.c
@@ -1542,7 +1542,7 @@ static struct aesgcm_ctx *snp_init_crypto(u8 *key, size_t keylen)
 {
 	struct aesgcm_ctx *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

@@ -1590,7 +1590,7 @@ struct snp_msg_desc *snp_msg_alloc(void)

 	BUILD_BUG_ON(sizeof(struct snp_guest_msg) > PAGE_SIZE);

-	mdesc = kzalloc(sizeof(struct snp_msg_desc), GFP_KERNEL);
+	mdesc = kzalloc_obj(struct snp_msg_desc, GFP_KERNEL);
 	if (!mdesc)
 		return ERR_PTR(-ENOMEM);

@@ -1945,7 +1945,7 @@ static int __init snp_get_tsc_info(void)
 	struct snp_guest_req req = {};
 	int rc = -ENOMEM;

-	tsc_req = kzalloc(sizeof(*tsc_req), GFP_KERNEL);
+	tsc_req = kzalloc_obj(*tsc_req, GFP_KERNEL);
 	if (!tsc_req)
 		return rc;

diff --git a/arch/x86/events/amd/iommu.c b/arch/x86/events/amd/iommu.c
index a721da9987dd..17e383c20271 100644
--- a/arch/x86/events/amd/iommu.c
+++ b/arch/x86/events/amd/iommu.c
@@ -387,7 +387,7 @@ static __init int _init_events_attrs(void)
 	while (amd_iommu_v2_event_descs[i].attr.attr.name)
 		i++;

-	attrs = kcalloc(i + 1, sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_objs(*attrs, i + 1, GFP_KERNEL);
 	if (!attrs)
 		return -ENOMEM;

@@ -422,7 +422,7 @@ static __init int init_one_iommu(unsigned int idx)
 	struct perf_amd_iommu *perf_iommu;
 	int ret;

-	perf_iommu = kzalloc(sizeof(struct perf_amd_iommu), GFP_KERNEL);
+	perf_iommu = kzalloc_obj(struct perf_amd_iommu, GFP_KERNEL);
 	if (!perf_iommu)
 		return -ENOMEM;

diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c
index 9293ce50574d..c0ed0dfbaeaa 100644
--- a/arch/x86/events/amd/uncore.c
+++ b/arch/x86/events/amd/uncore.c
@@ -726,7 +726,7 @@ int amd_uncore_df_ctx_init(struct amd_uncore *uncore, unsigned int cpu)
 		goto done;

 	/* No grouping, single instance for a system */
-	uncore->pmus = kzalloc(sizeof(*uncore->pmus), GFP_KERNEL);
+	uncore->pmus = kzalloc_obj(*uncore->pmus, GFP_KERNEL);
 	if (!uncore->pmus)
 		goto done;

@@ -860,7 +860,7 @@ int amd_uncore_l3_ctx_init(struct amd_uncore *uncore, unsigned int cpu)
 		goto done;

 	/* No grouping, single instance for a system */
-	uncore->pmus = kzalloc(sizeof(*uncore->pmus), GFP_KERNEL);
+	uncore->pmus = kzalloc_obj(*uncore->pmus, GFP_KERNEL);
 	if (!uncore->pmus)
 		goto done;

diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
index d4468efbdcd9..52f7ad5adeb1 100644
--- a/arch/x86/events/core.c
+++ b/arch/x86/events/core.c
@@ -2389,7 +2389,7 @@ static struct cpu_hw_events *allocate_fake_cpuc(struct pmu *event_pmu)
 	struct cpu_hw_events *cpuc;
 	int cpu;

-	cpuc = kzalloc(sizeof(*cpuc), GFP_KERNEL);
+	cpuc = kzalloc_obj(*cpuc, GFP_KERNEL);
 	if (!cpuc)
 		return ERR_PTR(-ENOMEM);
 	cpuc->is_fake = 1;
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
index f3ae1f8ee3cd..41f571040145 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -7378,9 +7378,8 @@ static __always_inline int intel_pmu_init_hybrid(enum hybrid_pmu_type pmus)
 	int idx = 0, bit;

 	x86_pmu.num_hybrid_pmus = hweight_long(pmus_mask);
-	x86_pmu.hybrid_pmu = kcalloc(x86_pmu.num_hybrid_pmus,
-				     sizeof(struct x86_hybrid_pmu),
-				     GFP_KERNEL);
+	x86_pmu.hybrid_pmu = kzalloc_objs(struct x86_hybrid_pmu,
+					  x86_pmu.num_hybrid_pmus, GFP_KERNEL);
 	if (!x86_pmu.hybrid_pmu)
 		return -ENOMEM;

diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c
index 4684649109d9..9095f1eeff6e 100644
--- a/arch/x86/events/intel/uncore.c
+++ b/arch/x86/events/intel/uncore.c
@@ -107,7 +107,7 @@ struct pci2phy_map *__find_pci2phy_map(int segment)

 	if (!alloc) {
 		raw_spin_unlock(&pci2phy_map_lock);
-		alloc = kmalloc(sizeof(struct pci2phy_map), GFP_KERNEL);
+		alloc = kmalloc_obj(struct pci2phy_map, GFP_KERNEL);
 		raw_spin_lock(&pci2phy_map_lock);

 		if (!alloc)
@@ -990,7 +990,7 @@ static int __init uncore_type_init(struct intel_uncore_type *type)
 	size_t size;
 	int i, j;

-	pmus = kcalloc(type->num_boxes, sizeof(*pmus), GFP_KERNEL);
+	pmus = kzalloc_objs(*pmus, type->num_boxes, GFP_KERNEL);
 	if (!pmus)
 		return -ENOMEM;

@@ -1016,8 +1016,7 @@ static int __init uncore_type_init(struct intel_uncore_type *type)
 		} *attr_group;
 		for (i = 0; type->event_descs[i].attr.attr.name; i++);

-		attr_group = kzalloc(struct_size(attr_group, attrs, i + 1),
-								GFP_KERNEL);
+		attr_group = kzalloc_flex(*attr_group, attrs, i + 1, GFP_KERNEL);
 		if (!attr_group)
 			goto err;

diff --git a/arch/x86/events/intel/uncore_discovery.c b/arch/x86/events/intel/uncore_discovery.c
index b46575254dbe..f8d1328d8346 100644
--- a/arch/x86/events/intel/uncore_discovery.c
+++ b/arch/x86/events/intel/uncore_discovery.c
@@ -68,7 +68,7 @@ add_uncore_discovery_type(struct uncore_unit_discovery *unit)
 		return NULL;
 	}

-	type = kzalloc(sizeof(struct intel_uncore_discovery_type), GFP_KERNEL);
+	type = kzalloc_obj(struct intel_uncore_discovery_type, GFP_KERNEL);
 	if (!type)
 		return NULL;

@@ -215,7 +215,7 @@ uncore_insert_box_info(struct uncore_unit_discovery *unit,
 		return;
 	}

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return;

@@ -744,8 +744,9 @@ intel_uncore_generic_init_uncores(enum uncore_access_type type_id, int num_extra
 	struct rb_node *node;
 	int i = 0;

-	uncores = kcalloc(num_discovered_types[type_id] + num_extra + 1,
-			  sizeof(struct intel_uncore_type *), GFP_KERNEL);
+	uncores = kzalloc_objs(struct intel_uncore_type *,
+			       num_discovered_types[type_id] + num_extra + 1,
+			       GFP_KERNEL);
 	if (!uncores)
 		return empty_uncore;

@@ -754,7 +755,7 @@ intel_uncore_generic_init_uncores(enum uncore_access_type type_id, int num_extra
 		if (type->access_type != type_id)
 			continue;

-		uncore = kzalloc(sizeof(struct intel_uncore_type), GFP_KERNEL);
+		uncore = kzalloc_obj(struct intel_uncore_type, GFP_KERNEL);
 		if (!uncore)
 			break;

diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c
index 7ca0429c4004..94682b067e35 100644
--- a/arch/x86/events/intel/uncore_snbep.c
+++ b/arch/x86/events/intel/uncore_snbep.c
@@ -3748,12 +3748,13 @@ static int pmu_alloc_topology(struct intel_uncore_type *type, int topology_type)
 	if (!type->num_boxes)
 		return -EPERM;

-	topology = kcalloc(uncore_max_dies(), sizeof(*topology), GFP_KERNEL);
+	topology = kzalloc_objs(*topology, uncore_max_dies(), GFP_KERNEL);
 	if (!topology)
 		goto err;

 	for (die = 0; die < uncore_max_dies(); die++) {
-		topology[die] = kcalloc(type->num_boxes, sizeof(**topology), GFP_KERNEL);
+		topology[die] = kzalloc_objs(**topology, type->num_boxes,
+					     GFP_KERNEL);
 		if (!topology[die])
 			goto clear;
 		for (idx = 0; idx < type->num_boxes; idx++) {
@@ -3882,11 +3883,11 @@ pmu_set_mapping(struct intel_uncore_type *type, struct attribute_group *ag,
 		goto clear_topology;

 	/* One more for NULL. */
-	attrs = kcalloc((uncore_max_dies() + 1), sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_objs(*attrs, (uncore_max_dies() + 1), GFP_KERNEL);
 	if (!attrs)
 		goto clear_topology;

-	eas = kcalloc(uncore_max_dies(), sizeof(*eas), GFP_KERNEL);
+	eas = kzalloc_objs(*eas, uncore_max_dies(), GFP_KERNEL);
 	if (!eas)
 		goto clear_attrs;

@@ -6411,7 +6412,7 @@ static void spr_update_device_location(int type_id)
 	} else
 		return;

-	root = kzalloc(sizeof(struct rb_root), GFP_KERNEL);
+	root = kzalloc_obj(struct rb_root, GFP_KERNEL);
 	if (!root) {
 		type->num_boxes = 0;
 		return;
@@ -6424,7 +6425,7 @@ static void spr_update_device_location(int type_id)
 		if (die < 0)
 			continue;

-		unit = kzalloc(sizeof(*unit), GFP_KERNEL);
+		unit = kzalloc_obj(*unit, GFP_KERNEL);
 		if (!unit)
 			continue;
 		unit->die = die;
diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c
index defd86137f12..27b3fd6e663c 100644
--- a/arch/x86/events/rapl.c
+++ b/arch/x86/events/rapl.c
@@ -704,7 +704,7 @@ static int __init init_rapl_pmu(struct rapl_pmus *rapl_pmus)
 	int idx;

 	for (idx = 0; idx < rapl_pmus->nr_rapl_pmu; idx++) {
-		rapl_pmu = kzalloc(sizeof(*rapl_pmu), GFP_KERNEL);
+		rapl_pmu = kzalloc_obj(*rapl_pmu, GFP_KERNEL);
 		if (!rapl_pmu)
 			goto free;

@@ -742,7 +742,7 @@ static int __init init_rapl_pmus(struct rapl_pmus **rapl_pmus_ptr, int rapl_pmu_
 	else if (rapl_pmu_scope != PERF_PMU_SCOPE_PKG)
 		return -EINVAL;

-	rapl_pmus = kzalloc(struct_size(rapl_pmus, rapl_pmu, nr_rapl_pmu), GFP_KERNEL);
+	rapl_pmus = kzalloc_flex(*rapl_pmus, rapl_pmu, nr_rapl_pmu, GFP_KERNEL);
 	if (!rapl_pmus)
 		return -ENOMEM;

diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index 5dbe9bd67891..e945ed623027 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -467,9 +467,8 @@ void __init hyperv_init(void)
 	if (hv_isolation_type_tdx())
 		hv_vp_assist_page = NULL;
 	else
-		hv_vp_assist_page = kcalloc(nr_cpu_ids,
-					    sizeof(*hv_vp_assist_page),
-					    GFP_KERNEL);
+		hv_vp_assist_page = kzalloc_objs(*hv_vp_assist_page, nr_cpu_ids,
+						 GFP_KERNEL);
 	if (!hv_vp_assist_page) {
 		ms_hyperv.hints &= ~HV_X64_ENLIGHTENED_VMCS_RECOMMENDED;

diff --git a/arch/x86/hyperv/irqdomain.c b/arch/x86/hyperv/irqdomain.c
index c3ba12b1bc07..365e364268d9 100644
--- a/arch/x86/hyperv/irqdomain.c
+++ b/arch/x86/hyperv/irqdomain.c
@@ -248,7 +248,7 @@ static void hv_irq_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
 			return;
 	}

-	stored_entry = kzalloc(sizeof(*stored_entry), GFP_ATOMIC);
+	stored_entry = kzalloc_obj(*stored_entry, GFP_ATOMIC);
 	if (!stored_entry) {
 		pr_debug("%s: failed to allocate chip data\n", __func__);
 		return;
diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
index be7fad43a88d..07f125668852 100644
--- a/arch/x86/hyperv/ivm.c
+++ b/arch/x86/hyperv/ivm.c
@@ -531,7 +531,7 @@ static int hv_list_enc_add(const u64 *pfn_list, int count)
 		raw_spin_unlock_irqrestore(&hv_list_enc_lock, flags);

 		/* No adjacent region found -- create a new one */
-		ent = kzalloc(sizeof(struct hv_enc_pfn_region), GFP_KERNEL);
+		ent = kzalloc_obj(struct hv_enc_pfn_region, GFP_KERNEL);
 		if (!ent)
 			return -ENOMEM;

@@ -598,7 +598,7 @@ static int hv_list_enc_remove(const u64 *pfn_list, int count)
 unlock_split:
 		raw_spin_unlock_irqrestore(&hv_list_enc_lock, flags);

-		ent = kzalloc(sizeof(struct hv_enc_pfn_region), GFP_KERNEL);
+		ent = kzalloc_obj(struct hv_enc_pfn_region, GFP_KERNEL);
 		if (!ent)
 			return -ENOMEM;

diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index 693b59b2f7d0..0ffc7de200b1 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -2160,7 +2160,7 @@ void __init_or_module alternatives_smp_module_add(struct module *mod,
 		/* Don't bother remembering, we'll never have to undo it. */
 		goto smp_unlock;

-	smp = kzalloc(sizeof(*smp), GFP_KERNEL);
+	smp = kzalloc_obj(*smp, GFP_KERNEL);
 	if (NULL == smp)
 		/* we'll run the (safe but slow) SMP code then ... */
 		goto unlock;
diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
index c1acead6227a..852e8ff5ebd9 100644
--- a/arch/x86/kernel/amd_nb.c
+++ b/arch/x86/kernel/amd_nb.c
@@ -68,7 +68,8 @@ static int amd_cache_northbridges(void)

 	amd_northbridges.num = amd_num_nodes();

-	nb = kcalloc(amd_northbridges.num, sizeof(struct amd_northbridge), GFP_KERNEL);
+	nb = kzalloc_objs(struct amd_northbridge, amd_northbridges.num,
+			  GFP_KERNEL);
 	if (!nb)
 		return -ENOMEM;

diff --git a/arch/x86/kernel/amd_node.c b/arch/x86/kernel/amd_node.c
index 3d0a4768d603..2091cb1089a2 100644
--- a/arch/x86/kernel/amd_node.c
+++ b/arch/x86/kernel/amd_node.c
@@ -282,7 +282,7 @@ static int __init amd_smn_init(void)
 		return -ENODEV;

 	num_nodes = amd_num_nodes();
-	amd_roots = kcalloc(num_nodes, sizeof(*amd_roots), GFP_KERNEL);
+	amd_roots = kzalloc_objs(*amd_roots, num_nodes, GFP_KERNEL);
 	if (!amd_roots)
 		return -ENOMEM;

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 28f934f05a85..aa3675ba08bb 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2876,7 +2876,7 @@ int mp_irqdomain_alloc(struct irq_domain *domain, unsigned int virq,
 	if (irq_resolve_mapping(domain, (irq_hw_number_t)pin))
 		return -EEXIST;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c
index 3175d7c134e9..13efc166bd3f 100644
--- a/arch/x86/kernel/apm_32.c
+++ b/arch/x86/kernel/apm_32.c
@@ -1576,7 +1576,7 @@ static int do_open(struct inode *inode, struct file *filp)
 {
 	struct apm_user *as;

-	as = kmalloc(sizeof(*as), GFP_KERNEL);
+	as = kmalloc_obj(*as, GFP_KERNEL);
 	if (as == NULL)
 		return -ENOMEM;

diff --git a/arch/x86/kernel/cpu/amd_cache_disable.c b/arch/x86/kernel/cpu/amd_cache_disable.c
index 8843b9557aea..13985d2f8b1d 100644
--- a/arch/x86/kernel/cpu/amd_cache_disable.c
+++ b/arch/x86/kernel/cpu/amd_cache_disable.c
@@ -255,7 +255,7 @@ static void init_amd_l3_attrs(void)
 	if (amd_nb_has_feature(AMD_NB_L3_PARTITIONING))
 		n += 1;

-	amd_l3_attrs = kcalloc(n, sizeof(*amd_l3_attrs), GFP_KERNEL);
+	amd_l3_attrs = kzalloc_objs(*amd_l3_attrs, n, GFP_KERNEL);
 	if (!amd_l3_attrs)
 		return;

diff --git a/arch/x86/kernel/cpu/mce/amd.c b/arch/x86/kernel/cpu/mce/amd.c
index 3f1dda355307..4e7a6101e7ed 100644
--- a/arch/x86/kernel/cpu/mce/amd.c
+++ b/arch/x86/kernel/cpu/mce/amd.c
@@ -1088,7 +1088,7 @@ static int allocate_threshold_blocks(unsigned int cpu, struct threshold_bank *tb
 	     (high & MASK_LOCKED_HI))
 		goto recurse;

-	b = kzalloc(sizeof(struct threshold_block), GFP_KERNEL);
+	b = kzalloc_obj(struct threshold_block, GFP_KERNEL);
 	if (!b)
 		return -ENOMEM;

@@ -1147,7 +1147,7 @@ static int threshold_create_bank(struct threshold_bank **bp, unsigned int cpu,
 	if (!dev)
 		return -ENODEV;

-	b = kzalloc(sizeof(struct threshold_bank), GFP_KERNEL);
+	b = kzalloc_obj(struct threshold_bank, GFP_KERNEL);
 	if (!b) {
 		err = -ENOMEM;
 		goto out;
@@ -1250,7 +1250,7 @@ void mce_threshold_create_device(unsigned int cpu)
 		return;

 	numbanks = this_cpu_read(mce_num_banks);
-	bp = kcalloc(numbanks, sizeof(*bp), GFP_KERNEL);
+	bp = kzalloc_objs(*bp, numbanks, GFP_KERNEL);
 	if (!bp)
 		return;

diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
index 34440021e8cf..dd6a06ab5270 100644
--- a/arch/x86/kernel/cpu/mce/core.c
+++ b/arch/x86/kernel/cpu/mce/core.c
@@ -2692,7 +2692,7 @@ static int mce_device_create(unsigned int cpu)
 	if (dev)
 		return 0;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	dev->id  = cpu;
diff --git a/arch/x86/kernel/cpu/mce/dev-mcelog.c b/arch/x86/kernel/cpu/mce/dev-mcelog.c
index 8d023239ce18..ec603e2c089a 100644
--- a/arch/x86/kernel/cpu/mce/dev-mcelog.c
+++ b/arch/x86/kernel/cpu/mce/dev-mcelog.c
@@ -338,7 +338,7 @@ static __init int dev_mcelog_init_device(void)
 	int err;

 	mce_log_len = max(MCE_LOG_MIN_LEN, num_online_cpus());
-	mcelog = kzalloc(struct_size(mcelog, entry, mce_log_len), GFP_KERNEL);
+	mcelog = kzalloc_flex(*mcelog, entry, mce_log_len, GFP_KERNEL);
 	if (!mcelog)
 		return -ENOMEM;

diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c
index caa0f595abcf..e58a73ae431b 100644
--- a/arch/x86/kernel/cpu/microcode/amd.c
+++ b/arch/x86/kernel/cpu/microcode/amd.c
@@ -1086,7 +1086,7 @@ static int verify_and_add_patch(u8 family, u8 *fw, unsigned int leftover,
 	if (ret)
 		return ret;

-	patch = kzalloc(sizeof(*patch), GFP_KERNEL);
+	patch = kzalloc_obj(*patch, GFP_KERNEL);
 	if (!patch) {
 		pr_err("Patch allocation failure.\n");
 		return -EINVAL;
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c
index 0863733858dc..d7db12c06950 100644
--- a/arch/x86/kernel/cpu/mtrr/generic.c
+++ b/arch/x86/kernel/cpu/mtrr/generic.c
@@ -410,7 +410,7 @@ void __init mtrr_copy_map(void)

 	mutex_lock(&mtrr_mutex);

-	cache_map = kcalloc(new_size, sizeof(*cache_map), GFP_KERNEL);
+	cache_map = kzalloc_objs(*cache_map, new_size, GFP_KERNEL);
 	if (cache_map) {
 		memmove(cache_map, init_cache_map,
 			cache_map_n * sizeof(*cache_map));
diff --git a/arch/x86/kernel/cpu/mtrr/legacy.c b/arch/x86/kernel/cpu/mtrr/legacy.c
index 2415ffaaf02c..ee7bc7b5ce96 100644
--- a/arch/x86/kernel/cpu/mtrr/legacy.c
+++ b/arch/x86/kernel/cpu/mtrr/legacy.c
@@ -80,7 +80,7 @@ static struct syscore mtrr_syscore = {

 void mtrr_register_syscore(void)
 {
-	mtrr_value = kcalloc(num_var_ranges, sizeof(*mtrr_value), GFP_KERNEL);
+	mtrr_value = kzalloc_objs(*mtrr_value, num_var_ranges, GFP_KERNEL);

 	/*
 	 * The CPU has no MTRR and seems to not support SMP. They have
diff --git a/arch/x86/kernel/cpu/sgx/driver.c b/arch/x86/kernel/cpu/sgx/driver.c
index a42c7180900b..74fb59d96730 100644
--- a/arch/x86/kernel/cpu/sgx/driver.c
+++ b/arch/x86/kernel/cpu/sgx/driver.c
@@ -19,7 +19,7 @@ static int __sgx_open(struct inode *inode, struct file *file)
 	struct sgx_encl *encl;
 	int ret;

-	encl = kzalloc(sizeof(*encl), GFP_KERNEL);
+	encl = kzalloc_obj(*encl, GFP_KERNEL);
 	if (!encl)
 		return -ENOMEM;

diff --git a/arch/x86/kernel/cpu/sgx/encl.c b/arch/x86/kernel/cpu/sgx/encl.c
index cf149b9f4916..8b6c400c4008 100644
--- a/arch/x86/kernel/cpu/sgx/encl.c
+++ b/arch/x86/kernel/cpu/sgx/encl.c
@@ -854,7 +854,7 @@ int sgx_encl_mm_add(struct sgx_encl *encl, struct mm_struct *mm)
 	if (sgx_encl_find_mm(encl, mm))
 		return 0;

-	encl_mm = kzalloc(sizeof(*encl_mm), GFP_KERNEL);
+	encl_mm = kzalloc_obj(*encl_mm, GFP_KERNEL);
 	if (!encl_mm)
 		return -ENOMEM;

@@ -1163,7 +1163,7 @@ struct sgx_encl_page *sgx_encl_page_alloc(struct sgx_encl *encl,
 	struct sgx_encl_page *encl_page;
 	unsigned long prot;

-	encl_page = kzalloc(sizeof(*encl_page), GFP_KERNEL);
+	encl_page = kzalloc_obj(*encl_page, GFP_KERNEL);
 	if (!encl_page)
 		return ERR_PTR(-ENOMEM);

diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c
index 0bc36957979d..ef6674067d80 100644
--- a/arch/x86/kernel/cpu/sgx/ioctl.c
+++ b/arch/x86/kernel/cpu/sgx/ioctl.c
@@ -27,7 +27,7 @@ struct sgx_va_page *sgx_encl_grow(struct sgx_encl *encl, bool reclaim)
 		(SGX_ENCL_PAGE_VA_OFFSET_MASK >> 3) + 1);

 	if (!(encl->page_cnt % SGX_VA_SLOT_COUNT)) {
-		va_page = kzalloc(sizeof(*va_page), GFP_KERNEL);
+		va_page = kzalloc_obj(*va_page, GFP_KERNEL);
 		if (!va_page)
 			return ERR_PTR(-ENOMEM);

diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c
index dc73194416ac..1021a4e33ac6 100644
--- a/arch/x86/kernel/cpu/sgx/main.c
+++ b/arch/x86/kernel/cpu/sgx/main.c
@@ -798,7 +798,8 @@ static bool __init sgx_page_cache_init(void)
 	int nid;
 	int i;

-	sgx_numa_nodes = kmalloc_array(num_possible_nodes(), sizeof(*sgx_numa_nodes), GFP_KERNEL);
+	sgx_numa_nodes = kmalloc_objs(*sgx_numa_nodes, num_possible_nodes(),
+				      GFP_KERNEL);
 	if (!sgx_numa_nodes)
 		return false;

diff --git a/arch/x86/kernel/cpu/sgx/virt.c b/arch/x86/kernel/cpu/sgx/virt.c
index 8de1f1a755f2..c7be8d0ea869 100644
--- a/arch/x86/kernel/cpu/sgx/virt.c
+++ b/arch/x86/kernel/cpu/sgx/virt.c
@@ -264,7 +264,7 @@ static int __sgx_vepc_open(struct inode *inode, struct file *file)
 {
 	struct sgx_vepc *vepc;

-	vepc = kzalloc(sizeof(struct sgx_vepc), GFP_KERNEL);
+	vepc = kzalloc_obj(struct sgx_vepc, GFP_KERNEL);
 	if (!vepc)
 		return -ENOMEM;
 	mutex_init(&vepc->lock);
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
index d6387dde3ff9..43884229c421 100644
--- a/arch/x86/kernel/hpet.c
+++ b/arch/x86/kernel/hpet.c
@@ -544,7 +544,7 @@ static struct irq_domain *hpet_create_irq_domain(int hpet_id)
 	if (x86_vector_domain == NULL)
 		return NULL;

-	domain_info = kzalloc(sizeof(*domain_info), GFP_KERNEL);
+	domain_info = kzalloc_obj(*domain_info, GFP_KERNEL);
 	if (!domain_info)
 		return NULL;

@@ -1038,7 +1038,7 @@ int __init hpet_enable(void)
 	if (IS_ENABLED(CONFIG_HPET_EMULATE_RTC) && channels < 2)
 		goto out_nohpet;

-	hc = kcalloc(channels, sizeof(*hc), GFP_KERNEL);
+	hc = kzalloc_objs(*hc, channels, GFP_KERNEL);
 	if (!hc) {
 		pr_warn("Disabling HPET.\n");
 		goto out_nohpet;
diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
index ff40f09ad911..30ab130329dc 100644
--- a/arch/x86/kernel/ioport.c
+++ b/arch/x86/kernel/ioport.c
@@ -90,7 +90,7 @@ long ksys_ioperm(unsigned long from, unsigned long num, int turn_on)
 		/* No point to allocate a bitmap just to clear permissions */
 		if (!turn_on)
 			return 0;
-		iobm = kmalloc(sizeof(*iobm), GFP_KERNEL);
+		iobm = kmalloc_obj(*iobm, GFP_KERNEL);
 		if (!iobm)
 			return -ENOMEM;

diff --git a/arch/x86/kernel/kdebugfs.c b/arch/x86/kernel/kdebugfs.c
index e2e89bebcbc3..4d7bf56524d8 100644
--- a/arch/x86/kernel/kdebugfs.c
+++ b/arch/x86/kernel/kdebugfs.c
@@ -102,7 +102,7 @@ static int __init create_setup_data_nodes(struct dentry *parent)
 	pa_data = boot_params.hdr.setup_data;

 	while (pa_data) {
-		node = kmalloc(sizeof(*node), GFP_KERNEL);
+		node = kmalloc_obj(*node, GFP_KERNEL);
 		if (!node) {
 			error = -ENOMEM;
 			goto err_dir;
diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c
index 251edc5a040f..b7ba1ec486f9 100644
--- a/arch/x86/kernel/kexec-bzimage64.c
+++ b/arch/x86/kernel/kexec-bzimage64.c
@@ -682,7 +682,7 @@ static void *bzImage64_load(struct kimage *image, char *kernel,
 		goto out_free_params;

 	/* Allocate loader specific data */
-	ldata = kzalloc(sizeof(struct bzimage64_data), GFP_KERNEL);
+	ldata = kzalloc_obj(struct bzimage64_data, GFP_KERNEL);
 	if (!ldata) {
 		ret = -ENOMEM;
 		goto out_free_params;
diff --git a/arch/x86/kernel/ksysfs.c b/arch/x86/kernel/ksysfs.c
index d547de9b3ed8..c5614b59be4a 100644
--- a/arch/x86/kernel/ksysfs.c
+++ b/arch/x86/kernel/ksysfs.c
@@ -344,7 +344,7 @@ static int __init create_setup_data_nodes(struct kobject *parent)
 	if (ret)
 		goto out_setup_data_kobj;

-	kobjp = kmalloc_array(nr, sizeof(*kobjp), GFP_KERNEL);
+	kobjp = kmalloc_objs(*kobjp, nr, GFP_KERNEL);
 	if (!kobjp) {
 		ret = -ENOMEM;
 		goto out_setup_data_kobj;
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 26ab6f8e36df..3bc062363814 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -226,7 +226,7 @@ static void kvm_async_pf_task_wake(u32 token)
 		 */
 		if (!dummy) {
 			raw_spin_unlock(&b->lock);
-			dummy = kzalloc(sizeof(*dummy), GFP_ATOMIC);
+			dummy = kzalloc_obj(*dummy, GFP_ATOMIC);

 			/*
 			 * Continue looping on allocation failure, eventually
diff --git a/arch/x86/kernel/ldt.c b/arch/x86/kernel/ldt.c
index 0f19ef355f5f..40c5bf97dd5c 100644
--- a/arch/x86/kernel/ldt.c
+++ b/arch/x86/kernel/ldt.c
@@ -154,7 +154,7 @@ static struct ldt_struct *alloc_ldt_struct(unsigned int num_entries)
 	if (num_entries > LDT_ENTRIES)
 		return NULL;

-	new_ldt = kmalloc(sizeof(struct ldt_struct), GFP_KERNEL_ACCOUNT);
+	new_ldt = kmalloc_obj(struct ldt_struct, GFP_KERNEL_ACCOUNT);
 	if (!new_ldt)
 		return NULL;

diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
index 619dddf54424..61d37f5a5ff9 100644
--- a/arch/x86/kernel/uprobes.c
+++ b/arch/x86/kernel/uprobes.c
@@ -696,7 +696,7 @@ static struct uprobe_trampoline *create_uprobe_trampoline(unsigned long vaddr)
 	if (IS_ERR_VALUE(vaddr))
 		return NULL;

-	tramp = kzalloc(sizeof(*tramp), GFP_KERNEL);
+	tramp = kzalloc_obj(*tramp, GFP_KERNEL);
 	if (unlikely(!tramp))
 		return NULL;

diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
index e6cc84143f3e..3bb70763af9c 100644
--- a/arch/x86/kernel/vm86_32.c
+++ b/arch/x86/kernel/vm86_32.c
@@ -232,7 +232,7 @@ static long do_sys_vm86(struct vm86plus_struct __user *user_vm86, bool plus)
 	}

 	if (!vm86) {
-		if (!(vm86 = kzalloc(sizeof(*vm86), GFP_KERNEL)))
+		if (!(vm86 = kzalloc_obj(*vm86, GFP_KERNEL)))
 			return -ENOMEM;
 		tsk->thread.vm86 = vm86;
 	}
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index 7fe4e58a6ebf..c196aa0c1bd1 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -602,7 +602,7 @@ int kvm_vcpu_ioctl_set_cpuid(struct kvm_vcpu *vcpu,
 		if (IS_ERR(e))
 			return PTR_ERR(e);

-		e2 = kvmalloc_array(cpuid->nent, sizeof(*e2), GFP_KERNEL_ACCOUNT);
+		e2 = kvmalloc_objs(*e2, cpuid->nent, GFP_KERNEL_ACCOUNT);
 		if (!e2) {
 			r = -ENOMEM;
 			goto out_free_cpuid;
@@ -1991,7 +1991,8 @@ int kvm_dev_ioctl_get_cpuid(struct kvm_cpuid2 *cpuid,
 	if (sanity_check_entries(entries, cpuid->nent, type))
 		return -EINVAL;

-	array.entries = kvcalloc(cpuid->nent, sizeof(struct kvm_cpuid_entry2), GFP_KERNEL);
+	array.entries = kvzalloc_objs(struct kvm_cpuid_entry2, cpuid->nent,
+				      GFP_KERNEL);
 	if (!array.entries)
 		return -ENOMEM;

diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c
index 49bf744ca8e3..30202942289a 100644
--- a/arch/x86/kvm/hyperv.c
+++ b/arch/x86/kvm/hyperv.c
@@ -968,7 +968,7 @@ int kvm_hv_vcpu_init(struct kvm_vcpu *vcpu)
 	if (hv_vcpu)
 		return 0;

-	hv_vcpu = kzalloc(sizeof(struct kvm_vcpu_hv), GFP_KERNEL_ACCOUNT);
+	hv_vcpu = kzalloc_obj(struct kvm_vcpu_hv, GFP_KERNEL_ACCOUNT);
 	if (!hv_vcpu)
 		return -ENOMEM;

diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
index 850972deac8e..1982b0077ddd 100644
--- a/arch/x86/kvm/i8254.c
+++ b/arch/x86/kvm/i8254.c
@@ -740,7 +740,7 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm, u32 flags)
 	pid_t pid_nr;
 	int ret;

-	pit = kzalloc(sizeof(struct kvm_pit), GFP_KERNEL_ACCOUNT);
+	pit = kzalloc_obj(struct kvm_pit, GFP_KERNEL_ACCOUNT);
 	if (!pit)
 		return NULL;

diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
index 2ac7f1678c46..59e28c45d7dc 100644
--- a/arch/x86/kvm/i8259.c
+++ b/arch/x86/kvm/i8259.c
@@ -587,7 +587,7 @@ int kvm_pic_init(struct kvm *kvm)
 	struct kvm_pic *s;
 	int ret;

-	s = kzalloc(sizeof(struct kvm_pic), GFP_KERNEL_ACCOUNT);
+	s = kzalloc_obj(struct kvm_pic, GFP_KERNEL_ACCOUNT);
 	if (!s)
 		return -ENOMEM;
 	spin_lock_init(&s->lock);
diff --git a/arch/x86/kvm/ioapic.c b/arch/x86/kvm/ioapic.c
index a38a8e2ac70b..bb257793b6cb 100644
--- a/arch/x86/kvm/ioapic.c
+++ b/arch/x86/kvm/ioapic.c
@@ -717,7 +717,7 @@ int kvm_ioapic_init(struct kvm *kvm)
 	struct kvm_ioapic *ioapic;
 	int ret;

-	ioapic = kzalloc(sizeof(struct kvm_ioapic), GFP_KERNEL_ACCOUNT);
+	ioapic = kzalloc_obj(struct kvm_ioapic, GFP_KERNEL_ACCOUNT);
 	if (!ioapic)
 		return -ENOMEM;
 	spin_lock_init(&ioapic->lock);
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index 2332a258de91..9381c58d4c85 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -3058,7 +3058,7 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu)
 		return 0;
 	}

-	apic = kzalloc(sizeof(*apic), GFP_KERNEL_ACCOUNT);
+	apic = kzalloc_obj(*apic, GFP_KERNEL_ACCOUNT);
 	if (!apic)
 		goto nomem;

diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
index 3911ac9bddfd..b922a8b00057 100644
--- a/arch/x86/kvm/mmu/mmu.c
+++ b/arch/x86/kvm/mmu/mmu.c
@@ -3971,7 +3971,7 @@ static int kvm_mmu_alloc_page_hash(struct kvm *kvm)
 	if (kvm->arch.mmu_page_hash)
 		return 0;

-	h = kvcalloc(KVM_NUM_MMU_PAGES, sizeof(*h), GFP_KERNEL_ACCOUNT);
+	h = kvzalloc_objs(*h, KVM_NUM_MMU_PAGES, GFP_KERNEL_ACCOUNT);
 	if (!h)
 		return -ENOMEM;

diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
index de90b104a0dd..999fd3373dba 100644
--- a/arch/x86/kvm/svm/nested.c
+++ b/arch/x86/kvm/svm/nested.c
@@ -1781,7 +1781,7 @@ static int svm_get_nested_state(struct kvm_vcpu *vcpu,
 	if (clear_user(user_vmcb, KVM_STATE_NESTED_SVM_VMCB_SIZE))
 		return -EFAULT;

-	ctl = kzalloc(sizeof(*ctl), GFP_KERNEL);
+	ctl = kzalloc_obj(*ctl, GFP_KERNEL);
 	if (!ctl)
 		return -ENOMEM;

diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
index ea515cf41168..3f9c1aa39a0a 100644
--- a/arch/x86/kvm/svm/sev.c
+++ b/arch/x86/kvm/svm/sev.c
@@ -2512,7 +2512,7 @@ static int snp_launch_finish(struct kvm *kvm, struct kvm_sev_cmd *argp)
 	if (ret)
 		return ret;

-	data = kzalloc(sizeof(*data), GFP_KERNEL_ACCOUNT);
+	data = kzalloc_obj(*data, GFP_KERNEL_ACCOUNT);
 	if (!data)
 		return -ENOMEM;

@@ -2711,7 +2711,7 @@ int sev_mem_enc_register_region(struct kvm *kvm,
 	if (range->addr > ULONG_MAX || range->size > ULONG_MAX)
 		return -EINVAL;

-	region = kzalloc(sizeof(*region), GFP_KERNEL_ACCOUNT);
+	region = kzalloc_obj(*region, GFP_KERNEL_ACCOUNT);
 	if (!region)
 		return -ENOMEM;

diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c
index 5df9d32d2058..adbb3060ae2f 100644
--- a/arch/x86/kvm/vmx/tdx.c
+++ b/arch/x86/kvm/vmx/tdx.c
@@ -2218,8 +2218,8 @@ static int tdx_get_capabilities(struct kvm_tdx_cmd *cmd)
 	if (nr_user_entries < td_conf->num_cpuid_config)
 		return -E2BIG;

-	caps = kzalloc(struct_size(caps, cpuid.entries,
-				   td_conf->num_cpuid_config), GFP_KERNEL);
+	caps = kzalloc_flex(*caps, cpuid.entries, td_conf->num_cpuid_config,
+			    GFP_KERNEL);
 	if (!caps)
 		return -ENOMEM;

@@ -2407,8 +2407,8 @@ static int __tdx_td_init(struct kvm *kvm, struct td_params *td_params,
 	kvm_tdx->td.tdcs_nr_pages = tdx_sysinfo->td_ctrl.tdcs_base_size / PAGE_SIZE;
 	/* TDVPS = TDVPR(4K page) + TDCX(multiple 4K pages), -1 for TDVPR. */
 	kvm_tdx->td.tdcx_nr_pages = tdx_sysinfo->td_ctrl.tdvps_base_size / PAGE_SIZE - 1;
-	tdcs_pages = kcalloc(kvm_tdx->td.tdcs_nr_pages, sizeof(*kvm_tdx->td.tdcs_pages),
-			     GFP_KERNEL);
+	tdcs_pages = kzalloc_objs(*kvm_tdx->td.tdcs_pages,
+				  kvm_tdx->td.tdcs_nr_pages, GFP_KERNEL);
 	if (!tdcs_pages)
 		goto free_tdr;

@@ -2743,7 +2743,7 @@ static int tdx_td_init(struct kvm *kvm, struct kvm_tdx_cmd *cmd)
 		goto out;
 	}

-	td_params = kzalloc(sizeof(struct td_params), GFP_KERNEL);
+	td_params = kzalloc_obj(struct td_params, GFP_KERNEL);
 	if (!td_params) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 391f4a5ce6dd..4344847f7119 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -6208,7 +6208,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
 		r = -EINVAL;
 		if (!lapic_in_kernel(vcpu))
 			goto out;
-		u.lapic = kzalloc(sizeof(struct kvm_lapic_state), GFP_KERNEL);
+		u.lapic = kzalloc_obj(struct kvm_lapic_state, GFP_KERNEL);

 		r = -ENOMEM;
 		if (!u.lapic)
@@ -6410,7 +6410,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
 		if (vcpu->arch.guest_fpu.uabi_size > sizeof(struct kvm_xsave))
 			break;

-		u.xsave = kzalloc(sizeof(struct kvm_xsave), GFP_KERNEL);
+		u.xsave = kzalloc_obj(struct kvm_xsave, GFP_KERNEL);
 		r = -ENOMEM;
 		if (!u.xsave)
 			break;
@@ -6459,7 +6459,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
 	}

 	case KVM_GET_XCRS: {
-		u.xcrs = kzalloc(sizeof(struct kvm_xcrs), GFP_KERNEL);
+		u.xcrs = kzalloc_obj(struct kvm_xcrs, GFP_KERNEL);
 		r = -ENOMEM;
 		if (!u.xcrs)
 			break;
@@ -6619,7 +6619,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
 		    vcpu->arch.guest_state_protected)
 			goto out;

-		u.sregs2 = kzalloc(sizeof(struct kvm_sregs2), GFP_KERNEL);
+		u.sregs2 = kzalloc_obj(struct kvm_sregs2, GFP_KERNEL);
 		r = -ENOMEM;
 		if (!u.sregs2)
 			goto out;
@@ -6994,7 +6994,7 @@ static struct kvm_x86_msr_filter *kvm_alloc_msr_filter(bool default_allow)
 {
 	struct kvm_x86_msr_filter *msr_filter;

-	msr_filter = kzalloc(sizeof(*msr_filter), GFP_KERNEL_ACCOUNT);
+	msr_filter = kzalloc_obj(*msr_filter, GFP_KERNEL_ACCOUNT);
 	if (!msr_filter)
 		return NULL;

diff --git a/arch/x86/kvm/xen.c b/arch/x86/kvm/xen.c
index 28eeb1b2a16c..1838a49eee76 100644
--- a/arch/x86/kvm/xen.c
+++ b/arch/x86/kvm/xen.c
@@ -1514,8 +1514,7 @@ static bool kvm_xen_schedop_poll(struct kvm_vcpu *vcpu, bool longmode,
 			return true;
 		}

-		ports = kmalloc_array(sched_poll.nr_ports,
-				      sizeof(*ports), GFP_KERNEL);
+		ports = kmalloc_objs(*ports, sched_poll.nr_ports, GFP_KERNEL);
 		if (!ports) {
 			*r = -ENOMEM;
 			return true;
@@ -2116,7 +2115,7 @@ static int kvm_xen_eventfd_assign(struct kvm *kvm,
 	struct evtchnfd *evtchnfd;
 	int ret = -EINVAL;

-	evtchnfd = kzalloc(sizeof(struct evtchnfd), GFP_KERNEL);
+	evtchnfd = kzalloc_obj(struct evtchnfd, GFP_KERNEL);
 	if (!evtchnfd)
 		return -ENOMEM;

@@ -2214,7 +2213,7 @@ static int kvm_xen_eventfd_reset(struct kvm *kvm)
 	idr_for_each_entry(&kvm->arch.xen.evtchn_ports, evtchnfd, i)
 		n++;

-	all_evtchnfds = kmalloc_array(n, sizeof(struct evtchnfd *), GFP_KERNEL);
+	all_evtchnfds = kmalloc_objs(struct evtchnfd *, n, GFP_KERNEL);
 	if (!all_evtchnfds) {
 		mutex_unlock(&kvm->arch.xen.xen_lock);
 		return -ENOMEM;
diff --git a/arch/x86/mm/kmmio.c b/arch/x86/mm/kmmio.c
index 9f82019179e1..6ac981cec652 100644
--- a/arch/x86/mm/kmmio.c
+++ b/arch/x86/mm/kmmio.c
@@ -387,7 +387,7 @@ static int add_kmmio_fault_page(unsigned long addr)
 		return 0;
 	}

-	f = kzalloc(sizeof(*f), GFP_ATOMIC);
+	f = kzalloc_obj(*f, GFP_ATOMIC);
 	if (!f)
 		return -1;

@@ -562,7 +562,7 @@ void unregister_kmmio_probe(struct kmmio_probe *p)
 	if (!release_list)
 		return;

-	drelease = kmalloc(sizeof(*drelease), GFP_ATOMIC);
+	drelease = kmalloc_obj(*drelease, GFP_ATOMIC);
 	if (!drelease) {
 		pr_crit("leaking kmmio_fault_page objects.\n");
 		return;
diff --git a/arch/x86/mm/mmio-mod.c b/arch/x86/mm/mmio-mod.c
index c3317f0650d8..63294d590346 100644
--- a/arch/x86/mm/mmio-mod.c
+++ b/arch/x86/mm/mmio-mod.c
@@ -220,7 +220,7 @@ static void ioremap_trace_core(resource_size_t offset, unsigned long size,
 							void __iomem *addr)
 {
 	static atomic_t next_id;
-	struct remap_trace *trace = kmalloc(sizeof(*trace), GFP_KERNEL);
+	struct remap_trace *trace = kmalloc_obj(*trace, GFP_KERNEL);
 	/* These are page-unaligned. */
 	struct mmiotrace_map map = {
 		.phys = offset,
diff --git a/arch/x86/mm/pat/memtype.c b/arch/x86/mm/pat/memtype.c
index 8a3d9722f602..fdf6ed96cbd0 100644
--- a/arch/x86/mm/pat/memtype.c
+++ b/arch/x86/mm/pat/memtype.c
@@ -574,7 +574,7 @@ int memtype_reserve(u64 start, u64 end, enum page_cache_mode req_type,
 		return -EINVAL;
 	}

-	entry_new = kzalloc(sizeof(struct memtype), GFP_KERNEL);
+	entry_new = kzalloc_obj(struct memtype, GFP_KERNEL);
 	if (!entry_new)
 		return -ENOMEM;

@@ -966,7 +966,7 @@ static struct memtype *memtype_get_idx(loff_t pos)
 	struct memtype *entry_print;
 	int ret;

-	entry_print  = kzalloc(sizeof(struct memtype), GFP_KERNEL);
+	entry_print  = kzalloc_obj(struct memtype, GFP_KERNEL);
 	if (!entry_print)
 		return NULL;

diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 070ba80e39d7..0a0127c9e2e2 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -3758,7 +3758,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)

 	jit_data = prog->aux->jit_data;
 	if (!jit_data) {
-		jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
+		jit_data = kzalloc_obj(*jit_data, GFP_KERNEL);
 		if (!jit_data) {
 			prog = orig_prog;
 			goto out;
@@ -3794,7 +3794,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
 		padding = true;
 		goto skip_init_addrs;
 	}
-	addrs = kvmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
+	addrs = kvmalloc_objs(*addrs, prog->len + 1, GFP_KERNEL);
 	if (!addrs) {
 		prog = orig_prog;
 		goto out_addrs;
diff --git a/arch/x86/net/bpf_jit_comp32.c b/arch/x86/net/bpf_jit_comp32.c
index de0f9e5f9f73..e6f3475bb773 100644
--- a/arch/x86/net/bpf_jit_comp32.c
+++ b/arch/x86/net/bpf_jit_comp32.c
@@ -2545,7 +2545,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
 		prog = tmp;
 	}

-	addrs = kmalloc_array(prog->len, sizeof(*addrs), GFP_KERNEL);
+	addrs = kmalloc_objs(*addrs, prog->len, GFP_KERNEL);
 	if (!addrs) {
 		prog = orig_prog;
 		goto out;
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
index 0c316bae1726..d0e1cd677eba 100644
--- a/arch/x86/pci/acpi.c
+++ b/arch/x86/pci/acpi.c
@@ -562,7 +562,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
 	} else {
 		struct pci_root_info *info;

-		info = kzalloc(sizeof(*info), GFP_KERNEL);
+		info = kzalloc_obj(*info, GFP_KERNEL);
 		if (!info)
 			dev_err(&root->device->dev,
 				"pci_bus %04x:%02x: ignored (out of memory)\n",
diff --git a/arch/x86/pci/bus_numa.c b/arch/x86/pci/bus_numa.c
index e4a525e59eaf..53037dba4c97 100644
--- a/arch/x86/pci/bus_numa.c
+++ b/arch/x86/pci/bus_numa.c
@@ -72,7 +72,7 @@ struct pci_root_info __init *alloc_pci_root_info(int bus_min, int bus_max,
 {
 	struct pci_root_info *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);

 	if (!info)
 		return info;
@@ -132,7 +132,7 @@ void update_res(struct pci_root_info *info, resource_size_t start,
 addit:

 	/* need to add that */
-	root_res = kzalloc(sizeof(*root_res), GFP_KERNEL);
+	root_res = kzalloc_obj(*root_res, GFP_KERNEL);
 	if (!root_res)
 		return;

diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index ddb798603201..12d4e522d863 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -461,7 +461,7 @@ void pcibios_scan_root(int busnum)
 	struct pci_sysdata *sd;
 	LIST_HEAD(resources);

-	sd = kzalloc(sizeof(*sd), GFP_KERNEL);
+	sd = kzalloc_obj(*sd, GFP_KERNEL);
 	if (!sd) {
 		printk(KERN_ERR "PCI: OOM, skipping PCI bus %02x\n", busnum);
 		return;
diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c
index 25076a5acd96..3c92893ba725 100644
--- a/arch/x86/pci/fixup.c
+++ b/arch/x86/pci/fixup.c
@@ -771,7 +771,7 @@ static void pci_amd_enable_64bit_bar(struct pci_dev *dev)
 	if (i == 8)
 		return;

-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (!res)
 		return;

diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
index f2f4a5d50b27..5e99b12300c9 100644
--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c
@@ -81,7 +81,7 @@ pcibios_save_fw_addr(struct pci_dev *dev, int idx, resource_size_t fw_addr)
 	map = pcibios_fwaddrmap_lookup(dev);
 	if (!map) {
 		spin_unlock_irqrestore(&pcibios_fwaddrmap_lock, flags);
-		map = kzalloc(sizeof(*map), GFP_KERNEL);
+		map = kzalloc_obj(*map, GFP_KERNEL);
 		if (!map)
 			return;

diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c
index 1f4522325920..14098363b841 100644
--- a/arch/x86/pci/mmconfig-shared.c
+++ b/arch/x86/pci/mmconfig-shared.c
@@ -77,7 +77,7 @@ static struct pci_mmcfg_region *pci_mmconfig_alloc(int segment, int start,
 	if (addr == 0)
 		return NULL;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;

diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
index b8755cde2419..4f356d67cc31 100644
--- a/arch/x86/pci/xen.c
+++ b/arch/x86/pci/xen.c
@@ -173,7 +173,7 @@ static int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
 	if (type == PCI_CAP_ID_MSI && nvec > 1)
 		return 1;

-	v = kcalloc(max(1, nvec), sizeof(int), GFP_KERNEL);
+	v = kzalloc_objs(int, max(1, nvec), GFP_KERNEL);
 	if (!v)
 		return -ENOMEM;

diff --git a/arch/x86/platform/efi/runtime-map.c b/arch/x86/platform/efi/runtime-map.c
index a6f02cef3ca2..77699893b5bb 100644
--- a/arch/x86/platform/efi/runtime-map.c
+++ b/arch/x86/platform/efi/runtime-map.c
@@ -114,7 +114,7 @@ add_sysfs_runtime_map_entry(struct kobject *kobj, int nr,
 			return ERR_PTR(-ENOMEM);
 	}

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		kset_unregister(map_kset);
 		map_kset = NULL;
@@ -166,7 +166,7 @@ static int __init efi_runtime_map_init(void)
 	if (!efi_enabled(EFI_MEMMAP) || !efi_kobj)
 		return 0;

-	map_entries = kcalloc(efi.memmap.nr_map, sizeof(entry), GFP_KERNEL);
+	map_entries = kzalloc_objs(entry, efi.memmap.nr_map, GFP_KERNEL);
 	if (!map_entries) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/arch/x86/platform/geode/geode-common.c b/arch/x86/platform/geode/geode-common.c
index 8fd78e60bf15..f3c9eff2d374 100644
--- a/arch/x86/platform/geode/geode-common.c
+++ b/arch/x86/platform/geode/geode-common.c
@@ -113,7 +113,7 @@ int __init geode_create_leds(const char *label, const struct geode_led *leds,
 		return -EINVAL;
 	}

-	swnodes = kcalloc(n_leds, sizeof(*swnodes), GFP_KERNEL);
+	swnodes = kzalloc_objs(*swnodes, n_leds, GFP_KERNEL);
 	if (!swnodes)
 		return -ENOMEM;

@@ -121,7 +121,7 @@ int __init geode_create_leds(const char *label, const struct geode_led *leds,
 	 * Each LED is represented by 3 properties: "gpios",
 	 * "linux,default-trigger", and am empty terminator.
 	 */
-	props = kcalloc(n_leds * 3, sizeof(*props), GFP_KERNEL);
+	props = kzalloc_objs(*props, n_leds * 3, GFP_KERNEL);
 	if (!props) {
 		err = -ENOMEM;
 		goto err_free_swnodes;
diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
index 916441f5e85c..5a7d96bbd6d8 100644
--- a/arch/x86/power/cpu.c
+++ b/arch/x86/power/cpu.c
@@ -394,7 +394,7 @@ static int msr_build_context(const u32 *msr_id, const int num)

 	total_num = saved_msrs->num + num;

-	msr_array = kmalloc_array(total_num, sizeof(struct saved_msr), GFP_KERNEL);
+	msr_array = kmalloc_objs(struct saved_msr, total_num, GFP_KERNEL);
 	if (!msr_array) {
 		pr_err("x86/pm: Can not allocate memory to save/restore MSRs during suspend.\n");
 		return -ENOMEM;
diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c
index ee643a6cd691..5a31ced2788c 100644
--- a/arch/x86/virt/svm/sev.c
+++ b/arch/x86/virt/svm/sev.c
@@ -313,7 +313,7 @@ static bool __init alloc_rmp_segment_desc(u64 segment_pa, u64 segment_size, u64
 		return false;
 	}

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc) {
 		memunmap(rmp_segment);
 		return false;
diff --git a/arch/x86/virt/vmx/tdx/tdx.c b/arch/x86/virt/vmx/tdx/tdx.c
index 5ce4ebe99774..047cb2063202 100644
--- a/arch/x86/virt/vmx/tdx/tdx.c
+++ b/arch/x86/virt/vmx/tdx/tdx.c
@@ -194,7 +194,7 @@ static int add_tdx_memblock(struct list_head *tmb_list, unsigned long start_pfn,
 {
 	struct tdx_memblock *tmb;

-	tmb = kmalloc(sizeof(*tmb), GFP_KERNEL);
+	tmb = kmalloc_obj(*tmb, GFP_KERNEL);
 	if (!tmb)
 		return -ENOMEM;

diff --git a/arch/x86/xen/grant-table.c b/arch/x86/xen/grant-table.c
index 1e681bf62561..d8149572b4f7 100644
--- a/arch/x86/xen/grant-table.c
+++ b/arch/x86/xen/grant-table.c
@@ -101,7 +101,7 @@ static int gnttab_apply(pte_t *pte, unsigned long addr, void *data)

 static int arch_gnttab_valloc(struct gnttab_vm_area *area, unsigned nr_frames)
 {
-	area->ptes = kmalloc_array(nr_frames, sizeof(*area->ptes), GFP_KERNEL);
+	area->ptes = kmalloc_objs(*area->ptes, nr_frames, GFP_KERNEL);
 	if (area->ptes == NULL)
 		return -ENOMEM;
 	area->area = get_vm_area(PAGE_SIZE * nr_frames, VM_IOREMAP);
diff --git a/arch/x86/xen/smp_pv.c b/arch/x86/xen/smp_pv.c
index c40f326f0c3a..82894426cb99 100644
--- a/arch/x86/xen/smp_pv.c
+++ b/arch/x86/xen/smp_pv.c
@@ -230,7 +230,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
 	if (cpumask_test_and_set_cpu(cpu, xen_cpu_initialized_map))
 		return 0;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (ctxt == NULL) {
 		cpumask_clear_cpu(cpu, xen_cpu_initialized_map);
 		return -ENOMEM;
diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c
index ff0600a0584c..b5de377dc96f 100644
--- a/arch/xtensa/kernel/ptrace.c
+++ b/arch/xtensa/kernel/ptrace.c
@@ -123,7 +123,7 @@ static int tie_get(struct task_struct *target,
 	int ret;
 	struct pt_regs *regs = task_pt_regs(target);
 	struct thread_info *ti = task_thread_info(target);
-	elf_xtregs_t *newregs = kzalloc(sizeof(elf_xtregs_t), GFP_KERNEL);
+	elf_xtregs_t *newregs = kzalloc_obj(elf_xtregs_t, GFP_KERNEL);

 	if (!newregs)
 		return -ENOMEM;
@@ -156,7 +156,7 @@ static int tie_set(struct task_struct *target,
 	int ret;
 	struct pt_regs *regs = task_pt_regs(target);
 	struct thread_info *ti = task_thread_info(target);
-	elf_xtregs_t *newregs = kzalloc(sizeof(elf_xtregs_t), GFP_KERNEL);
+	elf_xtregs_t *newregs = kzalloc_obj(elf_xtregs_t, GFP_KERNEL);

 	if (!newregs)
 		return -ENOMEM;
diff --git a/arch/xtensa/platforms/iss/simdisk.c b/arch/xtensa/platforms/iss/simdisk.c
index 3cafc8feddee..3e54f6377c81 100644
--- a/arch/xtensa/platforms/iss/simdisk.c
+++ b/arch/xtensa/platforms/iss/simdisk.c
@@ -320,7 +320,7 @@ static int __init simdisk_init(void)
 	if (simdisk_count > MAX_SIMDISK_COUNT)
 		simdisk_count = MAX_SIMDISK_COUNT;

-	sddev = kmalloc_array(simdisk_count, sizeof(*sddev), GFP_KERNEL);
+	sddev = kmalloc_objs(*sddev, simdisk_count, GFP_KERNEL);
 	if (sddev == NULL)
 		goto out_unregister;

diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
index 6a75fe1c7a5c..ac83b0668764 100644
--- a/block/bfq-cgroup.c
+++ b/block/bfq-cgroup.c
@@ -494,7 +494,7 @@ static struct blkcg_policy_data *bfq_cpd_alloc(gfp_t gfp)
 {
 	struct bfq_group_data *bgd;

-	bgd = kzalloc(sizeof(*bgd), gfp);
+	bgd = kzalloc_obj(*bgd, gfp);
 	if (!bgd)
 		return NULL;

diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
index b180ce583951..141c602d5e85 100644
--- a/block/bfq-iosched.c
+++ b/block/bfq-iosched.c
@@ -606,7 +606,7 @@ static bool bfqq_request_over_limit(struct bfq_data *bfqd,
 		spin_unlock_irq(&bfqd->lock);
 		if (entities != inline_entities)
 			kfree(entities);
-		entities = kmalloc_array(depth, sizeof(*entities), GFP_NOIO);
+		entities = kmalloc_objs(*entities, depth, GFP_NOIO);
 		if (!entities)
 			return false;
 		alloc_depth = depth;
@@ -938,8 +938,8 @@ void bfq_weights_tree_add(struct bfq_queue *bfqq)
 		}
 	}

-	bfqq->weight_counter = kzalloc(sizeof(struct bfq_weight_counter),
-				       GFP_ATOMIC);
+	bfqq->weight_counter = kzalloc_obj(struct bfq_weight_counter,
+					   GFP_ATOMIC);

 	/*
 	 * In the unlucky event of an allocation failure, we just
diff --git a/block/bio-integrity.c b/block/bio-integrity.c
index 09eeaf6e74b8..dc2e771f11ae 100644
--- a/block/bio-integrity.c
+++ b/block/bio-integrity.c
@@ -97,7 +97,7 @@ struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio,
 	if (WARN_ON_ONCE(bio_has_crypt_ctx(bio)))
 		return ERR_PTR(-EOPNOTSUPP);

-	bia = kmalloc(struct_size(bia, bvecs, nr_vecs), gfp_mask);
+	bia = kmalloc_flex(*bia, bvecs, nr_vecs, gfp_mask);
 	if (unlikely(!bia))
 		return ERR_PTR(-ENOMEM);
 	bio_integrity_init(bio, &bia->bip, bia->bvecs, nr_vecs);
@@ -322,7 +322,7 @@ int bio_integrity_map_user(struct bio *bio, struct iov_iter *iter)
 	if (nr_vecs > BIO_MAX_VECS)
 		return -E2BIG;
 	if (nr_vecs > UIO_FASTIOV) {
-		bvec = kcalloc(nr_vecs, sizeof(*bvec), GFP_KERNEL);
+		bvec = kzalloc_objs(*bvec, nr_vecs, GFP_KERNEL);
 		if (!bvec)
 			return -ENOMEM;
 		pages = NULL;
diff --git a/block/bio.c b/block/bio.c
index 8203bb7455a9..c8e14c330a35 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -84,7 +84,7 @@ static DEFINE_XARRAY(bio_slabs);

 static struct bio_slab *create_bio_slab(unsigned int size)
 {
-	struct bio_slab *bslab = kzalloc(sizeof(*bslab), GFP_KERNEL);
+	struct bio_slab *bslab = kzalloc_obj(*bslab, GFP_KERNEL);

 	if (!bslab)
 		return NULL;
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index 3cffb68ba5d8..de609a3e0228 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -1417,7 +1417,7 @@ blkcg_css_alloc(struct cgroup_subsys_state *parent_css)
 	if (!parent_css) {
 		blkcg = &blkcg_root;
 	} else {
-		blkcg = kzalloc(sizeof(*blkcg), GFP_KERNEL);
+		blkcg = kzalloc_obj(*blkcg, GFP_KERNEL);
 		if (!blkcg)
 			goto unlock;
 	}
diff --git a/block/blk-crypto-fallback.c b/block/blk-crypto-fallback.c
index a331b061dbf4..9a05abe8d43f 100644
--- a/block/blk-crypto-fallback.c
+++ b/block/blk-crypto-fallback.c
@@ -546,8 +546,8 @@ static int blk_crypto_fallback_init(void)
 		goto out;

 	/* Dynamic allocation is needed because of lockdep_register_key(). */
-	blk_crypto_fallback_profile =
-		kzalloc(sizeof(*blk_crypto_fallback_profile), GFP_KERNEL);
+	blk_crypto_fallback_profile = kzalloc_obj(*blk_crypto_fallback_profile,
+						  GFP_KERNEL);
 	if (!blk_crypto_fallback_profile) {
 		err = -ENOMEM;
 		goto fail_free_bioset;
@@ -574,9 +574,8 @@ static int blk_crypto_fallback_init(void)
 	if (!blk_crypto_wq)
 		goto fail_destroy_profile;

-	blk_crypto_keyslots = kcalloc(blk_crypto_num_keyslots,
-				      sizeof(blk_crypto_keyslots[0]),
-				      GFP_KERNEL);
+	blk_crypto_keyslots = kzalloc_objs(blk_crypto_keyslots[0],
+					   blk_crypto_num_keyslots, GFP_KERNEL);
 	if (!blk_crypto_keyslots)
 		goto fail_free_wq;

diff --git a/block/blk-crypto-profile.c b/block/blk-crypto-profile.c
index 81918f6e0cae..58032fd7faff 100644
--- a/block/blk-crypto-profile.c
+++ b/block/blk-crypto-profile.c
@@ -93,8 +93,7 @@ int blk_crypto_profile_init(struct blk_crypto_profile *profile,

 	/* Initialize keyslot management data. */

-	profile->slots = kvcalloc(num_slots, sizeof(profile->slots[0]),
-				  GFP_KERNEL);
+	profile->slots = kvzalloc_objs(profile->slots[0], num_slots, GFP_KERNEL);
 	if (!profile->slots)
 		goto err_destroy;

@@ -121,8 +120,8 @@ int blk_crypto_profile_init(struct blk_crypto_profile *profile,

 	profile->log_slot_ht_size = ilog2(slot_hashtable_size);
 	profile->slot_hashtable =
-		kvmalloc_array(slot_hashtable_size,
-			       sizeof(profile->slot_hashtable[0]), GFP_KERNEL);
+		kvmalloc_objs(profile->slot_hashtable[0], slot_hashtable_size,
+			      GFP_KERNEL);
 	if (!profile->slot_hashtable)
 		goto err_destroy;
 	for (i = 0; i < slot_hashtable_size; i++)
diff --git a/block/blk-crypto-sysfs.c b/block/blk-crypto-sysfs.c
index e832f403f200..e6c76d672829 100644
--- a/block/blk-crypto-sysfs.c
+++ b/block/blk-crypto-sysfs.c
@@ -170,7 +170,7 @@ int blk_crypto_sysfs_register(struct gendisk *disk)
 	if (!q->crypto_profile)
 		return 0;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return -ENOMEM;
 	obj->profile = q->crypto_profile;
diff --git a/block/blk-iocost.c b/block/blk-iocost.c
index ef543d163d46..32faf0a56bd3 100644
--- a/block/blk-iocost.c
+++ b/block/blk-iocost.c
@@ -2882,7 +2882,7 @@ static int blk_iocost_init(struct gendisk *disk)
 	struct ioc *ioc;
 	int i, cpu, ret;

-	ioc = kzalloc(sizeof(*ioc), GFP_KERNEL);
+	ioc = kzalloc_obj(*ioc, GFP_KERNEL);
 	if (!ioc)
 		return -ENOMEM;

@@ -2946,7 +2946,7 @@ static struct blkcg_policy_data *ioc_cpd_alloc(gfp_t gfp)
 {
 	struct ioc_cgrp *iocc;

-	iocc = kzalloc(sizeof(struct ioc_cgrp), gfp);
+	iocc = kzalloc_obj(struct ioc_cgrp, gfp);
 	if (!iocc)
 		return NULL;

diff --git a/block/blk-iolatency.c b/block/blk-iolatency.c
index f7434278cd29..609a71476bff 100644
--- a/block/blk-iolatency.c
+++ b/block/blk-iolatency.c
@@ -760,7 +760,7 @@ static int blk_iolatency_init(struct gendisk *disk)
 	struct blk_iolatency *blkiolat;
 	int ret;

-	blkiolat = kzalloc(sizeof(*blkiolat), GFP_KERNEL);
+	blkiolat = kzalloc_obj(*blkiolat, GFP_KERNEL);
 	if (!blkiolat)
 		return -ENOMEM;

diff --git a/block/blk-ioprio.c b/block/blk-ioprio.c
index 13659dc15c3f..8fa8bca35062 100644
--- a/block/blk-ioprio.c
+++ b/block/blk-ioprio.c
@@ -99,7 +99,7 @@ static struct blkcg_policy_data *ioprio_alloc_cpd(gfp_t gfp)
 {
 	struct ioprio_blkcg *blkcg;

-	blkcg = kzalloc(sizeof(*blkcg), gfp);
+	blkcg = kzalloc_obj(*blkcg, gfp);
 	if (!blkcg)
 		return NULL;
 	blkcg->prio_policy = POLICY_NO_CHANGE;
diff --git a/block/blk-map.c b/block/blk-map.c
index 4533094d9458..53bdd100aa4b 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -26,7 +26,7 @@ static struct bio_map_data *bio_alloc_map_data(struct iov_iter *data,
 	if (data->nr_segs > UIO_MAXIOV)
 		return NULL;

-	bmd = kmalloc(struct_size(bmd, iov, data->nr_segs), gfp_mask);
+	bmd = kmalloc_flex(*bmd, iov, data->nr_segs, gfp_mask);
 	if (!bmd)
 		return NULL;
 	bmd->iter = *data;
diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
index 97c3c8f45a9b..0d085a53f0d7 100644
--- a/block/blk-mq-sched.c
+++ b/block/blk-mq-sched.c
@@ -489,7 +489,7 @@ int blk_mq_alloc_sched_ctx_batch(struct xarray *elv_tbl,
 	lockdep_assert_held_write(&set->update_nr_hwq_lock);

 	list_for_each_entry(q, &set->tag_list, tag_set_list) {
-		ctx = kzalloc(sizeof(struct elv_change_ctx), GFP_KERNEL);
+		ctx = kzalloc_obj(struct elv_change_ctx, GFP_KERNEL);
 		if (!ctx)
 			return -ENOMEM;

@@ -514,7 +514,7 @@ struct elevator_tags *blk_mq_alloc_sched_tags(struct blk_mq_tag_set *set,
 	else
 		nr_tags = nr_hw_queues;

-	et = kmalloc(struct_size(et, tags, nr_tags), gfp);
+	et = kmalloc_flex(*et, tags, nr_tags, gfp);
 	if (!et)
 		return NULL;

diff --git a/block/blk-mq.c b/block/blk-mq.c
index d5602ff62c7c..e0bbe087766f 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -4362,7 +4362,7 @@ static int blk_mq_alloc_ctxs(struct request_queue *q)
 	struct blk_mq_ctxs *ctxs;
 	int cpu;

-	ctxs = kzalloc(sizeof(*ctxs), GFP_KERNEL);
+	ctxs = kzalloc_obj(*ctxs, GFP_KERNEL);
 	if (!ctxs)
 		return -ENOMEM;

@@ -4879,7 +4879,7 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
 		set->nr_hw_queues = nr_cpu_ids;

 	if (set->flags & BLK_MQ_F_BLOCKING) {
-		set->srcu = kmalloc(sizeof(*set->srcu), GFP_KERNEL);
+		set->srcu = kmalloc_obj(*set->srcu, GFP_KERNEL);
 		if (!set->srcu)
 			return -ENOMEM;
 		ret = init_srcu_struct(set->srcu);
diff --git a/block/blk-stat.c b/block/blk-stat.c
index 682a8ddb1173..2eaa5e27cdb8 100644
--- a/block/blk-stat.c
+++ b/block/blk-stat.c
@@ -103,12 +103,11 @@ blk_stat_alloc_callback(void (*timer_fn)(struct blk_stat_callback *),
 {
 	struct blk_stat_callback *cb;

-	cb = kmalloc(sizeof(*cb), GFP_KERNEL);
+	cb = kmalloc_obj(*cb, GFP_KERNEL);
 	if (!cb)
 		return NULL;

-	cb->stat = kmalloc_array(buckets, sizeof(struct blk_rq_stat),
-				 GFP_KERNEL);
+	cb->stat = kmalloc_objs(struct blk_rq_stat, buckets, GFP_KERNEL);
 	if (!cb->stat) {
 		kfree(cb);
 		return NULL;
@@ -207,7 +206,7 @@ struct blk_queue_stats *blk_alloc_queue_stats(void)
 {
 	struct blk_queue_stats *stats;

-	stats = kmalloc(sizeof(*stats), GFP_KERNEL);
+	stats = kmalloc_obj(*stats, GFP_KERNEL);
 	if (!stats)
 		return NULL;

diff --git a/block/blk-wbt.c b/block/blk-wbt.c
index 6dba71e87387..91115508179b 100644
--- a/block/blk-wbt.c
+++ b/block/blk-wbt.c
@@ -713,7 +713,7 @@ static int wbt_data_dir(const struct request *rq)

 static struct rq_wb *wbt_alloc(void)
 {
-	struct rq_wb *rwb = kzalloc(sizeof(*rwb), GFP_KERNEL);
+	struct rq_wb *rwb = kzalloc_obj(*rwb, GFP_KERNEL);

 	if (!rwb)
 		return NULL;
diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index 846b8844f04a..54ee346ddb5a 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -1804,8 +1804,8 @@ static int disk_alloc_zone_resources(struct gendisk *disk,
 		min(ilog2(pool_size) + 1, BLK_ZONE_WPLUG_MAX_HASH_BITS);

 	disk->zone_wplugs_hash =
-		kcalloc(disk_zone_wplugs_hash_size(disk),
-			sizeof(struct hlist_head), GFP_KERNEL);
+		kzalloc_objs(struct hlist_head,
+			     disk_zone_wplugs_hash_size(disk), GFP_KERNEL);
 	if (!disk->zone_wplugs_hash)
 		return -ENOMEM;

diff --git a/block/bsg-lib.c b/block/bsg-lib.c
index 9ceb5d0832f5..ca08c6b7fb9c 100644
--- a/block/bsg-lib.c
+++ b/block/bsg-lib.c
@@ -368,7 +368,7 @@ struct request_queue *bsg_setup_queue(struct device *dev, const char *name,
 	struct request_queue *q;
 	int ret = -ENOMEM;

-	bset = kzalloc(sizeof(*bset), GFP_KERNEL);
+	bset = kzalloc_obj(*bset, GFP_KERNEL);
 	if (!bset)
 		return ERR_PTR(-ENOMEM);

diff --git a/block/bsg.c b/block/bsg.c
index 72157a59b788..5f87ea8d5f64 100644
--- a/block/bsg.c
+++ b/block/bsg.c
@@ -192,7 +192,7 @@ struct bsg_device *bsg_register_queue(struct request_queue *q,
 	struct bsg_device *bd;
 	int ret;

-	bd = kzalloc(sizeof(*bd), GFP_KERNEL);
+	bd = kzalloc_obj(*bd, GFP_KERNEL);
 	if (!bd)
 		return ERR_PTR(-ENOMEM);
 	bd->max_queue = BSG_DEFAULT_CMDS;
diff --git a/block/disk-events.c b/block/disk-events.c
index 2f697224386a..04d44d05ed53 100644
--- a/block/disk-events.c
+++ b/block/disk-events.c
@@ -436,7 +436,7 @@ int disk_alloc_events(struct gendisk *disk)
 	if (!disk->fops->check_events || !disk->events)
 		return 0;

-	ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kzalloc_obj(*ev, GFP_KERNEL);
 	if (!ev) {
 		pr_warn("%s: failed to initialize events\n", disk->disk_name);
 		return -ENOMEM;
diff --git a/block/fops.c b/block/fops.c
index 4d32785b31d9..57a53e0d1016 100644
--- a/block/fops.c
+++ b/block/fops.c
@@ -65,8 +65,7 @@ static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb,
 	if (nr_pages <= DIO_INLINE_BIO_VECS)
 		vecs = inline_vecs;
 	else {
-		vecs = kmalloc_array(nr_pages, sizeof(struct bio_vec),
-				     GFP_KERNEL);
+		vecs = kmalloc_objs(struct bio_vec, nr_pages, GFP_KERNEL);
 		if (!vecs)
 			return -ENOMEM;
 	}
diff --git a/block/genhd.c b/block/genhd.c
index 69c75117ba2c..15866ccf5c33 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -264,7 +264,7 @@ int __register_blkdev(unsigned int major, const char *name,
 		goto out;
 	}

-	p = kmalloc(sizeof(struct blk_major_name), GFP_KERNEL);
+	p = kmalloc_obj(struct blk_major_name, GFP_KERNEL);
 	if (p == NULL) {
 		ret = -ENOMEM;
 		goto out;
@@ -914,7 +914,7 @@ static void *disk_seqf_start(struct seq_file *seqf, loff_t *pos)
 	struct class_dev_iter *iter;
 	struct device *dev;

-	iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kmalloc_obj(*iter, GFP_KERNEL);
 	if (!iter)
 		return ERR_PTR(-ENOMEM);

diff --git a/block/holder.c b/block/holder.c
index 791091a7eac2..1e7b88815323 100644
--- a/block/holder.c
+++ b/block/holder.c
@@ -92,7 +92,7 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk)
 		goto out_unlock;
 	}

-	holder = kzalloc(sizeof(*holder), GFP_KERNEL);
+	holder = kzalloc_obj(*holder, GFP_KERNEL);
 	if (!holder) {
 		ret = -ENOMEM;
 		goto out_unlock;
diff --git a/block/partitions/aix.c b/block/partitions/aix.c
index 85f4b967565e..97c8fa2a866f 100644
--- a/block/partitions/aix.c
+++ b/block/partitions/aix.c
@@ -199,7 +199,7 @@ int aix_partition(struct parsed_partitions *state)
 		numlvs = be16_to_cpu(p->numlvs);
 		put_dev_sector(sect);
 	}
-	lvip = kcalloc(state->limit, sizeof(struct lv_info), GFP_KERNEL);
+	lvip = kzalloc_objs(struct lv_info, state->limit, GFP_KERNEL);
 	if (!lvip)
 		return 0;
 	if (numlvs && (d = read_part_sector(state, vgda_sector + 1, &sect))) {
diff --git a/block/partitions/cmdline.c b/block/partitions/cmdline.c
index da3e719d8e51..5d604a64842e 100644
--- a/block/partitions/cmdline.c
+++ b/block/partitions/cmdline.c
@@ -46,7 +46,7 @@ static int parse_subpart(struct cmdline_subpart **subpart, char *partdef)

 	*subpart = NULL;

-	new_subpart = kzalloc(sizeof(struct cmdline_subpart), GFP_KERNEL);
+	new_subpart = kzalloc_obj(struct cmdline_subpart, GFP_KERNEL);
 	if (!new_subpart)
 		return -ENOMEM;

@@ -122,7 +122,7 @@ static int parse_parts(struct cmdline_parts **parts, char *bdevdef)

 	*parts = NULL;

-	newparts = kzalloc(sizeof(struct cmdline_parts), GFP_KERNEL);
+	newparts = kzalloc_obj(struct cmdline_parts, GFP_KERNEL);
 	if (!newparts)
 		return -ENOMEM;

diff --git a/block/partitions/core.c b/block/partitions/core.c
index 079057ab535a..189ab5650351 100644
--- a/block/partitions/core.c
+++ b/block/partitions/core.c
@@ -94,7 +94,7 @@ static struct parsed_partitions *allocate_partitions(struct gendisk *hd)
 	struct parsed_partitions *state;
 	int nr = DISK_MAX_PARTS;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/block/partitions/efi.c b/block/partitions/efi.c
index 638261e9f2fb..ff145c6306e0 100644
--- a/block/partitions/efi.c
+++ b/block/partitions/efi.c
@@ -595,7 +595,7 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt,
 	lastlba = last_lba(state->disk);
         if (!force_gpt) {
 		/* This will be added to the EFI Spec. per Intel after v1.02. */
-		legacymbr = kzalloc(sizeof(*legacymbr), GFP_KERNEL);
+		legacymbr = kzalloc_obj(*legacymbr, GFP_KERNEL);
 		if (!legacymbr)
 			goto fail;

diff --git a/block/partitions/ibm.c b/block/partitions/ibm.c
index 631291fbb356..b81b7a690787 100644
--- a/block/partitions/ibm.c
+++ b/block/partitions/ibm.c
@@ -347,13 +347,13 @@ int ibm_partition(struct parsed_partitions *state)
 	nr_sectors = bdev_nr_sectors(bdev);
 	if (nr_sectors == 0)
 		goto out_symbol;
-	info = kmalloc(sizeof(dasd_information2_t), GFP_KERNEL);
+	info = kmalloc_obj(dasd_information2_t, GFP_KERNEL);
 	if (info == NULL)
 		goto out_symbol;
-	geo = kmalloc(sizeof(struct hd_geometry), GFP_KERNEL);
+	geo = kmalloc_obj(struct hd_geometry, GFP_KERNEL);
 	if (geo == NULL)
 		goto out_nogeo;
-	label = kmalloc(sizeof(union label_t), GFP_KERNEL);
+	label = kmalloc_obj(union label_t, GFP_KERNEL);
 	if (label == NULL)
 		goto out_nolab;
 	/* set start if not filled by getgeo function e.g. virtblk */
diff --git a/block/partitions/ldm.c b/block/partitions/ldm.c
index 2bd42fedb907..27ffddd74e11 100644
--- a/block/partitions/ldm.c
+++ b/block/partitions/ldm.c
@@ -273,8 +273,8 @@ static bool ldm_validate_privheads(struct parsed_partitions *state,

 	BUG_ON (!state || !ph1);

-	ph[1] = kmalloc (sizeof (*ph[1]), GFP_KERNEL);
-	ph[2] = kmalloc (sizeof (*ph[2]), GFP_KERNEL);
+	ph[1] = kmalloc_obj(*ph[1], GFP_KERNEL);
+	ph[2] = kmalloc_obj(*ph[2], GFP_KERNEL);
 	if (!ph[1] || !ph[2]) {
 		ldm_crit ("Out of memory.");
 		goto out;
@@ -362,7 +362,7 @@ static bool ldm_validate_tocblocks(struct parsed_partitions *state,
 	BUG_ON(!state || !ldb);
 	ph = &ldb->ph;
 	tb[0] = &ldb->toc;
-	tb[1] = kmalloc_array(3, sizeof(*tb[1]), GFP_KERNEL);
+	tb[1] = kmalloc_objs(*tb[1], 3, GFP_KERNEL);
 	if (!tb[1]) {
 		ldm_crit("Out of memory.");
 		goto err;
@@ -1158,7 +1158,7 @@ static bool ldm_ldmdb_add (u8 *data, int len, struct ldmdb *ldb)

 	BUG_ON (!data || !ldb);

-	vb = kmalloc (sizeof (*vb), GFP_KERNEL);
+	vb = kmalloc_obj(*vb, GFP_KERNEL);
 	if (!vb) {
 		ldm_crit ("Out of memory.");
 		return false;
@@ -1438,7 +1438,7 @@ int ldm_partition(struct parsed_partitions *state)
 	if (!ldm_validate_partition_table(state))
 		return 0;

-	ldb = kmalloc (sizeof (*ldb), GFP_KERNEL);
+	ldb = kmalloc_obj(*ldb, GFP_KERNEL);
 	if (!ldb) {
 		ldm_crit ("Out of memory.");
 		goto out;
diff --git a/block/sed-opal.c b/block/sed-opal.c
index 23a19c92d791..fbe0fe4dce8a 100644
--- a/block/sed-opal.c
+++ b/block/sed-opal.c
@@ -2512,7 +2512,7 @@ struct opal_dev *init_opal_dev(void *data, sec_send_recv *send_recv)
 {
 	struct opal_dev *dev;

-	dev = kmalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kmalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

@@ -2719,7 +2719,7 @@ static int opal_save(struct opal_dev *dev, struct opal_lock_unlock *lk_unlk)
 {
 	struct opal_suspend_data *suspend;

-	suspend = kzalloc(sizeof(*suspend), GFP_KERNEL);
+	suspend = kzalloc_obj(*suspend, GFP_KERNEL);
 	if (!suspend)
 		return -ENOMEM;

diff --git a/certs/blacklist.c b/certs/blacklist.c
index 11fc858b2921..725c2f18fa31 100644
--- a/certs/blacklist.c
+++ b/certs/blacklist.c
@@ -328,7 +328,7 @@ static int __init blacklist_init(void)
 	if (register_key_type(&key_type_blacklist) < 0)
 		panic("Can't allocate system blacklist key type\n");

-	restriction = kzalloc(sizeof(*restriction), GFP_KERNEL);
+	restriction = kzalloc_obj(*restriction, GFP_KERNEL);
 	if (!restriction)
 		panic("Can't allocate blacklist keyring restriction\n");
 	restriction->check = restrict_link_for_blacklist;
diff --git a/certs/system_keyring.c b/certs/system_keyring.c
index 9de610bf1f4b..afe67e2a47ed 100644
--- a/certs/system_keyring.c
+++ b/certs/system_keyring.c
@@ -140,7 +140,7 @@ static __init struct key_restriction *get_builtin_and_secondary_restriction(void
 {
 	struct key_restriction *restriction;

-	restriction = kzalloc(sizeof(struct key_restriction), GFP_KERNEL);
+	restriction = kzalloc_obj(struct key_restriction, GFP_KERNEL);

 	if (!restriction)
 		panic("Can't allocate secondary trusted keyring restriction\n");
diff --git a/crypto/af_alg.c b/crypto/af_alg.c
index e468714f539d..d6f14649bd13 100644
--- a/crypto/af_alg.c
+++ b/crypto/af_alg.c
@@ -70,7 +70,7 @@ int af_alg_register_type(const struct af_alg_type *type)
 			goto unlock;
 	}

-	node = kmalloc(sizeof(*node), GFP_KERNEL);
+	node = kmalloc_obj(*node, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!node)
 		goto unlock;
diff --git a/crypto/algboss.c b/crypto/algboss.c
index 846f586889ee..09ceeb0db431 100644
--- a/crypto/algboss.c
+++ b/crypto/algboss.c
@@ -84,7 +84,7 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
 	if (!try_module_get(THIS_MODULE))
 		goto err;

-	param = kzalloc(sizeof(*param), GFP_KERNEL);
+	param = kzalloc_obj(*param, GFP_KERNEL);
 	if (!param)
 		goto err_put_module;

@@ -195,7 +195,7 @@ static int cryptomgr_schedule_test(struct crypto_alg *alg)
 	if (!try_module_get(THIS_MODULE))
 		goto err;

-	param = kzalloc(sizeof(*param), GFP_KERNEL);
+	param = kzalloc_obj(*param, GFP_KERNEL);
 	if (!param)
 		goto err_put_module;

diff --git a/crypto/algif_rng.c b/crypto/algif_rng.c
index 1a86e40c8372..8578b9d1c569 100644
--- a/crypto/algif_rng.c
+++ b/crypto/algif_rng.c
@@ -202,7 +202,7 @@ static void *rng_bind(const char *name, u32 type, u32 mask)
 	struct rng_parent_ctx *pctx;
 	struct crypto_rng *rng;

-	pctx = kzalloc(sizeof(*pctx), GFP_KERNEL);
+	pctx = kzalloc_obj(*pctx, GFP_KERNEL);
 	if (!pctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/crypto/api.c b/crypto/api.c
index 05629644a688..b0b69ca789f3 100644
--- a/crypto/api.c
+++ b/crypto/api.c
@@ -105,7 +105,7 @@ struct crypto_larval *crypto_larval_alloc(const char *name, u32 type, u32 mask)
 {
 	struct crypto_larval *larval;

-	larval = kzalloc(sizeof(*larval), GFP_KERNEL);
+	larval = kzalloc_obj(*larval, GFP_KERNEL);
 	if (!larval)
 		return ERR_PTR(-ENOMEM);

diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c
index 1f1d92547dfc..33c9e68ab28d 100644
--- a/crypto/asymmetric_keys/asymmetric_type.c
+++ b/crypto/asymmetric_keys/asymmetric_type.c
@@ -486,7 +486,7 @@ static struct key_restriction *asymmetric_restriction_alloc(
 	struct key *key)
 {
 	struct key_restriction *keyres =
-		kzalloc(sizeof(struct key_restriction), GFP_KERNEL);
+		kzalloc_obj(struct key_restriction, GFP_KERNEL);

 	if (!keyres)
 		return ERR_PTR(-ENOMEM);
diff --git a/crypto/asymmetric_keys/pkcs7_parser.c b/crypto/asymmetric_keys/pkcs7_parser.c
index db1c90ca6fc1..ab400d62c587 100644
--- a/crypto/asymmetric_keys/pkcs7_parser.c
+++ b/crypto/asymmetric_keys/pkcs7_parser.c
@@ -133,17 +133,16 @@ struct pkcs7_message *pkcs7_parse_message(const void *data, size_t datalen)
 	struct pkcs7_message *msg = ERR_PTR(-ENOMEM);
 	int ret;

-	ctx = kzalloc(sizeof(struct pkcs7_parse_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct pkcs7_parse_context, GFP_KERNEL);
 	if (!ctx)
 		goto out_no_ctx;
-	ctx->msg = kzalloc(sizeof(struct pkcs7_message), GFP_KERNEL);
+	ctx->msg = kzalloc_obj(struct pkcs7_message, GFP_KERNEL);
 	if (!ctx->msg)
 		goto out_no_msg;
-	ctx->sinfo = kzalloc(sizeof(struct pkcs7_signed_info), GFP_KERNEL);
+	ctx->sinfo = kzalloc_obj(struct pkcs7_signed_info, GFP_KERNEL);
 	if (!ctx->sinfo)
 		goto out_no_sinfo;
-	ctx->sinfo->sig = kzalloc(sizeof(struct public_key_signature),
-				  GFP_KERNEL);
+	ctx->sinfo->sig = kzalloc_obj(struct public_key_signature, GFP_KERNEL);
 	if (!ctx->sinfo->sig)
 		goto out_no_sig;

@@ -729,11 +728,10 @@ int pkcs7_note_signed_info(void *context, size_t hdrlen,
 	sinfo->index = ++ctx->sinfo_index;
 	*ctx->ppsinfo = sinfo;
 	ctx->ppsinfo = &sinfo->next;
-	ctx->sinfo = kzalloc(sizeof(struct pkcs7_signed_info), GFP_KERNEL);
+	ctx->sinfo = kzalloc_obj(struct pkcs7_signed_info, GFP_KERNEL);
 	if (!ctx->sinfo)
 		return -ENOMEM;
-	ctx->sinfo->sig = kzalloc(sizeof(struct public_key_signature),
-				  GFP_KERNEL);
+	ctx->sinfo->sig = kzalloc_obj(struct public_key_signature, GFP_KERNEL);
 	if (!ctx->sinfo->sig)
 		return -ENOMEM;
 	return 0;
diff --git a/crypto/asymmetric_keys/pkcs8_parser.c b/crypto/asymmetric_keys/pkcs8_parser.c
index 105dcce27f71..c7f04dbadbd1 100644
--- a/crypto/asymmetric_keys/pkcs8_parser.c
+++ b/crypto/asymmetric_keys/pkcs8_parser.c
@@ -103,7 +103,7 @@ static struct public_key *pkcs8_parse(const void *data, size_t datalen)
 	memset(&ctx, 0, sizeof(ctx));

 	ret = -ENOMEM;
-	ctx.pub = kzalloc(sizeof(struct public_key), GFP_KERNEL);
+	ctx.pub = kzalloc_obj(struct public_key, GFP_KERNEL);
 	if (!ctx.pub)
 		goto error;

diff --git a/crypto/asymmetric_keys/x509_cert_parser.c b/crypto/asymmetric_keys/x509_cert_parser.c
index 2fe094f5caf3..ba446683358a 100644
--- a/crypto/asymmetric_keys/x509_cert_parser.c
+++ b/crypto/asymmetric_keys/x509_cert_parser.c
@@ -65,16 +65,16 @@ struct x509_certificate *x509_cert_parse(const void *data, size_t datalen)
 	struct asymmetric_key_id *kid;
 	long ret;

-	cert = kzalloc(sizeof(struct x509_certificate), GFP_KERNEL);
+	cert = kzalloc_obj(struct x509_certificate, GFP_KERNEL);
 	if (!cert)
 		return ERR_PTR(-ENOMEM);
-	cert->pub = kzalloc(sizeof(struct public_key), GFP_KERNEL);
+	cert->pub = kzalloc_obj(struct public_key, GFP_KERNEL);
 	if (!cert->pub)
 		return ERR_PTR(-ENOMEM);
-	cert->sig = kzalloc(sizeof(struct public_key_signature), GFP_KERNEL);
+	cert->sig = kzalloc_obj(struct public_key_signature, GFP_KERNEL);
 	if (!cert->sig)
 		return ERR_PTR(-ENOMEM);
-	ctx = kzalloc(sizeof(struct x509_parse_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct x509_parse_context, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/crypto/asymmetric_keys/x509_public_key.c b/crypto/asymmetric_keys/x509_public_key.c
index b695e59fd9e4..9a936e255397 100644
--- a/crypto/asymmetric_keys/x509_public_key.c
+++ b/crypto/asymmetric_keys/x509_public_key.c
@@ -210,7 +210,7 @@ static int x509_key_preparse(struct key_preparsed_payload *prep)
 	p = bin2hex(p, q, srlen);
 	*p = 0;

-	kids = kmalloc(sizeof(struct asymmetric_key_ids), GFP_KERNEL);
+	kids = kmalloc_obj(struct asymmetric_key_ids, GFP_KERNEL);
 	if (!kids)
 		return -ENOMEM;
 	kids->id[0] = cert->id;
diff --git a/crypto/deflate.c b/crypto/deflate.c
index a3e1fff55661..644daf558ad0 100644
--- a/crypto/deflate.c
+++ b/crypto/deflate.c
@@ -40,7 +40,7 @@ static void *deflate_alloc_stream(void)
 						     DEFLATE_DEF_MEMLEVEL));
 	struct deflate_stream *ctx;

-	ctx = kvmalloc(struct_size(ctx, workspace, size), GFP_KERNEL);
+	ctx = kvmalloc_flex(*ctx, workspace, size, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/crypto/drbg.c b/crypto/drbg.c
index 5e7ed5f5c192..8a915da08fa9 100644
--- a/crypto/drbg.c
+++ b/crypto/drbg.c
@@ -1522,7 +1522,7 @@ static int drbg_init_sym_kernel(struct drbg_state *drbg)
 	unsigned int alignmask;
 	char ctr_name[CRYPTO_MAX_ALG_NAME];

-	aeskey = kzalloc(sizeof(*aeskey), GFP_KERNEL);
+	aeskey = kzalloc_obj(*aeskey, GFP_KERNEL);
 	if (!aeskey)
 		return -ENOMEM;
 	drbg->priv_data = aeskey;
@@ -1761,7 +1761,7 @@ static inline int __init drbg_healthcheck_sanity(void)
 	drbg_convert_tfm_core("drbg_nopr_hmac_sha512", &coreref, &pr);
 #endif

-	drbg = kzalloc(sizeof(struct drbg_state), GFP_KERNEL);
+	drbg = kzalloc_obj(struct drbg_state, GFP_KERNEL);
 	if (!drbg)
 		return -ENOMEM;

diff --git a/crypto/ecc.c b/crypto/ecc.c
index 2808b3d5f483..3d07383a26f4 100644
--- a/crypto/ecc.c
+++ b/crypto/ecc.c
@@ -98,7 +98,7 @@ struct ecc_point *ecc_alloc_point(unsigned int ndigits)
 	if (!ndigits)
 		return NULL;

-	p = kmalloc(sizeof(*p), GFP_KERNEL);
+	p = kmalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return NULL;

diff --git a/crypto/gcm.c b/crypto/gcm.c
index 97716482bed0..154138dbf19a 100644
--- a/crypto/gcm.c
+++ b/crypto/gcm.c
@@ -1098,7 +1098,7 @@ static int __init crypto_gcm_module_init(void)
 {
 	int err;

-	gcm_zeroes = kzalloc(sizeof(*gcm_zeroes), GFP_KERNEL);
+	gcm_zeroes = kzalloc_obj(*gcm_zeroes, GFP_KERNEL);
 	if (!gcm_zeroes)
 		return -ENOMEM;

diff --git a/crypto/simd.c b/crypto/simd.c
index 2a7549e280ca..e343bda70fc8 100644
--- a/crypto/simd.c
+++ b/crypto/simd.c
@@ -145,7 +145,7 @@ struct simd_skcipher_alg *simd_skcipher_create_compat(struct skcipher_alg *ialg,
 	struct skcipher_alg *alg;
 	int err;

-	salg = kzalloc(sizeof(*salg), GFP_KERNEL);
+	salg = kzalloc_obj(*salg, GFP_KERNEL);
 	if (!salg) {
 		salg = ERR_PTR(-ENOMEM);
 		goto out;
@@ -370,7 +370,7 @@ static struct simd_aead_alg *simd_aead_create_compat(struct aead_alg *ialg,
 	struct aead_alg *alg;
 	int err;

-	salg = kzalloc(sizeof(*salg), GFP_KERNEL);
+	salg = kzalloc_obj(*salg, GFP_KERNEL);
 	if (!salg) {
 		salg = ERR_PTR(-ENOMEM);
 		goto out;
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
index 62fef100e599..4217d3d1ca41 100644
--- a/crypto/tcrypt.c
+++ b/crypto/tcrypt.c
@@ -180,7 +180,7 @@ static int test_mb_aead_jiffies(struct test_mb_aead_data *data, int enc,
 	int ret = 0;
 	int *rc;

-	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
+	rc = kzalloc_objs(*rc, num_mb, GFP_KERNEL);
 	if (!rc)
 		return -ENOMEM;

@@ -207,7 +207,7 @@ static int test_mb_aead_cycles(struct test_mb_aead_data *data, int enc,
 	int i;
 	int *rc;

-	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
+	rc = kzalloc_objs(*rc, num_mb, GFP_KERNEL);
 	if (!rc)
 		return -ENOMEM;

@@ -270,7 +270,7 @@ static void test_mb_aead_speed(const char *algo, int enc, int secs,
 	else
 		e = "decryption";

-	data = kcalloc(num_mb, sizeof(*data), GFP_KERNEL);
+	data = kzalloc_objs(*data, num_mb, GFP_KERNEL);
 	if (!data)
 		goto out_free_iv;

@@ -997,7 +997,7 @@ static int test_mb_acipher_jiffies(struct test_mb_skcipher_data *data, int enc,
 	int ret = 0;
 	int *rc;

-	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
+	rc = kzalloc_objs(*rc, num_mb, GFP_KERNEL);
 	if (!rc)
 		return -ENOMEM;

@@ -1024,7 +1024,7 @@ static int test_mb_acipher_cycles(struct test_mb_skcipher_data *data, int enc,
 	int i;
 	int *rc;

-	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
+	rc = kzalloc_objs(*rc, num_mb, GFP_KERNEL);
 	if (!rc)
 		return -ENOMEM;

@@ -1075,7 +1075,7 @@ static void test_mb_skcipher_speed(const char *algo, int enc, int secs,
 	else
 		e = "decryption";

-	data = kcalloc(num_mb, sizeof(*data), GFP_KERNEL);
+	data = kzalloc_objs(*data, num_mb, GFP_KERNEL);
 	if (!data)
 		return;

diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index b940721447fa..c13aa351898d 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -739,7 +739,7 @@ static struct cipher_test_sglists *alloc_cipher_test_sglists(void)
 {
 	struct cipher_test_sglists *tsgls;

-	tsgls = kmalloc(sizeof(*tsgls), GFP_KERNEL);
+	tsgls = kmalloc_obj(*tsgls, GFP_KERNEL);
 	if (!tsgls)
 		return NULL;

@@ -1796,7 +1796,7 @@ static int test_hash_vs_generic_impl(const char *generic_driver,
 		return err;
 	}

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg) {
 		err = -ENOMEM;
 		goto out;
@@ -1941,7 +1941,7 @@ static int __alg_test_hash(const struct hash_testvec *vecs,
 	if (err)
 		goto out;

-	tsgl = kmalloc(sizeof(*tsgl), GFP_KERNEL);
+	tsgl = kmalloc_obj(*tsgl, GFP_KERNEL);
 	if (!tsgl || init_test_sglist(tsgl) != 0) {
 		pr_err("alg: hash: failed to allocate test buffers for %s\n",
 		       driver);
@@ -2598,7 +2598,7 @@ static int test_aead_slow(const struct alg_test_desc *test_desc,
 	if (noslowtests)
 		return 0;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	init_rnd_state(&ctx->rng);
@@ -3106,7 +3106,7 @@ static int test_skcipher_vs_generic_impl(const char *generic_driver,
 		return err;
 	}

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg) {
 		err = -ENOMEM;
 		goto out;
diff --git a/crypto/zstd.c b/crypto/zstd.c
index cbbd0413751a..f0c5c4ee7d29 100644
--- a/crypto/zstd.c
+++ b/crypto/zstd.c
@@ -44,7 +44,7 @@ static void *zstd_alloc_stream(void)
 	if (!wksp_size)
 		return ERR_PTR(-EINVAL);

-	ctx = kvmalloc(struct_size(ctx, wksp, wksp_size), GFP_KERNEL);
+	ctx = kvmalloc_flex(*ctx, wksp, wksp_size, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/accel/amdxdna/aie2_ctx.c b/drivers/accel/amdxdna/aie2_ctx.c
index 37d05f2e986f..d4869f2fef02 100644
--- a/drivers/accel/amdxdna/aie2_ctx.c
+++ b/drivers/accel/amdxdna/aie2_ctx.c
@@ -464,7 +464,7 @@ static int aie2_alloc_resource(struct amdxdna_hwctx *hwctx)
 		return aie2_create_context(xdna->dev_handle, hwctx);
 	}

-	xrs_req = kzalloc(sizeof(*xrs_req), GFP_KERNEL);
+	xrs_req = kzalloc_obj(*xrs_req, GFP_KERNEL);
 	if (!xrs_req)
 		return -ENOMEM;

@@ -559,7 +559,7 @@ int aie2_hwctx_init(struct amdxdna_hwctx *hwctx)
 	struct amdxdna_gem_obj *heap;
 	int i, ret;

-	priv = kzalloc(sizeof(*hwctx->priv), GFP_KERNEL);
+	priv = kzalloc_obj(*hwctx->priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
 	hwctx->priv = priv;
diff --git a/drivers/accel/amdxdna/aie2_error.c b/drivers/accel/amdxdna/aie2_error.c
index 5e82df2b7cf6..a311231834f0 100644
--- a/drivers/accel/amdxdna/aie2_error.c
+++ b/drivers/accel/amdxdna/aie2_error.c
@@ -350,7 +350,7 @@ int aie2_error_async_events_alloc(struct amdxdna_dev_hdl *ndev)
 	struct async_events *events;
 	int i, ret;

-	events = kzalloc(struct_size(events, event, total_col), GFP_KERNEL);
+	events = kzalloc_flex(*events, event, total_col, GFP_KERNEL);
 	if (!events)
 		return -ENOMEM;

diff --git a/drivers/accel/amdxdna/aie2_pci.c b/drivers/accel/amdxdna/aie2_pci.c
index f70ccf0f3c01..47346684bb75 100644
--- a/drivers/accel/amdxdna/aie2_pci.c
+++ b/drivers/accel/amdxdna/aie2_pci.c
@@ -653,7 +653,7 @@ static int aie2_get_aie_metadata(struct amdxdna_client *client,
 	int ret = 0;

 	ndev = xdna->dev_handle;
-	meta = kzalloc(sizeof(*meta), GFP_KERNEL);
+	meta = kzalloc_obj(*meta, GFP_KERNEL);
 	if (!meta)
 		return -ENOMEM;

@@ -748,7 +748,7 @@ static int aie2_get_clock_metadata(struct amdxdna_client *client,
 	int ret = 0;

 	ndev = xdna->dev_handle;
-	clock = kzalloc(sizeof(*clock), GFP_KERNEL);
+	clock = kzalloc_obj(*clock, GFP_KERNEL);
 	if (!clock)
 		return -ENOMEM;

@@ -775,7 +775,7 @@ static int aie2_hwctx_status_cb(struct amdxdna_hwctx *hwctx, void *arg)
 	if (!array_args->num_element)
 		return -EINVAL;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

diff --git a/drivers/accel/amdxdna/aie2_solver.c b/drivers/accel/amdxdna/aie2_solver.c
index 2013d1f13aae..6154ef9f9e9d 100644
--- a/drivers/accel/amdxdna/aie2_solver.c
+++ b/drivers/accel/amdxdna/aie2_solver.c
@@ -197,7 +197,7 @@ static int get_free_partition(struct solver_state *xrs,
 	if (i == snode->cols_len)
 		return -ENODEV;

-	pt_node = kzalloc(sizeof(*pt_node), GFP_KERNEL);
+	pt_node = kzalloc_obj(*pt_node, GFP_KERNEL);
 	if (!pt_node)
 		return -ENOMEM;

@@ -266,7 +266,7 @@ static struct solver_node *create_solver_node(struct solver_state *xrs,
 	struct solver_node *node;
 	int ret;

-	node = kzalloc(struct_size(node, start_cols, cdop->cols_len), GFP_KERNEL);
+	node = kzalloc_flex(*node, start_cols, cdop->cols_len, GFP_KERNEL);
 	if (!node)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/accel/amdxdna/amdxdna_ctx.c b/drivers/accel/amdxdna/amdxdna_ctx.c
index d17aef89a0ad..edbac9f4054c 100644
--- a/drivers/accel/amdxdna/amdxdna_ctx.c
+++ b/drivers/accel/amdxdna/amdxdna_ctx.c
@@ -50,7 +50,7 @@ static struct dma_fence *amdxdna_fence_create(struct amdxdna_hwctx *hwctx)
 {
 	struct amdxdna_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return NULL;

@@ -161,7 +161,7 @@ int amdxdna_drm_create_hwctx_ioctl(struct drm_device *dev, void *data, struct dr
 	if (args->ext || args->ext_flags)
 		return -EINVAL;

-	hwctx = kzalloc(sizeof(*hwctx), GFP_KERNEL);
+	hwctx = kzalloc_obj(*hwctx, GFP_KERNEL);
 	if (!hwctx)
 		return -ENOMEM;

@@ -436,7 +436,7 @@ int amdxdna_cmd_submit(struct amdxdna_client *client,
 	int ret, idx;

 	XDNA_DBG(xdna, "Command BO hdl %d, Arg BO count %d", cmd_bo_hdl, arg_bo_cnt);
-	job = kzalloc(struct_size(job, bos, arg_bo_cnt), GFP_KERNEL);
+	job = kzalloc_flex(*job, bos, arg_bo_cnt, GFP_KERNEL);
 	if (!job)
 		return -ENOMEM;

diff --git a/drivers/accel/amdxdna/amdxdna_gem.c b/drivers/accel/amdxdna/amdxdna_gem.c
index dfa916eeb2d9..d862d5fe5385 100644
--- a/drivers/accel/amdxdna/amdxdna_gem.c
+++ b/drivers/accel/amdxdna/amdxdna_gem.c
@@ -205,13 +205,13 @@ static int amdxdna_hmm_register(struct amdxdna_gem_obj *abo,
 	if (!xdna->dev_info->ops->hmm_invalidate)
 		return 0;

-	mapp = kzalloc(sizeof(*mapp), GFP_KERNEL);
+	mapp = kzalloc_obj(*mapp, GFP_KERNEL);
 	if (!mapp)
 		return -ENOMEM;

 	nr_pages = (PAGE_ALIGN(addr + len) - (addr & PAGE_MASK)) >> PAGE_SHIFT;
-	mapp->range.hmm_pfns = kvcalloc(nr_pages, sizeof(*mapp->range.hmm_pfns),
-					GFP_KERNEL);
+	mapp->range.hmm_pfns = kvzalloc_objs(*mapp->range.hmm_pfns, nr_pages,
+					     GFP_KERNEL);
 	if (!mapp->range.hmm_pfns) {
 		ret = -ENOMEM;
 		goto free_map;
@@ -499,7 +499,7 @@ amdxdna_gem_create_obj(struct drm_device *dev, size_t size)
 {
 	struct amdxdna_gem_obj *abo;

-	abo = kzalloc(sizeof(*abo), GFP_KERNEL);
+	abo = kzalloc_obj(*abo, GFP_KERNEL);
 	if (!abo)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/accel/amdxdna/amdxdna_mailbox.c b/drivers/accel/amdxdna/amdxdna_mailbox.c
index 469242ed8224..04d1d30184ca 100644
--- a/drivers/accel/amdxdna/amdxdna_mailbox.c
+++ b/drivers/accel/amdxdna/amdxdna_mailbox.c
@@ -475,7 +475,7 @@ xdna_mailbox_create_channel(struct mailbox *mb,
 		return NULL;
 	}

-	mb_chann = kzalloc(sizeof(*mb_chann), GFP_KERNEL);
+	mb_chann = kzalloc_obj(*mb_chann, GFP_KERNEL);
 	if (!mb_chann)
 		return NULL;

diff --git a/drivers/accel/amdxdna/amdxdna_pci_drv.c b/drivers/accel/amdxdna/amdxdna_pci_drv.c
index fdefd9ec2066..86f46f59b9dc 100644
--- a/drivers/accel/amdxdna/amdxdna_pci_drv.c
+++ b/drivers/accel/amdxdna/amdxdna_pci_drv.c
@@ -63,7 +63,7 @@ static int amdxdna_drm_open(struct drm_device *ddev, struct drm_file *filp)
 	struct amdxdna_client *client;
 	int ret;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

diff --git a/drivers/accel/amdxdna/amdxdna_ubuf.c b/drivers/accel/amdxdna/amdxdna_ubuf.c
index 9e3b3b055caa..44db2cef40cb 100644
--- a/drivers/accel/amdxdna/amdxdna_ubuf.c
+++ b/drivers/accel/amdxdna/amdxdna_ubuf.c
@@ -27,7 +27,7 @@ static struct sg_table *amdxdna_ubuf_map(struct dma_buf_attachment *attach,
 	struct sg_table *sg;
 	int ret;

-	sg = kzalloc(sizeof(*sg), GFP_KERNEL);
+	sg = kzalloc_obj(*sg, GFP_KERNEL);
 	if (!sg)
 		return ERR_PTR(-ENOMEM);

@@ -147,7 +147,7 @@ struct dma_buf *amdxdna_get_ubuf(struct drm_device *dev,
 	if (!can_do_mlock())
 		return ERR_PTR(-EPERM);

-	ubuf = kzalloc(sizeof(*ubuf), GFP_KERNEL);
+	ubuf = kzalloc_obj(*ubuf, GFP_KERNEL);
 	if (!ubuf)
 		return ERR_PTR(-ENOMEM);

@@ -155,7 +155,7 @@ struct dma_buf *amdxdna_get_ubuf(struct drm_device *dev,
 	ubuf->mm = current->mm;
 	mmgrab(ubuf->mm);

-	va_ent = kvcalloc(num_entries, sizeof(*va_ent), GFP_KERNEL);
+	va_ent = kvzalloc_objs(*va_ent, num_entries, GFP_KERNEL);
 	if (!va_ent) {
 		ret = -ENOMEM;
 		goto free_ubuf;
@@ -189,7 +189,7 @@ struct dma_buf *amdxdna_get_ubuf(struct drm_device *dev,
 		goto sub_pin_cnt;
 	}

-	ubuf->pages = kvmalloc_array(ubuf->nr_pages, sizeof(*ubuf->pages), GFP_KERNEL);
+	ubuf->pages = kvmalloc_objs(*ubuf->pages, ubuf->nr_pages, GFP_KERNEL);
 	if (!ubuf->pages) {
 		ret = -ENOMEM;
 		goto sub_pin_cnt;
diff --git a/drivers/accel/ethosu/ethosu_drv.c b/drivers/accel/ethosu/ethosu_drv.c
index e05a69bf5574..ae5e6b15e7de 100644
--- a/drivers/accel/ethosu/ethosu_drv.c
+++ b/drivers/accel/ethosu/ethosu_drv.c
@@ -144,7 +144,8 @@ static int ethosu_open(struct drm_device *ddev, struct drm_file *file)
 	if (!try_module_get(THIS_MODULE))
 		return -EINVAL;

-	struct ethosu_file_priv __free(kfree) *priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	struct ethosu_file_priv __free(kfree) *priv = kzalloc_obj(*priv,
+								  GFP_KERNEL);
 	if (!priv) {
 		ret = -ENOMEM;
 		goto err_put_mod;
diff --git a/drivers/accel/ethosu/ethosu_gem.c b/drivers/accel/ethosu/ethosu_gem.c
index 473b5f5d7514..7a5405db5a6c 100644
--- a/drivers/accel/ethosu/ethosu_gem.c
+++ b/drivers/accel/ethosu/ethosu_gem.c
@@ -50,7 +50,7 @@ struct drm_gem_object *ethosu_gem_create_object(struct drm_device *ddev, size_t
 {
 	struct ethosu_gem_object *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return ERR_PTR(-ENOMEM);

@@ -352,7 +352,8 @@ static int ethosu_gem_cmdstream_copy_and_validate(struct drm_device *ddev,
 						  struct ethosu_gem_object *bo,
 						  u32 size)
 {
-	struct ethosu_validated_cmdstream_info __free(kfree) *info = kzalloc(sizeof(*info), GFP_KERNEL);
+	struct ethosu_validated_cmdstream_info __free(kfree) *info = kzalloc_obj(*info,
+										 GFP_KERNEL);
 	struct ethosu_device *edev = to_ethosu_device(ddev);
 	u32 *bocmds = bo->base.vaddr;
 	struct cmd_state st;
diff --git a/drivers/accel/ethosu/ethosu_job.c b/drivers/accel/ethosu/ethosu_job.c
index 26e7a2f64d71..91d1b996852e 100644
--- a/drivers/accel/ethosu/ethosu_job.c
+++ b/drivers/accel/ethosu/ethosu_job.c
@@ -375,7 +375,7 @@ static int ethosu_ioctl_submit_job(struct drm_device *dev, struct drm_file *file
 	if (edev->npu_info.sram_size < job->sram_size)
 		return -EINVAL;

-	ejob = kzalloc(sizeof(*ejob), GFP_KERNEL);
+	ejob = kzalloc_obj(*ejob, GFP_KERNEL);
 	if (!ejob)
 		return -ENOMEM;

@@ -384,7 +384,7 @@ static int ethosu_ioctl_submit_job(struct drm_device *dev, struct drm_file *file
 	ejob->dev = edev;
 	ejob->sram_size = job->sram_size;

-	ejob->done_fence = kzalloc(sizeof(*ejob->done_fence), GFP_KERNEL);
+	ejob->done_fence = kzalloc_obj(*ejob->done_fence, GFP_KERNEL);
 	if (!ejob->done_fence) {
 		ret = -ENOMEM;
 		goto out_cleanup_job;
@@ -476,7 +476,7 @@ int ethosu_ioctl_submit(struct drm_device *dev, void *data, struct drm_file *fil
 	}

 	struct drm_ethosu_job __free(kvfree) *jobs =
-		kvmalloc_array(args->job_count, sizeof(*jobs), GFP_KERNEL);
+		kvmalloc_objs(*jobs, args->job_count, GFP_KERNEL);
 	if (!jobs)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/common/command_buffer.c b/drivers/accel/habanalabs/common/command_buffer.c
index 0f0d295116e7..b27323afd12d 100644
--- a/drivers/accel/habanalabs/common/command_buffer.c
+++ b/drivers/accel/habanalabs/common/command_buffer.c
@@ -116,10 +116,10 @@ static struct hl_cb *hl_cb_alloc(struct hl_device *hdev, u32 cb_size,
 	 * and must use GFP_ATOMIC for all memory allocations.
 	 */
 	if (ctx_id == HL_KERNEL_ASID_ID && !hdev->disabled)
-		cb = kzalloc(sizeof(*cb), GFP_ATOMIC);
+		cb = kzalloc_obj(*cb, GFP_ATOMIC);

 	if (!cb)
-		cb = kzalloc(sizeof(*cb), GFP_KERNEL);
+		cb = kzalloc_obj(*cb, GFP_KERNEL);

 	if (!cb)
 		return NULL;
diff --git a/drivers/accel/habanalabs/common/command_submission.c b/drivers/accel/habanalabs/common/command_submission.c
index dee487724918..f990d16f6c2f 100644
--- a/drivers/accel/habanalabs/common/command_submission.c
+++ b/drivers/accel/habanalabs/common/command_submission.c
@@ -907,9 +907,9 @@ static int allocate_cs(struct hl_device *hdev, struct hl_ctx *ctx,

 	cntr = &hdev->aggregated_cs_counters;

-	cs = kzalloc(sizeof(*cs), GFP_ATOMIC);
+	cs = kzalloc_obj(*cs, GFP_ATOMIC);
 	if (!cs)
-		cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+		cs = kzalloc_obj(*cs, GFP_KERNEL);

 	if (!cs) {
 		atomic64_inc(&ctx->cs_counters.out_of_mem_drop_cnt);
@@ -936,9 +936,9 @@ static int allocate_cs(struct hl_device *hdev, struct hl_ctx *ctx,
 	kref_init(&cs->refcount);
 	spin_lock_init(&cs->job_lock);

-	cs_cmpl = kzalloc(sizeof(*cs_cmpl), GFP_ATOMIC);
+	cs_cmpl = kzalloc_obj(*cs_cmpl, GFP_ATOMIC);
 	if (!cs_cmpl)
-		cs_cmpl = kzalloc(sizeof(*cs_cmpl), GFP_KERNEL);
+		cs_cmpl = kzalloc_obj(*cs_cmpl, GFP_KERNEL);

 	if (!cs_cmpl) {
 		atomic64_inc(&ctx->cs_counters.out_of_mem_drop_cnt);
@@ -1302,9 +1302,9 @@ struct hl_cs_job *hl_cs_allocate_job(struct hl_device *hdev,
 {
 	struct hl_cs_job *job;

-	job = kzalloc(sizeof(*job), GFP_ATOMIC);
+	job = kzalloc_obj(*job, GFP_ATOMIC);
 	if (!job)
-		job = kzalloc(sizeof(*job), GFP_KERNEL);
+		job = kzalloc_obj(*job, GFP_KERNEL);

 	if (!job)
 		return NULL;
@@ -1420,11 +1420,10 @@ static int hl_cs_copy_chunk_array(struct hl_device *hdev,
 		return -EINVAL;
 	}

-	*cs_chunk_array = kmalloc_array(num_chunks, sizeof(**cs_chunk_array),
-					GFP_ATOMIC);
+	*cs_chunk_array = kmalloc_objs(**cs_chunk_array, num_chunks, GFP_ATOMIC);
 	if (!*cs_chunk_array)
-		*cs_chunk_array = kmalloc_array(num_chunks,
-					sizeof(**cs_chunk_array), GFP_KERNEL);
+		*cs_chunk_array = kmalloc_objs(**cs_chunk_array, num_chunks,
+					       GFP_KERNEL);
 	if (!*cs_chunk_array) {
 		atomic64_inc(&ctx->cs_counters.out_of_mem_drop_cnt);
 		atomic64_inc(&hdev->aggregated_cs_counters.out_of_mem_drop_cnt);
@@ -2040,7 +2039,7 @@ static int cs_ioctl_reserve_signals(struct hl_fpriv *hpriv,

 	prop = &hdev->kernel_queues[q_idx].sync_stream_prop;

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle) {
 		rc = -ENOMEM;
 		goto out;
@@ -3053,7 +3052,7 @@ static int hl_multi_cs_wait_ioctl(struct hl_fpriv *hpriv, void *data)
 	}

 	/* allocate array for the fences */
-	fence_arr = kmalloc_array(seq_arr_len, sizeof(struct hl_fence *), GFP_KERNEL);
+	fence_arr = kmalloc_objs(struct hl_fence *, seq_arr_len, GFP_KERNEL);
 	if (!fence_arr) {
 		rc = -ENOMEM;
 		goto free_seq_arr;
@@ -3412,7 +3411,7 @@ static int _hl_interrupt_wait_ioctl(struct hl_device *hdev, struct hl_ctx *ctx,
 		goto put_cq_cb;
 	}

-	pend = kzalloc(sizeof(*pend), GFP_KERNEL);
+	pend = kzalloc_obj(*pend, GFP_KERNEL);
 	if (!pend) {
 		rc = -ENOMEM;
 		goto put_cq_cb;
@@ -3521,7 +3520,7 @@ static int _hl_interrupt_wait_ioctl_user_addr(struct hl_device *hdev, struct hl_

 	hl_ctx_get(ctx);

-	pend = kzalloc(sizeof(*pend), GFP_KERNEL);
+	pend = kzalloc_obj(*pend, GFP_KERNEL);
 	if (!pend) {
 		hl_ctx_put(ctx);
 		return -ENOMEM;
diff --git a/drivers/accel/habanalabs/common/context.c b/drivers/accel/habanalabs/common/context.c
index 9f212b17611a..4d69a3f48616 100644
--- a/drivers/accel/habanalabs/common/context.c
+++ b/drivers/accel/habanalabs/common/context.c
@@ -155,7 +155,7 @@ int hl_ctx_create(struct hl_device *hdev, struct hl_fpriv *hpriv)
 	struct hl_ctx *ctx;
 	int rc;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		rc = -ENOMEM;
 		goto out_err;
@@ -209,9 +209,9 @@ int hl_ctx_init(struct hl_device *hdev, struct hl_ctx *ctx, bool is_kernel_ctx)
 	spin_lock_init(&ctx->cs_lock);
 	atomic_set(&ctx->thread_ctx_switch_token, 1);
 	ctx->thread_ctx_switch_wait_token = 0;
-	ctx->cs_pending = kcalloc(hdev->asic_prop.max_pending_cs,
-				sizeof(struct hl_fence *),
-				GFP_KERNEL);
+	ctx->cs_pending = kzalloc_objs(struct hl_fence *,
+				       hdev->asic_prop.max_pending_cs,
+				       GFP_KERNEL);
 	if (!ctx->cs_pending)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/common/debugfs.c b/drivers/accel/habanalabs/common/debugfs.c
index 5f0820b19ccb..05b1cc7918c5 100644
--- a/drivers/accel/habanalabs/common/debugfs.c
+++ b/drivers/accel/habanalabs/common/debugfs.c
@@ -2052,7 +2052,8 @@ int hl_debugfs_device_init(struct hl_device *hdev)
 	int count = ARRAY_SIZE(hl_debugfs_list);

 	dev_entry->hdev = hdev;
-	dev_entry->entry_arr = kmalloc_array(count, sizeof(struct hl_debugfs_entry), GFP_KERNEL);
+	dev_entry->entry_arr = kmalloc_objs(struct hl_debugfs_entry, count,
+					    GFP_KERNEL);
 	if (!dev_entry->entry_arr)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/common/decoder.c b/drivers/accel/habanalabs/common/decoder.c
index c03a6da45d00..602e53f963ca 100644
--- a/drivers/accel/habanalabs/common/decoder.c
+++ b/drivers/accel/habanalabs/common/decoder.c
@@ -98,7 +98,7 @@ int hl_dec_init(struct hl_device *hdev)
 	if (!prop->max_dec)
 		return 0;

-	hdev->dec = kcalloc(prop->max_dec, sizeof(struct hl_dec), GFP_KERNEL);
+	hdev->dec = kzalloc_objs(struct hl_dec, prop->max_dec, GFP_KERNEL);
 	if (!hdev->dec)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/common/device.c b/drivers/accel/habanalabs/common/device.c
index 999c92d7036e..20ddf6617e02 100644
--- a/drivers/accel/habanalabs/common/device.c
+++ b/drivers/accel/habanalabs/common/device.c
@@ -722,7 +722,7 @@ static int device_init_cdev(struct hl_device *hdev, const struct class *class,
 	cdev_init(cdev, fops);
 	cdev->owner = THIS_MODULE;

-	*dev = kzalloc(sizeof(**dev), GFP_KERNEL);
+	*dev = kzalloc_obj(**dev, GFP_KERNEL);
 	if (!*dev)
 		return -ENOMEM;

@@ -892,9 +892,9 @@ static int device_early_init(struct hl_device *hdev)
 		goto early_fini;

 	if (hdev->asic_prop.completion_queues_count) {
-		hdev->cq_wq = kcalloc(hdev->asic_prop.completion_queues_count,
-				sizeof(struct workqueue_struct *),
-				GFP_KERNEL);
+		hdev->cq_wq = kzalloc_objs(struct workqueue_struct *,
+					   hdev->asic_prop.completion_queues_count,
+					   GFP_KERNEL);
 		if (!hdev->cq_wq) {
 			rc = -ENOMEM;
 			goto asid_fini;
@@ -945,7 +945,7 @@ static int device_early_init(struct hl_device *hdev)
 		goto free_ts_free_wq;
 	}

-	hdev->hl_chip_info = kzalloc(sizeof(struct hwmon_chip_info), GFP_KERNEL);
+	hdev->hl_chip_info = kzalloc_obj(struct hwmon_chip_info, GFP_KERNEL);
 	if (!hdev->hl_chip_info) {
 		rc = -ENOMEM;
 		goto free_prefetch_wq;
@@ -1851,8 +1851,7 @@ int hl_device_reset(struct hl_device *hdev, u32 flags)
 		}

 		/* Allocate the kernel context */
-		hdev->kernel_ctx = kzalloc(sizeof(*hdev->kernel_ctx),
-						GFP_KERNEL);
+		hdev->kernel_ctx = kzalloc_obj(*hdev->kernel_ctx, GFP_KERNEL);
 		if (!hdev->kernel_ctx) {
 			rc = -ENOMEM;
 			hl_mmu_fini(hdev);
@@ -2159,8 +2158,9 @@ int hl_device_init(struct hl_device *hdev)
 				hdev->asic_prop.user_interrupt_count;

 	if (user_interrupt_cnt) {
-		hdev->user_interrupt = kcalloc(user_interrupt_cnt, sizeof(*hdev->user_interrupt),
-						GFP_KERNEL);
+		hdev->user_interrupt = kzalloc_objs(*hdev->user_interrupt,
+						    user_interrupt_cnt,
+						    GFP_KERNEL);
 		if (!hdev->user_interrupt) {
 			rc = -ENOMEM;
 			goto early_fini;
@@ -2226,9 +2226,8 @@ int hl_device_init(struct hl_device *hdev)
 	 * passed as arguments to request_irq
 	 */
 	if (cq_cnt) {
-		hdev->completion_queue = kcalloc(cq_cnt,
-				sizeof(*hdev->completion_queue),
-				GFP_KERNEL);
+		hdev->completion_queue = kzalloc_objs(*hdev->completion_queue,
+						      cq_cnt, GFP_KERNEL);

 		if (!hdev->completion_queue) {
 			dev_err(hdev->dev,
@@ -2249,8 +2248,9 @@ int hl_device_init(struct hl_device *hdev)
 		hdev->completion_queue[i].cq_idx = i;
 	}

-	hdev->shadow_cs_queue = kcalloc(hdev->asic_prop.max_pending_cs,
-					sizeof(struct hl_cs *), GFP_KERNEL);
+	hdev->shadow_cs_queue = kzalloc_objs(struct hl_cs *,
+					     hdev->asic_prop.max_pending_cs,
+					     GFP_KERNEL);
 	if (!hdev->shadow_cs_queue) {
 		rc = -ENOMEM;
 		goto cq_fini;
@@ -2275,7 +2275,7 @@ int hl_device_init(struct hl_device *hdev)
 	}

 	/* Allocate the kernel context */
-	hdev->kernel_ctx = kzalloc(sizeof(*hdev->kernel_ctx), GFP_KERNEL);
+	hdev->kernel_ctx = kzalloc_obj(*hdev->kernel_ctx, GFP_KERNEL);
 	if (!hdev->kernel_ctx) {
 		rc = -ENOMEM;
 		goto mmu_fini;
diff --git a/drivers/accel/habanalabs/common/firmware_if.c b/drivers/accel/habanalabs/common/firmware_if.c
index eeb6b2a80fc7..f6a2c48ad74e 100644
--- a/drivers/accel/habanalabs/common/firmware_if.c
+++ b/drivers/accel/habanalabs/common/firmware_if.c
@@ -2681,7 +2681,7 @@ static int hl_fw_dynamic_send_msg(struct hl_device *hdev,
 	struct lkd_msg_comms *msg;
 	int rc;

-	msg = kzalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kzalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/common/habanalabs_drv.c b/drivers/accel/habanalabs/common/habanalabs_drv.c
index 0035748f3228..63b4a91e291c 100644
--- a/drivers/accel/habanalabs/common/habanalabs_drv.c
+++ b/drivers/accel/habanalabs/common/habanalabs_drv.c
@@ -181,7 +181,7 @@ int hl_device_open(struct drm_device *ddev, struct drm_file *file_priv)
 	struct hl_fpriv *hpriv;
 	int rc;

-	hpriv = kzalloc(sizeof(*hpriv), GFP_KERNEL);
+	hpriv = kzalloc_obj(*hpriv, GFP_KERNEL);
 	if (!hpriv)
 		return -ENOMEM;

@@ -291,7 +291,7 @@ int hl_device_open_ctrl(struct inode *inode, struct file *filp)
 		return -ENXIO;
 	}

-	hpriv = kzalloc(sizeof(*hpriv), GFP_KERNEL);
+	hpriv = kzalloc_obj(*hpriv, GFP_KERNEL);
 	if (!hpriv)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/common/habanalabs_ioctl.c b/drivers/accel/habanalabs/common/habanalabs_ioctl.c
index fdfdabc85e54..ace0aaa7b836 100644
--- a/drivers/accel/habanalabs/common/habanalabs_ioctl.c
+++ b/drivers/accel/habanalabs/common/habanalabs_ioctl.c
@@ -201,7 +201,7 @@ static int debug_coresight(struct hl_device *hdev, struct hl_ctx *ctx, struct hl
 	void *input = NULL, *output = NULL;
 	int rc;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -682,11 +682,11 @@ static int sec_attest_info(struct hl_fpriv *hpriv, struct hl_info_args *args)
 	if ((!max_size) || (!out))
 		return -EINVAL;

-	sec_attest_info = kmalloc(sizeof(*sec_attest_info), GFP_KERNEL);
+	sec_attest_info = kmalloc_obj(*sec_attest_info, GFP_KERNEL);
 	if (!sec_attest_info)
 		return -ENOMEM;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		rc = -ENOMEM;
 		goto free_sec_attest_info;
@@ -731,11 +731,11 @@ static int dev_info_signed(struct hl_fpriv *hpriv, struct hl_info_args *args)
 	if ((!max_size) || (!out))
 		return -EINVAL;

-	dev_info_signed = kzalloc(sizeof(*dev_info_signed), GFP_KERNEL);
+	dev_info_signed = kzalloc_obj(*dev_info_signed, GFP_KERNEL);
 	if (!dev_info_signed)
 		return -ENOMEM;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		rc = -ENOMEM;
 		goto free_dev_info_signed;
diff --git a/drivers/accel/habanalabs/common/hldio.c b/drivers/accel/habanalabs/common/hldio.c
index 083ae5610875..2cef50bbfa9b 100644
--- a/drivers/accel/habanalabs/common/hldio.c
+++ b/drivers/accel/habanalabs/common/hldio.c
@@ -308,7 +308,7 @@ int hl_dio_ssd2hl(struct hl_device *hdev, struct hl_ctx *ctx, int fd,

 	dev_dbg(hdev->dev, "SSD2HL fd=%d va=%#llx len=%#lx\n", fd, device_va, len_bytes);

-	io = kzalloc(sizeof(*io), GFP_KERNEL);
+	io = kzalloc_obj(*io, GFP_KERNEL);
 	if (!io) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/drivers/accel/habanalabs/common/hw_queue.c b/drivers/accel/habanalabs/common/hw_queue.c
index 3d04a7507cce..d499063a79ec 100644
--- a/drivers/accel/habanalabs/common/hw_queue.c
+++ b/drivers/accel/habanalabs/common/hw_queue.c
@@ -837,7 +837,8 @@ static int ext_and_cpu_queue_init(struct hl_device *hdev, struct hl_hw_queue *q,

 	q->kernel_address = p;

-	q->shadow_queue = kmalloc_array(HL_QUEUE_LENGTH, sizeof(struct hl_cs_job *), GFP_KERNEL);
+	q->shadow_queue = kmalloc_objs(struct hl_cs_job *, HL_QUEUE_LENGTH,
+				       GFP_KERNEL);
 	if (!q->shadow_queue) {
 		dev_err(hdev->dev,
 			"Failed to allocate shadow queue for H/W queue %d\n",
@@ -1082,8 +1083,8 @@ int hl_hw_queues_create(struct hl_device *hdev)
 	struct hl_hw_queue *q;
 	int i, rc, q_ready_cnt;

-	hdev->kernel_queues = kcalloc(asic->max_queues,
-				sizeof(*hdev->kernel_queues), GFP_KERNEL);
+	hdev->kernel_queues = kzalloc_objs(*hdev->kernel_queues,
+					   asic->max_queues, GFP_KERNEL);

 	if (!hdev->kernel_queues) {
 		dev_err(hdev->dev, "Not enough memory for H/W queues\n");
diff --git a/drivers/accel/habanalabs/common/hwmon.c b/drivers/accel/habanalabs/common/hwmon.c
index 52d1e6bf10dc..a8b00a80fa10 100644
--- a/drivers/accel/habanalabs/common/hwmon.c
+++ b/drivers/accel/habanalabs/common/hwmon.c
@@ -195,15 +195,15 @@ int hl_build_hwmon_channel_info(struct hl_device *hdev, struct cpucp_sensor *sen
 		curr_arr[sensors_by_type_next_index[type]++] = flags;
 	}

-	channels_info = kcalloc(num_active_sensor_types + 1, sizeof(struct hwmon_channel_info *),
-				GFP_KERNEL);
+	channels_info = kzalloc_objs(struct hwmon_channel_info *,
+				     num_active_sensor_types + 1, GFP_KERNEL);
 	if (!channels_info) {
 		rc = -ENOMEM;
 		goto channels_info_array_err;
 	}

 	for (i = 0 ; i < num_active_sensor_types ; i++) {
-		channels_info[i] = kzalloc(sizeof(*channels_info[i]), GFP_KERNEL);
+		channels_info[i] = kzalloc_obj(*channels_info[i], GFP_KERNEL);
 		if (!channels_info[i]) {
 			rc = -ENOMEM;
 			goto channel_info_err;
diff --git a/drivers/accel/habanalabs/common/irq.c b/drivers/accel/habanalabs/common/irq.c
index 7c9f2f6a2870..023dd3f1c82c 100644
--- a/drivers/accel/habanalabs/common/irq.c
+++ b/drivers/accel/habanalabs/common/irq.c
@@ -267,7 +267,7 @@ static int handle_registration_node(struct hl_device *hdev, struct hl_user_pendi

 	if (!(*free_list)) {
 		/* Alloc/Init the timestamp registration free objects list */
-		*free_list = kmalloc(sizeof(struct list_head), GFP_ATOMIC);
+		*free_list = kmalloc_obj(struct list_head, GFP_ATOMIC);
 		if (!(*free_list))
 			return -ENOMEM;

@@ -283,14 +283,16 @@ static int handle_registration_node(struct hl_device *hdev, struct hl_user_pendi
 				intr->interrupt_id);

 		if (!(*dynamic_alloc_list)) {
-			*dynamic_alloc_list = kmalloc(sizeof(struct list_head), GFP_ATOMIC);
+			*dynamic_alloc_list = kmalloc_obj(struct list_head,
+							  GFP_ATOMIC);
 			if (!(*dynamic_alloc_list))
 				return -ENOMEM;

 			INIT_LIST_HEAD(*dynamic_alloc_list);
 		}

-		free_node = kmalloc(sizeof(struct timestamp_reg_free_node), GFP_ATOMIC);
+		free_node = kmalloc_obj(struct timestamp_reg_free_node,
+					GFP_ATOMIC);
 		if (!free_node)
 			return -ENOMEM;

@@ -344,7 +346,7 @@ static void handle_user_interrupt_ts_list(struct hl_device *hdev, struct hl_user
 	 * and move nodes hanged on the free list back to the interrupt ts list
 	 * we always alloc the job of the WQ at the beginning.
 	 */
-	job = kmalloc(sizeof(*job), GFP_ATOMIC);
+	job = kmalloc_obj(*job, GFP_ATOMIC);
 	if (!job)
 		return;

@@ -542,7 +544,7 @@ irqreturn_t hl_irq_handler_eq(int irq, void *arg)
 			goto skip_irq;
 		}

-		handle_eqe_work = kmalloc(sizeof(*handle_eqe_work), GFP_ATOMIC);
+		handle_eqe_work = kmalloc_obj(*handle_eqe_work, GFP_ATOMIC);
 		if (handle_eqe_work) {
 			INIT_WORK(&handle_eqe_work->eq_work, irq_handle_eqe);
 			handle_eqe_work->hdev = hdev;
diff --git a/drivers/accel/habanalabs/common/memory.c b/drivers/accel/habanalabs/common/memory.c
index 633db4bff46f..8700e341ff94 100644
--- a/drivers/accel/habanalabs/common/memory.c
+++ b/drivers/accel/habanalabs/common/memory.c
@@ -125,7 +125,7 @@ static int alloc_device_memory(struct hl_ctx *ctx, struct hl_mem_in *args,
 		}
 	}

-	phys_pg_pack = kzalloc(sizeof(*phys_pg_pack), GFP_KERNEL);
+	phys_pg_pack = kzalloc_obj(*phys_pg_pack, GFP_KERNEL);
 	if (!phys_pg_pack) {
 		rc = -ENOMEM;
 		goto pages_pack_err;
@@ -228,7 +228,7 @@ static int dma_map_host_va(struct hl_device *hdev, u64 addr, u64 size,
 	struct hl_userptr *userptr;
 	int rc;

-	userptr = kzalloc(sizeof(*userptr), GFP_KERNEL);
+	userptr = kzalloc_obj(*userptr, GFP_KERNEL);
 	if (!userptr) {
 		rc = -ENOMEM;
 		goto userptr_err;
@@ -501,7 +501,7 @@ static int add_va_block_locked(struct hl_device *hdev,
 			res = va_block;
 	}

-	va_block = kmalloc(sizeof(*va_block), GFP_KERNEL);
+	va_block = kmalloc_obj(*va_block, GFP_KERNEL);
 	if (!va_block)
 		return -ENOMEM;

@@ -850,7 +850,7 @@ static int init_phys_pg_pack_from_userptr(struct hl_ctx *ctx,
 	dma_addr_t dma_addr;
 	int rc, i, j;

-	phys_pg_pack = kzalloc(sizeof(*phys_pg_pack), GFP_KERNEL);
+	phys_pg_pack = kzalloc_obj(*phys_pg_pack, GFP_KERNEL);
 	if (!phys_pg_pack)
 		return -ENOMEM;

@@ -1152,7 +1152,7 @@ static int map_device_va(struct hl_ctx *ctx, struct hl_mem_in *args, u64 *device
 		goto shared_err;
 	}

-	hnode = kzalloc(sizeof(*hnode), GFP_KERNEL);
+	hnode = kzalloc_obj(*hnode, GFP_KERNEL);
 	if (!hnode) {
 		rc = -ENOMEM;
 		goto hnode_err;
@@ -1482,7 +1482,7 @@ int hl_hw_block_mmap(struct hl_fpriv *hpriv, struct vm_area_struct *vma)
 		return -EINVAL;
 	}

-	lnode = kzalloc(sizeof(*lnode), GFP_KERNEL);
+	lnode = kzalloc_obj(*lnode, GFP_KERNEL);
 	if (!lnode)
 		return -ENOMEM;

@@ -1553,7 +1553,7 @@ static struct sg_table *alloc_sgt_from_device_pages(struct hl_device *hdev, u64
 		return ERR_PTR(-EINVAL);
 	}

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return ERR_PTR(-ENOMEM);

@@ -2046,7 +2046,7 @@ static int export_dmabuf_from_addr(struct hl_ctx *ctx, u64 addr, u64 size, u64 o
 		return -EINVAL;
 	}

-	hl_dmabuf = kzalloc(sizeof(*hl_dmabuf), GFP_KERNEL);
+	hl_dmabuf = kzalloc_obj(*hl_dmabuf, GFP_KERNEL);
 	if (!hl_dmabuf)
 		return -ENOMEM;

@@ -2116,7 +2116,7 @@ static int hl_ts_alloc_buf(struct hl_mmap_mem_buf *buf, gfp_t gfp, void *args)

 	num_elements = *(u32 *)args;

-	ts_buff = kzalloc(sizeof(*ts_buff), gfp);
+	ts_buff = kzalloc_obj(*ts_buff, gfp);
 	if (!ts_buff)
 		return -ENOMEM;

@@ -2323,7 +2323,7 @@ static int get_user_memory(struct hl_device *hdev, u64 addr, u64 size,
 		return -EFAULT;
 	}

-	userptr->pages = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
+	userptr->pages = kvmalloc_objs(struct page *, npages, GFP_KERNEL);
 	if (!userptr->pages)
 		return -ENOMEM;

@@ -2395,7 +2395,7 @@ int hl_pin_host_memory(struct hl_device *hdev, u64 addr, u64 size,
 	}

 	userptr->pid = current->pid;
-	userptr->sgt = kzalloc(sizeof(*userptr->sgt), GFP_KERNEL);
+	userptr->sgt = kzalloc_obj(*userptr->sgt, GFP_KERNEL);
 	if (!userptr->sgt)
 		return -ENOMEM;

@@ -2611,7 +2611,7 @@ static int vm_ctx_init_with_ranges(struct hl_ctx *ctx,

 	for (i = 0 ; i < HL_VA_RANGE_TYPE_MAX ; i++) {
 		ctx->va_range[i] =
-			kzalloc(sizeof(struct hl_va_range), GFP_KERNEL);
+			kzalloc_obj(struct hl_va_range, GFP_KERNEL);
 		if (!ctx->va_range[i]) {
 			rc = -ENOMEM;
 			goto free_va_range;
diff --git a/drivers/accel/habanalabs/common/memory_mgr.c b/drivers/accel/habanalabs/common/memory_mgr.c
index 4401beb99e42..9fdd34acf389 100644
--- a/drivers/accel/habanalabs/common/memory_mgr.c
+++ b/drivers/accel/habanalabs/common/memory_mgr.c
@@ -152,7 +152,7 @@ hl_mmap_mem_buf_alloc(struct hl_mem_mgr *mmg,
 	struct hl_mmap_mem_buf *buf;
 	int rc;

-	buf = kzalloc(sizeof(*buf), gfp);
+	buf = kzalloc_obj(*buf, gfp);
 	if (!buf)
 		return NULL;

diff --git a/drivers/accel/habanalabs/common/mmu/mmu.c b/drivers/accel/habanalabs/common/mmu/mmu.c
index 79823facce7f..8a661408af20 100644
--- a/drivers/accel/habanalabs/common/mmu/mmu.c
+++ b/drivers/accel/habanalabs/common/mmu/mmu.c
@@ -697,7 +697,7 @@ int hl_mmu_prefetch_cache_range(struct hl_ctx *ctx, u32 flags, u32 asid, u64 va,
 {
 	struct hl_prefetch_work *handle_prefetch_work;

-	handle_prefetch_work = kmalloc(sizeof(*handle_prefetch_work), GFP_KERNEL);
+	handle_prefetch_work = kmalloc_obj(*handle_prefetch_work, GFP_KERNEL);
 	if (!handle_prefetch_work)
 		return -ENOMEM;

@@ -843,7 +843,8 @@ int hl_mmu_hr_init(struct hl_device *hdev, struct hl_mmu_hr_priv *hr_priv, u32 h
 		return -ENOMEM;
 	}

-	hr_priv->mmu_asid_hop0 = kvcalloc(prop->max_asid, sizeof(struct pgt_info), GFP_KERNEL);
+	hr_priv->mmu_asid_hop0 = kvzalloc_objs(struct pgt_info, prop->max_asid,
+					       GFP_KERNEL);
 	if (ZERO_OR_NULL_PTR(hr_priv->mmu_asid_hop0)) {
 		dev_err(hdev->dev, "Failed to allocate hr-mmu hop0 table\n");
 		rc = -ENOMEM;
@@ -1071,7 +1072,7 @@ struct pgt_info *hl_mmu_hr_alloc_hop(struct hl_ctx *ctx, struct hl_mmu_hr_priv *
 	void *virt_addr;
 	int i, retry = 1;

-	pgt_info = kmalloc(sizeof(*pgt_info), GFP_KERNEL);
+	pgt_info = kmalloc_obj(*pgt_info, GFP_KERNEL);
 	if (!pgt_info)
 		return NULL;

@@ -1325,7 +1326,7 @@ u64 hl_mmu_dr_alloc_hop(struct hl_ctx *ctx)
 	struct pgt_info *pgt_info;
 	u64 phys_addr, shadow_addr;

-	pgt_info = kmalloc(sizeof(*pgt_info), GFP_KERNEL);
+	pgt_info = kmalloc_obj(*pgt_info, GFP_KERNEL);
 	if (!pgt_info)
 		return ULLONG_MAX;

diff --git a/drivers/accel/habanalabs/common/security.c b/drivers/accel/habanalabs/common/security.c
index 5402a3cd0491..8a0da0194cab 100644
--- a/drivers/accel/habanalabs/common/security.c
+++ b/drivers/accel/habanalabs/common/security.c
@@ -312,9 +312,8 @@ int hl_init_pb_with_mask(struct hl_device *hdev, u32 num_dcores,
 	int i, j;
 	struct hl_block_glbl_sec *glbl_sec;

-	glbl_sec = kcalloc(blocks_array_size,
-			sizeof(struct hl_block_glbl_sec),
-			GFP_KERNEL);
+	glbl_sec = kzalloc_objs(struct hl_block_glbl_sec, blocks_array_size,
+				GFP_KERNEL);
 	if (!glbl_sec)
 		return -ENOMEM;

@@ -393,9 +392,8 @@ int hl_init_pb_ranges_with_mask(struct hl_device *hdev, u32 num_dcores,
 	int i, j, rc = 0;
 	struct hl_block_glbl_sec *glbl_sec;

-	glbl_sec = kcalloc(blocks_array_size,
-			sizeof(struct hl_block_glbl_sec),
-			GFP_KERNEL);
+	glbl_sec = kzalloc_objs(struct hl_block_glbl_sec, blocks_array_size,
+				GFP_KERNEL);
 	if (!glbl_sec)
 		return -ENOMEM;

@@ -476,9 +474,8 @@ int hl_init_pb_single_dcore(struct hl_device *hdev, u32 dcore_offset,
 	int i, rc = 0;
 	struct hl_block_glbl_sec *glbl_sec;

-	glbl_sec = kcalloc(blocks_array_size,
-			sizeof(struct hl_block_glbl_sec),
-			GFP_KERNEL);
+	glbl_sec = kzalloc_objs(struct hl_block_glbl_sec, blocks_array_size,
+				GFP_KERNEL);
 	if (!glbl_sec)
 		return -ENOMEM;

@@ -524,9 +521,8 @@ int hl_init_pb_ranges_single_dcore(struct hl_device *hdev, u32 dcore_offset,
 	int i;
 	struct hl_block_glbl_sec *glbl_sec;

-	glbl_sec = kcalloc(blocks_array_size,
-			sizeof(struct hl_block_glbl_sec),
-			GFP_KERNEL);
+	glbl_sec = kzalloc_objs(struct hl_block_glbl_sec, blocks_array_size,
+				GFP_KERNEL);
 	if (!glbl_sec)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/common/state_dump.c b/drivers/accel/habanalabs/common/state_dump.c
index 3a9931f24259..ec25d55d89e2 100644
--- a/drivers/accel/habanalabs/common/state_dump.c
+++ b/drivers/accel/habanalabs/common/state_dump.c
@@ -400,7 +400,7 @@ static int hl_state_dump_print_syncs(struct hl_device *hdev,
 	u32 index;
 	int rc = 0;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/gaudi/gaudi.c b/drivers/accel/habanalabs/gaudi/gaudi.c
index 34771d75da9d..e7dce0d57692 100644
--- a/drivers/accel/habanalabs/gaudi/gaudi.c
+++ b/drivers/accel/habanalabs/gaudi/gaudi.c
@@ -539,9 +539,8 @@ static int gaudi_set_fixed_properties(struct hl_device *hdev)
 	int i;

 	prop->max_queues = GAUDI_QUEUE_ID_SIZE;
-	prop->hw_queues_props = kcalloc(prop->max_queues,
-			sizeof(struct hw_queue_properties),
-			GFP_KERNEL);
+	prop->hw_queues_props = kzalloc_objs(struct hw_queue_properties,
+					     prop->max_queues, GFP_KERNEL);

 	if (!prop->hw_queues_props)
 		return -ENOMEM;
@@ -1853,7 +1852,7 @@ static int gaudi_sw_init(struct hl_device *hdev)
 	int rc;

 	/* Allocate device structure */
-	gaudi = kzalloc(sizeof(*gaudi), GFP_KERNEL);
+	gaudi = kzalloc_obj(*gaudi, GFP_KERNEL);
 	if (!gaudi)
 		return -ENOMEM;

@@ -4906,7 +4905,7 @@ static int gaudi_pin_memory_before_cs(struct hl_device *hdev,
 			parser->job_userptr_list, &userptr))
 		goto already_pinned;

-	userptr = kzalloc(sizeof(*userptr), GFP_KERNEL);
+	userptr = kzalloc_obj(*userptr, GFP_KERNEL);
 	if (!userptr)
 		return -ENOMEM;

@@ -8843,7 +8842,7 @@ static int gaudi_add_sync_to_engine_map_entry(
 	reg_value -= lower_32_bits(CFG_BASE);

 	/* create a new hash entry */
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;
 	entry->engine_type = engine_type;
diff --git a/drivers/accel/habanalabs/gaudi2/gaudi2.c b/drivers/accel/habanalabs/gaudi2/gaudi2.c
index b8c0689dba64..e6690698cde4 100644
--- a/drivers/accel/habanalabs/gaudi2/gaudi2.c
+++ b/drivers/accel/habanalabs/gaudi2/gaudi2.c
@@ -2762,8 +2762,8 @@ static int gaudi2_set_fixed_properties(struct hl_device *hdev)
 	int i, rc;

 	prop->max_queues = GAUDI2_QUEUE_ID_SIZE;
-	prop->hw_queues_props = kcalloc(prop->max_queues, sizeof(struct hw_queue_properties),
-					GFP_KERNEL);
+	prop->hw_queues_props = kzalloc_objs(struct hw_queue_properties,
+					     prop->max_queues, GFP_KERNEL);

 	if (!prop->hw_queues_props)
 		return -ENOMEM;
@@ -3943,8 +3943,9 @@ static int gaudi2_special_blocks_config(struct hl_device *hdev)
 	/* Configure Special blocks */
 	prop->glbl_err_max_cause_num = GAUDI2_GLBL_ERR_MAX_CAUSE_NUM;
 	prop->num_of_special_blocks = ARRAY_SIZE(gaudi2_special_blocks);
-	prop->special_blocks = kmalloc_array(prop->num_of_special_blocks,
-			sizeof(*prop->special_blocks), GFP_KERNEL);
+	prop->special_blocks = kmalloc_objs(*prop->special_blocks,
+					    prop->num_of_special_blocks,
+					    GFP_KERNEL);
 	if (!prop->special_blocks)
 		return -ENOMEM;

@@ -3958,8 +3959,9 @@ static int gaudi2_special_blocks_config(struct hl_device *hdev)

 	if (ARRAY_SIZE(gaudi2_iterator_skip_block_types)) {
 		prop->skip_special_blocks_cfg.block_types =
-				kmalloc_array(ARRAY_SIZE(gaudi2_iterator_skip_block_types),
-					sizeof(gaudi2_iterator_skip_block_types[0]), GFP_KERNEL);
+				kmalloc_objs(gaudi2_iterator_skip_block_types[0],
+					     ARRAY_SIZE(gaudi2_iterator_skip_block_types),
+					     GFP_KERNEL);
 		if (!prop->skip_special_blocks_cfg.block_types) {
 			rc = -ENOMEM;
 			goto free_special_blocks;
@@ -3974,8 +3976,9 @@ static int gaudi2_special_blocks_config(struct hl_device *hdev)

 	if (ARRAY_SIZE(gaudi2_iterator_skip_block_ranges)) {
 		prop->skip_special_blocks_cfg.block_ranges =
-				kmalloc_array(ARRAY_SIZE(gaudi2_iterator_skip_block_ranges),
-					sizeof(gaudi2_iterator_skip_block_ranges[0]), GFP_KERNEL);
+				kmalloc_objs(gaudi2_iterator_skip_block_ranges[0],
+					     ARRAY_SIZE(gaudi2_iterator_skip_block_ranges),
+					     GFP_KERNEL);
 		if (!prop->skip_special_blocks_cfg.block_ranges) {
 			rc = -ENOMEM;
 			goto free_skip_special_blocks_types;
@@ -4054,7 +4057,7 @@ static int gaudi2_sw_init(struct hl_device *hdev)
 	int i, rc;

 	/* Allocate device structure */
-	gaudi2 = kzalloc(sizeof(*gaudi2), GFP_KERNEL);
+	gaudi2 = kzalloc_obj(*gaudi2, GFP_KERNEL);
 	if (!gaudi2)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/gaudi2/gaudi2_security.c b/drivers/accel/habanalabs/gaudi2/gaudi2_security.c
index 307ccb912ccd..f4f8f9122f5c 100644
--- a/drivers/accel/habanalabs/gaudi2/gaudi2_security.c
+++ b/drivers/accel/habanalabs/gaudi2/gaudi2_security.c
@@ -2620,7 +2620,8 @@ static int gaudi2_init_pb_tpc(struct hl_device *hdev)

 	block_array_size = ARRAY_SIZE(gaudi2_pb_dcr0_tpc0);

-	glbl_sec = kcalloc(block_array_size, sizeof(struct hl_block_glbl_sec), GFP_KERNEL);
+	glbl_sec = kzalloc_objs(struct hl_block_glbl_sec, block_array_size,
+				GFP_KERNEL);
 	if (!glbl_sec)
 		return -ENOMEM;

diff --git a/drivers/accel/habanalabs/goya/goya.c b/drivers/accel/habanalabs/goya/goya.c
index 84768e306269..fb37a2339f12 100644
--- a/drivers/accel/habanalabs/goya/goya.c
+++ b/drivers/accel/habanalabs/goya/goya.c
@@ -363,9 +363,8 @@ int goya_set_fixed_properties(struct hl_device *hdev)
 	int i;

 	prop->max_queues = GOYA_QUEUE_ID_SIZE;
-	prop->hw_queues_props = kcalloc(prop->max_queues,
-			sizeof(struct hw_queue_properties),
-			GFP_KERNEL);
+	prop->hw_queues_props = kzalloc_objs(struct hw_queue_properties,
+					     prop->max_queues, GFP_KERNEL);

 	if (!prop->hw_queues_props)
 		return -ENOMEM;
@@ -970,7 +969,7 @@ static int goya_sw_init(struct hl_device *hdev)
 	int rc;

 	/* Allocate device structure */
-	goya = kzalloc(sizeof(*goya), GFP_KERNEL);
+	goya = kzalloc_obj(*goya, GFP_KERNEL);
 	if (!goya)
 		return -ENOMEM;

@@ -1031,7 +1030,7 @@ static int goya_sw_init(struct hl_device *hdev)

 	hdev->asic_funcs->set_pci_memory_regions(hdev);

-	goya->goya_work = kmalloc(sizeof(struct goya_work_freq), GFP_KERNEL);
+	goya->goya_work = kmalloc_obj(struct goya_work_freq, GFP_KERNEL);
 	if (!goya->goya_work) {
 		rc = -ENOMEM;
 		goto free_cpu_accessible_dma_pool;
@@ -3336,7 +3335,7 @@ static int goya_pin_memory_before_cs(struct hl_device *hdev,
 			parser->job_userptr_list, &userptr))
 		goto already_pinned;

-	userptr = kzalloc(sizeof(*userptr), GFP_KERNEL);
+	userptr = kzalloc_obj(*userptr, GFP_KERNEL);
 	if (!userptr)
 		return -ENOMEM;

diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c
index 8ffda57459df..ab910d201e68 100644
--- a/drivers/accel/ivpu/ivpu_drv.c
+++ b/drivers/accel/ivpu/ivpu_drv.c
@@ -237,7 +237,7 @@ static int ivpu_open(struct drm_device *dev, struct drm_file *file)
 	if (!drm_dev_enter(dev, &idx))
 		return -ENODEV;

-	file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
+	file_priv = kzalloc_obj(*file_priv, GFP_KERNEL);
 	if (!file_priv) {
 		ret = -ENOMEM;
 		goto err_dev_exit;
diff --git a/drivers/accel/ivpu/ivpu_gem_userptr.c b/drivers/accel/ivpu/ivpu_gem_userptr.c
index 25ba606164c0..7dcd127471bb 100644
--- a/drivers/accel/ivpu/ivpu_gem_userptr.c
+++ b/drivers/accel/ivpu/ivpu_gem_userptr.c
@@ -77,7 +77,7 @@ ivpu_create_userptr_dmabuf(struct ivpu_device *vdev, void __user *user_ptr,
 	if (!(flags & DRM_IVPU_BO_READ_ONLY))
 		gup_flags |= FOLL_WRITE;

-	pages = kvmalloc_array(nr_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kvmalloc_objs(*pages, nr_pages, GFP_KERNEL);
 	if (!pages)
 		return ERR_PTR(-ENOMEM);

@@ -94,7 +94,7 @@ ivpu_create_userptr_dmabuf(struct ivpu_device *vdev, void __user *user_ptr,
 		goto unpin_pages;
 	}

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		ret = -ENOMEM;
 		goto unpin_pages;
diff --git a/drivers/accel/ivpu/ivpu_ipc.c b/drivers/accel/ivpu/ivpu_ipc.c
index 1f13bf95b2b3..f47df092bb0d 100644
--- a/drivers/accel/ivpu/ivpu_ipc.c
+++ b/drivers/accel/ivpu/ivpu_ipc.c
@@ -142,7 +142,7 @@ ivpu_ipc_rx_msg_add(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons,

 	lockdep_assert_held(&ipc->cons_lock);

-	rx_msg = kzalloc(sizeof(*rx_msg), GFP_ATOMIC);
+	rx_msg = kzalloc_obj(*rx_msg, GFP_ATOMIC);
 	if (!rx_msg) {
 		ivpu_ipc_rx_mark_free(vdev, ipc_hdr, jsm_msg);
 		return;
diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c
index 4f8564e2878a..cb478d946ae9 100644
--- a/drivers/accel/ivpu/ivpu_job.c
+++ b/drivers/accel/ivpu/ivpu_job.c
@@ -98,7 +98,7 @@ static struct ivpu_cmdq *ivpu_cmdq_alloc(struct ivpu_file_priv *file_priv)
 	struct ivpu_device *vdev = file_priv->vdev;
 	struct ivpu_cmdq *cmdq;

-	cmdq = kzalloc(sizeof(*cmdq), GFP_KERNEL);
+	cmdq = kzalloc_obj(*cmdq, GFP_KERNEL);
 	if (!cmdq)
 		return NULL;

@@ -491,7 +491,7 @@ static struct dma_fence *ivpu_fence_create(struct ivpu_device *vdev)
 {
 	struct ivpu_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return NULL;

@@ -525,7 +525,7 @@ ivpu_job_create(struct ivpu_file_priv *file_priv, u32 engine_idx, u32 bo_count)
 	struct ivpu_device *vdev = file_priv->vdev;
 	struct ivpu_job *job;

-	job = kzalloc(struct_size(job, bos, bo_count), GFP_KERNEL);
+	job = kzalloc_flex(*job, bos, bo_count, GFP_KERNEL);
 	if (!job)
 		return NULL;

diff --git a/drivers/accel/ivpu/ivpu_ms.c b/drivers/accel/ivpu/ivpu_ms.c
index 1d9c1cb17924..f3468c9533ca 100644
--- a/drivers/accel/ivpu/ivpu_ms.c
+++ b/drivers/accel/ivpu/ivpu_ms.c
@@ -59,7 +59,7 @@ int ivpu_ms_start_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
 		goto unlock;
 	}

-	ms = kzalloc(sizeof(*ms), GFP_KERNEL);
+	ms = kzalloc_obj(*ms, GFP_KERNEL);
 	if (!ms) {
 		ret = -ENOMEM;
 		goto unlock;
diff --git a/drivers/accel/qaic/qaic_control.c b/drivers/accel/qaic/qaic_control.c
index 428d8f65bff3..517cd3a9cab2 100644
--- a/drivers/accel/qaic/qaic_control.c
+++ b/drivers/accel/qaic/qaic_control.c
@@ -423,7 +423,8 @@ static int find_and_map_user_pages(struct qaic_device *qdev,
 	nr_pages = need_pages;

 	while (1) {
-		page_list = kmalloc_array(nr_pages, sizeof(*page_list), GFP_KERNEL | __GFP_NOWARN);
+		page_list = kmalloc_objs(*page_list, nr_pages,
+					 GFP_KERNEL | __GFP_NOWARN);
 		if (!page_list) {
 			nr_pages = nr_pages / 2;
 			if (!nr_pages)
@@ -442,7 +443,7 @@ static int find_and_map_user_pages(struct qaic_device *qdev,
 		goto put_pages;
 	}

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		ret = -ENOMEM;
 		goto put_pages;
@@ -581,7 +582,7 @@ static int encode_dma(struct qaic_device *qdev, void *trans, struct wrapper_list
 	    QAIC_MANAGE_WIRE_MSG_LENGTH)
 		return -ENOMEM;

-	xfer = kmalloc(sizeof(*xfer), GFP_KERNEL);
+	xfer = kmalloc_obj(*xfer, GFP_KERNEL);
 	if (!xfer)
 		return -ENOMEM;

@@ -1165,7 +1166,7 @@ static struct wrapper_list *alloc_wrapper_list(void)
 {
 	struct wrapper_list *wrappers;

-	wrappers = kmalloc(sizeof(*wrappers), GFP_KERNEL);
+	wrappers = kmalloc_obj(*wrappers, GFP_KERNEL);
 	if (!wrappers)
 		return NULL;
 	INIT_LIST_HEAD(&wrappers->list);
@@ -1457,7 +1458,7 @@ void qaic_mhi_dl_xfer_cb(struct mhi_device *mhi_dev, struct mhi_result *mhi_resu
 		return;
 	}

-	resp = kmalloc(sizeof(*resp), GFP_ATOMIC);
+	resp = kmalloc_obj(*resp, GFP_ATOMIC);
 	if (!resp) {
 		kfree(msg);
 		return;
diff --git a/drivers/accel/qaic/qaic_data.c b/drivers/accel/qaic/qaic_data.c
index 60cb4d65d48e..6405f849ad5f 100644
--- a/drivers/accel/qaic/qaic_data.c
+++ b/drivers/accel/qaic/qaic_data.c
@@ -213,7 +213,7 @@ static int clone_range_of_sgt_for_slice(struct qaic_device *qdev, struct sg_tabl
 		goto out;
 	}

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		ret = -ENOMEM;
 		goto out;
@@ -399,13 +399,13 @@ static int qaic_map_one_slice(struct qaic_device *qdev, struct qaic_bo *bo,
 	if (ret)
 		goto out;

-	slice = kmalloc(sizeof(*slice), GFP_KERNEL);
+	slice = kmalloc_obj(*slice, GFP_KERNEL);
 	if (!slice) {
 		ret = -ENOMEM;
 		goto free_sgt;
 	}

-	slice->reqs = kvcalloc(sgt->nents, sizeof(*slice->reqs), GFP_KERNEL);
+	slice->reqs = kvzalloc_objs(*slice->reqs, sgt->nents, GFP_KERNEL);
 	if (!slice->reqs) {
 		ret = -ENOMEM;
 		goto free_slice;
@@ -507,7 +507,7 @@ static int create_sgt(struct qaic_device *qdev, struct sg_table **sgt_out, u64 s
 		i++;
 	}

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		ret = -ENOMEM;
 		goto free_partial_alloc;
@@ -653,7 +653,7 @@ static struct sg_table *qaic_get_sg_table(struct drm_gem_object *obj)

 	sgt_in = bo->sgt;

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return ERR_PTR(-ENOMEM);

@@ -697,7 +697,7 @@ static struct qaic_bo *qaic_alloc_init_bo(void)
 {
 	struct qaic_bo *bo;

-	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+	bo = kzalloc_obj(*bo, GFP_KERNEL);
 	if (!bo)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/accel/qaic/qaic_drv.c b/drivers/accel/qaic/qaic_drv.c
index 4c70bd949d53..7127364068ae 100644
--- a/drivers/accel/qaic/qaic_drv.c
+++ b/drivers/accel/qaic/qaic_drv.c
@@ -152,7 +152,7 @@ static int qaic_open(struct drm_device *dev, struct drm_file *file)
 		goto dev_unlock;
 	}

-	usr = kmalloc(sizeof(*usr), GFP_KERNEL);
+	usr = kmalloc_obj(*usr, GFP_KERNEL);
 	if (!usr) {
 		ret = -ENOMEM;
 		goto dev_unlock;
diff --git a/drivers/accel/qaic/qaic_ras.c b/drivers/accel/qaic/qaic_ras.c
index f1d52a710136..b488e6ef66c5 100644
--- a/drivers/accel/qaic/qaic_ras.c
+++ b/drivers/accel/qaic/qaic_ras.c
@@ -556,7 +556,7 @@ static int qaic_ras_mhi_probe(struct mhi_device *mhi_dev, const struct mhi_devic
 	if (ret)
 		return ret;

-	resp = kzalloc(sizeof(*resp), GFP_KERNEL);
+	resp = kzalloc_obj(*resp, GFP_KERNEL);
 	if (!resp) {
 		mhi_unprepare_from_transfer(mhi_dev);
 		return -ENOMEM;
diff --git a/drivers/accel/qaic/qaic_ssr.c b/drivers/accel/qaic/qaic_ssr.c
index 9b662d690371..77ac30498ad0 100644
--- a/drivers/accel/qaic/qaic_ssr.c
+++ b/drivers/accel/qaic/qaic_ssr.c
@@ -260,7 +260,7 @@ static int send_xfer_done(struct qaic_device *qdev, void *resp, u32 dbc_id)
 	struct ssr_debug_transfer_done *xfer_done;
 	int ret;

-	xfer_done = kmalloc(sizeof(*xfer_done), GFP_KERNEL);
+	xfer_done = kmalloc_obj(*xfer_done, GFP_KERNEL);
 	if (!xfer_done) {
 		ret = -ENOMEM;
 		goto out;
@@ -450,14 +450,15 @@ static struct ssr_dump_info *alloc_dump_info(struct qaic_device *qdev,
 	}

 	/* Allocate SSR crashdump book keeping structure */
-	dump_info = kzalloc(sizeof(*dump_info), GFP_KERNEL);
+	dump_info = kzalloc_obj(*dump_info, GFP_KERNEL);
 	if (!dump_info) {
 		ret = -ENOMEM;
 		goto out;
 	}

 	/* Buffer used to send MEMORY READ request to device via MHI */
-	dump_info->read_buf_req = kzalloc(sizeof(*dump_info->read_buf_req), GFP_KERNEL);
+	dump_info->read_buf_req = kzalloc_obj(*dump_info->read_buf_req,
+					      GFP_KERNEL);
 	if (!dump_info->read_buf_req) {
 		ret = -ENOMEM;
 		goto free_dump_info;
@@ -490,7 +491,7 @@ static int dbg_xfer_info_rsp(struct qaic_device *qdev, struct dma_bridge_chan *d
 	struct ssr_crashdump *ssr_crash = NULL;
 	int ret = 0, ret2;

-	debug_rsp = kmalloc(sizeof(*debug_rsp), GFP_KERNEL);
+	debug_rsp = kmalloc_obj(*debug_rsp, GFP_KERNEL);
 	if (!debug_rsp)
 		return -ENOMEM;

@@ -640,7 +641,7 @@ static void ssr_worker(struct work_struct *work)
 			break;
 		}

-		event_rsp = kmalloc(sizeof(*event_rsp), GFP_KERNEL);
+		event_rsp = kmalloc_obj(*event_rsp, GFP_KERNEL);
 		if (!event_rsp)
 			break;

diff --git a/drivers/accel/qaic/qaic_timesync.c b/drivers/accel/qaic/qaic_timesync.c
index 8af2475f4f36..b2400d6b2f4f 100644
--- a/drivers/accel/qaic/qaic_timesync.c
+++ b/drivers/accel/qaic/qaic_timesync.c
@@ -185,7 +185,7 @@ static int qaic_timesync_probe(struct mhi_device *mhi_dev, const struct mhi_devi
 	struct timer_list *timer;
 	int ret;

-	mqtsdev = kzalloc(sizeof(*mqtsdev), GFP_KERNEL);
+	mqtsdev = kzalloc_obj(*mqtsdev, GFP_KERNEL);
 	if (!mqtsdev) {
 		ret = -ENOMEM;
 		goto out;
@@ -196,7 +196,7 @@ static int qaic_timesync_probe(struct mhi_device *mhi_dev, const struct mhi_devi
 	mqtsdev->qdev = qdev;
 	mqtsdev->dev = &qdev->pdev->dev;

-	mqtsdev->sync_msg = kzalloc(sizeof(*mqtsdev->sync_msg), GFP_KERNEL);
+	mqtsdev->sync_msg = kzalloc_obj(*mqtsdev->sync_msg, GFP_KERNEL);
 	if (!mqtsdev->sync_msg) {
 		ret = -ENOMEM;
 		goto free_mqts_dev;
@@ -275,7 +275,7 @@ static void qaic_boot_timesync_worker(struct work_struct *work)

 	switch (data.hdr.msg_type) {
 	case QAIC_TS_CMD_TO_HOST:
-		req = kzalloc(sizeof(*req), GFP_KERNEL);
+		req = kzalloc_obj(*req, GFP_KERNEL);
 		if (!req)
 			break;

@@ -304,7 +304,7 @@ static int qaic_boot_timesync_queue_resp(struct mhi_device *mhi_dev, struct qaic
 	struct qts_resp *resp;
 	int ret;

-	resp = kzalloc(sizeof(*resp), GFP_KERNEL);
+	resp = kzalloc_obj(*resp, GFP_KERNEL);
 	if (!resp)
 		return -ENOMEM;

diff --git a/drivers/accel/rocket/rocket_drv.c b/drivers/accel/rocket/rocket_drv.c
index e4cb2efeb55a..f09c3800ab31 100644
--- a/drivers/accel/rocket/rocket_drv.c
+++ b/drivers/accel/rocket/rocket_drv.c
@@ -38,7 +38,7 @@ rocket_iommu_domain_destroy(struct kref *kref)
 static struct rocket_iommu_domain*
 rocket_iommu_domain_create(struct device *dev)
 {
-	struct rocket_iommu_domain *domain = kmalloc(sizeof(*domain), GFP_KERNEL);
+	struct rocket_iommu_domain *domain = kmalloc_obj(*domain, GFP_KERNEL);
 	void *err;

 	if (!domain)
@@ -79,7 +79,7 @@ rocket_open(struct drm_device *dev, struct drm_file *file)
 	if (!try_module_get(THIS_MODULE))
 		return -EINVAL;

-	rocket_priv = kzalloc(sizeof(*rocket_priv), GFP_KERNEL);
+	rocket_priv = kzalloc_obj(*rocket_priv, GFP_KERNEL);
 	if (!rocket_priv) {
 		ret = -ENOMEM;
 		goto err_put_mod;
diff --git a/drivers/accel/rocket/rocket_gem.c b/drivers/accel/rocket/rocket_gem.c
index 624c4ecf5a34..3808dfc97916 100644
--- a/drivers/accel/rocket/rocket_gem.c
+++ b/drivers/accel/rocket/rocket_gem.c
@@ -48,7 +48,7 @@ struct drm_gem_object *rocket_gem_create_object(struct drm_device *dev, size_t s
 {
 	struct rocket_gem_object *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/accel/rocket/rocket_job.c b/drivers/accel/rocket/rocket_job.c
index acd606160dc9..518dd5779016 100644
--- a/drivers/accel/rocket/rocket_job.c
+++ b/drivers/accel/rocket/rocket_job.c
@@ -45,7 +45,7 @@ static struct dma_fence *rocket_fence_create(struct rocket_core *core)
 {
 	struct dma_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return ERR_PTR(-ENOMEM);

@@ -71,7 +71,7 @@ rocket_copy_tasks(struct drm_device *dev,
 	if (!rjob->task_count)
 		return 0;

-	rjob->tasks = kvmalloc_array(job->task_count, sizeof(*rjob->tasks), GFP_KERNEL);
+	rjob->tasks = kvmalloc_objs(*rjob->tasks, job->task_count, GFP_KERNEL);
 	if (!rjob->tasks) {
 		drm_dbg(dev, "Failed to allocate task array\n");
 		return -ENOMEM;
@@ -496,9 +496,9 @@ void rocket_job_fini(struct rocket_core *core)
 int rocket_job_open(struct rocket_file_priv *rocket_priv)
 {
 	struct rocket_device *rdev = rocket_priv->rdev;
-	struct drm_gpu_scheduler **scheds = kmalloc_array(rdev->num_cores,
-							  sizeof(*scheds),
-							  GFP_KERNEL);
+	struct drm_gpu_scheduler **scheds = kmalloc_objs(*scheds,
+							 rdev->num_cores,
+							 GFP_KERNEL);
 	unsigned int core;
 	int ret;

@@ -543,7 +543,7 @@ static int rocket_ioctl_submit_job(struct drm_device *dev, struct drm_file *file
 	if (job->task_count == 0)
 		return -EINVAL;

-	rjob = kzalloc(sizeof(*rjob), GFP_KERNEL);
+	rjob = kzalloc_obj(*rjob, GFP_KERNEL);
 	if (!rjob)
 		return -ENOMEM;

@@ -610,7 +610,7 @@ int rocket_ioctl_submit(struct drm_device *dev, void *data, struct drm_file *fil
 		return -EINVAL;
 	}

-	jobs = kvmalloc_array(args->job_count, sizeof(*jobs), GFP_KERNEL);
+	jobs = kvmalloc_objs(*jobs, args->job_count, GFP_KERNEL);
 	if (!jobs) {
 		drm_dbg(dev, "Failed to allocate incoming job array\n");
 		return -ENOMEM;
diff --git a/drivers/accessibility/speakup/main.c b/drivers/accessibility/speakup/main.c
index e68cf1d83787..78a77dd789a2 100644
--- a/drivers/accessibility/speakup/main.c
+++ b/drivers/accessibility/speakup/main.c
@@ -1353,8 +1353,8 @@ static int speakup_allocate(struct vc_data *vc, gfp_t gfp_flags)

 	vc_num = vc->vc_num;
 	if (!speakup_console[vc_num]) {
-		speakup_console[vc_num] = kzalloc(sizeof(*speakup_console[0]),
-						  gfp_flags);
+		speakup_console[vc_num] = kzalloc_obj(*speakup_console[0],
+						      gfp_flags);
 		if (!speakup_console[vc_num])
 			return -ENOMEM;
 		speakup_date(vc);
diff --git a/drivers/accessibility/speakup/spk_ttyio.c b/drivers/accessibility/speakup/spk_ttyio.c
index 4c0a6e1f019d..a9aab12a7836 100644
--- a/drivers/accessibility/speakup/spk_ttyio.c
+++ b/drivers/accessibility/speakup/spk_ttyio.c
@@ -55,7 +55,7 @@ static int spk_ttyio_ldisc_open(struct tty_struct *tty)
 	if (!tty->ops->write)
 		return -EOPNOTSUPP;

-	ldisc_data = kmalloc(sizeof(*ldisc_data), GFP_KERNEL);
+	ldisc_data = kmalloc_obj(*ldisc_data, GFP_KERNEL);
 	if (!ldisc_data)
 		return -ENOMEM;

diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c
index 1f69be8f51a2..94049a15f7b9 100644
--- a/drivers/acpi/ac.c
+++ b/drivers/acpi/ac.c
@@ -208,7 +208,7 @@ static int acpi_ac_probe(struct platform_device *pdev)
 	struct acpi_ac *ac;
 	int result;

-	ac = kzalloc(sizeof(struct acpi_ac), GFP_KERNEL);
+	ac = kzalloc_obj(struct acpi_ac, GFP_KERNEL);
 	if (!ac)
 		return -ENOMEM;

diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c
index 49539f7528c6..d9cd3f97aa00 100644
--- a/drivers/acpi/acpi_apd.c
+++ b/drivers/acpi/acpi_apd.c
@@ -202,7 +202,7 @@ static int acpi_apd_create_device(struct acpi_device *adev,
 		return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1;
 	}

-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return -ENOMEM;

diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
index c970792b11a4..c20bedff2c04 100644
--- a/drivers/acpi/acpi_configfs.c
+++ b/drivers/acpi/acpi_configfs.c
@@ -210,7 +210,7 @@ static struct config_item *acpi_table_make_item(struct config_group *group,
 {
 	struct acpi_table *table;

-	table = kzalloc(sizeof(*table), GFP_KERNEL);
+	table = kzalloc_obj(*table, GFP_KERNEL);
 	if (!table)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/acpi/acpi_ipmi.c b/drivers/acpi/acpi_ipmi.c
index 5fba4dab5d08..5ec5a841afce 100644
--- a/drivers/acpi/acpi_ipmi.c
+++ b/drivers/acpi/acpi_ipmi.c
@@ -117,7 +117,7 @@ ipmi_dev_alloc(int iface, struct device *dev, acpi_handle handle)
 	int err;
 	struct ipmi_user *user;

-	ipmi_device = kzalloc(sizeof(*ipmi_device), GFP_KERNEL);
+	ipmi_device = kzalloc_obj(*ipmi_device, GFP_KERNEL);
 	if (!ipmi_device)
 		return NULL;

@@ -197,7 +197,7 @@ static struct acpi_ipmi_msg *ipmi_msg_alloc(void)
 	if (!ipmi)
 		return NULL;

-	ipmi_msg = kzalloc(sizeof(struct acpi_ipmi_msg), GFP_KERNEL);
+	ipmi_msg = kzalloc_obj(struct acpi_ipmi_msg, GFP_KERNEL);
 	if (!ipmi_msg) {
 		acpi_ipmi_dev_put(ipmi);
 		return NULL;
diff --git a/drivers/acpi/acpi_lpat.c b/drivers/acpi/acpi_lpat.c
index 851f67c96097..b238f9f371dd 100644
--- a/drivers/acpi/acpi_lpat.c
+++ b/drivers/acpi/acpi_lpat.c
@@ -104,7 +104,7 @@ struct acpi_lpat_conversion_table *acpi_lpat_get_conversion_table(acpi_handle
 	    (obj_p->package.count % 2) || (obj_p->package.count < 4))
 		goto out;

-	lpat = kcalloc(obj_p->package.count, sizeof(int), GFP_KERNEL);
+	lpat = kzalloc_objs(int, obj_p->package.count, GFP_KERNEL);
 	if (!lpat)
 		goto out;

@@ -117,7 +117,7 @@ struct acpi_lpat_conversion_table *acpi_lpat_get_conversion_table(acpi_handle
 		lpat[i] = (s64)obj_e->integer.value;
 	}

-	lpat_table = kzalloc(sizeof(*lpat_table), GFP_KERNEL);
+	lpat_table = kzalloc_obj(*lpat_table, GFP_KERNEL);
 	if (!lpat_table) {
 		kfree(lpat);
 		goto out;
diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c
index d0c1a71007d0..f12a9766696b 100644
--- a/drivers/acpi/acpi_memhotplug.c
+++ b/drivers/acpi/acpi_memhotplug.c
@@ -80,7 +80,7 @@ acpi_memory_get_resource(struct acpi_resource *resource, void *context)
 		}
 	}

-	new = kzalloc(sizeof(struct acpi_memory_info), GFP_KERNEL);
+	new = kzalloc_obj(struct acpi_memory_info, GFP_KERNEL);
 	if (!new)
 		return AE_ERROR;

@@ -290,7 +290,7 @@ static int acpi_memory_device_add(struct acpi_device *device,
 	if (!device)
 		return -EINVAL;

-	mem_device = kzalloc(sizeof(struct acpi_memory_device), GFP_KERNEL);
+	mem_device = kzalloc_obj(struct acpi_memory_device, GFP_KERNEL);
 	if (!mem_device)
 		return -ENOMEM;

diff --git a/drivers/acpi/acpi_mrrm.c b/drivers/acpi/acpi_mrrm.c
index 6d69554c940e..df771e49333f 100644
--- a/drivers/acpi/acpi_mrrm.c
+++ b/drivers/acpi/acpi_mrrm.c
@@ -81,8 +81,8 @@ static __init int acpi_parse_mrrm(struct acpi_table_header *table)
 		return -EINVAL;
 	}

-	mrrm_mem_range_entry = kmalloc_array(mre_count, sizeof(*mrrm_mem_range_entry),
-					     GFP_KERNEL | __GFP_ZERO);
+	mrrm_mem_range_entry = kmalloc_objs(*mrrm_mem_range_entry, mre_count,
+					    GFP_KERNEL | __GFP_ZERO);
 	if (!mrrm_mem_range_entry)
 		return -ENOMEM;

@@ -161,7 +161,7 @@ static __init int add_boot_memory_ranges(void)
 	if (!pkobj)
 		return -ENOMEM;

-	kobjs = kcalloc(mrrm_mem_entry_num, sizeof(*kobjs), GFP_KERNEL);
+	kobjs = kzalloc_objs(*kobjs, mrrm_mem_entry_num, GFP_KERNEL);
 	if (!kobjs) {
 		kobject_put(pkobj);
 		return -ENOMEM;
diff --git a/drivers/acpi/acpi_pcc.c b/drivers/acpi/acpi_pcc.c
index e3f302b9dee5..6914071d640b 100644
--- a/drivers/acpi/acpi_pcc.c
+++ b/drivers/acpi/acpi_pcc.c
@@ -54,7 +54,7 @@ acpi_pcc_address_space_setup(acpi_handle region_handle, u32 function,
 	struct pcc_mbox_chan *pcc_chan;
 	acpi_status ret;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return AE_NO_MEMORY;

diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
index 0ec1afc744f5..3ea6d941aabd 100644
--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -145,7 +145,7 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
 		if (count > 0) {
 			struct resource_entry *rentry;

-			resources = kcalloc(count, sizeof(*resources), GFP_KERNEL);
+			resources = kzalloc_objs(*resources, count, GFP_KERNEL);
 			if (!resources) {
 				acpi_dev_free_resource_list(&resource_list);
 				return ERR_PTR(-ENOMEM);
diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
index 85096ce7b658..02a80803962c 100644
--- a/drivers/acpi/acpi_processor.c
+++ b/drivers/acpi/acpi_processor.c
@@ -428,7 +428,7 @@ static int acpi_processor_add(struct acpi_device *device,
 	if (!acpi_device_is_enabled(device))
 		return -ENODEV;

-	pr = kzalloc(sizeof(struct acpi_processor), GFP_KERNEL);
+	pr = kzalloc_obj(struct acpi_processor, GFP_KERNEL);
 	if (!pr)
 		return -ENOMEM;

diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
index 3d6e7306f29a..a2e07d946ce3 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -825,7 +825,7 @@ int acpi_video_get_levels(struct acpi_device *device,
 		goto out;
 	}

-	br = kzalloc(sizeof(*br), GFP_KERNEL);
+	br = kzalloc_obj(*br, GFP_KERNEL);
 	if (!br) {
 		result = -ENOMEM;
 		goto out;
@@ -836,9 +836,9 @@ int acpi_video_get_levels(struct acpi_device *device,
 	 * in order to account for buggy BIOS which don't export the first two
 	 * special levels (see below)
 	 */
-	br->levels = kmalloc_array(obj->package.count + ACPI_VIDEO_FIRST_LEVEL,
-				   sizeof(*br->levels),
-				   GFP_KERNEL);
+	br->levels = kmalloc_objs(*br->levels,
+				  obj->package.count + ACPI_VIDEO_FIRST_LEVEL,
+				  GFP_KERNEL);
 	if (!br->levels) {
 		result = -ENOMEM;
 		goto out_free;
@@ -1141,7 +1141,7 @@ static int acpi_video_bus_get_one_device(struct acpi_device *device, void *arg)
 	if (acpi_get_local_u64_address(device->handle, &device_id))
 		goto exit;

-	data = kzalloc(sizeof(struct acpi_video_device), GFP_KERNEL);
+	data = kzalloc_obj(struct acpi_video_device, GFP_KERNEL);
 	if (!data) {
 		dev_dbg(&device->dev, "Cannot attach\n");
 		return -ENOMEM;
@@ -1330,9 +1330,8 @@ static int acpi_video_device_enumerate(struct acpi_video_bus *video)
 	acpi_handle_debug(video->device->handle, "Found %d video heads in _DOD\n",
 			  dod->package.count);

-	active_list = kcalloc(1 + dod->package.count,
-			      sizeof(struct acpi_video_enumerated_device),
-			      GFP_KERNEL);
+	active_list = kzalloc_objs(struct acpi_video_enumerated_device,
+				   1 + dod->package.count, GFP_KERNEL);
 	if (!active_list) {
 		status = -ENOMEM;
 		goto out;
@@ -2004,7 +2003,7 @@ static int acpi_video_bus_probe(struct platform_device *pdev)
 			return -ENODEV;
 	}

-	video = kzalloc(sizeof(struct acpi_video_bus), GFP_KERNEL);
+	video = kzalloc_obj(struct acpi_video_bus, GFP_KERNEL);
 	if (!video)
 		return -ENOMEM;

diff --git a/drivers/acpi/acpi_watchdog.c b/drivers/acpi/acpi_watchdog.c
index 709993c535d1..7e22fc35ed6d 100644
--- a/drivers/acpi/acpi_watchdog.c
+++ b/drivers/acpi/acpi_watchdog.c
@@ -166,7 +166,7 @@ void __init acpi_watchdog_init(void)
 		}
 	}

-	resources = kcalloc(nresources, sizeof(*resources), GFP_KERNEL);
+	resources = kzalloc_objs(*resources, nresources, GFP_KERNEL);
 	if (!resources)
 		goto fail_free_resource_list;

diff --git a/drivers/acpi/apei/apei-base.c b/drivers/acpi/apei/apei-base.c
index 9c84f3da7c09..95b8483b9e98 100644
--- a/drivers/acpi/apei/apei-base.c
+++ b/drivers/acpi/apei/apei-base.c
@@ -316,7 +316,7 @@ static int apei_res_add(struct list_head *res_list,
 	if (res_ins)
 		list_add(&res_ins->list, res_list);
 	else {
-		res_ins = kmalloc(sizeof(*res_ins), GFP_KERNEL);
+		res_ins = kmalloc_obj(*res_ins, GFP_KERNEL);
 		if (!res_ins)
 			return -ENOMEM;
 		res_ins->start = start;
@@ -345,7 +345,7 @@ static int apei_res_sub(struct list_head *res_list1,
 				break;
 			} else if (res1->end > res2->end &&
 				   res1->start < res2->start) {
-				res = kmalloc(sizeof(*res), GFP_KERNEL);
+				res = kmalloc_obj(*res, GFP_KERNEL);
 				if (!res)
 					return -ENOMEM;
 				res->start = res2->end;
diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c
index f5bfdffe1e43..751697899a98 100644
--- a/drivers/acpi/apei/einj-core.c
+++ b/drivers/acpi/apei/einj-core.c
@@ -1021,7 +1021,8 @@ static bool setup_einjv2_component_files(void)
 {
 	char name[32];

-	syndrome_data = kcalloc(max_nr_components, sizeof(syndrome_data[0]), GFP_KERNEL);
+	syndrome_data = kzalloc_objs(syndrome_data[0], max_nr_components,
+				     GFP_KERNEL);
 	if (!syndrome_data)
 		return false;

diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
index f96aede5d9a3..442561637f88 100644
--- a/drivers/acpi/apei/ghes.c
+++ b/drivers/acpi/apei/ghes.c
@@ -272,7 +272,7 @@ static struct ghes *ghes_new(struct acpi_hest_generic *generic)
 	unsigned int error_block_length;
 	int rc;

-	ghes = kzalloc(sizeof(*ghes), GFP_KERNEL);
+	ghes = kzalloc_obj(*ghes, GFP_KERNEL);
 	if (!ghes)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/acpi/arm64/ffh.c b/drivers/acpi/arm64/ffh.c
index 877edc6557e9..d850af765ba1 100644
--- a/drivers/acpi/arm64/ffh.c
+++ b/drivers/acpi/arm64/ffh.c
@@ -33,7 +33,7 @@ int acpi_ffh_address_space_arch_setup(void *handler_ctxt, void **region_ctxt)
 		return -EOPNOTSUPP;
 	}

-	ffh_ctxt = kzalloc(sizeof(*ffh_ctxt), GFP_KERNEL);
+	ffh_ctxt = kzalloc_obj(*ffh_ctxt, GFP_KERNEL);
 	if (!ffh_ctxt)
 		return -ENOMEM;

diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index ed827b2fc437..8e74b4eaf9bd 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -56,7 +56,7 @@ static inline int iort_set_fwnode(struct acpi_iort_node *iort_node,
 {
 	struct iort_fwnode *np;

-	np = kzalloc(sizeof(struct iort_fwnode), GFP_ATOMIC);
+	np = kzalloc_obj(struct iort_fwnode, GFP_ATOMIC);

 	if (WARN_ON(!np))
 		return -ENOMEM;
@@ -165,7 +165,7 @@ int iort_register_domain_token(int trans_id, phys_addr_t base,
 {
 	struct iort_its_msi_chip *its_msi_chip;

-	its_msi_chip = kzalloc(sizeof(*its_msi_chip), GFP_KERNEL);
+	its_msi_chip = kzalloc_obj(*its_msi_chip, GFP_KERNEL);
 	if (!its_msi_chip)
 		return -ENOMEM;

@@ -938,7 +938,7 @@ static struct iommu_iort_rmr_data *iort_rmr_alloc(
 	u32 *sids_copy;
 	u64 addr = rmr_desc->base_address, size = rmr_desc->length;

-	rmr_data = kmalloc(sizeof(*rmr_data), GFP_KERNEL);
+	rmr_data = kmalloc_obj(*rmr_data, GFP_KERNEL);
 	if (!rmr_data)
 		return NULL;

@@ -1942,7 +1942,7 @@ static int __init iort_add_platform_device(struct acpi_iort_node *node,

 	count = ops->dev_count_resources(node);

-	r = kcalloc(count, sizeof(*r), GFP_KERNEL);
+	r = kzalloc_objs(*r, count, GFP_KERNEL);
 	if (!r) {
 		ret = -ENOMEM;
 		goto dev_put;
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c
index 7a06194d078b..b9929b6ef62d 100644
--- a/drivers/acpi/button.c
+++ b/drivers/acpi/button.c
@@ -544,7 +544,7 @@ static int acpi_button_probe(struct platform_device *pdev)
 	     lid_init_state == ACPI_BUTTON_LID_INIT_DISABLED)
 		return -ENODEV;

-	button = kzalloc(sizeof(struct acpi_button), GFP_KERNEL);
+	button = kzalloc_obj(struct acpi_button, GFP_KERNEL);
 	if (!button)
 		return -ENOMEM;

diff --git a/drivers/acpi/container.c b/drivers/acpi/container.c
index 5b7e3b9ae370..055ad5f4782d 100644
--- a/drivers/acpi/container.c
+++ b/drivers/acpi/container.c
@@ -52,7 +52,7 @@ static int container_device_attach(struct acpi_device *adev,
 	if (adev->flags.is_dock_station)
 		return 0;

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		return -ENOMEM;

diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
index 0e6ffb188fe7..d2e13252fce6 100644
--- a/drivers/acpi/cppc_acpi.c
+++ b/drivers/acpi/cppc_acpi.c
@@ -636,8 +636,8 @@ static int pcc_data_alloc(int pcc_ss_id)
 	if (pcc_data[pcc_ss_id]) {
 		pcc_data[pcc_ss_id]->refcount++;
 	} else {
-		pcc_data[pcc_ss_id] = kzalloc(sizeof(struct cppc_pcc_data),
-					      GFP_KERNEL);
+		pcc_data[pcc_ss_id] = kzalloc_obj(struct cppc_pcc_data,
+						  GFP_KERNEL);
 		if (!pcc_data[pcc_ss_id])
 			return -ENOMEM;
 		pcc_data[pcc_ss_id]->refcount++;
@@ -712,7 +712,7 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr)

 	out_obj = (union acpi_object *) output.pointer;

-	cpc_ptr = kzalloc(sizeof(struct cpc_desc), GFP_KERNEL);
+	cpc_ptr = kzalloc_obj(struct cpc_desc, GFP_KERNEL);
 	if (!cpc_ptr) {
 		ret = -ENOMEM;
 		goto out_buf_free;
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index 34affbda295e..e2239d4bb9df 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -73,7 +73,7 @@ static int add_dock_dependent_device(struct dock_station *ds,
 {
 	struct dock_dependent_device *dd;

-	dd = kzalloc(sizeof(*dd), GFP_KERNEL);
+	dd = kzalloc_obj(*dd, GFP_KERNEL);
 	if (!dd)
 		return -ENOMEM;

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index f7edc664e064..8da0971f2238 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -1100,7 +1100,7 @@ int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
 	if (!handle && !func)
 		return -EINVAL;

-	handler = kzalloc(sizeof(*handler), GFP_KERNEL);
+	handler = kzalloc_obj(*handler, GFP_KERNEL);
 	if (!handler)
 		return -ENOMEM;

@@ -1177,7 +1177,7 @@ static struct acpi_ec_query *acpi_ec_create_query(struct acpi_ec *ec, u8 *pval)
 	struct acpi_ec_query *q;
 	struct transaction *t;

-	q = kzalloc(sizeof (struct acpi_ec_query), GFP_KERNEL);
+	q = kzalloc_obj(struct acpi_ec_query, GFP_KERNEL);
 	if (!q)
 		return NULL;

@@ -1422,7 +1422,7 @@ static void acpi_ec_free(struct acpi_ec *ec)

 static struct acpi_ec *acpi_ec_alloc(void)
 {
-	struct acpi_ec *ec = kzalloc(sizeof(struct acpi_ec), GFP_KERNEL);
+	struct acpi_ec *ec = kzalloc_obj(struct acpi_ec, GFP_KERNEL);

 	if (!ec)
 		return NULL;
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c
index a194f30876c5..e96def7db715 100644
--- a/drivers/acpi/glue.c
+++ b/drivers/acpi/glue.c
@@ -246,7 +246,7 @@ int acpi_bind_one(struct device *dev, struct acpi_device *acpi_dev)

 	acpi_dev_get(acpi_dev);
 	get_device(dev);
-	physical_node = kzalloc(sizeof(*physical_node), GFP_KERNEL);
+	physical_node = kzalloc_obj(*physical_node, GFP_KERNEL);
 	if (!physical_node) {
 		retval = -ENOMEM;
 		goto err;
diff --git a/drivers/acpi/ioapic.c b/drivers/acpi/ioapic.c
index 6677955b4a8e..5a432899875b 100644
--- a/drivers/acpi/ioapic.c
+++ b/drivers/acpi/ioapic.c
@@ -120,7 +120,7 @@ static acpi_status handle_ioapic_add(acpi_handle handle, u32 lvl,
 		goto exit;
 	}

-	ioapic = kzalloc(sizeof(*ioapic), GFP_KERNEL);
+	ioapic = kzalloc_obj(*ioapic, GFP_KERNEL);
 	if (!ioapic) {
 		pr_err("cannot allocate memory for new IOAPIC\n");
 		goto exit;
diff --git a/drivers/acpi/mipi-disco-img.c b/drivers/acpi/mipi-disco-img.c
index 5b85989f96be..6351a66c555d 100644
--- a/drivers/acpi/mipi-disco-img.c
+++ b/drivers/acpi/mipi-disco-img.c
@@ -91,8 +91,8 @@ static acpi_status parse_csi2_resource(struct acpi_resource *res, void *context)
 		return AE_OK;
 	}

-	conn = kmalloc(struct_size(conn, remote_name, csi2_res_src_length + 1),
-		       GFP_KERNEL);
+	conn = kmalloc_flex(*conn, remote_name, csi2_res_src_length + 1,
+			    GFP_KERNEL);
 	if (!conn)
 		return AE_OK;

@@ -111,7 +111,7 @@ static struct crs_csi2 *acpi_mipi_add_crs_csi2(acpi_handle handle,
 {
 	struct crs_csi2 *csi2;

-	csi2 = kzalloc(sizeof(*csi2), GFP_KERNEL);
+	csi2 = kzalloc_obj(*csi2, GFP_KERNEL);
 	if (!csi2)
 		return NULL;

diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
index e19aba02b800..b59dcbff25c1 100644
--- a/drivers/acpi/nfit/core.c
+++ b/drivers/acpi/nfit/core.c
@@ -2271,9 +2271,9 @@ static int acpi_nfit_init_interleave_set(struct acpi_nfit_desc *acpi_desc,
 {
 	u16 nr = ndr_desc->num_mappings;
 	struct nfit_set_info2 *info2 __free(kfree) =
-		kcalloc(nr, sizeof(*info2), GFP_KERNEL);
+		kzalloc_objs(*info2, nr, GFP_KERNEL);
 	struct nfit_set_info *info __free(kfree) =
-		kcalloc(nr, sizeof(*info), GFP_KERNEL);
+		kzalloc_objs(*info, nr, GFP_KERNEL);
 	struct device *dev = acpi_desc->dev;
 	struct nd_interleave_set *nd_set;
 	int i;
diff --git a/drivers/acpi/numa/hmat.c b/drivers/acpi/numa/hmat.c
index 77a81627aaef..3f68ba64537d 100644
--- a/drivers/acpi/numa/hmat.c
+++ b/drivers/acpi/numa/hmat.c
@@ -202,7 +202,7 @@ static __init void alloc_memory_initiator(unsigned int cpu_pxm)
 	if (initiator)
 		return;

-	initiator = kzalloc(sizeof(*initiator), GFP_KERNEL);
+	initiator = kzalloc_obj(*initiator, GFP_KERNEL);
 	if (!initiator)
 		return;

@@ -217,7 +217,7 @@ static __init struct memory_target *alloc_target(unsigned int mem_pxm)

 	target = find_mem_target(mem_pxm);
 	if (!target) {
-		target = kzalloc(sizeof(*target), GFP_KERNEL);
+		target = kzalloc_obj(*target, GFP_KERNEL);
 		if (!target)
 			return NULL;
 		target->memory_pxm = mem_pxm;
@@ -371,7 +371,7 @@ static __init void hmat_add_locality(struct acpi_hmat_locality *hmat_loc)
 {
 	struct memory_locality *loc;

-	loc = kzalloc(sizeof(*loc), GFP_KERNEL);
+	loc = kzalloc_obj(*loc, GFP_KERNEL);
 	if (!loc) {
 		pr_notice_once("Failed to allocate HMAT locality\n");
 		return;
@@ -502,7 +502,7 @@ static __init int hmat_parse_cache(union acpi_subtable_headers *header,
 	if (!target)
 		return 0;

-	tcache = kzalloc(sizeof(*tcache), GFP_KERNEL);
+	tcache = kzalloc_obj(*tcache, GFP_KERNEL);
 	if (!tcache) {
 		pr_notice_once("Failed to allocate HMAT cache info\n");
 		return 0;
diff --git a/drivers/acpi/nvs.c b/drivers/acpi/nvs.c
index a2b11069e792..354783ede8f1 100644
--- a/drivers/acpi/nvs.c
+++ b/drivers/acpi/nvs.c
@@ -39,7 +39,7 @@ int acpi_nvs_register(__u64 start, __u64 size)
 {
 	struct nvs_region *region;

-	region = kmalloc(sizeof(*region), GFP_KERNEL);
+	region = kmalloc_obj(*region, GFP_KERNEL);
 	if (!region)
 		return -ENOMEM;
 	region->phys_start = start;
@@ -102,7 +102,7 @@ static int suspend_nvs_register(unsigned long start, unsigned long size)
 	while (size > 0) {
 		unsigned int nr_bytes;

-		entry = kzalloc(sizeof(struct nvs_page), GFP_KERNEL);
+		entry = kzalloc_obj(struct nvs_page, GFP_KERNEL);
 		if (!entry)
 			goto Error;

diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index 05393a7315fe..0fa12dd40840 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -344,7 +344,7 @@ void __iomem __ref
 		goto out;
 	}

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map) {
 		mutex_unlock(&acpi_ioremap_lock);
 		return NULL;
@@ -1117,7 +1117,7 @@ acpi_status acpi_os_execute(acpi_execute_type type,
 	 * having a static work_struct.
 	 */

-	dpc = kzalloc(sizeof(struct acpi_os_dpc), GFP_ATOMIC);
+	dpc = kzalloc_obj(struct acpi_os_dpc, GFP_ATOMIC);
 	if (!dpc)
 		return AE_NO_MEMORY;

@@ -1197,7 +1197,7 @@ acpi_status acpi_hotplug_schedule(struct acpi_device *adev, u32 src)
 			  "Scheduling hotplug event %u for deferred handling\n",
 			   src);

-	hpw = kmalloc(sizeof(*hpw), GFP_KERNEL);
+	hpw = kmalloc_obj(*hpw, GFP_KERNEL);
 	if (!hpw)
 		return AE_NO_MEMORY;

diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c
index c416942ff3e2..5a4169db5ea6 100644
--- a/drivers/acpi/pci_irq.c
+++ b/drivers/acpi/pci_irq.c
@@ -147,7 +147,7 @@ static int acpi_pci_irq_check_entry(acpi_handle handle, struct pci_dev *dev,
 	    prt->pin + 1 != pin)
 		return -ENODEV;

-	entry = kzalloc(sizeof(struct acpi_prt_entry), GFP_KERNEL);
+	entry = kzalloc_obj(struct acpi_prt_entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
index b91b039a3d20..e3b03237fa57 100644
--- a/drivers/acpi/pci_link.c
+++ b/drivers/acpi/pci_link.c
@@ -720,7 +720,7 @@ static int acpi_pci_link_add(struct acpi_device *device,
 	int result;
 	int i;

-	link = kzalloc(sizeof(struct acpi_pci_link), GFP_KERNEL);
+	link = kzalloc_obj(struct acpi_pci_link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;

diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
index 58e10a980114..99a50e9c12dd 100644
--- a/drivers/acpi/pci_mcfg.c
+++ b/drivers/acpi/pci_mcfg.c
@@ -304,7 +304,7 @@ static __init int pci_mcfg_parse(struct acpi_table_header *header)
 	mcfg = (struct acpi_table_mcfg *)header;
 	mptr = (struct acpi_mcfg_allocation *) &mcfg[1];

-	arr = kcalloc(n, sizeof(*arr), GFP_KERNEL);
+	arr = kzalloc_objs(*arr, n, GFP_KERNEL);
 	if (!arr)
 		return -ENOMEM;

diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index 9d7f85dadc48..bd2525fcda8e 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -648,7 +648,7 @@ static int acpi_pci_root_add(struct acpi_device *device,
 	bool hotadd = system_state == SYSTEM_RUNNING;
 	const char *acpi_hid;

-	root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL);
+	root = kzalloc_obj(struct acpi_pci_root, GFP_KERNEL);
 	if (!root)
 		return -ENOMEM;

diff --git a/drivers/acpi/pci_slot.c b/drivers/acpi/pci_slot.c
index 15234b65ea22..031d00a4a75f 100644
--- a/drivers/acpi/pci_slot.c
+++ b/drivers/acpi/pci_slot.c
@@ -104,7 +104,7 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
 			return AE_OK;
 	}

-	slot = kmalloc(sizeof(*slot), GFP_KERNEL);
+	slot = kmalloc_obj(*slot, GFP_KERNEL);
 	if (!slot)
 		return AE_OK;

diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index ea04a8c69215..bd4d332520bb 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -560,8 +560,8 @@ struct device *platform_profile_register(struct device *dev, const char *name,
 	    !ops->profile_set || !ops->probe))
 		return ERR_PTR(-EINVAL);

-	struct platform_profile_handler *pprof __free(kfree) = kzalloc(
-		sizeof(*pprof), GFP_KERNEL);
+	struct platform_profile_handler *pprof __free(kfree) = kzalloc_obj(*pprof,
+									   GFP_KERNEL);
 	if (!pprof)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
index 7da5ae5594a7..e377446b5cce 100644
--- a/drivers/acpi/power.c
+++ b/drivers/acpi/power.c
@@ -104,7 +104,7 @@ static int acpi_power_resources_list_add(acpi_handle handle,
 	if (!resource || !list)
 		return -EINVAL;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -265,7 +265,7 @@ acpi_power_resource_add_dependent(struct acpi_power_resource *resource,
 			goto unlock;
 	}

-	dep = kzalloc(sizeof(*dep), GFP_KERNEL);
+	dep = kzalloc_obj(*dep, GFP_KERNEL);
 	if (!dep) {
 		ret = -ENOMEM;
 		goto unlock;
@@ -945,7 +945,7 @@ struct acpi_device *acpi_add_power_resource(acpi_handle handle)
 	if (device)
 		return device;

-	resource = kzalloc(sizeof(*resource), GFP_KERNEL);
+	resource = kzalloc_obj(*resource, GFP_KERNEL);
 	if (!resource)
 		return NULL;

diff --git a/drivers/acpi/prmt.c b/drivers/acpi/prmt.c
index 7b8b5d2015ec..5d4b0f7904d6 100644
--- a/drivers/acpi/prmt.c
+++ b/drivers/acpi/prmt.c
@@ -135,7 +135,7 @@ acpi_parse_prmt(union acpi_subtable_headers *header, const unsigned long end)
 			goto parse_prmt_out4;
 		memmove(tm->mmio_info, temp_mmio, mmio_range_size);
 	} else {
-		tm->mmio_info = kmalloc(sizeof(*tm->mmio_info), GFP_KERNEL);
+		tm->mmio_info = kmalloc_obj(*tm->mmio_info, GFP_KERNEL);
 		if (!tm->mmio_info)
 			goto parse_prmt_out2;

diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 81f372c64074..aa7020d71b55 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -910,7 +910,7 @@ static int acpi_processor_evaluate_lpi(acpi_handle handle,
 		goto end;
 	}

-	lpi_state = kcalloc(pkg_count, sizeof(*lpi_state), GFP_KERNEL);
+	lpi_state = kzalloc_objs(*lpi_state, pkg_count, GFP_KERNEL);
 	if (!lpi_state) {
 		ret = -ENOMEM;
 		goto end;
@@ -1417,7 +1417,7 @@ void acpi_processor_power_init(struct acpi_processor *pr)
 	if (!pr->flags.power)
 		return;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return;

diff --git a/drivers/acpi/processor_pdc.c b/drivers/acpi/processor_pdc.c
index 994091bd52de..e174d144f1d9 100644
--- a/drivers/acpi/processor_pdc.c
+++ b/drivers/acpi/processor_pdc.c
@@ -32,11 +32,11 @@ static struct acpi_object_list *acpi_processor_alloc_pdc(void)
 	u32 *buf;

 	/* allocate and initialize pdc. It will be used later. */
-	obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
+	obj_list = kmalloc_obj(struct acpi_object_list, GFP_KERNEL);
 	if (!obj_list)
 		goto out;

-	obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
+	obj = kmalloc_obj(union acpi_object, GFP_KERNEL);
 	if (!obj) {
 		kfree(obj_list);
 		goto out;
diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c
index 8972446b7162..f1c7c2ad5094 100644
--- a/drivers/acpi/processor_perflib.c
+++ b/drivers/acpi/processor_perflib.c
@@ -341,9 +341,8 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)

 	pr->performance->state_count = pss->package.count;
 	pr->performance->states =
-	    kmalloc_array(pss->package.count,
-			  sizeof(struct acpi_processor_px),
-			  GFP_KERNEL);
+	    kmalloc_objs(struct acpi_processor_px, pss->package.count,
+			 GFP_KERNEL);
 	if (!pr->performance->states) {
 		result = -ENOMEM;
 		goto end;
diff --git a/drivers/acpi/processor_throttling.c b/drivers/acpi/processor_throttling.c
index f9c2bc1d4a3a..2d398ae5c662 100644
--- a/drivers/acpi/processor_throttling.c
+++ b/drivers/acpi/processor_throttling.c
@@ -512,9 +512,8 @@ static int acpi_processor_get_throttling_states(struct acpi_processor *pr)

 	pr->throttling.state_count = tss->package.count;
 	pr->throttling.states_tss =
-	    kmalloc_array(tss->package.count,
-			  sizeof(struct acpi_processor_tx_tss),
-			  GFP_KERNEL);
+	    kmalloc_objs(struct acpi_processor_tx_tss, tss->package.count,
+			 GFP_KERNEL);
 	if (!pr->throttling.states_tss) {
 		result = -ENOMEM;
 		goto end;
diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 18e90067d567..710dccae595b 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -89,7 +89,7 @@ static bool acpi_nondev_subnode_extract(union acpi_object *desc,
 	if (acpi_graph_ignore_port(handle))
 		return false;

-	dn = kzalloc(sizeof(*dn), GFP_KERNEL);
+	dn = kzalloc_obj(*dn, GFP_KERNEL);
 	if (!dn)
 		return false;

@@ -383,7 +383,7 @@ acpi_data_add_props(struct acpi_device_data *data, const guid_t *guid,
 {
 	struct acpi_device_properties *props;

-	props = kzalloc(sizeof(*props), GFP_KERNEL);
+	props = kzalloc_obj(*props, GFP_KERNEL);
 	if (props) {
 		INIT_LIST_HEAD(&props->list);
 		props->guid = guid;
diff --git a/drivers/acpi/riscv/irq.c b/drivers/acpi/riscv/irq.c
index d9a2154d6c6a..f3cef56ff59e 100644
--- a/drivers/acpi/riscv/irq.c
+++ b/drivers/acpi/riscv/irq.c
@@ -136,7 +136,7 @@ static int __init riscv_acpi_register_ext_intc(u32 gsi_base, u32 nr_irqs, u32 nr
 {
 	struct riscv_ext_intc_list *ext_intc_element, *node, *prev;

-	ext_intc_element = kzalloc(sizeof(*ext_intc_element), GFP_KERNEL);
+	ext_intc_element = kzalloc_obj(*ext_intc_element, GFP_KERNEL);
 	if (!ext_intc_element)
 		return -ENOMEM;

@@ -342,7 +342,8 @@ static u32 riscv_acpi_add_prt_dep(acpi_handle handle)
 		if (entry->source[0]) {
 			acpi_get_handle(handle, entry->source, &link_handle);
 			dep_devices.count = 1;
-			dep_devices.handles = kcalloc(1, sizeof(*dep_devices.handles), GFP_KERNEL);
+			dep_devices.handles = kzalloc_objs(*dep_devices.handles,
+							   1, GFP_KERNEL);
 			if (!dep_devices.handles) {
 				acpi_handle_err(handle, "failed to allocate memory\n");
 				continue;
@@ -353,7 +354,8 @@ static u32 riscv_acpi_add_prt_dep(acpi_handle handle)
 		} else {
 			gsi_handle = riscv_acpi_get_gsi_handle(entry->source_index);
 			dep_devices.count = 1;
-			dep_devices.handles = kcalloc(1, sizeof(*dep_devices.handles), GFP_KERNEL);
+			dep_devices.handles = kzalloc_objs(*dep_devices.handles,
+							   1, GFP_KERNEL);
 			if (!dep_devices.handles) {
 				acpi_handle_err(handle, "failed to allocate memory\n");
 				continue;
@@ -382,7 +384,8 @@ static u32 riscv_acpi_add_irq_dep(acpi_handle handle)
 	     riscv_acpi_irq_get_dep(handle, i, &gsi_handle);
 	     i++) {
 		dep_devices.count = 1;
-		dep_devices.handles = kcalloc(1, sizeof(*dep_devices.handles), GFP_KERNEL);
+		dep_devices.handles = kzalloc_objs(*dep_devices.handles, 1,
+						   GFP_KERNEL);
 		if (!dep_devices.handles) {
 			acpi_handle_err(handle, "failed to allocate memory\n");
 			continue;
diff --git a/drivers/acpi/riscv/rimt.c b/drivers/acpi/riscv/rimt.c
index 7f423405e5ef..229c4a0d47a3 100644
--- a/drivers/acpi/riscv/rimt.c
+++ b/drivers/acpi/riscv/rimt.c
@@ -45,7 +45,7 @@ static int rimt_set_fwnode(struct acpi_rimt_node *rimt_node,
 {
 	struct rimt_fwnode *np;

-	np = kzalloc(sizeof(*np), GFP_ATOMIC);
+	np = kzalloc_obj(*np, GFP_ATOMIC);

 	if (WARN_ON(!np))
 		return -ENOMEM;
diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c
index 85160e475c97..bcbd02d665d5 100644
--- a/drivers/acpi/sbs.c
+++ b/drivers/acpi/sbs.c
@@ -636,7 +636,7 @@ static int acpi_sbs_probe(struct platform_device *pdev)
 	int result = 0;
 	int id;

-	sbs = kzalloc(sizeof(struct acpi_sbs), GFP_KERNEL);
+	sbs = kzalloc_obj(struct acpi_sbs, GFP_KERNEL);
 	if (!sbs) {
 		result = -ENOMEM;
 		goto end;
diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c
index cb60d1d52e3e..969c1da7a015 100644
--- a/drivers/acpi/sbshc.c
+++ b/drivers/acpi/sbshc.c
@@ -254,7 +254,7 @@ static int acpi_smbus_hc_probe(struct platform_device *pdev)
 	strscpy(acpi_device_name(device), ACPI_SMB_HC_DEVICE_NAME);
 	strscpy(acpi_device_class(device), ACPI_SMB_HC_CLASS);

-	hc = kzalloc(sizeof(struct acpi_smb_hc), GFP_KERNEL);
+	hc = kzalloc_obj(struct acpi_smb_hc, GFP_KERNEL);
 	if (!hc)
 		return -ENOMEM;
 	mutex_init(&hc->lock);
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 565a84a7d7bc..490242bf161b 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -757,8 +757,8 @@ int acpi_device_add(struct acpi_device *device)
 		if (result)
 			goto err_unlock;
 	} else {
-		acpi_device_bus_id = kzalloc(sizeof(*acpi_device_bus_id),
-					     GFP_KERNEL);
+		acpi_device_bus_id = kzalloc_obj(*acpi_device_bus_id,
+						 GFP_KERNEL);
 		if (!acpi_device_bus_id) {
 			result = -ENOMEM;
 			goto err_unlock;
@@ -1330,7 +1330,7 @@ static void acpi_add_id(struct acpi_device_pnp *pnp, const char *dev_id)
 {
 	struct acpi_hardware_id *id;

-	id = kmalloc(sizeof(*id), GFP_KERNEL);
+	id = kmalloc_obj(*id, GFP_KERNEL);
 	if (!id)
 		return;

@@ -1568,7 +1568,7 @@ int acpi_dma_get_range(struct device *dev, const struct bus_dma_region **map)

 	ret = acpi_dev_get_dma_resources(adev, &list);
 	if (ret > 0) {
-		r = kcalloc(ret + 1, sizeof(*r), GFP_KERNEL);
+		r = kzalloc_objs(*r, ret + 1, GFP_KERNEL);
 		if (!r) {
 			ret = -ENOMEM;
 			goto out;
@@ -1863,7 +1863,7 @@ static int acpi_add_single_object(struct acpi_device **child,
 	bool release_dep_lock = false;
 	int result;

-	device = kzalloc(sizeof(struct acpi_device), GFP_KERNEL);
+	device = kzalloc_obj(struct acpi_device, GFP_KERNEL);
 	if (!device)
 		return -ENOMEM;

@@ -2028,7 +2028,7 @@ int acpi_scan_add_dep(acpi_handle handle, struct acpi_handle_list *dep_devices)
 		if (skip)
 			continue;

-		dep = kzalloc(sizeof(*dep), GFP_KERNEL);
+		dep = kzalloc_obj(*dep, GFP_KERNEL);
 		if (!dep)
 			continue;

@@ -2225,7 +2225,7 @@ static void acpi_default_enumeration(struct acpi_device *device)
 		 * other device objects have been processed and PCI has claimed
 		 * BARs in case there are resource conflicts.
 		 */
-		sd = kmalloc(sizeof(*sd), GFP_KERNEL);
+		sd = kmalloc_obj(*sd, GFP_KERNEL);
 		if (sd) {
 			sd->adev = device;
 			list_add_tail(&sd->node, &acpi_scan_system_dev_list);
@@ -2899,7 +2899,7 @@ void acpi_scan_table_notify(void)
 	if (!acpi_scan_initialized)
 		return;

-	work = kmalloc(sizeof(*work), GFP_KERNEL);
+	work = kmalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return;

diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
index 1bd2f555e673..44ea37f998e6 100644
--- a/drivers/acpi/sysfs.c
+++ b/drivers/acpi/sysfs.c
@@ -385,7 +385,7 @@ acpi_status acpi_sysfs_table_handler(u32 event, void *table, void *context)

 	switch (event) {
 	case ACPI_TABLE_EVENT_INSTALL:
-		table_attr = kzalloc(sizeof(*table_attr), GFP_KERNEL);
+		table_attr = kzalloc_obj(*table_attr, GFP_KERNEL);
 		if (!table_attr)
 			return AE_NO_MEMORY;

@@ -491,7 +491,7 @@ static int acpi_table_data_init(struct acpi_table_header *th)

 	for (i = 0; i < NUM_ACPI_DATA_OBJS; i++) {
 		if (ACPI_COMPARE_NAMESEG(th->signature, acpi_data_objs[i].name)) {
-			data_attr = kzalloc(sizeof(*data_attr), GFP_KERNEL);
+			data_attr = kzalloc_obj(*data_attr, GFP_KERNEL);
 			if (!data_attr)
 				return -ENOMEM;
 			sysfs_attr_init(&data_attr->attr.attr);
@@ -532,7 +532,7 @@ static int acpi_tables_sysfs_init(void)
 		if (ACPI_FAILURE(status))
 			continue;

-		table_attr = kzalloc(sizeof(*table_attr), GFP_KERNEL);
+		table_attr = kzalloc_obj(*table_attr, GFP_KERNEL);
 		if (!table_attr)
 			return -ENOMEM;

@@ -864,11 +864,11 @@ void acpi_irq_stats_init(void)
 	num_gpes = acpi_current_gpe_count;
 	num_counters = num_gpes + ACPI_NUM_FIXED_EVENTS + NUM_COUNTERS_EXTRA;

-	all_attrs = kcalloc(num_counters + 1, sizeof(*all_attrs), GFP_KERNEL);
+	all_attrs = kzalloc_objs(*all_attrs, num_counters + 1, GFP_KERNEL);
 	if (all_attrs == NULL)
 		return;

-	all_counters = kcalloc(num_counters, sizeof(*all_counters), GFP_KERNEL);
+	all_counters = kzalloc_objs(*all_counters, num_counters, GFP_KERNEL);
 	if (all_counters == NULL)
 		goto fail;

@@ -876,7 +876,7 @@ void acpi_irq_stats_init(void)
 	if (ACPI_FAILURE(status))
 		goto fail;

-	counter_attrs = kcalloc(num_counters, sizeof(*counter_attrs), GFP_KERNEL);
+	counter_attrs = kzalloc_objs(*counter_attrs, num_counters, GFP_KERNEL);
 	if (counter_attrs == NULL)
 		goto fail;

diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index e9d3ab18b404..b2a1e1773840 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -792,7 +792,7 @@ static int acpi_thermal_probe(struct platform_device *pdev)
 	if (!device)
 		return -EINVAL;

-	tz = kzalloc(sizeof(struct acpi_thermal), GFP_KERNEL);
+	tz = kzalloc_obj(struct acpi_thermal, GFP_KERNEL);
 	if (!tz)
 		return -ENOMEM;

diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index 526563a0d188..67b9a17e33ec 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -365,7 +365,7 @@ bool acpi_evaluate_reference(acpi_handle handle, acpi_string pathname,
 		goto err;

 	list->count = package->package.count;
-	list->handles = kcalloc(list->count, sizeof(*list->handles), GFP_KERNEL);
+	list->handles = kzalloc_objs(*list->handles, list->count, GFP_KERNEL);
 	if (!list->handles)
 		goto err_clear;

diff --git a/drivers/acpi/viot.c b/drivers/acpi/viot.c
index c13a20365c2c..26fe65dd4a6c 100644
--- a/drivers/acpi/viot.c
+++ b/drivers/acpi/viot.c
@@ -142,7 +142,7 @@ static struct viot_iommu * __init viot_get_iommu(unsigned int offset)
 	if (viot_check_bounds(hdr))
 		return NULL;

-	viommu = kzalloc(sizeof(*viommu), GFP_KERNEL);
+	viommu = kzalloc_obj(*viommu, GFP_KERNEL);
 	if (!viommu)
 		return NULL;

@@ -193,7 +193,7 @@ static int __init viot_parse_node(const struct acpi_viot_header *hdr)
 	    hdr->type == ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO)
 		return 0;

-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;

diff --git a/drivers/acpi/wakeup.c b/drivers/acpi/wakeup.c
index ff6dc957bc11..f82e6f3127b6 100644
--- a/drivers/acpi/wakeup.c
+++ b/drivers/acpi/wakeup.c
@@ -120,7 +120,7 @@ int acpi_register_wakeup_handler(int wake_irq, bool (*wakeup)(void *context),
 	if (!acpi_sci_irq_valid() || wake_irq != acpi_sci_irq)
 		return 0;

-	handler = kmalloc(sizeof(*handler), GFP_KERNEL);
+	handler = kmalloc_obj(*handler, GFP_KERNEL);
 	if (!handler)
 		return -ENOMEM;

diff --git a/drivers/acpi/x86/lpss.c b/drivers/acpi/x86/lpss.c
index 1dcb80ab0d23..3dfb8c2400f5 100644
--- a/drivers/acpi/x86/lpss.c
+++ b/drivers/acpi/x86/lpss.c
@@ -623,7 +623,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
 	if (!dev_desc)
 		return -EINVAL;

-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return -ENOMEM;

diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
index b43d10f986a2..82075543a1ed 100644
--- a/drivers/acpi/x86/s2idle.c
+++ b/drivers/acpi/x86/s2idle.c
@@ -129,9 +129,9 @@ static void lpi_device_get_constraints_amd(void)
 				goto free_acpi_buffer;
 			}

-			lpi_constraints_table = kcalloc(package->package.count,
-							sizeof(*lpi_constraints_table),
-							GFP_KERNEL);
+			lpi_constraints_table = kzalloc_objs(*lpi_constraints_table,
+							     package->package.count,
+							     GFP_KERNEL);

 			if (!lpi_constraints_table)
 				goto free_acpi_buffer;
@@ -209,9 +209,8 @@ static void lpi_device_get_constraints(void)
 	if (!out_obj)
 		return;

-	lpi_constraints_table = kcalloc(out_obj->package.count,
-					sizeof(*lpi_constraints_table),
-					GFP_KERNEL);
+	lpi_constraints_table = kzalloc_objs(*lpi_constraints_table,
+					     out_obj->package.count, GFP_KERNEL);
 	if (!lpi_constraints_table)
 		goto free_acpi_buffer;

diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 952c45ca6e48..9d3d4607c5f2 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -611,7 +611,7 @@ struct amba_device *amba_device_alloc(const char *name, resource_size_t base,
 {
 	struct amba_device *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev) {
 		amba_device_initialize(dev, name);
 		dev->res.start = base;
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index f43edb11bef4..3cb7798873bb 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -795,7 +795,7 @@ static struct binder_node *binder_new_node(struct binder_proc *proc,
 					   struct flat_binder_object *fp)
 {
 	struct binder_node *node;
-	struct binder_node *new_node = kzalloc(sizeof(*node), GFP_KERNEL);
+	struct binder_node *new_node = kzalloc_obj(*node, GFP_KERNEL);

 	if (!new_node)
 		return NULL;
@@ -1469,7 +1469,7 @@ static int binder_inc_ref_for_node(struct binder_proc *proc,
 	ref = binder_get_ref_for_node_olocked(proc, node, NULL);
 	if (!ref) {
 		binder_proc_unlock(proc);
-		new_ref = kzalloc(sizeof(*ref), GFP_KERNEL);
+		new_ref = kzalloc_obj(*ref, GFP_KERNEL);
 		if (!new_ref)
 			return -ENOMEM;
 		binder_proc_lock(proc);
@@ -2009,7 +2009,7 @@ static void binder_deferred_fd_close(int fd)
 {
 	struct binder_task_work_cb *twcb;

-	twcb = kzalloc(sizeof(*twcb), GFP_KERNEL);
+	twcb = kzalloc_obj(*twcb, GFP_KERNEL);
 	if (!twcb)
 		return;
 	init_task_work(&twcb->twork, binder_do_fd_close);
@@ -2386,7 +2386,7 @@ static int binder_translate_fd(u32 fd, binder_size_t fd_offset,
 	 * of the fd in the target needs to be done from a
 	 * target thread.
 	 */
-	fixup = kzalloc(sizeof(*fixup), GFP_KERNEL);
+	fixup = kzalloc_obj(*fixup, GFP_KERNEL);
 	if (!fixup) {
 		ret = -ENOMEM;
 		goto err_alloc;
@@ -2579,7 +2579,7 @@ static void binder_cleanup_deferred_txn_lists(struct list_head *sgc_head,
 static int binder_defer_copy(struct list_head *sgc_head, binder_size_t offset,
 			     const void __user *sender_uaddr, size_t length)
 {
-	struct binder_sg_copy *bc = kzalloc(sizeof(*bc), GFP_KERNEL);
+	struct binder_sg_copy *bc = kzalloc_obj(*bc, GFP_KERNEL);

 	if (!bc)
 		return -ENOMEM;
@@ -2622,7 +2622,7 @@ static int binder_defer_copy(struct list_head *sgc_head, binder_size_t offset,
 static int binder_add_fixup(struct list_head *pf_head, binder_size_t offset,
 			    binder_uintptr_t fixup, size_t skip_size)
 {
-	struct binder_ptr_fixup *pf = kzalloc(sizeof(*pf), GFP_KERNEL);
+	struct binder_ptr_fixup *pf = kzalloc_obj(*pf, GFP_KERNEL);
 	struct binder_ptr_fixup *tmppf;

 	if (!pf)
@@ -3101,7 +3101,7 @@ static void binder_transaction(struct binder_proc *proc,
 	binder_set_extended_error(&thread->ee, t_debug_id, BR_OK, 0);
 	binder_inner_proc_unlock(proc);

-	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc_obj(*t, GFP_KERNEL);
 	if (!t) {
 		binder_txn_error("%d:%d cannot allocate transaction\n",
 				 thread->pid, proc->pid);
@@ -3320,7 +3320,7 @@ static void binder_transaction(struct binder_proc *proc,
 		e->to_thread = target_thread->pid;
 	e->to_proc = target_proc->pid;

-	tcomplete = kzalloc(sizeof(*tcomplete), GFP_KERNEL);
+	tcomplete = kzalloc_obj(*tcomplete, GFP_KERNEL);
 	if (tcomplete == NULL) {
 		binder_txn_error("%d:%d cannot allocate work for transaction\n",
 			thread->pid, proc->pid);
@@ -3926,7 +3926,7 @@ binder_request_freeze_notification(struct binder_proc *proc,
 	struct binder_ref_freeze *freeze;
 	struct binder_ref *ref;

-	freeze = kzalloc(sizeof(*freeze), GFP_KERNEL);
+	freeze = kzalloc_obj(*freeze, GFP_KERNEL);
 	if (!freeze)
 		return -ENOMEM;
 	binder_proc_lock(proc);
@@ -4394,7 +4394,7 @@ static int binder_thread_write(struct binder_proc *proc,
 				 * Allocate memory for death notification
 				 * before taking lock
 				 */
-				death = kzalloc(sizeof(*death), GFP_KERNEL);
+				death = kzalloc_obj(*death, GFP_KERNEL);
 				if (death == NULL) {
 					WARN_ON(thread->return_error.cmd !=
 						BR_OK);
@@ -5293,7 +5293,7 @@ static struct binder_thread *binder_get_thread(struct binder_proc *proc)
 	thread = binder_get_thread_ilocked(proc, NULL);
 	binder_inner_proc_unlock(proc);
 	if (!thread) {
-		new_thread = kzalloc(sizeof(*thread), GFP_KERNEL);
+		new_thread = kzalloc_obj(*thread, GFP_KERNEL);
 		if (new_thread == NULL)
 			return NULL;
 		binder_inner_proc_lock(proc);
@@ -5902,9 +5902,8 @@ static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 			goto err;
 		}

-		target_procs = kcalloc(target_procs_count,
-				       sizeof(struct binder_proc *),
-				       GFP_KERNEL);
+		target_procs = kzalloc_objs(struct binder_proc *,
+					    target_procs_count, GFP_KERNEL);

 		if (!target_procs) {
 			mutex_unlock(&binder_procs_lock);
@@ -6061,7 +6060,7 @@ static int binder_open(struct inode *nodp, struct file *filp)
 	binder_debug(BINDER_DEBUG_OPEN_CLOSE, "%s: %d:%d\n", __func__,
 		     current->tgid, current->pid);

-	proc = kzalloc(sizeof(*proc), GFP_KERNEL);
+	proc = kzalloc_obj(*proc, GFP_KERNEL);
 	if (proc == NULL)
 		return -ENOMEM;

@@ -7065,7 +7064,7 @@ static int __init init_binder_device(const char *name)
 	int ret;
 	struct binder_device *binder_device;

-	binder_device = kzalloc(sizeof(*binder_device), GFP_KERNEL);
+	binder_device = kzalloc_obj(*binder_device, GFP_KERNEL);
 	if (!binder_device)
 		return -ENOMEM;

diff --git a/drivers/android/binder/rust_binderfs.c b/drivers/android/binder/rust_binderfs.c
index 5c1319d80036..2b640f6eddc2 100644
--- a/drivers/android/binder/rust_binderfs.c
+++ b/drivers/android/binder/rust_binderfs.c
@@ -145,7 +145,7 @@ static int binderfs_binder_device_create(struct inode *ref_inode,
 	mutex_unlock(&binderfs_minors_mutex);

 	ret = -ENOMEM;
-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		goto err;

@@ -387,7 +387,7 @@ static int binderfs_binder_ctl_create(struct super_block *sb)
 	bool use_reserve = true;
 #endif

-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		return -ENOMEM;

@@ -642,7 +642,7 @@ static int binderfs_fill_super(struct super_block *sb, struct fs_context *fc)
 	sb->s_op = &binderfs_super_ops;
 	sb->s_time_gran = 1;

-	sb->s_fs_info = kzalloc(sizeof(struct binderfs_info), GFP_KERNEL);
+	sb->s_fs_info = kzalloc_obj(struct binderfs_info, GFP_KERNEL);
 	if (!sb->s_fs_info)
 		return -ENOMEM;
 	info = sb->s_fs_info;
@@ -721,7 +721,7 @@ static int binderfs_init_fs_context(struct fs_context *fc)
 {
 	struct binderfs_mount_opts *ctx;

-	ctx = kzalloc(sizeof(struct binderfs_mount_opts), GFP_KERNEL);
+	ctx = kzalloc_obj(struct binderfs_mount_opts, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
index 67a068c075c0..aab88f2347eb 100644
--- a/drivers/android/binder_alloc.c
+++ b/drivers/android/binder_alloc.c
@@ -289,7 +289,7 @@ static struct page *binder_page_alloc(struct binder_alloc *alloc,
 		return NULL;

 	/* allocate and install shrinker metadata under page->private */
-	mdata = kzalloc(sizeof(*mdata), GFP_KERNEL);
+	mdata = kzalloc_obj(*mdata, GFP_KERNEL);
 	if (!mdata) {
 		__free_page(page);
 		return NULL;
@@ -672,7 +672,7 @@ struct binder_buffer *binder_alloc_new_buf(struct binder_alloc *alloc,
 	}

 	/* Preallocate the next buffer */
-	next = kzalloc(sizeof(*next), GFP_KERNEL);
+	next = kzalloc_obj(*next, GFP_KERNEL);
 	if (!next)
 		return ERR_PTR(-ENOMEM);

@@ -916,16 +916,15 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc,

 	alloc->vm_start = vma->vm_start;

-	alloc->pages = kvcalloc(alloc->buffer_size / PAGE_SIZE,
-				sizeof(alloc->pages[0]),
-				GFP_KERNEL);
+	alloc->pages = kvzalloc_objs(alloc->pages[0],
+				     alloc->buffer_size / PAGE_SIZE, GFP_KERNEL);
 	if (!alloc->pages) {
 		ret = -ENOMEM;
 		failure_string = "alloc page array";
 		goto err_alloc_pages_failed;
 	}

-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 	if (!buffer) {
 		ret = -ENOMEM;
 		failure_string = "alloc buffer struct";
diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c
index 9f8a18c88d66..73a7c3b54f21 100644
--- a/drivers/android/binderfs.c
+++ b/drivers/android/binderfs.c
@@ -145,7 +145,7 @@ static int binderfs_binder_device_create(struct inode *ref_inode,
 	mutex_unlock(&binderfs_minors_mutex);

 	ret = -ENOMEM;
-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		goto err;

@@ -396,7 +396,7 @@ static int binderfs_binder_ctl_create(struct super_block *sb)
 	bool use_reserve = true;
 #endif

-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		return -ENOMEM;

@@ -638,7 +638,7 @@ static int binderfs_fill_super(struct super_block *sb, struct fs_context *fc)
 	sb->s_op = &binderfs_super_ops;
 	sb->s_time_gran = 1;

-	sb->s_fs_info = kzalloc(sizeof(struct binderfs_info), GFP_KERNEL);
+	sb->s_fs_info = kzalloc_obj(struct binderfs_info, GFP_KERNEL);
 	if (!sb->s_fs_info)
 		return -ENOMEM;
 	info = sb->s_fs_info;
@@ -717,7 +717,7 @@ static int binderfs_init_fs_context(struct fs_context *fc)
 {
 	struct binderfs_mount_opts *ctx;

-	ctx = kzalloc(sizeof(struct binderfs_mount_opts), GFP_KERNEL);
+	ctx = kzalloc_obj(struct binderfs_mount_opts, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
index 91d44302eac9..12c3a0330f67 100644
--- a/drivers/ata/libahci_platform.c
+++ b/drivers/ata/libahci_platform.c
@@ -594,7 +594,8 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev,
 	 * We cannot use devm_ here, since ahci_platform_put_resources() uses
 	 * target_pwrs after devm_ have freed memory
 	 */
-	hpriv->target_pwrs = kcalloc(hpriv->nports, sizeof(*hpriv->target_pwrs), GFP_KERNEL);
+	hpriv->target_pwrs = kzalloc_objs(*hpriv->target_pwrs, hpriv->nports,
+					  GFP_KERNEL);
 	if (!hpriv->target_pwrs) {
 		rc = -ENOMEM;
 		goto err_out;
diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c
index 15e18d50dcc6..a618313dea03 100644
--- a/drivers/ata/libata-acpi.c
+++ b/drivers/ata/libata-acpi.c
@@ -194,7 +194,7 @@ void ata_acpi_bind_port(struct ata_port *ap)
 	if (!adev || adev->hp)
 		return;

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return;

@@ -236,7 +236,7 @@ void ata_acpi_bind_dev(struct ata_device *dev)
 	if (!adev || adev->hp)
 		return;

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return;

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index beb6984b379a..02dde2517122 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -2557,7 +2557,7 @@ static int ata_dev_init_cdl_resources(struct ata_device *dev)
 	unsigned int err_mask;

 	if (!cdl) {
-		cdl = kzalloc(sizeof(*cdl), GFP_KERNEL);
+		cdl = kzalloc_obj(*cdl, GFP_KERNEL);
 		if (!cdl)
 			return -ENOMEM;
 		dev->cdl = cdl;
@@ -2832,7 +2832,7 @@ static void ata_dev_config_cpr(struct ata_device *dev)
 	if (!nr_cpr)
 		goto out;

-	cpr_log = kzalloc(struct_size(cpr_log, cpr, nr_cpr), GFP_KERNEL);
+	cpr_log = kzalloc_flex(*cpr_log, cpr, nr_cpr, GFP_KERNEL);
 	if (!cpr_log)
 		goto out;

@@ -5638,7 +5638,7 @@ struct ata_port *ata_port_alloc(struct ata_host *host)
 	struct ata_port *ap;
 	int id;

-	ap = kzalloc(sizeof(*ap), GFP_KERNEL);
+	ap = kzalloc_obj(*ap, GFP_KERNEL);
 	if (!ap)
 		return NULL;

@@ -6714,7 +6714,7 @@ static void __init ata_parse_force_param(void)
 		if (*p == ',')
 			size++;

-	ata_force_tbl = kcalloc(size, sizeof(ata_force_tbl[0]), GFP_KERNEL);
+	ata_force_tbl = kzalloc_objs(ata_force_tbl[0], size, GFP_KERNEL);
 	if (!ata_force_tbl) {
 		printk(KERN_WARNING "ata: failed to extend force table, "
 		       "libata.force ignored\n");
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c
index 57023324a56f..e3adc008fed1 100644
--- a/drivers/ata/libata-pmp.c
+++ b/drivers/ata/libata-pmp.c
@@ -339,8 +339,8 @@ static int sata_pmp_init_links (struct ata_port *ap, int nr_ports)
 	int i, err;

 	if (!pmp_link) {
-		pmp_link = kcalloc(SATA_PMP_MAX_PORTS, sizeof(pmp_link[0]),
-				   GFP_NOIO);
+		pmp_link = kzalloc_objs(pmp_link[0], SATA_PMP_MAX_PORTS,
+					GFP_NOIO);
 		if (!pmp_link)
 			return -ENOMEM;

diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
index 04e1e774645e..04a0ad66958e 100644
--- a/drivers/ata/libata-sata.c
+++ b/drivers/ata/libata-sata.c
@@ -849,7 +849,7 @@ int ata_slave_link_init(struct ata_port *ap)
 	WARN_ON(ap->slave_link);
 	WARN_ON(ap->flags & ATA_FLAG_PMP);

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;

diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c
index 62415fe67a11..85340ef98be3 100644
--- a/drivers/ata/libata-transport.c
+++ b/drivers/ata/libata-transport.c
@@ -758,7 +758,7 @@ struct scsi_transport_template *ata_attach_transport(void)
 	struct ata_internal *i;
 	int count;

-	i = kzalloc(sizeof(struct ata_internal), GFP_KERNEL);
+	i = kzalloc_obj(struct ata_internal, GFP_KERNEL);
 	if (!i)
 		return NULL;

diff --git a/drivers/ata/libata-zpodd.c b/drivers/ata/libata-zpodd.c
index 799531218ea2..e550327e7bd9 100644
--- a/drivers/ata/libata-zpodd.c
+++ b/drivers/ata/libata-zpodd.c
@@ -274,7 +274,7 @@ void zpodd_init(struct ata_device *dev)
 	if (mech_type == ODD_MECH_TYPE_UNSUPPORTED)
 		return;

-	zpodd = kzalloc(sizeof(struct zpodd), GFP_KERNEL);
+	zpodd = kzalloc_obj(struct zpodd, GFP_KERNEL);
 	if (!zpodd)
 		return;

diff --git a/drivers/ata/pata_parport/pata_parport.c b/drivers/ata/pata_parport/pata_parport.c
index 22bd3ff6b7ae..93ca62cc6390 100644
--- a/drivers/ata/pata_parport/pata_parport.c
+++ b/drivers/ata/pata_parport/pata_parport.c
@@ -511,7 +511,7 @@ static struct pi_adapter *pi_init_one(struct parport *parport,
 	if (id < 0)
 		return NULL;

-	pi = kzalloc(sizeof(struct pi_adapter), GFP_KERNEL);
+	pi = kzalloc_obj(struct pi_adapter, GFP_KERNEL);
 	if (!pi) {
 		ida_free(&pata_parport_bus_dev_ids, id);
 		return NULL;
diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
index 7a4f59202156..e4fe47c8fa75 100644
--- a/drivers/ata/sata_dwc_460ex.c
+++ b/drivers/ata/sata_dwc_460ex.c
@@ -850,7 +850,7 @@ static int sata_dwc_port_start(struct ata_port *ap)
 	}

 	/* Allocate Port Struct */
-	hsdevp = kzalloc(sizeof(*hsdevp), GFP_KERNEL);
+	hsdevp = kzalloc_obj(*hsdevp, GFP_KERNEL);
 	if (!hsdevp) {
 		err = -ENOMEM;
 		goto CLEANUP;
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
index 84da8d6ef28e..703febbe0c03 100644
--- a/drivers/ata/sata_fsl.c
+++ b/drivers/ata/sata_fsl.c
@@ -706,7 +706,7 @@ static int sata_fsl_port_start(struct ata_port *ap)
 	void __iomem *hcr_base = host_priv->hcr_base;
 	u32 temp;

-	pp = kzalloc(sizeof(*pp), GFP_KERNEL);
+	pp = kzalloc_obj(*pp, GFP_KERNEL);
 	if (!pp)
 		return -ENOMEM;

@@ -1451,7 +1451,7 @@ static int sata_fsl_probe(struct platform_device *ofdev)
 	dev_dbg(&ofdev->dev, "@reset i/o = 0x%x\n",
 		ioread32(csr_base + TRANSCFG));

-	host_priv = kzalloc(sizeof(struct sata_fsl_host_priv), GFP_KERNEL);
+	host_priv = kzalloc_obj(struct sata_fsl_host_priv, GFP_KERNEL);
 	if (!host_priv)
 		goto error_exit_with_cleanup;

diff --git a/drivers/atm/adummy.c b/drivers/atm/adummy.c
index 8157925af824..c85bca1af835 100644
--- a/drivers/atm/adummy.c
+++ b/drivers/atm/adummy.c
@@ -148,8 +148,7 @@ static int __init adummy_init(void)

 	printk(KERN_ERR "adummy: version %s\n", DRV_VERSION);

-	adummy_dev = kzalloc(sizeof(struct adummy_dev),
-						   GFP_KERNEL);
+	adummy_dev = kzalloc_obj(struct adummy_dev, GFP_KERNEL);
 	if (!adummy_dev) {
 		printk(KERN_ERR DEV_LABEL ": kzalloc() failed\n");
 		err = -ENOMEM;
diff --git a/drivers/atm/atmtcp.c b/drivers/atm/atmtcp.c
index fa3c76a2b49d..da7226b1aa66 100644
--- a/drivers/atm/atmtcp.c
+++ b/drivers/atm/atmtcp.c
@@ -375,7 +375,7 @@ static int atmtcp_create(int itf,int persist,struct atm_dev **result)
 	struct atmtcp_dev_data *dev_data;
 	struct atm_dev *dev;

-	dev_data = kmalloc(sizeof(*dev_data),GFP_KERNEL);
+	dev_data = kmalloc_obj(*dev_data, GFP_KERNEL);
 	if (!dev_data)
 		return -ENOMEM;

diff --git a/drivers/atm/eni.c b/drivers/atm/eni.c
index 3011cf1a84a9..b00ddead5390 100644
--- a/drivers/atm/eni.c
+++ b/drivers/atm/eni.c
@@ -1845,9 +1845,9 @@ static int eni_start(struct atm_dev *dev)
 	/* initialize memory management */
 	buffer_mem = eni_dev->mem - (buf - eni_dev->ram);
 	eni_dev->free_list_size = buffer_mem/MID_MIN_BUF_SIZE/2;
-	eni_dev->free_list = kmalloc_array(eni_dev->free_list_size + 1,
-					   sizeof(*eni_dev->free_list),
-					   GFP_KERNEL);
+	eni_dev->free_list = kmalloc_objs(*eni_dev->free_list,
+					  eni_dev->free_list_size + 1,
+					  GFP_KERNEL);
 	if (!eni_dev->free_list) {
 		printk(KERN_ERR DEV_LABEL "(itf %d): couldn't get free page\n",
 		    dev->number);
@@ -1925,7 +1925,7 @@ static int eni_open(struct atm_vcc *vcc)
 	DPRINTK(DEV_LABEL "(itf %d): open %d.%d\n",vcc->dev->number,vcc->vpi,
 	    vcc->vci);
 	if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) {
-		eni_vcc = kmalloc(sizeof(struct eni_vcc),GFP_KERNEL);
+		eni_vcc = kmalloc_obj(struct eni_vcc, GFP_KERNEL);
 		if (!eni_vcc) return -ENOMEM;
 		vcc->dev_data = eni_vcc;
 		eni_vcc->tx = NULL; /* for eni_close after open_rx */
@@ -2229,7 +2229,7 @@ static int eni_init_one(struct pci_dev *pci_dev,
 		goto err_disable;

 	rc = -ENOMEM;
-	eni_dev = kmalloc(sizeof(struct eni_dev), GFP_KERNEL);
+	eni_dev = kmalloc_obj(struct eni_dev, GFP_KERNEL);
 	if (!eni_dev)
 		goto err_disable;

diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c
index fec081db36dc..0a3e9abd72f2 100644
--- a/drivers/atm/fore200e.c
+++ b/drivers/atm/fore200e.c
@@ -1331,7 +1331,7 @@ fore200e_open(struct atm_vcc *vcc)

     spin_unlock_irqrestore(&fore200e->q_lock, flags);

-    fore200e_vcc = kzalloc(sizeof(struct fore200e_vcc), GFP_ATOMIC);
+    fore200e_vcc = kzalloc_obj(struct fore200e_vcc, GFP_ATOMIC);
     if (fore200e_vcc == NULL) {
 	vc_map->vcc = NULL;
 	return -ENOMEM;
@@ -1676,7 +1676,7 @@ fore200e_getstats(struct fore200e* fore200e)
     u32                     stats_dma_addr;

     if (fore200e->stats == NULL) {
-	fore200e->stats = kzalloc(sizeof(struct stats), GFP_KERNEL);
+	fore200e->stats = kzalloc_obj(struct stats, GFP_KERNEL);
 	if (fore200e->stats == NULL)
 	    return -ENOMEM;
     }
@@ -1955,7 +1955,7 @@ static int fore200e_irq_request(struct fore200e *fore200e)

 static int fore200e_get_esi(struct fore200e *fore200e)
 {
-    struct prom_data* prom = kzalloc(sizeof(struct prom_data), GFP_KERNEL);
+    struct prom_data* prom = kzalloc_obj(struct prom_data, GFP_KERNEL);
     int ok, i;

     if (!prom)
@@ -2000,8 +2000,7 @@ static int fore200e_alloc_rx_buf(struct fore200e *fore200e)
 	    DPRINTK(2, "rx buffers %d / %d are being allocated\n", scheme, magn);

 	    /* allocate the array of receive buffers */
-	    buffer = bsq->buffer = kcalloc(nbr, sizeof(struct buffer),
-                                           GFP_KERNEL);
+	    buffer = bsq->buffer = kzalloc_objs(struct buffer, nbr, GFP_KERNEL);

 	    if (buffer == NULL)
 		return -ENOMEM;
@@ -2529,7 +2528,7 @@ static int fore200e_sba_probe(struct platform_device *op)
 	static int index = 0;
 	int err;

-	fore200e = kzalloc(sizeof(struct fore200e), GFP_KERNEL);
+	fore200e = kzalloc_obj(struct fore200e, GFP_KERNEL);
 	if (!fore200e)
 		return -ENOMEM;

@@ -2597,7 +2596,7 @@ static int fore200e_pca_detect(struct pci_dev *pci_dev,
 	goto out;
     }

-    fore200e = kzalloc(sizeof(struct fore200e), GFP_KERNEL);
+    fore200e = kzalloc_obj(struct fore200e, GFP_KERNEL);
     if (fore200e == NULL) {
 	err = -ENOMEM;
 	goto out_disable;
diff --git a/drivers/atm/he.c b/drivers/atm/he.c
index 92a041d5387b..d2e41a7aaa3a 100644
--- a/drivers/atm/he.c
+++ b/drivers/atm/he.c
@@ -372,8 +372,7 @@ static int he_init_one(struct pci_dev *pci_dev,
 	}
 	pci_set_drvdata(pci_dev, atm_dev);

-	he_dev = kzalloc(sizeof(struct he_dev),
-							GFP_KERNEL);
+	he_dev = kzalloc_obj(struct he_dev, GFP_KERNEL);
 	if (!he_dev) {
 		err = -ENOMEM;
 		goto init_one_failure;
@@ -787,9 +786,8 @@ static int he_init_group(struct he_dev *he_dev, int group)
 	}

 	/* rbpl_virt 64-bit pointers */
-	he_dev->rbpl_virt = kmalloc_array(RBPL_TABLE_SIZE,
-					  sizeof(*he_dev->rbpl_virt),
-					  GFP_KERNEL);
+	he_dev->rbpl_virt = kmalloc_objs(*he_dev->rbpl_virt, RBPL_TABLE_SIZE,
+					 GFP_KERNEL);
 	if (!he_dev->rbpl_virt) {
 		hprintk("unable to allocate rbpl virt table\n");
 		goto out_free_rbpl_table;
@@ -2132,7 +2130,7 @@ he_open(struct atm_vcc *vcc)

 	cid = he_mkcid(he_dev, vpi, vci);

-	he_vcc = kmalloc(sizeof(struct he_vcc), GFP_ATOMIC);
+	he_vcc = kmalloc_obj(struct he_vcc, GFP_ATOMIC);
 	if (he_vcc == NULL) {
 		hprintk("unable to allocate he_vcc during open\n");
 		return -ENOMEM;
diff --git a/drivers/atm/idt77105.c b/drivers/atm/idt77105.c
index e6a300203e6c..7ac597f9c673 100644
--- a/drivers/atm/idt77105.c
+++ b/drivers/atm/idt77105.c
@@ -262,7 +262,7 @@ static int idt77105_start(struct atm_dev *dev)
 {
 	unsigned long flags;

-	if (!(dev->phy_data = kmalloc(sizeof(struct idt77105_priv),GFP_KERNEL)))
+	if (!(dev->phy_data = kmalloc_obj(struct idt77105_priv, GFP_KERNEL)))
 		return -ENOMEM;
 	PRIV(dev)->dev = dev;
 	spin_lock_irqsave(&idt77105_priv_lock, flags);
diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c
index 888695ccc2a7..d984d0766301 100644
--- a/drivers/atm/idt77252.c
+++ b/drivers/atm/idt77252.c
@@ -638,7 +638,7 @@ alloc_scq(struct idt77252_dev *card, int class)
 {
 	struct scq_info *scq;

-	scq = kzalloc(sizeof(struct scq_info), GFP_KERNEL);
+	scq = kzalloc_obj(struct scq_info, GFP_KERNEL);
 	if (!scq)
 		return NULL;
 	scq->base = dma_alloc_coherent(&card->pcidev->dev, SCQ_SIZE,
@@ -2116,7 +2116,7 @@ idt77252_init_est(struct vc_map *vc, int pcr)
 {
 	struct rate_estimator *est;

-	est = kzalloc(sizeof(struct rate_estimator), GFP_KERNEL);
+	est = kzalloc_obj(struct rate_estimator, GFP_KERNEL);
 	if (!est)
 		return NULL;
 	est->maxcps = pcr < 0 ? -pcr : pcr;
@@ -2424,7 +2424,7 @@ idt77252_open(struct atm_vcc *vcc)

 	index = VPCI2VC(card, vpi, vci);
 	if (!card->vcs[index]) {
-		card->vcs[index] = kzalloc(sizeof(struct vc_map), GFP_KERNEL);
+		card->vcs[index] = kzalloc_obj(struct vc_map, GFP_KERNEL);
 		if (!card->vcs[index]) {
 			printk("%s: can't alloc vc in open()\n", card->name);
 			mutex_unlock(&card->mutex);
@@ -2855,7 +2855,7 @@ open_card_oam(struct idt77252_dev *card)
 		for (vci = 3; vci < 5; vci++) {
 			index = VPCI2VC(card, vpi, vci);

-			vc = kzalloc(sizeof(struct vc_map), GFP_KERNEL);
+			vc = kzalloc_obj(struct vc_map, GFP_KERNEL);
 			if (!vc) {
 				printk("%s: can't alloc vc\n", card->name);
 				return -ENOMEM;
@@ -2923,7 +2923,7 @@ open_card_ubr0(struct idt77252_dev *card)
 {
 	struct vc_map *vc;

-	vc = kzalloc(sizeof(struct vc_map), GFP_KERNEL);
+	vc = kzalloc_obj(struct vc_map, GFP_KERNEL);
 	if (!vc) {
 		printk("%s: can't alloc vc\n", card->name);
 		return -ENOMEM;
@@ -3621,7 +3621,7 @@ static int idt77252_init_one(struct pci_dev *pcidev,
 		goto err_out_disable_pdev;
 	}

-	card = kzalloc(sizeof(struct idt77252_dev), GFP_KERNEL);
+	card = kzalloc_obj(struct idt77252_dev, GFP_KERNEL);
 	if (!card) {
 		printk("idt77252-%d: can't allocate private data\n", index);
 		err = -ENOMEM;
diff --git a/drivers/atm/iphase.c b/drivers/atm/iphase.c
index 301e697e22ad..727b5d044115 100644
--- a/drivers/atm/iphase.c
+++ b/drivers/atm/iphase.c
@@ -114,7 +114,7 @@ static void ia_enque_head_rtn_q (IARTN_Q *que, IARTN_Q * data)
 }

 static int ia_enque_rtn_q (IARTN_Q *que, struct desc_tbl_t data) {
-   IARTN_Q *entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+   IARTN_Q *entry = kmalloc_obj(*entry, GFP_ATOMIC);
    if (!entry)
       return -ENOMEM;
    entry->data = data;
@@ -1978,9 +1978,8 @@ static int tx_init(struct atm_dev *dev)
 		buf_desc_ptr++;
 		tx_pkt_start += iadev->tx_buf_sz;
 	}
-	iadev->tx_buf = kmalloc_array(iadev->num_tx_desc,
-				      sizeof(*iadev->tx_buf),
-				      GFP_KERNEL);
+	iadev->tx_buf = kmalloc_objs(*iadev->tx_buf, iadev->num_tx_desc,
+				     GFP_KERNEL);
         if (!iadev->tx_buf) {
             printk(KERN_ERR DEV_LABEL " couldn't get mem\n");
 	    goto err_free_dle;
@@ -1989,7 +1988,7 @@ static int tx_init(struct atm_dev *dev)
        	{
 	    struct cpcs_trailer *cpcs;

-       	    cpcs = kmalloc(sizeof(*cpcs), GFP_KERNEL|GFP_DMA);
+       	    cpcs = kmalloc_obj(*cpcs, GFP_KERNEL | GFP_DMA);
             if(!cpcs) {
 		printk(KERN_ERR DEV_LABEL " couldn't get freepage\n");
 		goto err_free_tx_bufs;
@@ -2000,9 +1999,8 @@ static int tx_init(struct atm_dev *dev)
 						       sizeof(*cpcs),
 						       DMA_TO_DEVICE);
         }
-	iadev->desc_tbl = kmalloc_array(iadev->num_tx_desc,
-					sizeof(*iadev->desc_tbl),
-					GFP_KERNEL);
+	iadev->desc_tbl = kmalloc_objs(*iadev->desc_tbl, iadev->num_tx_desc,
+				       GFP_KERNEL);
 	if (!iadev->desc_tbl) {
 		printk(KERN_ERR DEV_LABEL " couldn't get mem\n");
 		goto err_free_all_tx_bufs;
@@ -2130,9 +2128,8 @@ static int tx_init(struct atm_dev *dev)
 	memset((caddr_t)(iadev->seg_ram+i),  0, iadev->num_vc*4);
 	vc = (struct main_vc *)iadev->MAIN_VC_TABLE_ADDR;
 	evc = (struct ext_vc *)iadev->EXT_VC_TABLE_ADDR;
-	iadev->testTable = kmalloc_array(iadev->num_vc,
-					 sizeof(*iadev->testTable),
-					 GFP_KERNEL);
+	iadev->testTable = kmalloc_objs(*iadev->testTable, iadev->num_vc,
+					GFP_KERNEL);
         if (!iadev->testTable) {
            printk("Get freepage  failed\n");
 	   goto err_free_desc_tbl;
@@ -2141,8 +2138,8 @@ static int tx_init(struct atm_dev *dev)
 	{
 		memset((caddr_t)vc, 0, sizeof(*vc));
 		memset((caddr_t)evc, 0, sizeof(*evc));
-                iadev->testTable[i] = kmalloc(sizeof(struct testTable_t),
-						GFP_KERNEL);
+                iadev->testTable[i] = kmalloc_obj(struct testTable_t,
+						  GFP_KERNEL);
 		if (!iadev->testTable[i])
 			goto err_free_test_tables;
               	iadev->testTable[i]->lastTime = 0;
@@ -2712,7 +2709,7 @@ static int ia_open(struct atm_vcc *vcc)
                                  vcc->dev->number, vcc->vpi, vcc->vci);)

 	/* Device dependent initialization */
-	ia_vcc = kmalloc(sizeof(*ia_vcc), GFP_KERNEL);
+	ia_vcc = kmalloc_obj(*ia_vcc, GFP_KERNEL);
 	if (!ia_vcc) return -ENOMEM;
 	vcc->dev_data = ia_vcc;

@@ -2798,7 +2795,7 @@ static int ia_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg)
              rfredn_t        *rfL;

 	     if (!capable(CAP_NET_ADMIN)) return -EPERM;
-	     regs_local = kmalloc(sizeof(*regs_local), GFP_KERNEL);
+	     regs_local = kmalloc_obj(*regs_local, GFP_KERNEL);
 	     if (!regs_local) return -ENOMEM;
 	     ffL = &regs_local->ffredn;
 	     rfL = &regs_local->rfredn;
@@ -3168,7 +3165,7 @@ static int ia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	IADEV *iadev;
 	int ret;

-	iadev = kzalloc(sizeof(*iadev), GFP_KERNEL);
+	iadev = kzalloc_obj(*iadev, GFP_KERNEL);
 	if (!iadev) {
 		ret = -ENOMEM;
 		goto err_out;
diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c
index 0dfa2cdc897c..682089aedbe4 100644
--- a/drivers/atm/lanai.c
+++ b/drivers/atm/lanai.c
@@ -1464,7 +1464,7 @@ static inline void vcc_table_deallocate(const struct lanai_dev *lanai)
 static inline struct lanai_vcc *new_lanai_vcc(void)
 {
 	struct lanai_vcc *lvcc;
-	lvcc =  kzalloc(sizeof(*lvcc), GFP_KERNEL);
+	lvcc = kzalloc_obj(*lvcc, GFP_KERNEL);
 	if (likely(lvcc != NULL)) {
 		skb_queue_head_init(&lvcc->tx.backlog);
 #ifdef DEBUG
@@ -2555,7 +2555,7 @@ static int lanai_init_one(struct pci_dev *pci,
 	struct atm_dev *atmdev;
 	int result;

-	lanai = kzalloc(sizeof(*lanai), GFP_KERNEL);
+	lanai = kzalloc_obj(*lanai, GFP_KERNEL);
 	if (lanai == NULL) {
 		printk(KERN_ERR DEV_LABEL
 		       ": couldn't allocate dev_data structure!\n");
diff --git a/drivers/atm/nicstar.c b/drivers/atm/nicstar.c
index bc8dbba77b87..67486f363c2c 100644
--- a/drivers/atm/nicstar.c
+++ b/drivers/atm/nicstar.c
@@ -373,7 +373,7 @@ static int ns_init_card(int i, struct pci_dev *pcidev)
 		return error;
         }

-	card = kmalloc(sizeof(*card), GFP_KERNEL);
+	card = kmalloc_obj(*card, GFP_KERNEL);
 	if (!card) {
 		printk
 		    ("nicstar%d: can't allocate memory for device structure.\n",
@@ -867,7 +867,7 @@ static scq_info *get_scq(ns_dev *card, int size, u32 scd)
 	if (size != VBR_SCQSIZE && size != CBR_SCQSIZE)
 		return NULL;

-	scq = kmalloc(sizeof(*scq), GFP_KERNEL);
+	scq = kmalloc_obj(*scq, GFP_KERNEL);
 	if (!scq)
 		return NULL;
         scq->org = dma_alloc_coherent(&card->pcidev->dev,
@@ -876,8 +876,7 @@ static scq_info *get_scq(ns_dev *card, int size, u32 scd)
 		kfree(scq);
 		return NULL;
 	}
-	scq->skb = kcalloc(size / NS_SCQE_SIZE, sizeof(*scq->skb),
-			   GFP_KERNEL);
+	scq->skb = kzalloc_objs(*scq->skb, size / NS_SCQE_SIZE, GFP_KERNEL);
 	if (!scq->skb) {
 		dma_free_coherent(&card->pcidev->dev,
 				  2 * size, scq->org, scq->dma);
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
index d3c30a28c410..1c86cd84ce69 100644
--- a/drivers/atm/solos-pci.c
+++ b/drivers/atm/solos-pci.c
@@ -1196,7 +1196,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	uint32_t data32;
 	struct solos_card *card;

-	card = kzalloc(sizeof(*card), GFP_KERNEL);
+	card = kzalloc_obj(*card, GFP_KERNEL);
 	if (!card)
 		return -ENOMEM;

diff --git a/drivers/atm/suni.c b/drivers/atm/suni.c
index 7d0fa729c2fe..0eb3ad488d1e 100644
--- a/drivers/atm/suni.c
+++ b/drivers/atm/suni.c
@@ -367,7 +367,7 @@ int suni_init(struct atm_dev *dev)
 {
 	unsigned char mri;

-	if (!(dev->phy_data = kmalloc(sizeof(struct suni_priv),GFP_KERNEL)))
+	if (!(dev->phy_data = kmalloc_obj(struct suni_priv, GFP_KERNEL)))
 		return -ENOMEM;
 	PRIV(dev)->dev = dev;

diff --git a/drivers/auxdisplay/hd44780.c b/drivers/auxdisplay/hd44780.c
index cef42656c4b0..aee1f5a60c0d 100644
--- a/drivers/auxdisplay/hd44780.c
+++ b/drivers/auxdisplay/hd44780.c
@@ -226,7 +226,7 @@ static int hd44780_probe(struct platform_device *pdev)
 	if (!lcd)
 		return -ENOMEM;

-	hd = kzalloc(sizeof(*hd), GFP_KERNEL);
+	hd = kzalloc_obj(*hd, GFP_KERNEL);
 	if (!hd)
 		goto fail2;

diff --git a/drivers/auxdisplay/line-display.c b/drivers/auxdisplay/line-display.c
index 4e22373fcc1a..d3860953b0de 100644
--- a/drivers/auxdisplay/line-display.c
+++ b/drivers/auxdisplay/line-display.c
@@ -56,7 +56,7 @@ static int create_attachment(struct device *dev, struct linedisp *linedisp, bool
 {
 	struct linedisp_attachment *attachment;

-	attachment = kzalloc(sizeof(*attachment), GFP_KERNEL);
+	attachment = kzalloc_obj(*attachment, GFP_KERNEL);
 	if (!attachment)
 		return -ENOMEM;

@@ -390,7 +390,7 @@ static int linedisp_init_map(struct linedisp *linedisp)
 	if (err < 0)
 		return err;

-	map = kmalloc(sizeof(*map), GFP_KERNEL);
+	map = kmalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

diff --git a/drivers/auxdisplay/panel.c b/drivers/auxdisplay/panel.c
index 958c0e31e84a..8aad34f96068 100644
--- a/drivers/auxdisplay/panel.c
+++ b/drivers/auxdisplay/panel.c
@@ -1428,7 +1428,7 @@ static struct logical_input *panel_bind_key(const char *name, const char *press,
 {
 	struct logical_input *key;

-	key = kzalloc(sizeof(*key), GFP_KERNEL);
+	key = kzalloc_obj(*key, GFP_KERNEL);
 	if (!key)
 		return NULL;

diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index c0ef6ea9c111..0a2a19d50b54 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -892,7 +892,7 @@ __weak int __init parse_acpi_topology(void)
 			hetero_id = find_acpi_cpu_topology_hetero_id(cpu);
 			entry = xa_load(&hetero_cpu, hetero_id);
 			if (!entry) {
-				entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+				entry = kzalloc_obj(*entry, GFP_KERNEL);
 				WARN_ON_ONCE(!entry);

 				if (entry) {
diff --git a/drivers/base/attribute_container.c b/drivers/base/attribute_container.c
index 72adbacc6554..2264c3647247 100644
--- a/drivers/base/attribute_container.c
+++ b/drivers/base/attribute_container.c
@@ -153,7 +153,7 @@ attribute_container_add_device(struct device *dev,
 		if (!cont->match(cont, dev))
 			continue;

-		ic = kzalloc(sizeof(*ic), GFP_KERNEL);
+		ic = kzalloc_obj(*ic, GFP_KERNEL);
 		if (!ic) {
 			dev_err(dev, "failed to allocate class container\n");
 			continue;
diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
index 04bdbff4dbe5..8e7bae67f3c0 100644
--- a/drivers/base/auxiliary.c
+++ b/drivers/base/auxiliary.c
@@ -420,7 +420,7 @@ struct auxiliary_device *auxiliary_device_create(struct device *dev,
 	struct auxiliary_device *auxdev;
 	int ret;

-	auxdev = kzalloc(sizeof(*auxdev), GFP_KERNEL);
+	auxdev = kzalloc_obj(*auxdev, GFP_KERNEL);
 	if (!auxdev)
 		return NULL;

diff --git a/drivers/base/auxiliary_sysfs.c b/drivers/base/auxiliary_sysfs.c
index 754f21730afd..e432fa6b4ce9 100644
--- a/drivers/base/auxiliary_sysfs.c
+++ b/drivers/base/auxiliary_sysfs.c
@@ -63,7 +63,7 @@ int auxiliary_device_sysfs_irq_add(struct auxiliary_device *auxdev, int irq)
 	if (ret)
 		return ret;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 9eb7771706f0..5745f51f5901 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -696,7 +696,7 @@ int bus_add_driver(struct device_driver *drv)
 	 */
 	pr_debug("bus: '%s': add driver %s\n", sp->bus->name, drv->name);

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		error = -ENOMEM;
 		goto out_put_bus;
@@ -897,7 +897,7 @@ int bus_register(const struct bus_type *bus)
 	struct kobject *bus_kobj;
 	struct lock_class_key *key;

-	priv = kzalloc(sizeof(struct subsys_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct subsys_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -1263,7 +1263,7 @@ static int subsys_register(const struct bus_type *subsys,
 		goto err_sp;
 	}

-	dev = kzalloc(sizeof(struct device), GFP_KERNEL);
+	dev = kzalloc_obj(struct device, GFP_KERNEL);
 	if (!dev) {
 		err = -ENOMEM;
 		goto err_dev;
diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c
index 613410705a47..eb16451ba0a3 100644
--- a/drivers/base/cacheinfo.c
+++ b/drivers/base/cacheinfo.c
@@ -510,7 +510,8 @@ int __weak populate_cache_leaves(unsigned int cpu)

 static inline int allocate_cache_info(int cpu)
 {
-	per_cpu_cacheinfo(cpu) = kcalloc(cache_leaves(cpu), sizeof(struct cacheinfo), GFP_ATOMIC);
+	per_cpu_cacheinfo(cpu) = kzalloc_objs(struct cacheinfo,
+					      cache_leaves(cpu), GFP_ATOMIC);
 	if (!per_cpu_cacheinfo(cpu)) {
 		cache_leaves(cpu) = 0;
 		return -ENOMEM;
@@ -882,8 +883,8 @@ static int cpu_cache_sysfs_init(unsigned int cpu)
 		return PTR_ERR(per_cpu_cache_dev(cpu));

 	/* Allocate all required memory */
-	per_cpu_index_dev(cpu) = kcalloc(cache_leaves(cpu),
-					 sizeof(struct device *), GFP_KERNEL);
+	per_cpu_index_dev(cpu) = kzalloc_objs(struct device *,
+					      cache_leaves(cpu), GFP_KERNEL);
 	if (unlikely(per_cpu_index_dev(cpu) == NULL))
 		goto err_out;

diff --git a/drivers/base/class.c b/drivers/base/class.c
index 2526c57d924e..2650dead5af1 100644
--- a/drivers/base/class.c
+++ b/drivers/base/class.c
@@ -194,7 +194,7 @@ int class_register(const struct class *cls)
 		return -EINVAL;
 	}

-	cp = kzalloc(sizeof(*cp), GFP_KERNEL);
+	cp = kzalloc_obj(*cp, GFP_KERNEL);
 	if (!cp)
 		return -ENOMEM;
 	klist_init(&cp->klist_devices, klist_class_dev_get, klist_class_dev_put);
@@ -268,7 +268,7 @@ struct class *class_create(const char *name)
 	struct class *cls;
 	int retval;

-	cls = kzalloc(sizeof(*cls), GFP_KERNEL);
+	cls = kzalloc_obj(*cls, GFP_KERNEL);
 	if (!cls) {
 		retval = -ENOMEM;
 		goto error;
@@ -573,7 +573,7 @@ struct class_compat *class_compat_register(const char *name)
 {
 	struct class_compat *cls;

-	cls = kmalloc(sizeof(struct class_compat), GFP_KERNEL);
+	cls = kmalloc_obj(struct class_compat, GFP_KERNEL);
 	if (!cls)
 		return NULL;
 	cls->kobj = kobject_create_and_add(name, &class_kset->kobj);
diff --git a/drivers/base/component.c b/drivers/base/component.c
index 024ad9471b8a..fef563aa13e5 100644
--- a/drivers/base/component.c
+++ b/drivers/base/component.c
@@ -363,7 +363,7 @@ static int component_match_realloc(struct component_match *match, size_t num)
 	if (match->alloc == num)
 		return 0;

-	new = kmalloc_array(num, sizeof(*new), GFP_KERNEL);
+	new = kmalloc_objs(*new, num, GFP_KERNEL);
 	if (!new)
 		return -ENOMEM;

@@ -521,7 +521,7 @@ int component_master_add_with_match(struct device *parent,
 	if (ret)
 		return ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return -ENOMEM;

@@ -732,7 +732,7 @@ static int __component_add(struct device *dev, const struct component_ops *ops,
 	struct component *component;
 	int ret;

-	component = kzalloc(sizeof(*component), GFP_KERNEL);
+	component = kzalloc_obj(*component, GFP_KERNEL);
 	if (!component)
 		return -ENOMEM;

diff --git a/drivers/base/core.c b/drivers/base/core.c
index f599a1384eec..a8ea302c504c 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -76,7 +76,7 @@ static int __fwnode_link_add(struct fwnode_handle *con,
 			return 0;
 		}

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;

@@ -844,7 +844,7 @@ struct device_link *device_link_add(struct device *consumer,
 		goto out;
 	}

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		goto out;

@@ -2748,7 +2748,7 @@ static ssize_t uevent_show(struct device *dev, struct device_attribute *attr,
 		if (!kset->uevent_ops->filter(&dev->kobj))
 			goto out;

-	env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL);
+	env = kzalloc_obj(struct kobj_uevent_env, GFP_KERNEL);
 	if (!env)
 		return -ENOMEM;

@@ -3220,7 +3220,7 @@ static struct kobject *class_dir_create_and_add(struct subsys_private *sp,
 	struct class_dir *dir;
 	int retval;

-	dir = kzalloc(sizeof(*dir), GFP_KERNEL);
+	dir = kzalloc_obj(*dir, GFP_KERNEL);
 	if (!dir)
 		return ERR_PTR(-ENOMEM);

@@ -3531,7 +3531,7 @@ static void device_remove_sys_dev_entry(struct device *dev)

 static int device_private_init(struct device *dev)
 {
-	dev->p = kzalloc(sizeof(*dev->p), GFP_KERNEL);
+	dev->p = kzalloc_obj(*dev->p, GFP_KERNEL);
 	if (!dev->p)
 		return -ENOMEM;
 	dev->p->device = dev;
@@ -4278,7 +4278,7 @@ struct device *__root_device_register(const char *name, struct module *owner)
 	struct root_device *root;
 	int err = -ENOMEM;

-	root = kzalloc(sizeof(struct root_device), GFP_KERNEL);
+	root = kzalloc_obj(struct root_device, GFP_KERNEL);
 	if (!root)
 		return ERR_PTR(err);

@@ -4350,7 +4350,7 @@ device_create_groups_vargs(const struct class *class, struct device *parent,
 	if (IS_ERR_OR_NULL(class))
 		goto error;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		retval = -ENOMEM;
 		goto error;
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
index 3e3fa031e605..517609371f4c 100644
--- a/drivers/base/cpu.c
+++ b/drivers/base/cpu.c
@@ -466,7 +466,7 @@ __cpu_device_create(struct device *parent, void *drvdata,
 	struct device *dev = NULL;
 	int retval = -ENOMEM;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto error;

diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c
index 55bdc7f5e59d..7e4a491bf15e 100644
--- a/drivers/base/devcoredump.c
+++ b/drivers/base/devcoredump.c
@@ -381,7 +381,7 @@ void dev_coredumpm_timeout(struct device *dev, struct module *owner,
 	if (!try_module_get(owner))
 		goto free;

-	devcd = kzalloc(sizeof(*devcd), gfp);
+	devcd = kzalloc_obj(*devcd, gfp);
 	if (!devcd)
 		goto put_module;

diff --git a/drivers/base/devres.c b/drivers/base/devres.c
index f54db6d138ab..171750c1f691 100644
--- a/drivers/base/devres.c
+++ b/drivers/base/devres.c
@@ -554,7 +554,7 @@ void *devres_open_group(struct device *dev, void *id, gfp_t gfp)
 	struct devres_group *grp;
 	unsigned long flags;

-	grp = kmalloc(sizeof(*grp), gfp);
+	grp = kmalloc_obj(*grp, gfp);
 	if (unlikely(!grp))
 		return NULL;

diff --git a/drivers/base/faux.c b/drivers/base/faux.c
index 23d725817232..33dd8efdd541 100644
--- a/drivers/base/faux.c
+++ b/drivers/base/faux.c
@@ -133,7 +133,7 @@ struct faux_device *faux_device_create_with_groups(const char *name,
 	struct device *dev;
 	int ret;

-	faux_obj = kzalloc(sizeof(*faux_obj), GFP_KERNEL);
+	faux_obj = kzalloc_obj(*faux_obj, GFP_KERNEL);
 	if (!faux_obj)
 		return NULL;

@@ -234,7 +234,7 @@ int __init faux_bus_init(void)
 {
 	int ret;

-	faux_bus_root = kzalloc(sizeof(*faux_bus_root), GFP_KERNEL);
+	faux_bus_root = kzalloc_obj(*faux_bus_root, GFP_KERNEL);
 	if (!faux_bus_root)
 		return -ENOMEM;

diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
index 4ebdca9e4da4..49eabc50c66d 100644
--- a/drivers/base/firmware_loader/main.c
+++ b/drivers/base/firmware_loader/main.c
@@ -127,7 +127,7 @@ static struct fw_priv *__allocate_fw_priv(const char *fw_name,
 	if (offset != 0 && !(opt_flags & FW_OPT_PARTIAL))
 		return NULL;

-	fw_priv = kzalloc(sizeof(*fw_priv), GFP_ATOMIC);
+	fw_priv = kzalloc_obj(*fw_priv, GFP_ATOMIC);
 	if (!fw_priv)
 		return NULL;

@@ -747,7 +747,7 @@ _request_firmware_prepare(struct firmware **firmware_p, const char *name,
 	struct fw_priv *fw_priv;
 	int ret;

-	*firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
+	*firmware_p = firmware = kzalloc_obj(*firmware, GFP_KERNEL);
 	if (!firmware) {
 		dev_err(device, "%s: kmalloc(struct firmware) failed\n",
 			__func__);
@@ -1165,7 +1165,7 @@ static int _request_firmware_nowait(
 {
 	struct firmware_work *fw_work;

-	fw_work = kzalloc(sizeof(struct firmware_work), gfp);
+	fw_work = kzalloc_obj(struct firmware_work, gfp);
 	if (!fw_work)
 		return -ENOMEM;

@@ -1338,7 +1338,7 @@ static struct fw_cache_entry *alloc_fw_cache_entry(const char *name)
 {
 	struct fw_cache_entry *fce;

-	fce = kzalloc(sizeof(*fce), GFP_ATOMIC);
+	fce = kzalloc_obj(*fce, GFP_ATOMIC);
 	if (!fce)
 		goto exit;

diff --git a/drivers/base/firmware_loader/sysfs.c b/drivers/base/firmware_loader/sysfs.c
index 92e91050f96a..d921570026cc 100644
--- a/drivers/base/firmware_loader/sysfs.c
+++ b/drivers/base/firmware_loader/sysfs.c
@@ -405,7 +405,7 @@ fw_create_instance(struct firmware *firmware, const char *fw_name,
 	struct fw_sysfs *fw_sysfs;
 	struct device *f_dev;

-	fw_sysfs = kzalloc(sizeof(*fw_sysfs), GFP_KERNEL);
+	fw_sysfs = kzalloc_obj(*fw_sysfs, GFP_KERNEL);
 	if (!fw_sysfs) {
 		fw_sysfs = ERR_PTR(-ENOMEM);
 		goto exit;
diff --git a/drivers/base/firmware_loader/sysfs_upload.c b/drivers/base/firmware_loader/sysfs_upload.c
index c3797b93c5f5..fdc928b8cd1d 100644
--- a/drivers/base/firmware_loader/sysfs_upload.c
+++ b/drivers/base/firmware_loader/sysfs_upload.c
@@ -315,13 +315,13 @@ firmware_upload_register(struct module *module, struct device *parent,
 	if (!try_module_get(module))
 		return ERR_PTR(-EFAULT);

-	fw_upload = kzalloc(sizeof(*fw_upload), GFP_KERNEL);
+	fw_upload = kzalloc_obj(*fw_upload, GFP_KERNEL);
 	if (!fw_upload) {
 		ret = -ENOMEM;
 		goto exit_module_put;
 	}

-	fw_upload_priv = kzalloc(sizeof(*fw_upload_priv), GFP_KERNEL);
+	fw_upload_priv = kzalloc_obj(*fw_upload_priv, GFP_KERNEL);
 	if (!fw_upload_priv) {
 		ret = -ENOMEM;
 		goto free_fw_upload;
diff --git a/drivers/base/isa.c b/drivers/base/isa.c
index bfd9215c9070..ca2765ef9ab9 100644
--- a/drivers/base/isa.c
+++ b/drivers/base/isa.c
@@ -125,7 +125,7 @@ int isa_register_driver(struct isa_driver *isa_driver, unsigned int ndev)
 	for (id = 0; id < ndev; id++) {
 		struct isa_dev *isa_dev;

-		isa_dev = kzalloc(sizeof *isa_dev, GFP_KERNEL);
+		isa_dev = kzalloc_obj(*isa_dev, GFP_KERNEL);
 		if (!isa_dev) {
 			error = -ENOMEM;
 			break;
diff --git a/drivers/base/map.c b/drivers/base/map.c
index 83aeb09ca161..f5c01efe6b55 100644
--- a/drivers/base/map.c
+++ b/drivers/base/map.c
@@ -41,7 +41,7 @@ int kobj_map(struct kobj_map *domain, dev_t dev, unsigned long range,
 	if (n > 255)
 		n = 255;

-	p = kmalloc_array(n, sizeof(struct probe), GFP_KERNEL);
+	p = kmalloc_objs(struct probe, n, GFP_KERNEL);
 	if (p == NULL)
 		return -ENOMEM;

@@ -134,8 +134,8 @@ struct kobject *kobj_lookup(struct kobj_map *domain, dev_t dev, int *index)

 struct kobj_map *kobj_map_init(kobj_probe_t *base_probe, struct mutex *lock)
 {
-	struct kobj_map *p = kmalloc(sizeof(struct kobj_map), GFP_KERNEL);
-	struct probe *base = kzalloc(sizeof(*base), GFP_KERNEL);
+	struct kobj_map *p = kmalloc_obj(struct kobj_map, GFP_KERNEL);
+	struct probe *base = kzalloc_obj(*base, GFP_KERNEL);
 	int i;

 	if ((p == NULL) || (base == NULL)) {
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 751f248ca4a8..ea915e6a4781 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -800,7 +800,7 @@ static int add_memory_block(unsigned long block_id, int nid, unsigned long state
 		put_device(&mem->dev);
 		return -EEXIST;
 	}
-	mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+	mem = kzalloc_obj(*mem, GFP_KERNEL);
 	if (!mem)
 		return -ENOMEM;

@@ -1078,7 +1078,7 @@ static int memory_group_register(struct memory_group group)
 	if (!node_possible(group.nid))
 		return -EINVAL;

-	new_group = kzalloc(sizeof(group), GFP_KERNEL);
+	new_group = kzalloc_obj(group, GFP_KERNEL);
 	if (!new_group)
 		return -ENOMEM;
 	*new_group = group;
diff --git a/drivers/base/node.c b/drivers/base/node.c
index 00cf4532f121..2b65b5eba708 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -158,7 +158,7 @@ static struct node_access_nodes *node_init_node_access(struct node *node,
 		if (access_node->access == access)
 			return access_node;

-	access_node = kzalloc(sizeof(*access_node), GFP_KERNEL);
+	access_node = kzalloc_obj(*access_node, GFP_KERNEL);
 	if (!access_node)
 		return NULL;

@@ -340,7 +340,7 @@ static void node_init_cache_dev(struct node *node)
 {
 	struct device *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return;

@@ -389,7 +389,7 @@ void node_add_cache(unsigned int nid, struct node_cache_attrs *cache_attrs)
 	if (!node->cache_dev)
 		return;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return;

@@ -875,7 +875,7 @@ int register_node(int nid)
 	int cpu;
 	struct node *node;

-	node = kzalloc(sizeof(struct node), GFP_KERNEL);
+	node = kzalloc_obj(struct node, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

diff --git a/drivers/base/physical_location.c b/drivers/base/physical_location.c
index a5539e294d4d..06a2797e0213 100644
--- a/drivers/base/physical_location.c
+++ b/drivers/base/physical_location.c
@@ -21,8 +21,8 @@ bool dev_add_physical_location(struct device *dev)
 	if (!acpi_get_physical_device_location(ACPI_HANDLE(dev), &pld))
 		return false;

-	dev->physical_location =
-		kzalloc(sizeof(*dev->physical_location), GFP_KERNEL);
+	dev->physical_location = kzalloc_obj(*dev->physical_location,
+					     GFP_KERNEL);
 	if (!dev->physical_location) {
 		ACPI_FREE(pld);
 		return false;
diff --git a/drivers/base/power/clock_ops.c b/drivers/base/power/clock_ops.c
index b69bcb37c830..0ac1e6757ec5 100644
--- a/drivers/base/power/clock_ops.c
+++ b/drivers/base/power/clock_ops.c
@@ -201,7 +201,7 @@ static int __pm_clk_add(struct device *dev, const char *con_id,
 	if (!psd)
 		return -EINVAL;

-	ce = kzalloc(sizeof(*ce), GFP_KERNEL);
+	ce = kzalloc_obj(*ce, GFP_KERNEL);
 	if (!ce)
 		return -ENOMEM;

@@ -282,7 +282,7 @@ int of_pm_clk_add_clks(struct device *dev)
 	if (count <= 0)
 		return -ENODEV;

-	clks = kcalloc(count, sizeof(*clks), GFP_KERNEL);
+	clks = kzalloc_objs(*clks, count, GFP_KERNEL);
 	if (!clks)
 		return -ENOMEM;

diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c
index 6ecf9ce4a4e6..5902658ee94f 100644
--- a/drivers/base/power/common.c
+++ b/drivers/base/power/common.c
@@ -27,7 +27,7 @@ int dev_pm_get_subsys_data(struct device *dev)
 {
 	struct pm_subsys_data *psd;

-	psd = kzalloc(sizeof(*psd), GFP_KERNEL);
+	psd = kzalloc_obj(*psd, GFP_KERNEL);
 	if (!psd)
 		return -ENOMEM;

@@ -222,7 +222,7 @@ int dev_pm_domain_attach_list(struct device *dev,
 	if (num_pds <= 0)
 		return 0;

-	pds = kzalloc(sizeof(*pds), GFP_KERNEL);
+	pds = kzalloc_obj(*pds, GFP_KERNEL);
 	if (!pds)
 		return -ENOMEM;

diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c
index ff393cba7649..31acf7ef5d87 100644
--- a/drivers/base/power/qos.c
+++ b/drivers/base/power/qos.c
@@ -198,11 +198,11 @@ static int dev_pm_qos_constraints_allocate(struct device *dev)
 	struct pm_qos_constraints *c;
 	struct blocking_notifier_head *n;

-	qos = kzalloc(sizeof(*qos), GFP_KERNEL);
+	qos = kzalloc_obj(*qos, GFP_KERNEL);
 	if (!qos)
 		return -ENOMEM;

-	n = kcalloc(3, sizeof(*n), GFP_KERNEL);
+	n = kzalloc_objs(*n, 3, GFP_KERNEL);
 	if (!n) {
 		kfree(qos);
 		return -ENOMEM;
@@ -704,7 +704,7 @@ int dev_pm_qos_expose_latency_limit(struct device *dev, s32 value)
 	if (!device_is_registered(dev) || value < 0)
 		return -EINVAL;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -780,7 +780,7 @@ int dev_pm_qos_expose_flags(struct device *dev, s32 val)
 	if (!device_is_registered(dev))
 		return -EINVAL;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -919,7 +919,7 @@ int dev_pm_qos_update_user_latency_tolerance(struct device *dev, s32 val)
 				ret = -EINVAL;
 			goto out;
 		}
-		req = kzalloc(sizeof(*req), GFP_KERNEL);
+		req = kzalloc_obj(*req, GFP_KERNEL);
 		if (!req) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/drivers/base/power/wakeirq.c b/drivers/base/power/wakeirq.c
index aab843f6dfcc..19abc6a8eaa3 100644
--- a/drivers/base/power/wakeirq.c
+++ b/drivers/base/power/wakeirq.c
@@ -55,7 +55,7 @@ int dev_pm_set_wake_irq(struct device *dev, int irq)
 	if (irq < 0)
 		return -EINVAL;

-	wirq = kzalloc(sizeof(*wirq), GFP_KERNEL);
+	wirq = kzalloc_obj(*wirq, GFP_KERNEL);
 	if (!wirq)
 		return -ENOMEM;

@@ -179,7 +179,7 @@ static int __dev_pm_set_dedicated_wake_irq(struct device *dev, int irq, unsigned
 	if (irq < 0)
 		return -EINVAL;

-	wirq = kzalloc(sizeof(*wirq), GFP_KERNEL);
+	wirq = kzalloc_obj(*wirq, GFP_KERNEL);
 	if (!wirq)
 		return -ENOMEM;

diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
index e69033d16fba..a3714a9e4e46 100644
--- a/drivers/base/power/wakeup.c
+++ b/drivers/base/power/wakeup.c
@@ -83,7 +83,7 @@ static struct wakeup_source *wakeup_source_create(const char *name)
 	const char *ws_name;
 	int id;

-	ws = kzalloc(sizeof(*ws), GFP_KERNEL);
+	ws = kzalloc_obj(*ws, GFP_KERNEL);
 	if (!ws)
 		goto err_ws;

diff --git a/drivers/base/power/wakeup_stats.c b/drivers/base/power/wakeup_stats.c
index 3ffd427248e8..af888678156f 100644
--- a/drivers/base/power/wakeup_stats.c
+++ b/drivers/base/power/wakeup_stats.c
@@ -141,7 +141,7 @@ static struct device *wakeup_source_device_create(struct device *parent,
 	struct device *dev = NULL;
 	int retval;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		retval = -ENOMEM;
 		goto error;
diff --git a/drivers/base/regmap/regcache-flat.c b/drivers/base/regmap/regcache-flat.c
index c924817e19b1..025e6749bb24 100644
--- a/drivers/base/regmap/regcache-flat.c
+++ b/drivers/base/regmap/regcache-flat.c
@@ -36,7 +36,7 @@ static int regcache_flat_init(struct regmap *map)
 		return -EINVAL;

 	cache_size = regcache_flat_get_index(map, map->max_register) + 1;
-	cache = kzalloc(struct_size(cache, data, cache_size), map->alloc_flags);
+	cache = kzalloc_flex(*cache, data, cache_size, map->alloc_flags);
 	if (!cache)
 		return -ENOMEM;

diff --git a/drivers/base/regmap/regcache-maple.c b/drivers/base/regmap/regcache-maple.c
index 4134a77ae1d6..49ba7282e4b8 100644
--- a/drivers/base/regmap/regcache-maple.c
+++ b/drivers/base/regmap/regcache-maple.c
@@ -294,7 +294,7 @@ static int regcache_maple_init(struct regmap *map)
 {
 	struct maple_tree *mt;

-	mt = kmalloc(sizeof(*mt), map->alloc_flags);
+	mt = kmalloc_obj(*mt, map->alloc_flags);
 	if (!mt)
 		return -ENOMEM;
 	map->cache = mt;
diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c
index 3344b82c3799..a69e8b4c359b 100644
--- a/drivers/base/regmap/regcache-rbtree.c
+++ b/drivers/base/regmap/regcache-rbtree.c
@@ -185,7 +185,7 @@ static int regcache_rbtree_init(struct regmap *map)
 {
 	struct regcache_rbtree_ctx *rbtree_ctx;

-	map->cache = kmalloc(sizeof *rbtree_ctx, map->alloc_flags);
+	map->cache = kmalloc_obj(*rbtree_ctx, map->alloc_flags);
 	if (!map->cache)
 		return -ENOMEM;

@@ -320,7 +320,7 @@ regcache_rbtree_node_alloc(struct regmap *map, unsigned int reg)
 	const struct regmap_range *range;
 	int i;

-	rbnode = kzalloc(sizeof(*rbnode), map->alloc_flags);
+	rbnode = kzalloc_obj(*rbnode, map->alloc_flags);
 	if (!rbnode)
 		return NULL;

diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
index d596526dccbb..750a4c4b755e 100644
--- a/drivers/base/regmap/regcache.c
+++ b/drivers/base/regmap/regcache.c
@@ -66,8 +66,7 @@ static int regcache_hw_init(struct regmap *map)
 	}

 	map->num_reg_defaults = count;
-	map->reg_defaults = kmalloc_array(count, sizeof(struct reg_default),
-					  GFP_KERNEL);
+	map->reg_defaults = kmalloc_objs(struct reg_default, count, GFP_KERNEL);
 	if (!map->reg_defaults)
 		return -ENOMEM;

diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
index c9b4c04b1cf6..611ab7bbdeda 100644
--- a/drivers/base/regmap/regmap-debugfs.c
+++ b/drivers/base/regmap/regmap-debugfs.c
@@ -130,7 +130,7 @@ static unsigned int regmap_debugfs_get_dump_start(struct regmap *map,

 			/* No cache entry?  Start a new one */
 			if (!c) {
-				c = kzalloc(sizeof(*c), GFP_KERNEL);
+				c = kzalloc_obj(*c, GFP_KERNEL);
 				if (!c) {
 					regmap_debugfs_free_dump_cache(map);
 					mutex_unlock(&map->cache_lock);
@@ -555,7 +555,7 @@ void regmap_debugfs_init(struct regmap *map)
 	/* If we don't have the debugfs root yet, postpone init */
 	if (!regmap_debugfs_root) {
 		struct regmap_debugfs_node *node;
-		node = kzalloc(sizeof(*node), GFP_KERNEL);
+		node = kzalloc_obj(*node, GFP_KERNEL);
 		if (!node)
 			return;
 		node->map = map;
diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c
index 6112d942499b..d3e9c6fef37d 100644
--- a/drivers/base/regmap/regmap-irq.c
+++ b/drivers/base/regmap/regmap-irq.c
@@ -706,7 +706,7 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
 		}
 	}

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d)
 		return -ENOMEM;

diff --git a/drivers/base/regmap/regmap-kunit.c b/drivers/base/regmap/regmap-kunit.c
index 6d8279de3ff2..e22bc2a0ea27 100644
--- a/drivers/base/regmap/regmap-kunit.c
+++ b/drivers/base/regmap/regmap-kunit.c
@@ -211,7 +211,7 @@ static struct regmap *gen_regmap(struct kunit *test,

 	get_random_bytes(buf, size);

-	*data = kzalloc(sizeof(**data), GFP_KERNEL);
+	*data = kzalloc_obj(**data, GFP_KERNEL);
 	if (!(*data))
 		goto out_free;
 	(*data)->vals = buf;
@@ -1759,7 +1759,7 @@ static struct regmap *gen_raw_regmap(struct kunit *test,

 	get_random_bytes(buf, size);

-	*data = kzalloc(sizeof(**data), GFP_KERNEL);
+	*data = kzalloc_obj(**data, GFP_KERNEL);
 	if (!(*data))
 		goto out_free;
 	(*data)->vals = (void *)buf;
diff --git a/drivers/base/regmap/regmap-mmio.c b/drivers/base/regmap/regmap-mmio.c
index 29e5f3175301..983ffe7f035a 100644
--- a/drivers/base/regmap/regmap-mmio.c
+++ b/drivers/base/regmap/regmap-mmio.c
@@ -430,7 +430,7 @@ static struct regmap_mmio_context *regmap_mmio_gen_context(struct device *dev,
 	if (config->use_relaxed_mmio && config->io_port)
 		return ERR_PTR(-EINVAL);

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/base/regmap/regmap-ram.c b/drivers/base/regmap/regmap-ram.c
index 4e5b4518ce4d..300745d400ee 100644
--- a/drivers/base/regmap/regmap-ram.c
+++ b/drivers/base/regmap/regmap-ram.c
@@ -66,13 +66,11 @@ struct regmap *__regmap_init_ram(struct device *dev,
 		return ERR_PTR(-EINVAL);
 	}

-	data->read = kcalloc(config->max_register + 1, sizeof(bool),
-			     GFP_KERNEL);
+	data->read = kzalloc_objs(bool, config->max_register + 1, GFP_KERNEL);
 	if (!data->read)
 		return ERR_PTR(-ENOMEM);

-	data->written = kcalloc(config->max_register + 1, sizeof(bool),
-				GFP_KERNEL);
+	data->written = kzalloc_objs(bool, config->max_register + 1, GFP_KERNEL);
 	if (!data->written)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/base/regmap/regmap-raw-ram.c b/drivers/base/regmap/regmap-raw-ram.c
index 76c98814fb8a..6a87df7269c6 100644
--- a/drivers/base/regmap/regmap-raw-ram.c
+++ b/drivers/base/regmap/regmap-raw-ram.c
@@ -123,13 +123,11 @@ struct regmap *__regmap_init_raw_ram(struct device *dev,
 		return ERR_PTR(-EINVAL);
 	}

-	data->read = kcalloc(config->max_register + 1, sizeof(bool),
-			     GFP_KERNEL);
+	data->read = kzalloc_objs(bool, config->max_register + 1, GFP_KERNEL);
 	if (!data->read)
 		return ERR_PTR(-ENOMEM);

-	data->written = kcalloc(config->max_register + 1, sizeof(bool),
-				GFP_KERNEL);
+	data->written = kzalloc_objs(bool, config->max_register + 1, GFP_KERNEL);
 	if (!data->written)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/base/regmap/regmap-spi-avmm.c b/drivers/base/regmap/regmap-spi-avmm.c
index d86a06cadcdb..d5cfa8eeffdc 100644
--- a/drivers/base/regmap/regmap-spi-avmm.c
+++ b/drivers/base/regmap/regmap-spi-avmm.c
@@ -630,7 +630,7 @@ spi_avmm_bridge_ctx_gen(struct spi_device *spi)
 			return ERR_PTR(-EINVAL);
 	}

-	br = kzalloc(sizeof(*br), GFP_KERNEL);
+	br = kzalloc_obj(*br, GFP_KERNEL);
 	if (!br)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/base/regmap/regmap-spi.c b/drivers/base/regmap/regmap-spi.c
index 14b1d88997cb..56cad7763f56 100644
--- a/drivers/base/regmap/regmap-spi.c
+++ b/drivers/base/regmap/regmap-spi.c
@@ -81,7 +81,7 @@ static struct regmap_async *regmap_spi_async_alloc(void)
 {
 	struct regmap_async_spi *async_spi;

-	async_spi = kzalloc(sizeof(*async_spi), GFP_KERNEL);
+	async_spi = kzalloc_obj(*async_spi, GFP_KERNEL);
 	if (!async_spi)
 		return NULL;

diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index 4231e9d4b8ff..443dc31f69d3 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -689,7 +689,7 @@ struct regmap *__regmap_init(struct device *dev,
 	if (!config)
 		goto err;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (map == NULL) {
 		ret = -ENOMEM;
 		goto err;
@@ -1117,7 +1117,7 @@ struct regmap *__regmap_init(struct device *dev,
 			}
 		}

-		new = kzalloc(sizeof(*new), GFP_KERNEL);
+		new = kzalloc_obj(*new, GFP_KERNEL);
 		if (new == NULL) {
 			ret = -ENOMEM;
 			goto err_range;
@@ -1274,7 +1274,7 @@ int regmap_field_bulk_alloc(struct regmap *regmap,
 	struct regmap_field *rf;
 	int i;

-	rf = kcalloc(num_fields, sizeof(*rf), GFP_KERNEL);
+	rf = kzalloc_objs(*rf, num_fields, GFP_KERNEL);
 	if (!rf)
 		return -ENOMEM;

@@ -1384,7 +1384,7 @@ EXPORT_SYMBOL_GPL(devm_regmap_field_free);
 struct regmap_field *regmap_field_alloc(struct regmap *regmap,
 		struct reg_field reg_field)
 {
-	struct regmap_field *rm_field = kzalloc(sizeof(*rm_field), GFP_KERNEL);
+	struct regmap_field *rm_field = kzalloc_obj(*rm_field, GFP_KERNEL);

 	if (!rm_field)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/base/soc.c b/drivers/base/soc.c
index 282c38aece0d..89326dbbf172 100644
--- a/drivers/base/soc.c
+++ b/drivers/base/soc.c
@@ -140,13 +140,13 @@ struct soc_device *soc_device_register(struct soc_device_attribute *soc_dev_attr
 		return NULL;
 	}

-	soc_dev = kzalloc(sizeof(*soc_dev), GFP_KERNEL);
+	soc_dev = kzalloc_obj(*soc_dev, GFP_KERNEL);
 	if (!soc_dev) {
 		ret = -ENOMEM;
 		goto out1;
 	}

-	soc_attr_groups = kcalloc(3, sizeof(*soc_attr_groups), GFP_KERNEL);
+	soc_attr_groups = kzalloc_objs(*soc_attr_groups, 3, GFP_KERNEL);
 	if (!soc_attr_groups) {
 		ret = -ENOMEM;
 		goto out2;
diff --git a/drivers/base/swnode.c b/drivers/base/swnode.c
index 16a8301c25d6..6fcb0c4f13ff 100644
--- a/drivers/base/swnode.c
+++ b/drivers/base/swnode.c
@@ -332,7 +332,7 @@ property_entries_dup(const struct property_entry *properties)
 	while (properties[n].name)
 		n++;

-	p = kcalloc(n + 1, sizeof(*p), GFP_KERNEL);
+	p = kzalloc_objs(*p, n + 1, GFP_KERNEL);
 	if (!p)
 		return ERR_PTR(-ENOMEM);

@@ -758,7 +758,7 @@ static struct software_node *software_node_alloc(const struct property_entry *pr
 	if (IS_ERR(props))
 		return ERR_CAST(props);

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node) {
 		property_entries_free(props);
 		return ERR_PTR(-ENOMEM);
@@ -805,7 +805,7 @@ swnode_register(const struct software_node *node, struct swnode *parent,
 	struct swnode *swnode;
 	int ret;

-	swnode = kzalloc(sizeof(*swnode), GFP_KERNEL);
+	swnode = kzalloc_obj(*swnode, GFP_KERNEL);
 	if (!swnode)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/bcma/driver_pci_host.c b/drivers/bcma/driver_pci_host.c
index 8540052d37c5..2acf87f8de9a 100644
--- a/drivers/bcma/driver_pci_host.c
+++ b/drivers/bcma/driver_pci_host.c
@@ -399,7 +399,7 @@ void bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc)
 		return;
 	}

-	pc_host = kzalloc(sizeof(*pc_host), GFP_KERNEL);
+	pc_host = kzalloc_obj(*pc_host, GFP_KERNEL);
 	if (!pc_host)  {
 		bcma_err(bus, "can not allocate memory");
 		return;
diff --git a/drivers/bcma/host_pci.c b/drivers/bcma/host_pci.c
index 960632197b05..55a4ad2c704a 100644
--- a/drivers/bcma/host_pci.c
+++ b/drivers/bcma/host_pci.c
@@ -165,7 +165,7 @@ static int bcma_host_pci_probe(struct pci_dev *dev,
 	u32 val;

 	/* Alloc */
-	bus = kzalloc(sizeof(*bus), GFP_KERNEL);
+	bus = kzalloc_obj(*bus, GFP_KERNEL);
 	if (!bus)
 		goto out;

diff --git a/drivers/bcma/scan.c b/drivers/bcma/scan.c
index 26d12a7e6ca0..5e77d570767c 100644
--- a/drivers/bcma/scan.c
+++ b/drivers/bcma/scan.c
@@ -479,7 +479,7 @@ int bcma_bus_scan(struct bcma_bus *bus)

 	while (eromptr < eromend) {
 		struct bcma_device *other_core;
-		struct bcma_device *core = kzalloc(sizeof(*core), GFP_KERNEL);
+		struct bcma_device *core = kzalloc_obj(*core, GFP_KERNEL);
 		if (!core) {
 			err = -ENOMEM;
 			goto out;
diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c
index a9affb7c264d..9897dc9ae678 100644
--- a/drivers/block/aoe/aoecmd.c
+++ b/drivers/block/aoe/aoecmd.c
@@ -211,7 +211,7 @@ newtframe(struct aoedev *d, struct aoetgt *t)
 	if (list_empty(&t->ffree)) {
 		if (t->falloc >= NSKBPOOLMAX*2)
 			return NULL;
-		f = kcalloc(1, sizeof(*f), GFP_ATOMIC);
+		f = kzalloc_objs(*f, 1, GFP_ATOMIC);
 		if (f == NULL)
 			return NULL;
 		t->falloc++;
@@ -1431,7 +1431,7 @@ grow_targets(struct aoedev *d)

 	oldn = d->ntargets;
 	newn = oldn * 2;
-	tt = kcalloc(newn, sizeof(*d->targets), GFP_ATOMIC);
+	tt = kzalloc_objs(*d->targets, newn, GFP_ATOMIC);
 	if (!tt)
 		return NULL;
 	memmove(tt, d->targets, sizeof(*d->targets) * oldn);
@@ -1458,7 +1458,7 @@ addtgt(struct aoedev *d, char *addr, ulong nframes)
 		if (!tt)
 			goto nomem;
 	}
-	t = kzalloc(sizeof(*t), GFP_ATOMIC);
+	t = kzalloc_obj(*t, GFP_ATOMIC);
 	if (!t)
 		goto nomem;
 	t->nframes = nframes;
@@ -1699,17 +1699,17 @@ aoecmd_init(void)

 	ncpus = num_online_cpus();

-	iocq = kcalloc(ncpus, sizeof(struct iocq_ktio), GFP_KERNEL);
+	iocq = kzalloc_objs(struct iocq_ktio, ncpus, GFP_KERNEL);
 	if (!iocq)
 		return -ENOMEM;

-	kts = kcalloc(ncpus, sizeof(struct ktstate), GFP_KERNEL);
+	kts = kzalloc_objs(struct ktstate, ncpus, GFP_KERNEL);
 	if (!kts) {
 		ret = -ENOMEM;
 		goto kts_fail;
 	}

-	ktiowq = kcalloc(ncpus, sizeof(wait_queue_head_t), GFP_KERNEL);
+	ktiowq = kzalloc_objs(wait_queue_head_t, ncpus, GFP_KERNEL);
 	if (!ktiowq) {
 		ret = -ENOMEM;
 		goto ktiowq_fail;
diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c
index 3a240755045b..6e8b3807c1c8 100644
--- a/drivers/block/aoe/aoedev.c
+++ b/drivers/block/aoe/aoedev.c
@@ -471,10 +471,10 @@ aoedev_by_aoeaddr(ulong maj, int min, int do_alloc)
 		}
 	if (d || !do_alloc || minor_get(&sysminor, maj, min) < 0)
 		goto out;
-	d = kcalloc(1, sizeof *d, GFP_ATOMIC);
+	d = kzalloc_objs(*d, 1, GFP_ATOMIC);
 	if (!d)
 		goto out;
-	d->targets = kcalloc(NTARGETS, sizeof(*d->targets), GFP_ATOMIC);
+	d->targets = kzalloc_objs(*d->targets, NTARGETS, GFP_ATOMIC);
 	if (!d->targets) {
 		kfree(d);
 		d = NULL;
diff --git a/drivers/block/brd.c b/drivers/block/brd.c
index a5104cf96609..fe9b3b70f22d 100644
--- a/drivers/block/brd.c
+++ b/drivers/block/brd.c
@@ -272,7 +272,7 @@ static struct brd_device *brd_find_or_alloc_device(int i)
 		}
 	}

-	brd = kzalloc(sizeof(*brd), GFP_KERNEL);
+	brd = kzalloc_obj(*brd, GFP_KERNEL);
 	if (!brd) {
 		mutex_unlock(&brd_devices_mutex);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c
index d90fa3e7f4cf..2735ddb58b91 100644
--- a/drivers/block/drbd/drbd_bitmap.c
+++ b/drivers/block/drbd/drbd_bitmap.c
@@ -434,7 +434,7 @@ int drbd_bm_init(struct drbd_device *device)
 {
 	struct drbd_bitmap *b = device->bitmap;
 	WARN_ON(b != NULL);
-	b = kzalloc(sizeof(struct drbd_bitmap), GFP_KERNEL);
+	b = kzalloc_obj(struct drbd_bitmap, GFP_KERNEL);
 	if (!b)
 		return -ENOMEM;
 	spin_lock_init(&b->bm_lock);
@@ -1078,7 +1078,7 @@ static int bm_rw(struct drbd_device *device, const unsigned int flags, unsigned
 	 * as we submit copies of pages anyways.
 	 */

-	ctx = kmalloc(sizeof(struct drbd_bm_aio_ctx), GFP_NOIO);
+	ctx = kmalloc_obj(struct drbd_bm_aio_ctx, GFP_NOIO);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 1f6ac9202b66..64c545f5788c 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -2510,7 +2510,7 @@ struct drbd_resource *drbd_create_resource(const char *name)
 {
 	struct drbd_resource *resource;

-	resource = kzalloc(sizeof(struct drbd_resource), GFP_KERNEL);
+	resource = kzalloc_obj(struct drbd_resource, GFP_KERNEL);
 	if (!resource)
 		goto fail;
 	resource->name = kstrdup(name, GFP_KERNEL);
@@ -2543,7 +2543,7 @@ struct drbd_connection *conn_create(const char *name, struct res_opts *res_opts)
 	struct drbd_resource *resource;
 	struct drbd_connection *connection;

-	connection = kzalloc(sizeof(struct drbd_connection), GFP_KERNEL);
+	connection = kzalloc_obj(struct drbd_connection, GFP_KERNEL);
 	if (!connection)
 		return NULL;

@@ -2552,7 +2552,7 @@ struct drbd_connection *conn_create(const char *name, struct res_opts *res_opts)
 	if (drbd_alloc_socket(&connection->meta))
 		goto fail;

-	connection->current_epoch = kzalloc(sizeof(struct drbd_epoch), GFP_KERNEL);
+	connection->current_epoch = kzalloc_obj(struct drbd_epoch, GFP_KERNEL);
 	if (!connection->current_epoch)
 		goto fail;

@@ -2666,7 +2666,7 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig
 		return ERR_MINOR_OR_VOLUME_EXISTS;

 	/* GFP_KERNEL, we are outside of all write-out paths */
-	device = kzalloc(sizeof(struct drbd_device), GFP_KERNEL);
+	device = kzalloc_obj(struct drbd_device, GFP_KERNEL);
 	if (!device)
 		return ERR_NOMEM;
 	kref_init(&device->kref);
@@ -2725,7 +2725,7 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig
 	INIT_LIST_HEAD(&device->peer_devices);
 	INIT_LIST_HEAD(&device->pending_bitmap_io);
 	for_each_connection(connection, resource) {
-		peer_device = kzalloc(sizeof(struct drbd_peer_device), GFP_KERNEL);
+		peer_device = kzalloc_obj(struct drbd_peer_device, GFP_KERNEL);
 		if (!peer_device)
 			goto out_idr_remove_from_resource;
 		peer_device->connection = connection;
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
index b502038be0a9..fbeb8061e549 100644
--- a/drivers/block/drbd/drbd_nl.c
+++ b/drivers/block/drbd/drbd_nl.c
@@ -1536,7 +1536,7 @@ int drbd_adm_disk_opts(struct sk_buff *skb, struct genl_info *info)
 		goto out;
 	}

-	new_disk_conf = kmalloc(sizeof(struct disk_conf), GFP_KERNEL);
+	new_disk_conf = kmalloc_obj(struct disk_conf, GFP_KERNEL);
 	if (!new_disk_conf) {
 		retcode = ERR_NOMEM;
 		goto fail;
@@ -1785,14 +1785,14 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info)
 	atomic_set(&device->rs_pending_cnt, 0);

 	/* allocation not in the IO path, drbdsetup context */
-	nbc = kzalloc(sizeof(struct drbd_backing_dev), GFP_KERNEL);
+	nbc = kzalloc_obj(struct drbd_backing_dev, GFP_KERNEL);
 	if (!nbc) {
 		retcode = ERR_NOMEM;
 		goto fail;
 	}
 	spin_lock_init(&nbc->md.uuid_lock);

-	new_disk_conf = kzalloc(sizeof(struct disk_conf), GFP_KERNEL);
+	new_disk_conf = kzalloc_obj(struct disk_conf, GFP_KERNEL);
 	if (!new_disk_conf) {
 		retcode = ERR_NOMEM;
 		goto fail;
@@ -2390,7 +2390,7 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info)
 	connection = adm_ctx.connection;
 	mutex_lock(&adm_ctx.resource->adm_mutex);

-	new_net_conf = kzalloc(sizeof(struct net_conf), GFP_KERNEL);
+	new_net_conf = kzalloc_obj(struct net_conf, GFP_KERNEL);
 	if (!new_net_conf) {
 		retcode = ERR_NOMEM;
 		goto out;
@@ -2570,7 +2570,7 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info)
 	}

 	/* allocation not in the IO path, drbdsetup / netlink process context */
-	new_net_conf = kzalloc(sizeof(*new_net_conf), GFP_KERNEL);
+	new_net_conf = kzalloc_obj(*new_net_conf, GFP_KERNEL);
 	if (!new_net_conf) {
 		retcode = ERR_NOMEM;
 		goto fail;
@@ -2840,7 +2840,7 @@ int drbd_adm_resize(struct sk_buff *skb, struct genl_info *info)
 	u_size = rcu_dereference(device->ldev->disk_conf)->disk_size;
 	rcu_read_unlock();
 	if (u_size != (sector_t)rs.resize_size) {
-		new_disk_conf = kmalloc(sizeof(struct disk_conf), GFP_KERNEL);
+		new_disk_conf = kmalloc_obj(struct disk_conf, GFP_KERNEL);
 		if (!new_disk_conf) {
 			retcode = ERR_NOMEM;
 			goto fail_ldev;
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 3de919b6f0e1..2545f949ce45 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -1095,7 +1095,7 @@ static void submit_one_flush(struct drbd_device *device, struct issue_flush_cont
 {
 	struct bio *bio = bio_alloc(device->ldev->backing_bdev, 0,
 				    REQ_OP_WRITE | REQ_PREFLUSH, GFP_NOIO);
-	struct one_flush_context *octx = kmalloc(sizeof(*octx), GFP_NOIO);
+	struct one_flush_context *octx = kmalloc_obj(*octx, GFP_NOIO);

 	if (!octx) {
 		drbd_warn(device, "Could not allocate a octx, CANNOT ISSUE FLUSH\n");
@@ -1592,7 +1592,7 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf

 		/* receiver context, in the writeout path of the other node.
 		 * avoid potential distributed deadlock */
-		epoch = kmalloc(sizeof(struct drbd_epoch), GFP_NOIO);
+		epoch = kmalloc_obj(struct drbd_epoch, GFP_NOIO);
 		if (epoch)
 			break;
 		else
@@ -1605,7 +1605,7 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf
 		drbd_flush(connection);

 		if (atomic_read(&connection->current_epoch->epoch_size)) {
-			epoch = kmalloc(sizeof(struct drbd_epoch), GFP_NOIO);
+			epoch = kmalloc_obj(struct drbd_epoch, GFP_NOIO);
 			if (epoch)
 				break;
 		}
@@ -3547,7 +3547,7 @@ static int receive_protocol(struct drbd_connection *connection, struct packet_in
 		}
 	}

-	new_net_conf = kmalloc(sizeof(struct net_conf), GFP_KERNEL);
+	new_net_conf = kmalloc_obj(struct net_conf, GFP_KERNEL);
 	if (!new_net_conf)
 		goto disconnect;

@@ -3708,7 +3708,7 @@ static int receive_SyncParam(struct drbd_connection *connection, struct packet_i
 	mutex_lock(&connection->resource->conf_update);
 	old_net_conf = peer_device->connection->net_conf;
 	if (get_ldev(device)) {
-		new_disk_conf = kzalloc(sizeof(struct disk_conf), GFP_KERNEL);
+		new_disk_conf = kzalloc_obj(struct disk_conf, GFP_KERNEL);
 		if (!new_disk_conf) {
 			put_ldev(device);
 			mutex_unlock(&connection->resource->conf_update);
@@ -3794,7 +3794,7 @@ static int receive_SyncParam(struct drbd_connection *connection, struct packet_i
 		}

 		if (verify_tfm || csums_tfm) {
-			new_net_conf = kzalloc(sizeof(struct net_conf), GFP_KERNEL);
+			new_net_conf = kzalloc_obj(struct net_conf, GFP_KERNEL);
 			if (!new_net_conf)
 				goto disconnect;

@@ -3932,7 +3932,8 @@ static int receive_sizes(struct drbd_connection *connection, struct packet_info
 		if (my_usize != p_usize) {
 			struct disk_conf *old_disk_conf, *new_disk_conf = NULL;

-			new_disk_conf = kzalloc(sizeof(struct disk_conf), GFP_KERNEL);
+			new_disk_conf = kzalloc_obj(struct disk_conf,
+						    GFP_KERNEL);
 			if (!new_disk_conf) {
 				put_ldev(device);
 				return -ENOMEM;
@@ -5692,7 +5693,7 @@ static int got_OVResult(struct drbd_connection *connection, struct packet_info *
 		drbd_advance_rs_marks(peer_device, device->ov_left);

 	if (device->ov_left == 0) {
-		dw = kmalloc(sizeof(*dw), GFP_NOIO);
+		dw = kmalloc_obj(*dw, GFP_NOIO);
 		if (dw) {
 			dw->w.cb = w_ov_finished;
 			dw->device = device;
diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c
index c2b6c4d9729d..adcba7f1d8ea 100644
--- a/drivers/block/drbd/drbd_state.c
+++ b/drivers/block/drbd/drbd_state.c
@@ -1468,7 +1468,7 @@ _drbd_set_state(struct drbd_device *device, union drbd_state ns,
 	    ns.disk > D_NEGOTIATING)
 		device->last_reattach_jif = jiffies;

-	ascw = kmalloc(sizeof(*ascw), GFP_ATOMIC);
+	ascw = kmalloc_obj(*ascw, GFP_ATOMIC);
 	if (ascw) {
 		ascw->os = os;
 		ascw->ns = ns;
@@ -2351,7 +2351,7 @@ _conn_request_state(struct drbd_connection *connection, union drbd_state mask, u
 	conn_pr_state_change(connection, os, ns_max, flags);
 	remember_new_state(state_change);

-	acscw = kmalloc(sizeof(*acscw), GFP_ATOMIC);
+	acscw = kmalloc_obj(*acscw, GFP_ATOMIC);
 	if (acscw) {
 		acscw->oc = os.conn;
 		acscw->ns_min = ns_min;
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
index dea3e79d044f..0697f99fed18 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
@@ -483,7 +483,7 @@ struct fifo_buffer *fifo_alloc(unsigned int fifo_size)
 {
 	struct fifo_buffer *fb;

-	fb = kzalloc(struct_size(fb, values, fifo_size), GFP_NOIO);
+	fb = kzalloc_flex(*fb, values, fifo_size, GFP_NOIO);
 	if (!fb)
 		return NULL;

@@ -871,7 +871,7 @@ int drbd_resync_finished(struct drbd_peer_device *peer_device)
 		 * is not finished by now).   Retry in 100ms. */

 		schedule_timeout_interruptible(HZ / 10);
-		dw = kmalloc(sizeof(struct drbd_device_work), GFP_ATOMIC);
+		dw = kmalloc_obj(struct drbd_device_work, GFP_ATOMIC);
 		if (dw) {
 			dw->w.cb = w_resync_finished;
 			dw->device = device;
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 98789a5297f2..949bb4adc4bf 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -355,8 +355,7 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,

 	if (rq->bio != rq->biotail) {

-		bvec = kmalloc_array(nr_bvec, sizeof(struct bio_vec),
-				     GFP_NOIO);
+		bvec = kmalloc_objs(struct bio_vec, nr_bvec, GFP_NOIO);
 		if (!bvec)
 			return -EIO;
 		cmd->bvec = bvec;
@@ -823,7 +822,7 @@ static void loop_queue_work(struct loop_device *lo, struct loop_cmd *cmd)
 	if (worker)
 		goto queue_work;

-	worker = kzalloc(sizeof(struct loop_worker), GFP_NOWAIT);
+	worker = kzalloc_obj(struct loop_worker, GFP_NOWAIT);
 	/*
 	 * In the event we cannot allocate a worker, just queue on the
 	 * rootcg worker and issue the I/O as the rootcg
@@ -2010,7 +2009,7 @@ static int loop_add(int i)
 	int err;

 	err = -ENOMEM;
-	lo = kzalloc(sizeof(*lo), GFP_KERNEL);
+	lo = kzalloc_obj(*lo, GFP_KERNEL);
 	if (!lo)
 		goto out;
 	lo->worker_tree = RB_ROOT;
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index f6c33b21f69e..d4993d7355dc 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -307,7 +307,7 @@ static void nbd_mark_nsock_dead(struct nbd_device *nbd, struct nbd_sock *nsock,
 {
 	if (!nsock->dead && notify && !nbd_disconnected(nbd->config)) {
 		struct link_dead_args *args;
-		args = kmalloc(sizeof(struct link_dead_args), GFP_NOIO);
+		args = kmalloc_obj(struct link_dead_args, GFP_NOIO);
 		if (args) {
 			INIT_WORK(&args->work, nbd_dead_link_work);
 			args->index = nbd->index;
@@ -1274,7 +1274,7 @@ static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg,
 		goto put_socket;
 	}

-	nsock = kzalloc(sizeof(*nsock), GFP_KERNEL);
+	nsock = kzalloc_obj(*nsock, GFP_KERNEL);
 	if (!nsock) {
 		err = -ENOMEM;
 		goto put_socket;
@@ -1322,7 +1322,7 @@ static int nbd_reconnect_socket(struct nbd_device *nbd, unsigned long arg)
 	if (!sock)
 		return err;

-	args = kzalloc(sizeof(*args), GFP_KERNEL);
+	args = kzalloc_obj(*args, GFP_KERNEL);
 	if (!args) {
 		sockfd_put(sock);
 		return -ENOMEM;
@@ -1510,7 +1510,7 @@ static int nbd_start_device(struct nbd_device *nbd)
 	for (i = 0; i < num_connections; i++) {
 		struct recv_thread_args *args;

-		args = kzalloc(sizeof(*args), GFP_KERNEL);
+		args = kzalloc_obj(*args, GFP_KERNEL);
 		if (!args) {
 			sock_shutdown(nbd);
 			/*
@@ -1677,7 +1677,7 @@ static int nbd_alloc_and_init_config(struct nbd_device *nbd)
 	if (!try_module_get(THIS_MODULE))
 		return -ENODEV;

-	config = kzalloc(sizeof(struct nbd_config), GFP_NOFS);
+	config = kzalloc_obj(struct nbd_config, GFP_NOFS);
 	if (!config) {
 		module_put(THIS_MODULE);
 		return -ENOMEM;
@@ -1916,7 +1916,7 @@ static struct nbd_device *nbd_dev_add(int index, unsigned int refs)
 	struct gendisk *disk;
 	int err = -ENOMEM;

-	nbd = kzalloc(sizeof(struct nbd_device), GFP_KERNEL);
+	nbd = kzalloc_obj(struct nbd_device, GFP_KERNEL);
 	if (!nbd)
 		goto out;

diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c
index 740a8ac42075..6eab18d814e5 100644
--- a/drivers/block/null_blk/main.c
+++ b/drivers/block/null_blk/main.c
@@ -778,7 +778,7 @@ static struct nullb_device *null_alloc_dev(void)
 {
 	struct nullb_device *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

@@ -867,7 +867,7 @@ static struct nullb_page *null_alloc_page(void)
 {
 	struct nullb_page *t_page;

-	t_page = kmalloc(sizeof(struct nullb_page), GFP_NOIO);
+	t_page = kmalloc_obj(struct nullb_page, GFP_NOIO);
 	if (!t_page)
 		return NULL;

@@ -1818,8 +1818,7 @@ static int setup_queues(struct nullb *nullb)
 	if (g_poll_queues)
 		nqueues += g_poll_queues;

-	nullb->queues = kcalloc(nqueues, sizeof(struct nullb_queue),
-				GFP_KERNEL);
+	nullb->queues = kzalloc_objs(struct nullb_queue, nqueues, GFP_KERNEL);
 	if (!nullb->queues)
 		return -ENOMEM;

diff --git a/drivers/block/null_blk/zoned.c b/drivers/block/null_blk/zoned.c
index 0ada35dc0989..384bdce6a9b7 100644
--- a/drivers/block/null_blk/zoned.c
+++ b/drivers/block/null_blk/zoned.c
@@ -91,8 +91,8 @@ int null_init_zoned_dev(struct nullb_device *dev,
 	dev->nr_zones = round_up(dev_capacity_sects, dev->zone_size_sects)
 		>> ilog2(dev->zone_size_sects);

-	dev->zones = kvmalloc_array(dev->nr_zones, sizeof(struct nullb_zone),
-				    GFP_KERNEL | __GFP_ZERO);
+	dev->zones = kvmalloc_objs(struct nullb_zone, dev->nr_zones,
+				   GFP_KERNEL | __GFP_ZERO);
 	if (!dev->zones)
 		return -ENOMEM;

diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c
index 8892f218a814..4d4b6bcbfa5f 100644
--- a/drivers/block/ps3disk.c
+++ b/drivers/block/ps3disk.c
@@ -416,7 +416,7 @@ static int ps3disk_probe(struct ps3_system_bus_device *_dev)
 	__set_bit(devidx, &ps3disk_mask);
 	mutex_unlock(&ps3disk_mask_mutex);

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		error = -ENOMEM;
 		goto fail;
diff --git a/drivers/block/ps3vram.c b/drivers/block/ps3vram.c
index bdcf083b45e2..01c743c092be 100644
--- a/drivers/block/ps3vram.c
+++ b/drivers/block/ps3vram.c
@@ -401,9 +401,8 @@ static int ps3vram_cache_init(struct ps3_system_bus_device *dev)

 	priv->cache.page_count = CACHE_PAGE_COUNT;
 	priv->cache.page_size = CACHE_PAGE_SIZE;
-	priv->cache.tags = kcalloc(CACHE_PAGE_COUNT,
-				   sizeof(struct ps3vram_tag),
-				   GFP_KERNEL);
+	priv->cache.tags = kzalloc_objs(struct ps3vram_tag, CACHE_PAGE_COUNT,
+					GFP_KERNEL);
 	if (!priv->cache.tags)
 		return -ENOMEM;

@@ -613,7 +612,7 @@ static int ps3vram_probe(struct ps3_system_bus_device *dev)
 	    reports_size, xdr_lpar;
 	char *rest;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		error = -ENOMEM;
 		goto fail;
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 8f441eb8b192..c9cf07416fa5 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -707,7 +707,7 @@ static struct rbd_client *rbd_client_create(struct ceph_options *ceph_opts)
 	int ret = -ENOMEM;

 	dout("%s:\n", __func__);
-	rbdc = kmalloc(sizeof(struct rbd_client), GFP_KERNEL);
+	rbdc = kmalloc_obj(struct rbd_client, GFP_KERNEL);
 	if (!rbdc)
 		goto out_opt;

@@ -2572,9 +2572,9 @@ static int rbd_img_fill_request(struct rbd_img_request *img_req,
 	}

 	for_each_obj_request(img_req, obj_req) {
-		obj_req->bvec_pos.bvecs = kmalloc_array(obj_req->bvec_count,
-					      sizeof(*obj_req->bvec_pos.bvecs),
-					      GFP_NOIO);
+		obj_req->bvec_pos.bvecs = kmalloc_objs(*obj_req->bvec_pos.bvecs,
+						       obj_req->bvec_count,
+						       GFP_NOIO);
 		if (!obj_req->bvec_pos.bvecs)
 			return -ENOMEM;
 	}
@@ -3078,9 +3078,9 @@ static int setup_copyup_bvecs(struct rbd_obj_request *obj_req, u64 obj_overlap)

 	rbd_assert(!obj_req->copyup_bvecs);
 	obj_req->copyup_bvec_count = calc_pages_for(0, obj_overlap);
-	obj_req->copyup_bvecs = kcalloc(obj_req->copyup_bvec_count,
-					sizeof(*obj_req->copyup_bvecs),
-					GFP_NOIO);
+	obj_req->copyup_bvecs = kzalloc_objs(*obj_req->copyup_bvecs,
+					     obj_req->copyup_bvec_count,
+					     GFP_NOIO);
 	if (!obj_req->copyup_bvecs)
 		return -ENOMEM;

@@ -5289,7 +5289,7 @@ static struct rbd_spec *rbd_spec_alloc(void)
 {
 	struct rbd_spec *spec;

-	spec = kzalloc(sizeof (*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return NULL;

@@ -5352,7 +5352,7 @@ static struct rbd_device *__rbd_dev_create(struct rbd_spec *spec)
 {
 	struct rbd_device *rbd_dev;

-	rbd_dev = kzalloc(sizeof(*rbd_dev), GFP_KERNEL);
+	rbd_dev = kzalloc_obj(*rbd_dev, GFP_KERNEL);
 	if (!rbd_dev)
 		return NULL;

@@ -6509,7 +6509,7 @@ static int rbd_add_parse_args(const char *buf,

 	/* Initialize all rbd options to the defaults */

-	pctx.opts = kzalloc(sizeof(*pctx.opts), GFP_KERNEL);
+	pctx.opts = kzalloc_obj(*pctx.opts, GFP_KERNEL);
 	if (!pctx.opts)
 		goto out_mem;

diff --git a/drivers/block/rnbd/rnbd-clt-sysfs.c b/drivers/block/rnbd/rnbd-clt-sysfs.c
index 144aea1466a4..6ca1221693ff 100644
--- a/drivers/block/rnbd/rnbd-clt-sysfs.c
+++ b/drivers/block/rnbd/rnbd-clt-sysfs.c
@@ -591,7 +591,7 @@ static ssize_t rnbd_clt_map_device_store(struct kobject *kobj,
 	opt.dest_port = &port_nr;
 	opt.access_mode = &access_mode;
 	opt.nr_poll_queues = &nr_poll_queues;
-	addrs = kcalloc(ARRAY_SIZE(paths) * 2, sizeof(*addrs), GFP_KERNEL);
+	addrs = kzalloc_objs(*addrs, ARRAY_SIZE(paths) * 2, GFP_KERNEL);
 	if (!addrs)
 		return -ENOMEM;

diff --git a/drivers/block/rnbd/rnbd-clt.c b/drivers/block/rnbd/rnbd-clt.c
index 757df2896aeb..59896090d856 100644
--- a/drivers/block/rnbd/rnbd-clt.c
+++ b/drivers/block/rnbd/rnbd-clt.c
@@ -324,7 +324,7 @@ static struct rnbd_iu *rnbd_get_iu(struct rnbd_clt_session *sess,
 	struct rnbd_iu *iu;
 	struct rtrs_permit *permit;

-	iu = kzalloc(sizeof(*iu), GFP_KERNEL);
+	iu = kzalloc_obj(*iu, GFP_KERNEL);
 	if (!iu)
 		return NULL;

@@ -541,7 +541,7 @@ static int send_msg_open(struct rnbd_clt_dev *dev, enum wait_type wait)
 	};
 	int err, errno;

-	rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
+	rsp = kzalloc_obj(*rsp, GFP_KERNEL);
 	if (!rsp)
 		return -ENOMEM;

@@ -587,7 +587,7 @@ static int send_msg_sess_info(struct rnbd_clt_session *sess, enum wait_type wait
 	};
 	int err, errno;

-	rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
+	rsp = kzalloc_obj(*rsp, GFP_KERNEL);
 	if (!rsp)
 		return -ENOMEM;

@@ -1417,9 +1417,8 @@ static struct rnbd_clt_dev *init_dev(struct rnbd_clt_session *sess,
 	 * nr_cpu_ids: the number of softirq queues
 	 * nr_poll_queues: the number of polling queues
 	 */
-	dev->hw_queues = kcalloc(nr_cpu_ids + nr_poll_queues,
-				 sizeof(*dev->hw_queues),
-				 GFP_KERNEL);
+	dev->hw_queues = kzalloc_objs(*dev->hw_queues,
+				      nr_cpu_ids + nr_poll_queues, GFP_KERNEL);
 	if (!dev->hw_queues) {
 		ret = -ENOMEM;
 		goto out_alloc;
@@ -1565,7 +1564,7 @@ struct rnbd_clt_dev *rnbd_clt_map_device(const char *sessname,
 		goto put_dev;
 	}

-	rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
+	rsp = kzalloc_obj(*rsp, GFP_KERNEL);
 	if (!rsp) {
 		ret = -ENOMEM;
 		goto del_dev;
diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c
index 7eeb321d6140..d644e59529ca 100644
--- a/drivers/block/rnbd/rnbd-srv.c
+++ b/drivers/block/rnbd/rnbd-srv.c
@@ -128,7 +128,7 @@ static int process_rdma(struct rnbd_srv_session *srv_sess,

 	trace_process_rdma(srv_sess, msg, id, datalen, usrlen);

-	priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kmalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -287,7 +287,7 @@ static int create_sess(struct rtrs_srv_sess *rtrs)

 		return err;
 	}
-	srv_sess = kzalloc(sizeof(*srv_sess), GFP_KERNEL);
+	srv_sess = kzalloc_obj(*srv_sess, GFP_KERNEL);
 	if (!srv_sess)
 		return -ENOMEM;

@@ -422,7 +422,7 @@ static struct rnbd_srv_sess_dev
 	struct rnbd_srv_sess_dev *sess_dev;
 	int error;

-	sess_dev = kzalloc(sizeof(*sess_dev), GFP_KERNEL);
+	sess_dev = kzalloc_obj(*sess_dev, GFP_KERNEL);
 	if (!sess_dev)
 		return ERR_PTR(-ENOMEM);

@@ -441,7 +441,7 @@ static struct rnbd_srv_dev *rnbd_srv_init_srv_dev(struct block_device *bdev)
 {
 	struct rnbd_srv_dev *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c
index db1fe9772a4d..7cf8f8899892 100644
--- a/drivers/block/sunvdc.c
+++ b/drivers/block/sunvdc.c
@@ -992,7 +992,7 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
 		goto err_out_release_mdesc;
 	}

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port) {
 		err = -ENOMEM;
 		goto err_out_release_mdesc;
diff --git a/drivers/block/swim.c b/drivers/block/swim.c
index 416015947ae6..3b015a9c752f 100644
--- a/drivers/block/swim.c
+++ b/drivers/block/swim.c
@@ -896,7 +896,7 @@ static int swim_probe(struct platform_device *dev)

 	/* set platform driver data */

-	swd = kzalloc(sizeof(struct swim_priv), GFP_KERNEL);
+	swd = kzalloc_obj(struct swim_priv, GFP_KERNEL);
 	if (!swd) {
 		ret = -ENOMEM;
 		goto out_release_io;
diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index c13cda58a7c6..c47dc9814e36 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -710,7 +710,7 @@ static DEFINE_MUTEX(ublk_ctl_mutex);
 static struct ublk_batch_fetch_cmd *
 ublk_batch_alloc_fcmd(struct io_uring_cmd *cmd)
 {
-	struct ublk_batch_fetch_cmd *fcmd = kzalloc(sizeof(*fcmd), GFP_NOIO);
+	struct ublk_batch_fetch_cmd *fcmd = kzalloc_obj(*fcmd, GFP_NOIO);

 	if (fcmd) {
 		fcmd->cmd = cmd;
@@ -4610,7 +4610,7 @@ static int ublk_ctrl_add_dev(const struct ublksrv_ctrl_cmd *header)
 		goto out_unlock;

 	ret = -ENOMEM;
-	ub = kzalloc(struct_size(ub, queues, info.nr_hw_queues), GFP_KERNEL);
+	ub = kzalloc_flex(*ub, queues, info.nr_hw_queues, GFP_KERNEL);
 	if (!ub)
 		goto out_unlock;
 	mutex_init(&ub->mutex);
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 357434bdae99..1ee1ebe693bf 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -168,7 +168,7 @@ static int virtblk_setup_discard_write_zeroes_erase(struct request *req, bool un
 	if (unmap)
 		flags |= VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP;

-	range = kmalloc_array(segments, sizeof(*range), GFP_ATOMIC);
+	range = kmalloc_objs(*range, segments, GFP_ATOMIC);
 	if (!range)
 		return -ENOMEM;

@@ -991,12 +991,12 @@ static int init_vq(struct virtio_blk *vblk)
 				vblk->io_queues[HCTX_TYPE_READ],
 				vblk->io_queues[HCTX_TYPE_POLL]);

-	vblk->vqs = kmalloc_array(num_vqs, sizeof(*vblk->vqs), GFP_KERNEL);
+	vblk->vqs = kmalloc_objs(*vblk->vqs, num_vqs, GFP_KERNEL);
 	if (!vblk->vqs)
 		return -ENOMEM;

-	vqs_info = kcalloc(num_vqs, sizeof(*vqs_info), GFP_KERNEL);
-	vqs = kmalloc_array(num_vqs, sizeof(*vqs), GFP_KERNEL);
+	vqs_info = kzalloc_objs(*vqs_info, num_vqs, GFP_KERNEL);
+	vqs = kmalloc_objs(*vqs, num_vqs, GFP_KERNEL);
 	if (!vqs_info || !vqs) {
 		err = -ENOMEM;
 		goto out;
@@ -1455,7 +1455,7 @@ static int virtblk_probe(struct virtio_device *vdev)
 		goto out;
 	index = err;

-	vdev->priv = vblk = kmalloc(sizeof(*vblk), GFP_KERNEL);
+	vdev->priv = vblk = kmalloc_obj(*vblk, GFP_KERNEL);
 	if (!vblk) {
 		err = -ENOMEM;
 		goto out_free_index;
diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
index a7c2b04ab943..bc665b8abd7b 100644
--- a/drivers/block/xen-blkback/blkback.c
+++ b/drivers/block/xen-blkback/blkback.c
@@ -846,8 +846,8 @@ static int xen_blkbk_map(struct xen_blkif_ring *ring,
 			 * We are using persistent grants, the grant is
 			 * not mapped but we might have room for it.
 			 */
-			persistent_gnt = kmalloc(sizeof(struct persistent_gnt),
-				                 GFP_KERNEL);
+			persistent_gnt = kmalloc_obj(struct persistent_gnt,
+						     GFP_KERNEL);
 			if (!persistent_gnt) {
 				/*
 				 * If we don't have enough memory to
diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
index 0621878940ae..448417097837 100644
--- a/drivers/block/xen-blkback/xenbus.c
+++ b/drivers/block/xen-blkback/xenbus.c
@@ -131,8 +131,8 @@ static int xen_blkif_alloc_rings(struct xen_blkif *blkif)
 {
 	unsigned int r;

-	blkif->rings = kcalloc(blkif->nr_rings, sizeof(struct xen_blkif_ring),
-			       GFP_KERNEL);
+	blkif->rings = kzalloc_objs(struct xen_blkif_ring, blkif->nr_rings,
+				    GFP_KERNEL);
 	if (!blkif->rings)
 		return -ENOMEM;

@@ -628,8 +628,7 @@ static int xen_blkbk_probe(struct xenbus_device *dev,
 			   const struct xenbus_device_id *id)
 {
 	int err;
-	struct backend_info *be = kzalloc(sizeof(struct backend_info),
-					  GFP_KERNEL);
+	struct backend_info *be = kzalloc_obj(struct backend_info, GFP_KERNEL);

 	/* match the pr_debug in xen_blkbk_remove */
 	pr_debug("%s %p %d\n", __func__, dev, dev->otherend_id);
@@ -1010,18 +1009,19 @@ static int read_per_ring_refs(struct xen_blkif_ring *ring, const char *dir)

 	err = -ENOMEM;
 	for (i = 0; i < nr_grefs * XEN_BLKIF_REQS_PER_PAGE; i++) {
-		req = kzalloc(sizeof(*req), GFP_KERNEL);
+		req = kzalloc_obj(*req, GFP_KERNEL);
 		if (!req)
 			goto fail;
 		list_add_tail(&req->free_list, &ring->pending_free);
 		for (j = 0; j < MAX_INDIRECT_SEGMENTS; j++) {
-			req->segments[j] = kzalloc(sizeof(*req->segments[0]), GFP_KERNEL);
+			req->segments[j] = kzalloc_obj(*req->segments[0],
+						       GFP_KERNEL);
 			if (!req->segments[j])
 				goto fail;
 		}
 		for (j = 0; j < MAX_INDIRECT_PAGES; j++) {
-			req->indirect_pages[j] = kzalloc(sizeof(*req->indirect_pages[0]),
-							 GFP_KERNEL);
+			req->indirect_pages[j] = kzalloc_obj(*req->indirect_pages[0],
+							     GFP_KERNEL);
 			if (!req->indirect_pages[j])
 				goto fail;
 		}
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 04fc6b552c04..e8aec3857dd5 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -314,7 +314,7 @@ static int fill_grant_buffer(struct blkfront_ring_info *rinfo, int num)
 	int i = 0;

 	while (i < num) {
-		gnt_list_entry = kzalloc(sizeof(struct grant), GFP_NOIO);
+		gnt_list_entry = kzalloc_obj(struct grant, GFP_NOIO);
 		if (!gnt_list_entry)
 			goto out_of_memory;

@@ -1980,7 +1980,7 @@ static int blkfront_probe(struct xenbus_device *dev,
 		}
 		kfree(type);
 	}
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure");
 		return -ENOMEM;
@@ -2207,17 +2207,15 @@ static int blkfront_setup_indirect(struct blkfront_ring_info *rinfo)

 	for (i = 0; i < BLK_RING_SIZE(info); i++) {
 		rinfo->shadow[i].grants_used =
-			kvcalloc(grants,
-				 sizeof(rinfo->shadow[i].grants_used[0]),
-				 GFP_KERNEL);
-		rinfo->shadow[i].sg = kvcalloc(psegs,
-					       sizeof(rinfo->shadow[i].sg[0]),
-					       GFP_KERNEL);
+			kvzalloc_objs(rinfo->shadow[i].grants_used[0], grants,
+				      GFP_KERNEL);
+		rinfo->shadow[i].sg = kvzalloc_objs(rinfo->shadow[i].sg[0],
+						    psegs, GFP_KERNEL);
 		if (info->max_indirect_segments)
 			rinfo->shadow[i].indirect_grants =
-				kvcalloc(INDIRECT_GREFS(grants),
-					 sizeof(rinfo->shadow[i].indirect_grants[0]),
-					 GFP_KERNEL);
+				kvzalloc_objs(rinfo->shadow[i].indirect_grants[0],
+					      INDIRECT_GREFS(grants),
+					      GFP_KERNEL);
 		if ((rinfo->shadow[i].grants_used == NULL) ||
 			(rinfo->shadow[i].sg == NULL) ||
 		     (info->max_indirect_segments &&
diff --git a/drivers/block/z2ram.c b/drivers/block/z2ram.c
index 8c1c7f4211eb..e12abdec2647 100644
--- a/drivers/block/z2ram.c
+++ b/drivers/block/z2ram.c
@@ -187,8 +187,8 @@ static int z2_open(struct gendisk *disk, blk_mode_t mode)
 			    (unsigned long)z_remap_nocache_nonser(paddr, size);
 #endif
 			z2ram_map =
-			    kmalloc_array(size / Z2RAM_CHUNKSIZE,
-					  sizeof(z2ram_map[0]), GFP_KERNEL);
+			    kmalloc_objs(z2ram_map[0], size / Z2RAM_CHUNKSIZE,
+					 GFP_KERNEL);
 			if (z2ram_map == NULL) {
 				printk(KERN_ERR DEVICE_NAME
 				       ": cannot get mem for z2ram_map\n");
diff --git a/drivers/block/zloop.c b/drivers/block/zloop.c
index 8e334f5025fc..9da9855dd6e0 100644
--- a/drivers/block/zloop.c
+++ b/drivers/block/zloop.c
@@ -492,7 +492,7 @@ static void zloop_rw(struct zloop_cmd *cmd)
 	if (rq->bio != rq->biotail) {
 		struct bio_vec *bvec;

-		cmd->bvec = kmalloc_array(nr_bvec, sizeof(*cmd->bvec), GFP_NOIO);
+		cmd->bvec = kmalloc_objs(*cmd->bvec, nr_bvec, GFP_NOIO);
 		if (!cmd->bvec) {
 			ret = -EIO;
 			goto unlock;
@@ -997,7 +997,7 @@ static int zloop_ctl_add(struct zloop_options *opts)
 		goto out;
 	}

-	zlo = kvzalloc(struct_size(zlo, zones, nr_zones), GFP_KERNEL);
+	zlo = kvzalloc_flex(*zlo, zones, nr_zones, GFP_KERNEL);
 	if (!zlo) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/block/zram/backend_deflate.c b/drivers/block/zram/backend_deflate.c
index b75016e0e654..7dee3aacb2d8 100644
--- a/drivers/block/zram/backend_deflate.c
+++ b/drivers/block/zram/backend_deflate.c
@@ -54,7 +54,7 @@ static int deflate_create(struct zcomp_params *params, struct zcomp_ctx *ctx)
 	size_t sz;
 	int ret;

-	zctx = kzalloc(sizeof(*zctx), GFP_KERNEL);
+	zctx = kzalloc_obj(*zctx, GFP_KERNEL);
 	if (!zctx)
 		return -ENOMEM;

diff --git a/drivers/block/zram/backend_lz4.c b/drivers/block/zram/backend_lz4.c
index daccd60857eb..3416fec9e982 100644
--- a/drivers/block/zram/backend_lz4.c
+++ b/drivers/block/zram/backend_lz4.c
@@ -41,7 +41,7 @@ static int lz4_create(struct zcomp_params *params, struct zcomp_ctx *ctx)
 {
 	struct lz4_ctx *zctx;

-	zctx = kzalloc(sizeof(*zctx), GFP_KERNEL);
+	zctx = kzalloc_obj(*zctx, GFP_KERNEL);
 	if (!zctx)
 		return -ENOMEM;

@@ -51,11 +51,11 @@ static int lz4_create(struct zcomp_params *params, struct zcomp_ctx *ctx)
 		if (!zctx->mem)
 			goto error;
 	} else {
-		zctx->dstrm = kzalloc(sizeof(*zctx->dstrm), GFP_KERNEL);
+		zctx->dstrm = kzalloc_obj(*zctx->dstrm, GFP_KERNEL);
 		if (!zctx->dstrm)
 			goto error;

-		zctx->cstrm = kzalloc(sizeof(*zctx->cstrm), GFP_KERNEL);
+		zctx->cstrm = kzalloc_obj(*zctx->cstrm, GFP_KERNEL);
 		if (!zctx->cstrm)
 			goto error;
 	}
diff --git a/drivers/block/zram/backend_lz4hc.c b/drivers/block/zram/backend_lz4hc.c
index 9e8a35dfa56d..fd94df9193d3 100644
--- a/drivers/block/zram/backend_lz4hc.c
+++ b/drivers/block/zram/backend_lz4hc.c
@@ -41,7 +41,7 @@ static int lz4hc_create(struct zcomp_params *params, struct zcomp_ctx *ctx)
 {
 	struct lz4hc_ctx *zctx;

-	zctx = kzalloc(sizeof(*zctx), GFP_KERNEL);
+	zctx = kzalloc_obj(*zctx, GFP_KERNEL);
 	if (!zctx)
 		return -ENOMEM;

@@ -51,11 +51,11 @@ static int lz4hc_create(struct zcomp_params *params, struct zcomp_ctx *ctx)
 		if (!zctx->mem)
 			goto error;
 	} else {
-		zctx->dstrm = kzalloc(sizeof(*zctx->dstrm), GFP_KERNEL);
+		zctx->dstrm = kzalloc_obj(*zctx->dstrm, GFP_KERNEL);
 		if (!zctx->dstrm)
 			goto error;

-		zctx->cstrm = kzalloc(sizeof(*zctx->cstrm), GFP_KERNEL);
+		zctx->cstrm = kzalloc_obj(*zctx->cstrm, GFP_KERNEL);
 		if (!zctx->cstrm)
 			goto error;
 	}
diff --git a/drivers/block/zram/backend_zstd.c b/drivers/block/zram/backend_zstd.c
index 81defb98ed09..d9303269b90d 100644
--- a/drivers/block/zram/backend_zstd.c
+++ b/drivers/block/zram/backend_zstd.c
@@ -53,7 +53,7 @@ static int zstd_setup_params(struct zcomp_params *params)
 	zstd_compression_parameters prm;
 	struct zstd_params *zp;

-	zp = kzalloc(sizeof(*zp), GFP_KERNEL);
+	zp = kzalloc_obj(*zp, GFP_KERNEL);
 	if (!zp)
 		return -ENOMEM;

@@ -122,7 +122,7 @@ static int zstd_create(struct zcomp_params *params, struct zcomp_ctx *ctx)
 	zstd_parameters prm;
 	size_t sz;

-	zctx = kzalloc(sizeof(*zctx), GFP_KERNEL);
+	zctx = kzalloc_obj(*zctx, GFP_KERNEL);
 	if (!zctx)
 		return -ENOMEM;

diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c
index b1bd1daa0060..b53fb5fbc041 100644
--- a/drivers/block/zram/zcomp.c
+++ b/drivers/block/zram/zcomp.c
@@ -238,7 +238,7 @@ struct zcomp *zcomp_create(const char *alg, struct zcomp_params *params)
 	 */
 	BUILD_BUG_ON(ARRAY_SIZE(backends) <= 1);

-	comp = kzalloc(sizeof(struct zcomp), GFP_KERNEL);
+	comp = kzalloc_obj(struct zcomp, GFP_KERNEL);
 	if (!comp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 61d3e2c74901..3cc82b88b07e 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -250,7 +250,7 @@ static struct zram_pp_ctl *init_pp_ctl(void)
 	struct zram_pp_ctl *ctl;
 	u32 idx;

-	ctl = kmalloc(sizeof(*ctl), GFP_KERNEL);
+	ctl = kmalloc_obj(*ctl, GFP_KERNEL);
 	if (!ctl)
 		return NULL;

@@ -297,7 +297,7 @@ static bool place_pp_slot(struct zram *zram, struct zram_pp_ctl *ctl,
 	struct zram_pp_slot *pps;
 	u32 bid;

-	pps = kmalloc(sizeof(*pps), GFP_NOIO | __GFP_NOWARN);
+	pps = kmalloc_obj(*pps, GFP_NOIO | __GFP_NOWARN);
 	if (!pps)
 		return false;

@@ -855,7 +855,7 @@ static struct zram_wb_ctl *init_wb_ctl(struct zram *zram)
 	struct zram_wb_ctl *wb_ctl;
 	int i;

-	wb_ctl = kmalloc(sizeof(*wb_ctl), GFP_KERNEL);
+	wb_ctl = kmalloc_obj(*wb_ctl, GFP_KERNEL);
 	if (!wb_ctl)
 		return NULL;

@@ -875,7 +875,7 @@ static struct zram_wb_ctl *init_wb_ctl(struct zram *zram)
 		 * writeback can still proceed, even if there is only one
 		 * request on the idle list.
 		 */
-		req = kzalloc(sizeof(*req), GFP_KERNEL | __GFP_NOWARN);
+		req = kzalloc_obj(*req, GFP_KERNEL | __GFP_NOWARN);
 		if (!req)
 			break;

@@ -1452,7 +1452,7 @@ static void read_from_bdev_async(struct zram *zram, struct page *page,
 	struct zram_rb_req *req;
 	struct bio *bio;

-	req = kmalloc(sizeof(*req), GFP_NOIO);
+	req = kmalloc_obj(*req, GFP_NOIO);
 	if (!req)
 		return;

@@ -3079,7 +3079,7 @@ static int zram_add(void)
 	struct zram *zram;
 	int ret, device_id;

-	zram = kzalloc(sizeof(struct zram), GFP_KERNEL);
+	zram = kzalloc_obj(struct zram, GFP_KERNEL);
 	if (!zram)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/bpa10x.c b/drivers/bluetooth/bpa10x.c
index e305d04aac9d..af7cd7b217ca 100644
--- a/drivers/bluetooth/bpa10x.c
+++ b/drivers/bluetooth/bpa10x.c
@@ -284,7 +284,7 @@ static int bpa10x_send_frame(struct hci_dev *hdev, struct sk_buff *skb)

 	switch (hci_skb_pkt_type(skb)) {
 	case HCI_COMMAND_PKT:
-		dr = kmalloc(sizeof(*dr), GFP_KERNEL);
+		dr = kmalloc_obj(*dr, GFP_KERNEL);
 		if (!dr) {
 			usb_free_urb(urb);
 			return -ENOMEM;
diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
index 9d29ab811f80..b810c748f4d5 100644
--- a/drivers/bluetooth/btintel.c
+++ b/drivers/bluetooth/btintel.c
@@ -871,7 +871,7 @@ struct regmap *btintel_regmap_init(struct hci_dev *hdev, u16 opcode_read,
 	bt_dev_info(hdev, "regmap: Init R%x-W%x region", opcode_read,
 		    opcode_write);

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/bluetooth/btintel_pcie.c b/drivers/bluetooth/btintel_pcie.c
index eaf5de46a702..54a3705e9063 100644
--- a/drivers/bluetooth/btintel_pcie.c
+++ b/drivers/bluetooth/btintel_pcie.c
@@ -1665,7 +1665,7 @@ static int btintel_pcie_setup_txq_bufs(struct btintel_pcie_data *data,
 	struct data_buf *buf;

 	/* Allocate the same number of buffers as the descriptor */
-	txq->bufs = kmalloc_array(txq->count, sizeof(*buf), GFP_KERNEL);
+	txq->bufs = kmalloc_objs(*buf, txq->count, GFP_KERNEL);
 	if (!txq->bufs)
 		return -ENOMEM;

@@ -1709,7 +1709,7 @@ static int btintel_pcie_setup_rxq_bufs(struct btintel_pcie_data *data,
 	struct data_buf *buf;

 	/* Allocate the same number of buffers as the descriptor */
-	rxq->bufs = kmalloc_array(rxq->count, sizeof(*buf), GFP_KERNEL);
+	rxq->bufs = kmalloc_objs(*buf, rxq->count, GFP_KERNEL);
 	if (!rxq->bufs)
 		return -ENOMEM;

@@ -2191,7 +2191,7 @@ btintel_pcie_get_recovery(struct pci_dev *pdev, struct device *dev)
 		return data;
 	}

-	data = kzalloc(struct_size(data, name, name_len), GFP_ATOMIC);
+	data = kzalloc_flex(*data, name, name_len, GFP_ATOMIC);
 	if (!data)
 		return NULL;

@@ -2306,7 +2306,7 @@ static void btintel_pcie_reset(struct hci_dev *hdev)
 	if (test_and_set_bit(BTINTEL_PCIE_RECOVERY_IN_PROGRESS, &data->flags))
 		return;

-	removal = kzalloc(sizeof(*removal), GFP_ATOMIC);
+	removal = kzalloc_obj(*removal, GFP_ATOMIC);
 	if (!removal)
 		return;

diff --git a/drivers/bluetooth/btmrvl_debugfs.c b/drivers/bluetooth/btmrvl_debugfs.c
index 32329a2e526f..3ffb54501b11 100644
--- a/drivers/bluetooth/btmrvl_debugfs.c
+++ b/drivers/bluetooth/btmrvl_debugfs.c
@@ -144,7 +144,7 @@ void btmrvl_debugfs_init(struct hci_dev *hdev)
 	if (!hdev->debugfs)
 		return;

-	dbg = kzalloc(sizeof(*dbg), GFP_KERNEL);
+	dbg = kzalloc_obj(*dbg, GFP_KERNEL);
 	priv->debugfs_data = dbg;

 	if (!dbg) {
diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c
index e26b07a9387d..78be98c029bf 100644
--- a/drivers/bluetooth/btmrvl_main.c
+++ b/drivers/bluetooth/btmrvl_main.c
@@ -710,13 +710,13 @@ struct btmrvl_private *btmrvl_add_card(void *card)
 {
 	struct btmrvl_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		BT_ERR("Can not allocate priv");
 		goto err_priv;
 	}

-	priv->adapter = kzalloc(sizeof(*priv->adapter), GFP_KERNEL);
+	priv->adapter = kzalloc_obj(*priv->adapter, GFP_KERNEL);
 	if (!priv->adapter) {
 		BT_ERR("Allocate buffer for btmrvl_adapter failed!");
 		goto err_adapter;
diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
index a8c520dc09e1..9e75e06607b4 100644
--- a/drivers/bluetooth/btmtk.c
+++ b/drivers/bluetooth/btmtk.c
@@ -537,7 +537,7 @@ static int btmtk_usb_submit_wmt_recv_urb(struct hci_dev *hdev)
 	if (!urb)
 		return -ENOMEM;

-	dr = kmalloc(sizeof(*dr), GFP_KERNEL);
+	dr = kmalloc_obj(*dr, GFP_KERNEL);
 	if (!dr) {
 		usb_free_urb(urb);
 		return -ENOMEM;
diff --git a/drivers/bluetooth/btrsi.c b/drivers/bluetooth/btrsi.c
index 6c1f584c8a33..9710655472fe 100644
--- a/drivers/bluetooth/btrsi.c
+++ b/drivers/bluetooth/btrsi.c
@@ -112,7 +112,7 @@ static int rsi_hci_attach(void *priv, struct rsi_proto_ops *ops)
 	struct hci_dev *hdev;
 	int err = 0;

-	h_adapter = kzalloc(sizeof(*h_adapter), GFP_KERNEL);
+	h_adapter = kzalloc_obj(*h_adapter, GFP_KERNEL);
 	if (!h_adapter)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
index 5603b282f9bc..d8a29e8ff524 100644
--- a/drivers/bluetooth/btrtl.c
+++ b/drivers/bluetooth/btrtl.c
@@ -524,7 +524,7 @@ static int btrtl_parse_section(struct hci_dev *hdev,
 			break;
 		}

-		subsec = kzalloc(sizeof(*subsec), GFP_KERNEL);
+		subsec = kzalloc_obj(*subsec, GFP_KERNEL);
 		if (!subsec)
 			return -ENOMEM;
 		subsec->opcode = opcode;
@@ -828,7 +828,7 @@ static int rtl_download_firmware(struct hci_dev *hdev,
 	struct sk_buff *skb;
 	struct hci_rp_read_local_version *rp;

-	dl_cmd = kmalloc(sizeof(*dl_cmd), GFP_KERNEL);
+	dl_cmd = kmalloc_obj(*dl_cmd, GFP_KERNEL);
 	if (!dl_cmd)
 		return -ENOMEM;

@@ -1077,7 +1077,7 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
 	u8 key_id;
 	u8 reg_val[2];

-	btrtl_dev = kzalloc(sizeof(*btrtl_dev), GFP_KERNEL);
+	btrtl_dev = kzalloc_obj(*btrtl_dev, GFP_KERNEL);
 	if (!btrtl_dev) {
 		ret = -ENOMEM;
 		goto err_alloc;
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index fcec8e589e81..21fd5e7914f6 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2071,7 +2071,7 @@ static struct urb *alloc_ctrl_urb(struct hci_dev *hdev, struct sk_buff *skb)
 	if (!urb)
 		return ERR_PTR(-ENOMEM);

-	dr = kmalloc(sizeof(*dr), GFP_KERNEL);
+	dr = kmalloc_obj(*dr, GFP_KERNEL);
 	if (!dr) {
 		usb_free_urb(urb);
 		return ERR_PTR(-ENOMEM);
@@ -4059,7 +4059,7 @@ static int btusb_probe(struct usb_interface *intf,
 			return -ENODEV;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_ag6xx.c b/drivers/bluetooth/hci_ag6xx.c
index 94588676510f..1ee31387c0be 100644
--- a/drivers/bluetooth/hci_ag6xx.c
+++ b/drivers/bluetooth/hci_ag6xx.c
@@ -36,7 +36,7 @@ static int ag6xx_open(struct hci_uart *hu)

 	BT_DBG("hu %p", hu);

-	ag6xx = kzalloc(sizeof(*ag6xx), GFP_KERNEL);
+	ag6xx = kzalloc_obj(*ag6xx, GFP_KERNEL);
 	if (!ag6xx)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_aml.c b/drivers/bluetooth/hci_aml.c
index 4981c82d634d..0d874aaca316 100644
--- a/drivers/bluetooth/hci_aml.c
+++ b/drivers/bluetooth/hci_aml.c
@@ -541,7 +541,7 @@ static int aml_open(struct hci_uart *hu)
 		return -EOPNOTSUPP;
 	}

-	aml_data = kzalloc(sizeof(*aml_data), GFP_KERNEL);
+	aml_data = kzalloc_obj(*aml_data, GFP_KERNEL);
 	if (!aml_data)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_ath.c b/drivers/bluetooth/hci_ath.c
index 8d2b5e7f0d6a..f8d794ea81ef 100644
--- a/drivers/bluetooth/hci_ath.c
+++ b/drivers/bluetooth/hci_ath.c
@@ -101,7 +101,7 @@ static int ath_open(struct hci_uart *hu)
 	if (!hci_uart_has_flow_control(hu))
 		return -EOPNOTSUPP;

-	ath = kzalloc(sizeof(*ath), GFP_KERNEL);
+	ath = kzalloc_obj(*ath, GFP_KERNEL);
 	if (!ath)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c
index 9286a5f40f55..97068809a713 100644
--- a/drivers/bluetooth/hci_bcm.c
+++ b/drivers/bluetooth/hci_bcm.c
@@ -448,7 +448,7 @@ static int bcm_open(struct hci_uart *hu)
 	if (!hci_uart_has_flow_control(hu))
 		return -EOPNOTSUPP;

-	bcm = kzalloc(sizeof(*bcm), GFP_KERNEL);
+	bcm = kzalloc_obj(*bcm, GFP_KERNEL);
 	if (!bcm)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_bcsp.c b/drivers/bluetooth/hci_bcsp.c
index 591abe6d63dd..09416cc468d4 100644
--- a/drivers/bluetooth/hci_bcsp.c
+++ b/drivers/bluetooth/hci_bcsp.c
@@ -716,7 +716,7 @@ static int bcsp_open(struct hci_uart *hu)

 	BT_DBG("hu %p", hu);

-	bcsp = kzalloc(sizeof(*bcsp), GFP_KERNEL);
+	bcsp = kzalloc_obj(*bcsp, GFP_KERNEL);
 	if (!bcsp)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_h4.c b/drivers/bluetooth/hci_h4.c
index ec017df8572c..2ee2eef954e0 100644
--- a/drivers/bluetooth/hci_h4.c
+++ b/drivers/bluetooth/hci_h4.c
@@ -44,7 +44,7 @@ static int h4_open(struct hci_uart *hu)

 	BT_DBG("hu %p", hu);

-	h4 = kzalloc(sizeof(*h4), GFP_KERNEL);
+	h4 = kzalloc_obj(*h4, GFP_KERNEL);
 	if (!h4)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c
index 96e20a66ecd1..c31403acb9df 100644
--- a/drivers/bluetooth/hci_h5.c
+++ b/drivers/bluetooth/hci_h5.c
@@ -222,7 +222,7 @@ static int h5_open(struct hci_uart *hu)
 	if (hu->serdev) {
 		h5 = serdev_device_get_drvdata(hu->serdev);
 	} else {
-		h5 = kzalloc(sizeof(*h5), GFP_KERNEL);
+		h5 = kzalloc_obj(*h5, GFP_KERNEL);
 		if (!h5)
 			return -ENOMEM;
 	}
@@ -1069,7 +1069,7 @@ static int h5_btrtl_resume(struct h5 *h5)
 	if (test_bit(H5_WAKEUP_DISABLE, &h5->flags)) {
 		struct h5_btrtl_reprobe *reprobe;

-		reprobe = kzalloc(sizeof(*reprobe), GFP_KERNEL);
+		reprobe = kzalloc_obj(*reprobe, GFP_KERNEL);
 		if (!reprobe)
 			return -ENOMEM;

diff --git a/drivers/bluetooth/hci_intel.c b/drivers/bluetooth/hci_intel.c
index f7570c2eaa46..989e87f24273 100644
--- a/drivers/bluetooth/hci_intel.c
+++ b/drivers/bluetooth/hci_intel.c
@@ -384,7 +384,7 @@ static int intel_open(struct hci_uart *hu)
 	if (!hci_uart_has_flow_control(hu))
 		return -EOPNOTSUPP;

-	intel = kzalloc(sizeof(*intel), GFP_KERNEL);
+	intel = kzalloc_obj(*intel, GFP_KERNEL);
 	if (!intel)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
index 2b28515de92c..7638bf6d6b09 100644
--- a/drivers/bluetooth/hci_ldisc.c
+++ b/drivers/bluetooth/hci_ldisc.c
@@ -491,7 +491,7 @@ static int hci_uart_tty_open(struct tty_struct *tty)
 	if (tty->ops->write == NULL)
 		return -EOPNOTSUPP;

-	hu = kzalloc(sizeof(*hu), GFP_KERNEL);
+	hu = kzalloc_obj(*hu, GFP_KERNEL);
 	if (!hu) {
 		BT_ERR("Can't allocate control structure");
 		return -ENFILE;
diff --git a/drivers/bluetooth/hci_ll.c b/drivers/bluetooth/hci_ll.c
index 6f4e25917b86..9c3b24d90462 100644
--- a/drivers/bluetooth/hci_ll.c
+++ b/drivers/bluetooth/hci_ll.c
@@ -114,7 +114,7 @@ static int ll_open(struct hci_uart *hu)

 	BT_DBG("hu %p", hu);

-	ll = kzalloc(sizeof(*ll), GFP_KERNEL);
+	ll = kzalloc_obj(*ll, GFP_KERNEL);
 	if (!ll)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_mrvl.c b/drivers/bluetooth/hci_mrvl.c
index 8767522ec4c6..8e8a283e4cb9 100644
--- a/drivers/bluetooth/hci_mrvl.c
+++ b/drivers/bluetooth/hci_mrvl.c
@@ -64,7 +64,7 @@ static int mrvl_open(struct hci_uart *hu)
 	if (!hci_uart_has_flow_control(hu))
 		return -EOPNOTSUPP;

-	mrvl = kzalloc(sizeof(*mrvl), GFP_KERNEL);
+	mrvl = kzalloc_obj(*mrvl, GFP_KERNEL);
 	if (!mrvl)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index c511546f793e..cac861991b52 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -585,7 +585,7 @@ static int qca_open(struct hci_uart *hu)
 	if (!hci_uart_has_flow_control(hu))
 		return -EOPNOTSUPP;

-	qca = kzalloc(sizeof(*qca), GFP_KERNEL);
+	qca = kzalloc_obj(*qca, GFP_KERNEL);
 	if (!qca)
 		return -ENOMEM;

@@ -1057,7 +1057,7 @@ static void qca_controller_memdump(struct work_struct *work)
 		}

 		if (!qca_memdump) {
-			qca_memdump = kzalloc(sizeof(*qca_memdump), GFP_ATOMIC);
+			qca_memdump = kzalloc_obj(*qca_memdump, GFP_ATOMIC);
 			if (!qca_memdump) {
 				mutex_unlock(&qca->hci_memdump_lock);
 				return;
diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c
index 2fef08254d78..6e653bb8efcc 100644
--- a/drivers/bluetooth/hci_vhci.c
+++ b/drivers/bluetooth/hci_vhci.c
@@ -640,7 +640,7 @@ static int vhci_open(struct inode *inode, struct file *file)
 {
 	struct vhci_data *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/bluetooth/virtio_bt.c b/drivers/bluetooth/virtio_bt.c
index 6f1a37e85c6a..bc33d2755ced 100644
--- a/drivers/bluetooth/virtio_bt.c
+++ b/drivers/bluetooth/virtio_bt.c
@@ -275,7 +275,7 @@ static int virtbt_probe(struct virtio_device *vdev)
 		return -EINVAL;
 	}

-	vbt = kzalloc(sizeof(*vbt), GFP_KERNEL);
+	vbt = kzalloc_obj(*vbt, GFP_KERNEL);
 	if (!vbt)
 		return -ENOMEM;

diff --git a/drivers/bus/arm-cci.c b/drivers/bus/arm-cci.c
index b8184a903583..bc7698cbf5e1 100644
--- a/drivers/bus/arm-cci.c
+++ b/drivers/bus/arm-cci.c
@@ -451,7 +451,7 @@ static int cci_probe_ports(struct device_node *np)

 	nb_cci_ports = cci_config->nb_ace + cci_config->nb_ace_lite;

-	ports = kcalloc(nb_cci_ports, sizeof(*ports), GFP_KERNEL);
+	ports = kzalloc_objs(*ports, nb_cci_ports, GFP_KERNEL);
 	if (!ports)
 		return -ENOMEM;

diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c
index 290ce13bcb09..3e12cde4443b 100644
--- a/drivers/bus/fsl-mc/fsl-mc-bus.c
+++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
@@ -672,8 +672,7 @@ static int fsl_mc_device_get_mmio_regions(struct fsl_mc_device *mc_dev,
 		return -EINVAL;
 	}

-	regions = kmalloc_array(obj_desc->region_count,
-				sizeof(regions[0]), GFP_KERNEL);
+	regions = kmalloc_objs(regions[0], obj_desc->region_count, GFP_KERNEL);
 	if (!regions)
 		return -ENOMEM;

@@ -788,7 +787,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
 		/*
 		 * Allocate an MC bus device object:
 		 */
-		mc_bus = kzalloc(sizeof(*mc_bus), GFP_KERNEL);
+		mc_bus = kzalloc_obj(*mc_bus, GFP_KERNEL);
 		if (!mc_bus)
 			return -ENOMEM;

@@ -798,7 +797,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
 		/*
 		 * Allocate a regular fsl_mc_device object:
 		 */
-		mc_dev = kzalloc(sizeof(*mc_dev), GFP_KERNEL);
+		mc_dev = kzalloc_obj(*mc_dev, GFP_KERNEL);
 		if (!mc_dev)
 			return -ENOMEM;
 	}
diff --git a/drivers/bus/fsl-mc/fsl-mc-uapi.c b/drivers/bus/fsl-mc/fsl-mc-uapi.c
index 823969e4159c..db20ea5ade01 100644
--- a/drivers/bus/fsl-mc/fsl-mc-uapi.c
+++ b/drivers/bus/fsl-mc/fsl-mc-uapi.c
@@ -483,7 +483,7 @@ static int fsl_mc_uapi_dev_open(struct inode *inode, struct file *filep)
 	struct fsl_mc_bus *mc_bus;
 	int error;

-	priv_data = kzalloc(sizeof(*priv_data), GFP_KERNEL);
+	priv_data = kzalloc_obj(*priv_data, GFP_KERNEL);
 	if (!priv_data)
 		return -ENOMEM;

diff --git a/drivers/bus/mhi/ep/main.c b/drivers/bus/mhi/ep/main.c
index 35922e7a24c1..48f76438a138 100644
--- a/drivers/bus/mhi/ep/main.c
+++ b/drivers/bus/mhi/ep/main.c
@@ -963,7 +963,7 @@ static void mhi_ep_process_ctrl_interrupt(struct mhi_ep_cntrl *mhi_cntrl,
 {
 	struct mhi_ep_state_transition *item;

-	item = kzalloc(sizeof(*item), GFP_ATOMIC);
+	item = kzalloc_obj(*item, GFP_ATOMIC);
 	if (!item)
 		return;

@@ -1136,9 +1136,8 @@ int mhi_ep_power_up(struct mhi_ep_cntrl *mhi_cntrl)
 	mhi_ep_mmio_mask_interrupts(mhi_cntrl);
 	mhi_ep_mmio_init(mhi_cntrl);

-	mhi_cntrl->mhi_event = kcalloc(mhi_cntrl->event_rings,
-				       sizeof(*mhi_cntrl->mhi_event),
-				       GFP_KERNEL);
+	mhi_cntrl->mhi_event = kzalloc_objs(*mhi_cntrl->mhi_event,
+					    mhi_cntrl->event_rings, GFP_KERNEL);
 	if (!mhi_cntrl->mhi_event)
 		return -ENOMEM;

@@ -1276,7 +1275,7 @@ static struct mhi_ep_device *mhi_ep_alloc_device(struct mhi_ep_cntrl *mhi_cntrl,
 	struct mhi_ep_device *mhi_dev;
 	struct device *dev;

-	mhi_dev = kzalloc(sizeof(*mhi_dev), GFP_KERNEL);
+	mhi_dev = kzalloc_obj(*mhi_dev, GFP_KERNEL);
 	if (!mhi_dev)
 		return ERR_PTR(-ENOMEM);

@@ -1400,8 +1399,8 @@ static int mhi_ep_chan_init(struct mhi_ep_cntrl *mhi_cntrl,
 	 * Allocate max_channels supported by the MHI endpoint and populate
 	 * only the defined channels
 	 */
-	mhi_cntrl->mhi_chan = kcalloc(mhi_cntrl->max_chan, sizeof(*mhi_cntrl->mhi_chan),
-				      GFP_KERNEL);
+	mhi_cntrl->mhi_chan = kzalloc_objs(*mhi_cntrl->mhi_chan,
+					   mhi_cntrl->max_chan, GFP_KERNEL);
 	if (!mhi_cntrl->mhi_chan)
 		return -ENOMEM;

@@ -1460,7 +1459,8 @@ int mhi_ep_register_controller(struct mhi_ep_cntrl *mhi_cntrl,
 	if (ret)
 		return ret;

-	mhi_cntrl->mhi_cmd = kcalloc(NR_OF_CMD_RINGS, sizeof(*mhi_cntrl->mhi_cmd), GFP_KERNEL);
+	mhi_cntrl->mhi_cmd = kzalloc_objs(*mhi_cntrl->mhi_cmd, NR_OF_CMD_RINGS,
+					  GFP_KERNEL);
 	if (!mhi_cntrl->mhi_cmd) {
 		ret = -ENOMEM;
 		goto err_free_ch;
diff --git a/drivers/bus/mhi/ep/ring.c b/drivers/bus/mhi/ep/ring.c
index 26357ee68dee..ee5b7f4755c5 100644
--- a/drivers/bus/mhi/ep/ring.c
+++ b/drivers/bus/mhi/ep/ring.c
@@ -205,7 +205,8 @@ int mhi_ep_ring_start(struct mhi_ep_cntrl *mhi_cntrl, struct mhi_ep_ring *ring,
 	ring->wr_offset = mhi_ep_ring_addr2offset(ring, le64_to_cpu(val));

 	/* Allocate ring cache memory for holding the copy of host ring */
-	ring->ring_cache = kcalloc(ring->ring_size, sizeof(struct mhi_ring_element), GFP_KERNEL);
+	ring->ring_cache = kzalloc_objs(struct mhi_ring_element,
+					ring->ring_size, GFP_KERNEL);
 	if (!ring->ring_cache)
 		return -ENOMEM;

diff --git a/drivers/bus/mhi/host/boot.c b/drivers/bus/mhi/host/boot.c
index c76db35bc29a..b295992476e4 100644
--- a/drivers/bus/mhi/host/boot.c
+++ b/drivers/bus/mhi/host/boot.c
@@ -333,12 +333,12 @@ static int mhi_alloc_bhi_buffer(struct mhi_controller *mhi_cntrl,
 	struct image_info *img_info;
 	struct mhi_buf *mhi_buf;

-	img_info = kzalloc(sizeof(*img_info), GFP_KERNEL);
+	img_info = kzalloc_obj(*img_info, GFP_KERNEL);
 	if (!img_info)
 		return -ENOMEM;

 	/* Allocate memory for entry */
-	img_info->mhi_buf = kzalloc(sizeof(*img_info->mhi_buf), GFP_KERNEL);
+	img_info->mhi_buf = kzalloc_obj(*img_info->mhi_buf, GFP_KERNEL);
 	if (!img_info->mhi_buf)
 		goto error_alloc_mhi_buf;

@@ -375,13 +375,13 @@ int mhi_alloc_bhie_table(struct mhi_controller *mhi_cntrl,
 	struct image_info *img_info;
 	struct mhi_buf *mhi_buf;

-	img_info = kzalloc(sizeof(*img_info), GFP_KERNEL);
+	img_info = kzalloc_obj(*img_info, GFP_KERNEL);
 	if (!img_info)
 		return -ENOMEM;

 	/* Allocate memory for entries */
-	img_info->mhi_buf = kcalloc(segments, sizeof(*img_info->mhi_buf),
-				    GFP_KERNEL);
+	img_info->mhi_buf = kzalloc_objs(*img_info->mhi_buf, segments,
+					 GFP_KERNEL);
 	if (!img_info->mhi_buf)
 		goto error_alloc_mhi_buf;

diff --git a/drivers/bus/mhi/host/init.c b/drivers/bus/mhi/host/init.c
index c47f66833cda..fa62f8219510 100644
--- a/drivers/bus/mhi/host/init.c
+++ b/drivers/bus/mhi/host/init.c
@@ -313,7 +313,7 @@ static int mhi_init_dev_ctxt(struct mhi_controller *mhi_cntrl)
 	atomic_set(&mhi_cntrl->dev_wake, 0);
 	atomic_set(&mhi_cntrl->pending_pkts, 0);

-	mhi_ctxt = kzalloc(sizeof(*mhi_ctxt), GFP_KERNEL);
+	mhi_ctxt = kzalloc_obj(*mhi_ctxt, GFP_KERNEL);
 	if (!mhi_ctxt)
 		return -ENOMEM;

@@ -699,8 +699,8 @@ static int parse_ev_cfg(struct mhi_controller *mhi_cntrl,

 	num = config->num_events;
 	mhi_cntrl->total_ev_rings = num;
-	mhi_cntrl->mhi_event = kcalloc(num, sizeof(*mhi_cntrl->mhi_event),
-				       GFP_KERNEL);
+	mhi_cntrl->mhi_event = kzalloc_objs(*mhi_cntrl->mhi_event, num,
+					    GFP_KERNEL);
 	if (!mhi_cntrl->mhi_event)
 		return -ENOMEM;

@@ -938,8 +938,8 @@ int mhi_register_controller(struct mhi_controller *mhi_cntrl,
 	if (ret)
 		return -EINVAL;

-	mhi_cntrl->mhi_cmd = kcalloc(NR_OF_CMD_RINGS,
-				     sizeof(*mhi_cntrl->mhi_cmd), GFP_KERNEL);
+	mhi_cntrl->mhi_cmd = kzalloc_objs(*mhi_cntrl->mhi_cmd, NR_OF_CMD_RINGS,
+					  GFP_KERNEL);
 	if (!mhi_cntrl->mhi_cmd) {
 		ret = -ENOMEM;
 		goto err_free_event;
@@ -1095,7 +1095,7 @@ struct mhi_controller *mhi_alloc_controller(void)
 {
 	struct mhi_controller *mhi_cntrl;

-	mhi_cntrl = kzalloc(sizeof(*mhi_cntrl), GFP_KERNEL);
+	mhi_cntrl = kzalloc_obj(*mhi_cntrl, GFP_KERNEL);

 	return mhi_cntrl;
 }
@@ -1232,7 +1232,7 @@ struct mhi_device *mhi_alloc_device(struct mhi_controller *mhi_cntrl)
 	struct mhi_device *mhi_dev;
 	struct device *dev;

-	mhi_dev = kzalloc(sizeof(*mhi_dev), GFP_KERNEL);
+	mhi_dev = kzalloc_obj(*mhi_dev, GFP_KERNEL);
 	if (!mhi_dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/bus/mhi/host/pm.c b/drivers/bus/mhi/host/pm.c
index b4ef115189b5..f799503c8f36 100644
--- a/drivers/bus/mhi/host/pm.c
+++ b/drivers/bus/mhi/host/pm.c
@@ -764,7 +764,7 @@ static void mhi_pm_sys_error_transition(struct mhi_controller *mhi_cntrl)
 int mhi_queue_state_transition(struct mhi_controller *mhi_cntrl,
 			       enum dev_st_transition state)
 {
-	struct state_transition *item = kmalloc(sizeof(*item), GFP_ATOMIC);
+	struct state_transition *item = kmalloc_obj(*item, GFP_ATOMIC);
 	unsigned long flags;

 	if (!item)
diff --git a/drivers/bus/mips_cdmm.c b/drivers/bus/mips_cdmm.c
index 12dd32fd0b62..7d43ecc9d2fa 100644
--- a/drivers/bus/mips_cdmm.c
+++ b/drivers/bus/mips_cdmm.c
@@ -306,7 +306,7 @@ static struct mips_cdmm_bus *mips_cdmm_get_bus(void)
 	bus = *bus_p;
 	/* Attempt allocation if NULL */
 	if (unlikely(!bus)) {
-		bus = kzalloc(sizeof(*bus), GFP_ATOMIC);
+		bus = kzalloc_obj(*bus, GFP_ATOMIC);
 		if (unlikely(!bus))
 			bus = ERR_PTR(-ENOMEM);
 		else
@@ -541,7 +541,7 @@ static void mips_cdmm_bus_discover(struct mips_cdmm_bus *bus)
 			(drb + size + 1) * CDMM_DRB_SIZE - 1,
 			type, rev);

-		dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+		dev = kzalloc_obj(*dev, GFP_KERNEL);
 		if (!dev)
 			break;

diff --git a/drivers/bus/moxtet.c b/drivers/bus/moxtet.c
index 5a53bfab470a..e7caa6b63318 100644
--- a/drivers/bus/moxtet.c
+++ b/drivers/bus/moxtet.c
@@ -145,7 +145,7 @@ moxtet_alloc_device(struct moxtet *moxtet)
 	if (!get_device(moxtet->dev))
 		return NULL;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		put_device(moxtet->dev);
 		return NULL;
diff --git a/drivers/bus/omap_l3_smx.c b/drivers/bus/omap_l3_smx.c
index 7f0a8f8b3f4c..63b64da191b1 100644
--- a/drivers/bus/omap_l3_smx.c
+++ b/drivers/bus/omap_l3_smx.c
@@ -215,7 +215,7 @@ static int omap3_l3_probe(struct platform_device *pdev)
 	struct resource *res;
 	int ret;

-	l3 = kzalloc(sizeof(*l3), GFP_KERNEL);
+	l3 = kzalloc_obj(*l3, GFP_KERNEL);
 	if (!l3)
 		return -ENOMEM;

diff --git a/drivers/bus/stm32_firewall.c b/drivers/bus/stm32_firewall.c
index 2fc9761dadec..aa282083c8cd 100644
--- a/drivers/bus/stm32_firewall.c
+++ b/drivers/bus/stm32_firewall.c
@@ -260,7 +260,7 @@ int stm32_firewall_populate_bus(struct stm32_firewall_controller *firewall_contr
 			return -EINVAL;
 		}

-		firewalls = kcalloc(len, sizeof(*firewalls), GFP_KERNEL);
+		firewalls = kzalloc_objs(*firewalls, len, GFP_KERNEL);
 		if (!firewalls) {
 			of_node_put(child);
 			return -ENOMEM;
diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
index 82735c58be11..df9c0a0adfbb 100644
--- a/drivers/bus/sunxi-rsb.c
+++ b/drivers/bus/sunxi-rsb.c
@@ -205,7 +205,7 @@ static struct sunxi_rsb_device *sunxi_rsb_device_create(struct sunxi_rsb *rsb,
 	int err;
 	struct sunxi_rsb_device *rdev;

-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (!rdev)
 		return ERR_PTR(-ENOMEM);

@@ -477,7 +477,7 @@ static struct sunxi_rsb_ctx *regmap_sunxi_rsb_init_ctx(struct sunxi_rsb_device *
 		return ERR_PTR(-EINVAL);
 	}

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
index 610354ce7f8f..931948d05a03 100644
--- a/drivers/bus/ti-sysc.c
+++ b/drivers/bus/ti-sysc.c
@@ -354,7 +354,7 @@ static int sysc_add_named_clock_from_child(struct sysc *ddata,
 	 * limit for clk_get(). If cl ever needs to be freed, it should be done
 	 * with clkdev_drop().
 	 */
-	cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+	cl = kzalloc_obj(*cl, GFP_KERNEL);
 	if (!cl)
 		return -ENOMEM;

@@ -2470,7 +2470,7 @@ static void sysc_add_restored(struct sysc *ddata)
 {
 	struct sysc_module *restored_module;

-	restored_module = kzalloc(sizeof(*restored_module), GFP_KERNEL);
+	restored_module = kzalloc_obj(*restored_module, GFP_KERNEL);
 	if (!restored_module)
 		return;

@@ -2953,7 +2953,7 @@ static int sysc_add_disabled(unsigned long base)
 {
 	struct sysc_address *disabled_module;

-	disabled_module = kzalloc(sizeof(*disabled_module), GFP_KERNEL);
+	disabled_module = kzalloc_obj(*disabled_module, GFP_KERNEL);
 	if (!disabled_module)
 		return -ENOMEM;

@@ -2984,7 +2984,7 @@ static int sysc_init_static_data(struct sysc *ddata)
 	if (sysc_soc)
 		return 0;

-	sysc_soc = kzalloc(sizeof(*sysc_soc), GFP_KERNEL);
+	sysc_soc = kzalloc_obj(*sysc_soc, GFP_KERNEL);
 	if (!sysc_soc)
 		return -ENOMEM;

diff --git a/drivers/bus/vexpress-config.c b/drivers/bus/vexpress-config.c
index 64ee920721ee..074918ed86fd 100644
--- a/drivers/bus/vexpress-config.c
+++ b/drivers/bus/vexpress-config.c
@@ -284,7 +284,7 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev,
 		val = energy_quirk;
 	}

-	func = kzalloc(struct_size(func, template, num), GFP_KERNEL);
+	func = kzalloc_flex(*func, template, num, GFP_KERNEL);
 	if (!func)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 31ba1f8c1f78..fe0f633bc655 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -1318,7 +1318,7 @@ static int cdrom_slot_status(struct cdrom_device_info *cdi, int slot)
 	if (cdi->sanyo_slot)
 		return CDS_NO_INFO;

-	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	info = kmalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -1347,7 +1347,7 @@ int cdrom_number_of_slots(struct cdrom_device_info *cdi)
 	/* cdrom_read_mech_status requires a valid value for capacity: */
 	cdi->capacity = 0;

-	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	info = kmalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -1406,7 +1406,7 @@ static int cdrom_select_disc(struct cdrom_device_info *cdi, int slot)
 		return cdrom_load_unload(cdi, -1);
 	}

-	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	info = kmalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -2311,7 +2311,7 @@ static int cdrom_ioctl_media_changed(struct cdrom_device_info *cdi,
 	/* Prevent arg from speculatively bypassing the length check */
 	arg = array_index_nospec(arg, cdi->capacity);

-	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	info = kmalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c
index 85aceab5eac6..1a59241cbd23 100644
--- a/drivers/cdrom/gdrom.c
+++ b/drivers/cdrom/gdrom.c
@@ -227,7 +227,7 @@ static char gdrom_execute_diagnostic(void)
 static int gdrom_preparedisk_cmd(void)
 {
 	struct packet_command *spin_command;
-	spin_command = kzalloc(sizeof(struct packet_command), GFP_KERNEL);
+	spin_command = kzalloc_obj(struct packet_command, GFP_KERNEL);
 	if (!spin_command)
 		return -ENOMEM;
 	spin_command->cmd[0] = 0x70;
@@ -261,7 +261,7 @@ static int gdrom_readtoc_cmd(struct gdromtoc *toc, int session)
 	struct packet_command *toc_command;
 	int err = 0;

-	toc_command = kzalloc(sizeof(struct packet_command), GFP_KERNEL);
+	toc_command = kzalloc_obj(struct packet_command, GFP_KERNEL);
 	if (!toc_command)
 		return -ENOMEM;
 	tocsize = sizeof(struct gdromtoc);
@@ -415,7 +415,7 @@ static int gdrom_getsense(short *bufstring)
 	int sense_key;
 	int err = -EIO;

-	sense_command = kzalloc(sizeof(struct packet_command), GFP_KERNEL);
+	sense_command = kzalloc_obj(struct packet_command, GFP_KERNEL);
 	if (!sense_command)
 		return -ENOMEM;
 	sense_command->cmd[0] = 0x13;
@@ -574,7 +574,7 @@ static blk_status_t gdrom_readdisk_dma(struct request *req)
 	struct packet_command *read_command;
 	unsigned long timeout;

-	read_command = kzalloc(sizeof(struct packet_command), GFP_KERNEL);
+	read_command = kzalloc_obj(struct packet_command, GFP_KERNEL);
 	if (!read_command)
 		return BLK_STS_RESOURCE;

@@ -656,7 +656,7 @@ static int gdrom_outputversion(void)
 	int err = -ENOMEM;

 	/* query device ID */
-	id = kzalloc(sizeof(struct gdrom_id), GFP_KERNEL);
+	id = kzalloc_obj(struct gdrom_id, GFP_KERNEL);
 	if (!id)
 		return err;
 	gdrom_identifydevice(id);
@@ -769,7 +769,7 @@ static int probe_gdrom(struct platform_device *devptr)
 	pr_info("Registered with major number %d\n",
 		gdrom_major);
 	/* Specify basic properties of drive */
-	gd.cd_info = kzalloc(sizeof(struct cdrom_device_info), GFP_KERNEL);
+	gd.cd_info = kzalloc_obj(struct cdrom_device_info, GFP_KERNEL);
 	if (!gd.cd_info) {
 		err = -ENOMEM;
 		goto probe_fail_no_mem;
@@ -803,7 +803,7 @@ static int probe_gdrom(struct platform_device *devptr)
 	if (err)
 		goto probe_fail_free_irqs;

-	gd.toc = kzalloc(sizeof(struct gdromtoc), GFP_KERNEL);
+	gd.toc = kzalloc_obj(struct gdromtoc, GFP_KERNEL);
 	if (!gd.toc) {
 		err = -ENOMEM;
 		goto probe_fail_free_irqs;
diff --git a/drivers/cdx/cdx.c b/drivers/cdx/cdx.c
index 588dd12e8105..236403a269b6 100644
--- a/drivers/cdx/cdx.c
+++ b/drivers/cdx/cdx.c
@@ -789,7 +789,7 @@ int cdx_device_add(struct cdx_dev_params *dev_params)
 	struct cdx_device *cdx_dev;
 	int ret, i;

-	cdx_dev = kzalloc(sizeof(*cdx_dev), GFP_KERNEL);
+	cdx_dev = kzalloc_obj(*cdx_dev, GFP_KERNEL);
 	if (!cdx_dev)
 		return -ENOMEM;

@@ -876,7 +876,7 @@ struct device *cdx_bus_add(struct cdx_controller *cdx, u8 bus_num)
 	struct cdx_device *cdx_dev;
 	int ret;

-	cdx_dev = kzalloc(sizeof(*cdx_dev), GFP_KERNEL);
+	cdx_dev = kzalloc_obj(*cdx_dev, GFP_KERNEL);
 	if (!cdx_dev)
 		return NULL;

diff --git a/drivers/cdx/controller/cdx_controller.c b/drivers/cdx/controller/cdx_controller.c
index 280f207735da..abd8f9cdb0b5 100644
--- a/drivers/cdx/controller/cdx_controller.c
+++ b/drivers/cdx/controller/cdx_controller.c
@@ -168,7 +168,7 @@ static int xlnx_cdx_probe(struct platform_device *pdev)
 	struct cdx_mcdi *cdx_mcdi;
 	int ret;

-	cdx_mcdi = kzalloc(sizeof(*cdx_mcdi), GFP_KERNEL);
+	cdx_mcdi = kzalloc_obj(*cdx_mcdi, GFP_KERNEL);
 	if (!cdx_mcdi)
 		return -ENOMEM;

@@ -181,7 +181,7 @@ static int xlnx_cdx_probe(struct platform_device *pdev)
 		goto mcdi_init_fail;
 	}

-	cdx = kzalloc(sizeof(*cdx), GFP_KERNEL);
+	cdx = kzalloc_obj(*cdx, GFP_KERNEL);
 	if (!cdx) {
 		ret = -ENOMEM;
 		goto cdx_alloc_fail;
diff --git a/drivers/cdx/controller/mcdi.c b/drivers/cdx/controller/mcdi.c
index 2e82ffc18d89..4b3d8f1ef964 100644
--- a/drivers/cdx/controller/mcdi.c
+++ b/drivers/cdx/controller/mcdi.c
@@ -118,7 +118,7 @@ int cdx_mcdi_init(struct cdx_mcdi *cdx)
 	struct cdx_mcdi_iface *mcdi;
 	int rc = -ENOMEM;

-	cdx->mcdi = kzalloc(sizeof(*cdx->mcdi), GFP_KERNEL);
+	cdx->mcdi = kzalloc_obj(*cdx->mcdi, GFP_KERNEL);
 	if (!cdx->mcdi)
 		goto fail;

@@ -456,11 +456,11 @@ static int cdx_mcdi_rpc_sync(struct cdx_mcdi *cdx, unsigned int cmd,
 	if (outlen_actual)
 		*outlen_actual = 0;

-	wait_data = kmalloc(sizeof(*wait_data), GFP_KERNEL);
+	wait_data = kmalloc_obj(*wait_data, GFP_KERNEL);
 	if (!wait_data)
 		return -ENOMEM;

-	cmd_item = kmalloc(sizeof(*cmd_item), GFP_KERNEL);
+	cmd_item = kmalloc_obj(*cmd_item, GFP_KERNEL);
 	if (!cmd_item) {
 		kfree(wait_data);
 		return -ENOMEM;
diff --git a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c
index 795c8c9ff680..7cf521d36e3b 100644
--- a/drivers/char/agp/amd-k7-agp.c
+++ b/drivers/char/agp/amd-k7-agp.c
@@ -85,13 +85,12 @@ static int amd_create_gatt_pages(int nr_tables)
 	int retval = 0;
 	int i;

-	tables = kcalloc(nr_tables + 1, sizeof(struct amd_page_map *),
-			 GFP_KERNEL);
+	tables = kzalloc_objs(struct amd_page_map *, nr_tables + 1, GFP_KERNEL);
 	if (tables == NULL)
 		return -ENOMEM;

 	for (i = 0; i < nr_tables; i++) {
-		entry = kzalloc(sizeof(struct amd_page_map), GFP_KERNEL);
+		entry = kzalloc_obj(struct amd_page_map, GFP_KERNEL);
 		tables[i] = entry;
 		if (entry == NULL) {
 			retval = -ENOMEM;
diff --git a/drivers/char/agp/ati-agp.c b/drivers/char/agp/ati-agp.c
index f7871afe08cf..65afee75d8e3 100644
--- a/drivers/char/agp/ati-agp.c
+++ b/drivers/char/agp/ati-agp.c
@@ -112,13 +112,12 @@ static int ati_create_gatt_pages(int nr_tables)
 	int retval = 0;
 	int i;

-	tables = kcalloc(nr_tables + 1, sizeof(struct ati_page_map *),
-			 GFP_KERNEL);
+	tables = kzalloc_objs(struct ati_page_map *, nr_tables + 1, GFP_KERNEL);
 	if (tables == NULL)
 		return -ENOMEM;

 	for (i = 0; i < nr_tables; i++) {
-		entry = kzalloc(sizeof(struct ati_page_map), GFP_KERNEL);
+		entry = kzalloc_obj(struct ati_page_map, GFP_KERNEL);
 		tables[i] = entry;
 		if (entry == NULL) {
 			retval = -ENOMEM;
diff --git a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c
index 1776afd3ee07..90554f4f2146 100644
--- a/drivers/char/agp/backend.c
+++ b/drivers/char/agp/backend.c
@@ -238,7 +238,7 @@ struct agp_bridge_data *agp_alloc_bridge(void)
 {
 	struct agp_bridge_data *bridge;

-	bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
+	bridge = kzalloc_obj(*bridge, GFP_KERNEL);
 	if (!bridge)
 		return NULL;

diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c
index 3ffbb1c80c5c..66ba14eac583 100644
--- a/drivers/char/agp/generic.c
+++ b/drivers/char/agp/generic.c
@@ -101,7 +101,7 @@ static struct agp_memory *agp_create_user_memory(unsigned long num_agp_pages)
 	if (INT_MAX/sizeof(struct page *) < num_agp_pages)
 		return NULL;

-	new = kzalloc(sizeof(struct agp_memory), GFP_KERNEL);
+	new = kzalloc_obj(struct agp_memory, GFP_KERNEL);
 	if (new == NULL)
 		return NULL;

@@ -127,7 +127,7 @@ struct agp_memory *agp_create_memory(int scratch_pages)
 {
 	struct agp_memory *new;

-	new = kzalloc(sizeof(struct agp_memory), GFP_KERNEL);
+	new = kzalloc_obj(struct agp_memory, GFP_KERNEL);
 	if (new == NULL)
 		return NULL;

diff --git a/drivers/char/agp/isoch.c b/drivers/char/agp/isoch.c
index 7ecf20a6d19c..b7deecb40922 100644
--- a/drivers/char/agp/isoch.c
+++ b/drivers/char/agp/isoch.c
@@ -92,7 +92,7 @@ static int agp_3_5_isochronous_node_enable(struct agp_bridge_data *bridge,
 	 * We'll work with an array of isoch_data's (one for each
 	 * device in dev_list) throughout this function.
 	 */
-	master = kmalloc_array(ndevs, sizeof(*master), GFP_KERNEL);
+	master = kmalloc_objs(*master, ndevs, GFP_KERNEL);
 	if (master == NULL) {
 		ret = -ENOMEM;
 		goto get_out;
@@ -333,7 +333,7 @@ int agp_3_5_enable(struct agp_bridge_data *bridge)
 	 * Allocate a head for our AGP 3.5 device list
 	 * (multiple AGP v3 devices are allowed behind a single bridge).
 	 */
-	if ((dev_list = kmalloc(sizeof(*dev_list), GFP_KERNEL)) == NULL) {
+	if ((dev_list = kmalloc_obj(*dev_list, GFP_KERNEL)) == NULL) {
 		ret = -ENOMEM;
 		goto get_out;
 	}
@@ -362,7 +362,7 @@ int agp_3_5_enable(struct agp_bridge_data *bridge)

 			case 0x0300:    /* Display controller */
 			case 0x0400:    /* Multimedia controller */
-				if ((cur = kmalloc(sizeof(*cur), GFP_KERNEL)) == NULL) {
+				if ((cur = kmalloc_obj(*cur, GFP_KERNEL)) == NULL) {
 					ret = -ENOMEM;
 					goto free_and_exit;
 				}
diff --git a/drivers/char/agp/sworks-agp.c b/drivers/char/agp/sworks-agp.c
index 0ab7562d17c9..03f21b90d368 100644
--- a/drivers/char/agp/sworks-agp.c
+++ b/drivers/char/agp/sworks-agp.c
@@ -96,13 +96,13 @@ static int serverworks_create_gatt_pages(int nr_tables)
 	int retval = 0;
 	int i;

-	tables = kcalloc(nr_tables + 1, sizeof(struct serverworks_page_map *),
-			 GFP_KERNEL);
+	tables = kzalloc_objs(struct serverworks_page_map *, nr_tables + 1,
+			      GFP_KERNEL);
 	if (tables == NULL)
 		return -ENOMEM;

 	for (i = 0; i < nr_tables; i++) {
-		entry = kzalloc(sizeof(struct serverworks_page_map), GFP_KERNEL);
+		entry = kzalloc_obj(struct serverworks_page_map, GFP_KERNEL);
 		if (entry == NULL) {
 			retval = -ENOMEM;
 			break;
diff --git a/drivers/char/agp/uninorth-agp.c b/drivers/char/agp/uninorth-agp.c
index b8d7115b8c9e..5d5ba7c7d9ba 100644
--- a/drivers/char/agp/uninorth-agp.c
+++ b/drivers/char/agp/uninorth-agp.c
@@ -404,9 +404,8 @@ static int uninorth_create_gatt_table(struct agp_bridge_data *bridge)
 	if (table == NULL)
 		return -ENOMEM;

-	uninorth_priv.pages_arr = kmalloc_array(1 << page_order,
-						sizeof(struct page *),
-						GFP_KERNEL);
+	uninorth_priv.pages_arr = kmalloc_objs(struct page *, 1 << page_order,
+					       GFP_KERNEL);
 	if (uninorth_priv.pages_arr == NULL)
 		goto enomem;

diff --git a/drivers/char/apm-emulation.c b/drivers/char/apm-emulation.c
index 4aa5d1c76f83..54e921eac4d3 100644
--- a/drivers/char/apm-emulation.c
+++ b/drivers/char/apm-emulation.c
@@ -343,7 +343,7 @@ static int apm_open(struct inode * inode, struct file * filp)
 {
 	struct apm_user *as;

-	as = kzalloc(sizeof(*as), GFP_KERNEL);
+	as = kzalloc_obj(*as, GFP_KERNEL);
 	if (as) {
 		/*
 		 * XXX - this is a tiny bit broken, when we consider BSD
diff --git a/drivers/char/bsr.c b/drivers/char/bsr.c
index 837109ef6766..57d236398a81 100644
--- a/drivers/char/bsr.c
+++ b/drivers/char/bsr.c
@@ -186,8 +186,7 @@ static int bsr_add_node(struct device_node *bn)
 	num_bsr_devs = bsr_bytes_len / sizeof(u32);

 	for (i = 0 ; i < num_bsr_devs; i++) {
-		struct bsr_dev *cur = kzalloc(sizeof(struct bsr_dev),
-					      GFP_KERNEL);
+		struct bsr_dev *cur = kzalloc_obj(struct bsr_dev, GFP_KERNEL);
 		struct resource res;
 		int result;

diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c
index 4f5ccd3a1f56..1813e931c2b0 100644
--- a/drivers/char/hpet.c
+++ b/drivers/char/hpet.c
@@ -823,8 +823,7 @@ int hpet_alloc(struct hpet_data *hdp)
 		return 0;
 	}

-	hpetp = kzalloc(struct_size(hpetp, hp_dev, hdp->hd_nirqs),
-			GFP_KERNEL);
+	hpetp = kzalloc_flex(*hpetp, hp_dev, hdp->hd_nirqs, GFP_KERNEL);

 	if (!hpetp)
 		return -ENOMEM;
diff --git a/drivers/char/hw_random/amd-rng.c b/drivers/char/hw_random/amd-rng.c
index 9a24d19236dc..bc228e26929e 100644
--- a/drivers/char/hw_random/amd-rng.c
+++ b/drivers/char/hw_random/amd-rng.c
@@ -154,7 +154,7 @@ static int __init amd_rng_mod_init(void)
 		goto put_dev;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		err = -ENOMEM;
 		goto put_dev;
diff --git a/drivers/char/hw_random/geode-rng.c b/drivers/char/hw_random/geode-rng.c
index 159baf00a867..45e2696fad23 100644
--- a/drivers/char/hw_random/geode-rng.c
+++ b/drivers/char/hw_random/geode-rng.c
@@ -107,7 +107,7 @@ static int __init geode_rng_init(void)
 	return err;

 found:
-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		err = -ENOMEM;
 		goto put_dev;
diff --git a/drivers/char/hw_random/intel-rng.c b/drivers/char/hw_random/intel-rng.c
index 7b171cb3b825..e18041c2610d 100644
--- a/drivers/char/hw_random/intel-rng.c
+++ b/drivers/char/hw_random/intel-rng.c
@@ -346,7 +346,7 @@ static int __init intel_rng_mod_init(void)
 		goto fwh_done;
 	}

-	intel_rng_hw = kmalloc(sizeof(*intel_rng_hw), GFP_KERNEL);
+	intel_rng_hw = kmalloc_obj(*intel_rng_hw, GFP_KERNEL);
 	if (!intel_rng_hw) {
 		pci_dev_put(dev);
 		goto out;
diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c
index eb80a031c7be..ba35f83d5c31 100644
--- a/drivers/char/hw_random/virtio-rng.c
+++ b/drivers/char/hw_random/virtio-rng.c
@@ -134,7 +134,7 @@ static int probe_common(struct virtio_device *vdev)
 	int err, index;
 	struct virtrng_info *vi = NULL;

-	vi = kzalloc(sizeof(struct virtrng_info), GFP_KERNEL);
+	vi = kzalloc_obj(struct virtrng_info, GFP_KERNEL);
 	if (!vi)
 		return -ENOMEM;

diff --git a/drivers/char/ipmi/ipmb_dev_int.c b/drivers/char/ipmi/ipmb_dev_int.c
index ee2bdc7ed0da..2fe1d205ce4e 100644
--- a/drivers/char/ipmi/ipmb_dev_int.c
+++ b/drivers/char/ipmi/ipmb_dev_int.c
@@ -208,7 +208,7 @@ static void ipmb_handle_request(struct ipmb_dev *ipmb_dev)
 			REQUEST_QUEUE_MAX_LEN)
 		return;

-	queue_elem = kmalloc(sizeof(*queue_elem), GFP_ATOMIC);
+	queue_elem = kmalloc_obj(*queue_elem, GFP_ATOMIC);
 	if (!queue_elem)
 		return;

diff --git a/drivers/char/ipmi/ipmi_devintf.c b/drivers/char/ipmi/ipmi_devintf.c
index e6ba35b71f10..c8a4f261bd58 100644
--- a/drivers/char/ipmi/ipmi_devintf.c
+++ b/drivers/char/ipmi/ipmi_devintf.c
@@ -90,7 +90,7 @@ static int ipmi_open(struct inode *inode, struct file *file)
 	int                      rv;
 	struct ipmi_file_private *priv;

-	priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kmalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -813,7 +813,7 @@ static void ipmi_new_smi(int if_num, struct device *device)
 	dev_t dev = MKDEV(ipmi_major, if_num);
 	struct ipmi_reg_list *entry;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		pr_err("ipmi_devintf: Unable to create the ipmi class device link\n");
 		return;
diff --git a/drivers/char/ipmi/ipmi_dmi.c b/drivers/char/ipmi/ipmi_dmi.c
index bbf7029e224b..2462d2557331 100644
--- a/drivers/char/ipmi/ipmi_dmi.c
+++ b/drivers/char/ipmi/ipmi_dmi.c
@@ -74,7 +74,7 @@ static void __init dmi_add_platform_ipmi(unsigned long base_addr,
 	p.slave_addr = slave_addr;
 	p.addr_source = SI_SMBIOS;

-	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	info = kmalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		pr_warn("Could not allocate dmi info\n");
 	} else {
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
index 3f48fc6ab596..b4f05d15d2df 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -761,13 +761,11 @@ int ipmi_smi_watcher_register(struct ipmi_smi_watcher *watcher)
 	list_for_each_entry(intf, &ipmi_interfaces, link)
 		count++;
 	if (count > 0) {
-		interfaces = kmalloc_array(count, sizeof(*interfaces),
-					   GFP_KERNEL);
+		interfaces = kmalloc_objs(*interfaces, count, GFP_KERNEL);
 		if (!interfaces) {
 			rv = -ENOMEM;
 		} else {
-			devices = kmalloc_array(count, sizeof(*devices),
-						GFP_KERNEL);
+			devices = kmalloc_objs(*devices, count, GFP_KERNEL);
 			if (!devices) {
 				kfree(interfaces);
 				interfaces = NULL;
@@ -1686,7 +1684,7 @@ int ipmi_register_for_cmd(struct ipmi_user *user,
 	if (!user)
 		return -ENODEV;

-	rcvr = kmalloc(sizeof(*rcvr), GFP_KERNEL);
+	rcvr = kmalloc_obj(*rcvr, GFP_KERNEL);
 	if (!rcvr) {
 		rv = -ENOMEM;
 		goto out_release;
@@ -3146,7 +3144,7 @@ static int __ipmi_bmc_register(struct ipmi_smi *intf,
 			 bmc->id.product_id,
 			 bmc->id.device_id);
 	} else {
-		bmc = kzalloc(sizeof(*bmc), GFP_KERNEL);
+		bmc = kzalloc_obj(*bmc, GFP_KERNEL);
 		if (!bmc) {
 			rv = -ENOMEM;
 			goto out;
@@ -3582,7 +3580,7 @@ int ipmi_add_smi(struct module         *owner,
 	if (rv)
 		return rv;

-	intf = kzalloc(sizeof(*intf), GFP_KERNEL);
+	intf = kzalloc_obj(*intf, GFP_KERNEL);
 	if (!intf)
 		return -ENOMEM;

@@ -5195,7 +5193,7 @@ static void free_smi_msg(struct ipmi_smi_msg *msg)
 struct ipmi_smi_msg *ipmi_alloc_smi_msg(void)
 {
 	struct ipmi_smi_msg *rv;
-	rv = kmalloc(sizeof(struct ipmi_smi_msg), GFP_ATOMIC);
+	rv = kmalloc_obj(struct ipmi_smi_msg, GFP_ATOMIC);
 	if (rv) {
 		rv->done = free_smi_msg;
 		rv->recv_msg = NULL;
@@ -5225,7 +5223,7 @@ static struct ipmi_recv_msg *ipmi_alloc_recv_msg(struct ipmi_user *user)
 		}
 	}

-	rv = kmalloc(sizeof(struct ipmi_recv_msg), GFP_ATOMIC);
+	rv = kmalloc_obj(struct ipmi_recv_msg, GFP_ATOMIC);
 	if (!rv) {
 		if (user)
 			atomic_dec(&user->nr_msgs);
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
index 5459ffdde8dc..c6137eb56548 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -1914,7 +1914,7 @@ int ipmi_si_add_smi(struct si_sm_io *io)
 		}
 	}

-	new_smi = kzalloc(sizeof(*new_smi), GFP_KERNEL);
+	new_smi = kzalloc_obj(*new_smi, GFP_KERNEL);
 	if (!new_smi)
 		return -ENOMEM;
 	spin_lock_init(&new_smi->si_lock);
diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
index ef1582a029f4..579cf30cd52f 100644
--- a/drivers/char/ipmi/ipmi_ssif.c
+++ b/drivers/char/ipmi/ipmi_ssif.c
@@ -1602,7 +1602,7 @@ static int ssif_add_infos(struct i2c_client *client)
 {
 	struct ssif_addr_info *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	info->addr_src = SI_ACPI;
@@ -1667,7 +1667,7 @@ static int ssif_probe(struct i2c_client *client)
 		return -ENOMEM;
 	}

-	ssif_info = kzalloc(sizeof(*ssif_info), GFP_KERNEL);
+	ssif_info = kzalloc_obj(*ssif_info, GFP_KERNEL);
 	if (!ssif_info) {
 		kfree(resp);
 		mutex_unlock(&ssif_infos_mutex);
@@ -1948,7 +1948,7 @@ static int new_ssif_client(int addr, char *adapter_name,
 		goto out_unlock;
 	}

-	addr_info = kzalloc(sizeof(*addr_info), GFP_KERNEL);
+	addr_info = kzalloc_obj(*addr_info, GFP_KERNEL);
 	if (!addr_info) {
 		rv = -ENOMEM;
 		goto out_unlock;
diff --git a/drivers/char/ipmi/kcs_bmc_serio.c b/drivers/char/ipmi/kcs_bmc_serio.c
index 1793358be782..4c3a70dc7425 100644
--- a/drivers/char/ipmi/kcs_bmc_serio.c
+++ b/drivers/char/ipmi/kcs_bmc_serio.c
@@ -77,7 +77,7 @@ static int kcs_bmc_serio_add_device(struct kcs_bmc_device *kcs_bmc)
 		return -ENOMEM;

 	/* Use kzalloc() as the allocation is cleaned up with kfree() via serio_unregister_port() */
-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/drivers/char/powernv-op-panel.c b/drivers/char/powernv-op-panel.c
index 53467b0a6187..7405d645ff62 100644
--- a/drivers/char/powernv-op-panel.c
+++ b/drivers/char/powernv-op-panel.c
@@ -167,7 +167,7 @@ static int oppanel_probe(struct platform_device *pdev)
 	if (!oppanel_data)
 		return -ENOMEM;

-	oppanel_lines = kcalloc(num_lines, sizeof(oppanel_line_t), GFP_KERNEL);
+	oppanel_lines = kzalloc_objs(oppanel_line_t, num_lines, GFP_KERNEL);
 	if (!oppanel_lines) {
 		rc = -ENOMEM;
 		goto free_oppanel_data;
diff --git a/drivers/char/ppdev.c b/drivers/char/ppdev.c
index d1dfbd8d4d42..2468040d745f 100644
--- a/drivers/char/ppdev.c
+++ b/drivers/char/ppdev.c
@@ -689,7 +689,7 @@ static int pp_open(struct inode *inode, struct file *file)
 	if (minor >= PARPORT_MAX)
 		return -ENXIO;

-	pp = kmalloc(sizeof(struct pp_struct), GFP_KERNEL);
+	pp = kmalloc_obj(struct pp_struct, GFP_KERNEL);
 	if (!pp)
 		return -ENOMEM;

diff --git a/drivers/char/ps3flash.c b/drivers/char/ps3flash.c
index 23871cde41fb..5892d2b1cb72 100644
--- a/drivers/char/ps3flash.c
+++ b/drivers/char/ps3flash.c
@@ -361,7 +361,7 @@ static int ps3flash_probe(struct ps3_system_bus_device *_dev)

 	ps3flash_dev = dev;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		error = -ENOMEM;
 		goto fail;
diff --git a/drivers/char/random.c b/drivers/char/random.c
index bab03c7c4194..91dc486b9ffa 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1248,7 +1248,7 @@ void __cold rand_initialize_disk(struct gendisk *disk)
 	 * If kzalloc returns null, we just won't use that entropy
 	 * source.
 	 */
-	state = kzalloc(sizeof(struct timer_rand_state), GFP_KERNEL);
+	state = kzalloc_obj(struct timer_rand_state, GFP_KERNEL);
 	if (state) {
 		state->last_time = INITIAL_JIFFIES;
 		disk->random = state;
diff --git a/drivers/char/tlclk.c b/drivers/char/tlclk.c
index b381ea7e85d2..8f3dd530f56c 100644
--- a/drivers/char/tlclk.c
+++ b/drivers/char/tlclk.c
@@ -776,7 +776,7 @@ static int __init tlclk_init(void)

 	telclk_interrupt = (inb(TLCLK_REG7) & 0x0f);

-	alarm_events = kzalloc( sizeof(struct tlclk_alarms), GFP_KERNEL);
+	alarm_events = kzalloc_obj(struct tlclk_alarms, GFP_KERNEL);
 	if (!alarm_events) {
 		ret = -ENOMEM;
 		goto out1;
diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index 082b910ddf0d..986990723db2 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -295,7 +295,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
 	struct tpm_chip *chip;
 	int rc;

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (chip == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/char/tpm/tpm-dev.c b/drivers/char/tpm/tpm-dev.c
index 97c94b5e9340..bd197be15923 100644
--- a/drivers/char/tpm/tpm-dev.c
+++ b/drivers/char/tpm/tpm-dev.c
@@ -30,7 +30,7 @@ static int tpm_open(struct inode *inode, struct file *file)
 		return -EBUSY;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (priv == NULL)
 		goto out;

diff --git a/drivers/char/tpm/tpm2-sessions.c b/drivers/char/tpm/tpm2-sessions.c
index 09df6353ef04..c00817faf88e 100644
--- a/drivers/char/tpm/tpm2-sessions.c
+++ b/drivers/char/tpm/tpm2-sessions.c
@@ -991,7 +991,7 @@ int tpm2_start_auth_session(struct tpm_chip *chip)
 		return 0;
 	}

-	auth = kzalloc(sizeof(*auth), GFP_KERNEL);
+	auth = kzalloc_obj(*auth, GFP_KERNEL);
 	if (!auth)
 		return -ENOMEM;

diff --git a/drivers/char/tpm/tpm_crb_ffa.c b/drivers/char/tpm/tpm_crb_ffa.c
index 755b77b32ea4..1bc1c6c2f257 100644
--- a/drivers/char/tpm/tpm_crb_ffa.c
+++ b/drivers/char/tpm/tpm_crb_ffa.c
@@ -346,7 +346,7 @@ static int tpm_crb_ffa_probe(struct ffa_device *ffa_dev)
 		return -EINVAL;
 	}

-	p = kzalloc(sizeof(*tpm_crb_ffa), GFP_KERNEL);
+	p = kzalloc_obj(*tpm_crb_ffa, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;
 	tpm_crb_ffa = p;
diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
index 4734a69406ce..2bd4e1dce322 100644
--- a/drivers/char/tpm/tpm_ibmvtpm.c
+++ b/drivers/char/tpm/tpm_ibmvtpm.c
@@ -611,7 +611,7 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
 	if (IS_ERR(chip))
 		return PTR_ERR(chip);

-	ibmvtpm = kzalloc(sizeof(struct ibmvtpm_dev), GFP_KERNEL);
+	ibmvtpm = kzalloc_obj(struct ibmvtpm_dev, GFP_KERNEL);
 	if (!ibmvtpm) {
 		dev_err(dev, "kzalloc for ibmvtpm failed\n");
 		goto cleanup;
diff --git a/drivers/char/tpm/tpm_vtpm_proxy.c b/drivers/char/tpm/tpm_vtpm_proxy.c
index 0818bb517805..b84d745a9797 100644
--- a/drivers/char/tpm/tpm_vtpm_proxy.c
+++ b/drivers/char/tpm/tpm_vtpm_proxy.c
@@ -491,7 +491,7 @@ static struct proxy_dev *vtpm_proxy_create_proxy_dev(void)
 	struct tpm_chip *chip;
 	int err;

-	proxy_dev = kzalloc(sizeof(*proxy_dev), GFP_KERNEL);
+	proxy_dev = kzalloc_obj(*proxy_dev, GFP_KERNEL);
 	if (proxy_dev == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/char/tpm/tpmrm-dev.c b/drivers/char/tpm/tpmrm-dev.c
index c25df7ea064e..cace5bc7369a 100644
--- a/drivers/char/tpm/tpmrm-dev.c
+++ b/drivers/char/tpm/tpmrm-dev.c
@@ -17,7 +17,7 @@ static int tpmrm_open(struct inode *inode, struct file *file)
 	int rc;

 	chip = container_of(inode->i_cdev, struct tpm_chip, cdevs);
-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (priv == NULL)
 		return -ENOMEM;

diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
index 556bf2256716..c1a4a5531b0a 100644
--- a/drivers/char/tpm/xen-tpmfront.c
+++ b/drivers/char/tpm/xen-tpmfront.c
@@ -338,7 +338,7 @@ static int tpmfront_probe(struct xenbus_device *dev,
 	struct tpm_private *priv;
 	int rv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		xenbus_dev_fatal(dev, -ENOMEM, "allocating priv structure");
 		return -ENOMEM;
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index 088182e54deb..2c1c864a9de9 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -412,7 +412,7 @@ static struct port_buffer *alloc_buf(struct virtio_device *vdev, size_t buf_size
 	 * Allocate buffer and the sg list. The sg list array is allocated
 	 * directly after the port_buffer struct.
 	 */
-	buf = kmalloc(struct_size(buf, sg, pages), GFP_KERNEL);
+	buf = kmalloc_flex(*buf, sg, pages, GFP_KERNEL);
 	if (!buf)
 		goto fail;

@@ -1325,7 +1325,7 @@ static int add_port(struct ports_device *portdev, u32 id)
 	dev_t devt;
 	int err;

-	port = kmalloc(sizeof(*port), GFP_KERNEL);
+	port = kmalloc_obj(*port, GFP_KERNEL);
 	if (!port) {
 		err = -ENOMEM;
 		goto fail;
@@ -1809,12 +1809,11 @@ static int init_vqs(struct ports_device *portdev)
 	nr_ports = portdev->max_nr_ports;
 	nr_queues = use_multiport(portdev) ? (nr_ports + 1) * 2 : 2;

-	vqs = kmalloc_array(nr_queues, sizeof(struct virtqueue *), GFP_KERNEL);
-	vqs_info = kcalloc(nr_queues, sizeof(*vqs_info), GFP_KERNEL);
-	portdev->in_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *),
+	vqs = kmalloc_objs(struct virtqueue *, nr_queues, GFP_KERNEL);
+	vqs_info = kzalloc_objs(*vqs_info, nr_queues, GFP_KERNEL);
+	portdev->in_vqs = kmalloc_objs(struct virtqueue *, nr_ports, GFP_KERNEL);
+	portdev->out_vqs = kmalloc_objs(struct virtqueue *, nr_ports,
 					GFP_KERNEL);
-	portdev->out_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *),
-					 GFP_KERNEL);
 	if (!vqs || !vqs_info || !portdev->in_vqs || !portdev->out_vqs) {
 		err = -ENOMEM;
 		goto free;
@@ -1965,7 +1964,7 @@ static int virtcons_probe(struct virtio_device *vdev)
 		return -EINVAL;
 	}

-	portdev = kmalloc(sizeof(*portdev), GFP_KERNEL);
+	portdev = kmalloc_obj(*portdev, GFP_KERNEL);
 	if (!portdev) {
 		err = -ENOMEM;
 		goto fail;
diff --git a/drivers/char/xillybus/xillybus_class.c b/drivers/char/xillybus/xillybus_class.c
index c92a628e389e..4bc5a2152abb 100644
--- a/drivers/char/xillybus/xillybus_class.c
+++ b/drivers/char/xillybus/xillybus_class.c
@@ -57,7 +57,7 @@ int xillybus_init_chrdev(struct device *dev,
 	size_t namelen;
 	struct xilly_unit *unit, *u;

-	unit = kzalloc(sizeof(*unit), GFP_KERNEL);
+	unit = kzalloc_obj(*unit, GFP_KERNEL);

 	if (!unit)
 		return -ENOMEM;
diff --git a/drivers/char/xillybus/xillybus_core.c b/drivers/char/xillybus/xillybus_core.c
index fc4e69b5cb6a..86dccc6009f8 100644
--- a/drivers/char/xillybus/xillybus_core.c
+++ b/drivers/char/xillybus/xillybus_core.c
@@ -319,7 +319,7 @@ static int xilly_map_single(struct xilly_endpoint *ep,
 	dma_addr_t addr;
 	struct xilly_mapping *this;

-	this = kzalloc(sizeof(*this), GFP_KERNEL);
+	this = kzalloc_obj(*this, GFP_KERNEL);
 	if (!this)
 		return -ENOMEM;

diff --git a/drivers/char/xillybus/xillyusb.c b/drivers/char/xillybus/xillyusb.c
index 386531474213..568e82b73823 100644
--- a/drivers/char/xillybus/xillyusb.c
+++ b/drivers/char/xillybus/xillyusb.c
@@ -495,7 +495,7 @@ static struct xillyusb_endpoint

 	struct xillyusb_endpoint *ep;

-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);

 	if (!ep)
 		return NULL;
@@ -522,7 +522,7 @@ static struct xillyusb_endpoint
 		struct xillybuffer *xb;
 		unsigned long addr;

-		xb = kzalloc(sizeof(*xb), GFP_KERNEL);
+		xb = kzalloc_obj(*xb, GFP_KERNEL);

 		if (!xb) {
 			endpoint_dealloc(ep);
@@ -1336,7 +1336,7 @@ static int xillyusb_open(struct inode *inode, struct file *filp)
 	}

 	if (filp->f_mode & FMODE_READ) {
-		in_fifo = kzalloc(sizeof(*in_fifo), GFP_KERNEL);
+		in_fifo = kzalloc_obj(*in_fifo, GFP_KERNEL);

 		if (!in_fifo) {
 			rc = -ENOMEM;
@@ -1943,7 +1943,7 @@ static int setup_channels(struct xillyusb_dev *xdev,
 	struct xillyusb_channel *chan, *new_channels;
 	int i;

-	chan = kcalloc(num_channels, sizeof(*chan), GFP_KERNEL);
+	chan = kzalloc_objs(*chan, num_channels, GFP_KERNEL);
 	if (!chan)
 		return -ENOMEM;

@@ -2149,7 +2149,7 @@ static int xillyusb_probe(struct usb_interface *interface,
 	struct xillyusb_dev *xdev;
 	int rc;

-	xdev = kzalloc(sizeof(*xdev), GFP_KERNEL);
+	xdev = kzalloc_obj(*xdev, GFP_KERNEL);
 	if (!xdev)
 		return -ENOMEM;

diff --git a/drivers/clk/aspeed/clk-aspeed.c b/drivers/clk/aspeed/clk-aspeed.c
index 74c8c1377b70..c8449e49ea08 100644
--- a/drivers/clk/aspeed/clk-aspeed.c
+++ b/drivers/clk/aspeed/clk-aspeed.c
@@ -354,7 +354,7 @@ static struct clk_hw *aspeed_clk_hw_register_gate(struct device *dev,
 	struct clk_hw *hw;
 	int ret;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

@@ -698,9 +698,8 @@ static void __init aspeed_cc_init(struct device_node *np)
 	if (!scu_base)
 		return;

-	aspeed_clk_data = kzalloc(struct_size(aspeed_clk_data, hws,
-					      ASPEED_NUM_CLKS),
-				  GFP_KERNEL);
+	aspeed_clk_data = kzalloc_flex(*aspeed_clk_data, hws, ASPEED_NUM_CLKS,
+				       GFP_KERNEL);
 	if (!aspeed_clk_data)
 		return;
 	aspeed_clk_data->num = ASPEED_NUM_CLKS;
diff --git a/drivers/clk/aspeed/clk-ast2600.c b/drivers/clk/aspeed/clk-ast2600.c
index 114afc13d640..e24b536e68ce 100644
--- a/drivers/clk/aspeed/clk-ast2600.c
+++ b/drivers/clk/aspeed/clk-ast2600.c
@@ -431,7 +431,7 @@ static struct clk_hw *aspeed_g6_clk_hw_register_gate(struct device *dev,
 	struct clk_hw *hw;
 	int ret;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

@@ -838,8 +838,8 @@ static void __init aspeed_g6_cc_init(struct device_node *np)

 	soc_rev = (readl(scu_g6_base + ASPEED_G6_SILICON_REV) & CHIP_REVISION_ID) >> 16;

-	aspeed_g6_clk_data = kzalloc(struct_size(aspeed_g6_clk_data, hws,
-				      ASPEED_G6_NUM_CLKS), GFP_KERNEL);
+	aspeed_g6_clk_data = kzalloc_flex(*aspeed_g6_clk_data, hws,
+				          ASPEED_G6_NUM_CLKS, GFP_KERNEL);
 	if (!aspeed_g6_clk_data)
 		return;
 	aspeed_g6_clk_data->num = ASPEED_G6_NUM_CLKS;
diff --git a/drivers/clk/aspeed/clk-ast2700.c b/drivers/clk/aspeed/clk-ast2700.c
index bbb2b571eb72..df491bae39b7 100644
--- a/drivers/clk/aspeed/clk-ast2700.c
+++ b/drivers/clk/aspeed/clk-ast2700.c
@@ -820,7 +820,7 @@ static struct clk_hw *ast2700_clk_hw_register_gate(struct device *dev, const cha
 	struct clk_hw *hw;
 	int ret = -EINVAL;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-audio-pll.c b/drivers/clk/at91/clk-audio-pll.c
index bf9b635ac9d6..9133c0ec7f08 100644
--- a/drivers/clk/at91/clk-audio-pll.c
+++ b/drivers/clk/at91/clk-audio-pll.c
@@ -460,7 +460,7 @@ at91_clk_register_audio_pll_frac(struct regmap *regmap, const char *name,
 	struct clk_init_data init = {};
 	int ret;

-	frac_ck = kzalloc(sizeof(*frac_ck), GFP_KERNEL);
+	frac_ck = kzalloc_obj(*frac_ck, GFP_KERNEL);
 	if (!frac_ck)
 		return ERR_PTR(-ENOMEM);

@@ -490,7 +490,7 @@ at91_clk_register_audio_pll_pad(struct regmap *regmap, const char *name,
 	struct clk_init_data init;
 	int ret;

-	apad_ck = kzalloc(sizeof(*apad_ck), GFP_KERNEL);
+	apad_ck = kzalloc_obj(*apad_ck, GFP_KERNEL);
 	if (!apad_ck)
 		return ERR_PTR(-ENOMEM);

@@ -521,7 +521,7 @@ at91_clk_register_audio_pll_pmc(struct regmap *regmap, const char *name,
 	struct clk_init_data init;
 	int ret;

-	apmc_ck = kzalloc(sizeof(*apmc_ck), GFP_KERNEL);
+	apmc_ck = kzalloc_obj(*apmc_ck, GFP_KERNEL);
 	if (!apmc_ck)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c
index 4b4edeecc889..0427f112829b 100644
--- a/drivers/clk/at91/clk-generated.c
+++ b/drivers/clk/at91/clk-generated.c
@@ -332,7 +332,7 @@ at91_clk_register_generated(struct regmap *regmap, spinlock_t *lock,
 	if (!(parent_names || parent_hws))
 		return ERR_PTR(-ENOMEM);

-	gck = kzalloc(sizeof(*gck), GFP_KERNEL);
+	gck = kzalloc_obj(*gck, GFP_KERNEL);
 	if (!gck)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-h32mx.c b/drivers/clk/at91/clk-h32mx.c
index a9aa93b5a870..a56e65eb2333 100644
--- a/drivers/clk/at91/clk-h32mx.c
+++ b/drivers/clk/at91/clk-h32mx.c
@@ -100,7 +100,7 @@ at91_clk_register_h32mx(struct regmap *regmap, const char *name,
 	struct clk_init_data init;
 	int ret;

-	h32mxclk = kzalloc(sizeof(*h32mxclk), GFP_KERNEL);
+	h32mxclk = kzalloc_obj(*h32mxclk, GFP_KERNEL);
 	if (!h32mxclk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-i2s-mux.c b/drivers/clk/at91/clk-i2s-mux.c
index fe6ce172b8b0..309a8d6136d5 100644
--- a/drivers/clk/at91/clk-i2s-mux.c
+++ b/drivers/clk/at91/clk-i2s-mux.c
@@ -57,7 +57,7 @@ at91_clk_i2s_mux_register(struct regmap *regmap, const char *name,
 	struct clk_i2s_mux *i2s_ck;
 	int ret;

-	i2s_ck = kzalloc(sizeof(*i2s_ck), GFP_KERNEL);
+	i2s_ck = kzalloc_obj(*i2s_ck, GFP_KERNEL);
 	if (!i2s_ck)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-main.c b/drivers/clk/at91/clk-main.c
index 9b462becc693..51b0421d01e3 100644
--- a/drivers/clk/at91/clk-main.c
+++ b/drivers/clk/at91/clk-main.c
@@ -163,7 +163,7 @@ at91_clk_register_main_osc(struct regmap *regmap,
 	if (!name || !(parent_name || parent_data))
 		return ERR_PTR(-EINVAL);

-	osc = kzalloc(sizeof(*osc), GFP_KERNEL);
+	osc = kzalloc_obj(*osc, GFP_KERNEL);
 	if (!osc)
 		return ERR_PTR(-ENOMEM);

@@ -306,7 +306,7 @@ at91_clk_register_main_rc_osc(struct regmap *regmap,
 	if (!name || !frequency)
 		return ERR_PTR(-EINVAL);

-	osc = kzalloc(sizeof(*osc), GFP_KERNEL);
+	osc = kzalloc_obj(*osc, GFP_KERNEL);
 	if (!osc)
 		return ERR_PTR(-ENOMEM);

@@ -415,7 +415,7 @@ at91_clk_register_rm9200_main(struct regmap *regmap,
 	if (!(parent_name || parent_hw))
 		return ERR_PTR(-EINVAL);

-	clkmain = kzalloc(sizeof(*clkmain), GFP_KERNEL);
+	clkmain = kzalloc_obj(*clkmain, GFP_KERNEL);
 	if (!clkmain)
 		return ERR_PTR(-ENOMEM);

@@ -567,7 +567,7 @@ at91_clk_register_sam9x5_main(struct regmap *regmap,
 	if (!(parent_hws || parent_names) || !num_parents)
 		return ERR_PTR(-EINVAL);

-	clkmain = kzalloc(sizeof(*clkmain), GFP_KERNEL);
+	clkmain = kzalloc_obj(*clkmain, GFP_KERNEL);
 	if (!clkmain)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-master.c b/drivers/clk/at91/clk-master.c
index d5ea2069ec83..5e4f5fcc0645 100644
--- a/drivers/clk/at91/clk-master.c
+++ b/drivers/clk/at91/clk-master.c
@@ -488,7 +488,7 @@ at91_clk_register_master_internal(struct regmap *regmap,
 	if (!name || !num_parents || !(parent_names || parent_hws) || !lock)
 		return ERR_PTR(-EINVAL);

-	master = kzalloc(sizeof(*master), GFP_KERNEL);
+	master = kzalloc_obj(*master, GFP_KERNEL);
 	if (!master)
 		return ERR_PTR(-ENOMEM);

@@ -831,7 +831,7 @@ at91_clk_sama7g5_register_master(struct regmap *regmap,
 	    !lock || id > MASTER_MAX_ID)
 		return ERR_PTR(-EINVAL);

-	master = kzalloc(sizeof(*master), GFP_KERNEL);
+	master = kzalloc_obj(*master, GFP_KERNEL);
 	if (!master)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-peripheral.c b/drivers/clk/at91/clk-peripheral.c
index e7208c47268b..dda4217aaf85 100644
--- a/drivers/clk/at91/clk-peripheral.c
+++ b/drivers/clk/at91/clk-peripheral.c
@@ -109,7 +109,7 @@ at91_clk_register_peripheral(struct regmap *regmap, const char *name,
 	if (!name || !(parent_name || parent_hw) || id > PERIPHERAL_ID_MAX)
 		return ERR_PTR(-EINVAL);

-	periph = kzalloc(sizeof(*periph), GFP_KERNEL);
+	periph = kzalloc_obj(*periph, GFP_KERNEL);
 	if (!periph)
 		return ERR_PTR(-ENOMEM);

@@ -471,7 +471,7 @@ at91_clk_register_sam9x5_peripheral(struct regmap *regmap, spinlock_t *lock,
 	if (!name || !(parent_name || parent_hw))
 		return ERR_PTR(-EINVAL);

-	periph = kzalloc(sizeof(*periph), GFP_KERNEL);
+	periph = kzalloc_obj(*periph, GFP_KERNEL);
 	if (!periph)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c
index 5c5f7398effe..083e7524ff8f 100644
--- a/drivers/clk/at91/clk-pll.c
+++ b/drivers/clk/at91/clk-pll.c
@@ -326,7 +326,7 @@ at91_clk_register_pll(struct regmap *regmap, const char *name,
 	if (id > PLL_MAX_ID)
 		return ERR_PTR(-EINVAL);

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-plldiv.c b/drivers/clk/at91/clk-plldiv.c
index 3ac09fecc54e..27feb5207b40 100644
--- a/drivers/clk/at91/clk-plldiv.c
+++ b/drivers/clk/at91/clk-plldiv.c
@@ -91,7 +91,7 @@ at91_clk_register_plldiv(struct regmap *regmap, const char *name,
 	struct clk_init_data init;
 	int ret;

-	plldiv = kzalloc(sizeof(*plldiv), GFP_KERNEL);
+	plldiv = kzalloc_obj(*plldiv, GFP_KERNEL);
 	if (!plldiv)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-programmable.c b/drivers/clk/at91/clk-programmable.c
index 1195fb405503..a87e63f4c3f8 100644
--- a/drivers/clk/at91/clk-programmable.c
+++ b/drivers/clk/at91/clk-programmable.c
@@ -227,7 +227,7 @@ at91_clk_register_programmable(struct regmap *regmap,
 	if (id > PROG_ID_MAX || !(parent_names || parent_hws))
 		return ERR_PTR(-EINVAL);

-	prog = kzalloc(sizeof(*prog), GFP_KERNEL);
+	prog = kzalloc_obj(*prog, GFP_KERNEL);
 	if (!prog)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-sam9x60-pll.c b/drivers/clk/at91/clk-sam9x60-pll.c
index 3b965057ba0d..5f5cecbcf207 100644
--- a/drivers/clk/at91/clk-sam9x60-pll.c
+++ b/drivers/clk/at91/clk-sam9x60-pll.c
@@ -652,7 +652,7 @@ sam9x60_clk_register_frac_pll(struct regmap *regmap, spinlock_t *lock,
 	if (id > PLL_MAX_ID || !lock || !parent_hw)
 		return ERR_PTR(-EINVAL);

-	frac = kzalloc(sizeof(*frac), GFP_KERNEL);
+	frac = kzalloc_obj(*frac, GFP_KERNEL);
 	if (!frac)
 		return ERR_PTR(-ENOMEM);

@@ -744,7 +744,7 @@ sam9x60_clk_register_div_pll(struct regmap *regmap, spinlock_t *lock,
 	if (safe_div >= PLL_DIV_MAX)
 		safe_div = PLL_DIV_MAX - 1;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-slow.c b/drivers/clk/at91/clk-slow.c
index ac9f7a48b76e..e39db89e2a37 100644
--- a/drivers/clk/at91/clk-slow.c
+++ b/drivers/clk/at91/clk-slow.c
@@ -52,7 +52,7 @@ at91_clk_register_sam9260_slow(struct regmap *regmap,
 	if (!parent_names || !num_parents)
 		return ERR_PTR(-EINVAL);

-	slowck = kzalloc(sizeof(*slowck), GFP_KERNEL);
+	slowck = kzalloc_obj(*slowck, GFP_KERNEL);
 	if (!slowck)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-smd.c b/drivers/clk/at91/clk-smd.c
index 09c649c8598e..3c07dcd3cc2c 100644
--- a/drivers/clk/at91/clk-smd.c
+++ b/drivers/clk/at91/clk-smd.c
@@ -118,7 +118,7 @@ at91sam9x5_clk_register_smd(struct regmap *regmap, const char *name,
 	struct clk_init_data init;
 	int ret;

-	smd = kzalloc(sizeof(*smd), GFP_KERNEL);
+	smd = kzalloc_obj(*smd, GFP_KERNEL);
 	if (!smd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-system.c b/drivers/clk/at91/clk-system.c
index 90eed39d0785..c3de1dabf283 100644
--- a/drivers/clk/at91/clk-system.c
+++ b/drivers/clk/at91/clk-system.c
@@ -116,7 +116,7 @@ at91_clk_register_system(struct regmap *regmap, const char *name,
 	if (!(parent_name || parent_hw) || id > SYSTEM_MAX_ID)
 		return ERR_PTR(-EINVAL);

-	sys = kzalloc(sizeof(*sys), GFP_KERNEL);
+	sys = kzalloc_obj(*sys, GFP_KERNEL);
 	if (!sys)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-usb.c b/drivers/clk/at91/clk-usb.c
index e906928cfbf0..e5107d0cf383 100644
--- a/drivers/clk/at91/clk-usb.c
+++ b/drivers/clk/at91/clk-usb.c
@@ -229,7 +229,7 @@ _at91sam9x5_clk_register_usb(struct regmap *regmap, const char *name,
 	struct clk_init_data init;
 	int ret;

-	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
+	usb = kzalloc_obj(*usb, GFP_KERNEL);
 	if (!usb)
 		return ERR_PTR(-ENOMEM);

@@ -280,7 +280,7 @@ at91sam9n12_clk_register_usb(struct regmap *regmap, const char *name,
 	struct clk_init_data init;
 	int ret;

-	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
+	usb = kzalloc_obj(*usb, GFP_KERNEL);
 	if (!usb)
 		return ERR_PTR(-ENOMEM);

@@ -399,7 +399,7 @@ at91rm9200_clk_register_usb(struct regmap *regmap, const char *name,
 	struct clk_init_data init;
 	int ret;

-	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
+	usb = kzalloc_obj(*usb, GFP_KERNEL);
 	if (!usb)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/clk-utmi.c b/drivers/clk/at91/clk-utmi.c
index b991180beea1..f318c11bbc44 100644
--- a/drivers/clk/at91/clk-utmi.c
+++ b/drivers/clk/at91/clk-utmi.c
@@ -155,7 +155,7 @@ at91_clk_register_utmi_internal(struct regmap *regmap_pmc,
 	if (!(parent_name || parent_hw))
 		return ERR_PTR(-EINVAL);

-	utmi = kzalloc(sizeof(*utmi), GFP_KERNEL);
+	utmi = kzalloc_obj(*utmi, GFP_KERNEL);
 	if (!utmi)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/at91/dt-compat.c b/drivers/clk/at91/dt-compat.c
index f5a5f9ba7634..dddcfcf453a1 100644
--- a/drivers/clk/at91/dt-compat.c
+++ b/drivers/clk/at91/dt-compat.c
@@ -369,7 +369,7 @@ of_at91_clk_master_get_characteristics(struct device_node *np)
 {
 	struct clk_master_characteristics *characteristics;

-	characteristics = kzalloc(sizeof(*characteristics), GFP_KERNEL);
+	characteristics = kzalloc_obj(*characteristics, GFP_KERNEL);
 	if (!characteristics)
 		return NULL;

@@ -568,11 +568,11 @@ of_at91_clk_pll_get_characteristics(struct device_node *np)
 		return NULL;
 	num_output /= num_cells;

-	characteristics = kzalloc(sizeof(*characteristics), GFP_KERNEL);
+	characteristics = kzalloc_obj(*characteristics, GFP_KERNEL);
 	if (!characteristics)
 		return NULL;

-	output = kcalloc(num_output, sizeof(*output), GFP_KERNEL);
+	output = kzalloc_objs(*output, num_output, GFP_KERNEL);
 	if (!output)
 		goto out_free_characteristics;

diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c
index 2310f6f73162..261c91d449e7 100644
--- a/drivers/clk/at91/pmc.c
+++ b/drivers/clk/at91/pmc.c
@@ -87,8 +87,7 @@ struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
 	unsigned int num_clks = ncore + nsystem + nperiph + ngck + npck;
 	struct pmc_data *pmc_data;

-	pmc_data = kzalloc(struct_size(pmc_data, hwtable, num_clks),
-			   GFP_KERNEL);
+	pmc_data = kzalloc_flex(*pmc_data, hwtable, num_clks, GFP_KERNEL);
 	if (!pmc_data)
 		return NULL;

diff --git a/drivers/clk/at91/sckc.c b/drivers/clk/at91/sckc.c
index 021d1b412af4..8ce851dc3e3f 100644
--- a/drivers/clk/at91/sckc.c
+++ b/drivers/clk/at91/sckc.c
@@ -132,7 +132,7 @@ at91_clk_register_slow_osc(void __iomem *sckcr,
 	if (!sckcr || !name || !parent_data)
 		return ERR_PTR(-EINVAL);

-	osc = kzalloc(sizeof(*osc), GFP_KERNEL);
+	osc = kzalloc_obj(*osc, GFP_KERNEL);
 	if (!osc)
 		return ERR_PTR(-ENOMEM);

@@ -239,7 +239,7 @@ at91_clk_register_slow_rc_osc(void __iomem *sckcr,
 	if (!sckcr || !name)
 		return ERR_PTR(-EINVAL);

-	osc = kzalloc(sizeof(*osc), GFP_KERNEL);
+	osc = kzalloc_obj(*osc, GFP_KERNEL);
 	if (!osc)
 		return ERR_PTR(-ENOMEM);

@@ -332,7 +332,7 @@ at91_clk_register_sam9x5_slow(void __iomem *sckcr,
 	if (!sckcr || !name || !parent_hws || !num_parents)
 		return ERR_PTR(-EINVAL);

-	slowck = kzalloc(sizeof(*slowck), GFP_KERNEL);
+	slowck = kzalloc_obj(*slowck, GFP_KERNEL);
 	if (!slowck)
 		return ERR_PTR(-ENOMEM);

@@ -502,7 +502,7 @@ static void __init of_sam9x60_sckc_setup(struct device_node *np)
 	if (IS_ERR(slow_osc))
 		goto unregister_slow_rc;

-	clk_data = kzalloc(struct_size(clk_data, hws, 2), GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, 2, GFP_KERNEL);
 	if (!clk_data)
 		goto unregister_slow_osc;

@@ -611,7 +611,7 @@ static void __init of_sama5d4_sckc_setup(struct device_node *np)
 		goto unregister_slow_rc;
 	parent_data.fw_name = xtal_name;

-	osc = kzalloc(sizeof(*osc), GFP_KERNEL);
+	osc = kzalloc_obj(*osc, GFP_KERNEL);
 	if (!osc)
 		goto unregister_slow_rc;

diff --git a/drivers/clk/axis/clk-artpec6.c b/drivers/clk/axis/clk-artpec6.c
index a3f349d4624d..792f00b7c94e 100644
--- a/drivers/clk/axis/clk-artpec6.c
+++ b/drivers/clk/axis/clk-artpec6.c
@@ -49,7 +49,7 @@ static void of_artpec6_clkctrl_setup(struct device_node *np)

 	sys_refclk_name = of_clk_get_parent_name(np, i);

-	clkdata = kzalloc(sizeof(*clkdata), GFP_KERNEL);
+	clkdata = kzalloc_obj(*clkdata, GFP_KERNEL);
 	if (!clkdata)
 		return;

diff --git a/drivers/clk/axs10x/pll_clock.c b/drivers/clk/axs10x/pll_clock.c
index c7ca473ee76c..594455f0918a 100644
--- a/drivers/clk/axs10x/pll_clock.c
+++ b/drivers/clk/axs10x/pll_clock.c
@@ -265,7 +265,7 @@ static void __init of_axs10x_pll_clk_setup(struct device_node *node)
 	struct clk_init_data init = { };
 	int ret;

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (!pll_clk)
 		return;

diff --git a/drivers/clk/baikal-t1/ccu-div.c b/drivers/clk/baikal-t1/ccu-div.c
index 849d1f55765f..c9dd59b1c551 100644
--- a/drivers/clk/baikal-t1/ccu-div.c
+++ b/drivers/clk/baikal-t1/ccu-div.c
@@ -447,7 +447,7 @@ static void ccu_div_var_debug_init(struct clk_hw *hw, struct dentry *dentry)
 	num += !!(div->flags & CLK_SET_RATE_GATE) +
 		!!(div->features & CCU_DIV_RESET_DOMAIN);

-	bits = kcalloc(num, sizeof(*bits), GFP_KERNEL);
+	bits = kzalloc_objs(*bits, num, GFP_KERNEL);
 	if (!bits)
 		return;

@@ -489,7 +489,7 @@ static void ccu_div_gate_debug_init(struct clk_hw *hw, struct dentry *dentry)
 	struct ccu_div *div = to_ccu_div(hw);
 	struct ccu_div_dbgfs_bit *bit;

-	bit = kmalloc(sizeof(*bit), GFP_KERNEL);
+	bit = kmalloc_obj(*bit, GFP_KERNEL);
 	if (!bit)
 		return;

@@ -507,7 +507,7 @@ static void ccu_div_buf_debug_init(struct clk_hw *hw, struct dentry *dentry)
 	struct ccu_div *div = to_ccu_div(hw);
 	struct ccu_div_dbgfs_bit *bit;

-	bit = kmalloc(sizeof(*bit), GFP_KERNEL);
+	bit = kmalloc_obj(*bit, GFP_KERNEL);
 	if (!bit)
 		return;

@@ -585,7 +585,7 @@ struct ccu_div *ccu_div_hw_register(const struct ccu_div_init_data *div_init)
 	if (!div_init)
 		return ERR_PTR(-EINVAL);

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/baikal-t1/ccu-pll.c b/drivers/clk/baikal-t1/ccu-pll.c
index 357269f41cdc..02b3390cf87f 100644
--- a/drivers/clk/baikal-t1/ccu-pll.c
+++ b/drivers/clk/baikal-t1/ccu-pll.c
@@ -445,7 +445,7 @@ static void ccu_pll_debug_init(struct clk_hw *hw, struct dentry *dentry)
 	struct ccu_pll_dbgfs_fld *flds;
 	int idx;

-	bits = kcalloc(CCU_PLL_DBGFS_BIT_NUM, sizeof(*bits), GFP_KERNEL);
+	bits = kzalloc_objs(*bits, CCU_PLL_DBGFS_BIT_NUM, GFP_KERNEL);
 	if (!bits)
 		return;

@@ -458,7 +458,7 @@ static void ccu_pll_debug_init(struct clk_hw *hw, struct dentry *dentry)
 					   &ccu_pll_dbgfs_bit_fops);
 	}

-	flds = kcalloc(CCU_PLL_DBGFS_FLD_NUM, sizeof(*flds), GFP_KERNEL);
+	flds = kzalloc_objs(*flds, CCU_PLL_DBGFS_FLD_NUM, GFP_KERNEL);
 	if (!flds)
 		return;

@@ -508,7 +508,7 @@ struct ccu_pll *ccu_pll_hw_register(const struct ccu_pll_init_data *pll_init)
 	if (!pll_init)
 		return ERR_PTR(-EINVAL);

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/baikal-t1/ccu-rst.c b/drivers/clk/baikal-t1/ccu-rst.c
index 40023ea67463..18a60273a174 100644
--- a/drivers/clk/baikal-t1/ccu-rst.c
+++ b/drivers/clk/baikal-t1/ccu-rst.c
@@ -172,7 +172,7 @@ struct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *rst_init)
 	if (!rst_init)
 		return ERR_PTR(-EINVAL);

-	rst = kzalloc(sizeof(*rst), GFP_KERNEL);
+	rst = kzalloc_obj(*rst, GFP_KERNEL);
 	if (!rst)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/baikal-t1/clk-ccu-div.c b/drivers/clk/baikal-t1/clk-ccu-div.c
index 17d75e8e2e8f..addccc4014f9 100644
--- a/drivers/clk/baikal-t1/clk-ccu-div.c
+++ b/drivers/clk/baikal-t1/clk-ccu-div.c
@@ -271,7 +271,7 @@ static struct ccu_div_data *ccu_div_create_data(struct device_node *np)
 	struct ccu_div_data *data;
 	int ret;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return ERR_PTR(-ENOMEM);

@@ -289,7 +289,7 @@ static struct ccu_div_data *ccu_div_create_data(struct device_node *np)
 		goto err_kfree_data;
 	}

-	data->divs = kcalloc(data->divs_num, sizeof(*data->divs), GFP_KERNEL);
+	data->divs = kzalloc_objs(*data->divs, data->divs_num, GFP_KERNEL);
 	if (!data->divs) {
 		ret = -ENOMEM;
 		goto err_kfree_data;
diff --git a/drivers/clk/baikal-t1/clk-ccu-pll.c b/drivers/clk/baikal-t1/clk-ccu-pll.c
index 921b87024feb..ace46b60497e 100644
--- a/drivers/clk/baikal-t1/clk-ccu-pll.c
+++ b/drivers/clk/baikal-t1/clk-ccu-pll.c
@@ -100,7 +100,7 @@ static struct ccu_pll_data *ccu_pll_create_data(struct device_node *np)
 {
 	struct ccu_pll_data *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
index 02215ea79403..971131677b5a 100644
--- a/drivers/clk/bcm/clk-bcm2835.c
+++ b/drivers/clk/bcm/clk-bcm2835.c
@@ -1357,7 +1357,7 @@ static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman,
 	init.ops = &bcm2835_pll_clk_ops;
 	init.flags = pll_data->flags | CLK_IGNORE_UNUSED;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return NULL;

diff --git a/drivers/clk/bcm/clk-bcm53573-ilp.c b/drivers/clk/bcm/clk-bcm53573-ilp.c
index b2fc05b60783..e12a5384b95f 100644
--- a/drivers/clk/bcm/clk-bcm53573-ilp.c
+++ b/drivers/clk/bcm/clk-bcm53573-ilp.c
@@ -102,7 +102,7 @@ static void bcm53573_ilp_init(struct device_node *np)
 	const char *parent_name;
 	int err;

-	ilp = kzalloc(sizeof(*ilp), GFP_KERNEL);
+	ilp = kzalloc_obj(*ilp, GFP_KERNEL);
 	if (!ilp)
 		return;

diff --git a/drivers/clk/bcm/clk-iproc-armpll.c b/drivers/clk/bcm/clk-iproc-armpll.c
index 9e86c0c10b57..e08e828666ea 100644
--- a/drivers/clk/bcm/clk-iproc-armpll.c
+++ b/drivers/clk/bcm/clk-iproc-armpll.c
@@ -238,7 +238,7 @@ void __init iproc_armpll_setup(struct device_node *node)
 	struct clk_init_data init;
 	const char *parent_name;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (WARN_ON(!pll))
 		return;

diff --git a/drivers/clk/bcm/clk-iproc-asiu.c b/drivers/clk/bcm/clk-iproc-asiu.c
index 83ec13da9b2e..258c6b2921bd 100644
--- a/drivers/clk/bcm/clk-iproc-asiu.c
+++ b/drivers/clk/bcm/clk-iproc-asiu.c
@@ -188,17 +188,17 @@ void __init iproc_asiu_setup(struct device_node *node,
 	if (WARN_ON(!gate || !div))
 		return;

-	asiu = kzalloc(sizeof(*asiu), GFP_KERNEL);
+	asiu = kzalloc_obj(*asiu, GFP_KERNEL);
 	if (WARN_ON(!asiu))
 		return;

-	asiu->clk_data = kzalloc(struct_size(asiu->clk_data, hws, num_clks),
-				 GFP_KERNEL);
+	asiu->clk_data = kzalloc_flex(*asiu->clk_data, hws, num_clks,
+				      GFP_KERNEL);
 	if (WARN_ON(!asiu->clk_data))
 		goto err_clks;
 	asiu->clk_data->num = num_clks;

-	asiu->clks = kcalloc(num_clks, sizeof(*asiu->clks), GFP_KERNEL);
+	asiu->clks = kzalloc_objs(*asiu->clks, num_clks, GFP_KERNEL);
 	if (WARN_ON(!asiu->clks))
 		goto err_asiu_clks;

diff --git a/drivers/clk/bcm/clk-iproc-pll.c b/drivers/clk/bcm/clk-iproc-pll.c
index 680f9d8d357c..3eab95a59b50 100644
--- a/drivers/clk/bcm/clk-iproc-pll.c
+++ b/drivers/clk/bcm/clk-iproc-pll.c
@@ -731,16 +731,16 @@ void iproc_pll_clk_setup(struct device_node *node,
 	if (WARN_ON(!pll_ctrl) || WARN_ON(!clk_ctrl))
 		return;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (WARN_ON(!pll))
 		return;

-	clk_data = kzalloc(struct_size(clk_data, hws, num_clks), GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, num_clks, GFP_KERNEL);
 	if (WARN_ON(!clk_data))
 		goto err_clk_data;
 	clk_data->num = num_clks;

-	iclk_array = kcalloc(num_clks, sizeof(struct iproc_clk), GFP_KERNEL);
+	iclk_array = kzalloc_objs(struct iproc_clk, num_clks, GFP_KERNEL);
 	if (WARN_ON(!iclk_array))
 		goto err_clks;

diff --git a/drivers/clk/berlin/berlin2-avpll.c b/drivers/clk/berlin/berlin2-avpll.c
index 79f3d37a0ee0..4c5881baf027 100644
--- a/drivers/clk/berlin/berlin2-avpll.c
+++ b/drivers/clk/berlin/berlin2-avpll.c
@@ -184,7 +184,7 @@ int __init berlin2_avpll_vco_register(void __iomem *base,
 	struct berlin2_avpll_vco *vco;
 	struct clk_init_data init;

-	vco = kzalloc(sizeof(*vco), GFP_KERNEL);
+	vco = kzalloc_obj(*vco, GFP_KERNEL);
 	if (!vco)
 		return -ENOMEM;

@@ -360,7 +360,7 @@ int __init berlin2_avpll_channel_register(void __iomem *base,
 	struct berlin2_avpll_channel *ch;
 	struct clk_init_data init;

-	ch = kzalloc(sizeof(*ch), GFP_KERNEL);
+	ch = kzalloc_obj(*ch, GFP_KERNEL);
 	if (!ch)
 		return -ENOMEM;

diff --git a/drivers/clk/berlin/berlin2-div.c b/drivers/clk/berlin/berlin2-div.c
index 0a248bfe2193..6498823133c0 100644
--- a/drivers/clk/berlin/berlin2-div.c
+++ b/drivers/clk/berlin/berlin2-div.c
@@ -236,7 +236,7 @@ berlin2_div_register(const struct berlin2_div_map *map,
 	const struct clk_ops *gate_ops = &berlin2_div_gate_ops;
 	struct berlin2_div *div;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/berlin/berlin2-pll.c b/drivers/clk/berlin/berlin2-pll.c
index 9661820717a5..6557b275a718 100644
--- a/drivers/clk/berlin/berlin2-pll.c
+++ b/drivers/clk/berlin/berlin2-pll.c
@@ -81,7 +81,7 @@ berlin2_pll_register(const struct berlin2_pll_map *map,
 	struct clk_init_data init;
 	struct berlin2_pll *pll;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return -ENOMEM;

diff --git a/drivers/clk/berlin/bg2.c b/drivers/clk/berlin/bg2.c
index 67a9edbba29c..9a08a16b2026 100644
--- a/drivers/clk/berlin/bg2.c
+++ b/drivers/clk/berlin/bg2.c
@@ -499,7 +499,7 @@ static void __init berlin2_clock_setup(struct device_node *np)
 	u8 avpll_flags = 0;
 	int n, ret;

-	clk_data = kzalloc(struct_size(clk_data, hws, MAX_CLKS), GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, MAX_CLKS, GFP_KERNEL);
 	if (!clk_data) {
 		of_node_put(parent_np);
 		return;
diff --git a/drivers/clk/berlin/bg2q.c b/drivers/clk/berlin/bg2q.c
index dd2784bb75b6..58611495ae1d 100644
--- a/drivers/clk/berlin/bg2q.c
+++ b/drivers/clk/berlin/bg2q.c
@@ -285,7 +285,7 @@ static void __init berlin2q_clock_setup(struct device_node *np)
 	struct clk_hw **hws;
 	int n, ret;

-	clk_data = kzalloc(struct_size(clk_data, hws, MAX_CLKS), GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, MAX_CLKS, GFP_KERNEL);
 	if (!clk_data) {
 		of_node_put(parent_np);
 		return;
diff --git a/drivers/clk/clk-asm9260.c b/drivers/clk/clk-asm9260.c
index 595cfa533fb9..08e69d69d1fb 100644
--- a/drivers/clk/clk-asm9260.c
+++ b/drivers/clk/clk-asm9260.c
@@ -262,7 +262,7 @@ static void __init asm9260_acc_init(struct device_node *np)
 	u32 rate;
 	int n;

-	clk_data = kzalloc(struct_size(clk_data, hws, MAX_CLKS), GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, MAX_CLKS, GFP_KERNEL);
 	if (!clk_data)
 		return;
 	clk_data->num = MAX_CLKS;
diff --git a/drivers/clk/clk-bm1880.c b/drivers/clk/clk-bm1880.c
index 1bdceb36fa87..47c64f16e129 100644
--- a/drivers/clk/clk-bm1880.c
+++ b/drivers/clk/clk-bm1880.c
@@ -764,7 +764,7 @@ static struct clk_hw *bm1880_clk_register_composite(struct bm1880_composite_cloc
 	int ret;

 	if (clks->mux_shift >= 0) {
-		mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+		mux = kzalloc_obj(*mux, GFP_KERNEL);
 		if (!mux)
 			return ERR_PTR(-ENOMEM);

@@ -784,7 +784,7 @@ static struct clk_hw *bm1880_clk_register_composite(struct bm1880_composite_cloc
 	}

 	if (clks->gate_shift >= 0) {
-		gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+		gate = kzalloc_obj(*gate, GFP_KERNEL);
 		if (!gate) {
 			ret = -ENOMEM;
 			goto err_out;
@@ -799,7 +799,7 @@ static struct clk_hw *bm1880_clk_register_composite(struct bm1880_composite_cloc
 	}

 	if (clks->div_shift >= 0) {
-		div_hws = kzalloc(sizeof(*div_hws), GFP_KERNEL);
+		div_hws = kzalloc_obj(*div_hws, GFP_KERNEL);
 		if (!div_hws) {
 			ret = -ENOMEM;
 			goto err_out;
diff --git a/drivers/clk/clk-bulk.c b/drivers/clk/clk-bulk.c
index 826b3ff99433..1039cf038850 100644
--- a/drivers/clk/clk-bulk.c
+++ b/drivers/clk/clk-bulk.c
@@ -54,7 +54,7 @@ static int __must_check of_clk_bulk_get_all(struct device_node *np,
 	if (!num_clks)
 		return 0;

-	clk_bulk = kmalloc_array(num_clks, sizeof(*clk_bulk), GFP_KERNEL);
+	clk_bulk = kmalloc_objs(*clk_bulk, num_clks, GFP_KERNEL);
 	if (!clk_bulk)
 		return -ENOMEM;

diff --git a/drivers/clk/clk-clps711x.c b/drivers/clk/clk-clps711x.c
index 402ab74d9bfb..babe42e59533 100644
--- a/drivers/clk/clk-clps711x.c
+++ b/drivers/clk/clk-clps711x.c
@@ -53,9 +53,8 @@ static void __init clps711x_clk_init_dt(struct device_node *np)
 	base = of_iomap(np, 0);
 	BUG_ON(!base);

-	clps711x_clk = kzalloc(struct_size(clps711x_clk, clk_data.hws,
-					   CLPS711X_CLK_MAX),
-			       GFP_KERNEL);
+	clps711x_clk = kzalloc_flex(*clps711x_clk, clk_data.hws,
+				    CLPS711X_CLK_MAX, GFP_KERNEL);
 	BUG_ON(!clps711x_clk);

 	spin_lock_init(&clps711x_clk->lock);
diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c
index 66759fe28fad..20e45856e8d6 100644
--- a/drivers/clk/clk-composite.c
+++ b/drivers/clk/clk-composite.c
@@ -248,7 +248,7 @@ static struct clk_hw *__clk_hw_register_composite(struct device *dev,
 	struct clk_ops *clk_composite_ops;
 	int ret;

-	composite = kzalloc(sizeof(*composite), GFP_KERNEL);
+	composite = kzalloc_obj(*composite, GFP_KERNEL);
 	if (!composite)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
index 2601b6155afb..e91bcdb092db 100644
--- a/drivers/clk/clk-divider.c
+++ b/drivers/clk/clk-divider.c
@@ -538,7 +538,7 @@ struct clk_hw *__clk_hw_register_divider(struct device *dev,
 	}

 	/* allocate the divider */
-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/clk-eyeq.c b/drivers/clk/clk-eyeq.c
index ea1c3d78e7cd..a41f8706df18 100644
--- a/drivers/clk/clk-eyeq.c
+++ b/drivers/clk/clk-eyeq.c
@@ -335,7 +335,7 @@ static int eqc_auxdev_create(struct device *dev, void __iomem *base,
 	struct auxiliary_device *adev;
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return -ENOMEM;

@@ -400,7 +400,7 @@ static int eqc_probe(struct platform_device *pdev)

 	clk_count = data->pll_count + data->div_count +
 		    data->fixed_factor_count + data->early_clk_count;
-	cells = kzalloc(struct_size(cells, hws, clk_count), GFP_KERNEL);
+	cells = kzalloc_flex(*cells, hws, clk_count, GFP_KERNEL);
 	if (!cells)
 		return -ENOMEM;

@@ -738,7 +738,7 @@ static void __init eqc_early_init(struct device_node *np,

 	clk_count = early_data->early_pll_count + early_data->early_fixed_factor_count +
 		    early_data->late_clk_count;
-	cells = kzalloc(struct_size(cells, hws, clk_count), GFP_KERNEL);
+	cells = kzalloc_flex(*cells, hws, clk_count, GFP_KERNEL);
 	if (!cells) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/clk/clk-fixed-factor.c b/drivers/clk/clk-fixed-factor.c
index de658c9e4c53..40cfb6af38bb 100644
--- a/drivers/clk/clk-fixed-factor.c
+++ b/drivers/clk/clk-fixed-factor.c
@@ -110,7 +110,7 @@ __clk_hw_register_fixed_factor(struct device *dev, struct device_node *np,
 		fix = devres_alloc(devm_clk_hw_register_fixed_factor_release,
 				sizeof(*fix), GFP_KERNEL);
 	else
-		fix = kmalloc(sizeof(*fix), GFP_KERNEL);
+		fix = kmalloc_obj(*fix, GFP_KERNEL);
 	if (!fix)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/clk-fixed-rate.c b/drivers/clk/clk-fixed-rate.c
index 6b4f76b9c4da..ef48ee88df46 100644
--- a/drivers/clk/clk-fixed-rate.c
+++ b/drivers/clk/clk-fixed-rate.c
@@ -78,7 +78,7 @@ struct clk_hw *__clk_hw_register_fixed_rate(struct device *dev,
 		fixed = devres_alloc(devm_clk_hw_register_fixed_rate_release,
 				     sizeof(*fixed), GFP_KERNEL);
 	else
-		fixed = kzalloc(sizeof(*fixed), GFP_KERNEL);
+		fixed = kzalloc_obj(*fixed, GFP_KERNEL);
 	if (!fixed)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/clk-fractional-divider.c b/drivers/clk/clk-fractional-divider.c
index cd36a6e27f25..065ceb9b3a49 100644
--- a/drivers/clk/clk-fractional-divider.c
+++ b/drivers/clk/clk-fractional-divider.c
@@ -275,7 +275,7 @@ struct clk_hw *clk_hw_register_fractional_divider(struct device *dev,
 	struct clk_hw *hw;
 	int ret;

-	fd = kzalloc(sizeof(*fd), GFP_KERNEL);
+	fd = kzalloc_obj(*fd, GFP_KERNEL);
 	if (!fd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c
index 4746f8219132..0c5cbb3f3e75 100644
--- a/drivers/clk/clk-gate.c
+++ b/drivers/clk/clk-gate.c
@@ -145,7 +145,7 @@ struct clk_hw *__clk_hw_register_gate(struct device *dev,
 	}

 	/* allocate the gate */
-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/clk-gemini.c b/drivers/clk/clk-gemini.c
index e94589c38568..877db2e6efd1 100644
--- a/drivers/clk/clk-gemini.c
+++ b/drivers/clk/clk-gemini.c
@@ -197,7 +197,7 @@ static struct clk_hw *gemini_pci_clk_setup(const char *name,
 	struct clk_init_data init;
 	int ret;

-	pciclk = kzalloc(sizeof(*pciclk), GFP_KERNEL);
+	pciclk = kzalloc_obj(*pciclk, GFP_KERNEL);
 	if (!pciclk)
 		return ERR_PTR(-ENOMEM);

@@ -398,9 +398,8 @@ static void __init gemini_cc_init(struct device_node *np)
 	int ret;
 	int i;

-	gemini_clk_data = kzalloc(struct_size(gemini_clk_data, hws,
-					      GEMINI_NUM_CLKS),
-				  GFP_KERNEL);
+	gemini_clk_data = kzalloc_flex(*gemini_clk_data, hws, GEMINI_NUM_CLKS,
+				       GFP_KERNEL);
 	if (!gemini_clk_data)
 		return;
 	gemini_clk_data->num = GEMINI_NUM_CLKS;
diff --git a/drivers/clk/clk-highbank.c b/drivers/clk/clk-highbank.c
index cc583934ecf2..2642314b4735 100644
--- a/drivers/clk/clk-highbank.c
+++ b/drivers/clk/clk-highbank.c
@@ -277,7 +277,7 @@ static void __init hb_clk_init(struct device_node *node, const struct clk_ops *o
 	if (WARN_ON(rc))
 		return;

-	hb_clk = kzalloc(sizeof(*hb_clk), GFP_KERNEL);
+	hb_clk = kzalloc_obj(*hb_clk, GFP_KERNEL);
 	if (WARN_ON(!hb_clk))
 		return;

diff --git a/drivers/clk/clk-hsdk-pll.c b/drivers/clk/clk-hsdk-pll.c
index 7d56a47c2aa7..0ea108366136 100644
--- a/drivers/clk/clk-hsdk-pll.c
+++ b/drivers/clk/clk-hsdk-pll.c
@@ -357,7 +357,7 @@ static void __init of_hsdk_pll_clk_setup(struct device_node *node)
 	struct hsdk_pll_clk *pll_clk;
 	struct clk_init_data init = { };

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (!pll_clk)
 		return;

diff --git a/drivers/clk/clk-k210.c b/drivers/clk/clk-k210.c
index 7b7329a907ab..ffcb4e1b3488 100644
--- a/drivers/clk/clk-k210.c
+++ b/drivers/clk/clk-k210.c
@@ -893,7 +893,7 @@ static void __init k210_clk_init(struct device_node *np)
 	struct k210_sysclk *ksc;
 	int i, ret;

-	ksc = kzalloc(sizeof(*ksc), GFP_KERNEL);
+	ksc = kzalloc_obj(*ksc, GFP_KERNEL);
 	if (!ksc)
 		return;

diff --git a/drivers/clk/clk-milbeaut.c b/drivers/clk/clk-milbeaut.c
index 45389db652e0..6a27411c9f9f 100644
--- a/drivers/clk/clk-milbeaut.c
+++ b/drivers/clk/clk-milbeaut.c
@@ -333,7 +333,7 @@ static struct clk_hw *m10v_clk_hw_register_mux(struct device *dev,
 	struct clk_init_data init;
 	int ret;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return ERR_PTR(-ENOMEM);

@@ -464,7 +464,7 @@ static struct clk_hw *m10v_clk_hw_register_divider(struct device *dev,
 	struct clk_init_data init;
 	int ret;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return ERR_PTR(-ENOMEM);

@@ -611,9 +611,8 @@ static void __init m10v_cc_init(struct device_node *np)
 	const char *parent_name;
 	struct clk_hw *hw;

-	m10v_clk_data = kzalloc(struct_size(m10v_clk_data, hws,
-					M10V_NUM_CLKS),
-					GFP_KERNEL);
+	m10v_clk_data = kzalloc_flex(*m10v_clk_data, hws, M10V_NUM_CLKS,
+				     GFP_KERNEL);

 	if (!m10v_clk_data)
 		return;
diff --git a/drivers/clk/clk-mux.c b/drivers/clk/clk-mux.c
index fa817c317c2a..ee4a7065817f 100644
--- a/drivers/clk/clk-mux.c
+++ b/drivers/clk/clk-mux.c
@@ -169,7 +169,7 @@ struct clk_hw *__clk_hw_register_mux(struct device *dev, struct device_node *np,
 	}

 	/* allocate the mux */
-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/clk-nomadik.c b/drivers/clk/clk-nomadik.c
index fc0aeb4247f2..d165ef6f320d 100644
--- a/drivers/clk/clk-nomadik.c
+++ b/drivers/clk/clk-nomadik.c
@@ -270,7 +270,7 @@ pll_clk_register(struct device *dev, const char *name,
 		return ERR_PTR(-EINVAL);
 	}

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

@@ -357,7 +357,7 @@ src_clk_register(struct device *dev, const char *name,
 	struct clk_src *sclk;
 	struct clk_init_data init;

-	sclk = kzalloc(sizeof(*sclk), GFP_KERNEL);
+	sclk = kzalloc_obj(*sclk, GFP_KERNEL);
 	if (!sclk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/clk-npcm7xx.c b/drivers/clk/clk-npcm7xx.c
index 030186def9c6..e02f3f1d5ea7 100644
--- a/drivers/clk/clk-npcm7xx.c
+++ b/drivers/clk/clk-npcm7xx.c
@@ -74,7 +74,7 @@ npcm7xx_clk_register_pll(void __iomem *pllcon, const char *name,
 	struct clk_hw *hw;
 	int ret;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

@@ -421,8 +421,8 @@ static void __init npcm7xx_clk_init(struct device_node *clk_np)
 	if (!clk_base)
 		goto npcm7xx_init_error;

-	npcm7xx_clk_data = kzalloc(struct_size(npcm7xx_clk_data, hws,
-				   NPCM7XX_NUM_CLOCKS), GFP_KERNEL);
+	npcm7xx_clk_data = kzalloc_flex(*npcm7xx_clk_data, hws,
+					NPCM7XX_NUM_CLOCKS, GFP_KERNEL);
 	if (!npcm7xx_clk_data)
 		goto npcm7xx_init_np_err;

diff --git a/drivers/clk/clk-qoriq.c b/drivers/clk/clk-qoriq.c
index a560edeb4b55..c1e0b0a80da7 100644
--- a/drivers/clk/clk-qoriq.c
+++ b/drivers/clk/clk-qoriq.c
@@ -976,7 +976,7 @@ static struct clk * __init create_one_cmux(struct clockgen *cg, int idx)
 	u64 max_rate, pct80_rate;
 	u32 clksel;

-	hwc = kzalloc(sizeof(*hwc), GFP_KERNEL);
+	hwc = kzalloc_obj(*hwc, GFP_KERNEL);
 	if (!hwc)
 		return NULL;

@@ -1020,7 +1020,7 @@ static struct clk * __init create_one_hwaccel(struct clockgen *cg, int idx)
 {
 	struct mux_hwclock *hwc;

-	hwc = kzalloc(sizeof(*hwc), GFP_KERNEL);
+	hwc = kzalloc_obj(*hwc, GFP_KERNEL);
 	if (!hwc)
 		return NULL;

@@ -1319,11 +1319,11 @@ static void __init legacy_pll_init(struct device_node *np, int idx)
 	count = of_property_count_strings(np, "clock-output-names");

 	BUILD_BUG_ON(ARRAY_SIZE(pll->div) < 4);
-	subclks = kcalloc(4, sizeof(struct clk *), GFP_KERNEL);
+	subclks = kzalloc_objs(struct clk *, 4, GFP_KERNEL);
 	if (!subclks)
 		return;

-	onecell_data = kmalloc(sizeof(*onecell_data), GFP_KERNEL);
+	onecell_data = kmalloc_obj(*onecell_data, GFP_KERNEL);
 	if (!onecell_data)
 		goto err_clks;

diff --git a/drivers/clk/clk-stm32f4.c b/drivers/clk/clk-stm32f4.c
index b5d4d48432a0..4e518b92797b 100644
--- a/drivers/clk/clk-stm32f4.c
+++ b/drivers/clk/clk-stm32f4.c
@@ -489,7 +489,7 @@ static struct clk *clk_register_apb_mul(struct device *dev, const char *name,
 	struct clk_init_data init;
 	struct clk *clk;

-	am = kzalloc(sizeof(*am), GFP_KERNEL);
+	am = kzalloc_obj(*am, GFP_KERNEL);
 	if (!am)
 		return ERR_PTR(-ENOMEM);

@@ -815,7 +815,7 @@ static struct clk_hw *clk_register_pll_div(const char *name,
 	int ret;

 	/* allocate the divider */
-	pll_div = kzalloc(sizeof(*pll_div), GFP_KERNEL);
+	pll_div = kzalloc_obj(*pll_div, GFP_KERNEL);
 	if (!pll_div)
 		return ERR_PTR(-ENOMEM);

@@ -937,7 +937,7 @@ static struct clk_hw *stm32f4_rcc_register_pll(const char *pllsrc,
 	const struct stm32f4_vco_data *vco;


-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

@@ -1107,7 +1107,7 @@ static struct clk_hw *clk_register_rgate(struct device *dev, const char *name,
 	struct clk_hw *hw;
 	int ret;

-	rgate = kzalloc(sizeof(*rgate), GFP_KERNEL);
+	rgate = kzalloc_obj(*rgate, GFP_KERNEL);
 	if (!rgate)
 		return ERR_PTR(-ENOMEM);

@@ -1202,13 +1202,13 @@ static struct clk_hw *stm32_register_cclk(struct device *dev, const char *name,
 	struct clk_gate *gate;
 	struct clk_mux *mux;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate) {
 		hw = ERR_PTR(-EINVAL);
 		goto fail;
 	}

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux) {
 		kfree(gate);
 		hw = ERR_PTR(-EINVAL);
@@ -1776,7 +1776,7 @@ static struct clk_hw *stm32_register_aux_clk(const char *name,
 	const struct clk_ops *mux_ops = NULL, *gate_ops = NULL;

 	if (offset_gate != NO_GATE) {
-		gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+		gate = kzalloc_obj(*gate, GFP_KERNEL);
 		if (!gate) {
 			hw = ERR_PTR(-EINVAL);
 			goto fail;
@@ -1791,7 +1791,7 @@ static struct clk_hw *stm32_register_aux_clk(const char *name,
 	}

 	if (offset_mux != NO_MUX) {
-		mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+		mux = kzalloc_obj(*mux, GFP_KERNEL);
 		if (!mux) {
 			hw = ERR_PTR(-EINVAL);
 			goto fail;
@@ -1855,8 +1855,8 @@ static void __init stm32f4_rcc_init(struct device_node *np)

 	stm32fx_end_primary_clk = data->end_primary;

-	clks = kmalloc_array(data->gates_num + stm32fx_end_primary_clk,
-			sizeof(*clks), GFP_KERNEL);
+	clks = kmalloc_objs(*clks, data->gates_num + stm32fx_end_primary_clk,
+			    GFP_KERNEL);
 	if (!clks)
 		goto fail;

diff --git a/drivers/clk/clk-stm32h7.c b/drivers/clk/clk-stm32h7.c
index 04c18a1d45d3..66fd934070b7 100644
--- a/drivers/clk/clk-stm32h7.c
+++ b/drivers/clk/clk-stm32h7.c
@@ -222,7 +222,7 @@ static struct clk_hw *clk_register_ready_gate(struct device *dev,
 	struct clk_hw *hw;
 	int ret;

-	rgate = kzalloc(sizeof(*rgate), GFP_KERNEL);
+	rgate = kzalloc_obj(*rgate, GFP_KERNEL);
 	if (!rgate)
 		return ERR_PTR(-ENOMEM);

@@ -297,7 +297,7 @@ static struct clk_mux *_get_cmux(void __iomem *reg, u8 shift, u8 width,
 {
 	struct clk_mux *mux;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return ERR_PTR(-ENOMEM);

@@ -315,7 +315,7 @@ static struct clk_divider *_get_cdiv(void __iomem *reg, u8 shift, u8 width,
 {
 	struct clk_divider *div;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);

 	if (!div)
 		return ERR_PTR(-ENOMEM);
@@ -334,7 +334,7 @@ static struct clk_gate *_get_cgate(void __iomem *reg, u8 bit_idx, u32 flags,
 {
 	struct clk_gate *gate;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

@@ -467,7 +467,7 @@ static struct clk_hw *clk_register_stm32_timer_ker(struct device *dev,
 	struct clk_hw *hw;
 	int err;

-	element = kzalloc(sizeof(*element), GFP_KERNEL);
+	element = kzalloc_obj(*element, GFP_KERNEL);
 	if (!element)
 		return ERR_PTR(-ENOMEM);

@@ -792,7 +792,7 @@ static struct clk_hw *clk_register_stm32_pll(struct device *dev,
 	struct stm32_fractional_divider *div = NULL;
 	struct stm32_ready_gate *rgate;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

@@ -1200,8 +1200,7 @@ static void __init stm32h7_rcc_init(struct device_node *np)
 	const char *hse_clk, *lse_clk, *i2s_clk;
 	struct regmap *pdrm;

-	clk_data = kzalloc(struct_size(clk_data, hws, STM32H7_MAX_CLKS),
-			   GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, STM32H7_MAX_CLKS, GFP_KERNEL);
 	if (!clk_data)
 		return;

diff --git a/drivers/clk/clk-vt8500.c b/drivers/clk/clk-vt8500.c
index eae5b3fbfb82..6065141750af 100644
--- a/drivers/clk/clk-vt8500.c
+++ b/drivers/clk/clk-vt8500.c
@@ -235,7 +235,7 @@ static __init void vtwm_device_clk_init(struct device_node *node)
 	if (!pmc_base)
 		vtwm_set_pmc_base();

-	dev_clk = kzalloc(sizeof(*dev_clk), GFP_KERNEL);
+	dev_clk = kzalloc_obj(*dev_clk, GFP_KERNEL);
 	if (WARN_ON(!dev_clk))
 		return;

@@ -698,7 +698,7 @@ static __init void vtwm_pll_clk_init(struct device_node *node, int pll_type)
 	if (WARN_ON(rc))
 		return;

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (WARN_ON(!pll_clk))
 		return;

diff --git a/drivers/clk/clk-xgene.c b/drivers/clk/clk-xgene.c
index 92e39f3237c2..ebf47b1f5433 100644
--- a/drivers/clk/clk-xgene.c
+++ b/drivers/clk/clk-xgene.c
@@ -131,7 +131,7 @@ static struct clk *xgene_register_clk_pll(struct device *dev,
 	struct clk_init_data init;

 	/* allocate the APM clock structure */
-	apmclk = kzalloc(sizeof(*apmclk), GFP_KERNEL);
+	apmclk = kzalloc_obj(*apmclk, GFP_KERNEL);
 	if (!apmclk)
 		return ERR_PTR(-ENOMEM);

@@ -352,7 +352,7 @@ xgene_register_clk_pmd(struct device *dev,
 	struct clk_init_data init;
 	struct clk *clk;

-	fd = kzalloc(sizeof(*fd), GFP_KERNEL);
+	fd = kzalloc_obj(*fd, GFP_KERNEL);
 	if (!fd)
 		return ERR_PTR(-ENOMEM);

@@ -638,7 +638,7 @@ static struct clk *xgene_register_clk(struct device *dev,
 	int rc;

 	/* allocate the APM clock structure */
-	apmclk = kzalloc(sizeof(*apmclk), GFP_KERNEL);
+	apmclk = kzalloc_obj(*apmclk, GFP_KERNEL);
 	if (!apmclk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 85d2f2481acf..5789cd93bfc2 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -4121,7 +4121,7 @@ static struct clk *alloc_clk(struct clk_core *core, const char *dev_id,
 {
 	struct clk *clk;

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk)
 		return ERR_PTR(-ENOMEM);

@@ -4238,7 +4238,7 @@ static int clk_core_populate_parent_map(struct clk_core *core,
 	 * Avoid unnecessary string look-ups of clk_core's possible parents by
 	 * having a cache of names/clk_hw pointers to clk_core pointers.
 	 */
-	parents = kcalloc(num_parents, sizeof(*parents), GFP_KERNEL);
+	parents = kzalloc_objs(*parents, num_parents, GFP_KERNEL);
 	core->parents = parents;
 	if (!parents)
 		return -ENOMEM;
@@ -4328,7 +4328,7 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw)
 	 */
 	hw->init = NULL;

-	core = kzalloc(sizeof(*core), GFP_KERNEL);
+	core = kzalloc_obj(*core, GFP_KERNEL);
 	if (!core) {
 		ret = -ENOMEM;
 		goto fail_out;
@@ -4813,7 +4813,7 @@ int clk_notifier_register(struct clk *clk, struct notifier_block *nb)
 			goto found;

 	/* if clk wasn't in the notifier list, allocate new clk_notifier */
-	cn = kzalloc(sizeof(*cn), GFP_KERNEL);
+	cn = kzalloc_obj(*cn, GFP_KERNEL);
 	if (!cn)
 		goto out;

@@ -5009,7 +5009,7 @@ int of_clk_add_provider(struct device_node *np,
 	if (!np)
 		return 0;

-	cp = kzalloc(sizeof(*cp), GFP_KERNEL);
+	cp = kzalloc_obj(*cp, GFP_KERNEL);
 	if (!cp)
 		return -ENOMEM;

@@ -5051,7 +5051,7 @@ int of_clk_add_hw_provider(struct device_node *np,
 	if (!np)
 		return 0;

-	cp = kzalloc(sizeof(*cp), GFP_KERNEL);
+	cp = kzalloc_obj(*cp, GFP_KERNEL);
 	if (!cp)
 		return -ENOMEM;

@@ -5548,7 +5548,7 @@ void __init of_clk_init(const struct of_device_id *matches)
 		if (!of_device_is_available(np))
 			continue;

-		parent = kzalloc(sizeof(*parent), GFP_KERNEL);
+		parent = kzalloc_obj(*parent, GFP_KERNEL);
 		if (!parent) {
 			list_for_each_entry_safe(clk_provider, next,
 						 &clk_provider_list, node) {
diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
index e0bede6350e1..4d1dbd9fb807 100644
--- a/drivers/clk/clkdev.c
+++ b/drivers/clk/clkdev.c
@@ -164,7 +164,7 @@ vclkdev_alloc(struct clk_hw *hw, const char *con_id, const char *dev_fmt,
 	size_t max_size;
 	ssize_t res;

-	cla = kzalloc(sizeof(*cla), GFP_KERNEL);
+	cla = kzalloc_obj(*cla, GFP_KERNEL);
 	if (!cla)
 		return NULL;

diff --git a/drivers/clk/davinci/pll.c b/drivers/clk/davinci/pll.c
index bfb6bbdc036c..eda3c3a45c52 100644
--- a/drivers/clk/davinci/pll.c
+++ b/drivers/clk/davinci/pll.c
@@ -243,14 +243,14 @@ static struct clk *davinci_pll_div_register(struct device *dev,
 	struct clk *clk;
 	int ret;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

 	gate->reg = reg;
 	gate->bit_idx = DIV_ENABLE_SHIFT;

-	divider = kzalloc(sizeof(*divider), GFP_KERNEL);
+	divider = kzalloc_obj(*divider, GFP_KERNEL);
 	if (!divider) {
 		ret = -ENOMEM;
 		goto err_free_gate;
@@ -433,7 +433,7 @@ struct clk *davinci_pll_clk_register(struct device *dev,
 					  info->unlock_mask, 0);
 	}

-	pllout = kzalloc(sizeof(*pllout), GFP_KERNEL);
+	pllout = kzalloc_obj(*pllout, GFP_KERNEL);
 	if (!pllout) {
 		ret = -ENOMEM;
 		goto err_unregister_prediv;
@@ -489,7 +489,7 @@ struct clk *davinci_pll_clk_register(struct device *dev,
 		parent_name = postdiv_name;
 	}

-	pllen = kzalloc(sizeof(*pllen), GFP_KERNEL);
+	pllen = kzalloc_obj(*pllen, GFP_KERNEL);
 	if (!pllen) {
 		ret = -ENOMEM;
 		goto err_unregister_postdiv;
@@ -579,7 +579,7 @@ davinci_pll_obsclk_register(struct device *dev,
 	u32 oscdiv;
 	int ret;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return ERR_PTR(-ENOMEM);

@@ -587,7 +587,7 @@ davinci_pll_obsclk_register(struct device *dev,
 	mux->table = info->table;
 	mux->mask = info->ocsrc_mask;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate) {
 		ret = -ENOMEM;
 		goto err_free_mux;
@@ -596,7 +596,7 @@ davinci_pll_obsclk_register(struct device *dev,
 	gate->reg = base + CKEN;
 	gate->bit_idx = CKEN_OBSCLK_SHIFT;

-	divider = kzalloc(sizeof(*divider), GFP_KERNEL);
+	divider = kzalloc_obj(*divider, GFP_KERNEL);
 	if (!divider) {
 		ret = -ENOMEM;
 		goto err_free_gate;
@@ -690,14 +690,14 @@ davinci_pll_sysclk_register(struct device *dev,
 	else
 		reg = PLLDIV4 + 4 * (info->id - 4);

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

 	gate->reg = base + reg;
 	gate->bit_idx = DIV_ENABLE_SHIFT;

-	divider = kzalloc(sizeof(*divider), GFP_KERNEL);
+	divider = kzalloc_obj(*divider, GFP_KERNEL);
 	if (!divider) {
 		ret = -ENOMEM;
 		goto err_free_gate;
@@ -776,13 +776,13 @@ int of_davinci_pll_init(struct device *dev, struct device_node *node,
 		int n_clks =  max_sysclk_id + 1;
 		int i;

-		clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
+		clk_data = kzalloc_obj(*clk_data, GFP_KERNEL);
 		if (!clk_data) {
 			of_node_put(child);
 			return -ENOMEM;
 		}

-		clks = kmalloc_array(n_clks, sizeof(*clks), GFP_KERNEL);
+		clks = kmalloc_objs(*clks, n_clks, GFP_KERNEL);
 		if (!clks) {
 			kfree(clk_data);
 			of_node_put(child);
@@ -942,7 +942,7 @@ static void davinci_pll_debug_init(struct clk_hw *hw, struct dentry *dentry)
 	struct davinci_pll_clk *pll = to_davinci_pll_clk(hw);
 	struct debugfs_regset32 *regset;

-	regset = kzalloc(sizeof(*regset), GFP_KERNEL);
+	regset = kzalloc_obj(*regset, GFP_KERNEL);
 	if (!regset)
 		return;

diff --git a/drivers/clk/davinci/psc.c b/drivers/clk/davinci/psc.c
index f3ee9397bb0c..5a593f20ce81 100644
--- a/drivers/clk/davinci/psc.c
+++ b/drivers/clk/davinci/psc.c
@@ -239,7 +239,7 @@ davinci_lpsc_clk_register(struct device *dev, const char *name,
 	int ret;
 	bool is_on;

-	lpsc = kzalloc(sizeof(*lpsc), GFP_KERNEL);
+	lpsc = kzalloc_obj(*lpsc, GFP_KERNEL);
 	if (!lpsc)
 		return ERR_PTR(-ENOMEM);

@@ -372,11 +372,11 @@ __davinci_psc_register_clocks(struct device *dev,
 	struct regmap *regmap;
 	int i, ret;

-	psc = kzalloc(sizeof(*psc), GFP_KERNEL);
+	psc = kzalloc_obj(*psc, GFP_KERNEL);
 	if (!psc)
 		return ERR_PTR(-ENOMEM);

-	clks = kmalloc_array(num_clks, sizeof(*clks), GFP_KERNEL);
+	clks = kmalloc_objs(*clks, num_clks, GFP_KERNEL);
 	if (!clks) {
 		ret = -ENOMEM;
 		goto err_free_psc;
@@ -392,7 +392,7 @@ __davinci_psc_register_clocks(struct device *dev,
 	for (i = 0; i < num_clks; i++)
 		clks[i] = ERR_PTR(-ENOENT);

-	pm_domains = kcalloc(num_clks, sizeof(*pm_domains), GFP_KERNEL);
+	pm_domains = kzalloc_objs(*pm_domains, num_clks, GFP_KERNEL);
 	if (!pm_domains) {
 		ret = -ENOMEM;
 		goto err_free_clks;
diff --git a/drivers/clk/hisilicon/clk-hi3620.c b/drivers/clk/hisilicon/clk-hi3620.c
index 5d0226530fdb..069ea7b56c09 100644
--- a/drivers/clk/hisilicon/clk-hi3620.c
+++ b/drivers/clk/hisilicon/clk-hi3620.c
@@ -414,7 +414,7 @@ static struct clk *hisi_register_clk_mmc(struct hisi_mmc_clock *mmc_clk,
 	struct clk *clk;
 	struct clk_init_data init;

-	mclk = kzalloc(sizeof(*mclk), GFP_KERNEL);
+	mclk = kzalloc_obj(*mclk, GFP_KERNEL);
 	if (!mclk)
 		return ERR_PTR(-ENOMEM);

@@ -461,11 +461,11 @@ static void __init hi3620_mmc_clk_init(struct device_node *node)
 		return;
 	}

-	clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
+	clk_data = kzalloc_obj(*clk_data, GFP_KERNEL);
 	if (WARN_ON(!clk_data))
 		return;

-	clk_data->clks = kcalloc(num, sizeof(*clk_data->clks), GFP_KERNEL);
+	clk_data->clks = kzalloc_objs(*clk_data->clks, num, GFP_KERNEL);
 	if (!clk_data->clks) {
 		kfree(clk_data);
 		return;
diff --git a/drivers/clk/hisilicon/clk-hix5hd2.c b/drivers/clk/hisilicon/clk-hix5hd2.c
index 64bdd3f05725..31a9ab1758f1 100644
--- a/drivers/clk/hisilicon/clk-hix5hd2.c
+++ b/drivers/clk/hisilicon/clk-hix5hd2.c
@@ -261,7 +261,7 @@ hix5hd2_clk_register_complex(struct hix5hd2_complex_clock *clks, int nums,
 		struct clk *clk;
 		struct clk_init_data init;

-		p_clk = kzalloc(sizeof(*p_clk), GFP_KERNEL);
+		p_clk = kzalloc_obj(*p_clk, GFP_KERNEL);
 		if (!p_clk)
 			return;

diff --git a/drivers/clk/hisilicon/clk.c b/drivers/clk/hisilicon/clk.c
index 09368fd32bef..8b37a6310289 100644
--- a/drivers/clk/hisilicon/clk.c
+++ b/drivers/clk/hisilicon/clk.c
@@ -68,12 +68,12 @@ struct hisi_clock_data *hisi_clk_init(struct device_node *np,
 		goto err;
 	}

-	clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
+	clk_data = kzalloc_obj(*clk_data, GFP_KERNEL);
 	if (!clk_data)
 		goto err;

 	clk_data->base = base;
-	clk_table = kcalloc(nr_clks, sizeof(*clk_table), GFP_KERNEL);
+	clk_table = kzalloc_objs(*clk_table, nr_clks, GFP_KERNEL);
 	if (!clk_table)
 		goto err_data;

diff --git a/drivers/clk/hisilicon/clkdivider-hi6220.c b/drivers/clk/hisilicon/clkdivider-hi6220.c
index fd7ceb92d651..c59c2c38812b 100644
--- a/drivers/clk/hisilicon/clkdivider-hi6220.c
+++ b/drivers/clk/hisilicon/clkdivider-hi6220.c
@@ -109,7 +109,7 @@ struct clk *hi6220_register_clkdiv(struct device *dev, const char *name,
 	int i;

 	/* allocate the divider */
-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return ERR_PTR(-ENOMEM);

@@ -117,7 +117,7 @@ struct clk *hi6220_register_clkdiv(struct device *dev, const char *name,
 	max_div = div_mask(width) + 1;
 	min_div = 1;

-	table = kcalloc(max_div + 1, sizeof(*table), GFP_KERNEL);
+	table = kzalloc_objs(*table, max_div + 1, GFP_KERNEL);
 	if (!table) {
 		kfree(div);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/clk/hisilicon/clkgate-separated.c b/drivers/clk/hisilicon/clkgate-separated.c
index 21d4297f3225..cb4fd20f7639 100644
--- a/drivers/clk/hisilicon/clkgate-separated.c
+++ b/drivers/clk/hisilicon/clkgate-separated.c
@@ -90,7 +90,7 @@ struct clk *hisi_register_clkgate_sep(struct device *dev, const char *name,
 	struct clk *clk;
 	struct clk_init_data init;

-	sclk = kzalloc(sizeof(*sclk), GFP_KERNEL);
+	sclk = kzalloc_obj(*sclk, GFP_KERNEL);
 	if (!sclk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imgtec/clk-boston.c b/drivers/clk/imgtec/clk-boston.c
index db96f8bea630..23360ba5c852 100644
--- a/drivers/clk/imgtec/clk-boston.c
+++ b/drivers/clk/imgtec/clk-boston.c
@@ -58,8 +58,7 @@ static void __init clk_boston_setup(struct device_node *np)
 	cpu_div = ext_field(mmcmdiv, BOSTON_PLAT_MMCMDIV_CLK1DIV);
 	cpu_freq = mult_frac(in_freq, mul, cpu_div);

-	onecell = kzalloc(struct_size(onecell, hws, BOSTON_CLK_COUNT),
-			  GFP_KERNEL);
+	onecell = kzalloc_flex(*onecell, hws, BOSTON_CLK_COUNT, GFP_KERNEL);
 	if (!onecell)
 		return;

diff --git a/drivers/clk/imx/clk-busy.c b/drivers/clk/imx/clk-busy.c
index eb27c6fee359..a6886a73aa24 100644
--- a/drivers/clk/imx/clk-busy.c
+++ b/drivers/clk/imx/clk-busy.c
@@ -82,7 +82,7 @@ struct clk_hw *imx_clk_hw_busy_divider(const char *name, const char *parent_name
 	struct clk_init_data init;
 	int ret;

-	busy = kzalloc(sizeof(*busy), GFP_KERNEL);
+	busy = kzalloc_obj(*busy, GFP_KERNEL);
 	if (!busy)
 		return ERR_PTR(-ENOMEM);

@@ -162,7 +162,7 @@ struct clk_hw *imx_clk_hw_busy_mux(const char *name, void __iomem *reg, u8 shift
 	struct clk_init_data init;
 	int ret;

-	busy = kzalloc(sizeof(*busy), GFP_KERNEL);
+	busy = kzalloc_obj(*busy, GFP_KERNEL);
 	if (!busy)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-composite-7ulp.c b/drivers/clk/imx/clk-composite-7ulp.c
index 37d2fc197be6..59c2b392db44 100644
--- a/drivers/clk/imx/clk-composite-7ulp.c
+++ b/drivers/clk/imx/clk-composite-7ulp.c
@@ -99,7 +99,7 @@ static struct clk_hw *imx_ulp_clk_hw_composite(const char *name,
 	}

 	if (mux_present) {
-		mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+		mux = kzalloc_obj(*mux, GFP_KERNEL);
 		if (!mux)
 			return ERR_PTR(-ENOMEM);
 		mux_hw = &mux->hw;
@@ -111,7 +111,7 @@ static struct clk_hw *imx_ulp_clk_hw_composite(const char *name,
 	}

 	if (rate_present) {
-		fd = kzalloc(sizeof(*fd), GFP_KERNEL);
+		fd = kzalloc_obj(*fd, GFP_KERNEL);
 		if (!fd) {
 			kfree(mux);
 			return ERR_PTR(-ENOMEM);
@@ -128,7 +128,7 @@ static struct clk_hw *imx_ulp_clk_hw_composite(const char *name,
 	}

 	if (gate_present) {
-		gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+		gate = kzalloc_obj(*gate, GFP_KERNEL);
 		if (!gate) {
 			kfree(mux);
 			kfree(fd);
diff --git a/drivers/clk/imx/clk-composite-8m.c b/drivers/clk/imx/clk-composite-8m.c
index 1467d0a1b934..e5ccb6810822 100644
--- a/drivers/clk/imx/clk-composite-8m.c
+++ b/drivers/clk/imx/clk-composite-8m.c
@@ -231,7 +231,7 @@ struct clk_hw *__imx8m_clk_hw_composite(const char *name,
 	const struct clk_ops *mux_ops;
 	const struct clk_ops *gate_ops;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return ERR_CAST(hw);

@@ -241,7 +241,7 @@ struct clk_hw *__imx8m_clk_hw_composite(const char *name,
 	mux->mask = PCG_PCS_MASK;
 	mux->lock = &imx_ccm_lock;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		goto free_mux;

@@ -270,7 +270,7 @@ struct clk_hw *__imx8m_clk_hw_composite(const char *name,
 	div->flags = CLK_DIVIDER_ROUND_CLOSEST;

 	/* skip registering the gate ops if M4 is enabled */
-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		goto free_div;

diff --git a/drivers/clk/imx/clk-composite-93.c b/drivers/clk/imx/clk-composite-93.c
index 513d74a39d3b..db006eba18f8 100644
--- a/drivers/clk/imx/clk-composite-93.c
+++ b/drivers/clk/imx/clk-composite-93.c
@@ -193,7 +193,7 @@ struct clk_hw *imx93_clk_composite_flags(const char *name, const char * const *p
 	bool clk_ro = false;
 	u32 authen;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		goto fail;

@@ -203,7 +203,7 @@ struct clk_hw *imx93_clk_composite_flags(const char *name, const char * const *p
 	mux->mask = CCM_MUX_MASK;
 	mux->lock = &imx_ccm_lock;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		goto fail;

@@ -223,7 +223,7 @@ struct clk_hw *imx93_clk_composite_flags(const char *name, const char * const *p
 					       mux_hw, &clk_mux_ro_ops, div_hw,
 					       &clk_divider_ro_ops, NULL, NULL, flags);
 	} else {
-		gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+		gate = kzalloc_obj(*gate, GFP_KERNEL);
 		if (!gate)
 			goto fail;

diff --git a/drivers/clk/imx/clk-cpu.c b/drivers/clk/imx/clk-cpu.c
index 43637cb61693..e63296483504 100644
--- a/drivers/clk/imx/clk-cpu.c
+++ b/drivers/clk/imx/clk-cpu.c
@@ -81,7 +81,7 @@ struct clk_hw *imx_clk_hw_cpu(const char *name, const char *parent_name,
 	struct clk_init_data init;
 	int ret;

-	cpu = kzalloc(sizeof(*cpu), GFP_KERNEL);
+	cpu = kzalloc_obj(*cpu, GFP_KERNEL);
 	if (!cpu)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-divider-gate.c b/drivers/clk/imx/clk-divider-gate.c
index 26b210cba9be..51042ba556d0 100644
--- a/drivers/clk/imx/clk-divider-gate.c
+++ b/drivers/clk/imx/clk-divider-gate.c
@@ -185,7 +185,7 @@ struct clk_hw *imx_clk_hw_divider_gate(const char *name, const char *parent_name
 	u32 val;
 	int ret;

-	div_gate  = kzalloc(sizeof(*div_gate), GFP_KERNEL);
+	div_gate = kzalloc_obj(*div_gate, GFP_KERNEL);
 	if (!div_gate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-fixup-div.c b/drivers/clk/imx/clk-fixup-div.c
index aa6addbeb5a8..a90609aec218 100644
--- a/drivers/clk/imx/clk-fixup-div.c
+++ b/drivers/clk/imx/clk-fixup-div.c
@@ -97,7 +97,7 @@ struct clk_hw *imx_clk_hw_fixup_divider(const char *name, const char *parent,
 	if (!fixup)
 		return ERR_PTR(-EINVAL);

-	fixup_div = kzalloc(sizeof(*fixup_div), GFP_KERNEL);
+	fixup_div = kzalloc_obj(*fixup_div, GFP_KERNEL);
 	if (!fixup_div)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-fixup-mux.c b/drivers/clk/imx/clk-fixup-mux.c
index 418ac9fe2c26..b1c887fc99c4 100644
--- a/drivers/clk/imx/clk-fixup-mux.c
+++ b/drivers/clk/imx/clk-fixup-mux.c
@@ -77,7 +77,7 @@ struct clk_hw *imx_clk_hw_fixup_mux(const char *name, void __iomem *reg,
 	if (!fixup)
 		return ERR_PTR(-EINVAL);

-	fixup_mux = kzalloc(sizeof(*fixup_mux), GFP_KERNEL);
+	fixup_mux = kzalloc_obj(*fixup_mux, GFP_KERNEL);
 	if (!fixup_mux)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-frac-pll.c b/drivers/clk/imx/clk-frac-pll.c
index eb668faaa38f..fba0c0f449df 100644
--- a/drivers/clk/imx/clk-frac-pll.c
+++ b/drivers/clk/imx/clk-frac-pll.c
@@ -213,7 +213,7 @@ struct clk_hw *imx_clk_hw_frac_pll(const char *name,
 	struct clk_hw *hw;
 	int ret;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c
index 6de5349adf70..3cd1fd106aac 100644
--- a/drivers/clk/imx/clk-fracn-gppll.c
+++ b/drivers/clk/imx/clk-fracn-gppll.c
@@ -366,7 +366,7 @@ static struct clk_hw *_imx_clk_fracn_gppll(const char *name, const char *parent_
 	struct clk_init_data init;
 	int ret;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-gate-93.c b/drivers/clk/imx/clk-gate-93.c
index ceb56b290394..0422e17a8233 100644
--- a/drivers/clk/imx/clk-gate-93.c
+++ b/drivers/clk/imx/clk-gate-93.c
@@ -164,7 +164,7 @@ struct clk_hw *imx93_clk_gate(struct device *dev, const char *name, const char *
 	int ret;
 	u32 authen;

-	gate = kzalloc(sizeof(struct imx93_clk_gate), GFP_KERNEL);
+	gate = kzalloc_obj(struct imx93_clk_gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-gate-exclusive.c b/drivers/clk/imx/clk-gate-exclusive.c
index 7017e9d4e188..2f0db88cbbcf 100644
--- a/drivers/clk/imx/clk-gate-exclusive.c
+++ b/drivers/clk/imx/clk-gate-exclusive.c
@@ -67,7 +67,7 @@ struct clk_hw *imx_clk_hw_gate_exclusive(const char *name, const char *parent,
 	if (exclusive_mask == 0)
 		return ERR_PTR(-EINVAL);

-	exgate = kzalloc(sizeof(*exgate), GFP_KERNEL);
+	exgate = kzalloc_obj(*exgate, GFP_KERNEL);
 	if (!exgate)
 		return ERR_PTR(-ENOMEM);
 	gate = &exgate->gate;
diff --git a/drivers/clk/imx/clk-gate2.c b/drivers/clk/imx/clk-gate2.c
index f16c4019f402..d57c146a66cf 100644
--- a/drivers/clk/imx/clk-gate2.c
+++ b/drivers/clk/imx/clk-gate2.c
@@ -144,7 +144,7 @@ struct clk_hw *clk_hw_register_gate2(struct device *dev, const char *name,
 	struct clk_init_data init;
 	int ret;

-	gate = kzalloc(sizeof(struct clk_gate2), GFP_KERNEL);
+	gate = kzalloc_obj(struct clk_gate2, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-gpr-mux.c b/drivers/clk/imx/clk-gpr-mux.c
index 0e14b61cba84..01f7142e7a98 100644
--- a/drivers/clk/imx/clk-gpr-mux.c
+++ b/drivers/clk/imx/clk-gpr-mux.c
@@ -87,7 +87,7 @@ struct clk_hw *imx_clk_gpr_mux(const char *name, const char *compatible,
 		return ERR_CAST(regmap);
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c
index bf4c1d9c9928..7d8a811e5de4 100644
--- a/drivers/clk/imx/clk-imx6q.c
+++ b/drivers/clk/imx/clk-imx6q.c
@@ -439,8 +439,8 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
 	void __iomem *anatop_base, *base;
 	int ret;

-	clk_hw_data = kzalloc(struct_size(clk_hw_data, hws,
-					  IMX6QDL_CLK_END), GFP_KERNEL);
+	clk_hw_data = kzalloc_flex(*clk_hw_data, hws, IMX6QDL_CLK_END,
+				   GFP_KERNEL);
 	if (WARN_ON(!clk_hw_data))
 		return;

diff --git a/drivers/clk/imx/clk-imx6sl.c b/drivers/clk/imx/clk-imx6sl.c
index 47b8667cfa3f..de7392fb59a4 100644
--- a/drivers/clk/imx/clk-imx6sl.c
+++ b/drivers/clk/imx/clk-imx6sl.c
@@ -185,8 +185,8 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
 	void __iomem *base;
 	int ret;

-	clk_hw_data = kzalloc(struct_size(clk_hw_data, hws,
-					  IMX6SL_CLK_END), GFP_KERNEL);
+	clk_hw_data = kzalloc_flex(*clk_hw_data, hws, IMX6SL_CLK_END,
+				   GFP_KERNEL);
 	if (WARN_ON(!clk_hw_data))
 		return;

diff --git a/drivers/clk/imx/clk-imx6sll.c b/drivers/clk/imx/clk-imx6sll.c
index 2fa70bf35e45..96c1fbb74d82 100644
--- a/drivers/clk/imx/clk-imx6sll.c
+++ b/drivers/clk/imx/clk-imx6sll.c
@@ -81,8 +81,8 @@ static void __init imx6sll_clocks_init(struct device_node *ccm_node)
 	struct device_node *np;
 	void __iomem *base;

-	clk_hw_data = kzalloc(struct_size(clk_hw_data, hws,
-					  IMX6SLL_CLK_END), GFP_KERNEL);
+	clk_hw_data = kzalloc_flex(*clk_hw_data, hws, IMX6SLL_CLK_END,
+				   GFP_KERNEL);
 	if (WARN_ON(!clk_hw_data))
 		return;

diff --git a/drivers/clk/imx/clk-imx6sx.c b/drivers/clk/imx/clk-imx6sx.c
index 69f8f6f9ca49..c96606f76947 100644
--- a/drivers/clk/imx/clk-imx6sx.c
+++ b/drivers/clk/imx/clk-imx6sx.c
@@ -123,8 +123,8 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node)
 	void __iomem *base;
 	bool lcdif1_assigned_clk;

-	clk_hw_data = kzalloc(struct_size(clk_hw_data, hws,
-					  IMX6SX_CLK_CLK_END), GFP_KERNEL);
+	clk_hw_data = kzalloc_flex(*clk_hw_data, hws, IMX6SX_CLK_CLK_END,
+				   GFP_KERNEL);
 	if (WARN_ON(!clk_hw_data))
 		return;

diff --git a/drivers/clk/imx/clk-imx6ul.c b/drivers/clk/imx/clk-imx6ul.c
index 05c7a82b751f..4ccc272b3c4f 100644
--- a/drivers/clk/imx/clk-imx6ul.c
+++ b/drivers/clk/imx/clk-imx6ul.c
@@ -130,8 +130,8 @@ static void __init imx6ul_clocks_init(struct device_node *ccm_node)
 	struct device_node *np;
 	void __iomem *base;

-	clk_hw_data = kzalloc(struct_size(clk_hw_data, hws,
-					  IMX6UL_CLK_END), GFP_KERNEL);
+	clk_hw_data = kzalloc_flex(*clk_hw_data, hws, IMX6UL_CLK_END,
+				   GFP_KERNEL);
 	if (WARN_ON(!clk_hw_data))
 		return;

diff --git a/drivers/clk/imx/clk-imx7d.c b/drivers/clk/imx/clk-imx7d.c
index 99adc55e3f5d..21c6daa221cc 100644
--- a/drivers/clk/imx/clk-imx7d.c
+++ b/drivers/clk/imx/clk-imx7d.c
@@ -382,8 +382,7 @@ static void __init imx7d_clocks_init(struct device_node *ccm_node)
 	struct device_node *np;
 	void __iomem *base;

-	clk_hw_data = kzalloc(struct_size(clk_hw_data, hws,
-					  IMX7D_CLK_END), GFP_KERNEL);
+	clk_hw_data = kzalloc_flex(*clk_hw_data, hws, IMX7D_CLK_END, GFP_KERNEL);
 	if (WARN_ON(!clk_hw_data))
 		return;

diff --git a/drivers/clk/imx/clk-imx7ulp.c b/drivers/clk/imx/clk-imx7ulp.c
index f4a48a42637f..322c84d49f44 100644
--- a/drivers/clk/imx/clk-imx7ulp.c
+++ b/drivers/clk/imx/clk-imx7ulp.c
@@ -49,8 +49,8 @@ static void __init imx7ulp_clk_scg1_init(struct device_node *np)
 	struct clk_hw **hws;
 	void __iomem *base;

-	clk_data = kzalloc(struct_size(clk_data, hws, IMX7ULP_CLK_SCG1_END),
-			   GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, IMX7ULP_CLK_SCG1_END,
+				GFP_KERNEL);
 	if (!clk_data)
 		return;

@@ -138,8 +138,8 @@ static void __init imx7ulp_clk_pcc2_init(struct device_node *np)
 	struct clk_hw **hws;
 	void __iomem *base;

-	clk_data = kzalloc(struct_size(clk_data, hws, IMX7ULP_CLK_PCC2_END),
-			   GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, IMX7ULP_CLK_PCC2_END,
+				GFP_KERNEL);
 	if (!clk_data)
 		return;

@@ -186,8 +186,8 @@ static void __init imx7ulp_clk_pcc3_init(struct device_node *np)
 	struct clk_hw **hws;
 	void __iomem *base;

-	clk_data = kzalloc(struct_size(clk_data, hws, IMX7ULP_CLK_PCC3_END),
-			   GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, IMX7ULP_CLK_PCC3_END,
+				GFP_KERNEL);
 	if (!clk_data)
 		return;

@@ -233,8 +233,8 @@ static void __init imx7ulp_clk_smc1_init(struct device_node *np)
 	struct clk_hw **hws;
 	void __iomem *base;

-	clk_data = kzalloc(struct_size(clk_data, hws, IMX7ULP_CLK_SMC1_END),
-			   GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, IMX7ULP_CLK_SMC1_END,
+				GFP_KERNEL);
 	if (!clk_data)
 		return;

diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c
index 342049b847b9..fb9b199ff289 100644
--- a/drivers/clk/imx/clk-imx8mm.c
+++ b/drivers/clk/imx/clk-imx8mm.c
@@ -303,8 +303,8 @@ static int imx8mm_clocks_probe(struct platform_device *pdev)
 	void __iomem *base;
 	int ret;

-	clk_hw_data = kzalloc(struct_size(clk_hw_data, hws,
-					  IMX8MM_CLK_END), GFP_KERNEL);
+	clk_hw_data = kzalloc_flex(*clk_hw_data, hws, IMX8MM_CLK_END,
+				   GFP_KERNEL);
 	if (WARN_ON(!clk_hw_data))
 		return -ENOMEM;

diff --git a/drivers/clk/imx/clk-lpcg-scu.c b/drivers/clk/imx/clk-lpcg-scu.c
index 6376557a3c3d..9e1247bb1edd 100644
--- a/drivers/clk/imx/clk-lpcg-scu.c
+++ b/drivers/clk/imx/clk-lpcg-scu.c
@@ -119,7 +119,7 @@ struct clk_hw *__imx_clk_lpcg_scu(struct device *dev, const char *name,
 	struct clk_hw *hw;
 	int ret;

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-pfd.c b/drivers/clk/imx/clk-pfd.c
index 31220fa7882b..5222e5ee37d1 100644
--- a/drivers/clk/imx/clk-pfd.c
+++ b/drivers/clk/imx/clk-pfd.c
@@ -132,7 +132,7 @@ struct clk_hw *imx_clk_hw_pfd(const char *name, const char *parent_name,
 	struct clk_init_data init;
 	int ret;

-	pfd = kzalloc(sizeof(*pfd), GFP_KERNEL);
+	pfd = kzalloc_obj(*pfd, GFP_KERNEL);
 	if (!pfd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-pfdv2.c b/drivers/clk/imx/clk-pfdv2.c
index 6ca53a960eb7..ce37a151c745 100644
--- a/drivers/clk/imx/clk-pfdv2.c
+++ b/drivers/clk/imx/clk-pfdv2.c
@@ -210,7 +210,7 @@ struct clk_hw *imx_clk_hw_pfdv2(enum imx_pfdv2_type type, const char *name,

 	WARN_ON(idx > 3);

-	pfd = kzalloc(sizeof(*pfd), GFP_KERNEL);
+	pfd = kzalloc_obj(*pfd, GFP_KERNEL);
 	if (!pfd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-pll14xx.c b/drivers/clk/imx/clk-pll14xx.c
index 36d0e80b55b8..33974d762e4d 100644
--- a/drivers/clk/imx/clk-pll14xx.c
+++ b/drivers/clk/imx/clk-pll14xx.c
@@ -504,7 +504,7 @@ struct clk_hw *imx_dev_clk_hw_pll14xx(struct device *dev, const char *name,
 	int ret;
 	u32 val;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-pllv1.c b/drivers/clk/imx/clk-pllv1.c
index 93ee81b28fc7..502f29d44f52 100644
--- a/drivers/clk/imx/clk-pllv1.c
+++ b/drivers/clk/imx/clk-pllv1.c
@@ -119,7 +119,7 @@ struct clk_hw *imx_clk_hw_pllv1(enum imx_pllv1_type type, const char *name,
 	struct clk_init_data init;
 	int ret;

-	pll = kmalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kmalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-pllv2.c b/drivers/clk/imx/clk-pllv2.c
index bb497ad5e0ae..1faa289b8e69 100644
--- a/drivers/clk/imx/clk-pllv2.c
+++ b/drivers/clk/imx/clk-pllv2.c
@@ -254,7 +254,7 @@ struct clk_hw *imx_clk_hw_pllv2(const char *name, const char *parent,
 	struct clk_init_data init;
 	int ret;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-pllv3.c b/drivers/clk/imx/clk-pllv3.c
index b99508367bcb..78d40dad7b4a 100644
--- a/drivers/clk/imx/clk-pllv3.c
+++ b/drivers/clk/imx/clk-pllv3.c
@@ -426,7 +426,7 @@ struct clk_hw *imx_clk_hw_pllv3(enum imx_pllv3_type type, const char *name,
 	struct clk_init_data init;
 	int ret;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-pllv4.c b/drivers/clk/imx/clk-pllv4.c
index 01d05b5d5438..d7a4e9ed55b3 100644
--- a/drivers/clk/imx/clk-pllv4.c
+++ b/drivers/clk/imx/clk-pllv4.c
@@ -251,7 +251,7 @@ struct clk_hw *imx_clk_hw_pllv4(enum imx_pllv4_type type, const char *name,
 	struct clk_init_data init;
 	int ret;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk-scu.c b/drivers/clk/imx/clk-scu.c
index 34c9dc1fb20e..9ec9fe99c391 100644
--- a/drivers/clk/imx/clk-scu.c
+++ b/drivers/clk/imx/clk-scu.c
@@ -457,7 +457,7 @@ struct clk_hw *__imx_clk_scu(struct device *dev, const char *name,
 	struct clk_hw *hw;
 	int ret;

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk)
 		return ERR_PTR(-ENOMEM);

@@ -856,7 +856,7 @@ struct clk_hw *__imx_clk_gpr_scu(const char *name, const char * const *parent_na
 	if (rsrc_id >= IMX_SC_R_LAST || gpr_id >= IMX_SC_C_LAST)
 		return ERR_PTR(-EINVAL);

-	clk_node = kzalloc(sizeof(*clk_node), GFP_KERNEL);
+	clk_node = kzalloc_obj(*clk_node, GFP_KERNEL);
 	if (!clk_node)
 		return ERR_PTR(-ENOMEM);

@@ -870,7 +870,7 @@ struct clk_hw *__imx_clk_gpr_scu(const char *name, const char * const *parent_na
 		return NULL;
 	}

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk) {
 		kfree(clk_node);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/clk/imx/clk-sscg-pll.c b/drivers/clk/imx/clk-sscg-pll.c
index 81f304fae908..4017b194e085 100644
--- a/drivers/clk/imx/clk-sscg-pll.c
+++ b/drivers/clk/imx/clk-sscg-pll.c
@@ -509,7 +509,7 @@ struct clk_hw *imx_clk_hw_sscg_pll(const char *name,
 	struct clk_hw *hw;
 	int ret;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/imx/clk.c b/drivers/clk/imx/clk.c
index df83bd939492..c9c8397e9149 100644
--- a/drivers/clk/imx/clk.c
+++ b/drivers/clk/imx/clk.c
@@ -189,7 +189,7 @@ void imx_register_uart_clocks(void)
 		if (!of_stdout)
 			return;

-		imx_uart_clocks = kcalloc(num, sizeof(struct clk *), GFP_KERNEL);
+		imx_uart_clocks = kzalloc_objs(struct clk *, num, GFP_KERNEL);
 		if (!imx_uart_clocks)
 			return;

diff --git a/drivers/clk/ingenic/cgu.c b/drivers/clk/ingenic/cgu.c
index 91e7ac0cc334..69055ef880eb 100644
--- a/drivers/clk/ingenic/cgu.c
+++ b/drivers/clk/ingenic/cgu.c
@@ -676,7 +676,7 @@ static int ingenic_register_clock(struct ingenic_cgu *cgu, unsigned idx)
 		goto out;
 	}

-	ingenic_clk = kzalloc(sizeof(*ingenic_clk), GFP_KERNEL);
+	ingenic_clk = kzalloc_obj(*ingenic_clk, GFP_KERNEL);
 	if (!ingenic_clk) {
 		err = -ENOMEM;
 		goto out;
@@ -790,7 +790,7 @@ ingenic_cgu_new(const struct ingenic_cgu_clk_info *clock_info,
 {
 	struct ingenic_cgu *cgu;

-	cgu = kzalloc(sizeof(*cgu), GFP_KERNEL);
+	cgu = kzalloc_obj(*cgu, GFP_KERNEL);
 	if (!cgu)
 		goto err_out;

@@ -819,8 +819,8 @@ int ingenic_cgu_register_clocks(struct ingenic_cgu *cgu)
 	unsigned i;
 	int err;

-	cgu->clocks.clks = kcalloc(cgu->clocks.clk_num, sizeof(struct clk *),
-				   GFP_KERNEL);
+	cgu->clocks.clks = kzalloc_objs(struct clk *, cgu->clocks.clk_num,
+					GFP_KERNEL);
 	if (!cgu->clocks.clks) {
 		err = -ENOMEM;
 		goto err_out;
diff --git a/drivers/clk/ingenic/tcu.c b/drivers/clk/ingenic/tcu.c
index bc6a51da2072..6ae7c2f66824 100644
--- a/drivers/clk/ingenic/tcu.c
+++ b/drivers/clk/ingenic/tcu.c
@@ -273,7 +273,7 @@ static int __init ingenic_tcu_register_clock(struct ingenic_tcu *tcu,
 	struct ingenic_tcu_clk *tcu_clk;
 	int err;

-	tcu_clk = kzalloc(sizeof(*tcu_clk), GFP_KERNEL);
+	tcu_clk = kzalloc_obj(*tcu_clk, GFP_KERNEL);
 	if (!tcu_clk)
 		return -ENOMEM;

@@ -344,7 +344,7 @@ static int __init ingenic_tcu_probe(struct device_node *np)
 	if (IS_ERR(map))
 		return PTR_ERR(map);

-	tcu = kzalloc(sizeof(*tcu), GFP_KERNEL);
+	tcu = kzalloc_obj(*tcu, GFP_KERNEL);
 	if (!tcu)
 		return -ENOMEM;

@@ -379,8 +379,7 @@ static int __init ingenic_tcu_probe(struct device_node *np)
 		}
 	}

-	tcu->clocks = kzalloc(struct_size(tcu->clocks, hws, TCU_CLK_COUNT),
-			      GFP_KERNEL);
+	tcu->clocks = kzalloc_flex(*tcu->clocks, hws, TCU_CLK_COUNT, GFP_KERNEL);
 	if (!tcu->clocks) {
 		ret = -ENOMEM;
 		goto err_clk_disable;
diff --git a/drivers/clk/keystone/gate.c b/drivers/clk/keystone/gate.c
index 13ea047489eb..dff8ed64df85 100644
--- a/drivers/clk/keystone/gate.c
+++ b/drivers/clk/keystone/gate.c
@@ -168,7 +168,7 @@ static struct clk *clk_register_psc(struct device *dev,
 	struct clk_psc *psc;
 	struct clk *clk;

-	psc = kzalloc(sizeof(*psc), GFP_KERNEL);
+	psc = kzalloc_obj(*psc, GFP_KERNEL);
 	if (!psc)
 		return ERR_PTR(-ENOMEM);

@@ -202,7 +202,7 @@ static void __init of_psc_clk_init(struct device_node *node, spinlock_t *lock)
 	struct clk *clk;
 	int i;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data) {
 		pr_err("%s: Out of memory\n", __func__);
 		return;
diff --git a/drivers/clk/keystone/pll.c b/drivers/clk/keystone/pll.c
index 6bbdd4705d71..9cdf1ecad45c 100644
--- a/drivers/clk/keystone/pll.c
+++ b/drivers/clk/keystone/pll.c
@@ -126,7 +126,7 @@ static struct clk *clk_register_pll(struct device *dev,
 	struct clk_pll *pll;
 	struct clk *clk;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

@@ -162,7 +162,7 @@ static void __init _of_pll_clk_init(struct device_node *node, bool pllctrl)
 	struct clk *clk;
 	int i;

-	pll_data = kzalloc(sizeof(*pll_data), GFP_KERNEL);
+	pll_data = kzalloc_obj(*pll_data, GFP_KERNEL);
 	if (!pll_data) {
 		pr_err("%s: Out of memory\n", __func__);
 		return;
diff --git a/drivers/clk/mediatek/clk-apmixed.c b/drivers/clk/mediatek/clk-apmixed.c
index 60e34f124250..43c72621f4c9 100644
--- a/drivers/clk/mediatek/clk-apmixed.c
+++ b/drivers/clk/mediatek/clk-apmixed.c
@@ -77,7 +77,7 @@ struct clk_hw *mtk_clk_register_ref2usb_tx(const char *name,
 	struct clk_init_data init = {};
 	int ret;

-	tx = kzalloc(sizeof(*tx), GFP_KERNEL);
+	tx = kzalloc_obj(*tx, GFP_KERNEL);
 	if (!tx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mediatek/clk-cpumux.c b/drivers/clk/mediatek/clk-cpumux.c
index a03826db4dcb..abcc1c41a6f9 100644
--- a/drivers/clk/mediatek/clk-cpumux.c
+++ b/drivers/clk/mediatek/clk-cpumux.c
@@ -66,7 +66,7 @@ mtk_clk_register_cpumux(struct device *dev, const struct mtk_composite *mux,
 	int ret;
 	struct clk_init_data init;

-	cpumux = kzalloc(sizeof(*cpumux), GFP_KERNEL);
+	cpumux = kzalloc_obj(*cpumux, GFP_KERNEL);
 	if (!cpumux)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mediatek/clk-gate.c b/drivers/clk/mediatek/clk-gate.c
index f6b1429ff757..3689ec69da5d 100644
--- a/drivers/clk/mediatek/clk-gate.c
+++ b/drivers/clk/mediatek/clk-gate.c
@@ -212,7 +212,7 @@ static struct clk_hw *mtk_clk_register_gate(struct device *dev,
 	int ret;
 	struct clk_init_data init = {};

-	cg = kzalloc(sizeof(*cg), GFP_KERNEL);
+	cg = kzalloc_obj(*cg, GFP_KERNEL);
 	if (!cg)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index deafe55a96cb..de093f9665af 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -67,7 +67,7 @@ struct clk_hw_onecell_data *mtk_alloc_clk_data(unsigned int clk_num)
 {
 	struct clk_hw_onecell_data *clk_data;

-	clk_data = kzalloc(struct_size(clk_data, hws, clk_num), GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, clk_num, GFP_KERNEL);
 	if (!clk_data)
 		return NULL;

@@ -230,7 +230,7 @@ static struct clk_hw *mtk_clk_register_composite(struct device *dev,
 	int ret;

 	if (mc->mux_shift >= 0) {
-		mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+		mux = kzalloc_obj(*mux, GFP_KERNEL);
 		if (!mux)
 			return ERR_PTR(-ENOMEM);

@@ -251,7 +251,7 @@ static struct clk_hw *mtk_clk_register_composite(struct device *dev,
 	}

 	if (mc->gate_shift >= 0) {
-		gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+		gate = kzalloc_obj(*gate, GFP_KERNEL);
 		if (!gate) {
 			ret = -ENOMEM;
 			goto err_out;
@@ -267,7 +267,7 @@ static struct clk_hw *mtk_clk_register_composite(struct device *dev,
 	}

 	if (mc->divider_shift >= 0) {
-		div = kzalloc(sizeof(*div), GFP_KERNEL);
+		div = kzalloc_obj(*div, GFP_KERNEL);
 		if (!div) {
 			ret = -ENOMEM;
 			goto err_out;
diff --git a/drivers/clk/mediatek/clk-mux.c b/drivers/clk/mediatek/clk-mux.c
index c5af6dc078a3..0cc6de7ab29b 100644
--- a/drivers/clk/mediatek/clk-mux.c
+++ b/drivers/clk/mediatek/clk-mux.c
@@ -281,7 +281,7 @@ static struct clk_hw *mtk_clk_register_mux(struct device *dev,
 	struct clk_init_data init = {};
 	int ret;

-	clk_mux = kzalloc(sizeof(*clk_mux), GFP_KERNEL);
+	clk_mux = kzalloc_obj(*clk_mux, GFP_KERNEL);
 	if (!clk_mux)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mediatek/clk-pll.c b/drivers/clk/mediatek/clk-pll.c
index 0f3759fcd9d0..ff414d9b560a 100644
--- a/drivers/clk/mediatek/clk-pll.c
+++ b/drivers/clk/mediatek/clk-pll.c
@@ -385,7 +385,7 @@ struct clk_hw *mtk_clk_register_pll(struct device *dev,
 	struct clk_hw *hw;
 	const struct clk_ops *pll_ops = data->ops ? data->ops : &mtk_pll_ops;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mediatek/clk-pllfh.c b/drivers/clk/mediatek/clk-pllfh.c
index 8ad11023d911..6b9f43ddd57f 100644
--- a/drivers/clk/mediatek/clk-pllfh.c
+++ b/drivers/clk/mediatek/clk-pllfh.c
@@ -157,7 +157,7 @@ mtk_clk_register_pllfh(struct device *dev, const struct mtk_pll_data *pll_data,
 	struct mtk_fh *fh;
 	int ret;

-	fh = kzalloc(sizeof(*fh), GFP_KERNEL);
+	fh = kzalloc_obj(*fh, GFP_KERNEL);
 	if (!fh)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
index 95d0b9cbd904..d56be70ab02f 100644
--- a/drivers/clk/meson/meson8b.c
+++ b/drivers/clk/meson/meson8b.c
@@ -3646,7 +3646,7 @@ static void __init meson8b_clkc_init_common(struct device_node *np,
 		return;
 	}

-	rstc = kzalloc(sizeof(*rstc), GFP_KERNEL);
+	rstc = kzalloc_obj(*rstc, GFP_KERNEL);
 	if (!rstc)
 		return;

diff --git a/drivers/clk/mmp/clk-apbc.c b/drivers/clk/mmp/clk-apbc.c
index 23c43a46604e..1d6fd5e5d6c0 100644
--- a/drivers/clk/mmp/clk-apbc.c
+++ b/drivers/clk/mmp/clk-apbc.c
@@ -124,7 +124,7 @@ struct clk *mmp_clk_register_apbc(const char *name, const char *parent_name,
 	struct clk *clk;
 	struct clk_init_data init;

-	apbc = kzalloc(sizeof(*apbc), GFP_KERNEL);
+	apbc = kzalloc_obj(*apbc, GFP_KERNEL);
 	if (!apbc)
 		return NULL;

diff --git a/drivers/clk/mmp/clk-apmu.c b/drivers/clk/mmp/clk-apmu.c
index 9313428b083a..e457436c522c 100644
--- a/drivers/clk/mmp/clk-apmu.c
+++ b/drivers/clk/mmp/clk-apmu.c
@@ -69,7 +69,7 @@ struct clk *mmp_clk_register_apmu(const char *name, const char *parent_name,
 	struct clk *clk;
 	struct clk_init_data init;

-	apmu = kzalloc(sizeof(*apmu), GFP_KERNEL);
+	apmu = kzalloc_obj(*apmu, GFP_KERNEL);
 	if (!apmu)
 		return NULL;

diff --git a/drivers/clk/mmp/clk-frac.c b/drivers/clk/mmp/clk-frac.c
index 0b1bb01346f0..4307698741c6 100644
--- a/drivers/clk/mmp/clk-frac.c
+++ b/drivers/clk/mmp/clk-frac.c
@@ -180,7 +180,7 @@ struct clk *mmp_clk_register_factor(const char *name, const char *parent_name,
 		return ERR_PTR(-EINVAL);
 	}

-	factor = kzalloc(sizeof(*factor), GFP_KERNEL);
+	factor = kzalloc_obj(*factor, GFP_KERNEL);
 	if (!factor)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mmp/clk-gate.c b/drivers/clk/mmp/clk-gate.c
index 6855815ee8be..59f4070be33c 100644
--- a/drivers/clk/mmp/clk-gate.c
+++ b/drivers/clk/mmp/clk-gate.c
@@ -99,7 +99,7 @@ struct clk *mmp_clk_register_gate(struct device *dev, const char *name,
 	struct clk_init_data init;

 	/* allocate the gate */
-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mmp/clk-mix.c b/drivers/clk/mmp/clk-mix.c
index 07ac9e6937e5..14aa90342664 100644
--- a/drivers/clk/mmp/clk-mix.c
+++ b/drivers/clk/mmp/clk-mix.c
@@ -448,7 +448,7 @@ struct clk *mmp_clk_register_mix(struct device *dev,
 	struct clk *clk;
 	struct clk_init_data init;

-	mix = kzalloc(sizeof(*mix), GFP_KERNEL);
+	mix = kzalloc_obj(*mix, GFP_KERNEL);
 	if (!mix)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mmp/clk-of-mmp2.c b/drivers/clk/mmp/clk-of-mmp2.c
index a4f15cee630e..2067b4bb261d 100644
--- a/drivers/clk/mmp/clk-of-mmp2.c
+++ b/drivers/clk/mmp/clk-of-mmp2.c
@@ -462,7 +462,7 @@ static void mmp2_clk_reset_init(struct device_node *np,
 	int i, nr_resets;

 	nr_resets = ARRAY_SIZE(apbc_gate_clks);
-	cells = kcalloc(nr_resets, sizeof(*cells), GFP_KERNEL);
+	cells = kzalloc_objs(*cells, nr_resets, GFP_KERNEL);
 	if (!cells)
 		return;

@@ -516,7 +516,7 @@ static void __init mmp2_clk_init(struct device_node *np)
 {
 	struct mmp2_clk_unit *pxa_unit;

-	pxa_unit = kzalloc(sizeof(*pxa_unit), GFP_KERNEL);
+	pxa_unit = kzalloc_obj(*pxa_unit, GFP_KERNEL);
 	if (!pxa_unit)
 		return;

diff --git a/drivers/clk/mmp/clk-of-pxa168.c b/drivers/clk/mmp/clk-of-pxa168.c
index 5f250427e60d..f5b8a6749829 100644
--- a/drivers/clk/mmp/clk-of-pxa168.c
+++ b/drivers/clk/mmp/clk-of-pxa168.c
@@ -282,7 +282,7 @@ static void pxa168_clk_reset_init(struct device_node *np,
 	int i, nr_resets;

 	nr_resets = ARRAY_SIZE(apbc_gate_clks);
-	cells = kcalloc(nr_resets, sizeof(*cells), GFP_KERNEL);
+	cells = kzalloc_objs(*cells, nr_resets, GFP_KERNEL);
 	if (!cells)
 		return;

@@ -301,7 +301,7 @@ static void __init pxa168_clk_init(struct device_node *np)
 {
 	struct pxa168_clk_unit *pxa_unit;

-	pxa_unit = kzalloc(sizeof(*pxa_unit), GFP_KERNEL);
+	pxa_unit = kzalloc_obj(*pxa_unit, GFP_KERNEL);
 	if (!pxa_unit)
 		return;

diff --git a/drivers/clk/mmp/clk-of-pxa1928.c b/drivers/clk/mmp/clk-of-pxa1928.c
index ebb6e278eda3..24fc9054a667 100644
--- a/drivers/clk/mmp/clk-of-pxa1928.c
+++ b/drivers/clk/mmp/clk-of-pxa1928.c
@@ -187,7 +187,7 @@ static void pxa1928_clk_reset_init(struct device_node *np,
 	int i, base, nr_resets;

 	nr_resets = ARRAY_SIZE(apbc_gate_clks);
-	cells = kcalloc(nr_resets, sizeof(*cells), GFP_KERNEL);
+	cells = kzalloc_objs(*cells, nr_resets, GFP_KERNEL);
 	if (!cells)
 		return;

@@ -208,7 +208,7 @@ static void __init pxa1928_mpmu_clk_init(struct device_node *np)
 {
 	struct pxa1928_clk_unit *pxa_unit;

-	pxa_unit = kzalloc(sizeof(*pxa_unit), GFP_KERNEL);
+	pxa_unit = kzalloc_obj(*pxa_unit, GFP_KERNEL);
 	if (!pxa_unit)
 		return;

@@ -227,7 +227,7 @@ static void __init pxa1928_apmu_clk_init(struct device_node *np)
 {
 	struct pxa1928_clk_unit *pxa_unit;

-	pxa_unit = kzalloc(sizeof(*pxa_unit), GFP_KERNEL);
+	pxa_unit = kzalloc_obj(*pxa_unit, GFP_KERNEL);
 	if (!pxa_unit)
 		return;

@@ -248,7 +248,7 @@ static void __init pxa1928_apbc_clk_init(struct device_node *np)
 {
 	struct pxa1928_clk_unit *pxa_unit;

-	pxa_unit = kzalloc(sizeof(*pxa_unit), GFP_KERNEL);
+	pxa_unit = kzalloc_obj(*pxa_unit, GFP_KERNEL);
 	if (!pxa_unit)
 		return;

diff --git a/drivers/clk/mmp/clk-of-pxa910.c b/drivers/clk/mmp/clk-of-pxa910.c
index fe65e7bdb411..43c40b949326 100644
--- a/drivers/clk/mmp/clk-of-pxa910.c
+++ b/drivers/clk/mmp/clk-of-pxa910.c
@@ -239,7 +239,7 @@ static void pxa910_clk_reset_init(struct device_node *np,
 	nr_resets_apbc = ARRAY_SIZE(apbc_gate_clks);
 	nr_resets_apbcp = ARRAY_SIZE(apbcp_gate_clks);
 	nr_resets = nr_resets_apbc + nr_resets_apbcp;
-	cells = kcalloc(nr_resets, sizeof(*cells), GFP_KERNEL);
+	cells = kzalloc_objs(*cells, nr_resets, GFP_KERNEL);
 	if (!cells)
 		return;

@@ -270,7 +270,7 @@ static void __init pxa910_clk_init(struct device_node *np)
 {
 	struct pxa910_clk_unit *pxa_unit;

-	pxa_unit = kzalloc(sizeof(*pxa_unit), GFP_KERNEL);
+	pxa_unit = kzalloc_obj(*pxa_unit, GFP_KERNEL);
 	if (!pxa_unit)
 		return;

diff --git a/drivers/clk/mmp/clk-pll.c b/drivers/clk/mmp/clk-pll.c
index 962014cfdc44..bf2d691fcc92 100644
--- a/drivers/clk/mmp/clk-pll.c
+++ b/drivers/clk/mmp/clk-pll.c
@@ -108,7 +108,7 @@ static struct clk *mmp_clk_register_pll(char *name,
 	struct clk *clk;
 	struct clk_init_data init;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mmp/clk.c b/drivers/clk/mmp/clk.c
index ca7d37e2c7be..c31c3a9f4f57 100644
--- a/drivers/clk/mmp/clk.c
+++ b/drivers/clk/mmp/clk.c
@@ -12,7 +12,7 @@ void mmp_clk_init(struct device_node *np, struct mmp_clk_unit *unit,
 {
 	struct clk **clk_table;

-	clk_table = kcalloc(nr_clks, sizeof(struct clk *), GFP_KERNEL);
+	clk_table = kzalloc_objs(struct clk *, nr_clks, GFP_KERNEL);
 	if (!clk_table)
 		return;

diff --git a/drivers/clk/mmp/pwr-island.c b/drivers/clk/mmp/pwr-island.c
index eaf5d2c5e593..1253e383aa44 100644
--- a/drivers/clk/mmp/pwr-island.c
+++ b/drivers/clk/mmp/pwr-island.c
@@ -95,7 +95,7 @@ struct generic_pm_domain *mmp_pm_domain_register(const char *name,
 {
 	struct mmp_pm_domain *pm_domain;

-	pm_domain = kzalloc(sizeof(*pm_domain), GFP_KERNEL);
+	pm_domain = kzalloc_obj(*pm_domain, GFP_KERNEL);
 	if (!pm_domain)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mmp/reset.c b/drivers/clk/mmp/reset.c
index ded7e391c737..c7068976a378 100644
--- a/drivers/clk/mmp/reset.c
+++ b/drivers/clk/mmp/reset.c
@@ -85,7 +85,7 @@ void mmp_clk_reset_register(struct device_node *np,
 {
 	struct mmp_clk_reset_unit *unit;

-	unit = kzalloc(sizeof(*unit), GFP_KERNEL);
+	unit = kzalloc_obj(*unit, GFP_KERNEL);
 	if (!unit)
 		return;

diff --git a/drivers/clk/mvebu/clk-corediv.c b/drivers/clk/mvebu/clk-corediv.c
index 628032341cbb..487542d61662 100644
--- a/drivers/clk/mvebu/clk-corediv.c
+++ b/drivers/clk/mvebu/clk-corediv.c
@@ -270,13 +270,11 @@ mvebu_corediv_clk_init(struct device_node *node,
 	clk_data.clk_num = soc_desc->ndescs;

 	/* clks holds the clock array */
-	clks = kcalloc(clk_data.clk_num, sizeof(struct clk *),
-				GFP_KERNEL);
+	clks = kzalloc_objs(struct clk *, clk_data.clk_num, GFP_KERNEL);
 	if (WARN_ON(!clks))
 		goto err_unmap;
 	/* corediv holds the clock specific array */
-	corediv = kcalloc(clk_data.clk_num, sizeof(struct clk_corediv),
-				GFP_KERNEL);
+	corediv = kzalloc_objs(struct clk_corediv, clk_data.clk_num, GFP_KERNEL);
 	if (WARN_ON(!corediv))
 		goto err_free_clks;

diff --git a/drivers/clk/mvebu/clk-cpu.c b/drivers/clk/mvebu/clk-cpu.c
index 0de7660e73d2..8c74edbcce9a 100644
--- a/drivers/clk/mvebu/clk-cpu.c
+++ b/drivers/clk/mvebu/clk-cpu.c
@@ -183,11 +183,11 @@ static void __init of_cpu_clk_setup(struct device_node *node)
 		pr_warn("%s: pmu-dfs base register not set, dynamic frequency scaling not available\n",
 			__func__);

-	cpuclk = kcalloc(ncpus, sizeof(*cpuclk), GFP_KERNEL);
+	cpuclk = kzalloc_objs(*cpuclk, ncpus, GFP_KERNEL);
 	if (WARN_ON(!cpuclk))
 		goto cpuclk_out;

-	clks = kcalloc(ncpus, sizeof(*clks), GFP_KERNEL);
+	clks = kzalloc_objs(*clks, ncpus, GFP_KERNEL);
 	if (WARN_ON(!clks))
 		goto clks_out;

diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c
index 5adbbd91a6db..41c5cd7739b2 100644
--- a/drivers/clk/mvebu/common.c
+++ b/drivers/clk/mvebu/common.c
@@ -124,8 +124,8 @@ void __init mvebu_coreclk_setup(struct device_node *np,
 	if (desc->get_refclk_freq)
 		clk_data.clk_num += 1;

-	clk_data.clks = kcalloc(clk_data.clk_num, sizeof(*clk_data.clks),
-				GFP_KERNEL);
+	clk_data.clks = kzalloc_objs(*clk_data.clks, clk_data.clk_num,
+				     GFP_KERNEL);
 	if (WARN_ON(!clk_data.clks)) {
 		iounmap(base);
 		return;
@@ -258,7 +258,7 @@ void __init mvebu_clk_gating_setup(struct device_node *np,
 		clk_put(clk);
 	}

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (WARN_ON(!ctrl))
 		goto ctrl_out;

@@ -272,8 +272,7 @@ void __init mvebu_clk_gating_setup(struct device_node *np,
 		n++;

 	ctrl->num_gates = n;
-	ctrl->gates = kcalloc(ctrl->num_gates, sizeof(*ctrl->gates),
-			      GFP_KERNEL);
+	ctrl->gates = kzalloc_objs(*ctrl->gates, ctrl->num_gates, GFP_KERNEL);
 	if (WARN_ON(!ctrl->gates))
 		goto gates_out;

diff --git a/drivers/clk/mvebu/cp110-system-controller.c b/drivers/clk/mvebu/cp110-system-controller.c
index b47c86906046..c6b5b2205f2e 100644
--- a/drivers/clk/mvebu/cp110-system-controller.c
+++ b/drivers/clk/mvebu/cp110-system-controller.c
@@ -180,7 +180,7 @@ static struct clk_hw *cp110_register_gate(const char *name,
 	struct clk_init_data init;
 	int ret;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mvebu/kirkwood.c b/drivers/clk/mvebu/kirkwood.c
index 8bc893df4736..967f0be794ab 100644
--- a/drivers/clk/mvebu/kirkwood.c
+++ b/drivers/clk/mvebu/kirkwood.c
@@ -297,7 +297,7 @@ static void __init kirkwood_clk_muxing_setup(struct device_node *np,
 	if (WARN_ON(!base))
 		return;

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (WARN_ON(!ctrl))
 		goto ctrl_out;

@@ -309,8 +309,7 @@ static void __init kirkwood_clk_muxing_setup(struct device_node *np,
 		n++;

 	ctrl->num_muxes = n;
-	ctrl->muxes = kcalloc(ctrl->num_muxes, sizeof(struct clk *),
-			GFP_KERNEL);
+	ctrl->muxes = kzalloc_objs(struct clk *, ctrl->num_muxes, GFP_KERNEL);
 	if (WARN_ON(!ctrl->muxes))
 		goto muxes_out;

diff --git a/drivers/clk/mxs/clk-div.c b/drivers/clk/mxs/clk-div.c
index 8afe1a9c1552..47c5c2fe8e5e 100644
--- a/drivers/clk/mxs/clk-div.c
+++ b/drivers/clk/mxs/clk-div.c
@@ -74,7 +74,7 @@ struct clk *mxs_clk_div(const char *name, const char *parent_name,
 	struct clk *clk;
 	struct clk_init_data init;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mxs/clk-frac.c b/drivers/clk/mxs/clk-frac.c
index 73f514fb84ff..7de0c20baabb 100644
--- a/drivers/clk/mxs/clk-frac.c
+++ b/drivers/clk/mxs/clk-frac.c
@@ -116,7 +116,7 @@ struct clk *mxs_clk_frac(const char *name, const char *parent_name,
 	struct clk *clk;
 	struct clk_init_data init;

-	frac = kzalloc(sizeof(*frac), GFP_KERNEL);
+	frac = kzalloc_obj(*frac, GFP_KERNEL);
 	if (!frac)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mxs/clk-pll.c b/drivers/clk/mxs/clk-pll.c
index 431cf6f2c936..f67bfe743479 100644
--- a/drivers/clk/mxs/clk-pll.c
+++ b/drivers/clk/mxs/clk-pll.c
@@ -86,7 +86,7 @@ struct clk *mxs_clk_pll(const char *name, const char *parent_name,
 	struct clk *clk;
 	struct clk_init_data init;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/mxs/clk-ref.c b/drivers/clk/mxs/clk-ref.c
index a99ee4cd2ece..e6674fb58add 100644
--- a/drivers/clk/mxs/clk-ref.c
+++ b/drivers/clk/mxs/clk-ref.c
@@ -117,7 +117,7 @@ struct clk *mxs_clk_ref(const char *name, const char *parent_name,
 	struct clk *clk;
 	struct clk_init_data init;

-	ref = kzalloc(sizeof(*ref), GFP_KERNEL);
+	ref = kzalloc_obj(*ref, GFP_KERNEL);
 	if (!ref)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/nxp/clk-lpc18xx-ccu.c b/drivers/clk/nxp/clk-lpc18xx-ccu.c
index 751b786d73f8..8bb5a44c9b59 100644
--- a/drivers/clk/nxp/clk-lpc18xx-ccu.c
+++ b/drivers/clk/nxp/clk-lpc18xx-ccu.c
@@ -208,7 +208,7 @@ static void lpc18xx_ccu_register_branch_gate_div(struct lpc18xx_clk_branch *bran
 	struct clk_hw *div_hw = NULL;

 	if (branch->flags & CCU_BRANCH_HAVE_DIV2) {
-		div = kzalloc(sizeof(*div), GFP_KERNEL);
+		div = kzalloc_obj(*div, GFP_KERNEL);
 		if (!div)
 			return;

@@ -274,7 +274,7 @@ static void __init lpc18xx_ccu_init(struct device_node *np)
 		return;
 	}

-	clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
+	clk_data = kzalloc_obj(*clk_data, GFP_KERNEL);
 	if (!clk_data) {
 		iounmap(reg_base);
 		return;
diff --git a/drivers/clk/pistachio/clk-pll.c b/drivers/clk/pistachio/clk-pll.c
index d05337915e2b..dd4fe9a114a7 100644
--- a/drivers/clk/pistachio/clk-pll.c
+++ b/drivers/clk/pistachio/clk-pll.c
@@ -457,7 +457,7 @@ static struct clk *pll_register(const char *name, const char *parent_name,
 	struct clk_init_data init;
 	struct clk *clk;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/pistachio/clk.c b/drivers/clk/pistachio/clk.c
index 23d076a2b133..80f60f2ce7de 100644
--- a/drivers/clk/pistachio/clk.c
+++ b/drivers/clk/pistachio/clk.c
@@ -17,11 +17,11 @@ pistachio_clk_alloc_provider(struct device_node *node, unsigned int num_clks)
 {
 	struct pistachio_clk_provider *p;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return p;

-	p->clk_data.clks = kcalloc(num_clks, sizeof(struct clk *), GFP_KERNEL);
+	p->clk_data.clks = kzalloc_objs(struct clk *, num_clks, GFP_KERNEL);
 	if (!p->clk_data.clks)
 		goto free_provider;
 	p->clk_data.clk_num = num_clks;
diff --git a/drivers/clk/pxa/clk-pxa.c b/drivers/clk/pxa/clk-pxa.c
index ebee2afd05de..1c5dedaefec8 100644
--- a/drivers/clk/pxa/clk-pxa.c
+++ b/drivers/clk/pxa/clk-pxa.c
@@ -104,7 +104,7 @@ int __init clk_pxa_cken_init(const struct desc_clk_cken *clks,
 	struct clk *clk;

 	for (i = 0; i < nb_clks; i++) {
-		pxa_clk = kzalloc(sizeof(*pxa_clk), GFP_KERNEL);
+		pxa_clk = kzalloc_obj(*pxa_clk, GFP_KERNEL);
 		if (!pxa_clk)
 			return -ENOMEM;
 		pxa_clk->is_in_low_power = clks[i].is_in_low_power;
diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c
index d0a5847f9111..0977b61f242e 100644
--- a/drivers/clk/qcom/clk-rcg2.c
+++ b/drivers/clk/qcom/clk-rcg2.c
@@ -1650,7 +1650,7 @@ static int clk_rcg2_dfs_populate_freq_table(struct clk_rcg2 *rcg)
 	int i;

 	/* Allocate space for 1 extra since table is NULL terminated */
-	freq_tbl = kcalloc(MAX_PERF_LEVEL + 1, sizeof(*freq_tbl), GFP_KERNEL);
+	freq_tbl = kzalloc_objs(*freq_tbl, MAX_PERF_LEVEL + 1, GFP_KERNEL);
 	if (!freq_tbl)
 		return -ENOMEM;
 	rcg->freq_tbl = freq_tbl;
diff --git a/drivers/clk/ralink/clk-mt7621.c b/drivers/clk/ralink/clk-mt7621.c
index 92d14350c4b3..3079d7ce0e57 100644
--- a/drivers/clk/ralink/clk-mt7621.c
+++ b/drivers/clk/ralink/clk-mt7621.c
@@ -354,7 +354,7 @@ static void __init mt7621_clk_init(struct device_node *node)
 	struct clk_hw_onecell_data *clk_data;
 	int ret, i, count;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return;

@@ -372,7 +372,7 @@ static void __init mt7621_clk_init(struct device_node *node)

 	count = ARRAY_SIZE(mt7621_clks_base) +
 		ARRAY_SIZE(mt7621_fixed_clks) + ARRAY_SIZE(mt7621_gates);
-	clk_data = kzalloc(struct_size(clk_data, hws, count), GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, count, GFP_KERNEL);
 	if (!clk_data)
 		goto free_clk_priv;

diff --git a/drivers/clk/ralink/clk-mtmips.c b/drivers/clk/ralink/clk-mtmips.c
index 19d433034884..c6ee73a8fa22 100644
--- a/drivers/clk/ralink/clk-mtmips.c
+++ b/drivers/clk/ralink/clk-mtmips.c
@@ -916,7 +916,7 @@ static void __init mtmips_clk_init(struct device_node *node)
 	struct clk_hw_onecell_data *clk_data;
 	int ret, i, count;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return;

@@ -936,7 +936,7 @@ static void __init mtmips_clk_init(struct device_node *node)
 	priv->data = data;
 	count = priv->data->num_clk_base + priv->data->num_clk_fixed +
 		priv->data->num_clk_factor + priv->data->num_clk_periph;
-	clk_data = kzalloc(struct_size(clk_data, hws, count), GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, count, GFP_KERNEL);
 	if (!clk_data)
 		goto free_clk_priv;

diff --git a/drivers/clk/renesas/clk-div6.c b/drivers/clk/renesas/clk-div6.c
index f7b827b5e9b2..051515695c52 100644
--- a/drivers/clk/renesas/clk-div6.c
+++ b/drivers/clk/renesas/clk-div6.c
@@ -251,7 +251,7 @@ struct clk * __init cpg_div6_register(const char *name,
 	struct clk *clk;
 	unsigned int i;

-	clock = kzalloc(struct_size(clock, parents, num_parents), GFP_KERNEL);
+	clock = kzalloc_flex(*clock, parents, num_parents, GFP_KERNEL);
 	if (!clock)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/renesas/clk-mstp.c b/drivers/clk/renesas/clk-mstp.c
index 2f65fe2c6bdf..79414c2c2e9c 100644
--- a/drivers/clk/renesas/clk-mstp.c
+++ b/drivers/clk/renesas/clk-mstp.c
@@ -150,7 +150,7 @@ static struct clk * __init cpg_mstp_clock_register(const char *name,
 	struct mstp_clock *clock;
 	struct clk *clk;

-	clock = kzalloc(sizeof(*clock), GFP_KERNEL);
+	clock = kzalloc_obj(*clock, GFP_KERNEL);
 	if (!clock)
 		return ERR_PTR(-ENOMEM);

@@ -184,7 +184,7 @@ static void __init cpg_mstp_clocks_init(struct device_node *np)
 	struct clk **clks;
 	unsigned int i;

-	group = kzalloc(struct_size(group, clks, MSTP_MAX_CLOCKS), GFP_KERNEL);
+	group = kzalloc_flex(*group, clks, MSTP_MAX_CLOCKS, GFP_KERNEL);
 	if (!group)
 		return;

@@ -316,7 +316,7 @@ void __init cpg_mstp_add_clk_domain(struct device_node *np)
 		return;
 	}

-	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+	pd = kzalloc_obj(*pd, GFP_KERNEL);
 	if (!pd)
 		return;

diff --git a/drivers/clk/renesas/clk-r8a73a4.c b/drivers/clk/renesas/clk-r8a73a4.c
index f331d8bc9daf..708506671a78 100644
--- a/drivers/clk/renesas/clk-r8a73a4.c
+++ b/drivers/clk/renesas/clk-r8a73a4.c
@@ -196,8 +196,8 @@ static void __init r8a73a4_cpg_clocks_init(struct device_node *np)
 		return;
 	}

-	cpg = kzalloc(sizeof(*cpg), GFP_KERNEL);
-	clks = kcalloc(num_clks, sizeof(*clks), GFP_KERNEL);
+	cpg = kzalloc_obj(*cpg, GFP_KERNEL);
+	clks = kzalloc_objs(*clks, num_clks, GFP_KERNEL);
 	if (cpg == NULL || clks == NULL) {
 		/* We're leaking memory on purpose, there's no point in cleaning
 		 * up as the system won't boot anyway.
diff --git a/drivers/clk/renesas/clk-r8a7740.c b/drivers/clk/renesas/clk-r8a7740.c
index 22e9be7240bb..f4c4ef44cff9 100644
--- a/drivers/clk/renesas/clk-r8a7740.c
+++ b/drivers/clk/renesas/clk-r8a7740.c
@@ -155,8 +155,8 @@ static void __init r8a7740_cpg_clocks_init(struct device_node *np)
 		return;
 	}

-	cpg = kzalloc(sizeof(*cpg), GFP_KERNEL);
-	clks = kcalloc(num_clks, sizeof(*clks), GFP_KERNEL);
+	cpg = kzalloc_obj(*cpg, GFP_KERNEL);
+	clks = kzalloc_objs(*clks, num_clks, GFP_KERNEL);
 	if (cpg == NULL || clks == NULL) {
 		/* We're leaking memory on purpose, there's no point in cleaning
 		 * up as the system won't boot anyway.
diff --git a/drivers/clk/renesas/clk-r8a7778.c b/drivers/clk/renesas/clk-r8a7778.c
index 6ea173f22251..2f664c7efba5 100644
--- a/drivers/clk/renesas/clk-r8a7778.c
+++ b/drivers/clk/renesas/clk-r8a7778.c
@@ -92,8 +92,8 @@ static void __init r8a7778_cpg_clocks_init(struct device_node *np)
 		return;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
-	clks = kcalloc(num_clks, sizeof(*clks), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
+	clks = kzalloc_objs(*clks, num_clks, GFP_KERNEL);
 	if (data == NULL || clks == NULL) {
 		/* We're leaking memory on purpose, there's no point in cleaning
 		 * up as the system won't boot anyway.
diff --git a/drivers/clk/renesas/clk-r8a7779.c b/drivers/clk/renesas/clk-r8a7779.c
index 9a2fea8cf4d7..9243848863f2 100644
--- a/drivers/clk/renesas/clk-r8a7779.c
+++ b/drivers/clk/renesas/clk-r8a7779.c
@@ -128,8 +128,8 @@ static void __init r8a7779_cpg_clocks_init(struct device_node *np)
 		return;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
-	clks = kcalloc(CPG_NUM_CLOCKS, sizeof(*clks), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
+	clks = kzalloc_objs(*clks, CPG_NUM_CLOCKS, GFP_KERNEL);
 	if (data == NULL || clks == NULL) {
 		/* We're leaking memory on purpose, there's no point in cleaning
 		 * up as the system won't boot anyway.
diff --git a/drivers/clk/renesas/clk-rz.c b/drivers/clk/renesas/clk-rz.c
index e770f09a27ed..0a89be1fce79 100644
--- a/drivers/clk/renesas/clk-rz.c
+++ b/drivers/clk/renesas/clk-rz.c
@@ -91,8 +91,8 @@ static void __init rz_cpg_clocks_init(struct device_node *np)
 	if (WARN(num_clks <= 0, "can't count CPG clocks\n"))
 		return;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
-	clks = kcalloc(num_clks, sizeof(*clks), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
+	clks = kzalloc_objs(*clks, num_clks, GFP_KERNEL);
 	BUG_ON(!data || !clks);

 	data->clks = clks;
diff --git a/drivers/clk/renesas/clk-sh73a0.c b/drivers/clk/renesas/clk-sh73a0.c
index 47fc99ccd283..a3bbd8a0ac4d 100644
--- a/drivers/clk/renesas/clk-sh73a0.c
+++ b/drivers/clk/renesas/clk-sh73a0.c
@@ -170,8 +170,8 @@ static void __init sh73a0_cpg_clocks_init(struct device_node *np)
 		return;
 	}

-	cpg = kzalloc(sizeof(*cpg), GFP_KERNEL);
-	clks = kcalloc(num_clks, sizeof(*clks), GFP_KERNEL);
+	cpg = kzalloc_obj(*cpg, GFP_KERNEL);
+	clks = kzalloc_objs(*clks, num_clks, GFP_KERNEL);
 	if (cpg == NULL || clks == NULL) {
 		/* We're leaking memory on purpose, there's no point in cleaning
 		 * up as the system won't boot anyway.
diff --git a/drivers/clk/renesas/r9a06g032-clocks.c b/drivers/clk/renesas/r9a06g032-clocks.c
index 0f5c91b5dfa9..58255bf6da83 100644
--- a/drivers/clk/renesas/r9a06g032-clocks.c
+++ b/drivers/clk/renesas/r9a06g032-clocks.c
@@ -891,7 +891,7 @@ r9a06g032_register_gate(struct r9a06g032_priv *clocks,
 	struct r9a06g032_clk_gate *g;
 	struct clk_init_data init = {};

-	g = kzalloc(sizeof(*g), GFP_KERNEL);
+	g = kzalloc_obj(*g, GFP_KERNEL);
 	if (!g)
 		return NULL;

@@ -1063,7 +1063,7 @@ r9a06g032_register_div(struct r9a06g032_priv *clocks,
 	struct clk_init_data init = {};
 	unsigned int i;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return NULL;

@@ -1149,7 +1149,7 @@ r9a06g032_register_bitsel(struct r9a06g032_priv *clocks,
 	const char *names[2];

 	/* allocate the gate */
-	g = kzalloc(sizeof(*g), GFP_KERNEL);
+	g = kzalloc_obj(*g, GFP_KERNEL);
 	if (!g)
 		return NULL;

@@ -1239,7 +1239,7 @@ r9a06g032_register_dualgate(struct r9a06g032_priv *clocks,
 	struct clk_init_data init = {};

 	/* allocate the gate */
-	g = kzalloc(sizeof(*g), GFP_KERNEL);
+	g = kzalloc_obj(*g, GFP_KERNEL);
 	if (!g)
 		return NULL;
 	g->clocks = clocks;
diff --git a/drivers/clk/renesas/rcar-cpg-lib.c b/drivers/clk/renesas/rcar-cpg-lib.c
index 7b271de7037a..f4279af8787f 100644
--- a/drivers/clk/renesas/rcar-cpg-lib.c
+++ b/drivers/clk/renesas/rcar-cpg-lib.c
@@ -94,7 +94,7 @@ struct clk * __init cpg_sdh_clk_register(const char *name,
 	struct cpg_simple_notifier *csn;
 	struct clk *clk;

-	csn = kzalloc(sizeof(*csn), GFP_KERNEL);
+	csn = kzalloc_obj(*csn, GFP_KERNEL);
 	if (!csn)
 		return ERR_PTR(-ENOMEM);

@@ -144,7 +144,7 @@ struct clk * __init cpg_rpc_clk_register(const char *name,
 	struct rpc_clock *rpc;
 	struct clk *clk;

-	rpc = kzalloc(sizeof(*rpc), GFP_KERNEL);
+	rpc = kzalloc_obj(*rpc, GFP_KERNEL);
 	if (!rpc)
 		return ERR_PTR(-ENOMEM);

@@ -185,7 +185,7 @@ struct clk * __init cpg_rpcd2_clk_register(const char *name,
 	struct rpcd2_clock *rpcd2;
 	struct clk *clk;

-	rpcd2 = kzalloc(sizeof(*rpcd2), GFP_KERNEL);
+	rpcd2 = kzalloc_obj(*rpcd2, GFP_KERNEL);
 	if (!rpcd2)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/renesas/rcar-gen2-cpg.c b/drivers/clk/renesas/rcar-gen2-cpg.c
index ab34bb8c3e07..69618ec0b638 100644
--- a/drivers/clk/renesas/rcar-gen2-cpg.c
+++ b/drivers/clk/renesas/rcar-gen2-cpg.c
@@ -141,7 +141,7 @@ static struct clk * __init cpg_z_clk_register(const char *name,
 	struct cpg_z_clk *zclk;
 	struct clk *clk;

-	zclk = kzalloc(sizeof(*zclk), GFP_KERNEL);
+	zclk = kzalloc_obj(*zclk, GFP_KERNEL);
 	if (!zclk)
 		return ERR_PTR(-ENOMEM);

@@ -169,14 +169,14 @@ static struct clk * __init cpg_rcan_clk_register(const char *name,
 	struct clk_gate *gate;
 	struct clk *clk;

-	fixed = kzalloc(sizeof(*fixed), GFP_KERNEL);
+	fixed = kzalloc_obj(*fixed, GFP_KERNEL);
 	if (!fixed)
 		return ERR_PTR(-ENOMEM);

 	fixed->mult = 1;
 	fixed->div = 6;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate) {
 		kfree(fixed);
 		return ERR_PTR(-ENOMEM);
@@ -213,7 +213,7 @@ static struct clk * __init cpg_adsp_clk_register(const char *name,
 	struct clk_gate *gate;
 	struct clk *clk;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return ERR_PTR(-ENOMEM);

@@ -222,7 +222,7 @@ static struct clk * __init cpg_adsp_clk_register(const char *name,
 	div->table = cpg_adsp_div_table;
 	div->lock = &cpg_lock;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate) {
 		kfree(div);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/clk/renesas/rcar-gen3-cpg.c b/drivers/clk/renesas/rcar-gen3-cpg.c
index b954278ddd9d..605854200b04 100644
--- a/drivers/clk/renesas/rcar-gen3-cpg.c
+++ b/drivers/clk/renesas/rcar-gen3-cpg.c
@@ -123,7 +123,7 @@ static struct clk * __init cpg_pll_clk_register(const char *name,
 	struct clk_init_data init = {};
 	struct clk *clk;

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (!pll_clk)
 		return ERR_PTR(-ENOMEM);

@@ -271,7 +271,7 @@ static struct clk * __init __cpg_z_clk_register(const char *name,
 	struct cpg_z_clk *zclk;
 	struct clk *clk;

-	zclk = kzalloc(sizeof(*zclk), GFP_KERNEL);
+	zclk = kzalloc_obj(*zclk, GFP_KERNEL);
 	if (!zclk)
 		return ERR_PTR(-ENOMEM);

@@ -410,7 +410,7 @@ struct clk * __init rcar_gen3_cpg_clk_register(struct device *dev,
 		if (cpg_quirks & RCKCR_CKSEL) {
 			struct cpg_simple_notifier *csn;

-			csn = kzalloc(sizeof(*csn), GFP_KERNEL);
+			csn = kzalloc_obj(*csn, GFP_KERNEL);
 			if (!csn)
 				return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/renesas/rcar-gen4-cpg.c b/drivers/clk/renesas/rcar-gen4-cpg.c
index ac2b5afec46d..7168939ddb65 100644
--- a/drivers/clk/renesas/rcar-gen4-cpg.c
+++ b/drivers/clk/renesas/rcar-gen4-cpg.c
@@ -234,7 +234,7 @@ static struct clk * __init cpg_pll_clk_register(const char *name,
 	struct cpg_pll_clk *pll_clk;
 	struct clk *clk;

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (!pll_clk)
 		return ERR_PTR(-ENOMEM);

@@ -374,7 +374,7 @@ static struct clk * __init cpg_z_clk_register(const char *name,
 	struct cpg_z_clk *zclk;
 	struct clk *clk;

-	zclk = kzalloc(sizeof(*zclk), GFP_KERNEL);
+	zclk = kzalloc_obj(*zclk, GFP_KERNEL);
 	if (!zclk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
index 4824607d56c0..48105ee90c83 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.c
+++ b/drivers/clk/renesas/renesas-cpg-mssr.c
@@ -512,7 +512,7 @@ static void __init cpg_mssr_register_mod_clk(const struct mssr_mod_clk *mod,
 		goto fail;
 	}

-	clock = kzalloc(sizeof(*clock), GFP_KERNEL);
+	clock = kzalloc_obj(*clock, GFP_KERNEL);
 	if (!clock) {
 		clk = ERR_PTR(-ENOMEM);
 		goto fail;
@@ -1258,7 +1258,7 @@ static int __init cpg_mssr_common_init(struct device *dev,
 	}

 	nclks = info->num_total_core_clks + info->num_hw_mod_clks;
-	priv = kzalloc(struct_size(priv, clks, nclks), GFP_KERNEL);
+	priv = kzalloc_flex(*priv, clks, nclks, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/clk/rockchip/clk-cpu.c b/drivers/clk/rockchip/clk-cpu.c
index 6e91a3041a03..456b23e6be42 100644
--- a/drivers/clk/rockchip/clk-cpu.c
+++ b/drivers/clk/rockchip/clk-cpu.c
@@ -313,7 +313,7 @@ struct clk *rockchip_clk_register_cpuclk(const char *name,
 		return ERR_PTR(-EINVAL);
 	}

-	cpuclk = kzalloc(sizeof(*cpuclk), GFP_KERNEL);
+	cpuclk = kzalloc_obj(*cpuclk, GFP_KERNEL);
 	if (!cpuclk)
 		return ERR_PTR(-ENOMEM);

@@ -479,7 +479,7 @@ struct clk *rockchip_clk_register_cpuclk_multi_pll(const char *name,
 	int ret;

 	if (num_parents > 1) {
-		mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+		mux = kzalloc_obj(*mux, GFP_KERNEL);
 		if (!mux)
 			return ERR_PTR(-ENOMEM);

@@ -493,7 +493,7 @@ struct clk *rockchip_clk_register_cpuclk_multi_pll(const char *name,
 	}

 	if (div_width > 0) {
-		div = kzalloc(sizeof(*div), GFP_KERNEL);
+		div = kzalloc_obj(*div, GFP_KERNEL);
 		if (!div) {
 			ret = -ENOMEM;
 			goto free_mux;
@@ -521,7 +521,7 @@ struct clk *rockchip_clk_register_cpuclk_multi_pll(const char *name,
 		goto free_div;
 	}

-	cpuclk = kzalloc(sizeof(*cpuclk), GFP_KERNEL);
+	cpuclk = kzalloc_obj(*cpuclk, GFP_KERNEL);
 	if (!cpuclk) {
 		ret = -ENOMEM;
 		goto unregister_clk;
diff --git a/drivers/clk/rockchip/clk-ddr.c b/drivers/clk/rockchip/clk-ddr.c
index 8866a65982a0..96985682b98c 100644
--- a/drivers/clk/rockchip/clk-ddr.c
+++ b/drivers/clk/rockchip/clk-ddr.c
@@ -100,7 +100,7 @@ struct clk *rockchip_clk_register_ddrclk(const char *name, int flags,
 	struct clk_init_data init;
 	struct clk *clk;

-	ddrclk = kzalloc(sizeof(*ddrclk), GFP_KERNEL);
+	ddrclk = kzalloc_obj(*ddrclk, GFP_KERNEL);
 	if (!ddrclk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/rockchip/clk-gate-grf.c b/drivers/clk/rockchip/clk-gate-grf.c
index 8122f471f391..b3df39f9b317 100644
--- a/drivers/clk/rockchip/clk-gate-grf.c
+++ b/drivers/clk/rockchip/clk-gate-grf.c
@@ -81,7 +81,7 @@ struct clk *rockchip_clk_register_gate_grf(const char *name,
 		return ERR_PTR(-EOPNOTSUPP);
 	}

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/rockchip/clk-half-divider.c b/drivers/clk/rockchip/clk-half-divider.c
index fbc018e8afa4..ac77911fa058 100644
--- a/drivers/clk/rockchip/clk-half-divider.c
+++ b/drivers/clk/rockchip/clk-half-divider.c
@@ -176,7 +176,7 @@ struct clk *rockchip_clk_register_halfdiv(const char *name,
 			     *gate_ops = NULL;

 	if (num_parents > 1) {
-		mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+		mux = kzalloc_obj(*mux, GFP_KERNEL);
 		if (!mux)
 			return ERR_PTR(-ENOMEM);

@@ -190,7 +190,7 @@ struct clk *rockchip_clk_register_halfdiv(const char *name,
 	}

 	if (gate_offset >= 0) {
-		gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+		gate = kzalloc_obj(*gate, GFP_KERNEL);
 		if (!gate)
 			goto err_gate;

@@ -202,7 +202,7 @@ struct clk *rockchip_clk_register_halfdiv(const char *name,
 	}

 	if (div_width > 0) {
-		div = kzalloc(sizeof(*div), GFP_KERNEL);
+		div = kzalloc_obj(*div, GFP_KERNEL);
 		if (!div)
 			goto err_div;

diff --git a/drivers/clk/rockchip/clk-inverter.c b/drivers/clk/rockchip/clk-inverter.c
index 5dfbdce18b48..53c17047077c 100644
--- a/drivers/clk/rockchip/clk-inverter.c
+++ b/drivers/clk/rockchip/clk-inverter.c
@@ -79,7 +79,7 @@ struct clk *rockchip_clk_register_inverter(const char *name,
 	struct rockchip_inv_clock *inv_clock;
 	struct clk *clk;

-	inv_clock = kmalloc(sizeof(*inv_clock), GFP_KERNEL);
+	inv_clock = kmalloc_obj(*inv_clock, GFP_KERNEL);
 	if (!inv_clock)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/rockchip/clk-mmc-phase.c b/drivers/clk/rockchip/clk-mmc-phase.c
index 8b1292c56863..c8bb8a217eaa 100644
--- a/drivers/clk/rockchip/clk-mmc-phase.c
+++ b/drivers/clk/rockchip/clk-mmc-phase.c
@@ -210,7 +210,7 @@ struct clk *rockchip_clk_register_mmc(const char *name,
 	struct clk *clk;
 	int ret;

-	mmc_clock = kmalloc(sizeof(*mmc_clock), GFP_KERNEL);
+	mmc_clock = kmalloc_obj(*mmc_clock, GFP_KERNEL);
 	if (!mmc_clock)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/rockchip/clk-muxgrf.c b/drivers/clk/rockchip/clk-muxgrf.c
index 4a335a5f4633..7545df0adabe 100644
--- a/drivers/clk/rockchip/clk-muxgrf.c
+++ b/drivers/clk/rockchip/clk-muxgrf.c
@@ -67,7 +67,7 @@ struct clk *rockchip_clk_register_muxgrf(const char *name,
 		return ERR_PTR(-ENOTSUPP);
 	}

-	muxgrf_clock = kmalloc(sizeof(*muxgrf_clock), GFP_KERNEL);
+	muxgrf_clock = kmalloc_obj(*muxgrf_clock, GFP_KERNEL);
 	if (!muxgrf_clock)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/rockchip/clk-pll.c b/drivers/clk/rockchip/clk-pll.c
index 86dba3826a77..865151d88b9f 100644
--- a/drivers/clk/rockchip/clk-pll.c
+++ b/drivers/clk/rockchip/clk-pll.c
@@ -1076,7 +1076,7 @@ struct clk *rockchip_clk_register_pll(struct rockchip_clk_provider *ctx,
 	/* name the actual pll */
 	snprintf(pll_name, sizeof(pll_name), "pll_%s", name);

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/rockchip/clk-rk3576.c b/drivers/clk/rockchip/clk-rk3576.c
index 9bc0ef51ef68..59285a784cd0 100644
--- a/drivers/clk/rockchip/clk-rk3576.c
+++ b/drivers/clk/rockchip/clk-rk3576.c
@@ -1769,7 +1769,7 @@ static void __init rk3576_clk_init(struct device_node *np)
 		goto err_unmap;
 	}

-	pmu0_grf_e = kzalloc(sizeof(*pmu0_grf_e), GFP_KERNEL);
+	pmu0_grf_e = kzalloc_obj(*pmu0_grf_e, GFP_KERNEL);
 	if (!pmu0_grf_e)
 		goto err_unmap;

@@ -1777,7 +1777,7 @@ static void __init rk3576_clk_init(struct device_node *np)
 	pmu0_grf_e->type = grf_type_pmu0;
 	hash_add(ctx->aux_grf_table, &pmu0_grf_e->node, grf_type_pmu0);

-	ioc_grf_e = kzalloc(sizeof(*ioc_grf_e), GFP_KERNEL);
+	ioc_grf_e = kzalloc_obj(*ioc_grf_e, GFP_KERNEL);
 	if (!ioc_grf_e)
 		goto err_free_pmu0;

diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
index 9ac9d13e87de..ec9517d7c2b7 100644
--- a/drivers/clk/rockchip/clk.c
+++ b/drivers/clk/rockchip/clk.c
@@ -55,7 +55,7 @@ static struct clk *rockchip_clk_register_branch(const char *name,
 	int ret;

 	if (num_parents > 1) {
-		mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+		mux = kzalloc_obj(*mux, GFP_KERNEL);
 		if (!mux)
 			return ERR_PTR(-ENOMEM);

@@ -70,7 +70,7 @@ static struct clk *rockchip_clk_register_branch(const char *name,
 	}

 	if (gate_offset >= 0) {
-		gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+		gate = kzalloc_obj(*gate, GFP_KERNEL);
 		if (!gate) {
 			ret = -ENOMEM;
 			goto err_gate;
@@ -84,7 +84,7 @@ static struct clk *rockchip_clk_register_branch(const char *name,
 	}

 	if (div_width > 0) {
-		div = kzalloc(sizeof(*div), GFP_KERNEL);
+		div = kzalloc_obj(*div, GFP_KERNEL);
 		if (!div) {
 			ret = -ENOMEM;
 			goto err_div;
@@ -221,7 +221,7 @@ static struct clk *rockchip_clk_register_frac_branch(
 		return ERR_PTR(-EINVAL);
 	}

-	frac = kzalloc(sizeof(*frac), GFP_KERNEL);
+	frac = kzalloc_obj(*frac, GFP_KERNEL);
 	if (!frac)
 		return ERR_PTR(-ENOMEM);

@@ -323,7 +323,7 @@ static struct clk *rockchip_clk_register_factor_branch(const char *name,
 				div);
 	}

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

@@ -332,7 +332,7 @@ static struct clk *rockchip_clk_register_factor_branch(const char *name,
 	gate->bit_idx = gate_shift;
 	gate->lock = lock;

-	fix = kzalloc(sizeof(*fix), GFP_KERNEL);
+	fix = kzalloc_obj(*fix, GFP_KERNEL);
 	if (!fix) {
 		kfree(gate);
 		return ERR_PTR(-ENOMEM);
@@ -365,11 +365,11 @@ static struct rockchip_clk_provider *rockchip_clk_init_base(

 	default_clk_val = ERR_PTR(has_late_clocks ? -EPROBE_DEFER : -ENOENT);

-	ctx = kzalloc(sizeof(struct rockchip_clk_provider), GFP_KERNEL);
+	ctx = kzalloc_obj(struct rockchip_clk_provider, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

-	clk_table = kcalloc(nr_clks, sizeof(struct clk *), GFP_KERNEL);
+	clk_table = kzalloc_objs(struct clk *, nr_clks, GFP_KERNEL);
 	if (!clk_table)
 		goto err_free;

diff --git a/drivers/clk/rockchip/softrst.c b/drivers/clk/rockchip/softrst.c
index fd56aaefe6d1..01caa91e7ce3 100644
--- a/drivers/clk/rockchip/softrst.c
+++ b/drivers/clk/rockchip/softrst.c
@@ -96,7 +96,7 @@ void rockchip_register_softrst_lut(struct device_node *np,
 	struct rockchip_softrst *softrst;
 	int ret;

-	softrst = kzalloc(sizeof(*softrst), GFP_KERNEL);
+	softrst = kzalloc_obj(*softrst, GFP_KERNEL);
 	if (!softrst)
 		return;

diff --git a/drivers/clk/samsung/clk-cpu.c b/drivers/clk/samsung/clk-cpu.c
index 300f8d5d3c48..d8729dceabb0 100644
--- a/drivers/clk/samsung/clk-cpu.c
+++ b/drivers/clk/samsung/clk-cpu.c
@@ -660,7 +660,7 @@ static int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
 		return -EINVAL;
 	}

-	cpuclk = kzalloc(sizeof(*cpuclk), GFP_KERNEL);
+	cpuclk = kzalloc_obj(*cpuclk, GFP_KERNEL);
 	if (!cpuclk)
 		return -ENOMEM;

diff --git a/drivers/clk/samsung/clk-pll.c b/drivers/clk/samsung/clk-pll.c
index 0a8fc9649ae2..1bd8def3973e 100644
--- a/drivers/clk/samsung/clk-pll.c
+++ b/drivers/clk/samsung/clk-pll.c
@@ -1435,7 +1435,7 @@ static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
 	struct clk_init_data init;
 	int ret, len;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll) {
 		pr_err("%s: could not allocate pll clk %s\n",
 			__func__, pll_clk->name);
diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c
index 9f68f079fd55..39580d82077b 100644
--- a/drivers/clk/samsung/clk.c
+++ b/drivers/clk/samsung/clk.c
@@ -55,7 +55,7 @@ struct samsung_clk_reg_dump *samsung_clk_alloc_reg_dump(
 	struct samsung_clk_reg_dump *rd;
 	unsigned int i;

-	rd = kcalloc(nr_rdump, sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_objs(*rd, nr_rdump, GFP_KERNEL);
 	if (!rd)
 		return NULL;

@@ -82,7 +82,7 @@ struct samsung_clk_provider * __init samsung_clk_init(struct device *dev,
 	struct samsung_clk_provider *ctx;
 	int i;

-	ctx = kzalloc(struct_size(ctx, clk_data.hws, nr_clks), GFP_KERNEL);
+	ctx = kzalloc_flex(*ctx, clk_data.hws, nr_clks, GFP_KERNEL);
 	if (!ctx)
 		panic("could not allocate clock provider context.\n");

@@ -301,7 +301,7 @@ struct clk_hw *samsung_register_auto_gate(struct device *dev,
 	int ret = -EINVAL;

 	/* allocate the gate */
-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

@@ -431,8 +431,7 @@ void samsung_clk_extended_sleep_init(void __iomem *reg_base,
 {
 	struct samsung_clock_reg_cache *reg_cache;

-	reg_cache = kzalloc(sizeof(struct samsung_clock_reg_cache),
-			GFP_KERNEL);
+	reg_cache = kzalloc_obj(struct samsung_clock_reg_cache, GFP_KERNEL);
 	if (!reg_cache)
 		panic("could not allocate register reg_cache.\n");
 	reg_cache->rdump = samsung_clk_alloc_reg_dump(rdump, nr_rdump);
diff --git a/drivers/clk/socfpga/clk-gate-a10.c b/drivers/clk/socfpga/clk-gate-a10.c
index 06f129c160bc..c6505046b63b 100644
--- a/drivers/clk/socfpga/clk-gate-a10.c
+++ b/drivers/clk/socfpga/clk-gate-a10.c
@@ -52,7 +52,7 @@ static void __init __socfpga_gate_init(struct device_node *node,
 	struct clk_init_data init;
 	int rc;

-	socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL);
+	socfpga_clk = kzalloc_obj(*socfpga_clk, GFP_KERNEL);
 	if (WARN_ON(!socfpga_clk))
 		return;

diff --git a/drivers/clk/socfpga/clk-gate-s10.c b/drivers/clk/socfpga/clk-gate-s10.c
index dce3ef137bf3..913c31d94319 100644
--- a/drivers/clk/socfpga/clk-gate-s10.c
+++ b/drivers/clk/socfpga/clk-gate-s10.c
@@ -132,7 +132,7 @@ struct clk_hw *s10_register_gate(const struct stratix10_gate_clock *clks, void _
 	const char *parent_name = clks->parent_name;
 	int ret;

-	socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL);
+	socfpga_clk = kzalloc_obj(*socfpga_clk, GFP_KERNEL);
 	if (!socfpga_clk)
 		return NULL;

@@ -190,7 +190,7 @@ struct clk_hw *agilex_register_gate(const struct stratix10_gate_clock *clks, voi
 	const char *parent_name = clks->parent_name;
 	int ret;

-	socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL);
+	socfpga_clk = kzalloc_obj(*socfpga_clk, GFP_KERNEL);
 	if (!socfpga_clk)
 		return NULL;

@@ -247,7 +247,7 @@ struct clk_hw *agilex5_register_gate(const struct agilex5_gate_clock *clks, void
 	struct clk_init_data init;
 	int ret;

-	socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL);
+	socfpga_clk = kzalloc_obj(*socfpga_clk, GFP_KERNEL);
 	if (!socfpga_clk)
 		return NULL;

diff --git a/drivers/clk/socfpga/clk-gate.c b/drivers/clk/socfpga/clk-gate.c
index 0a5a95e0267f..52dd6e2f19f9 100644
--- a/drivers/clk/socfpga/clk-gate.c
+++ b/drivers/clk/socfpga/clk-gate.c
@@ -147,7 +147,7 @@ void __init socfpga_gate_init(struct device_node *node)
 	struct clk_ops *ops;
 	int rc;

-	socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL);
+	socfpga_clk = kzalloc_obj(*socfpga_clk, GFP_KERNEL);
 	if (WARN_ON(!socfpga_clk))
 		return;

diff --git a/drivers/clk/socfpga/clk-periph-a10.c b/drivers/clk/socfpga/clk-periph-a10.c
index 64cc70b970b7..7f61ce1793b2 100644
--- a/drivers/clk/socfpga/clk-periph-a10.c
+++ b/drivers/clk/socfpga/clk-periph-a10.c
@@ -72,7 +72,7 @@ static void __init __socfpga_periph_init(struct device_node *node,

 	of_property_read_u32(node, "reg", &reg);

-	periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL);
+	periph_clk = kzalloc_obj(*periph_clk, GFP_KERNEL);
 	if (WARN_ON(!periph_clk))
 		return;

diff --git a/drivers/clk/socfpga/clk-periph-s10.c b/drivers/clk/socfpga/clk-periph-s10.c
index f12ca43ffe7c..f43ffd4dfa82 100644
--- a/drivers/clk/socfpga/clk-periph-s10.c
+++ b/drivers/clk/socfpga/clk-periph-s10.c
@@ -108,7 +108,7 @@ struct clk_hw *s10_register_periph(const struct stratix10_perip_c_clock *clks,
 	const char *parent_name = clks->parent_name;
 	int ret;

-	periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL);
+	periph_clk = kzalloc_obj(*periph_clk, GFP_KERNEL);
 	if (WARN_ON(!periph_clk))
 		return NULL;

@@ -144,7 +144,7 @@ struct clk_hw *n5x_register_periph(const struct n5x_perip_c_clock *clks,
 	const char *parent_name = clks->parent_name;
 	int ret;

-	periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL);
+	periph_clk = kzalloc_obj(*periph_clk, GFP_KERNEL);
 	if (WARN_ON(!periph_clk))
 		return NULL;

@@ -179,7 +179,7 @@ struct clk_hw *s10_register_cnt_periph(const struct stratix10_perip_cnt_clock *c
 	const char *parent_name = clks->parent_name;
 	int ret;

-	periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL);
+	periph_clk = kzalloc_obj(*periph_clk, GFP_KERNEL);
 	if (WARN_ON(!periph_clk))
 		return NULL;

@@ -224,7 +224,7 @@ struct clk_hw *agilex5_register_cnt_periph(const struct agilex5_perip_cnt_clock
 	const char *name = clks->name;
 	int ret;

-	periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL);
+	periph_clk = kzalloc_obj(*periph_clk, GFP_KERNEL);
 	if (WARN_ON(!periph_clk))
 		return NULL;

diff --git a/drivers/clk/socfpga/clk-periph.c b/drivers/clk/socfpga/clk-periph.c
index 6a4075147b9c..2719af1502c1 100644
--- a/drivers/clk/socfpga/clk-periph.c
+++ b/drivers/clk/socfpga/clk-periph.c
@@ -62,7 +62,7 @@ static void __init __socfpga_periph_init(struct device_node *node,

 	of_property_read_u32(node, "reg", &reg);

-	periph_clk = kzalloc(sizeof(*periph_clk), GFP_KERNEL);
+	periph_clk = kzalloc_obj(*periph_clk, GFP_KERNEL);
 	if (WARN_ON(!periph_clk))
 		return;

diff --git a/drivers/clk/socfpga/clk-pll-a10.c b/drivers/clk/socfpga/clk-pll-a10.c
index 62eed964c3d0..633c30b70d25 100644
--- a/drivers/clk/socfpga/clk-pll-a10.c
+++ b/drivers/clk/socfpga/clk-pll-a10.c
@@ -78,7 +78,7 @@ static void __init __socfpga_pll_init(struct device_node *node,

 	of_property_read_u32(node, "reg", &reg);

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (WARN_ON(!pll_clk))
 		return;

diff --git a/drivers/clk/socfpga/clk-pll-s10.c b/drivers/clk/socfpga/clk-pll-s10.c
index 1be92827cd93..3c8302a7ec5b 100644
--- a/drivers/clk/socfpga/clk-pll-s10.c
+++ b/drivers/clk/socfpga/clk-pll-s10.c
@@ -196,7 +196,7 @@ struct clk_hw *s10_register_pll(const struct stratix10_pll_clock *clks,
 	const char *name = clks->name;
 	int ret;

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (WARN_ON(!pll_clk))
 		return NULL;

@@ -236,7 +236,7 @@ struct clk_hw *agilex_register_pll(const struct stratix10_pll_clock *clks,
 	const char *name = clks->name;
 	int ret;

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (WARN_ON(!pll_clk))
 		return NULL;

@@ -275,7 +275,7 @@ struct clk_hw *n5x_register_pll(const struct stratix10_pll_clock *clks,
 	const char *name = clks->name;
 	int ret;

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (WARN_ON(!pll_clk))
 		return NULL;

@@ -314,7 +314,7 @@ struct clk_hw *agilex5_register_pll(const struct agilex5_pll_clock *clks,
 	const char *name = clks->name;
 	int ret;

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (WARN_ON(!pll_clk))
 		return NULL;

diff --git a/drivers/clk/socfpga/clk-pll.c b/drivers/clk/socfpga/clk-pll.c
index 03a96139a576..877c7f1a4216 100644
--- a/drivers/clk/socfpga/clk-pll.c
+++ b/drivers/clk/socfpga/clk-pll.c
@@ -84,7 +84,7 @@ static void __init __socfpga_pll_init(struct device_node *node,

 	of_property_read_u32(node, "reg", &reg);

-	pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+	pll_clk = kzalloc_obj(*pll_clk, GFP_KERNEL);
 	if (WARN_ON(!pll_clk))
 		return;

diff --git a/drivers/clk/spacemit/ccu_common.c b/drivers/clk/spacemit/ccu_common.c
index 5f05b17f8452..cbe11eb49f0b 100644
--- a/drivers/clk/spacemit/ccu_common.c
+++ b/drivers/clk/spacemit/ccu_common.c
@@ -91,7 +91,7 @@ static int spacemit_ccu_reset_register(struct device *dev,
 	if (!reset_name)
 		return 0;

-	cadev = kzalloc(sizeof(*cadev), GFP_KERNEL);
+	cadev = kzalloc_obj(*cadev, GFP_KERNEL);
 	if (!cadev)
 		return -ENOMEM;

diff --git a/drivers/clk/spear/clk-aux-synth.c b/drivers/clk/spear/clk-aux-synth.c
index d0d063147af8..6358c9d87f4d 100644
--- a/drivers/clk/spear/clk-aux-synth.c
+++ b/drivers/clk/spear/clk-aux-synth.c
@@ -147,7 +147,7 @@ struct clk *clk_register_aux(const char *aux_name, const char *gate_name,
 		return ERR_PTR(-EINVAL);
 	}

-	aux = kzalloc(sizeof(*aux), GFP_KERNEL);
+	aux = kzalloc_obj(*aux, GFP_KERNEL);
 	if (!aux)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/spear/clk-frac-synth.c b/drivers/clk/spear/clk-frac-synth.c
index 150f051d28e0..37457eb1df1d 100644
--- a/drivers/clk/spear/clk-frac-synth.c
+++ b/drivers/clk/spear/clk-frac-synth.c
@@ -134,7 +134,7 @@ struct clk *clk_register_frac(const char *name, const char *parent_name,
 		return ERR_PTR(-EINVAL);
 	}

-	frac = kzalloc(sizeof(*frac), GFP_KERNEL);
+	frac = kzalloc_obj(*frac, GFP_KERNEL);
 	if (!frac)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/spear/clk-gpt-synth.c b/drivers/clk/spear/clk-gpt-synth.c
index cf9659dc9073..dfc8c01d8a41 100644
--- a/drivers/clk/spear/clk-gpt-synth.c
+++ b/drivers/clk/spear/clk-gpt-synth.c
@@ -123,7 +123,7 @@ struct clk *clk_register_gpt(const char *name, const char *parent_name, unsigned
 		return ERR_PTR(-EINVAL);
 	}

-	gpt = kzalloc(sizeof(*gpt), GFP_KERNEL);
+	gpt = kzalloc_obj(*gpt, GFP_KERNEL);
 	if (!gpt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/spear/clk-vco-pll.c b/drivers/clk/spear/clk-vco-pll.c
index 723a6eb67754..8b1fab349a1c 100644
--- a/drivers/clk/spear/clk-vco-pll.c
+++ b/drivers/clk/spear/clk-vco-pll.c
@@ -293,11 +293,11 @@ struct clk *clk_register_vco_pll(const char *vco_name, const char *pll_name,
 		return ERR_PTR(-EINVAL);
 	}

-	vco = kzalloc(sizeof(*vco), GFP_KERNEL);
+	vco = kzalloc_obj(*vco, GFP_KERNEL);
 	if (!vco)
 		return ERR_PTR(-ENOMEM);

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		goto free_vco;

diff --git a/drivers/clk/sprd/pll.c b/drivers/clk/sprd/pll.c
index bc6610d5fcb7..3c70a32e993f 100644
--- a/drivers/clk/sprd/pll.c
+++ b/drivers/clk/sprd/pll.c
@@ -155,7 +155,7 @@ static int _sprd_pll_set_rate(const struct sprd_pll *pll,
 	unsigned long kint, nint;
 	u64 tmp, refin, fvco = rate;

-	cfg = kcalloc(regs_num, sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_objs(*cfg, regs_num, GFP_KERNEL);
 	if (!cfg)
 		return -ENOMEM;

diff --git a/drivers/clk/st/clk-flexgen.c b/drivers/clk/st/clk-flexgen.c
index e8e7626c76db..ea14dec68fef 100644
--- a/drivers/clk/st/clk-flexgen.c
+++ b/drivers/clk/st/clk-flexgen.c
@@ -213,7 +213,7 @@ static struct clk *clk_register_flexgen(const char *name,
 	u32  xbar_shift;
 	void __iomem *xbar_reg, *fdiv_reg;

-	fgxbar = kzalloc(sizeof(struct flexgen), GFP_KERNEL);
+	fgxbar = kzalloc_obj(struct flexgen, GFP_KERNEL);
 	if (!fgxbar)
 		return ERR_PTR(-ENOMEM);

@@ -596,7 +596,7 @@ static void __init st_of_flexgen_setup(struct device_node *np)
 		clk_mode = data->mode;
 	}

-	clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
+	clk_data = kzalloc_obj(*clk_data, GFP_KERNEL);
 	if (!clk_data)
 		goto err;

@@ -612,12 +612,12 @@ static void __init st_of_flexgen_setup(struct device_node *np)
 	} else
 		clk_data->clk_num = data->outputs_nb;

-	clk_data->clks = kcalloc(clk_data->clk_num, sizeof(struct clk *),
-			GFP_KERNEL);
+	clk_data->clks = kzalloc_objs(struct clk *, clk_data->clk_num,
+				      GFP_KERNEL);
 	if (!clk_data->clks)
 		goto err;

-	rlock = kzalloc(sizeof(spinlock_t), GFP_KERNEL);
+	rlock = kzalloc_obj(spinlock_t, GFP_KERNEL);
 	if (!rlock)
 		goto err;

diff --git a/drivers/clk/st/clkgen-fsyn.c b/drivers/clk/st/clkgen-fsyn.c
index e06e7e5cc1a5..74dd344eba4f 100644
--- a/drivers/clk/st/clkgen-fsyn.c
+++ b/drivers/clk/st/clkgen-fsyn.c
@@ -454,7 +454,7 @@ static struct clk * __init st_clk_register_quadfs_pll(
 	if (WARN_ON(!name || !parent_name))
 		return ERR_PTR(-EINVAL);

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

@@ -894,7 +894,7 @@ static struct clk * __init st_clk_register_quadfs_fsynth(
 	if (WARN_ON(!name || !parent_name))
 		return ERR_PTR(-EINVAL);

-	fs = kzalloc(sizeof(*fs), GFP_KERNEL);
+	fs = kzalloc_obj(*fs, GFP_KERNEL);
 	if (!fs)
 		return ERR_PTR(-ENOMEM);

@@ -926,13 +926,12 @@ static void __init st_of_create_quadfs_fsynths(
 	struct clk_onecell_data *clk_data;
 	int fschan;

-	clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
+	clk_data = kzalloc_obj(*clk_data, GFP_KERNEL);
 	if (!clk_data)
 		return;

 	clk_data->clk_num = QUADFS_MAX_CHAN;
-	clk_data->clks = kcalloc(QUADFS_MAX_CHAN, sizeof(struct clk *),
-				 GFP_KERNEL);
+	clk_data->clks = kzalloc_objs(struct clk *, QUADFS_MAX_CHAN, GFP_KERNEL);

 	if (!clk_data->clks) {
 		kfree(clk_data);
@@ -1013,7 +1012,7 @@ static void __init st_of_quadfs_setup(struct device_node *np,
 	if (!pll_name)
 		return;

-	lock = kzalloc(sizeof(*lock), GFP_KERNEL);
+	lock = kzalloc_obj(*lock, GFP_KERNEL);
 	if (!lock)
 		goto err_exit;

diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c
index c258ff87a171..9a6b0df5aabc 100644
--- a/drivers/clk/st/clkgen-pll.c
+++ b/drivers/clk/st/clkgen-pll.c
@@ -656,7 +656,7 @@ static struct clk * __init clkgen_pll_register(const char *parent_name,
 	struct clk *clk;
 	struct clk_init_data init;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

@@ -716,7 +716,7 @@ static struct clk * __init clkgen_odf_register(const char *parent_name,

 	flags = pll_flags | CLK_GET_RATE_NOCACHE | CLK_SET_RATE_PARENT;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

@@ -725,7 +725,7 @@ static struct clk * __init clkgen_odf_register(const char *parent_name,
 	gate->bit_idx = pll_data->odf_gate[odf].shift;
 	gate->lock = odf_lock;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div) {
 		kfree(gate);
 		return ERR_PTR(-ENOMEM);
@@ -783,13 +783,13 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,

 	num_odfs = datac->data->num_odfs;

-	clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
+	clk_data = kzalloc_obj(*clk_data, GFP_KERNEL);
 	if (!clk_data)
 		return;

 	clk_data->clk_num = num_odfs;
-	clk_data->clks = kcalloc(clk_data->clk_num, sizeof(struct clk *),
-				 GFP_KERNEL);
+	clk_data->clks = kzalloc_objs(struct clk *, clk_data->clk_num,
+				      GFP_KERNEL);

 	if (!clk_data->clks)
 		goto err;
diff --git a/drivers/clk/starfive/clk-starfive-jh7110-sys.c b/drivers/clk/starfive/clk-starfive-jh7110-sys.c
index 52833d4241c5..d8a1e45fc6bd 100644
--- a/drivers/clk/starfive/clk-starfive-jh7110-sys.c
+++ b/drivers/clk/starfive/clk-starfive-jh7110-sys.c
@@ -347,7 +347,7 @@ int jh7110_reset_controller_register(struct jh71x0_clk_priv *priv,
 	struct auxiliary_device *adev;
 	int ret;

-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (!rdev)
 		return -ENOMEM;

diff --git a/drivers/clk/stm32/reset-stm32.c b/drivers/clk/stm32/reset-stm32.c
index 5a8f525842ce..6c4a3a1bfa38 100644
--- a/drivers/clk/stm32/reset-stm32.c
+++ b/drivers/clk/stm32/reset-stm32.c
@@ -130,7 +130,7 @@ int stm32_rcc_reset_init(struct device *dev, struct clk_stm32_reset_data *data,
 {
 	struct stm32_reset_data *reset_data;

-	reset_data = kzalloc(sizeof(*reset_data), GFP_KERNEL);
+	reset_data = kzalloc_obj(*reset_data, GFP_KERNEL);
 	if (!reset_data)
 		return -ENOMEM;

diff --git a/drivers/clk/sunxi-ng/ccu_common.c b/drivers/clk/sunxi-ng/ccu_common.c
index c7e00f0c29a5..eff61cb0d8a5 100644
--- a/drivers/clk/sunxi-ng/ccu_common.c
+++ b/drivers/clk/sunxi-ng/ccu_common.c
@@ -242,7 +242,7 @@ void of_sunxi_ccu_probe(struct device_node *node, void __iomem *reg,
 	struct sunxi_ccu *ccu;
 	int ret;

-	ccu = kzalloc(sizeof(*ccu), GFP_KERNEL);
+	ccu = kzalloc_obj(*ccu, GFP_KERNEL);
 	if (!ccu)
 		return;

diff --git a/drivers/clk/sunxi/clk-a10-hosc.c b/drivers/clk/sunxi/clk-a10-hosc.c
index f07e976839eb..3a0d899c395a 100644
--- a/drivers/clk/sunxi/clk-a10-hosc.c
+++ b/drivers/clk/sunxi/clk-a10-hosc.c
@@ -26,10 +26,10 @@ static void __init sun4i_osc_clk_setup(struct device_node *node)
 		return;

 	/* allocate fixed-rate and gate clock structs */
-	fixed = kzalloc(sizeof(struct clk_fixed_rate), GFP_KERNEL);
+	fixed = kzalloc_obj(struct clk_fixed_rate, GFP_KERNEL);
 	if (!fixed)
 		return;
-	gate = kzalloc(sizeof(struct clk_gate), GFP_KERNEL);
+	gate = kzalloc_obj(struct clk_gate, GFP_KERNEL);
 	if (!gate)
 		goto err_free_fixed;

diff --git a/drivers/clk/sunxi/clk-a10-mod1.c b/drivers/clk/sunxi/clk-a10-mod1.c
index 39ad56d753ba..45dfe0b2e8d1 100644
--- a/drivers/clk/sunxi/clk-a10-mod1.c
+++ b/drivers/clk/sunxi/clk-a10-mod1.c
@@ -32,11 +32,11 @@ static void __init sun4i_mod1_clk_setup(struct device_node *node)
 	if (IS_ERR(reg))
 		return;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		goto err_unmap;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		goto err_free_mux;

diff --git a/drivers/clk/sunxi/clk-a10-pll2.c b/drivers/clk/sunxi/clk-a10-pll2.c
index 2ea3b42320a6..046e23831fc2 100644
--- a/drivers/clk/sunxi/clk-a10-pll2.c
+++ b/drivers/clk/sunxi/clk-a10-pll2.c
@@ -50,11 +50,11 @@ static void __init sun4i_pll2_setup(struct device_node *node,
 	if (IS_ERR(reg))
 		return;

-	clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
+	clk_data = kzalloc_obj(*clk_data, GFP_KERNEL);
 	if (!clk_data)
 		goto err_unmap;

-	clks = kcalloc(SUN4I_PLL2_OUTPUTS, sizeof(struct clk *), GFP_KERNEL);
+	clks = kzalloc_objs(struct clk *, SUN4I_PLL2_OUTPUTS, GFP_KERNEL);
 	if (!clks)
 		goto err_free_data;

@@ -71,7 +71,7 @@ static void __init sun4i_pll2_setup(struct device_node *node,
 	}

 	/* Setup the gate part of the PLL2 */
-	gate = kzalloc(sizeof(struct clk_gate), GFP_KERNEL);
+	gate = kzalloc_obj(struct clk_gate, GFP_KERNEL);
 	if (!gate)
 		goto err_unregister_prediv;

@@ -80,7 +80,7 @@ static void __init sun4i_pll2_setup(struct device_node *node,
 	gate->lock = &sun4i_a10_pll2_lock;

 	/* Setup the multiplier part of the PLL2 */
-	mult = kzalloc(sizeof(struct clk_multiplier), GFP_KERNEL);
+	mult = kzalloc_obj(struct clk_multiplier, GFP_KERNEL);
 	if (!mult)
 		goto err_free_gate;

diff --git a/drivers/clk/sunxi/clk-a10-ve.c b/drivers/clk/sunxi/clk-a10-ve.c
index 65810937a13a..d353d0d1200a 100644
--- a/drivers/clk/sunxi/clk-a10-ve.c
+++ b/drivers/clk/sunxi/clk-a10-ve.c
@@ -97,11 +97,11 @@ static void __init sun4i_ve_clk_setup(struct device_node *node)
 	if (IS_ERR(reg))
 		return;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		goto err_unmap;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		goto err_free_div;

@@ -129,7 +129,7 @@ static void __init sun4i_ve_clk_setup(struct device_node *node)
 	if (err)
 		goto err_unregister_clk;

-	reset_data = kzalloc(sizeof(*reset_data), GFP_KERNEL);
+	reset_data = kzalloc_obj(*reset_data, GFP_KERNEL);
 	if (!reset_data)
 		goto err_del_provider;

diff --git a/drivers/clk/sunxi/clk-a20-gmac.c b/drivers/clk/sunxi/clk-a20-gmac.c
index 43080c7d045b..3ef842034fa2 100644
--- a/drivers/clk/sunxi/clk-a20-gmac.c
+++ b/drivers/clk/sunxi/clk-a20-gmac.c
@@ -63,11 +63,11 @@ static void __init sun7i_a20_gmac_clk_setup(struct device_node *node)
 		return;

 	/* allocate mux and gate clock structs */
-	mux = kzalloc(sizeof(struct clk_mux), GFP_KERNEL);
+	mux = kzalloc_obj(struct clk_mux, GFP_KERNEL);
 	if (!mux)
 		return;

-	gate = kzalloc(sizeof(struct clk_gate), GFP_KERNEL);
+	gate = kzalloc_obj(struct clk_gate, GFP_KERNEL);
 	if (!gate)
 		goto free_mux;

diff --git a/drivers/clk/sunxi/clk-factors.c b/drivers/clk/sunxi/clk-factors.c
index 4d8f0422b876..0b4a25305e93 100644
--- a/drivers/clk/sunxi/clk-factors.c
+++ b/drivers/clk/sunxi/clk-factors.c
@@ -200,7 +200,7 @@ static struct clk *__sunxi_factors_register(struct device_node *node,
 	else
 		of_property_read_string(node, "clock-output-names", &clk_name);

-	factors = kzalloc(sizeof(struct clk_factors), GFP_KERNEL);
+	factors = kzalloc_obj(struct clk_factors, GFP_KERNEL);
 	if (!factors)
 		goto err_factors;

@@ -213,7 +213,7 @@ static struct clk *__sunxi_factors_register(struct device_node *node,

 	/* Add a gate if this factor clock can be gated */
 	if (data->enable) {
-		gate = kzalloc(sizeof(struct clk_gate), GFP_KERNEL);
+		gate = kzalloc_obj(struct clk_gate, GFP_KERNEL);
 		if (!gate)
 			goto err_gate;

@@ -228,7 +228,7 @@ static struct clk *__sunxi_factors_register(struct device_node *node,

 	/* Add a mux if this factor clock can be muxed */
 	if (data->mux) {
-		mux = kzalloc(sizeof(struct clk_mux), GFP_KERNEL);
+		mux = kzalloc_obj(struct clk_mux, GFP_KERNEL);
 		if (!mux)
 			goto err_mux;

diff --git a/drivers/clk/sunxi/clk-mod0.c b/drivers/clk/sunxi/clk-mod0.c
index 51800289ada9..dcfaa8a936c4 100644
--- a/drivers/clk/sunxi/clk-mod0.c
+++ b/drivers/clk/sunxi/clk-mod0.c
@@ -300,11 +300,11 @@ static void __init sunxi_mmc_setup(struct device_node *node,
 		return;
 	}

-	clk_data = kmalloc(sizeof(*clk_data), GFP_KERNEL);
+	clk_data = kmalloc_obj(*clk_data, GFP_KERNEL);
 	if (!clk_data)
 		return;

-	clk_data->clks = kcalloc(3, sizeof(*clk_data->clks), GFP_KERNEL);
+	clk_data->clks = kzalloc_objs(*clk_data->clks, 3, GFP_KERNEL);
 	if (!clk_data->clks)
 		goto err_free_data;

@@ -323,7 +323,7 @@ static void __init sunxi_mmc_setup(struct device_node *node,
 		};
 		struct mmc_phase *phase;

-		phase = kmalloc(sizeof(*phase), GFP_KERNEL);
+		phase = kmalloc_obj(*phase, GFP_KERNEL);
 		if (!phase)
 			continue;

diff --git a/drivers/clk/sunxi/clk-simple-gates.c b/drivers/clk/sunxi/clk-simple-gates.c
index 845efc1ec800..3852972a8600 100644
--- a/drivers/clk/sunxi/clk-simple-gates.c
+++ b/drivers/clk/sunxi/clk-simple-gates.c
@@ -34,14 +34,14 @@ static void __init sunxi_simple_gates_setup(struct device_node *node,

 	clk_parent = of_clk_get_parent_name(node, 0);

-	clk_data = kmalloc(sizeof(struct clk_onecell_data), GFP_KERNEL);
+	clk_data = kmalloc_obj(struct clk_onecell_data, GFP_KERNEL);
 	if (!clk_data)
 		goto err_unmap;

 	number = of_property_count_u32_elems(node, "clock-indices");
 	of_property_read_u32_index(node, "clock-indices", number - 1, &number);

-	clk_data->clks = kcalloc(number + 1, sizeof(struct clk *), GFP_KERNEL);
+	clk_data->clks = kzalloc_objs(struct clk *, number + 1, GFP_KERNEL);
 	if (!clk_data->clks)
 		goto err_free_data;

diff --git a/drivers/clk/sunxi/clk-sun4i-display.c b/drivers/clk/sunxi/clk-sun4i-display.c
index 35d1541bedd9..a4e00d516b68 100644
--- a/drivers/clk/sunxi/clk-sun4i-display.c
+++ b/drivers/clk/sunxi/clk-sun4i-display.c
@@ -126,7 +126,7 @@ static void __init sun4i_a10_display_init(struct device_node *node,
 		goto unmap;
 	}

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		goto unmap;

@@ -135,7 +135,7 @@ static void __init sun4i_a10_display_init(struct device_node *node,
 	mux->mask = (1 << data->width_mux) - 1;
 	mux->lock = &sun4i_a10_display_lock;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		goto free_mux;

@@ -144,7 +144,7 @@ static void __init sun4i_a10_display_init(struct device_node *node,
 	gate->lock = &sun4i_a10_display_lock;

 	if (data->has_div) {
-		div = kzalloc(sizeof(*div), GFP_KERNEL);
+		div = kzalloc_obj(*div, GFP_KERNEL);
 		if (!div)
 			goto free_gate;

@@ -175,7 +175,7 @@ static void __init sun4i_a10_display_init(struct device_node *node,
 	if (!data->num_rst)
 		return;

-	reset_data = kzalloc(sizeof(*reset_data), GFP_KERNEL);
+	reset_data = kzalloc_obj(*reset_data, GFP_KERNEL);
 	if (!reset_data)
 		goto free_of_clk;

diff --git a/drivers/clk/sunxi/clk-sun4i-pll3.c b/drivers/clk/sunxi/clk-sun4i-pll3.c
index 5328588fa2de..2977e71ea35a 100644
--- a/drivers/clk/sunxi/clk-sun4i-pll3.c
+++ b/drivers/clk/sunxi/clk-sun4i-pll3.c
@@ -37,7 +37,7 @@ static void __init sun4i_a10_pll3_setup(struct device_node *node)
 		return;
 	}

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		goto err_unmap;

@@ -45,7 +45,7 @@ static void __init sun4i_a10_pll3_setup(struct device_node *node)
 	gate->bit_idx = SUN4I_A10_PLL3_GATE_BIT;
 	gate->lock = &sun4i_a10_pll3_lock;

-	mult = kzalloc(sizeof(*mult), GFP_KERNEL);
+	mult = kzalloc_obj(*mult, GFP_KERNEL);
 	if (!mult)
 		goto err_free_gate;

diff --git a/drivers/clk/sunxi/clk-sun4i-tcon-ch1.c b/drivers/clk/sunxi/clk-sun4i-tcon-ch1.c
index 277a240b65a1..6e4c9db335e6 100644
--- a/drivers/clk/sunxi/clk-sun4i-tcon-ch1.c
+++ b/drivers/clk/sunxi/clk-sun4i-tcon-ch1.c
@@ -246,7 +246,7 @@ static void __init tcon_ch1_setup(struct device_node *node)
 		goto err_unmap;
 	}

-	tclk = kzalloc(sizeof(*tclk), GFP_KERNEL);
+	tclk = kzalloc_obj(*tclk, GFP_KERNEL);
 	if (!tclk)
 		goto err_unmap;

diff --git a/drivers/clk/sunxi/clk-sun8i-bus-gates.c b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
index 8482ac8e5898..c212200d49f4 100644
--- a/drivers/clk/sunxi/clk-sun8i-bus-gates.c
+++ b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
@@ -44,14 +44,14 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node)
 		parents[i] = of_clk_get_parent_name(node, idx);
 	}

-	clk_data = kmalloc(sizeof(struct clk_onecell_data), GFP_KERNEL);
+	clk_data = kmalloc_obj(struct clk_onecell_data, GFP_KERNEL);
 	if (!clk_data)
 		goto err_unmap;

 	number = of_property_count_u32_elems(node, "clock-indices");
 	of_property_read_u32_index(node, "clock-indices", number - 1, &number);

-	clk_data->clks = kcalloc(number + 1, sizeof(struct clk *), GFP_KERNEL);
+	clk_data->clks = kzalloc_objs(struct clk *, number + 1, GFP_KERNEL);
 	if (!clk_data->clks)
 		goto err_free_data;

diff --git a/drivers/clk/sunxi/clk-sun8i-mbus.c b/drivers/clk/sunxi/clk-sun8i-mbus.c
index 539ea278823d..9156830f04a6 100644
--- a/drivers/clk/sunxi/clk-sun8i-mbus.c
+++ b/drivers/clk/sunxi/clk-sun8i-mbus.c
@@ -44,15 +44,15 @@ static void __init sun8i_a23_mbus_setup(struct device_node *node)
 		goto err_free_parents;
 	}

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		goto err_unmap;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		goto err_free_div;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		goto err_free_mux;

diff --git a/drivers/clk/sunxi/clk-sun9i-cpus.c b/drivers/clk/sunxi/clk-sun9i-cpus.c
index 48bf899bb2bc..f49f4df71bc2 100644
--- a/drivers/clk/sunxi/clk-sun9i-cpus.c
+++ b/drivers/clk/sunxi/clk-sun9i-cpus.c
@@ -191,7 +191,7 @@ static void sun9i_a80_cpus_setup(struct device_node *node)
 	struct clk *clk;
 	int ret;

-	cpus = kzalloc(sizeof(*cpus), GFP_KERNEL);
+	cpus = kzalloc_obj(*cpus, GFP_KERNEL);
 	if (!cpus)
 		return;

@@ -204,7 +204,7 @@ static void sun9i_a80_cpus_setup(struct device_node *node)
 	/* we have a mux, we will have >1 parents */
 	ret = of_clk_parent_fill(node, parents, SUN9I_CPUS_MAX_PARENTS);

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		goto err_unmap;

diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c
index 4999504f7e60..1451ebec1ac6 100644
--- a/drivers/clk/sunxi/clk-sunxi.c
+++ b/drivers/clk/sunxi/clk-sunxi.c
@@ -991,11 +991,11 @@ static struct clk ** __init sunxi_divs_clk_setup(struct device_node *node,
 		return NULL;
 	}

-	clk_data = kmalloc(sizeof(struct clk_onecell_data), GFP_KERNEL);
+	clk_data = kmalloc_obj(struct clk_onecell_data, GFP_KERNEL);
 	if (!clk_data)
 		goto out_unmap;

-	clks = kcalloc(ndivs, sizeof(*clks), GFP_KERNEL);
+	clks = kzalloc_objs(*clks, ndivs, GFP_KERNEL);
 	if (!clks)
 		goto free_clkdata;

@@ -1022,7 +1022,7 @@ static struct clk ** __init sunxi_divs_clk_setup(struct device_node *node,

 		/* If this leaf clock can be gated, create a gate */
 		if (data->div[i].gate) {
-			gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+			gate = kzalloc_obj(*gate, GFP_KERNEL);
 			if (!gate)
 				goto free_clks;

@@ -1035,7 +1035,7 @@ static struct clk ** __init sunxi_divs_clk_setup(struct device_node *node,

 		/* Leaves can be fixed or configurable divisors */
 		if (data->div[i].fixed) {
-			fix_factor = kzalloc(sizeof(*fix_factor), GFP_KERNEL);
+			fix_factor = kzalloc_obj(*fix_factor, GFP_KERNEL);
 			if (!fix_factor)
 				goto free_gate;

@@ -1045,7 +1045,7 @@ static struct clk ** __init sunxi_divs_clk_setup(struct device_node *node,
 			rate_hw = &fix_factor->hw;
 			rate_ops = &clk_fixed_factor_ops;
 		} else {
-			divider = kzalloc(sizeof(*divider), GFP_KERNEL);
+			divider = kzalloc_obj(*divider, GFP_KERNEL);
 			if (!divider)
 				goto free_gate;

diff --git a/drivers/clk/sunxi/clk-usb.c b/drivers/clk/sunxi/clk-usb.c
index 3c53f65002a2..f993884c58d6 100644
--- a/drivers/clk/sunxi/clk-usb.c
+++ b/drivers/clk/sunxi/clk-usb.c
@@ -113,11 +113,11 @@ static void __init sunxi_usb_clk_setup(struct device_node *node,
 	qty = find_last_bit((unsigned long *)&data->clk_mask,
 			    SUNXI_USB_MAX_SIZE);

-	clk_data = kmalloc(sizeof(struct clk_onecell_data), GFP_KERNEL);
+	clk_data = kmalloc_obj(struct clk_onecell_data, GFP_KERNEL);
 	if (!clk_data)
 		return;

-	clk_data->clks = kcalloc(qty + 1, sizeof(struct clk *), GFP_KERNEL);
+	clk_data->clks = kzalloc_objs(struct clk *, qty + 1, GFP_KERNEL);
 	if (!clk_data->clks) {
 		kfree(clk_data);
 		return;
@@ -144,7 +144,7 @@ static void __init sunxi_usb_clk_setup(struct device_node *node,
 	if (data->reset_mask == 0)
 		return;

-	reset_data = kzalloc(sizeof(*reset_data), GFP_KERNEL);
+	reset_data = kzalloc_obj(*reset_data, GFP_KERNEL);
 	if (!reset_data)
 		return;

diff --git a/drivers/clk/tegra/clk-audio-sync.c b/drivers/clk/tegra/clk-audio-sync.c
index 468a4403f147..41db1d5978e3 100644
--- a/drivers/clk/tegra/clk-audio-sync.c
+++ b/drivers/clk/tegra/clk-audio-sync.c
@@ -50,7 +50,7 @@ struct clk *tegra_clk_register_sync_source(const char *name,
 	struct clk_init_data init;
 	struct clk *clk;

-	sync = kzalloc(sizeof(*sync), GFP_KERNEL);
+	sync = kzalloc_obj(*sync, GFP_KERNEL);
 	if (!sync) {
 		pr_err("%s: could not allocate sync source clk\n", __func__);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/clk/tegra/clk-bpmp.c b/drivers/clk/tegra/clk-bpmp.c
index 77a2586dbe00..064d9ee431e5 100644
--- a/drivers/clk/tegra/clk-bpmp.c
+++ b/drivers/clk/tegra/clk-bpmp.c
@@ -434,7 +434,7 @@ static int tegra_bpmp_probe_clocks(struct tegra_bpmp *bpmp,

 	dev_dbg(bpmp->dev, "maximum clock ID: %u\n", max_id);

-	clocks = kcalloc(max_id + 1, sizeof(*clocks), GFP_KERNEL);
+	clocks = kzalloc_objs(*clocks, max_id + 1, GFP_KERNEL);
 	if (!clocks)
 		return -ENOMEM;

diff --git a/drivers/clk/tegra/clk-divider.c b/drivers/clk/tegra/clk-divider.c
index 37439fcb3ac0..62fd39a849b1 100644
--- a/drivers/clk/tegra/clk-divider.c
+++ b/drivers/clk/tegra/clk-divider.c
@@ -148,7 +148,7 @@ struct clk *tegra_clk_register_divider(const char *name,
 	struct clk *clk;
 	struct clk_init_data init;

-	divider = kzalloc(sizeof(*divider), GFP_KERNEL);
+	divider = kzalloc_obj(*divider, GFP_KERNEL);
 	if (!divider) {
 		pr_err("%s: could not allocate fractional divider clk\n",
 		       __func__);
diff --git a/drivers/clk/tegra/clk-periph-fixed.c b/drivers/clk/tegra/clk-periph-fixed.c
index c088e7a280df..363a0e0aed3d 100644
--- a/drivers/clk/tegra/clk-periph-fixed.c
+++ b/drivers/clk/tegra/clk-periph-fixed.c
@@ -84,7 +84,7 @@ struct clk *tegra_clk_register_periph_fixed(const char *name,
 	if (!regs)
 		return ERR_PTR(-EINVAL);

-	fixed = kzalloc(sizeof(*fixed), GFP_KERNEL);
+	fixed = kzalloc_obj(*fixed, GFP_KERNEL);
 	if (!fixed)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/tegra/clk-periph-gate.c b/drivers/clk/tegra/clk-periph-gate.c
index 2091fc9b0ca9..1892a5b78fc7 100644
--- a/drivers/clk/tegra/clk-periph-gate.c
+++ b/drivers/clk/tegra/clk-periph-gate.c
@@ -146,7 +146,7 @@ struct clk *tegra_clk_register_periph_gate(const char *name,
 	if (!pregs)
 		return ERR_PTR(-EINVAL);

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate) {
 		pr_err("%s: could not allocate periph gate clk\n", __func__);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/clk/tegra/clk-pll-out.c b/drivers/clk/tegra/clk-pll-out.c
index d8bf89a81e6d..cf10c7bea32d 100644
--- a/drivers/clk/tegra/clk-pll-out.c
+++ b/drivers/clk/tegra/clk-pll-out.c
@@ -93,7 +93,7 @@ struct clk *tegra_clk_register_pll_out(const char *name,
 	struct clk *clk;
 	struct clk_init_data init;

-	pll_out = kzalloc(sizeof(*pll_out), GFP_KERNEL);
+	pll_out = kzalloc_obj(*pll_out, GFP_KERNEL);
 	if (!pll_out)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/tegra/clk-pll.c b/drivers/clk/tegra/clk-pll.c
index 591b9f0c155a..3031725e2a9d 100644
--- a/drivers/clk/tegra/clk-pll.c
+++ b/drivers/clk/tegra/clk-pll.c
@@ -1882,7 +1882,7 @@ static struct tegra_clk_pll *_tegra_init_pll(void __iomem *clk_base,
 {
 	struct tegra_clk_pll *pll;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/tegra/clk-sdmmc-mux.c b/drivers/clk/tegra/clk-sdmmc-mux.c
index 4f2c3309eea4..524469ff0805 100644
--- a/drivers/clk/tegra/clk-sdmmc-mux.c
+++ b/drivers/clk/tegra/clk-sdmmc-mux.c
@@ -250,7 +250,7 @@ struct clk *tegra_clk_register_sdmmc_mux_div(const char *name,
 	if (!bank)
 		return ERR_PTR(-EINVAL);

-	sdmmc_mux = kzalloc(sizeof(*sdmmc_mux), GFP_KERNEL);
+	sdmmc_mux = kzalloc_obj(*sdmmc_mux, GFP_KERNEL);
 	if (!sdmmc_mux)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/tegra/clk-super.c b/drivers/clk/tegra/clk-super.c
index 51fb356e770e..3882efd05427 100644
--- a/drivers/clk/tegra/clk-super.c
+++ b/drivers/clk/tegra/clk-super.c
@@ -207,7 +207,7 @@ struct clk *tegra_clk_register_super_mux(const char *name,
 	struct clk *clk;
 	struct clk_init_data init;

-	super = kzalloc(sizeof(*super), GFP_KERNEL);
+	super = kzalloc_obj(*super, GFP_KERNEL);
 	if (!super)
 		return ERR_PTR(-ENOMEM);

@@ -243,7 +243,7 @@ struct clk *tegra_clk_register_super_clk(const char *name,
 	struct clk *clk;
 	struct clk_init_data init;

-	super = kzalloc(sizeof(*super), GFP_KERNEL);
+	super = kzalloc_obj(*super, GFP_KERNEL);
 	if (!super)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/tegra/clk-tegra-super-cclk.c b/drivers/clk/tegra/clk-tegra-super-cclk.c
index 3b22a4d0dffc..0f4ec781024c 100644
--- a/drivers/clk/tegra/clk-tegra-super-cclk.c
+++ b/drivers/clk/tegra/clk-tegra-super-cclk.c
@@ -142,7 +142,7 @@ struct clk *tegra_clk_register_super_cclk(const char *name,
 	if (WARN_ON(cclk_super))
 		return ERR_PTR(-EBUSY);

-	super = kzalloc(sizeof(*super), GFP_KERNEL);
+	super = kzalloc_obj(*super, GFP_KERNEL);
 	if (!super)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/tegra/clk-tegra124-emc.c b/drivers/clk/tegra/clk-tegra124-emc.c
index 8aec327fa1f4..c92fc64c79dc 100644
--- a/drivers/clk/tegra/clk-tegra124-emc.c
+++ b/drivers/clk/tegra/clk-tegra124-emc.c
@@ -492,7 +492,7 @@ struct clk *tegra124_clk_register_emc(void __iomem *base, struct device_node *np
 	struct clk *clk;
 	int err;

-	tegra = kcalloc(1, sizeof(*tegra), GFP_KERNEL);
+	tegra = kzalloc_objs(*tegra, 1, GFP_KERNEL);
 	if (!tegra)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/tegra/clk-tegra20-emc.c b/drivers/clk/tegra/clk-tegra20-emc.c
index dd74b8543bf1..20efe7827d27 100644
--- a/drivers/clk/tegra/clk-tegra20-emc.c
+++ b/drivers/clk/tegra/clk-tegra20-emc.c
@@ -249,7 +249,7 @@ struct clk *tegra20_clk_register_emc(void __iomem *ioaddr, bool low_jitter)
 	struct clk_init_data init;
 	struct clk *clk;

-	emc = kzalloc(sizeof(*emc), GFP_KERNEL);
+	emc = kzalloc_obj(*emc, GFP_KERNEL);
 	if (!emc)
 		return NULL;

diff --git a/drivers/clk/tegra/clk-tegra210-emc.c b/drivers/clk/tegra/clk-tegra210-emc.c
index fbf3c894eb56..9e88cd587183 100644
--- a/drivers/clk/tegra/clk-tegra210-emc.c
+++ b/drivers/clk/tegra/clk-tegra210-emc.c
@@ -278,7 +278,7 @@ struct clk *tegra210_clk_register_emc(struct device_node *np,
 	struct clk_init_data init;
 	struct clk *clk;

-	emc = kzalloc(sizeof(*emc), GFP_KERNEL);
+	emc = kzalloc_obj(*emc, GFP_KERNEL);
 	if (!emc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra210.c
index 504d0ea997a5..ad21a735723e 100644
--- a/drivers/clk/tegra/clk-tegra210.c
+++ b/drivers/clk/tegra/clk-tegra210.c
@@ -3705,8 +3705,7 @@ static void tegra210_mbist_clk_init(void)
 		if (!num_clks)
 			continue;

-		clk_data = kmalloc_array(num_clks, sizeof(*clk_data),
-					 GFP_KERNEL);
+		clk_data = kmalloc_objs(*clk_data, num_clks, GFP_KERNEL);
 		if (WARN_ON(!clk_data))
 			return;

diff --git a/drivers/clk/tegra/clk.c b/drivers/clk/tegra/clk.c
index 19037346f522..7f11d1795d79 100644
--- a/drivers/clk/tegra/clk.c
+++ b/drivers/clk/tegra/clk.c
@@ -227,15 +227,14 @@ struct clk ** __init tegra_clk_init(void __iomem *regs, int num, int banks)
 	if (WARN_ON(banks > ARRAY_SIZE(periph_regs)))
 		return NULL;

-	periph_clk_enb_refcnt = kcalloc(32 * banks,
-					sizeof(*periph_clk_enb_refcnt),
-					GFP_KERNEL);
+	periph_clk_enb_refcnt = kzalloc_objs(*periph_clk_enb_refcnt, 32 * banks,
+					     GFP_KERNEL);
 	if (!periph_clk_enb_refcnt)
 		return NULL;

 	periph_banks = banks;

-	clks = kcalloc(num, sizeof(struct clk *), GFP_KERNEL);
+	clks = kzalloc_objs(struct clk *, num, GFP_KERNEL);
 	if (!clks) {
 		kfree(periph_clk_enb_refcnt);
 		return NULL;
diff --git a/drivers/clk/ti/apll.c b/drivers/clk/ti/apll.c
index 43514e6f3b78..5ec7cfd5e669 100644
--- a/drivers/clk/ti/apll.c
+++ b/drivers/clk/ti/apll.c
@@ -183,9 +183,9 @@ static void __init of_dra7_apll_setup(struct device_node *node)
 	const char **parent_names = NULL;
 	int ret;

-	ad = kzalloc(sizeof(*ad), GFP_KERNEL);
-	clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
-	init = kzalloc(sizeof(*init), GFP_KERNEL);
+	ad = kzalloc_obj(*ad, GFP_KERNEL);
+	clk_hw = kzalloc_obj(*clk_hw, GFP_KERNEL);
+	init = kzalloc_obj(*init, GFP_KERNEL);
 	if (!ad || !clk_hw || !init)
 		goto cleanup;

@@ -347,9 +347,9 @@ static void __init of_omap2_apll_setup(struct device_node *node)
 	u32 val;
 	int ret;

-	ad = kzalloc(sizeof(*ad), GFP_KERNEL);
-	clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
-	init = kzalloc(sizeof(*init), GFP_KERNEL);
+	ad = kzalloc_obj(*ad, GFP_KERNEL);
+	clk_hw = kzalloc_obj(*clk_hw, GFP_KERNEL);
+	init = kzalloc_obj(*init, GFP_KERNEL);

 	if (!ad || !clk_hw || !init)
 		goto cleanup;
diff --git a/drivers/clk/ti/autoidle.c b/drivers/clk/ti/autoidle.c
index a99aaf2e7684..62b136861f95 100644
--- a/drivers/clk/ti/autoidle.c
+++ b/drivers/clk/ti/autoidle.c
@@ -191,7 +191,7 @@ int __init of_ti_clk_autoidle_setup(struct device_node *node)
 	if (of_property_read_u32(node, "ti,autoidle-shift", &shift))
 		return 0;

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);

 	if (!clk)
 		return -ENOMEM;
diff --git a/drivers/clk/ti/clk-dra7-atl.c b/drivers/clk/ti/clk-dra7-atl.c
index b02f84d49b96..fd41aa9fbab1 100644
--- a/drivers/clk/ti/clk-dra7-atl.c
+++ b/drivers/clk/ti/clk-dra7-atl.c
@@ -170,7 +170,7 @@ static void __init of_dra7_atl_clock_setup(struct device_node *node)
 	const char *name;
 	struct clk *clk;

-	clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
+	clk_hw = kzalloc_obj(*clk_hw, GFP_KERNEL);
 	if (!clk_hw) {
 		pr_err("%s: could not allocate dra7_atl_desc\n", __func__);
 		return;
diff --git a/drivers/clk/ti/clk.c b/drivers/clk/ti/clk.c
index 693a4459a01b..23ab4f380956 100644
--- a/drivers/clk/ti/clk.c
+++ b/drivers/clk/ti/clk.c
@@ -268,7 +268,7 @@ int __init ti_clk_retry_init(struct device_node *node, void *user,
 	struct clk_init_item *retry;

 	pr_debug("%pOFn: adding to retry list...\n", node);
-	retry = kzalloc(sizeof(*retry), GFP_KERNEL);
+	retry = kzalloc_obj(*retry, GFP_KERNEL);
 	if (!retry)
 		return -ENOMEM;

@@ -411,7 +411,7 @@ int __init omap2_clk_provider_init(struct device_node *parent, int index,
 	/* add clocks node info */
 	clocks_node_ptr[index] = clocks;

-	io = kzalloc(sizeof(*io), GFP_KERNEL);
+	io = kzalloc_obj(*io, GFP_KERNEL);
 	if (!io)
 		return -ENOMEM;

@@ -576,7 +576,7 @@ int ti_clk_add_alias(struct clk *clk, const char *con)
 	if (IS_ERR(clk))
 		return PTR_ERR(clk);

-	cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+	cl = kzalloc_obj(*cl, GFP_KERNEL);
 	if (!cl)
 		return -ENOMEM;

diff --git a/drivers/clk/ti/clkctrl.c b/drivers/clk/ti/clkctrl.c
index 607e34d8e289..06a39d981733 100644
--- a/drivers/clk/ti/clkctrl.c
+++ b/drivers/clk/ti/clkctrl.c
@@ -297,7 +297,7 @@ _ti_clkctrl_clk_register(struct omap_clkctrl_provider *provider,
 					   ti_clk_get_features()->flags &
 					   TI_CLK_CLKCTRL_COMPAT);

-	clkctrl_clk = kzalloc(sizeof(*clkctrl_clk), GFP_KERNEL);
+	clkctrl_clk = kzalloc_obj(*clkctrl_clk, GFP_KERNEL);
 	if (!init.name || !clkctrl_clk) {
 		ret = -ENOMEM;
 		goto cleanup;
@@ -337,7 +337,7 @@ _ti_clkctrl_setup_gate(struct omap_clkctrl_provider *provider,
 {
 	struct clk_hw_omap *clk_hw;

-	clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
+	clk_hw = kzalloc_obj(*clk_hw, GFP_KERNEL);
 	if (!clk_hw)
 		return;

@@ -360,7 +360,7 @@ _ti_clkctrl_setup_mux(struct omap_clkctrl_provider *provider,
 	int num_parents = 0;
 	const char * const *pname;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return;

@@ -395,7 +395,7 @@ _ti_clkctrl_setup_div(struct omap_clkctrl_provider *provider,
 	const struct omap_clkctrl_div_data *div_data = data->data;
 	u8 div_flags = 0;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return;

@@ -579,7 +579,7 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
 		return;
 	}

-	provider = kzalloc(sizeof(*provider), GFP_KERNEL);
+	provider = kzalloc_obj(*provider, GFP_KERNEL);
 	if (!provider)
 		return;

@@ -650,7 +650,7 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
 			continue;
 		}

-		hw = kzalloc(sizeof(*hw), GFP_KERNEL);
+		hw = kzalloc_obj(*hw, GFP_KERNEL);
 		if (!hw)
 			return;

@@ -683,7 +683,7 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
 		if (!init.name)
 			goto cleanup;

-		clkctrl_clk = kzalloc(sizeof(*clkctrl_clk), GFP_KERNEL);
+		clkctrl_clk = kzalloc_obj(*clkctrl_clk, GFP_KERNEL);
 		if (!clkctrl_clk)
 			goto cleanup;

diff --git a/drivers/clk/ti/composite.c b/drivers/clk/ti/composite.c
index 8cba259188d4..0403995cd8ac 100644
--- a/drivers/clk/ti/composite.c
+++ b/drivers/clk/ti/composite.c
@@ -211,7 +211,7 @@ static void __init of_ti_composite_clk_setup(struct device_node *node)
 		return;
 	}

-	cclk = kzalloc(sizeof(*cclk), GFP_KERNEL);
+	cclk = kzalloc_obj(*cclk, GFP_KERNEL);
 	if (!cclk)
 		return;

@@ -253,7 +253,7 @@ int __init ti_clk_add_component(struct device_node *node, struct clk_hw *hw,

 	of_clk_parent_fill(node, parent_names, num_parents);

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk) {
 		kfree(parent_names);
 		return -ENOMEM;
diff --git a/drivers/clk/ti/divider.c b/drivers/clk/ti/divider.c
index 6f58a0f2e74a..af2776f13413 100644
--- a/drivers/clk/ti/divider.c
+++ b/drivers/clk/ti/divider.c
@@ -357,7 +357,7 @@ int ti_clk_parse_divider_data(int *div_table, int num_dividers, int max_div,

 	num_dividers = i;

-	tmp = kcalloc(valid_div + 1, sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_objs(*tmp, valid_div + 1, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

@@ -413,7 +413,7 @@ static int __init ti_clk_get_div_table(struct device_node *node,
 		return -EINVAL;
 	}

-	table = kcalloc(valid_div + 1, sizeof(*table), GFP_KERNEL);
+	table = kzalloc_objs(*table, valid_div + 1, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -517,7 +517,7 @@ static void __init of_ti_divider_clk_setup(struct device_node *node)
 	u32 flags = 0;
 	struct clk_omap_divider *div;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return;

@@ -542,7 +542,7 @@ static void __init of_ti_composite_divider_clk_setup(struct device_node *node)
 	struct clk_omap_divider *div;
 	u32 tmp;

-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return;

diff --git a/drivers/clk/ti/dpll.c b/drivers/clk/ti/dpll.c
index 971adafd9a8b..bce9af95d7aa 100644
--- a/drivers/clk/ti/dpll.c
+++ b/drivers/clk/ti/dpll.c
@@ -222,7 +222,7 @@ static void _register_dpll_x2(struct device_node *node,
 		return;
 	}

-	clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
+	clk_hw = kzalloc_obj(*clk_hw, GFP_KERNEL);
 	if (!clk_hw)
 		return;

@@ -281,8 +281,8 @@ static void __init of_ti_dpll_setup(struct device_node *node,
 	u32 min_div;

 	dd = kmemdup(ddt, sizeof(*dd), GFP_KERNEL);
-	clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
-	init = kzalloc(sizeof(*init), GFP_KERNEL);
+	clk_hw = kzalloc_obj(*clk_hw, GFP_KERNEL);
+	init = kzalloc_obj(*init, GFP_KERNEL);
 	if (!dd || !clk_hw || !init)
 		goto cleanup;

diff --git a/drivers/clk/ti/fapll.c b/drivers/clk/ti/fapll.c
index 4f28138d2d8a..22be4570b038 100644
--- a/drivers/clk/ti/fapll.c
+++ b/drivers/clk/ti/fapll.c
@@ -499,7 +499,7 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd,
 	struct fapll_synth *synth;
 	struct clk *clk = ERR_PTR(-ENOMEM);

-	init = kzalloc(sizeof(*init), GFP_KERNEL);
+	init = kzalloc_obj(*init, GFP_KERNEL);
 	if (!init)
 		return ERR_PTR(-ENOMEM);

@@ -508,7 +508,7 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd,
 	init->parent_names = &parent;
 	init->num_parents = 1;

-	synth = kzalloc(sizeof(*synth), GFP_KERNEL);
+	synth = kzalloc_obj(*synth, GFP_KERNEL);
 	if (!synth)
 		goto free;

@@ -544,7 +544,7 @@ static void __init ti_fapll_setup(struct device_node *node)
 	const char *name;
 	int i;

-	fd = kzalloc(sizeof(*fd), GFP_KERNEL);
+	fd = kzalloc_obj(*fd, GFP_KERNEL);
 	if (!fd)
 		return;

@@ -554,7 +554,7 @@ static void __init ti_fapll_setup(struct device_node *node)
 	if (!fd->outputs.clks)
 		goto free;

-	init = kzalloc(sizeof(*init), GFP_KERNEL);
+	init = kzalloc_obj(*init, GFP_KERNEL);
 	if (!init)
 		goto free;

diff --git a/drivers/clk/ti/gate.c b/drivers/clk/ti/gate.c
index a9febd6356b8..73986d78492a 100644
--- a/drivers/clk/ti/gate.c
+++ b/drivers/clk/ti/gate.c
@@ -95,7 +95,7 @@ static struct clk *_register_gate(struct device_node *node, const char *name,
 	struct clk_hw_omap *clk_hw;
 	struct clk *clk;

-	clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
+	clk_hw = kzalloc_obj(*clk_hw, GFP_KERNEL);
 	if (!clk_hw)
 		return ERR_PTR(-ENOMEM);

@@ -169,7 +169,7 @@ _of_ti_composite_gate_clk_setup(struct device_node *node,
 {
 	struct clk_hw_omap *gate;

-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return;

diff --git a/drivers/clk/ti/interface.c b/drivers/clk/ti/interface.c
index 3eb35c87c0ed..999e230d7414 100644
--- a/drivers/clk/ti/interface.c
+++ b/drivers/clk/ti/interface.c
@@ -34,7 +34,7 @@ static struct clk *_register_interface(struct device_node *node,
 	struct clk_hw_omap *clk_hw;
 	struct clk *clk;

-	clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
+	clk_hw = kzalloc_obj(*clk_hw, GFP_KERNEL);
 	if (!clk_hw)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/ti/mux.c b/drivers/clk/ti/mux.c
index d6d247ff2be5..3911e43a6716 100644
--- a/drivers/clk/ti/mux.c
+++ b/drivers/clk/ti/mux.c
@@ -129,7 +129,7 @@ static struct clk *_register_mux(struct device_node *node, const char *name,
 	struct clk_init_data init;

 	/* allocate the mux */
-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return ERR_PTR(-ENOMEM);

@@ -227,7 +227,7 @@ struct clk_hw *ti_clk_build_component_mux(struct ti_clk_mux *setup)
 	if (!setup)
 		return NULL;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return ERR_PTR(-ENOMEM);

@@ -253,7 +253,7 @@ static void __init of_ti_composite_mux_clk_setup(struct device_node *node)
 	struct clk_omap_mux *mux;
 	unsigned int num_parents;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return;

diff --git a/drivers/clk/ux500/clk-prcc.c b/drivers/clk/ux500/clk-prcc.c
index b85ee0930369..5639474557fe 100644
--- a/drivers/clk/ux500/clk-prcc.c
+++ b/drivers/clk/ux500/clk-prcc.c
@@ -106,7 +106,7 @@ static struct clk *clk_reg_prcc(const char *name,
 		return ERR_PTR(-EINVAL);
 	}

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/ux500/clk-prcmu.c b/drivers/clk/ux500/clk-prcmu.c
index f775e18acd46..95efbc4f84a7 100644
--- a/drivers/clk/ux500/clk-prcmu.c
+++ b/drivers/clk/ux500/clk-prcmu.c
@@ -209,7 +209,7 @@ static struct clk_hw *clk_reg_prcmu(const char *name,
 		return ERR_PTR(-EINVAL);
 	}

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk)
 		return ERR_PTR(-ENOMEM);

@@ -376,7 +376,7 @@ struct clk_hw *clk_reg_prcmu_clkout(const char *name,
 		return ERR_PTR(-EINVAL);
 	}

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/ux500/u8500_of_clk.c b/drivers/clk/ux500/u8500_of_clk.c
index 8e2f6c65db2a..42c1df2382ee 100644
--- a/drivers/clk/ux500/u8500_of_clk.c
+++ b/drivers/clk/ux500/u8500_of_clk.c
@@ -137,7 +137,7 @@ static void u8500_clk_init(struct device_node *np)
 	 * base addresses properly and pass to the reset controller init
 	 * function later on.
 	 */
-	rstc = kzalloc(sizeof(*rstc), GFP_KERNEL);
+	rstc = kzalloc_obj(*rstc, GFP_KERNEL);
 	if (!rstc)
 		return;

diff --git a/drivers/clk/versatile/clk-icst.c b/drivers/clk/versatile/clk-icst.c
index 86ca04ad9fab..d95d66cd5b6a 100644
--- a/drivers/clk/versatile/clk-icst.c
+++ b/drivers/clk/versatile/clk-icst.c
@@ -363,7 +363,7 @@ struct clk *icst_clk_setup(struct device *dev,
 	struct clk_init_data init;
 	struct icst_params *pclone;

-	icst = kzalloc(sizeof(*icst), GFP_KERNEL);
+	icst = kzalloc_obj(*icst, GFP_KERNEL);
 	if (!icst)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/versatile/clk-sp810.c b/drivers/clk/versatile/clk-sp810.c
index 033d4f78edc8..5f83760b68d4 100644
--- a/drivers/clk/versatile/clk-sp810.c
+++ b/drivers/clk/versatile/clk-sp810.c
@@ -82,7 +82,7 @@ static struct clk *clk_sp810_timerclken_of_get(struct of_phandle_args *clkspec,

 static void __init clk_sp810_of_setup(struct device_node *node)
 {
-	struct clk_sp810 *sp810 = kzalloc(sizeof(*sp810), GFP_KERNEL);
+	struct clk_sp810 *sp810 = kzalloc_obj(*sp810, GFP_KERNEL);
 	const char *parent_names[2];
 	int num = ARRAY_SIZE(parent_names);
 	char name[12];
diff --git a/drivers/clk/visconti/pll.c b/drivers/clk/visconti/pll.c
index 681721d85032..7494a24134de 100644
--- a/drivers/clk/visconti/pll.c
+++ b/drivers/clk/visconti/pll.c
@@ -255,7 +255,7 @@ static struct clk_hw *visconti_register_pll(struct visconti_pll_provider *ctx,
 	size_t len;
 	int ret;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

@@ -330,7 +330,7 @@ struct visconti_pll_provider * __init visconti_init_pll(struct device_node *np,
 	struct visconti_pll_provider *ctx;
 	int i;

-	ctx = kzalloc(struct_size(ctx, clk_data.hws, nr_plls), GFP_KERNEL);
+	ctx = kzalloc_flex(*ctx, clk_data.hws, nr_plls, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/zynq/clkc.c b/drivers/clk/zynq/clkc.c
index c28d3dacf0fb..4a5f2b6267c0 100644
--- a/drivers/clk/zynq/clkc.c
+++ b/drivers/clk/zynq/clkc.c
@@ -112,10 +112,10 @@ static void __init zynq_clk_register_fclk(enum zynq_clk fclk,
 	spinlock_t *fclk_gate_lock;
 	void __iomem *fclk_gate_reg = fclk_ctrl_reg + 8;

-	fclk_lock = kmalloc(sizeof(*fclk_lock), GFP_KERNEL);
+	fclk_lock = kmalloc_obj(*fclk_lock, GFP_KERNEL);
 	if (!fclk_lock)
 		goto err;
-	fclk_gate_lock = kmalloc(sizeof(*fclk_gate_lock), GFP_KERNEL);
+	fclk_gate_lock = kmalloc_obj(*fclk_gate_lock, GFP_KERNEL);
 	if (!fclk_gate_lock)
 		goto err_fclk_gate_lock;
 	spin_lock_init(fclk_lock);
@@ -180,7 +180,7 @@ static void __init zynq_clk_register_periph_clk(enum zynq_clk clk0,
 	char *div_name;
 	spinlock_t *lock;

-	lock = kmalloc(sizeof(*lock), GFP_KERNEL);
+	lock = kmalloc_obj(*lock, GFP_KERNEL);
 	if (!lock)
 		goto err;
 	spin_lock_init(lock);
diff --git a/drivers/clk/zynq/pll.c b/drivers/clk/zynq/pll.c
index 5eca1c14981a..0c411ad86575 100644
--- a/drivers/clk/zynq/pll.c
+++ b/drivers/clk/zynq/pll.c
@@ -200,7 +200,7 @@ struct clk *clk_register_zynq_pll(const char *name, const char *parent,
 		.flags = 0
 	};

-	pll = kmalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kmalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/zynqmp/clk-gate-zynqmp.c b/drivers/clk/zynqmp/clk-gate-zynqmp.c
index b89e55737198..2e36f14d0a52 100644
--- a/drivers/clk/zynqmp/clk-gate-zynqmp.c
+++ b/drivers/clk/zynqmp/clk-gate-zynqmp.c
@@ -115,7 +115,7 @@ struct clk_hw *zynqmp_clk_register_gate(const char *name, u32 clk_id,
 	struct clk_init_data init;

 	/* allocate the gate */
-	gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+	gate = kzalloc_obj(*gate, GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/zynqmp/clk-mux-zynqmp.c b/drivers/clk/zynqmp/clk-mux-zynqmp.c
index 9b5d3050b742..f8d67adfd258 100644
--- a/drivers/clk/zynqmp/clk-mux-zynqmp.c
+++ b/drivers/clk/zynqmp/clk-mux-zynqmp.c
@@ -138,7 +138,7 @@ struct clk_hw *zynqmp_clk_register_mux(const char *name, u32 clk_id,
 	struct clk_init_data init;
 	int ret;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/zynqmp/clkc.c b/drivers/clk/zynqmp/clkc.c
index a91d98e238c2..c71401b3aa1f 100644
--- a/drivers/clk/zynqmp/clkc.c
+++ b/drivers/clk/zynqmp/clkc.c
@@ -759,12 +759,11 @@ static int zynqmp_clk_setup(struct device_node *np)
 	if (ret)
 		return ret;

-	zynqmp_data = kzalloc(struct_size(zynqmp_data, hws, clock_max_idx),
-			      GFP_KERNEL);
+	zynqmp_data = kzalloc_flex(*zynqmp_data, hws, clock_max_idx, GFP_KERNEL);
 	if (!zynqmp_data)
 		return -ENOMEM;

-	clock = kcalloc(clock_max_idx, sizeof(*clock), GFP_KERNEL);
+	clock = kzalloc_objs(*clock, clock_max_idx, GFP_KERNEL);
 	if (!clock) {
 		kfree(zynqmp_data);
 		return -ENOMEM;
diff --git a/drivers/clk/zynqmp/divider.c b/drivers/clk/zynqmp/divider.c
index 984e577ea671..3c147ba7dbcc 100644
--- a/drivers/clk/zynqmp/divider.c
+++ b/drivers/clk/zynqmp/divider.c
@@ -284,7 +284,7 @@ struct clk_hw *zynqmp_clk_register_divider(const char *name,
 	int ret;

 	/* allocate the divider */
-	div = kzalloc(sizeof(*div), GFP_KERNEL);
+	div = kzalloc_obj(*div, GFP_KERNEL);
 	if (!div)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clk/zynqmp/pll.c b/drivers/clk/zynqmp/pll.c
index 6bc2c3934f56..1cd5e0493e98 100644
--- a/drivers/clk/zynqmp/pll.c
+++ b/drivers/clk/zynqmp/pll.c
@@ -326,7 +326,7 @@ struct clk_hw *zynqmp_clk_register_pll(const char *name, u32 clk_id,
 	init.parent_names = parents;
 	init.num_parents = 1;

-	pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+	pll = kzalloc_obj(*pll, GFP_KERNEL);
 	if (!pll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/clocksource/bcm2835_timer.c b/drivers/clocksource/bcm2835_timer.c
index 319c0c780a15..ff0e21edd9c1 100644
--- a/drivers/clocksource/bcm2835_timer.c
+++ b/drivers/clocksource/bcm2835_timer.c
@@ -98,7 +98,7 @@ static int __init bcm2835_timer_init(struct device_node *node)
 		goto err_iounmap;
 	}

-	timer = kzalloc(sizeof(*timer), GFP_KERNEL);
+	timer = kzalloc_obj(*timer, GFP_KERNEL);
 	if (!timer) {
 		ret = -ENOMEM;
 		goto err_iounmap;
diff --git a/drivers/clocksource/clps711x-timer.c b/drivers/clocksource/clps711x-timer.c
index bbceb0289d45..75c17eeef689 100644
--- a/drivers/clocksource/clps711x-timer.c
+++ b/drivers/clocksource/clps711x-timer.c
@@ -54,7 +54,7 @@ static int __init _clps711x_clkevt_init(struct clk *clock, void __iomem *base,
 	struct clock_event_device *clkevt;
 	unsigned long rate;

-	clkevt = kzalloc(sizeof(*clkevt), GFP_KERNEL);
+	clkevt = kzalloc_obj(*clkevt, GFP_KERNEL);
 	if (!clkevt)
 		return -ENOMEM;

diff --git a/drivers/clocksource/dw_apb_timer.c b/drivers/clocksource/dw_apb_timer.c
index 3a55ae5fe225..043793728e23 100644
--- a/drivers/clocksource/dw_apb_timer.c
+++ b/drivers/clocksource/dw_apb_timer.c
@@ -222,8 +222,8 @@ struct dw_apb_clock_event_device *
 dw_apb_clockevent_init(int cpu, const char *name, unsigned rating,
 		       void __iomem *base, int irq, unsigned long freq)
 {
-	struct dw_apb_clock_event_device *dw_ced =
-		kzalloc(sizeof(*dw_ced), GFP_KERNEL);
+	struct dw_apb_clock_event_device *dw_ced = kzalloc_obj(*dw_ced,
+							       GFP_KERNEL);
 	int err;

 	if (!dw_ced)
@@ -340,7 +340,7 @@ struct dw_apb_clocksource *
 dw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base,
 			unsigned long freq)
 {
-	struct dw_apb_clocksource *dw_cs = kzalloc(sizeof(*dw_cs), GFP_KERNEL);
+	struct dw_apb_clocksource *dw_cs = kzalloc_obj(*dw_cs, GFP_KERNEL);

 	if (!dw_cs)
 		return NULL;
diff --git a/drivers/clocksource/ingenic-sysost.c b/drivers/clocksource/ingenic-sysost.c
index e79cfb0b8e05..22caa69197a2 100644
--- a/drivers/clocksource/ingenic-sysost.c
+++ b/drivers/clocksource/ingenic-sysost.c
@@ -279,7 +279,7 @@ static int __init ingenic_ost_register_clock(struct ingenic_ost *ost,
 	struct ingenic_ost_clk *ost_clk;
 	int val, err;

-	ost_clk = kzalloc(sizeof(*ost_clk), GFP_KERNEL);
+	ost_clk = kzalloc_obj(*ost_clk, GFP_KERNEL);
 	if (!ost_clk)
 		return -ENOMEM;

@@ -432,7 +432,7 @@ static int __init ingenic_ost_probe(struct device_node *np)
 	unsigned int i;
 	int ret;

-	ost = kzalloc(sizeof(*ost), GFP_KERNEL);
+	ost = kzalloc_obj(*ost, GFP_KERNEL);
 	if (!ost)
 		return -ENOMEM;

@@ -458,8 +458,8 @@ static int __init ingenic_ost_probe(struct device_node *np)

 	ost->soc_info = id->data;

-	ost->clocks = kzalloc(struct_size(ost->clocks, hws, ost->soc_info->num_channels),
-			      GFP_KERNEL);
+	ost->clocks = kzalloc_flex(*ost->clocks, hws,
+				   ost->soc_info->num_channels, GFP_KERNEL);
 	if (!ost->clocks) {
 		ret = -ENOMEM;
 		goto err_clk_disable;
diff --git a/drivers/clocksource/ingenic-timer.c b/drivers/clocksource/ingenic-timer.c
index 154ee5f7954a..3c545cb756af 100644
--- a/drivers/clocksource/ingenic-timer.c
+++ b/drivers/clocksource/ingenic-timer.c
@@ -286,8 +286,7 @@ static int __init ingenic_tcu_init(struct device_node *np)
 	if (IS_ERR(map))
 		return PTR_ERR(map);

-	tcu = kzalloc(struct_size(tcu, timers, num_possible_cpus()),
-		      GFP_KERNEL);
+	tcu = kzalloc_flex(*tcu, timers, num_possible_cpus(), GFP_KERNEL);
 	if (!tcu)
 		return -ENOMEM;

diff --git a/drivers/clocksource/mmio.c b/drivers/clocksource/mmio.c
index 9de751531831..286513486542 100644
--- a/drivers/clocksource/mmio.c
+++ b/drivers/clocksource/mmio.c
@@ -55,7 +55,7 @@ int __init clocksource_mmio_init(void __iomem *base, const char *name,
 	if (bits > 64 || bits < 16)
 		return -EINVAL;

-	cs = kzalloc(sizeof(struct clocksource_mmio), GFP_KERNEL);
+	cs = kzalloc_obj(struct clocksource_mmio, GFP_KERNEL);
 	if (!cs)
 		return -ENOMEM;

diff --git a/drivers/clocksource/mps2-timer.c b/drivers/clocksource/mps2-timer.c
index efe8cad8f2a5..53c484d29195 100644
--- a/drivers/clocksource/mps2-timer.c
+++ b/drivers/clocksource/mps2-timer.c
@@ -136,7 +136,7 @@ static int __init mps2_clockevent_init(struct device_node *np)
 		goto out_iounmap;
 	}

-	ce = kzalloc(sizeof(*ce), GFP_KERNEL);
+	ce = kzalloc_obj(*ce, GFP_KERNEL);
 	if (!ce) {
 		ret = -ENOMEM;
 		goto out_iounmap;
diff --git a/drivers/clocksource/renesas-ostm.c b/drivers/clocksource/renesas-ostm.c
index 2089aeaae225..36132692bae5 100644
--- a/drivers/clocksource/renesas-ostm.c
+++ b/drivers/clocksource/renesas-ostm.c
@@ -165,7 +165,7 @@ static int __init ostm_init(struct device_node *np)
 	struct timer_of *to;
 	int ret;

-	to = kzalloc(sizeof(*to), GFP_KERNEL);
+	to = kzalloc_obj(*to, GFP_KERNEL);
 	if (!to)
 		return -ENOMEM;

diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c
index 791b298c995b..fd8cdabef9bc 100644
--- a/drivers/clocksource/sh_cmt.c
+++ b/drivers/clocksource/sh_cmt.c
@@ -1084,8 +1084,8 @@ static int sh_cmt_setup(struct sh_cmt_device *cmt, struct platform_device *pdev)

 	/* Allocate and setup the channels. */
 	cmt->num_channels = hweight8(cmt->hw_channels);
-	cmt->channels = kcalloc(cmt->num_channels, sizeof(*cmt->channels),
-				GFP_KERNEL);
+	cmt->channels = kzalloc_objs(*cmt->channels, cmt->num_channels,
+				     GFP_KERNEL);
 	if (cmt->channels == NULL) {
 		ret = -ENOMEM;
 		goto err_unmap;
@@ -1139,7 +1139,7 @@ static int sh_cmt_probe(struct platform_device *pdev)
 		goto out;
 	}

-	cmt = kzalloc(sizeof(*cmt), GFP_KERNEL);
+	cmt = kzalloc_obj(*cmt, GFP_KERNEL);
 	if (cmt == NULL)
 		return -ENOMEM;

diff --git a/drivers/clocksource/sh_mtu2.c b/drivers/clocksource/sh_mtu2.c
index 34872df5458a..333548989ed5 100644
--- a/drivers/clocksource/sh_mtu2.c
+++ b/drivers/clocksource/sh_mtu2.c
@@ -420,8 +420,8 @@ static int sh_mtu2_setup(struct sh_mtu2_device *mtu,
 	mtu->num_channels = min_t(unsigned int, ret,
 				  ARRAY_SIZE(sh_mtu2_channel_offsets));

-	mtu->channels = kcalloc(mtu->num_channels, sizeof(*mtu->channels),
-				GFP_KERNEL);
+	mtu->channels = kzalloc_objs(*mtu->channels, mtu->num_channels,
+				     GFP_KERNEL);
 	if (mtu->channels == NULL) {
 		ret = -ENOMEM;
 		goto err_unmap;
@@ -462,7 +462,7 @@ static int sh_mtu2_probe(struct platform_device *pdev)
 		goto out;
 	}

-	mtu = kzalloc(sizeof(*mtu), GFP_KERNEL);
+	mtu = kzalloc_obj(*mtu, GFP_KERNEL);
 	if (mtu == NULL)
 		return -ENOMEM;

diff --git a/drivers/clocksource/sh_tmu.c b/drivers/clocksource/sh_tmu.c
index 3fc6ed9b5630..365739e1fbad 100644
--- a/drivers/clocksource/sh_tmu.c
+++ b/drivers/clocksource/sh_tmu.c
@@ -546,8 +546,8 @@ static int sh_tmu_setup(struct sh_tmu_device *tmu, struct platform_device *pdev)
 	}

 	/* Allocate and setup the channels. */
-	tmu->channels = kcalloc(tmu->num_channels, sizeof(*tmu->channels),
-				GFP_KERNEL);
+	tmu->channels = kzalloc_objs(*tmu->channels, tmu->num_channels,
+				     GFP_KERNEL);
 	if (tmu->channels == NULL) {
 		ret = -ENOMEM;
 		goto err_unmap;
@@ -593,7 +593,7 @@ static int sh_tmu_probe(struct platform_device *pdev)
 		goto out;
 	}

-	tmu = kzalloc(sizeof(*tmu), GFP_KERNEL);
+	tmu = kzalloc_obj(*tmu, GFP_KERNEL);
 	if (tmu == NULL)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-atmel-pit.c b/drivers/clocksource/timer-atmel-pit.c
index b4f264ed1937..253c3e4d0296 100644
--- a/drivers/clocksource/timer-atmel-pit.c
+++ b/drivers/clocksource/timer-atmel-pit.c
@@ -170,7 +170,7 @@ static int __init at91sam926x_pit_dt_init(struct device_node *node)
 	int             ret;
 	struct pit_data *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-cadence-ttc.c b/drivers/clocksource/timer-cadence-ttc.c
index b8a1cf59b9d6..836141e51118 100644
--- a/drivers/clocksource/timer-cadence-ttc.c
+++ b/drivers/clocksource/timer-cadence-ttc.c
@@ -334,7 +334,7 @@ static int __init ttc_setup_clocksource(struct clk *clk, void __iomem *base,
 	struct ttc_timer_clocksource *ttccs;
 	int err;

-	ttccs = kzalloc(sizeof(*ttccs), GFP_KERNEL);
+	ttccs = kzalloc_obj(*ttccs, GFP_KERNEL);
 	if (!ttccs)
 		return -ENOMEM;

@@ -417,7 +417,7 @@ static int __init ttc_setup_clockevent(struct clk *clk,
 	struct ttc_timer_clockevent *ttcce;
 	int err;

-	ttcce = kzalloc(sizeof(*ttcce), GFP_KERNEL);
+	ttcce = kzalloc_obj(*ttcce, GFP_KERNEL);
 	if (!ttcce)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-davinci.c b/drivers/clocksource/timer-davinci.c
index b1c248498be4..9bf1728a87dc 100644
--- a/drivers/clocksource/timer-davinci.c
+++ b/drivers/clocksource/timer-davinci.c
@@ -271,7 +271,7 @@ int __init davinci_timer_register(struct clk *clk,
 	davinci_timer_init(base);
 	tick_rate = clk_get_rate(clk);

-	clockevent = kzalloc(sizeof(*clockevent), GFP_KERNEL);
+	clockevent = kzalloc_obj(*clockevent, GFP_KERNEL);
 	if (!clockevent) {
 		rv = -ENOMEM;
 		goto exit_iounmap_base;
diff --git a/drivers/clocksource/timer-ep93xx.c b/drivers/clocksource/timer-ep93xx.c
index 6981ff3ac8a9..04eeda15d997 100644
--- a/drivers/clocksource/timer-ep93xx.c
+++ b/drivers/clocksource/timer-ep93xx.c
@@ -141,7 +141,7 @@ static int __init ep93xx_timer_of_init(struct device_node *np)
 	struct ep93xx_tcu *tcu;
 	int ret;

-	tcu = kzalloc(sizeof(*tcu), GFP_KERNEL);
+	tcu = kzalloc_obj(*tcu, GFP_KERNEL);
 	if (!tcu)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-fsl-ftm.c b/drivers/clocksource/timer-fsl-ftm.c
index 93f336ec875a..df82307e690c 100644
--- a/drivers/clocksource/timer-fsl-ftm.c
+++ b/drivers/clocksource/timer-fsl-ftm.c
@@ -300,7 +300,7 @@ static int __init ftm_timer_init(struct device_node *np)
 	unsigned long freq;
 	int ret, irq;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-fttmr010.c b/drivers/clocksource/timer-fttmr010.c
index 126fb1f259b2..e0f7d5976518 100644
--- a/drivers/clocksource/timer-fttmr010.c
+++ b/drivers/clocksource/timer-fttmr010.c
@@ -295,7 +295,7 @@ static int __init fttmr010_common_init(struct device_node *np,
 		return ret;
 	}

-	fttmr010 = kzalloc(sizeof(*fttmr010), GFP_KERNEL);
+	fttmr010 = kzalloc_obj(*fttmr010, GFP_KERNEL);
 	if (!fttmr010) {
 		ret = -ENOMEM;
 		goto out_disable_clock;
diff --git a/drivers/clocksource/timer-goldfish.c b/drivers/clocksource/timer-goldfish.c
index 0512d5eabc82..60982561e8b6 100644
--- a/drivers/clocksource/timer-goldfish.c
+++ b/drivers/clocksource/timer-goldfish.c
@@ -102,7 +102,7 @@ int __init goldfish_timer_init(int irq, void __iomem *base)
 	struct goldfish_timer *timerdrv;
 	int ret;

-	timerdrv = kzalloc(sizeof(*timerdrv), GFP_KERNEL);
+	timerdrv = kzalloc_obj(*timerdrv, GFP_KERNEL);
 	if (!timerdrv)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-gxp.c b/drivers/clocksource/timer-gxp.c
index 48a73c101eb8..7442e9bdd0d5 100644
--- a/drivers/clocksource/timer-gxp.c
+++ b/drivers/clocksource/timer-gxp.c
@@ -76,7 +76,7 @@ static int __init gxp_timer_init(struct device_node *node)
 	u32 freq;
 	int ret, irq;

-	gxp_timer = kzalloc(sizeof(*gxp_timer), GFP_KERNEL);
+	gxp_timer = kzalloc_obj(*gxp_timer, GFP_KERNEL);
 	if (!gxp_timer) {
 		ret = -ENOMEM;
 		pr_err("Can't allocate gxp_timer");
diff --git a/drivers/clocksource/timer-imx-gpt.c b/drivers/clocksource/timer-imx-gpt.c
index 489e69169ed4..ad310be44cb6 100644
--- a/drivers/clocksource/timer-imx-gpt.c
+++ b/drivers/clocksource/timer-imx-gpt.c
@@ -428,7 +428,7 @@ static int __init mxc_timer_init_dt(struct device_node *np,  enum imx_gpt_type t
 	if (initialized)
 		return 0;

-	imxtm = kzalloc(sizeof(*imxtm), GFP_KERNEL);
+	imxtm = kzalloc_obj(*imxtm, GFP_KERNEL);
 	if (!imxtm)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-imx-sysctr.c b/drivers/clocksource/timer-imx-sysctr.c
index 44525813be1e..5eb3b3c6d0ad 100644
--- a/drivers/clocksource/timer-imx-sysctr.c
+++ b/drivers/clocksource/timer-imx-sysctr.c
@@ -139,7 +139,7 @@ static int __init __sysctr_timer_init(struct device_node *np)
 	void __iomem *base;
 	int ret;

-	priv = kzalloc(sizeof(struct sysctr_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct sysctr_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-ixp4xx.c b/drivers/clocksource/timer-ixp4xx.c
index 720ed70a2964..42f679b1165b 100644
--- a/drivers/clocksource/timer-ixp4xx.c
+++ b/drivers/clocksource/timer-ixp4xx.c
@@ -166,7 +166,7 @@ static __init int ixp4xx_timer_register(void __iomem *base,
 	struct ixp4xx_timer *tmr;
 	int ret;

-	tmr = kzalloc(sizeof(*tmr), GFP_KERNEL);
+	tmr = kzalloc_obj(*tmr, GFP_KERNEL);
 	if (!tmr)
 		return -ENOMEM;
 	tmr->base = base;
diff --git a/drivers/clocksource/timer-microchip-pit64b.c b/drivers/clocksource/timer-microchip-pit64b.c
index 57209bb38c70..d54a1c91781f 100644
--- a/drivers/clocksource/timer-microchip-pit64b.c
+++ b/drivers/clocksource/timer-microchip-pit64b.c
@@ -350,7 +350,7 @@ static int __init mchp_pit64b_init_clksrc(struct mchp_pit64b_timer *timer,
 	struct mchp_pit64b_clksrc *cs;
 	int ret;

-	cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+	cs = kzalloc_obj(*cs, GFP_KERNEL);
 	if (!cs)
 		return -ENOMEM;

@@ -397,7 +397,7 @@ static int __init mchp_pit64b_init_clkevt(struct mchp_pit64b_timer *timer,
 	struct mchp_pit64b_clkevt *ce;
 	int ret;

-	ce = kzalloc(sizeof(*ce), GFP_KERNEL);
+	ce = kzalloc_obj(*ce, GFP_KERNEL);
 	if (!ce)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-msc313e.c b/drivers/clocksource/timer-msc313e.c
index 54c54ca7c786..33822f0bc339 100644
--- a/drivers/clocksource/timer-msc313e.c
+++ b/drivers/clocksource/timer-msc313e.c
@@ -171,7 +171,7 @@ static int __init msc313e_clkevt_init(struct device_node *np)
 	int ret;
 	struct timer_of *to;

-	to = kzalloc(sizeof(*to), GFP_KERNEL);
+	to = kzalloc_obj(*to, GFP_KERNEL);
 	if (!to)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-nxp-pit.c b/drivers/clocksource/timer-nxp-pit.c
index d1740f18f718..9109dedab08c 100644
--- a/drivers/clocksource/timer-nxp-pit.c
+++ b/drivers/clocksource/timer-nxp-pit.c
@@ -276,7 +276,7 @@ static int pit_timer_init(struct device_node *np)
 	unsigned long clk_rate;
 	int irq, ret;

-	pit = kzalloc(sizeof(*pit), GFP_KERNEL);
+	pit = kzalloc_obj(*pit, GFP_KERNEL);
 	if (!pit)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-rockchip.c b/drivers/clocksource/timer-rockchip.c
index 1f95d0aca08f..c866127ee1e5 100644
--- a/drivers/clocksource/timer-rockchip.c
+++ b/drivers/clocksource/timer-rockchip.c
@@ -207,7 +207,7 @@ static int __init rk_clkevt_init(struct device_node *np)
 	struct clock_event_device *ce;
 	int ret = -EINVAL;

-	rk_clkevt = kzalloc(sizeof(struct rk_clkevt), GFP_KERNEL);
+	rk_clkevt = kzalloc_obj(struct rk_clkevt, GFP_KERNEL);
 	if (!rk_clkevt) {
 		ret = -ENOMEM;
 		goto out;
@@ -254,7 +254,7 @@ static int __init rk_clksrc_init(struct device_node *np)
 {
 	int ret = -EINVAL;

-	rk_clksrc = kzalloc(sizeof(struct rk_timer), GFP_KERNEL);
+	rk_clksrc = kzalloc_obj(struct rk_timer, GFP_KERNEL);
 	if (!rk_clksrc) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/clocksource/timer-stm32.c b/drivers/clocksource/timer-stm32.c
index 0a4ea3288bfb..4a0f06a419d7 100644
--- a/drivers/clocksource/timer-stm32.c
+++ b/drivers/clocksource/timer-stm32.c
@@ -291,7 +291,7 @@ static int __init stm32_timer_init(struct device_node *node)
 	struct timer_of *to;
 	int ret;

-	to = kzalloc(sizeof(*to), GFP_KERNEL);
+	to = kzalloc_obj(*to, GFP_KERNEL);
 	if (!to)
 		return -ENOMEM;

@@ -302,8 +302,7 @@ static int __init stm32_timer_init(struct device_node *node)
 	if (ret)
 		goto err;

-	to->private_data = kzalloc(sizeof(struct stm32_timer_private),
-				   GFP_KERNEL);
+	to->private_data = kzalloc_obj(struct stm32_timer_private, GFP_KERNEL);
 	if (!to->private_data) {
 		ret = -ENOMEM;
 		goto deinit;
diff --git a/drivers/clocksource/timer-ti-dm-systimer.c b/drivers/clocksource/timer-ti-dm-systimer.c
index 985a6d08512b..3bffd7198a38 100644
--- a/drivers/clocksource/timer-ti-dm-systimer.c
+++ b/drivers/clocksource/timer-ti-dm-systimer.c
@@ -600,7 +600,7 @@ static int __init dmtimer_clockevent_init(struct device_node *np)
 	struct dmtimer_clockevent *clkevt;
 	int error;

-	clkevt = kzalloc(sizeof(*clkevt), GFP_KERNEL);
+	clkevt = kzalloc_obj(*clkevt, GFP_KERNEL);
 	if (!clkevt)
 		return -ENOMEM;

@@ -757,7 +757,7 @@ static int __init dmtimer_clocksource_init(struct device_node *np)
 	struct clocksource *dev;
 	int error;

-	clksrc = kzalloc(sizeof(*clksrc), GFP_KERNEL);
+	clksrc = kzalloc_obj(*clksrc, GFP_KERNEL);
 	if (!clksrc)
 		return -ENOMEM;

diff --git a/drivers/clocksource/timer-zevio.c b/drivers/clocksource/timer-zevio.c
index ecaa3568841c..db1ba9b2c2c9 100644
--- a/drivers/clocksource/timer-zevio.c
+++ b/drivers/clocksource/timer-zevio.c
@@ -119,7 +119,7 @@ static int __init zevio_timer_add(struct device_node *node)
 	struct resource res;
 	int irqnr, ret;

-	timer = kzalloc(sizeof(*timer), GFP_KERNEL);
+	timer = kzalloc_obj(*timer, GFP_KERNEL);
 	if (!timer)
 		return -ENOMEM;

diff --git a/drivers/comedi/comedi_buf.c b/drivers/comedi/comedi_buf.c
index 785977b40a93..7215d4b9152b 100644
--- a/drivers/comedi/comedi_buf.c
+++ b/drivers/comedi/comedi_buf.c
@@ -70,7 +70,7 @@ comedi_buf_map_alloc(struct comedi_device *dev, enum dma_data_direction dma_dir,
 	struct comedi_buf_page *buf;
 	unsigned int i;

-	bm = kzalloc(sizeof(*bm), GFP_KERNEL);
+	bm = kzalloc_obj(*bm, GFP_KERNEL);
 	if (!bm)
 		return NULL;

diff --git a/drivers/comedi/comedi_fops.c b/drivers/comedi/comedi_fops.c
index 25aa4296f3b0..627680057812 100644
--- a/drivers/comedi/comedi_fops.c
+++ b/drivers/comedi/comedi_fops.c
@@ -1058,7 +1058,7 @@ static int do_subdinfo_ioctl(struct comedi_device *dev,
 	struct comedi_subdevice *s;

 	lockdep_assert_held(&dev->mutex);
-	tmp = kcalloc(dev->n_subdevices, sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_objs(*tmp, dev->n_subdevices, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

@@ -2969,7 +2969,7 @@ static int comedi_open(struct inode *inode, struct file *file)
 		return -ENODEV;
 	}

-	cfp = kzalloc(sizeof(*cfp), GFP_KERNEL);
+	cfp = kzalloc_obj(*cfp, GFP_KERNEL);
 	if (!cfp) {
 		comedi_dev_put(dev);
 		return -ENOMEM;
@@ -3322,7 +3322,7 @@ static int compat_insnlist(struct file *file, unsigned long arg)
 	rc = check_insnlist_len(dev, insnlist32.n_insns);
 	if (rc)
 		return rc;
-	insns = kcalloc(insnlist32.n_insns, sizeof(*insns), GFP_KERNEL);
+	insns = kzalloc_objs(*insns, insnlist32.n_insns, GFP_KERNEL);
 	if (!insns)
 		return -ENOMEM;

@@ -3505,7 +3505,7 @@ struct comedi_device *comedi_alloc_board_minor(struct device *hardware_device)
 	struct device *csdev;
 	unsigned int i;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);
 	comedi_device_init(dev);
diff --git a/drivers/comedi/drivers.c b/drivers/comedi/drivers.c
index 69cd2a253c66..b0e39a04f0b3 100644
--- a/drivers/comedi/drivers.c
+++ b/drivers/comedi/drivers.c
@@ -101,7 +101,7 @@ int comedi_alloc_subdevices(struct comedi_device *dev, int num_subdevices)
 	if (num_subdevices < 1)
 		return -EINVAL;

-	s = kcalloc(num_subdevices, sizeof(*s), GFP_KERNEL);
+	s = kzalloc_objs(*s, num_subdevices, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;
 	dev->subdevices = s;
@@ -733,7 +733,7 @@ static int __comedi_device_postconfig_async(struct comedi_device *dev,
 		dev_warn(dev->class_dev,
 			 "async subdevices should have a cancel() function\n");

-	async = kzalloc(sizeof(*async), GFP_KERNEL);
+	async = kzalloc_obj(*async, GFP_KERNEL);
 	if (!async)
 		return -ENOMEM;

diff --git a/drivers/comedi/drivers/addi_apci_2032.c b/drivers/comedi/drivers/addi_apci_2032.c
index e048dfc3ec77..b81837cd4ad5 100644
--- a/drivers/comedi/drivers/addi_apci_2032.c
+++ b/drivers/comedi/drivers/addi_apci_2032.c
@@ -274,7 +274,7 @@ static int apci2032_auto_attach(struct comedi_device *dev,
 		struct apci2032_int_private *subpriv;

 		dev->read_subdev = s;
-		subpriv = kzalloc(sizeof(*subpriv), GFP_KERNEL);
+		subpriv = kzalloc_obj(*subpriv, GFP_KERNEL);
 		if (!subpriv)
 			return -ENOMEM;
 		spin_lock_init(&subpriv->spinlock);
diff --git a/drivers/comedi/drivers/comedi_8254.c b/drivers/comedi/drivers/comedi_8254.c
index 6beca2a6d66e..a748b452d76d 100644
--- a/drivers/comedi/drivers/comedi_8254.c
+++ b/drivers/comedi/drivers/comedi_8254.c
@@ -633,7 +633,7 @@ static struct comedi_8254 *__i8254_init(comedi_8254_iocb_fn *iocb,
 	if (!iocb)
 		return ERR_PTR(-EINVAL);

-	i8254 = kzalloc(sizeof(*i8254), GFP_KERNEL);
+	i8254 = kzalloc_obj(*i8254, GFP_KERNEL);
 	if (!i8254)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/comedi/drivers/comedi_bond.c b/drivers/comedi/drivers/comedi_bond.c
index 30650fa36fff..1b530c819fc0 100644
--- a/drivers/comedi/drivers/comedi_bond.c
+++ b/drivers/comedi/drivers/comedi_bond.c
@@ -223,7 +223,7 @@ static int do_dev_config(struct comedi_device *dev, struct comedi_devconfig *it)
 					nchans, minor, sdev);
 				return -EINVAL;
 			}
-			bdev = kmalloc(sizeof(*bdev), GFP_KERNEL);
+			bdev = kmalloc_obj(*bdev, GFP_KERNEL);
 			if (!bdev)
 				return -ENOMEM;

diff --git a/drivers/comedi/drivers/comedi_isadma.c b/drivers/comedi/drivers/comedi_isadma.c
index 020b3d1e1ac0..259678bfd1f3 100644
--- a/drivers/comedi/drivers/comedi_isadma.c
+++ b/drivers/comedi/drivers/comedi_isadma.c
@@ -161,11 +161,11 @@ struct comedi_isadma *comedi_isadma_alloc(struct comedi_device *dev,
 	if (n_desc < 1 || n_desc > 2)
 		goto no_dma;

-	dma = kzalloc(sizeof(*dma), GFP_KERNEL);
+	dma = kzalloc_obj(*dma, GFP_KERNEL);
 	if (!dma)
 		goto no_dma;

-	desc = kcalloc(n_desc, sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_objs(*desc, n_desc, GFP_KERNEL);
 	if (!desc)
 		goto no_dma;
 	dma->desc = desc;
diff --git a/drivers/comedi/drivers/dt9812.c b/drivers/comedi/drivers/dt9812.c
index b37b9d8eca0d..cace17d6e70e 100644
--- a/drivers/comedi/drivers/dt9812.c
+++ b/drivers/comedi/drivers/dt9812.c
@@ -329,7 +329,7 @@ static int dt9812_write_multiple_registers(struct comedi_device *dev,
 	int i, count;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -358,7 +358,7 @@ static int dt9812_rmw_multiple_registers(struct comedi_device *dev,
 	int i, count;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/comedi/drivers/mite.c b/drivers/comedi/drivers/mite.c
index 88f3cd6f54f1..3a16f4b6a292 100644
--- a/drivers/comedi/drivers/mite.c
+++ b/drivers/comedi/drivers/mite.c
@@ -749,7 +749,7 @@ struct mite_ring *mite_alloc_ring(struct mite *mite)
 {
 	struct mite_ring *ring;

-	ring = kmalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kmalloc_obj(*ring, GFP_KERNEL);
 	if (!ring)
 		return NULL;
 	ring->hw_dev = get_device(&mite->pcidev->dev);
@@ -879,7 +879,7 @@ struct mite *mite_attach(struct comedi_device *dev, bool use_win1)
 	unsigned int i;
 	int ret;

-	mite = kzalloc(sizeof(*mite), GFP_KERNEL);
+	mite = kzalloc_obj(*mite, GFP_KERNEL);
 	if (!mite)
 		return NULL;

diff --git a/drivers/comedi/drivers/ni_670x.c b/drivers/comedi/drivers/ni_670x.c
index 563a9c790f12..bc0344d9a07b 100644
--- a/drivers/comedi/drivers/ni_670x.c
+++ b/drivers/comedi/drivers/ni_670x.c
@@ -198,9 +198,8 @@ static int ni_670x_auto_attach(struct comedi_device *dev,
 	if (s->n_chan == 32) {
 		const struct comedi_lrange **range_table_list;

-		range_table_list = kmalloc_array(32,
-						 sizeof(*range_table_list),
-						 GFP_KERNEL);
+		range_table_list = kmalloc_objs(*range_table_list, 32,
+						GFP_KERNEL);
 		if (!range_table_list)
 			return -ENOMEM;
 		s->range_table_list = range_table_list;
diff --git a/drivers/comedi/drivers/ni_tio.c b/drivers/comedi/drivers/ni_tio.c
index da6826d77e60..56b5995e2c58 100644
--- a/drivers/comedi/drivers/ni_tio.c
+++ b/drivers/comedi/drivers/ni_tio.c
@@ -1778,7 +1778,7 @@ ni_gpct_device_construct(struct comedi_device *dev,
 	if (num_counters == 0 || counters_per_chip == 0)
 		return NULL;

-	counter_dev = kzalloc(sizeof(*counter_dev), GFP_KERNEL);
+	counter_dev = kzalloc_obj(*counter_dev, GFP_KERNEL);
 	if (!counter_dev)
 		return NULL;

@@ -1793,10 +1793,9 @@ ni_gpct_device_construct(struct comedi_device *dev,
 	counter_dev->num_counters = num_counters;
 	counter_dev->num_chips = DIV_ROUND_UP(num_counters, counters_per_chip);

-	counter_dev->counters = kcalloc(num_counters, sizeof(*counter),
-					GFP_KERNEL);
-	counter_dev->regs = kcalloc(counter_dev->num_chips,
-				    sizeof(*counter_dev->regs), GFP_KERNEL);
+	counter_dev->counters = kzalloc_objs(*counter, num_counters, GFP_KERNEL);
+	counter_dev->regs = kzalloc_objs(*counter_dev->regs,
+					 counter_dev->num_chips, GFP_KERNEL);
 	if (!counter_dev->regs || !counter_dev->counters) {
 		kfree(counter_dev->regs);
 		kfree(counter_dev->counters);
diff --git a/drivers/comedi/drivers/usbduxsigma.c b/drivers/comedi/drivers/usbduxsigma.c
index 3f215ae228b2..bcf9116c4bd7 100644
--- a/drivers/comedi/drivers/usbduxsigma.c
+++ b/drivers/comedi/drivers/usbduxsigma.c
@@ -1336,8 +1336,8 @@ static int usbduxsigma_alloc_usb_buffers(struct comedi_device *dev)
 	devpriv->dux_commands = kzalloc(SIZEOFDUXBUFFER, GFP_KERNEL);
 	devpriv->in_buf = kzalloc(SIZEINBUF, GFP_KERNEL);
 	devpriv->insn_buf = kzalloc(SIZEINSNBUF, GFP_KERNEL);
-	devpriv->ai_urbs = kcalloc(devpriv->n_ai_urbs, sizeof(urb), GFP_KERNEL);
-	devpriv->ao_urbs = kcalloc(devpriv->n_ao_urbs, sizeof(urb), GFP_KERNEL);
+	devpriv->ai_urbs = kzalloc_objs(urb, devpriv->n_ai_urbs, GFP_KERNEL);
+	devpriv->ao_urbs = kzalloc_objs(urb, devpriv->n_ao_urbs, GFP_KERNEL);
 	if (!devpriv->dux_commands || !devpriv->in_buf || !devpriv->insn_buf ||
 	    !devpriv->ai_urbs || !devpriv->ao_urbs)
 		return -ENOMEM;
diff --git a/drivers/connector/cn_proc.c b/drivers/connector/cn_proc.c
index 44b19e696176..7f8bd500eae2 100644
--- a/drivers/connector/cn_proc.c
+++ b/drivers/connector/cn_proc.c
@@ -429,8 +429,8 @@ static void cn_proc_mcast_ctl(struct cn_msg *msg,
 	if (nsp->sk) {
 		sk = nsp->sk;
 		if (sk->sk_user_data == NULL) {
-			sk->sk_user_data = kzalloc(sizeof(struct proc_input),
-						   GFP_KERNEL);
+			sk->sk_user_data = kzalloc_obj(struct proc_input,
+						       GFP_KERNEL);
 			if (sk->sk_user_data == NULL) {
 				err = ENOMEM;
 				goto out;
diff --git a/drivers/connector/cn_queue.c b/drivers/connector/cn_queue.c
index 996f025eb63c..3ef917ebc49b 100644
--- a/drivers/connector/cn_queue.c
+++ b/drivers/connector/cn_queue.c
@@ -25,7 +25,7 @@ cn_queue_alloc_callback_entry(struct cn_queue_dev *dev, const char *name,
 {
 	struct cn_callback_entry *cbq;

-	cbq = kzalloc(sizeof(*cbq), GFP_KERNEL);
+	cbq = kzalloc_obj(*cbq, GFP_KERNEL);
 	if (!cbq) {
 		pr_err("Failed to create new callback queue.\n");
 		return NULL;
@@ -113,7 +113,7 @@ struct cn_queue_dev *cn_queue_alloc_dev(const char *name, struct sock *nls)
 {
 	struct cn_queue_dev *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/drivers/counter/counter-chrdev.c b/drivers/counter/counter-chrdev.c
index 23fdf0caf712..0a4af153e049 100644
--- a/drivers/counter/counter-chrdev.c
+++ b/drivers/counter/counter-chrdev.c
@@ -152,7 +152,7 @@ static int counter_set_event_node(struct counter_device *const counter,
 	/* If event is not already in the list */
 	if (&event_node->l == &counter->next_events_list) {
 		/* Allocate new event node */
-		event_node = kmalloc(sizeof(*event_node), GFP_KERNEL);
+		event_node = kmalloc_obj(*event_node, GFP_KERNEL);
 		if (!event_node)
 			return -ENOMEM;

@@ -172,7 +172,7 @@ static int counter_set_event_node(struct counter_device *const counter,
 		}

 	/* Allocate component node */
-	comp_node = kmalloc(sizeof(*comp_node), GFP_KERNEL);
+	comp_node = kmalloc_obj(*comp_node, GFP_KERNEL);
 	if (!comp_node) {
 		err = -ENOMEM;
 		goto exit_free_event_node;
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
index e73a66785d69..8576c8290ea5 100644
--- a/drivers/cpufreq/acpi-cpufreq.c
+++ b/drivers/cpufreq/acpi-cpufreq.c
@@ -700,7 +700,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
 		return blacklisted;
 #endif

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -798,8 +798,8 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
 		goto err_unreg;
 	}

-	freq_table = kcalloc(perf->state_count + 1, sizeof(*freq_table),
-			     GFP_KERNEL);
+	freq_table = kzalloc_objs(*freq_table, perf->state_count + 1,
+				  GFP_KERNEL);
 	if (!freq_table) {
 		result = -ENOMEM;
 		goto err_unreg;
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index ec9f38b219de..dec47f7ce192 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -993,7 +993,7 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
 	if (!dev)
 		return -ENODEV;

-	cpudata = kzalloc(sizeof(*cpudata), GFP_KERNEL);
+	cpudata = kzalloc_obj(*cpudata, GFP_KERNEL);
 	if (!cpudata)
 		return -ENOMEM;

@@ -1478,7 +1478,7 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
 	if (!dev)
 		return -ENODEV;

-	cpudata = kzalloc(sizeof(*cpudata), GFP_KERNEL);
+	cpudata = kzalloc_obj(*cpudata, GFP_KERNEL);
 	if (!cpudata)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/apple-soc-cpufreq.c b/drivers/cpufreq/apple-soc-cpufreq.c
index b1d29b7af232..bf6061e2089a 100644
--- a/drivers/cpufreq/apple-soc-cpufreq.c
+++ b/drivers/cpufreq/apple-soc-cpufreq.c
@@ -276,7 +276,7 @@ static int apple_soc_cpufreq_init(struct cpufreq_policy *policy)
 		goto out_free_opp;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		ret = -ENOMEM;
 		goto out_free_opp;
diff --git a/drivers/cpufreq/armada-37xx-cpufreq.c b/drivers/cpufreq/armada-37xx-cpufreq.c
index 0efe403a5980..1b252074b926 100644
--- a/drivers/cpufreq/armada-37xx-cpufreq.c
+++ b/drivers/cpufreq/armada-37xx-cpufreq.c
@@ -467,8 +467,8 @@ static int __init armada37xx_cpufreq_driver_init(void)
 		return -EINVAL;
 	}

-	armada37xx_cpufreq_state = kmalloc(sizeof(*armada37xx_cpufreq_state),
-					   GFP_KERNEL);
+	armada37xx_cpufreq_state = kmalloc_obj(*armada37xx_cpufreq_state,
+					       GFP_KERNEL);
 	if (!armada37xx_cpufreq_state) {
 		clk_put(clk);
 		return -ENOMEM;
diff --git a/drivers/cpufreq/armada-8k-cpufreq.c b/drivers/cpufreq/armada-8k-cpufreq.c
index d96c1718f7f8..c7d4a15f10bc 100644
--- a/drivers/cpufreq/armada-8k-cpufreq.c
+++ b/drivers/cpufreq/armada-8k-cpufreq.c
@@ -143,7 +143,7 @@ static int __init armada_8k_cpufreq_init(void)
 	of_node_put(node);

 	nb_cpus = num_possible_cpus();
-	freq_tables = kcalloc(nb_cpus, sizeof(*freq_tables), GFP_KERNEL);
+	freq_tables = kzalloc_objs(*freq_tables, nb_cpus, GFP_KERNEL);
 	if (!freq_tables)
 		return -ENOMEM;
 	cpumask_copy(&cpus, cpu_possible_mask);
diff --git a/drivers/cpufreq/bmips-cpufreq.c b/drivers/cpufreq/bmips-cpufreq.c
index 36051880640b..f8c91796b498 100644
--- a/drivers/cpufreq/bmips-cpufreq.c
+++ b/drivers/cpufreq/bmips-cpufreq.c
@@ -71,7 +71,7 @@ bmips_cpufreq_get_freq_table(const struct cpufreq_policy *policy)

 	cpu_freq = htp_freq_to_cpu_freq(priv->clk_mult);

-	table = kmalloc_array(priv->max_freqs + 1, sizeof(*table), GFP_KERNEL);
+	table = kmalloc_objs(*table, priv->max_freqs + 1, GFP_KERNEL);
 	if (!table)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c
index 7e8042efedd1..7abfd2753946 100644
--- a/drivers/cpufreq/cppc_cpufreq.c
+++ b/drivers/cpufreq/cppc_cpufreq.c
@@ -575,7 +575,7 @@ static struct cppc_cpudata *cppc_cpufreq_get_cpu_data(unsigned int cpu)
 	struct cppc_cpudata *cpu_data;
 	int ret;

-	cpu_data = kzalloc(sizeof(struct cppc_cpudata), GFP_KERNEL);
+	cpu_data = kzalloc_obj(struct cppc_cpudata, GFP_KERNEL);
 	if (!cpu_data)
 		goto out;

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index a7a69f4d7675..98035c9fbc17 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1263,7 +1263,7 @@ static struct cpufreq_policy *cpufreq_policy_alloc(unsigned int cpu)
 	if (!dev)
 		return NULL;

-	policy = kzalloc(sizeof(*policy), GFP_KERNEL);
+	policy = kzalloc_obj(*policy, GFP_KERNEL);
 	if (!policy)
 		return NULL;

diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
index cce6a8d113e1..f0c16e615a46 100644
--- a/drivers/cpufreq/cpufreq_conservative.c
+++ b/drivers/cpufreq/cpufreq_conservative.c
@@ -273,7 +273,7 @@ static struct policy_dbs_info *cs_alloc(void)
 {
 	struct cs_policy_dbs_info *dbs_info;

-	dbs_info = kzalloc(sizeof(*dbs_info), GFP_KERNEL);
+	dbs_info = kzalloc_obj(*dbs_info, GFP_KERNEL);
 	return dbs_info ? &dbs_info->policy_dbs : NULL;
 }

@@ -286,7 +286,7 @@ static int cs_init(struct dbs_data *dbs_data)
 {
 	struct cs_dbs_tuners *tuners;

-	tuners = kzalloc(sizeof(*tuners), GFP_KERNEL);
+	tuners = kzalloc_obj(*tuners, GFP_KERNEL);
 	if (!tuners)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
index 1a7fcaf39cc9..1dbb3b10ee83 100644
--- a/drivers/cpufreq/cpufreq_governor.c
+++ b/drivers/cpufreq/cpufreq_governor.c
@@ -429,7 +429,7 @@ int cpufreq_dbs_governor_init(struct cpufreq_policy *policy)
 		goto out;
 	}

-	dbs_data = kzalloc(sizeof(*dbs_data), GFP_KERNEL);
+	dbs_data = kzalloc_obj(*dbs_data, GFP_KERNEL);
 	if (!dbs_data) {
 		ret = -ENOMEM;
 		goto free_policy_dbs_info;
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
index bb7db82930e4..ecb5021f46bd 100644
--- a/drivers/cpufreq/cpufreq_ondemand.c
+++ b/drivers/cpufreq/cpufreq_ondemand.c
@@ -322,7 +322,7 @@ static struct policy_dbs_info *od_alloc(void)
 {
 	struct od_policy_dbs_info *dbs_info;

-	dbs_info = kzalloc(sizeof(*dbs_info), GFP_KERNEL);
+	dbs_info = kzalloc_obj(*dbs_info, GFP_KERNEL);
 	return dbs_info ? &dbs_info->policy_dbs : NULL;
 }

@@ -335,7 +335,7 @@ static int od_init(struct dbs_data *dbs_data)
 {
 	struct od_dbs_tuners *tuners;

-	tuners = kzalloc(sizeof(*tuners), GFP_KERNEL);
+	tuners = kzalloc_obj(*tuners, GFP_KERNEL);
 	if (!tuners)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c
index 40a9ff18da06..407b8fcf0723 100644
--- a/drivers/cpufreq/cpufreq_stats.c
+++ b/drivers/cpufreq/cpufreq_stats.c
@@ -222,7 +222,7 @@ void cpufreq_stats_create_table(struct cpufreq_policy *policy)
 	if (policy->stats)
 		return;

-	stats = kzalloc(sizeof(*stats), GFP_KERNEL);
+	stats = kzalloc_obj(*stats, GFP_KERNEL);
 	if (!stats)
 		return;

diff --git a/drivers/cpufreq/cpufreq_userspace.c b/drivers/cpufreq/cpufreq_userspace.c
index 4bd62e6c5c51..c8e941b4ec03 100644
--- a/drivers/cpufreq/cpufreq_userspace.c
+++ b/drivers/cpufreq/cpufreq_userspace.c
@@ -58,7 +58,7 @@ static int cpufreq_userspace_policy_init(struct cpufreq_policy *policy)
 {
 	struct userspace_policy *userspace;

-	userspace = kzalloc(sizeof(*userspace), GFP_KERNEL);
+	userspace = kzalloc_obj(*userspace, GFP_KERNEL);
 	if (!userspace)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/e_powersaver.c b/drivers/cpufreq/e_powersaver.c
index 320a0af2266a..e079f1fed352 100644
--- a/drivers/cpufreq/e_powersaver.c
+++ b/drivers/cpufreq/e_powersaver.c
@@ -55,8 +55,7 @@ static struct acpi_processor_performance *eps_acpi_cpu_perf;
 /* Minimum necessary to get acpi_processor_get_bios_limit() working */
 static int eps_acpi_init(void)
 {
-	eps_acpi_cpu_perf = kzalloc(sizeof(*eps_acpi_cpu_perf),
-				      GFP_KERNEL);
+	eps_acpi_cpu_perf = kzalloc_obj(*eps_acpi_cpu_perf, GFP_KERNEL);
 	if (!eps_acpi_cpu_perf)
 		return -ENOMEM;

@@ -321,8 +320,7 @@ static int eps_cpu_init(struct cpufreq_policy *policy)
 		states = 2;

 	/* Allocate private data and frequency table for current cpu */
-	centaur = kzalloc(struct_size(centaur, freq_table, states + 1),
-			  GFP_KERNEL);
+	centaur = kzalloc_flex(*centaur, freq_table, states + 1, GFP_KERNEL);
 	if (!centaur)
 		return -ENOMEM;
 	eps_cpu[0] = centaur;
diff --git a/drivers/cpufreq/gx-suspmod.c b/drivers/cpufreq/gx-suspmod.c
index 75b3ef7ec679..ceadf0654838 100644
--- a/drivers/cpufreq/gx-suspmod.c
+++ b/drivers/cpufreq/gx-suspmod.c
@@ -458,7 +458,7 @@ static int __init cpufreq_gx_init(void)

 	pr_debug("geode suspend modulation available.\n");

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (params == NULL)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index 1625ec2d0d06..00232f178630 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -2745,7 +2745,7 @@ static int intel_pstate_init_cpu(unsigned int cpunum)
 	cpu = all_cpu_data[cpunum];

 	if (!cpu) {
-		cpu = kzalloc(sizeof(*cpu), GFP_KERNEL);
+		cpu = kzalloc_obj(*cpu, GFP_KERNEL);
 		if (!cpu)
 			return -ENOMEM;

@@ -3301,7 +3301,7 @@ static int intel_cpufreq_cpu_init(struct cpufreq_policy *policy)
 	/* This reflects the intel_pstate_get_cpu_pstates() setting. */
 	policy->cur = policy->cpuinfo.min_freq;

-	req = kcalloc(2, sizeof(*req), GFP_KERNEL);
+	req = kzalloc_objs(*req, 2, GFP_KERNEL);
 	if (!req) {
 		ret = -ENOMEM;
 		goto pstate_exit;
diff --git a/drivers/cpufreq/longhaul.c b/drivers/cpufreq/longhaul.c
index 49e76b44468a..d9d9d1c605f7 100644
--- a/drivers/cpufreq/longhaul.c
+++ b/drivers/cpufreq/longhaul.c
@@ -475,8 +475,8 @@ static int longhaul_get_ranges(void)
 		return -EINVAL;
 	}

-	longhaul_table = kcalloc(numscales + 1, sizeof(*longhaul_table),
-				 GFP_KERNEL);
+	longhaul_table = kzalloc_objs(*longhaul_table, numscales + 1,
+				      GFP_KERNEL);
 	if (!longhaul_table)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/powernow-k7.c b/drivers/cpufreq/powernow-k7.c
index 31039330a3ba..77847b52d613 100644
--- a/drivers/cpufreq/powernow-k7.c
+++ b/drivers/cpufreq/powernow-k7.c
@@ -304,7 +304,7 @@ static int powernow_acpi_init(void)
 		goto err0;
 	}

-	acpi_processor_perf = kzalloc(sizeof(*acpi_processor_perf), GFP_KERNEL);
+	acpi_processor_perf = kzalloc_obj(*acpi_processor_perf, GFP_KERNEL);
 	if (!acpi_processor_perf) {
 		retval = -ENOMEM;
 		goto err0;
diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c
index f7512b4e923e..b7c9676c96ef 100644
--- a/drivers/cpufreq/powernow-k8.c
+++ b/drivers/cpufreq/powernow-k8.c
@@ -1029,7 +1029,7 @@ static int powernowk8_cpu_init(struct cpufreq_policy *pol)
 	if (rc)
 		return -ENODEV;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c
index 7d9a5f656de8..7ab29fd8e4e5 100644
--- a/drivers/cpufreq/powernv-cpufreq.c
+++ b/drivers/cpufreq/powernv-cpufreq.c
@@ -323,7 +323,7 @@ static int init_powernv_pstates(void)
 		powernv_freqs[i].frequency = freq * 1000; /* kHz */
 		powernv_freqs[i].driver_data = id & 0xFF;

-		revmap_data = kmalloc(sizeof(*revmap_data), GFP_KERNEL);
+		revmap_data = kmalloc_obj(*revmap_data, GFP_KERNEL);
 		if (!revmap_data) {
 			rc = -ENOMEM;
 			goto out;
@@ -857,7 +857,7 @@ static int powernv_cpufreq_cpu_init(struct cpufreq_policy *policy)
 		return 0;

 	/* Initialise Gpstate ramp-down timer only on POWER8 */
-	gpstates =  kzalloc(sizeof(*gpstates), GFP_KERNEL);
+	gpstates = kzalloc_obj(*gpstates, GFP_KERNEL);
 	if (!gpstates)
 		return -ENOMEM;

@@ -1053,7 +1053,7 @@ static int init_chip_info(void)
 		return -ENOMEM;

 	/* Allocate a chip cpu mask large enough to fit mask for all chips */
-	chip_cpu_mask = kcalloc(MAX_NR_CHIPS, sizeof(cpumask_t), GFP_KERNEL);
+	chip_cpu_mask = kzalloc_objs(cpumask_t, MAX_NR_CHIPS, GFP_KERNEL);
 	if (!chip_cpu_mask) {
 		ret = -ENOMEM;
 		goto free_and_return;
@@ -1069,7 +1069,7 @@ static int init_chip_info(void)
 		cpumask_set_cpu(cpu, &chip_cpu_mask[nr_chips-1]);
 	}

-	chips = kcalloc(nr_chips, sizeof(struct chip), GFP_KERNEL);
+	chips = kzalloc_objs(struct chip, nr_chips, GFP_KERNEL);
 	if (!chips) {
 		ret = -ENOMEM;
 		goto out_free_chip_cpu_mask;
diff --git a/drivers/cpufreq/pxa3xx-cpufreq.c b/drivers/cpufreq/pxa3xx-cpufreq.c
index 4afa48d172db..839a55bee151 100644
--- a/drivers/cpufreq/pxa3xx-cpufreq.c
+++ b/drivers/cpufreq/pxa3xx-cpufreq.c
@@ -110,7 +110,7 @@ static int setup_freqs_table(struct cpufreq_policy *policy,
 	struct cpufreq_frequency_table *table;
 	int i;

-	table = kcalloc(num + 1, sizeof(*table), GFP_KERNEL);
+	table = kzalloc_objs(*table, num + 1, GFP_KERNEL);
 	if (table == NULL)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c
index 8422704a3b10..3dbf432efaeb 100644
--- a/drivers/cpufreq/qcom-cpufreq-hw.c
+++ b/drivers/cpufreq/qcom-cpufreq-hw.c
@@ -211,7 +211,7 @@ static int qcom_cpufreq_hw_read_lut(struct device *cpu_dev,
 	struct qcom_cpufreq_data *drv_data = policy->driver_data;
 	const struct qcom_cpufreq_soc_data *soc_data = qcom_cpufreq.soc_data;

-	table = kcalloc(LUT_MAX_ENTRIES + 1, sizeof(*table), GFP_KERNEL);
+	table = kzalloc_objs(*table, LUT_MAX_ENTRIES + 1, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/qoriq-cpufreq.c b/drivers/cpufreq/qoriq-cpufreq.c
index 8d1f5ac59132..df560851ffa8 100644
--- a/drivers/cpufreq/qoriq-cpufreq.c
+++ b/drivers/cpufreq/qoriq-cpufreq.c
@@ -168,7 +168,7 @@ static int qoriq_cpufreq_cpu_init(struct cpufreq_policy *policy)
 	if (!np)
 		return -ENODEV;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		goto err_np;

@@ -181,11 +181,11 @@ static int qoriq_cpufreq_cpu_init(struct cpufreq_policy *policy)
 	hwclk = __clk_get_hw(policy->clk);
 	count = clk_hw_get_num_parents(hwclk);

-	data->pclk = kcalloc(count, sizeof(struct clk *), GFP_KERNEL);
+	data->pclk = kzalloc_objs(struct clk *, count, GFP_KERNEL);
 	if (!data->pclk)
 		goto err_nomem2;

-	table = kcalloc(count + 1, sizeof(*table), GFP_KERNEL);
+	table = kzalloc_objs(*table, count + 1, GFP_KERNEL);
 	if (!table)
 		goto err_pclk;

diff --git a/drivers/cpufreq/scmi-cpufreq.c b/drivers/cpufreq/scmi-cpufreq.c
index c7a3b038385b..9c0a903f4fb0 100644
--- a/drivers/cpufreq/scmi-cpufreq.c
+++ b/drivers/cpufreq/scmi-cpufreq.c
@@ -214,7 +214,7 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy)
 	if (domain < 0)
 		return domain;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/scpi-cpufreq.c b/drivers/cpufreq/scpi-cpufreq.c
index e530345baddf..1799e40596b7 100644
--- a/drivers/cpufreq/scpi-cpufreq.c
+++ b/drivers/cpufreq/scpi-cpufreq.c
@@ -128,7 +128,7 @@ static int scpi_cpufreq_init(struct cpufreq_policy *policy)
 		goto out_free_opp;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		ret = -ENOMEM;
 		goto out_free_opp;
diff --git a/drivers/cpufreq/sparc-us2e-cpufreq.c b/drivers/cpufreq/sparc-us2e-cpufreq.c
index 15899dd77c08..6c26cf0a7f64 100644
--- a/drivers/cpufreq/sparc-us2e-cpufreq.c
+++ b/drivers/cpufreq/sparc-us2e-cpufreq.c
@@ -323,8 +323,8 @@ static int __init us2e_freq_init(void)
 	impl  = ((ver >> 32) & 0xffff);

 	if (manuf == 0x17 && impl == 0x13) {
-		us2e_freq_table = kcalloc(NR_CPUS, sizeof(*us2e_freq_table),
-					  GFP_KERNEL);
+		us2e_freq_table = kzalloc_objs(*us2e_freq_table, NR_CPUS,
+					       GFP_KERNEL);
 		if (!us2e_freq_table)
 			return -ENOMEM;

diff --git a/drivers/cpufreq/sparc-us3-cpufreq.c b/drivers/cpufreq/sparc-us3-cpufreq.c
index de50a2f3b124..ae0f4f92c610 100644
--- a/drivers/cpufreq/sparc-us3-cpufreq.c
+++ b/drivers/cpufreq/sparc-us3-cpufreq.c
@@ -171,8 +171,8 @@ static int __init us3_freq_init(void)
 	     impl == CHEETAH_PLUS_IMPL ||
 	     impl == JAGUAR_IMPL ||
 	     impl == PANTHER_IMPL)) {
-		us3_freq_table = kcalloc(NR_CPUS, sizeof(*us3_freq_table),
-					 GFP_KERNEL);
+		us3_freq_table = kzalloc_objs(*us3_freq_table, NR_CPUS,
+					      GFP_KERNEL);
 		if (!us3_freq_table)
 			return -ENOMEM;

diff --git a/drivers/cpufreq/spear-cpufreq.c b/drivers/cpufreq/spear-cpufreq.c
index 2a1550e1aa21..9a52d8030449 100644
--- a/drivers/cpufreq/spear-cpufreq.c
+++ b/drivers/cpufreq/spear-cpufreq.c
@@ -191,7 +191,7 @@ static int spear_cpufreq_probe(struct platform_device *pdev)
 		goto out_put_node;
 	}

-	freq_tbl = kcalloc(cnt + 1, sizeof(*freq_tbl), GFP_KERNEL);
+	freq_tbl = kzalloc_objs(*freq_tbl, cnt + 1, GFP_KERNEL);
 	if (!freq_tbl) {
 		ret = -ENOMEM;
 		goto out_put_node;
diff --git a/drivers/cpufreq/sun50i-cpufreq-nvmem.c b/drivers/cpufreq/sun50i-cpufreq-nvmem.c
index 4fffc8e83692..f4e5a09103d2 100644
--- a/drivers/cpufreq/sun50i-cpufreq-nvmem.c
+++ b/drivers/cpufreq/sun50i-cpufreq-nvmem.c
@@ -244,8 +244,7 @@ static int sun50i_cpufreq_nvmem_probe(struct platform_device *pdev)
 	int speed;
 	int ret;

-	opp_tokens = kcalloc(num_possible_cpus(), sizeof(*opp_tokens),
-			     GFP_KERNEL);
+	opp_tokens = kzalloc_objs(*opp_tokens, num_possible_cpus(), GFP_KERNEL);
 	if (!opp_tokens)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/tegra186-cpufreq.c b/drivers/cpufreq/tegra186-cpufreq.c
index 34ed943c5f34..5c2f134f8033 100644
--- a/drivers/cpufreq/tegra186-cpufreq.c
+++ b/drivers/cpufreq/tegra186-cpufreq.c
@@ -135,7 +135,7 @@ static int tegra_cpufreq_init_cpufreq_table(struct cpufreq_policy *policy,
 		dev_pm_opp_disable(cpu_dev, rate);
 	}

-	freq_table = kcalloc((max_opps + 1), sizeof(*freq_table), GFP_KERNEL);
+	freq_table = kzalloc_objs(*freq_table, (max_opps + 1), GFP_KERNEL);
 	if (!freq_table)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/tegra194-cpufreq.c b/drivers/cpufreq/tegra194-cpufreq.c
index 695599e1001f..22f51dc2fa67 100644
--- a/drivers/cpufreq/tegra194-cpufreq.c
+++ b/drivers/cpufreq/tegra194-cpufreq.c
@@ -463,7 +463,7 @@ static int tegra_cpufreq_init_cpufreq_table(struct cpufreq_policy *policy,
 		return ret;
 	}

-	freq_table = kcalloc((max_opps + 1), sizeof(*freq_table), GFP_KERNEL);
+	freq_table = kzalloc_objs(*freq_table, (max_opps + 1), GFP_KERNEL);
 	if (!freq_table)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/vexpress-spc-cpufreq.c b/drivers/cpufreq/vexpress-spc-cpufreq.c
index 65fea47b82e6..894f801b1b41 100644
--- a/drivers/cpufreq/vexpress-spc-cpufreq.c
+++ b/drivers/cpufreq/vexpress-spc-cpufreq.c
@@ -252,7 +252,7 @@ static int merge_cluster_tables(void)
 	for (i = 0; i < MAX_CLUSTERS; i++)
 		count += get_table_count(freq_table[i]);

-	table = kcalloc(count, sizeof(*table), GFP_KERNEL);
+	table = kzalloc_objs(*table, count, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

diff --git a/drivers/cpufreq/virtual-cpufreq.c b/drivers/cpufreq/virtual-cpufreq.c
index 6ffa16d239b2..92da4d5606e1 100644
--- a/drivers/cpufreq/virtual-cpufreq.c
+++ b/drivers/cpufreq/virtual-cpufreq.c
@@ -171,7 +171,7 @@ static int virt_cpufreq_get_freq_info(struct cpufreq_policy *policy)
 		return 0;
 	}

-	table = kcalloc(num_perftbl_entries + 1, sizeof(*table), GFP_KERNEL);
+	table = kzalloc_objs(*table, num_perftbl_entries + 1, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

diff --git a/drivers/cpuidle/coupled.c b/drivers/cpuidle/coupled.c
index bb8761c8a42e..e22df988bb07 100644
--- a/drivers/cpuidle/coupled.c
+++ b/drivers/cpuidle/coupled.c
@@ -651,7 +651,7 @@ int cpuidle_coupled_register_device(struct cpuidle_device *dev)
 	}

 	/* No existing coupled info found, create a new one */
-	coupled = kzalloc(sizeof(struct cpuidle_coupled), GFP_KERNEL);
+	coupled = kzalloc_obj(struct cpuidle_coupled, GFP_KERNEL);
 	if (!coupled)
 		return -ENOMEM;

diff --git a/drivers/cpuidle/cpuidle-psci-domain.c b/drivers/cpuidle/cpuidle-psci-domain.c
index 37c41209eaf9..a53ad31f9b3d 100644
--- a/drivers/cpuidle/cpuidle-psci-domain.c
+++ b/drivers/cpuidle/cpuidle-psci-domain.c
@@ -55,7 +55,7 @@ static int psci_pd_init(struct device_node *np, bool use_osi)
 	if (!pd)
 		goto out;

-	pd_provider = kzalloc(sizeof(*pd_provider), GFP_KERNEL);
+	pd_provider = kzalloc_obj(*pd_provider, GFP_KERNEL);
 	if (!pd_provider)
 		goto free_pd;

diff --git a/drivers/cpuidle/cpuidle-riscv-sbi.c b/drivers/cpuidle/cpuidle-riscv-sbi.c
index 19be6475d356..875c4697b953 100644
--- a/drivers/cpuidle/cpuidle-riscv-sbi.c
+++ b/drivers/cpuidle/cpuidle-riscv-sbi.c
@@ -380,7 +380,7 @@ static int sbi_pd_init(struct device_node *np)
 	if (!pd)
 		goto out;

-	pd_provider = kzalloc(sizeof(*pd_provider), GFP_KERNEL);
+	pd_provider = kzalloc_obj(*pd_provider, GFP_KERNEL);
 	if (!pd_provider)
 		goto free_pd;

diff --git a/drivers/cpuidle/dt_idle_genpd.c b/drivers/cpuidle/dt_idle_genpd.c
index 203e9b754aea..6b1f6d4686a7 100644
--- a/drivers/cpuidle/dt_idle_genpd.c
+++ b/drivers/cpuidle/dt_idle_genpd.c
@@ -95,7 +95,7 @@ struct generic_pm_domain *dt_idle_pd_alloc(struct device_node *np,
 	struct genpd_power_state *states = NULL;
 	int ret, state_count = 0;

-	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+	pd = kzalloc_obj(*pd, GFP_KERNEL);
 	if (!pd)
 		goto out;

diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c
index 61de64817604..abee6f73a6e1 100644
--- a/drivers/cpuidle/sysfs.c
+++ b/drivers/cpuidle/sysfs.c
@@ -482,7 +482,7 @@ static int cpuidle_add_state_sysfs(struct cpuidle_device *device)

 	/* state statistics */
 	for (i = 0; i < drv->state_count; i++) {
-		kobj = kzalloc(sizeof(struct cpuidle_state_kobj), GFP_KERNEL);
+		kobj = kzalloc_obj(struct cpuidle_state_kobj, GFP_KERNEL);
 		if (!kobj) {
 			ret = -ENOMEM;
 			goto error_state;
@@ -618,7 +618,7 @@ static int cpuidle_add_driver_sysfs(struct cpuidle_device *dev)
 	struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev);
 	int ret;

-	kdrv = kzalloc(sizeof(*kdrv), GFP_KERNEL);
+	kdrv = kzalloc_obj(*kdrv, GFP_KERNEL);
 	if (!kdrv)
 		return -ENOMEM;

@@ -712,7 +712,7 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev)
 	if (!cpu_dev)
 		return -ENODEV;

-	kdev = kzalloc(sizeof(*kdev), GFP_KERNEL);
+	kdev = kzalloc_obj(*kdev, GFP_KERNEL);
 	if (!kdev)
 		return -ENOMEM;
 	kdev->dev = dev;
diff --git a/drivers/crypto/amcc/crypto4xx_core.c b/drivers/crypto/amcc/crypto4xx_core.c
index 8cdc66d520c9..772509993079 100644
--- a/drivers/crypto/amcc/crypto4xx_core.c
+++ b/drivers/crypto/amcc/crypto4xx_core.c
@@ -173,8 +173,8 @@ static u32 crypto4xx_build_pdr(struct crypto4xx_device *dev)
 	if (!dev->pdr)
 		return -ENOMEM;

-	dev->pdr_uinfo = kcalloc(PPC4XX_NUM_PD, sizeof(struct pd_uinfo),
-				 GFP_KERNEL);
+	dev->pdr_uinfo = kzalloc_objs(struct pd_uinfo, PPC4XX_NUM_PD,
+				      GFP_KERNEL);
 	if (!dev->pdr_uinfo) {
 		dma_free_coherent(dev->core_dev->device,
 				  sizeof(struct ce_pd) * PPC4XX_NUM_PD,
@@ -974,7 +974,7 @@ static int crypto4xx_register_alg(struct crypto4xx_device *sec_dev,
 	int rc = 0;

 	for (i = 0; i < array_size; i++) {
-		alg = kzalloc(sizeof(struct crypto4xx_alg), GFP_KERNEL);
+		alg = kzalloc_obj(struct crypto4xx_alg, GFP_KERNEL);
 		if (!alg)
 			return -ENOMEM;

diff --git a/drivers/crypto/amcc/crypto4xx_trng.c b/drivers/crypto/amcc/crypto4xx_trng.c
index f10a87e541ed..6738cdbaded9 100644
--- a/drivers/crypto/amcc/crypto4xx_trng.c
+++ b/drivers/crypto/amcc/crypto4xx_trng.c
@@ -87,7 +87,7 @@ void ppc4xx_trng_probe(struct crypto4xx_core_device *core_dev)
 	if (!dev->trng_base)
 		goto err_out;

-	rng = kzalloc(sizeof(*rng), GFP_KERNEL);
+	rng = kzalloc_obj(*rng, GFP_KERNEL);
 	if (!rng)
 		goto err_out;

diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c
index 0d48e64d28b1..d19694400693 100644
--- a/drivers/crypto/atmel-ecc.c
+++ b/drivers/crypto/atmel-ecc.c
@@ -99,7 +99,7 @@ static int atmel_ecdh_set_secret(struct crypto_kpp *tfm, const void *buf,
 		return crypto_kpp_set_secret(ctx->fallback, buf, len);
 	}

-	cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kmalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -182,7 +182,7 @@ static int atmel_ecdh_compute_shared_secret(struct kpp_request *req)
 	gfp = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ? GFP_KERNEL :
 							     GFP_ATOMIC;

-	work_data = kmalloc(sizeof(*work_data), gfp);
+	work_data = kmalloc_obj(*work_data, gfp);
 	if (!work_data)
 		return -ENOMEM;

diff --git a/drivers/crypto/atmel-i2c.c b/drivers/crypto/atmel-i2c.c
index 9688d116d07e..27dd37997872 100644
--- a/drivers/crypto/atmel-i2c.c
+++ b/drivers/crypto/atmel-i2c.c
@@ -321,7 +321,7 @@ static int device_sanity_check(struct i2c_client *client)
 	struct atmel_i2c_cmd *cmd;
 	int ret;

-	cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kmalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/crypto/atmel-sha.c b/drivers/crypto/atmel-sha.c
index b02a71061708..a925c7afbbdb 100644
--- a/drivers/crypto/atmel-sha.c
+++ b/drivers/crypto/atmel-sha.c
@@ -2207,7 +2207,7 @@ struct atmel_sha_authenc_ctx *atmel_sha_authenc_spawn(unsigned long mode)
 	tctx->start = atmel_sha_authenc_start;
 	tctx->flags = mode;

-	auth = kzalloc(sizeof(*auth), GFP_KERNEL);
+	auth = kzalloc_obj(*auth, GFP_KERNEL);
 	if (!auth) {
 		err = -ENOMEM;
 		goto err_free_ahash;
diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c
index 0fcf4a39de27..8adc7fe71c04 100644
--- a/drivers/crypto/atmel-sha204a.c
+++ b/drivers/crypto/atmel-sha204a.c
@@ -51,7 +51,7 @@ static int atmel_sha204a_rng_read_nonblocking(struct hwrng *rng, void *data,
 		memcpy(data, &work_data->cmd.data, max);
 		rng->priv = 0;
 	} else {
-		work_data = kmalloc(sizeof(*work_data), GFP_ATOMIC);
+		work_data = kmalloc_obj(*work_data, GFP_ATOMIC);
 		if (!work_data)
 			return -ENOMEM;

diff --git a/drivers/crypto/bcm/cipher.c b/drivers/crypto/bcm/cipher.c
index 6b80d033648e..2bce15dc0aa8 100644
--- a/drivers/crypto/bcm/cipher.c
+++ b/drivers/crypto/bcm/cipher.c
@@ -141,8 +141,7 @@ spu_skcipher_rx_sg_create(struct brcm_message *mssg,
 	struct iproc_ctx_s *ctx = rctx->ctx;
 	u32 datalen;		/* Number of bytes of response data expected */

-	mssg->spu.dst = kmalloc_array(rx_frag_num, sizeof(struct scatterlist),
-				      rctx->gfp);
+	mssg->spu.dst = kmalloc_objs(struct scatterlist, rx_frag_num, rctx->gfp);
 	if (!mssg->spu.dst)
 		return -ENOMEM;

@@ -205,8 +204,7 @@ spu_skcipher_tx_sg_create(struct brcm_message *mssg,
 	u32 datalen;		/* Number of bytes of response data expected */
 	u32 stat_len;

-	mssg->spu.src = kmalloc_array(tx_frag_num, sizeof(struct scatterlist),
-				      rctx->gfp);
+	mssg->spu.src = kmalloc_objs(struct scatterlist, tx_frag_num, rctx->gfp);
 	if (unlikely(!mssg->spu.src))
 		return -ENOMEM;

@@ -532,8 +530,7 @@ spu_ahash_rx_sg_create(struct brcm_message *mssg,
 	struct scatterlist *sg;	/* used to build sgs in mbox message */
 	struct iproc_ctx_s *ctx = rctx->ctx;

-	mssg->spu.dst = kmalloc_array(rx_frag_num, sizeof(struct scatterlist),
-				      rctx->gfp);
+	mssg->spu.dst = kmalloc_objs(struct scatterlist, rx_frag_num, rctx->gfp);
 	if (!mssg->spu.dst)
 		return -ENOMEM;

@@ -587,8 +584,7 @@ spu_ahash_tx_sg_create(struct brcm_message *mssg,
 	u32 datalen;		/* Number of bytes of response data expected */
 	u32 stat_len;

-	mssg->spu.src = kmalloc_array(tx_frag_num, sizeof(struct scatterlist),
-				      rctx->gfp);
+	mssg->spu.src = kmalloc_objs(struct scatterlist, tx_frag_num, rctx->gfp);
 	if (!mssg->spu.src)
 		return -ENOMEM;

@@ -1077,8 +1073,7 @@ static int spu_aead_rx_sg_create(struct brcm_message *mssg,
 		/* have to catch gcm pad in separate buffer */
 		rx_frag_num++;

-	mssg->spu.dst = kmalloc_array(rx_frag_num, sizeof(struct scatterlist),
-				      rctx->gfp);
+	mssg->spu.dst = kmalloc_objs(struct scatterlist, rx_frag_num, rctx->gfp);
 	if (!mssg->spu.dst)
 		return -ENOMEM;

@@ -1179,8 +1174,7 @@ static int spu_aead_tx_sg_create(struct brcm_message *mssg,
 	u32 assoc_offset = 0;
 	u32 stat_len;

-	mssg->spu.src = kmalloc_array(tx_frag_num, sizeof(struct scatterlist),
-				      rctx->gfp);
+	mssg->spu.src = kmalloc_objs(struct scatterlist, tx_frag_num, rctx->gfp);
 	if (!mssg->spu.src)
 		return -ENOMEM;

diff --git a/drivers/crypto/caam/caamalg_qi2.c b/drivers/crypto/caam/caamalg_qi2.c
index c6117c23eb25..810917475c4f 100644
--- a/drivers/crypto/caam/caamalg_qi2.c
+++ b/drivers/crypto/caam/caamalg_qi2.c
@@ -3224,14 +3224,14 @@ static int hash_digest_key(struct caam_hash_ctx *ctx, u32 *keylen, u8 *key,
 	int ret = -ENOMEM;
 	struct dpaa2_fl_entry *in_fle, *out_fle;

-	req_ctx = kzalloc(sizeof(*req_ctx), GFP_KERNEL);
+	req_ctx = kzalloc_obj(*req_ctx, GFP_KERNEL);
 	if (!req_ctx)
 		return -ENOMEM;

 	in_fle = &req_ctx->fd_flt[1];
 	out_fle = &req_ctx->fd_flt[0];

-	flc = kzalloc(sizeof(*flc), GFP_KERNEL);
+	flc = kzalloc_obj(*flc, GFP_KERNEL);
 	if (!flc)
 		goto err_flc;

@@ -4635,7 +4635,7 @@ static struct caam_hash_alg *caam_hash_alloc(struct device *dev,
 	struct ahash_alg *halg;
 	struct crypto_alg *alg;

-	t_alg = kzalloc(sizeof(*t_alg), GFP_KERNEL);
+	t_alg = kzalloc_obj(*t_alg, GFP_KERNEL);
 	if (!t_alg)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
index 25c02e267258..cee9034aa87b 100644
--- a/drivers/crypto/caam/caamhash.c
+++ b/drivers/crypto/caam/caamhash.c
@@ -709,7 +709,7 @@ static struct ahash_edesc *ahash_edesc_alloc(struct ahash_request *req,
 	struct ahash_edesc *edesc;

 	sg_num = pad_sg_nents(sg_num);
-	edesc = kzalloc(struct_size(edesc, sec4_sg, sg_num), flags);
+	edesc = kzalloc_flex(*edesc, sec4_sg, sg_num, flags);
 	if (!edesc)
 		return NULL;

@@ -1904,7 +1904,7 @@ caam_hash_alloc(struct caam_hash_template *template,
 	struct ahash_alg *halg;
 	struct crypto_alg *alg;

-	t_alg = kzalloc(sizeof(*t_alg), GFP_KERNEL);
+	t_alg = kzalloc_obj(*t_alg, GFP_KERNEL);
 	if (!t_alg)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/crypto/caam/qi.c b/drivers/crypto/caam/qi.c
index 1e731ed8702b..a4e1984053da 100644
--- a/drivers/crypto/caam/qi.c
+++ b/drivers/crypto/caam/qi.c
@@ -181,7 +181,7 @@ static struct qman_fq *create_caam_req_fq(struct device *qidev,
 	struct qman_fq *req_fq;
 	struct qm_mcc_initfq opts;

-	req_fq = kzalloc(sizeof(*req_fq), GFP_ATOMIC);
+	req_fq = kzalloc_obj(*req_fq, GFP_ATOMIC);
 	if (!req_fq)
 		return ERR_PTR(-ENOMEM);

@@ -416,7 +416,7 @@ struct caam_drv_ctx *caam_drv_ctx_init(struct device *qidev,
 		return ERR_PTR(-EINVAL);
 	}

-	drv_ctx = kzalloc(sizeof(*drv_ctx), GFP_ATOMIC);
+	drv_ctx = kzalloc_obj(*drv_ctx, GFP_ATOMIC);
 	if (!drv_ctx)
 		return ERR_PTR(-ENOMEM);

@@ -619,7 +619,7 @@ static int alloc_rsp_fq_cpu(struct device *qidev, unsigned int cpu)
 	struct qman_fq *fq;
 	int ret;

-	fq = kzalloc(sizeof(*fq), GFP_KERNEL);
+	fq = kzalloc_obj(*fq, GFP_KERNEL);
 	if (!fq)
 		return -ENOMEM;

diff --git a/drivers/crypto/cavium/cpt/cptvf_main.c b/drivers/crypto/cavium/cpt/cptvf_main.c
index bccd680c7f7e..41084767c577 100644
--- a/drivers/crypto/cavium/cpt/cptvf_main.c
+++ b/drivers/crypto/cavium/cpt/cptvf_main.c
@@ -35,7 +35,7 @@ static int init_worker_threads(struct cpt_vf *cptvf)
 	struct cptvf_wqe_info *cwqe_info;
 	int i;

-	cwqe_info = kzalloc(sizeof(*cwqe_info), GFP_KERNEL);
+	cwqe_info = kzalloc_obj(*cwqe_info, GFP_KERNEL);
 	if (!cwqe_info)
 		return -ENOMEM;

@@ -111,7 +111,7 @@ static int alloc_pending_queues(struct pending_qinfo *pqinfo, u32 qlen,
 	pqinfo->qlen = qlen;

 	for_each_pending_queue(pqinfo, queue, i) {
-		queue->head = kcalloc(qlen, sizeof(*queue->head), GFP_KERNEL);
+		queue->head = kzalloc_objs(*queue->head, qlen, GFP_KERNEL);
 		if (!queue->head) {
 			ret = -ENOMEM;
 			goto pending_qfail;
@@ -225,7 +225,7 @@ static int alloc_command_queues(struct cpt_vf *cptvf,
 		queue = &cqinfo->queue[i];
 		INIT_HLIST_HEAD(&cqinfo->queue[i].chead);
 		do {
-			curr = kzalloc(sizeof(*curr), GFP_KERNEL);
+			curr = kzalloc_obj(*curr, GFP_KERNEL);
 			if (!curr)
 				goto cmd_qfail;

diff --git a/drivers/crypto/cavium/cpt/cptvf_reqmanager.c b/drivers/crypto/cavium/cpt/cptvf_reqmanager.c
index fb59bb282455..e183b60277ff 100644
--- a/drivers/crypto/cavium/cpt/cptvf_reqmanager.c
+++ b/drivers/crypto/cavium/cpt/cptvf_reqmanager.c
@@ -417,7 +417,7 @@ int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req)
 	struct cpt_vq_command vq_cmd;
 	union cpt_inst_s cptinst;

-	info = kzalloc(sizeof(*info), req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
+	info = kzalloc_obj(*info, req->may_sleep ? GFP_KERNEL : GFP_ATOMIC);
 	if (unlikely(!info)) {
 		dev_err(&pdev->dev, "Unable to allocate memory for info_buffer\n");
 		return -ENOMEM;
diff --git a/drivers/crypto/cavium/nitrox/nitrox_isr.c b/drivers/crypto/cavium/nitrox/nitrox_isr.c
index f19e520da6d0..5ffb1aa90cba 100644
--- a/drivers/crypto/cavium/nitrox/nitrox_isr.c
+++ b/drivers/crypto/cavium/nitrox/nitrox_isr.c
@@ -320,7 +320,7 @@ int nitrox_register_interrupts(struct nitrox_device *ndev)
 	}
 	ndev->num_vecs = nr_vecs;

-	ndev->qvec = kcalloc(nr_vecs, sizeof(*qvec), GFP_KERNEL);
+	ndev->qvec = kzalloc_objs(*qvec, nr_vecs, GFP_KERNEL);
 	if (!ndev->qvec) {
 		pci_free_irq_vectors(pdev);
 		return -ENOMEM;
@@ -424,7 +424,7 @@ int nitrox_sriov_register_interupts(struct nitrox_device *ndev)
 		return ret;
 	}

-	qvec = kcalloc(NR_NON_RING_VECTORS, sizeof(*qvec), GFP_KERNEL);
+	qvec = kzalloc_objs(*qvec, NR_NON_RING_VECTORS, GFP_KERNEL);
 	if (!qvec) {
 		pci_disable_msix(pdev);
 		return -ENOMEM;
diff --git a/drivers/crypto/cavium/nitrox/nitrox_lib.c b/drivers/crypto/cavium/nitrox/nitrox_lib.c
index 068265207ddd..31eb8c874257 100644
--- a/drivers/crypto/cavium/nitrox/nitrox_lib.c
+++ b/drivers/crypto/cavium/nitrox/nitrox_lib.c
@@ -219,7 +219,7 @@ void *crypto_alloc_context(struct nitrox_device *ndev)
 	void *vaddr;
 	dma_addr_t dma;

-	chdr = kmalloc(sizeof(*chdr), GFP_KERNEL);
+	chdr = kmalloc_obj(*chdr, GFP_KERNEL);
 	if (!chdr)
 		return NULL;

diff --git a/drivers/crypto/cavium/nitrox/nitrox_main.c b/drivers/crypto/cavium/nitrox/nitrox_main.c
index 65114f766e7d..d0e1e34a7b8b 100644
--- a/drivers/crypto/cavium/nitrox/nitrox_main.c
+++ b/drivers/crypto/cavium/nitrox/nitrox_main.c
@@ -441,7 +441,7 @@ static int nitrox_probe(struct pci_dev *pdev,
 		goto flr_fail;
 	pci_set_master(pdev);

-	ndev = kzalloc(sizeof(*ndev), GFP_KERNEL);
+	ndev = kzalloc_obj(*ndev, GFP_KERNEL);
 	if (!ndev) {
 		err = -ENOMEM;
 		goto ndev_fail;
diff --git a/drivers/crypto/cavium/nitrox/nitrox_mbx.c b/drivers/crypto/cavium/nitrox/nitrox_mbx.c
index a6a76e50ba84..a9e290a23dfe 100644
--- a/drivers/crypto/cavium/nitrox/nitrox_mbx.c
+++ b/drivers/crypto/cavium/nitrox/nitrox_mbx.c
@@ -139,7 +139,7 @@ void nitrox_pf2vf_mbox_handler(struct nitrox_device *ndev)
 		vfdev->ring = i;
 		/* fill the vf mailbox data */
 		vfdev->msg.value = pf2vf_read_mbox(ndev, vfdev->ring);
-		pfwork = kzalloc(sizeof(*pfwork), GFP_ATOMIC);
+		pfwork = kzalloc_obj(*pfwork, GFP_ATOMIC);
 		if (!pfwork)
 			continue;

@@ -163,7 +163,7 @@ void nitrox_pf2vf_mbox_handler(struct nitrox_device *ndev)
 		/* fill the vf mailbox data */
 		vfdev->msg.value = pf2vf_read_mbox(ndev, vfdev->ring);

-		pfwork = kzalloc(sizeof(*pfwork), GFP_ATOMIC);
+		pfwork = kzalloc_obj(*pfwork, GFP_ATOMIC);
 		if (!pfwork)
 			continue;

@@ -181,8 +181,8 @@ int nitrox_mbox_init(struct nitrox_device *ndev)
 	struct nitrox_vfdev *vfdev;
 	int i;

-	ndev->iov.vfdev = kcalloc(ndev->iov.num_vfs,
-				  sizeof(struct nitrox_vfdev), GFP_KERNEL);
+	ndev->iov.vfdev = kzalloc_objs(struct nitrox_vfdev, ndev->iov.num_vfs,
+				       GFP_KERNEL);
 	if (!ndev->iov.vfdev)
 		return -ENOMEM;

diff --git a/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c b/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c
index 55c18da4a500..6a1bdae73d1a 100644
--- a/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c
+++ b/drivers/crypto/cavium/nitrox/nitrox_reqmgr.c
@@ -390,7 +390,7 @@ int nitrox_process_se_request(struct nitrox_device *ndev,
 	if (!nitrox_ready(ndev))
 		return -ENODEV;

-	sr = kzalloc(sizeof(*sr), req->gfp);
+	sr = kzalloc_obj(*sr, req->gfp);
 	if (!sr)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
index 71480f7e6f6b..240bcfa26c62 100644
--- a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
+++ b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
@@ -354,7 +354,7 @@ int ccp_register_aes_cmac_algs(struct list_head *head)
 	struct crypto_alg *base;
 	int ret;

-	ccp_alg = kzalloc(sizeof(*ccp_alg), GFP_KERNEL);
+	ccp_alg = kzalloc_obj(*ccp_alg, GFP_KERNEL);
 	if (!ccp_alg)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/ccp-crypto-aes-galois.c b/drivers/crypto/ccp/ccp-crypto-aes-galois.c
index b1dbb8cea559..db5c498f379b 100644
--- a/drivers/crypto/ccp/ccp-crypto-aes-galois.c
+++ b/drivers/crypto/ccp/ccp-crypto-aes-galois.c
@@ -212,7 +212,7 @@ static int ccp_register_aes_aead(struct list_head *head,
 	struct aead_alg *alg;
 	int ret;

-	ccp_aead = kzalloc(sizeof(*ccp_aead), GFP_KERNEL);
+	ccp_aead = kzalloc_obj(*ccp_aead, GFP_KERNEL);
 	if (!ccp_aead)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/ccp-crypto-aes-xts.c b/drivers/crypto/ccp/ccp-crypto-aes-xts.c
index 93f735d6b02b..5cd8c2d270c3 100644
--- a/drivers/crypto/ccp/ccp-crypto-aes-xts.c
+++ b/drivers/crypto/ccp/ccp-crypto-aes-xts.c
@@ -231,7 +231,7 @@ static int ccp_register_aes_xts_alg(struct list_head *head,
 	struct skcipher_alg *alg;
 	int ret;

-	ccp_alg = kzalloc(sizeof(*ccp_alg), GFP_KERNEL);
+	ccp_alg = kzalloc_obj(*ccp_alg, GFP_KERNEL);
 	if (!ccp_alg)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/ccp-crypto-aes.c b/drivers/crypto/ccp/ccp-crypto-aes.c
index 685d42ec7ade..97ce93434953 100644
--- a/drivers/crypto/ccp/ccp-crypto-aes.c
+++ b/drivers/crypto/ccp/ccp-crypto-aes.c
@@ -294,7 +294,7 @@ static int ccp_register_aes_alg(struct list_head *head,
 	struct skcipher_alg *alg;
 	int ret;

-	ccp_alg = kzalloc(sizeof(*ccp_alg), GFP_KERNEL);
+	ccp_alg = kzalloc_obj(*ccp_alg, GFP_KERNEL);
 	if (!ccp_alg)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/ccp-crypto-des3.c b/drivers/crypto/ccp/ccp-crypto-des3.c
index 91b1189c47de..8c0f903c3330 100644
--- a/drivers/crypto/ccp/ccp-crypto-des3.c
+++ b/drivers/crypto/ccp/ccp-crypto-des3.c
@@ -182,7 +182,7 @@ static int ccp_register_des3_alg(struct list_head *head,
 	struct skcipher_alg *alg;
 	int ret;

-	ccp_alg = kzalloc(sizeof(*ccp_alg), GFP_KERNEL);
+	ccp_alg = kzalloc_obj(*ccp_alg, GFP_KERNEL);
 	if (!ccp_alg)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/ccp-crypto-main.c b/drivers/crypto/ccp/ccp-crypto-main.c
index bc90aba5162a..698e39ab107f 100644
--- a/drivers/crypto/ccp/ccp-crypto-main.c
+++ b/drivers/crypto/ccp/ccp-crypto-main.c
@@ -275,7 +275,7 @@ int ccp_crypto_enqueue_request(struct crypto_async_request *req,

 	gfp = req->flags & CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL : GFP_ATOMIC;

-	crypto_cmd = kzalloc(sizeof(*crypto_cmd), gfp);
+	crypto_cmd = kzalloc_obj(*crypto_cmd, gfp);
 	if (!crypto_cmd)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/ccp-crypto-rsa.c b/drivers/crypto/ccp/ccp-crypto-rsa.c
index a14f85512cf4..80d9ddc1f644 100644
--- a/drivers/crypto/ccp/ccp-crypto-rsa.c
+++ b/drivers/crypto/ccp/ccp-crypto-rsa.c
@@ -249,7 +249,7 @@ static int ccp_register_rsa_alg(struct list_head *head,
 	struct akcipher_alg *alg;
 	int ret;

-	ccp_alg = kzalloc(sizeof(*ccp_alg), GFP_KERNEL);
+	ccp_alg = kzalloc_obj(*ccp_alg, GFP_KERNEL);
 	if (!ccp_alg)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/ccp-crypto-sha.c b/drivers/crypto/ccp/ccp-crypto-sha.c
index fa3ae8e78f6f..91d0d8ea182b 100644
--- a/drivers/crypto/ccp/ccp-crypto-sha.c
+++ b/drivers/crypto/ccp/ccp-crypto-sha.c
@@ -418,7 +418,7 @@ static int ccp_register_hmac_alg(struct list_head *head,
 	struct crypto_alg *base;
 	int ret;

-	ccp_alg = kzalloc(sizeof(*ccp_alg), GFP_KERNEL);
+	ccp_alg = kzalloc_obj(*ccp_alg, GFP_KERNEL);
 	if (!ccp_alg)
 		return -ENOMEM;

@@ -462,7 +462,7 @@ static int ccp_register_sha_alg(struct list_head *head,
 	struct crypto_alg *base;
 	int ret;

-	ccp_alg = kzalloc(sizeof(*ccp_alg), GFP_KERNEL);
+	ccp_alg = kzalloc_obj(*ccp_alg, GFP_KERNEL);
 	if (!ccp_alg)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/ccp-ops.c b/drivers/crypto/ccp/ccp-ops.c
index d0412e584762..0170edef5b43 100644
--- a/drivers/crypto/ccp/ccp-ops.c
+++ b/drivers/crypto/ccp/ccp-ops.c
@@ -642,7 +642,7 @@ ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
 		struct ccp_data dst;
 		struct ccp_data aad;
 		struct ccp_op op;
-	} *wa __free(kfree) = kzalloc(sizeof(*wa), GFP_KERNEL);
+	} *wa __free(kfree) = kzalloc_obj(*wa, GFP_KERNEL);
 	unsigned int dm_offset;
 	unsigned int authsize;
 	unsigned int jobid;
diff --git a/drivers/crypto/ccp/hsti.c b/drivers/crypto/ccp/hsti.c
index 4b44729a019e..404829c41a13 100644
--- a/drivers/crypto/ccp/hsti.c
+++ b/drivers/crypto/ccp/hsti.c
@@ -87,7 +87,7 @@ static int psp_populate_hsti(struct psp_device *psp)
 		return 0;

 	/* Allocate command-response buffer */
-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/crypto/ccp/sev-dev-tio.c b/drivers/crypto/ccp/sev-dev-tio.c
index 9a98f98c20a7..d51bb67460b0 100644
--- a/drivers/crypto/ccp/sev-dev-tio.c
+++ b/drivers/crypto/ccp/sev-dev-tio.c
@@ -330,7 +330,7 @@ static struct sla_buffer_hdr *sla_buffer_map(struct sla_addr_t sla)
 		if (WARN_ON_ONCE(!npages))
 			return NULL;

-		struct page **pp = kmalloc_array(npages, sizeof(pp[0]), GFP_KERNEL);
+		struct page **pp = kmalloc_objs(pp[0], npages, GFP_KERNEL);

 		if (!pp)
 			return NULL;
diff --git a/drivers/crypto/ccp/sev-dev-tsm.c b/drivers/crypto/ccp/sev-dev-tsm.c
index 3cdc38e84500..a3e7a9bca95b 100644
--- a/drivers/crypto/ccp/sev-dev-tsm.c
+++ b/drivers/crypto/ccp/sev-dev-tsm.c
@@ -207,7 +207,7 @@ static int stream_alloc(struct pci_dev *pdev, struct pci_ide **ide,

 static struct pci_tsm *tio_pf0_probe(struct pci_dev *pdev, struct sev_device *sev)
 {
-	struct tio_dsm *dsm __free(kfree) = kzalloc(sizeof(*dsm), GFP_KERNEL);
+	struct tio_dsm *dsm __free(kfree) = kzalloc_obj(*dsm, GFP_KERNEL);
 	int rc;

 	if (!dsm)
@@ -341,7 +341,7 @@ static struct pci_tsm_ops sev_tsm_ops = {

 void sev_tsm_init_locked(struct sev_device *sev, void *tio_status_page)
 {
-	struct sev_tio_status *t = kzalloc(sizeof(*t), GFP_KERNEL);
+	struct sev_tio_status *t = kzalloc_obj(*t, GFP_KERNEL);
 	struct tsm_dev *tsmdev;
 	int ret;

diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c
index 1cdadddb744e..4dc642ecde76 100644
--- a/drivers/crypto/ccp/sev-dev.c
+++ b/drivers/crypto/ccp/sev-dev.c
@@ -1144,7 +1144,7 @@ struct page *snp_alloc_hv_fixed_pages(unsigned int num_2mb_pages)
 	if (!page)
 		return NULL;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		__free_pages(page, order);
 		return NULL;
@@ -2658,7 +2658,7 @@ static int sev_misc_init(struct sev_device *sev)
 	if (!misc_dev) {
 		struct miscdevice *misc;

-		misc_dev = kzalloc(sizeof(*misc_dev), GFP_KERNEL);
+		misc_dev = kzalloc_obj(*misc_dev, GFP_KERNEL);
 		if (!misc_dev)
 			return -ENOMEM;

diff --git a/drivers/crypto/ccp/sfs.c b/drivers/crypto/ccp/sfs.c
index 2f4beaafe7ec..c98900672ea8 100644
--- a/drivers/crypto/ccp/sfs.c
+++ b/drivers/crypto/ccp/sfs.c
@@ -223,7 +223,7 @@ static int sfs_misc_init(struct sfs_device *sfs)
 	if (!misc_dev) {
 		struct miscdevice *misc;

-		misc_dev = kzalloc(sizeof(*misc_dev), GFP_KERNEL);
+		misc_dev = kzalloc_obj(*misc_dev, GFP_KERNEL);
 		if (!misc_dev)
 			return -ENOMEM;

diff --git a/drivers/crypto/ccp/tee-dev.c b/drivers/crypto/ccp/tee-dev.c
index 92ffa412622a..50716472586a 100644
--- a/drivers/crypto/ccp/tee-dev.c
+++ b/drivers/crypto/ccp/tee-dev.c
@@ -67,7 +67,7 @@ struct tee_init_ring_cmd *tee_alloc_cmd_buffer(struct psp_tee_device *tee)
 {
 	struct tee_init_ring_cmd *cmd;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return NULL;

diff --git a/drivers/crypto/ccree/cc_request_mgr.c b/drivers/crypto/ccree/cc_request_mgr.c
index 887162df50f9..31fc0d37db21 100644
--- a/drivers/crypto/ccree/cc_request_mgr.c
+++ b/drivers/crypto/ccree/cc_request_mgr.c
@@ -116,7 +116,7 @@ int cc_req_mgr_init(struct cc_drvdata *drvdata)
 	struct device *dev = drvdata_to_dev(drvdata);
 	int rc = 0;

-	req_mgr_h = kzalloc(sizeof(*req_mgr_h), GFP_KERNEL);
+	req_mgr_h = kzalloc_obj(*req_mgr_h, GFP_KERNEL);
 	if (!req_mgr_h) {
 		rc = -ENOMEM;
 		goto req_mgr_init_err;
@@ -426,7 +426,7 @@ int cc_send_request(struct cc_drvdata *drvdata, struct cc_crypto_req *cc_req,
 	if (rc == -ENOSPC && backlog_ok) {
 		spin_unlock_bh(&mgr->hw_lock);

-		bli = kmalloc(sizeof(*bli), flags);
+		bli = kmalloc_obj(*bli, flags);
 		if (!bli) {
 			cc_pm_put_suspend(dev);
 			return -ENOMEM;
diff --git a/drivers/crypto/chelsio/chcr_core.c b/drivers/crypto/chelsio/chcr_core.c
index 39c70e6255f9..a1a0034780c5 100644
--- a/drivers/crypto/chelsio/chcr_core.c
+++ b/drivers/crypto/chelsio/chcr_core.c
@@ -189,7 +189,7 @@ static void *chcr_uld_add(const struct cxgb4_lld_info *lld)
 		return ERR_PTR(-EOPNOTSUPP);

 	/* Create the device and add it in the device list */
-	u_ctx = kzalloc(sizeof(*u_ctx), GFP_KERNEL);
+	u_ctx = kzalloc_obj(*u_ctx, GFP_KERNEL);
 	if (!u_ctx) {
 		u_ctx = ERR_PTR(-ENOMEM);
 		goto out;
diff --git a/drivers/crypto/hifn_795x.c b/drivers/crypto/hifn_795x.c
index edf36f6add52..19f0bf3f3f92 100644
--- a/drivers/crypto/hifn_795x.c
+++ b/drivers/crypto/hifn_795x.c
@@ -2248,7 +2248,7 @@ static int hifn_alg_alloc(struct hifn_device *dev, const struct hifn_alg_templat
 	struct hifn_crypto_alg *alg;
 	int err;

-	alg = kzalloc(sizeof(*alg), GFP_KERNEL);
+	alg = kzalloc_obj(*alg, GFP_KERNEL);
 	if (!alg)
 		return -ENOMEM;

diff --git a/drivers/crypto/hisilicon/debugfs.c b/drivers/crypto/hisilicon/debugfs.c
index 17eb236e9ee4..b7c5c4ade11f 100644
--- a/drivers/crypto/hisilicon/debugfs.c
+++ b/drivers/crypto/hisilicon/debugfs.c
@@ -838,7 +838,7 @@ static struct dfx_diff_registers *dfx_regs_init(struct hisi_qm *qm,
 	u32 j, base_offset;
 	int i;

-	diff_regs = kcalloc(reg_len, sizeof(*diff_regs), GFP_KERNEL);
+	diff_regs = kzalloc_objs(*diff_regs, reg_len, GFP_KERNEL);
 	if (!diff_regs)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c
index 571d0d250242..07421f53a7ee 100644
--- a/drivers/crypto/hisilicon/qm.c
+++ b/drivers/crypto/hisilicon/qm.c
@@ -2722,7 +2722,7 @@ static int qm_hw_err_isolate(struct hisi_qm *qm)
 	if (qm->uacce->is_vf || isolate->is_isolate || !isolate->err_threshold)
 		return 0;

-	hw_err = kzalloc(sizeof(*hw_err), GFP_KERNEL);
+	hw_err = kzalloc_obj(*hw_err, GFP_KERNEL);
 	if (!hw_err)
 		return -ENOMEM;

@@ -3747,7 +3747,7 @@ static int hisi_qm_sort_devices(int node, struct list_head *head,
 		if (dev_node < 0)
 			dev_node = 0;

-		res = kzalloc(sizeof(*res), GFP_KERNEL);
+		res = kzalloc_obj(*res, GFP_KERNEL);
 		if (!res)
 			return -ENOMEM;

@@ -5767,11 +5767,12 @@ static int hisi_qp_alloc_memory(struct hisi_qm *qm)
 	size_t qp_dma_size;
 	int i, ret;

-	qm->qp_array = kcalloc(qm->qp_num, sizeof(struct hisi_qp), GFP_KERNEL);
+	qm->qp_array = kzalloc_objs(struct hisi_qp, qm->qp_num, GFP_KERNEL);
 	if (!qm->qp_array)
 		return -ENOMEM;

-	qm->poll_data = kcalloc(qm->qp_num, sizeof(struct hisi_qm_poll_data), GFP_KERNEL);
+	qm->poll_data = kzalloc_objs(struct hisi_qm_poll_data, qm->qp_num,
+				     GFP_KERNEL);
 	if (!qm->poll_data) {
 		kfree(qm->qp_array);
 		return -ENOMEM;
@@ -5836,7 +5837,8 @@ static int hisi_qm_memory_init(struct hisi_qm *qm)

 	if (test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps)) {
 		total_func = pci_sriov_get_totalvfs(qm->pdev) + 1;
-		qm->factor = kcalloc(total_func, sizeof(struct qm_shaper_factor), GFP_KERNEL);
+		qm->factor = kzalloc_objs(struct qm_shaper_factor, total_func,
+					  GFP_KERNEL);
 		if (!qm->factor)
 			return -ENOMEM;

diff --git a/drivers/crypto/hisilicon/sec/sec_algs.c b/drivers/crypto/hisilicon/sec/sec_algs.c
index 1189effcdad0..54e24fd7b9be 100644
--- a/drivers/crypto/hisilicon/sec/sec_algs.c
+++ b/drivers/crypto/hisilicon/sec/sec_algs.c
@@ -553,7 +553,7 @@ static int sec_alg_alloc_and_calc_split_sizes(int length, size_t **split_sizes,

 	/* Split into suitable sized blocks */
 	*steps = roundup(length, SEC_REQ_LIMIT) / SEC_REQ_LIMIT;
-	sizes = kcalloc(*steps, sizeof(*sizes), gfp);
+	sizes = kzalloc_objs(*sizes, *steps, gfp);
 	if (!sizes)
 		return -ENOMEM;

@@ -577,12 +577,12 @@ static int sec_map_and_split_sg(struct scatterlist *sgl, size_t *split_sizes,
 	if (!count)
 		return -EINVAL;

-	*splits = kcalloc(steps, sizeof(struct scatterlist *), gfp);
+	*splits = kzalloc_objs(struct scatterlist *, steps, gfp);
 	if (!*splits) {
 		ret = -ENOMEM;
 		goto err_unmap_sg;
 	}
-	*splits_nents = kcalloc(steps, sizeof(int), gfp);
+	*splits_nents = kzalloc_objs(int, steps, gfp);
 	if (!*splits_nents) {
 		ret = -ENOMEM;
 		goto err_free_splits;
@@ -637,7 +637,7 @@ static struct sec_request_el
 	struct sec_bd_info *req;
 	int ret;

-	el = kzalloc(sizeof(*el), gfp);
+	el = kzalloc_obj(*el, gfp);
 	if (!el)
 		return ERR_PTR(-ENOMEM);
 	el->el_length = el_size;
diff --git a/drivers/crypto/hisilicon/sec2/sec_crypto.c b/drivers/crypto/hisilicon/sec2/sec_crypto.c
index c462b58d3034..c8b71945f9f8 100644
--- a/drivers/crypto/hisilicon/sec2/sec_crypto.c
+++ b/drivers/crypto/hisilicon/sec2/sec_crypto.c
@@ -569,11 +569,11 @@ static int sec_alloc_qp_ctx_resource(struct sec_ctx *ctx, struct sec_qp_ctx *qp_
 	struct device *dev = ctx->dev;
 	int ret = -ENOMEM;

-	qp_ctx->req_list = kcalloc(q_depth, sizeof(struct sec_req *), GFP_KERNEL);
+	qp_ctx->req_list = kzalloc_objs(struct sec_req *, q_depth, GFP_KERNEL);
 	if (!qp_ctx->req_list)
 		return ret;

-	qp_ctx->res = kcalloc(q_depth, sizeof(struct sec_alg_res), GFP_KERNEL);
+	qp_ctx->res = kzalloc_objs(struct sec_alg_res, q_depth, GFP_KERNEL);
 	if (!qp_ctx->res)
 		goto err_free_req_list;
 	qp_ctx->res->depth = q_depth;
@@ -672,8 +672,8 @@ static int sec_ctx_base_init(struct sec_ctx *ctx)
 	ctx->hlf_q_num = sec->ctx_q_num >> 1;

 	ctx->pbuf_supported = ctx->sec->iommu_used;
-	ctx->qp_ctx = kcalloc(sec->ctx_q_num, sizeof(struct sec_qp_ctx),
-			      GFP_KERNEL);
+	ctx->qp_ctx = kzalloc_objs(struct sec_qp_ctx, sec->ctx_q_num,
+				   GFP_KERNEL);
 	if (!ctx->qp_ctx) {
 		ret = -ENOMEM;
 		goto err_destroy_qps;
diff --git a/drivers/crypto/hisilicon/sec2/sec_main.c b/drivers/crypto/hisilicon/sec2/sec_main.c
index 7dd125f5f511..a4db14adc6da 100644
--- a/drivers/crypto/hisilicon/sec2/sec_main.c
+++ b/drivers/crypto/hisilicon/sec2/sec_main.c
@@ -420,7 +420,7 @@ struct hisi_qp **sec_create_qps(void)
 	u8 *type;
 	int ret;

-	qps = kcalloc(ctx_num, sizeof(struct hisi_qp *), GFP_KERNEL);
+	qps = kzalloc_objs(struct hisi_qp *, ctx_num, GFP_KERNEL);
 	if (!qps)
 		return NULL;

diff --git a/drivers/crypto/hisilicon/sgl.c b/drivers/crypto/hisilicon/sgl.c
index d41b34405c21..ab20665cbfbc 100644
--- a/drivers/crypto/hisilicon/sgl.c
+++ b/drivers/crypto/hisilicon/sgl.c
@@ -83,7 +83,7 @@ struct hisi_acc_sgl_pool *hisi_acc_create_sgl_pool(struct device *dev,
 	    (remain_sgl > 0 && block_num > HISI_ACC_MEM_BLOCK_NR - 1))
 		return ERR_PTR(-EINVAL);

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(-ENOMEM);
 	block = pool->mem_block;
diff --git a/drivers/crypto/hisilicon/zip/zip_crypto.c b/drivers/crypto/hisilicon/zip/zip_crypto.c
index 98a68e44ac34..0bb65e140809 100644
--- a/drivers/crypto/hisilicon/zip/zip_crypto.c
+++ b/drivers/crypto/hisilicon/zip/zip_crypto.c
@@ -479,8 +479,8 @@ static int hisi_zip_create_req_q(struct hisi_zip_ctx *ctx)
 		}
 		spin_lock_init(&req_q->req_lock);

-		req_q->q = kcalloc(req_q->size, sizeof(struct hisi_zip_req),
-				   GFP_KERNEL);
+		req_q->q = kzalloc_objs(struct hisi_zip_req, req_q->size,
+					GFP_KERNEL);
 		if (!req_q->q) {
 			ret = -ENOMEM;
 			if (i == 0)
diff --git a/drivers/crypto/inside-secure/eip93/eip93-aead.c b/drivers/crypto/inside-secure/eip93/eip93-aead.c
index 18dd8a9a5165..8d72644fdc74 100644
--- a/drivers/crypto/inside-secure/eip93/eip93-aead.c
+++ b/drivers/crypto/inside-secure/eip93/eip93-aead.c
@@ -70,7 +70,7 @@ static int eip93_aead_cra_init(struct crypto_tfm *tfm)
 	ctx->type = tmpl->type;
 	ctx->set_assoc = true;

-	ctx->sa_record = kzalloc(sizeof(*ctx->sa_record), GFP_KERNEL);
+	ctx->sa_record = kzalloc_obj(*ctx->sa_record, GFP_KERNEL);
 	if (!ctx->sa_record)
 		return -ENOMEM;

diff --git a/drivers/crypto/inside-secure/eip93/eip93-cipher.c b/drivers/crypto/inside-secure/eip93/eip93-cipher.c
index 1f2d6846610f..74f4abeba646 100644
--- a/drivers/crypto/inside-secure/eip93/eip93-cipher.c
+++ b/drivers/crypto/inside-secure/eip93/eip93-cipher.c
@@ -61,7 +61,7 @@ static int eip93_skcipher_cra_init(struct crypto_tfm *tfm)
 	ctx->eip93 = tmpl->eip93;
 	ctx->type = tmpl->type;

-	ctx->sa_record = kzalloc(sizeof(*ctx->sa_record), GFP_KERNEL);
+	ctx->sa_record = kzalloc_obj(*ctx->sa_record, GFP_KERNEL);
 	if (!ctx->sa_record)
 		return -ENOMEM;

diff --git a/drivers/crypto/inside-secure/eip93/eip93-common.c b/drivers/crypto/inside-secure/eip93/eip93-common.c
index 66153aa2493f..b19afd311c84 100644
--- a/drivers/crypto/inside-secure/eip93/eip93-common.c
+++ b/drivers/crypto/inside-secure/eip93/eip93-common.c
@@ -152,7 +152,7 @@ static int eip93_make_sg_copy(struct scatterlist *src, struct scatterlist **dst,
 {
 	void *pages;

-	*dst = kmalloc(sizeof(**dst), GFP_KERNEL);
+	*dst = kmalloc_obj(**dst, GFP_KERNEL);
 	if (!*dst)
 		return -ENOMEM;

diff --git a/drivers/crypto/inside-secure/eip93/eip93-hash.c b/drivers/crypto/inside-secure/eip93/eip93-hash.c
index ac13d90a2b7c..2705855475b2 100644
--- a/drivers/crypto/inside-secure/eip93/eip93-hash.c
+++ b/drivers/crypto/inside-secure/eip93/eip93-hash.c
@@ -332,7 +332,7 @@ static int __eip93_hash_update(struct ahash_request *req, bool complete_req)
 	 * and then reset to SHA256_BLOCK_SIZE.
 	 */
 	while (to_consume > max_read) {
-		block = kzalloc(sizeof(*block), GFP_ATOMIC);
+		block = kzalloc_obj(*block, GFP_ATOMIC);
 		if (!block) {
 			ret = -ENOMEM;
 			goto free_blocks;
diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c
index c3b2b22934b7..077da171fdf2 100644
--- a/drivers/crypto/inside-secure/safexcel.c
+++ b/drivers/crypto/inside-secure/safexcel.c
@@ -1889,7 +1889,7 @@ static int safexcel_pci_probe(struct pci_dev *pdev,
 		ent->vendor, ent->device, ent->subvendor,
 		ent->subdevice, ent->driver_data);

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/crypto/inside-secure/safexcel_hash.c b/drivers/crypto/inside-secure/safexcel_hash.c
index e534b7a200cf..f84def61ceb0 100644
--- a/drivers/crypto/inside-secure/safexcel_hash.c
+++ b/drivers/crypto/inside-secure/safexcel_hash.c
@@ -2008,7 +2008,7 @@ static int safexcel_xcbcmac_cra_init(struct crypto_tfm *tfm)
 	struct safexcel_ahash_ctx *ctx = crypto_tfm_ctx(tfm);

 	safexcel_ahash_cra_init(tfm);
-	ctx->aes = kmalloc(sizeof(*ctx->aes), GFP_KERNEL);
+	ctx->aes = kmalloc_obj(*ctx->aes, GFP_KERNEL);
 	return ctx->aes == NULL ? -ENOMEM : 0;
 }

diff --git a/drivers/crypto/intel/iaa/iaa_crypto_main.c b/drivers/crypto/intel/iaa/iaa_crypto_main.c
index f79ea22e9abe..bcd2bfcc19af 100644
--- a/drivers/crypto/intel/iaa/iaa_crypto_main.c
+++ b/drivers/crypto/intel/iaa/iaa_crypto_main.c
@@ -335,7 +335,7 @@ int add_iaa_compression_mode(const char *name,
 		goto out;
 	}

-	mode = kzalloc(sizeof(*mode), GFP_KERNEL);
+	mode = kzalloc_obj(*mode, GFP_KERNEL);
 	if (!mode)
 		goto out;

@@ -422,7 +422,7 @@ static int init_device_compression_mode(struct iaa_device *iaa_device,
 	struct iaa_device_compression_mode *device_mode;
 	int ret = -ENOMEM;

-	device_mode = kzalloc(sizeof(*device_mode), GFP_KERNEL);
+	device_mode = kzalloc_obj(*device_mode, GFP_KERNEL);
 	if (!device_mode)
 		return -ENOMEM;

@@ -503,7 +503,7 @@ static struct iaa_device *iaa_device_alloc(void)
 {
 	struct iaa_device *iaa_device;

-	iaa_device = kzalloc(sizeof(*iaa_device), GFP_KERNEL);
+	iaa_device = kzalloc_obj(*iaa_device, GFP_KERNEL);
 	if (!iaa_device)
 		return NULL;

@@ -561,7 +561,7 @@ static int add_iaa_wq(struct iaa_device *iaa_device, struct idxd_wq *wq,
 	struct device *dev = &pdev->dev;
 	struct iaa_wq *iaa_wq;

-	iaa_wq = kzalloc(sizeof(*iaa_wq), GFP_KERNEL);
+	iaa_wq = kzalloc_obj(*iaa_wq, GFP_KERNEL);
 	if (!iaa_wq)
 		return -ENOMEM;

@@ -718,7 +718,7 @@ static int alloc_wq_table(int max_wqs)

 	for (cpu = 0; cpu < nr_cpus; cpu++) {
 		entry = per_cpu_ptr(wq_table, cpu);
-		entry->wqs = kcalloc(max_wqs, sizeof(*entry->wqs), GFP_KERNEL);
+		entry->wqs = kzalloc_objs(*entry->wqs, max_wqs, GFP_KERNEL);
 		if (!entry->wqs) {
 			free_wq_table();
 			return -ENOMEM;
diff --git a/drivers/crypto/intel/keembay/ocs-hcu.c b/drivers/crypto/intel/keembay/ocs-hcu.c
index 55a41e6ab103..2c9e523361df 100644
--- a/drivers/crypto/intel/keembay/ocs-hcu.c
+++ b/drivers/crypto/intel/keembay/ocs-hcu.c
@@ -491,7 +491,7 @@ struct ocs_hcu_dma_list *ocs_hcu_dma_list_alloc(struct ocs_hcu_dev *hcu_dev,
 {
 	struct ocs_hcu_dma_list *dma_list;

-	dma_list = kmalloc(sizeof(*dma_list), GFP_KERNEL);
+	dma_list = kmalloc_obj(*dma_list, GFP_KERNEL);
 	if (!dma_list)
 		return NULL;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_accel_engine.c b/drivers/crypto/intel/qat/qat_common/adf_accel_engine.c
index 4b5d0350fc2e..935f4f9d8a7c 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_accel_engine.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_accel_engine.c
@@ -178,7 +178,7 @@ int adf_ae_init(struct adf_accel_dev *accel_dev)
 	if (!hw_device->fw_name)
 		return 0;

-	loader_data = kzalloc(sizeof(*loader_data), GFP_KERNEL);
+	loader_data = kzalloc_obj(*loader_data, GFP_KERNEL);
 	if (!loader_data)
 		return -ENOMEM;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_aer.c b/drivers/crypto/intel/qat/qat_common/adf_aer.c
index a5964fd8204c..a65e88d28f53 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_aer.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_aer.c
@@ -160,7 +160,7 @@ static int adf_dev_aer_schedule_reset(struct adf_accel_dev *accel_dev,
 		return 0;

 	set_bit(ADF_STATUS_RESTARTING, &accel_dev->status);
-	reset_data = kzalloc(sizeof(*reset_data), GFP_KERNEL);
+	reset_data = kzalloc_obj(*reset_data, GFP_KERNEL);
 	if (!reset_data)
 		return -ENOMEM;
 	reset_data->accel_dev = accel_dev;
@@ -258,7 +258,7 @@ int adf_notify_fatal_error(struct adf_accel_dev *accel_dev)
 {
 	struct adf_fatal_error_data *wq_data;

-	wq_data = kzalloc(sizeof(*wq_data), GFP_ATOMIC);
+	wq_data = kzalloc_obj(*wq_data, GFP_ATOMIC);
 	if (!wq_data)
 		return -ENOMEM;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_cfg.c b/drivers/crypto/intel/qat/qat_common/adf_cfg.c
index b0fc453fa3fb..c348d290fc51 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_cfg.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_cfg.c
@@ -68,7 +68,7 @@ int adf_cfg_dev_add(struct adf_accel_dev *accel_dev)
 {
 	struct adf_cfg_device_data *dev_cfg_data;

-	dev_cfg_data = kzalloc(sizeof(*dev_cfg_data), GFP_KERNEL);
+	dev_cfg_data = kzalloc_obj(*dev_cfg_data, GFP_KERNEL);
 	if (!dev_cfg_data)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&dev_cfg_data->sec_list);
@@ -289,7 +289,7 @@ int adf_cfg_add_key_value_param(struct adf_accel_dev *accel_dev,
 	if (!section)
 		return -EFAULT;

-	key_val = kzalloc(sizeof(*key_val), GFP_KERNEL);
+	key_val = kzalloc_obj(*key_val, GFP_KERNEL);
 	if (!key_val)
 		return -ENOMEM;

@@ -356,7 +356,7 @@ int adf_cfg_section_add(struct adf_accel_dev *accel_dev, const char *name)
 	if (sec)
 		return 0;

-	sec = kzalloc(sizeof(*sec), GFP_KERNEL);
+	sec = kzalloc_obj(*sec, GFP_KERNEL);
 	if (!sec)
 		return -ENOMEM;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_dev_mgr.c b/drivers/crypto/intel/qat/qat_common/adf_dev_mgr.c
index 34b9f7731c78..2068fe29a24c 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_dev_mgr.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_dev_mgr.c
@@ -172,7 +172,7 @@ int adf_devmgr_add_dev(struct adf_accel_dev *accel_dev,
 			goto unlock;
 		}
 		num_devices++;
-		map = kzalloc(sizeof(*map), GFP_KERNEL);
+		map = kzalloc_obj(*map, GFP_KERNEL);
 		if (!map) {
 			ret = -ENOMEM;
 			goto unlock;
@@ -204,7 +204,7 @@ int adf_devmgr_add_dev(struct adf_accel_dev *accel_dev,
 			goto unlock;
 		}

-		map = kzalloc(sizeof(*map), GFP_KERNEL);
+		map = kzalloc_obj(*map, GFP_KERNEL);
 		if (!map) {
 			ret = -ENOMEM;
 			goto unlock;
diff --git a/drivers/crypto/intel/qat/qat_common/adf_fw_counters.c b/drivers/crypto/intel/qat/qat_common/adf_fw_counters.c
index 98fb7ccfed9f..fe37f53f2d29 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_fw_counters.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_fw_counters.c
@@ -83,7 +83,8 @@ static struct adf_fw_counters *adf_fw_counters_allocate(unsigned long ae_count)
 	if (unlikely(!ae_count))
 		return ERR_PTR(-EINVAL);

-	fw_counters = kmalloc(struct_size(fw_counters, ae_counters, ae_count), GFP_KERNEL);
+	fw_counters = kmalloc_flex(*fw_counters, ae_counters, ae_count,
+				   GFP_KERNEL);
 	if (!fw_counters)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/crypto/intel/qat/qat_common/adf_gen4_pm.c b/drivers/crypto/intel/qat/qat_common/adf_gen4_pm.c
index 5dafd9a270db..efeb3d06b606 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_gen4_pm.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_gen4_pm.c
@@ -119,7 +119,7 @@ bool adf_gen4_handle_pm_interrupt(struct adf_accel_dev *accel_dev)

 	val = ADF_CSR_RD(pmisc, ADF_GEN4_PM_INTERRUPT);

-	pm_data = kzalloc(sizeof(*pm_data), GFP_ATOMIC);
+	pm_data = kzalloc_obj(*pm_data, GFP_ATOMIC);
 	if (!pm_data)
 		return false;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_gen4_vf_mig.c b/drivers/crypto/intel/qat/qat_common/adf_gen4_vf_mig.c
index adb21656a3ba..622da38ce385 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_gen4_vf_mig.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_gen4_vf_mig.c
@@ -59,7 +59,7 @@ static int adf_gen4_vfmig_open_device(struct qat_mig_dev *mdev)

 	vf_info = &accel_dev->pf.vf_info[mdev->vf_id];

-	vfmig = kzalloc(sizeof(*vfmig), GFP_KERNEL);
+	vfmig = kzalloc_obj(*vfmig, GFP_KERNEL);
 	if (!vfmig)
 		return -ENOMEM;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_heartbeat.c b/drivers/crypto/intel/qat/qat_common/adf_heartbeat.c
index b19aa1ef8eee..95a9efceda6d 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_heartbeat.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_heartbeat.c
@@ -281,7 +281,7 @@ int adf_heartbeat_init(struct adf_accel_dev *accel_dev)
 {
 	struct adf_heartbeat *hb;

-	hb = kzalloc(sizeof(*hb), GFP_KERNEL);
+	hb = kzalloc_obj(*hb, GFP_KERNEL);
 	if (!hb)
 		goto err_ret;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_mstate_mgr.c b/drivers/crypto/intel/qat/qat_common/adf_mstate_mgr.c
index 41cc763a74aa..1fbade552370 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_mstate_mgr.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_mstate_mgr.c
@@ -37,7 +37,7 @@ struct adf_mstate_mgr *adf_mstate_mgr_new(u8 *buf, u32 size)
 {
 	struct adf_mstate_mgr *mgr;

-	mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
+	mgr = kzalloc_obj(*mgr, GFP_KERNEL);
 	if (!mgr)
 		return NULL;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_rl.c b/drivers/crypto/intel/qat/qat_common/adf_rl.c
index c6a54e465931..2e037df286cc 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_rl.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_rl.c
@@ -622,7 +622,7 @@ static int add_new_sla_entry(struct adf_accel_dev *accel_dev,
 	struct rl_sla *sla;
 	int ret = 0;

-	sla = kzalloc(sizeof(*sla), GFP_KERNEL);
+	sla = kzalloc_obj(*sla, GFP_KERNEL);
 	if (!sla) {
 		ret = -ENOMEM;
 		goto ret_err;
@@ -1065,7 +1065,7 @@ int adf_rl_init(struct adf_accel_dev *accel_dev)
 		goto err_ret;
 	}

-	rl = kzalloc(sizeof(*rl), GFP_KERNEL);
+	rl = kzalloc_obj(*rl, GFP_KERNEL);
 	if (!rl) {
 		ret = -ENOMEM;
 		goto err_ret;
diff --git a/drivers/crypto/intel/qat/qat_common/adf_sriov.c b/drivers/crypto/intel/qat/qat_common/adf_sriov.c
index bb904ba4bf84..bacaa4a1a20d 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_sriov.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_sriov.c
@@ -40,7 +40,7 @@ void adf_schedule_vf2pf_handler(struct adf_accel_vf_info *vf_info)
 {
 	struct adf_pf2vf_resp *pf2vf_resp;

-	pf2vf_resp = kzalloc(sizeof(*pf2vf_resp), GFP_ATOMIC);
+	pf2vf_resp = kzalloc_obj(*pf2vf_resp, GFP_ATOMIC);
 	if (!pf2vf_resp)
 		return;

@@ -173,8 +173,8 @@ static int adf_do_enable_sriov(struct adf_accel_dev *accel_dev)
 		goto err_del_cfg;

 	/* Allocate memory for VF info structs */
-	accel_dev->pf.vf_info = kcalloc(totalvfs, sizeof(struct adf_accel_vf_info),
-					GFP_KERNEL);
+	accel_dev->pf.vf_info = kzalloc_objs(struct adf_accel_vf_info, totalvfs,
+					     GFP_KERNEL);
 	ret = -ENOMEM;
 	if (!accel_dev->pf.vf_info)
 		goto err_del_cfg;
diff --git a/drivers/crypto/intel/qat/qat_common/adf_telemetry.c b/drivers/crypto/intel/qat/qat_common/adf_telemetry.c
index b64142db1f0d..a745c1ca4048 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_telemetry.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_telemetry.c
@@ -75,9 +75,8 @@ static int adf_tl_alloc_mem(struct adf_accel_dev *accel_dev)
 	if (!telemetry->rp_num_indexes)
 		goto err_free_tl;

-	telemetry->regs_hist_buff = kmalloc_array(tl_data->num_hbuff,
-						  sizeof(*telemetry->regs_hist_buff),
-						  GFP_KERNEL);
+	telemetry->regs_hist_buff = kmalloc_objs(*telemetry->regs_hist_buff,
+						 tl_data->num_hbuff, GFP_KERNEL);
 	if (!telemetry->regs_hist_buff)
 		goto err_free_rp_indexes;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_timer.c b/drivers/crypto/intel/qat/qat_common/adf_timer.c
index 8962a49f145a..3f5267c98ff3 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_timer.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_timer.c
@@ -40,7 +40,7 @@ int adf_timer_start(struct adf_accel_dev *accel_dev)
 {
 	struct adf_timer *timer_ctx;

-	timer_ctx = kzalloc(sizeof(*timer_ctx), GFP_KERNEL);
+	timer_ctx = kzalloc_obj(*timer_ctx, GFP_KERNEL);
 	if (!timer_ctx)
 		return -ENOMEM;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_transport_debug.c b/drivers/crypto/intel/qat/qat_common/adf_transport_debug.c
index 6c22bc9b28e4..a27f1d76998e 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_transport_debug.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_transport_debug.c
@@ -99,7 +99,7 @@ int adf_ring_debugfs_add(struct adf_etr_ring_data *ring, const char *name)
 	struct adf_etr_ring_debug_entry *ring_debug;
 	char entry_name[16];

-	ring_debug = kzalloc(sizeof(*ring_debug), GFP_KERNEL);
+	ring_debug = kzalloc_obj(*ring_debug, GFP_KERNEL);
 	if (!ring_debug)
 		return -ENOMEM;

diff --git a/drivers/crypto/intel/qat/qat_common/adf_vf_isr.c b/drivers/crypto/intel/qat/qat_common/adf_vf_isr.c
index d0fef20a3df4..9ffaa56def67 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_vf_isr.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_vf_isr.c
@@ -85,7 +85,7 @@ int adf_pf2vf_handle_pf_restarting(struct adf_accel_dev *accel_dev)
 	struct adf_vf_stop_data *stop_data;

 	clear_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status);
-	stop_data = kzalloc(sizeof(*stop_data), GFP_ATOMIC);
+	stop_data = kzalloc_obj(*stop_data, GFP_ATOMIC);
 	if (!stop_data) {
 		dev_err(&GET_DEV(accel_dev),
 			"Couldn't schedule stop for vf_%d\n",
diff --git a/drivers/crypto/intel/qat/qat_common/qat_hal.c b/drivers/crypto/intel/qat/qat_common/qat_hal.c
index da4eca6e1633..86523a70b3a9 100644
--- a/drivers/crypto/intel/qat/qat_common/qat_hal.c
+++ b/drivers/crypto/intel/qat/qat_common/qat_hal.c
@@ -832,17 +832,17 @@ int qat_hal_init(struct adf_accel_dev *accel_dev)
 	struct icp_qat_fw_loader_handle *handle;
 	int ret = 0;

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

-	handle->hal_handle = kzalloc(sizeof(*handle->hal_handle), GFP_KERNEL);
+	handle->hal_handle = kzalloc_obj(*handle->hal_handle, GFP_KERNEL);
 	if (!handle->hal_handle) {
 		ret = -ENOMEM;
 		goto out_hal_handle;
 	}

-	handle->chip_info = kzalloc(sizeof(*handle->chip_info), GFP_KERNEL);
+	handle->chip_info = kzalloc_obj(*handle->chip_info, GFP_KERNEL);
 	if (!handle->chip_info) {
 		ret = -ENOMEM;
 		goto out_chip_info;
diff --git a/drivers/crypto/intel/qat/qat_common/qat_mig_dev.c b/drivers/crypto/intel/qat/qat_common/qat_mig_dev.c
index 892c2283a50e..4fb4b0cac64e 100644
--- a/drivers/crypto/intel/qat/qat_common/qat_mig_dev.c
+++ b/drivers/crypto/intel/qat/qat_common/qat_mig_dev.c
@@ -24,7 +24,7 @@ struct qat_mig_dev *qat_vfmig_create(struct pci_dev *pdev, int vf_id)
 	    !ops->load_state || !ops->save_setup || !ops->load_setup)
 		return ERR_PTR(-EINVAL);

-	mdev = kmalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kmalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/crypto/intel/qat/qat_common/qat_uclo.c b/drivers/crypto/intel/qat/qat_common/qat_uclo.c
index 06d49cb781ae..be0cfd9dd09a 100644
--- a/drivers/crypto/intel/qat/qat_common/qat_uclo.c
+++ b/drivers/crypto/intel/qat/qat_common/qat_uclo.c
@@ -42,10 +42,10 @@ static int qat_uclo_init_ae_data(struct icp_qat_uclo_objhandle *obj_handle,
 	} else {
 		ae_slice->ctx_mask_assigned = 0;
 	}
-	ae_slice->region = kzalloc(sizeof(*ae_slice->region), GFP_KERNEL);
+	ae_slice->region = kzalloc_obj(*ae_slice->region, GFP_KERNEL);
 	if (!ae_slice->region)
 		return -ENOMEM;
-	ae_slice->page = kzalloc(sizeof(*ae_slice->page), GFP_KERNEL);
+	ae_slice->page = kzalloc_obj(*ae_slice->page, GFP_KERNEL);
 	if (!ae_slice->page)
 		goto out_err;
 	page = ae_slice->page;
@@ -258,7 +258,7 @@ static int qat_uclo_create_batch_init_list(struct icp_qat_fw_loader_handle

 	init_header = *init_tab_base;
 	if (!init_header) {
-		init_header = kzalloc(sizeof(*init_header), GFP_KERNEL);
+		init_header = kzalloc_obj(*init_header, GFP_KERNEL);
 		if (!init_header)
 			return -ENOMEM;
 		init_header->size = 1;
@@ -270,7 +270,7 @@ static int qat_uclo_create_batch_init_list(struct icp_qat_fw_loader_handle
 		tail_old = tail_old->next;
 	tail = tail_old;
 	for (i = 0; i < init_mem->val_attr_num; i++) {
-		mem_init = kzalloc(sizeof(*mem_init), GFP_KERNEL);
+		mem_init = kzalloc_obj(*mem_init, GFP_KERNEL);
 		if (!mem_init)
 			goto out_err;
 		mem_init->ae = ae;
@@ -501,7 +501,7 @@ qat_uclo_map_chunk(char *buf, struct icp_qat_uof_filehdr *file_hdr,
 			if (file_chunk->checksum != qat_uclo_calc_str_checksum(
 				chunk, file_chunk->size))
 				break;
-			obj_hdr = kzalloc(sizeof(*obj_hdr), GFP_KERNEL);
+			obj_hdr = kzalloc_obj(*obj_hdr, GFP_KERNEL);
 			if (!obj_hdr)
 				break;
 			obj_hdr->file_buff = chunk;
@@ -634,8 +634,7 @@ static int qat_uclo_map_uimage(struct icp_qat_uclo_objhandle *obj_handle,
 		if (qat_uclo_check_image_compat(encap_uof_obj, image))
 			goto out_err;
 		ae_uimage[j].page =
-			kzalloc(sizeof(struct icp_qat_uclo_encap_page),
-				GFP_KERNEL);
+			kzalloc_obj(struct icp_qat_uclo_encap_page, GFP_KERNEL);
 		if (!ae_uimage[j].page)
 			goto out_err;
 		qat_uclo_map_image_page(encap_uof_obj, image,
@@ -1200,9 +1199,9 @@ static int qat_uclo_map_suof(struct icp_qat_fw_loader_handle *handle,
 	suof_handle->img_table.num_simgs = suof_ptr->num_chunks - 1;

 	if (suof_handle->img_table.num_simgs != 0) {
-		suof_img_hdr = kcalloc(suof_handle->img_table.num_simgs,
-				       sizeof(img_header),
-				       GFP_KERNEL);
+		suof_img_hdr = kzalloc_objs(img_header,
+					    suof_handle->img_table.num_simgs,
+					    GFP_KERNEL);
 		if (!suof_img_hdr)
 			return -ENOMEM;
 		suof_handle->img_table.simg_hdr = suof_img_hdr;
@@ -1720,7 +1719,7 @@ static int qat_uclo_map_suof_obj(struct icp_qat_fw_loader_handle *handle,
 {
 	struct icp_qat_suof_handle *suof_handle;

-	suof_handle = kzalloc(sizeof(*suof_handle), GFP_KERNEL);
+	suof_handle = kzalloc_obj(*suof_handle, GFP_KERNEL);
 	if (!suof_handle)
 		return -ENOMEM;
 	handle->sobj_handle = suof_handle;
@@ -1764,7 +1763,7 @@ static int qat_uclo_map_uof_obj(struct icp_qat_fw_loader_handle *handle,
 	struct icp_qat_uof_filehdr *filehdr;
 	struct icp_qat_uclo_objhandle *objhdl;

-	objhdl = kzalloc(sizeof(*objhdl), GFP_KERNEL);
+	objhdl = kzalloc_obj(*objhdl, GFP_KERNEL);
 	if (!objhdl)
 		return -ENOMEM;
 	objhdl->obj_buf = kmemdup(addr_ptr, mem_size, GFP_KERNEL);
@@ -1892,8 +1891,9 @@ static int qat_uclo_map_objs_from_mof(struct icp_qat_mof_handle *mobj_handle)
 	if (sobj_hdr)
 		sobj_chunk_num = sobj_hdr->num_chunks;

-	mobj_hdr = kcalloc(size_add(uobj_chunk_num, sobj_chunk_num),
-			   sizeof(*mobj_hdr), GFP_KERNEL);
+	mobj_hdr = kzalloc_objs(*mobj_hdr,
+				size_add(uobj_chunk_num, sobj_chunk_num),
+				GFP_KERNEL);
 	if (!mobj_hdr)
 		return -ENOMEM;

@@ -2003,7 +2003,7 @@ static int qat_uclo_map_mof_obj(struct icp_qat_fw_loader_handle *handle,
 	if (qat_uclo_check_mof_format(mof_ptr))
 		return -EINVAL;

-	mobj_handle = kzalloc(sizeof(*mobj_handle), GFP_KERNEL);
+	mobj_handle = kzalloc_obj(*mobj_handle, GFP_KERNEL);
 	if (!mobj_handle)
 		return -ENOMEM;

diff --git a/drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c b/drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c
index 417a48f41350..b35c57a868e7 100644
--- a/drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c
+++ b/drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c
@@ -318,7 +318,7 @@ static int process_tar_file(struct device *dev,
 		return -EINVAL;
 	}

-	tar_info = kzalloc(sizeof(struct tar_ucode_info_t), GFP_KERNEL);
+	tar_info = kzalloc_obj(struct tar_ucode_info_t, GFP_KERNEL);
 	if (!tar_info)
 		return -ENOMEM;

@@ -412,7 +412,7 @@ static struct tar_arch_info_t *load_tar_archive(struct device *dev,
 	size_t tar_size;
 	int ret;

-	tar_arch = kzalloc(sizeof(struct tar_arch_info_t), GFP_KERNEL);
+	tar_arch = kzalloc_obj(struct tar_arch_info_t, GFP_KERNEL);
 	if (!tar_arch)
 		return NULL;

diff --git a/drivers/crypto/marvell/octeontx/otx_cptvf_main.c b/drivers/crypto/marvell/octeontx/otx_cptvf_main.c
index 6c0bfb3ea1c9..32f6616a60eb 100644
--- a/drivers/crypto/marvell/octeontx/otx_cptvf_main.c
+++ b/drivers/crypto/marvell/octeontx/otx_cptvf_main.c
@@ -31,7 +31,7 @@ static int init_worker_threads(struct otx_cptvf *cptvf)
 	struct otx_cptvf_wqe_info *cwqe_info;
 	int i;

-	cwqe_info = kzalloc(sizeof(*cwqe_info), GFP_KERNEL);
+	cwqe_info = kzalloc_obj(*cwqe_info, GFP_KERNEL);
 	if (!cwqe_info)
 		return -ENOMEM;

@@ -100,7 +100,7 @@ static int alloc_pending_queues(struct otx_cpt_pending_qinfo *pqinfo, u32 qlen,
 	pqinfo->num_queues = num_queues;

 	for_each_pending_queue(pqinfo, queue, i) {
-		queue->head = kcalloc(qlen, sizeof(*queue->head), GFP_KERNEL);
+		queue->head = kzalloc_objs(*queue->head, qlen, GFP_KERNEL);
 		if (!queue->head) {
 			ret = -ENOMEM;
 			goto pending_qfail;
@@ -212,7 +212,7 @@ static int alloc_command_queues(struct otx_cptvf *cptvf,
 		queue = &cqinfo->queue[i];
 		INIT_LIST_HEAD(&queue->chead);
 		do {
-			curr = kzalloc(sizeof(*curr), GFP_KERNEL);
+			curr = kzalloc_obj(*curr, GFP_KERNEL);
 			if (!curr)
 				goto cmd_qfail;

diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptpf_main.c b/drivers/crypto/marvell/octeontx2/otx2_cptpf_main.c
index f54f90588d86..37eb56ab7832 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptpf_main.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptpf_main.c
@@ -340,8 +340,8 @@ static int cptpf_flr_wq_init(struct otx2_cptpf_dev *cptpf, int num_vfs)
 	if (!cptpf->flr_wq)
 		return -ENOMEM;

-	cptpf->flr_work = kcalloc(num_vfs, sizeof(struct cptpf_flr_work),
-				  GFP_KERNEL);
+	cptpf->flr_work = kzalloc_objs(struct cptpf_flr_work, num_vfs,
+				       GFP_KERNEL);
 	if (!cptpf->flr_work)
 		goto destroy_wq;

diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c b/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c
index b5cc5401f704..97d948fbc4b3 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c
@@ -372,7 +372,7 @@ static int load_fw(struct device *dev, struct fw_info_t *fw_info,
 	int ucode_type, ucode_size;
 	int ret;

-	uc_info = kzalloc(sizeof(*uc_info), GFP_KERNEL);
+	uc_info = kzalloc_obj(*uc_info, GFP_KERNEL);
 	if (!uc_info)
 		return -ENOMEM;

diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c
index c1c44a7b89fa..bec0a4cd2662 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c
@@ -150,7 +150,7 @@ static int init_tasklet_work(struct otx2_cptlfs_info *lfs)
 	int i, ret = 0;

 	for (i = 0; i < lfs->lfs_num; i++) {
-		wqe = kzalloc(sizeof(struct otx2_cptlf_wqe), GFP_KERNEL);
+		wqe = kzalloc_obj(struct otx2_cptlf_wqe, GFP_KERNEL);
 		if (!wqe) {
 			ret = -ENOMEM;
 			goto cleanup_tasklet;
diff --git a/drivers/crypto/nx/nx-842.c b/drivers/crypto/nx/nx-842.c
index b950fcce8a9b..f388027b1256 100644
--- a/drivers/crypto/nx/nx-842.c
+++ b/drivers/crypto/nx/nx-842.c
@@ -105,7 +105,7 @@ void *nx842_crypto_alloc_ctx(struct nx842_driver *driver)
 {
 	struct nx842_crypto_ctx *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/crypto/nx/nx-common-powernv.c b/drivers/crypto/nx/nx-common-powernv.c
index 56aa1c29d782..a9253e34a0e5 100644
--- a/drivers/crypto/nx/nx-common-powernv.c
+++ b/drivers/crypto/nx/nx-common-powernv.c
@@ -810,7 +810,7 @@ static int __init vas_cfg_coproc_info(struct device_node *dn, int chip_id,
 		return ret;
 	}

-	coproc = kzalloc(sizeof(*coproc), GFP_KERNEL);
+	coproc = kzalloc_obj(*coproc, GFP_KERNEL);
 	if (!coproc)
 		return -ENOMEM;

@@ -968,7 +968,7 @@ static int __init nx842_powernv_probe(struct device_node *dn)
 		return -EINVAL;
 	}

-	coproc = kzalloc(sizeof(*coproc), GFP_KERNEL);
+	coproc = kzalloc_obj(*coproc, GFP_KERNEL);
 	if (!coproc)
 		return -ENOMEM;

diff --git a/drivers/crypto/nx/nx-common-pseries.c b/drivers/crypto/nx/nx-common-pseries.c
index fc0222ebe807..ecf84448b797 100644
--- a/drivers/crypto/nx/nx-common-pseries.c
+++ b/drivers/crypto/nx/nx-common-pseries.c
@@ -747,7 +747,7 @@ static int nx842_OF_upd(struct property *new_prop)
 	int ret = 0;
 	unsigned long flags;

-	new_devdata = kzalloc(sizeof(*new_devdata), GFP_NOFS);
+	new_devdata = kzalloc_obj(*new_devdata, GFP_NOFS);
 	if (!new_devdata)
 		return -ENOMEM;

@@ -1035,12 +1035,11 @@ static int nx842_probe(struct vio_dev *viodev,
 	unsigned long flags;
 	int ret = 0;

-	new_devdata = kzalloc(sizeof(*new_devdata), GFP_NOFS);
+	new_devdata = kzalloc_obj(*new_devdata, GFP_NOFS);
 	if (!new_devdata)
 		return -ENOMEM;

-	new_devdata->counters = kzalloc(sizeof(*new_devdata->counters),
-			GFP_NOFS);
+	new_devdata->counters = kzalloc_obj(*new_devdata->counters, GFP_NOFS);
 	if (!new_devdata->counters) {
 		kfree(new_devdata);
 		return -ENOMEM;
@@ -1149,7 +1148,7 @@ static void __init nxcop_get_capabilities(void)
 	u64 feat;
 	int rc;

-	hv_caps = kmalloc(sizeof(*hv_caps), GFP_KERNEL);
+	hv_caps = kmalloc_obj(*hv_caps, GFP_KERNEL);
 	if (!hv_caps)
 		return;
 	/*
@@ -1168,7 +1167,7 @@ static void __init nxcop_get_capabilities(void)
 	/*
 	 * NX-GZIP feature available
 	 */
-	hv_nxc = kmalloc(sizeof(*hv_nxc), GFP_KERNEL);
+	hv_nxc = kmalloc_obj(*hv_nxc, GFP_KERNEL);
 	if (!hv_nxc)
 		return;
 	/*
@@ -1218,7 +1217,7 @@ static int __init nx842_pseries_init(void)
 	of_node_put(np);

 	RCU_INIT_POINTER(devdata, NULL);
-	new_devdata = kzalloc(sizeof(*new_devdata), GFP_KERNEL);
+	new_devdata = kzalloc_obj(*new_devdata, GFP_KERNEL);
 	if (!new_devdata)
 		return -ENOMEM;

diff --git a/drivers/crypto/omap-crypto.c b/drivers/crypto/omap-crypto.c
index 0345c9383d50..441f0e5eb458 100644
--- a/drivers/crypto/omap-crypto.c
+++ b/drivers/crypto/omap-crypto.c
@@ -21,7 +21,7 @@ static int omap_crypto_copy_sg_lists(int total, int bs,
 	struct scatterlist *tmp;

 	if (!(flags & OMAP_CRYPTO_FORCE_SINGLE_ENTRY)) {
-		new_sg = kmalloc_array(n, sizeof(*new_sg), GFP_KERNEL);
+		new_sg = kmalloc_objs(*new_sg, n, GFP_KERNEL);
 		if (!new_sg)
 			return -ENOMEM;

diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
index 1ffc240e016a..48f6ba92ee93 100644
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -636,7 +636,7 @@ static int omap_sham_copy_sg_lists(struct omap_sham_reqctx *ctx,
 	if (ctx->bufcnt)
 		n++;

-	ctx->sg = kmalloc_array(n, sizeof(*sg), GFP_KERNEL);
+	ctx->sg = kmalloc_objs(*sg, n, GFP_KERNEL);
 	if (!ctx->sg)
 		return -ENOMEM;

diff --git a/drivers/crypto/qce/aead.c b/drivers/crypto/qce/aead.c
index 97b56e92ea33..ffc31a1d72c5 100644
--- a/drivers/crypto/qce/aead.c
+++ b/drivers/crypto/qce/aead.c
@@ -762,7 +762,7 @@ static int qce_aead_register_one(const struct qce_aead_def *def, struct qce_devi
 	struct aead_alg *alg;
 	int ret;

-	tmpl = kzalloc(sizeof(*tmpl), GFP_KERNEL);
+	tmpl = kzalloc_obj(*tmpl, GFP_KERNEL);
 	if (!tmpl)
 		return -ENOMEM;

diff --git a/drivers/crypto/qce/sha.c b/drivers/crypto/qce/sha.c
index 71b748183cfa..f09d0d7da518 100644
--- a/drivers/crypto/qce/sha.c
+++ b/drivers/crypto/qce/sha.c
@@ -457,7 +457,7 @@ static int qce_ahash_register_one(const struct qce_ahash_def *def,
 	struct crypto_alg *base;
 	int ret;

-	tmpl = kzalloc(sizeof(*tmpl), GFP_KERNEL);
+	tmpl = kzalloc_obj(*tmpl, GFP_KERNEL);
 	if (!tmpl)
 		return -ENOMEM;

diff --git a/drivers/crypto/qce/skcipher.c b/drivers/crypto/qce/skcipher.c
index ffb334eb5b34..1571ede06b86 100644
--- a/drivers/crypto/qce/skcipher.c
+++ b/drivers/crypto/qce/skcipher.c
@@ -440,7 +440,7 @@ static int qce_skcipher_register_one(const struct qce_skcipher_def *def,
 	struct skcipher_alg *alg;
 	int ret;

-	tmpl = kzalloc(sizeof(*tmpl), GFP_KERNEL);
+	tmpl = kzalloc_obj(*tmpl, GFP_KERNEL);
 	if (!tmpl)
 		return -ENOMEM;

diff --git a/drivers/crypto/s5p-sss.c b/drivers/crypto/s5p-sss.c
index b829c84f60f2..ea13b0fd4d89 100644
--- a/drivers/crypto/s5p-sss.c
+++ b/drivers/crypto/s5p-sss.c
@@ -499,7 +499,7 @@ static int s5p_make_sg_cpy(struct s5p_aes_dev *dev, struct scatterlist *src,
 	void *pages;
 	int len;

-	*dst = kmalloc(sizeof(**dst), GFP_ATOMIC);
+	*dst = kmalloc_obj(**dst, GFP_ATOMIC);
 	if (!*dst)
 		return -ENOMEM;

@@ -1056,7 +1056,7 @@ static int s5p_hash_copy_sg_lists(struct s5p_hash_reqctx *ctx,
 	if (ctx->bufcnt)
 		n++;

-	ctx->sg = kmalloc_array(n, sizeof(*sg), GFP_KERNEL);
+	ctx->sg = kmalloc_objs(*sg, n, GFP_KERNEL);
 	if (!ctx->sg) {
 		ctx->error = true;
 		return -ENOMEM;
diff --git a/drivers/crypto/sa2ul.c b/drivers/crypto/sa2ul.c
index fdc0b2486069..df3defa1ef4b 100644
--- a/drivers/crypto/sa2ul.c
+++ b/drivers/crypto/sa2ul.c
@@ -1099,7 +1099,7 @@ static int sa_run(struct sa_req *req)
 	gfp_flags = req->base->flags & CRYPTO_TFM_REQ_MAY_SLEEP ?
 		GFP_KERNEL : GFP_ATOMIC;

-	rxd = kzalloc(sizeof(*rxd), gfp_flags);
+	rxd = kzalloc_obj(*rxd, gfp_flags);
 	if (!rxd)
 		return -ENOMEM;

diff --git a/drivers/crypto/stm32/stm32-cryp.c b/drivers/crypto/stm32/stm32-cryp.c
index d206eddb67bf..9818b9e69aff 100644
--- a/drivers/crypto/stm32/stm32-cryp.c
+++ b/drivers/crypto/stm32/stm32-cryp.c
@@ -1498,7 +1498,8 @@ static int stm32_cryp_truncate_sg(struct scatterlist **new_sg, size_t *new_sg_le
 		return alloc_sg_len;

 	/* We allocate to much sg entry, but it is easier */
-	*new_sg = kmalloc_array((size_t)alloc_sg_len, sizeof(struct scatterlist), GFP_KERNEL);
+	*new_sg = kmalloc_objs(struct scatterlist, (size_t)alloc_sg_len,
+			       GFP_KERNEL);
 	if (!*new_sg)
 		return -ENOMEM;

diff --git a/drivers/crypto/tegra/tegra-se-main.c b/drivers/crypto/tegra/tegra-se-main.c
index 4e7115b247e7..caca5e365f8b 100644
--- a/drivers/crypto/tegra/tegra-se-main.c
+++ b/drivers/crypto/tegra/tegra-se-main.c
@@ -47,7 +47,7 @@ tegra_se_cmdbuf_pin(struct device *dev, struct host1x_bo *bo, enum dma_data_dire
 	struct host1x_bo_mapping *map;
 	int err;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return ERR_PTR(-ENOMEM);

@@ -56,7 +56,7 @@ tegra_se_cmdbuf_pin(struct device *dev, struct host1x_bo *bo, enum dma_data_dire
 	map->direction = direction;
 	map->dev = dev;

-	map->sgt = kzalloc(sizeof(*map->sgt), GFP_KERNEL);
+	map->sgt = kzalloc_obj(*map->sgt, GFP_KERNEL);
 	if (!map->sgt) {
 		err = -ENOMEM;
 		goto free;
@@ -123,7 +123,7 @@ static struct tegra_se_cmdbuf *tegra_se_host1x_bo_alloc(struct tegra_se *se, ssi
 	struct tegra_se_cmdbuf *cmdbuf;
 	struct device *dev = se->dev->parent;

-	cmdbuf = kzalloc(sizeof(*cmdbuf), GFP_KERNEL);
+	cmdbuf = kzalloc_obj(*cmdbuf, GFP_KERNEL);
 	if (!cmdbuf)
 		return NULL;

diff --git a/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c b/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c
index 2e44915c9f23..01077166b2f1 100644
--- a/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c
+++ b/drivers/crypto/virtio/virtio_crypto_akcipher_algs.c
@@ -112,7 +112,7 @@ static int virtio_crypto_alg_akcipher_init_session(struct virtio_crypto_akcipher
 	if (!pkey)
 		return -ENOMEM;

-	vc_ctrl_req = kzalloc(sizeof(*vc_ctrl_req), GFP_KERNEL);
+	vc_ctrl_req = kzalloc_obj(*vc_ctrl_req, GFP_KERNEL);
 	if (!vc_ctrl_req) {
 		err = -ENOMEM;
 		goto out;
@@ -169,7 +169,7 @@ static int virtio_crypto_alg_akcipher_close_session(struct virtio_crypto_akciphe
 	if (!ctx->session_valid)
 		return 0;

-	vc_ctrl_req = kzalloc(sizeof(*vc_ctrl_req), GFP_KERNEL);
+	vc_ctrl_req = kzalloc_obj(*vc_ctrl_req, GFP_KERNEL);
 	if (!vc_ctrl_req)
 		return -ENOMEM;

diff --git a/drivers/crypto/virtio/virtio_crypto_core.c b/drivers/crypto/virtio/virtio_crypto_core.c
index ccc6b5c1b24b..ae100e315185 100644
--- a/drivers/crypto/virtio/virtio_crypto_core.c
+++ b/drivers/crypto/virtio/virtio_crypto_core.c
@@ -115,10 +115,10 @@ static int virtcrypto_find_vqs(struct virtio_crypto *vi)
 	total_vqs = vi->max_data_queues + 1;

 	/* Allocate space for find_vqs parameters */
-	vqs = kcalloc(total_vqs, sizeof(*vqs), GFP_KERNEL);
+	vqs = kzalloc_objs(*vqs, total_vqs, GFP_KERNEL);
 	if (!vqs)
 		goto err_vq;
-	vqs_info = kcalloc(total_vqs, sizeof(*vqs_info), GFP_KERNEL);
+	vqs_info = kzalloc_objs(*vqs_info, total_vqs, GFP_KERNEL);
 	if (!vqs_info)
 		goto err_vqs_info;

@@ -170,8 +170,8 @@ static int virtcrypto_find_vqs(struct virtio_crypto *vi)

 static int virtcrypto_alloc_queues(struct virtio_crypto *vi)
 {
-	vi->data_vq = kcalloc(vi->max_data_queues, sizeof(*vi->data_vq),
-				GFP_KERNEL);
+	vi->data_vq = kzalloc_objs(*vi->data_vq, vi->max_data_queues,
+				   GFP_KERNEL);
 	if (!vi->data_vq)
 		return -ENOMEM;

diff --git a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c b/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c
index 11053d1786d4..b25b7982c942 100644
--- a/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c
+++ b/drivers/crypto/virtio/virtio_crypto_skcipher_algs.c
@@ -131,7 +131,7 @@ static int virtio_crypto_alg_skcipher_init_session(
 	if (!cipher_key)
 		return -ENOMEM;

-	vc_ctrl_req = kzalloc(sizeof(*vc_ctrl_req), GFP_KERNEL);
+	vc_ctrl_req = kzalloc_obj(*vc_ctrl_req, GFP_KERNEL);
 	if (!vc_ctrl_req) {
 		err = -ENOMEM;
 		goto out;
@@ -200,7 +200,7 @@ static int virtio_crypto_alg_skcipher_close_session(
 	struct virtio_crypto_inhdr *ctrl_status;
 	struct virtio_crypto_ctrl_request *vc_ctrl_req;

-	vc_ctrl_req = kzalloc(sizeof(*vc_ctrl_req), GFP_KERNEL);
+	vc_ctrl_req = kzalloc_obj(*vc_ctrl_req, GFP_KERNEL);
 	if (!vc_ctrl_req)
 		return -ENOMEM;

diff --git a/drivers/cxl/acpi.c b/drivers/cxl/acpi.c
index d78f005bd994..11320e88eb09 100644
--- a/drivers/cxl/acpi.c
+++ b/drivers/cxl/acpi.c
@@ -336,7 +336,7 @@ static void del_cxl_resource(struct resource *res)
 static struct resource *alloc_cxl_resource(resource_size_t base,
 					   resource_size_t n, int id)
 {
-	struct resource *res __free(kfree) = kzalloc(sizeof(*res), GFP_KERNEL);
+	struct resource *res __free(kfree) = kzalloc_obj(*res, GFP_KERNEL);

 	if (!res)
 		return NULL;
@@ -825,7 +825,7 @@ static int add_cxl_resources(struct resource *cxl_res)
 	struct resource *res, *new, *next;

 	for (res = cxl_res->child; res; res = next) {
-		new = kzalloc(sizeof(*new), GFP_KERNEL);
+		new = kzalloc_obj(*new, GFP_KERNEL);
 		if (!new)
 			return -ENOMEM;
 		new->name = res->name;
diff --git a/drivers/cxl/core/cdat.c b/drivers/cxl/core/cdat.c
index 18f0f2a25113..a024083bae2d 100644
--- a/drivers/cxl/core/cdat.c
+++ b/drivers/cxl/core/cdat.c
@@ -69,7 +69,7 @@ static int cdat_dsmas_handler(union acpi_subtable_headers *header, void *arg,
 	/* Skip common header */
 	dsmas = (struct acpi_cdat_dsmas *)(hdr + 1);

-	dent = kzalloc(sizeof(*dent), GFP_KERNEL);
+	dent = kzalloc_obj(*dent, GFP_KERNEL);
 	if (!dent)
 		return -ENOMEM;

@@ -669,7 +669,7 @@ static int cxl_endpoint_gather_bandwidth(struct cxl_region *cxlr,
 	perf_ctx = xa_load(usp_xa, index);
 	if (!perf_ctx) {
 		struct cxl_perf_ctx *c __free(kfree) =
-			kzalloc(sizeof(*perf_ctx), GFP_KERNEL);
+			kzalloc_obj(*perf_ctx, GFP_KERNEL);

 		if (!c)
 			return -ENOMEM;
@@ -756,7 +756,7 @@ static struct xarray *cxl_switch_gather_bandwidth(struct cxl_region *cxlr,
 						  bool *gp_is_root)
 {
 	struct xarray *res_xa __free(free_perf_xa) =
-		kzalloc(sizeof(*res_xa), GFP_KERNEL);
+		kzalloc_obj(*res_xa, GFP_KERNEL);
 	struct access_coordinate coords[ACCESS_COORDINATE_MAX];
 	struct cxl_perf_ctx *ctx, *us_ctx;
 	unsigned long index, us_index;
@@ -795,7 +795,7 @@ static struct xarray *cxl_switch_gather_bandwidth(struct cxl_region *cxlr,
 		us_ctx = xa_load(res_xa, us_index);
 		if (!us_ctx) {
 			struct cxl_perf_ctx *n __free(kfree) =
-				kzalloc(sizeof(*n), GFP_KERNEL);
+				kzalloc_obj(*n, GFP_KERNEL);

 			if (!n)
 				return ERR_PTR(-ENOMEM);
@@ -862,7 +862,7 @@ static struct xarray *cxl_switch_gather_bandwidth(struct cxl_region *cxlr,
 static struct xarray *cxl_rp_gather_bandwidth(struct xarray *xa)
 {
 	struct xarray *hb_xa __free(free_perf_xa) =
-		kzalloc(sizeof(*hb_xa), GFP_KERNEL);
+		kzalloc_obj(*hb_xa, GFP_KERNEL);
 	struct cxl_perf_ctx *ctx;
 	unsigned long index;

@@ -879,7 +879,7 @@ static struct xarray *cxl_rp_gather_bandwidth(struct xarray *xa)
 		hb_ctx = xa_load(hb_xa, hb_index);
 		if (!hb_ctx) {
 			struct cxl_perf_ctx *n __free(kfree) =
-				kzalloc(sizeof(*n), GFP_KERNEL);
+				kzalloc_obj(*n, GFP_KERNEL);

 			if (!n)
 				return ERR_PTR(-ENOMEM);
@@ -906,7 +906,7 @@ static struct xarray *cxl_rp_gather_bandwidth(struct xarray *xa)
 static struct xarray *cxl_hb_gather_bandwidth(struct xarray *xa)
 {
 	struct xarray *mw_xa __free(free_perf_xa) =
-		kzalloc(sizeof(*mw_xa), GFP_KERNEL);
+		kzalloc_obj(*mw_xa, GFP_KERNEL);
 	struct cxl_perf_ctx *ctx;
 	unsigned long index;

@@ -928,7 +928,7 @@ static struct xarray *cxl_hb_gather_bandwidth(struct xarray *xa)
 		mw_ctx = xa_load(mw_xa, mw_index);
 		if (!mw_ctx) {
 			struct cxl_perf_ctx *n __free(kfree) =
-				kzalloc(sizeof(*n), GFP_KERNEL);
+				kzalloc_obj(*n, GFP_KERNEL);

 			if (!n)
 				return ERR_PTR(-ENOMEM);
@@ -987,7 +987,7 @@ void cxl_region_shared_upstream_bandwidth_update(struct cxl_region *cxlr)
 	lockdep_assert_held(&cxl_rwsem.dpa);

 	struct xarray *usp_xa __free(free_perf_xa) =
-		kzalloc(sizeof(*usp_xa), GFP_KERNEL);
+		kzalloc_obj(*usp_xa, GFP_KERNEL);

 	if (!usp_xa)
 		return;
diff --git a/drivers/cxl/core/edac.c b/drivers/cxl/core/edac.c
index 81160260e26b..7f5457adb26c 100644
--- a/drivers/cxl/core/edac.c
+++ b/drivers/cxl/core/edac.c
@@ -2009,8 +2009,7 @@ static void err_rec_free(void *_cxlmd)

 static int devm_cxl_memdev_setup_err_rec(struct cxl_memdev *cxlmd)
 {
-	struct cxl_mem_err_rec *array_rec =
-		kzalloc(sizeof(*array_rec), GFP_KERNEL);
+	struct cxl_mem_err_rec *array_rec = kzalloc_obj(*array_rec, GFP_KERNEL);

 	if (!array_rec)
 		return -ENOMEM;
diff --git a/drivers/cxl/core/features.c b/drivers/cxl/core/features.c
index 4bc484b46f43..2007d8ebe1c4 100644
--- a/drivers/cxl/core/features.c
+++ b/drivers/cxl/core/features.c
@@ -94,7 +94,7 @@ get_supported_features(struct cxl_features_state *cxlfs)
 		return NULL;

 	struct cxl_feat_entries *entries __free(kvfree) =
-		kvmalloc(struct_size(entries, ent, count), GFP_KERNEL);
+		kvmalloc_flex(*entries, ent, count, GFP_KERNEL);
 	if (!entries)
 		return NULL;

@@ -204,7 +204,7 @@ int devm_cxl_setup_features(struct cxl_dev_state *cxlds)
 		return -ENODEV;

 	struct cxl_features_state *cxlfs __free(kfree) =
-		kzalloc(sizeof(*cxlfs), GFP_KERNEL);
+		kzalloc_obj(*cxlfs, GFP_KERNEL);
 	if (!cxlfs)
 		return -ENOMEM;

diff --git a/drivers/cxl/core/memdev.c b/drivers/cxl/core/memdev.c
index af3d0cc65138..a81df0de4889 100644
--- a/drivers/cxl/core/memdev.c
+++ b/drivers/cxl/core/memdev.c
@@ -665,7 +665,7 @@ static struct cxl_memdev *cxl_memdev_alloc(struct cxl_dev_state *cxlds,
 	struct cdev *cdev;
 	int rc;

-	cxlmd = kzalloc(sizeof(*cxlmd), GFP_KERNEL);
+	cxlmd = kzalloc_obj(*cxlmd, GFP_KERNEL);
 	if (!cxlmd)
 		return ERR_PTR(-ENOMEM);

@@ -831,7 +831,7 @@ static int cxl_mem_abort_fw_xfer(struct cxl_memdev_state *mds)
 	struct cxl_mbox_cmd mbox_cmd;
 	int rc;

-	transfer = kzalloc(struct_size(transfer, data, 0), GFP_KERNEL);
+	transfer = kzalloc_flex(*transfer, data, 0, GFP_KERNEL);
 	if (!transfer)
 		return -ENOMEM;

diff --git a/drivers/cxl/core/pmem.c b/drivers/cxl/core/pmem.c
index e7b1e6fa0ea0..be7538e58b9c 100644
--- a/drivers/cxl/core/pmem.c
+++ b/drivers/cxl/core/pmem.c
@@ -83,7 +83,7 @@ static struct cxl_nvdimm_bridge *cxl_nvdimm_bridge_alloc(struct cxl_port *port)
 	struct device *dev;
 	int rc;

-	cxl_nvb = kzalloc(sizeof(*cxl_nvb), GFP_KERNEL);
+	cxl_nvb = kzalloc_obj(*cxl_nvb, GFP_KERNEL);
 	if (!cxl_nvb)
 		return ERR_PTR(-ENOMEM);

@@ -198,7 +198,7 @@ static struct cxl_nvdimm *cxl_nvdimm_alloc(struct cxl_nvdimm_bridge *cxl_nvb,
 	struct cxl_nvdimm *cxl_nvd;
 	struct device *dev;

-	cxl_nvd = kzalloc(sizeof(*cxl_nvd), GFP_KERNEL);
+	cxl_nvd = kzalloc_obj(*cxl_nvd, GFP_KERNEL);
 	if (!cxl_nvd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/cxl/core/pmu.c b/drivers/cxl/core/pmu.c
index b3136d7664ab..8eb175c3ff22 100644
--- a/drivers/cxl/core/pmu.c
+++ b/drivers/cxl/core/pmu.c
@@ -33,7 +33,7 @@ int devm_cxl_pmu_add(struct device *parent, struct cxl_pmu_regs *regs,
 	struct device *dev;
 	int rc;

-	pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
+	pmu = kzalloc_obj(*pmu, GFP_KERNEL);
 	if (!pmu)
 		return -ENOMEM;

diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c
index fea8d5f5f331..491c7485db60 100644
--- a/drivers/cxl/core/port.c
+++ b/drivers/cxl/core/port.c
@@ -688,11 +688,11 @@ static struct cxl_port *cxl_port_alloc(struct device *uport_dev,

 	/* No parent_dport, root cxl_port */
 	if (!parent_dport) {
-		cxl_root = kzalloc(sizeof(*cxl_root), GFP_KERNEL);
+		cxl_root = kzalloc_obj(*cxl_root, GFP_KERNEL);
 		if (!cxl_root)
 			return ERR_PTR(-ENOMEM);
 	} else {
-		_port = kzalloc(sizeof(*port), GFP_KERNEL);
+		_port = kzalloc_obj(*port, GFP_KERNEL);
 		if (!_port)
 			return ERR_PTR(-ENOMEM);
 	}
@@ -1184,7 +1184,7 @@ __devm_cxl_add_dport(struct cxl_port *port, struct device *dport_dev,
 	    CXL_TARGET_STRLEN)
 		return ERR_PTR(-EINVAL);

-	dport = kzalloc(sizeof(*dport), GFP_KERNEL);
+	dport = kzalloc_obj(*dport, GFP_KERNEL);
 	if (!dport)
 		return ERR_PTR(-ENOMEM);

@@ -1350,7 +1350,7 @@ static int cxl_add_ep(struct cxl_dport *dport, struct device *ep_dev)
 	struct cxl_ep *ep;
 	int rc;

-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;

@@ -2017,8 +2017,7 @@ struct cxl_root_decoder *cxl_root_decoder_alloc(struct cxl_port *port,
 	if (!is_cxl_root(port))
 		return ERR_PTR(-EINVAL);

-	cxlrd = kzalloc(struct_size(cxlrd, cxlsd.target, nr_targets),
-			GFP_KERNEL);
+	cxlrd = kzalloc_flex(*cxlrd, cxlsd.target, nr_targets, GFP_KERNEL);
 	if (!cxlrd)
 		return ERR_PTR(-ENOMEM);

@@ -2071,7 +2070,7 @@ struct cxl_switch_decoder *cxl_switch_decoder_alloc(struct cxl_port *port,
 	if (is_cxl_root(port) || is_cxl_endpoint(port))
 		return ERR_PTR(-EINVAL);

-	cxlsd = kzalloc(struct_size(cxlsd, target, nr_targets), GFP_KERNEL);
+	cxlsd = kzalloc_flex(*cxlsd, target, nr_targets, GFP_KERNEL);
 	if (!cxlsd)
 		return ERR_PTR(-ENOMEM);

@@ -2102,7 +2101,7 @@ struct cxl_endpoint_decoder *cxl_endpoint_decoder_alloc(struct cxl_port *port)
 	if (!is_cxl_endpoint(port))
 		return ERR_PTR(-EINVAL);

-	cxled = kzalloc(sizeof(*cxled), GFP_KERNEL);
+	cxled = kzalloc_obj(*cxled, GFP_KERNEL);
 	if (!cxled)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
index 08fa3deef70a..288448cff91b 100644
--- a/drivers/cxl/core/region.c
+++ b/drivers/cxl/core/region.c
@@ -998,7 +998,7 @@ alloc_region_ref(struct cxl_port *port, struct cxl_region *cxlr,
 		return ERR_PTR(-EBUSY);
 	}

-	cxl_rr = kzalloc(sizeof(*cxl_rr), GFP_KERNEL);
+	cxl_rr = kzalloc_obj(*cxl_rr, GFP_KERNEL);
 	if (!cxl_rr)
 		return ERR_PTR(-ENOMEM);
 	cxl_rr->port = port;
@@ -2474,7 +2474,7 @@ static struct cxl_region *cxl_region_alloc(struct cxl_root_decoder *cxlrd, int i
 	struct cxl_region *cxlr;
 	struct device *dev;

-	cxlr = kzalloc(sizeof(*cxlr), GFP_KERNEL);
+	cxlr = kzalloc_obj(*cxlr, GFP_KERNEL);
 	if (!cxlr) {
 		memregion_free(id);
 		return ERR_PTR(-ENOMEM);
@@ -3464,7 +3464,7 @@ static int cxl_pmem_region_alloc(struct cxl_region *cxlr)
 		return -ENXIO;

 	struct cxl_pmem_region *cxlr_pmem __free(kfree) =
-		kzalloc(struct_size(cxlr_pmem, mapping, p->nr_targets), GFP_KERNEL);
+		kzalloc_flex(*cxlr_pmem, mapping, p->nr_targets, GFP_KERNEL);
 	if (!cxlr_pmem)
 		return -ENOMEM;

@@ -3552,7 +3552,7 @@ static struct cxl_dax_region *cxl_dax_region_alloc(struct cxl_region *cxlr)
 	if (p->state != CXL_CONFIG_COMMIT)
 		return ERR_PTR(-ENXIO);

-	cxlr_dax = kzalloc(sizeof(*cxlr_dax), GFP_KERNEL);
+	cxlr_dax = kzalloc_obj(*cxlr_dax, GFP_KERNEL);
 	if (!cxlr_dax)
 		return ERR_PTR(-ENOMEM);

@@ -3835,7 +3835,7 @@ static int __construct_region(struct cxl_region *cxlr,
 	set_bit(CXL_REGION_F_AUTO, &cxlr->flags);
 	cxlr->hpa_range = *hpa_range;

-	res = kmalloc(sizeof(*res), GFP_KERNEL);
+	res = kmalloc_obj(*res, GFP_KERNEL);
 	if (!res)
 		return -ENOMEM;

diff --git a/drivers/cxl/pmem.c b/drivers/cxl/pmem.c
index e197883690ef..ead92ca37a4e 100644
--- a/drivers/cxl/pmem.c
+++ b/drivers/cxl/pmem.c
@@ -234,7 +234,7 @@ static int cxl_pmem_set_config_data(struct cxl_memdev_state *mds,
 		return -EINVAL;

 	set_lsa =
-		kvzalloc(struct_size(set_lsa, data, cmd->in_length), GFP_KERNEL);
+		kvzalloc_flex(*set_lsa, data, cmd->in_length, GFP_KERNEL);
 	if (!set_lsa)
 		return -ENOMEM;

@@ -426,7 +426,7 @@ static int cxl_pmem_region_probe(struct device *dev)
 	set_bit(ND_REGION_CXL, &ndr_desc.flags);
 	set_bit(ND_REGION_PERSIST_MEMCTRL, &ndr_desc.flags);

-	info = kmalloc_array(cxlr_pmem->nr_mappings, sizeof(*info), GFP_KERNEL);
+	info = kmalloc_objs(*info, cxlr_pmem->nr_mappings, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
index fde29e0ad68b..3faaaa7a507b 100644
--- a/drivers/dax/bus.c
+++ b/drivers/dax/bus.c
@@ -110,7 +110,7 @@ static ssize_t do_id_store(struct device_driver *drv, const char *buf,
 	dax_id = __dax_match_id(dax_drv, buf);
 	if (!dax_id) {
 		if (action == ID_ADD) {
-			dax_id = kzalloc(sizeof(*dax_id), GFP_KERNEL);
+			dax_id = kzalloc_obj(*dax_id, GFP_KERNEL);
 			if (dax_id) {
 				strscpy(dax_id->dev_name, buf, DAX_NAME_LEN);
 				list_add(&dax_id->list, &dax_drv->ids);
@@ -650,7 +650,7 @@ struct dax_region *alloc_dax_region(struct device *parent, int region_id,
 			|| !IS_ALIGNED(range_len(range), align))
 		return NULL;

-	dax_region = kzalloc(sizeof(*dax_region), GFP_KERNEL);
+	dax_region = kzalloc_obj(*dax_region, GFP_KERNEL);
 	if (!dax_region)
 		return NULL;

@@ -807,7 +807,7 @@ static int devm_register_dax_mapping(struct dev_dax *dev_dax, int range_id)
 				"region disabled\n"))
 		return -ENXIO;

-	mapping = kzalloc(sizeof(*mapping), GFP_KERNEL);
+	mapping = kzalloc_obj(*mapping, GFP_KERNEL);
 	if (!mapping)
 		return -ENOMEM;
 	mapping->range_id = range_id;
@@ -1427,7 +1427,7 @@ static struct dev_dax *__devm_create_dev_dax(struct dev_dax_data *data)
 	struct device *dev;
 	int rc;

-	dev_dax = kzalloc(sizeof(*dev_dax), GFP_KERNEL);
+	dev_dax = kzalloc_obj(*dev_dax, GFP_KERNEL);
 	if (!dev_dax)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/dax/kmem.c b/drivers/dax/kmem.c
index c036e4d0b610..8618115cc56f 100644
--- a/drivers/dax/kmem.c
+++ b/drivers/dax/kmem.c
@@ -121,7 +121,7 @@ static int dev_dax_kmem_probe(struct dev_dax *dev_dax)
 	init_node_memory_type(numa_node, mtype);

 	rc = -ENOMEM;
-	data = kzalloc(struct_size(data, res, dev_dax->nr_range), GFP_KERNEL);
+	data = kzalloc_flex(*data, res, dev_dax->nr_range, GFP_KERNEL);
 	if (!data)
 		goto err_dax_kmem_data;

diff --git a/drivers/dca/dca-core.c b/drivers/dca/dca-core.c
index f5cedf816be1..583510850fad 100644
--- a/drivers/dca/dca-core.c
+++ b/drivers/dca/dca-core.c
@@ -44,7 +44,7 @@ static struct dca_domain *dca_allocate_domain(struct pci_bus *rc)
 {
 	struct dca_domain *domain;

-	domain = kzalloc(sizeof(*domain), GFP_NOWAIT);
+	domain = kzalloc_obj(*domain, GFP_NOWAIT);
 	if (!domain)
 		return NULL;

diff --git a/drivers/devfreq/devfreq-event.c b/drivers/devfreq/devfreq-event.c
index 70219099c604..36bb954e27ca 100644
--- a/drivers/devfreq/devfreq-event.c
+++ b/drivers/devfreq/devfreq-event.c
@@ -313,7 +313,7 @@ struct devfreq_event_dev *devfreq_event_add_edev(struct device *dev,
 	if (!desc->ops->set_event || !desc->ops->get_event)
 		return ERR_PTR(-EINVAL);

-	edev = kzalloc(sizeof(struct devfreq_event_dev), GFP_KERNEL);
+	edev = kzalloc_obj(struct devfreq_event_dev, GFP_KERNEL);
 	if (!edev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index 00979f2e0e27..5c094c884aba 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -821,7 +821,7 @@ struct devfreq *devfreq_add_device(struct device *dev,
 		goto err_out;
 	}

-	devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL);
+	devfreq = kzalloc_obj(struct devfreq, GFP_KERNEL);
 	if (!devfreq) {
 		err = -ENOMEM;
 		goto err_out;
diff --git a/drivers/devfreq/governor_passive.c b/drivers/devfreq/governor_passive.c
index 8cd6f9a59f64..c0271cc76bd9 100644
--- a/drivers/devfreq/governor_passive.c
+++ b/drivers/devfreq/governor_passive.c
@@ -310,8 +310,7 @@ static int cpufreq_passive_register_notifier(struct devfreq *devfreq)
 			continue;
 		}

-		parent_cpu_data = kzalloc(sizeof(*parent_cpu_data),
-						GFP_KERNEL);
+		parent_cpu_data = kzalloc_obj(*parent_cpu_data, GFP_KERNEL);
 		if (!parent_cpu_data) {
 			ret = -ENOMEM;
 			goto err_put_policy;
diff --git a/drivers/devfreq/governor_userspace.c b/drivers/devfreq/governor_userspace.c
index 395174f93960..70509a1ceecd 100644
--- a/drivers/devfreq/governor_userspace.c
+++ b/drivers/devfreq/governor_userspace.c
@@ -87,8 +87,8 @@ static const struct attribute_group dev_attr_group = {
 static int userspace_init(struct devfreq *devfreq)
 {
 	int err = 0;
-	struct userspace_data *data = kzalloc(sizeof(struct userspace_data),
-					      GFP_KERNEL);
+	struct userspace_data *data = kzalloc_obj(struct userspace_data,
+						  GFP_KERNEL);

 	if (!data) {
 		err = -ENOMEM;
diff --git a/drivers/dibs/dibs_loopback.c b/drivers/dibs/dibs_loopback.c
index aa029e29c6b2..95ddc7712a89 100644
--- a/drivers/dibs/dibs_loopback.c
+++ b/drivers/dibs/dibs_loopback.c
@@ -64,7 +64,7 @@ static int dibs_lo_register_dmb(struct dibs_dev *dibs, struct dibs_dmb *dmb,
 	if (sba_idx == DIBS_LO_MAX_DMBS)
 		return -ENOSPC;

-	dmb_node = kzalloc(sizeof(*dmb_node), GFP_KERNEL);
+	dmb_node = kzalloc_obj(*dmb_node, GFP_KERNEL);
 	if (!dmb_node) {
 		rc = -ENOMEM;
 		goto err_bit;
@@ -303,7 +303,7 @@ static int dibs_lo_dev_probe(void)
 	struct dibs_dev *dibs;
 	int ret;

-	ldev = kzalloc(sizeof(*ldev), GFP_KERNEL);
+	ldev = kzalloc_obj(*ldev, GFP_KERNEL);
 	if (!ldev)
 		return -ENOMEM;

diff --git a/drivers/dibs/dibs_main.c b/drivers/dibs/dibs_main.c
index b8c16586706c..b763c4ab1a4e 100644
--- a/drivers/dibs/dibs_main.c
+++ b/drivers/dibs/dibs_main.c
@@ -133,7 +133,7 @@ struct dibs_dev *dibs_dev_alloc(void)
 {
 	struct dibs_dev *dibs;

-	dibs = kzalloc(sizeof(*dibs), GFP_KERNEL);
+	dibs = kzalloc_obj(*dibs, GFP_KERNEL);
 	if (!dibs)
 		return dibs;
 	dibs->dev.release = dibs_dev_release;
diff --git a/drivers/dio/dio.c b/drivers/dio/dio.c
index 0a051d656880..86500b6c4c53 100644
--- a/drivers/dio/dio.c
+++ b/drivers/dio/dio.c
@@ -221,7 +221,7 @@ static int __init dio_init(void)
 		}

 		/* Found a board, allocate it an entry in the list */
-		dev = kzalloc(sizeof(struct dio_dev), GFP_KERNEL);
+		dev = kzalloc_obj(struct dio_dev, GFP_KERNEL);
 		if (!dev) {
 			if (scode >= DIOII_SCBASE)
 				iounmap(va);
diff --git a/drivers/dma-buf/dma-buf-mapping.c b/drivers/dma-buf/dma-buf-mapping.c
index 174677faa577..d9374f2ff0ca 100644
--- a/drivers/dma-buf/dma-buf-mapping.c
+++ b/drivers/dma-buf/dma-buf-mapping.c
@@ -108,7 +108,7 @@ struct sg_table *dma_buf_phys_vec_to_sgt(struct dma_buf_attachment *attach,
 		/* This function is supposed to work on MMIO memory only */
 		return ERR_PTR(-EINVAL);

-	dma = kzalloc(sizeof(*dma), GFP_KERNEL);
+	dma = kzalloc_obj(*dma, GFP_KERNEL);
 	if (!dma)
 		return ERR_PTR(-ENOMEM);

@@ -119,7 +119,7 @@ struct sg_table *dma_buf_phys_vec_to_sgt(struct dma_buf_attachment *attach,
 		 */
 		break;
 	case PCI_P2PDMA_MAP_THRU_HOST_BRIDGE:
-		dma->state = kzalloc(sizeof(*dma->state), GFP_KERNEL);
+		dma->state = kzalloc_obj(*dma->state, GFP_KERNEL);
 		if (!dma->state) {
 			ret = -ENOMEM;
 			goto err_free_dma;
diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index 77555096e4c7..71d5e7e42653 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -866,7 +866,7 @@ static int dma_buf_wrap_sg_table(struct sg_table **sg_table)
 	 * sg_table without copying the page_link and give only the copy back to
 	 * the importer.
 	 */
-	to = kzalloc(sizeof(*to), GFP_KERNEL);
+	to = kzalloc_obj(*to, GFP_KERNEL);
 	if (!to)
 		return -ENOMEM;

@@ -1020,7 +1020,7 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev,
 	if (WARN_ON(importer_ops && !importer_ops->move_notify))
 		return ERR_PTR(-EINVAL);

-	attach = kzalloc(sizeof(*attach), GFP_KERNEL);
+	attach = kzalloc_obj(*attach, GFP_KERNEL);
 	if (!attach)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/dma-buf/dma-fence-array.c b/drivers/dma-buf/dma-fence-array.c
index 6657d4b30af9..eb27fcc0aad5 100644
--- a/drivers/dma-buf/dma-fence-array.c
+++ b/drivers/dma-buf/dma-fence-array.c
@@ -179,7 +179,7 @@ struct dma_fence_array *dma_fence_array_alloc(int num_fences)
 {
 	struct dma_fence_array *array;

-	return kzalloc(struct_size(array, callbacks, num_fences), GFP_KERNEL);
+	return kzalloc_flex(*array, callbacks, num_fences, GFP_KERNEL);
 }
 EXPORT_SYMBOL(dma_fence_array_alloc);

diff --git a/drivers/dma-buf/dma-fence-unwrap.c b/drivers/dma-buf/dma-fence-unwrap.c
index a495d8a6c2e3..dc2525b2a03f 100644
--- a/drivers/dma-buf/dma-fence-unwrap.c
+++ b/drivers/dma-buf/dma-fence-unwrap.c
@@ -155,7 +155,7 @@ struct dma_fence *__dma_fence_unwrap_merge(unsigned int num_fences,

 	dma_fence_put(unsignaled);

-	array = kmalloc_array(count, sizeof(*array), GFP_KERNEL);
+	array = kmalloc_objs(*array, count, GFP_KERNEL);
 	if (!array)
 		return NULL;

diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
index 21c5c30b4f34..97f0f150e49a 100644
--- a/drivers/dma-buf/dma-fence.c
+++ b/drivers/dma-buf/dma-fence.c
@@ -156,7 +156,7 @@ struct dma_fence *dma_fence_allocate_private_stub(ktime_t timestamp)
 {
 	struct dma_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (fence == NULL)
 		return NULL;

@@ -905,7 +905,7 @@ dma_fence_wait_any_timeout(struct dma_fence **fences, uint32_t count,
 		return 0;
 	}

-	cb = kcalloc(count, sizeof(struct default_wait_cb), GFP_KERNEL);
+	cb = kzalloc_objs(struct default_wait_cb, count, GFP_KERNEL);
 	if (cb == NULL) {
 		ret = -ENOMEM;
 		goto err_free_cb;
diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c
index d230ddeb24e0..e0b9eb871c35 100644
--- a/drivers/dma-buf/dma-heap.c
+++ b/drivers/dma-buf/dma-heap.c
@@ -244,7 +244,7 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
 		return ERR_PTR(-EINVAL);
 	}

-	heap = kzalloc(sizeof(*heap), GFP_KERNEL);
+	heap = kzalloc_obj(*heap, GFP_KERNEL);
 	if (!heap)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/dma-buf/heaps/cma_heap.c b/drivers/dma-buf/heaps/cma_heap.c
index 49cc45fb42dd..06ed40c9d528 100644
--- a/drivers/dma-buf/heaps/cma_heap.c
+++ b/drivers/dma-buf/heaps/cma_heap.c
@@ -74,7 +74,7 @@ static int cma_heap_attach(struct dma_buf *dmabuf,
 	struct dma_heap_attachment *a;
 	int ret;

-	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	a = kzalloc_obj(*a, GFP_KERNEL);
 	if (!a)
 		return -ENOMEM;

@@ -308,7 +308,7 @@ static struct dma_buf *cma_heap_allocate(struct dma_heap *heap,
 	int ret = -ENOMEM;
 	pgoff_t pg;

-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 	if (!buffer)
 		return ERR_PTR(-ENOMEM);

@@ -346,7 +346,7 @@ static struct dma_buf *cma_heap_allocate(struct dma_heap *heap,
 		memset(page_address(cma_pages), 0, size);
 	}

-	buffer->pages = kmalloc_array(pagecount, sizeof(*buffer->pages), GFP_KERNEL);
+	buffer->pages = kmalloc_objs(*buffer->pages, pagecount, GFP_KERNEL);
 	if (!buffer->pages) {
 		ret = -ENOMEM;
 		goto free_cma;
@@ -391,7 +391,7 @@ static int __init __add_cma_heap(struct cma *cma, const char *name)
 	struct dma_heap_export_info exp_info;
 	struct cma_heap *cma_heap;

-	cma_heap = kzalloc(sizeof(*cma_heap), GFP_KERNEL);
+	cma_heap = kzalloc_obj(*cma_heap, GFP_KERNEL);
 	if (!cma_heap)
 		return -ENOMEM;
 	cma_heap->cma = cma;
diff --git a/drivers/dma-buf/heaps/system_heap.c b/drivers/dma-buf/heaps/system_heap.c
index 4049d042afa1..27ba8e55d909 100644
--- a/drivers/dma-buf/heaps/system_heap.c
+++ b/drivers/dma-buf/heaps/system_heap.c
@@ -77,7 +77,7 @@ static int system_heap_attach(struct dma_buf *dmabuf,
 	struct dma_heap_attachment *a;
 	int ret;

-	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	a = kzalloc_obj(*a, GFP_KERNEL);
 	if (!a)
 		return -ENOMEM;

@@ -354,7 +354,7 @@ static struct dma_buf *system_heap_allocate(struct dma_heap *heap,
 	struct page *page, *tmp_page;
 	int i, ret = -ENOMEM;

-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 	if (!buffer)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/dma-buf/st-dma-fence-chain.c b/drivers/dma-buf/st-dma-fence-chain.c
index ed4b323886e4..4ae7a6257e57 100644
--- a/drivers/dma-buf/st-dma-fence-chain.c
+++ b/drivers/dma-buf/st-dma-fence-chain.c
@@ -116,13 +116,11 @@ static int fence_chains_init(struct fence_chains *fc, unsigned int count,
 	unsigned int i;
 	int err = 0;

-	fc->chains = kvmalloc_array(count, sizeof(*fc->chains),
-				    GFP_KERNEL | __GFP_ZERO);
+	fc->chains = kvmalloc_objs(*fc->chains, count, GFP_KERNEL | __GFP_ZERO);
 	if (!fc->chains)
 		return -ENOMEM;

-	fc->fences = kvmalloc_array(count, sizeof(*fc->fences),
-				    GFP_KERNEL | __GFP_ZERO);
+	fc->fences = kvmalloc_objs(*fc->fences, count, GFP_KERNEL | __GFP_ZERO);
 	if (!fc->fences) {
 		err = -ENOMEM;
 		goto err_chains;
@@ -452,7 +450,7 @@ static int find_race(void *arg)
 	if (err)
 		return err;

-	threads = kmalloc_array(ncpus, sizeof(*threads), GFP_KERNEL);
+	threads = kmalloc_objs(*threads, ncpus, GFP_KERNEL);
 	if (!threads) {
 		err = -ENOMEM;
 		goto err;
diff --git a/drivers/dma-buf/st-dma-fence-unwrap.c b/drivers/dma-buf/st-dma-fence-unwrap.c
index a3be888ae2e8..56802a39874e 100644
--- a/drivers/dma-buf/st-dma-fence-unwrap.c
+++ b/drivers/dma-buf/st-dma-fence-unwrap.c
@@ -32,7 +32,7 @@ static struct dma_fence *__mock_fence(u64 context, u64 seqno)
 {
 	struct mock_fence *f;

-	f = kmalloc(sizeof(*f), GFP_KERNEL);
+	f = kmalloc_obj(*f, GFP_KERNEL);
 	if (!f)
 		return NULL;

@@ -54,7 +54,7 @@ static struct dma_fence *mock_array(unsigned int num_fences, ...)
 	va_list valist;
 	int i;

-	fences = kcalloc(num_fences, sizeof(*fences), GFP_KERNEL);
+	fences = kzalloc_objs(*fences, num_fences, GFP_KERNEL);
 	if (!fences)
 		goto error_put;

diff --git a/drivers/dma-buf/st-dma-resv.c b/drivers/dma-buf/st-dma-resv.c
index 15dbea1462ed..fad024820f85 100644
--- a/drivers/dma-buf/st-dma-resv.c
+++ b/drivers/dma-buf/st-dma-resv.c
@@ -27,7 +27,7 @@ static struct dma_fence *alloc_fence(void)
 {
 	struct dma_fence *f;

-	f = kmalloc(sizeof(*f), GFP_KERNEL);
+	f = kmalloc_obj(*f, GFP_KERNEL);
 	if (!f)
 		return NULL;

diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c
index 6f09d13be6b6..d04f479edaee 100644
--- a/drivers/dma-buf/sw_sync.c
+++ b/drivers/dma-buf/sw_sync.c
@@ -101,7 +101,7 @@ static struct sync_timeline *sync_timeline_create(const char *name)
 {
 	struct sync_timeline *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return NULL;

@@ -252,7 +252,7 @@ static struct sync_pt *sync_pt_create(struct sync_timeline *obj,
 {
 	struct sync_pt *pt;

-	pt = kzalloc(sizeof(*pt), GFP_KERNEL);
+	pt = kzalloc_obj(*pt, GFP_KERNEL);
 	if (!pt)
 		return NULL;

diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c
index 747e377fb954..ad2c3e9e23bc 100644
--- a/drivers/dma-buf/sync_file.c
+++ b/drivers/dma-buf/sync_file.c
@@ -24,7 +24,7 @@ static struct sync_file *sync_file_alloc(void)
 {
 	struct sync_file *sync_file;

-	sync_file = kzalloc(sizeof(*sync_file), GFP_KERNEL);
+	sync_file = kzalloc_obj(*sync_file, GFP_KERNEL);
 	if (!sync_file)
 		return NULL;

diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
index 40399c26e6be..816ee45f4f99 100644
--- a/drivers/dma-buf/udmabuf.c
+++ b/drivers/dma-buf/udmabuf.c
@@ -115,7 +115,7 @@ static int vmap_udmabuf(struct dma_buf *buf, struct iosys_map *map)

 	dma_resv_assert_held(buf->resv);

-	pages = kvmalloc_array(ubuf->pagecount, sizeof(*pages), GFP_KERNEL);
+	pages = kvmalloc_objs(*pages, ubuf->pagecount, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

@@ -150,7 +150,7 @@ static struct sg_table *get_sg_table(struct device *dev, struct dma_buf *buf,
 	unsigned int i = 0;
 	int ret;

-	sg = kzalloc(sizeof(*sg), GFP_KERNEL);
+	sg = kzalloc_obj(*sg, GFP_KERNEL);
 	if (!sg)
 		return ERR_PTR(-ENOMEM);

@@ -207,17 +207,16 @@ static void unpin_all_folios(struct udmabuf *ubuf)

 static __always_inline int init_udmabuf(struct udmabuf *ubuf, pgoff_t pgcnt)
 {
-	ubuf->folios = kvmalloc_array(pgcnt, sizeof(*ubuf->folios), GFP_KERNEL);
+	ubuf->folios = kvmalloc_objs(*ubuf->folios, pgcnt, GFP_KERNEL);
 	if (!ubuf->folios)
 		return -ENOMEM;

-	ubuf->offsets = kvcalloc(pgcnt, sizeof(*ubuf->offsets), GFP_KERNEL);
+	ubuf->offsets = kvzalloc_objs(*ubuf->offsets, pgcnt, GFP_KERNEL);
 	if (!ubuf->offsets)
 		return -ENOMEM;

-	ubuf->pinned_folios = kvmalloc_array(pgcnt,
-					     sizeof(*ubuf->pinned_folios),
-					     GFP_KERNEL);
+	ubuf->pinned_folios = kvmalloc_objs(*ubuf->pinned_folios, pgcnt,
+					    GFP_KERNEL);
 	if (!ubuf->pinned_folios)
 		return -ENOMEM;

diff --git a/drivers/dma/acpi-dma.c b/drivers/dma/acpi-dma.c
index 2abbe11e797e..d7a033822045 100644
--- a/drivers/dma/acpi-dma.c
+++ b/drivers/dma/acpi-dma.c
@@ -189,7 +189,7 @@ int acpi_dma_controller_register(struct device *dev,
 	if (!adev)
 		return -EINVAL;

-	adma = kzalloc(sizeof(*adma), GFP_KERNEL);
+	adma = kzalloc_obj(*adma, GFP_KERNEL);
 	if (!adma)
 		return -ENOMEM;

diff --git a/drivers/dma/altera-msgdma.c b/drivers/dma/altera-msgdma.c
index 50534a6045a0..b46999c81df0 100644
--- a/drivers/dma/altera-msgdma.c
+++ b/drivers/dma/altera-msgdma.c
@@ -657,7 +657,7 @@ static int msgdma_alloc_chan_resources(struct dma_chan *dchan)
 	struct msgdma_sw_desc *desc;
 	int i;

-	mdev->sw_desq = kcalloc(MSGDMA_DESC_NUM, sizeof(*desc), GFP_NOWAIT);
+	mdev->sw_desq = kzalloc_objs(*desc, MSGDMA_DESC_NUM, GFP_NOWAIT);
 	if (!mdev->sw_desq)
 		return -ENOMEM;

diff --git a/drivers/dma/amba-pl08x.c b/drivers/dma/amba-pl08x.c
index f16a70937200..fb9dad69c314 100644
--- a/drivers/dma/amba-pl08x.c
+++ b/drivers/dma/amba-pl08x.c
@@ -1743,7 +1743,7 @@ static void pl08x_issue_pending(struct dma_chan *chan)

 static struct pl08x_txd *pl08x_get_txd(struct pl08x_dma_chan *plchan)
 {
-	struct pl08x_txd *txd = kzalloc(sizeof(*txd), GFP_NOWAIT);
+	struct pl08x_txd *txd = kzalloc_obj(*txd, GFP_NOWAIT);

 	if (txd)
 		INIT_LIST_HEAD(&txd->dsg_list);
@@ -1895,7 +1895,7 @@ static struct dma_async_tx_descriptor *pl08x_prep_dma_memcpy(
 		return NULL;
 	}

-	dsg = kzalloc(sizeof(struct pl08x_sg), GFP_NOWAIT);
+	dsg = kzalloc_obj(struct pl08x_sg, GFP_NOWAIT);
 	if (!dsg) {
 		pl08x_free_txd(pl08x, txd);
 		return NULL;
@@ -2020,7 +2020,7 @@ static int pl08x_tx_add_sg(struct pl08x_txd *txd,
 {
 	struct pl08x_sg *dsg;

-	dsg = kzalloc(sizeof(struct pl08x_sg), GFP_NOWAIT);
+	dsg = kzalloc_obj(struct pl08x_sg, GFP_NOWAIT);
 	if (!dsg)
 		return -ENOMEM;

@@ -2372,7 +2372,7 @@ static int pl08x_dma_init_virtual_channels(struct pl08x_driver_data *pl08x,
 	 * to cope with that situation.
 	 */
 	for (i = 0; i < channels; i++) {
-		chan = kzalloc(sizeof(*chan), GFP_KERNEL);
+		chan = kzalloc_obj(*chan, GFP_KERNEL);
 		if (!chan)
 			return -ENOMEM;

@@ -2390,7 +2390,7 @@ static int pl08x_dma_init_virtual_channels(struct pl08x_driver_data *pl08x,
 			chan->signal = i;
 			pl08x_dma_slave_init(chan);
 		} else {
-			chan->cd = kzalloc(sizeof(*chan->cd), GFP_KERNEL);
+			chan->cd = kzalloc_obj(*chan->cd, GFP_KERNEL);
 			if (!chan->cd) {
 				kfree(chan);
 				return -ENOMEM;
@@ -2709,7 +2709,7 @@ static int pl08x_probe(struct amba_device *adev, const struct amba_id *id)
 		goto out_no_pl08x;

 	/* Create the driver state holder */
-	pl08x = kzalloc(sizeof(*pl08x), GFP_KERNEL);
+	pl08x = kzalloc_obj(*pl08x, GFP_KERNEL);
 	if (!pl08x) {
 		ret = -ENOMEM;
 		goto out_no_pl08x;
@@ -2855,8 +2855,8 @@ static int pl08x_probe(struct amba_device *adev, const struct amba_id *id)
 	}

 	/* Initialize physical channels */
-	pl08x->phy_chans = kcalloc(vd->channels, sizeof(*pl08x->phy_chans),
-				   GFP_KERNEL);
+	pl08x->phy_chans = kzalloc_objs(*pl08x->phy_chans, vd->channels,
+					GFP_KERNEL);
 	if (!pl08x->phy_chans) {
 		ret = -ENOMEM;
 		goto out_no_phychans;
diff --git a/drivers/dma/amd/qdma/qdma.c b/drivers/dma/amd/qdma/qdma.c
index 8fb2d5e1df20..f5a02c6ed348 100644
--- a/drivers/dma/amd/qdma/qdma.c
+++ b/drivers/dma/amd/qdma/qdma.c
@@ -769,7 +769,7 @@ qdma_prep_device_sg(struct dma_chan *chan, struct scatterlist *sgl,
 	struct dma_async_tx_descriptor *tx;
 	struct qdma_mm_vdesc *vdesc;

-	vdesc = kzalloc(sizeof(*vdesc), GFP_NOWAIT);
+	vdesc = kzalloc_obj(*vdesc, GFP_NOWAIT);
 	if (!vdesc)
 		return NULL;
 	vdesc->sgl = sgl;
diff --git a/drivers/dma/apple-admac.c b/drivers/dma/apple-admac.c
index 04bbd774b3b4..14a5ee14a481 100644
--- a/drivers/dma/apple-admac.c
+++ b/drivers/dma/apple-admac.c
@@ -260,7 +260,7 @@ static struct dma_async_tx_descriptor *admac_prep_dma_cyclic(
 	if (direction != admac_chan_direction(adchan->no))
 		return NULL;

-	adtx = kzalloc(sizeof(*adtx), GFP_NOWAIT);
+	adtx = kzalloc_obj(*adtx, GFP_NOWAIT);
 	if (!adtx)
 		return NULL;

diff --git a/drivers/dma/arm-dma350.c b/drivers/dma/arm-dma350.c
index 9efe2ca7d5ec..84220fa83029 100644
--- a/drivers/dma/arm-dma350.c
+++ b/drivers/dma/arm-dma350.c
@@ -219,7 +219,7 @@ static struct dma_async_tx_descriptor *d350_prep_memcpy(struct dma_chan *chan,
 	struct d350_desc *desc;
 	u32 *cmd;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

@@ -257,7 +257,7 @@ static struct dma_async_tx_descriptor *d350_prep_memset(struct dma_chan *chan,
 	struct d350_desc *desc;
 	u32 *cmd;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
index 22bb604a3f97..935e3264ccec 100644
--- a/drivers/dma/at_hdmac.c
+++ b/drivers/dma/at_hdmac.c
@@ -929,7 +929,7 @@ atc_prep_dma_interleaved(struct dma_chan *chan,
 		ATC_SRC_PIP | ATC_DST_PIP |
 		FIELD_PREP(ATC_FC, ATC_FC_MEM2MEM);

-	desc = kzalloc(struct_size(desc, sg, 1), GFP_ATOMIC);
+	desc = kzalloc_flex(*desc, sg, 1, GFP_ATOMIC);
 	if (!desc)
 		return NULL;
 	desc->sglen = 1;
@@ -992,7 +992,7 @@ atc_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
 	}

 	sg_len = DIV_ROUND_UP(len, ATC_BTSIZE_MAX);
-	desc = kzalloc(struct_size(desc, sg, sg_len), GFP_ATOMIC);
+	desc = kzalloc_flex(*desc, sg, sg_len, GFP_ATOMIC);
 	if (!desc)
 		return NULL;
 	desc->sglen = sg_len;
@@ -1131,7 +1131,7 @@ atc_prep_dma_memset(struct dma_chan *chan, dma_addr_t dest, int value,
 		       (fill_pattern << 8) |
 		       fill_pattern;

-	desc = kzalloc(struct_size(desc, sg, 1), GFP_ATOMIC);
+	desc = kzalloc_flex(*desc, sg, 1, GFP_ATOMIC);
 	if (!desc)
 		goto err_free_buffer;
 	desc->sglen = 1;
@@ -1191,7 +1191,7 @@ atc_prep_dma_memset_sg(struct dma_chan *chan,
 	}
 	*(u32*)vaddr = value;

-	desc = kzalloc(struct_size(desc, sg, sg_len), GFP_ATOMIC);
+	desc = kzalloc_flex(*desc, sg, sg_len, GFP_ATOMIC);
 	if (!desc)
 		goto err_free_dma_buf;
 	desc->sglen = sg_len;
@@ -1274,7 +1274,7 @@ atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
 		return NULL;
 	}

-	desc = kzalloc(struct_size(desc, sg, sg_len), GFP_ATOMIC);
+	desc = kzalloc_flex(*desc, sg, sg_len, GFP_ATOMIC);
 	if (!desc)
 		return NULL;
 	desc->sglen = sg_len;
@@ -1531,7 +1531,7 @@ atc_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
 	if (atc_dma_cyclic_check_values(reg_width, buf_addr, period_len))
 		goto err_out;

-	desc = kzalloc(struct_size(desc, sg, periods), GFP_ATOMIC);
+	desc = kzalloc_flex(*desc, sg, periods, GFP_ATOMIC);
 	if (!desc)
 		goto err_out;
 	desc->sglen = periods;
@@ -1818,7 +1818,7 @@ static struct dma_chan *at_dma_xlate(struct of_phandle_args *dma_spec,
 	dma_cap_zero(mask);
 	dma_cap_set(DMA_SLAVE, mask);

-	atslave = kmalloc(sizeof(*atslave), GFP_KERNEL);
+	atslave = kmalloc_obj(*atslave, GFP_KERNEL);
 	if (!atslave) {
 		put_device(&dmac_pdev->dev);
 		return NULL;
diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c
index 3f638c3e81cd..06d830d36882 100644
--- a/drivers/dma/bcm2835-dma.c
+++ b/drivers/dma/bcm2835-dma.c
@@ -297,7 +297,7 @@ static struct bcm2835_desc *bcm2835_dma_create_cb_chain(
 		return NULL;

 	/* allocate and setup the descriptor. */
-	d = kzalloc(struct_size(d, cb_list, frames), gfp);
+	d = kzalloc_flex(*d, cb_list, frames, gfp);
 	if (!d)
 		return NULL;

diff --git a/drivers/dma/bestcomm/bestcomm.c b/drivers/dma/bestcomm/bestcomm.c
index 6c4d655ffe77..e1b259c781ca 100644
--- a/drivers/dma/bestcomm/bestcomm.c
+++ b/drivers/dma/bestcomm/bestcomm.c
@@ -393,7 +393,7 @@ static int mpc52xx_bcom_probe(struct platform_device *op)
 	}

 	/* Get a clean struct */
-	bcom_eng = kzalloc(sizeof(struct bcom_engine), GFP_KERNEL);
+	bcom_eng = kzalloc_obj(struct bcom_engine, GFP_KERNEL);
 	if (!bcom_eng) {
 		rv = -ENOMEM;
 		goto error_sramclean;
diff --git a/drivers/dma/bestcomm/sram.c b/drivers/dma/bestcomm/sram.c
index ad74d57cc3ab..c34639c30986 100644
--- a/drivers/dma/bestcomm/sram.c
+++ b/drivers/dma/bestcomm/sram.c
@@ -48,7 +48,7 @@ int bcom_sram_init(struct device_node *sram_node, char *owner)
 		return -EBUSY;
 	}

-	bcom_sram = kmalloc(sizeof(struct bcom_sram), GFP_KERNEL);
+	bcom_sram = kmalloc_obj(struct bcom_sram, GFP_KERNEL);
 	if (!bcom_sram) {
 		printk(KERN_ERR "%s: bcom_sram_init: "
 			"Couldn't allocate internal state !\n", owner);
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index f5caf75dc0e7..eb65872c5d5c 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -540,7 +540,7 @@ axi_dmac_alloc_desc(struct axi_dmac_chan *chan, unsigned int num_sgs)
 	dma_addr_t hw_phys;
 	unsigned int i;

-	desc = kzalloc(struct_size(desc, sg, num_sgs), GFP_NOWAIT);
+	desc = kzalloc_flex(*desc, sg, num_sgs, GFP_NOWAIT);
 	if (!desc)
 		return NULL;
 	desc->num_sgs = num_sgs;
diff --git a/drivers/dma/dma-jz4780.c b/drivers/dma/dma-jz4780.c
index 100057603fd4..6070dfdb7114 100644
--- a/drivers/dma/dma-jz4780.c
+++ b/drivers/dma/dma-jz4780.c
@@ -237,7 +237,7 @@ jz4780_dma_desc_alloc(struct jz4780_dma_chan *jzchan, unsigned int count,
 	if (count > JZ_DMA_MAX_DESC)
 		return NULL;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
index ca13cd39330b..b43a7b3a6a8d 100644
--- a/drivers/dma/dmaengine.c
+++ b/drivers/dma/dmaengine.c
@@ -1075,7 +1075,7 @@ static int __dma_async_device_channel_register(struct dma_device *device,
 	chan->local = alloc_percpu(typeof(*chan->local));
 	if (!chan->local)
 		return -ENOMEM;
-	chan->dev = kzalloc(sizeof(*chan->dev), GFP_KERNEL);
+	chan->dev = kzalloc_obj(*chan->dev, GFP_KERNEL);
 	if (!chan->dev) {
 		rc = -ENOMEM;
 		goto err_free_local;
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
index 91b2fbc0b864..1a18b8985afc 100644
--- a/drivers/dma/dmatest.c
+++ b/drivers/dma/dmatest.c
@@ -677,11 +677,11 @@ static int dmatest_func(void *data)

 	set_user_nice(current, 10);

-	srcs = kcalloc(src->cnt, sizeof(dma_addr_t), GFP_KERNEL);
+	srcs = kzalloc_objs(dma_addr_t, src->cnt, GFP_KERNEL);
 	if (!srcs)
 		goto err_dst;

-	dma_pq = kcalloc(dst->cnt, sizeof(dma_addr_t), GFP_KERNEL);
+	dma_pq = kzalloc_objs(dma_addr_t, dst->cnt, GFP_KERNEL);
 	if (!dma_pq)
 		goto err_srcs_array;

@@ -987,7 +987,7 @@ static int dmatest_add_threads(struct dmatest_info *info,
 		return -EINVAL;

 	for (i = 0; i < params->threads_per_chan; i++) {
-		thread = kzalloc(sizeof(struct dmatest_thread), GFP_KERNEL);
+		thread = kzalloc_obj(struct dmatest_thread, GFP_KERNEL);
 		if (!thread) {
 			pr_warn("No memory for %s-%s%u\n",
 				dma_chan_name(chan), op, i);
@@ -1025,7 +1025,7 @@ static int dmatest_add_channel(struct dmatest_info *info,
 	unsigned int		thread_count = 0;
 	int cnt;

-	dtc = kmalloc(sizeof(struct dmatest_chan), GFP_KERNEL);
+	dtc = kmalloc_obj(struct dmatest_chan, GFP_KERNEL);
 	if (!dtc) {
 		pr_warn("No memory for %s\n", dma_chan_name(chan));
 		return -ENOMEM;
diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
index 493c2a32b0fe..5d74bc29cf89 100644
--- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
+++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
@@ -293,11 +293,11 @@ static struct axi_dma_desc *axi_desc_alloc(u32 num)
 {
 	struct axi_dma_desc *desc;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

-	desc->hw_desc = kcalloc(num, sizeof(*desc->hw_desc), GFP_NOWAIT);
+	desc->hw_desc = kzalloc_objs(*desc->hw_desc, num, GFP_NOWAIT);
 	if (!desc->hw_desc) {
 		kfree(desc);
 		return NULL;
diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-edma-core.c
index 8e5f7defa6b6..e7d698b352d3 100644
--- a/drivers/dma/dw-edma/dw-edma-core.c
+++ b/drivers/dma/dw-edma/dw-edma-core.c
@@ -44,7 +44,7 @@ static struct dw_edma_burst *dw_edma_alloc_burst(struct dw_edma_chunk *chunk)
 {
 	struct dw_edma_burst *burst;

-	burst = kzalloc(sizeof(*burst), GFP_NOWAIT);
+	burst = kzalloc_obj(*burst, GFP_NOWAIT);
 	if (unlikely(!burst))
 		return NULL;

@@ -68,7 +68,7 @@ static struct dw_edma_chunk *dw_edma_alloc_chunk(struct dw_edma_desc *desc)
 	struct dw_edma_chan *chan = desc->chan;
 	struct dw_edma_chunk *chunk;

-	chunk = kzalloc(sizeof(*chunk), GFP_NOWAIT);
+	chunk = kzalloc_obj(*chunk, GFP_NOWAIT);
 	if (unlikely(!chunk))
 		return NULL;

@@ -111,7 +111,7 @@ static struct dw_edma_desc *dw_edma_alloc_desc(struct dw_edma_chan *chan)
 {
 	struct dw_edma_desc *desc;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (unlikely(!desc))
 		return NULL;

diff --git a/drivers/dma/dw-edma/dw-edma-pcie.c b/drivers/dma/dw-edma/dw-edma-pcie.c
index e9caf8adca1f..df599b563124 100644
--- a/drivers/dma/dw-edma/dw-edma-pcie.c
+++ b/drivers/dma/dw-edma/dw-edma-pcie.c
@@ -167,7 +167,7 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
 	int i, mask;

 	struct dw_edma_pcie_data *vsec_data __free(kfree) =
-		kmalloc(sizeof(*vsec_data), GFP_KERNEL);
+		kmalloc_obj(*vsec_data, GFP_KERNEL);
 	if (!vsec_data)
 		return -ENOMEM;

diff --git a/drivers/dma/dw/rzn1-dmamux.c b/drivers/dma/dw/rzn1-dmamux.c
index cbec277af4dd..b0b4ccae2c77 100644
--- a/drivers/dma/dw/rzn1-dmamux.c
+++ b/drivers/dma/dw/rzn1-dmamux.c
@@ -53,7 +53,7 @@ static void *rzn1_dmamux_route_allocate(struct of_phandle_args *dma_spec,
 		goto put_device;
 	}

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map) {
 		ret = -ENOMEM;
 		goto put_device;
diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
index e424bb5c40e7..375f608c8266 100644
--- a/drivers/dma/ep93xx_dma.c
+++ b/drivers/dma/ep93xx_dma.c
@@ -966,7 +966,7 @@ static int ep93xx_dma_alloc_chan_resources(struct dma_chan *chan)
 	for (i = 0; i < DMA_MAX_CHAN_DESCRIPTORS; i++) {
 		struct ep93xx_dma_desc *desc;

-		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+		desc = kzalloc_obj(*desc, GFP_KERNEL);
 		if (!desc) {
 			dev_warn(chan2dev(edmac), "not enough descriptors\n");
 			break;
diff --git a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
index 36384d019263..206e6bdaf99d 100644
--- a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
+++ b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
@@ -99,7 +99,7 @@ dpaa2_qdma_request_desc(struct dpaa2_qdma_chan *dpaa2_chan)
 	spin_lock_irqsave(&dpaa2_chan->queue_lock, flags);
 	if (list_empty(&dpaa2_chan->comp_free)) {
 		spin_unlock_irqrestore(&dpaa2_chan->queue_lock, flags);
-		comp_temp = kzalloc(sizeof(*comp_temp), GFP_NOWAIT);
+		comp_temp = kzalloc_obj(*comp_temp, GFP_NOWAIT);
 		if (!comp_temp)
 			goto err;
 		comp_temp->fd_virt_addr =
@@ -353,7 +353,7 @@ static int __cold dpaa2_qdma_setup(struct fsl_mc_device *ls_dev)
 	}

 	priv->num_pairs = min(priv->dpdmai_attr.num_of_priorities, prio_def);
-	ppriv = kcalloc(priv->num_pairs, sizeof(*ppriv), GFP_KERNEL);
+	ppriv = kzalloc_objs(*ppriv, priv->num_pairs, GFP_KERNEL);
 	if (!ppriv) {
 		err = -ENOMEM;
 		goto exit;
@@ -659,7 +659,7 @@ static int dpaa2_qdma_probe(struct fsl_mc_device *dpdmai_dev)
 	struct dpaa2_qdma_priv *priv;
 	int err;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
 	dev_set_drvdata(dev, priv);
@@ -707,7 +707,7 @@ static int dpaa2_qdma_probe(struct fsl_mc_device *dpdmai_dev)
 		goto err_enable;
 	}

-	dpaa2_qdma = kzalloc(sizeof(*dpaa2_qdma), GFP_KERNEL);
+	dpaa2_qdma = kzalloc_obj(*dpaa2_qdma, GFP_KERNEL);
 	if (!dpaa2_qdma) {
 		err = -ENOMEM;
 		goto err_eng;
diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
index 7137f51ff6a0..6a38738e56e2 100644
--- a/drivers/dma/fsl-edma-common.c
+++ b/drivers/dma/fsl-edma-common.c
@@ -565,7 +565,7 @@ static struct fsl_edma_desc *fsl_edma_alloc_desc(struct fsl_edma_chan *fsl_chan,
 	struct fsl_edma_desc *fsl_desc;
 	int i;

-	fsl_desc = kzalloc(struct_size(fsl_desc, tcd, sg_len), GFP_NOWAIT);
+	fsl_desc = kzalloc_flex(*fsl_desc, tcd, sg_len, GFP_NOWAIT);
 	if (!fsl_desc)
 		return NULL;

diff --git a/drivers/dma/fsl-qdma.c b/drivers/dma/fsl-qdma.c
index 6ace5bf80c40..db863bf7b0e6 100644
--- a/drivers/dma/fsl-qdma.c
+++ b/drivers/dma/fsl-qdma.c
@@ -406,7 +406,7 @@ static int fsl_qdma_pre_request_enqueue_desc(struct fsl_qdma_queue *queue)
 	struct fsl_qdma_comp *comp_temp, *_comp_temp;

 	for (i = 0; i < queue->n_cq + FSL_COMMAND_QUEUE_OVERFLLOW; i++) {
-		comp_temp = kzalloc(sizeof(*comp_temp), GFP_KERNEL);
+		comp_temp = kzalloc_obj(*comp_temp, GFP_KERNEL);
 		if (!comp_temp)
 			goto err_alloc;
 		comp_temp->virt_addr =
diff --git a/drivers/dma/fsl_raid.c b/drivers/dma/fsl_raid.c
index 6e6d7e0e475e..5ba9a14bb78a 100644
--- a/drivers/dma/fsl_raid.c
+++ b/drivers/dma/fsl_raid.c
@@ -290,7 +290,7 @@ static struct fsl_re_desc *fsl_re_chan_alloc_desc(struct fsl_re_chan *re_chan,
 	spin_unlock_irqrestore(&re_chan->desc_lock, lock_flag);

 	if (!desc) {
-		desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+		desc = kzalloc_obj(*desc, GFP_NOWAIT);
 		if (!desc)
 			return NULL;

@@ -579,7 +579,7 @@ static int fsl_re_alloc_chan_resources(struct dma_chan *chan)

 	re_chan = container_of(chan, struct fsl_re_chan, chan);
 	for (i = 0; i < FSL_RE_MIN_DESCS; i++) {
-		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+		desc = kzalloc_obj(*desc, GFP_KERNEL);
 		if (!desc)
 			break;

diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c
index 9b126a260267..1525b6fe54b4 100644
--- a/drivers/dma/fsldma.c
+++ b/drivers/dma/fsldma.c
@@ -1111,7 +1111,7 @@ static int fsl_dma_chan_probe(struct fsldma_device *fdev,
 	int err;

 	/* alloc channel */
-	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
+	chan = kzalloc_obj(*chan, GFP_KERNEL);
 	if (!chan) {
 		err = -ENOMEM;
 		goto out_return;
@@ -1218,7 +1218,7 @@ static int fsldma_of_probe(struct platform_device *op)
 	unsigned int i;
 	int err;

-	fdev = kzalloc(sizeof(*fdev), GFP_KERNEL);
+	fdev = kzalloc_obj(*fdev, GFP_KERNEL);
 	if (!fdev) {
 		err = -ENOMEM;
 		goto out_return;
diff --git a/drivers/dma/hisi_dma.c b/drivers/dma/hisi_dma.c
index 25a4134be36b..32a0e95c6a20 100644
--- a/drivers/dma/hisi_dma.c
+++ b/drivers/dma/hisi_dma.c
@@ -485,7 +485,7 @@ hisi_dma_prep_dma_memcpy(struct dma_chan *c, dma_addr_t dst, dma_addr_t src,
 	struct hisi_dma_chan *chan = to_hisi_dma_chan(c);
 	struct hisi_dma_desc *desc;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

diff --git a/drivers/dma/hsu/hsu.c b/drivers/dma/hsu/hsu.c
index af5a2e252c25..f62d60d7bc6b 100644
--- a/drivers/dma/hsu/hsu.c
+++ b/drivers/dma/hsu/hsu.c
@@ -245,11 +245,11 @@ static struct hsu_dma_desc *hsu_dma_alloc_desc(unsigned int nents)
 {
 	struct hsu_dma_desc *desc;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

-	desc->sg = kcalloc(nents, sizeof(*desc->sg), GFP_NOWAIT);
+	desc->sg = kzalloc_objs(*desc->sg, nents, GFP_NOWAIT);
 	if (!desc->sg) {
 		kfree(desc);
 		return NULL;
diff --git a/drivers/dma/idma64.c b/drivers/dma/idma64.c
index d147353d47ab..5fcd1befc92d 100644
--- a/drivers/dma/idma64.c
+++ b/drivers/dma/idma64.c
@@ -196,11 +196,11 @@ static struct idma64_desc *idma64_alloc_desc(unsigned int ndesc)
 {
 	struct idma64_desc *desc;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

-	desc->hw = kcalloc(ndesc, sizeof(*desc->hw), GFP_NOWAIT);
+	desc->hw = kzalloc_objs(*desc->hw, ndesc, GFP_NOWAIT);
 	if (!desc->hw) {
 		kfree(desc);
 		return NULL;
diff --git a/drivers/dma/idxd/cdev.c b/drivers/dma/idxd/cdev.c
index 7e4715f92773..49fcc429d262 100644
--- a/drivers/dma/idxd/cdev.c
+++ b/drivers/dma/idxd/cdev.c
@@ -232,7 +232,7 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp)

 	dev_dbg(dev, "%s called: %d\n", __func__, idxd_wq_refcount(wq));

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -538,7 +538,7 @@ int idxd_wq_add_cdev(struct idxd_wq *wq)
 	struct idxd_cdev_context *cdev_ctx;
 	int rc, minor;

-	idxd_cdev = kzalloc(sizeof(*idxd_cdev), GFP_KERNEL);
+	idxd_cdev = kzalloc_obj(*idxd_cdev, GFP_KERNEL);
 	if (!idxd_cdev)
 		return -ENOMEM;

diff --git a/drivers/dma/idxd/irq.c b/drivers/dma/idxd/irq.c
index 1107db3ce0a3..976d8aaa4517 100644
--- a/drivers/dma/idxd/irq.c
+++ b/drivers/dma/idxd/irq.c
@@ -492,7 +492,7 @@ irqreturn_t idxd_misc_thread(int vec, void *data)

 		val |= IDXD_INTC_INT_HANDLE_REVOKED;

-		revoke = kzalloc(sizeof(*revoke), GFP_ATOMIC);
+		revoke = kzalloc_obj(*revoke, GFP_ATOMIC);
 		if (revoke) {
 			revoke->idxd = idxd;
 			INIT_WORK(&revoke->work, idxd_int_handle_revoke);
@@ -567,7 +567,7 @@ bool idxd_queue_int_handle_resubmit(struct idxd_desc *desc)
 	struct idxd_device *idxd = wq->idxd;
 	struct idxd_resubmit *irw;

-	irw = kzalloc(sizeof(*irw), GFP_KERNEL);
+	irw = kzalloc_obj(*irw, GFP_KERNEL);
 	if (!irw)
 		return false;

diff --git a/drivers/dma/idxd/perfmon.c b/drivers/dma/idxd/perfmon.c
index 4b6af2f15d8a..3283841d3ddc 100644
--- a/drivers/dma/idxd/perfmon.c
+++ b/drivers/dma/idxd/perfmon.c
@@ -128,7 +128,7 @@ static int perfmon_validate_group(struct idxd_pmu *pmu,
 	struct idxd_pmu *fake_pmu;
 	int i, ret = 0, n, idx;

-	fake_pmu = kzalloc(sizeof(*fake_pmu), GFP_KERNEL);
+	fake_pmu = kzalloc_obj(*fake_pmu, GFP_KERNEL);
 	if (!fake_pmu)
 		return -ENOMEM;

@@ -484,7 +484,7 @@ int perfmon_pmu_init(struct idxd_device *idxd)
 	if (idxd->perfmon_offset == 0)
 		return -ENODEV;

-	idxd_pmu = kzalloc(sizeof(*idxd_pmu), GFP_KERNEL);
+	idxd_pmu = kzalloc_obj(*idxd_pmu, GFP_KERNEL);
 	if (!idxd_pmu)
 		return -ENOMEM;

diff --git a/drivers/dma/img-mdc-dma.c b/drivers/dma/img-mdc-dma.c
index fd55bcd060ab..b3765ba15803 100644
--- a/drivers/dma/img-mdc-dma.c
+++ b/drivers/dma/img-mdc-dma.c
@@ -294,7 +294,7 @@ static struct dma_async_tx_descriptor *mdc_prep_dma_memcpy(
 	if (!len)
 		return NULL;

-	mdesc = kzalloc(sizeof(*mdesc), GFP_NOWAIT);
+	mdesc = kzalloc_obj(*mdesc, GFP_NOWAIT);
 	if (!mdesc)
 		return NULL;
 	mdesc->chan = mchan;
@@ -382,7 +382,7 @@ static struct dma_async_tx_descriptor *mdc_prep_dma_cyclic(
 	if (mdc_check_slave_width(mchan, dir) < 0)
 		return NULL;

-	mdesc = kzalloc(sizeof(*mdesc), GFP_NOWAIT);
+	mdesc = kzalloc_obj(*mdesc, GFP_NOWAIT);
 	if (!mdesc)
 		return NULL;
 	mdesc->chan = mchan;
@@ -465,7 +465,7 @@ static struct dma_async_tx_descriptor *mdc_prep_slave_sg(
 	if (mdc_check_slave_width(mchan, dir) < 0)
 		return NULL;

-	mdesc = kzalloc(sizeof(*mdesc), GFP_NOWAIT);
+	mdesc = kzalloc_obj(*mdesc, GFP_NOWAIT);
 	if (!mdesc)
 		return NULL;
 	mdesc->chan = mchan;
diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c
index ba434657059a..d20c14f297a7 100644
--- a/drivers/dma/imx-dma.c
+++ b/drivers/dma/imx-dma.c
@@ -746,7 +746,7 @@ static int imxdma_alloc_chan_resources(struct dma_chan *chan)
 	while (imxdmac->descs_allocated < IMXDMA_MAX_CHAN_DESCRIPTORS) {
 		struct imxdma_desc *desc;

-		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+		desc = kzalloc_obj(*desc, GFP_KERNEL);
 		if (!desc)
 			break;
 		dma_async_tx_descriptor_init(&desc->desc, chan);
@@ -865,8 +865,8 @@ static struct dma_async_tx_descriptor *imxdma_prep_dma_cyclic(

 	kfree(imxdmac->sg_list);

-	imxdmac->sg_list = kcalloc(periods + 1,
-			sizeof(struct scatterlist), GFP_ATOMIC);
+	imxdmac->sg_list = kzalloc_objs(struct scatterlist, periods + 1,
+					GFP_ATOMIC);
 	if (!imxdmac->sg_list)
 		return NULL;

diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index ed9e56de5a9b..4093fba9cc23 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -1544,7 +1544,7 @@ static struct sdma_desc *sdma_transfer_init(struct sdma_channel *sdmac,
 		goto err_out;
 	}

-	desc = kzalloc((sizeof(*desc)), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		goto err_out;

@@ -2288,7 +2288,7 @@ static int sdma_probe(struct platform_device *pdev)

 	sdma->irq = irq;

-	sdma->script_addrs = kzalloc(sizeof(*sdma->script_addrs), GFP_KERNEL);
+	sdma->script_addrs = kzalloc_obj(*sdma->script_addrs, GFP_KERNEL);
 	if (!sdma->script_addrs) {
 		ret = -ENOMEM;
 		goto err_irq;
diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c
index b8fff8333aef..ee93b029f9e3 100644
--- a/drivers/dma/ioat/dma.c
+++ b/drivers/dma/ioat/dma.c
@@ -378,7 +378,7 @@ ioat_alloc_ring(struct dma_chan *c, int order, gfp_t flags)
 	int i, chunks;

 	/* allocate the array to hold the software ring */
-	ring = kcalloc(total_descs, sizeof(*ring), flags);
+	ring = kzalloc_objs(*ring, total_descs, flags);
 	if (!ring)
 		return NULL;

diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
index 227398673b73..a4e539e48444 100644
--- a/drivers/dma/ioat/init.c
+++ b/drivers/dma/ioat/init.c
@@ -574,7 +574,7 @@ static void ioat_enumerate_channels(struct ioatdma_device *ioat_dma)
 	dev_dbg(dev, "%s: xfercap = %d\n", __func__, 1 << xfercap_log);

 	for (i = 0; i < chancnt; i++) {
-		ioat_chan = kzalloc(sizeof(*ioat_chan), GFP_KERNEL);
+		ioat_chan = kzalloc_obj(*ioat_chan, GFP_KERNEL);
 		if (!ioat_chan)
 			break;

@@ -1332,7 +1332,7 @@ static void release_ioatdma(struct dma_device *device)
 static struct ioatdma_device *
 alloc_ioatdma(struct pci_dev *pdev, void __iomem *iobase)
 {
-	struct ioatdma_device *d = kzalloc(sizeof(*d), GFP_KERNEL);
+	struct ioatdma_device *d = kzalloc_obj(*d, GFP_KERNEL);

 	if (!d)
 		return NULL;
diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index 63677c0b6f18..e84f197fea76 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -471,7 +471,7 @@ static struct k3_dma_desc_sw *k3_dma_alloc_desc_resource(int num,
 		return NULL;
 	}

-	ds = kzalloc(sizeof(*ds), GFP_NOWAIT);
+	ds = kzalloc_obj(*ds, GFP_NOWAIT);
 	if (!ds)
 		return NULL;

diff --git a/drivers/dma/lgm/lgm-dma.c b/drivers/dma/lgm/lgm-dma.c
index a7b9cf30f6ad..c1f859472a96 100644
--- a/drivers/dma/lgm/lgm-dma.c
+++ b/drivers/dma/lgm/lgm-dma.c
@@ -681,7 +681,7 @@ ldma_chan_desc_cfg(struct dma_chan *chan, dma_addr_t desc_base, int desc_num)
 	c->desc_cnt = desc_num;
 	c->desc_phys = desc_base;

-	ds = kzalloc(sizeof(*ds), GFP_NOWAIT);
+	ds = kzalloc_obj(*ds, GFP_NOWAIT);
 	if (!ds)
 		return NULL;

@@ -982,7 +982,7 @@ dma_alloc_desc_resource(int num, struct ldma_chan *c)
 		return NULL;
 	}

-	ds = kzalloc(sizeof(*ds), GFP_NOWAIT);
+	ds = kzalloc_obj(*ds, GFP_NOWAIT);
 	if (!ds)
 		return NULL;

diff --git a/drivers/dma/loongson1-apb-dma.c b/drivers/dma/loongson1-apb-dma.c
index 255fe7eca212..2e347aba9af8 100644
--- a/drivers/dma/loongson1-apb-dma.c
+++ b/drivers/dma/loongson1-apb-dma.c
@@ -204,7 +204,7 @@ static struct ls1x_dma_desc *ls1x_dma_alloc_desc(void)
 {
 	struct ls1x_dma_desc *desc;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

@@ -335,7 +335,7 @@ ls1x_dma_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,

 	/* allocate the scatterlist */
 	sg_len = buf_len / period_len;
-	sgl = kmalloc_array(sg_len, sizeof(*sgl), GFP_NOWAIT);
+	sgl = kmalloc_objs(*sgl, sg_len, GFP_NOWAIT);
 	if (!sgl)
 		return NULL;

diff --git a/drivers/dma/loongson2-apb-dma.c b/drivers/dma/loongson2-apb-dma.c
index c528f02b9f84..b981475e6779 100644
--- a/drivers/dma/loongson2-apb-dma.c
+++ b/drivers/dma/loongson2-apb-dma.c
@@ -335,7 +335,7 @@ ls2x_dma_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
 	if (!burst_size)
 		return NULL;

-	desc = kzalloc(struct_size(desc, sg, sg_len), GFP_NOWAIT);
+	desc = kzalloc_flex(*desc, sg, sg_len, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

@@ -400,7 +400,7 @@ ls2x_dma_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_
 		return NULL;

 	num_periods = buf_len / period_len;
-	desc = kzalloc(struct_size(desc, sg, num_periods), GFP_NOWAIT);
+	desc = kzalloc_flex(*desc, sg, num_periods, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

diff --git a/drivers/dma/mediatek/mtk-cqdma.c b/drivers/dma/mediatek/mtk-cqdma.c
index 9f0c41ca7770..80791e30aec2 100644
--- a/drivers/dma/mediatek/mtk-cqdma.c
+++ b/drivers/dma/mediatek/mtk-cqdma.c
@@ -501,12 +501,12 @@ mtk_cqdma_prep_dma_memcpy(struct dma_chan *c, dma_addr_t dest,
 	 * until all the child CVDs completed.
 	 */
 	nr_vd = DIV_ROUND_UP(len, MTK_CQDMA_MAX_LEN);
-	cvd = kcalloc(nr_vd, sizeof(*cvd), GFP_NOWAIT);
+	cvd = kzalloc_objs(*cvd, nr_vd, GFP_NOWAIT);
 	if (!cvd)
 		return NULL;

 	for (i = 0; i < nr_vd; ++i) {
-		cvd[i] = kzalloc(sizeof(*cvd[i]), GFP_NOWAIT);
+		cvd[i] = kzalloc_obj(*cvd[i], GFP_NOWAIT);
 		if (!cvd[i]) {
 			for (; i > 0; --i)
 				kfree(cvd[i - 1]);
diff --git a/drivers/dma/mediatek/mtk-hsdma.c b/drivers/dma/mediatek/mtk-hsdma.c
index fa77bb24a430..a43412ff5edd 100644
--- a/drivers/dma/mediatek/mtk-hsdma.c
+++ b/drivers/dma/mediatek/mtk-hsdma.c
@@ -334,7 +334,7 @@ static int mtk_hsdma_alloc_pchan(struct mtk_hsdma_device *hsdma,
 	ring->cur_tptr = 0;
 	ring->cur_rptr = MTK_DMA_SIZE - 1;

-	ring->cb = kcalloc(MTK_DMA_SIZE, sizeof(*ring->cb), GFP_NOWAIT);
+	ring->cb = kzalloc_objs(*ring->cb, MTK_DMA_SIZE, GFP_NOWAIT);
 	if (!ring->cb) {
 		err = -ENOMEM;
 		goto err_free_dma;
@@ -722,7 +722,7 @@ mtk_hsdma_prep_dma_memcpy(struct dma_chan *c, dma_addr_t dest,
 {
 	struct mtk_hsdma_vdesc *hvd;

-	hvd = kzalloc(sizeof(*hvd), GFP_NOWAIT);
+	hvd = kzalloc_obj(*hvd, GFP_NOWAIT);
 	if (!hvd)
 		return NULL;

diff --git a/drivers/dma/mediatek/mtk-uart-apdma.c b/drivers/dma/mediatek/mtk-uart-apdma.c
index 3b9761f4e8a1..c269d84d7bd2 100644
--- a/drivers/dma/mediatek/mtk-uart-apdma.c
+++ b/drivers/dma/mediatek/mtk-uart-apdma.c
@@ -351,7 +351,7 @@ static struct dma_async_tx_descriptor *mtk_uart_apdma_prep_slave_sg
 		return NULL;

 	/* Now allocate and setup the descriptor */
-	d = kzalloc(sizeof(*d), GFP_NOWAIT);
+	d = kzalloc_obj(*d, GFP_NOWAIT);
 	if (!d)
 		return NULL;

diff --git a/drivers/dma/milbeaut-hdmac.c b/drivers/dma/milbeaut-hdmac.c
index 9a5ec247ed6d..b4ebc09e80d0 100644
--- a/drivers/dma/milbeaut-hdmac.c
+++ b/drivers/dma/milbeaut-hdmac.c
@@ -265,11 +265,11 @@ milbeaut_hdmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
 	if (!is_slave_direction(direction))
 		return NULL;

-	md = kzalloc(sizeof(*md), GFP_NOWAIT);
+	md = kzalloc_obj(*md, GFP_NOWAIT);
 	if (!md)
 		return NULL;

-	md->sgl = kcalloc(sg_len, sizeof(*sgl), GFP_NOWAIT);
+	md->sgl = kzalloc_objs(*sgl, sg_len, GFP_NOWAIT);
 	if (!md->sgl) {
 		kfree(md);
 		return NULL;
diff --git a/drivers/dma/milbeaut-xdmac.c b/drivers/dma/milbeaut-xdmac.c
index 58d4fd6df0bf..0bfa247e746e 100644
--- a/drivers/dma/milbeaut-xdmac.c
+++ b/drivers/dma/milbeaut-xdmac.c
@@ -192,7 +192,7 @@ milbeaut_xdmac_prep_memcpy(struct dma_chan *chan, dma_addr_t dst,
 	struct virt_dma_chan *vc = to_virt_chan(chan);
 	struct milbeaut_xdmac_desc *md;

-	md = kzalloc(sizeof(*md), GFP_NOWAIT);
+	md = kzalloc_obj(*md, GFP_NOWAIT);
 	if (!md)
 		return NULL;

diff --git a/drivers/dma/moxart-dma.c b/drivers/dma/moxart-dma.c
index de09e1ab7767..442f5aa16031 100644
--- a/drivers/dma/moxart-dma.c
+++ b/drivers/dma/moxart-dma.c
@@ -301,7 +301,7 @@ static struct dma_async_tx_descriptor *moxart_prep_slave_sg(
 		return NULL;
 	}

-	d = kzalloc(struct_size(d, sg, sg_len), GFP_ATOMIC);
+	d = kzalloc_flex(*d, sg, sg_len, GFP_ATOMIC);
 	if (!d)
 		return NULL;
 	d->sglen = sg_len;
diff --git a/drivers/dma/mpc512x_dma.c b/drivers/dma/mpc512x_dma.c
index bf131cb5db66..37550b42c30e 100644
--- a/drivers/dma/mpc512x_dma.c
+++ b/drivers/dma/mpc512x_dma.c
@@ -503,7 +503,7 @@ static int mpc_dma_alloc_chan_resources(struct dma_chan *chan)

 	/* Alloc descriptors for this channel */
 	for (i = 0; i < MPC_DMA_DESCRIPTORS; i++) {
-		mdesc = kzalloc(sizeof(struct mpc_dma_desc), GFP_KERNEL);
+		mdesc = kzalloc_obj(struct mpc_dma_desc, GFP_KERNEL);
 		if (!mdesc) {
 			dev_notice(mdma->dma.dev,
 				"Memory allocation error. Allocated only %u descriptors\n", i);
diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c
index 5e8386296046..f4f65ef44234 100644
--- a/drivers/dma/mv_xor.c
+++ b/drivers/dma/mv_xor.c
@@ -443,7 +443,7 @@ static int mv_xor_alloc_chan_resources(struct dma_chan *chan)
 	/* Allocate descriptor slots */
 	idx = mv_chan->slots_allocated;
 	while (idx < num_descs_in_pool) {
-		slot = kzalloc(sizeof(*slot), GFP_KERNEL);
+		slot = kzalloc_obj(*slot, GFP_KERNEL);
 		if (!slot) {
 			dev_info(mv_chan_to_devp(mv_chan),
 				 "channel only initialized %d descriptor slots",
diff --git a/drivers/dma/of-dma.c b/drivers/dma/of-dma.c
index 423442e55d36..d27c74f1669b 100644
--- a/drivers/dma/of-dma.c
+++ b/drivers/dma/of-dma.c
@@ -127,7 +127,7 @@ int of_dma_controller_register(struct device_node *np,
 		return -EINVAL;
 	}

-	ofdma = kzalloc(sizeof(*ofdma), GFP_KERNEL);
+	ofdma = kzalloc_obj(*ofdma, GFP_KERNEL);
 	if (!ofdma)
 		return -ENOMEM;

@@ -194,7 +194,7 @@ int of_dma_router_register(struct device_node *np,
 		return -EINVAL;
 	}

-	ofdma = kzalloc(sizeof(*ofdma), GFP_KERNEL);
+	ofdma = kzalloc_obj(*ofdma, GFP_KERNEL);
 	if (!ofdma)
 		return -ENOMEM;

diff --git a/drivers/dma/owl-dma.c b/drivers/dma/owl-dma.c
index 57cec757d8f5..7c80572fc71d 100644
--- a/drivers/dma/owl-dma.c
+++ b/drivers/dma/owl-dma.c
@@ -878,7 +878,7 @@ static struct dma_async_tx_descriptor
 	if (!len)
 		return NULL;

-	txd = kzalloc(sizeof(*txd), GFP_NOWAIT);
+	txd = kzalloc_obj(*txd, GFP_NOWAIT);
 	if (!txd)
 		return NULL;

@@ -929,7 +929,7 @@ static struct dma_async_tx_descriptor
 	size_t len;
 	int ret, i;

-	txd = kzalloc(sizeof(*txd), GFP_NOWAIT);
+	txd = kzalloc_obj(*txd, GFP_NOWAIT);
 	if (!txd)
 		return NULL;

@@ -993,7 +993,7 @@ static struct dma_async_tx_descriptor
 	unsigned int periods = buf_len / period_len;
 	int ret, i;

-	txd = kzalloc(sizeof(*txd), GFP_NOWAIT);
+	txd = kzalloc_obj(*txd, GFP_NOWAIT);
 	if (!txd)
 		return NULL;

diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
index 6b2793b07694..69560dd8c365 100644
--- a/drivers/dma/pch_dma.c
+++ b/drivers/dma/pch_dma.c
@@ -806,7 +806,7 @@ static int pch_dma_probe(struct pci_dev *pdev,
 	int i;

 	nr_channels = id->driver_data;
-	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+	pd = kzalloc_obj(*pd, GFP_KERNEL);
 	if (!pd)
 		return -ENOMEM;

diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index 72f260328ae9..996c259107e3 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -1887,8 +1887,7 @@ static int dmac_alloc_threads(struct pl330_dmac *pl330)
 	int i;

 	/* Allocate 1 Manager and 'chans' Channel threads */
-	pl330->channels = kcalloc(1 + chans, sizeof(*thrd),
-					GFP_KERNEL);
+	pl330->channels = kzalloc_objs(*thrd, 1 + chans, GFP_KERNEL);
 	if (!pl330->channels)
 		return -ENOMEM;

@@ -2548,7 +2547,7 @@ static int add_desc(struct list_head *pool, spinlock_t *lock,
 	unsigned long flags;
 	int i;

-	desc = kcalloc(count, sizeof(*desc), flg);
+	desc = kzalloc_objs(*desc, count, flg);
 	if (!desc)
 		return 0;

@@ -3093,7 +3092,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)

 	pl330->num_peripherals = num_chan;

-	pl330->peripherals = kcalloc(num_chan, sizeof(*pch), GFP_KERNEL);
+	pl330->peripherals = kzalloc_objs(*pch, num_chan, GFP_KERNEL);
 	if (!pl330->peripherals) {
 		ret = -ENOMEM;
 		goto probe_err2;
diff --git a/drivers/dma/plx_dma.c b/drivers/dma/plx_dma.c
index 34b6416c3287..1958fa8f96e4 100644
--- a/drivers/dma/plx_dma.c
+++ b/drivers/dma/plx_dma.c
@@ -378,13 +378,13 @@ static int plx_dma_alloc_desc(struct plx_dma_dev *plxdev)
 	struct plx_dma_desc *desc;
 	int i;

-	plxdev->desc_ring = kcalloc(PLX_DMA_RING_COUNT,
-				    sizeof(*plxdev->desc_ring), GFP_KERNEL);
+	plxdev->desc_ring = kzalloc_objs(*plxdev->desc_ring, PLX_DMA_RING_COUNT,
+					 GFP_KERNEL);
 	if (!plxdev->desc_ring)
 		return -ENOMEM;

 	for (i = 0; i < PLX_DMA_RING_COUNT; i++) {
-		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+		desc = kzalloc_obj(*desc, GFP_KERNEL);
 		if (!desc)
 			goto free_and_exit;

@@ -501,7 +501,7 @@ static int plx_dma_create(struct pci_dev *pdev)
 	struct dma_chan *chan;
 	int rc;

-	plxdev = kzalloc(sizeof(*plxdev), GFP_KERNEL);
+	plxdev = kzalloc_obj(*plxdev, GFP_KERNEL);
 	if (!plxdev)
 		return -ENOMEM;

diff --git a/drivers/dma/ppc4xx/adma.c b/drivers/dma/ppc4xx/adma.c
index 61500ad7c850..7c08e80dcc4c 100644
--- a/drivers/dma/ppc4xx/adma.c
+++ b/drivers/dma/ppc4xx/adma.c
@@ -1781,8 +1781,7 @@ static int ppc440spe_adma_alloc_chan_resources(struct dma_chan *chan)
 		db_sz = sizeof(struct xor_cb);

 	for (; i < (ppc440spe_chan->device->pool_size / db_sz); i++) {
-		slot = kzalloc(sizeof(struct ppc440spe_adma_desc_slot),
-			       GFP_KERNEL);
+		slot = kzalloc_obj(struct ppc440spe_adma_desc_slot, GFP_KERNEL);
 		if (!slot) {
 			printk(KERN_INFO "SPE ADMA Channel only initialized"
 				" %d descriptor slots", i--);
@@ -4064,7 +4063,7 @@ static int ppc440spe_adma_probe(struct platform_device *ofdev)
 	}

 	/* create a device */
-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev) {
 		initcode = PPC_ADMA_INIT_ALLOC;
 		ret = -ENOMEM;
@@ -4124,7 +4123,7 @@ static int ppc440spe_adma_probe(struct platform_device *ofdev)
 	platform_set_drvdata(ofdev, adev);

 	/* create a channel */
-	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
+	chan = kzalloc_obj(*chan, GFP_KERNEL);
 	if (!chan) {
 		initcode = PPC_ADMA_INIT_CHANNEL;
 		ret = -ENOMEM;
@@ -4161,7 +4160,7 @@ static int ppc440spe_adma_probe(struct platform_device *ofdev)
 					   PAGE_SIZE, DMA_BIDIRECTIONAL);
 	}

-	ref = kmalloc(sizeof(*ref), GFP_KERNEL);
+	ref = kmalloc_obj(*ref, GFP_KERNEL);
 	if (ref) {
 		ref->chan = &chan->common;
 		INIT_LIST_HEAD(&ref->node);
diff --git a/drivers/dma/pxa_dma.c b/drivers/dma/pxa_dma.c
index b639c8b51e87..a48ba9fc9f49 100644
--- a/drivers/dma/pxa_dma.c
+++ b/drivers/dma/pxa_dma.c
@@ -342,8 +342,7 @@ static void pxad_init_debugfs(struct pxad_device *pdev)
 	struct dentry *chandir;

 	pdev->dbgfs_chan =
-		kmalloc_array(pdev->nr_chans, sizeof(struct dentry *),
-			      GFP_KERNEL);
+		kmalloc_objs(struct dentry *, pdev->nr_chans, GFP_KERNEL);
 	if (!pdev->dbgfs_chan)
 		return;

@@ -742,8 +741,7 @@ pxad_alloc_desc(struct pxad_chan *chan, unsigned int nb_hw_desc)
 	void *desc;
 	int i;

-	sw_desc = kzalloc(struct_size(sw_desc, hw_desc, nb_hw_desc),
-			  GFP_NOWAIT);
+	sw_desc = kzalloc_flex(*sw_desc, hw_desc, nb_hw_desc, GFP_NOWAIT);
 	if (!sw_desc)
 		return NULL;
 	sw_desc->desc_pool = chan->desc_pool;
diff --git a/drivers/dma/qcom/bam_dma.c b/drivers/dma/qcom/bam_dma.c
index e184cebbface..19116295f832 100644
--- a/drivers/dma/qcom/bam_dma.c
+++ b/drivers/dma/qcom/bam_dma.c
@@ -662,8 +662,7 @@ static struct dma_async_tx_descriptor *bam_prep_slave_sg(struct dma_chan *chan,

 	/* allocate enough room to accommodate the number of entries */
 	num_alloc = sg_nents_for_dma(sgl, sg_len, BAM_FIFO_SIZE);
-	async_desc = kzalloc(struct_size(async_desc, desc, num_alloc),
-			     GFP_NOWAIT);
+	async_desc = kzalloc_flex(*async_desc, desc, num_alloc, GFP_NOWAIT);
 	if (!async_desc)
 		return NULL;

diff --git a/drivers/dma/qcom/gpi.c b/drivers/dma/qcom/gpi.c
index 6e30f3aa401e..c9a6f610ffd9 100644
--- a/drivers/dma/qcom/gpi.c
+++ b/drivers/dma/qcom/gpi.c
@@ -1836,7 +1836,7 @@ gpi_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
 	if (!(flags & DMA_PREP_INTERRUPT) && (nr - nr_tre < 2))
 		return NULL;

-	gpi_desc = kzalloc(sizeof(*gpi_desc), GFP_NOWAIT);
+	gpi_desc = kzalloc_obj(*gpi_desc, GFP_NOWAIT);
 	if (!gpi_desc)
 		return NULL;

diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c
index c2b3e4452e71..5a8dca8db5ce 100644
--- a/drivers/dma/qcom/hidma.c
+++ b/drivers/dma/qcom/hidma.c
@@ -352,7 +352,7 @@ static int hidma_alloc_chan_resources(struct dma_chan *dmach)

 	/* Alloc descriptors for this channel */
 	for (i = 0; i < dmadev->nr_descriptors; i++) {
-		mdesc = kzalloc(sizeof(struct hidma_desc), GFP_NOWAIT);
+		mdesc = kzalloc_obj(struct hidma_desc, GFP_NOWAIT);
 		if (!mdesc) {
 			rc = -ENOMEM;
 			break;
diff --git a/drivers/dma/qcom/qcom_adm.c b/drivers/dma/qcom/qcom_adm.c
index 490edad20ae6..07fbe32d31fa 100644
--- a/drivers/dma/qcom/qcom_adm.c
+++ b/drivers/dma/qcom/qcom_adm.c
@@ -401,7 +401,7 @@ static struct dma_async_tx_descriptor *adm_prep_slave_sg(struct dma_chan *chan,
 		single_count = sg_nents_for_dma(sgl, sg_len, ADM_MAX_XFER);
 	}

-	async_desc = kzalloc(sizeof(*async_desc), GFP_NOWAIT);
+	async_desc = kzalloc_obj(*async_desc, GFP_NOWAIT);
 	if (!async_desc) {
 		dev_err(adev->dev, "not enough memory for async_desc struct\n");
 		return NULL;
diff --git a/drivers/dma/sa11x0-dma.c b/drivers/dma/sa11x0-dma.c
index 86f1d7461f56..bcbdaf75db15 100644
--- a/drivers/dma/sa11x0-dma.c
+++ b/drivers/dma/sa11x0-dma.c
@@ -551,7 +551,7 @@ static struct dma_async_tx_descriptor *sa11x0_dma_prep_slave_sg(
 	}

 	j = sg_nents_for_dma(sg, sglen, DMA_MAX_SIZE & ~DMA_ALIGN);
-	txd = kzalloc(struct_size(txd, sg, j), GFP_ATOMIC);
+	txd = kzalloc_flex(*txd, sg, j, GFP_ATOMIC);
 	if (!txd) {
 		dev_dbg(chan->device->dev, "vchan %p: kzalloc failed\n", &c->vc);
 		return NULL;
@@ -621,7 +621,7 @@ static struct dma_async_tx_descriptor *sa11x0_dma_prep_dma_cyclic(
 	if (sglen == 0)
 		return NULL;

-	txd = kzalloc(struct_size(txd, sg, sglen), GFP_ATOMIC);
+	txd = kzalloc_flex(*txd, sg, sglen, GFP_ATOMIC);
 	if (!txd) {
 		dev_dbg(chan->device->dev, "vchan %p: kzalloc failed\n", &c->vc);
 		return NULL;
@@ -848,7 +848,7 @@ static int sa11x0_dma_init_dmadev(struct dma_device *dmadev,
 	for (i = 0; i < ARRAY_SIZE(chan_desc); i++) {
 		struct sa11x0_dma_chan *c;

-		c = kzalloc(sizeof(*c), GFP_KERNEL);
+		c = kzalloc_obj(*c, GFP_KERNEL);
 		if (!c) {
 			dev_err(dev, "no memory for channel %u\n", i);
 			return -ENOMEM;
@@ -907,7 +907,7 @@ static int sa11x0_dma_probe(struct platform_device *pdev)
 	if (!res)
 		return -ENXIO;

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		ret = -ENOMEM;
 		goto err_alloc;
diff --git a/drivers/dma/sf-pdma/sf-pdma.c b/drivers/dma/sf-pdma/sf-pdma.c
index 7ad3c29be146..b3cba11b6203 100644
--- a/drivers/dma/sf-pdma/sf-pdma.c
+++ b/drivers/dma/sf-pdma/sf-pdma.c
@@ -56,7 +56,7 @@ static struct sf_pdma_desc *sf_pdma_alloc_desc(struct sf_pdma_chan *chan)
 {
 	struct sf_pdma_desc *desc;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c
index 475a347cae1b..44eab2d21d54 100644
--- a/drivers/dma/sh/rcar-dmac.c
+++ b/drivers/dma/sh/rcar-dmac.c
@@ -1254,7 +1254,7 @@ rcar_dmac_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,
 	 * Allocate the sg list dynamically as it would consume too much stack
 	 * space.
 	 */
-	sgl = kmalloc_array(sg_len, sizeof(*sgl), GFP_NOWAIT);
+	sgl = kmalloc_objs(*sgl, sg_len, GFP_NOWAIT);
 	if (!sgl)
 		return NULL;

diff --git a/drivers/dma/sh/rz-dmac.c b/drivers/dma/sh/rz-dmac.c
index 7736d33a9641..7f9b45c4553d 100644
--- a/drivers/dma/sh/rz-dmac.c
+++ b/drivers/dma/sh/rz-dmac.c
@@ -443,7 +443,7 @@ static int rz_dmac_alloc_chan_resources(struct dma_chan *chan)
 	while (channel->descs_allocated < RZ_DMAC_MAX_CHAN_DESCRIPTORS) {
 		struct rz_dmac_desc *desc;

-		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+		desc = kzalloc_obj(*desc, GFP_KERNEL);
 		if (!desc)
 			break;

diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c
index 3ff2a8be8faa..59eab919a3e3 100644
--- a/drivers/dma/sh/shdma-base.c
+++ b/drivers/dma/sh/shdma-base.c
@@ -740,7 +740,7 @@ static struct dma_async_tx_descriptor *shdma_prep_dma_cyclic(
 	 * Allocate the sg list dynamically as it would consume too much stack
 	 * space.
 	 */
-	sgl = kmalloc_array(sg_len, sizeof(*sgl), GFP_KERNEL);
+	sgl = kmalloc_objs(*sgl, sg_len, GFP_KERNEL);
 	if (!sgl)
 		return NULL;

@@ -1012,7 +1012,7 @@ int shdma_init(struct device *dev, struct shdma_dev *sdev,
 	    !sdev->ops->desc_completed)
 		return -EINVAL;

-	sdev->schan = kcalloc(chan_num, sizeof(*sdev->schan), GFP_KERNEL);
+	sdev->schan = kzalloc_objs(*sdev->schan, chan_num, GFP_KERNEL);
 	if (!sdev->schan)
 		return -ENOMEM;

diff --git a/drivers/dma/sh/usb-dmac.c b/drivers/dma/sh/usb-dmac.c
index b42e5a66fd95..16509be0d360 100644
--- a/drivers/dma/sh/usb-dmac.c
+++ b/drivers/dma/sh/usb-dmac.c
@@ -266,7 +266,7 @@ static int usb_dmac_desc_alloc(struct usb_dmac_chan *chan, unsigned int sg_len,
 	struct usb_dmac_desc *desc;
 	unsigned long flags;

-	desc = kzalloc(struct_size(desc, sg, sg_len), gfp);
+	desc = kzalloc_flex(*desc, sg, sg_len, gfp);
 	if (!desc)
 		return -ENOMEM;

diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c
index 6207e0b185e1..087fea3af2e4 100644
--- a/drivers/dma/sprd-dma.c
+++ b/drivers/dma/sprd-dma.c
@@ -901,7 +901,7 @@ sprd_dma_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
 	enum sprd_dma_datawidth datawidth;
 	u32 step, temp;

-	sdesc = kzalloc(sizeof(*sdesc), GFP_NOWAIT);
+	sdesc = kzalloc_obj(*sdesc, GFP_NOWAIT);
 	if (!sdesc)
 		return NULL;

@@ -986,7 +986,7 @@ sprd_dma_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
 		(flags >> SPRD_DMA_TRG_MODE_SHIFT) & SPRD_DMA_TRG_MODE_MASK;
 	schan->int_type = flags & SPRD_DMA_INT_TYPE_MASK;

-	sdesc = kzalloc(sizeof(*sdesc), GFP_NOWAIT);
+	sdesc = kzalloc_obj(*sdesc, GFP_NOWAIT);
 	if (!sdesc)
 		return NULL;

diff --git a/drivers/dma/st_fdma.c b/drivers/dma/st_fdma.c
index 0f42a3c30bdb..d9547017f3bd 100644
--- a/drivers/dma/st_fdma.c
+++ b/drivers/dma/st_fdma.c
@@ -241,7 +241,7 @@ static struct st_fdma_desc *st_fdma_alloc_desc(struct st_fdma_chan *fchan,
 	struct st_fdma_desc *fdesc;
 	int i;

-	fdesc = kzalloc(struct_size(fdesc, node, sg_len), GFP_NOWAIT);
+	fdesc = kzalloc_flex(*fdesc, node, sg_len, GFP_NOWAIT);
 	if (!fdesc)
 		return NULL;

diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
index e67e0d66e6e8..9b803c0aec25 100644
--- a/drivers/dma/ste_dma40.c
+++ b/drivers/dma/ste_dma40.c
@@ -2529,7 +2529,7 @@ dma40_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t dma_addr,
 	struct scatterlist *sg;
 	int i;

-	sg = kcalloc(periods + 1, sizeof(struct scatterlist), GFP_NOWAIT);
+	sg = kzalloc_objs(struct scatterlist, periods + 1, GFP_NOWAIT);
 	if (!sg)
 		return NULL;

diff --git a/drivers/dma/stm32/stm32-dma.c b/drivers/dma/stm32/stm32-dma.c
index 04389936c8a6..d3ad78562a14 100644
--- a/drivers/dma/stm32/stm32-dma.c
+++ b/drivers/dma/stm32/stm32-dma.c
@@ -1101,7 +1101,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_slave_sg(
 		return NULL;
 	}

-	desc = kzalloc(struct_size(desc, sg_req, sg_len), GFP_NOWAIT);
+	desc = kzalloc_flex(*desc, sg_req, sg_len, GFP_NOWAIT);
 	if (!desc)
 		return NULL;
 	desc->num_sgs = sg_len;
@@ -1213,7 +1213,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_dma_cyclic(

 	num_periods = buf_len / period_len;

-	desc = kzalloc(struct_size(desc, sg_req, num_periods), GFP_NOWAIT);
+	desc = kzalloc_flex(*desc, sg_req, num_periods, GFP_NOWAIT);
 	if (!desc)
 		return NULL;
 	desc->num_sgs = num_periods;
@@ -1250,7 +1250,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_dma_memcpy(
 	int dma_burst, i;

 	num_sgs = DIV_ROUND_UP(len, STM32_DMA_ALIGNED_MAX_DATA_ITEMS);
-	desc = kzalloc(struct_size(desc, sg_req, num_sgs), GFP_NOWAIT);
+	desc = kzalloc_flex(*desc, sg_req, num_sgs, GFP_NOWAIT);
 	if (!desc)
 		return NULL;
 	desc->num_sgs = num_sgs;
diff --git a/drivers/dma/stm32/stm32-dma3.c b/drivers/dma/stm32/stm32-dma3.c
index 84b00c436134..4724e7fa0008 100644
--- a/drivers/dma/stm32/stm32-dma3.c
+++ b/drivers/dma/stm32/stm32-dma3.c
@@ -415,7 +415,7 @@ static struct stm32_dma3_swdesc *stm32_dma3_chan_desc_alloc(struct stm32_dma3_ch
 		return NULL;
 	}

-	swdesc = kzalloc(struct_size(swdesc, lli, count), GFP_NOWAIT);
+	swdesc = kzalloc_flex(*swdesc, lli, count, GFP_NOWAIT);
 	if (!swdesc)
 		return NULL;
 	swdesc->lli_size = count;
diff --git a/drivers/dma/stm32/stm32-dmamux.c b/drivers/dma/stm32/stm32-dmamux.c
index db13498b9c9f..4abd5ba32969 100644
--- a/drivers/dma/stm32/stm32-dmamux.c
+++ b/drivers/dma/stm32/stm32-dmamux.c
@@ -104,7 +104,7 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec,
 		goto err_put_pdev;
 	}

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux) {
 		ret = -ENOMEM;
 		goto err_put_pdev;
diff --git a/drivers/dma/stm32/stm32-mdma.c b/drivers/dma/stm32/stm32-mdma.c
index b87d41b234df..e3bbdc9ee36e 100644
--- a/drivers/dma/stm32/stm32-mdma.c
+++ b/drivers/dma/stm32/stm32-mdma.c
@@ -318,7 +318,7 @@ static struct stm32_mdma_desc *stm32_mdma_alloc_desc(
 	struct stm32_mdma_desc *desc;
 	int i;

-	desc = kzalloc(struct_size(desc, node, count), GFP_NOWAIT);
+	desc = kzalloc_flex(*desc, node, count, GFP_NOWAIT);
 	if (!desc)
 		return NULL;
 	desc->count = count;
diff --git a/drivers/dma/sun4i-dma.c b/drivers/dma/sun4i-dma.c
index 00d2fd38d17f..d2321f7287d2 100644
--- a/drivers/dma/sun4i-dma.c
+++ b/drivers/dma/sun4i-dma.c
@@ -532,7 +532,7 @@ generate_ndma_promise(struct dma_chan *chan, dma_addr_t src, dma_addr_t dest,
 	if (ret)
 		return NULL;

-	promise = kzalloc(sizeof(*promise), GFP_NOWAIT);
+	promise = kzalloc_obj(*promise, GFP_NOWAIT);
 	if (!promise)
 		return NULL;

@@ -595,7 +595,7 @@ generate_ddma_promise(struct dma_chan *chan, dma_addr_t src, dma_addr_t dest,
 	struct sun4i_dma_promise *promise;
 	int ret;

-	promise = kzalloc(sizeof(*promise), GFP_NOWAIT);
+	promise = kzalloc_obj(*promise, GFP_NOWAIT);
 	if (!promise)
 		return NULL;

@@ -648,7 +648,7 @@ static struct sun4i_dma_contract *generate_dma_contract(void)
 {
 	struct sun4i_dma_contract *contract;

-	contract = kzalloc(sizeof(*contract), GFP_NOWAIT);
+	contract = kzalloc_obj(*contract, GFP_NOWAIT);
 	if (!contract)
 		return NULL;

diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
index c33f151953eb..a9a254dbf8cb 100644
--- a/drivers/dma/sun6i-dma.c
+++ b/drivers/dma/sun6i-dma.c
@@ -678,7 +678,7 @@ static struct dma_async_tx_descriptor *sun6i_dma_prep_dma_memcpy(
 	if (!len)
 		return NULL;

-	txd = kzalloc(sizeof(*txd), GFP_NOWAIT);
+	txd = kzalloc_obj(*txd, GFP_NOWAIT);
 	if (!txd)
 		return NULL;

@@ -736,7 +736,7 @@ static struct dma_async_tx_descriptor *sun6i_dma_prep_slave_sg(
 		return NULL;
 	}

-	txd = kzalloc(sizeof(*txd), GFP_NOWAIT);
+	txd = kzalloc_obj(*txd, GFP_NOWAIT);
 	if (!txd)
 		return NULL;

@@ -819,7 +819,7 @@ static struct dma_async_tx_descriptor *sun6i_dma_prep_dma_cyclic(
 		return NULL;
 	}

-	txd = kzalloc(sizeof(*txd), GFP_NOWAIT);
+	txd = kzalloc_obj(*txd, GFP_NOWAIT);
 	if (!txd)
 		return NULL;

diff --git a/drivers/dma/tegra186-gpc-dma.c b/drivers/dma/tegra186-gpc-dma.c
index 4d6fe0efa76e..5948fbf32c21 100644
--- a/drivers/dma/tegra186-gpc-dma.c
+++ b/drivers/dma/tegra186-gpc-dma.c
@@ -908,7 +908,7 @@ tegra_dma_prep_dma_memset(struct dma_chan *dc, dma_addr_t dest, int value,
 	/* Set burst size */
 	mc_seq |= TEGRA_GPCDMA_MCSEQ_BURST_16;

-	dma_desc = kzalloc(struct_size(dma_desc, sg_req, 1), GFP_NOWAIT);
+	dma_desc = kzalloc_flex(*dma_desc, sg_req, 1, GFP_NOWAIT);
 	if (!dma_desc)
 		return NULL;

@@ -977,7 +977,7 @@ tegra_dma_prep_dma_memcpy(struct dma_chan *dc, dma_addr_t dest,
 	/* Set burst size */
 	mc_seq |= TEGRA_GPCDMA_MCSEQ_BURST_16;

-	dma_desc = kzalloc(struct_size(dma_desc, sg_req, 1), GFP_NOWAIT);
+	dma_desc = kzalloc_flex(*dma_desc, sg_req, 1, GFP_NOWAIT);
 	if (!dma_desc)
 		return NULL;

@@ -1070,7 +1070,7 @@ tegra_dma_prep_slave_sg(struct dma_chan *dc, struct scatterlist *sgl,
 	else
 		mc_seq |= TEGRA_GPCDMA_MCSEQ_BURST_2;

-	dma_desc = kzalloc(struct_size(dma_desc, sg_req, sg_len), GFP_NOWAIT);
+	dma_desc = kzalloc_flex(*dma_desc, sg_req, sg_len, GFP_NOWAIT);
 	if (!dma_desc)
 		return NULL;

@@ -1205,8 +1205,7 @@ tegra_dma_prep_dma_cyclic(struct dma_chan *dc, dma_addr_t buf_addr, size_t buf_l
 		mc_seq |= TEGRA_GPCDMA_MCSEQ_BURST_2;

 	period_count = buf_len / period_len;
-	dma_desc = kzalloc(struct_size(dma_desc, sg_req, period_count),
-			   GFP_NOWAIT);
+	dma_desc = kzalloc_flex(*dma_desc, sg_req, period_count, GFP_NOWAIT);
 	if (!dma_desc)
 		return NULL;

diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c
index 14a61e53a41b..640b8a218c9a 100644
--- a/drivers/dma/tegra20-apb-dma.c
+++ b/drivers/dma/tegra20-apb-dma.c
@@ -282,7 +282,7 @@ static struct tegra_dma_desc *tegra_dma_desc_get(struct tegra_dma_channel *tdc)
 	spin_unlock_irqrestore(&tdc->lock, flags);

 	/* Allocate DMA desc */
-	dma_desc = kzalloc(sizeof(*dma_desc), GFP_NOWAIT);
+	dma_desc = kzalloc_obj(*dma_desc, GFP_NOWAIT);
 	if (!dma_desc)
 		return NULL;

@@ -321,7 +321,7 @@ tegra_dma_sg_req_get(struct tegra_dma_channel *tdc)
 	}
 	spin_unlock_irqrestore(&tdc->lock, flags);

-	sg_req = kzalloc(sizeof(*sg_req), GFP_NOWAIT);
+	sg_req = kzalloc_obj(*sg_req, GFP_NOWAIT);

 	return sg_req;
 }
diff --git a/drivers/dma/tegra210-adma.c b/drivers/dma/tegra210-adma.c
index 215bfef37ec6..14e0c408ed1e 100644
--- a/drivers/dma/tegra210-adma.c
+++ b/drivers/dma/tegra210-adma.c
@@ -755,7 +755,7 @@ static struct dma_async_tx_descriptor *tegra_adma_prep_dma_cyclic(
 		return NULL;
 	}

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

diff --git a/drivers/dma/ti/dma-crossbar.c b/drivers/dma/ti/dma-crossbar.c
index e04077d542d2..cf1ceab10f14 100644
--- a/drivers/dma/ti/dma-crossbar.c
+++ b/drivers/dma/ti/dma-crossbar.c
@@ -103,7 +103,7 @@ static void *ti_am335x_xbar_route_allocate(struct of_phandle_args *dma_spec,
 		goto out_put_pdev;
 	}

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map) {
 		of_node_put(dma_spec->np);
 		map = ERR_PTR(-ENOMEM);
@@ -260,7 +260,7 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,
 		goto out_put_pdev;
 	}

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map) {
 		of_node_put(dma_spec->np);
 		map = ERR_PTR(-ENOMEM);
@@ -393,7 +393,7 @@ static int ti_dra7_xbar_probe(struct platform_device *pdev)
 		if (!nelm)
 			return -EINVAL;

-		rsv_events = kcalloc(nelm, sizeof(*rsv_events), GFP_KERNEL);
+		rsv_events = kzalloc_objs(*rsv_events, nelm, GFP_KERNEL);
 		if (!rsv_events)
 			return -ENOMEM;

diff --git a/drivers/dma/ti/edma.c b/drivers/dma/ti/edma.c
index 552be71db6c4..d97db5af3555 100644
--- a/drivers/dma/ti/edma.c
+++ b/drivers/dma/ti/edma.c
@@ -1041,7 +1041,7 @@ static struct dma_async_tx_descriptor *edma_prep_slave_sg(
 		return NULL;
 	}

-	edesc = kzalloc(struct_size(edesc, pset, sg_len), GFP_ATOMIC);
+	edesc = kzalloc_flex(*edesc, pset, sg_len, GFP_ATOMIC);
 	if (!edesc)
 		return NULL;

@@ -1158,7 +1158,7 @@ static struct dma_async_tx_descriptor *edma_prep_dma_memcpy(
 			nslots = 2;
 	}

-	edesc = kzalloc(struct_size(edesc, pset, nslots), GFP_ATOMIC);
+	edesc = kzalloc_flex(*edesc, pset, nslots, GFP_ATOMIC);
 	if (!edesc)
 		return NULL;

@@ -1265,7 +1265,7 @@ edma_prep_dma_interleaved(struct dma_chan *chan,
 	if (src_bidx > SZ_64K || dst_bidx > SZ_64K)
 		return NULL;

-	edesc = kzalloc(struct_size(edesc, pset, 1), GFP_ATOMIC);
+	edesc = kzalloc_flex(*edesc, pset, 1, GFP_ATOMIC);
 	if (!edesc)
 		return NULL;

@@ -1361,7 +1361,7 @@ static struct dma_async_tx_descriptor *edma_prep_dma_cyclic(
 		}
 	}

-	edesc = kzalloc(struct_size(edesc, pset, nslots), GFP_ATOMIC);
+	edesc = kzalloc_flex(*edesc, pset, nslots, GFP_ATOMIC);
 	if (!edesc)
 		return NULL;

diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
index aa2dc762140f..b547b19bc9d8 100644
--- a/drivers/dma/ti/k3-udma.c
+++ b/drivers/dma/ti/k3-udma.c
@@ -3241,7 +3241,7 @@ udma_prep_slave_sg_pkt(struct udma_chan *uc, struct scatterlist *sgl,
 	unsigned int i;
 	u64 asel;

-	d = kzalloc(struct_size(d, hwdesc, sglen), GFP_NOWAIT);
+	d = kzalloc_flex(*d, hwdesc, sglen, GFP_NOWAIT);
 	if (!d)
 		return NULL;

@@ -3588,7 +3588,7 @@ udma_prep_dma_cyclic_pkt(struct udma_chan *uc, dma_addr_t buf_addr,
 	if (period_len >= SZ_4M)
 		return NULL;

-	d = kzalloc(struct_size(d, hwdesc, periods), GFP_NOWAIT);
+	d = kzalloc_flex(*d, hwdesc, periods, GFP_NOWAIT);
 	if (!d)
 		return NULL;

@@ -4686,7 +4686,7 @@ static int udma_setup_resources(struct udma_dev *ud)
 		irq_res.sets += rm_res->sets;
 	}

-	irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL);
+	irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets, GFP_KERNEL);
 	if (!irq_res.desc)
 		return -ENOMEM;
 	rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
@@ -4878,7 +4878,7 @@ static int bcdma_setup_resources(struct udma_dev *ud)
 		}
 	}

-	irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL);
+	irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets, GFP_KERNEL);
 	if (!irq_res.desc)
 		return -ENOMEM;
 	if (ud->bchan_cnt) {
@@ -5080,7 +5080,7 @@ static int pktdma_setup_resources(struct udma_dev *ud)
 		irq_res.sets += rm_res->sets;
 	}

-	irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL);
+	irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets, GFP_KERNEL);
 	if (!irq_res.desc)
 		return -ENOMEM;
 	rm_res = tisci_rm->rm_ranges[RM_RANGE_TFLOW];
diff --git a/drivers/dma/ti/omap-dma.c b/drivers/dma/ti/omap-dma.c
index 73ed4b794630..70591c2bf92a 100644
--- a/drivers/dma/ti/omap-dma.c
+++ b/drivers/dma/ti/omap-dma.c
@@ -1002,7 +1002,7 @@ static struct dma_async_tx_descriptor *omap_dma_prep_slave_sg(
 	}

 	/* Now allocate and setup the descriptor. */
-	d = kzalloc(struct_size(d, sg, sglen), GFP_ATOMIC);
+	d = kzalloc_flex(*d, sg, sglen, GFP_ATOMIC);
 	if (!d)
 		return NULL;
 	d->sglen = sglen;
@@ -1503,7 +1503,7 @@ static int omap_dma_chan_init(struct omap_dmadev *od)
 {
 	struct omap_chan *c;

-	c = kzalloc(sizeof(*c), GFP_KERNEL);
+	c = kzalloc_obj(*c, GFP_KERNEL);
 	if (!c)
 		return -ENOMEM;

diff --git a/drivers/dma/timb_dma.c b/drivers/dma/timb_dma.c
index ecaf002558af..968f8cf19ec0 100644
--- a/drivers/dma/timb_dma.c
+++ b/drivers/dma/timb_dma.c
@@ -325,7 +325,7 @@ static struct timb_dma_desc *td_alloc_init_desc(struct timb_dma_chan *td_chan)
 	struct timb_dma_desc *td_desc;
 	int err;

-	td_desc = kzalloc(sizeof(struct timb_dma_desc), GFP_KERNEL);
+	td_desc = kzalloc_obj(struct timb_dma_desc, GFP_KERNEL);
 	if (!td_desc)
 		goto out;

@@ -635,8 +635,7 @@ static int td_probe(struct platform_device *pdev)
 		DRIVER_NAME))
 		return -EBUSY;

-	td  = kzalloc(struct_size(td, channels, pdata->nr_channels),
-		      GFP_KERNEL);
+	td  = kzalloc_flex(*td, channels, pdata->nr_channels, GFP_KERNEL);
 	if (!td) {
 		err = -ENOMEM;
 		goto err_release_region;
diff --git a/drivers/dma/txx9dmac.c b/drivers/dma/txx9dmac.c
index 35d5221683b2..05622b68a936 100644
--- a/drivers/dma/txx9dmac.c
+++ b/drivers/dma/txx9dmac.c
@@ -192,7 +192,7 @@ static struct txx9dmac_desc *txx9dmac_desc_alloc(struct txx9dmac_chan *dc,
 	struct txx9dmac_dev *ddev = dc->ddev;
 	struct txx9dmac_desc *desc;

-	desc = kzalloc(sizeof(*desc), flags);
+	desc = kzalloc_obj(*desc, flags);
 	if (!desc)
 		return NULL;
 	INIT_LIST_HEAD(&desc->tx_list);
diff --git a/drivers/dma/uniphier-mdmac.c b/drivers/dma/uniphier-mdmac.c
index 7a99f86ecb5a..a8aa904b88be 100644
--- a/drivers/dma/uniphier-mdmac.c
+++ b/drivers/dma/uniphier-mdmac.c
@@ -238,7 +238,7 @@ uniphier_mdmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
 	if (!is_slave_direction(direction))
 		return NULL;

-	md = kzalloc(sizeof(*md), GFP_NOWAIT);
+	md = kzalloc_obj(*md, GFP_NOWAIT);
 	if (!md)
 		return NULL;

diff --git a/drivers/dma/uniphier-xdmac.c b/drivers/dma/uniphier-xdmac.c
index ceeb6171c9d1..120c0d4f12dd 100644
--- a/drivers/dma/uniphier-xdmac.c
+++ b/drivers/dma/uniphier-xdmac.c
@@ -292,7 +292,7 @@ uniphier_xdmac_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst,

 	nr = 1 + len / XDMAC_MAX_WORD_SIZE;

-	xd = kzalloc(struct_size(xd, nodes, nr), GFP_NOWAIT);
+	xd = kzalloc_flex(*xd, nodes, nr, GFP_NOWAIT);
 	if (!xd)
 		return NULL;
 	xd->nr_node = nr;
@@ -348,7 +348,7 @@ uniphier_xdmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
 		return NULL;
 	}

-	xd = kzalloc(struct_size(xd, nodes, sg_len), GFP_NOWAIT);
+	xd = kzalloc_flex(*xd, nodes, sg_len, GFP_NOWAIT);
 	if (!xd)
 		return NULL;
 	xd->nr_node = sg_len;
diff --git a/drivers/dma/xilinx/xdma.c b/drivers/dma/xilinx/xdma.c
index 118199a04902..d02a4dac2291 100644
--- a/drivers/dma/xilinx/xdma.c
+++ b/drivers/dma/xilinx/xdma.c
@@ -275,7 +275,7 @@ xdma_alloc_desc(struct xdma_chan *chan, u32 desc_num, bool cyclic)
 	void *addr;
 	int i, j;

-	sw_desc = kzalloc(sizeof(*sw_desc), GFP_NOWAIT);
+	sw_desc = kzalloc_obj(*sw_desc, GFP_NOWAIT);
 	if (!sw_desc)
 		return NULL;

@@ -284,8 +284,8 @@ xdma_alloc_desc(struct xdma_chan *chan, u32 desc_num, bool cyclic)
 	sw_desc->cyclic = cyclic;
 	sw_desc->error = false;
 	dblk_num = DIV_ROUND_UP(desc_num, XDMA_DESC_ADJACENT);
-	sw_desc->desc_blocks = kcalloc(dblk_num, sizeof(*sw_desc->desc_blocks),
-				       GFP_NOWAIT);
+	sw_desc->desc_blocks = kzalloc_objs(*sw_desc->desc_blocks, dblk_num,
+					    GFP_NOWAIT);
 	if (!sw_desc->desc_blocks)
 		goto failed;

diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c
index 53229d8ebc52..b53292e02448 100644
--- a/drivers/dma/xilinx/xilinx_dma.c
+++ b/drivers/dma/xilinx/xilinx_dma.c
@@ -836,7 +836,7 @@ xilinx_dma_alloc_tx_descriptor(struct xilinx_dma_chan *chan)
 {
 	struct xilinx_dma_tx_descriptor *desc;

-	desc = kzalloc(sizeof(*desc), GFP_NOWAIT);
+	desc = kzalloc_obj(*desc, GFP_NOWAIT);
 	if (!desc)
 		return NULL;

diff --git a/drivers/dma/xilinx/xilinx_dpdma.c b/drivers/dma/xilinx/xilinx_dpdma.c
index ee5d9fdbfd7f..d9a3542c4531 100644
--- a/drivers/dma/xilinx/xilinx_dpdma.c
+++ b/drivers/dma/xilinx/xilinx_dpdma.c
@@ -635,7 +635,7 @@ xilinx_dpdma_chan_alloc_tx_desc(struct xilinx_dpdma_chan *chan)
 {
 	struct xilinx_dpdma_tx_desc *tx_desc;

-	tx_desc = kzalloc(sizeof(*tx_desc), GFP_NOWAIT);
+	tx_desc = kzalloc_obj(*tx_desc, GFP_NOWAIT);
 	if (!tx_desc)
 		return NULL;

diff --git a/drivers/dma/xilinx/zynqmp_dma.c b/drivers/dma/xilinx/zynqmp_dma.c
index 7bb3716e60da..b9133f4fc3f9 100644
--- a/drivers/dma/xilinx/zynqmp_dma.c
+++ b/drivers/dma/xilinx/zynqmp_dma.c
@@ -482,8 +482,8 @@ static int zynqmp_dma_alloc_chan_resources(struct dma_chan *dchan)
 	if (ret < 0)
 		return ret;

-	chan->sw_desc_pool = kcalloc(ZYNQMP_DMA_NUM_DESCS, sizeof(*desc),
-				     GFP_KERNEL);
+	chan->sw_desc_pool = kzalloc_objs(*desc, ZYNQMP_DMA_NUM_DESCS,
+					  GFP_KERNEL);
 	if (!chan->sw_desc_pool)
 		return -ENOMEM;

diff --git a/drivers/dpll/dpll_core.c b/drivers/dpll/dpll_core.c
index 627a5b39a0ef..cd41fbedd9fe 100644
--- a/drivers/dpll/dpll_core.c
+++ b/drivers/dpll/dpll_core.c
@@ -205,7 +205,7 @@ dpll_xa_ref_pin_add(struct xarray *xa_pins, struct dpll_pin *pin,
 	}

 	if (!ref_exists) {
-		ref = kzalloc(sizeof(*ref), GFP_KERNEL);
+		ref = kzalloc_obj(*ref, GFP_KERNEL);
 		if (!ref)
 			return -ENOMEM;
 		ref->pin = pin;
@@ -218,7 +218,7 @@ dpll_xa_ref_pin_add(struct xarray *xa_pins, struct dpll_pin *pin,
 		refcount_set(&ref->refcount, 1);
 	}

-	reg = kzalloc(sizeof(*reg), GFP_KERNEL);
+	reg = kzalloc_obj(*reg, GFP_KERNEL);
 	if (!reg) {
 		if (!ref_exists) {
 			xa_erase(xa_pins, pin->pin_idx);
@@ -286,7 +286,7 @@ dpll_xa_ref_dpll_add(struct xarray *xa_dplls, struct dpll_device *dpll,
 	}

 	if (!ref_exists) {
-		ref = kzalloc(sizeof(*ref), GFP_KERNEL);
+		ref = kzalloc_obj(*ref, GFP_KERNEL);
 		if (!ref)
 			return -ENOMEM;
 		ref->dpll = dpll;
@@ -299,7 +299,7 @@ dpll_xa_ref_dpll_add(struct xarray *xa_dplls, struct dpll_device *dpll,
 		refcount_set(&ref->refcount, 1);
 	}

-	reg = kzalloc(sizeof(*reg), GFP_KERNEL);
+	reg = kzalloc_obj(*reg, GFP_KERNEL);
 	if (!reg) {
 		if (!ref_exists) {
 			xa_erase(xa_dplls, dpll->id);
@@ -360,7 +360,7 @@ dpll_device_alloc(const u64 clock_id, u32 device_idx, struct module *module)
 	struct dpll_device *dpll;
 	int ret;

-	dpll = kzalloc(sizeof(*dpll), GFP_KERNEL);
+	dpll = kzalloc_obj(*dpll, GFP_KERNEL);
 	if (!dpll)
 		return ERR_PTR(-ENOMEM);
 	refcount_set(&dpll->refcount, 1);
@@ -490,7 +490,7 @@ int dpll_device_register(struct dpll_device *dpll, enum dpll_type type,
 		return -EEXIST;
 	}

-	reg = kzalloc(sizeof(*reg), GFP_KERNEL);
+	reg = kzalloc_obj(*reg, GFP_KERNEL);
 	if (!reg) {
 		mutex_unlock(&dpll_lock);
 		return -ENOMEM;
@@ -644,7 +644,7 @@ dpll_pin_alloc(u64 clock_id, u32 pin_idx, struct module *module,
 	} else if (pin_idx > INT_MAX) {
 		return ERR_PTR(-EINVAL);
 	}
-	pin = kzalloc(sizeof(*pin), GFP_KERNEL);
+	pin = kzalloc_obj(*pin, GFP_KERNEL);
 	if (!pin) {
 		ret = -ENOMEM;
 		goto err_pin_alloc;
diff --git a/drivers/dpll/zl3073x/dpll.c b/drivers/dpll/zl3073x/dpll.c
index 78edc36b17fb..e532fedf0d36 100644
--- a/drivers/dpll/zl3073x/dpll.c
+++ b/drivers/dpll/zl3073x/dpll.c
@@ -1372,7 +1372,7 @@ zl3073x_dpll_pin_alloc(struct zl3073x_dpll *zldpll, enum dpll_pin_direction dir,
 {
 	struct zl3073x_dpll_pin *pin;

-	pin = kzalloc(sizeof(*pin), GFP_KERNEL);
+	pin = kzalloc_obj(*pin, GFP_KERNEL);
 	if (!pin)
 		return ERR_PTR(-ENOMEM);

@@ -1944,7 +1944,7 @@ zl3073x_dpll_alloc(struct zl3073x_dev *zldev, u8 ch)
 {
 	struct zl3073x_dpll *zldpll;

-	zldpll = kzalloc(sizeof(*zldpll), GFP_KERNEL);
+	zldpll = kzalloc_obj(*zldpll, GFP_KERNEL);
 	if (!zldpll)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/dpll/zl3073x/fw.c b/drivers/dpll/zl3073x/fw.c
index 55b638247f4b..56b4eeadf4e3 100644
--- a/drivers/dpll/zl3073x/fw.c
+++ b/drivers/dpll/zl3073x/fw.c
@@ -129,7 +129,7 @@ zl3073x_fw_component_alloc(size_t size)
 {
 	struct zl3073x_fw_component *comp;

-	comp = kzalloc(sizeof(*comp), GFP_KERNEL);
+	comp = kzalloc_obj(*comp, GFP_KERNEL);
 	if (!comp)
 		return NULL;

@@ -313,7 +313,7 @@ struct zl3073x_fw *zl3073x_fw_load(struct zl3073x_dev *zldev, const char *data,
 	ssize_t rc;

 	/* Allocate firmware structure */
-	fw = kzalloc(sizeof(*fw), GFP_KERNEL);
+	fw = kzalloc_obj(*fw, GFP_KERNEL);
 	if (!fw)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/dpll/zl3073x/prop.c b/drivers/dpll/zl3073x/prop.c
index 8523dc8c226e..36b843f17156 100644
--- a/drivers/dpll/zl3073x/prop.c
+++ b/drivers/dpll/zl3073x/prop.c
@@ -198,7 +198,7 @@ struct zl3073x_pin_props *zl3073x_pin_props_get(struct zl3073x_dev *zldev,
 	const char *type;
 	u32 curr_freq;

-	props = kzalloc(sizeof(*props), GFP_KERNEL);
+	props = kzalloc_obj(*props, GFP_KERNEL);
 	if (!props)
 		return ERR_PTR(-ENOMEM);

@@ -289,7 +289,7 @@ struct zl3073x_pin_props *zl3073x_pin_props_get(struct zl3073x_dev *zldev,

 skip_fwnode_props:
 	/* Allocate frequency ranges list - extra slot for current frequency */
-	ranges = kcalloc(num_freqs + 1, sizeof(*ranges), GFP_KERNEL);
+	ranges = kzalloc_objs(*ranges, num_freqs + 1, GFP_KERNEL);
 	if (!ranges) {
 		rc = -ENOMEM;
 		goto err_alloc_ranges;
diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
index 63fca0ee2c23..183357b9f99a 100644
--- a/drivers/edac/amd64_edac.c
+++ b/drivers/edac/amd64_edac.c
@@ -3485,7 +3485,7 @@ static int dct_hw_info_get(struct amd64_pvt *pvt)

 static int umc_hw_info_get(struct amd64_pvt *pvt)
 {
-	pvt->umc = kcalloc(pvt->max_mcs, sizeof(struct amd64_umc), GFP_KERNEL);
+	pvt->umc = kzalloc_objs(struct amd64_umc, pvt->max_mcs, GFP_KERNEL);
 	if (!pvt->umc)
 		return -ENOMEM;

@@ -3716,7 +3716,7 @@ static int gpu_hw_info_get(struct amd64_pvt *pvt)
 	if (ret)
 		return ret;

-	pvt->umc = kcalloc(pvt->max_mcs, sizeof(struct amd64_umc), GFP_KERNEL);
+	pvt->umc = kzalloc_objs(struct amd64_umc, pvt->max_mcs, GFP_KERNEL);
 	if (!pvt->umc)
 		return -ENOMEM;

@@ -3916,7 +3916,7 @@ static int per_family_init(struct amd64_pvt *pvt)
 		scnprintf(pvt->ctl_name, sizeof(pvt->ctl_name), "F%02Xh_M%02Xh",
 			  pvt->fam, pvt->model);

-	pvt->csels = kcalloc(pvt->max_mcs, sizeof(*pvt->csels), GFP_KERNEL);
+	pvt->csels = kzalloc_objs(*pvt->csels, pvt->max_mcs, GFP_KERNEL);
 	if (!pvt->csels)
 		return -ENOMEM;

@@ -4000,13 +4000,13 @@ static int probe_one_instance(unsigned int nid)
 	int ret;

 	ret = -ENOMEM;
-	s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL);
+	s = kzalloc_obj(struct ecc_settings, GFP_KERNEL);
 	if (!s)
 		goto err_out;

 	ecc_stngs[nid] = s;

-	pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL);
+	pvt = kzalloc_obj(struct amd64_pvt, GFP_KERNEL);
 	if (!pvt)
 		goto err_settings;

@@ -4146,7 +4146,7 @@ static int __init amd64_edac_init(void)
 	opstate_init();

 	err = -ENOMEM;
-	ecc_stngs = kcalloc(amd_nb_num(), sizeof(ecc_stngs[0]), GFP_KERNEL);
+	ecc_stngs = kzalloc_objs(ecc_stngs[0], amd_nb_num(), GFP_KERNEL);
 	if (!ecc_stngs)
 		goto err_free;

diff --git a/drivers/edac/edac_device.c b/drivers/edac/edac_device.c
index 0734909b08a4..6bb6e4d435a4 100644
--- a/drivers/edac/edac_device.c
+++ b/drivers/edac/edac_device.c
@@ -67,17 +67,19 @@ edac_device_alloc_ctl_info(unsigned pvt_sz, char *dev_name, unsigned nr_instance

 	edac_dbg(4, "instances=%d blocks=%d\n", nr_instances, nr_blocks);

-	dev_ctl = kzalloc(sizeof(struct edac_device_ctl_info), GFP_KERNEL);
+	dev_ctl = kzalloc_obj(struct edac_device_ctl_info, GFP_KERNEL);
 	if (!dev_ctl)
 		return NULL;

-	dev_inst = kcalloc(nr_instances, sizeof(struct edac_device_instance), GFP_KERNEL);
+	dev_inst = kzalloc_objs(struct edac_device_instance, nr_instances,
+				GFP_KERNEL);
 	if (!dev_inst)
 		goto free;

 	dev_ctl->instances = dev_inst;

-	dev_blk = kcalloc(nr_instances * nr_blocks, sizeof(struct edac_device_block), GFP_KERNEL);
+	dev_blk = kzalloc_objs(struct edac_device_block,
+			       nr_instances * nr_blocks, GFP_KERNEL);
 	if (!dev_blk)
 		goto free;

@@ -642,22 +644,24 @@ int edac_dev_register(struct device *parent, char *name,
 		}
 	}

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

-	ras_attr_groups = kcalloc(attr_gcnt + 1, sizeof(*ras_attr_groups), GFP_KERNEL);
+	ras_attr_groups = kzalloc_objs(*ras_attr_groups, attr_gcnt + 1,
+				       GFP_KERNEL);
 	if (!ras_attr_groups)
 		goto ctx_free;

 	if (scrub_cnt) {
-		ctx->scrub = kcalloc(scrub_cnt, sizeof(*ctx->scrub), GFP_KERNEL);
+		ctx->scrub = kzalloc_objs(*ctx->scrub, scrub_cnt, GFP_KERNEL);
 		if (!ctx->scrub)
 			goto groups_free;
 	}

 	if (mem_repair_cnt) {
-		ctx->mem_repair = kcalloc(mem_repair_cnt, sizeof(*ctx->mem_repair), GFP_KERNEL);
+		ctx->mem_repair = kzalloc_objs(*ctx->mem_repair, mem_repair_cnt,
+					       GFP_KERNEL);
 		if (!ctx->mem_repair)
 			goto data_mem_free;
 	}
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index 0959320fe51c..2d74438837f4 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -216,14 +216,14 @@ static int edac_mc_alloc_csrows(struct mem_ctl_info *mci)
 	/*
 	 * Allocate and fill the csrow/channels structs
 	 */
-	mci->csrows = kcalloc(tot_csrows, sizeof(*mci->csrows), GFP_KERNEL);
+	mci->csrows = kzalloc_objs(*mci->csrows, tot_csrows, GFP_KERNEL);
 	if (!mci->csrows)
 		return -ENOMEM;

 	for (row = 0; row < tot_csrows; row++) {
 		struct csrow_info *csr;

-		csr = kzalloc(sizeof(**mci->csrows), GFP_KERNEL);
+		csr = kzalloc_obj(**mci->csrows, GFP_KERNEL);
 		if (!csr)
 			return -ENOMEM;

@@ -231,15 +231,15 @@ static int edac_mc_alloc_csrows(struct mem_ctl_info *mci)
 		csr->csrow_idx = row;
 		csr->mci = mci;
 		csr->nr_channels = tot_channels;
-		csr->channels = kcalloc(tot_channels, sizeof(*csr->channels),
-					GFP_KERNEL);
+		csr->channels = kzalloc_objs(*csr->channels, tot_channels,
+					     GFP_KERNEL);
 		if (!csr->channels)
 			return -ENOMEM;

 		for (chn = 0; chn < tot_channels; chn++) {
 			struct rank_info *chan;

-			chan = kzalloc(sizeof(**csr->channels), GFP_KERNEL);
+			chan = kzalloc_obj(**csr->channels, GFP_KERNEL);
 			if (!chan)
 				return -ENOMEM;

@@ -262,7 +262,7 @@ static int edac_mc_alloc_dimms(struct mem_ctl_info *mci)
 	/*
 	 * Allocate and fill the dimm structs
 	 */
-	mci->dimms  = kcalloc(mci->tot_dimms, sizeof(*mci->dimms), GFP_KERNEL);
+	mci->dimms  = kzalloc_objs(*mci->dimms, mci->tot_dimms, GFP_KERNEL);
 	if (!mci->dimms)
 		return -ENOMEM;

@@ -276,7 +276,7 @@ static int edac_mc_alloc_dimms(struct mem_ctl_info *mci)

 		chan = mci->csrows[row]->channels[chn];

-		dimm = kzalloc(sizeof(**mci->dimms), GFP_KERNEL);
+		dimm = kzalloc_obj(**mci->dimms, GFP_KERNEL);
 		if (!dimm)
 			return -ENOMEM;
 		mci->dimms[idx] = dimm;
@@ -362,11 +362,11 @@ struct mem_ctl_info *edac_mc_alloc(unsigned int mc_num,
 			per_rank = true;
 	}

-	mci = kzalloc(sizeof(struct mem_ctl_info), GFP_KERNEL);
+	mci = kzalloc_obj(struct mem_ctl_info, GFP_KERNEL);
 	if (!mci)
 		return NULL;

-	mci->layers = kcalloc(n_layers, sizeof(struct edac_mc_layer), GFP_KERNEL);
+	mci->layers = kzalloc_objs(struct edac_mc_layer, n_layers, GFP_KERNEL);
 	if (!mci->layers)
 		goto error;

diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
index 091cc6aae8a9..629158cd505c 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -648,7 +648,7 @@ int __init edac_mc_sysfs_init(void)
 {
 	int err;

-	mci_pdev = kzalloc(sizeof(*mci_pdev), GFP_KERNEL);
+	mci_pdev = kzalloc_obj(*mci_pdev, GFP_KERNEL);
 	if (!mci_pdev)
 		return -ENOMEM;

diff --git a/drivers/edac/edac_pci.c b/drivers/edac/edac_pci.c
index 64c142aecca7..c1c9dc6ffa2f 100644
--- a/drivers/edac/edac_pci.c
+++ b/drivers/edac/edac_pci.c
@@ -32,7 +32,7 @@ struct edac_pci_ctl_info *edac_pci_alloc_ctl_info(unsigned int sz_pvt,

 	edac_dbg(1, "\n");

-	pci = kzalloc(sizeof(struct edac_pci_ctl_info), GFP_KERNEL);
+	pci = kzalloc_obj(struct edac_pci_ctl_info, GFP_KERNEL);
 	if (!pci)
 		return NULL;

diff --git a/drivers/edac/edac_pci_sysfs.c b/drivers/edac/edac_pci_sysfs.c
index 7b44afcf48db..f1b0f3ba7f72 100644
--- a/drivers/edac/edac_pci_sysfs.c
+++ b/drivers/edac/edac_pci_sysfs.c
@@ -361,7 +361,7 @@ static int edac_pci_main_kobj_setup(void)
 		goto decrement_count_fail;
 	}

-	edac_pci_top_main_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL);
+	edac_pci_top_main_kobj = kzalloc_obj(struct kobject, GFP_KERNEL);
 	if (!edac_pci_top_main_kobj) {
 		edac_dbg(1, "Failed to allocate\n");
 		err = -ENOMEM;
diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c
index 91e0a88ef904..dd1a5e575230 100644
--- a/drivers/edac/i7core_edac.c
+++ b/drivers/edac/i7core_edac.c
@@ -455,12 +455,12 @@ static struct i7core_dev *alloc_i7core_dev(u8 socket,
 {
 	struct i7core_dev *i7core_dev;

-	i7core_dev = kzalloc(sizeof(*i7core_dev), GFP_KERNEL);
+	i7core_dev = kzalloc_obj(*i7core_dev, GFP_KERNEL);
 	if (!i7core_dev)
 		return NULL;

-	i7core_dev->pdev = kcalloc(table->n_devs, sizeof(*i7core_dev->pdev),
-				   GFP_KERNEL);
+	i7core_dev->pdev = kzalloc_objs(*i7core_dev->pdev, table->n_devs,
+					GFP_KERNEL);
 	if (!i7core_dev->pdev) {
 		kfree(i7core_dev);
 		return NULL;
@@ -1159,7 +1159,7 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
 	struct i7core_pvt *pvt = mci->pvt_info;
 	int rc;

-	pvt->addrmatch_dev = kzalloc(sizeof(*pvt->addrmatch_dev), GFP_KERNEL);
+	pvt->addrmatch_dev = kzalloc_obj(*pvt->addrmatch_dev, GFP_KERNEL);
 	if (!pvt->addrmatch_dev)
 		return -ENOMEM;

@@ -1177,8 +1177,8 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
 		goto err_put_addrmatch;

 	if (!pvt->is_registered) {
-		pvt->chancounts_dev = kzalloc(sizeof(*pvt->chancounts_dev),
-					      GFP_KERNEL);
+		pvt->chancounts_dev = kzalloc_obj(*pvt->chancounts_dev,
+						  GFP_KERNEL);
 		if (!pvt->chancounts_dev) {
 			rc = -ENOMEM;
 			goto err_del_addrmatch;
diff --git a/drivers/edac/igen6_edac.c b/drivers/edac/igen6_edac.c
index 045c20179cd3..fa1cabfe6909 100644
--- a/drivers/edac/igen6_edac.c
+++ b/drivers/edac/igen6_edac.c
@@ -1549,7 +1549,7 @@ static int igen6_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

 	edac_dbg(2, "\n");

-	igen6_pvt = kzalloc(sizeof(*igen6_pvt), GFP_KERNEL);
+	igen6_pvt = kzalloc_obj(*igen6_pvt, GFP_KERNEL);
 	if (!igen6_pvt)
 		return -ENOMEM;

diff --git a/drivers/edac/imh_base.c b/drivers/edac/imh_base.c
index 4348b3883b45..a37be2372764 100644
--- a/drivers/edac/imh_base.c
+++ b/drivers/edac/imh_base.c
@@ -171,7 +171,7 @@ static int __get_ddr_munits(struct res_config *cfg, struct skx_dev *d,
 		d->imc[lmc].lmc = lmc;

 		/* Create the imc device instance. */
-		dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+		dev = kzalloc_obj(*dev, GFP_KERNEL);
 		if (!dev)
 			return -ENOMEM;

@@ -257,7 +257,7 @@ static int imh_get_all_mmio_base_h(struct res_config *cfg, struct list_head *eda
 	struct skx_dev *d;

 	for (i = 0; i < n; i++) {
-		d = kzalloc(struct_size(d, imc, imc_num), GFP_KERNEL);
+		d = kzalloc_flex(*d, imc, imc_num, GFP_KERNEL);
 		if (!d)
 			return -ENOMEM;

diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
index d5f12219598a..79fc3ace6a10 100644
--- a/drivers/edac/sb_edac.c
+++ b/drivers/edac/sb_edac.c
@@ -771,13 +771,12 @@ static struct sbridge_dev *alloc_sbridge_dev(int seg, u8 bus, enum domain dom,
 {
 	struct sbridge_dev *sbridge_dev;

-	sbridge_dev = kzalloc(sizeof(*sbridge_dev), GFP_KERNEL);
+	sbridge_dev = kzalloc_obj(*sbridge_dev, GFP_KERNEL);
 	if (!sbridge_dev)
 		return NULL;

-	sbridge_dev->pdev = kcalloc(table->n_devs_per_imc,
-				    sizeof(*sbridge_dev->pdev),
-				    GFP_KERNEL);
+	sbridge_dev->pdev = kzalloc_objs(*sbridge_dev->pdev,
+					 table->n_devs_per_imc, GFP_KERNEL);
 	if (!sbridge_dev->pdev) {
 		kfree(sbridge_dev);
 		return NULL;
diff --git a/drivers/edac/skx_common.c b/drivers/edac/skx_common.c
index 3276afe43922..709c939e5919 100644
--- a/drivers/edac/skx_common.c
+++ b/drivers/edac/skx_common.c
@@ -346,7 +346,7 @@ int skx_get_all_bus_mappings(struct res_config *cfg, struct list_head **list)
 		if (!pdev)
 			break;
 		ndev++;
-		d = kzalloc(struct_size(d, imc, imc_num), GFP_KERNEL);
+		d = kzalloc_flex(*d, imc, imc_num, GFP_KERNEL);
 		if (!d) {
 			pci_dev_put(pdev);
 			return -ENOMEM;
diff --git a/drivers/edac/versalnet_edac.c b/drivers/edac/versalnet_edac.c
index 1a1092793092..3cc885fa384c 100644
--- a/drivers/edac/versalnet_edac.c
+++ b/drivers/edac/versalnet_edac.c
@@ -559,7 +559,7 @@ static int setup_mcdi(struct mc_priv *mc_priv)
 	struct cdx_mcdi *amd_mcdi;
 	int ret, i;

-	amd_mcdi = kzalloc(sizeof(*amd_mcdi), GFP_KERNEL);
+	amd_mcdi = kzalloc_obj(*amd_mcdi, GFP_KERNEL);
 	if (!amd_mcdi)
 		return -ENOMEM;

@@ -812,7 +812,7 @@ static int init_versalnet(struct mc_priv *priv, struct platform_device *pdev)
 		priv->mci[i] = mci;
 		priv->dwidth = dt;

-		dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+		dev = kzalloc_obj(*dev, GFP_KERNEL);
 		dev->release = versal_edac_release;
 		name = kmalloc(32, GFP_KERNEL);
 		sprintf(name, "versal-net-ddrmc5-edac-%d", i);
diff --git a/drivers/eisa/eisa-bus.c b/drivers/eisa/eisa-bus.c
index bd76d599109c..ffabe1bf4c13 100644
--- a/drivers/eisa/eisa-bus.c
+++ b/drivers/eisa/eisa-bus.c
@@ -317,7 +317,7 @@ static int __init eisa_probe(struct eisa_root_device *root)
 	/* First try to get hold of slot 0. If there is no device
 	 * here, simply fail, unless root->force_probe is set. */

-	edev = kzalloc(sizeof(*edev), GFP_KERNEL);
+	edev = kzalloc_obj(*edev, GFP_KERNEL);
 	if (!edev)
 		return -ENOMEM;

@@ -350,7 +350,7 @@ static int __init eisa_probe(struct eisa_root_device *root)
  force_probe:

 	for (c = 0, i = 1; i <= root->slots; i++) {
-		edev = kzalloc(sizeof(*edev), GFP_KERNEL);
+		edev = kzalloc_obj(*edev, GFP_KERNEL);
 		if (!edev) {
 			dev_err(root->dev, "EISA: Out of memory for slot %d\n",
 				i);
diff --git a/drivers/extcon/extcon-usbc-cros-ec.c b/drivers/extcon/extcon-usbc-cros-ec.c
index 1fb627ea8b50..cf30d54fb418 100644
--- a/drivers/extcon/extcon-usbc-cros-ec.c
+++ b/drivers/extcon/extcon-usbc-cros-ec.c
@@ -68,7 +68,7 @@ static int cros_ec_pd_command(struct cros_ec_extcon_info *info,
 	struct cros_ec_command *msg;
 	int ret;

-	msg = kzalloc(struct_size(msg, data, max(outsize, insize)), GFP_KERNEL);
+	msg = kzalloc_flex(*msg, data, max(outsize, insize), GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
index e7f55c021e56..8fc412ad3cf2 100644
--- a/drivers/extcon/extcon.c
+++ b/drivers/extcon/extcon.c
@@ -1060,7 +1060,7 @@ struct extcon_dev *extcon_dev_allocate(const unsigned int *supported_cable)
 	if (!supported_cable)
 		return ERR_PTR(-EINVAL);

-	edev = kzalloc(sizeof(*edev), GFP_KERNEL);
+	edev = kzalloc_obj(*edev, GFP_KERNEL);
 	if (!edev)
 		return ERR_PTR(-ENOMEM);

@@ -1098,8 +1098,8 @@ static int extcon_alloc_cables(struct extcon_dev *edev)
 	if (!edev->max_supported)
 		return 0;

-	edev->cables = kcalloc(edev->max_supported, sizeof(*edev->cables),
-			       GFP_KERNEL);
+	edev->cables = kzalloc_objs(*edev->cables, edev->max_supported,
+				    GFP_KERNEL);
 	if (!edev->cables)
 		return -ENOMEM;

@@ -1160,13 +1160,13 @@ static int extcon_alloc_muex(struct extcon_dev *edev)
 	for (index = 0; edev->mutually_exclusive[index]; index++)
 		;

-	edev->attrs_muex = kcalloc(index + 1, sizeof(*edev->attrs_muex),
-				   GFP_KERNEL);
+	edev->attrs_muex = kzalloc_objs(*edev->attrs_muex, index + 1,
+					GFP_KERNEL);
 	if (!edev->attrs_muex)
 		return -ENOMEM;

-	edev->d_attrs_muex = kcalloc(index, sizeof(*edev->d_attrs_muex),
-				     GFP_KERNEL);
+	edev->d_attrs_muex = kzalloc_objs(*edev->d_attrs_muex, index,
+					  GFP_KERNEL);
 	if (!edev->d_attrs_muex) {
 		kfree(edev->attrs_muex);
 		return -ENOMEM;
@@ -1210,9 +1210,9 @@ static int extcon_alloc_groups(struct extcon_dev *edev)
 	if (!edev->max_supported)
 		return 0;

-	edev->extcon_dev_type.groups = kcalloc(edev->max_supported + 2,
-					  sizeof(*edev->extcon_dev_type.groups),
-					  GFP_KERNEL);
+	edev->extcon_dev_type.groups = kzalloc_objs(*edev->extcon_dev_type.groups,
+						    edev->max_supported + 2,
+						    GFP_KERNEL);
 	if (!edev->extcon_dev_type.groups)
 		return -ENOMEM;

@@ -1294,8 +1294,8 @@ int extcon_dev_register(struct extcon_dev *edev)

 	spin_lock_init(&edev->lock);
 	if (edev->max_supported) {
-		edev->nh = kcalloc(edev->max_supported, sizeof(*edev->nh),
-				GFP_KERNEL);
+		edev->nh = kzalloc_objs(*edev->nh, edev->max_supported,
+					GFP_KERNEL);
 		if (!edev->nh) {
 			ret = -ENOMEM;
 			goto err_alloc_nh;
diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c
index 9e964fdd175c..6d1a59e33d2e 100644
--- a/drivers/firewire/core-cdev.c
+++ b/drivers/firewire/core-cdev.c
@@ -291,7 +291,7 @@ static int fw_device_op_open(struct inode *inode, struct file *file)
 		return -ENODEV;
 	}

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (client == NULL) {
 		fw_device_put(device);
 		return -ENOMEM;
@@ -412,7 +412,7 @@ static void queue_bus_reset_event(struct client *client)
 	struct client_resource *resource;
 	unsigned long index;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (e == NULL)
 		return;

@@ -745,8 +745,8 @@ static void handle_request(struct fw_card *card, struct fw_request *request,
 	if (is_fcp)
 		fw_request_get(request);

-	r = kmalloc(sizeof(*r), GFP_ATOMIC);
-	e = kmalloc(sizeof(*e), GFP_ATOMIC);
+	r = kmalloc_obj(*r, GFP_ATOMIC);
+	e = kmalloc_obj(*e, GFP_ATOMIC);
 	if (r == NULL || e == NULL)
 		goto failed;

@@ -837,7 +837,7 @@ static int ioctl_allocate(struct client *client, union ioctl_arg *arg)
 	struct fw_address_region region;
 	int ret;

-	r = kmalloc(sizeof(*r), GFP_KERNEL);
+	r = kmalloc_obj(*r, GFP_KERNEL);
 	if (r == NULL)
 		return -ENOMEM;

@@ -941,7 +941,7 @@ static int ioctl_add_descriptor(struct client *client, union ioctl_arg *arg)
 	if (a->length > 256)
 		return -EINVAL;

-	r = kmalloc(struct_size(r, data, a->length), GFP_KERNEL);
+	r = kmalloc_flex(*r, data, a->length, GFP_KERNEL);
 	if (r == NULL)
 		return -ENOMEM;

@@ -1006,7 +1006,7 @@ static void iso_mc_callback(struct fw_iso_context *context,
 	struct client *client = data;
 	struct iso_interrupt_mc_event *e;

-	e = kmalloc(sizeof(*e), GFP_KERNEL);
+	e = kmalloc_obj(*e, GFP_KERNEL);
 	if (e == NULL)
 		return;

@@ -1409,9 +1409,9 @@ static int init_iso_resource(struct client *client,
 	    request->bandwidth > BANDWIDTH_AVAILABLE_INITIAL)
 		return -EINVAL;

-	r  = kmalloc(sizeof(*r), GFP_KERNEL);
-	e1 = kmalloc(sizeof(*e1), GFP_KERNEL);
-	e2 = kmalloc(sizeof(*e2), GFP_KERNEL);
+	r = kmalloc_obj(*r, GFP_KERNEL);
+	e1 = kmalloc_obj(*e1, GFP_KERNEL);
+	e2 = kmalloc_obj(*e2, GFP_KERNEL);
 	if (r == NULL || e1 == NULL || e2 == NULL) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
index 9b0080397154..3281f6c6bedb 100644
--- a/drivers/firewire/core-device.c
+++ b/drivers/firewire/core-device.c
@@ -849,7 +849,7 @@ static void create_units(struct fw_device *device)
 		 * Get the address of the unit directory and try to
 		 * match the drivers id_tables against it.
 		 */
-		unit = kzalloc(sizeof(*unit), GFP_KERNEL);
+		unit = kzalloc_obj(*unit, GFP_KERNEL);
 		if (unit == NULL)
 			continue;

@@ -1339,7 +1339,7 @@ void fw_node_event(struct fw_card *card, struct fw_node *node, int event)
 		 * without actually having a link.
 		 */
  create:
-		device = kzalloc(sizeof(*device), GFP_ATOMIC);
+		device = kzalloc_obj(*device, GFP_ATOMIC);
 		if (device == NULL)
 			break;

diff --git a/drivers/firewire/core-iso.c b/drivers/firewire/core-iso.c
index 3190b2ca1298..21c61405f794 100644
--- a/drivers/firewire/core-iso.c
+++ b/drivers/firewire/core-iso.c
@@ -30,7 +30,9 @@

 int fw_iso_buffer_alloc(struct fw_iso_buffer *buffer, int page_count)
 {
-	struct page **page_array __free(kfree) = kcalloc(page_count, sizeof(page_array[0]), GFP_KERNEL);
+	struct page **page_array __free(kfree) = kzalloc_objs(page_array[0],
+							      page_count,
+							      GFP_KERNEL);

 	if (!page_array)
 		return -ENOMEM;
@@ -55,8 +57,9 @@ int fw_iso_buffer_alloc(struct fw_iso_buffer *buffer, int page_count)
 int fw_iso_buffer_map_dma(struct fw_iso_buffer *buffer, struct fw_card *card,
 			  enum dma_data_direction direction)
 {
-	dma_addr_t *dma_addrs __free(kfree) = kcalloc(buffer->page_count, sizeof(dma_addrs[0]),
-						      GFP_KERNEL);
+	dma_addr_t *dma_addrs __free(kfree) = kzalloc_objs(dma_addrs[0],
+							   buffer->page_count,
+							   GFP_KERNEL);
 	int i;

 	if (!dma_addrs)
diff --git a/drivers/firewire/core-topology.c b/drivers/firewire/core-topology.c
index ed3ae8cdb0cd..bb2d2db30795 100644
--- a/drivers/firewire/core-topology.c
+++ b/drivers/firewire/core-topology.c
@@ -27,7 +27,7 @@ static struct fw_node *fw_node_create(u32 sid, int port_count, int color)
 {
 	struct fw_node *node;

-	node = kzalloc(struct_size(node, ports, port_count), GFP_ATOMIC);
+	node = kzalloc_flex(*node, ports, port_count, GFP_ATOMIC);
 	if (node == NULL)
 		return NULL;

diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
index 6d6446713539..b9f01e871fe3 100644
--- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
@@ -338,7 +338,7 @@ static struct fwnet_fragment_info *fwnet_frag_new(
 		}
 	}

-	new = kmalloc(sizeof(*new), GFP_ATOMIC);
+	new = kmalloc_obj(*new, GFP_ATOMIC);
 	if (!new)
 		return NULL;

@@ -356,7 +356,7 @@ static struct fwnet_partial_datagram *fwnet_pd_new(struct net_device *net,
 	struct fwnet_partial_datagram *new;
 	struct fwnet_fragment_info *fi;

-	new = kmalloc(sizeof(*new), GFP_ATOMIC);
+	new = kmalloc_obj(*new, GFP_ATOMIC);
 	if (!new)
 		goto fail;

@@ -1402,7 +1402,7 @@ static int fwnet_add_peer(struct fwnet_device *dev,
 {
 	struct fwnet_peer *peer;

-	peer = kmalloc(sizeof(*peer), GFP_KERNEL);
+	peer = kmalloc_obj(*peer, GFP_KERNEL);
 	if (!peer)
 		return -ENOMEM;

diff --git a/drivers/firewire/nosy.c b/drivers/firewire/nosy.c
index e59053738a43..547d560f353f 100644
--- a/drivers/firewire/nosy.c
+++ b/drivers/firewire/nosy.c
@@ -281,7 +281,7 @@ nosy_open(struct inode *inode, struct file *file)
 	if (lynx == NULL)
 		return -ENODEV;

-	client = kmalloc(sizeof *client, GFP_KERNEL);
+	client = kmalloc_obj(*client, GFP_KERNEL);
 	if (client == NULL)
 		goto fail;

@@ -545,7 +545,7 @@ add_card(struct pci_dev *dev, const struct pci_device_id *unused)
 	}
 	pci_set_master(dev);

-	lynx = kzalloc(sizeof *lynx, GFP_KERNEL);
+	lynx = kzalloc_obj(*lynx, GFP_KERNEL);
 	if (lynx == NULL) {
 		dev_err(&dev->dev, "Failed to allocate control structure\n");
 		ret = -ENOMEM;
diff --git a/drivers/firewire/sbp2.c b/drivers/firewire/sbp2.c
index bb1a510b6423..89e0873501f5 100644
--- a/drivers/firewire/sbp2.c
+++ b/drivers/firewire/sbp2.c
@@ -558,7 +558,7 @@ static int sbp2_send_management_orb(struct sbp2_logical_unit *lu, int node_id,
 	if (function == SBP2_LOGOUT_REQUEST && fw_device_is_shutdown(device))
 		return 0;

-	orb = kzalloc(sizeof(*orb), GFP_NOIO);
+	orb = kzalloc_obj(*orb, GFP_NOIO);
 	if (orb == NULL)
 		return -ENOMEM;

@@ -667,7 +667,7 @@ static void sbp2_agent_reset_no_wait(struct sbp2_logical_unit *lu)
 	struct fw_transaction *t;
 	static __be32 d;

-	t = kmalloc(sizeof(*t), GFP_ATOMIC);
+	t = kmalloc_obj(*t, GFP_ATOMIC);
 	if (t == NULL)
 		return;

@@ -966,7 +966,7 @@ static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry)
 {
 	struct sbp2_logical_unit *lu;

-	lu = kmalloc(sizeof(*lu), GFP_KERNEL);
+	lu = kmalloc_obj(*lu, GFP_KERNEL);
 	if (!lu)
 		return -ENOMEM;

@@ -1449,7 +1449,7 @@ static enum scsi_qc_status sbp2_scsi_queuecommand(struct Scsi_Host *shost,
 	struct sbp2_command_orb *orb;
 	int generation;

-	orb = kzalloc(sizeof(*orb), GFP_ATOMIC);
+	orb = kzalloc_obj(*orb, GFP_ATOMIC);
 	if (orb == NULL)
 		return SCSI_MLQUEUE_HOST_BUSY;

diff --git a/drivers/firmware/arm_ffa/bus.c b/drivers/firmware/arm_ffa/bus.c
index 50bfe56c755e..fbd9af875a69 100644
--- a/drivers/firmware/arm_ffa/bus.c
+++ b/drivers/firmware/arm_ffa/bus.c
@@ -203,7 +203,7 @@ ffa_device_register(const struct ffa_partition_info *part_info,
 	if (id < 0)
 		return NULL;

-	ffa_dev = kzalloc(sizeof(*ffa_dev), GFP_KERNEL);
+	ffa_dev = kzalloc_obj(*ffa_dev, GFP_KERNEL);
 	if (!ffa_dev) {
 		ida_free(&ffa_bus_id, id);
 		return NULL;
diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c
index 8144f6a9f0e9..8962212ad218 100644
--- a/drivers/firmware/arm_ffa/driver.c
+++ b/drivers/firmware/arm_ffa/driver.c
@@ -410,7 +410,7 @@ ffa_partition_probe(const uuid_t *uuid, struct ffa_partition_info **buffer)
 	if (count <= 0)
 		return count;

-	pbuf = kcalloc(count, sizeof(*pbuf), GFP_KERNEL);
+	pbuf = kzalloc_objs(*pbuf, count, GFP_KERNEL);
 	if (!pbuf)
 		return -ENOMEM;

@@ -1376,7 +1376,7 @@ static int __ffa_notify_request(struct ffa_device *dev, bool is_per_vcpu,
 	if (notify_id >= FFA_MAX_NOTIFICATIONS)
 		return -EINVAL;

-	cb_info = kzalloc(sizeof(*cb_info), GFP_KERNEL);
+	cb_info = kzalloc_obj(*cb_info, GFP_KERNEL);
 	if (!cb_info)
 		return -ENOMEM;

@@ -1647,7 +1647,7 @@ static int ffa_xa_add_partition_info(struct ffa_device *dev)
 		}
 	}

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ret;

@@ -1655,7 +1655,7 @@ static int ffa_xa_add_partition_info(struct ffa_device *dev)
 	info->dev = dev;

 	if (!phead) {
-		phead = kzalloc(sizeof(*phead), GFP_KERNEL);
+		phead = kzalloc_obj(*phead, GFP_KERNEL);
 		if (!phead)
 			goto free_out;

@@ -2039,7 +2039,7 @@ static int __init ffa_init(void)
 	if (ret)
 		return ret;

-	drv_info = kzalloc(sizeof(*drv_info), GFP_KERNEL);
+	drv_info = kzalloc_obj(*drv_info, GFP_KERNEL);
 	if (!drv_info)
 		return -ENOMEM;

diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c
index c7698cfaa4e8..49a168c5ff85 100644
--- a/drivers/firmware/arm_scmi/bus.c
+++ b/drivers/firmware/arm_scmi/bus.c
@@ -90,7 +90,7 @@ static int scmi_protocol_device_request(const struct scmi_device_id *id_table)
 	 * No duplicate found for requested id_table, so let's create a new
 	 * requested device entry for this new valid request.
 	 */
-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (!rdev) {
 		ret = -ENOMEM;
 		goto out;
@@ -103,7 +103,7 @@ static int scmi_protocol_device_request(const struct scmi_device_id *id_table)
 	 * there.
 	 */
 	if (!phead) {
-		phead = kzalloc(sizeof(*phead), GFP_KERNEL);
+		phead = kzalloc_obj(*phead, GFP_KERNEL);
 		if (!phead) {
 			kfree(rdev);
 			ret = -ENOMEM;
@@ -445,7 +445,7 @@ __scmi_device_create(struct device_node *np, struct device *parent,
 		return NULL;
 	}

-	scmi_dev = kzalloc(sizeof(*scmi_dev), GFP_KERNEL);
+	scmi_dev = kzalloc_obj(*scmi_dev, GFP_KERNEL);
 	if (!scmi_dev)
 		return NULL;

diff --git a/drivers/firmware/arm_scmi/notify.c b/drivers/firmware/arm_scmi/notify.c
index dee9f238f6fd..d2a6390cbc5c 100644
--- a/drivers/firmware/arm_scmi/notify.c
+++ b/drivers/firmware/arm_scmi/notify.c
@@ -897,7 +897,7 @@ scmi_allocate_event_handler(struct scmi_notify_instance *ni, u32 evt_key)
 {
 	struct scmi_event_handler *hndl;

-	hndl = kzalloc(sizeof(*hndl), GFP_KERNEL);
+	hndl = kzalloc_obj(*hndl, GFP_KERNEL);
 	if (!hndl)
 		return NULL;
 	hndl->key = evt_key;
diff --git a/drivers/firmware/arm_scmi/raw_mode.c b/drivers/firmware/arm_scmi/raw_mode.c
index 73db5492ab44..99a4a70cf117 100644
--- a/drivers/firmware/arm_scmi/raw_mode.c
+++ b/drivers/firmware/arm_scmi/raw_mode.c
@@ -908,7 +908,7 @@ static int scmi_dbg_raw_mode_open(struct inode *inode, struct file *filp)
 		return -ENODEV;

 	raw = inode->i_private;
-	rd = kzalloc(sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_obj(*rd, GFP_KERNEL);
 	if (!rd)
 		return -ENOMEM;

diff --git a/drivers/firmware/arm_scpi.c b/drivers/firmware/arm_scpi.c
index 87c323de17b9..70a1697a1e6b 100644
--- a/drivers/firmware/arm_scpi.c
+++ b/drivers/firmware/arm_scpi.c
@@ -633,14 +633,14 @@ static struct scpi_dvfs_info *scpi_dvfs_get_info(u8 domain)
 	if (!buf.opp_count)
 		return ERR_PTR(-ENOENT);

-	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	info = kmalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);

 	info->count = buf.opp_count;
 	info->latency = le16_to_cpu(buf.latency) * 1000; /* uS to nS */

-	info->opps = kcalloc(info->count, sizeof(*opp), GFP_KERNEL);
+	info->opps = kzalloc_objs(*opp, info->count, GFP_KERNEL);
 	if (!info->opps) {
 		kfree(info);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c
index 71e2a9a89f6a..c8d737e754e6 100644
--- a/drivers/firmware/arm_sdei.c
+++ b/drivers/firmware/arm_sdei.c
@@ -205,7 +205,7 @@ static struct sdei_event *sdei_event_create(u32 event_num,

 	lockdep_assert_held(&sdei_events_lock);

-	event = kzalloc(sizeof(*event), GFP_KERNEL);
+	event = kzalloc_obj(*event, GFP_KERNEL);
 	if (!event) {
 		err = -ENOMEM;
 		goto fail;
@@ -227,7 +227,7 @@ static struct sdei_event *sdei_event_create(u32 event_num,
 	event->type = result;

 	if (event->type == SDEI_EVENT_TYPE_SHARED) {
-		reg = kzalloc(sizeof(*reg), GFP_KERNEL);
+		reg = kzalloc_obj(*reg, GFP_KERNEL);
 		if (!reg) {
 			err = -ENOMEM;
 			goto fail;
diff --git a/drivers/firmware/cirrus/cs_dsp.c b/drivers/firmware/cirrus/cs_dsp.c
index 9fdb50f3fec6..148d31eea977 100644
--- a/drivers/firmware/cirrus/cs_dsp.c
+++ b/drivers/firmware/cirrus/cs_dsp.c
@@ -1059,7 +1059,7 @@ static int cs_dsp_create_control(struct cs_dsp *dsp,
 		}
 	}

-	ctl = kzalloc(sizeof(*ctl), GFP_KERNEL);
+	ctl = kzalloc_obj(*ctl, GFP_KERNEL);
 	if (!ctl)
 		return -ENOMEM;

@@ -1781,7 +1781,7 @@ static struct cs_dsp_alg_region *cs_dsp_create_region(struct cs_dsp *dsp,
 {
 	struct cs_dsp_alg_region_list_item *item;

-	item = kzalloc(sizeof(*item), GFP_KERNEL);
+	item = kzalloc_obj(*item, GFP_KERNEL);
 	if (!item)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/firmware/dmi-id.c b/drivers/firmware/dmi-id.c
index 08e1552c2f74..dddddfbc479d 100644
--- a/drivers/firmware/dmi-id.c
+++ b/drivers/firmware/dmi-id.c
@@ -237,7 +237,7 @@ static int __init dmi_id_init(void)
 	if (ret)
 		return ret;

-	dmi_dev = kzalloc(sizeof(*dmi_dev), GFP_KERNEL);
+	dmi_dev = kzalloc_obj(*dmi_dev, GFP_KERNEL);
 	if (!dmi_dev) {
 		ret = -ENOMEM;
 		goto fail_class_unregister;
diff --git a/drivers/firmware/dmi-sysfs.c b/drivers/firmware/dmi-sysfs.c
index 9cc963b2edc0..4424ad075aff 100644
--- a/drivers/firmware/dmi-sysfs.c
+++ b/drivers/firmware/dmi-sysfs.c
@@ -451,7 +451,7 @@ static int dmi_system_event_log(struct dmi_sysfs_entry *entry)
 {
 	int ret;

-	entry->child = kzalloc(sizeof(*entry->child), GFP_KERNEL);
+	entry->child = kzalloc_obj(*entry->child, GFP_KERNEL);
 	if (!entry->child)
 		return -ENOMEM;
 	ret = kobject_init_and_add(entry->child,
@@ -586,7 +586,7 @@ static void __init dmi_sysfs_register_handle(const struct dmi_header *dh,
 		return;

 	/* Allocate and register a new entry into the entries set */
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		*ret = -ENOMEM;
 		return;
diff --git a/drivers/firmware/edd.c b/drivers/firmware/edd.c
index 55dec4eb2c00..631fbd3ea60c 100644
--- a/drivers/firmware/edd.c
+++ b/drivers/firmware/edd.c
@@ -740,7 +740,7 @@ edd_init(void)
 		return -ENOMEM;

 	for (i = 0; i < edd_num_devices(); i++) {
-		edev = kzalloc(sizeof (*edev), GFP_KERNEL);
+		edev = kzalloc_obj(*edev, GFP_KERNEL);
 		if (!edev) {
 			rc = -ENOMEM;
 			goto out;
diff --git a/drivers/firmware/efi/apple-properties.c b/drivers/firmware/efi/apple-properties.c
index ea84108035eb..c458852cea76 100644
--- a/drivers/firmware/efi/apple-properties.c
+++ b/drivers/firmware/efi/apple-properties.c
@@ -146,8 +146,8 @@ static int __init unmarshal_devices(struct properties_header *properties)
 			goto skip_device;
 		}

-		entry = kcalloc(dev_header->prop_count + 1, sizeof(*entry),
-				GFP_KERNEL);
+		entry = kzalloc_objs(*entry, dev_header->prop_count + 1,
+				     GFP_KERNEL);
 		if (!entry) {
 			dev_err(dev, "cannot allocate properties\n");
 			goto skip_device;
diff --git a/drivers/firmware/efi/arm-runtime.c b/drivers/firmware/efi/arm-runtime.c
index 53a5336cde5a..35b69e629d6d 100644
--- a/drivers/firmware/efi/arm-runtime.c
+++ b/drivers/firmware/efi/arm-runtime.c
@@ -113,7 +113,7 @@ static int __init arm_enable_runtime_services(void)
 			if (!(md->attribute & EFI_MEMORY_SP))
 				continue;

-			res = kzalloc(sizeof(*res), GFP_KERNEL);
+			res = kzalloc_obj(*res, GFP_KERNEL);
 			if (WARN_ON(!res))
 				break;

diff --git a/drivers/firmware/efi/capsule-loader.c b/drivers/firmware/efi/capsule-loader.c
index 0c17bdd388e1..609637f88acc 100644
--- a/drivers/firmware/efi/capsule-loader.c
+++ b/drivers/firmware/efi/capsule-loader.c
@@ -282,7 +282,7 @@ static int efi_capsule_open(struct inode *inode, struct file *file)
 {
 	struct capsule_info *cap_info;

-	cap_info = kzalloc(sizeof(*cap_info), GFP_KERNEL);
+	cap_info = kzalloc_obj(*cap_info, GFP_KERNEL);
 	if (!cap_info)
 		return -ENOMEM;

@@ -292,7 +292,7 @@ static int efi_capsule_open(struct inode *inode, struct file *file)
 		return -ENOMEM;
 	}

-	cap_info->phys = kzalloc(sizeof(phys_addr_t), GFP_KERNEL);
+	cap_info->phys = kzalloc_obj(phys_addr_t, GFP_KERNEL);
 	if (!cap_info->phys) {
 		kfree(cap_info->pages);
 		kfree(cap_info);
diff --git a/drivers/firmware/efi/capsule.c b/drivers/firmware/efi/capsule.c
index 768430293669..dbbff6ade4e3 100644
--- a/drivers/firmware/efi/capsule.c
+++ b/drivers/firmware/efi/capsule.c
@@ -230,7 +230,7 @@ int efi_capsule_update(efi_capsule_header_t *capsule, phys_addr_t *pages)
 	count = DIV_ROUND_UP(imagesize, PAGE_SIZE);
 	sg_count = sg_pages_num(count);

-	sg_pages = kcalloc(sg_count, sizeof(*sg_pages), GFP_KERNEL);
+	sg_pages = kzalloc_objs(*sg_pages, sg_count, GFP_KERNEL);
 	if (!sg_pages)
 		return -ENOMEM;

diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index 56e9d73412fa..b2fb92a4bbd1 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -1079,7 +1079,7 @@ static int efi_mem_reserve_iomem(phys_addr_t addr, u64 size)
 	struct resource *res, *parent;
 	int ret;

-	res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
+	res = kzalloc_obj(struct resource, GFP_ATOMIC);
 	if (!res)
 		return -ENOMEM;

diff --git a/drivers/firmware/efi/efibc.c b/drivers/firmware/efi/efibc.c
index 0a7c764dcc61..99268c14e01e 100644
--- a/drivers/firmware/efi/efibc.c
+++ b/drivers/firmware/efi/efibc.c
@@ -47,7 +47,7 @@ static int efibc_reboot_notifier_call(struct notifier_block *notifier,
 	if (ret || !data)
 		return NOTIFY_DONE;

-	wdata = kmalloc_array(MAX_DATA_LEN, sizeof(efi_char16_t), GFP_KERNEL);
+	wdata = kmalloc_objs(efi_char16_t, MAX_DATA_LEN, GFP_KERNEL);
 	if (!wdata)
 		return NOTIFY_DONE;

diff --git a/drivers/firmware/efi/embedded-firmware.c b/drivers/firmware/efi/embedded-firmware.c
index b49a09d7e665..e750ef2b57e8 100644
--- a/drivers/firmware/efi/embedded-firmware.c
+++ b/drivers/firmware/efi/embedded-firmware.c
@@ -64,7 +64,7 @@ static int __init efi_check_md_for_embedded_firmware(

 	pr_info("Found EFI embedded fw '%s'\n", desc->name);

-	fw = kmalloc(sizeof(*fw), GFP_KERNEL);
+	fw = kmalloc_obj(*fw, GFP_KERNEL);
 	if (!fw) {
 		memunmap(map);
 		return -ENOMEM;
diff --git a/drivers/firmware/efi/esrt.c b/drivers/firmware/efi/esrt.c
index 4bb7b0584bc9..74f38a2df8d7 100644
--- a/drivers/firmware/efi/esrt.c
+++ b/drivers/firmware/efi/esrt.c
@@ -164,7 +164,7 @@ static int esre_create_sysfs_entry(void *esre, int entry_num)
 {
 	struct esre_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/drivers/firmware/efi/mokvar-table.c b/drivers/firmware/efi/mokvar-table.c
index aedbbd627706..78afd0fa2919 100644
--- a/drivers/firmware/efi/mokvar-table.c
+++ b/drivers/firmware/efi/mokvar-table.c
@@ -329,7 +329,7 @@ static int __init efi_mokvar_sysfs_init(void)
 	}

 	while (efi_mokvar_entry_next(&mokvar_entry)) {
-		mokvar_sysfs = kzalloc(sizeof(*mokvar_sysfs), GFP_KERNEL);
+		mokvar_sysfs = kzalloc_obj(*mokvar_sysfs, GFP_KERNEL);
 		if (!mokvar_sysfs) {
 			err = -ENOMEM;
 			break;
diff --git a/drivers/firmware/efi/riscv-runtime.c b/drivers/firmware/efi/riscv-runtime.c
index 66f584a228d0..ee799399da62 100644
--- a/drivers/firmware/efi/riscv-runtime.c
+++ b/drivers/firmware/efi/riscv-runtime.c
@@ -83,7 +83,7 @@ static int __init riscv_enable_runtime_services(void)
 			if (!(md->attribute & EFI_MEMORY_SP))
 				continue;

-			res = kzalloc(sizeof(*res), GFP_KERNEL);
+			res = kzalloc_obj(*res, GFP_KERNEL);
 			if (WARN_ON(!res))
 				break;

diff --git a/drivers/firmware/efi/test/efi_test.c b/drivers/firmware/efi/test/efi_test.c
index 77b5f7ac3e20..0e3b00a572b2 100644
--- a/drivers/firmware/efi/test/efi_test.c
+++ b/drivers/firmware/efi/test/efi_test.c
@@ -614,8 +614,8 @@ static long efi_runtime_query_capsulecaps(unsigned long arg)
 	if (qcaps.capsule_count == ULONG_MAX)
 		return -EINVAL;

-	capsules = kcalloc(qcaps.capsule_count + 1,
-			   sizeof(efi_capsule_header_t), GFP_KERNEL);
+	capsules = kzalloc_objs(efi_capsule_header_t, qcaps.capsule_count + 1,
+				GFP_KERNEL);
 	if (!capsules)
 		return -ENOMEM;

diff --git a/drivers/firmware/google/gsmi.c b/drivers/firmware/google/gsmi.c
index 0ceccde5a302..a142ce5c7288 100644
--- a/drivers/firmware/google/gsmi.c
+++ b/drivers/firmware/google/gsmi.c
@@ -153,7 +153,7 @@ static struct gsmi_buf *gsmi_buf_alloc(void)
 {
 	struct gsmi_buf *smibuf;

-	smibuf = kzalloc(sizeof(*smibuf), GFP_KERNEL);
+	smibuf = kzalloc_obj(*smibuf, GFP_KERNEL);
 	if (!smibuf) {
 		printk(KERN_ERR "gsmi: out of memory\n");
 		return NULL;
diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c
index 339a3f74b247..721dfa756c45 100644
--- a/drivers/firmware/google/vpd.c
+++ b/drivers/firmware/google/vpd.c
@@ -107,7 +107,7 @@ static int vpd_section_attrib_add(const u8 *key, u32 key_len,
 	if (vpd_section_check_key_name(key, key_len) != VPD_OK)
 		return VPD_OK;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/firmware/iscsi_ibft.c b/drivers/firmware/iscsi_ibft.c
index 371f24569b3b..1af5a9ef4474 100644
--- a/drivers/firmware/iscsi_ibft.c
+++ b/drivers/firmware/iscsi_ibft.c
@@ -634,7 +634,7 @@ static int __init ibft_create_kobject(struct acpi_table_ibft *header,
 	struct pci_dev *pci_dev;
 	int rc = 0;

-	ibft_kobj = kzalloc(sizeof(*ibft_kobj), GFP_KERNEL);
+	ibft_kobj = kzalloc_obj(*ibft_kobj, GFP_KERNEL);
 	if (!ibft_kobj)
 		return -ENOMEM;

@@ -773,7 +773,7 @@ static int __init ibft_register_kobjects(struct acpi_table_ibft *header)
 	if (rc)
 		return rc;

-	ibft_kobj = kzalloc(sizeof(*ibft_kobj), GFP_KERNEL);
+	ibft_kobj = kzalloc_obj(*ibft_kobj, GFP_KERNEL);
 	if (!ibft_kobj)
 		return -ENOMEM;

diff --git a/drivers/firmware/memmap.c b/drivers/firmware/memmap.c
index 55b9cfad8a04..5862fbae9b78 100644
--- a/drivers/firmware/memmap.c
+++ b/drivers/firmware/memmap.c
@@ -289,7 +289,7 @@ int __meminit firmware_map_add_hotplug(u64 start, u64 end, const char *type)

 	entry = firmware_map_find_entry_bootmem(start, end - 1, type);
 	if (!entry) {
-		entry = kzalloc(sizeof(struct firmware_map_entry), GFP_ATOMIC);
+		entry = kzalloc_obj(struct firmware_map_entry, GFP_ATOMIC);
 		if (!entry)
 			return -ENOMEM;
 	} else {
diff --git a/drivers/firmware/microchip/mpfs-auto-update.c b/drivers/firmware/microchip/mpfs-auto-update.c
index e194f7acb2a9..5fa85af40c33 100644
--- a/drivers/firmware/microchip/mpfs-auto-update.c
+++ b/drivers/firmware/microchip/mpfs-auto-update.c
@@ -162,9 +162,9 @@ static int mpfs_auto_update_verify_image(struct fw_upload *fw_uploader)
 	u32 *response_msg __free(kfree) =
 		kzalloc(AUTO_UPDATE_FEATURE_RESP_SIZE * sizeof(*response_msg), GFP_KERNEL);
 	struct mpfs_mss_response *response __free(kfree) =
-		kzalloc(sizeof(struct mpfs_mss_response), GFP_KERNEL);
+		kzalloc_obj(struct mpfs_mss_response, GFP_KERNEL);
 	struct mpfs_mss_msg *message __free(kfree) =
-		kzalloc(sizeof(struct mpfs_mss_msg), GFP_KERNEL);
+		kzalloc_obj(struct mpfs_mss_msg, GFP_KERNEL);
 	int ret;

 	if (!response_msg || !response || !message)
@@ -364,9 +364,9 @@ static int mpfs_auto_update_available(struct mpfs_auto_update_priv *priv)
 	u32 *response_msg __free(kfree) =
 		kzalloc(AUTO_UPDATE_FEATURE_RESP_SIZE * sizeof(*response_msg), GFP_KERNEL);
 	struct mpfs_mss_response *response __free(kfree) =
-		kzalloc(sizeof(struct mpfs_mss_response), GFP_KERNEL);
+		kzalloc_obj(struct mpfs_mss_response, GFP_KERNEL);
 	struct mpfs_mss_msg *message __free(kfree) =
-		kzalloc(sizeof(struct mpfs_mss_msg), GFP_KERNEL);
+		kzalloc_obj(struct mpfs_mss_msg, GFP_KERNEL);
 	int ret;

 	if (!response_msg || !response || !message)
diff --git a/drivers/firmware/psci/psci_checker.c b/drivers/firmware/psci/psci_checker.c
index df02a4ec3398..2aaf3519cdfb 100644
--- a/drivers/firmware/psci/psci_checker.c
+++ b/drivers/firmware/psci/psci_checker.c
@@ -155,8 +155,7 @@ static int alloc_init_cpu_groups(cpumask_var_t **pcpu_groups)
 	if (!alloc_cpumask_var(&tmp, GFP_KERNEL))
 		return -ENOMEM;

-	cpu_groups = kcalloc(nb_available_cpus, sizeof(*cpu_groups),
-			     GFP_KERNEL);
+	cpu_groups = kzalloc_objs(*cpu_groups, nb_available_cpus, GFP_KERNEL);
 	if (!cpu_groups) {
 		free_cpumask_var(tmp);
 		return -ENOMEM;
@@ -370,8 +369,7 @@ static int suspend_tests(void)
 	struct task_struct **threads;
 	int nb_threads = 0;

-	threads = kmalloc_array(nb_available_cpus, sizeof(*threads),
-				GFP_KERNEL);
+	threads = kmalloc_objs(*threads, nb_available_cpus, GFP_KERNEL);
 	if (!threads)
 		return -ENOMEM;

diff --git a/drivers/firmware/qcom/qcom_qseecom.c b/drivers/firmware/qcom/qcom_qseecom.c
index 731e6d5719f9..7eed43fc8174 100644
--- a/drivers/firmware/qcom/qcom_qseecom.c
+++ b/drivers/firmware/qcom/qcom_qseecom.c
@@ -50,7 +50,7 @@ static int qseecom_client_register(struct platform_device *qseecom_dev,
 	dev_info(&qseecom_dev->dev, "setting up client for %s\n", desc->app_name);

 	/* Allocate and set-up the client device */
-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

diff --git a/drivers/firmware/qcom/qcom_tzmem.c b/drivers/firmware/qcom/qcom_tzmem.c
index 9f232e53115e..74ea67a49cab 100644
--- a/drivers/firmware/qcom/qcom_tzmem.c
+++ b/drivers/firmware/qcom/qcom_tzmem.c
@@ -262,8 +262,8 @@ qcom_tzmem_pool_new(const struct qcom_tzmem_pool_config *config)
 		return ERR_PTR(-EINVAL);
 	}

-	struct qcom_tzmem_pool *pool __free(kfree) = kzalloc(sizeof(*pool),
-							     GFP_KERNEL);
+	struct qcom_tzmem_pool *pool __free(kfree) = kzalloc_obj(*pool,
+								 GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
index 0eebd572f9a5..50224b95d22b 100644
--- a/drivers/firmware/qemu_fw_cfg.c
+++ b/drivers/firmware/qemu_fw_cfg.c
@@ -94,7 +94,7 @@ static ssize_t fw_cfg_dma_transfer(void *address, u32 length, u32 control)
 	struct fw_cfg_dma_access *d = NULL;
 	ssize_t ret = length;

-	d = kmalloc(sizeof(*d), GFP_KERNEL);
+	d = kmalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		ret = -ENOMEM;
 		goto end;
@@ -325,7 +325,7 @@ static ssize_t fw_cfg_write_vmcoreinfo(const struct fw_cfg_file *f)
 	static struct fw_cfg_vmcoreinfo *data;
 	ssize_t ret;

-	data = kmalloc(sizeof(struct fw_cfg_vmcoreinfo), GFP_KERNEL);
+	data = kmalloc_obj(struct fw_cfg_vmcoreinfo, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -530,7 +530,7 @@ static int fw_cfg_build_symlink(struct kset *dir,
 			dir = to_kset(ko);
 		} else {
 			/* create new subdirectory kset */
-			subdir = kzalloc(sizeof(struct kset), GFP_KERNEL);
+			subdir = kzalloc_obj(struct kset, GFP_KERNEL);
 			if (!subdir) {
 				ret = -ENOMEM;
 				break;
@@ -593,7 +593,7 @@ static int fw_cfg_register_file(const struct fw_cfg_file *f)
 #endif

 	/* allocate new entry */
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
index 7ecde6921a0a..3b45bb74d312 100644
--- a/drivers/firmware/raspberrypi.c
+++ b/drivers/firmware/raspberrypi.c
@@ -282,7 +282,7 @@ static int rpi_firmware_probe(struct platform_device *pdev)
 	 * Memory will be freed by rpi_firmware_delete() once all users have
 	 * released their firmware handles. Don't use devm_kzalloc() here.
 	 */
-	fw = kzalloc(sizeof(*fw), GFP_KERNEL);
+	fw = kzalloc_obj(*fw, GFP_KERNEL);
 	if (!fw)
 		return -ENOMEM;

diff --git a/drivers/firmware/smccc/soc_id.c b/drivers/firmware/smccc/soc_id.c
index c24b3fca1cfe..95f9163058bb 100644
--- a/drivers/firmware/smccc/soc_id.c
+++ b/drivers/firmware/smccc/soc_id.c
@@ -137,7 +137,7 @@ static int __init smccc_soc_init(void)
 		return -EINVAL;
 	}

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c
index dbed404a71fc..aefb28933990 100644
--- a/drivers/firmware/stratix10-svc.c
+++ b/drivers/firmware/stratix10-svc.c
@@ -535,11 +535,11 @@ static int svc_normal_to_secure_thread(void *data)
 	unsigned long a0, a1, a2, a3, a4, a5, a6, a7;
 	int ret_fifo = 0;

-	pdata =  kmalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kmalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return -ENOMEM;

-	cbdata = kmalloc(sizeof(*cbdata), GFP_KERNEL);
+	cbdata = kmalloc_obj(*cbdata, GFP_KERNEL);
 	if (!cbdata) {
 		kfree(pdata);
 		return -ENOMEM;
@@ -1119,7 +1119,7 @@ int stratix10_svc_add_async_client(struct stratix10_svc_chan *chan,
 		return 0;
 	}

-	achan = kzalloc(sizeof(*achan), GFP_KERNEL);
+	achan = kzalloc_obj(*achan, GFP_KERNEL);
 	if (!achan)
 		return -ENOMEM;

@@ -1692,7 +1692,7 @@ int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg)
 	int ret = 0;
 	unsigned int cpu = 0;

-	p_data = kzalloc(sizeof(*p_data), GFP_KERNEL);
+	p_data = kzalloc_obj(*p_data, GFP_KERNEL);
 	if (!p_data)
 		return -ENOMEM;

diff --git a/drivers/firmware/thead,th1520-aon.c b/drivers/firmware/thead,th1520-aon.c
index 38f812ac9920..7dc871060c38 100644
--- a/drivers/firmware/thead,th1520-aon.c
+++ b/drivers/firmware/thead,th1520-aon.c
@@ -205,7 +205,7 @@ struct th1520_aon_chan *th1520_aon_init(struct device *dev)
 	struct mbox_client *cl;
 	int ret;

-	aon_chan = kzalloc(sizeof(*aon_chan), GFP_KERNEL);
+	aon_chan = kzalloc_obj(*aon_chan, GFP_KERNEL);
 	if (!aon_chan)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/firmware/xilinx/zynqmp.c b/drivers/firmware/xilinx/zynqmp.c
index f15db1a818dc..fbe8510f4927 100644
--- a/drivers/firmware/xilinx/zynqmp.c
+++ b/drivers/firmware/xilinx/zynqmp.c
@@ -267,7 +267,7 @@ static int do_feature_check_call(const u32 api_id)
 	}

 	/* Add new entry if not present */
-	feature_data = kmalloc(sizeof(*feature_data), GFP_ATOMIC);
+	feature_data = kmalloc_obj(*feature_data, GFP_ATOMIC);
 	if (!feature_data)
 		return -ENOMEM;

diff --git a/drivers/fpga/dfl-afu-dma-region.c b/drivers/fpga/dfl-afu-dma-region.c
index 5aa7b8884374..c71a93d8aee3 100644
--- a/drivers/fpga/dfl-afu-dma-region.c
+++ b/drivers/fpga/dfl-afu-dma-region.c
@@ -42,7 +42,7 @@ static int afu_dma_pin_pages(struct dfl_feature_dev_data *fdata,
 	if (ret)
 		return ret;

-	region->pages = kcalloc(npages, sizeof(struct page *), GFP_KERNEL);
+	region->pages = kzalloc_objs(struct page *, npages, GFP_KERNEL);
 	if (!region->pages) {
 		ret = -ENOMEM;
 		goto unlock_vm;
diff --git a/drivers/fpga/dfl-pci.c b/drivers/fpga/dfl-pci.c
index 602807d6afcc..3e560e5d7241 100644
--- a/drivers/fpga/dfl-pci.c
+++ b/drivers/fpga/dfl-pci.c
@@ -139,7 +139,7 @@ static int *cci_pci_create_irq_table(struct pci_dev *pcidev, unsigned int nvec)
 	unsigned int i;
 	int *table;

-	table = kcalloc(nvec, sizeof(int), GFP_KERNEL);
+	table = kzalloc_objs(int, nvec, GFP_KERNEL);
 	if (!table)
 		return table;

diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
index 449c3a082e23..d26003d3c931 100644
--- a/drivers/fpga/dfl.c
+++ b/drivers/fpga/dfl.c
@@ -347,7 +347,7 @@ dfl_dev_add(struct dfl_feature_dev_data *fdata,
 	struct dfl_device *ddev;
 	int id, i, ret;

-	ddev = kzalloc(sizeof(*ddev), GFP_KERNEL);
+	ddev = kzalloc_obj(*ddev, GFP_KERNEL);
 	if (!ddev)
 		return ERR_PTR(-ENOMEM);

@@ -397,8 +397,8 @@ dfl_dev_add(struct dfl_feature_dev_data *fdata,

 	/* then add irq resource */
 	if (feature->nr_irqs) {
-		ddev->irqs = kcalloc(feature->nr_irqs,
-				     sizeof(*ddev->irqs), GFP_KERNEL);
+		ddev->irqs = kzalloc_objs(*ddev->irqs, feature->nr_irqs,
+					  GFP_KERNEL);
 		if (!ddev->irqs) {
 			ret = -ENOMEM;
 			goto put_dev;
@@ -1182,7 +1182,8 @@ create_feature_instance(struct build_feature_devs_info *binfo,
 	if (binfo->len - ofst < size)
 		return -EINVAL;

-	finfo = kzalloc(struct_size(finfo, params, dfh_psize / sizeof(u64)), GFP_KERNEL);
+	finfo = kzalloc_flex(*finfo, params, dfh_psize / sizeof(u64),
+			     GFP_KERNEL);
 	if (!finfo)
 		return -ENOMEM;

diff --git a/drivers/fpga/fpga-bridge.c b/drivers/fpga/fpga-bridge.c
index 8ef395b49bf8..c709aa3ef04c 100644
--- a/drivers/fpga/fpga-bridge.c
+++ b/drivers/fpga/fpga-bridge.c
@@ -346,7 +346,7 @@ __fpga_bridge_register(struct device *parent, const char *name,
 		return ERR_PTR(-EINVAL);
 	}

-	bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
+	bridge = kzalloc_obj(*bridge, GFP_KERNEL);
 	if (!bridge)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/fpga/fpga-mgr.c b/drivers/fpga/fpga-mgr.c
index 0f4035b089a2..215303dd6a64 100644
--- a/drivers/fpga/fpga-mgr.c
+++ b/drivers/fpga/fpga-mgr.c
@@ -486,7 +486,7 @@ static int fpga_mgr_buf_load(struct fpga_manager *mgr,
 	 */
 	nr_pages = DIV_ROUND_UP((unsigned long)buf + count, PAGE_SIZE) -
 		   (unsigned long)buf / PAGE_SIZE;
-	pages = kmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kmalloc_objs(struct page *, nr_pages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

@@ -801,7 +801,7 @@ __fpga_mgr_register_full(struct device *parent, const struct fpga_manager_info *
 		return ERR_PTR(-EINVAL);
 	}

-	mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
+	mgr = kzalloc_obj(*mgr, GFP_KERNEL);
 	if (!mgr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/fpga/fpga-region.c b/drivers/fpga/fpga-region.c
index 753cd142503e..43dbdacfd87e 100644
--- a/drivers/fpga/fpga-region.c
+++ b/drivers/fpga/fpga-region.c
@@ -201,7 +201,7 @@ __fpga_region_register_full(struct device *parent, const struct fpga_region_info
 		return ERR_PTR(-EINVAL);
 	}

-	region = kzalloc(sizeof(*region), GFP_KERNEL);
+	region = kzalloc_obj(*region, GFP_KERNEL);
 	if (!region)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index 83599a1c548b..abc3cf7f4ae4 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -211,7 +211,7 @@ static struct fsi_device *fsi_create_device(struct fsi_slave *slave)
 {
 	struct fsi_device *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

@@ -1083,7 +1083,7 @@ static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id)
 	/* We can communicate with a slave; create the slave device and
 	 * register.
 	 */
-	slave = kzalloc(sizeof(*slave), GFP_KERNEL);
+	slave = kzalloc_obj(*slave, GFP_KERNEL);
 	if (!slave)
 		return -ENOMEM;

diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
index bff897f77fe5..2589f04c8d5b 100644
--- a/drivers/fsi/fsi-master-aspeed.c
+++ b/drivers/fsi/fsi-master-aspeed.c
@@ -546,7 +546,7 @@ static int fsi_master_aspeed_probe(struct platform_device *pdev)
 		return rc;
 	}

-	aspeed = kzalloc(sizeof(*aspeed), GFP_KERNEL);
+	aspeed = kzalloc_obj(*aspeed, GFP_KERNEL);
 	if (!aspeed)
 		return -ENOMEM;

diff --git a/drivers/fsi/fsi-master-ast-cf.c b/drivers/fsi/fsi-master-ast-cf.c
index e67d7cd30fca..3b83ebeaf7c1 100644
--- a/drivers/fsi/fsi-master-ast-cf.c
+++ b/drivers/fsi/fsi-master-ast-cf.c
@@ -1220,7 +1220,7 @@ static int fsi_master_acf_probe(struct platform_device *pdev)
 	uint32_t cf_mem_align;
 	int rc;

-	master = kzalloc(sizeof(*master), GFP_KERNEL);
+	master = kzalloc_obj(*master, GFP_KERNEL);
 	if (!master)
 		return -ENOMEM;

diff --git a/drivers/fsi/fsi-master-gpio.c b/drivers/fsi/fsi-master-gpio.c
index 69de0b5b9cbd..8c78ab1051d0 100644
--- a/drivers/fsi/fsi-master-gpio.c
+++ b/drivers/fsi/fsi-master-gpio.c
@@ -774,7 +774,7 @@ static int fsi_master_gpio_probe(struct platform_device *pdev)
 	struct gpio_desc *gpio;
 	int rc;

-	master = kzalloc(sizeof(*master), GFP_KERNEL);
+	master = kzalloc_obj(*master, GFP_KERNEL);
 	if (!master)
 		return -ENOMEM;

diff --git a/drivers/fsi/fsi-master-hub.c b/drivers/fsi/fsi-master-hub.c
index a84955bb23b1..6cee9f1a1d3a 100644
--- a/drivers/fsi/fsi-master-hub.c
+++ b/drivers/fsi/fsi-master-hub.c
@@ -215,7 +215,7 @@ static int hub_master_probe(struct fsi_device *fsi_dev)
 		return rc;
 	}

-	hub = kzalloc(sizeof(*hub), GFP_KERNEL);
+	hub = kzalloc_obj(*hub, GFP_KERNEL);
 	if (!hub) {
 		rc = -ENOMEM;
 		goto err_release;
diff --git a/drivers/fsi/fsi-master-i2cr.c b/drivers/fsi/fsi-master-i2cr.c
index 40f1f4d231e5..055e850a8115 100644
--- a/drivers/fsi/fsi-master-i2cr.c
+++ b/drivers/fsi/fsi-master-i2cr.c
@@ -261,7 +261,7 @@ static int i2cr_probe(struct i2c_client *client)
 	struct fsi_master_i2cr *i2cr;
 	int ret;

-	i2cr = kzalloc(sizeof(*i2cr), GFP_KERNEL);
+	i2cr = kzalloc_obj(*i2cr, GFP_KERNEL);
 	if (!i2cr)
 		return -ENOMEM;

diff --git a/drivers/fsi/fsi-occ.c b/drivers/fsi/fsi-occ.c
index e41ef12fa095..0ef1eccff91a 100644
--- a/drivers/fsi/fsi-occ.c
+++ b/drivers/fsi/fsi-occ.c
@@ -79,7 +79,7 @@ static DEFINE_IDA(occ_ida);

 static int occ_open(struct inode *inode, struct file *file)
 {
-	struct occ_client *client = kzalloc(sizeof(*client), GFP_KERNEL);
+	struct occ_client *client = kzalloc_obj(*client, GFP_KERNEL);
 	struct miscdevice *mdev = file->private_data;
 	struct occ *occ = to_occ(mdev);

diff --git a/drivers/fsi/fsi-sbefifo.c b/drivers/fsi/fsi-sbefifo.c
index 6ca5817910cd..5e62212f5ae4 100644
--- a/drivers/fsi/fsi-sbefifo.c
+++ b/drivers/fsi/fsi-sbefifo.c
@@ -792,7 +792,7 @@ static int sbefifo_user_open(struct inode *inode, struct file *file)
 	struct sbefifo *sbefifo = container_of(inode->i_cdev, struct sbefifo, cdev);
 	struct sbefifo_user *user;

-	user = kzalloc(sizeof(struct sbefifo_user), GFP_KERNEL);
+	user = kzalloc_obj(struct sbefifo_user, GFP_KERNEL);
 	if (!user)
 		return -ENOMEM;

@@ -1033,7 +1033,7 @@ static int sbefifo_probe(struct fsi_device *fsi_dev)

 	dev_dbg(dev, "Found sbefifo device\n");

-	sbefifo = kzalloc(sizeof(*sbefifo), GFP_KERNEL);
+	sbefifo = kzalloc_obj(*sbefifo, GFP_KERNEL);
 	if (!sbefifo)
 		return -ENOMEM;

diff --git a/drivers/fsi/fsi-scom.c b/drivers/fsi/fsi-scom.c
index 67cd45605fe4..bbdbc75ae192 100644
--- a/drivers/fsi/fsi-scom.c
+++ b/drivers/fsi/fsi-scom.c
@@ -533,7 +533,7 @@ static int scom_probe(struct fsi_device *fsi_dev)
 	struct scom_device *scom;
 	int rc, didx;

-	scom = kzalloc(sizeof(*scom), GFP_KERNEL);
+	scom = kzalloc_obj(*scom, GFP_KERNEL);
 	if (!scom)
 		return -ENOMEM;
 	fsi_set_drvdata(fsi_dev, scom);
diff --git a/drivers/fwctl/mlx5/main.c b/drivers/fwctl/mlx5/main.c
index 3dacccf7855c..c4262abfd77a 100644
--- a/drivers/fwctl/mlx5/main.c
+++ b/drivers/fwctl/mlx5/main.c
@@ -167,7 +167,7 @@ static void *mlx5ctl_info(struct fwctl_uctx *uctx, size_t *length)
 		container_of(uctx, struct mlx5ctl_uctx, uctx);
 	struct fwctl_info_mlx5 *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/fwctl/pds/main.c b/drivers/fwctl/pds/main.c
index 1809853f6353..8c622267782f 100644
--- a/drivers/fwctl/pds/main.c
+++ b/drivers/fwctl/pds/main.c
@@ -58,7 +58,7 @@ static void *pdsfc_info(struct fwctl_uctx *uctx, size_t *length)
 	struct pdsfc_uctx *pdsfc_uctx = container_of(uctx, struct pdsfc_uctx, uctx);
 	struct fwctl_info_pds *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gnss/core.c b/drivers/gnss/core.c
index 883ef86ad3fc..fb17b7811025 100644
--- a/drivers/gnss/core.c
+++ b/drivers/gnss/core.c
@@ -227,7 +227,7 @@ struct gnss_device *gnss_allocate_device(struct device *parent)
 	int id;
 	int ret;

-	gdev = kzalloc(sizeof(*gdev), GFP_KERNEL);
+	gdev = kzalloc_obj(*gdev, GFP_KERNEL);
 	if (!gdev)
 		return NULL;

diff --git a/drivers/gnss/usb.c b/drivers/gnss/usb.c
index 028ce56b20ea..919ea2ab4572 100644
--- a/drivers/gnss/usb.c
+++ b/drivers/gnss/usb.c
@@ -131,7 +131,7 @@ static int gnss_usb_probe(struct usb_interface *intf, const struct usb_device_id
 	if (ret)
 		return ret;

-	gusb = kzalloc(sizeof(*gusb), GFP_KERNEL);
+	gusb = kzalloc_obj(*gusb, GFP_KERNEL);
 	if (!gusb)
 		return -ENOMEM;

diff --git a/drivers/gpib/agilent_82350b/agilent_82350b.c b/drivers/gpib/agilent_82350b/agilent_82350b.c
index d55d097aa6f0..021da74d0296 100644
--- a/drivers/gpib/agilent_82350b/agilent_82350b.c
+++ b/drivers/gpib/agilent_82350b/agilent_82350b.c
@@ -481,7 +481,8 @@ static void agilent_82350b_return_to_local(struct gpib_board *board)

 static int agilent_82350b_allocate_private(struct gpib_board *board)
 {
-	board->private_data = kzalloc(sizeof(struct agilent_82350b_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct agilent_82350b_priv,
+					  GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	return 0;
diff --git a/drivers/gpib/agilent_82357a/agilent_82357a.c b/drivers/gpib/agilent_82357a/agilent_82357a.c
index 26d2830c3fa3..2904bb016c92 100644
--- a/drivers/gpib/agilent_82357a/agilent_82357a.c
+++ b/drivers/gpib/agilent_82357a/agilent_82357a.c
@@ -1196,7 +1196,8 @@ static int agilent_82357a_allocate_private(struct gpib_board *board)
 {
 	struct agilent_82357a_priv *a_priv;

-	board->private_data = kzalloc(sizeof(struct agilent_82357a_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct agilent_82357a_priv,
+					  GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	a_priv = board->private_data;
diff --git a/drivers/gpib/cb7210/cb7210.c b/drivers/gpib/cb7210/cb7210.c
index e9d5fd19b495..e8ea37ff4fbf 100644
--- a/drivers/gpib/cb7210/cb7210.c
+++ b/drivers/gpib/cb7210/cb7210.c
@@ -856,7 +856,7 @@ static int cb7210_allocate_private(struct gpib_board *board)
 {
 	struct cb7210_priv *priv;

-	board->private_data = kzalloc(sizeof(struct cb7210_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct cb7210_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	priv = board->private_data;
@@ -1188,7 +1188,7 @@ static int cb_gpib_probe(struct pcmcia_device *link)
 	int ret;

 	/* Allocate space for private device-specific data */
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/gpib/cec/cec_gpib.c b/drivers/gpib/cec/cec_gpib.c
index 7e57d65d6c32..45db380aeebe 100644
--- a/drivers/gpib/cec/cec_gpib.c
+++ b/drivers/gpib/cec/cec_gpib.c
@@ -220,7 +220,7 @@ static int cec_allocate_private(struct gpib_board *board)
 {
 	struct cec_priv *priv;

-	board->private_data = kzalloc(sizeof(struct cec_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct cec_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	priv = board->private_data;
diff --git a/drivers/gpib/common/gpib_os.c b/drivers/gpib/common/gpib_os.c
index 9dbbac8b8436..08da67543bac 100644
--- a/drivers/gpib/common/gpib_os.c
+++ b/drivers/gpib/common/gpib_os.c
@@ -199,7 +199,7 @@ int push_status_byte(struct gpib_board *board, struct gpib_status_queue *device,
 			return retval;
 	}

-	status = kmalloc(sizeof(*status), GFP_KERNEL);
+	status = kmalloc_obj(*status, GFP_KERNEL);
 	if (!status)
 		return -ENOMEM;

@@ -513,7 +513,7 @@ static int init_gpib_file_private(struct gpib_file_private *priv)
 {
 	memset(priv, 0, sizeof(*priv));
 	atomic_set(&priv->holding_mutex, 0);
-	priv->descriptors[0] = kmalloc(sizeof(struct gpib_descriptor), GFP_KERNEL);
+	priv->descriptors[0] = kmalloc_obj(struct gpib_descriptor, GFP_KERNEL);
 	if (!priv->descriptors[0]) {
 		pr_err("gpib: failed to allocate default board descriptor\n");
 		return -ENOMEM;
@@ -537,7 +537,7 @@ int ibopen(struct inode *inode, struct file *filep)

 	board = &board_array[minor];

-	filep->private_data = kmalloc(sizeof(struct gpib_file_private), GFP_KERNEL);
+	filep->private_data = kmalloc_obj(struct gpib_file_private, GFP_KERNEL);
 	if (!filep->private_data)
 		return -ENOMEM;

@@ -1146,7 +1146,7 @@ static int increment_open_device_count(struct gpib_board *board, struct list_hea
 	}

 	/* otherwise we need to allocate a new struct gpib_status_queue */
-	device = kmalloc(sizeof(struct gpib_status_queue), GFP_ATOMIC);
+	device = kmalloc_obj(struct gpib_status_queue, GFP_ATOMIC);
 	if (!device)
 		return -ENOMEM;
 	init_gpib_status_queue(device);
@@ -1241,7 +1241,8 @@ static int open_dev_ioctl(struct file *filep, struct gpib_board *board, unsigned
 		mutex_unlock(&file_priv->descriptors_mutex);
 		return -ERANGE;
 	}
-	file_priv->descriptors[i] = kmalloc(sizeof(struct gpib_descriptor), GFP_KERNEL);
+	file_priv->descriptors[i] = kmalloc_obj(struct gpib_descriptor,
+						GFP_KERNEL);
 	if (!file_priv->descriptors[i]) {
 		mutex_unlock(&file_priv->descriptors_mutex);
 		return -ENOMEM;
@@ -1876,7 +1877,7 @@ static int push_gpib_event_nolock(struct gpib_board *board, short event_type)
 			return retval;
 	}

-	event = kmalloc(sizeof(struct gpib_event), GFP_ATOMIC);
+	event = kmalloc_obj(struct gpib_event, GFP_ATOMIC);
 	if (!event) {
 		queue->dropped_event = 1;
 		dev_err(board->gpib_dev, "failed to allocate memory for event\n");
@@ -2041,7 +2042,7 @@ int gpib_register_driver(struct gpib_interface *interface, struct module *provid
 {
 	struct gpib_interface_list *entry;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/drivers/gpib/eastwood/fluke_gpib.c b/drivers/gpib/eastwood/fluke_gpib.c
index 56153b8a1cb2..ae4d99dcae04 100644
--- a/drivers/gpib/eastwood/fluke_gpib.c
+++ b/drivers/gpib/eastwood/fluke_gpib.c
@@ -853,7 +853,7 @@ static int fluke_allocate_private(struct gpib_board *board)
 {
 	struct fluke_priv *priv;

-	board->private_data = kzalloc(sizeof(struct fluke_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct fluke_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	priv = board->private_data;
diff --git a/drivers/gpib/fmh_gpib/fmh_gpib.c b/drivers/gpib/fmh_gpib/fmh_gpib.c
index d82ec06b3085..0858cf5ab557 100644
--- a/drivers/gpib/fmh_gpib/fmh_gpib.c
+++ b/drivers/gpib/fmh_gpib/fmh_gpib.c
@@ -1250,7 +1250,7 @@ static int fmh_gpib_allocate_private(struct gpib_board *board)
 {
 	struct fmh_priv *priv;

-	board->private_data = kzalloc(sizeof(struct fmh_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct fmh_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	priv = board->private_data;
diff --git a/drivers/gpib/gpio/gpib_bitbang.c b/drivers/gpib/gpio/gpib_bitbang.c
index ba99d6c95ddf..a3b63fd33bd8 100644
--- a/drivers/gpib/gpio/gpib_bitbang.c
+++ b/drivers/gpib/gpio/gpib_bitbang.c
@@ -1066,7 +1066,7 @@ static int bb_line_status(const struct gpib_board *board)

 static int allocate_private(struct gpib_board *board)
 {
-	board->private_data = kzalloc(sizeof(struct bb_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct bb_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	return 0;
diff --git a/drivers/gpib/hp_82335/hp82335.c b/drivers/gpib/hp_82335/hp82335.c
index 9baf1d3b6751..d5e158c4dd72 100644
--- a/drivers/gpib/hp_82335/hp82335.c
+++ b/drivers/gpib/hp_82335/hp82335.c
@@ -210,7 +210,7 @@ static struct gpib_interface hp82335_interface = {

 static int hp82335_allocate_private(struct gpib_board *board)
 {
-	board->private_data = kzalloc(sizeof(struct hp82335_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct hp82335_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	return 0;
diff --git a/drivers/gpib/hp_82341/hp_82341.c b/drivers/gpib/hp_82341/hp_82341.c
index 5aaf5b15b98b..6755982d8a2a 100644
--- a/drivers/gpib/hp_82341/hp_82341.c
+++ b/drivers/gpib/hp_82341/hp_82341.c
@@ -462,7 +462,7 @@ static struct gpib_interface hp_82341_interface = {

 static int hp_82341_allocate_private(struct gpib_board *board)
 {
-	board->private_data = kzalloc(sizeof(struct hp_82341_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct hp_82341_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	return 0;
diff --git a/drivers/gpib/ines/ines_gpib.c b/drivers/gpib/ines/ines_gpib.c
index 737de5fef4b3..7fbe3beb1d67 100644
--- a/drivers/gpib/ines/ines_gpib.c
+++ b/drivers/gpib/ines/ines_gpib.c
@@ -657,7 +657,7 @@ static int ines_allocate_private(struct gpib_board *board)
 {
 	struct ines_priv *priv;

-	board->private_data = kzalloc(sizeof(struct ines_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct ines_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	priv = board->private_data;
@@ -1061,7 +1061,7 @@ static int ines_gpib_probe(struct pcmcia_device *link)
 //	int ret, i;

 	/* Allocate space for private device-specific data */
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c b/drivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c
index dd68c4843490..5c189e6f22dc 100644
--- a/drivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c
+++ b/drivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c
@@ -440,7 +440,7 @@ static int usb_gpib_attach(struct gpib_board *board, const struct gpib_board_con
 		return -EIO;
 	}

-	board->private_data = kzalloc(sizeof(struct usb_gpib_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct usb_gpib_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;

@@ -1864,7 +1864,7 @@ static int skel_probe(struct usb_interface *interface,
 	mutex_init(&minors_lock);   /* required for handling minor numbers table */

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/gpib/ni_usb/ni_usb_gpib.c b/drivers/gpib/ni_usb/ni_usb_gpib.c
index c6f1a70d44f5..e9d7dd6e2fa7 100644
--- a/drivers/gpib/ni_usb/ni_usb_gpib.c
+++ b/drivers/gpib/ni_usb/ni_usb_gpib.c
@@ -1659,7 +1659,7 @@ static int ni_usb_allocate_private(struct gpib_board *board)
 {
 	struct ni_usb_priv *ni_priv;

-	board->private_data = kzalloc(sizeof(struct ni_usb_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct ni_usb_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	ni_priv = board->private_data;
@@ -1793,7 +1793,7 @@ static int ni_usb_init(struct gpib_board *board)
 	unsigned int ibsta;
 	int writes_len;

-	writes = kmalloc_array(NUM_INIT_WRITES, sizeof(*writes), GFP_KERNEL);
+	writes = kmalloc_objs(*writes, NUM_INIT_WRITES, GFP_KERNEL);
 	if (!writes)
 		return -ENOMEM;

diff --git a/drivers/gpib/pc2/pc2_gpib.c b/drivers/gpib/pc2/pc2_gpib.c
index 1664861d360d..2c0b464025b5 100644
--- a/drivers/gpib/pc2/pc2_gpib.c
+++ b/drivers/gpib/pc2/pc2_gpib.c
@@ -237,7 +237,7 @@ static int allocate_private(struct gpib_board *board)
 {
 	struct pc2_priv *priv;

-	board->private_data = kzalloc(sizeof(struct pc2_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct pc2_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	priv = board->private_data;
diff --git a/drivers/gpib/tnt4882/mite.c b/drivers/gpib/tnt4882/mite.c
index 847b96f411bd..8906f5c41494 100644
--- a/drivers/gpib/tnt4882/mite.c
+++ b/drivers/gpib/tnt4882/mite.c
@@ -57,7 +57,7 @@ void mite_init(void)
 	for (pcidev = pci_get_device(PCI_VENDOR_ID_NATINST, PCI_ANY_ID, NULL);
 		pcidev;
 		pcidev = pci_get_device(PCI_VENDOR_ID_NATINST, PCI_ANY_ID, pcidev)) {
-		mite = kzalloc(sizeof(*mite), GFP_KERNEL);
+		mite = kzalloc_obj(*mite, GFP_KERNEL);
 		if (!mite)
 			return;

diff --git a/drivers/gpib/tnt4882/tnt4882_gpib.c b/drivers/gpib/tnt4882/tnt4882_gpib.c
index 6d241509419e..8d593d3489ad 100644
--- a/drivers/gpib/tnt4882/tnt4882_gpib.c
+++ b/drivers/gpib/tnt4882/tnt4882_gpib.c
@@ -843,7 +843,7 @@ static int tnt4882_allocate_private(struct gpib_board *board)
 {
 	struct tnt4882_priv *tnt_priv;

-	board->private_data = kzalloc(sizeof(struct tnt4882_priv), GFP_KERNEL);
+	board->private_data = kzalloc_obj(struct tnt4882_priv, GFP_KERNEL);
 	if (!board->private_data)
 		return -ENOMEM;
 	tnt_priv = board->private_data;
@@ -1567,7 +1567,7 @@ static int ni_gpib_probe(struct pcmcia_device *link)
 	//struct struct gpib_board *dev;

 	/* Allocate space for private device-specific data */
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/gpio/gpio-aggregator.c b/drivers/gpio/gpio-aggregator.c
index a4cd32674a96..19857285f28c 100644
--- a/drivers/gpio/gpio-aggregator.c
+++ b/drivers/gpio/gpio-aggregator.c
@@ -159,7 +159,7 @@ gpio_aggregator_line_alloc(struct gpio_aggregator *parent, unsigned int idx,
 {
 	struct gpio_aggregator_line *line;

-	line = kzalloc(sizeof(*line), GFP_KERNEL);
+	line = kzalloc_obj(*line, GFP_KERNEL);
 	if (!line)
 		return ERR_PTR(-ENOMEM);

@@ -916,8 +916,7 @@ static int gpio_aggregator_activate(struct gpio_aggregator *aggr)
 	if (gpio_aggregator_count_lines(aggr) == 0)
 		return -EINVAL;

-	aggr->lookups = kzalloc(struct_size(aggr->lookups, table, 1),
-				GFP_KERNEL);
+	aggr->lookups = kzalloc_flex(*aggr->lookups, table, 1, GFP_KERNEL);
 	if (!aggr->lookups)
 		return -ENOMEM;

@@ -1457,8 +1456,7 @@ static ssize_t gpio_aggregator_new_device_store(struct device_driver *driver,
 	memcpy(aggr->args, buf, count + 1);

 	aggr->init_via_sysfs = true;
-	aggr->lookups = kzalloc(struct_size(aggr->lookups, table, 1),
-				GFP_KERNEL);
+	aggr->lookups = kzalloc_flex(*aggr->lookups, table, 1, GFP_KERNEL);
 	if (!aggr->lookups) {
 		res = -ENOMEM;
 		goto free_ga;
diff --git a/drivers/gpio/gpio-reg.c b/drivers/gpio/gpio-reg.c
index f2238196faf1..1daa05bbf35b 100644
--- a/drivers/gpio/gpio-reg.c
+++ b/drivers/gpio/gpio-reg.c
@@ -150,7 +150,7 @@ struct gpio_chip *gpio_reg_init(struct device *dev, void __iomem *reg,
 	if (dev)
 		r = devm_kzalloc(dev, sizeof(*r), GFP_KERNEL);
 	else
-		r = kzalloc(sizeof(*r), GFP_KERNEL);
+		r = kzalloc_obj(*r, GFP_KERNEL);

 	if (!r)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpio/gpio-regmap.c b/drivers/gpio/gpio-regmap.c
index 9581bd5ca947..5891983810af 100644
--- a/drivers/gpio/gpio-regmap.c
+++ b/drivers/gpio/gpio-regmap.c
@@ -259,7 +259,7 @@ struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *config
 	if (config->reg_dir_out_base && config->reg_dir_in_base)
 		return ERR_PTR(-EINVAL);

-	gpio = kzalloc(sizeof(*gpio), GFP_KERNEL);
+	gpio = kzalloc_obj(*gpio, GFP_KERNEL);
 	if (!gpio)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpio/gpio-sim.c b/drivers/gpio/gpio-sim.c
index 437b4500f56b..5299500e7617 100644
--- a/drivers/gpio/gpio-sim.c
+++ b/drivers/gpio/gpio-sim.c
@@ -813,7 +813,7 @@ static int gpio_sim_add_hogs(struct gpio_sim_device *dev)
 		return 0;

 	/* Allocate one more for the sentinel. */
-	dev->hogs = kcalloc(num_hogs + 1, sizeof(*dev->hogs), GFP_KERNEL);
+	dev->hogs = kzalloc_objs(*dev->hogs, num_hogs + 1, GFP_KERNEL);
 	if (!dev->hogs)
 		return -ENOMEM;

@@ -1406,7 +1406,7 @@ gpio_sim_line_config_make_hog_item(struct config_group *group, const char *name)

 	guard(mutex)(&dev->lock);

-	hog = kzalloc(sizeof(*hog), GFP_KERNEL);
+	hog = kzalloc_obj(*hog, GFP_KERNEL);
 	if (!hog)
 		return ERR_PTR(-ENOMEM);

@@ -1467,7 +1467,7 @@ gpio_sim_bank_config_make_line_group(struct config_group *group,
 	if (gpio_sim_device_is_live(dev))
 		return ERR_PTR(-EBUSY);

-	line = kzalloc(sizeof(*line), GFP_KERNEL);
+	line = kzalloc_obj(*line, GFP_KERNEL);
 	if (!line)
 		return ERR_PTR(-ENOMEM);

@@ -1521,7 +1521,7 @@ gpio_sim_device_config_make_bank_group(struct config_group *group,
 	if (gpio_sim_device_is_live(dev))
 		return ERR_PTR(-EBUSY);

-	bank = kzalloc(sizeof(*bank), GFP_KERNEL);
+	bank = kzalloc_obj(*bank, GFP_KERNEL);
 	if (!bank)
 		return ERR_PTR(-ENOMEM);

@@ -1569,8 +1569,8 @@ gpio_sim_config_make_device_group(struct config_group *group, const char *name)
 {
 	int id;

-	struct gpio_sim_device *dev __free(kfree) = kzalloc(sizeof(*dev),
-							    GFP_KERNEL);
+	struct gpio_sim_device *dev __free(kfree) = kzalloc_obj(*dev,
+								GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpio/gpio-virtuser.c b/drivers/gpio/gpio-virtuser.c
index b6c515e7a876..5b8cb4e65e56 100644
--- a/drivers/gpio/gpio-virtuser.c
+++ b/drivers/gpio/gpio-virtuser.c
@@ -1388,7 +1388,7 @@ gpio_virtuser_make_lookup_table(struct gpio_virtuser_device *dev)
 	lockdep_assert_held(&dev->lock);

 	struct gpiod_lookup_table *table __free(kfree) =
-		kzalloc(struct_size(table, table, num_entries + 1), GFP_KERNEL);
+		kzalloc_flex(*table, table, num_entries + 1, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -1605,7 +1605,7 @@ gpio_virtuser_make_lookup_entry_group(struct config_group *group,
 		return ERR_PTR(-EBUSY);

 	struct gpio_virtuser_lookup_entry *entry __free(kfree) =
-				kzalloc(sizeof(*entry), GFP_KERNEL);
+				kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

@@ -1661,7 +1661,7 @@ gpio_virtuser_make_lookup_group(struct config_group *group, const char *name)
 		return ERR_PTR(-EBUSY);

 	struct gpio_virtuser_lookup *lookup __free(kfree) =
-				kzalloc(sizeof(*lookup), GFP_KERNEL);
+				kzalloc_obj(*lookup, GFP_KERNEL);
 	if (!lookup)
 		return ERR_PTR(-ENOMEM);

@@ -1711,8 +1711,8 @@ static struct config_group *
 gpio_virtuser_config_make_device_group(struct config_group *group,
 				       const char *name)
 {
-	struct gpio_virtuser_device *dev __free(kfree) = kzalloc(sizeof(*dev),
-								 GFP_KERNEL);
+	struct gpio_virtuser_device *dev __free(kfree) = kzalloc_obj(*dev,
+								     GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-core.c
index 5e709ba35ec2..df60f6eac137 100644
--- a/drivers/gpio/gpiolib-acpi-core.c
+++ b/drivers/gpio/gpiolib-acpi-core.c
@@ -403,7 +403,7 @@ static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares,
 		goto fail_unlock_irq;
 	}

-	event = kzalloc(sizeof(*event), GFP_KERNEL);
+	event = kzalloc_obj(*event, GFP_KERNEL);
 	if (!event)
 		goto fail_unlock_irq;

@@ -1144,7 +1144,7 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,
 				goto out;
 			}

-			conn = kzalloc(sizeof(*conn), GFP_KERNEL);
+			conn = kzalloc_obj(*conn, GFP_KERNEL);
 			if (!conn) {
 				gpiochip_free_own_desc(desc);
 				mutex_unlock(&achip->conn_lock);
@@ -1302,7 +1302,7 @@ void acpi_gpiochip_add(struct gpio_chip *chip)
 	if (!adev)
 		return;

-	acpi_gpio = kzalloc(sizeof(*acpi_gpio), GFP_KERNEL);
+	acpi_gpio = kzalloc_obj(*acpi_gpio, GFP_KERNEL);
 	if (!acpi_gpio) {
 		dev_err(chip->parent,
 			"Failed to allocate memory for ACPI GPIO chip\n");
diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c
index 189127721e38..f50b067e1de3 100644
--- a/drivers/gpio/gpiolib-cdev.c
+++ b/drivers/gpio/gpiolib-cdev.c
@@ -318,7 +318,7 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
 	if (ret)
 		return ret;

-	lh = kzalloc(sizeof(*lh), GFP_KERNEL);
+	lh = kzalloc_obj(*lh, GFP_KERNEL);
 	if (!lh)
 		return -ENOMEM;
 	lh->gdev = gpio_device_get(gdev);
@@ -1280,7 +1280,7 @@ static long linereq_get_values(struct linereq *lr, void __user *ip)

 	if (num_get != 1) {
 		/* build compacted desc array */
-		descs = kmalloc_array(num_get, sizeof(*descs), GFP_KERNEL);
+		descs = kmalloc_objs(*descs, num_get, GFP_KERNEL);
 		if (!descs)
 			return -ENOMEM;
 		for (didx = 0, i = 0; i < lr->num_lines; i++) {
@@ -1355,7 +1355,7 @@ static long linereq_set_values(struct linereq *lr, void __user *ip)

 	if (num_set != 1) {
 		/* build compacted desc array */
-		descs = kmalloc_array(num_set, sizeof(*descs), GFP_KERNEL);
+		descs = kmalloc_objs(*descs, num_set, GFP_KERNEL);
 		if (!descs)
 			return -ENOMEM;
 		for (didx = 0, i = 0; i < lr->num_lines; i++) {
@@ -1610,7 +1610,7 @@ static int linereq_create(struct gpio_device *gdev, void __user *ip)
 	if (ret)
 		return ret;

-	lr = kvzalloc(struct_size(lr, lines, ulr.num_lines), GFP_KERNEL);
+	lr = kvzalloc_flex(*lr, lines, ulr.num_lines, GFP_KERNEL);
 	if (!lr)
 		return -ENOMEM;
 	lr->num_lines = ulr.num_lines;
@@ -2054,7 +2054,7 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)
 	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)))
 		return -EINVAL;

-	le = kzalloc(sizeof(*le), GFP_KERNEL);
+	le = kzalloc_obj(*le, GFP_KERNEL);
 	if (!le)
 		return -ENOMEM;
 	le->gdev = gpio_device_get(gdev);
@@ -2546,7 +2546,7 @@ static int lineinfo_changed_notify(struct notifier_block *nb,
 	 * is executed.
 	 */

-	ctx = kzalloc(sizeof(*ctx), GFP_ATOMIC);
+	ctx = kzalloc_obj(*ctx, GFP_ATOMIC);
 	if (!ctx) {
 		pr_err("Failed to allocate memory for line info notification\n");
 		fput(fp);
diff --git a/drivers/gpio/gpiolib-shared.c b/drivers/gpio/gpiolib-shared.c
index b3525d1f06a4..bb53f803b2e3 100644
--- a/drivers/gpio/gpiolib-shared.c
+++ b/drivers/gpio/gpiolib-shared.c
@@ -84,7 +84,8 @@ static struct gpio_shared_ref *gpio_shared_make_ref(struct fwnode_handle *fwnode
 {
 	char *con_id_cpy __free(kfree) = NULL;

-	struct gpio_shared_ref *ref __free(kfree) = kzalloc(sizeof(*ref), GFP_KERNEL);
+	struct gpio_shared_ref *ref __free(kfree) = kzalloc_obj(*ref,
+								GFP_KERNEL);
 	if (!ref)
 		return NULL;

@@ -227,7 +228,7 @@ static int gpio_shared_of_traverse(struct device_node *curr)

 			entry = gpio_shared_find_entry(fwnode, offset);
 			if (!entry) {
-				entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+				entry = kzalloc_obj(*entry, GFP_KERNEL);
 				if (!entry)
 					return -ENOMEM;

@@ -477,7 +478,7 @@ int gpio_shared_add_proxy_lookup(struct device *consumer, const char *con_id,
 			if (!key)
 				return -ENOMEM;

-			lookup = kzalloc(struct_size(lookup, table, 2), GFP_KERNEL);
+			lookup = kzalloc_flex(*lookup, table, 2, GFP_KERNEL);
 			if (!lookup)
 				return -ENOMEM;

@@ -626,7 +627,7 @@ gpiod_shared_desc_create(struct gpio_shared_entry *entry)

 	lockdep_assert_held(&entry->lock);

-	shared_desc = kzalloc(sizeof(*shared_desc), GFP_KERNEL);
+	shared_desc = kzalloc_obj(*shared_desc, GFP_KERNEL);
 	if (!shared_desc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c
index d4a46a0a37d8..99e0cf963b19 100644
--- a/drivers/gpio/gpiolib-sysfs.c
+++ b/drivers/gpio/gpiolib-sysfs.c
@@ -761,7 +761,7 @@ int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
 		goto err_clear_bit;
 	}

-	desc_data = kzalloc(sizeof(*desc_data), GFP_KERNEL);
+	desc_data = kzalloc_obj(*desc_data, GFP_KERNEL);
 	if (!desc_data) {
 		status = -ENOMEM;
 		goto err_clear_bit;
@@ -1014,7 +1014,7 @@ int gpiochip_sysfs_register(struct gpio_device *gdev)
 	else
 		parent = &gdev->dev;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index c52200eaaaff..654505cd21da 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -147,8 +147,7 @@ static int desc_set_label(struct gpio_desc *desc, const char *label)
 	struct gpio_desc_label *new = NULL, *old;

 	if (label) {
-		new = kzalloc(struct_size(new, str, strlen(label) + 1),
-			      GFP_KERNEL);
+		new = kzalloc_flex(*new, str, strlen(label) + 1, GFP_KERNEL);
 		if (!new)
 			return -ENOMEM;

@@ -2333,7 +2332,7 @@ int gpiochip_add_pingroup_range(struct gpio_chip *gc,
 	struct gpio_device *gdev = gc->gpiodev;
 	int ret;

-	pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
+	pin_range = kzalloc_obj(*pin_range, GFP_KERNEL);
 	if (!pin_range)
 		return -ENOMEM;

@@ -2394,7 +2393,7 @@ int gpiochip_add_pin_range_with_pins(struct gpio_chip *gc,
 	struct gpio_device *gdev = gc->gpiodev;
 	int ret;

-	pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
+	pin_range = kzalloc_obj(*pin_range, GFP_KERNEL);
 	if (!pin_range)
 		return -ENOMEM;

@@ -5370,7 +5369,7 @@ static void *gpiolib_seq_start(struct seq_file *s, loff_t *pos)

 	s->private = NULL;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdgpu/aldebaran.c b/drivers/gpu/drm/amd/amdgpu/aldebaran.c
index daa7b23bc775..5d8d9c73434a 100644
--- a/drivers/gpu/drm/amd/amdgpu/aldebaran.c
+++ b/drivers/gpu/drm/amd/amdgpu/aldebaran.c
@@ -447,7 +447,7 @@ int aldebaran_reset_init(struct amdgpu_device *adev)
 {
 	struct amdgpu_reset_control *reset_ctl;

-	reset_ctl = kzalloc(sizeof(*reset_ctl), GFP_KERNEL);
+	reset_ctl = kzalloc_obj(*reset_ctl, GFP_KERNEL);
 	if (!reset_ctl)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c
index 9b3180449150..1c7597c19249 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c
@@ -52,7 +52,7 @@ static int aca_banks_add_bank(struct aca_banks *banks, struct aca_bank *bank)
 	if (!bank)
 		return -EINVAL;

-	node = kvzalloc(sizeof(*node), GFP_KERNEL);
+	node = kvzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

@@ -230,7 +230,7 @@ static struct aca_bank_error *new_bank_error(struct aca_error *aerr, struct aca_
 {
 	struct aca_bank_error *bank_error;

-	bank_error = kvzalloc(sizeof(*bank_error), GFP_KERNEL);
+	bank_error = kvzalloc_obj(*bank_error, GFP_KERNEL);
 	if (!bank_error)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
index 381ef205b0df..c544f0dbb93f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
@@ -246,7 +246,7 @@ static int acp_hw_init(struct amdgpu_ip_block *ip_block)
 		return -EINVAL;

 	acp_base = adev->rmmio_base;
-	adev->acp.acp_genpd = kzalloc(sizeof(struct acp_pm_domain), GFP_KERNEL);
+	adev->acp.acp_genpd = kzalloc_obj(struct acp_pm_domain, GFP_KERNEL);
 	if (!adev->acp.acp_genpd)
 		return -ENOMEM;

@@ -260,20 +260,21 @@ static int acp_hw_init(struct amdgpu_ip_block *ip_block)
 	switch (acp_machine_id) {
 	case ST_JADEITE:
 	{
-		adev->acp.acp_cell = kcalloc(2, sizeof(struct mfd_cell),
-					     GFP_KERNEL);
+		adev->acp.acp_cell = kzalloc_objs(struct mfd_cell, 2,
+						  GFP_KERNEL);
 		if (!adev->acp.acp_cell) {
 			r = -ENOMEM;
 			goto failure;
 		}

-		adev->acp.acp_res = kcalloc(3, sizeof(struct resource), GFP_KERNEL);
+		adev->acp.acp_res = kzalloc_objs(struct resource, 3, GFP_KERNEL);
 		if (!adev->acp.acp_res) {
 			r = -ENOMEM;
 			goto failure;
 		}

-		i2s_pdata = kcalloc(1, sizeof(struct i2s_platform_data), GFP_KERNEL);
+		i2s_pdata = kzalloc_objs(struct i2s_platform_data, 1,
+					 GFP_KERNEL);
 		if (!i2s_pdata) {
 			r = -ENOMEM;
 			goto failure;
@@ -324,21 +325,22 @@ static int acp_hw_init(struct amdgpu_ip_block *ip_block)
 		break;
 	}
 	default:
-		adev->acp.acp_cell = kcalloc(ACP_DEVS, sizeof(struct mfd_cell),
-					     GFP_KERNEL);
+		adev->acp.acp_cell = kzalloc_objs(struct mfd_cell, ACP_DEVS,
+						  GFP_KERNEL);

 		if (!adev->acp.acp_cell) {
 			r = -ENOMEM;
 			goto failure;
 		}

-		adev->acp.acp_res = kcalloc(5, sizeof(struct resource), GFP_KERNEL);
+		adev->acp.acp_res = kzalloc_objs(struct resource, 5, GFP_KERNEL);
 		if (!adev->acp.acp_res) {
 			r = -ENOMEM;
 			goto failure;
 		}

-		i2s_pdata = kcalloc(3, sizeof(struct i2s_platform_data), GFP_KERNEL);
+		i2s_pdata = kzalloc_objs(struct i2s_platform_data, 3,
+					 GFP_KERNEL);
 		if (!i2s_pdata) {
 			r = -ENOMEM;
 			goto failure;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
index 02d5abf9df2b..742fc381149e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
@@ -897,7 +897,7 @@ static struct amdgpu_numa_info *amdgpu_acpi_get_numa_info(uint32_t pxm)
 	if (!numa_info) {
 		struct sysinfo info;

-		numa_info = kzalloc(sizeof(*numa_info), GFP_KERNEL);
+		numa_info = kzalloc_obj(*numa_info, GFP_KERNEL);
 		if (!numa_info)
 			return NULL;

@@ -1016,7 +1016,7 @@ static int amdgpu_acpi_dev_init(struct amdgpu_acpi_dev_info **dev_info,
 	int ret = -ENOENT;

 	*dev_info = NULL;
-	tmp = kzalloc(sizeof(struct amdgpu_acpi_dev_info), GFP_KERNEL);
+	tmp = kzalloc_obj(struct amdgpu_acpi_dev_info, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

@@ -1166,8 +1166,7 @@ int amdgpu_acpi_enumerate_xcc(void)
 			break;
 		}

-		xcc_info = kzalloc(sizeof(struct amdgpu_acpi_xcc_info),
-				   GFP_KERNEL);
+		xcc_info = kzalloc_obj(struct amdgpu_acpi_xcc_info, GFP_KERNEL);
 		if (!xcc_info)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index 3bfd79c89df3..16baf713be78 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -829,11 +829,11 @@ int amdgpu_amdkfd_unmap_hiq(struct amdgpu_device *adev, u32 doorbell_off,
 	if (!kiq_ring->sched.ready || amdgpu_in_reset(adev))
 		return 0;

-	ring_funcs = kzalloc(sizeof(*ring_funcs), GFP_KERNEL);
+	ring_funcs = kzalloc_obj(*ring_funcs, GFP_KERNEL);
 	if (!ring_funcs)
 		return -ENOMEM;

-	ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kzalloc_obj(*ring, GFP_KERNEL);
 	if (!ring) {
 		r = -ENOMEM;
 		goto free_ring_funcs;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
index 1105a09e55dc..c74e3866ffb8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
@@ -199,7 +199,7 @@ int kgd_arcturus_hqd_sdma_dump(struct amdgpu_device *adev,
 #undef HQD_N_REGS
 #define HQD_N_REGS (19+6+7+10)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
index 31b8fa52b42f..fff60109cf9c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
@@ -67,7 +67,7 @@ struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
 {
 	struct amdgpu_amdkfd_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (fence == NULL)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gc_9_4_3.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gc_9_4_3.c
index 89a45a9218f3..a2e00dd114a6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gc_9_4_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gc_9_4_3.c
@@ -141,7 +141,7 @@ static int kgd_gfx_v9_4_3_hqd_sdma_dump(struct amdgpu_device *adev,
 		(*dump)[i++][1] = RREG32(addr);         \
 	} while (0)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
index 0239114fb6c4..70d63690dccd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
@@ -352,7 +352,7 @@ static int kgd_hqd_dump(struct amdgpu_device *adev,
 		(*dump)[i++][1] = RREG32_SOC15_IP(GC, addr);		\
 	} while (0)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

@@ -449,7 +449,7 @@ static int kgd_hqd_sdma_dump(struct amdgpu_device *adev,
 #undef HQD_N_REGS
 #define HQD_N_REGS (19+6+7+10)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.c
index f2278a0937ff..41564319441e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.c
@@ -338,7 +338,7 @@ static int hqd_dump_v10_3(struct amdgpu_device *adev,
 		(*dump)[i++][1] = RREG32_SOC15_IP(GC, addr);		\
 	} while (0)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

@@ -435,7 +435,7 @@ static int hqd_sdma_dump_v10_3(struct amdgpu_device *adev,
 #undef HQD_N_REGS
 #define HQD_N_REGS (19+6+7+12)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c
index aaccf0b9947d..50c57914c90c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c
@@ -323,7 +323,7 @@ static int hqd_dump_v11(struct amdgpu_device *adev,
 		(*dump)[i++][1] = RREG32(addr);		\
 	} while (0)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

@@ -420,7 +420,7 @@ static int hqd_sdma_dump_v11(struct amdgpu_device *adev,
 #undef HQD_N_REGS
 #define HQD_N_REGS (7+11+1+12+12)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v12.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v12.c
index e0ceab400b2d..4e43ad423713 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v12.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v12.c
@@ -115,7 +115,7 @@ static int hqd_dump_v12(struct amdgpu_device *adev,
 		(*dump)[i++][1] = RREG32(addr);		\
 	} while (0)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

@@ -146,7 +146,7 @@ static int hqd_sdma_dump_v12(struct amdgpu_device *adev,
 #undef HQD_N_REGS
 #define HQD_N_REGS (last_reg - first_reg + 1)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
index df77558e03ef..ba7e901322b3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
@@ -214,7 +214,7 @@ static int kgd_hqd_dump(struct amdgpu_device *adev,
 		(*dump)[i++][1] = RREG32(addr);		\
 	} while (0)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

@@ -301,7 +301,7 @@ static int kgd_hqd_sdma_dump(struct amdgpu_device *adev,
 #undef HQD_N_REGS
 #define HQD_N_REGS (19+4)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
index e68c0fa8d751..9f51fd11c5ae 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
@@ -238,7 +238,7 @@ static int kgd_hqd_dump(struct amdgpu_device *adev,
 		(*dump)[i++][1] = RREG32(addr);		\
 	} while (0)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

@@ -324,7 +324,7 @@ static int kgd_hqd_sdma_dump(struct amdgpu_device *adev,
 #undef HQD_N_REGS
 #define HQD_N_REGS (19+4+2+3+7)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
index 088d09cc7a72..cc2073cf43f4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
@@ -363,7 +363,7 @@ int kgd_gfx_v9_hqd_dump(struct amdgpu_device *adev,
 		(*dump)[i++][1] = RREG32(addr);		\
 	} while (0)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

@@ -460,7 +460,7 @@ static int kgd_hqd_sdma_dump(struct amdgpu_device *adev,
 #undef HQD_N_REGS
 #define HQD_N_REGS (19+6+7+10)

-	*dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
+	*dump = kmalloc_objs(**dump, HQD_N_REGS, GFP_KERNEL);
 	if (*dump == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index d8d834cf96e7..fd7bfe418099 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -540,7 +540,7 @@ static uint64_t get_pte_flags(struct amdgpu_device *adev, struct amdgpu_vm *vm,
  */
 static struct sg_table *create_sg_table(uint64_t addr, uint32_t size)
 {
-	struct sg_table *sg = kmalloc(sizeof(*sg), GFP_KERNEL);
+	struct sg_table *sg = kmalloc_obj(*sg, GFP_KERNEL);

 	if (!sg)
 		return NULL;
@@ -573,7 +573,7 @@ kfd_mem_dmamap_userptr(struct kgd_mem *mem,
 	if (WARN_ON(ttm->num_pages != src_ttm->num_pages))
 		return -EINVAL;

-	ttm->sg = kmalloc(sizeof(*ttm->sg), GFP_KERNEL);
+	ttm->sg = kmalloc_obj(*ttm->sg, GFP_KERNEL);
 	if (unlikely(!ttm->sg))
 		return -ENOMEM;

@@ -1409,7 +1409,7 @@ static int init_kfd_vm(struct amdgpu_vm *vm, void **process_info,

 	process = container_of(process_info, struct kfd_process, kgd_process_info);
 	if (!*process_info) {
-		info = kzalloc(sizeof(*info), GFP_KERNEL);
+		info = kzalloc_obj(*info, GFP_KERNEL);
 		if (!info)
 			return -ENOMEM;

@@ -1773,7 +1773,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
 	if (flags & KFD_IOC_ALLOC_MEM_FLAGS_UNCACHED)
 		alloc_flags |= AMDGPU_GEM_CREATE_UNCACHED;

-	*mem = kzalloc(sizeof(struct kgd_mem), GFP_KERNEL);
+	*mem = kzalloc_obj(struct kgd_mem, GFP_KERNEL);
 	if (!*mem) {
 		ret = -ENOMEM;
 		goto err;
@@ -2374,7 +2374,7 @@ static int import_obj_create(struct amdgpu_device *adev,
 		/* Only VRAM and GTT BOs are supported */
 		return -EINVAL;

-	*mem = kzalloc(sizeof(struct kgd_mem), GFP_KERNEL);
+	*mem = kzalloc_obj(struct kgd_mem, GFP_KERNEL);
 	if (!*mem)
 		return -ENOMEM;

@@ -3129,7 +3129,7 @@ int amdgpu_amdkfd_add_gws_to_process(void *info, void *gws, struct kgd_mem **mem
 	if (!info || !gws)
 		return -EINVAL;

-	*mem = kzalloc(sizeof(struct kgd_mem), GFP_KERNEL);
+	*mem = kzalloc_obj(struct kgd_mem, GFP_KERNEL);
 	if (!*mem)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
index 763f2b8dcf13..59ddc14cbb7d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
@@ -1897,7 +1897,7 @@ void amdgpu_atombios_fini(struct amdgpu_device *adev)
 int amdgpu_atombios_init(struct amdgpu_device *adev)
 {
 	struct card_info *atom_card_info =
-	    kzalloc(sizeof(struct card_info), GFP_KERNEL);
+	    kzalloc_obj(struct card_info, GFP_KERNEL);

 	if (!atom_card_info)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
index 87ec46c56a6e..3785c0645751 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
@@ -76,7 +76,7 @@ int amdgpu_bo_list_create(struct amdgpu_device *adev, struct drm_file *filp,
 	unsigned i;
 	int r;

-	list = kvzalloc(struct_size(list, entries, num_entries), GFP_KERNEL);
+	list = kvzalloc_flex(*list, entries, num_entries, GFP_KERNEL);
 	if (!list)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
index 09c8942c22d3..c9c82fc9604a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
@@ -399,8 +399,8 @@ static const struct cgs_ops amdgpu_cgs_ops = {

 struct cgs_device *amdgpu_cgs_create_device(struct amdgpu_device *adev)
 {
-	struct amdgpu_cgs_device *cgs_device =
-		kmalloc(sizeof(*cgs_device), GFP_KERNEL);
+	struct amdgpu_cgs_device *cgs_device = kmalloc_obj(*cgs_device,
+							   GFP_KERNEL);

 	if (!cgs_device) {
 		drm_err(adev_to_drm(adev), "Couldn't allocate CGS device structure\n");
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
index d3e312bda4ed..198ad026222d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
@@ -1652,7 +1652,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,
 		}
 	}

-	amdgpu_connector = kzalloc(sizeof(struct amdgpu_connector), GFP_KERNEL);
+	amdgpu_connector = kzalloc_obj(struct amdgpu_connector, GFP_KERNEL);
 	if (!amdgpu_connector)
 		return;

@@ -1673,7 +1673,8 @@ amdgpu_connector_add(struct amdgpu_device *adev,
 	}

 	if (is_dp_bridge) {
-		amdgpu_dig_connector = kzalloc(sizeof(struct amdgpu_connector_atom_dig), GFP_KERNEL);
+		amdgpu_dig_connector = kzalloc_obj(struct amdgpu_connector_atom_dig,
+						   GFP_KERNEL);
 		if (!amdgpu_dig_connector)
 			goto failed;
 		amdgpu_connector->con_priv = amdgpu_dig_connector;
@@ -1828,7 +1829,8 @@ amdgpu_connector_add(struct amdgpu_device *adev,
 			break;
 		case DRM_MODE_CONNECTOR_DVII:
 		case DRM_MODE_CONNECTOR_DVID:
-			amdgpu_dig_connector = kzalloc(sizeof(struct amdgpu_connector_atom_dig), GFP_KERNEL);
+			amdgpu_dig_connector = kzalloc_obj(struct amdgpu_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!amdgpu_dig_connector)
 				goto failed;
 			amdgpu_connector->con_priv = amdgpu_dig_connector;
@@ -1885,7 +1887,8 @@ amdgpu_connector_add(struct amdgpu_device *adev,
 			break;
 		case DRM_MODE_CONNECTOR_HDMIA:
 		case DRM_MODE_CONNECTOR_HDMIB:
-			amdgpu_dig_connector = kzalloc(sizeof(struct amdgpu_connector_atom_dig), GFP_KERNEL);
+			amdgpu_dig_connector = kzalloc_obj(struct amdgpu_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!amdgpu_dig_connector)
 				goto failed;
 			amdgpu_connector->con_priv = amdgpu_dig_connector;
@@ -1934,7 +1937,8 @@ amdgpu_connector_add(struct amdgpu_device *adev,
 				connector->doublescan_allowed = false;
 			break;
 		case DRM_MODE_CONNECTOR_DisplayPort:
-			amdgpu_dig_connector = kzalloc(sizeof(struct amdgpu_connector_atom_dig), GFP_KERNEL);
+			amdgpu_dig_connector = kzalloc_obj(struct amdgpu_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!amdgpu_dig_connector)
 				goto failed;
 			amdgpu_connector->con_priv = amdgpu_dig_connector;
@@ -1983,7 +1987,8 @@ amdgpu_connector_add(struct amdgpu_device *adev,
 			connector->doublescan_allowed = false;
 			break;
 		case DRM_MODE_CONNECTOR_eDP:
-			amdgpu_dig_connector = kzalloc(sizeof(struct amdgpu_connector_atom_dig), GFP_KERNEL);
+			amdgpu_dig_connector = kzalloc_obj(struct amdgpu_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!amdgpu_dig_connector)
 				goto failed;
 			amdgpu_connector->con_priv = amdgpu_dig_connector;
@@ -2010,7 +2015,8 @@ amdgpu_connector_add(struct amdgpu_device *adev,
 			connector->doublescan_allowed = false;
 			break;
 		case DRM_MODE_CONNECTOR_LVDS:
-			amdgpu_dig_connector = kzalloc(sizeof(struct amdgpu_connector_atom_dig), GFP_KERNEL);
+			amdgpu_dig_connector = kzalloc_obj(struct amdgpu_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!amdgpu_dig_connector)
 				goto failed;
 			amdgpu_connector->con_priv = amdgpu_dig_connector;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index f3b5bcdbf2ae..c9345783ac26 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -192,8 +192,8 @@ static int amdgpu_cs_pass1(struct amdgpu_cs_parser *p,
 		return PTR_ERR(chunk_array);

 	p->nchunks = cs->in.num_chunks;
-	p->chunks = kvmalloc_array(p->nchunks, sizeof(struct amdgpu_cs_chunk),
-			    GFP_KERNEL);
+	p->chunks = kvmalloc_objs(struct amdgpu_cs_chunk, p->nchunks,
+				  GFP_KERNEL);
 	if (!p->chunks) {
 		ret = -ENOMEM;
 		goto free_chunk;
@@ -523,8 +523,7 @@ static int amdgpu_cs_p2_syncobj_out(struct amdgpu_cs_parser *p,
 	if (p->post_deps)
 		return -EINVAL;

-	p->post_deps = kmalloc_array(num_deps, sizeof(*p->post_deps),
-				     GFP_KERNEL);
+	p->post_deps = kmalloc_objs(*p->post_deps, num_deps, GFP_KERNEL);
 	p->num_post_deps = 0;

 	if (!p->post_deps)
@@ -557,8 +556,7 @@ static int amdgpu_cs_p2_syncobj_timeline_signal(struct amdgpu_cs_parser *p,
 	if (p->post_deps)
 		return -EINVAL;

-	p->post_deps = kmalloc_array(num_deps, sizeof(*p->post_deps),
-				     GFP_KERNEL);
+	p->post_deps = kmalloc_objs(*p->post_deps, num_deps, GFP_KERNEL);
 	p->num_post_deps = 0;

 	if (!p->post_deps)
@@ -1691,7 +1689,7 @@ static int amdgpu_cs_wait_any_fence(struct amdgpu_device *adev,
 	long r;

 	/* Prepare the fence array */
-	array = kcalloc(fence_count, sizeof(struct dma_fence *), GFP_KERNEL);
+	array = kzalloc_objs(struct dma_fence *, fence_count, GFP_KERNEL);

 	if (array == NULL)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index 5c344665b43c..1eb2e89fcdeb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -212,8 +212,7 @@ static int amdgpu_ctx_init_entity(struct amdgpu_ctx *ctx, u32 hw_ip,
 	int32_t ctx_prio;
 	int r;

-	entity = kzalloc(struct_size(entity, fences, amdgpu_sched_jobs),
-			 GFP_KERNEL);
+	entity = kzalloc_flex(*entity, fences, amdgpu_sched_jobs, GFP_KERNEL);
 	if (!entity)
 		return  -ENOMEM;

@@ -483,7 +482,7 @@ static int amdgpu_ctx_alloc(struct amdgpu_device *adev,
 	struct amdgpu_ctx *ctx;
 	int r;

-	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
index aeb90708f229..56a13637bb8c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
@@ -206,7 +206,7 @@ static int amdgpu_debugfs_regs2_open(struct inode *inode, struct file *file)
 {
 	struct amdgpu_debugfs_regs2_data *rd;

-	rd = kzalloc(sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_obj(*rd, GFP_KERNEL);
 	if (!rd)
 		return -ENOMEM;
 	rd->adev = file_inode(file)->i_private;
@@ -371,7 +371,7 @@ static int amdgpu_debugfs_gprwave_open(struct inode *inode, struct file *file)
 {
 	struct amdgpu_debugfs_gprwave_data *rd;

-	rd = kzalloc(sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_obj(*rd, GFP_KERNEL);
 	if (!rd)
 		return -ENOMEM;
 	rd->adev = file_inode(file)->i_private;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
index ca71c2948227..c38e7371bafc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
@@ -332,7 +332,7 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool skip_vram_check,
 	struct amdgpu_coredump_info *coredump;
 	struct drm_sched_job *s_job;

-	coredump = kzalloc(sizeof(*coredump), GFP_NOWAIT);
+	coredump = kzalloc_obj(*coredump, GFP_NOWAIT);
 	if (!coredump)
 		return;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index c3cb9570f0ba..c57cbf497eba 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2596,7 +2596,7 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
 static void amdgpu_uid_init(struct amdgpu_device *adev)
 {
 	/* Initialize the UID for the device */
-	adev->uid_info = kzalloc(sizeof(struct amdgpu_uid), GFP_KERNEL);
+	adev->uid_info = kzalloc_obj(struct amdgpu_uid, GFP_KERNEL);
 	if (!adev->uid_info) {
 		dev_warn(adev->dev, "Failed to allocate memory for UID\n");
 		return;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
index fc8c1f36be58..c51eedd96fb0 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
@@ -1149,7 +1149,7 @@ static int amdgpu_discovery_sysfs_ips(struct amdgpu_device *adev,
 			 * block if not yet registered.
 			 */
 			if (!ip_hw_id) {
-				ip_hw_id = kzalloc(sizeof(*ip_hw_id), GFP_KERNEL);
+				ip_hw_id = kzalloc_obj(*ip_hw_id, GFP_KERNEL);
 				if (!ip_hw_id)
 					return -ENOMEM;
 				ip_hw_id->hw_id = ii;
@@ -1177,10 +1177,10 @@ static int amdgpu_discovery_sysfs_ips(struct amdgpu_device *adev,

 			/* Now register its instance.
 			 */
-			ip_hw_instance = kzalloc(struct_size(ip_hw_instance,
-							     base_addr,
-							     ip->num_base_address),
-						 GFP_KERNEL);
+			ip_hw_instance = kzalloc_flex(*ip_hw_instance,
+						      base_addr,
+						      ip->num_base_address,
+						      GFP_KERNEL);
 			if (!ip_hw_instance) {
 				DRM_ERROR("no memory for ip_hw_instance");
 				return -ENOMEM;
@@ -1255,7 +1255,7 @@ static int amdgpu_discovery_sysfs_recurse(struct amdgpu_device *adev)
 		 * amdgpu_discovery_reg_base_init().
 		 */

-		ip_die_entry = kzalloc(sizeof(*ip_die_entry), GFP_KERNEL);
+		ip_die_entry = kzalloc_obj(*ip_die_entry, GFP_KERNEL);
 		if (!ip_die_entry)
 			return -ENOMEM;

@@ -1287,7 +1287,7 @@ static int amdgpu_discovery_sysfs_init(struct amdgpu_device *adev)
 	if (!discovery_bin)
 		return -EINVAL;

-	ip_top = kzalloc(sizeof(*ip_top), GFP_KERNEL);
+	ip_top = kzalloc_obj(*ip_top, GFP_KERNEL);
 	if (!ip_top)
 		return -ENOMEM;

@@ -1931,9 +1931,8 @@ int amdgpu_discovery_get_nps_info(struct amdgpu_device *adev,

 	switch (le16_to_cpu(nps_info->v1.header.version_major)) {
 	case 1:
-		mem_ranges = kvcalloc(nps_info->v1.count,
-				      sizeof(*mem_ranges),
-				      GFP_KERNEL);
+		mem_ranges = kvzalloc_objs(*mem_ranges, nps_info->v1.count,
+					   GFP_KERNEL);
 		if (!mem_ranges)
 			return -ENOMEM;
 		*nps_type = nps_info->v1.nps_type;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index 48b6f6077992..eb94a0b97b94 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -204,7 +204,7 @@ int amdgpu_display_crtc_page_flip_target(struct drm_crtc *crtc,
 	u64 tiling_flags;
 	int i, r;

-	work = kzalloc(sizeof(*work), GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (work == NULL)
 		return -ENOMEM;

@@ -1323,7 +1323,7 @@ amdgpu_display_user_framebuffer_create(struct drm_device *dev,
 		return ERR_PTR(-EINVAL);
 	}

-	amdgpu_fb = kzalloc(sizeof(*amdgpu_fb), GFP_KERNEL);
+	amdgpu_fb = kzalloc_obj(*amdgpu_fb, GFP_KERNEL);
 	if (amdgpu_fb == NULL) {
 		drm_gem_object_put(obj);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
index 23d7d0b0d625..432de34d177f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
@@ -161,7 +161,7 @@ amdgpu_eviction_fence_create(struct amdgpu_eviction_fence_mgr *evf_mgr)
 {
 	struct amdgpu_eviction_fence *ev_fence;

-	ev_fence = kzalloc(sizeof(*ev_fence), GFP_KERNEL);
+	ev_fence = kzalloc_obj(*ev_fence, GFP_KERNEL);
 	if (!ev_fence)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
index b0082aa7f3c6..cb33a04d94c9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
@@ -130,7 +130,7 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev)
 		return 0;

 	if (!adev->fru_info) {
-		adev->fru_info = kzalloc(sizeof(*adev->fru_info), GFP_KERNEL);
+		adev->fru_info = kzalloc_obj(*adev->fru_info, GFP_KERNEL);
 		if (!adev->fru_info)
 			return -ENOMEM;
 	}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index ec911dce345f..07e43b446e44 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -153,7 +153,7 @@ int amdgpu_gart_table_ram_alloc(struct amdgpu_device *adev)

 	dev_info(adev->dev, "%s dma_addr:%pad\n", __func__, &dma_addr);
 	/* Create SG table */
-	sg = kmalloc(sizeof(*sg), GFP_KERNEL);
+	sg = kmalloc_obj(*sg, GFP_KERNEL);
 	if (!sg) {
 		ret = -ENOMEM;
 		goto error;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 5c90de58cc28..27b77a82b174 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -1183,7 +1183,7 @@ int amdgpu_gem_list_handles_ioctl(struct drm_device *dev, void *data,
 		return 0;
 	}

-	bo_entries = kvcalloc(num_bos, sizeof(*bo_entries), GFP_KERNEL);
+	bo_entries = kvzalloc_objs(*bo_entries, num_bos, GFP_KERNEL);
 	if (!bo_entries)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
index 6a6b334428f6..d9b2252db00e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
@@ -1727,9 +1727,9 @@ int amdgpu_gmc_init_mem_ranges(struct amdgpu_device *adev)
 {
 	bool valid;

-	adev->gmc.mem_partitions = kcalloc(AMDGPU_MAX_MEM_RANGES,
-					   sizeof(struct amdgpu_mem_partition_info),
-					   GFP_KERNEL);
+	adev->gmc.mem_partitions = kzalloc_objs(struct amdgpu_mem_partition_info,
+						AMDGPU_MAX_MEM_RANGES,
+						GFP_KERNEL);
 	if (!adev->gmc.mem_partitions)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
index dd9b845d5783..33e209818ced 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
@@ -122,7 +122,7 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man,
 	struct ttm_range_mgr_node *node;
 	int r;

-	node = kzalloc(struct_size(node, mm_nodes, 1), GFP_KERNEL);
+	node = kzalloc_flex(*node, mm_nodes, 1, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
index 90d26d820bac..4cc345f77db0 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
@@ -265,7 +265,7 @@ struct amdgpu_hmm_range *amdgpu_hmm_range_alloc(struct amdgpu_bo *bo)
 {
 	struct amdgpu_hmm_range *range;

-	range = kzalloc(sizeof(*range), GFP_KERNEL);
+	range = kzalloc_obj(*range, GFP_KERNEL);
 	if (!range)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.c
index 9cb72f0c5277..9dc4a5f426eb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.c
@@ -168,7 +168,7 @@ struct amdgpu_i2c_chan *amdgpu_i2c_create(struct drm_device *dev,
 	if (rec->mm_i2c && (amdgpu_hw_i2c == 0))
 		return NULL;

-	i2c = kzalloc(sizeof(struct amdgpu_i2c_chan), GFP_KERNEL);
+	i2c = kzalloc_obj(struct amdgpu_i2c_chan, GFP_KERNEL);
 	if (i2c == NULL)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
index bfa64cd7a62d..3a7bab87b5d8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
@@ -169,7 +169,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs,
 		csa_va = 0;
 		gds_va = 0;
 		init_shadow = false;
-		af = kzalloc(sizeof(*af), GFP_ATOMIC);
+		af = kzalloc_obj(*af, GFP_ATOMIC);
 		if (!af)
 			return -ENOMEM;
 	}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
index 9cab36322c16..52bad6d28915 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
@@ -119,7 +119,7 @@ void amdgpu_pasid_free_delayed(struct dma_resv *resv,
 		return;
 	}

-	cb = kmalloc(sizeof(*cb), GFP_KERNEL);
+	cb = kmalloc_obj(*cb, GFP_KERNEL);
 	if (!cb) {
 		/* Last resort when we are OOM */
 		dma_fence_wait(fence, false);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
index 82bc6d657e5a..d51ce25474f5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
@@ -436,9 +436,8 @@ int amdgpu_irq_add_id(struct amdgpu_device *adev,

 	if (!adev->irq.client[client_id].sources) {
 		adev->irq.client[client_id].sources =
-			kcalloc(AMDGPU_MAX_IRQ_SRC_ID,
-				sizeof(struct amdgpu_irq_src *),
-				GFP_KERNEL);
+			kzalloc_objs(struct amdgpu_irq_src *,
+				     AMDGPU_MAX_IRQ_SRC_ID, GFP_KERNEL);
 		if (!adev->irq.client[client_id].sources)
 			return -ENOMEM;
 	}
@@ -449,8 +448,7 @@ int amdgpu_irq_add_id(struct amdgpu_device *adev,
 	if (source->num_types && !source->enabled_types) {
 		atomic_t *types;

-		types = kcalloc(source->num_types, sizeof(atomic_t),
-				GFP_KERNEL);
+		types = kzalloc_objs(atomic_t, source->num_types, GFP_KERNEL);
 		if (!types)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 2c82d9e8c0be..8865b4802963 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -198,18 +198,18 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, struct amdgpu_vm *vm,
 	if (num_ibs == 0)
 		return -EINVAL;

-	*job = kzalloc(struct_size(*job, ibs, num_ibs), GFP_KERNEL);
+	*job = kzalloc_flex(**job, ibs, num_ibs, GFP_KERNEL);
 	if (!*job)
 		return -ENOMEM;

-	af = kzalloc(sizeof(struct amdgpu_fence), GFP_KERNEL);
+	af = kzalloc_obj(struct amdgpu_fence, GFP_KERNEL);
 	if (!af) {
 		r = -ENOMEM;
 		goto err_job;
 	}
 	(*job)->hw_fence = af;

-	af = kzalloc(sizeof(struct amdgpu_fence), GFP_KERNEL);
+	af = kzalloc_obj(struct amdgpu_fence, GFP_KERNEL);
 	if (!af) {
 		r = -ENOMEM;
 		goto err_fence;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index f69332eed051..a5b72ed77162 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -942,7 +942,7 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
 		uint64_t vm_size;
 		uint32_t pcie_gen_mask, pcie_width_mask;

-		dev_info = kzalloc(sizeof(*dev_info), GFP_KERNEL);
+		dev_info = kzalloc_obj(*dev_info, GFP_KERNEL);
 		if (!dev_info)
 			return -ENOMEM;

@@ -1329,7 +1329,7 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
 			return -EINVAL;
 		}

-		caps = kzalloc(sizeof(*caps), GFP_KERNEL);
+		caps = kzalloc_obj(*caps, GFP_KERNEL);
 		if (!caps)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mca.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mca.c
index 3ca03b5e0f91..6b52dbdb7e54 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mca.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mca.c
@@ -169,7 +169,7 @@ static int amdgpu_mca_bank_set_add_entry(struct mca_bank_set *mca_set, struct mc
 	if (!entry)
 		return -EINVAL;

-	node = kvzalloc(sizeof(*node), GFP_KERNEL);
+	node = kvzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c
index 6e91ea1de5aa..0cfe3a91db84 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c
@@ -446,25 +446,25 @@ static int amdgpu_pmu_alloc_pmu_attrs(
 				struct amdgpu_pmu_event_attribute **evt_attr,
 				struct amdgpu_pmu_config *config)
 {
-	*fmt_attr = kcalloc(config->num_formats, sizeof(**fmt_attr),
-								GFP_KERNEL);
+	*fmt_attr = kzalloc_objs(**fmt_attr, config->num_formats, GFP_KERNEL);

 	if (!(*fmt_attr))
 		return -ENOMEM;

-	fmt_attr_group->attrs = kcalloc(config->num_formats + 1,
-				sizeof(*fmt_attr_group->attrs), GFP_KERNEL);
+	fmt_attr_group->attrs = kzalloc_objs(*fmt_attr_group->attrs,
+					     config->num_formats + 1,
+					     GFP_KERNEL);

 	if (!fmt_attr_group->attrs)
 		goto err_fmt_attr_grp;

-	*evt_attr = kcalloc(config->num_events, sizeof(**evt_attr), GFP_KERNEL);
+	*evt_attr = kzalloc_objs(**evt_attr, config->num_events, GFP_KERNEL);

 	if (!(*evt_attr))
 		goto err_evt_attr;

-	evt_attr_group->attrs = kcalloc(config->num_events + 1,
-				sizeof(*evt_attr_group->attrs), GFP_KERNEL);
+	evt_attr_group->attrs = kzalloc_objs(*evt_attr_group->attrs,
+					     config->num_events + 1, GFP_KERNEL);

 	if (!evt_attr_group->attrs)
 		goto err_evt_attr_grp;
@@ -599,7 +599,7 @@ static struct amdgpu_pmu_entry *create_pmu_entry(struct amdgpu_device *adev,
 {
 	struct amdgpu_pmu_entry *pmu_entry;

-	pmu_entry = kzalloc(sizeof(struct amdgpu_pmu_entry), GFP_KERNEL);
+	pmu_entry = kzalloc_obj(struct amdgpu_pmu_entry, GFP_KERNEL);

 	if (!pmu_entry)
 		return pmu_entry;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c
index 34b5e22b44e5..5420362b4261 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c
@@ -61,7 +61,7 @@ static int amdgpu_preempt_mgr_new(struct ttm_resource_manager *man,
 				  const struct ttm_place *place,
 				  struct ttm_resource **res)
 {
-	*res = kzalloc(sizeof(**res), GFP_KERNEL);
+	*res = kzalloc_obj(**res, GFP_KERNEL);
 	if (!*res)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index a7c7b378c696..01ce996bfacd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -457,7 +457,7 @@ static int psp_sw_init(struct amdgpu_ip_block *ip_block)
 	struct psp_memory_training_context *mem_training_ctx = &psp->mem_train_ctx;
 	struct psp_runtime_scpm_entry scpm_entry;

-	psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
+	psp->cmd = kzalloc_obj(struct psp_gfx_cmd_resp, GFP_KERNEL);
 	if (!psp->cmd) {
 		dev_err(adev->dev, "Failed to allocate memory to command buffer!\n");
 		return -ENOMEM;
@@ -4384,7 +4384,7 @@ static int psp_read_spirom_debugfs_open(struct inode *inode, struct file *filp)
 		return -EBUSY;
 	}

-	bo_triplet = kzalloc(sizeof(struct spirom_bo), GFP_KERNEL);
+	bo_triplet = kzalloc_obj(struct spirom_bo, GFP_KERNEL);
 	if (!bo_triplet) {
 		mutex_unlock(&adev->psp.mutex);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index 856b1bf83533..c363953c2a74 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -891,7 +891,7 @@ int amdgpu_ras_feature_enable(struct amdgpu_device *adev,
 	if (head->block == AMDGPU_RAS_BLOCK__GFX &&
 	    !amdgpu_sriov_vf(adev) &&
 	    !amdgpu_ras_intr_triggered()) {
-		info = kzalloc(sizeof(union ta_ras_cmd_input), GFP_KERNEL);
+		info = kzalloc_obj(union ta_ras_cmd_input, GFP_KERNEL);
 		if (!info)
 			return -ENOMEM;

@@ -1904,7 +1904,7 @@ static ssize_t amdgpu_ras_sysfs_badpages_read(struct file *f,
 	memset(buf, 0, count);

 	bps_count = end - start;
-	bps = kmalloc_array(bps_count, sizeof(*bps), GFP_KERNEL);
+	bps = kmalloc_objs(*bps, bps_count, GFP_KERNEL);
 	if (!bps)
 		return 0;

@@ -2811,7 +2811,7 @@ static int amdgpu_uniras_badpages_read(struct amdgpu_device *adev,
 	if (!bps || !count)
 		return -EINVAL;

-	output = kmalloc(sizeof(*output), GFP_KERNEL);
+	output = kmalloc_obj(*output, GFP_KERNEL);
 	if (!output)
 		return -ENOMEM;

@@ -2991,7 +2991,7 @@ static int amdgpu_ras_realloc_eh_data_space(struct amdgpu_device *adev,
 	unsigned int old_space = data->count + data->space_left;
 	unsigned int new_space = old_space + pages;
 	unsigned int align_space = ALIGN(new_space, 512);
-	void *bps = kmalloc_array(align_space, sizeof(*data->bps), GFP_KERNEL);
+	void *bps = kmalloc_objs(*data->bps, align_space, GFP_KERNEL);

 	if (!bps) {
 		return -ENOMEM;
@@ -3238,8 +3238,8 @@ int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev,

 	if (from_rom) {
 		err_data.err_addr =
-			kcalloc(adev->umc.retire_unit,
-				sizeof(struct eeprom_table_record), GFP_KERNEL);
+			kzalloc_objs(struct eeprom_table_record,
+				     adev->umc.retire_unit, GFP_KERNEL);
 		if (!err_data.err_addr) {
 			dev_warn(adev->dev, "Failed to alloc UMC error address record in mca2pa conversion!\n");
 			return -ENOMEM;
@@ -3375,7 +3375,7 @@ static int amdgpu_ras_load_bad_pages(struct amdgpu_device *adev)
 	if (control->ras_num_recs == 0 || amdgpu_bad_page_threshold == 0)
 		return 0;

-	bps = kcalloc(control->ras_num_recs, sizeof(*bps), GFP_KERNEL);
+	bps = kzalloc_objs(*bps, control->ras_num_recs, GFP_KERNEL);
 	if (!bps)
 		return -ENOMEM;

@@ -3863,7 +3863,7 @@ int amdgpu_ras_recovery_init(struct amdgpu_device *adev, bool init_bp_info)
 		return 0;

 	data = &con->eh_data;
-	*data = kzalloc(sizeof(**data), GFP_KERNEL);
+	*data = kzalloc_obj(**data, GFP_KERNEL);
 	if (!*data) {
 		ret = -ENOMEM;
 		goto out;
@@ -4499,7 +4499,7 @@ int amdgpu_ras_block_late_init(struct amdgpu_device *adev,

 		/* Those are the cached values at init.
 		 */
-		query_info = kzalloc(sizeof(*query_info), GFP_KERNEL);
+		query_info = kzalloc_obj(*query_info, GFP_KERNEL);
 		if (!query_info)
 			return -ENOMEM;
 		memcpy(&query_info->head, ras_block, sizeof(struct ras_common_if));
@@ -5188,7 +5188,7 @@ int amdgpu_ras_register_ras_block(struct amdgpu_device *adev,
 	if (!adev || !ras_block_obj)
 		return -EINVAL;

-	ras_node = kzalloc(sizeof(*ras_node), GFP_KERNEL);
+	ras_node = kzalloc_obj(*ras_node, GFP_KERNEL);
 	if (!ras_node)
 		return -ENOMEM;

@@ -5389,7 +5389,7 @@ static struct ras_err_node *amdgpu_ras_error_node_new(void)
 {
 	struct ras_err_node *err_node;

-	err_node = kvzalloc(sizeof(*err_node), GFP_KERNEL);
+	err_node = kvzalloc_obj(*err_node, GFP_KERNEL);
 	if (!err_node)
 		return NULL;

@@ -5682,7 +5682,7 @@ int amdgpu_ras_add_critical_region(struct amdgpu_device *adev,

 	/* Record new critical amdgpu bo */
 	list_for_each_entry(block, &vres->blocks, link) {
-		region = kzalloc(sizeof(*region), GFP_KERNEL);
+		region = kzalloc_obj(*region, GFP_KERNEL);
 		if (!region) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c
index 28c4ad62f50e..d3413d1b9fb0 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c
@@ -276,7 +276,7 @@ struct amdgpu_reset_domain *amdgpu_reset_create_reset_domain(enum amdgpu_reset_d
 {
 	struct amdgpu_reset_domain *reset_domain;

-	reset_domain = kvzalloc(sizeof(struct amdgpu_reset_domain), GFP_KERNEL);
+	reset_domain = kvzalloc_obj(struct amdgpu_reset_domain, GFP_KERNEL);
 	if (!reset_domain) {
 		DRM_ERROR("Failed to allocate amdgpu_reset_domain!");
 		return NULL;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index 129ad5138653..ac71b2d7e139 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -507,13 +507,13 @@ static ssize_t amdgpu_ras_cper_debugfs_read(struct file *f, char __user *buf,
 	const uint8_t ring_header_size = 12;
 	struct amdgpu_ring *ring = file_inode(f)->i_private;
 	struct ras_cmd_cper_snapshot_req *snapshot_req __free(kfree) =
-		kzalloc(sizeof(struct ras_cmd_cper_snapshot_req), GFP_KERNEL);
+		kzalloc_obj(struct ras_cmd_cper_snapshot_req, GFP_KERNEL);
 	struct ras_cmd_cper_snapshot_rsp *snapshot_rsp __free(kfree) =
-		kzalloc(sizeof(struct ras_cmd_cper_snapshot_rsp), GFP_KERNEL);
+		kzalloc_obj(struct ras_cmd_cper_snapshot_rsp, GFP_KERNEL);
 	struct ras_cmd_cper_record_req *record_req __free(kfree) =
-		kzalloc(sizeof(struct ras_cmd_cper_record_req), GFP_KERNEL);
+		kzalloc_obj(struct ras_cmd_cper_record_req, GFP_KERNEL);
 	struct ras_cmd_cper_record_rsp *record_rsp __free(kfree) =
-		kzalloc(sizeof(struct ras_cmd_cper_record_rsp), GFP_KERNEL);
+		kzalloc_obj(struct ras_cmd_cper_record_rsp, GFP_KERNEL);
 	uint8_t *ring_header __free(kfree) =
 		kzalloc(ring_header_size, GFP_KERNEL);
 	uint32_t total_cper_num;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.c
index 7e7d6c3865bc..7ab8c2ff220a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.c
@@ -153,7 +153,8 @@ int amdgpu_ring_mux_init(struct amdgpu_ring_mux *mux, struct amdgpu_ring *ring,
 	mux->real_ring = ring;
 	mux->num_ring_entries = 0;

-	mux->ring_entry = kcalloc(entry_size, sizeof(struct amdgpu_mux_entry), GFP_KERNEL);
+	mux->ring_entry = kzalloc_objs(struct amdgpu_mux_entry, entry_size,
+				       GFP_KERNEL);
 	if (!mux->ring_entry)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 15d561e3d87f..dd412186c4f0 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1122,7 +1122,7 @@ int amdgpu_ttm_mmio_remap_alloc_sgt(struct amdgpu_device *adev,
 	phys = adev->rmmio_remap.bus_addr + cur.start;

 	/* Build a single-entry sg_table mapped as I/O (no struct page backing). */
-	*sgt = kzalloc(sizeof(**sgt), GFP_KERNEL);
+	*sgt = kzalloc_obj(**sgt, GFP_KERNEL);
 	if (!*sgt)
 		return -ENOMEM;
 	r = sg_alloc_table(*sgt, 1, GFP_KERNEL);
@@ -1172,7 +1172,7 @@ static struct ttm_tt *amdgpu_ttm_tt_create(struct ttm_buffer_object *bo,
 	struct amdgpu_ttm_tt *gtt;
 	enum ttm_caching caching;

-	gtt = kzalloc(sizeof(struct amdgpu_ttm_tt), GFP_KERNEL);
+	gtt = kzalloc_obj(struct amdgpu_ttm_tt, GFP_KERNEL);
 	if (!gtt)
 		return NULL;

@@ -1213,7 +1213,7 @@ static int amdgpu_ttm_tt_populate(struct ttm_device *bdev,

 	/* user pages are bound by amdgpu_ttm_tt_pin_userptr() */
 	if (gtt->userptr) {
-		ttm->sg = kzalloc(sizeof(struct sg_table), GFP_KERNEL);
+		ttm->sg = kzalloc_obj(struct sg_table, GFP_KERNEL);
 		if (!ttm->sg)
 			return -ENOMEM;
 		return 0;
@@ -1880,9 +1880,9 @@ static int amdgpu_ttm_pools_init(struct amdgpu_device *adev)
 	if (!adev->gmc.is_app_apu || !adev->gmc.num_mem_partitions)
 		return 0;

-	adev->mman.ttm_pools = kcalloc(adev->gmc.num_mem_partitions,
-				       sizeof(*adev->mman.ttm_pools),
-				       GFP_KERNEL);
+	adev->mman.ttm_pools = kzalloc_objs(*adev->mman.ttm_pools,
+					    adev->gmc.num_mem_partitions,
+					    GFP_KERNEL);
 	if (!adev->mman.ttm_pools)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
index 3f0b0e9af4f3..8da772ec4b40 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
@@ -58,8 +58,8 @@ int amdgpu_umc_page_retirement_mca(struct amdgpu_device *adev,
 		return ret;

 	err_data.err_addr =
-		kcalloc(adev->umc.max_ras_err_cnt_per_query,
-			sizeof(struct eeprom_table_record), GFP_KERNEL);
+		kzalloc_objs(struct eeprom_table_record,
+			     adev->umc.max_ras_err_cnt_per_query, GFP_KERNEL);
 	if (!err_data.err_addr) {
 		dev_warn(adev->dev,
 			"Failed to alloc memory for umc error record in MCA notifier!\n");
@@ -105,8 +105,8 @@ void amdgpu_umc_handle_bad_pages(struct amdgpu_device *adev,
 	amdgpu_ras_get_error_query_mode(adev, &error_query_mode);

 	err_data->err_addr =
-		kcalloc(adev->umc.max_ras_err_cnt_per_query,
-			sizeof(struct eeprom_table_record), GFP_KERNEL);
+		kzalloc_objs(struct eeprom_table_record,
+			     adev->umc.max_ras_err_cnt_per_query, GFP_KERNEL);

 	/* still call query_ras_error_address to clear error status
 	 * even NOMEM error is encountered
@@ -131,8 +131,9 @@ void amdgpu_umc_handle_bad_pages(struct amdgpu_device *adev,
 			    adev->umc.ras->ras_block.hw_ops->query_ras_error_address &&
 			    adev->umc.max_ras_err_cnt_per_query) {
 				err_data->err_addr =
-					kcalloc(adev->umc.max_ras_err_cnt_per_query,
-						sizeof(struct eeprom_table_record), GFP_KERNEL);
+					kzalloc_objs(struct eeprom_table_record,
+						     adev->umc.max_ras_err_cnt_per_query,
+						     GFP_KERNEL);

 				/* still call query_ras_error_address to clear error status
 				 * even NOMEM error is encountered
@@ -161,8 +162,9 @@ void amdgpu_umc_handle_bad_pages(struct amdgpu_device *adev,
 			    adev->umc.ras->ecc_info_query_ras_error_address &&
 			    adev->umc.max_ras_err_cnt_per_query) {
 				err_data->err_addr =
-					kcalloc(adev->umc.max_ras_err_cnt_per_query,
-						sizeof(struct eeprom_table_record), GFP_KERNEL);
+					kzalloc_objs(struct eeprom_table_record,
+						     adev->umc.max_ras_err_cnt_per_query,
+						     GFP_KERNEL);

 				/* still call query_ras_error_address to clear error status
 				 * even NOMEM error is encountered
@@ -551,8 +553,8 @@ int amdgpu_umc_lookup_bad_pages_in_a_row(struct amdgpu_device *adev,
 	int i, ret;
 	struct ras_err_data err_data;

-	err_data.err_addr = kcalloc(adev->umc.retire_unit,
-				sizeof(struct eeprom_table_record), GFP_KERNEL);
+	err_data.err_addr = kzalloc_objs(struct eeprom_table_record,
+					 adev->umc.retire_unit, GFP_KERNEL);
 	if (!err_data.err_addr) {
 		dev_warn(adev->dev, "Failed to alloc memory in bad page lookup!\n");
 		return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
index b700c2b91465..97352c56e7a2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
@@ -217,7 +217,7 @@ static int amdgpu_userq_buffer_va_list_add(struct amdgpu_usermode_queue *queue,
 	struct amdgpu_userq_va_cursor *va_cursor;
 	struct userq_va_list;

-	va_cursor = kzalloc(sizeof(*va_cursor), GFP_KERNEL);
+	va_cursor = kzalloc_obj(*va_cursor, GFP_KERNEL);
 	if (!va_cursor)
 		return -ENOMEM;

@@ -781,7 +781,7 @@ amdgpu_userq_create(struct drm_file *filp, union drm_amdgpu_userq *args)
 		goto unlock;
 	}

-	queue = kzalloc(sizeof(struct amdgpu_usermode_queue), GFP_KERNEL);
+	queue = kzalloc_obj(struct amdgpu_usermode_queue, GFP_KERNEL);
 	if (!queue) {
 		drm_file_err(uq_mgr->file, "Failed to allocate memory for queue\n");
 		r = -ENOMEM;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
index 212056d4ddf0..38693bb7f8d4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
@@ -82,7 +82,7 @@ int amdgpu_userq_fence_driver_alloc(struct amdgpu_device *adev,
 	unsigned long flags;
 	int r;

-	fence_drv = kzalloc(sizeof(*fence_drv), GFP_KERNEL);
+	fence_drv = kzalloc_obj(*fence_drv, GFP_KERNEL);
 	if (!fence_drv)
 		return -ENOMEM;

@@ -266,9 +266,8 @@ static int amdgpu_userq_fence_create(struct amdgpu_usermode_queue *userq,
 			count++;

 		userq_fence->fence_drv_array =
-			kvmalloc_array(count,
-				       sizeof(struct amdgpu_userq_fence_driver *),
-				       GFP_ATOMIC);
+			kvmalloc_objs(struct amdgpu_userq_fence_driver *, count,
+				      GFP_ATOMIC);

 		if (userq_fence->fence_drv_array) {
 			xa_for_each(&userq->fence_drv_xa, index, stored_fence_drv) {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index f01f38509108..50b75c562281 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -294,15 +294,15 @@ static int amdgpu_virt_init_ras_err_handler_data(struct amdgpu_device *adev)
 	void *bps = NULL;
 	struct amdgpu_bo **bps_bo = NULL;

-	*data = kmalloc(sizeof(struct amdgpu_virt_ras_err_handler_data), GFP_KERNEL);
+	*data = kmalloc_obj(struct amdgpu_virt_ras_err_handler_data, GFP_KERNEL);
 	if (!*data)
 		goto data_failure;

-	bps = kmalloc_array(align_space, sizeof(*(*data)->bps), GFP_KERNEL);
+	bps = kmalloc_objs(*(*data)->bps, align_space, GFP_KERNEL);
 	if (!bps)
 		goto bps_failure;

-	bps_bo = kmalloc_array(align_space, sizeof(*(*data)->bps_bo), GFP_KERNEL);
+	bps_bo = kmalloc_objs(*(*data)->bps_bo, align_space, GFP_KERNEL);
 	if (!bps_bo)
 		goto bps_bo_failure;

@@ -966,7 +966,8 @@ int amdgpu_virt_init_critical_region(struct amdgpu_device *adev)
 	}

 	/* Allocate for init_data_hdr */
-	init_data_hdr = kzalloc(sizeof(struct amd_sriov_msg_init_data_header), GFP_KERNEL);
+	init_data_hdr = kzalloc_obj(struct amd_sriov_msg_init_data_header,
+				    GFP_KERNEL);
 	if (!init_data_hdr)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
index e548dc9708a2..8931279cdea6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
@@ -411,7 +411,7 @@ static struct drm_plane *amdgpu_vkms_plane_init(struct drm_device *dev,
 	struct drm_plane *plane;
 	int ret;

-	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
+	plane = kzalloc_obj(*plane, GFP_KERNEL);
 	if (!plane)
 		return ERR_PTR(-ENOMEM);

@@ -499,8 +499,9 @@ static int amdgpu_vkms_sw_init(struct amdgpu_ip_block *ip_block)
 	int r, i;
 	struct amdgpu_device *adev = ip_block->adev;

-	adev->amdgpu_vkms_output = kcalloc(adev->mode_info.num_crtc,
-		sizeof(struct amdgpu_vkms_output), GFP_KERNEL);
+	adev->amdgpu_vkms_output = kzalloc_objs(struct amdgpu_vkms_output,
+						adev->mode_info.num_crtc,
+						GFP_KERNEL);
 	if (!adev->amdgpu_vkms_output)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 9a1db36e73b1..d946c39c4acb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -1118,7 +1118,7 @@ int amdgpu_vm_update_range(struct amdgpu_device *adev, struct amdgpu_vm *vm,
 	if (!drm_dev_enter(adev_to_drm(adev), &idx))
 		return -ENODEV;

-	tlb_cb = kmalloc(sizeof(*tlb_cb), GFP_KERNEL);
+	tlb_cb = kmalloc_obj(*tlb_cb, GFP_KERNEL);
 	if (!tlb_cb) {
 		drm_dev_exit(idx);
 		return -ENOMEM;
@@ -1471,7 +1471,7 @@ static void amdgpu_vm_add_prt_cb(struct amdgpu_device *adev,
 	if (!adev->gmc.gmc_funcs->set_prt)
 		return;

-	cb = kmalloc(sizeof(struct amdgpu_prt_cb), GFP_KERNEL);
+	cb = kmalloc_obj(struct amdgpu_prt_cb, GFP_KERNEL);
 	if (!cb) {
 		/* Last resort when we are OOM */
 		if (fence)
@@ -1737,7 +1737,7 @@ struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev,

 	amdgpu_vm_assert_locked(vm);

-	bo_va = kzalloc(sizeof(struct amdgpu_bo_va), GFP_KERNEL);
+	bo_va = kzalloc_obj(struct amdgpu_bo_va, GFP_KERNEL);
 	if (bo_va == NULL) {
 		return NULL;
 	}
@@ -1866,7 +1866,7 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev,
 		return -EINVAL;
 	}

-	mapping = kmalloc(sizeof(*mapping), GFP_KERNEL);
+	mapping = kmalloc_obj(*mapping, GFP_KERNEL);
 	if (!mapping)
 		return -ENOMEM;

@@ -1913,7 +1913,7 @@ int amdgpu_vm_bo_replace_map(struct amdgpu_device *adev,
 		return r;

 	/* Allocate all the needed memory */
-	mapping = kmalloc(sizeof(*mapping), GFP_KERNEL);
+	mapping = kmalloc_obj(*mapping, GFP_KERNEL);
 	if (!mapping)
 		return -ENOMEM;

@@ -2033,12 +2033,12 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
 	eaddr = saddr + (size - 1) / AMDGPU_GPU_PAGE_SIZE;

 	/* Allocate all the needed memory */
-	before = kzalloc(sizeof(*before), GFP_KERNEL);
+	before = kzalloc_obj(*before, GFP_KERNEL);
 	if (!before)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&before->list);

-	after = kzalloc(sizeof(*after), GFP_KERNEL);
+	after = kzalloc_obj(*after, GFP_KERNEL);
 	if (!after) {
 		kfree(before);
 		return -ENOMEM;
@@ -2533,7 +2533,7 @@ amdgpu_vm_get_task_info_pasid(struct amdgpu_device *adev, u32 pasid)

 static int amdgpu_vm_create_task_info(struct amdgpu_vm *vm)
 {
-	vm->task_info = kzalloc(sizeof(struct amdgpu_task_info), GFP_KERNEL);
+	vm->task_info = kzalloc_obj(struct amdgpu_task_info, GFP_KERNEL);
 	if (!vm->task_info)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_tlb_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_tlb_fence.c
index 5d26797356a3..b3e47efeef62 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_tlb_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_tlb_fence.c
@@ -80,7 +80,7 @@ void amdgpu_vm_tlb_fence_create(struct amdgpu_device *adev, struct amdgpu_vm *vm
 {
 	struct amdgpu_tlb_fence *f;

-	f = kmalloc(sizeof(*f), GFP_KERNEL);
+	f = kmalloc_obj(*f, GFP_KERNEL);
 	if (!f) {
 		/*
 		 * We can't fail since the PDEs and PTEs are already updated, so
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
index 9d934c07fa6b..6252246dcd68 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
@@ -340,7 +340,7 @@ int amdgpu_vram_mgr_reserve_range(struct amdgpu_vram_mgr *mgr,
 {
 	struct amdgpu_vram_reservation *rsv;

-	rsv = kzalloc(sizeof(*rsv), GFP_KERNEL);
+	rsv = kzalloc_obj(*rsv, GFP_KERNEL);
 	if (!rsv)
 		return -ENOMEM;

@@ -478,7 +478,7 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
 					tbo->page_alignment);
 	}

-	vres = kzalloc(sizeof(*vres), GFP_KERNEL);
+	vres = kzalloc_obj(*vres, GFP_KERNEL);
 	if (!vres)
 		return -ENOMEM;

@@ -684,7 +684,7 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,
 	int num_entries = 0;
 	int i, r;

-	*sgt = kmalloc(sizeof(**sgt), GFP_KERNEL);
+	*sgt = kmalloc_obj(**sgt, GFP_KERNEL);
 	if (!*sgt)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c
index 73250ab45f20..df5b70c9f911 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c
@@ -334,7 +334,7 @@ int amdgpu_xcp_mgr_init(struct amdgpu_device *adev, int init_mode,
 	if (!xcp_funcs || !xcp_funcs->get_ip_details)
 		return -EINVAL;

-	xcp_mgr = kzalloc(sizeof(*xcp_mgr), GFP_KERNEL);
+	xcp_mgr = kzalloc_obj(*xcp_mgr, GFP_KERNEL);

 	if (!xcp_mgr)
 		return -ENOMEM;
@@ -907,7 +907,7 @@ static void amdgpu_xcp_cfg_sysfs_init(struct amdgpu_device *adev)
 	if (!adev->xcp_mgr)
 		return;

-	xcp_cfg = kzalloc(sizeof(*xcp_cfg), GFP_KERNEL);
+	xcp_cfg = kzalloc_obj(*xcp_cfg, GFP_KERNEL);
 	if (!xcp_cfg)
 		return;
 	xcp_cfg->xcp_mgr = adev->xcp_mgr;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
index 0ca6fa40a87c..fe06ab35ba76 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
@@ -690,7 +690,7 @@ struct amdgpu_hive_info *amdgpu_get_xgmi_hive(struct amdgpu_device *adev)
 			goto pro_end;
 	}

-	hive = kzalloc(sizeof(*hive), GFP_KERNEL);
+	hive = kzalloc_obj(*hive, GFP_KERNEL);
 	if (!hive) {
 		dev_err(adev->dev, "XGMI: allocation failed\n");
 		ret = -ENOMEM;
diff --git a/drivers/gpu/drm/amd/amdgpu/atom.c b/drivers/gpu/drm/amd/amdgpu/atom.c
index 371ee82a8912..51fa402e8b64 100644
--- a/drivers/gpu/drm/amd/amdgpu/atom.c
+++ b/drivers/gpu/drm/amd/amdgpu/atom.c
@@ -1524,7 +1524,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
 {
 	int base;
 	struct atom_context *ctx =
-	    kzalloc(sizeof(struct atom_context), GFP_KERNEL);
+	    kzalloc_obj(struct atom_context, GFP_KERNEL);
 	struct _ATOM_ROM_HEADER *atom_rom_header;
 	struct _ATOM_MASTER_DATA_TABLE *master_table;
 	struct _ATOM_FIRMWARE_INFO *atom_fw_info;
diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
index 34644cab6cff..8e0841d3ca75 100644
--- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
+++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
@@ -191,7 +191,7 @@ void amdgpu_atombios_encoder_init_backlight(struct amdgpu_encoder *amdgpu_encode
 		goto register_acpi_backlight;
 	}

-	pdata = kmalloc(sizeof(struct amdgpu_backlight_privdata), GFP_KERNEL);
+	pdata = kmalloc_obj(struct amdgpu_backlight_privdata, GFP_KERNEL);
 	if (!pdata) {
 		DRM_ERROR("Memory allocation failed\n");
 		goto error;
@@ -1980,7 +1980,7 @@ amdgpu_atombios_encoder_get_lcd_info(struct amdgpu_encoder *encoder)
 		lvds_info =
 			(union lvds_info *)(mode_info->atom_context->bios + data_offset);
 		lvds =
-		    kzalloc(sizeof(struct amdgpu_encoder_atom_dig), GFP_KERNEL);
+		    kzalloc_obj(struct amdgpu_encoder_atom_dig, GFP_KERNEL);

 		if (!lvds)
 			return NULL;
@@ -2107,7 +2107,8 @@ struct amdgpu_encoder_atom_dig *
 amdgpu_atombios_encoder_get_dig_info(struct amdgpu_encoder *amdgpu_encoder)
 {
 	int encoder_enum = (amdgpu_encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT;
-	struct amdgpu_encoder_atom_dig *dig = kzalloc(sizeof(struct amdgpu_encoder_atom_dig), GFP_KERNEL);
+	struct amdgpu_encoder_atom_dig *dig = kzalloc_obj(struct amdgpu_encoder_atom_dig,
+							  GFP_KERNEL);

 	if (!dig)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 61302204e9b4..de1ccfe584d7 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -1775,7 +1775,8 @@ static int dce_v10_0_afmt_init(struct amdgpu_device *adev)

 	/* DCE10 has audio blocks tied to DIG encoders */
 	for (i = 0; i < adev->mode_info.num_dig; i++) {
-		adev->mode_info.afmt[i] = kzalloc(sizeof(struct amdgpu_afmt), GFP_KERNEL);
+		adev->mode_info.afmt[i] = kzalloc_obj(struct amdgpu_afmt,
+						      GFP_KERNEL);
 		if (adev->mode_info.afmt[i]) {
 			adev->mode_info.afmt[i]->offset = dig_offsets[i];
 			adev->mode_info.afmt[i]->id = i;
@@ -3516,7 +3517,7 @@ static void dce_v10_0_encoder_add(struct amdgpu_device *adev,
 	}

 	/* add a new one */
-	amdgpu_encoder = kzalloc(sizeof(struct amdgpu_encoder), GFP_KERNEL);
+	amdgpu_encoder = kzalloc_obj(struct amdgpu_encoder, GFP_KERNEL);
 	if (!amdgpu_encoder)
 		return;

diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
index 8f4b4c2e36b9..723a71c8bd38 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
@@ -1818,7 +1818,8 @@ static int dce_v6_0_afmt_init(struct amdgpu_device *adev)

 	/* DCE6 has audio blocks tied to DIG encoders */
 	for (i = 0; i < adev->mode_info.num_dig; i++) {
-		adev->mode_info.afmt[i] = kzalloc(sizeof(struct amdgpu_afmt), GFP_KERNEL);
+		adev->mode_info.afmt[i] = kzalloc_obj(struct amdgpu_afmt,
+						      GFP_KERNEL);
 		if (adev->mode_info.afmt[i]) {
 			adev->mode_info.afmt[i]->offset = dig_offsets[i];
 			adev->mode_info.afmt[i]->id = i;
@@ -3413,7 +3414,7 @@ static void dce_v6_0_encoder_add(struct amdgpu_device *adev,
 	}

 	/* add a new one */
-	amdgpu_encoder = kzalloc(sizeof(struct amdgpu_encoder), GFP_KERNEL);
+	amdgpu_encoder = kzalloc_obj(struct amdgpu_encoder, GFP_KERNEL);
 	if (!amdgpu_encoder)
 		return;

diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 9d1853c41fcd..0a4a8f0084b1 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -1722,7 +1722,8 @@ static int dce_v8_0_afmt_init(struct amdgpu_device *adev)

 	/* DCE8 has audio blocks tied to DIG encoders */
 	for (i = 0; i < adev->mode_info.num_dig; i++) {
-		adev->mode_info.afmt[i] = kzalloc(sizeof(struct amdgpu_afmt), GFP_KERNEL);
+		adev->mode_info.afmt[i] = kzalloc_obj(struct amdgpu_afmt,
+						      GFP_KERNEL);
 		if (adev->mode_info.afmt[i]) {
 			adev->mode_info.afmt[i]->offset = dig_offsets[i];
 			adev->mode_info.afmt[i]->id = i;
@@ -3424,7 +3425,7 @@ static void dce_v8_0_encoder_add(struct amdgpu_device *adev,
 	}

 	/* add a new one */
-	amdgpu_encoder = kzalloc(sizeof(struct amdgpu_encoder), GFP_KERNEL);
+	amdgpu_encoder = kzalloc_obj(struct amdgpu_encoder, GFP_KERNEL);
 	if (!amdgpu_encoder)
 		return;

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index b2e87d3aa203..f4f2929c6823 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -1064,8 +1064,8 @@ static int gmc_v7_0_sw_init(struct amdgpu_ip_block *ip_block)
 		adev->vm_manager.vram_base_offset = 0;
 	}

-	adev->gmc.vm_fault_info = kmalloc(sizeof(struct kfd_vm_fault_info),
-					GFP_KERNEL);
+	adev->gmc.vm_fault_info = kmalloc_obj(struct kfd_vm_fault_info,
+					      GFP_KERNEL);
 	if (!adev->gmc.vm_fault_info)
 		return -ENOMEM;
 	atomic_set_release(&adev->gmc.vm_fault_info_updated, 0);
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index 1d5bd90ac57f..fe61f05af876 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -1179,8 +1179,8 @@ static int gmc_v8_0_sw_init(struct amdgpu_ip_block *ip_block)
 		adev->vm_manager.vram_base_offset = 0;
 	}

-	adev->gmc.vm_fault_info = kmalloc(sizeof(struct kfd_vm_fault_info),
-					GFP_KERNEL);
+	adev->gmc.vm_fault_info = kmalloc_obj(struct kfd_vm_fault_info,
+					      GFP_KERNEL);
 	if (!adev->gmc.vm_fault_info)
 		return -ENOMEM;
 	atomic_set_release(&adev->gmc.vm_fault_info_updated, 0);
diff --git a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.c b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.c
index 0027a639c7e6..f5785d9c6212 100644
--- a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.c
@@ -50,7 +50,7 @@ static int isp_v4_1_0_hw_init(struct amdgpu_isp *isp)

 	isp_base = adev->rmmio_base;

-	isp->isp_cell = kcalloc(3, sizeof(struct mfd_cell), GFP_KERNEL);
+	isp->isp_cell = kzalloc_objs(struct mfd_cell, 3, GFP_KERNEL);
 	if (!isp->isp_cell) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev,
@@ -59,8 +59,7 @@ static int isp_v4_1_0_hw_init(struct amdgpu_isp *isp)
 	}

 	num_res = MAX_ISP410_MEM_RES + MAX_ISP410_INT_SRC;
-	isp->isp_res = kcalloc(num_res, sizeof(struct resource),
-			       GFP_KERNEL);
+	isp->isp_res = kzalloc_objs(struct resource, num_res, GFP_KERNEL);
 	if (!isp->isp_res) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev,
@@ -68,7 +67,7 @@ static int isp_v4_1_0_hw_init(struct amdgpu_isp *isp)
 		goto failure;
 	}

-	isp->isp_pdata = kzalloc(sizeof(*isp->isp_pdata), GFP_KERNEL);
+	isp->isp_pdata = kzalloc_obj(*isp->isp_pdata, GFP_KERNEL);
 	if (!isp->isp_pdata) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev,
@@ -107,7 +106,7 @@ static int isp_v4_1_0_hw_init(struct amdgpu_isp *isp)
 	isp->isp_cell[0].pdata_size = sizeof(struct isp_platform_data);

 	/* initialize isp i2c platform data */
-	isp->isp_i2c_res = kcalloc(1, sizeof(struct resource), GFP_KERNEL);
+	isp->isp_i2c_res = kzalloc_objs(struct resource, 1, GFP_KERNEL);
 	if (!isp->isp_i2c_res) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev,
@@ -127,7 +126,7 @@ static int isp_v4_1_0_hw_init(struct amdgpu_isp *isp)
 	isp->isp_cell[1].pdata_size = sizeof(struct isp_platform_data);

 	/* initialize isp gpiochip platform data */
-	isp->isp_gpio_res = kcalloc(1, sizeof(struct resource), GFP_KERNEL);
+	isp->isp_gpio_res = kzalloc_objs(struct resource, 1, GFP_KERNEL);
 	if (!isp->isp_gpio_res) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev,
diff --git a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c
index 0002bcc6c4ec..e757087d51d2 100644
--- a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c
@@ -259,7 +259,7 @@ static int isp_v4_1_1_hw_init(struct amdgpu_isp *isp)
 		return -EINVAL;
 	}

-	isp->isp_cell = kcalloc(3, sizeof(struct mfd_cell), GFP_KERNEL);
+	isp->isp_cell = kzalloc_objs(struct mfd_cell, 3, GFP_KERNEL);
 	if (!isp->isp_cell) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev, "isp mfd cell alloc failed (%d)\n", r);
@@ -268,15 +268,14 @@ static int isp_v4_1_1_hw_init(struct amdgpu_isp *isp)

 	num_res = MAX_ISP411_MEM_RES + MAX_ISP411_INT_SRC;

-	isp->isp_res = kcalloc(num_res, sizeof(struct resource),
-			       GFP_KERNEL);
+	isp->isp_res = kzalloc_objs(struct resource, num_res, GFP_KERNEL);
 	if (!isp->isp_res) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev, "isp mfd resource alloc failed (%d)\n", r);
 		goto failure;
 	}

-	isp->isp_pdata = kzalloc(sizeof(*isp->isp_pdata), GFP_KERNEL);
+	isp->isp_pdata = kzalloc_obj(*isp->isp_pdata, GFP_KERNEL);
 	if (!isp->isp_pdata) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev, "isp platform data alloc failed (%d)\n", r);
@@ -318,7 +317,7 @@ static int isp_v4_1_1_hw_init(struct amdgpu_isp *isp)
 	isp->isp_cell[0].pdata_size = sizeof(struct isp_platform_data);

 	/* initialize isp i2c platform data */
-	isp->isp_i2c_res = kcalloc(1, sizeof(struct resource), GFP_KERNEL);
+	isp->isp_i2c_res = kzalloc_objs(struct resource, 1, GFP_KERNEL);
 	if (!isp->isp_i2c_res) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev, "isp mfd res alloc failed (%d)\n", r);
@@ -337,7 +336,7 @@ static int isp_v4_1_1_hw_init(struct amdgpu_isp *isp)
 	isp->isp_cell[1].pdata_size = sizeof(struct isp_platform_data);

 	/* initialize isp gpiochip platform data */
-	isp->isp_gpio_res = kcalloc(1, sizeof(struct resource), GFP_KERNEL);
+	isp->isp_gpio_res = kzalloc_objs(struct resource, 1, GFP_KERNEL);
 	if (!isp->isp_gpio_res) {
 		r = -ENOMEM;
 		drm_err(&adev->ddev, "isp gpio resource alloc failed (%d)\n", r);
diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
index 9508709abd49..9e9a8e354c06 100644
--- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
+++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
@@ -283,7 +283,7 @@ static int mes_userq_mqd_create(struct amdgpu_usermode_queue *queue,
 	int r;

 	/* Structure to initialize MQD for userqueue using generic MQD init function */
-	userq_props = kzalloc(sizeof(struct amdgpu_mqd_prop), GFP_KERNEL);
+	userq_props = kzalloc_obj(struct amdgpu_mqd_prop, GFP_KERNEL);
 	if (!userq_props) {
 		DRM_ERROR("Failed to allocate memory for userq_props\n");
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c b/drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c
index 2594467bdd87..4de461fa9cdd 100644
--- a/drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c
+++ b/drivers/gpu/drm/amd/amdgpu/sienna_cichlid.c
@@ -273,7 +273,7 @@ int sienna_cichlid_reset_init(struct amdgpu_device *adev)
 {
 	struct amdgpu_reset_control *reset_ctl;

-	reset_ctl = kzalloc(sizeof(*reset_ctl), GFP_KERNEL);
+	reset_ctl = kzalloc_obj(*reset_ctl, GFP_KERNEL);
 	if (!reset_ctl)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/smu_v13_0_10.c b/drivers/gpu/drm/amd/amdgpu/smu_v13_0_10.c
index 70569ea906bc..e91e70844e49 100644
--- a/drivers/gpu/drm/amd/amdgpu/smu_v13_0_10.c
+++ b/drivers/gpu/drm/amd/amdgpu/smu_v13_0_10.c
@@ -270,7 +270,7 @@ int smu_v13_0_10_reset_init(struct amdgpu_device *adev)
 {
 	struct amdgpu_reset_control *reset_ctl;

-	reset_ctl = kzalloc(sizeof(*reset_ctl), GFP_KERNEL);
+	reset_ctl = kzalloc_obj(*reset_ctl, GFP_KERNEL);
 	if (!reset_ctl)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c b/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
index 0f5b1719fda5..25af2707b5ca 100644
--- a/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
@@ -567,7 +567,7 @@ static int umc_v12_0_update_ecc_status(struct amdgpu_device *adev,
 	if (ret)
 		return ret;

-	ecc_err = kzalloc(sizeof(*ecc_err), GFP_KERNEL);
+	ecc_err = kzalloc_obj(*ecc_err, GFP_KERNEL);
 	if (!ecc_err)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
index 732ad1224a61..f8c9ccbc4851 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
@@ -780,8 +780,8 @@ static int kfd_ioctl_get_process_apertures_new(struct file *filp,
 	 * nodes, but not more than args->num_of_nodes as that is
 	 * the amount of memory allocated by user
 	 */
-	pa = kcalloc(args->num_of_nodes, sizeof(struct kfd_process_device_apertures),
-		     GFP_KERNEL);
+	pa = kzalloc_objs(struct kfd_process_device_apertures,
+			  args->num_of_nodes, GFP_KERNEL);
 	if (!pa)
 		return -ENOMEM;

@@ -2224,7 +2224,8 @@ static int criu_restore_devices(struct kfd_process *p,
 	if (*priv_offset + (args->num_devices * sizeof(*device_privs)) > max_priv_data_size)
 		return -EINVAL;

-	device_buckets = kmalloc_array(args->num_devices, sizeof(*device_buckets), GFP_KERNEL);
+	device_buckets = kmalloc_objs(*device_buckets, args->num_devices,
+				      GFP_KERNEL);
 	if (!device_buckets)
 		return -ENOMEM;

@@ -2467,7 +2468,7 @@ static int criu_restore_bos(struct kfd_process *p,
 	/* Prevent MMU notifications until stage-4 IOCTL (CRIU_RESUME) is received */
 	amdgpu_amdkfd_block_mmu_notifications(p->kgd_process_info);

-	bo_buckets = kvmalloc_array(args->num_bos, sizeof(*bo_buckets), GFP_KERNEL);
+	bo_buckets = kvmalloc_objs(*bo_buckets, args->num_bos, GFP_KERNEL);
 	if (!bo_buckets)
 		return -ENOMEM;

@@ -2485,7 +2486,7 @@ static int criu_restore_bos(struct kfd_process *p,
 		goto exit;
 	}

-	bo_privs = kvmalloc_array(args->num_bos, sizeof(*bo_privs), GFP_KERNEL);
+	bo_privs = kvmalloc_objs(*bo_privs, args->num_bos, GFP_KERNEL);
 	if (!bo_privs) {
 		ret = -ENOMEM;
 		goto exit;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_debugfs.c b/drivers/gpu/drm/amd/amdkfd/kfd_debugfs.c
index 9bde2c64540f..46ea876629bc 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_debugfs.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_debugfs.c
@@ -146,7 +146,7 @@ void kfd_debugfs_add_process(struct kfd_process *p)
 	char name[MAX_DEBUGFS_FILENAME_LEN];
 	struct debugfs_proc_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index 9a66ee661e57..d03c3398695b 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -478,7 +478,7 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
 		return NULL;
 	}

-	kfd = kzalloc(sizeof(*kfd), GFP_KERNEL);
+	kfd = kzalloc_obj(*kfd, GFP_KERNEL);
 	if (!kfd)
 		return NULL;

@@ -864,7 +864,7 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,

 	/* Allocate the KFD nodes */
 	for (i = 0, xcp_idx = 0; i < kfd->num_nodes; i++) {
-		node = kzalloc(sizeof(struct kfd_node), GFP_KERNEL);
+		node = kzalloc_obj(struct kfd_node, GFP_KERNEL);
 		if (!node)
 			goto node_alloc_error;

@@ -1328,7 +1328,7 @@ int kfd_gtt_sa_allocate(struct kfd_node *node, unsigned int size,
 	if (size > kfd->gtt_sa_num_of_chunks * kfd->gtt_sa_chunk_size)
 		return -ENOMEM;

-	*mem_obj = kzalloc(sizeof(struct kfd_mem_obj), GFP_KERNEL);
+	*mem_obj = kzalloc_obj(struct kfd_mem_obj, GFP_KERNEL);
 	if (!(*mem_obj))
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
index 804851632c4c..7707496761ea 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
@@ -1401,7 +1401,7 @@ static int register_process(struct device_queue_manager *dqm,
 	uint64_t pd_base;
 	int retval;

-	n = kzalloc(sizeof(*n), GFP_KERNEL);
+	n = kzalloc_obj(*n, GFP_KERNEL);
 	if (!n)
 		return -ENOMEM;

@@ -2921,7 +2921,7 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_node *dev)

 	pr_debug("Loading device queue manager\n");

-	dqm = kzalloc(sizeof(*dqm), GFP_KERNEL);
+	dqm = kzalloc_obj(*dqm, GFP_KERNEL);
 	if (!dqm)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
index 13416bff7763..950717576e20 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
@@ -67,7 +67,7 @@ static struct kfd_signal_page *allocate_signal_page(struct kfd_process *p)
 	void *backing_store;
 	struct kfd_signal_page *page;

-	page = kzalloc(sizeof(*page), GFP_KERNEL);
+	page = kzalloc_obj(*page, GFP_KERNEL);
 	if (!page)
 		return NULL;

@@ -337,7 +337,7 @@ static int kfd_event_page_set(struct kfd_process *p, void *kernel_address,
 		return -EINVAL;
 	}

-	page = kzalloc(sizeof(*page), GFP_KERNEL);
+	page = kzalloc_obj(*page, GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;

@@ -405,7 +405,7 @@ int kfd_event_create(struct file *devkfd, struct kfd_process *p,
 		     uint64_t *event_page_offset, uint32_t *event_slot_index)
 {
 	int ret = 0;
-	struct kfd_event *ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+	struct kfd_event *ev = kzalloc_obj(*ev, GFP_KERNEL);

 	if (!ev)
 		return -ENOMEM;
@@ -458,11 +458,11 @@ int kfd_criu_restore_event(struct file *devkfd,
 	struct kfd_event *ev = NULL;
 	int ret = 0;

-	ev_priv = kmalloc(sizeof(*ev_priv), GFP_KERNEL);
+	ev_priv = kmalloc_obj(*ev_priv, GFP_KERNEL);
 	if (!ev_priv)
 		return -ENOMEM;

-	ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kzalloc_obj(*ev, GFP_KERNEL);
 	if (!ev) {
 		ret = -ENOMEM;
 		goto exit;
@@ -791,8 +791,8 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events)
 	struct kfd_event_waiter *event_waiters;
 	uint32_t i;

-	event_waiters = kcalloc(num_events, sizeof(struct kfd_event_waiter),
-				GFP_KERNEL);
+	event_waiters = kzalloc_objs(struct kfd_event_waiter, num_events,
+				     GFP_KERNEL);
 	if (!event_waiters)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
index d987ff7ccfc9..9e28dda09285 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
@@ -309,7 +309,7 @@ struct kernel_queue *kernel_queue_init(struct kfd_node *dev,
 {
 	struct kernel_queue *kq;

-	kq = kzalloc(sizeof(*kq), GFP_KERNEL);
+	kq = kzalloc_obj(*kq, GFP_KERNEL);
 	if (!kq)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c
index d88d0de58edd..93f389ba8cc9 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c
@@ -51,7 +51,7 @@ struct kfd_mem_obj *allocate_hiq_mqd(struct mqd_manager *mm, struct queue_proper
 	struct kfd_mem_obj *mqd_mem_obj;
 	struct kfd_node *dev = mm->dev;

-	mqd_mem_obj = kzalloc(sizeof(struct kfd_mem_obj), GFP_KERNEL);
+	mqd_mem_obj = kzalloc_obj(struct kfd_mem_obj, GFP_KERNEL);
 	if (!mqd_mem_obj)
 		return NULL;

@@ -69,7 +69,7 @@ struct kfd_mem_obj *allocate_sdma_mqd(struct mqd_manager *mm,
 	struct kfd_node *dev = mm->dev;
 	uint64_t offset;

-	mqd_mem_obj = kzalloc(sizeof(struct kfd_mem_obj), GFP_KERNEL);
+	mqd_mem_obj = kzalloc_obj(struct kfd_mem_obj, GFP_KERNEL);
 	if (!mqd_mem_obj)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
index 76483d91af98..575aebee8ad1 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
@@ -389,7 +389,7 @@ struct mqd_manager *mqd_manager_init_cik(enum KFD_MQD_TYPE type,
 	if (WARN_ON(type >= KFD_MQD_TYPE_MAX))
 		return NULL;

-	mqd = kzalloc(sizeof(*mqd), GFP_KERNEL);
+	mqd = kzalloc_obj(*mqd, GFP_KERNEL);
 	if (!mqd)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c
index 0186b3de67c0..daf5e487d87e 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c
@@ -451,7 +451,7 @@ struct mqd_manager *mqd_manager_init_v10(enum KFD_MQD_TYPE type,
 	if (WARN_ON(type >= KFD_MQD_TYPE_MAX))
 		return NULL;

-	mqd = kzalloc(sizeof(*mqd), GFP_KERNEL);
+	mqd = kzalloc_obj(*mqd, GFP_KERNEL);
 	if (!mqd)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c
index c9e397366782..fd258bbc37b4 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v11.c
@@ -465,7 +465,7 @@ struct mqd_manager *mqd_manager_init_v11(enum KFD_MQD_TYPE type,
 	if (WARN_ON(type >= KFD_MQD_TYPE_MAX))
 		return NULL;

-	mqd = kzalloc(sizeof(*mqd), GFP_KERNEL);
+	mqd = kzalloc_obj(*mqd, GFP_KERNEL);
 	if (!mqd)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v12.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v12.c
index 3bbc2648f51d..e826a4149ff0 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v12.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v12.c
@@ -385,7 +385,7 @@ struct mqd_manager *mqd_manager_init_v12(enum KFD_MQD_TYPE type,
 	if (WARN_ON(type >= KFD_MQD_TYPE_MAX))
 		return NULL;

-	mqd = kzalloc(sizeof(*mqd), GFP_KERNEL);
+	mqd = kzalloc_obj(*mqd, GFP_KERNEL);
 	if (!mqd)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v12_1.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v12_1.c
index 0d6b601962eb..6fa17465d3fa 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v12_1.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v12_1.c
@@ -646,7 +646,7 @@ struct mqd_manager *mqd_manager_init_v12_1(enum KFD_MQD_TYPE type,
 	if (WARN_ON(type >= KFD_MQD_TYPE_MAX))
 		return NULL;

-	mqd = kzalloc(sizeof(*mqd), GFP_KERNEL);
+	mqd = kzalloc_obj(*mqd, GFP_KERNEL);
 	if (!mqd)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
index 3622d8392cb3..5d3b500a4146 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
@@ -147,7 +147,7 @@ static struct kfd_mem_obj *allocate_mqd(struct mqd_manager *mm,
 	 * amdgpu memory functions to do so.
 	 */
 	if (node->kfd->cwsr_enabled && (q->type == KFD_QUEUE_TYPE_COMPUTE)) {
-		mqd_mem_obj = kzalloc(sizeof(struct kfd_mem_obj), GFP_KERNEL);
+		mqd_mem_obj = kzalloc_obj(struct kfd_mem_obj, GFP_KERNEL);
 		if (!mqd_mem_obj)
 			return NULL;
 		retval = amdgpu_amdkfd_alloc_kernel_mem(node->adev,
@@ -960,7 +960,7 @@ struct mqd_manager *mqd_manager_init_v9(enum KFD_MQD_TYPE type,
 	if (WARN_ON(type >= KFD_MQD_TYPE_MAX))
 		return NULL;

-	mqd = kzalloc(sizeof(*mqd), GFP_KERNEL);
+	mqd = kzalloc_obj(*mqd, GFP_KERNEL);
 	if (!mqd)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
index e63ef6442b35..27875d88a5ea 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
@@ -446,7 +446,7 @@ struct mqd_manager *mqd_manager_init_vi(enum KFD_MQD_TYPE type,
 	if (WARN_ON(type >= KFD_MQD_TYPE_MAX))
 		return NULL;

-	mqd = kzalloc(sizeof(*mqd), GFP_KERNEL);
+	mqd = kzalloc_obj(*mqd, GFP_KERNEL);
 	if (!mqd)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index 9849b54f54ba..a5f479af3607 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -91,7 +91,7 @@

 /* Macro for allocating structures */
 #define kfd_alloc_struct(ptr_to_struct)	\
-	((typeof(ptr_to_struct)) kzalloc(sizeof(*ptr_to_struct), GFP_KERNEL))
+	((typeof(ptr_to_struct)) kzalloc_obj(*ptr_to_struct, GFP_KERNEL))

 #define KFD_MAX_NUM_OF_PROCESSES 512
 #define KFD_MAX_NUM_OF_QUEUES_PER_PROCESS 1024
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
index 8dc6ca8e9062..ff64bde0acd2 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
@@ -153,7 +153,7 @@ static void kfd_sdma_activity_worker(struct work_struct *work)
 		    (q->properties.type != KFD_QUEUE_TYPE_SDMA_XGMI))
 			continue;

-		sdma_q = kzalloc(sizeof(struct temp_sdma_queue_list), GFP_KERNEL);
+		sdma_q = kzalloc_obj(struct temp_sdma_queue_list, GFP_KERNEL);
 		if (!sdma_q) {
 			dqm_unlock(dqm);
 			goto cleanup;
@@ -291,7 +291,8 @@ static int kfd_get_cu_occupancy(struct attribute *attr, char *buffer)
 	wave_cnt = 0;
 	max_waves_per_cu = 0;

-	cu_occupancy = kcalloc(AMDGPU_MAX_QUEUES, sizeof(*cu_occupancy), GFP_KERNEL);
+	cu_occupancy = kzalloc_objs(*cu_occupancy, AMDGPU_MAX_QUEUES,
+				    GFP_KERNEL);
 	if (!cu_occupancy)
 		return -ENOMEM;

@@ -1592,7 +1593,7 @@ struct kfd_process *create_process(const struct task_struct *thread, bool primar
 	struct mmu_notifier *mn;
 	int err = -ENOMEM;

-	process = kzalloc(sizeof(*process), GFP_KERNEL);
+	process = kzalloc_obj(*process, GFP_KERNEL);
 	if (!process)
 		goto err_alloc_process;

@@ -1708,7 +1709,7 @@ struct kfd_process_device *kfd_create_process_device_data(struct kfd_node *dev,

 	if (WARN_ON_ONCE(p->n_pdds >= MAX_GPU_INSTANCE))
 		return NULL;
-	pdd = kzalloc(sizeof(*pdd), GFP_KERNEL);
+	pdd = kzalloc_obj(*pdd, GFP_KERNEL);
 	if (!pdd)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
index 449be58e884c..dac1f9604d8e 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
@@ -383,7 +383,7 @@ int pqm_create_queue(struct process_queue_manager *pqm,
 		memset(pdd->proc_ctx_cpu_ptr, 0, AMDGPU_MES_PROC_CTX_SIZE);
 	}

-	pqn = kzalloc(sizeof(*pqn), GFP_KERNEL);
+	pqn = kzalloc_obj(*pqn, GFP_KERNEL);
 	if (!pqn) {
 		retval = -ENOMEM;
 		goto err_allocate_pqn;
@@ -991,7 +991,7 @@ int kfd_criu_restore_queue(struct kfd_process *p,
 	if (*priv_data_offset + sizeof(*q_data) > max_priv_data_size)
 		return -EINVAL;

-	q_data = kmalloc(sizeof(*q_data), GFP_KERNEL);
+	q_data = kmalloc_obj(*q_data, GFP_KERNEL);
 	if (!q_data)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_queue.c
index d1978e3f68be..1285c70a1c3b 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_queue.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_queue.c
@@ -70,7 +70,7 @@ int init_queue(struct queue **q, const struct queue_properties *properties)
 {
 	struct queue *tmp_q;

-	tmp_q = kzalloc(sizeof(*tmp_q), GFP_KERNEL);
+	tmp_q = kzalloc_obj(*tmp_q, GFP_KERNEL);
 	if (!tmp_q)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
index d2bc169e84b0..242e58fea05e 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
@@ -370,7 +370,7 @@ int kfd_smi_event_open(struct kfd_node *dev, uint32_t *fd)
 	struct kfd_smi_client *client;
 	int ret;

-	client = kzalloc(sizeof(struct kfd_smi_client), GFP_KERNEL);
+	client = kzalloc_obj(struct kfd_smi_client, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&client->list);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
index fcddb54a439f..e168a74190e3 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
@@ -168,7 +168,7 @@ svm_range_dma_map_dev(struct amdgpu_device *adev, struct svm_range *prange,
 	int i, r;

 	if (!addr) {
-		addr = kvcalloc(prange->npages, sizeof(*addr), GFP_KERNEL);
+		addr = kvzalloc_objs(*addr, prange->npages, GFP_KERNEL);
 		if (!addr)
 			return -ENOMEM;
 		prange->dma_addr[gpuidx] = addr;
@@ -329,7 +329,7 @@ svm_range *svm_range_new(struct svm_range_list *svms, uint64_t start,
 	struct svm_range *prange;
 	struct kfd_process *p;

-	prange = kzalloc(sizeof(*prange), GFP_KERNEL);
+	prange = kzalloc_obj(*prange, GFP_KERNEL);
 	if (!prange)
 		return NULL;

@@ -539,7 +539,7 @@ static struct svm_range_bo *svm_range_bo_new(void)
 {
 	struct svm_range_bo *svm_bo;

-	svm_bo = kzalloc(sizeof(*svm_bo), GFP_KERNEL);
+	svm_bo = kzalloc_obj(*svm_bo, GFP_KERNEL);
 	if (!svm_bo)
 		return NULL;

@@ -1674,7 +1674,7 @@ static int svm_range_validate_and_map(struct mm_struct *mm,
 	int32_t idx;
 	int r = 0;

-	ctx = kzalloc(sizeof(struct svm_validate_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct svm_validate_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx->process = container_of(prange->svms, struct kfd_process, svms);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
index 1ccd4514d3ee..8aa86502fceb 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
@@ -711,7 +711,7 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev,

 	i = 0;
 	list_for_each_entry(mem, &dev->mem_props, list) {
-		mem->kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL);
+		mem->kobj = kzalloc_obj(struct kobject, GFP_KERNEL);
 		if (!mem->kobj)
 			return -ENOMEM;
 		ret = kobject_init_and_add(mem->kobj, &mem_type,
@@ -732,7 +732,7 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev,

 	i = 0;
 	list_for_each_entry(cache, &dev->cache_props, list) {
-		cache->kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL);
+		cache->kobj = kzalloc_obj(struct kobject, GFP_KERNEL);
 		if (!cache->kobj)
 			return -ENOMEM;
 		ret = kobject_init_and_add(cache->kobj, &cache_type,
@@ -753,7 +753,7 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev,

 	i = 0;
 	list_for_each_entry(iolink, &dev->io_link_props, list) {
-		iolink->kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL);
+		iolink->kobj = kzalloc_obj(struct kobject, GFP_KERNEL);
 		if (!iolink->kobj)
 			return -ENOMEM;
 		ret = kobject_init_and_add(iolink->kobj, &iolink_type,
@@ -774,7 +774,7 @@ static int kfd_build_sysfs_node_entry(struct kfd_topology_device *dev,

 	i = 0;
 	list_for_each_entry(p2plink, &dev->p2p_link_props, list) {
-		p2plink->kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL);
+		p2plink->kobj = kzalloc_obj(struct kobject, GFP_KERNEL);
 		if (!p2plink->kobj)
 			return -ENOMEM;
 		ret = kobject_init_and_add(p2plink->kobj, &iolink_type,
@@ -1381,7 +1381,7 @@ static int kfd_build_p2p_node_entry(struct kfd_topology_device *dev,
 {
 	int ret;

-	p2plink->kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL);
+	p2plink->kobj = kzalloc_obj(struct kobject, GFP_KERNEL);
 	if (!p2plink->kobj)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index c3c045c8144f..10bc1d252b1f 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -545,13 +545,15 @@ static void schedule_dc_vmin_vmax(struct amdgpu_device *adev,
 	struct dc_stream_state *stream,
 	struct dc_crtc_timing_adjust *adjust)
 {
-	struct vupdate_offload_work *offload_work = kzalloc(sizeof(*offload_work), GFP_NOWAIT);
+	struct vupdate_offload_work *offload_work = kzalloc_obj(*offload_work,
+								GFP_NOWAIT);
 	if (!offload_work) {
 		drm_dbg_driver(adev_to_drm(adev), "Failed to allocate vupdate_offload_work\n");
 		return;
 	}

-	struct dc_crtc_timing_adjust *adjust_copy = kzalloc(sizeof(*adjust_copy), GFP_NOWAIT);
+	struct dc_crtc_timing_adjust *adjust_copy = kzalloc_obj(*adjust_copy,
+								GFP_NOWAIT);
 	if (!adjust_copy) {
 		drm_dbg_driver(adev_to_drm(adev), "Failed to allocate adjust_copy\n");
 		kfree(offload_work);
@@ -1023,7 +1025,8 @@ static void dm_dmub_outbox1_low_irq(void *interrupt_params)
 				continue;
 			}
 			if (dm->dmub_thread_offload[notify.type] == true) {
-				dmub_hpd_wrk = kzalloc(sizeof(*dmub_hpd_wrk), GFP_ATOMIC);
+				dmub_hpd_wrk = kzalloc_obj(*dmub_hpd_wrk,
+							   GFP_ATOMIC);
 				if (!dmub_hpd_wrk) {
 					drm_err(adev_to_drm(adev), "Failed to allocate dmub_hpd_wrk");
 					return;
@@ -1647,7 +1650,8 @@ static struct hpd_rx_irq_offload_work_queue *hpd_rx_irq_create_workqueue(struct
 	int i = 0;
 	struct hpd_rx_irq_offload_work_queue *hpd_rx_offload_wq = NULL;

-	hpd_rx_offload_wq = kcalloc(max_caps, sizeof(*hpd_rx_offload_wq), GFP_KERNEL);
+	hpd_rx_offload_wq = kzalloc_objs(*hpd_rx_offload_wq, max_caps,
+					 GFP_KERNEL);

 	if (!hpd_rx_offload_wq)
 		return NULL;
@@ -1720,7 +1724,7 @@ dm_allocate_gpu_mem(
 		AMDGPU_GEM_DOMAIN_GTT : AMDGPU_GEM_DOMAIN_VRAM;
 	int ret;

-	da = kzalloc(sizeof(struct dal_allocation), GFP_KERNEL);
+	da = kzalloc_obj(struct dal_allocation, GFP_KERNEL);
 	if (!da)
 		return NULL;

@@ -2126,7 +2130,8 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
 	}
 	if (dc_is_dmub_outbox_supported(adev->dm.dc)) {
 		init_completion(&adev->dm.dmub_aux_transfer_done);
-		adev->dm.dmub_notify = kzalloc(sizeof(struct dmub_notification), GFP_KERNEL);
+		adev->dm.dmub_notify = kzalloc_obj(struct dmub_notification,
+						   GFP_KERNEL);
 		if (!adev->dm.dmub_notify) {
 			drm_info(adev_to_drm(adev), "fail to allocate adev->dm.dmub_notify");
 			goto error;
@@ -2521,7 +2526,7 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev)
 	}


-	adev->dm.dmub_srv = kzalloc(sizeof(*adev->dm.dmub_srv), GFP_KERNEL);
+	adev->dm.dmub_srv = kzalloc_obj(*adev->dm.dmub_srv, GFP_KERNEL);
 	dmub_srv = adev->dm.dmub_srv;

 	if (!dmub_srv) {
@@ -2602,8 +2607,7 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev)
 	memory_params.region_info = &region_info;
 	memory_params.window_memory_type = window_memory_type;

-	adev->dm.dmub_fb_info =
-		kzalloc(sizeof(*adev->dm.dmub_fb_info), GFP_KERNEL);
+	adev->dm.dmub_fb_info = kzalloc_obj(*adev->dm.dmub_fb_info, GFP_KERNEL);
 	fb_info = adev->dm.dmub_fb_info;

 	if (!fb_info) {
@@ -3359,7 +3363,7 @@ static void dm_gpureset_commit_state(struct dc_state *dc_state,
 	} *bundle __free(kfree);
 	int k, m;

-	bundle = kzalloc(sizeof(*bundle), GFP_KERNEL);
+	bundle = kzalloc_obj(*bundle, GFP_KERNEL);

 	if (!bundle) {
 		drm_err(dm->ddev, "Failed to allocate update bundle\n");
@@ -3927,7 +3931,7 @@ void amdgpu_dm_update_connector_after_detect(

 		if (!aconnector->timing_requested) {
 			aconnector->timing_requested =
-				kzalloc(sizeof(struct dc_crtc_timing), GFP_KERNEL);
+				kzalloc_obj(struct dc_crtc_timing, GFP_KERNEL);
 			if (!aconnector->timing_requested)
 				drm_err(dev,
 					"failed to create aconnector->requested_timing\n");
@@ -4156,8 +4160,8 @@ static void handle_hpd_irq(void *param)
 static void schedule_hpd_rx_offload_work(struct amdgpu_device *adev, struct hpd_rx_irq_offload_work_queue *offload_wq,
 							union hpd_irq_data hpd_irq_data)
 {
-	struct hpd_rx_irq_offload_work *offload_work =
-				kzalloc(sizeof(*offload_work), GFP_KERNEL);
+	struct hpd_rx_irq_offload_work *offload_work = kzalloc_obj(*offload_work,
+								   GFP_KERNEL);

 	if (!offload_work) {
 		drm_err(adev_to_drm(adev), "Failed to allocate hpd_rx_irq_offload_work.\n");
@@ -4878,7 +4882,7 @@ dm_atomic_duplicate_state(struct drm_private_obj *obj)
 {
 	struct dm_atomic_state *old_state, *new_state;

-	new_state = kzalloc(sizeof(*new_state), GFP_KERNEL);
+	new_state = kzalloc_obj(*new_state, GFP_KERNEL);
 	if (!new_state)
 		return NULL;

@@ -4935,7 +4939,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
 	/* indicates support for immediate flip */
 	adev_to_drm(adev)->mode_config.async_page_flip = true;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

@@ -5363,7 +5367,7 @@ static int initialize_plane(struct amdgpu_display_manager *dm,
 	unsigned long possible_crtcs;
 	int ret = 0;

-	plane = kzalloc(sizeof(struct drm_plane), GFP_KERNEL);
+	plane = kzalloc_obj(struct drm_plane, GFP_KERNEL);
 	if (!plane) {
 		drm_err(adev_to_drm(dm->adev), "KMS: Failed to allocate plane\n");
 		return -ENOMEM;
@@ -5602,7 +5606,8 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
 		link = dc_get_link_at_index(dm->dc, i);

 		if (link->connector_signal == SIGNAL_TYPE_VIRTUAL) {
-			struct amdgpu_dm_wb_connector *wbcon = kzalloc(sizeof(*wbcon), GFP_KERNEL);
+			struct amdgpu_dm_wb_connector *wbcon = kzalloc_obj(*wbcon,
+									   GFP_KERNEL);

 			if (!wbcon) {
 				drm_err(adev_to_drm(adev), "KMS: Failed to allocate writeback connector\n");
@@ -5621,11 +5626,11 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
 			continue;
 		}

-		aconnector = kzalloc(sizeof(*aconnector), GFP_KERNEL);
+		aconnector = kzalloc_obj(*aconnector, GFP_KERNEL);
 		if (!aconnector)
 			goto fail;

-		aencoder = kzalloc(sizeof(*aencoder), GFP_KERNEL);
+		aencoder = kzalloc_obj(*aencoder, GFP_KERNEL);
 		if (!aencoder)
 			goto fail;

@@ -7819,7 +7824,7 @@ void amdgpu_dm_connector_funcs_reset(struct drm_connector *connector)

 	kfree(state);

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);

 	if (state) {
 		state->scaling = RMX_OFF;
@@ -9094,7 +9099,7 @@ static int amdgpu_dm_i2c_xfer(struct i2c_adapter *i2c_adap,
 	if (!ddc_service->ddc_pin)
 		return result;

-	cmd.payloads = kcalloc(num, sizeof(struct i2c_payload), GFP_KERNEL);
+	cmd.payloads = kzalloc_objs(struct i2c_payload, num, GFP_KERNEL);

 	if (!cmd.payloads)
 		return result;
@@ -9143,7 +9148,7 @@ create_i2c(struct ddc_service *ddc_service, bool oem)
 	struct amdgpu_device *adev = ddc_service->ctx->driver_context;
 	struct amdgpu_i2c_adapter *i2c;

-	i2c = kzalloc(sizeof(struct amdgpu_i2c_adapter), GFP_KERNEL);
+	i2c = kzalloc_obj(struct amdgpu_i2c_adapter, GFP_KERNEL);
 	if (!i2c)
 		return NULL;
 	i2c->base.owner = THIS_MODULE;
@@ -9944,7 +9949,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
 		struct dc_stream_update stream_update;
 	} *bundle;

-	bundle = kzalloc(sizeof(*bundle), GFP_KERNEL);
+	bundle = kzalloc_obj(*bundle, GFP_KERNEL);

 	if (!bundle) {
 		drm_err(dev, "Failed to allocate update bundle\n");
@@ -10619,7 +10624,7 @@ static void dm_set_writeback(struct amdgpu_display_manager *dm,
 	struct amdgpu_framebuffer *afb;
 	int i = 0;

-	wb_info = kzalloc(sizeof(*wb_info), GFP_KERNEL);
+	wb_info = kzalloc_obj(*wb_info, GFP_KERNEL);
 	if (!wb_info) {
 		drm_err(adev_to_drm(adev), "Failed to allocate wb_info\n");
 		return;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
index 20a76d81d532..76405a351111 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
@@ -1227,7 +1227,7 @@ int amdgpu_dm_check_crtc_color_mgmt(struct dm_crtc_state *crtc,
 	crtc->cm_is_degamma_srgb = false;

 	if (check_only) {
-		out_tf = kvzalloc(sizeof(*out_tf), GFP_KERNEL);
+		out_tf = kvzalloc_obj(*out_tf, GFP_KERNEL);
 		if (!out_tf)
 			return -ENOMEM;
 	} else {
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c
index a2de3bba8346..2f072167bcc5 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_colorop.c
@@ -66,7 +66,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
 	memset(ops, 0, sizeof(ops));

 	/* 1D curve - DEGAM TF */
-	ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);
+	ops[i] = kzalloc_obj(*ops[0], GFP_KERNEL);
 	if (!ops[i]) {
 		ret = -ENOMEM;
 		goto cleanup;
@@ -83,7 +83,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
 	i++;

 	/* Multiplier */
-	ops[i] = kzalloc(sizeof(struct drm_colorop), GFP_KERNEL);
+	ops[i] = kzalloc_obj(struct drm_colorop, GFP_KERNEL);
 	if (!ops[i]) {
 		ret = -ENOMEM;
 		goto cleanup;
@@ -98,7 +98,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
 	i++;

 	/* 3x4 matrix */
-	ops[i] = kzalloc(sizeof(struct drm_colorop), GFP_KERNEL);
+	ops[i] = kzalloc_obj(struct drm_colorop, GFP_KERNEL);
 	if (!ops[i]) {
 		ret = -ENOMEM;
 		goto cleanup;
@@ -114,7 +114,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr

 	if (adev->dm.dc->caps.color.dpp.hw_3d_lut) {
 		/* 1D curve - SHAPER TF */
-		ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);
+		ops[i] = kzalloc_obj(*ops[0], GFP_KERNEL);
 		if (!ops[i]) {
 			ret = -ENOMEM;
 			goto cleanup;
@@ -131,7 +131,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
 		i++;

 		/* 1D LUT - SHAPER LUT */
-		ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);
+		ops[i] = kzalloc_obj(*ops[0], GFP_KERNEL);
 		if (!ops[i]) {
 			ret = -ENOMEM;
 			goto cleanup;
@@ -148,7 +148,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
 		i++;

 		/* 3D LUT */
-		ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);
+		ops[i] = kzalloc_obj(*ops[0], GFP_KERNEL);
 		if (!ops[i]) {
 			ret = -ENOMEM;
 			goto cleanup;
@@ -166,7 +166,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
 	}

 	/* 1D curve - BLND TF */
-	ops[i] = kzalloc(sizeof(*ops[0]), GFP_KERNEL);
+	ops[i] = kzalloc_obj(*ops[0], GFP_KERNEL);
 	if (!ops[i]) {
 		ret = -ENOMEM;
 		goto cleanup;
@@ -183,7 +183,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
 	i++;

 	/* 1D LUT - BLND LUT */
-	ops[i] = kzalloc(sizeof(struct drm_colorop), GFP_KERNEL);
+	ops[i] = kzalloc_obj(struct drm_colorop, GFP_KERNEL);
 	if (!ops[i]) {
 		ret = -ENOMEM;
 		goto cleanup;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
index 1b03f2bf8d7a..212f613fad1e 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
@@ -958,9 +958,8 @@ void amdgpu_dm_crtc_secure_display_create_contexts(struct amdgpu_device *adev)
 	struct secure_display_crtc_context *crtc_ctx = NULL;
 	int i;

-	crtc_ctx = kcalloc(adev->mode_info.num_crtc,
-				      sizeof(struct secure_display_crtc_context),
-				      GFP_KERNEL);
+	crtc_ctx = kzalloc_objs(struct secure_display_crtc_context,
+				adev->mode_info.num_crtc, GFP_KERNEL);

 	if (!crtc_ctx) {
 		adev->dm.secure_display_ctx.crtc_ctx = NULL;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
index 9fcd72d87d25..49f68ddcfec8 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
@@ -231,7 +231,7 @@ struct idle_workqueue *idle_create_workqueue(struct amdgpu_device *adev)
 {
 	struct idle_workqueue *idle_work;

-	idle_work = kzalloc(sizeof(*idle_work), GFP_KERNEL);
+	idle_work = kzalloc_obj(*idle_work, GFP_KERNEL);
 	if (ZERO_OR_NULL_PTR(idle_work))
 		return NULL;

@@ -392,7 +392,7 @@ static inline int amdgpu_dm_crtc_set_vblank(struct drm_crtc *crtc, bool enable)
 		return 0;

 	if (dm->vblank_control_workqueue) {
-		work = kzalloc(sizeof(*work), GFP_ATOMIC);
+		work = kzalloc_obj(*work, GFP_ATOMIC);
 		if (!work)
 			return -ENOMEM;

@@ -447,7 +447,7 @@ static struct drm_crtc_state *amdgpu_dm_crtc_duplicate_state(struct drm_crtc *cr
 	if (WARN_ON(!crtc->state))
 		return NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -487,7 +487,7 @@ static void amdgpu_dm_crtc_reset_state(struct drm_crtc *crtc)
 	if (crtc->state)
 		amdgpu_dm_crtc_destroy_state(crtc, crtc->state);

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (WARN_ON(!state))
 		return;

@@ -728,14 +728,14 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
 	bool has_degamma;
 	int res = -ENOMEM;

-	cursor_plane = kzalloc(sizeof(*cursor_plane), GFP_KERNEL);
+	cursor_plane = kzalloc_obj(*cursor_plane, GFP_KERNEL);
 	if (!cursor_plane)
 		goto fail;

 	cursor_plane->type = DRM_PLANE_TYPE_CURSOR;
 	res = amdgpu_dm_plane_init(dm, cursor_plane, 0, NULL);

-	acrtc = kzalloc(sizeof(struct amdgpu_crtc), GFP_KERNEL);
+	acrtc = kzalloc_obj(struct amdgpu_crtc, GFP_KERNEL);
 	if (!acrtc)
 		goto fail;

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
index d6d43f1bf6d2..b43ec19848fd 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
@@ -4301,7 +4301,7 @@ static ssize_t dcc_en_bits_read(
 	int *dcc_en_bits;
 	int i, r;

-	dcc_en_bits = kcalloc(num_pipes, sizeof(int), GFP_KERNEL);
+	dcc_en_bits = kzalloc_objs(int, num_pipes, GFP_KERNEL);
 	if (!dcc_en_bits)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
index a10401675f53..3b26797c9d03 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
@@ -746,7 +746,7 @@ struct hdcp_workqueue *hdcp_create_workqueue(struct amdgpu_device *adev,
 	struct hdcp_workqueue *hdcp_work;
 	int i = 0;

-	hdcp_work = kcalloc(max_caps, sizeof(*hdcp_work), GFP_KERNEL);
+	hdcp_work = kzalloc_objs(*hdcp_work, max_caps, GFP_KERNEL);
 	if (ZERO_OR_NULL_PTR(hdcp_work))
 		return NULL;

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
index bf2a356b3475..d26003d2a2cc 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
@@ -617,7 +617,7 @@ bool dm_helpers_submit_i2c(
 		return false;
 	}

-	msgs = kcalloc(num, sizeof(struct i2c_msg), GFP_KERNEL);
+	msgs = kzalloc_objs(struct i2c_msg, num, GFP_KERNEL);

 	if (!msgs)
 		return false;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
index 5948e2a6219e..dfb80689d889 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
@@ -313,7 +313,7 @@ void *amdgpu_dm_irq_register_interrupt(struct amdgpu_device *adev,
 	if (false == validate_irq_registration_params(int_params, ih))
 		return DAL_INVALID_IRQ_HANDLER_IDX;

-	handler_data = kzalloc(sizeof(*handler_data), GFP_KERNEL);
+	handler_data = kzalloc_obj(*handler_data, GFP_KERNEL);
 	if (!handler_data) {
 		DRM_ERROR("DM_IRQ: failed to allocate irq handler!\n");
 		return DAL_INVALID_IRQ_HANDLER_IDX;
@@ -594,7 +594,7 @@ static void amdgpu_dm_irq_schedule_work(struct amdgpu_device *adev,
 		handler_data = container_of(handler_list->next, struct amdgpu_dm_irq_handler_data, list);

 		/*allocate a new amdgpu_dm_irq_handler_data*/
-		handler_data_add = kzalloc(sizeof(*handler_data), GFP_ATOMIC);
+		handler_data_add = kzalloc_obj(*handler_data, GFP_ATOMIC);
 		if (!handler_data_add) {
 			DRM_ERROR("DM_IRQ: failed to allocate irq handler!\n");
 			return;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index 5e92eaa67aa3..781163d6b23b 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -640,7 +640,7 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
 	struct drm_connector *connector;
 	int i;

-	aconnector = kzalloc(sizeof(*aconnector), GFP_KERNEL);
+	aconnector = kzalloc_obj(*aconnector, GFP_KERNEL);
 	if (!aconnector)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
index 198064acf9f6..c50583a05ce3 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
@@ -1470,7 +1470,7 @@ static void amdgpu_dm_plane_drm_plane_reset(struct drm_plane *plane)
 	if (plane->state)
 		plane->funcs->atomic_destroy_state(plane, plane->state);

-	amdgpu_state = kzalloc(sizeof(*amdgpu_state), GFP_KERNEL);
+	amdgpu_state = kzalloc_obj(*amdgpu_state, GFP_KERNEL);
 	WARN_ON(amdgpu_state == NULL);

 	if (!amdgpu_state)
@@ -1488,7 +1488,7 @@ static struct drm_plane_state *amdgpu_dm_plane_drm_plane_duplicate_state(struct
 	struct dm_plane_state *dm_plane_state, *old_dm_plane_state;

 	old_dm_plane_state = to_dm_plane_state(plane->state);
-	dm_plane_state = kzalloc(sizeof(*dm_plane_state), GFP_KERNEL);
+	dm_plane_state = kzalloc_obj(*dm_plane_state, GFP_KERNEL);
 	if (!dm_plane_state)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/display/dc/basics/dce_calcs.c b/drivers/gpu/drm/amd/display/dc/basics/dce_calcs.c
index 4da5adab799c..dbc4c2e0e514 100644
--- a/drivers/gpu/drm/amd/display/dc/basics/dce_calcs.c
+++ b/drivers/gpu/drm/amd/display/dc/basics/dce_calcs.c
@@ -120,19 +120,21 @@ static void calculate_bandwidth(
 	int32_t number_of_displays_enabled_with_margin = 0;
 	int32_t number_of_aligned_displays_with_no_margin = 0;

-	yclk = kcalloc(3, sizeof(*yclk), GFP_KERNEL);
+	yclk = kzalloc_objs(*yclk, 3, GFP_KERNEL);
 	if (!yclk)
 		return;

-	sclk = kcalloc(8, sizeof(*sclk), GFP_KERNEL);
+	sclk = kzalloc_objs(*sclk, 8, GFP_KERNEL);
 	if (!sclk)
 		goto free_yclk;

-	tiling_mode = kcalloc(maximum_number_of_surfaces, sizeof(*tiling_mode), GFP_KERNEL);
+	tiling_mode = kzalloc_objs(*tiling_mode, maximum_number_of_surfaces,
+				   GFP_KERNEL);
 	if (!tiling_mode)
 		goto free_sclk;

-	surface_type = kcalloc(maximum_number_of_surfaces, sizeof(*surface_type), GFP_KERNEL);
+	surface_type = kzalloc_objs(*surface_type, maximum_number_of_surfaces,
+				    GFP_KERNEL);
 	if (!surface_type)
 		goto free_tiling_mode;

@@ -2049,11 +2051,11 @@ void bw_calcs_init(struct bw_calcs_dceip *bw_dceip,

 	enum bw_calcs_version version = bw_calcs_version_from_asic_id(asic_id);

-	dceip = kzalloc(sizeof(*dceip), GFP_KERNEL);
+	dceip = kzalloc_obj(*dceip, GFP_KERNEL);
 	if (!dceip)
 		return;

-	vbios = kzalloc(sizeof(*vbios), GFP_KERNEL);
+	vbios = kzalloc_obj(*vbios, GFP_KERNEL);
 	if (!vbios) {
 		kfree(dceip);
 		return;
@@ -3045,8 +3047,8 @@ bool bw_calcs(struct dc_context *ctx,
 	int pipe_count,
 	struct dce_bw_output *calcs_output)
 {
-	struct bw_calcs_data *data = kzalloc(sizeof(struct bw_calcs_data),
-					     GFP_KERNEL);
+	struct bw_calcs_data *data = kzalloc_obj(struct bw_calcs_data,
+						 GFP_KERNEL);
 	if (!data)
 		return false;

diff --git a/drivers/gpu/drm/amd/display/dc/basics/vector.c b/drivers/gpu/drm/amd/display/dc/basics/vector.c
index b413a672c2c0..8f6b780b7778 100644
--- a/drivers/gpu/drm/amd/display/dc/basics/vector.c
+++ b/drivers/gpu/drm/amd/display/dc/basics/vector.c
@@ -94,7 +94,7 @@ struct vector *dal_vector_presized_create(
 	void *initial_value,
 	uint32_t struct_size)
 {
-	struct vector *vector = kzalloc(sizeof(struct vector), GFP_KERNEL);
+	struct vector *vector = kzalloc_obj(struct vector, GFP_KERNEL);

 	if (vector == NULL)
 		return NULL;
@@ -113,7 +113,7 @@ struct vector *dal_vector_create(
 	uint32_t capacity,
 	uint32_t struct_size)
 {
-	struct vector *vector = kzalloc(sizeof(struct vector), GFP_KERNEL);
+	struct vector *vector = kzalloc_obj(struct vector, GFP_KERNEL);

 	if (vector == NULL)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
index 9f11e6ca4051..65993314c5cd 100644
--- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
+++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
@@ -98,7 +98,7 @@ struct dc_bios *bios_parser_create(
 {
 	struct bios_parser *bp;

-	bp = kzalloc(sizeof(struct bios_parser), GFP_KERNEL);
+	bp = kzalloc_obj(struct bios_parser, GFP_KERNEL);
 	if (!bp)
 		return NULL;

@@ -2667,7 +2667,7 @@ static struct integrated_info *bios_parser_create_integrated_info(
 	struct bios_parser *bp = BP_FROM_DCB(dcb);
 	struct integrated_info *info;

-	info = kzalloc(sizeof(struct integrated_info), GFP_KERNEL);
+	info = kzalloc_obj(struct integrated_info, GFP_KERNEL);

 	if (info == NULL) {
 		ASSERT_CRITICAL(0);
diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
index 550a9f1d03f8..9da95c59a68b 100644
--- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
+++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
@@ -3207,7 +3207,7 @@ static struct integrated_info *bios_parser_create_integrated_info(
 	struct bios_parser *bp = BP_FROM_DCB(dcb);
 	struct integrated_info *info;

-	info = kzalloc(sizeof(struct integrated_info), GFP_KERNEL);
+	info = kzalloc_obj(struct integrated_info, GFP_KERNEL);

 	if (info == NULL) {
 		ASSERT_CRITICAL(0);
@@ -3793,7 +3793,7 @@ struct dc_bios *firmware_parser_create(
 {
 	struct bios_parser *bp;

-	bp = kzalloc(sizeof(struct bios_parser), GFP_KERNEL);
+	bp = kzalloc_obj(struct bios_parser, GFP_KERNEL);
 	if (!bp)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/clk_mgr.c
index 15cf13ec5302..451d596783e0 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/clk_mgr.c
@@ -151,7 +151,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 	switch (asic_id.chip_family) {
 #if defined(CONFIG_DRM_AMD_DC_SI)
 	case FAMILY_SI: {
-		struct clk_mgr_internal *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_internal *clk_mgr = kzalloc_obj(*clk_mgr,
+							       GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -163,7 +164,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 #endif
 	case FAMILY_CI:
 	case FAMILY_KV: {
-		struct clk_mgr_internal *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_internal *clk_mgr = kzalloc_obj(*clk_mgr,
+							       GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -173,7 +175,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 		return &clk_mgr->base;
 	}
 	case FAMILY_CZ: {
-		struct clk_mgr_internal *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_internal *clk_mgr = kzalloc_obj(*clk_mgr,
+							       GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -183,7 +186,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 		return &clk_mgr->base;
 	}
 	case FAMILY_VI: {
-		struct clk_mgr_internal *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_internal *clk_mgr = kzalloc_obj(*clk_mgr,
+							       GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -207,7 +211,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 		return &clk_mgr->base;
 	}
 	case FAMILY_AI: {
-		struct clk_mgr_internal *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_internal *clk_mgr = kzalloc_obj(*clk_mgr,
+							       GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -221,7 +226,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 	}
 #if defined(CONFIG_DRM_AMD_DC_FP)
 	case FAMILY_RV: {
-		struct clk_mgr_internal *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_internal *clk_mgr = kzalloc_obj(*clk_mgr,
+							       GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -249,7 +255,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 		return &clk_mgr->base;
 	}
 	case FAMILY_NV: {
-		struct clk_mgr_internal *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_internal *clk_mgr = kzalloc_obj(*clk_mgr,
+							       GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -276,7 +283,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 	}
 	case FAMILY_VGH:
 		if (ASICREV_IS_VANGOGH(asic_id.hw_internal_rev)) {
-			struct clk_mgr_vgh *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+			struct clk_mgr_vgh *clk_mgr = kzalloc_obj(*clk_mgr,
+								  GFP_KERNEL);

 			if (clk_mgr == NULL) {
 				BREAK_TO_DEBUGGER();
@@ -288,7 +296,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 		break;

 	case FAMILY_YELLOW_CARP: {
-		struct clk_mgr_dcn31 *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_dcn31 *clk_mgr = kzalloc_obj(*clk_mgr,
+							    GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -300,7 +309,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 	}
 		break;
 	case AMDGPU_FAMILY_GC_10_3_6: {
-		struct clk_mgr_dcn315 *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_dcn315 *clk_mgr = kzalloc_obj(*clk_mgr,
+							     GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -312,7 +322,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 	}
 		break;
 	case AMDGPU_FAMILY_GC_10_3_7: {
-		struct clk_mgr_dcn316 *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_dcn316 *clk_mgr = kzalloc_obj(*clk_mgr,
+							     GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -324,7 +335,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 	}
 		break;
 	case AMDGPU_FAMILY_GC_11_0_0: {
-		struct clk_mgr_internal *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_internal *clk_mgr = kzalloc_obj(*clk_mgr,
+							       GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -335,7 +347,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 	}

 	case AMDGPU_FAMILY_GC_11_0_1: {
-		struct clk_mgr_dcn314 *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_dcn314 *clk_mgr = kzalloc_obj(*clk_mgr,
+							     GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
@@ -348,7 +361,8 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
 	break;

 	case AMDGPU_FAMILY_GC_11_5_0: {
-		struct clk_mgr_dcn35 *clk_mgr = kzalloc(sizeof(*clk_mgr), GFP_KERNEL);
+		struct clk_mgr_dcn35 *clk_mgr = kzalloc_obj(*clk_mgr,
+							    GFP_KERNEL);

 		if (clk_mgr == NULL) {
 			BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c
index ef77fcd164ed..0684d2e68827 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c
@@ -561,7 +561,8 @@ void dcn3_clk_mgr_construct(

 	dce_clock_read_ss_info(clk_mgr);

-	clk_mgr->base.bw_params = kzalloc(sizeof(*clk_mgr->base.bw_params), GFP_KERNEL);
+	clk_mgr->base.bw_params = kzalloc_obj(*clk_mgr->base.bw_params,
+					      GFP_KERNEL);
 	if (!clk_mgr->base.bw_params) {
 		BREAK_TO_DEBUGGER();
 		return;
diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c
index 7da7b41bd092..820656aef040 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c
@@ -1206,7 +1206,8 @@ void dcn32_clk_mgr_construct(

 	clk_mgr->smu_present = false;

-	clk_mgr->base.bw_params = kzalloc(sizeof(*clk_mgr->base.bw_params), GFP_KERNEL);
+	clk_mgr->base.bw_params = kzalloc_obj(*clk_mgr->base.bw_params,
+					      GFP_KERNEL);
 	if (!clk_mgr->base.bw_params) {
 		BREAK_TO_DEBUGGER();
 		return;
diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c
index 306016c1f109..01c8e2dd64ed 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c
@@ -1549,7 +1549,8 @@ struct clk_mgr_internal *dcn401_clk_mgr_construct(
 		struct dccg *dccg)
 {
 	struct clk_log_info log_info = {0};
-	struct dcn401_clk_mgr *clk_mgr401 = kzalloc(sizeof(struct dcn401_clk_mgr), GFP_KERNEL);
+	struct dcn401_clk_mgr *clk_mgr401 = kzalloc_obj(struct dcn401_clk_mgr,
+							GFP_KERNEL);
 	struct clk_mgr_internal *clk_mgr;

 	if (!clk_mgr401)
@@ -1599,7 +1600,8 @@ struct clk_mgr_internal *dcn401_clk_mgr_construct(

 	clk_mgr->smu_present = false;

-	clk_mgr->base.bw_params = kzalloc(sizeof(*clk_mgr->base.bw_params), GFP_KERNEL);
+	clk_mgr->base.bw_params = kzalloc_obj(*clk_mgr->base.bw_params,
+					      GFP_KERNEL);
 	if (!clk_mgr->base.bw_params) {
 		BREAK_TO_DEBUGGER();
 		kfree(clk_mgr401);
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
index 984b4bc5f53c..e05a6a9d66ff 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -284,7 +284,7 @@ static bool create_links(
 	}

 	for (i = 0; i < num_virtual_links; i++) {
-		struct dc_link *link = kzalloc(sizeof(*link), GFP_KERNEL);
+		struct dc_link *link = kzalloc_obj(*link, GFP_KERNEL);
 		struct encoder_init_data enc_init = {0};

 		if (link == NULL) {
@@ -304,7 +304,7 @@ static bool create_links(
 		link->link_id.enum_id = ENUM_ID_1;
 		link->psr_settings.psr_version = DC_PSR_VERSION_UNSUPPORTED;
 		link->replay_settings.config.replay_version = DC_REPLAY_VERSION_UNSUPPORTED;
-		link->link_enc = kzalloc(sizeof(*link->link_enc), GFP_KERNEL);
+		link->link_enc = kzalloc_obj(*link->link_enc, GFP_KERNEL);

 		if (!link->link_enc) {
 			BREAK_TO_DEBUGGER();
@@ -409,7 +409,7 @@ static void destroy_link_encoders(struct dc *dc)

 static struct dc_perf_trace *dc_perf_trace_create(void)
 {
-	return kzalloc(sizeof(struct dc_perf_trace), GFP_KERNEL);
+	return kzalloc_obj(struct dc_perf_trace, GFP_KERNEL);
 }

 static void dc_perf_trace_destroy(struct dc_perf_trace **perf_trace)
@@ -1005,7 +1005,7 @@ static bool dc_construct_ctx(struct dc *dc,
 {
 	struct dc_context *dc_ctx;

-	dc_ctx = kzalloc(sizeof(*dc_ctx), GFP_KERNEL);
+	dc_ctx = kzalloc_obj(*dc_ctx, GFP_KERNEL);
 	if (!dc_ctx)
 		return false;

@@ -1023,7 +1023,7 @@ static bool dc_construct_ctx(struct dc *dc,
 	dc_ctx->clk_reg_offsets = init_params->clk_reg_offsets;

 	/* Create logger */
-	dc_ctx->logger = kmalloc(sizeof(*dc_ctx->logger), GFP_KERNEL);
+	dc_ctx->logger = kmalloc_obj(*dc_ctx->logger, GFP_KERNEL);

 	if (!dc_ctx->logger) {
 		kfree(dc_ctx);
@@ -1063,7 +1063,7 @@ static bool dc_construct(struct dc *dc,
 	dc->config = init_params->flags;

 	// Allocate memory for the vm_helper
-	dc->vm_helper = kzalloc(sizeof(struct vm_helper), GFP_KERNEL);
+	dc->vm_helper = kzalloc_obj(struct vm_helper, GFP_KERNEL);
 	if (!dc->vm_helper) {
 		dm_error("%s: failed to create dc->vm_helper\n", __func__);
 		goto fail;
@@ -1071,7 +1071,7 @@ static bool dc_construct(struct dc *dc,

 	memcpy(&dc->bb_overrides, &init_params->bb_overrides, sizeof(dc->bb_overrides));

-	dc_dceip = kzalloc(sizeof(*dc_dceip), GFP_KERNEL);
+	dc_dceip = kzalloc_obj(*dc_dceip, GFP_KERNEL);
 	if (!dc_dceip) {
 		dm_error("%s: failed to create dceip\n", __func__);
 		goto fail;
@@ -1079,14 +1079,14 @@ static bool dc_construct(struct dc *dc,

 	dc->bw_dceip = dc_dceip;

-	dc_vbios = kzalloc(sizeof(*dc_vbios), GFP_KERNEL);
+	dc_vbios = kzalloc_obj(*dc_vbios, GFP_KERNEL);
 	if (!dc_vbios) {
 		dm_error("%s: failed to create vbios\n", __func__);
 		goto fail;
 	}

 	dc->bw_vbios = dc_vbios;
-	dcn_soc = kzalloc(sizeof(*dcn_soc), GFP_KERNEL);
+	dcn_soc = kzalloc_obj(*dcn_soc, GFP_KERNEL);
 	if (!dcn_soc) {
 		dm_error("%s: failed to create dcn_soc\n", __func__);
 		goto fail;
@@ -1094,7 +1094,7 @@ static bool dc_construct(struct dc *dc,

 	dc->dcn_soc = dcn_soc;

-	dcn_ip = kzalloc(sizeof(*dcn_ip), GFP_KERNEL);
+	dcn_ip = kzalloc_obj(*dcn_ip, GFP_KERNEL);
 	if (!dcn_ip) {
 		dm_error("%s: failed to create dcn_ip\n", __func__);
 		goto fail;
@@ -1496,7 +1496,7 @@ static void disable_vbios_mode_if_required(

 struct dc *dc_create(const struct dc_init_data *init_params)
 {
-	struct dc *dc = kzalloc(sizeof(*dc), GFP_KERNEL);
+	struct dc *dc = kzalloc_obj(*dc, GFP_KERNEL);
 	unsigned int full_pipe_count;

 	if (!dc)
@@ -2613,8 +2613,8 @@ bool dc_set_generic_gpio_for_stereo(bool enable,
 	enum gpio_result gpio_result = GPIO_RESULT_NON_SPECIFIC_ERROR;
 	struct gpio_pin_info pin_info;
 	struct gpio *generic;
-	struct gpio_generic_mux_config *config = kzalloc(sizeof(struct gpio_generic_mux_config),
-			   GFP_KERNEL);
+	struct gpio_generic_mux_config *config = kzalloc_obj(struct gpio_generic_mux_config,
+							     GFP_KERNEL);

 	if (!config)
 		return false;
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
index 455fa5dd1420..0bcd7445fe97 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
@@ -76,7 +76,7 @@ void dc_sink_release(struct dc_sink *sink)

 struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params)
 {
-	struct dc_sink *sink = kzalloc(sizeof(*sink), GFP_KERNEL);
+	struct dc_sink *sink = kzalloc_obj(*sink, GFP_KERNEL);

 	if (NULL == sink)
 		goto alloc_fail;
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_state.c b/drivers/gpu/drm/amd/display/dc/core/dc_state.c
index 2de8ef4a58ec..c85b8915bbd3 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_state.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_state.c
@@ -195,7 +195,7 @@ struct dc_state *dc_state_create(struct dc *dc, struct dc_state_create_params *p
 {
 	struct dc_state *state;

-	state = kvzalloc(sizeof(struct dc_state), GFP_KERNEL);
+	state = kvzalloc_obj(struct dc_state, GFP_KERNEL);

 	if (!state)
 		return NULL;
@@ -251,8 +251,7 @@ struct dc_state *dc_state_create_copy(struct dc_state *src_state)
 {
 	struct dc_state *new_state;

-	new_state = kvmalloc(sizeof(struct dc_state),
-			GFP_KERNEL);
+	new_state = kvmalloc_obj(struct dc_state, GFP_KERNEL);
 	if (!new_state)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
index 191f6435e7c6..def02e26cb1f 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
@@ -170,7 +170,7 @@ struct dc_stream_state *dc_create_stream_for_sink(
 	if (sink == NULL)
 		goto fail;

-	stream = kzalloc(sizeof(struct dc_stream_state), GFP_KERNEL);
+	stream = kzalloc_obj(struct dc_stream_state, GFP_KERNEL);
 	if (stream == NULL)
 		goto fail;

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
index 0971dfa25845..11c237720bd2 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
@@ -85,8 +85,8 @@ uint8_t  dc_plane_get_pipe_mask(struct dc_state *dc_state, const struct dc_plane
  ******************************************************************************/
 struct dc_plane_state *dc_create_plane_state(const struct dc *dc)
 {
-	struct dc_plane_state *plane_state = kvzalloc(sizeof(*plane_state),
-							GFP_ATOMIC);
+	struct dc_plane_state *plane_state = kvzalloc_obj(*plane_state,
+							  GFP_ATOMIC);

 	if (NULL == plane_state)
 		return NULL;
@@ -195,7 +195,7 @@ void dc_gamma_release(struct dc_gamma **gamma)

 struct dc_gamma *dc_create_gamma(void)
 {
-	struct dc_gamma *gamma = kvzalloc(sizeof(*gamma), GFP_KERNEL);
+	struct dc_gamma *gamma = kvzalloc_obj(*gamma, GFP_KERNEL);

 	if (gamma == NULL)
 		goto alloc_fail;
@@ -225,7 +225,7 @@ void dc_transfer_func_release(struct dc_transfer_func *tf)

 struct dc_transfer_func *dc_create_transfer_func(void)
 {
-	struct dc_transfer_func *tf = kvzalloc(sizeof(*tf), GFP_KERNEL);
+	struct dc_transfer_func *tf = kvzalloc_obj(*tf, GFP_KERNEL);

 	if (tf == NULL)
 		goto alloc_fail;
@@ -247,7 +247,7 @@ static void dc_3dlut_func_free(struct kref *kref)

 struct dc_3dlut *dc_create_3dlut_func(void)
 {
-	struct dc_3dlut *lut = kvzalloc(sizeof(*lut), GFP_KERNEL);
+	struct dc_3dlut *lut = kvzalloc_obj(*lut, GFP_KERNEL);

 	if (lut == NULL)
 		goto alloc_fail;
diff --git a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c
index e4dd5ca70987..9b70c4e96ffe 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c
+++ b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c
@@ -60,7 +60,7 @@ static void dc_dmub_srv_handle_failure(struct dc_dmub_srv *dc_dmub_srv)
 struct dc_dmub_srv *dc_dmub_srv_create(struct dc *dc, struct dmub_srv *dmub)
 {
 	struct dc_dmub_srv *dc_srv =
-		kzalloc(sizeof(struct dc_dmub_srv), GFP_KERNEL);
+		kzalloc_obj(struct dc_dmub_srv, GFP_KERNEL);

 	if (dc_srv == NULL) {
 		BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn20/dcn20_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn20/dcn20_dccg.c
index 733b85d450d9..7c578d10cbca 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn20/dcn20_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn20/dcn20_dccg.c
@@ -200,7 +200,7 @@ struct dccg *dccg2_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn201/dcn201_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn201/dcn201_dccg.c
index 79d14ce19393..b147456a8cd4 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn201/dcn201_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn201/dcn201_dccg.c
@@ -70,7 +70,7 @@ struct dccg *dccg201_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn21/dcn21_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn21/dcn21_dccg.c
index b48dcafbae66..f14abe712f2d 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn21/dcn21_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn21/dcn21_dccg.c
@@ -116,7 +116,7 @@ struct dccg *dccg21_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn30/dcn30_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn30/dcn30_dccg.c
index adec7c3c2d49..f264cf2285ce 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn30/dcn30_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn30/dcn30_dccg.c
@@ -62,7 +62,7 @@ struct dccg *dccg3_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
@@ -87,7 +87,7 @@ struct dccg *dccg30_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn301/dcn301_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn301/dcn301_dccg.c
index fc9bddd94b50..93ff864def88 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn301/dcn301_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn301/dcn301_dccg.c
@@ -61,7 +61,7 @@ struct dccg *dccg301_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn31/dcn31_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn31/dcn31_dccg.c
index c647dff5234a..5ab0325f3615 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn31/dcn31_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn31/dcn31_dccg.c
@@ -863,7 +863,7 @@ struct dccg *dccg31_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn314/dcn314_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn314/dcn314_dccg.c
index 2e9c4b13988a..5193883bfb41 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn314/dcn314_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn314/dcn314_dccg.c
@@ -392,7 +392,7 @@ struct dccg *dccg314_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn32/dcn32_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn32/dcn32_dccg.c
index ce697c3249fb..be44bc057bee 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn32/dcn32_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn32/dcn32_dccg.c
@@ -360,7 +360,7 @@ struct dccg *dccg32_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c
index 943ec1983076..34414be7efb6 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c
@@ -2461,7 +2461,7 @@ struct dccg *dccg35_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dccg/dcn401/dcn401_dccg.c b/drivers/gpu/drm/amd/display/dc/dccg/dcn401/dcn401_dccg.c
index f1d394560892..9554d24b882b 100644
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn401/dcn401_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn401/dcn401_dccg.c
@@ -892,7 +892,7 @@ struct dccg *dccg401_create(
 	const struct dccg_shift *dccg_shift,
 	const struct dccg_mask *dccg_mask)
 {
-	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
+	struct dcn_dccg *dccg_dcn = kzalloc_obj(*dccg_dcn, GFP_KERNEL);
 	struct dccg *base;

 	if (dccg_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
index 2dcf394edf22..71bb5794a513 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
@@ -283,7 +283,7 @@ struct abm *dce_abm_create(
 	const struct dce_abm_shift *abm_shift,
 	const struct dce_abm_mask *abm_mask)
 {
-	struct dce_abm *abm_dce = kzalloc(sizeof(*abm_dce), GFP_KERNEL);
+	struct dce_abm *abm_dce = kzalloc_obj(*abm_dce, GFP_KERNEL);

 	if (abm_dce == NULL) {
 		BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
index fcad61c618a1..ba30394b828f 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
@@ -1331,7 +1331,7 @@ struct audio *dce_audio_create(
 		const struct dce_audio_mask *masks
 		)
 {
-	struct dce_audio *audio = kzalloc(sizeof(*audio), GFP_KERNEL);
+	struct dce_audio *audio = kzalloc_obj(*audio, GFP_KERNEL);

 	if (audio == NULL) {
 		ASSERT_CRITICAL(audio);
@@ -1357,7 +1357,7 @@ struct audio *dce60_audio_create(
 		const struct dce_audio_mask *masks
 		)
 {
-	struct dce_audio *audio = kzalloc(sizeof(*audio), GFP_KERNEL);
+	struct dce_audio *audio = kzalloc_obj(*audio, GFP_KERNEL);

 	if (audio == NULL) {
 		ASSERT_CRITICAL(audio);
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c
index e7acd6eec1fd..405758106101 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c
@@ -848,7 +848,7 @@ struct clk_mgr *dce_clk_mgr_create(
 	const struct clk_mgr_shift *clk_shift,
 	const struct clk_mgr_mask *clk_mask)
 {
-	struct dce_clk_mgr *clk_mgr_dce = kzalloc(sizeof(*clk_mgr_dce), GFP_KERNEL);
+	struct dce_clk_mgr *clk_mgr_dce = kzalloc_obj(*clk_mgr_dce, GFP_KERNEL);

 	if (clk_mgr_dce == NULL) {
 		BREAK_TO_DEBUGGER();
@@ -871,7 +871,7 @@ struct clk_mgr *dce110_clk_mgr_create(
 	const struct clk_mgr_shift *clk_shift,
 	const struct clk_mgr_mask *clk_mask)
 {
-	struct dce_clk_mgr *clk_mgr_dce = kzalloc(sizeof(*clk_mgr_dce), GFP_KERNEL);
+	struct dce_clk_mgr *clk_mgr_dce = kzalloc_obj(*clk_mgr_dce, GFP_KERNEL);

 	if (clk_mgr_dce == NULL) {
 		BREAK_TO_DEBUGGER();
@@ -896,7 +896,7 @@ struct clk_mgr *dce112_clk_mgr_create(
 	const struct clk_mgr_shift *clk_shift,
 	const struct clk_mgr_mask *clk_mask)
 {
-	struct dce_clk_mgr *clk_mgr_dce = kzalloc(sizeof(*clk_mgr_dce), GFP_KERNEL);
+	struct dce_clk_mgr *clk_mgr_dce = kzalloc_obj(*clk_mgr_dce, GFP_KERNEL);

 	if (clk_mgr_dce == NULL) {
 		BREAK_TO_DEBUGGER();
@@ -917,7 +917,7 @@ struct clk_mgr *dce112_clk_mgr_create(

 struct clk_mgr *dce120_clk_mgr_create(struct dc_context *ctx)
 {
-	struct dce_clk_mgr *clk_mgr_dce = kzalloc(sizeof(*clk_mgr_dce), GFP_KERNEL);
+	struct dce_clk_mgr *clk_mgr_dce = kzalloc_obj(*clk_mgr_dce, GFP_KERNEL);

 	if (clk_mgr_dce == NULL) {
 		BREAK_TO_DEBUGGER();
@@ -939,8 +939,7 @@ struct clk_mgr *dce120_clk_mgr_create(struct dc_context *ctx)

 struct clk_mgr *dce121_clk_mgr_create(struct dc_context *ctx)
 {
-	struct dce_clk_mgr *clk_mgr_dce = kzalloc(sizeof(*clk_mgr_dce),
-						  GFP_KERNEL);
+	struct dce_clk_mgr *clk_mgr_dce = kzalloc_obj(*clk_mgr_dce, GFP_KERNEL);

 	if (clk_mgr_dce == NULL) {
 		BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c b/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
index b4f5b4a6331a..2b242df1b952 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
@@ -1476,16 +1476,14 @@ static void get_ss_info_from_atombios(
 	if (*ss_entries_num == 0)
 		return;

-	ss_info = kcalloc(*ss_entries_num,
-			  sizeof(struct spread_spectrum_info),
-			  GFP_KERNEL);
+	ss_info = kzalloc_objs(struct spread_spectrum_info, *ss_entries_num,
+			       GFP_KERNEL);
 	ss_info_cur = ss_info;
 	if (ss_info == NULL)
 		return;

-	ss_data = kcalloc(*ss_entries_num,
-			  sizeof(struct spread_spectrum_data),
-			  GFP_KERNEL);
+	ss_data = kzalloc_objs(struct spread_spectrum_data, *ss_entries_num,
+			       GFP_KERNEL);
 	if (ss_data == NULL)
 		goto out_free_info;

diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
index 5f8fba45d98d..dd33218dcbab 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
@@ -1105,7 +1105,7 @@ struct dmcu *dce_dmcu_create(
 	const struct dce_dmcu_shift *dmcu_shift,
 	const struct dce_dmcu_mask *dmcu_mask)
 {
-	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_KERNEL);
+	struct dce_dmcu *dmcu_dce = kzalloc_obj(*dmcu_dce, GFP_KERNEL);

 	if (dmcu_dce == NULL) {
 		BREAK_TO_DEBUGGER();
@@ -1126,7 +1126,7 @@ struct dmcu *dcn10_dmcu_create(
 	const struct dce_dmcu_shift *dmcu_shift,
 	const struct dce_dmcu_mask *dmcu_mask)
 {
-	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_KERNEL);
+	struct dce_dmcu *dmcu_dce = kzalloc_obj(*dmcu_dce, GFP_KERNEL);

 	if (dmcu_dce == NULL) {
 		BREAK_TO_DEBUGGER();
@@ -1147,7 +1147,7 @@ struct dmcu *dcn20_dmcu_create(
 	const struct dce_dmcu_shift *dmcu_shift,
 	const struct dce_dmcu_mask *dmcu_mask)
 {
-	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_KERNEL);
+	struct dce_dmcu *dmcu_dce = kzalloc_obj(*dmcu_dce, GFP_KERNEL);

 	if (dmcu_dce == NULL) {
 		BREAK_TO_DEBUGGER();
@@ -1168,7 +1168,7 @@ struct dmcu *dcn21_dmcu_create(
 	const struct dce_dmcu_shift *dmcu_shift,
 	const struct dce_dmcu_mask *dmcu_mask)
 {
-	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_KERNEL);
+	struct dce_dmcu *dmcu_dce = kzalloc_obj(*dmcu_dce, GFP_KERNEL);

 	if (dmcu_dce == NULL) {
 		BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dmub_abm.c b/drivers/gpu/drm/amd/display/dc/dce/dmub_abm.c
index 3b9011ef9b68..11ba6e59f5b5 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dmub_abm.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dmub_abm.c
@@ -222,7 +222,7 @@ struct abm *dmub_abm_create(
 	const struct dce_abm_mask *abm_mask)
 {
 	if (ctx->dc->caps.dmcub_support) {
-		struct dce_abm *abm_dce = kzalloc(sizeof(*abm_dce), GFP_KERNEL);
+		struct dce_abm *abm_dce = kzalloc_obj(*abm_dce, GFP_KERNEL);

 		if (abm_dce == NULL) {
 			BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c b/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c
index 87af4fdc04a6..4527e35a0666 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c
@@ -488,7 +488,7 @@ static void dmub_psr_construct(struct dmub_psr *psr, struct dc_context *ctx)
  */
 struct dmub_psr *dmub_psr_create(struct dc_context *ctx)
 {
-	struct dmub_psr *psr = kzalloc(sizeof(struct dmub_psr), GFP_KERNEL);
+	struct dmub_psr *psr = kzalloc_obj(struct dmub_psr, GFP_KERNEL);

 	if (psr == NULL) {
 		BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dmub_replay.c b/drivers/gpu/drm/amd/display/dc/dce/dmub_replay.c
index fd8244c94687..c590c9274f21 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dmub_replay.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dmub_replay.c
@@ -438,7 +438,7 @@ static void dmub_replay_construct(struct dmub_replay *replay, struct dc_context
  */
 struct dmub_replay *dmub_replay_create(struct dc_context *ctx)
 {
-	struct dmub_replay *replay = kzalloc(sizeof(struct dmub_replay), GFP_KERNEL);
+	struct dmub_replay *replay = kzalloc_obj(struct dmub_replay, GFP_KERNEL);

 	if (replay == NULL) {
 		BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c
index 59a0961b49da..68849d518e76 100644
--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c
+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c
@@ -394,7 +394,7 @@ void dce110_compressor_set_fbc_invalidation_triggers(
 struct compressor *dce110_compressor_create(struct dc_context *ctx)
 {
 	struct dce110_compressor *cp110 =
-		kzalloc(sizeof(struct dce110_compressor), GFP_KERNEL);
+		kzalloc_obj(struct dce110_compressor, GFP_KERNEL);

 	if (!cp110)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_compressor.c b/drivers/gpu/drm/amd/display/dc/dce112/dce112_compressor.c
index faae12cf7968..24effd7d3ea3 100644
--- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_compressor.c
+++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_compressor.c
@@ -831,7 +831,7 @@ void dce112_compressor_construct(struct dce112_compressor *compressor,
 struct compressor *dce112_compressor_create(struct dc_context *ctx)
 {
 	struct dce112_compressor *cp110 =
-		kzalloc(sizeof(struct dce112_compressor), GFP_KERNEL);
+		kzalloc_obj(struct dce112_compressor, GFP_KERNEL);

 	if (!cp110)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/dio/virtual/virtual_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dio/virtual/virtual_stream_encoder.c
index c5d2e9404d94..f30eeda44842 100644
--- a/drivers/gpu/drm/amd/display/dc/dio/virtual/virtual_stream_encoder.c
+++ b/drivers/gpu/drm/amd/display/dc/dio/virtual/virtual_stream_encoder.c
@@ -159,7 +159,7 @@ bool virtual_stream_encoder_construct(
 struct stream_encoder *virtual_stream_encoder_create(
 	struct dc_context *ctx, struct dc_bios *bp)
 {
-	struct stream_encoder *enc = kzalloc(sizeof(*enc), GFP_KERNEL);
+	struct stream_encoder *enc = kzalloc_obj(*enc, GFP_KERNEL);

 	if (!enc)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/dwb/dcn30/dcn30_dwb_cm.c b/drivers/gpu/drm/amd/display/dc/dwb/dcn30/dcn30_dwb_cm.c
index 03a50c32fcfe..c4b1a337ac92 100644
--- a/drivers/gpu/drm/amd/display/dc/dwb/dcn30/dcn30_dwb_cm.c
+++ b/drivers/gpu/drm/amd/display/dc/dwb/dcn30/dcn30_dwb_cm.c
@@ -280,7 +280,7 @@ bool dwb3_ogam_set_input_transfer_func(
 	if (in_transfer_func_dwb_ogam == NULL)
 		return result;

-	dwb_ogam_lut = kzalloc(sizeof(*dwb_ogam_lut), GFP_KERNEL);
+	dwb_ogam_lut = kzalloc_obj(*dwb_ogam_lut, GFP_KERNEL);

 	if (dwb_ogam_lut) {
 		cm_helper_translate_curve_to_hw_format(dwbc->ctx,
diff --git a/drivers/gpu/drm/amd/display/dc/gpio/gpio_base.c b/drivers/gpu/drm/amd/display/dc/gpio/gpio_base.c
index 8183cdf517b8..4e3a5b3513d8 100644
--- a/drivers/gpu/drm/amd/display/dc/gpio/gpio_base.c
+++ b/drivers/gpu/drm/amd/display/dc/gpio/gpio_base.c
@@ -270,7 +270,7 @@ struct gpio *dal_gpio_create(
 	uint32_t en,
 	enum gpio_pin_output_state output_state)
 {
-	struct gpio *gpio = kzalloc(sizeof(struct gpio), GFP_KERNEL);
+	struct gpio *gpio = kzalloc_obj(struct gpio, GFP_KERNEL);

 	if (!gpio) {
 		ASSERT_CRITICAL(false);
diff --git a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
index 942d9f0b6df2..fd7be0a35d0f 100644
--- a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
+++ b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
@@ -58,7 +58,7 @@ struct gpio_service *dal_gpio_service_create(
 	struct gpio_service *service;
 	int32_t index_of_id;

-	service = kzalloc(sizeof(struct gpio_service), GFP_KERNEL);
+	service = kzalloc_obj(struct gpio_service, GFP_KERNEL);

 	if (!service) {
 		BREAK_TO_DEBUGGER();
@@ -498,7 +498,7 @@ struct ddc *dal_gpio_create_ddc(
 	if (!service->translate.funcs->offset_to_id(offset, mask, &id, &en))
 		return NULL;

-	ddc = kzalloc(sizeof(struct ddc), GFP_KERNEL);
+	ddc = kzalloc_obj(struct ddc, GFP_KERNEL);

 	if (!ddc) {
 		BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/gpio/hw_ddc.c b/drivers/gpu/drm/amd/display/dc/gpio/hw_ddc.c
index d9e6e70dc394..05fa4119bf55 100644
--- a/drivers/gpu/drm/amd/display/dc/gpio/hw_ddc.c
+++ b/drivers/gpu/drm/amd/display/dc/gpio/hw_ddc.c
@@ -233,7 +233,7 @@ void dal_hw_ddc_init(
 		*hw_ddc = NULL;
 	}

-	*hw_ddc = kzalloc(sizeof(struct hw_ddc), GFP_KERNEL);
+	*hw_ddc = kzalloc_obj(struct hw_ddc, GFP_KERNEL);
 	if (!*hw_ddc) {
 		ASSERT_CRITICAL(false);
 		return;
diff --git a/drivers/gpu/drm/amd/display/dc/gpio/hw_generic.c b/drivers/gpu/drm/amd/display/dc/gpio/hw_generic.c
index 6cd50232c432..61bbcade18cb 100644
--- a/drivers/gpu/drm/amd/display/dc/gpio/hw_generic.c
+++ b/drivers/gpu/drm/amd/display/dc/gpio/hw_generic.c
@@ -111,7 +111,7 @@ void dal_hw_generic_init(
 		*hw_generic = NULL;
 	}

-	*hw_generic = kzalloc(sizeof(struct hw_generic), GFP_KERNEL);
+	*hw_generic = kzalloc_obj(struct hw_generic, GFP_KERNEL);
 	if (!*hw_generic) {
 		ASSERT_CRITICAL(false);
 		return;
diff --git a/drivers/gpu/drm/amd/display/dc/gpio/hw_hpd.c b/drivers/gpu/drm/amd/display/dc/gpio/hw_hpd.c
index 01ec451004f7..ee7d794a8c60 100644
--- a/drivers/gpu/drm/amd/display/dc/gpio/hw_hpd.c
+++ b/drivers/gpu/drm/amd/display/dc/gpio/hw_hpd.c
@@ -132,7 +132,7 @@ void dal_hw_hpd_init(
 		*hw_hpd = NULL;
 	}

-	*hw_hpd = kzalloc(sizeof(struct hw_hpd), GFP_KERNEL);
+	*hw_hpd = kzalloc_obj(struct hw_hpd, GFP_KERNEL);
 	if (!*hw_hpd) {
 		ASSERT_CRITICAL(false);
 		return;
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c b/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
index 5243177c1faa..7083c57da007 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
@@ -2399,7 +2399,7 @@ static int dcn10_align_pixel_clocks(struct dc *dc, int group_size,

 	DC_LOGGER_INIT(dc_ctx->logger);

-	hw_crtc_timing = kcalloc(MAX_PIPES, sizeof(*hw_crtc_timing), GFP_KERNEL);
+	hw_crtc_timing = kzalloc_objs(*hw_crtc_timing, MAX_PIPES, GFP_KERNEL);
 	if (!hw_crtc_timing)
 		return master;

diff --git a/drivers/gpu/drm/amd/display/dc/irq/dce110/irq_service_dce110.c b/drivers/gpu/drm/amd/display/dc/irq/dce110/irq_service_dce110.c
index bb576a9c5fdb..002210b6bb62 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dce110/irq_service_dce110.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dce110/irq_service_dce110.c
@@ -419,8 +419,7 @@ static void dce110_irq_construct(struct irq_service *irq_service,
 struct irq_service *
 dal_irq_service_dce110_create(struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dce120/irq_service_dce120.c b/drivers/gpu/drm/amd/display/dc/irq/dce120/irq_service_dce120.c
index 33ce470e4c88..47714407252d 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dce120/irq_service_dce120.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dce120/irq_service_dce120.c
@@ -257,8 +257,7 @@ static void dce120_irq_construct(
 struct irq_service *dal_irq_service_dce120_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dce60/irq_service_dce60.c b/drivers/gpu/drm/amd/display/dc/irq/dce60/irq_service_dce60.c
index d777b85e70da..47a2a53979db 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dce60/irq_service_dce60.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dce60/irq_service_dce60.c
@@ -355,8 +355,7 @@ static void dce60_irq_construct(
 struct irq_service *dal_irq_service_dce60_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dce80/irq_service_dce80.c b/drivers/gpu/drm/amd/display/dc/irq/dce80/irq_service_dce80.c
index 3a9163acb49b..bad0e02713f8 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dce80/irq_service_dce80.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dce80/irq_service_dce80.c
@@ -267,8 +267,7 @@ static void dce80_irq_construct(
 struct irq_service *dal_irq_service_dce80_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn10/irq_service_dcn10.c b/drivers/gpu/drm/amd/display/dc/irq/dcn10/irq_service_dcn10.c
index 4ce9edd16344..51f3a5042788 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn10/irq_service_dcn10.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn10/irq_service_dcn10.c
@@ -369,8 +369,7 @@ static void dcn10_irq_construct(
 struct irq_service *dal_irq_service_dcn10_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.c b/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.c
index 5847af0e66cb..cd09fa6e6706 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn20/irq_service_dcn20.c
@@ -374,8 +374,7 @@ static void dcn20_irq_construct(
 struct irq_service *dal_irq_service_dcn20_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn201/irq_service_dcn201.c b/drivers/gpu/drm/amd/display/dc/irq/dcn201/irq_service_dcn201.c
index 6417011d2246..7ca085b418e3 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn201/irq_service_dcn201.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn201/irq_service_dcn201.c
@@ -328,8 +328,7 @@ static void dcn201_irq_construct(
 struct irq_service *dal_irq_service_dcn201_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c b/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
index 71d2f065140b..67fbcce3409f 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
@@ -402,8 +402,7 @@ static void dcn21_irq_construct(
 struct irq_service *dal_irq_service_dcn21_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn30/irq_service_dcn30.c b/drivers/gpu/drm/amd/display/dc/irq/dcn30/irq_service_dcn30.c
index 2a4080bdcf6b..10a16dc17487 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn30/irq_service_dcn30.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn30/irq_service_dcn30.c
@@ -411,8 +411,7 @@ static void dcn30_irq_construct(
 struct irq_service *dal_irq_service_dcn30_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn302/irq_service_dcn302.c b/drivers/gpu/drm/amd/display/dc/irq/dcn302/irq_service_dcn302.c
index 624f1ac309f8..55c863790402 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn302/irq_service_dcn302.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn302/irq_service_dcn302.c
@@ -377,7 +377,7 @@ static void dcn302_irq_construct(struct irq_service *irq_service, struct irq_ser

 struct irq_service *dal_irq_service_dcn302_create(struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service), GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn303/irq_service_dcn303.c b/drivers/gpu/drm/amd/display/dc/irq/dcn303/irq_service_dcn303.c
index 137caffae916..2ce7c829a445 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn303/irq_service_dcn303.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn303/irq_service_dcn303.c
@@ -273,7 +273,7 @@ static void dcn303_irq_construct(struct irq_service *irq_service, struct irq_ser

 struct irq_service *dal_irq_service_dcn303_create(struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service), GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn31/irq_service_dcn31.c b/drivers/gpu/drm/amd/display/dc/irq/dcn31/irq_service_dcn31.c
index 921cb167d920..710cda204bee 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn31/irq_service_dcn31.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn31/irq_service_dcn31.c
@@ -393,8 +393,7 @@ static void dcn31_irq_construct(
 struct irq_service *dal_irq_service_dcn31_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn314/irq_service_dcn314.c b/drivers/gpu/drm/amd/display/dc/irq/dcn314/irq_service_dcn314.c
index 0118fd6e5db0..8cb120a3ceb7 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn314/irq_service_dcn314.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn314/irq_service_dcn314.c
@@ -395,8 +395,7 @@ static void dcn314_irq_construct(
 struct irq_service *dal_irq_service_dcn314_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn315/irq_service_dcn315.c b/drivers/gpu/drm/amd/display/dc/irq/dcn315/irq_service_dcn315.c
index adebfc888618..f3a0f8f176d8 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn315/irq_service_dcn315.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn315/irq_service_dcn315.c
@@ -400,8 +400,7 @@ static void dcn315_irq_construct(
 struct irq_service *dal_irq_service_dcn315_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn32/irq_service_dcn32.c b/drivers/gpu/drm/amd/display/dc/irq/dcn32/irq_service_dcn32.c
index e9e315c75d76..80b388ac3511 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn32/irq_service_dcn32.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn32/irq_service_dcn32.c
@@ -425,8 +425,7 @@ static void dcn32_irq_construct(
 struct irq_service *dal_irq_service_dcn32_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn35/irq_service_dcn35.c b/drivers/gpu/drm/amd/display/dc/irq/dcn35/irq_service_dcn35.c
index 79e5e8c137ca..44b3c3b0c657 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn35/irq_service_dcn35.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn35/irq_service_dcn35.c
@@ -389,8 +389,7 @@ static void dcn35_irq_construct(
 struct irq_service *dal_irq_service_dcn35_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn351/irq_service_dcn351.c b/drivers/gpu/drm/amd/display/dc/irq/dcn351/irq_service_dcn351.c
index 163b8ee9ebf7..e4600282cf18 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn351/irq_service_dcn351.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn351/irq_service_dcn351.c
@@ -371,8 +371,7 @@ static void dcn351_irq_construct(
 struct irq_service *dal_irq_service_dcn351_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn36/irq_service_dcn36.c b/drivers/gpu/drm/amd/display/dc/irq/dcn36/irq_service_dcn36.c
index f716ab0fd30e..e81077f764df 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn36/irq_service_dcn36.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn36/irq_service_dcn36.c
@@ -370,8 +370,7 @@ static void dcn36_irq_construct(
 struct irq_service *dal_irq_service_dcn36_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn401/irq_service_dcn401.c b/drivers/gpu/drm/amd/display/dc/irq/dcn401/irq_service_dcn401.c
index fd9bb1950c20..97c80aa30e8b 100644
--- a/drivers/gpu/drm/amd/display/dc/irq/dcn401/irq_service_dcn401.c
+++ b/drivers/gpu/drm/amd/display/dc/irq/dcn401/irq_service_dcn401.c
@@ -403,8 +403,7 @@ static void dcn401_irq_construct(
 struct irq_service *dal_irq_service_dcn401_create(
 	struct irq_service_init_data *init_data)
 {
-	struct irq_service *irq_service = kzalloc(sizeof(*irq_service),
-						  GFP_KERNEL);
+	struct irq_service *irq_service = kzalloc_obj(*irq_service, GFP_KERNEL);

 	if (!irq_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_factory.c b/drivers/gpu/drm/amd/display/dc/link/link_factory.c
index 49db8123f08c..e1cf56cdc8c0 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_factory.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_factory.c
@@ -302,7 +302,7 @@ static void construct_link_service(struct link_service *link_srv)

 struct link_service *link_create_link_service(void)
 {
-	struct link_service *link_srv = kzalloc(sizeof(*link_srv), GFP_KERNEL);
+	struct link_service *link_srv = kzalloc_obj(*link_srv, GFP_KERNEL);

 	if (link_srv == NULL)
 		goto fail;
@@ -897,8 +897,7 @@ static bool link_construct(struct dc_link *link,

 struct dc_link *link_create(const struct link_init_data *init_params)
 {
-	struct dc_link *link =
-			kzalloc(sizeof(*link), GFP_KERNEL);
+	struct dc_link *link = kzalloc_obj(*link, GFP_KERNEL);

 	if (NULL == link)
 		goto alloc_fail;
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c
index 5d2bcce2f669..1a7c73263615 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c
@@ -156,7 +156,7 @@ struct ddc_service *link_create_ddc_service(
 {
 	struct ddc_service *ddc_service;

-	ddc_service = kzalloc(sizeof(struct ddc_service), GFP_KERNEL);
+	ddc_service = kzalloc_obj(struct ddc_service, GFP_KERNEL);

 	if (!ddc_service)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/pg/dcn35/dcn35_pg_cntl.c b/drivers/gpu/drm/amd/display/dc/pg/dcn35/dcn35_pg_cntl.c
index 72bd43f9bbe2..0df983c70ba3 100644
--- a/drivers/gpu/drm/amd/display/dc/pg/dcn35/dcn35_pg_cntl.c
+++ b/drivers/gpu/drm/amd/display/dc/pg/dcn35/dcn35_pg_cntl.c
@@ -542,7 +542,7 @@ struct pg_cntl *pg_cntl35_create(
 	const struct pg_cntl_shift *pg_cntl_shift,
 	const struct pg_cntl_mask *pg_cntl_mask)
 {
-	struct dcn_pg_cntl *pg_cntl_dcn = kzalloc(sizeof(*pg_cntl_dcn), GFP_KERNEL);
+	struct dcn_pg_cntl *pg_cntl_dcn = kzalloc_obj(*pg_cntl_dcn, GFP_KERNEL);
 	struct pg_cntl *base;

 	if (pg_cntl_dcn == NULL) {
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dce100/dce100_resource.c
index 05f7ff60f8f5..e562c71fb432 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dce100/dce100_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dce100/dce100_resource.c
@@ -472,7 +472,7 @@ static struct timing_generator *dce100_timing_generator_create(
 		const struct dce110_timing_generator_offsets *offsets)
 {
 	struct dce110_timing_generator *tg110 =
-		kzalloc(sizeof(struct dce110_timing_generator), GFP_KERNEL);
+		kzalloc_obj(struct dce110_timing_generator, GFP_KERNEL);

 	if (!tg110)
 		return NULL;
@@ -486,7 +486,7 @@ static struct stream_encoder *dce100_stream_encoder_create(
 	struct dc_context *ctx)
 {
 	struct dce110_stream_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_stream_encoder, GFP_KERNEL);

 	if (!enc110)
 		return NULL;
@@ -520,7 +520,7 @@ static const struct dce_hwseq_mask hwseq_mask = {
 static struct dce_hwseq *dce100_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -573,8 +573,8 @@ static struct mem_input *dce100_mem_input_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dce_mem_input *dce_mi = kzalloc(sizeof(struct dce_mem_input),
-					       GFP_KERNEL);
+	struct dce_mem_input *dce_mi = kzalloc_obj(struct dce_mem_input,
+						   GFP_KERNEL);

 	if (!dce_mi) {
 		BREAK_TO_DEBUGGER();
@@ -597,7 +597,7 @@ static struct transform *dce100_transform_create(
 	uint32_t inst)
 {
 	struct dce_transform *transform =
-		kzalloc(sizeof(struct dce_transform), GFP_KERNEL);
+		kzalloc_obj(struct dce_transform, GFP_KERNEL);

 	if (!transform)
 		return NULL;
@@ -610,7 +610,7 @@ static struct transform *dce100_transform_create(
 static struct input_pixel_processor *dce100_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
-	struct dce_ipp *ipp = kzalloc(sizeof(struct dce_ipp), GFP_KERNEL);
+	struct dce_ipp *ipp = kzalloc_obj(struct dce_ipp, GFP_KERNEL);

 	if (!ipp) {
 		BREAK_TO_DEBUGGER();
@@ -634,7 +634,7 @@ static struct link_encoder *dce100_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dce110_link_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_link_encoder, GFP_KERNEL);
 	int link_regs_id;

 	if (!enc110)
@@ -669,7 +669,7 @@ static struct link_encoder *dce100_link_encoder_create(
 static struct panel_cntl *dce100_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -688,7 +688,7 @@ static struct output_pixel_processor *dce100_opp_create(
 	uint32_t inst)
 {
 	struct dce110_opp *opp =
-		kzalloc(sizeof(struct dce110_opp), GFP_KERNEL);
+		kzalloc_obj(struct dce110_opp, GFP_KERNEL);

 	if (!opp)
 		return NULL;
@@ -703,7 +703,7 @@ static struct dce_aux *dce100_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -741,7 +741,7 @@ static struct dce_i2c_hw *dce100_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -759,7 +759,7 @@ static struct clock_source *dce100_clock_source_create(
 	bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -1215,7 +1215,7 @@ struct resource_pool *dce100_create_resource_pool(
 	struct dc  *dc)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dce110/dce110_resource.c
index 7c09825cd9bd..68964e8ce10b 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dce110/dce110_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dce110/dce110_resource.c
@@ -516,7 +516,7 @@ static struct timing_generator *dce110_timing_generator_create(
 		const struct dce110_timing_generator_offsets *offsets)
 {
 	struct dce110_timing_generator *tg110 =
-		kzalloc(sizeof(struct dce110_timing_generator), GFP_KERNEL);
+		kzalloc_obj(struct dce110_timing_generator, GFP_KERNEL);

 	if (!tg110)
 		return NULL;
@@ -530,7 +530,7 @@ static struct stream_encoder *dce110_stream_encoder_create(
 	struct dc_context *ctx)
 {
 	struct dce110_stream_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_stream_encoder, GFP_KERNEL);

 	if (!enc110)
 		return NULL;
@@ -563,7 +563,7 @@ static const struct dce_hwseq_mask hwseq_mask = {
 static struct dce_hwseq *dce110_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -608,8 +608,8 @@ static struct mem_input *dce110_mem_input_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dce_mem_input *dce_mi = kzalloc(sizeof(struct dce_mem_input),
-					       GFP_KERNEL);
+	struct dce_mem_input *dce_mi = kzalloc_obj(struct dce_mem_input,
+						   GFP_KERNEL);

 	if (!dce_mi) {
 		BREAK_TO_DEBUGGER();
@@ -632,7 +632,7 @@ static struct transform *dce110_transform_create(
 	uint32_t inst)
 {
 	struct dce_transform *transform =
-		kzalloc(sizeof(struct dce_transform), GFP_KERNEL);
+		kzalloc_obj(struct dce_transform, GFP_KERNEL);

 	if (!transform)
 		return NULL;
@@ -645,7 +645,7 @@ static struct transform *dce110_transform_create(
 static struct input_pixel_processor *dce110_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
-	struct dce_ipp *ipp = kzalloc(sizeof(struct dce_ipp), GFP_KERNEL);
+	struct dce_ipp *ipp = kzalloc_obj(struct dce_ipp, GFP_KERNEL);

 	if (!ipp) {
 		BREAK_TO_DEBUGGER();
@@ -669,7 +669,7 @@ static struct link_encoder *dce110_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dce110_link_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_link_encoder, GFP_KERNEL);
 	int link_regs_id;

 	if (!enc110 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
@@ -690,7 +690,7 @@ static struct link_encoder *dce110_link_encoder_create(
 static struct panel_cntl *dce110_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -709,7 +709,7 @@ static struct output_pixel_processor *dce110_opp_create(
 	uint32_t inst)
 {
 	struct dce110_opp *opp =
-		kzalloc(sizeof(struct dce110_opp), GFP_KERNEL);
+		kzalloc_obj(struct dce110_opp, GFP_KERNEL);

 	if (!opp)
 		return NULL;
@@ -724,7 +724,7 @@ static struct dce_aux *dce110_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -762,7 +762,7 @@ static struct dce_i2c_hw *dce110_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -780,7 +780,7 @@ static struct clock_source *dce110_clock_source_create(
 	bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -1250,14 +1250,12 @@ static const struct resource_funcs dce110_res_pool_funcs = {

 static bool underlay_create(struct dc_context *ctx, struct resource_pool *pool)
 {
-	struct dce110_timing_generator *dce110_tgv = kzalloc(sizeof(*dce110_tgv),
-							     GFP_KERNEL);
-	struct dce_transform *dce110_xfmv = kzalloc(sizeof(*dce110_xfmv),
-						    GFP_KERNEL);
-	struct dce_mem_input *dce110_miv = kzalloc(sizeof(*dce110_miv),
-						   GFP_KERNEL);
-	struct dce110_opp *dce110_oppv = kzalloc(sizeof(*dce110_oppv),
-						 GFP_KERNEL);
+	struct dce110_timing_generator *dce110_tgv = kzalloc_obj(*dce110_tgv,
+								 GFP_KERNEL);
+	struct dce_transform *dce110_xfmv = kzalloc_obj(*dce110_xfmv,
+							GFP_KERNEL);
+	struct dce_mem_input *dce110_miv = kzalloc_obj(*dce110_miv, GFP_KERNEL);
+	struct dce110_opp *dce110_oppv = kzalloc_obj(*dce110_oppv, GFP_KERNEL);

 	if (!dce110_tgv || !dce110_xfmv || !dce110_miv || !dce110_oppv) {
 		kfree(dce110_tgv);
@@ -1545,7 +1543,7 @@ struct resource_pool *dce110_create_resource_pool(
 	struct hw_asic_id asic_id)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce112/dce112_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dce112/dce112_resource.c
index 3f0a6bc4dcc2..9c3f6e96f0ae 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dce112/dce112_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dce112/dce112_resource.c
@@ -497,7 +497,7 @@ static struct timing_generator *dce112_timing_generator_create(
 		const struct dce110_timing_generator_offsets *offsets)
 {
 	struct dce110_timing_generator *tg110 =
-		kzalloc(sizeof(struct dce110_timing_generator), GFP_KERNEL);
+		kzalloc_obj(struct dce110_timing_generator, GFP_KERNEL);

 	if (!tg110)
 		return NULL;
@@ -511,7 +511,7 @@ static struct stream_encoder *dce112_stream_encoder_create(
 	struct dc_context *ctx)
 {
 	struct dce110_stream_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_stream_encoder, GFP_KERNEL);

 	if (!enc110)
 		return NULL;
@@ -540,7 +540,7 @@ static const struct dce_hwseq_mask hwseq_mask = {
 static struct dce_hwseq *dce112_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -580,8 +580,8 @@ static struct mem_input *dce112_mem_input_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dce_mem_input *dce_mi = kzalloc(sizeof(struct dce_mem_input),
-					       GFP_KERNEL);
+	struct dce_mem_input *dce_mi = kzalloc_obj(struct dce_mem_input,
+						   GFP_KERNEL);

 	if (!dce_mi) {
 		BREAK_TO_DEBUGGER();
@@ -603,7 +603,7 @@ static struct transform *dce112_transform_create(
 	uint32_t inst)
 {
 	struct dce_transform *transform =
-		kzalloc(sizeof(struct dce_transform), GFP_KERNEL);
+		kzalloc_obj(struct dce_transform, GFP_KERNEL);

 	if (!transform)
 		return NULL;
@@ -630,7 +630,7 @@ static struct link_encoder *dce112_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dce110_link_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_link_encoder, GFP_KERNEL);
 	int link_regs_id;

 	if (!enc110 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
@@ -651,7 +651,7 @@ static struct link_encoder *dce112_link_encoder_create(
 static struct panel_cntl *dce112_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -668,7 +668,7 @@ static struct panel_cntl *dce112_panel_cntl_create(const struct panel_cntl_init_
 static struct input_pixel_processor *dce112_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
-	struct dce_ipp *ipp = kzalloc(sizeof(struct dce_ipp), GFP_KERNEL);
+	struct dce_ipp *ipp = kzalloc_obj(struct dce_ipp, GFP_KERNEL);

 	if (!ipp) {
 		BREAK_TO_DEBUGGER();
@@ -685,7 +685,7 @@ static struct output_pixel_processor *dce112_opp_create(
 	uint32_t inst)
 {
 	struct dce110_opp *opp =
-		kzalloc(sizeof(struct dce110_opp), GFP_KERNEL);
+		kzalloc_obj(struct dce110_opp, GFP_KERNEL);

 	if (!opp)
 		return NULL;
@@ -700,7 +700,7 @@ static struct dce_aux *dce112_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -738,7 +738,7 @@ static struct dce_i2c_hw *dce112_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -756,7 +756,7 @@ static struct clock_source *dce112_clock_source_create(
 	bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -1423,7 +1423,7 @@ struct resource_pool *dce112_create_resource_pool(
 	struct dc *dc)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dce120/dce120_resource.c
index 92890784caa6..48f8a418f324 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dce120/dce120_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dce120/dce120_resource.c
@@ -428,7 +428,7 @@ static struct output_pixel_processor *dce120_opp_create(
 	uint32_t inst)
 {
 	struct dce110_opp *opp =
-		kzalloc(sizeof(struct dce110_opp), GFP_KERNEL);
+		kzalloc_obj(struct dce110_opp, GFP_KERNEL);

 	if (!opp)
 		return NULL;
@@ -442,7 +442,7 @@ static struct dce_aux *dce120_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -480,7 +480,7 @@ static struct dce_i2c_hw *dce120_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -541,8 +541,7 @@ static struct clock_source *dce120_clock_source_create(
 	const struct dce110_clk_src_regs *regs,
 	bool dp_clk_src)
 {
-	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(*clk_src), GFP_KERNEL);
+	struct dce110_clk_src *clk_src = kzalloc_obj(*clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -583,7 +582,7 @@ static struct timing_generator *dce120_timing_generator_create(
 		const struct dce110_timing_generator_offsets *offsets)
 {
 	struct dce110_timing_generator *tg110 =
-		kzalloc(sizeof(struct dce110_timing_generator), GFP_KERNEL);
+		kzalloc_obj(struct dce110_timing_generator, GFP_KERNEL);

 	if (!tg110)
 		return NULL;
@@ -714,7 +713,7 @@ static struct link_encoder *dce120_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dce110_link_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_link_encoder, GFP_KERNEL);
 	int link_regs_id;

 	if (!enc110 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
@@ -736,7 +735,7 @@ static struct link_encoder *dce120_link_encoder_create(
 static struct panel_cntl *dce120_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -753,7 +752,7 @@ static struct panel_cntl *dce120_panel_cntl_create(const struct panel_cntl_init_
 static struct input_pixel_processor *dce120_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
-	struct dce_ipp *ipp = kzalloc(sizeof(struct dce_ipp), GFP_KERNEL);
+	struct dce_ipp *ipp = kzalloc_obj(struct dce_ipp, GFP_KERNEL);

 	if (!ipp) {
 		BREAK_TO_DEBUGGER();
@@ -770,7 +769,7 @@ static struct stream_encoder *dce120_stream_encoder_create(
 	struct dc_context *ctx)
 {
 	struct dce110_stream_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_stream_encoder, GFP_KERNEL);

 	if (!enc110)
 		return NULL;
@@ -813,7 +812,7 @@ static const struct dce_hwseq_mask dce121_hwseq_mask = {
 static struct dce_hwseq *dce120_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -827,7 +826,7 @@ static struct dce_hwseq *dce120_hwseq_create(
 static struct dce_hwseq *dce121_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -875,8 +874,8 @@ static struct mem_input *dce120_mem_input_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dce_mem_input *dce_mi = kzalloc(sizeof(struct dce_mem_input),
-					       GFP_KERNEL);
+	struct dce_mem_input *dce_mi = kzalloc_obj(struct dce_mem_input,
+						   GFP_KERNEL);

 	if (!dce_mi) {
 		BREAK_TO_DEBUGGER();
@@ -892,7 +891,7 @@ static struct transform *dce120_transform_create(
 	uint32_t inst)
 {
 	struct dce_transform *transform =
-		kzalloc(sizeof(struct dce_transform), GFP_KERNEL);
+		kzalloc_obj(struct dce_transform, GFP_KERNEL);

 	if (!transform)
 		return NULL;
@@ -1296,7 +1295,7 @@ struct resource_pool *dce120_create_resource_pool(
 	struct dc *dc)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c
index 8d810d5c8781..621739d0b024 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c
@@ -507,7 +507,7 @@ static struct timing_generator *dce60_timing_generator_create(
 		const struct dce110_timing_generator_offsets *offsets)
 {
 	struct dce110_timing_generator *tg110 =
-		kzalloc(sizeof(struct dce110_timing_generator), GFP_KERNEL);
+		kzalloc_obj(struct dce110_timing_generator, GFP_KERNEL);

 	if (!tg110)
 		return NULL;
@@ -521,7 +521,7 @@ static struct output_pixel_processor *dce60_opp_create(
 	uint32_t inst)
 {
 	struct dce110_opp *opp =
-		kzalloc(sizeof(struct dce110_opp), GFP_KERNEL);
+		kzalloc_obj(struct dce110_opp, GFP_KERNEL);

 	if (!opp)
 		return NULL;
@@ -536,7 +536,7 @@ static struct dce_aux *dce60_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -574,7 +574,7 @@ static struct dce_i2c_hw *dce60_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -589,7 +589,7 @@ static struct dce_i2c_sw *dce60_i2c_sw_create(
 	struct dc_context *ctx)
 {
 	struct dce_i2c_sw *dce_i2c_sw =
-		kzalloc(sizeof(struct dce_i2c_sw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_sw, GFP_KERNEL);

 	if (!dce_i2c_sw)
 		return NULL;
@@ -603,7 +603,7 @@ static struct stream_encoder *dce60_stream_encoder_create(
 	struct dc_context *ctx)
 {
 	struct dce110_stream_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_stream_encoder, GFP_KERNEL);

 	if (!enc110)
 		return NULL;
@@ -638,7 +638,7 @@ static const struct dce_hwseq_mask hwseq_mask = {
 static struct dce_hwseq *dce60_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -683,8 +683,8 @@ static struct mem_input *dce60_mem_input_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dce_mem_input *dce_mi = kzalloc(sizeof(struct dce_mem_input),
-					       GFP_KERNEL);
+	struct dce_mem_input *dce_mi = kzalloc_obj(struct dce_mem_input,
+						   GFP_KERNEL);

 	if (!dce_mi) {
 		BREAK_TO_DEBUGGER();
@@ -707,7 +707,7 @@ static struct transform *dce60_transform_create(
 	uint32_t inst)
 {
 	struct dce_transform *transform =
-		kzalloc(sizeof(struct dce_transform), GFP_KERNEL);
+		kzalloc_obj(struct dce_transform, GFP_KERNEL);

 	if (!transform)
 		return NULL;
@@ -730,7 +730,7 @@ static struct link_encoder *dce60_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dce110_link_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_link_encoder, GFP_KERNEL);
 	int link_regs_id;

 	if (!enc110)
@@ -765,7 +765,7 @@ static struct link_encoder *dce60_link_encoder_create(
 static struct panel_cntl *dce60_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -787,7 +787,7 @@ static struct clock_source *dce60_clock_source_create(
 	bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -812,7 +812,7 @@ static void dce60_clock_source_destroy(struct clock_source **clk_src)
 static struct input_pixel_processor *dce60_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
-	struct dce_ipp *ipp = kzalloc(sizeof(struct dce_ipp), GFP_KERNEL);
+	struct dce_ipp *ipp = kzalloc_obj(struct dce_ipp, GFP_KERNEL);

 	if (!ipp) {
 		BREAK_TO_DEBUGGER();
@@ -1098,7 +1098,7 @@ struct resource_pool *dce60_create_resource_pool(
 	struct dc *dc)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
@@ -1296,7 +1296,7 @@ struct resource_pool *dce61_create_resource_pool(
 	struct dc *dc)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
@@ -1493,7 +1493,7 @@ struct resource_pool *dce64_create_resource_pool(
 	struct dc *dc)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c
index a68e799d5885..bef4a30caf7e 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c
@@ -513,7 +513,7 @@ static struct timing_generator *dce80_timing_generator_create(
 		const struct dce110_timing_generator_offsets *offsets)
 {
 	struct dce110_timing_generator *tg110 =
-		kzalloc(sizeof(struct dce110_timing_generator), GFP_KERNEL);
+		kzalloc_obj(struct dce110_timing_generator, GFP_KERNEL);

 	if (!tg110)
 		return NULL;
@@ -527,7 +527,7 @@ static struct output_pixel_processor *dce80_opp_create(
 	uint32_t inst)
 {
 	struct dce110_opp *opp =
-		kzalloc(sizeof(struct dce110_opp), GFP_KERNEL);
+		kzalloc_obj(struct dce110_opp, GFP_KERNEL);

 	if (!opp)
 		return NULL;
@@ -542,7 +542,7 @@ static struct dce_aux *dce80_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -580,7 +580,7 @@ static struct dce_i2c_hw *dce80_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -595,7 +595,7 @@ static struct dce_i2c_sw *dce80_i2c_sw_create(
 	struct dc_context *ctx)
 {
 	struct dce_i2c_sw *dce_i2c_sw =
-		kzalloc(sizeof(struct dce_i2c_sw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_sw, GFP_KERNEL);

 	if (!dce_i2c_sw)
 		return NULL;
@@ -609,7 +609,7 @@ static struct stream_encoder *dce80_stream_encoder_create(
 	struct dc_context *ctx)
 {
 	struct dce110_stream_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_stream_encoder, GFP_KERNEL);

 	if (!enc110)
 		return NULL;
@@ -644,7 +644,7 @@ static const struct dce_hwseq_mask hwseq_mask = {
 static struct dce_hwseq *dce80_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -689,8 +689,8 @@ static struct mem_input *dce80_mem_input_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dce_mem_input *dce_mi = kzalloc(sizeof(struct dce_mem_input),
-					       GFP_KERNEL);
+	struct dce_mem_input *dce_mi = kzalloc_obj(struct dce_mem_input,
+						   GFP_KERNEL);

 	if (!dce_mi) {
 		BREAK_TO_DEBUGGER();
@@ -713,7 +713,7 @@ static struct transform *dce80_transform_create(
 	uint32_t inst)
 {
 	struct dce_transform *transform =
-		kzalloc(sizeof(struct dce_transform), GFP_KERNEL);
+		kzalloc_obj(struct dce_transform, GFP_KERNEL);

 	if (!transform)
 		return NULL;
@@ -736,7 +736,7 @@ static struct link_encoder *dce80_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dce110_link_encoder *enc110 =
-		kzalloc(sizeof(struct dce110_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dce110_link_encoder, GFP_KERNEL);
 	int link_regs_id;

 	if (!enc110)
@@ -771,7 +771,7 @@ static struct link_encoder *dce80_link_encoder_create(
 static struct panel_cntl *dce80_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -793,7 +793,7 @@ static struct clock_source *dce80_clock_source_create(
 	bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -818,7 +818,7 @@ static void dce80_clock_source_destroy(struct clock_source **clk_src)
 static struct input_pixel_processor *dce80_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
-	struct dce_ipp *ipp = kzalloc(sizeof(struct dce_ipp), GFP_KERNEL);
+	struct dce_ipp *ipp = kzalloc_obj(struct dce_ipp, GFP_KERNEL);

 	if (!ipp) {
 		BREAK_TO_DEBUGGER();
@@ -1109,7 +1109,7 @@ struct resource_pool *dce80_create_resource_pool(
 	struct dc *dc)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
@@ -1309,7 +1309,7 @@ struct resource_pool *dce81_create_resource_pool(
 	struct dc *dc)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
@@ -1507,7 +1507,7 @@ struct resource_pool *dce83_create_resource_pool(
 	struct dc *dc)
 {
 	struct dce110_resource_pool *pool =
-		kzalloc(sizeof(struct dce110_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dce110_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn10/dcn10_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn10/dcn10_resource.c
index 476780a5450f..6c066576a5a5 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn10/dcn10_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn10/dcn10_resource.c
@@ -574,7 +574,7 @@ static struct dpp *dcn10_dpp_create(
 	uint32_t inst)
 {
 	struct dcn10_dpp *dpp =
-		kzalloc(sizeof(struct dcn10_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -588,7 +588,7 @@ static struct input_pixel_processor *dcn10_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn10_ipp *ipp =
-		kzalloc(sizeof(struct dcn10_ipp), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_ipp, GFP_KERNEL);

 	if (!ipp) {
 		BREAK_TO_DEBUGGER();
@@ -605,7 +605,7 @@ static struct output_pixel_processor *dcn10_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn10_opp *opp =
-		kzalloc(sizeof(struct dcn10_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -621,7 +621,7 @@ static struct dce_aux *dcn10_aux_engine_create(struct dc_context *ctx,
 					       uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -658,7 +658,7 @@ static struct dce_i2c_hw *dcn10_i2c_hw_create(struct dc_context *ctx,
 					      uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -670,8 +670,7 @@ static struct dce_i2c_hw *dcn10_i2c_hw_create(struct dc_context *ctx,
 }
 static struct mpc *dcn10_mpc_create(struct dc_context *ctx)
 {
-	struct dcn10_mpc *mpc10 = kzalloc(sizeof(struct dcn10_mpc),
-					  GFP_KERNEL);
+	struct dcn10_mpc *mpc10 = kzalloc_obj(struct dcn10_mpc, GFP_KERNEL);

 	if (!mpc10)
 		return NULL;
@@ -687,8 +686,8 @@ static struct mpc *dcn10_mpc_create(struct dc_context *ctx)

 static struct hubbub *dcn10_hubbub_create(struct dc_context *ctx)
 {
-	struct dcn10_hubbub *dcn10_hubbub = kzalloc(sizeof(struct dcn10_hubbub),
-					  GFP_KERNEL);
+	struct dcn10_hubbub *dcn10_hubbub = kzalloc_obj(struct dcn10_hubbub,
+							GFP_KERNEL);

 	if (!dcn10_hubbub)
 		return NULL;
@@ -706,7 +705,7 @@ static struct timing_generator *dcn10_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -739,7 +738,7 @@ static struct link_encoder *dcn10_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn10_link_encoder *enc10 =
-		kzalloc(sizeof(struct dcn10_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_link_encoder, GFP_KERNEL);
 	int link_regs_id;

 	if (!enc10 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
@@ -763,7 +762,7 @@ static struct link_encoder *dcn10_link_encoder_create(
 static struct panel_cntl *dcn10_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -785,7 +784,7 @@ static struct clock_source *dcn10_clock_source_create(
 	bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -821,7 +820,7 @@ static struct stream_encoder *dcn10_stream_encoder_create(
 	struct dc_context *ctx)
 {
 	struct dcn10_stream_encoder *enc1 =
-		kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);

 	if (!enc1)
 		return NULL;
@@ -847,7 +846,7 @@ static const struct dce_hwseq_mask hwseq_mask = {
 static struct dce_hwseq *dcn10_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -891,7 +890,7 @@ static void dcn10_clock_source_destroy(struct clock_source **clk_src)

 static struct pp_smu_funcs *dcn10_pp_smu_create(struct dc_context *ctx)
 {
-	struct pp_smu_funcs *pp_smu = kzalloc(sizeof(*pp_smu), GFP_KERNEL);
+	struct pp_smu_funcs *pp_smu = kzalloc_obj(*pp_smu, GFP_KERNEL);

 	if (!pp_smu)
 		return pp_smu;
@@ -984,7 +983,7 @@ static struct hubp *dcn10_hubp_create(
 	uint32_t inst)
 {
 	struct dcn10_hubp *hubp1 =
-		kzalloc(sizeof(struct dcn10_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_hubp, GFP_KERNEL);

 	if (!hubp1)
 		return NULL;
@@ -1681,7 +1680,7 @@ struct resource_pool *dcn10_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn10_resource_pool *pool =
-		kzalloc(sizeof(struct dcn10_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c
index 6731544f0981..ba83a78f7fc1 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c
@@ -736,7 +736,7 @@ struct dpp *dcn20_dpp_create(
 	uint32_t inst)
 {
 	struct dcn20_dpp *dpp =
-		kzalloc(sizeof(struct dcn20_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -754,7 +754,7 @@ struct input_pixel_processor *dcn20_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn10_ipp *ipp =
-		kzalloc(sizeof(struct dcn10_ipp), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_ipp, GFP_KERNEL);

 	if (!ipp) {
 		BREAK_TO_DEBUGGER();
@@ -771,7 +771,7 @@ struct output_pixel_processor *dcn20_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -788,7 +788,7 @@ struct dce_aux *dcn20_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -826,7 +826,7 @@ struct dce_i2c_hw *dcn20_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -838,7 +838,7 @@ struct dce_i2c_hw *dcn20_i2c_hw_create(
 }
 struct mpc *dcn20_mpc_create(struct dc_context *ctx)
 {
-	struct dcn20_mpc *mpc20 = kzalloc(sizeof(struct dcn20_mpc), GFP_KERNEL);
+	struct dcn20_mpc *mpc20 = kzalloc_obj(struct dcn20_mpc, GFP_KERNEL);

 	if (!mpc20)
 		return NULL;
@@ -855,7 +855,8 @@ struct mpc *dcn20_mpc_create(struct dc_context *ctx)
 struct hubbub *dcn20_hubbub_create(struct dc_context *ctx)
 {
 	int i;
-	struct dcn20_hubbub *hubbub = kzalloc(sizeof(struct dcn20_hubbub), GFP_KERNEL);
+	struct dcn20_hubbub *hubbub = kzalloc_obj(struct dcn20_hubbub,
+						  GFP_KERNEL);

 	if (!hubbub)
 		return NULL;
@@ -883,7 +884,7 @@ struct timing_generator *dcn20_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -917,7 +918,7 @@ struct link_encoder *dcn20_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);
 	int link_regs_id;

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
@@ -941,7 +942,7 @@ struct link_encoder *dcn20_link_encoder_create(
 static struct panel_cntl *dcn20_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -963,7 +964,7 @@ static struct clock_source *dcn20_clock_source_create(
 	bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -999,7 +1000,7 @@ struct stream_encoder *dcn20_stream_encoder_create(
 	struct dc_context *ctx)
 {
 	struct dcn10_stream_encoder *enc1 =
-		kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);

 	if (!enc1)
 		return NULL;
@@ -1031,7 +1032,7 @@ static const struct dce_hwseq_mask hwseq_mask = {
 struct dce_hwseq *dcn20_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -1062,7 +1063,7 @@ struct display_stream_compressor *dcn20_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1199,7 +1200,7 @@ struct hubp *dcn20_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -2130,7 +2131,8 @@ enum dc_status dcn20_validate_bandwidth(struct dc *dc, struct dc_state *context,
 	bool voltage_supported;
 	display_e2e_pipe_params_st *pipes;

-	pipes = kcalloc(dc->res_pool->pipe_count, sizeof(display_e2e_pipe_params_st), GFP_KERNEL);
+	pipes = kzalloc_objs(display_e2e_pipe_params_st,
+			     dc->res_pool->pipe_count, GFP_KERNEL);
 	if (!pipes)
 		return DC_FAIL_BANDWIDTH_VALIDATE;

@@ -2240,8 +2242,8 @@ bool dcn20_dwbc_create(struct dc_context *ctx, struct resource_pool *pool)
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn20_dwbc *dwbc20 = kzalloc(sizeof(struct dcn20_dwbc),
-						    GFP_KERNEL);
+		struct dcn20_dwbc *dwbc20 = kzalloc_obj(struct dcn20_dwbc,
+							GFP_KERNEL);

 		if (!dwbc20) {
 			dm_error("DC: failed to create dwbc20!\n");
@@ -2265,8 +2267,8 @@ bool dcn20_mmhubbub_create(struct dc_context *ctx, struct resource_pool *pool)
 	ASSERT(pipe_count > 0);

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn20_mmhubbub *mcif_wb20 = kzalloc(sizeof(struct dcn20_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn20_mmhubbub *mcif_wb20 = kzalloc_obj(struct dcn20_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb20) {
 			dm_error("DC: failed to create mcif_wb20!\n");
@@ -2286,7 +2288,7 @@ bool dcn20_mmhubbub_create(struct dc_context *ctx, struct resource_pool *pool)

 static struct pp_smu_funcs *dcn20_pp_smu_create(struct dc_context *ctx)
 {
-	struct pp_smu_funcs *pp_smu = kzalloc(sizeof(*pp_smu), GFP_KERNEL);
+	struct pp_smu_funcs *pp_smu = kzalloc_obj(*pp_smu, GFP_KERNEL);

 	if (!pp_smu)
 		return pp_smu;
@@ -2766,7 +2768,7 @@ struct resource_pool *dcn20_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn20_resource_pool *pool =
-		kzalloc(sizeof(struct dcn20_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn201/dcn201_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn201/dcn201_resource.c
index 90d38631f63a..71629186eb30 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn201/dcn201_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn201/dcn201_resource.c
@@ -632,7 +632,7 @@ static struct dpp *dcn201_dpp_create(
 	uint32_t inst)
 {
 	struct dcn201_dpp *dpp =
-		kzalloc(sizeof(struct dcn201_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn201_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -649,7 +649,7 @@ static struct input_pixel_processor *dcn201_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn10_ipp *ipp =
-		kzalloc(sizeof(struct dcn10_ipp), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_ipp, GFP_KERNEL);

 	if (!ipp) {
 		return NULL;
@@ -665,7 +665,7 @@ static struct output_pixel_processor *dcn201_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn201_opp *opp =
-		kzalloc(sizeof(struct dcn201_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn201_opp, GFP_KERNEL);

 	if (!opp) {
 		return NULL;
@@ -680,7 +680,7 @@ static struct dce_aux *dcn201_aux_engine_create(struct dc_context *ctx,
 						uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -713,7 +713,7 @@ static struct dce_i2c_hw *dcn201_i2c_hw_create(struct dc_context *ctx,
 					       uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -726,7 +726,7 @@ static struct dce_i2c_hw *dcn201_i2c_hw_create(struct dc_context *ctx,

 static struct mpc *dcn201_mpc_create(struct dc_context *ctx, uint32_t num_mpcc)
 {
-	struct dcn201_mpc *mpc201 = kzalloc(sizeof(struct dcn201_mpc), GFP_KERNEL);
+	struct dcn201_mpc *mpc201 = kzalloc_obj(struct dcn201_mpc, GFP_KERNEL);

 	if (!mpc201)
 		return NULL;
@@ -742,7 +742,8 @@ static struct mpc *dcn201_mpc_create(struct dc_context *ctx, uint32_t num_mpcc)

 static struct hubbub *dcn201_hubbub_create(struct dc_context *ctx)
 {
-	struct dcn20_hubbub *hubbub = kzalloc(sizeof(struct dcn20_hubbub), GFP_KERNEL);
+	struct dcn20_hubbub *hubbub = kzalloc_obj(struct dcn20_hubbub,
+						  GFP_KERNEL);

 	if (!hubbub)
 		return NULL;
@@ -760,7 +761,7 @@ static struct timing_generator *dcn201_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -794,7 +795,7 @@ static struct link_encoder *dcn201_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);
 	struct dcn10_link_encoder *enc10;

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
@@ -822,7 +823,7 @@ static struct clock_source *dcn201_clock_source_create(
 	bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -857,7 +858,7 @@ static struct stream_encoder *dcn201_stream_encoder_create(
 	struct dc_context *ctx)
 {
 	struct dcn10_stream_encoder *enc1 =
-		kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);

 	if (!enc1)
 		return NULL;
@@ -884,7 +885,7 @@ static const struct dce_hwseq_mask hwseq_mask = {
 static struct dce_hwseq *dcn201_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -984,7 +985,7 @@ static struct hubp *dcn201_hubp_create(
 	uint32_t inst)
 {
 	struct dcn201_hubp *hubp201 =
-		kzalloc(sizeof(struct dcn201_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn201_hubp, GFP_KERNEL);

 	if (!hubp201)
 		return NULL;
@@ -1305,7 +1306,7 @@ struct resource_pool *dcn201_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn201_resource_pool *pool =
-		kzalloc(sizeof(struct dcn201_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn201_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn21/dcn21_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn21/dcn21_resource.c
index 107612595db6..0e93bc342011 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn21/dcn21_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn21/dcn21_resource.c
@@ -484,7 +484,7 @@ static struct input_pixel_processor *dcn21_ipp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn10_ipp *ipp =
-		kzalloc(sizeof(struct dcn10_ipp), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_ipp, GFP_KERNEL);

 	if (!ipp) {
 		BREAK_TO_DEBUGGER();
@@ -501,7 +501,7 @@ static struct dpp *dcn21_dpp_create(
 	uint32_t inst)
 {
 	struct dcn20_dpp *dpp =
-		kzalloc(sizeof(struct dcn20_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -520,7 +520,7 @@ static struct dce_aux *dcn21_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -557,7 +557,7 @@ static struct dce_i2c_hw *dcn21_i2c_hw_create(struct dc_context *ctx,
 					      uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -930,7 +930,8 @@ static enum dc_status dcn21_validate_bandwidth(struct dc *dc, struct dc_state *c
 	bool voltage_supported;
 	display_e2e_pipe_params_st *pipes;

-	pipes = kcalloc(dc->res_pool->pipe_count, sizeof(display_e2e_pipe_params_st), GFP_KERNEL);
+	pipes = kzalloc_objs(display_e2e_pipe_params_st,
+			     dc->res_pool->pipe_count, GFP_KERNEL);
 	if (!pipes)
 		return DC_FAIL_BANDWIDTH_VALIDATE;

@@ -959,7 +960,7 @@ static struct clock_source *dcn21_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -980,7 +981,7 @@ static struct hubp *dcn21_hubp_create(
 	uint32_t inst)
 {
 	struct dcn21_hubp *hubp21 =
-		kzalloc(sizeof(struct dcn21_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn21_hubp, GFP_KERNEL);

 	if (!hubp21)
 		return NULL;
@@ -998,8 +999,8 @@ static struct hubbub *dcn21_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub = kzalloc_obj(struct dcn20_hubbub,
+						  GFP_KERNEL);

 	if (!hubbub)
 		return NULL;
@@ -1027,7 +1028,7 @@ static struct output_pixel_processor *dcn21_opp_create(struct dc_context *ctx,
 						       uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -1043,7 +1044,7 @@ static struct timing_generator *dcn21_timing_generator_create(struct dc_context
 							      uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1062,8 +1063,7 @@ static struct timing_generator *dcn21_timing_generator_create(struct dc_context

 static struct mpc *dcn21_mpc_create(struct dc_context *ctx)
 {
-	struct dcn20_mpc *mpc20 = kzalloc(sizeof(struct dcn20_mpc),
-					  GFP_KERNEL);
+	struct dcn20_mpc *mpc20 = kzalloc_obj(struct dcn20_mpc, GFP_KERNEL);

 	if (!mpc20)
 		return NULL;
@@ -1091,7 +1091,7 @@ static struct display_stream_compressor *dcn21_dsc_create(struct dc_context *ctx
 							  uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1104,7 +1104,7 @@ static struct display_stream_compressor *dcn21_dsc_create(struct dc_context *ctx

 static struct pp_smu_funcs *dcn21_pp_smu_create(struct dc_context *ctx)
 {
-	struct pp_smu_funcs *pp_smu = kzalloc(sizeof(*pp_smu), GFP_KERNEL);
+	struct pp_smu_funcs *pp_smu = kzalloc_obj(*pp_smu, GFP_KERNEL);

 	if (!pp_smu)
 		return pp_smu;
@@ -1141,7 +1141,7 @@ static struct stream_encoder *dcn21_stream_encoder_create(enum engine_id eng_id,
 							  struct dc_context *ctx)
 {
 	struct dcn10_stream_encoder *enc1 =
-		kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);

 	if (!enc1)
 		return NULL;
@@ -1168,7 +1168,7 @@ static const struct dce_hwseq_mask hwseq_mask = {
 static struct dce_hwseq *dcn21_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -1295,7 +1295,7 @@ static struct link_encoder *dcn21_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn21_link_encoder *enc21 =
-		kzalloc(sizeof(struct dcn21_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn21_link_encoder, GFP_KERNEL);
 	int link_regs_id;

 	if (!enc21 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
@@ -1319,7 +1319,7 @@ static struct link_encoder *dcn21_link_encoder_create(
 static struct panel_cntl *dcn21_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1704,7 +1704,7 @@ struct resource_pool *dcn21_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn21_resource_pool *pool =
-		kzalloc(sizeof(struct dcn21_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn21_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c
index 6cfdc37dab58..75aa4b6d7133 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c
@@ -753,7 +753,7 @@ static struct dpp *dcn30_dpp_create(
 	uint32_t inst)
 {
 	struct dcn3_dpp *dpp =
-		kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -771,7 +771,7 @@ static struct output_pixel_processor *dcn30_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -788,7 +788,7 @@ static struct dce_aux *dcn30_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -827,7 +827,7 @@ static struct dce_i2c_hw *dcn30_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -843,8 +843,7 @@ static struct mpc *dcn30_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc),
-					  GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -863,8 +862,8 @@ static struct hubbub *dcn30_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -893,7 +892,7 @@ static struct timing_generator *dcn30_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -927,7 +926,7 @@ static struct link_encoder *dcn30_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -947,7 +946,7 @@ static struct link_encoder *dcn30_link_encoder_create(
 static struct panel_cntl *dcn30_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dce_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dce_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -981,7 +980,7 @@ static struct vpg *dcn30_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn30_vpg *vpg3 = kzalloc(sizeof(struct dcn30_vpg), GFP_KERNEL);
+	struct dcn30_vpg *vpg3 = kzalloc_obj(struct dcn30_vpg, GFP_KERNEL);

 	if (!vpg3)
 		return NULL;
@@ -998,7 +997,7 @@ static struct afmt *dcn30_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn30_afmt *afmt3 = kzalloc(sizeof(struct dcn30_afmt), GFP_KERNEL);
+	struct dcn30_afmt *afmt3 = kzalloc_obj(struct dcn30_afmt, GFP_KERNEL);

 	if (!afmt3)
 		return NULL;
@@ -1027,7 +1026,7 @@ static struct stream_encoder *dcn30_stream_encoder_create(enum engine_id eng_id,
 	} else
 		return NULL;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn30_vpg_create(ctx, vpg_inst);
 	afmt = dcn30_afmt_create(ctx, afmt_inst);

@@ -1048,7 +1047,7 @@ static struct stream_encoder *dcn30_stream_encoder_create(enum engine_id eng_id,

 static struct dce_hwseq *dcn30_hwseq_create(struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -1201,7 +1200,7 @@ static struct hubp *dcn30_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -1221,8 +1220,8 @@ static bool dcn30_dwbc_create(struct dc_context *ctx, struct resource_pool *pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1246,8 +1245,8 @@ static bool dcn30_mmhubbub_create(struct dc_context *ctx, struct resource_pool *
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1269,7 +1268,7 @@ static struct display_stream_compressor *dcn30_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1303,7 +1302,7 @@ static struct clock_source *dcn30_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -2048,8 +2047,9 @@ enum dc_status dcn30_validate_bandwidth(struct dc *dc,

 	int vlevel = 0;
 	int pipe_cnt = 0;
-	display_e2e_pipe_params_st *pipes = kcalloc(dc->res_pool->pipe_count,
-			sizeof(display_e2e_pipe_params_st), GFP_KERNEL);
+	display_e2e_pipe_params_st *pipes = kzalloc_objs(display_e2e_pipe_params_st,
+							 dc->res_pool->pipe_count,
+							 GFP_KERNEL);
 	DC_LOGGER_INIT(dc->ctx->logger);

 	BW_VAL_TRACE_COUNT();
@@ -2622,7 +2622,7 @@ struct resource_pool *dcn30_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn30_resource_pool *pool =
-		kzalloc(sizeof(struct dcn30_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn30_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn301/dcn301_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn301/dcn301_resource.c
index e1d0c166b484..6bced8def669 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn301/dcn301_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn301/dcn301_resource.c
@@ -717,7 +717,7 @@ static void dcn301_dpp_destroy(struct dpp **dpp)
 static struct dpp *dcn301_dpp_create(struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn3_dpp *dpp =
-		kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -734,7 +734,7 @@ static struct output_pixel_processor *dcn301_opp_create(struct dc_context *ctx,
 							uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -749,7 +749,7 @@ static struct output_pixel_processor *dcn301_opp_create(struct dc_context *ctx,
 static struct dce_aux *dcn301_aux_engine_create(struct dc_context *ctx, uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -783,7 +783,7 @@ static const struct dce_i2c_mask i2c_masks = {
 static struct dce_i2c_hw *dcn301_i2c_hw_create(struct dc_context *ctx, uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -798,8 +798,7 @@ static struct mpc *dcn301_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc),
-					  GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -818,8 +817,8 @@ static struct hubbub *dcn301_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -849,7 +848,7 @@ static struct timing_generator *dcn301_timing_generator_create(
 	struct dc_context *ctx, uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -883,7 +882,7 @@ static struct link_encoder *dcn301_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -903,7 +902,7 @@ static struct link_encoder *dcn301_link_encoder_create(
 static struct panel_cntl *dcn301_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dcn301_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dcn301_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dcn301_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -952,7 +951,7 @@ static struct vpg *dcn301_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn30_vpg *vpg3 = kzalloc(sizeof(struct dcn30_vpg), GFP_KERNEL);
+	struct dcn30_vpg *vpg3 = kzalloc_obj(struct dcn30_vpg, GFP_KERNEL);

 	if (!vpg3)
 		return NULL;
@@ -969,7 +968,7 @@ static struct afmt *dcn301_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn30_afmt *afmt3 = kzalloc(sizeof(struct dcn30_afmt), GFP_KERNEL);
+	struct dcn30_afmt *afmt3 = kzalloc_obj(struct dcn30_afmt, GFP_KERNEL);

 	if (!afmt3)
 		return NULL;
@@ -998,7 +997,7 @@ static struct stream_encoder *dcn301_stream_encoder_create(enum engine_id eng_id
 	} else
 		return NULL;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn301_vpg_create(ctx, vpg_inst);
 	afmt = dcn301_afmt_create(ctx, afmt_inst);

@@ -1019,7 +1018,7 @@ static struct stream_encoder *dcn301_stream_encoder_create(enum engine_id eng_id

 static struct dce_hwseq *dcn301_hwseq_create(struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -1161,7 +1160,7 @@ static void dcn301_destruct(struct dcn301_resource_pool *pool)
 static struct hubp *dcn301_hubp_create(struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -1181,8 +1180,8 @@ static bool dcn301_dwbc_create(struct dc_context *ctx, struct resource_pool *poo
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1206,8 +1205,8 @@ static bool dcn301_mmhubbub_create(struct dc_context *ctx, struct resource_pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1229,7 +1228,7 @@ static struct display_stream_compressor *dcn301_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1258,7 +1257,7 @@ static struct clock_source *dcn301_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -1728,7 +1727,7 @@ struct resource_pool *dcn301_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn301_resource_pool *pool =
-		kzalloc(sizeof(struct dcn301_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn301_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn302/dcn302_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn302/dcn302_resource.c
index c0d4a1dc94f8..1dba37343c0f 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn302/dcn302_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn302/dcn302_resource.c
@@ -257,7 +257,8 @@ static struct hubbub *dcn302_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub), GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -299,7 +300,7 @@ static const struct dcn30_vpg_mask vpg_mask = {

 static struct vpg *dcn302_vpg_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn30_vpg *vpg3 = kzalloc(sizeof(struct dcn30_vpg), GFP_KERNEL);
+	struct dcn30_vpg *vpg3 = kzalloc_obj(struct dcn30_vpg, GFP_KERNEL);

 	if (!vpg3)
 		return NULL;
@@ -331,7 +332,7 @@ static const struct dcn30_afmt_mask afmt_mask = {

 static struct afmt *dcn302_afmt_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn30_afmt *afmt3 = kzalloc(sizeof(struct dcn30_afmt), GFP_KERNEL);
+	struct dcn30_afmt *afmt3 = kzalloc_obj(struct dcn30_afmt, GFP_KERNEL);

 	if (!afmt3)
 		return NULL;
@@ -406,7 +407,7 @@ static struct stream_encoder *dcn302_stream_encoder_create(enum engine_id eng_id
 	} else
 		return NULL;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn302_vpg_create(ctx, vpg_inst);
 	afmt = dcn302_afmt_create(ctx, afmt_inst);

@@ -445,7 +446,8 @@ static const struct dce110_clk_src_mask cs_mask = {
 static struct clock_source *dcn302_clock_source_create(struct dc_context *ctx, struct dc_bios *bios,
 		enum clock_source_id id, const struct dce110_clk_src_regs *regs, bool dp_clk_src)
 {
-	struct dce110_clk_src *clk_src = kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+	struct dce110_clk_src *clk_src = kzalloc_obj(struct dce110_clk_src,
+						     GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -474,7 +476,7 @@ static const struct dce_hwseq_mask hwseq_mask = {

 static struct dce_hwseq *dcn302_hwseq_create(struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -506,7 +508,7 @@ static const struct dcn_hubp2_mask hubp_mask = {

 static struct hubp *dcn302_hubp_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn20_hubp *hubp2 = kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+	struct dcn20_hubp *hubp2 = kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -540,7 +542,7 @@ static const struct dcn3_dpp_mask tf_mask = {

 static struct dpp *dcn302_dpp_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn3_dpp *dpp = kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+	struct dcn3_dpp *dpp = kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -574,7 +576,7 @@ static const struct dcn20_opp_mask opp_mask = {

 static struct output_pixel_processor *dcn302_opp_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn20_opp *opp = kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+	struct dcn20_opp *opp = kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -606,7 +608,7 @@ static const struct dcn_optc_mask optc_mask = {

 static struct timing_generator *dcn302_timing_generator_create(struct dc_context *ctx, uint32_t instance)
 {
-	struct optc *tgn10 = kzalloc(sizeof(struct optc), GFP_KERNEL);
+	struct optc *tgn10 = kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -651,7 +653,7 @@ static const struct dcn30_mpc_mask mpc_mask = {

 static struct mpc *dcn302_mpc_create(struct dc_context *ctx, int num_mpcc, int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc), GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -682,7 +684,7 @@ static const struct dcn20_dsc_mask dsc_mask = {

 static struct display_stream_compressor *dcn302_dsc_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn20_dsc *dsc = kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+	struct dcn20_dsc *dsc = kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -714,7 +716,8 @@ static bool dcn302_dwbc_create(struct dc_context *ctx, struct resource_pool *poo
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc), GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -749,7 +752,8 @@ static bool dcn302_mmhubbub_create(struct dc_context *ctx, struct resource_pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub), GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -789,7 +793,8 @@ static const struct dce110_aux_registers_mask aux_mask = {

 static struct dce_aux *dcn302_aux_engine_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct aux_engine_dce110 *aux_engine = kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+	struct aux_engine_dce110 *aux_engine = kzalloc_obj(struct aux_engine_dce110,
+							   GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -820,7 +825,8 @@ static const struct dce_i2c_mask i2c_masks = {

 static struct dce_i2c_hw *dcn302_i2c_hw_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dce_i2c_hw *dce_i2c_hw = kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+	struct dce_i2c_hw *dce_i2c_hw = kzalloc_obj(struct dce_i2c_hw,
+						    GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -894,7 +900,8 @@ static struct link_encoder *dcn302_link_encoder_create(
 	struct dc_context *ctx,
 	const struct encoder_init_data *enc_init_data)
 {
-	struct dcn20_link_encoder *enc20 = kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+	struct dcn20_link_encoder *enc20 = kzalloc_obj(struct dcn20_link_encoder,
+						       GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -920,7 +927,8 @@ static const struct dce_panel_cntl_mask panel_cntl_mask = {

 static struct panel_cntl *dcn302_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
-	struct dce_panel_cntl *panel_cntl = kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+	struct dce_panel_cntl *panel_cntl = kzalloc_obj(struct dce_panel_cntl,
+							GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1512,7 +1520,8 @@ static bool dcn302_resource_construct(

 struct resource_pool *dcn302_create_resource_pool(const struct dc_init_data *init_data, struct dc *dc)
 {
-	struct resource_pool *pool = kzalloc(sizeof(struct resource_pool), GFP_KERNEL);
+	struct resource_pool *pool = kzalloc_obj(struct resource_pool,
+						 GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn303/dcn303_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn303/dcn303_resource.c
index 75e09c2c283e..2f81c0b51d1a 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn303/dcn303_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn303/dcn303_resource.c
@@ -253,7 +253,8 @@ static struct hubbub *dcn303_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub), GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -292,7 +293,7 @@ static const struct dcn30_vpg_mask vpg_mask = {

 static struct vpg *dcn303_vpg_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn30_vpg *vpg3 = kzalloc(sizeof(struct dcn30_vpg), GFP_KERNEL);
+	struct dcn30_vpg *vpg3 = kzalloc_obj(struct dcn30_vpg, GFP_KERNEL);

 	if (!vpg3)
 		return NULL;
@@ -321,7 +322,7 @@ static const struct dcn30_afmt_mask afmt_mask = {

 static struct afmt *dcn303_afmt_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn30_afmt *afmt3 = kzalloc(sizeof(struct dcn30_afmt), GFP_KERNEL);
+	struct dcn30_afmt *afmt3 = kzalloc_obj(struct dcn30_afmt, GFP_KERNEL);

 	if (!afmt3)
 		return NULL;
@@ -393,7 +394,7 @@ static struct stream_encoder *dcn303_stream_encoder_create(enum engine_id eng_id
 	} else
 		return NULL;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn303_vpg_create(ctx, vpg_inst);
 	afmt = dcn303_afmt_create(ctx, afmt_inst);

@@ -429,7 +430,8 @@ static const struct dce110_clk_src_mask cs_mask = {
 static struct clock_source *dcn303_clock_source_create(struct dc_context *ctx, struct dc_bios *bios,
 		enum clock_source_id id, const struct dce110_clk_src_regs *regs, bool dp_clk_src)
 {
-	struct dce110_clk_src *clk_src = kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+	struct dce110_clk_src *clk_src = kzalloc_obj(struct dce110_clk_src,
+						     GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -458,7 +460,7 @@ static const struct dce_hwseq_mask hwseq_mask = {

 static struct dce_hwseq *dcn303_hwseq_create(struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -487,7 +489,7 @@ static const struct dcn_hubp2_mask hubp_mask = {

 static struct hubp *dcn303_hubp_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn20_hubp *hubp2 = kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+	struct dcn20_hubp *hubp2 = kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -518,7 +520,7 @@ static const struct dcn3_dpp_mask tf_mask = {

 static struct dpp *dcn303_dpp_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn3_dpp *dpp = kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+	struct dcn3_dpp *dpp = kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -549,7 +551,7 @@ static const struct dcn20_opp_mask opp_mask = {

 static struct output_pixel_processor *dcn303_opp_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn20_opp *opp = kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+	struct dcn20_opp *opp = kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -578,7 +580,7 @@ static const struct dcn_optc_mask optc_mask = {

 static struct timing_generator *dcn303_timing_generator_create(struct dc_context *ctx, uint32_t instance)
 {
-	struct optc *tgn10 = kzalloc(sizeof(struct optc), GFP_KERNEL);
+	struct optc *tgn10 = kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -615,7 +617,7 @@ static const struct dcn30_mpc_mask mpc_mask = {

 static struct mpc *dcn303_mpc_create(struct dc_context *ctx, int num_mpcc, int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc), GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -643,7 +645,7 @@ static const struct dcn20_dsc_mask dsc_mask = {

 static struct display_stream_compressor *dcn303_dsc_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn20_dsc *dsc = kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+	struct dcn20_dsc *dsc = kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -675,7 +677,8 @@ static bool dcn303_dwbc_create(struct dc_context *ctx, struct resource_pool *poo
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc), GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -710,7 +713,8 @@ static bool dcn303_mmhubbub_create(struct dc_context *ctx, struct resource_pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub), GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -747,7 +751,8 @@ static const struct dce110_aux_registers_mask aux_mask = {

 static struct dce_aux *dcn303_aux_engine_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct aux_engine_dce110 *aux_engine = kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+	struct aux_engine_dce110 *aux_engine = kzalloc_obj(struct aux_engine_dce110,
+							   GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -775,7 +780,8 @@ static const struct dce_i2c_mask i2c_masks = {

 static struct dce_i2c_hw *dcn303_i2c_hw_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dce_i2c_hw *dce_i2c_hw = kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+	struct dce_i2c_hw *dce_i2c_hw = kzalloc_obj(struct dce_i2c_hw,
+						    GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -839,7 +845,8 @@ static struct link_encoder *dcn303_link_encoder_create(
 	struct dc_context *ctx,
 	const struct encoder_init_data *enc_init_data)
 {
-	struct dcn20_link_encoder *enc20 = kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+	struct dcn20_link_encoder *enc20 = kzalloc_obj(struct dcn20_link_encoder,
+						       GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -865,7 +872,8 @@ static const struct dce_panel_cntl_mask panel_cntl_mask = {

 static struct panel_cntl *dcn303_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
-	struct dce_panel_cntl *panel_cntl = kzalloc(sizeof(struct dce_panel_cntl), GFP_KERNEL);
+	struct dce_panel_cntl *panel_cntl = kzalloc_obj(struct dce_panel_cntl,
+							GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1444,7 +1452,8 @@ static bool dcn303_resource_construct(

 struct resource_pool *dcn303_create_resource_pool(const struct dc_init_data *init_data, struct dc *dc)
 {
-	struct resource_pool *pool = kzalloc(sizeof(struct resource_pool), GFP_KERNEL);
+	struct resource_pool *pool = kzalloc_obj(struct resource_pool,
+						 GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
index 8ad72557b16a..4fb54637f41e 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
@@ -919,7 +919,7 @@ static struct dpp *dcn31_dpp_create(
 	uint32_t inst)
 {
 	struct dcn3_dpp *dpp =
-		kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -937,7 +937,7 @@ static struct output_pixel_processor *dcn31_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -954,7 +954,7 @@ static struct dce_aux *dcn31_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -991,7 +991,7 @@ static struct dce_i2c_hw *dcn31_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -1006,8 +1006,7 @@ static struct mpc *dcn31_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc),
-					  GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -1026,8 +1025,8 @@ static struct hubbub *dcn31_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -1059,7 +1058,7 @@ static struct timing_generator *dcn31_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1093,7 +1092,7 @@ static struct link_encoder *dcn31_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1122,7 +1121,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 	if ((eng_id - ENGINE_ID_DIGA) > ctx->dc->res_pool->res_cap->num_dig_link_enc)
 		return NULL;

-	enc20 = kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+	enc20 = kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);
 	if (!enc20)
 		return NULL;

@@ -1139,7 +1138,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 static struct panel_cntl *dcn31_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dcn31_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dcn31_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dcn31_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1169,7 +1168,7 @@ static struct vpg *dcn31_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_vpg *vpg31 = kzalloc(sizeof(struct dcn31_vpg), GFP_KERNEL);
+	struct dcn31_vpg *vpg31 = kzalloc_obj(struct dcn31_vpg, GFP_KERNEL);

 	if (!vpg31)
 		return NULL;
@@ -1186,7 +1185,7 @@ static struct afmt *dcn31_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_afmt *afmt31 = kzalloc(sizeof(struct dcn31_afmt), GFP_KERNEL);
+	struct dcn31_afmt *afmt31 = kzalloc_obj(struct dcn31_afmt, GFP_KERNEL);

 	if (!afmt31)
 		return NULL;
@@ -1205,7 +1204,7 @@ static struct apg *dcn31_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1235,7 +1234,7 @@ static struct stream_encoder *dcn31_stream_encoder_create(
 	} else
 		return NULL;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	afmt = dcn31_afmt_create(ctx, afmt_inst);

@@ -1285,7 +1284,8 @@ static struct hpo_dp_stream_encoder *dcn31_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	apg = dcn31_apg_create(ctx, apg_inst);

@@ -1311,7 +1311,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1325,7 +1325,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 static struct dce_hwseq *dcn31_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -1499,7 +1499,7 @@ static struct hubp *dcn31_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -1519,8 +1519,8 @@ static bool dcn31_dwbc_create(struct dc_context *ctx, struct resource_pool *pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1544,8 +1544,8 @@ static bool dcn31_mmhubbub_create(struct dc_context *ctx, struct resource_pool *
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1567,7 +1567,7 @@ static struct display_stream_compressor *dcn31_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1595,7 +1595,7 @@ static struct clock_source *dcn31_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -1771,8 +1771,9 @@ enum dc_status dcn31_validate_bandwidth(struct dc *dc,

 	int vlevel = 0;
 	int pipe_cnt = 0;
-	display_e2e_pipe_params_st *pipes = kcalloc(dc->res_pool->pipe_count,
-			sizeof(display_e2e_pipe_params_st), GFP_KERNEL);
+	display_e2e_pipe_params_st *pipes = kzalloc_objs(display_e2e_pipe_params_st,
+							 dc->res_pool->pipe_count,
+							 GFP_KERNEL);
 	DC_LOGGER_INIT(dc->ctx->logger);

 	BW_VAL_TRACE_COUNT();
@@ -1866,7 +1867,7 @@ static struct clock_source *dcn30_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -2227,7 +2228,7 @@ struct resource_pool *dcn31_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn31_resource_pool *pool =
-		kzalloc(sizeof(struct dcn31_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn31_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c
index 5f0fe6e5bd82..8c451d2a040a 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c
@@ -955,7 +955,7 @@ static struct dpp *dcn31_dpp_create(
 	uint32_t inst)
 {
 	struct dcn3_dpp *dpp =
-		kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -973,7 +973,7 @@ static struct output_pixel_processor *dcn31_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -990,7 +990,7 @@ static struct dce_aux *dcn31_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -1049,7 +1049,7 @@ static struct dce_i2c_hw *dcn31_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -1064,8 +1064,7 @@ static struct mpc *dcn31_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc),
-					  GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -1084,8 +1083,8 @@ static struct hubbub *dcn31_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -1117,7 +1116,7 @@ static struct timing_generator *dcn31_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1151,7 +1150,7 @@ static struct link_encoder *dcn31_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1180,7 +1179,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 	if ((eng_id - ENGINE_ID_DIGA) > ctx->dc->res_pool->res_cap->num_dig_link_enc)
 		return NULL;

-	enc20 = kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+	enc20 = kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);
 	if (!enc20)
 		return NULL;

@@ -1197,7 +1196,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 static struct panel_cntl *dcn31_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dcn31_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dcn31_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dcn31_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1227,7 +1226,7 @@ static struct vpg *dcn31_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_vpg *vpg31 = kzalloc(sizeof(struct dcn31_vpg), GFP_KERNEL);
+	struct dcn31_vpg *vpg31 = kzalloc_obj(struct dcn31_vpg, GFP_KERNEL);

 	if (!vpg31)
 		return NULL;
@@ -1244,7 +1243,7 @@ static struct afmt *dcn31_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_afmt *afmt31 = kzalloc(sizeof(struct dcn31_afmt), GFP_KERNEL);
+	struct dcn31_afmt *afmt31 = kzalloc_obj(struct dcn31_afmt, GFP_KERNEL);

 	if (!afmt31)
 		return NULL;
@@ -1263,7 +1262,7 @@ static struct apg *dcn31_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1293,7 +1292,7 @@ static struct stream_encoder *dcn314_stream_encoder_create(
 	} else
 		return NULL;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	afmt = dcn31_afmt_create(ctx, afmt_inst);

@@ -1344,7 +1343,8 @@ static struct hpo_dp_stream_encoder *dcn31_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	apg = dcn31_apg_create(ctx, apg_inst);

@@ -1370,7 +1370,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1384,7 +1384,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 static struct dce_hwseq *dcn314_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -1557,7 +1557,7 @@ static struct hubp *dcn31_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -1577,8 +1577,8 @@ static bool dcn31_dwbc_create(struct dc_context *ctx, struct resource_pool *pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1602,8 +1602,8 @@ static bool dcn31_mmhubbub_create(struct dc_context *ctx, struct resource_pool *
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1625,7 +1625,7 @@ static struct display_stream_compressor *dcn314_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1653,7 +1653,7 @@ static struct clock_source *dcn31_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -1709,8 +1709,9 @@ enum dc_status dcn314_validate_bandwidth(struct dc *dc,

 	int vlevel = 0;
 	int pipe_cnt = 0;
-	display_e2e_pipe_params_st *pipes = kcalloc(dc->res_pool->pipe_count,
-			sizeof(display_e2e_pipe_params_st), GFP_KERNEL);
+	display_e2e_pipe_params_st *pipes = kzalloc_objs(display_e2e_pipe_params_st,
+							 dc->res_pool->pipe_count,
+							 GFP_KERNEL);
 	DC_LOGGER_INIT(dc->ctx->logger);

 	BW_VAL_TRACE_COUNT();
@@ -1797,7 +1798,7 @@ static struct clock_source *dcn30_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -2145,7 +2146,7 @@ struct resource_pool *dcn314_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn314_resource_pool *pool =
-		kzalloc(sizeof(struct dcn314_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn314_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c
index 3ae787a377b1..1a63eaf5e1d9 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c
@@ -918,7 +918,7 @@ static struct dpp *dcn31_dpp_create(
 	uint32_t inst)
 {
 	struct dcn3_dpp *dpp =
-		kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -936,7 +936,7 @@ static struct output_pixel_processor *dcn31_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -953,7 +953,7 @@ static struct dce_aux *dcn31_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -990,7 +990,7 @@ static struct dce_i2c_hw *dcn31_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -1005,8 +1005,7 @@ static struct mpc *dcn31_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc),
-					  GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -1025,8 +1024,8 @@ static struct hubbub *dcn31_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -1058,7 +1057,7 @@ static struct timing_generator *dcn31_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1092,7 +1091,7 @@ static struct link_encoder *dcn31_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1121,7 +1120,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 	if ((eng_id - ENGINE_ID_DIGA) > ctx->dc->res_pool->res_cap->num_dig_link_enc)
 		return NULL;

-	enc20 = kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+	enc20 = kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);
 	if (!enc20)
 		return NULL;

@@ -1138,7 +1137,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 static struct panel_cntl *dcn31_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dcn31_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dcn31_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dcn31_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1168,7 +1167,7 @@ static struct vpg *dcn31_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_vpg *vpg31 = kzalloc(sizeof(struct dcn31_vpg), GFP_KERNEL);
+	struct dcn31_vpg *vpg31 = kzalloc_obj(struct dcn31_vpg, GFP_KERNEL);

 	if (!vpg31)
 		return NULL;
@@ -1185,7 +1184,7 @@ static struct afmt *dcn31_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_afmt *afmt31 = kzalloc(sizeof(struct dcn31_afmt), GFP_KERNEL);
+	struct dcn31_afmt *afmt31 = kzalloc_obj(struct dcn31_afmt, GFP_KERNEL);

 	if (!afmt31)
 		return NULL;
@@ -1204,7 +1203,7 @@ static struct apg *dcn31_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1236,7 +1235,7 @@ static struct stream_encoder *dcn315_stream_encoder_create(
 	vpg_inst = eng_id;
 	afmt_inst = eng_id;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	afmt = dcn31_afmt_create(ctx, afmt_inst);

@@ -1286,7 +1285,8 @@ static struct hpo_dp_stream_encoder *dcn31_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	apg = dcn31_apg_create(ctx, apg_inst);

@@ -1312,7 +1312,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1326,7 +1326,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 static struct dce_hwseq *dcn31_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -1500,7 +1500,7 @@ static struct hubp *dcn31_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -1520,8 +1520,8 @@ static bool dcn31_dwbc_create(struct dc_context *ctx, struct resource_pool *pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1545,8 +1545,8 @@ static bool dcn31_mmhubbub_create(struct dc_context *ctx, struct resource_pool *
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1568,7 +1568,7 @@ static struct display_stream_compressor *dcn31_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1596,7 +1596,7 @@ static struct clock_source *dcn31_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -2167,7 +2167,7 @@ struct resource_pool *dcn315_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn315_resource_pool *pool =
-		kzalloc(sizeof(struct dcn315_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn315_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c
index 4b8668458f03..4b8dddba34b8 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c
@@ -911,7 +911,7 @@ static struct dpp *dcn31_dpp_create(
 	uint32_t inst)
 {
 	struct dcn3_dpp *dpp =
-		kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp)
 		return NULL;
@@ -929,7 +929,7 @@ static struct output_pixel_processor *dcn31_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -946,7 +946,7 @@ static struct dce_aux *dcn31_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -983,7 +983,7 @@ static struct dce_i2c_hw *dcn31_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -998,8 +998,7 @@ static struct mpc *dcn31_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc),
-					  GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -1018,8 +1017,8 @@ static struct hubbub *dcn31_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -1051,7 +1050,7 @@ static struct timing_generator *dcn31_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1085,7 +1084,7 @@ static struct link_encoder *dcn31_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1114,7 +1113,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 	if ((eng_id - ENGINE_ID_DIGA) > ctx->dc->res_pool->res_cap->num_dig_link_enc)
 		return NULL;

-	enc20 = kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+	enc20 = kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);
 	if (!enc20)
 		return NULL;

@@ -1131,7 +1130,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 static struct panel_cntl *dcn31_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dcn31_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dcn31_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dcn31_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1161,7 +1160,7 @@ static struct vpg *dcn31_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_vpg *vpg31 = kzalloc(sizeof(struct dcn31_vpg), GFP_KERNEL);
+	struct dcn31_vpg *vpg31 = kzalloc_obj(struct dcn31_vpg, GFP_KERNEL);

 	if (!vpg31)
 		return NULL;
@@ -1178,7 +1177,7 @@ static struct afmt *dcn31_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_afmt *afmt31 = kzalloc(sizeof(struct dcn31_afmt), GFP_KERNEL);
+	struct dcn31_afmt *afmt31 = kzalloc_obj(struct dcn31_afmt, GFP_KERNEL);

 	if (!afmt31)
 		return NULL;
@@ -1198,7 +1197,7 @@ static struct apg *dcn31_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1229,7 +1228,7 @@ static struct stream_encoder *dcn316_stream_encoder_create(
 	vpg_inst = eng_id;
 	afmt_inst = eng_id;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	afmt = dcn31_afmt_create(ctx, afmt_inst);

@@ -1280,7 +1279,8 @@ static struct hpo_dp_stream_encoder *dcn31_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	apg = dcn31_apg_create(ctx, apg_inst);

@@ -1306,7 +1306,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1321,7 +1321,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 static struct dce_hwseq *dcn31_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 	if (hws) {
 		hws->ctx = ctx;
@@ -1492,7 +1492,7 @@ static struct hubp *dcn31_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -1512,8 +1512,8 @@ static bool dcn31_dwbc_create(struct dc_context *ctx, struct resource_pool *pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1537,8 +1537,8 @@ static bool dcn31_mmhubbub_create(struct dc_context *ctx, struct resource_pool *
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1560,7 +1560,7 @@ static struct display_stream_compressor *dcn31_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1588,7 +1588,7 @@ static struct clock_source *dcn31_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -2034,7 +2034,7 @@ struct resource_pool *dcn316_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn316_resource_pool *pool =
-		kzalloc(sizeof(struct dcn316_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn316_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c
index a55078458ba5..a93862071ff5 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c
@@ -750,7 +750,7 @@ static struct dce_aux *dcn32_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -790,7 +790,7 @@ static struct dce_i2c_hw *dcn32_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -817,7 +817,7 @@ static struct clock_source *dcn32_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -837,8 +837,8 @@ static struct hubbub *dcn32_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub2 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub2 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub2)
 		return NULL;
@@ -893,7 +893,7 @@ static struct hubp *dcn32_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -925,7 +925,7 @@ static struct dpp *dcn32_dpp_create(
 	uint32_t inst)
 {
 	struct dcn3_dpp *dpp3 =
-		kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp3)
 		return NULL;
@@ -951,8 +951,7 @@ static struct mpc *dcn32_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc),
-					  GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -975,7 +974,7 @@ static struct output_pixel_processor *dcn32_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp2 =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp2) {
 		BREAK_TO_DEBUGGER();
@@ -1000,7 +999,7 @@ static struct timing_generator *dcn32_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1041,7 +1040,7 @@ static struct link_encoder *dcn32_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1085,7 +1084,7 @@ static struct link_encoder *dcn32_link_encoder_create(
 struct panel_cntl *dcn32_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dcn31_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dcn31_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dcn31_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1124,7 +1123,7 @@ static struct vpg *dcn32_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn30_vpg *vpg3 = kzalloc(sizeof(struct dcn30_vpg), GFP_KERNEL);
+	struct dcn30_vpg *vpg3 = kzalloc_obj(struct dcn30_vpg, GFP_KERNEL);

 	if (!vpg3)
 		return NULL;
@@ -1154,7 +1153,7 @@ static struct afmt *dcn32_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn30_afmt *afmt3 = kzalloc(sizeof(struct dcn30_afmt), GFP_KERNEL);
+	struct dcn30_afmt *afmt3 = kzalloc_obj(struct dcn30_afmt, GFP_KERNEL);

 	if (!afmt3)
 		return NULL;
@@ -1180,7 +1179,7 @@ static struct apg *dcn31_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1217,7 +1216,7 @@ static struct stream_encoder *dcn32_stream_encoder_create(
 	vpg_inst = eng_id;
 	afmt_inst = eng_id;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn32_vpg_create(ctx, vpg_inst);
 	afmt = dcn32_afmt_create(ctx, afmt_inst);

@@ -1275,7 +1274,8 @@ static struct hpo_dp_stream_encoder *dcn32_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn32_vpg_create(ctx, vpg_inst);
 	apg = dcn31_apg_create(ctx, apg_inst);

@@ -1308,7 +1308,7 @@ static struct hpo_dp_link_encoder *dcn32_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1327,7 +1327,7 @@ static struct hpo_dp_link_encoder *dcn32_hpo_dp_link_encoder_create(
 static struct dce_hwseq *dcn32_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 #undef REG_STRUCT
 #define REG_STRUCT hwseq_reg
@@ -1510,8 +1510,8 @@ static bool dcn32_dwbc_create(struct dc_context *ctx, struct resource_pool *pool
 	uint32_t dwb_count = pool->res_cap->num_dwb;

 	for (i = 0; i < dwb_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1539,8 +1539,8 @@ static bool dcn32_mmhubbub_create(struct dc_context *ctx, struct resource_pool *
 	uint32_t dwb_count = pool->res_cap->num_dwb;

 	for (i = 0; i < dwb_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1566,7 +1566,7 @@ static struct display_stream_compressor *dcn32_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1754,8 +1754,9 @@ static bool dml1_validate(struct dc *dc, struct dc_state *context, enum dc_valid

 	int vlevel = 0;
 	int pipe_cnt = 0;
-	display_e2e_pipe_params_st *pipes = kcalloc(dc->res_pool->pipe_count,
-			sizeof(display_e2e_pipe_params_st), GFP_KERNEL);
+	display_e2e_pipe_params_st *pipes = kzalloc_objs(display_e2e_pipe_params_st,
+							 dc->res_pool->pipe_count,
+							 GFP_KERNEL);

 	/* To handle Freesync properly, setting FreeSync DML parameters
 	 * to its default state for the first stage of validation
@@ -2571,7 +2572,7 @@ struct resource_pool *dcn32_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn32_resource_pool *pool =
-		kzalloc(sizeof(struct dcn32_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn32_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c
index 188c3f24f110..97976318f4c0 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c
@@ -744,7 +744,7 @@ static struct dce_aux *dcn321_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -784,7 +784,7 @@ static struct dce_i2c_hw *dcn321_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -811,7 +811,7 @@ static struct clock_source *dcn321_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -831,8 +831,8 @@ static struct hubbub *dcn321_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub2 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub2 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub2)
 		return NULL;
@@ -887,7 +887,7 @@ static struct hubp *dcn321_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -919,7 +919,7 @@ static struct dpp *dcn321_dpp_create(
 	uint32_t inst)
 {
 	struct dcn3_dpp *dpp3 =
-		kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);

 	if (!dpp3)
 		return NULL;
@@ -945,8 +945,7 @@ static struct mpc *dcn321_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc),
-					  GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -969,7 +968,7 @@ static struct output_pixel_processor *dcn321_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp2 =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp2) {
 		BREAK_TO_DEBUGGER();
@@ -994,7 +993,7 @@ static struct timing_generator *dcn321_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1035,7 +1034,7 @@ static struct link_encoder *dcn321_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1105,7 +1104,7 @@ static struct vpg *dcn321_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn30_vpg *vpg3 = kzalloc(sizeof(struct dcn30_vpg), GFP_KERNEL);
+	struct dcn30_vpg *vpg3 = kzalloc_obj(struct dcn30_vpg, GFP_KERNEL);

 	if (!vpg3)
 		return NULL;
@@ -1135,7 +1134,7 @@ static struct afmt *dcn321_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn30_afmt *afmt3 = kzalloc(sizeof(struct dcn30_afmt), GFP_KERNEL);
+	struct dcn30_afmt *afmt3 = kzalloc_obj(struct dcn30_afmt, GFP_KERNEL);

 	if (!afmt3)
 		return NULL;
@@ -1161,7 +1160,7 @@ static struct apg *dcn321_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1198,7 +1197,7 @@ static struct stream_encoder *dcn321_stream_encoder_create(
 	vpg_inst = eng_id;
 	afmt_inst = eng_id;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn321_vpg_create(ctx, vpg_inst);
 	afmt = dcn321_afmt_create(ctx, afmt_inst);

@@ -1256,7 +1255,8 @@ static struct hpo_dp_stream_encoder *dcn321_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn321_vpg_create(ctx, vpg_inst);
 	apg = dcn321_apg_create(ctx, apg_inst);

@@ -1289,7 +1289,7 @@ static struct hpo_dp_link_encoder *dcn321_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1308,7 +1308,7 @@ static struct hpo_dp_link_encoder *dcn321_hpo_dp_link_encoder_create(
 static struct dce_hwseq *dcn321_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 #undef REG_STRUCT
 #define REG_STRUCT hwseq_reg
@@ -1490,8 +1490,8 @@ static bool dcn321_dwbc_create(struct dc_context *ctx, struct resource_pool *poo
 	uint32_t dwb_count = pool->res_cap->num_dwb;

 	for (i = 0; i < dwb_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1519,8 +1519,8 @@ static bool dcn321_mmhubbub_create(struct dc_context *ctx, struct resource_pool
 	uint32_t dwb_count = pool->res_cap->num_dwb;

 	for (i = 0; i < dwb_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1546,7 +1546,7 @@ static struct display_stream_compressor *dcn321_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -2064,7 +2064,7 @@ struct resource_pool *dcn321_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn321_resource_pool *pool =
-		kzalloc(sizeof(struct dcn321_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn321_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c
index 5ea805fcff48..26493ed5a6fc 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c
@@ -810,7 +810,7 @@ static void dcn35_dpp_destroy(struct dpp **dpp)

 static struct dpp *dcn35_dpp_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn3_dpp *dpp = kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+	struct dcn3_dpp *dpp = kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);
 	bool success = (dpp != NULL);

 	if (!success)
@@ -841,7 +841,7 @@ static struct output_pixel_processor *dcn35_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -868,7 +868,7 @@ static struct dce_aux *dcn31_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -931,7 +931,7 @@ static struct dce_i2c_hw *dcn31_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -954,7 +954,7 @@ static struct mpc *dcn35_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc), GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -977,8 +977,8 @@ static struct hubbub *dcn35_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -1033,7 +1033,7 @@ static struct timing_generator *dcn35_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1074,7 +1074,7 @@ static struct link_encoder *dcn35_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1127,7 +1127,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 	if ((eng_id - ENGINE_ID_DIGA) > ctx->dc->res_pool->res_cap->num_dig_link_enc)
 		return NULL;

-	enc20 = kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+	enc20 = kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);
 	if (!enc20)
 		return NULL;

@@ -1144,7 +1144,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 static struct panel_cntl *dcn31_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dcn31_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dcn31_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dcn31_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1185,7 +1185,7 @@ static struct vpg *dcn31_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_vpg *vpg31 = kzalloc(sizeof(struct dcn31_vpg), GFP_KERNEL);
+	struct dcn31_vpg *vpg31 = kzalloc_obj(struct dcn31_vpg, GFP_KERNEL);

 	if (!vpg31)
 		return NULL;
@@ -1215,7 +1215,7 @@ static struct afmt *dcn31_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_afmt *afmt31 = kzalloc(sizeof(struct dcn31_afmt), GFP_KERNEL);
+	struct dcn31_afmt *afmt31 = kzalloc_obj(struct dcn31_afmt, GFP_KERNEL);

 	if (!afmt31)
 		return NULL;
@@ -1243,7 +1243,7 @@ static struct apg *dcn31_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1280,7 +1280,7 @@ static struct stream_encoder *dcn35_stream_encoder_create(
 	vpg_inst = eng_id;
 	afmt_inst = eng_id;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	afmt = dcn31_afmt_create(ctx, afmt_inst);

@@ -1338,7 +1338,8 @@ static struct hpo_dp_stream_encoder *dcn31_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	apg = dcn31_apg_create(ctx, apg_inst);

@@ -1371,7 +1372,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1390,7 +1391,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 static struct dce_hwseq *dcn35_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 #undef REG_STRUCT
 #define REG_STRUCT hwseq_reg
@@ -1571,7 +1572,7 @@ static struct hubp *dcn35_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -1604,8 +1605,8 @@ static bool dcn35_dwbc_create(struct dc_context *ctx, struct resource_pool *pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1643,8 +1644,8 @@ static bool dcn35_mmhubbub_create(struct dc_context *ctx, struct resource_pool *
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1672,7 +1673,7 @@ static struct display_stream_compressor *dcn35_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1709,7 +1710,7 @@ static struct clock_source *dcn35_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -2209,7 +2210,7 @@ struct resource_pool *dcn35_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn35_resource_pool *pool =
-		kzalloc(sizeof(struct dcn35_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn35_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c
index 424b52e2dd7b..0e204d8e1336 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c
@@ -790,7 +790,7 @@ static void dcn35_dpp_destroy(struct dpp **dpp)

 static struct dpp *dcn35_dpp_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn3_dpp *dpp = kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+	struct dcn3_dpp *dpp = kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);
 	bool success = (dpp != NULL);

 	if (!success)
@@ -821,7 +821,7 @@ static struct output_pixel_processor *dcn35_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -848,7 +848,7 @@ static struct dce_aux *dcn31_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -911,7 +911,7 @@ static struct dce_i2c_hw *dcn31_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -934,7 +934,7 @@ static struct mpc *dcn35_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc), GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -957,8 +957,8 @@ static struct hubbub *dcn35_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -1013,7 +1013,7 @@ static struct timing_generator *dcn35_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1054,7 +1054,7 @@ static struct link_encoder *dcn35_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1107,7 +1107,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 	if ((eng_id - ENGINE_ID_DIGA) > ctx->dc->res_pool->res_cap->num_dig_link_enc)
 		return NULL;

-	enc20 = kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+	enc20 = kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);
 	if (!enc20)
 		return NULL;

@@ -1124,7 +1124,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 static struct panel_cntl *dcn31_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dcn31_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dcn31_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dcn31_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1165,7 +1165,7 @@ static struct vpg *dcn31_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_vpg *vpg31 = kzalloc(sizeof(struct dcn31_vpg), GFP_KERNEL);
+	struct dcn31_vpg *vpg31 = kzalloc_obj(struct dcn31_vpg, GFP_KERNEL);

 	if (!vpg31)
 		return NULL;
@@ -1195,7 +1195,7 @@ static struct afmt *dcn31_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_afmt *afmt31 = kzalloc(sizeof(struct dcn31_afmt), GFP_KERNEL);
+	struct dcn31_afmt *afmt31 = kzalloc_obj(struct dcn31_afmt, GFP_KERNEL);

 	if (!afmt31)
 		return NULL;
@@ -1223,7 +1223,7 @@ static struct apg *dcn31_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1260,7 +1260,7 @@ static struct stream_encoder *dcn35_stream_encoder_create(
 	vpg_inst = eng_id;
 	afmt_inst = eng_id;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	afmt = dcn31_afmt_create(ctx, afmt_inst);

@@ -1318,7 +1318,8 @@ static struct hpo_dp_stream_encoder *dcn31_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	apg = dcn31_apg_create(ctx, apg_inst);

@@ -1351,7 +1352,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1370,7 +1371,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 static struct dce_hwseq *dcn351_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 #undef REG_STRUCT
 #define REG_STRUCT hwseq_reg
@@ -1551,7 +1552,7 @@ static struct hubp *dcn35_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -1584,8 +1585,8 @@ static bool dcn35_dwbc_create(struct dc_context *ctx, struct resource_pool *pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1623,8 +1624,8 @@ static bool dcn35_mmhubbub_create(struct dc_context *ctx, struct resource_pool *
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1652,7 +1653,7 @@ static struct display_stream_compressor *dcn35_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1689,7 +1690,7 @@ static struct clock_source *dcn35_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -2182,7 +2183,7 @@ struct resource_pool *dcn351_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn351_resource_pool *pool =
-		kzalloc(sizeof(struct dcn351_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn351_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn36/dcn36_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn36/dcn36_resource.c
index 7582217bd06d..c0cf8c46031f 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn36/dcn36_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn36/dcn36_resource.c
@@ -797,7 +797,7 @@ static void dcn35_dpp_destroy(struct dpp **dpp)

 static struct dpp *dcn35_dpp_create(struct dc_context *ctx, uint32_t inst)
 {
-	struct dcn3_dpp *dpp = kzalloc(sizeof(struct dcn3_dpp), GFP_KERNEL);
+	struct dcn3_dpp *dpp = kzalloc_obj(struct dcn3_dpp, GFP_KERNEL);
 	bool success = (dpp != NULL);

 	if (!success)
@@ -828,7 +828,7 @@ static struct output_pixel_processor *dcn35_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp) {
 		BREAK_TO_DEBUGGER();
@@ -855,7 +855,7 @@ static struct dce_aux *dcn31_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -918,7 +918,7 @@ static struct dce_i2c_hw *dcn31_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -941,7 +941,7 @@ static struct mpc *dcn35_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn30_mpc *mpc30 = kzalloc(sizeof(struct dcn30_mpc), GFP_KERNEL);
+	struct dcn30_mpc *mpc30 = kzalloc_obj(struct dcn30_mpc, GFP_KERNEL);

 	if (!mpc30)
 		return NULL;
@@ -964,8 +964,8 @@ static struct hubbub *dcn35_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub3 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub3 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub3)
 		return NULL;
@@ -1020,7 +1020,7 @@ static struct timing_generator *dcn35_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1061,7 +1061,7 @@ static struct link_encoder *dcn35_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1114,7 +1114,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 	if ((eng_id - ENGINE_ID_DIGA) > ctx->dc->res_pool->res_cap->num_dig_link_enc)
 		return NULL;

-	enc20 = kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+	enc20 = kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);
 	if (!enc20)
 		return NULL;

@@ -1131,7 +1131,7 @@ static struct link_encoder *dcn31_link_enc_create_minimal(
 static struct panel_cntl *dcn31_panel_cntl_create(const struct panel_cntl_init_data *init_data)
 {
 	struct dcn31_panel_cntl *panel_cntl =
-		kzalloc(sizeof(struct dcn31_panel_cntl), GFP_KERNEL);
+		kzalloc_obj(struct dcn31_panel_cntl, GFP_KERNEL);

 	if (!panel_cntl)
 		return NULL;
@@ -1172,7 +1172,7 @@ static struct vpg *dcn31_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_vpg *vpg31 = kzalloc(sizeof(struct dcn31_vpg), GFP_KERNEL);
+	struct dcn31_vpg *vpg31 = kzalloc_obj(struct dcn31_vpg, GFP_KERNEL);

 	if (!vpg31)
 		return NULL;
@@ -1202,7 +1202,7 @@ static struct afmt *dcn31_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_afmt *afmt31 = kzalloc(sizeof(struct dcn31_afmt), GFP_KERNEL);
+	struct dcn31_afmt *afmt31 = kzalloc_obj(struct dcn31_afmt, GFP_KERNEL);

 	if (!afmt31)
 		return NULL;
@@ -1230,7 +1230,7 @@ static struct apg *dcn31_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1267,7 +1267,7 @@ static struct stream_encoder *dcn35_stream_encoder_create(
 	} else
 		return NULL;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	afmt = dcn31_afmt_create(ctx, afmt_inst);

@@ -1325,7 +1325,8 @@ static struct hpo_dp_stream_encoder *dcn31_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn31_vpg_create(ctx, vpg_inst);
 	apg = dcn31_apg_create(ctx, apg_inst);

@@ -1358,7 +1359,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1377,7 +1378,7 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(
 static struct dce_hwseq *dcn36_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 #undef REG_STRUCT
 #define REG_STRUCT hwseq_reg
@@ -1558,7 +1559,7 @@ static struct hubp *dcn35_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -1591,8 +1592,8 @@ static bool dcn35_dwbc_create(struct dc_context *ctx, struct resource_pool *pool
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_dwbc *dwbc30 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc30 = kzalloc_obj(struct dcn30_dwbc,
+							GFP_KERNEL);

 		if (!dwbc30) {
 			dm_error("DC: failed to create dwbc30!\n");
@@ -1630,8 +1631,8 @@ static bool dcn35_mmhubbub_create(struct dc_context *ctx, struct resource_pool *
 	uint32_t pipe_count = pool->res_cap->num_dwb;

 	for (i = 0; i < pipe_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1659,7 +1660,7 @@ static struct display_stream_compressor *dcn35_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_dsc *dsc =
-		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -1696,7 +1697,7 @@ static struct clock_source *dcn35_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -2188,7 +2189,7 @@ struct resource_pool *dcn36_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn36_resource_pool *pool =
-		kzalloc(sizeof(struct dcn36_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn36_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c
index f5e02a1ff771..db8a0c0b8cda 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c
@@ -762,7 +762,7 @@ static struct dce_aux *dcn401_aux_engine_create(
 	uint32_t inst)
 {
 	struct aux_engine_dce110 *aux_engine =
-		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
+		kzalloc_obj(struct aux_engine_dce110, GFP_KERNEL);

 	if (!aux_engine)
 		return NULL;
@@ -801,7 +801,7 @@ static struct dce_i2c_hw *dcn401_i2c_hw_create(
 	uint32_t inst)
 {
 	struct dce_i2c_hw *dce_i2c_hw =
-		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
+		kzalloc_obj(struct dce_i2c_hw, GFP_KERNEL);

 	if (!dce_i2c_hw)
 		return NULL;
@@ -827,7 +827,7 @@ static struct clock_source *dcn401_clock_source_create(
 		bool dp_clk_src)
 {
 	struct dce110_clk_src *clk_src =
-		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
+		kzalloc_obj(struct dce110_clk_src, GFP_KERNEL);

 	if (!clk_src)
 		return NULL;
@@ -847,8 +847,8 @@ static struct hubbub *dcn401_hubbub_create(struct dc_context *ctx)
 {
 	int i;

-	struct dcn20_hubbub *hubbub2 = kzalloc(sizeof(struct dcn20_hubbub),
-					  GFP_KERNEL);
+	struct dcn20_hubbub *hubbub2 = kzalloc_obj(struct dcn20_hubbub,
+						   GFP_KERNEL);

 	if (!hubbub2)
 		return NULL;
@@ -900,7 +900,7 @@ static struct hubbub *dcn401_hubbub_create(struct dc_context *ctx)

 static struct dio *dcn401_dio_create(struct dc_context *ctx)
 {
-	struct dcn10_dio *dio10 = kzalloc(sizeof(struct dcn10_dio), GFP_KERNEL);
+	struct dcn10_dio *dio10 = kzalloc_obj(struct dcn10_dio, GFP_KERNEL);

 	if (!dio10)
 		return NULL;
@@ -919,7 +919,7 @@ static struct hubp *dcn401_hubp_create(
 	uint32_t inst)
 {
 	struct dcn20_hubp *hubp2 =
-		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_hubp, GFP_KERNEL);

 	if (!hubp2)
 		return NULL;
@@ -951,7 +951,7 @@ static struct dpp *dcn401_dpp_create(
 	uint32_t inst)
 {
 	struct dcn401_dpp *dpp401 =
-		kzalloc(sizeof(struct dcn401_dpp), GFP_KERNEL);
+		kzalloc_obj(struct dcn401_dpp, GFP_KERNEL);

 	if (!dpp401)
 		return NULL;
@@ -977,8 +977,7 @@ static struct mpc *dcn401_mpc_create(
 		int num_mpcc,
 		int num_rmu)
 {
-	struct dcn401_mpc *mpc401 = kzalloc(sizeof(struct dcn401_mpc),
-					  GFP_KERNEL);
+	struct dcn401_mpc *mpc401 = kzalloc_obj(struct dcn401_mpc, GFP_KERNEL);

 	if (!mpc401)
 		return NULL;
@@ -1001,7 +1000,7 @@ static struct output_pixel_processor *dcn401_opp_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn20_opp *opp4 =
-		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_opp, GFP_KERNEL);

 	if (!opp4) {
 		BREAK_TO_DEBUGGER();
@@ -1026,7 +1025,7 @@ static struct timing_generator *dcn401_timing_generator_create(
 		uint32_t instance)
 {
 	struct optc *tgn10 =
-		kzalloc(sizeof(struct optc), GFP_KERNEL);
+		kzalloc_obj(struct optc, GFP_KERNEL);

 	if (!tgn10)
 		return NULL;
@@ -1066,7 +1065,7 @@ static struct link_encoder *dcn401_link_encoder_create(
 	const struct encoder_init_data *enc_init_data)
 {
 	struct dcn20_link_encoder *enc20 =
-		kzalloc(sizeof(struct dcn20_link_encoder), GFP_KERNEL);
+		kzalloc_obj(struct dcn20_link_encoder, GFP_KERNEL);

 	if (!enc20 || enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs))
 		return NULL;
@@ -1131,7 +1130,7 @@ static struct vpg *dcn401_vpg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_vpg *vpg4 = kzalloc(sizeof(struct dcn31_vpg), GFP_KERNEL);
+	struct dcn31_vpg *vpg4 = kzalloc_obj(struct dcn31_vpg, GFP_KERNEL);

 	if (!vpg4)
 		return NULL;
@@ -1161,7 +1160,7 @@ static struct afmt *dcn401_afmt_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn30_afmt *afmt401 = kzalloc(sizeof(struct dcn30_afmt), GFP_KERNEL);
+	struct dcn30_afmt *afmt401 = kzalloc_obj(struct dcn30_afmt, GFP_KERNEL);

 	if (!afmt401)
 		return NULL;
@@ -1186,7 +1185,7 @@ static struct apg *dcn401_apg_create(
 	struct dc_context *ctx,
 	uint32_t inst)
 {
-	struct dcn31_apg *apg31 = kzalloc(sizeof(struct dcn31_apg), GFP_KERNEL);
+	struct dcn31_apg *apg31 = kzalloc_obj(struct dcn31_apg, GFP_KERNEL);

 	if (!apg31)
 		return NULL;
@@ -1223,7 +1222,7 @@ static struct stream_encoder *dcn401_stream_encoder_create(
 	} else
 		return NULL;

-	enc1 = kzalloc(sizeof(struct dcn10_stream_encoder), GFP_KERNEL);
+	enc1 = kzalloc_obj(struct dcn10_stream_encoder, GFP_KERNEL);
 	vpg = dcn401_vpg_create(ctx, vpg_inst);
 	afmt = dcn401_afmt_create(ctx, afmt_inst);

@@ -1279,7 +1278,8 @@ static struct hpo_dp_stream_encoder *dcn401_hpo_dp_stream_encoder_create(
 	apg_inst = hpo_dp_inst;

 	/* allocate HPO stream encoder and create VPG sub-block */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_stream_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_stream_encoder,
+				   GFP_KERNEL);
 	vpg = dcn401_vpg_create(ctx, vpg_inst);
 	apg = dcn401_apg_create(ctx, apg_inst);

@@ -1312,7 +1312,7 @@ static struct hpo_dp_link_encoder *dcn401_hpo_dp_link_encoder_create(
 	struct dcn31_hpo_dp_link_encoder *hpo_dp_enc31;

 	/* allocate HPO link encoder */
-	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
+	hpo_dp_enc31 = kzalloc_obj(struct dcn31_hpo_dp_link_encoder, GFP_KERNEL);
 	if (!hpo_dp_enc31)
 		return NULL; /* out of memory */

@@ -1356,7 +1356,7 @@ static unsigned int dcn401_calc_num_avail_chans_for_mall(struct dc *dc, unsigned
 static struct dce_hwseq *dcn401_hwseq_create(
 	struct dc_context *ctx)
 {
-	struct dce_hwseq *hws = kzalloc(sizeof(struct dce_hwseq), GFP_KERNEL);
+	struct dce_hwseq *hws = kzalloc_obj(struct dce_hwseq, GFP_KERNEL);

 #undef REG_STRUCT
 #define REG_STRUCT hwseq_reg
@@ -1551,8 +1551,8 @@ static bool dcn401_dwbc_create(struct dc_context *ctx, struct resource_pool *poo
 	uint32_t dwb_count = pool->res_cap->num_dwb;

 	for (i = 0; i < dwb_count; i++) {
-		struct dcn30_dwbc *dwbc401 = kzalloc(sizeof(struct dcn30_dwbc),
-						    GFP_KERNEL);
+		struct dcn30_dwbc *dwbc401 = kzalloc_obj(struct dcn30_dwbc,
+							 GFP_KERNEL);

 		if (!dwbc401) {
 			dm_error("DC: failed to create dwbc401!\n");
@@ -1582,8 +1582,8 @@ static bool dcn401_mmhubbub_create(struct dc_context *ctx, struct resource_pool
 	uint32_t dwb_count = pool->res_cap->num_dwb;

 	for (i = 0; i < dwb_count; i++) {
-		struct dcn30_mmhubbub *mcif_wb30 = kzalloc(sizeof(struct dcn30_mmhubbub),
-						    GFP_KERNEL);
+		struct dcn30_mmhubbub *mcif_wb30 = kzalloc_obj(struct dcn30_mmhubbub,
+							       GFP_KERNEL);

 		if (!mcif_wb30) {
 			dm_error("DC: failed to create mcif_wb30!\n");
@@ -1609,7 +1609,7 @@ static struct display_stream_compressor *dcn401_dsc_create(
 	struct dc_context *ctx, uint32_t inst)
 {
 	struct dcn401_dsc *dsc =
-		kzalloc(sizeof(struct dcn401_dsc), GFP_KERNEL);
+		kzalloc_obj(struct dcn401_dsc, GFP_KERNEL);

 	if (!dsc) {
 		BREAK_TO_DEBUGGER();
@@ -2314,7 +2314,7 @@ struct resource_pool *dcn401_create_resource_pool(
 		struct dc *dc)
 {
 	struct dcn401_resource_pool *pool =
-		kzalloc(sizeof(struct dcn401_resource_pool), GFP_KERNEL);
+		kzalloc_obj(struct dcn401_resource_pool, GFP_KERNEL);

 	if (!pool)
 		return NULL;
diff --git a/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/soc_and_ip_translator.c b/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/soc_and_ip_translator.c
index 0fc0e5a6c171..1334d0efe6e3 100644
--- a/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/soc_and_ip_translator.c
+++ b/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/soc_and_ip_translator.c
@@ -21,7 +21,7 @@ struct soc_and_ip_translator *dc_create_soc_and_ip_translator(enum dce_version d
 {
 	struct soc_and_ip_translator *soc_and_ip_translator;

-	soc_and_ip_translator = kzalloc(sizeof(*soc_and_ip_translator), GFP_KERNEL);
+	soc_and_ip_translator = kzalloc_obj(*soc_and_ip_translator, GFP_KERNEL);
 	if (!soc_and_ip_translator)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
index a71df052cf25..33a7627191f8 100644
--- a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
+++ b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
@@ -933,7 +933,7 @@ static bool build_regamma(struct pwl_float_data_ex *rgb_regamma,
 	struct pwl_float_data_ex *rgb = rgb_regamma;
 	const struct hw_x_point *coord_x = coordinate_x;

-	coeff = kvzalloc(sizeof(*coeff), GFP_KERNEL);
+	coeff = kvzalloc_obj(*coeff, GFP_KERNEL);
 	if (!coeff)
 		goto release;

@@ -1714,14 +1714,15 @@ bool mod_color_calculate_degamma_params(struct dc_color_caps *dc_caps,
 	input_tf->type = TF_TYPE_DISTRIBUTED_POINTS;

 	if (map_user_ramp && ramp && ramp->type == GAMMA_RGB_256) {
-		rgb_user = kvcalloc(ramp->num_entries + _EXTRA_POINTS,
-				sizeof(*rgb_user),
-				GFP_KERNEL);
+		rgb_user = kvzalloc_objs(*rgb_user,
+					 ramp->num_entries + _EXTRA_POINTS,
+					 GFP_KERNEL);
 		if (!rgb_user)
 			goto rgb_user_alloc_fail;

-		axis_x = kvcalloc(ramp->num_entries + _EXTRA_POINTS, sizeof(*axis_x),
-				GFP_KERNEL);
+		axis_x = kvzalloc_objs(*axis_x,
+				       ramp->num_entries + _EXTRA_POINTS,
+				       GFP_KERNEL);
 		if (!axis_x)
 			goto axis_x_alloc_fail;

@@ -1737,13 +1738,11 @@ bool mod_color_calculate_degamma_params(struct dc_color_caps *dc_caps,
 		scale_gamma(rgb_user, ramp, dividers);
 	}

-	curve = kvcalloc(MAX_HW_POINTS + _EXTRA_POINTS, sizeof(*curve),
-			GFP_KERNEL);
+	curve = kvzalloc_objs(*curve, MAX_HW_POINTS + _EXTRA_POINTS, GFP_KERNEL);
 	if (!curve)
 		goto curve_alloc_fail;

-	coeff = kvcalloc(MAX_HW_POINTS + _EXTRA_POINTS, sizeof(*coeff),
-			GFP_KERNEL);
+	coeff = kvzalloc_objs(*coeff, MAX_HW_POINTS + _EXTRA_POINTS, GFP_KERNEL);
 	if (!coeff)
 		goto coeff_alloc_fail;

@@ -1940,14 +1939,14 @@ bool mod_color_calculate_regamma_params(struct dc_transfer_func *output_tf,

 	if (ramp && ramp->type != GAMMA_CS_TFM_1D &&
 	    (map_user_ramp || ramp->type != GAMMA_RGB_256)) {
-		rgb_user = kvcalloc(ramp->num_entries + _EXTRA_POINTS,
-			    sizeof(*rgb_user),
-			    GFP_KERNEL);
+		rgb_user = kvzalloc_objs(*rgb_user,
+					 ramp->num_entries + _EXTRA_POINTS,
+					 GFP_KERNEL);
 		if (!rgb_user)
 			goto rgb_user_alloc_fail;

-		axis_x = kvcalloc(ramp->num_entries + 3, sizeof(*axis_x),
-				GFP_KERNEL);
+		axis_x = kvzalloc_objs(*axis_x, ramp->num_entries + 3,
+				       GFP_KERNEL);
 		if (!axis_x)
 			goto axis_x_alloc_fail;

@@ -1966,14 +1965,12 @@ bool mod_color_calculate_regamma_params(struct dc_transfer_func *output_tf,
 			scale_gamma_dx(rgb_user, ramp, dividers);
 	}

-	rgb_regamma = kvcalloc(MAX_HW_POINTS + _EXTRA_POINTS,
-			       sizeof(*rgb_regamma),
-			       GFP_KERNEL);
+	rgb_regamma = kvzalloc_objs(*rgb_regamma, MAX_HW_POINTS + _EXTRA_POINTS,
+				    GFP_KERNEL);
 	if (!rgb_regamma)
 		goto rgb_regamma_alloc_fail;

-	coeff = kvcalloc(MAX_HW_POINTS + _EXTRA_POINTS, sizeof(*coeff),
-			 GFP_KERNEL);
+	coeff = kvzalloc_objs(*coeff, MAX_HW_POINTS + _EXTRA_POINTS, GFP_KERNEL);
 	if (!coeff)
 		goto coeff_alloc_fail;

diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
index 1aae46d703ba..b819610021f2 100644
--- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
+++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
@@ -61,7 +61,7 @@ struct core_freesync {
 struct mod_freesync *mod_freesync_create(struct dc *dc)
 {
 	struct core_freesync *core_freesync =
-			kzalloc(sizeof(struct core_freesync), GFP_KERNEL);
+			kzalloc_obj(struct core_freesync, GFP_KERNEL);

 	if (core_freesync == NULL)
 		goto fail_alloc_context;
diff --git a/drivers/gpu/drm/amd/display/modules/vmid/vmid.c b/drivers/gpu/drm/amd/display/modules/vmid/vmid.c
index 2c40212d86da..ccd35d1f05ec 100644
--- a/drivers/gpu/drm/amd/display/modules/vmid/vmid.c
+++ b/drivers/gpu/drm/amd/display/modules/vmid/vmid.c
@@ -144,7 +144,7 @@ struct mod_vmid *mod_vmid_create(
 	if (dc == NULL)
 		goto fail_dc_null;

-	core_vmid = kzalloc(sizeof(struct core_vmid), GFP_KERNEL);
+	core_vmid = kzalloc_obj(struct core_vmid, GFP_KERNEL);

 	if (core_vmid == NULL)
 		goto fail_alloc_context;
diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
index 938361ecae05..28b178d0aff6 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
@@ -2746,7 +2746,7 @@ static int amdgpu_device_attr_create(struct amdgpu_device *adev,
 			name, ret);
 	}

-	attr_entry = kmalloc(sizeof(*attr_entry), GFP_KERNEL);
+	attr_entry = kmalloc_obj(*attr_entry, GFP_KERNEL);
 	if (!attr_entry)
 		return -ENOMEM;

@@ -4592,7 +4592,7 @@ static int amdgpu_od_set_init(struct amdgpu_device *adev)
 	int ret;

 	/* Setup the top `gpu_od` directory which holds all other OD interfaces */
-	top_set = kzalloc(sizeof(*top_set), GFP_KERNEL);
+	top_set = kzalloc_obj(*top_set, GFP_KERNEL);
 	if (!top_set)
 		return -ENOMEM;
 	list_add(&top_set->entry, &adev->pm.od_kobj_list);
@@ -4629,7 +4629,7 @@ static int amdgpu_od_set_init(struct amdgpu_device *adev)
 			 * The container is presented as a plain file under top `gpu_od`
 			 * directory.
 			 */
-			attribute = kzalloc(sizeof(*attribute), GFP_KERNEL);
+			attribute = kzalloc_obj(*attribute, GFP_KERNEL);
 			if (!attribute) {
 				ret = -ENOMEM;
 				goto err_out;
@@ -4649,7 +4649,7 @@ static int amdgpu_od_set_init(struct amdgpu_device *adev)
 				goto err_out;
 		} else {
 			/* The container is presented as a sub directory. */
-			sub_set = kzalloc(sizeof(*sub_set), GFP_KERNEL);
+			sub_set = kzalloc_obj(*sub_set, GFP_KERNEL);
 			if (!sub_set) {
 				ret = -ENOMEM;
 				goto err_out;
@@ -4679,7 +4679,7 @@ static int amdgpu_od_set_init(struct amdgpu_device *adev)
 				 * With the container presented as a sub directory, the entry within
 				 * it is presented as a plain file under the sub directory.
 				 */
-				attribute = kzalloc(sizeof(*attribute), GFP_KERNEL);
+				attribute = kzalloc_obj(*attribute, GFP_KERNEL);
 				if (!attribute) {
 					ret = -ENOMEM;
 					goto err_out;
diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c b/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c
index 33eb85dd68e9..5d0c0c5a706b 100644
--- a/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c
+++ b/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c
@@ -2724,9 +2724,8 @@ static int kv_parse_power_table(struct amdgpu_device *adev)
 		(mode_info->atom_context->bios + data_offset +
 		 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset));

-	adev->pm.dpm.ps = kcalloc(state_array->ucNumEntries,
-				  sizeof(struct amdgpu_ps),
-				  GFP_KERNEL);
+	adev->pm.dpm.ps = kzalloc_objs(struct amdgpu_ps,
+				       state_array->ucNumEntries, GFP_KERNEL);
 	if (!adev->pm.dpm.ps)
 		return -ENOMEM;
 	power_state_offset = (u8 *)state_array->states;
@@ -2736,7 +2735,7 @@ static int kv_parse_power_table(struct amdgpu_device *adev)
 		non_clock_array_index = power_state->v2.nonClockInfoIndex;
 		non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
 			&non_clock_info_array->nonClockInfo[non_clock_array_index];
-		ps = kzalloc(sizeof(struct kv_ps), GFP_KERNEL);
+		ps = kzalloc_obj(struct kv_ps, GFP_KERNEL);
 		if (ps == NULL)
 			return -ENOMEM;
 		adev->pm.dpm.ps[i].ps_priv = ps;
@@ -2783,7 +2782,7 @@ static int kv_dpm_init(struct amdgpu_device *adev)
 	struct kv_power_info *pi;
 	int ret, i;

-	pi = kzalloc(sizeof(struct kv_power_info), GFP_KERNEL);
+	pi = kzalloc_obj(struct kv_power_info, GFP_KERNEL);
 	if (pi == NULL)
 		return -ENOMEM;
 	adev->pm.dpm.priv = pi;
diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c b/drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c
index c7ed0b457129..c41bcc8a7efb 100644
--- a/drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c
+++ b/drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c
@@ -302,9 +302,8 @@ int amdgpu_parse_extended_power_table(struct amdgpu_device *adev)
 			ATOM_PPLIB_PhaseSheddingLimits_Record *entry;

 			adev->pm.dpm.dyn_state.phase_shedding_limits_table.entries =
-				kcalloc(psl->ucNumEntries,
-					sizeof(struct amdgpu_phase_shedding_limits_entry),
-					GFP_KERNEL);
+				kzalloc_objs(struct amdgpu_phase_shedding_limits_entry,
+					     psl->ucNumEntries, GFP_KERNEL);
 			if (!adev->pm.dpm.dyn_state.phase_shedding_limits_table.entries)
 				return -ENOMEM;

@@ -503,7 +502,7 @@ int amdgpu_parse_extended_power_table(struct amdgpu_device *adev)
 				(mode_info->atom_context->bios + data_offset +
 				 le16_to_cpu(ext_hdr->usPPMTableOffset));
 			adev->pm.dpm.dyn_state.ppm_table =
-				kzalloc(sizeof(struct amdgpu_ppm_table), GFP_KERNEL);
+				kzalloc_obj(struct amdgpu_ppm_table, GFP_KERNEL);
 			if (!adev->pm.dpm.dyn_state.ppm_table)
 				return -ENOMEM;
 			adev->pm.dpm.dyn_state.ppm_table->ppm_design = ppm->ucPpmDesign;
@@ -557,7 +556,8 @@ int amdgpu_parse_extended_power_table(struct amdgpu_device *adev)
 					 le16_to_cpu(ext_hdr->usPowerTuneTableOffset));
 			ATOM_PowerTune_Table *pt;
 			adev->pm.dpm.dyn_state.cac_tdp_table =
-				kzalloc(sizeof(struct amdgpu_cac_tdp_table), GFP_KERNEL);
+				kzalloc_obj(struct amdgpu_cac_tdp_table,
+					    GFP_KERNEL);
 			if (!adev->pm.dpm.dyn_state.cac_tdp_table)
 				return -ENOMEM;
 			if (rev > 0) {
diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
index d8959e0f109c..b4fc0106f973 100644
--- a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
+++ b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
@@ -2586,7 +2586,7 @@ static int si_initialize_smc_dte_tables(struct amdgpu_device *adev)
 	if (dte_data->k <= 0)
 		return -EINVAL;

-	dte_tables = kzalloc(sizeof(Smc_SIslands_DTE_Configuration), GFP_KERNEL);
+	dte_tables = kzalloc_obj(Smc_SIslands_DTE_Configuration, GFP_KERNEL);
 	if (dte_tables == NULL) {
 		si_pi->enable_dte = false;
 		return -ENOMEM;
@@ -2767,7 +2767,7 @@ static int si_initialize_smc_cac_tables(struct amdgpu_device *adev)
 	if (ni_pi->enable_cac == false)
 		return 0;

-	cac_tables = kzalloc(sizeof(PP_SIslands_CacConfig), GFP_KERNEL);
+	cac_tables = kzalloc_obj(PP_SIslands_CacConfig, GFP_KERNEL);
 	if (!cac_tables)
 		return -ENOMEM;

@@ -2964,7 +2964,7 @@ static int si_init_smc_spll_table(struct amdgpu_device *adev)
 	if (si_pi->spll_table_start == 0)
 		return -EINVAL;

-	spll_table = kzalloc(sizeof(SMC_SISLANDS_SPLL_DIV_TABLE), GFP_KERNEL);
+	spll_table = kzalloc_obj(SMC_SISLANDS_SPLL_DIV_TABLE, GFP_KERNEL);
 	if (spll_table == NULL)
 		return -ENOMEM;

@@ -6054,7 +6054,7 @@ static int si_initialize_mc_reg_table(struct amdgpu_device *adev)
 	u8 module_index = rv770_get_memory_module_index(adev);
 	int ret;

-	table = kzalloc(sizeof(struct atom_mc_reg_table), GFP_KERNEL);
+	table = kzalloc_obj(struct atom_mc_reg_table, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -7341,9 +7341,8 @@ static int si_parse_power_table(struct amdgpu_device *adev)
 		(mode_info->atom_context->bios + data_offset +
 		 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset));

-	adev->pm.dpm.ps = kcalloc(state_array->ucNumEntries,
-				  sizeof(struct amdgpu_ps),
-				  GFP_KERNEL);
+	adev->pm.dpm.ps = kzalloc_objs(struct amdgpu_ps,
+				       state_array->ucNumEntries, GFP_KERNEL);
 	if (!adev->pm.dpm.ps)
 		return -ENOMEM;
 	power_state_offset = (u8 *)state_array->states;
@@ -7353,7 +7352,7 @@ static int si_parse_power_table(struct amdgpu_device *adev)
 		non_clock_array_index = power_state->v2.nonClockInfoIndex;
 		non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
 			&non_clock_info_array->nonClockInfo[non_clock_array_index];
-		ps = kzalloc(sizeof(struct  si_ps), GFP_KERNEL);
+		ps = kzalloc_obj(struct si_ps, GFP_KERNEL);
 		if (ps == NULL)
 			return -ENOMEM;
 		adev->pm.dpm.ps[i].ps_priv = ps;
@@ -7406,7 +7405,7 @@ static int si_dpm_init(struct amdgpu_device *adev)
 	struct atom_clock_dividers dividers;
 	int ret;

-	si_pi = kzalloc(sizeof(struct si_power_info), GFP_KERNEL);
+	si_pi = kzalloc_obj(struct si_power_info, GFP_KERNEL);
 	if (si_pi == NULL)
 		return -ENOMEM;
 	adev->pm.dpm.priv = si_pi;
@@ -7443,9 +7442,8 @@ static int si_dpm_init(struct amdgpu_device *adev)
 		return ret;

 	adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries =
-		kcalloc(4,
-			sizeof(struct amdgpu_clock_voltage_dependency_entry),
-			GFP_KERNEL);
+		kzalloc_objs(struct amdgpu_clock_voltage_dependency_entry, 4,
+			     GFP_KERNEL);
 	if (!adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
index 0bbb89788335..cd3036e33c5a 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
@@ -41,7 +41,7 @@ static int amd_powerplay_create(struct amdgpu_device *adev)
 	if (adev == NULL)
 		return -EINVAL;

-	hwmgr = kzalloc(sizeof(struct pp_hwmgr), GFP_KERNEL);
+	hwmgr = kzalloc_obj(struct pp_hwmgr, GFP_KERNEL);
 	if (hwmgr == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/process_pptables_v1_0.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/process_pptables_v1_0.c
index 6cfef1b295ab..a1292d5b0a1c 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/process_pptables_v1_0.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/process_pptables_v1_0.c
@@ -165,7 +165,7 @@ static int get_vddc_lookup_table(
 	PP_ASSERT_WITH_CODE((0 != vddc_lookup_pp_tables->ucNumEntries),
 		"Invalid CAC Leakage PowerPlay Table!", return 1);

-	table = kzalloc(struct_size(table, entries, max_levels), GFP_KERNEL);
+	table = kzalloc_flex(*table, entries, max_levels, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -200,7 +200,7 @@ static int get_platform_power_management_table(
 		struct pp_hwmgr *hwmgr,
 		ATOM_Tonga_PPM_Table *atom_ppm_table)
 {
-	struct phm_ppm_table *ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+	struct phm_ppm_table *ptr = kzalloc_obj(*ptr, GFP_KERNEL);
 	struct phm_ppt_v1_information *pp_table_information =
 		(struct phm_ppt_v1_information *)(hwmgr->pptable);

@@ -321,8 +321,8 @@ static int get_valid_clk(
 	PP_ASSERT_WITH_CODE((0 != clk_volt_pp_table->count),
 		"Invalid PowerPlay Table!", return -1);

-	table = kzalloc(struct_size(table, values, clk_volt_pp_table->count),
-			GFP_KERNEL);
+	table = kzalloc_flex(*table, values, clk_volt_pp_table->count,
+			     GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -371,8 +371,8 @@ static int get_mclk_voltage_dependency_table(
 	PP_ASSERT_WITH_CODE((0 != mclk_dep_table->ucNumEntries),
 		"Invalid PowerPlay Table!", return -1);

-	mclk_table = kzalloc(struct_size(mclk_table, entries, mclk_dep_table->ucNumEntries),
-			     GFP_KERNEL);
+	mclk_table = kzalloc_flex(*mclk_table, entries,
+				  mclk_dep_table->ucNumEntries, GFP_KERNEL);
 	if (!mclk_table)
 		return -ENOMEM;

@@ -415,8 +415,8 @@ static int get_sclk_voltage_dependency_table(
 		PP_ASSERT_WITH_CODE((0 != tonga_table->ucNumEntries),
 			"Invalid PowerPlay Table!", return -1);

-		sclk_table = kzalloc(struct_size(sclk_table, entries, tonga_table->ucNumEntries),
-				     GFP_KERNEL);
+		sclk_table = kzalloc_flex(*sclk_table, entries,
+					  tonga_table->ucNumEntries, GFP_KERNEL);
 		if (!sclk_table)
 			return -ENOMEM;

@@ -444,8 +444,9 @@ static int get_sclk_voltage_dependency_table(
 		PP_ASSERT_WITH_CODE((0 != polaris_table->ucNumEntries),
 			"Invalid PowerPlay Table!", return -1);

-		sclk_table = kzalloc(struct_size(sclk_table, entries, polaris_table->ucNumEntries),
-				     GFP_KERNEL);
+		sclk_table = kzalloc_flex(*sclk_table, entries,
+					  polaris_table->ucNumEntries,
+					  GFP_KERNEL);
 		if (!sclk_table)
 			return -ENOMEM;

@@ -491,9 +492,9 @@ static int get_pcie_table(
 		PP_ASSERT_WITH_CODE((atom_pcie_table->ucNumEntries != 0),
 			"Invalid PowerPlay Table!", return -1);

-		pcie_table = kzalloc(struct_size(pcie_table, entries,
-						 atom_pcie_table->ucNumEntries),
-				     GFP_KERNEL);
+		pcie_table = kzalloc_flex(*pcie_table, entries,
+					  atom_pcie_table->ucNumEntries,
+					  GFP_KERNEL);
 		if (!pcie_table)
 			return -ENOMEM;

@@ -528,9 +529,9 @@ static int get_pcie_table(
 		PP_ASSERT_WITH_CODE((atom_pcie_table->ucNumEntries != 0),
 			"Invalid PowerPlay Table!", return -1);

-		pcie_table = kzalloc(struct_size(pcie_table, entries,
-						 atom_pcie_table->ucNumEntries),
-				     GFP_KERNEL);
+		pcie_table = kzalloc_flex(*pcie_table, entries,
+					  atom_pcie_table->ucNumEntries,
+					  GFP_KERNEL);
 		if (!pcie_table)
 			return -ENOMEM;

@@ -724,8 +725,8 @@ static int get_mm_clock_voltage_table(

 	PP_ASSERT_WITH_CODE((0 != mm_dependency_table->ucNumEntries),
 		"Invalid PowerPlay Table!", return -1);
-	mm_table = kzalloc(struct_size(mm_table, entries, mm_dependency_table->ucNumEntries),
-			   GFP_KERNEL);
+	mm_table = kzalloc_flex(*mm_table, entries,
+				mm_dependency_table->ucNumEntries, GFP_KERNEL);
 	if (!mm_table)
 		return -ENOMEM;

@@ -1141,7 +1142,7 @@ static int pp_tables_v1_0_initialize(struct pp_hwmgr *hwmgr)
 	int result = 0;
 	const ATOM_Tonga_POWERPLAYTABLE *powerplay_table;

-	hwmgr->pptable = kzalloc(sizeof(struct phm_ppt_v1_information), GFP_KERNEL);
+	hwmgr->pptable = kzalloc_obj(struct phm_ppt_v1_information, GFP_KERNEL);

 	PP_ASSERT_WITH_CODE((NULL != hwmgr->pptable),
 			    "Failed to allocate hwmgr->pptable!", return -ENOMEM);
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/processpptables.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/processpptables.c
index f06b29e33ba4..b19409890899 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/processpptables.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/processpptables.c
@@ -382,8 +382,8 @@ static int get_clock_voltage_dependency_table(struct pp_hwmgr *hwmgr,
 	unsigned long i;
 	struct phm_clock_voltage_dependency_table *dep_table;

-	dep_table = kzalloc(struct_size(dep_table, entries, table->ucNumEntries),
-			    GFP_KERNEL);
+	dep_table = kzalloc_flex(*dep_table, entries, table->ucNumEntries,
+				 GFP_KERNEL);
 	if (NULL == dep_table)
 		return -ENOMEM;

@@ -409,7 +409,8 @@ static int get_valid_clk(struct pp_hwmgr *hwmgr,
 	unsigned long i;
 	struct phm_clock_array *clock_table;

-	clock_table = kzalloc(struct_size(clock_table, values, table->count), GFP_KERNEL);
+	clock_table = kzalloc_flex(*clock_table, values, table->count,
+				   GFP_KERNEL);
 	if (!clock_table)
 		return -ENOMEM;

@@ -1209,8 +1210,8 @@ static int get_uvd_clock_voltage_limit_table(struct pp_hwmgr *hwmgr,
 	unsigned long i;
 	struct phm_uvd_clock_voltage_dependency_table *uvd_table;

-	uvd_table = kzalloc(struct_size(uvd_table, entries, table->numEntries),
-			    GFP_KERNEL);
+	uvd_table = kzalloc_flex(*uvd_table, entries, table->numEntries,
+				 GFP_KERNEL);
 	if (!uvd_table)
 		return -ENOMEM;

@@ -1239,8 +1240,8 @@ static int get_vce_clock_voltage_limit_table(struct pp_hwmgr *hwmgr,
 	unsigned long i;
 	struct phm_vce_clock_voltage_dependency_table *vce_table;

-	vce_table = kzalloc(struct_size(vce_table, entries, table->numEntries),
-			    GFP_KERNEL);
+	vce_table = kzalloc_flex(*vce_table, entries, table->numEntries,
+				 GFP_KERNEL);
 	if (!vce_table)
 		return -ENOMEM;

@@ -1267,8 +1268,8 @@ static int get_samu_clock_voltage_limit_table(struct pp_hwmgr *hwmgr,
 	unsigned long i;
 	struct phm_samu_clock_voltage_dependency_table *samu_table;

-	samu_table = kzalloc(struct_size(samu_table, entries, table->numEntries),
-			     GFP_KERNEL);
+	samu_table = kzalloc_flex(*samu_table, entries, table->numEntries,
+				  GFP_KERNEL);
 	if (!samu_table)
 		return -ENOMEM;

@@ -1292,8 +1293,8 @@ static int get_acp_clock_voltage_limit_table(struct pp_hwmgr *hwmgr,
 	unsigned long i;
 	struct phm_acp_clock_voltage_dependency_table *acp_table;

-	acp_table = kzalloc(struct_size(acp_table, entries, table->numEntries),
-			    GFP_KERNEL);
+	acp_table = kzalloc_flex(*acp_table, entries, table->numEntries,
+				 GFP_KERNEL);
 	if (!acp_table)
 		return -ENOMEM;

@@ -1487,8 +1488,8 @@ static int get_cac_leakage_table(struct pp_hwmgr *hwmgr,
 	if (!hwmgr || !table || !ptable)
 		return -EINVAL;

-	cac_leakage_table = kzalloc(struct_size(cac_leakage_table, entries, table->ucNumEntries),
-				    GFP_KERNEL);
+	cac_leakage_table = kzalloc_flex(*cac_leakage_table, entries,
+					 table->ucNumEntries, GFP_KERNEL);
 	if (!cac_leakage_table)
 		return -ENOMEM;

@@ -1514,7 +1515,8 @@ static int get_cac_leakage_table(struct pp_hwmgr *hwmgr,
 static int get_platform_power_management_table(struct pp_hwmgr *hwmgr,
 			ATOM_PPLIB_PPM_Table *atom_ppm_table)
 {
-	struct phm_ppm_table *ptr = kzalloc(sizeof(struct phm_ppm_table), GFP_KERNEL);
+	struct phm_ppm_table *ptr = kzalloc_obj(struct phm_ppm_table,
+						GFP_KERNEL);

 	if (NULL == ptr)
 		return -ENOMEM;
@@ -1625,8 +1627,8 @@ static int init_phase_shedding_table(struct pp_hwmgr *hwmgr,
 			unsigned long i;


-			table = kzalloc(struct_size(table, entries, ptable->ucNumEntries),
-					GFP_KERNEL);
+			table = kzalloc_flex(*table, entries,
+					     ptable->ucNumEntries, GFP_KERNEL);
 			if (!table)
 				return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c
index 8de8d66df95f..49dc20b790ad 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c
@@ -133,8 +133,7 @@ static int smu10_init_dynamic_state_adjustment_rule_settings(
 	int count = 8;
 	struct phm_clock_voltage_dependency_table *table_clk_vlt;

-	table_clk_vlt = kzalloc(struct_size(table_clk_vlt, entries, count),
-				GFP_KERNEL);
+	table_clk_vlt = kzalloc_flex(*table_clk_vlt, entries, count, GFP_KERNEL);

 	if (NULL == table_clk_vlt) {
 		pr_err("Can not allocate memory!\n");
@@ -473,7 +472,7 @@ static int smu10_get_clock_voltage_dependency_table(struct pp_hwmgr *hwmgr,
 	uint32_t i;
 	struct smu10_voltage_dependency_table *ptable;

-	ptable = kzalloc(struct_size(ptable, entries, num_entry), GFP_KERNEL);
+	ptable = kzalloc_flex(*ptable, entries, num_entry, GFP_KERNEL);
 	if (NULL == ptable)
 		return -ENOMEM;

@@ -551,7 +550,7 @@ static int smu10_hwmgr_backend_init(struct pp_hwmgr *hwmgr)
 	int result = 0;
 	struct smu10_hwmgr *data;

-	data = kzalloc(sizeof(struct smu10_hwmgr), GFP_KERNEL);
+	data = kzalloc_obj(struct smu10_hwmgr, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
index 2be584aefd0a..a97136743723 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
@@ -2961,7 +2961,7 @@ static int smu7_hwmgr_backend_init(struct pp_hwmgr *hwmgr)
 	struct smu7_hwmgr *data;
 	int result = 0;

-	data = kzalloc(sizeof(struct smu7_hwmgr), GFP_KERNEL);
+	data = kzalloc_obj(struct smu7_hwmgr, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;

@@ -4652,7 +4652,7 @@ static const struct amdgpu_irq_src_funcs smu7_irq_funcs = {
 static int smu7_register_irq_handlers(struct pp_hwmgr *hwmgr)
 {
 	struct amdgpu_irq_src *source =
-		kzalloc(sizeof(struct amdgpu_irq_src), GFP_KERNEL);
+		kzalloc_obj(struct amdgpu_irq_src, GFP_KERNEL);

 	if (!source)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c
index 736e5a8af477..5d20c41b3803 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c
@@ -276,8 +276,7 @@ static int smu8_init_dynamic_state_adjustment_rule_settings(
 {
 	struct phm_clock_voltage_dependency_table *table_clk_vlt;

-	table_clk_vlt = kzalloc(struct_size(table_clk_vlt, entries, 8),
-				GFP_KERNEL);
+	table_clk_vlt = kzalloc_flex(*table_clk_vlt, entries, 8, GFP_KERNEL);

 	if (NULL == table_clk_vlt) {
 		pr_err("Can not allocate memory!\n");
@@ -1122,7 +1121,7 @@ static int smu8_hwmgr_backend_init(struct pp_hwmgr *hwmgr)
 	int result = 0;
 	struct smu8_hwmgr *data;

-	data = kzalloc(sizeof(struct smu8_hwmgr), GFP_KERNEL);
+	data = kzalloc_obj(struct smu8_hwmgr, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c
index c305ea4ec17d..68ae1bc36a7f 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c
@@ -211,8 +211,7 @@ int phm_trim_voltage_table(struct pp_atomctrl_voltage_table *vol_table)
 	PP_ASSERT_WITH_CODE((NULL != vol_table),
 			"Voltage Table empty.", return -EINVAL);

-	table = kzalloc(sizeof(struct pp_atomctrl_voltage_table),
-			GFP_KERNEL);
+	table = kzalloc_obj(struct pp_atomctrl_voltage_table, GFP_KERNEL);

 	if (NULL == table)
 		return -EINVAL;
@@ -496,8 +495,7 @@ int phm_initializa_dynamic_state_adjustment_rule_settings(struct pp_hwmgr *hwmgr
 	struct phm_ppt_v1_information *pptable_info = (struct phm_ppt_v1_information *)(hwmgr->pptable);

 	/* initialize vddc_dep_on_dal_pwrl table */
-	table_clk_vlt = kzalloc(struct_size(table_clk_vlt, entries, 4),
-				GFP_KERNEL);
+	table_clk_vlt = kzalloc_flex(*table_clk_vlt, entries, 4, GFP_KERNEL);

 	if (NULL == table_clk_vlt) {
 		pr_err("Can not allocate space for vddc_dep_on_dal_pwrl! \n");
@@ -646,7 +644,7 @@ static const struct amdgpu_irq_src_funcs smu9_irq_funcs = {
 int smu9_register_irq_handlers(struct pp_hwmgr *hwmgr)
 {
 	struct amdgpu_irq_src *source =
-		kzalloc(sizeof(struct amdgpu_irq_src), GFP_KERNEL);
+		kzalloc_obj(struct amdgpu_irq_src, GFP_KERNEL);

 	if (!source)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
index 1b8a57d98759..255fa6c96120 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
@@ -831,7 +831,7 @@ static int vega10_hwmgr_backend_init(struct pp_hwmgr *hwmgr)
 	struct pp_atomfwctrl_voltage_table vol_table;
 	struct amdgpu_device *adev = hwmgr->adev;

-	data = kzalloc(sizeof(struct vega10_hwmgr), GFP_KERNEL);
+	data = kzalloc_obj(struct vega10_hwmgr, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;

@@ -1029,8 +1029,7 @@ static int vega10_trim_voltage_table(struct pp_hwmgr *hwmgr,

 	PP_ASSERT_WITH_CODE(vol_table,
 			"Voltage Table empty.", return -EINVAL);
-	table = kzalloc(sizeof(struct pp_atomfwctrl_voltage_table),
-			GFP_KERNEL);
+	table = kzalloc_obj(struct pp_atomfwctrl_voltage_table, GFP_KERNEL);

 	if (!table)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_processpptables.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_processpptables.c
index 3be616af327e..2b9a1840a35a 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_processpptables.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_processpptables.c
@@ -350,8 +350,8 @@ static int get_mm_clock_voltage_table(
 	PP_ASSERT_WITH_CODE((mm_dependency_table->ucNumEntries != 0),
 			"Invalid PowerPlay Table!", return -1);

-	mm_table = kzalloc(struct_size(mm_table, entries, mm_dependency_table->ucNumEntries),
-			   GFP_KERNEL);
+	mm_table = kzalloc_flex(*mm_table, entries,
+				mm_dependency_table->ucNumEntries, GFP_KERNEL);
 	if (!mm_table)
 		return -ENOMEM;

@@ -573,8 +573,8 @@ static int get_socclk_voltage_dependency_table(
 	PP_ASSERT_WITH_CODE(clk_dep_table->ucNumEntries,
 		"Invalid PowerPlay Table!", return -1);

-	clk_table = kzalloc(struct_size(clk_table, entries, clk_dep_table->ucNumEntries),
-			    GFP_KERNEL);
+	clk_table = kzalloc_flex(*clk_table, entries,
+				 clk_dep_table->ucNumEntries, GFP_KERNEL);
 	if (!clk_table)
 		return -ENOMEM;

@@ -603,8 +603,8 @@ static int get_mclk_voltage_dependency_table(
 	PP_ASSERT_WITH_CODE(mclk_dep_table->ucNumEntries,
 		"Invalid PowerPlay Table!", return -1);

-	mclk_table = kzalloc(struct_size(mclk_table, entries, mclk_dep_table->ucNumEntries),
-			    GFP_KERNEL);
+	mclk_table = kzalloc_flex(*mclk_table, entries,
+				  mclk_dep_table->ucNumEntries, GFP_KERNEL);
 	if (!mclk_table)
 		return -ENOMEM;

@@ -640,8 +640,8 @@ static int get_gfxclk_voltage_dependency_table(
 	PP_ASSERT_WITH_CODE((clk_dep_table->ucNumEntries != 0),
 			"Invalid PowerPlay Table!", return -1);

-	clk_table = kzalloc(struct_size(clk_table, entries, clk_dep_table->ucNumEntries),
-			    GFP_KERNEL);
+	clk_table = kzalloc_flex(*clk_table, entries,
+				 clk_dep_table->ucNumEntries, GFP_KERNEL);
 	if (!clk_table)
 		return -ENOMEM;

@@ -702,8 +702,8 @@ static int get_pix_clk_voltage_dependency_table(
 	PP_ASSERT_WITH_CODE((clk_dep_table->ucNumEntries != 0),
 			"Invalid PowerPlay Table!", return -1);

-	clk_table = kzalloc(struct_size(clk_table, entries, clk_dep_table->ucNumEntries),
-			    GFP_KERNEL);
+	clk_table = kzalloc_flex(*clk_table, entries,
+				 clk_dep_table->ucNumEntries, GFP_KERNEL);
 	if (!clk_table)
 		return -ENOMEM;

@@ -755,8 +755,7 @@ static int get_dcefclk_voltage_dependency_table(
 		num_entries = clk_dep_table->ucNumEntries;


-	clk_table = kzalloc(struct_size(clk_table, entries, num_entries),
-			    GFP_KERNEL);
+	clk_table = kzalloc_flex(*clk_table, entries, num_entries, GFP_KERNEL);
 	if (!clk_table)
 		return -ENOMEM;

@@ -794,8 +793,8 @@ static int get_pcie_table(struct pp_hwmgr *hwmgr,
 			"Invalid PowerPlay Table!",
 			return 0);

-	pcie_table = kzalloc(struct_size(pcie_table, entries, atom_pcie_table->ucNumEntries),
-			     GFP_KERNEL);
+	pcie_table = kzalloc_flex(*pcie_table, entries,
+				  atom_pcie_table->ucNumEntries, GFP_KERNEL);
 	if (!pcie_table)
 		return -ENOMEM;

@@ -853,8 +852,8 @@ static int get_valid_clk(
 	PP_ASSERT_WITH_CODE(clk_volt_pp_table->count,
 			"Invalid PowerPlay Table!", return -1);

-	table = kzalloc(struct_size(table, values, clk_volt_pp_table->count),
-			GFP_KERNEL);
+	table = kzalloc_flex(*table, values, clk_volt_pp_table->count,
+			     GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -1041,7 +1040,7 @@ static int get_vddc_lookup_table(
 	PP_ASSERT_WITH_CODE((vddc_lookup_pp_tables->ucNumEntries != 0),
 			"Invalid SOC_VDDD Lookup Table!", return 1);

-	table = kzalloc(struct_size(table, entries, max_levels), GFP_KERNEL);
+	table = kzalloc_flex(*table, entries, max_levels, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -1149,7 +1148,7 @@ static int vega10_pp_tables_initialize(struct pp_hwmgr *hwmgr)
 	int result = 0;
 	const ATOM_Vega10_POWERPLAYTABLE *powerplay_table;

-	hwmgr->pptable = kzalloc(sizeof(struct phm_ppt_v2_information), GFP_KERNEL);
+	hwmgr->pptable = kzalloc_obj(struct phm_ppt_v2_information, GFP_KERNEL);

 	PP_ASSERT_WITH_CODE((hwmgr->pptable != NULL),
 			    "Failed to allocate hwmgr->pptable!", return -ENOMEM);
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
index 5a987a535e73..eca05a6c868f 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
@@ -395,7 +395,7 @@ static int vega12_hwmgr_backend_init(struct pp_hwmgr *hwmgr)
 	struct vega12_hwmgr *data;
 	struct amdgpu_device *adev = hwmgr->adev;

-	data = kzalloc(sizeof(struct vega12_hwmgr), GFP_KERNEL);
+	data = kzalloc_obj(struct vega12_hwmgr, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_processpptables.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_processpptables.c
index 89148f73b514..b8fad7417190 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_processpptables.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_processpptables.c
@@ -263,7 +263,7 @@ static int vega12_pp_tables_initialize(struct pp_hwmgr *hwmgr)
 	int result = 0;
 	const ATOM_Vega12_POWERPLAYTABLE *powerplay_table;

-	hwmgr->pptable = kzalloc(sizeof(struct phm_ppt_v3_information), GFP_KERNEL);
+	hwmgr->pptable = kzalloc_obj(struct phm_ppt_v3_information, GFP_KERNEL);
 	PP_ASSERT_WITH_CODE((hwmgr->pptable != NULL),
 		"Failed to allocate hwmgr->pptable!", return -ENOMEM);

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
index 5193b7d0e11b..1dc84beaf440 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
@@ -436,7 +436,7 @@ static int vega20_hwmgr_backend_init(struct pp_hwmgr *hwmgr)
 	struct amdgpu_device *adev = hwmgr->adev;
 	int result;

-	data = kzalloc(sizeof(struct vega20_hwmgr), GFP_KERNEL);
+	data = kzalloc_obj(struct vega20_hwmgr, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_processpptables.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_processpptables.c
index 2b446f8866ba..4316b5e4b848 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_processpptables.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_processpptables.c
@@ -336,7 +336,7 @@ static int vega20_pp_tables_initialize(struct pp_hwmgr *hwmgr)
 	int result = 0;
 	const ATOM_Vega20_POWERPLAYTABLE *powerplay_table;

-	hwmgr->pptable = kzalloc(sizeof(struct phm_ppt_v3_information), GFP_KERNEL);
+	hwmgr->pptable = kzalloc_obj(struct phm_ppt_v3_information, GFP_KERNEL);
 	PP_ASSERT_WITH_CODE((hwmgr->pptable != NULL),
 		"Failed to allocate hwmgr->pptable!", return -ENOMEM);

diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/ci_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/ci_smumgr.c
index ad1fd3150d03..12a699a8c954 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/ci_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/ci_smumgr.c
@@ -2681,7 +2681,7 @@ static int ci_initialize_mc_reg_table(struct pp_hwmgr *hwmgr)
 	struct ci_mc_reg_table *ni_table = &smu_data->mc_reg_table;
 	uint8_t module_index = ci_get_memory_modile_index(hwmgr);

-	table = kzalloc(sizeof(pp_atomctrl_mc_reg_table), GFP_KERNEL);
+	table = kzalloc_obj(pp_atomctrl_mc_reg_table, GFP_KERNEL);

 	if (NULL == table)
 		return -ENOMEM;
@@ -2735,7 +2735,7 @@ static int ci_smu_init(struct pp_hwmgr *hwmgr)
 {
 	struct ci_smumgr *ci_priv;

-	ci_priv = kzalloc(sizeof(struct ci_smumgr), GFP_KERNEL);
+	ci_priv = kzalloc_obj(struct ci_smumgr, GFP_KERNEL);

 	if (ci_priv == NULL)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/fiji_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/fiji_smumgr.c
index 0a876c840c79..d7fd3a36ac95 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/fiji_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/fiji_smumgr.c
@@ -334,7 +334,7 @@ static int fiji_smu_init(struct pp_hwmgr *hwmgr)
 {
 	struct fiji_smumgr *fiji_priv;

-	fiji_priv = kzalloc(sizeof(struct fiji_smumgr), GFP_KERNEL);
+	fiji_priv = kzalloc_obj(struct fiji_smumgr, GFP_KERNEL);

 	if (fiji_priv == NULL)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/iceland_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/iceland_smumgr.c
index aa3ae9b115c4..b990def7d1aa 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/iceland_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/iceland_smumgr.c
@@ -261,7 +261,7 @@ static int iceland_smu_init(struct pp_hwmgr *hwmgr)
 {
 	struct iceland_smumgr *iceland_priv;

-	iceland_priv = kzalloc(sizeof(struct iceland_smumgr), GFP_KERNEL);
+	iceland_priv = kzalloc_obj(struct iceland_smumgr, GFP_KERNEL);

 	if (iceland_priv == NULL)
 		return -ENOMEM;
@@ -2608,7 +2608,7 @@ static int iceland_initialize_mc_reg_table(struct pp_hwmgr *hwmgr)
 	struct iceland_mc_reg_table *ni_table = &smu_data->mc_reg_table;
 	uint8_t module_index = iceland_get_memory_modile_index(hwmgr);

-	table = kzalloc(sizeof(pp_atomctrl_mc_reg_table), GFP_KERNEL);
+	table = kzalloc_obj(pp_atomctrl_mc_reg_table, GFP_KERNEL);

 	if (NULL == table)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/polaris10_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/polaris10_smumgr.c
index bf6d09572cfc..497a70988960 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/polaris10_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/polaris10_smumgr.c
@@ -336,7 +336,7 @@ static int polaris10_smu_init(struct pp_hwmgr *hwmgr)
 {
 	struct polaris10_smumgr *smu_data;

-	smu_data = kzalloc(sizeof(struct polaris10_smumgr), GFP_KERNEL);
+	smu_data = kzalloc_obj(struct polaris10_smumgr, GFP_KERNEL);
 	if (smu_data == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu10_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu10_smumgr.c
index 38e19e5cad4d..22e0db4e097f 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu10_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu10_smumgr.c
@@ -244,7 +244,7 @@ static int smu10_smu_init(struct pp_hwmgr *hwmgr)
 	struct smu10_smumgr *priv;
 	int r;

-	priv = kzalloc(sizeof(struct smu10_smumgr), GFP_KERNEL);
+	priv = kzalloc_obj(struct smu10_smumgr, GFP_KERNEL);

 	if (!priv)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu7_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu7_smumgr.c
index 0d4cbe4113a0..9d6203998b5c 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu7_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu7_smumgr.c
@@ -333,7 +333,7 @@ int smu7_request_smu_load_fw(struct pp_hwmgr *hwmgr)
 	if (!smu_data->toc) {
 		struct SMU_DRAMData_TOC *toc;

-		smu_data->toc = kzalloc(sizeof(struct SMU_DRAMData_TOC), GFP_KERNEL);
+		smu_data->toc = kzalloc_obj(struct SMU_DRAMData_TOC, GFP_KERNEL);
 		if (!smu_data->toc)
 			return -ENOMEM;
 		toc = smu_data->toc;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu8_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu8_smumgr.c
index 76d4f12ceedf..82f4f466db8a 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu8_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/smu8_smumgr.c
@@ -758,7 +758,7 @@ static int smu8_smu_init(struct pp_hwmgr *hwmgr)
 	int ret = 0;
 	struct smu8_smumgr *smu8_smu;

-	smu8_smu = kzalloc(sizeof(struct smu8_smumgr), GFP_KERNEL);
+	smu8_smu = kzalloc_obj(struct smu8_smumgr, GFP_KERNEL);
 	if (smu8_smu == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/tonga_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/tonga_smumgr.c
index 2e21f9d066cb..95d87b12df04 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/tonga_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/tonga_smumgr.c
@@ -228,7 +228,7 @@ static int tonga_smu_init(struct pp_hwmgr *hwmgr)
 {
 	struct tonga_smumgr *tonga_priv;

-	tonga_priv = kzalloc(sizeof(struct tonga_smumgr), GFP_KERNEL);
+	tonga_priv = kzalloc_obj(struct tonga_smumgr, GFP_KERNEL);
 	if (tonga_priv == NULL)
 		return -ENOMEM;

@@ -3072,7 +3072,7 @@ static int tonga_initialize_mc_reg_table(struct pp_hwmgr *hwmgr)
 	struct tonga_mc_reg_table *ni_table = &smu_data->mc_reg_table;
 	uint8_t module_index = tonga_get_memory_modile_index(hwmgr);

-	table = kzalloc(sizeof(pp_atomctrl_mc_reg_table), GFP_KERNEL);
+	table = kzalloc_obj(pp_atomctrl_mc_reg_table, GFP_KERNEL);

 	if (table == NULL)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega10_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega10_smumgr.c
index 0bf1bf5528c2..fe960e3c1010 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega10_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega10_smumgr.c
@@ -218,7 +218,7 @@ static int vega10_smu_init(struct pp_hwmgr *hwmgr)
 	if (ret || !info.kptr)
 		return -EINVAL;

-	priv = kzalloc(sizeof(struct vega10_smumgr), GFP_KERNEL);
+	priv = kzalloc_obj(struct vega10_smumgr, GFP_KERNEL);

 	if (!priv)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega12_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega12_smumgr.c
index e2ba593faa5d..bd846c4f09a1 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega12_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega12_smumgr.c
@@ -221,7 +221,7 @@ static int vega12_smu_init(struct pp_hwmgr *hwmgr)
 	if (ret || !info.kptr)
 		return -EINVAL;

-	priv = kzalloc(sizeof(struct vega12_smumgr), GFP_KERNEL);
+	priv = kzalloc_obj(struct vega12_smumgr, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega20_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega20_smumgr.c
index e3515156d26f..7dda3ad13861 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega20_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/vega20_smumgr.c
@@ -430,7 +430,7 @@ static int vega20_smu_init(struct pp_hwmgr *hwmgr)
 	if (ret || !info.kptr)
 		return -EINVAL;

-	priv = kzalloc(sizeof(struct vega20_smumgr), GFP_KERNEL);
+	priv = kzalloc_obj(struct vega20_smumgr, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/powerplay/smumgr/vegam_smumgr.c b/drivers/gpu/drm/amd/pm/powerplay/smumgr/vegam_smumgr.c
index 34c9f59b889a..57eed236baa4 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/smumgr/vegam_smumgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/smumgr/vegam_smumgr.c
@@ -83,7 +83,7 @@ static int vegam_smu_init(struct pp_hwmgr *hwmgr)
 {
 	struct vegam_smumgr *smu_data;

-	smu_data = kzalloc(sizeof(struct vegam_smumgr), GFP_KERNEL);
+	smu_data = kzalloc_obj(struct vegam_smumgr, GFP_KERNEL);
 	if (smu_data == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index 18ece5c714c5..2f02410376b9 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -803,7 +803,7 @@ static int smu_early_init(struct amdgpu_ip_block *ip_block)
 	struct smu_context *smu;
 	int r;

-	smu = kzalloc(sizeof(struct smu_context), GFP_KERNEL);
+	smu = kzalloc_obj(struct smu_context, GFP_KERNEL);
 	if (!smu)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
index 0c4afd1e1aab..747879cbb4e6 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
@@ -267,7 +267,7 @@ static int arcturus_tables_init(struct smu_context *smu)
 		       sizeof(DpmActivityMonitorCoeffInt_t), PAGE_SIZE,
 		       AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		return -ENOMEM;
 	smu_table->metrics_time = 0;
@@ -307,14 +307,14 @@ static int arcturus_allocate_dpm_context(struct smu_context *smu)
 	struct smu_dpm_context *smu_dpm = &smu->smu_dpm;
 	struct smu_dpm_policy *policy;

-	smu_dpm->dpm_context = kzalloc(sizeof(struct smu_11_0_dpm_context),
-				       GFP_KERNEL);
+	smu_dpm->dpm_context = kzalloc_obj(struct smu_11_0_dpm_context,
+					   GFP_KERNEL);
 	if (!smu_dpm->dpm_context)
 		return -ENOMEM;
 	smu_dpm->dpm_context_size = sizeof(struct smu_11_0_dpm_context);

 	smu_dpm->dpm_policies =
-		kzalloc(sizeof(struct smu_dpm_policy_ctxt), GFP_KERNEL);
+		kzalloc_obj(struct smu_dpm_policy_ctxt, GFP_KERNEL);

 	if (!smu_dpm->dpm_policies)
 		return -ENOMEM;
@@ -1579,7 +1579,7 @@ static int arcturus_i2c_xfer(struct i2c_adapter *i2c_adap,
 	if (!adev->pm.dpm_enabled)
 		return -EBUSY;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c
index 87953a4d0a43..97a785182e58 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c
@@ -97,7 +97,7 @@ static int cyan_skillfish_tables_init(struct smu_context *smu)
 				PAGE_SIZE,
 				AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err0_out;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
index 737bfdfb814c..48c75e293541 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
@@ -516,8 +516,7 @@ static int navi10_tables_init(struct smu_context *smu)
 	dummy_read_1_table->align = PAGE_SIZE;
 	dummy_read_1_table->domain = AMDGPU_GEM_DOMAIN_VRAM;

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_NV1X_t),
-					   GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_NV1X_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err0_out;
 	smu_table->metrics_time = 0;
@@ -528,7 +527,7 @@ static int navi10_tables_init(struct smu_context *smu)
 	if (ret)
 		goto err1_out;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

@@ -935,8 +934,8 @@ static int navi10_allocate_dpm_context(struct smu_context *smu)
 {
 	struct smu_dpm_context *smu_dpm = &smu->smu_dpm;

-	smu_dpm->dpm_context = kzalloc(sizeof(struct smu_11_0_dpm_context),
-				       GFP_KERNEL);
+	smu_dpm->dpm_context = kzalloc_obj(struct smu_11_0_dpm_context,
+					   GFP_KERNEL);
 	if (!smu_dpm->dpm_context)
 		return -ENOMEM;

@@ -2794,7 +2793,7 @@ static int navi10_i2c_xfer(struct i2c_adapter *i2c_adap,
 	if (!adev->pm.dpm_enabled)
 		return -EBUSY;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
index 6268bc5ed3e6..2c6378c51333 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
@@ -555,7 +555,7 @@ static int sienna_cichlid_tables_init(struct smu_context *smu)
 	SMU_TABLE_INIT(tables, SMU_TABLE_DRIVER_SMU_CONFIG, sizeof(DriverSmuConfigExternal_t),
 		       PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetricsExternal_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetricsExternal_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err0_out;
 	smu_table->metrics_time = 0;
@@ -566,7 +566,7 @@ static int sienna_cichlid_tables_init(struct smu_context *smu)
 	if (ret)
 		goto err1_out;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

@@ -921,8 +921,8 @@ static int sienna_cichlid_allocate_dpm_context(struct smu_context *smu)
 {
 	struct smu_dpm_context *smu_dpm = &smu->smu_dpm;

-	smu_dpm->dpm_context = kzalloc(sizeof(struct smu_11_0_dpm_context),
-				       GFP_KERNEL);
+	smu_dpm->dpm_context = kzalloc_obj(struct smu_11_0_dpm_context,
+					   GFP_KERNEL);
 	if (!smu_dpm->dpm_context)
 		return -ENOMEM;

@@ -2507,7 +2507,7 @@ static int sienna_cichlid_i2c_xfer(struct i2c_adapter *i2c_adap,
 	if (!adev->pm.dpm_enabled)
 		return -EBUSY;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
index 56efcfa327df..87502f9b5ca4 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
@@ -378,7 +378,7 @@ int smu_v11_0_init_smc_tables(struct smu_context *smu)
 	}

 	smu_table->max_sustainable_clocks =
-		kzalloc(sizeof(struct smu_11_0_max_sustainable_clocks), GFP_KERNEL);
+		kzalloc_obj(struct smu_11_0_max_sustainable_clocks, GFP_KERNEL);
 	if (!smu_table->max_sustainable_clocks) {
 		ret = -ENOMEM;
 		goto err1_out;
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
index 08179840697e..86d8e5df1eb1 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
@@ -253,11 +253,11 @@ static int vangogh_tables_init(struct smu_context *smu)
 	if (ret)
 		goto err1_out;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

-	smu_table->clocks_table = kzalloc(sizeof(DpmClocks_t), GFP_KERNEL);
+	smu_table->clocks_table = kzalloc_obj(DpmClocks_t, GFP_KERNEL);
 	if (!smu_table->clocks_table)
 		goto err3_out;

@@ -433,8 +433,8 @@ static int vangogh_allocate_dpm_context(struct smu_context *smu)
 {
 	struct smu_dpm_context *smu_dpm = &smu->smu_dpm;

-	smu_dpm->dpm_context = kzalloc(sizeof(struct smu_11_0_dpm_context),
-				       GFP_KERNEL);
+	smu_dpm->dpm_context = kzalloc_obj(struct smu_11_0_dpm_context,
+					   GFP_KERNEL);
 	if (!smu_dpm->dpm_context)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c
index 31e21ff8859a..f4951630375b 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c
@@ -157,16 +157,16 @@ static int renoir_init_smc_tables(struct smu_context *smu)
 	SMU_TABLE_INIT(tables, SMU_TABLE_SMU_METRICS, sizeof(SmuMetrics_t),
 		PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->clocks_table = kzalloc(sizeof(DpmClocks_t), GFP_KERNEL);
+	smu_table->clocks_table = kzalloc_obj(DpmClocks_t, GFP_KERNEL);
 	if (!smu_table->clocks_table)
 		goto err0_out;

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err1_out;
 	smu_table->metrics_time = 0;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
index ad23682217ee..618d0098208d 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
@@ -245,7 +245,7 @@ static int aldebaran_tables_init(struct smu_context *smu)
 	SMU_TABLE_INIT(tables, SMU_TABLE_ECCINFO, sizeof(EccInfoTable_t),
 		       PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		return -ENOMEM;
 	smu_table->metrics_time = 0;
@@ -294,14 +294,14 @@ static int aldebaran_allocate_dpm_context(struct smu_context *smu)
 	struct smu_dpm_context *smu_dpm = &smu->smu_dpm;
 	struct smu_dpm_policy *policy;

-	smu_dpm->dpm_context = kzalloc(sizeof(struct smu_13_0_dpm_context),
-				       GFP_KERNEL);
+	smu_dpm->dpm_context = kzalloc_obj(struct smu_13_0_dpm_context,
+					   GFP_KERNEL);
 	if (!smu_dpm->dpm_context)
 		return -ENOMEM;
 	smu_dpm->dpm_context_size = sizeof(struct smu_13_0_dpm_context);

 	smu_dpm->dpm_policies =
-		kzalloc(sizeof(struct smu_dpm_policy_ctxt), GFP_KERNEL);
+		kzalloc_obj(struct smu_dpm_policy_ctxt, GFP_KERNEL);

 	if (!smu_dpm->dpm_policies)
 		return -ENOMEM;
@@ -1422,7 +1422,7 @@ static int aldebaran_i2c_xfer(struct i2c_adapter *i2c_adap,
 	if (!adev->pm.dpm_enabled)
 		return -EBUSY;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
index 63a65ea802fd..531fb265c948 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
@@ -449,7 +449,7 @@ int smu_v13_0_init_smc_tables(struct smu_context *smu)
 	}

 	smu_table->max_sustainable_clocks =
-		kzalloc(sizeof(struct smu_13_0_max_sustainable_clocks), GFP_KERNEL);
+		kzalloc_obj(struct smu_13_0_max_sustainable_clocks, GFP_KERNEL);
 	if (!smu_table->max_sustainable_clocks) {
 		ret = -ENOMEM;
 		goto err1_out;
@@ -553,8 +553,8 @@ int smu_v13_0_init_power(struct smu_context *smu)
 	if (smu_power->power_context || smu_power->power_context_size != 0)
 		return -EINVAL;

-	smu_power->power_context = kzalloc(sizeof(struct smu_13_0_power_context),
-					   GFP_KERNEL);
+	smu_power->power_context = kzalloc_obj(struct smu_13_0_power_context,
+					       GFP_KERNEL);
 	if (!smu_power->power_context)
 		return -ENOMEM;
 	smu_power->power_context_size = sizeof(struct smu_13_0_power_context);
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
index 468d51f5f918..013942fac955 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
@@ -495,7 +495,7 @@ static int smu_v13_0_0_tables_init(struct smu_context *smu)
 		       sizeof(WifiBandEntryTable_t), PAGE_SIZE,
 		       AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetricsExternal_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetricsExternal_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err0_out;
 	smu_table->metrics_time = 0;
@@ -506,7 +506,7 @@ static int smu_v13_0_0_tables_init(struct smu_context *smu)
 	if (ret)
 		goto err1_out;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

@@ -530,8 +530,8 @@ static int smu_v13_0_0_allocate_dpm_context(struct smu_context *smu)
 {
 	struct smu_dpm_context *smu_dpm = &smu->smu_dpm;

-	smu_dpm->dpm_context = kzalloc(sizeof(struct smu_13_0_dpm_context),
-				       GFP_KERNEL);
+	smu_dpm->dpm_context = kzalloc_obj(struct smu_13_0_dpm_context,
+					   GFP_KERNEL);
 	if (!smu_dpm->dpm_context)
 		return -ENOMEM;

@@ -2638,7 +2638,7 @@ static int smu_v13_0_0_i2c_xfer(struct i2c_adapter *i2c_adap,
 	if (!adev->pm.dpm_enabled)
 		return -EBUSY;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c
index f2a6ecb64c03..5ada870f8b65 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c
@@ -223,7 +223,7 @@ static int smu_v13_0_12_fru_get_product_info(struct smu_context *smu,
 	struct amdgpu_device *adev = smu->adev;

 	if (!adev->fru_info) {
-		adev->fru_info = kzalloc(sizeof(*adev->fru_info), GFP_KERNEL);
+		adev->fru_info = kzalloc_obj(*adev->fru_info, GFP_KERNEL);
 		if (!adev->fru_info)
 			return -ENOMEM;
 	}
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c
index 75b90ac0c29c..9e8b330f34dc 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c
@@ -161,16 +161,16 @@ static int smu_v13_0_4_init_smc_tables(struct smu_context *smu)
 	SMU_TABLE_INIT(tables, SMU_TABLE_SMU_METRICS, sizeof(SmuMetrics_t),
 		PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->clocks_table = kzalloc(sizeof(DpmClocks_t), GFP_KERNEL);
+	smu_table->clocks_table = kzalloc_obj(DpmClocks_t, GFP_KERNEL);
 	if (!smu_table->clocks_table)
 		goto err0_out;

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err1_out;
 	smu_table->metrics_time = 0;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c
index 8ee5002e3d6b..25de5e2dde83 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c
@@ -136,16 +136,16 @@ static int smu_v13_0_5_init_smc_tables(struct smu_context *smu)
 	SMU_TABLE_INIT(tables, SMU_TABLE_SMU_METRICS, sizeof(SmuMetrics_t),
 		PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->clocks_table = kzalloc(sizeof(DpmClocks_t), GFP_KERNEL);
+	smu_table->clocks_table = kzalloc_obj(DpmClocks_t, GFP_KERNEL);
 	if (!smu_table->clocks_table)
 		goto err0_out;

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err1_out;
 	smu_table->metrics_time = 0;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
index 07592e285cf5..b85130bd8c08 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
@@ -586,7 +586,7 @@ static int smu_v13_0_6_tables_init(struct smu_context *smu)
 		return -ENOMEM;
 	smu_table->metrics_time = 0;

-	driver_pptable = kzalloc(sizeof(struct PPTable_t), GFP_KERNEL);
+	driver_pptable = kzalloc_obj(struct PPTable_t, GFP_KERNEL);
 	if (!driver_pptable)
 		return -ENOMEM;

@@ -690,13 +690,13 @@ static int smu_v13_0_6_allocate_dpm_context(struct smu_context *smu)
 	struct smu_dpm_policy *policy;

 	smu_dpm->dpm_context =
-		kzalloc(sizeof(struct smu_13_0_dpm_context), GFP_KERNEL);
+		kzalloc_obj(struct smu_13_0_dpm_context, GFP_KERNEL);
 	if (!smu_dpm->dpm_context)
 		return -ENOMEM;
 	smu_dpm->dpm_context_size = sizeof(struct smu_13_0_dpm_context);

 	smu_dpm->dpm_policies =
-		kzalloc(sizeof(struct smu_dpm_policy_ctxt), GFP_KERNEL);
+		kzalloc_obj(struct smu_dpm_policy_ctxt, GFP_KERNEL);
 	if (!smu_dpm->dpm_policies) {
 		kfree(smu_dpm->dpm_context);
 		return -ENOMEM;
@@ -2341,7 +2341,7 @@ static int smu_v13_0_6_i2c_xfer(struct i2c_adapter *i2c_adap,
 	if (!adev->pm.dpm_enabled)
 		return -EBUSY;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
index a6c22ae86c98..6aefebdb0bad 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
@@ -530,7 +530,7 @@ static int smu_v13_0_7_tables_init(struct smu_context *smu)
 		       sizeof(WifiBandEntryTable_t), PAGE_SIZE,
 		       AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetricsExternal_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetricsExternal_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err0_out;
 	smu_table->metrics_time = 0;
@@ -541,7 +541,7 @@ static int smu_v13_0_7_tables_init(struct smu_context *smu)
 	if (ret)
 		goto err1_out;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

@@ -559,8 +559,8 @@ static int smu_v13_0_7_allocate_dpm_context(struct smu_context *smu)
 {
 	struct smu_dpm_context *smu_dpm = &smu->smu_dpm;

-	smu_dpm->dpm_context = kzalloc(sizeof(struct smu_13_0_dpm_context),
-				       GFP_KERNEL);
+	smu_dpm->dpm_context = kzalloc_obj(struct smu_13_0_dpm_context,
+					   GFP_KERNEL);
 	if (!smu_dpm->dpm_context)
 		return -ENOMEM;

@@ -2400,9 +2400,9 @@ static int smu_v13_0_7_get_power_profile_mode(struct smu_context *smu, char *buf
 	if (!buf)
 		return -EINVAL;

-	activity_monitor_external = kcalloc(PP_SMC_POWER_PROFILE_COUNT,
-					    sizeof(*activity_monitor_external),
-					    GFP_KERNEL);
+	activity_monitor_external = kzalloc_objs(*activity_monitor_external,
+						 PP_SMC_POWER_PROFILE_COUNT,
+						 GFP_KERNEL);
 	if (!activity_monitor_external)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c
index f9789b1fcbf8..e3700c704016 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c
@@ -163,16 +163,16 @@ static int yellow_carp_init_smc_tables(struct smu_context *smu)
 	SMU_TABLE_INIT(tables, SMU_TABLE_SMU_METRICS, sizeof(SmuMetrics_t),
 		PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->clocks_table = kzalloc(sizeof(DpmClocks_t), GFP_KERNEL);
+	smu_table->clocks_table = kzalloc_obj(DpmClocks_t, GFP_KERNEL);
 	if (!smu_table->clocks_table)
 		goto err0_out;

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err1_out;
 	smu_table->metrics_time = 0;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
index 7dc6687c3693..2cfa8eb70cb3 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
@@ -439,7 +439,7 @@ int smu_v14_0_init_smc_tables(struct smu_context *smu)
 	}

 	smu_table->max_sustainable_clocks =
-		kzalloc(sizeof(struct smu_14_0_max_sustainable_clocks), GFP_KERNEL);
+		kzalloc_obj(struct smu_14_0_max_sustainable_clocks, GFP_KERNEL);
 	if (!smu_table->max_sustainable_clocks) {
 		ret = -ENOMEM;
 		goto err1_out;
@@ -538,8 +538,8 @@ int smu_v14_0_init_power(struct smu_context *smu)
 	if (smu_power->power_context || smu_power->power_context_size != 0)
 		return -EINVAL;

-	smu_power->power_context = kzalloc(sizeof(struct smu_14_0_dpm_context),
-					   GFP_KERNEL);
+	smu_power->power_context = kzalloc_obj(struct smu_14_0_dpm_context,
+					       GFP_KERNEL);
 	if (!smu_power->power_context)
 		return -ENOMEM;
 	smu_power->power_context_size = sizeof(struct smu_14_0_dpm_context);
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
index dbdf7653cc53..a863e637e37f 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
@@ -197,7 +197,7 @@ static int smu_v14_0_0_init_smc_tables(struct smu_context *smu)
 	SMU_TABLE_INIT(tables, SMU_TABLE_SMU_METRICS, sizeof(SmuMetrics_t),
 		PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err0_out;
 	smu_table->metrics_time = 0;
@@ -206,7 +206,7 @@ static int smu_v14_0_0_init_smc_tables(struct smu_context *smu)
 	if (!smu_table->clocks_table)
 		goto err1_out;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
index becfd356b4e7..b051a1f58760 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
@@ -393,7 +393,7 @@ static int smu_v14_0_2_tables_init(struct smu_context *smu)
 	SMU_TABLE_INIT(tables, SMU_TABLE_ECCINFO, sizeof(EccInfoTable_t),
 			PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetricsExternal_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetricsExternal_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err0_out;
 	smu_table->metrics_time = 0;
@@ -404,7 +404,7 @@ static int smu_v14_0_2_tables_init(struct smu_context *smu)
 	if (ret)
 		goto err1_out;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

@@ -428,8 +428,8 @@ static int smu_v14_0_2_allocate_dpm_context(struct smu_context *smu)
 {
 	struct smu_dpm_context *smu_dpm = &smu->smu_dpm;

-	smu_dpm->dpm_context = kzalloc(sizeof(struct smu_14_0_dpm_context),
-				       GFP_KERNEL);
+	smu_dpm->dpm_context = kzalloc_obj(struct smu_14_0_dpm_context,
+					   GFP_KERNEL);
 	if (!smu_dpm->dpm_context)
 		return -ENOMEM;

@@ -1876,7 +1876,7 @@ static int smu_v14_0_2_i2c_xfer(struct i2c_adapter *i2c_adap,
 	if (!adev->pm.dpm_enabled)
 		return -EBUSY;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0.c
index a2f446d38be8..2070cb31f185 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0.c
@@ -408,7 +408,7 @@ int smu_v15_0_init_smc_tables(struct smu_context *smu)
 	}

 	smu_table->max_sustainable_clocks =
-		kzalloc(sizeof(struct smu_15_0_max_sustainable_clocks), GFP_KERNEL);
+		kzalloc_obj(struct smu_15_0_max_sustainable_clocks, GFP_KERNEL);
 	if (!smu_table->max_sustainable_clocks) {
 		ret = -ENOMEM;
 		goto err1_out;
@@ -507,8 +507,8 @@ int smu_v15_0_init_power(struct smu_context *smu)
 	if (smu_power->power_context || smu_power->power_context_size != 0)
 		return -EINVAL;

-	smu_power->power_context = kzalloc(sizeof(struct smu_15_0_dpm_context),
-					   GFP_KERNEL);
+	smu_power->power_context = kzalloc_obj(struct smu_15_0_dpm_context,
+					       GFP_KERNEL);
 	if (!smu_power->power_context)
 		return -ENOMEM;
 	smu_power->power_context_size = sizeof(struct smu_15_0_dpm_context);
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0_0_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0_0_ppt.c
index 660335d7bda9..18c31a50d281 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0_0_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0_0_ppt.c
@@ -173,16 +173,16 @@ static int smu_v15_0_0_init_smc_tables(struct smu_context *smu)
 	SMU_TABLE_INIT(tables, SMU_TABLE_SMU_METRICS, sizeof(SmuMetrics_t),
 		PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);

-	smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL);
+	smu_table->metrics_table = kzalloc_obj(SmuMetrics_t, GFP_KERNEL);
 	if (!smu_table->metrics_table)
 		goto err0_out;
 	smu_table->metrics_time = 0;

-	smu_table->clocks_table = kzalloc(sizeof(DpmClocks_t), GFP_KERNEL);
+	smu_table->clocks_table = kzalloc_obj(DpmClocks_t, GFP_KERNEL);
 	if (!smu_table->clocks_table)
 		goto err1_out;

-	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
+	smu_table->watermarks_table = kzalloc_obj(Watermarks_t, GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;

diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c
index 59c063625920..611171fea3cb 100644
--- a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c
+++ b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c
@@ -299,7 +299,7 @@ static int amdgpu_ras_mgr_sw_init(struct amdgpu_ip_block *ip_block)
 	if (!con->uniras_enabled)
 		return 0;

-	ras_mgr = kzalloc(sizeof(*ras_mgr), GFP_KERNEL);
+	ras_mgr = kzalloc_obj(*ras_mgr, GFP_KERNEL);
 	if (!ras_mgr)
 		return -EINVAL;

diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c
index a75479593864..65223bfec688 100644
--- a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c
+++ b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c
@@ -195,7 +195,7 @@ static int amdgpu_virt_ras_get_cper_records(struct ras_core_context *ras_core,
 	if (!req->buf_size || !req->buf_ptr || !req->cper_num)
 		return RAS_CMD__ERROR_INVALID_INPUT_DATA;

-	trace = kcalloc(MAX_RECORD_PER_BATCH, sizeof(*trace), GFP_KERNEL);
+	trace = kzalloc_objs(*trace, MAX_RECORD_PER_BATCH, GFP_KERNEL);
 	if (!trace)
 		return RAS_CMD__ERROR_GENERIC;

@@ -365,7 +365,8 @@ int amdgpu_virt_ras_sw_init(struct amdgpu_device *adev)
 {
 	struct amdgpu_ras_mgr *ras_mgr = amdgpu_ras_mgr_get_context(adev);

-	ras_mgr->virt_ras_cmd = kzalloc(sizeof(struct amdgpu_virt_ras_cmd), GFP_KERNEL);
+	ras_mgr->virt_ras_cmd = kzalloc_obj(struct amdgpu_virt_ras_cmd,
+					    GFP_KERNEL);
 	if (!ras_mgr->virt_ras_cmd)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_core.c b/drivers/gpu/drm/amd/ras/rascore/ras_core.c
index f2fccdf5e329..e4a6f6cfd2d5 100644
--- a/drivers/gpu/drm/amd/ras/rascore/ras_core.c
+++ b/drivers/gpu/drm/amd/ras/rascore/ras_core.c
@@ -263,11 +263,11 @@ struct ras_core_context *ras_core_create(struct ras_core_config *init_config)
 	struct ras_core_context *ras_core;
 	struct ras_core_config *config;

-	ras_core = kzalloc(sizeof(*ras_core), GFP_KERNEL);
+	ras_core = kzalloc_obj(*ras_core, GFP_KERNEL);
 	if (!ras_core)
 		return NULL;

-	config = kzalloc(sizeof(*config), GFP_KERNEL);
+	config = kzalloc_obj(*config, GFP_KERNEL);
 	if (!config) {
 		kfree(ras_core);
 		return NULL;
diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c b/drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c
index 0a838fdcb2f6..5d3e46c7740f 100644
--- a/drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c
+++ b/drivers/gpu/drm/amd/ras/rascore/ras_log_ring.c
@@ -202,7 +202,7 @@ struct ras_log_batch_tag *ras_log_ring_create_batch_tag(struct ras_core_context
 	struct ras_log_batch_tag *batch_tag;
 	unsigned long flags = 0;

-	batch_tag = kzalloc(sizeof(*batch_tag), GFP_KERNEL);
+	batch_tag = kzalloc_obj(*batch_tag, GFP_KERNEL);
 	if (!batch_tag)
 		return NULL;

diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_umc.c b/drivers/gpu/drm/amd/ras/rascore/ras_umc.c
index b19c26f6feaf..7c69a7a8c5f6 100644
--- a/drivers/gpu/drm/amd/ras/rascore/ras_umc.c
+++ b/drivers/gpu/drm/amd/ras/rascore/ras_umc.c
@@ -199,7 +199,7 @@ int ras_umc_log_bad_bank_pending(struct ras_core_context *ras_core, struct ras_b
 	struct ras_umc *ras_umc = &ras_core->ras_umc;
 	struct ras_bank_ecc_node *ecc_node;

-	ecc_node = kzalloc(sizeof(*ecc_node), GFP_KERNEL);
+	ecc_node = kzalloc_obj(*ecc_node, GFP_KERNEL);
 	if (!ecc_node)
 		return -ENOMEM;

@@ -246,7 +246,7 @@ int ras_umc_log_bad_bank(struct ras_core_context *ras_core, struct ras_bank_ecc
 	if (ret)
 		goto out;

-	err_rec = kzalloc(sizeof(*err_rec), GFP_KERNEL);
+	err_rec = kzalloc_obj(*err_rec, GFP_KERNEL);
 	if (!err_rec) {
 		ret = -ENOMEM;
 		goto out;
@@ -454,7 +454,7 @@ int ras_umc_load_bad_pages(struct ras_core_context *ras_core)
 	    ras_core->ras_eeprom.record_threshold_config == DISABLE_RETIRE_PAGE)
 		return 0;

-	bps = kcalloc(ras_num_recs, sizeof(*bps), GFP_KERNEL);
+	bps = kzalloc_objs(*bps, ras_num_recs, GFP_KERNEL);
 	if (!bps)
 		return -ENOMEM;

@@ -512,8 +512,7 @@ int ras_umc_handle_bad_pages(struct ras_core_context *ras_core, void *data)
 	struct eeprom_umc_record *records;
 	int count, ret;

-	records = kcalloc(MAX_ECC_NUM_PER_RETIREMENT,
-			  sizeof(*records), GFP_KERNEL);
+	records = kzalloc_objs(*records, MAX_ECC_NUM_PER_RETIREMENT, GFP_KERNEL);
 	if (!records)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c b/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c
index 5a66948ffd24..7221dc4731ab 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c
@@ -503,7 +503,7 @@ static void komeda_crtc_reset(struct drm_crtc *crtc)
 	kfree(to_kcrtc_st(crtc->state));
 	crtc->state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_crtc_reset(crtc, &state->base);
 }
@@ -514,7 +514,7 @@ komeda_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
 	struct komeda_crtc_state *old = to_kcrtc_st(crtc->state);
 	struct komeda_crtc_state *new;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c b/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
index 3ca461eb0a24..ec34491f4f8b 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
@@ -165,7 +165,7 @@ komeda_fb_create(struct drm_device *dev, struct drm_file *file,
 	struct komeda_fb *kfb;
 	int ret = 0, i;

-	kfb = kzalloc(sizeof(*kfb), GFP_KERNEL);
+	kfb = kzalloc_obj(*kfb, GFP_KERNEL);
 	if (!kfb)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_plane.c b/drivers/gpu/drm/arm/display/komeda/komeda_plane.c
index c20ff72f0ae5..05342c6d5b6d 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_plane.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_plane.c
@@ -142,7 +142,7 @@ static void komeda_plane_reset(struct drm_plane *plane)
 	kfree(plane->state);
 	plane->state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_plane_reset(plane, &state->base);
 }
@@ -155,7 +155,7 @@ komeda_plane_atomic_duplicate_state(struct drm_plane *plane)
 	if (WARN_ON(!plane->state))
 		return NULL;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;

@@ -247,7 +247,7 @@ static int komeda_plane_add(struct komeda_kms_dev *kms,
 	u32 *formats, n_formats = 0;
 	int err;

-	kplane = kzalloc(sizeof(*kplane), GFP_KERNEL);
+	kplane = kzalloc_obj(*kplane, GFP_KERNEL);
 	if (!kplane)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c
index 914400c4af73..56703456fbfa 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c
@@ -50,7 +50,7 @@ static int komeda_layer_obj_add(struct komeda_kms_dev *kms,
 {
 	struct komeda_layer_state *st;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

@@ -92,7 +92,7 @@ static int komeda_scaler_obj_add(struct komeda_kms_dev *kms,
 {
 	struct komeda_scaler_state *st;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

@@ -135,7 +135,7 @@ static int komeda_compiz_obj_add(struct komeda_kms_dev *kms,
 {
 	struct komeda_compiz_state *st;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

@@ -178,7 +178,7 @@ static int komeda_splitter_obj_add(struct komeda_kms_dev *kms,
 {
 	struct komeda_splitter_state *st;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

@@ -221,7 +221,7 @@ static int komeda_merger_obj_add(struct komeda_kms_dev *kms,
 {
 	struct komeda_merger_state *st;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

@@ -265,7 +265,7 @@ static int komeda_improc_obj_add(struct komeda_kms_dev *kms,
 {
 	struct komeda_improc_state *st;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

@@ -308,7 +308,7 @@ static int komeda_timing_ctrlr_obj_add(struct komeda_kms_dev *kms,
 {
 	struct komeda_compiz_state *st;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

@@ -352,7 +352,7 @@ static int komeda_pipeline_obj_add(struct komeda_kms_dev *kms,
 {
 	struct komeda_pipeline_state *st;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c b/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c
index 875cdbff18c9..5e290815c32b 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c
@@ -149,7 +149,7 @@ static int komeda_wb_connector_add(struct komeda_kms_dev *kms,
 	if (!kcrtc->master->wb_layer)
 		return 0;

-	kwb_conn = kzalloc(sizeof(*kwb_conn), GFP_KERNEL);
+	kwb_conn = kzalloc_obj(*kwb_conn, GFP_KERNEL);
 	if (!kwb_conn)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
index e61cf362abdf..c3a295f3c82d 100644
--- a/drivers/gpu/drm/arm/malidp_crtc.c
+++ b/drivers/gpu/drm/arm/malidp_crtc.c
@@ -447,7 +447,7 @@ static struct drm_crtc_state *malidp_crtc_duplicate_state(struct drm_crtc *crtc)
 		return NULL;

 	old_state = to_malidp_crtc_state(crtc->state);
-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -478,8 +478,7 @@ static void malidp_crtc_destroy_state(struct drm_crtc *crtc,

 static void malidp_crtc_reset(struct drm_crtc *crtc)
 {
-	struct malidp_crtc_state *state =
-		kzalloc(sizeof(*state), GFP_KERNEL);
+	struct malidp_crtc_state *state = kzalloc_obj(*state, GFP_KERNEL);

 	if (crtc->state)
 		malidp_crtc_destroy_state(crtc, crtc->state);
diff --git a/drivers/gpu/drm/arm/malidp_mw.c b/drivers/gpu/drm/arm/malidp_mw.c
index 47733c85d271..81442a011b09 100644
--- a/drivers/gpu/drm/arm/malidp_mw.c
+++ b/drivers/gpu/drm/arm/malidp_mw.c
@@ -66,8 +66,8 @@ static const struct drm_connector_helper_funcs malidp_mw_connector_helper_funcs

 static void malidp_mw_connector_reset(struct drm_connector *connector)
 {
-	struct malidp_mw_connector_state *mw_state =
-		kzalloc(sizeof(*mw_state), GFP_KERNEL);
+	struct malidp_mw_connector_state *mw_state = kzalloc_obj(*mw_state,
+								 GFP_KERNEL);

 	if (connector->state)
 		__drm_atomic_helper_connector_destroy_state(connector->state);
@@ -98,7 +98,7 @@ malidp_mw_connector_duplicate_state(struct drm_connector *connector)
 	if (WARN_ON(!connector->state))
 		return NULL;

-	mw_state = kzalloc(sizeof(*mw_state), GFP_KERNEL);
+	mw_state = kzalloc_obj(*mw_state, GFP_KERNEL);
 	if (!mw_state)
 		return NULL;

diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
index f1a5014bcfa1..1ba8fdf2dc4f 100644
--- a/drivers/gpu/drm/arm/malidp_planes.c
+++ b/drivers/gpu/drm/arm/malidp_planes.c
@@ -81,7 +81,7 @@ static void malidp_plane_reset(struct drm_plane *plane)
 		__drm_atomic_helper_plane_destroy_state(&state->base);
 	kfree(state);
 	plane->state = NULL;
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_plane_reset(plane, &state->base);
 }
@@ -94,7 +94,7 @@ drm_plane_state *malidp_duplicate_plane_state(struct drm_plane *plane)
 	if (!plane->state)
 		return NULL;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
index 033b19b31f63..ed57b60d0f12 100644
--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -921,7 +921,7 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev,
 	if (IS_ERR(base))
 		return PTR_ERR(base);

-	dcrtc = kzalloc(sizeof(*dcrtc), GFP_KERNEL);
+	dcrtc = kzalloc_obj(*dcrtc, GFP_KERNEL);
 	if (!dcrtc) {
 		DRM_ERROR("failed to allocate Armada crtc\n");
 		return -ENOMEM;
@@ -970,7 +970,7 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev,

 	dcrtc->crtc.port = port;

-	primary = kzalloc(sizeof(*primary), GFP_KERNEL);
+	primary = kzalloc_obj(*primary, GFP_KERNEL);
 	if (!primary) {
 		ret = -ENOMEM;
 		goto err_crtc;
diff --git a/drivers/gpu/drm/armada/armada_fb.c b/drivers/gpu/drm/armada/armada_fb.c
index 77098928f821..9355a7a20a50 100644
--- a/drivers/gpu/drm/armada/armada_fb.c
+++ b/drivers/gpu/drm/armada/armada_fb.c
@@ -57,7 +57,7 @@ struct armada_framebuffer *armada_framebuffer_create(struct drm_device *dev,
 		return ERR_PTR(-EINVAL);
 	}

-	dfb = kzalloc(sizeof(*dfb), GFP_KERNEL);
+	dfb = kzalloc_obj(*dfb, GFP_KERNEL);
 	if (!dfb) {
 		DRM_ERROR("failed to allocate Armada fb object\n");
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
index 35fcfa0d85ff..56563816ca54 100644
--- a/drivers/gpu/drm/armada/armada_gem.c
+++ b/drivers/gpu/drm/armada/armada_gem.c
@@ -137,7 +137,7 @@ armada_gem_linear_back(struct drm_device *dev, struct armada_gem_object *obj)
 		void __iomem *ptr;
 		int ret;

-		node = kzalloc(sizeof(*node), GFP_KERNEL);
+		node = kzalloc_obj(*node, GFP_KERNEL);
 		if (!node)
 			return -ENOSPC;

@@ -200,7 +200,7 @@ armada_gem_alloc_private_object(struct drm_device *dev, size_t size)

 	size = roundup_gem_size(size);

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return NULL;

@@ -221,7 +221,7 @@ static struct armada_gem_object *armada_gem_alloc_object(struct drm_device *dev,

 	size = roundup_gem_size(size);

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return NULL;

@@ -393,7 +393,7 @@ armada_gem_prime_map_dma_buf(struct dma_buf_attachment *attach,
 	struct sg_table *sgt;
 	int i;

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return NULL;

diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
index 21fd3b4ba10f..c003a8dce805 100644
--- a/drivers/gpu/drm/armada/armada_overlay.c
+++ b/drivers/gpu/drm/armada/armada_overlay.c
@@ -310,7 +310,7 @@ static void armada_overlay_reset(struct drm_plane *plane)
 	kfree(plane->state);
 	plane->state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state) {
 		state->colorkey_yr = 0xfefefe00;
 		state->colorkey_ug = 0x01010100;
@@ -550,7 +550,7 @@ int armada_overlay_plane_create(struct drm_device *dev, unsigned long crtcs)
 	if (ret)
 		return ret;

-	overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
+	overlay = kzalloc_obj(*overlay, GFP_KERNEL);
 	if (!overlay)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/armada/armada_plane.c b/drivers/gpu/drm/armada/armada_plane.c
index a0326b4f568e..88cac3e7e592 100644
--- a/drivers/gpu/drm/armada/armada_plane.c
+++ b/drivers/gpu/drm/armada/armada_plane.c
@@ -262,7 +262,7 @@ void armada_plane_reset(struct drm_plane *plane)
 	if (plane->state)
 		__drm_atomic_helper_plane_destroy_state(plane->state);
 	kfree(plane->state);
-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (st)
 		__drm_atomic_helper_plane_reset(plane, &st->base);
 }
diff --git a/drivers/gpu/drm/ast/ast_dp.c b/drivers/gpu/drm/ast/ast_dp.c
index 8e650a02c528..056b372803b1 100644
--- a/drivers/gpu/drm/ast/ast_dp.c
+++ b/drivers/gpu/drm/ast/ast_dp.c
@@ -479,8 +479,8 @@ static const struct drm_connector_helper_funcs ast_astdp_connector_helper_funcs

 static void ast_astdp_connector_reset(struct drm_connector *connector)
 {
-	struct ast_astdp_connector_state *astdp_state =
-		kzalloc(sizeof(*astdp_state), GFP_KERNEL);
+	struct ast_astdp_connector_state *astdp_state = kzalloc_obj(*astdp_state,
+								    GFP_KERNEL);

 	if (connector->state)
 		connector->funcs->atomic_destroy_state(connector, connector->state);
@@ -500,7 +500,7 @@ ast_astdp_connector_atomic_duplicate_state(struct drm_connector *connector)
 	if (drm_WARN_ON(dev, !connector->state))
 		return NULL;

-	new_astdp_state = kmalloc(sizeof(*new_astdp_state), GFP_KERNEL);
+	new_astdp_state = kmalloc_obj(*new_astdp_state, GFP_KERNEL);
 	if (!new_astdp_state)
 		return NULL;
 	__drm_atomic_helper_connector_duplicate_state(connector, &new_astdp_state->base);
diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index 57c6fbc3232b..b017afe7e546 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -876,8 +876,7 @@ static const struct drm_crtc_helper_funcs ast_crtc_helper_funcs = {

 static void ast_crtc_reset(struct drm_crtc *crtc)
 {
-	struct ast_crtc_state *ast_state =
-		kzalloc(sizeof(*ast_state), GFP_KERNEL);
+	struct ast_crtc_state *ast_state = kzalloc_obj(*ast_state, GFP_KERNEL);

 	if (crtc->state)
 		crtc->funcs->atomic_destroy_state(crtc, crtc->state);
@@ -897,7 +896,7 @@ ast_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
 	if (drm_WARN_ON(dev, !crtc->state))
 		return NULL;

-	new_ast_state = kmalloc(sizeof(*new_ast_state), GFP_KERNEL);
+	new_ast_state = kmalloc_obj(*new_ast_state, GFP_KERNEL);
 	if (!new_ast_state)
 		return NULL;
 	__drm_atomic_helper_crtc_duplicate_state(crtc, &new_ast_state->base);
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
index b075f291847f..7204ef72c4d2 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
@@ -540,7 +540,7 @@ static void atmel_hlcdc_crtc_reset(struct drm_crtc *crtc)
 		crtc->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_crtc_reset(crtc, &state->base);
 }
@@ -554,7 +554,7 @@ atmel_hlcdc_crtc_duplicate_state(struct drm_crtc *crtc)
 	if (WARN_ON(!crtc->state))
 		return NULL;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;
 	__drm_atomic_helper_crtc_duplicate_state(crtc, &state->base);
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
index c52da47982ee..1a1e76dc4727 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
@@ -1194,7 +1194,7 @@ static void atmel_hlcdc_plane_reset(struct drm_plane *p)
 		p->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state) {
 		if (atmel_hlcdc_plane_alloc_dscrs(p, state)) {
 			kfree(state);
diff --git a/drivers/gpu/drm/bridge/aux-bridge.c b/drivers/gpu/drm/bridge/aux-bridge.c
index b3e4cdff61d6..50309a23dbea 100644
--- a/drivers/gpu/drm/bridge/aux-bridge.c
+++ b/drivers/gpu/drm/bridge/aux-bridge.c
@@ -47,7 +47,7 @@ int drm_aux_bridge_register(struct device *parent)
 	struct auxiliary_device *adev;
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/bridge/aux-hpd-bridge.c b/drivers/gpu/drm/bridge/aux-hpd-bridge.c
index 2e9c702c7087..0f8a0fb50fbc 100644
--- a/drivers/gpu/drm/bridge/aux-hpd-bridge.c
+++ b/drivers/gpu/drm/bridge/aux-hpd-bridge.c
@@ -52,7 +52,7 @@ struct auxiliary_device *devm_drm_dp_hpd_bridge_alloc(struct device *parent, str
 	struct auxiliary_device *adev;
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c
index 09b289f0fcbf..c094740523ea 100644
--- a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c
+++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c
@@ -902,7 +902,7 @@ static u32 *cdns_dsi_bridge_get_input_bus_fmts(struct drm_bridge *bridge,

 	*num_input_fmts = 0;

-	input_fmts = kzalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kzalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

@@ -985,7 +985,7 @@ cdns_dsi_bridge_atomic_duplicate_state(struct drm_bridge *bridge)
 	bridge_state = drm_priv_to_bridge_state(bridge->base.state);
 	old_dsi_state = to_cdns_dsi_bridge_state(bridge_state);

-	dsi_state = kzalloc(sizeof(*dsi_state), GFP_KERNEL);
+	dsi_state = kzalloc_obj(*dsi_state, GFP_KERNEL);
 	if (!dsi_state)
 		return NULL;

@@ -1013,7 +1013,7 @@ cdns_dsi_bridge_atomic_reset(struct drm_bridge *bridge)
 {
 	struct cdns_dsi_bridge_state *dsi_state;

-	dsi_state = kzalloc(sizeof(*dsi_state), GFP_KERNEL);
+	dsi_state = kzalloc_obj(*dsi_state, GFP_KERNEL);
 	if (!dsi_state)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
index 38726ae1bf15..9d41e824e757 100644
--- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
@@ -2055,7 +2055,7 @@ cdns_mhdp_bridge_atomic_duplicate_state(struct drm_bridge *bridge)
 {
 	struct cdns_mhdp_bridge_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -2085,7 +2085,7 @@ cdns_mhdp_bridge_atomic_reset(struct drm_bridge *bridge)
 {
 	struct cdns_mhdp_bridge_state *cdns_mhdp_state;

-	cdns_mhdp_state = kzalloc(sizeof(*cdns_mhdp_state), GFP_KERNEL);
+	cdns_mhdp_state = kzalloc_obj(*cdns_mhdp_state, GFP_KERNEL);
 	if (!cdns_mhdp_state)
 		return NULL;

@@ -2105,7 +2105,7 @@ static u32 *cdns_mhdp_get_input_bus_fmts(struct drm_bridge *bridge,

 	*num_input_fmts = 0;

-	input_fmts = kzalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kzalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
index e9f16dbc9535..f5ffef625a9b 100644
--- a/drivers/gpu/drm/bridge/display-connector.c
+++ b/drivers/gpu/drm/bridge/display-connector.c
@@ -116,7 +116,7 @@ static u32 *display_connector_get_output_bus_fmts(struct drm_bridge *bridge,
 		u32 *out_bus_fmts;

 		*num_output_fmts = 1;
-		out_bus_fmts = kmalloc(sizeof(*out_bus_fmts), GFP_KERNEL);
+		out_bus_fmts = kmalloc_obj(*out_bus_fmts, GFP_KERNEL);
 		if (!out_bus_fmts)
 			return NULL;

@@ -158,7 +158,7 @@ static u32 *display_connector_get_input_bus_fmts(struct drm_bridge *bridge,
 		u32 *in_bus_fmts;

 		*num_input_fmts = 1;
-		in_bus_fmts = kmalloc(sizeof(*in_bus_fmts), GFP_KERNEL);
+		in_bus_fmts = kmalloc_obj(*in_bus_fmts, GFP_KERNEL);
 		if (!in_bus_fmts)
 			return NULL;

diff --git a/drivers/gpu/drm/bridge/imx/imx8qm-ldb.c b/drivers/gpu/drm/bridge/imx/imx8qm-ldb.c
index fc67e7ed653d..157cda9d2fb1 100644
--- a/drivers/gpu/drm/bridge/imx/imx8qm-ldb.c
+++ b/drivers/gpu/drm/bridge/imx/imx8qm-ldb.c
@@ -319,7 +319,7 @@ imx8qm_ldb_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,

 	*num_input_fmts = 1;

-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c b/drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c
index ada11eed13cf..eb06266f15fb 100644
--- a/drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c
+++ b/drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c
@@ -333,7 +333,7 @@ imx8qxp_ldb_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,

 	*num_input_fmts = 1;

-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c b/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c
index 27ad66f240cf..a7dd49e2d3bb 100644
--- a/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c
+++ b/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c
@@ -216,7 +216,7 @@ imx8qxp_pc_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,

 	*num_input_fmts = 1;

-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c b/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c
index 433c080197a2..85976abdda63 100644
--- a/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c
+++ b/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c
@@ -206,7 +206,7 @@ imx8qxp_pixel_link_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,

 	*num_input_fmts = 1;

-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c b/drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c
index 9dc2b3d2ecef..7c86760171dc 100644
--- a/drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c
+++ b/drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c
@@ -175,7 +175,7 @@ imx8qxp_pxl2dpi_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,

 	*num_input_fmts = 1;

-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/imx/imx93-mipi-dsi.c b/drivers/gpu/drm/bridge/imx/imx93-mipi-dsi.c
index 8f7a0d46601a..e672a37950e0 100644
--- a/drivers/gpu/drm/bridge/imx/imx93-mipi-dsi.c
+++ b/drivers/gpu/drm/bridge/imx/imx93-mipi-dsi.c
@@ -609,7 +609,7 @@ static u32 *imx93_dsi_get_input_bus_fmts(void *priv_data,
 		return NULL;
 	}

-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;
 	input_fmts[0] = input_fmt;
diff --git a/drivers/gpu/drm/bridge/ite-it6263.c b/drivers/gpu/drm/bridge/ite-it6263.c
index 3991fb76143c..85fbf57001ec 100644
--- a/drivers/gpu/drm/bridge/ite-it6263.c
+++ b/drivers/gpu/drm/bridge/ite-it6263.c
@@ -735,7 +735,7 @@ it6263_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
 	if (!it6263_is_input_bus_fmt_valid(it->lvds_data_mapping))
 		return NULL;

-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
index 1d85e706c74b..810c6984cf6b 100644
--- a/drivers/gpu/drm/bridge/samsung-dsim.c
+++ b/drivers/gpu/drm/bridge/samsung-dsim.c
@@ -1741,7 +1741,7 @@ samsung_dsim_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
 {
 	u32 *input_fmts;

-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/sil-sii8620.c b/drivers/gpu/drm/bridge/sil-sii8620.c
index 9e48ad39e1cc..10fcec9d653b 100644
--- a/drivers/gpu/drm/bridge/sil-sii8620.c
+++ b/drivers/gpu/drm/bridge/sil-sii8620.c
@@ -384,7 +384,7 @@ static void sii8620_mt_msc_cmd_send(struct sii8620 *ctx,

 static struct sii8620_mt_msg *sii8620_mt_msg_new(struct sii8620 *ctx)
 {
-	struct sii8620_mt_msg *msg = kzalloc(sizeof(*msg), GFP_KERNEL);
+	struct sii8620_mt_msg *msg = kzalloc_obj(*msg, GFP_KERNEL);

 	if (!msg)
 		ctx->error = -ENOMEM;
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-dp.c b/drivers/gpu/drm/bridge/synopsys/dw-dp.c
index 432342452484..04e2e19c9e25 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-dp.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-dp.c
@@ -1809,7 +1809,7 @@ static struct drm_bridge_state *dw_dp_bridge_atomic_duplicate_state(struct drm_b
 {
 	struct dw_dp_bridge_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
index 8fc2e282ff11..8d5d8a196479 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
@@ -561,7 +561,7 @@ dw_mipi_dsi_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
 						 output_fmt, num_input_fmts);

 	/* Fall back to MEDIA_BUS_FMT_FIXED as the only input format. */
-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;
 	input_fmts[0] = MEDIA_BUS_FMT_FIXED;
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
index 5926a3a05d79..9f06d00569ec 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
@@ -711,7 +711,7 @@ dw_mipi_dsi2_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
 						 output_fmt, num_input_fmts);

 	/* Fall back to MEDIA_BUS_FMT_FIXED as the only input format. */
-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;
 	input_fmts[0] = MEDIA_BUS_FMT_FIXED;
diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c
index 11b5bb50e9f4..cae2ea075670 100644
--- a/drivers/gpu/drm/bridge/ti-tfp410.c
+++ b/drivers/gpu/drm/bridge/ti-tfp410.c
@@ -213,7 +213,7 @@ static u32 *tfp410_get_input_bus_fmts(struct drm_bridge *bridge,

 	*num_input_fmts = 0;

-	input_fmts = kzalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kzalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/clients/drm_fbdev_client.c b/drivers/gpu/drm/clients/drm_fbdev_client.c
index 28951e392482..f708c0d2bf6a 100644
--- a/drivers/gpu/drm/clients/drm_fbdev_client.c
+++ b/drivers/gpu/drm/clients/drm_fbdev_client.c
@@ -154,7 +154,7 @@ int drm_fbdev_client_setup(struct drm_device *dev, const struct drm_format_info
 	drm_WARN(dev, !dev->registered, "Device has not been registered.\n");
 	drm_WARN(dev, dev->fb_helper, "fb_helper is already set!\n");

-	fb_helper = kzalloc(sizeof(*fb_helper), GFP_KERNEL);
+	fb_helper = kzalloc_obj(*fb_helper, GFP_KERNEL);
 	if (!fb_helper)
 		return -ENOMEM;
 	drm_fb_helper_prepare(dev, fb_helper, color_mode, NULL);
diff --git a/drivers/gpu/drm/clients/drm_log.c b/drivers/gpu/drm/clients/drm_log.c
index 2bd5189c967e..1055f05dbfa2 100644
--- a/drivers/gpu/drm/clients/drm_log.c
+++ b/drivers/gpu/drm/clients/drm_log.c
@@ -248,7 +248,7 @@ static void drm_log_init_client(struct drm_log *dlog)
 	if (!max_modeset)
 		return;

-	dlog->scanout = kcalloc(max_modeset, sizeof(*dlog->scanout), GFP_KERNEL);
+	dlog->scanout = kzalloc_objs(*dlog->scanout, max_modeset, GFP_KERNEL);
 	if (!dlog->scanout)
 		return;

@@ -419,7 +419,7 @@ void drm_log_register(struct drm_device *dev)
 {
 	struct drm_log *new;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		goto err_warn;

diff --git a/drivers/gpu/drm/display/drm_dp_aux_bus.c b/drivers/gpu/drm/display/drm_dp_aux_bus.c
index 2d279e82922f..a36feef1cd6a 100644
--- a/drivers/gpu/drm/display/drm_dp_aux_bus.c
+++ b/drivers/gpu/drm/display/drm_dp_aux_bus.c
@@ -280,7 +280,7 @@ int of_dp_aux_populate_bus(struct drm_dp_aux *aux,
 		goto err_did_get_np;
 	}

-	aux_ep_with_data = kzalloc(sizeof(*aux_ep_with_data), GFP_KERNEL);
+	aux_ep_with_data = kzalloc_obj(*aux_ep_with_data, GFP_KERNEL);
 	if (!aux_ep_with_data) {
 		ret = -ENOMEM;
 		goto err_did_set_populated;
diff --git a/drivers/gpu/drm/display/drm_dp_aux_dev.c b/drivers/gpu/drm/display/drm_dp_aux_dev.c
index 29555b9f03c8..df02dbca7338 100644
--- a/drivers/gpu/drm/display/drm_dp_aux_dev.c
+++ b/drivers/gpu/drm/display/drm_dp_aux_dev.c
@@ -75,7 +75,7 @@ static struct drm_dp_aux_dev *alloc_drm_dp_aux_dev(struct drm_dp_aux *aux)
 	struct drm_dp_aux_dev *aux_dev;
 	int index;

-	aux_dev = kzalloc(sizeof(*aux_dev), GFP_KERNEL);
+	aux_dev = kzalloc_obj(*aux_dev, GFP_KERNEL);
 	if (!aux_dev)
 		return ERR_PTR(-ENOMEM);
 	aux_dev->aux = aux;
diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index be749dcad3b5..954ecaa6fd6b 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -1333,7 +1333,7 @@ static struct drm_dp_mst_branch *drm_dp_add_mst_branch_device(u8 lct, u8 *rad)
 {
 	struct drm_dp_mst_branch *mstb;

-	mstb = kzalloc(sizeof(*mstb), GFP_KERNEL);
+	mstb = kzalloc_obj(*mstb, GFP_KERNEL);
 	if (!mstb)
 		return NULL;

@@ -2317,7 +2317,7 @@ drm_dp_mst_add_port(struct drm_device *dev,
 		    struct drm_dp_mst_topology_mgr *mgr,
 		    struct drm_dp_mst_branch *mstb, u8 port_number)
 {
-	struct drm_dp_mst_port *port = kzalloc(sizeof(*port), GFP_KERNEL);
+	struct drm_dp_mst_port *port = kzalloc_obj(*port, GFP_KERNEL);

 	if (!port)
 		return NULL;
@@ -2923,7 +2923,7 @@ static int drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr,
 	int i, ret, port_mask = 0;
 	bool changed = false;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg)
 		return -ENOMEM;

@@ -3000,7 +3000,7 @@ drm_dp_send_clear_payload_id_table(struct drm_dp_mst_topology_mgr *mgr,
 	struct drm_dp_sideband_msg_tx *txmsg;
 	int ret;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg)
 		return;

@@ -3025,7 +3025,7 @@ drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr,
 	struct drm_dp_sideband_msg_tx *txmsg;
 	int ret;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg)
 		return -ENOMEM;

@@ -3138,7 +3138,7 @@ static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr,
 			return -EINVAL;
 	}

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg) {
 		ret = -ENOMEM;
 		goto fail_put;
@@ -3185,7 +3185,7 @@ int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr *mgr,
 	if (!port)
 		return -EINVAL;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg) {
 		drm_dp_mst_topology_put_port(port);
 		return -ENOMEM;
@@ -3219,7 +3219,7 @@ int drm_dp_send_query_stream_enc_status(struct drm_dp_mst_topology_mgr *mgr,
 	u8 nonce[7];
 	int ret;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg)
 		return -ENOMEM;

@@ -3470,7 +3470,7 @@ static int drm_dp_send_dpcd_read(struct drm_dp_mst_topology_mgr *mgr,
 	if (!mstb)
 		return -EINVAL;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg) {
 		ret = -ENOMEM;
 		goto fail_put;
@@ -3521,7 +3521,7 @@ static int drm_dp_send_dpcd_write(struct drm_dp_mst_topology_mgr *mgr,
 	if (!mstb)
 		return -EINVAL;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg) {
 		ret = -ENOMEM;
 		goto fail_put;
@@ -3562,7 +3562,7 @@ static int drm_dp_send_up_ack_reply(struct drm_dp_mst_topology_mgr *mgr,
 {
 	struct drm_dp_sideband_msg_tx *txmsg;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg)
 		return -ENOMEM;

@@ -4135,7 +4135,7 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
 	if (!mgr->up_req_recv.have_eomt)
 		return 0;

-	up_req = kzalloc(sizeof(*up_req), GFP_KERNEL);
+	up_req = kzalloc_obj(*up_req, GFP_KERNEL);
 	if (!up_req) {
 		ret = -ENOMEM;
 		goto out_clear_reply;
@@ -4479,7 +4479,7 @@ int drm_dp_atomic_find_time_slots(struct drm_atomic_state *state,

 	/* Add the new allocation to the state, note the VCPI isn't assigned until the end */
 	if (!payload) {
-		payload = kzalloc(sizeof(*payload), GFP_KERNEL);
+		payload = kzalloc_obj(*payload, GFP_KERNEL);
 		if (!payload)
 			return -ENOMEM;

@@ -4604,8 +4604,9 @@ int drm_dp_mst_atomic_setup_commit(struct drm_atomic_state *state)
 			continue;

 		num_commit_deps = hweight32(mst_state->pending_crtc_mask);
-		mst_state->commit_deps = kmalloc_array(num_commit_deps,
-						       sizeof(*mst_state->commit_deps), GFP_KERNEL);
+		mst_state->commit_deps = kmalloc_objs(*mst_state->commit_deps,
+						      num_commit_deps,
+						      GFP_KERNEL);
 		if (!mst_state->commit_deps)
 			return -ENOMEM;
 		mst_state->num_commit_deps = num_commit_deps;
@@ -5743,7 +5744,7 @@ int drm_dp_mst_topology_mgr_init(struct drm_dp_mst_topology_mgr *mgr,
 	mgr->max_payloads = max_payloads;
 	mgr->conn_base_id = conn_base_id;

-	mst_state = kzalloc(sizeof(*mst_state), GFP_KERNEL);
+	mst_state = kzalloc_obj(*mst_state, GFP_KERNEL);
 	if (mst_state == NULL)
 		return -ENOMEM;

@@ -5843,7 +5844,7 @@ static int drm_dp_mst_i2c_read(struct drm_dp_mst_branch *mstb,
 	msg.u.i2c_read.read_i2c_device_id = msgs[num - 1].addr;
 	msg.u.i2c_read.num_bytes_read = msgs[num - 1].len;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg) {
 		ret = -ENOMEM;
 		goto out;
@@ -5883,7 +5884,7 @@ static int drm_dp_mst_i2c_write(struct drm_dp_mst_branch *mstb,
 	struct drm_dp_sideband_msg_tx *txmsg = NULL;
 	int ret;

-	txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+	txmsg = kzalloc_obj(*txmsg, GFP_KERNEL);
 	if (!txmsg) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/display/drm_dp_tunnel.c
index 43f13a7c79b9..005ee68e6cd4 100644
--- a/drivers/gpu/drm/display/drm_dp_tunnel.c
+++ b/drivers/gpu/drm/display/drm_dp_tunnel.c
@@ -476,7 +476,7 @@ create_tunnel(struct drm_dp_tunnel_mgr *mgr,
 	u8 drv_group_id = tunnel_reg_drv_group_id(regs);
 	struct drm_dp_tunnel *tunnel;

-	tunnel = kzalloc(sizeof(*tunnel), GFP_KERNEL);
+	tunnel = kzalloc_obj(*tunnel, GFP_KERNEL);
 	if (!tunnel)
 		return NULL;

@@ -1387,7 +1387,7 @@ add_tunnel_state(struct drm_dp_tunnel_group_state *group_state,
 		       "Adding state for tunnel %p to group state %p\n",
 		       tunnel, group_state);

-	tunnel_state = kzalloc(sizeof(*tunnel_state), GFP_KERNEL);
+	tunnel_state = kzalloc_obj(*tunnel_state, GFP_KERNEL);
 	if (!tunnel_state)
 		return NULL;

@@ -1458,7 +1458,7 @@ tunnel_group_duplicate_state(struct drm_private_obj *obj)
 	struct drm_dp_tunnel_group_state *group_state;
 	struct drm_dp_tunnel_state *tunnel_state;

-	group_state = kzalloc(sizeof(*group_state), GFP_KERNEL);
+	group_state = kzalloc_obj(*group_state, GFP_KERNEL);
 	if (!group_state)
 		return NULL;

@@ -1583,7 +1583,7 @@ static bool init_group(struct drm_dp_tunnel_mgr *mgr, struct drm_dp_tunnel_group
 {
 	struct drm_dp_tunnel_group_state *group_state;

-	group_state = kzalloc(sizeof(*group_state), GFP_KERNEL);
+	group_state = kzalloc_obj(*group_state, GFP_KERNEL);
 	if (!group_state)
 		return false;

@@ -1644,7 +1644,7 @@ static int resize_bw_array(struct drm_dp_tunnel_state *tunnel_state,
 	if (old_mask == new_mask)
 		return 0;

-	new_bws = kcalloc(hweight32(new_mask), sizeof(*new_bws), GFP_KERNEL);
+	new_bws = kzalloc_objs(*new_bws, hweight32(new_mask), GFP_KERNEL);
 	if (!new_bws)
 		return -ENOMEM;

@@ -1906,14 +1906,14 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count)
 	struct drm_dp_tunnel_mgr *mgr;
 	int i;

-	mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
+	mgr = kzalloc_obj(*mgr, GFP_KERNEL);
 	if (!mgr)
 		return ERR_PTR(-ENOMEM);

 	mgr->dev = dev;
 	init_waitqueue_head(&mgr->bw_req_queue);

-	mgr->groups = kcalloc(max_group_count, sizeof(*mgr->groups), GFP_KERNEL);
+	mgr->groups = kzalloc_objs(*mgr->groups, max_group_count, GFP_KERNEL);
 	if (!mgr->groups) {
 		kfree(mgr);

diff --git a/drivers/gpu/drm/display/drm_hdmi_cec_helper.c b/drivers/gpu/drm/display/drm_hdmi_cec_helper.c
index 3651ad0f76e0..7308ed792089 100644
--- a/drivers/gpu/drm/display/drm_hdmi_cec_helper.c
+++ b/drivers/gpu/drm/display/drm_hdmi_cec_helper.c
@@ -97,7 +97,7 @@ int drmm_connector_hdmi_cec_register(struct drm_connector *connector,
 	if (!funcs->init || !funcs->enable || !funcs->log_addr || !funcs->transmit)
 		return -EINVAL;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 52738b80ddbe..a666fca65d6c 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -132,16 +132,17 @@ drm_atomic_state_init(struct drm_device *dev, struct drm_atomic_state *state)
 	 */
 	state->allow_modeset = true;

-	state->crtcs = kcalloc(dev->mode_config.num_crtc,
-			       sizeof(*state->crtcs), GFP_KERNEL);
+	state->crtcs = kzalloc_objs(*state->crtcs, dev->mode_config.num_crtc,
+				    GFP_KERNEL);
 	if (!state->crtcs)
 		goto fail;
-	state->planes = kcalloc(dev->mode_config.num_total_plane,
-				sizeof(*state->planes), GFP_KERNEL);
+	state->planes = kzalloc_objs(*state->planes,
+				     dev->mode_config.num_total_plane,
+				     GFP_KERNEL);
 	if (!state->planes)
 		goto fail;
-	state->colorops = kcalloc(dev->mode_config.num_colorop,
-				  sizeof(*state->colorops), GFP_KERNEL);
+	state->colorops = kzalloc_objs(*state->colorops,
+				       dev->mode_config.num_colorop, GFP_KERNEL);
 	if (!state->colorops)
 		goto fail;

@@ -176,7 +177,7 @@ drm_atomic_state_alloc(struct drm_device *dev)
 	if (!config->funcs->atomic_state_alloc) {
 		struct drm_atomic_state *state;

-		state = kzalloc(sizeof(*state), GFP_KERNEL);
+		state = kzalloc_obj(*state, GFP_KERNEL);
 		if (!state)
 			return NULL;
 		if (drm_atomic_state_init(dev, state) < 0) {
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index cc1f0c102414..8626f903fdd5 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -2453,7 +2453,8 @@ crtc_or_fake_commit(struct drm_atomic_state *state, struct drm_crtc *crtc)
 	}

 	if (!state->fake_commit) {
-		state->fake_commit = kzalloc(sizeof(*state->fake_commit), GFP_KERNEL);
+		state->fake_commit = kzalloc_obj(*state->fake_commit,
+						 GFP_KERNEL);
 		if (!state->fake_commit)
 			return NULL;

@@ -2524,7 +2525,7 @@ int drm_atomic_helper_setup_commit(struct drm_atomic_state *state,
 	funcs = state->dev->mode_config.helper_private;

 	for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
-		commit = kzalloc(sizeof(*commit), GFP_KERNEL);
+		commit = kzalloc_obj(*commit, GFP_KERNEL);
 		if (!commit)
 			return -ENOMEM;

@@ -2553,8 +2554,7 @@ int drm_atomic_helper_setup_commit(struct drm_atomic_state *state,
 		}

 		if (!new_crtc_state->event) {
-			commit->event = kzalloc(sizeof(*commit->event),
-						GFP_KERNEL);
+			commit->event = kzalloc_obj(*commit->event, GFP_KERNEL);
 			if (!commit->event)
 				return -ENOMEM;

@@ -4080,7 +4080,7 @@ drm_atomic_helper_bridge_propagate_bus_fmt(struct drm_bridge *bridge,
 {
 	u32 *input_fmts;

-	input_fmts = kzalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kzalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts) {
 		*num_input_fmts = 0;
 		return NULL;
diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c
index cee6d8fc44ad..67812085dca7 100644
--- a/drivers/gpu/drm/drm_atomic_state_helper.c
+++ b/drivers/gpu/drm/drm_atomic_state_helper.c
@@ -114,7 +114,7 @@ EXPORT_SYMBOL(__drm_atomic_helper_crtc_reset);
 void drm_atomic_helper_crtc_reset(struct drm_crtc *crtc)
 {
 	struct drm_crtc_state *crtc_state =
-		kzalloc(sizeof(*crtc->state), GFP_KERNEL);
+		kzalloc_obj(*crtc->state, GFP_KERNEL);

 	if (crtc->state)
 		crtc->funcs->atomic_destroy_state(crtc, crtc->state);
@@ -175,7 +175,7 @@ drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc)
 	if (WARN_ON(!crtc->state))
 		return NULL;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_crtc_duplicate_state(crtc, state);

@@ -333,7 +333,7 @@ void drm_atomic_helper_plane_reset(struct drm_plane *plane)
 		__drm_atomic_helper_plane_destroy_state(plane->state);

 	kfree(plane->state);
-	plane->state = kzalloc(sizeof(*plane->state), GFP_KERNEL);
+	plane->state = kzalloc_obj(*plane->state, GFP_KERNEL);
 	if (plane->state)
 		__drm_atomic_helper_plane_reset(plane, plane->state);
 }
@@ -377,7 +377,7 @@ drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane)
 	if (WARN_ON(!plane->state))
 		return NULL;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_plane_duplicate_state(plane, state);

@@ -473,8 +473,8 @@ EXPORT_SYMBOL(__drm_atomic_helper_connector_reset);
  */
 void drm_atomic_helper_connector_reset(struct drm_connector *connector)
 {
-	struct drm_connector_state *conn_state =
-		kzalloc(sizeof(*conn_state), GFP_KERNEL);
+	struct drm_connector_state *conn_state = kzalloc_obj(*conn_state,
+							     GFP_KERNEL);

 	if (connector->state)
 		__drm_atomic_helper_connector_destroy_state(connector->state);
@@ -666,7 +666,7 @@ drm_atomic_helper_connector_duplicate_state(struct drm_connector *connector)
 	if (WARN_ON(!connector->state))
 		return NULL;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_connector_duplicate_state(connector, state);

@@ -763,7 +763,7 @@ drm_atomic_helper_bridge_duplicate_state(struct drm_bridge *bridge)
 	if (WARN_ON(!bridge->base.state))
 		return NULL;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (new)
 		__drm_atomic_helper_bridge_duplicate_state(bridge, new);

@@ -821,7 +821,7 @@ drm_atomic_helper_bridge_reset(struct drm_bridge *bridge)
 {
 	struct drm_bridge_state *bridge_state;

-	bridge_state = kzalloc(sizeof(*bridge_state), GFP_KERNEL);
+	bridge_state = kzalloc_obj(*bridge_state, GFP_KERNEL);
 	if (!bridge_state)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index dc013a22bf26..ac2175f5e5b0 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -1088,7 +1088,7 @@ static struct drm_pending_vblank_event *create_vblank_event(
 {
 	struct drm_pending_vblank_event *e = NULL;

-	e = kzalloc(sizeof *e, GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return NULL;

diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
index a2556d16bed6..d9d984ae62c4 100644
--- a/drivers/gpu/drm/drm_auth.c
+++ b/drivers/gpu/drm/drm_auth.c
@@ -132,7 +132,7 @@ struct drm_master *drm_master_create(struct drm_device *dev)
 {
 	struct drm_master *master;

-	master = kzalloc(sizeof(*master), GFP_KERNEL);
+	master = kzalloc_obj(*master, GFP_KERNEL);
 	if (!master)
 		return NULL;

diff --git a/drivers/gpu/drm/drm_blend.c b/drivers/gpu/drm/drm_blend.c
index 6852d73c931c..9a81992b04e9 100644
--- a/drivers/gpu/drm/drm_blend.c
+++ b/drivers/gpu/drm/drm_blend.c
@@ -459,7 +459,7 @@ static int drm_atomic_helper_crtc_normalize_zpos(struct drm_crtc *crtc,
 	drm_dbg_atomic(dev, "[CRTC:%d:%s] calculating normalized zpos values\n",
 		       crtc->base.id, crtc->name);

-	states = kmalloc_array(total_planes, sizeof(*states), GFP_KERNEL);
+	states = kmalloc_objs(*states, total_planes, GFP_KERNEL);
 	if (!states)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 3b165a0d1e77..5518760a88c1 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -1189,7 +1189,7 @@ drm_atomic_bridge_chain_select_bus_fmts(struct drm_bridge *bridge,
 			return -ENOMEM;
 	} else {
 		num_out_bus_fmts = 1;
-		out_bus_fmts = kmalloc(sizeof(*out_bus_fmts), GFP_KERNEL);
+		out_bus_fmts = kmalloc_obj(*out_bus_fmts, GFP_KERNEL);
 		if (!out_bus_fmts)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/drm_buddy.c b/drivers/gpu/drm/drm_buddy.c
index fd34d3755f7c..0562e7235dec 100644
--- a/drivers/gpu/drm/drm_buddy.c
+++ b/drivers/gpu/drm/drm_buddy.c
@@ -320,16 +320,14 @@ int drm_buddy_init(struct drm_buddy *mm, u64 size, u64 chunk_size)

 	BUG_ON(mm->max_order > DRM_BUDDY_MAX_ORDER);

-	mm->free_trees = kmalloc_array(DRM_BUDDY_MAX_FREE_TREES,
-				       sizeof(*mm->free_trees),
-				       GFP_KERNEL);
+	mm->free_trees = kmalloc_objs(*mm->free_trees, DRM_BUDDY_MAX_FREE_TREES,
+				      GFP_KERNEL);
 	if (!mm->free_trees)
 		return -ENOMEM;

 	for_each_free_tree(i) {
-		mm->free_trees[i] = kmalloc_array(mm->max_order + 1,
-						  sizeof(struct rb_root),
-						  GFP_KERNEL);
+		mm->free_trees[i] = kmalloc_objs(struct rb_root,
+						 mm->max_order + 1, GFP_KERNEL);
 		if (!mm->free_trees[i])
 			goto out_free_tree;

@@ -339,9 +337,8 @@ int drm_buddy_init(struct drm_buddy *mm, u64 size, u64 chunk_size)

 	mm->n_roots = hweight64(size);

-	mm->roots = kmalloc_array(mm->n_roots,
-				  sizeof(struct drm_buddy_block *),
-				  GFP_KERNEL);
+	mm->roots = kmalloc_objs(struct drm_buddy_block *, mm->n_roots,
+				 GFP_KERNEL);
 	if (!mm->roots)
 		goto out_free_tree;

diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c
index a82d741e6630..0e6f4b73827d 100644
--- a/drivers/gpu/drm/drm_client.c
+++ b/drivers/gpu/drm/drm_client.c
@@ -225,7 +225,7 @@ drm_client_buffer_create(struct drm_client_dev *client, u32 width, u32 height,
 	struct drm_framebuffer *fb;
 	int ret;

-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 	if (!buffer)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_client_modeset.c b/drivers/gpu/drm/drm_client_modeset.c
index fc4caf7da5fc..fce35c27b361 100644
--- a/drivers/gpu/drm/drm_client_modeset.c
+++ b/drivers/gpu/drm/drm_client_modeset.c
@@ -44,7 +44,8 @@ int drm_client_modeset_create(struct drm_client_dev *client)
 	int i = 0;

 	/* Add terminating zero entry to enable index less iteration */
-	client->modesets = kcalloc(num_crtc + 1, sizeof(*client->modesets), GFP_KERNEL);
+	client->modesets = kzalloc_objs(*client->modesets, num_crtc + 1,
+					GFP_KERNEL);
 	if (!client->modesets)
 		return -ENOMEM;

@@ -58,8 +59,9 @@ int drm_client_modeset_create(struct drm_client_dev *client)
 		max_connector_count = DRM_CLIENT_MAX_CLONED_CONNECTORS;

 	for (modeset = client->modesets; modeset->crtc; modeset++) {
-		modeset->connectors = kcalloc(max_connector_count,
-					      sizeof(*modeset->connectors), GFP_KERNEL);
+		modeset->connectors = kzalloc_objs(*modeset->connectors,
+						   max_connector_count,
+						   GFP_KERNEL);
 		if (!modeset->connectors)
 			goto err_free;
 	}
@@ -565,7 +567,7 @@ static int drm_client_pick_crtcs(struct drm_client_dev *client,
 	if (modes[n] == NULL)
 		return best_score;

-	crtcs = kcalloc(connector_count, sizeof(*crtcs), GFP_KERNEL);
+	crtcs = kzalloc_objs(*crtcs, connector_count, GFP_KERNEL);
 	if (!crtcs)
 		return best_score;

@@ -641,7 +643,7 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
 	if (drm_WARN_ON(dev, count <= 0))
 		return false;

-	save_enabled = kcalloc(count, sizeof(bool), GFP_KERNEL);
+	save_enabled = kzalloc_objs(bool, count, GFP_KERNEL);
 	if (!save_enabled)
 		return false;

@@ -853,10 +855,10 @@ int drm_client_modeset_probe(struct drm_client_dev *client, unsigned int width,
 	if (!connector_count)
 		return 0;

-	crtcs = kcalloc(connector_count, sizeof(*crtcs), GFP_KERNEL);
-	modes = kcalloc(connector_count, sizeof(*modes), GFP_KERNEL);
-	offsets = kcalloc(connector_count, sizeof(*offsets), GFP_KERNEL);
-	enabled = kcalloc(connector_count, sizeof(bool), GFP_KERNEL);
+	crtcs = kzalloc_objs(*crtcs, connector_count, GFP_KERNEL);
+	modes = kzalloc_objs(*modes, connector_count, GFP_KERNEL);
+	offsets = kzalloc_objs(*offsets, connector_count, GFP_KERNEL);
+	enabled = kzalloc_objs(bool, connector_count, GFP_KERNEL);
 	if (!crtcs || !modes || !enabled || !offsets) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c
index 44eb823585d2..2f3cd856df03 100644
--- a/drivers/gpu/drm/drm_colorop.c
+++ b/drivers/gpu/drm/drm_colorop.c
@@ -453,7 +453,7 @@ drm_atomic_helper_colorop_duplicate_state(struct drm_colorop *colorop)
 	if (WARN_ON(!colorop->state))
 		return NULL;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_colorop_duplicate_state(colorop, state);

@@ -514,7 +514,7 @@ static void __drm_colorop_reset(struct drm_colorop *colorop,
 void drm_colorop_reset(struct drm_colorop *colorop)
 {
 	kfree(colorop->state);
-	colorop->state = kzalloc(sizeof(*colorop->state), GFP_KERNEL);
+	colorop->state = kzalloc_obj(*colorop->state, GFP_KERNEL);

 	if (colorop->state)
 		__drm_colorop_reset(colorop, colorop->state);
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 4f5b27fab475..7528c848ccfb 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -3605,7 +3605,7 @@ struct drm_tile_group *drm_mode_create_tile_group(struct drm_device *dev,
 	struct drm_tile_group *tg;
 	int ret;

-	tg = kzalloc(sizeof(*tg), GFP_KERNEL);
+	tg = kzalloc_obj(*tg, GFP_KERNEL);
 	if (!tg)
 		return NULL;

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index a7797d260f1e..f24b5593b613 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -185,7 +185,7 @@ struct dma_fence *drm_crtc_create_fence(struct drm_crtc *crtc)
 {
 	struct dma_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return NULL;

@@ -845,9 +845,9 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
 			goto out;
 		}

-		connector_set = kmalloc_array(crtc_req->count_connectors,
-					      sizeof(struct drm_connector *),
-					      GFP_KERNEL);
+		connector_set = kmalloc_objs(struct drm_connector *,
+					     crtc_req->count_connectors,
+					     GFP_KERNEL);
 		if (!connector_set) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index 39497493f74c..75b3cf9c1a32 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -602,13 +602,15 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set,
 	 * Allocate space for the backup of all (non-pointer) encoder and
 	 * connector data.
 	 */
-	save_encoder_crtcs = kcalloc(dev->mode_config.num_encoder,
-				sizeof(struct drm_crtc *), GFP_KERNEL);
+	save_encoder_crtcs = kzalloc_objs(struct drm_crtc *,
+					  dev->mode_config.num_encoder,
+					  GFP_KERNEL);
 	if (!save_encoder_crtcs)
 		return -ENOMEM;

-	save_connector_encoders = kcalloc(dev->mode_config.num_connector,
-				sizeof(struct drm_encoder *), GFP_KERNEL);
+	save_connector_encoders = kzalloc_objs(struct drm_encoder *,
+					       dev->mode_config.num_connector,
+					       GFP_KERNEL);
 	if (!save_connector_encoders) {
 		kfree(save_encoder_crtcs);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/drm_damage_helper.c b/drivers/gpu/drm/drm_damage_helper.c
index 6a49e7a0ab84..928cccac527e 100644
--- a/drivers/gpu/drm/drm_damage_helper.c
+++ b/drivers/gpu/drm/drm_damage_helper.c
@@ -140,7 +140,7 @@ int drm_atomic_helper_dirtyfb(struct drm_framebuffer *fb,
 			num_clips /= 2;
 		}

-		rects = kcalloc(num_clips, sizeof(*rects), GFP_KERNEL);
+		rects = kzalloc_objs(*rects, num_clips, GFP_KERNEL);
 		if (!rects) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/drivers/gpu/drm/drm_debugfs_crc.c b/drivers/gpu/drm/drm_debugfs_crc.c
index 6b43b1cf2327..835deddcc538 100644
--- a/drivers/gpu/drm/drm_debugfs_crc.c
+++ b/drivers/gpu/drm/drm_debugfs_crc.c
@@ -224,7 +224,7 @@ static int crtc_crc_open(struct inode *inode, struct file *filep)
 	if (WARN_ON(values_cnt == 0))
 		return -EINVAL;

-	entries = kcalloc(DRM_CRC_ENTRIES_NR, sizeof(*entries), GFP_KERNEL);
+	entries = kzalloc_objs(*entries, DRM_CRC_ENTRIES_NR, GFP_KERNEL);
 	if (!entries)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 26bb7710a462..d248d2b295a0 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -2503,7 +2503,7 @@ static const struct drm_edid *_drm_edid_alloc(const void *edid, size_t size)
 	if (!edid || !size || size < EDID_LENGTH)
 		return NULL;

-	drm_edid = kzalloc(sizeof(*drm_edid), GFP_KERNEL);
+	drm_edid = kzalloc_obj(*drm_edid, GFP_KERNEL);
 	if (drm_edid) {
 		drm_edid->edid = edid;
 		drm_edid->size = size;
@@ -5764,7 +5764,7 @@ static int _drm_edid_to_sad(const struct drm_edid *drm_edid,
 			int i;

 			count = cea_db_payload_len(db) / 3; /* SAD is 3B */
-			sads = kcalloc(count, sizeof(*sads), GFP_KERNEL);
+			sads = kzalloc_objs(*sads, count, GFP_KERNEL);
 			*psads = sads;
 			if (!sads)
 				return -ENOMEM;
diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index be5e617ceb9f..608763984794 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -136,7 +136,7 @@ struct drm_file *drm_file_alloc(struct drm_minor *minor)
 	struct drm_file *file;
 	int ret;

-	file = kzalloc(sizeof(*file), GFP_KERNEL);
+	file = kzalloc_obj(*file, GFP_KERNEL);
 	if (!file)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_flip_work.c b/drivers/gpu/drm/drm_flip_work.c
index f5889dd8e7aa..52c437746d48 100644
--- a/drivers/gpu/drm/drm_flip_work.c
+++ b/drivers/gpu/drm/drm_flip_work.c
@@ -37,7 +37,7 @@ static struct drm_flip_task *drm_flip_work_allocate_task(void *data, gfp_t flags
 {
 	struct drm_flip_task *task;

-	task = kzalloc(sizeof(*task), flags);
+	task = kzalloc_obj(*task, flags);
 	if (task)
 		task->data = data;

diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index 18e753ade001..45963ff2192c 100644
--- a/drivers/gpu/drm/drm_framebuffer.c
+++ b/drivers/gpu/drm/drm_framebuffer.c
@@ -747,7 +747,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
 			ret = -EINVAL;
 			goto out_err1;
 		}
-		clips = kcalloc(num_clips, sizeof(*clips), GFP_KERNEL);
+		clips = kzalloc_objs(*clips, num_clips, GFP_KERNEL);
 		if (!clips) {
 			ret = -ENOMEM;
 			goto out_err1;
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index f7094c4aa97a..4eb96aa589a1 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -684,7 +684,7 @@ struct page **drm_gem_get_pages(struct drm_gem_object *obj)

 	npages = obj->size >> PAGE_SHIFT;

-	pages = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
+	pages = kvmalloc_objs(struct page *, npages, GFP_KERNEL);
 	if (pages == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -832,7 +832,7 @@ int drm_gem_objects_lookup(struct drm_file *filp, void __user *bo_handles,
 	if (!count)
 		return 0;

-	objs = kvmalloc_array(count, sizeof(struct drm_gem_object *),
+	objs = kvmalloc_objs(struct drm_gem_object *, count,
 			     GFP_KERNEL | __GFP_ZERO);
 	if (!objs)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/drm_gem_atomic_helper.c b/drivers/gpu/drm/drm_gem_atomic_helper.c
index 569d41a65a0b..fa43e586eb49 100644
--- a/drivers/gpu/drm/drm_gem_atomic_helper.c
+++ b/drivers/gpu/drm/drm_gem_atomic_helper.c
@@ -256,7 +256,8 @@ drm_gem_duplicate_shadow_plane_state(struct drm_plane *plane)
 	if (!plane_state)
 		return NULL;

-	new_shadow_plane_state = kzalloc(sizeof(*new_shadow_plane_state), GFP_KERNEL);
+	new_shadow_plane_state = kzalloc_obj(*new_shadow_plane_state,
+					     GFP_KERNEL);
 	if (!new_shadow_plane_state)
 		return NULL;
 	__drm_gem_duplicate_shadow_plane_state(plane, new_shadow_plane_state);
@@ -337,7 +338,7 @@ void drm_gem_reset_shadow_plane(struct drm_plane *plane)
 		plane->state = NULL; /* must be set to NULL here */
 	}

-	shadow_plane_state = kzalloc(sizeof(*shadow_plane_state), GFP_KERNEL);
+	shadow_plane_state = kzalloc_obj(*shadow_plane_state, GFP_KERNEL);
 	__drm_gem_reset_shadow_plane(plane, shadow_plane_state);
 }
 EXPORT_SYMBOL(drm_gem_reset_shadow_plane);
diff --git a/drivers/gpu/drm/drm_gem_dma_helper.c b/drivers/gpu/drm/drm_gem_dma_helper.c
index eb56ba234796..ffcdf733984f 100644
--- a/drivers/gpu/drm/drm_gem_dma_helper.c
+++ b/drivers/gpu/drm/drm_gem_dma_helper.c
@@ -82,7 +82,7 @@ __drm_gem_dma_create(struct drm_device *drm, size_t size, bool private)
 			return ERR_CAST(gem_obj);
 		dma_obj = to_drm_gem_dma_obj(gem_obj);
 	} else {
-		dma_obj = kzalloc(sizeof(*dma_obj), GFP_KERNEL);
+		dma_obj = kzalloc_obj(*dma_obj, GFP_KERNEL);
 		if (!dma_obj)
 			return ERR_PTR(-ENOMEM);
 		gem_obj = &dma_obj->base;
@@ -428,7 +428,7 @@ struct sg_table *drm_gem_dma_get_sg_table(struct drm_gem_dma_object *dma_obj)
 	struct sg_table *sgt;
 	int ret;

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_gem_framebuffer_helper.c b/drivers/gpu/drm/drm_gem_framebuffer_helper.c
index 9fd4eb02a20f..e8b81ea55878 100644
--- a/drivers/gpu/drm/drm_gem_framebuffer_helper.c
+++ b/drivers/gpu/drm/drm_gem_framebuffer_helper.c
@@ -238,7 +238,7 @@ drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
 	struct drm_framebuffer *fb;
 	int ret;

-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	fb = kzalloc_obj(*fb, GFP_KERNEL);
 	if (!fb)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c
index 3871a6d92f77..4acc632e73b1 100644
--- a/drivers/gpu/drm/drm_gem_shmem_helper.c
+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c
@@ -127,7 +127,7 @@ __drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private)
 			return ERR_CAST(obj);
 		shmem = to_drm_gem_shmem_obj(obj);
 	} else {
-		shmem = kzalloc(sizeof(*shmem), GFP_KERNEL);
+		shmem = kzalloc_obj(*shmem, GFP_KERNEL);
 		if (!shmem)
 			return ERR_PTR(-ENOMEM);
 		obj = &shmem->base;
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index 5e5b70518dbe..27ceae40cfe3 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -197,7 +197,7 @@ struct drm_gem_vram_object *drm_gem_vram_create(struct drm_device *dev,
 			return ERR_CAST(gem);
 		gbo = drm_gem_vram_of_gem(gem);
 	} else {
-		gbo = kzalloc(sizeof(*gbo), GFP_KERNEL);
+		gbo = kzalloc_obj(*gbo, GFP_KERNEL);
 		if (!gbo)
 			return ERR_PTR(-ENOMEM);
 		gem = &gbo->bo.base;
@@ -721,7 +721,7 @@ static struct ttm_tt *bo_driver_ttm_tt_create(struct ttm_buffer_object *bo,
 	struct ttm_tt *tt;
 	int ret;

-	tt = kzalloc(sizeof(*tt), GFP_KERNEL);
+	tt = kzalloc_obj(*tt, GFP_KERNEL);
 	if (!tt)
 		return NULL;

@@ -890,7 +890,7 @@ static struct drm_vram_mm *drm_vram_helper_alloc_mm(struct drm_device *dev, uint
 	if (WARN_ON(dev->vram_mm))
 		return dev->vram_mm;

-	dev->vram_mm = kzalloc(sizeof(*dev->vram_mm), GFP_KERNEL);
+	dev->vram_mm = kzalloc_obj(*dev->vram_mm, GFP_KERNEL);
 	if (!dev->vram_mm)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_gpusvm.c b/drivers/gpu/drm/drm_gpusvm.c
index a799447a7575..7570a0e05450 100644
--- a/drivers/gpu/drm/drm_gpusvm.c
+++ b/drivers/gpu/drm/drm_gpusvm.c
@@ -522,7 +522,7 @@ drm_gpusvm_notifier_alloc(struct drm_gpusvm *gpusvm, unsigned long fault_addr)
 	if (gpusvm->ops->notifier_alloc)
 		notifier = gpusvm->ops->notifier_alloc();
 	else
-		notifier = kzalloc(sizeof(*notifier), GFP_KERNEL);
+		notifier = kzalloc_obj(*notifier, GFP_KERNEL);

 	if (!notifier)
 		return ERR_PTR(-ENOMEM);
@@ -629,7 +629,7 @@ drm_gpusvm_range_alloc(struct drm_gpusvm *gpusvm,
 	if (gpusvm->ops->range_alloc)
 		range = gpusvm->ops->range_alloc(gpusvm);
 	else
-		range = kzalloc(sizeof(*range), GFP_KERNEL);
+		range = kzalloc_obj(*range, GFP_KERNEL);

 	if (!range)
 		return ERR_PTR(-ENOMEM);
@@ -1471,7 +1471,7 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,
 		/* Unlock and restart mapping to allocate memory. */
 		drm_gpusvm_notifier_unlock(gpusvm);
 		svm_pages->dma_addr =
-			kvmalloc_array(npages, sizeof(*svm_pages->dma_addr), GFP_KERNEL);
+			kvmalloc_objs(*svm_pages->dma_addr, npages, GFP_KERNEL);
 		if (!svm_pages->dma_addr) {
 			err = -ENOMEM;
 			goto err_free;
diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c
index 14469765a780..9d2f4ae8cc9d 100644
--- a/drivers/gpu/drm/drm_gpuvm.c
+++ b/drivers/gpu/drm/drm_gpuvm.c
@@ -1060,7 +1060,7 @@ drm_gpuvm_resv_object_alloc(struct drm_device *drm)
 {
 	struct drm_gem_object *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return NULL;

@@ -1581,7 +1581,7 @@ drm_gpuvm_bo_create(struct drm_gpuvm *gpuvm,
 	if (ops && ops->vm_bo_alloc)
 		vm_bo = ops->vm_bo_alloc();
 	else
-		vm_bo = kzalloc(sizeof(*vm_bo), GFP_KERNEL);
+		vm_bo = kzalloc_obj(*vm_bo, GFP_KERNEL);

 	if (unlikely(!vm_bo))
 		return NULL;
@@ -2852,7 +2852,7 @@ gpuva_op_alloc(struct drm_gpuvm *gpuvm)
 	if (fn && fn->op_alloc)
 		op = fn->op_alloc();
 	else
-		op = kzalloc(sizeof(*op), GFP_KERNEL);
+		op = kzalloc_obj(*op, GFP_KERNEL);

 	if (unlikely(!op))
 		return NULL;
@@ -2946,7 +2946,7 @@ __drm_gpuvm_sm_map_ops_create(struct drm_gpuvm *gpuvm,
 	} args;
 	int ret;

-	ops = kzalloc(sizeof(*ops), GFP_KERNEL);
+	ops = kzalloc_obj(*ops, GFP_KERNEL);
 	if (unlikely(!ops))
 		return ERR_PTR(-ENOMEM);

@@ -3080,7 +3080,7 @@ drm_gpuvm_sm_unmap_ops_create(struct drm_gpuvm *gpuvm,
 	} args;
 	int ret;

-	ops = kzalloc(sizeof(*ops), GFP_KERNEL);
+	ops = kzalloc_obj(*ops, GFP_KERNEL);
 	if (unlikely(!ops))
 		return ERR_PTR(-ENOMEM);

@@ -3130,7 +3130,7 @@ drm_gpuvm_prefetch_ops_create(struct drm_gpuvm *gpuvm,
 	u64 end = addr + range;
 	int ret;

-	ops = kzalloc(sizeof(*ops), GFP_KERNEL);
+	ops = kzalloc_obj(*ops, GFP_KERNEL);
 	if (!ops)
 		return ERR_PTR(-ENOMEM);

@@ -3184,7 +3184,7 @@ drm_gpuvm_bo_unmap_ops_create(struct drm_gpuvm_bo *vm_bo)

 	drm_gem_gpuva_assert_lock_held(vm_bo->vm, vm_bo->obj);

-	ops = kzalloc(sizeof(*ops), GFP_KERNEL);
+	ops = kzalloc_obj(*ops, GFP_KERNEL);
 	if (!ops)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_lease.c b/drivers/gpu/drm/drm_lease.c
index 94375c6a5425..f0a5cef17164 100644
--- a/drivers/gpu/drm/drm_lease.c
+++ b/drivers/gpu/drm/drm_lease.c
@@ -386,8 +386,8 @@ static int fill_object_idr(struct drm_device *dev,
 	int ret;
 	bool universal_planes = READ_ONCE(lessor_priv->universal_planes);

-	objects = kcalloc(object_count, sizeof(struct drm_mode_object *),
-			  GFP_KERNEL);
+	objects = kzalloc_objs(struct drm_mode_object *, object_count,
+			       GFP_KERNEL);
 	if (!objects)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
index a712e177b350..55542a360adc 100644
--- a/drivers/gpu/drm/drm_mipi_dsi.c
+++ b/drivers/gpu/drm/drm_mipi_dsi.c
@@ -134,7 +134,7 @@ static struct mipi_dsi_device *mipi_dsi_device_alloc(struct mipi_dsi_host *host)
 {
 	struct mipi_dsi_device *dsi;

-	dsi = kzalloc(sizeof(*dsi), GFP_KERNEL);
+	dsi = kzalloc_obj(*dsi, GFP_KERNEL);
 	if (!dsi)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index e72f855fc495..e1293ef88581 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -75,7 +75,7 @@ struct drm_display_mode *drm_mode_create(struct drm_device *dev)
 {
 	struct drm_display_mode *nmode;

-	nmode = kzalloc(sizeof(struct drm_display_mode), GFP_KERNEL);
+	nmode = kzalloc_obj(struct drm_display_mode, GFP_KERNEL);
 	if (!nmode)
 		return NULL;

diff --git a/drivers/gpu/drm/drm_modeset_lock.c b/drivers/gpu/drm/drm_modeset_lock.c
index beb91a13a312..2c806b0146d6 100644
--- a/drivers/gpu/drm/drm_modeset_lock.c
+++ b/drivers/gpu/drm/drm_modeset_lock.c
@@ -148,7 +148,7 @@ void drm_modeset_lock_all(struct drm_device *dev)
 	struct drm_modeset_acquire_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL | __GFP_NOFAIL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL | __GFP_NOFAIL);
 	if (WARN_ON(!ctx))
 		return;

diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c
index 5af518a93192..4e9b5f5f2539 100644
--- a/drivers/gpu/drm/drm_pagemap.c
+++ b/drivers/gpu/drm/drm_pagemap.c
@@ -94,7 +94,7 @@ drm_pagemap_zdd_alloc(struct drm_pagemap *dpagemap)
 {
 	struct drm_pagemap_zdd *zdd;

-	zdd = kmalloc(sizeof(*zdd), GFP_KERNEL);
+	zdd = kmalloc_obj(*zdd, GFP_KERNEL);
 	if (!zdd)
 		return NULL;

@@ -861,7 +861,7 @@ drm_pagemap_dev_hold(struct drm_pagemap *dpagemap)
 	struct drm_pagemap_dev_hold *dev_hold;
 	struct drm_device *drm = dpagemap->drm;

-	dev_hold = kzalloc(sizeof(*dev_hold), GFP_KERNEL);
+	dev_hold = kzalloc_obj(*dev_hold, GFP_KERNEL);
 	if (!dev_hold)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_pagemap_util.c b/drivers/gpu/drm/drm_pagemap_util.c
index c6ae3357c7fb..c53031308308 100644
--- a/drivers/gpu/drm/drm_pagemap_util.c
+++ b/drivers/gpu/drm/drm_pagemap_util.c
@@ -94,7 +94,7 @@ static void drm_pagemap_cache_fini(void *arg)
  */
 struct drm_pagemap_cache *drm_pagemap_cache_create_devm(struct drm_pagemap_shrinker *shrinker)
 {
-	struct drm_pagemap_cache *cache = kzalloc(sizeof(*cache), GFP_KERNEL);
+	struct drm_pagemap_cache *cache = kzalloc_obj(*cache, GFP_KERNEL);
 	int err;

 	if (!cache)
@@ -424,7 +424,7 @@ struct drm_pagemap_shrinker *drm_pagemap_shrinker_create_devm(struct drm_device
 	struct shrinker *shrink;
 	int err;

-	shrinker = kzalloc(sizeof(*shrinker), GFP_KERNEL);
+	shrinker = kzalloc_obj(*shrinker, GFP_KERNEL);
 	if (!shrinker)
 		return ERR_PTR(-ENOMEM);

@@ -548,7 +548,7 @@ int drm_pagemap_acquire_owner(struct drm_pagemap_peer *peer,
 	}

 	if (!interconnect) {
-		owner = kmalloc(sizeof(*owner), GFP_KERNEL);
+		owner = kmalloc_obj(*owner, GFP_KERNEL);
 		if (!owner) {
 			mutex_unlock(&owner_list->lock);
 			return -ENOMEM;
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index bed2562bf911..75ec5ca579b0 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -1514,7 +1514,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
 	}

 	if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
-		e = kzalloc(sizeof *e, GFP_KERNEL);
+		e = kzalloc_obj(*e, GFP_KERNEL);
 		if (!e) {
 			ret = -ENOMEM;
 			goto out;
@@ -1844,9 +1844,8 @@ int drm_plane_create_color_pipeline_property(struct drm_plane *plane,
 	int len = 0;
 	int i;

-	all_pipelines = kcalloc(num_pipelines + 1,
-				sizeof(*all_pipelines),
-				GFP_KERNEL);
+	all_pipelines = kzalloc_objs(*all_pipelines, num_pipelines + 1,
+				     GFP_KERNEL);

 	if (!all_pipelines) {
 		drm_err(plane->dev, "failed to allocate color pipeline\n");
diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
index 747d248aaf02..802ddbb7aa88 100644
--- a/drivers/gpu/drm/drm_plane_helper.c
+++ b/drivers/gpu/drm/drm_plane_helper.c
@@ -217,8 +217,8 @@ int drm_plane_helper_update_primary(struct drm_plane *plane, struct drm_crtc *cr
 	/* Find current connectors for CRTC */
 	num_connectors = get_connectors_for_crtc(crtc, NULL, 0);
 	BUG_ON(num_connectors == 0);
-	connector_list = kcalloc(num_connectors, sizeof(*connector_list),
-				 GFP_KERNEL);
+	connector_list = kzalloc_objs(*connector_list, num_connectors,
+				      GFP_KERNEL);
 	if (!connector_list)
 		return -ENOMEM;
 	get_connectors_for_crtc(crtc, connector_list, num_connectors);
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 21809a82187b..ad09be486ea0 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -100,7 +100,7 @@ int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv,
 	struct drm_prime_member *member;
 	struct rb_node **p, *rb;

-	member = kmalloc(sizeof(*member), GFP_KERNEL);
+	member = kmalloc_obj(*member, GFP_KERNEL);
 	if (!member)
 		return -ENOMEM;

@@ -780,8 +780,8 @@ int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
 		return 0;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
-	fil = kzalloc(sizeof(*fil), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
+	fil = kzalloc_obj(*fil, GFP_KERNEL);
 	if (!priv || !fil) {
 		ret = -ENOMEM;
 		goto out;
@@ -854,7 +854,7 @@ struct sg_table *drm_prime_pages_to_sg(struct drm_device *dev,
 	size_t max_segment = 0;
 	int err;

-	sg = kmalloc(sizeof(struct sg_table), GFP_KERNEL);
+	sg = kmalloc_obj(struct sg_table, GFP_KERNEL);
 	if (!sg)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_privacy_screen.c b/drivers/gpu/drm/drm_privacy_screen.c
index 8959f7084e0b..d9d0c5a38ffd 100644
--- a/drivers/gpu/drm/drm_privacy_screen.c
+++ b/drivers/gpu/drm/drm_privacy_screen.c
@@ -395,7 +395,7 @@ struct drm_privacy_screen *drm_privacy_screen_register(
 	struct drm_privacy_screen *priv;
 	int ret;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c
index 540cd41d8368..fb8a23832c37 100644
--- a/drivers/gpu/drm/drm_property.c
+++ b/drivers/gpu/drm/drm_property.c
@@ -107,7 +107,7 @@ struct drm_property *drm_property_create(struct drm_device *dev,
 	if (WARN_ON(strlen(name) >= DRM_PROP_NAME_LEN))
 		return NULL;

-	property = kzalloc(sizeof(struct drm_property), GFP_KERNEL);
+	property = kzalloc_obj(struct drm_property, GFP_KERNEL);
 	if (!property)
 		return NULL;

@@ -417,7 +417,7 @@ int drm_property_add_enum(struct drm_property *property,
 	if (WARN_ON(index >= property->num_values))
 		return -EINVAL;

-	prop_enum = kzalloc(sizeof(struct drm_property_enum), GFP_KERNEL);
+	prop_enum = kzalloc_obj(struct drm_property_enum, GFP_KERNEL);
 	if (!prop_enum)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/drm_self_refresh_helper.c b/drivers/gpu/drm/drm_self_refresh_helper.c
index c0948586b7fd..294343259f8a 100644
--- a/drivers/gpu/drm/drm_self_refresh_helper.c
+++ b/drivers/gpu/drm/drm_self_refresh_helper.c
@@ -238,7 +238,7 @@ int drm_self_refresh_helper_init(struct drm_crtc *crtc)
 	if (WARN_ON(sr_data))
 		return -EINVAL;

-	sr_data = kzalloc(sizeof(*sr_data), GFP_KERNEL);
+	sr_data = kzalloc_obj(*sr_data, GFP_KERNEL);
 	if (!sr_data)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/drm_suballoc.c b/drivers/gpu/drm/drm_suballoc.c
index 879ea33dbbc4..e44ad39e310c 100644
--- a/drivers/gpu/drm/drm_suballoc.c
+++ b/drivers/gpu/drm/drm_suballoc.c
@@ -329,7 +329,7 @@ drm_suballoc_new(struct drm_suballoc_manager *sa_manager, size_t size,
 	if (!align)
 		align = sa_manager->align;

-	sa = kmalloc(sizeof(*sa), gfp);
+	sa = kmalloc_obj(*sa, gfp);
 	if (!sa)
 		return ERR_PTR(-ENOMEM);
 	sa->manager = sa_manager;
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index 2d4ab745fdad..bed005abf08e 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -557,7 +557,7 @@ int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
 	int ret;
 	struct drm_syncobj *syncobj;

-	syncobj = kzalloc(sizeof(struct drm_syncobj), GFP_KERNEL);
+	syncobj = kzalloc_obj(struct drm_syncobj, GFP_KERNEL);
 	if (!syncobj)
 		return -ENOMEM;

@@ -1062,7 +1062,7 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs,
 		goto err_free_points;
 	}

-	entries = kcalloc(count, sizeof(*entries), GFP_KERNEL);
+	entries = kzalloc_objs(*entries, count, GFP_KERNEL);
 	if (!entries) {
 		timeout = -ENOMEM;
 		goto err_free_points;
@@ -1279,7 +1279,7 @@ static int drm_syncobj_array_find(struct drm_file *file_private,
 		goto err_free_handles;
 	}

-	syncobjs = kmalloc_array(count_handles, sizeof(*syncobjs), GFP_KERNEL);
+	syncobjs = kmalloc_objs(*syncobjs, count_handles, GFP_KERNEL);
 	if (syncobjs == NULL) {
 		ret = -ENOMEM;
 		goto err_free_handles;
@@ -1485,7 +1485,7 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,
 		goto err_fdget;
 	}

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		ret = -ENOMEM;
 		goto err_kzalloc;
diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
index b01ffa4d6509..0dccd5362138 100644
--- a/drivers/gpu/drm/drm_sysfs.c
+++ b/drivers/gpu/drm/drm_sysfs.c
@@ -349,7 +349,7 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
 	if (connector->kdev)
 		return 0;

-	kdev = kzalloc(sizeof(*kdev), GFP_KERNEL);
+	kdev = kzalloc_obj(*kdev, GFP_KERNEL);
 	if (!kdev)
 		return -ENOMEM;

@@ -554,7 +554,7 @@ struct device *drm_sysfs_minor_alloc(struct drm_minor *minor)
 	struct device *kdev;
 	int r;

-	kdev = kzalloc(sizeof(*kdev), GFP_KERNEL);
+	kdev = kzalloc_obj(*kdev, GFP_KERNEL);
 	if (!kdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 42fe11cc139b..4b196e48c8fe 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1615,7 +1615,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
 	u64 seq;
 	int ret;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (e == NULL) {
 		ret = -ENOMEM;
 		goto err_put;
@@ -2094,7 +2094,7 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,

 	vblank = drm_crtc_vblank_crtc(crtc);

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (e == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/drm_vma_manager.c b/drivers/gpu/drm/drm_vma_manager.c
index 58659c16874c..7978b6276a6a 100644
--- a/drivers/gpu/drm/drm_vma_manager.c
+++ b/drivers/gpu/drm/drm_vma_manager.c
@@ -253,7 +253,7 @@ static int vma_node_allow(struct drm_vma_offset_node *node,
 	 * unlikely that an open-file is added twice to a single node so we
 	 * don't optimize for this case. OOM is checked below only if the entry
 	 * is actually used. */
-	new = kmalloc(sizeof(*entry), GFP_KERNEL);
+	new = kmalloc_obj(*entry, GFP_KERNEL);

 	write_lock(&node->vm_lock);

diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c
index 95b8a2e4bda6..7b1dbc0df135 100644
--- a/drivers/gpu/drm/drm_writeback.c
+++ b/drivers/gpu/drm/drm_writeback.c
@@ -422,8 +422,8 @@ int drm_writeback_set_fb(struct drm_connector_state *conn_state,
 	WARN_ON(conn_state->connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK);

 	if (!conn_state->writeback_job) {
-		conn_state->writeback_job =
-			kzalloc(sizeof(*conn_state->writeback_job), GFP_KERNEL);
+		conn_state->writeback_job = kzalloc_obj(*conn_state->writeback_job,
+							GFP_KERNEL);
 		if (!conn_state->writeback_job)
 			return -ENOMEM;

@@ -581,7 +581,7 @@ drm_writeback_get_out_fence(struct drm_writeback_connector *wb_connector)
 		    DRM_MODE_CONNECTOR_WRITEBACK))
 		return NULL;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return NULL;

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c b/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c
index 3a221923f15d..57a82526a54f 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c
@@ -33,7 +33,7 @@ etnaviv_cmdbuf_suballoc_new(struct device *dev)
 	struct etnaviv_cmdbuf_suballoc *suballoc;
 	int ret;

-	suballoc = kzalloc(sizeof(*suballoc), GFP_KERNEL);
+	suballoc = kzalloc_obj(*suballoc, GFP_KERNEL);
 	if (!suballoc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index bb1b84eecec8..06e76d6d2e47 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -66,7 +66,7 @@ static int etnaviv_open(struct drm_device *dev, struct drm_file *file)
 	struct etnaviv_file_private *ctx;
 	int ret, i;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -531,7 +531,7 @@ static int etnaviv_bind(struct device *dev)
 	if (IS_ERR(drm))
 		return PTR_ERR(drm);

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		dev_err(dev, "failed to allocate private data\n");
 		ret = -ENOMEM;
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_flop_reset.c b/drivers/gpu/drm/etnaviv/etnaviv_flop_reset.c
index 58d957ee861d..59ea7b9c60b8 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_flop_reset.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_flop_reset.c
@@ -182,8 +182,8 @@ int etnaviv_flop_reset_ppu_init(struct etnaviv_drm_private *priv)
 	 * (input and output image, and shader), we keep this buffer
 	 * for the whole life time the driver is bound
 	 */
-	priv->flop_reset_data_ppu =
-		kzalloc(sizeof(*priv->flop_reset_data_ppu), GFP_KERNEL);
+	priv->flop_reset_data_ppu = kzalloc_obj(*priv->flop_reset_data_ppu,
+						GFP_KERNEL);

 	if (!priv->flop_reset_data_ppu)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
index 5d8f3b03d4ae..3e330f30eaa2 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
@@ -288,7 +288,7 @@ struct etnaviv_vram_mapping *etnaviv_gem_mapping_get(
 	 */
 	mapping = etnaviv_gem_get_vram_mapping(etnaviv_obj, NULL);
 	if (!mapping) {
-		mapping = kzalloc(sizeof(*mapping), GFP_KERNEL);
+		mapping = kzalloc_obj(*mapping, GFP_KERNEL);
 		if (!mapping) {
 			ret = -ENOMEM;
 			goto out;
@@ -675,7 +675,7 @@ static int etnaviv_gem_userptr_get_pages(struct etnaviv_gem_object *etnaviv_obj)
 	if (userptr->mm != current->mm)
 		return -EPERM;

-	pvec = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
+	pvec = kvmalloc_objs(struct page *, npages, GFP_KERNEL);
 	if (!pvec)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c
index 40a50c60dfff..1d9a4ca5d5e6 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c
@@ -126,7 +126,7 @@ struct drm_gem_object *etnaviv_gem_prime_import_sg_table(struct drm_device *dev,
 	npages = size / PAGE_SIZE;

 	etnaviv_obj->sgt = sgt;
-	etnaviv_obj->pages = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
+	etnaviv_obj->pages = kvmalloc_objs(struct page *, npages, GFP_KERNEL);
 	if (!etnaviv_obj->pages) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
index a9611c1a773f..e3accccf22be 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
@@ -38,8 +38,8 @@ static struct etnaviv_gem_submit *submit_create(struct drm_device *dev,
 	if (!submit)
 		return NULL;

-	submit->pmrs = kcalloc(nr_pmrs, sizeof(struct etnaviv_perfmon_request),
-			       GFP_KERNEL);
+	submit->pmrs = kzalloc_objs(struct etnaviv_perfmon_request, nr_pmrs,
+				    GFP_KERNEL);
 	if (!submit->pmrs) {
 		kfree(submit);
 		return NULL;
@@ -468,9 +468,9 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
 	 * Copy the command submission and bo array to kernel space in
 	 * one go, and do this outside of any locks.
 	 */
-	bos = kvmalloc_array(args->nr_bos, sizeof(*bos), GFP_KERNEL);
-	relocs = kvmalloc_array(args->nr_relocs, sizeof(*relocs), GFP_KERNEL);
-	pmrs = kvmalloc_array(args->nr_pmrs, sizeof(*pmrs), GFP_KERNEL);
+	bos = kvmalloc_objs(*bos, args->nr_bos, GFP_KERNEL);
+	relocs = kvmalloc_objs(*relocs, args->nr_relocs, GFP_KERNEL);
+	pmrs = kvmalloc_objs(*pmrs, args->nr_pmrs, GFP_KERNEL);
 	stream = kvmalloc_array(1, args->stream_size, GFP_KERNEL);
 	if (!bos || !relocs || !pmrs || !stream) {
 		ret = -ENOMEM;
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
index 94326dddaf6f..0d2a2684b2a6 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
@@ -1184,7 +1184,7 @@ static struct dma_fence *etnaviv_gpu_fence_alloc(struct etnaviv_gpu *gpu)
 	 */
 	lockdep_assert_held(&gpu->lock);

-	f = kzalloc(sizeof(*f), GFP_KERNEL);
+	f = kzalloc_obj(*f, GFP_KERNEL);
 	if (!f)
 		return NULL;

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_iommu.c b/drivers/gpu/drm/etnaviv/etnaviv_iommu.c
index afe5dd6a9925..7cb29d6daa90 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_iommu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_iommu.c
@@ -143,7 +143,7 @@ etnaviv_iommuv1_context_alloc(struct etnaviv_iommu_global *global)
 		return context;
 	}

-	v1_context = kzalloc(sizeof(*v1_context), GFP_KERNEL);
+	v1_context = kzalloc_obj(*v1_context, GFP_KERNEL);
 	if (!v1_context) {
 		mutex_unlock(&global->lock);
 		return NULL;
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c
index a992be2ede88..2ffb18ccde61 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c
@@ -494,7 +494,7 @@ int etnaviv_iommu_global_init(struct etnaviv_gpu *gpu)
 		return 0;
 	}

-	global = kzalloc(sizeof(*global), GFP_KERNEL);
+	global = kzalloc_obj(*global, GFP_KERNEL);
 	if (!global)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index d19e796c2061..03ad7dd8bf07 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -180,7 +180,7 @@ struct exynos_drm_crtc *exynos_drm_crtc_create(struct drm_device *drm_dev,
 	struct drm_crtc *crtc;
 	int ret;

-	exynos_crtc = kzalloc(sizeof(*exynos_crtc), GFP_KERNEL);
+	exynos_crtc = kzalloc_obj(*exynos_crtc, GFP_KERNEL);
 	if (!exynos_crtc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 6cc7bf77bcac..311d5077a2bf 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -50,7 +50,7 @@ static int exynos_drm_open(struct drm_device *dev, struct drm_file *file)
 	struct drm_exynos_file_private *file_priv;
 	int ret;

-	file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
+	file_priv = kzalloc_obj(*file_priv, GFP_KERNEL);
 	if (!file_priv)
 		return -ENOMEM;

@@ -245,7 +245,7 @@ static int exynos_drm_bind(struct device *dev)
 	if (IS_ERR(drm))
 		return PTR_ERR(drm);

-	private = kzalloc(sizeof(struct exynos_drm_private), GFP_KERNEL);
+	private = kzalloc_obj(struct exynos_drm_private, GFP_KERNEL);
 	if (!private) {
 		ret = -ENOMEM;
 		goto err_free_drm;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index 6ecd95bcb0c4..b078295c96e2 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -66,7 +66,7 @@ exynos_drm_framebuffer_init(struct drm_device *dev,
 	int i;
 	int ret;

-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	fb = kzalloc_obj(*fb, GFP_KERNEL);
 	if (!fb)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
index 2bea107dd960..aa70e249f512 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
@@ -287,7 +287,7 @@ static int g2d_init_cmdlist(struct g2d_data *g2d)
 		return -ENOMEM;
 	}

-	node = kcalloc(G2D_CMDLIST_NUM, sizeof(*node), GFP_KERNEL);
+	node = kzalloc_objs(*node, G2D_CMDLIST_NUM, GFP_KERNEL);
 	if (!node) {
 		ret = -ENOMEM;
 		goto err;
@@ -459,7 +459,7 @@ static dma_addr_t *g2d_userptr_get_dma_addr(struct g2d_data *g2d,
 		}
 	}

-	g2d_userptr = kzalloc(sizeof(*g2d_userptr), GFP_KERNEL);
+	g2d_userptr = kzalloc_obj(*g2d_userptr, GFP_KERNEL);
 	if (!g2d_userptr)
 		return ERR_PTR(-ENOMEM);

@@ -470,8 +470,8 @@ static dma_addr_t *g2d_userptr_get_dma_addr(struct g2d_data *g2d,
 	offset = userptr & ~PAGE_MASK;
 	end = PAGE_ALIGN(userptr + size);
 	npages = (end - start) >> PAGE_SHIFT;
-	g2d_userptr->pages = kvmalloc_array(npages, sizeof(*g2d_userptr->pages),
-					    GFP_KERNEL);
+	g2d_userptr->pages = kvmalloc_objs(*g2d_userptr->pages, npages,
+					   GFP_KERNEL);
 	if (!g2d_userptr->pages) {
 		ret = -ENOMEM;
 		goto err_free;
@@ -491,7 +491,7 @@ static dma_addr_t *g2d_userptr_get_dma_addr(struct g2d_data *g2d,
 	}
 	g2d_userptr->npages = npages;

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		ret = -ENOMEM;
 		goto err_unpin_pages;
@@ -1169,7 +1169,7 @@ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
 	node->event = NULL;

 	if (req->event_type != G2D_EVENT_NOT) {
-		e = kzalloc(sizeof(*node->event), GFP_KERNEL);
+		e = kzalloc_obj(*node->event, GFP_KERNEL);
 		if (!e) {
 			ret = -ENOMEM;
 			goto err;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c
index b9b2f000072d..8b21623c2075 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
@@ -152,7 +152,7 @@ static struct exynos_drm_gem *exynos_drm_gem_init(struct drm_device *dev,
 	struct drm_gem_object *obj;
 	int ret;

-	exynos_gem = kzalloc(sizeof(*exynos_gem), GFP_KERNEL);
+	exynos_gem = kzalloc_obj(*exynos_gem, GFP_KERNEL);
 	if (!exynos_gem)
 		return ERR_PTR(-ENOMEM);

@@ -411,7 +411,7 @@ struct sg_table *exynos_drm_gem_prime_get_sg_table(struct drm_gem_object *obj)
 	struct sg_table *sgt;
 	int ret;

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/exynos/exynos_drm_ipp.c b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
index 008def51225a..a4d72e12d1a6 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_ipp.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
@@ -260,7 +260,7 @@ static inline struct exynos_drm_ipp_task *
 {
 	struct exynos_drm_ipp_task *task;

-	task = kzalloc(sizeof(*task), GFP_KERNEL);
+	task = kzalloc_obj(*task, GFP_KERNEL);
 	if (!task)
 		return NULL;

@@ -699,7 +699,7 @@ static int exynos_drm_ipp_event_create(struct exynos_drm_ipp_task *task,
 	struct drm_pending_exynos_ipp_event *e = NULL;
 	int ret;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c b/drivers/gpu/drm/exynos/exynos_drm_plane.c
index 67afddd566e2..fec9033ec13e 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
@@ -134,7 +134,7 @@ static void exynos_drm_plane_reset(struct drm_plane *plane)
 		plane->state = NULL;
 	}

-	exynos_state = kzalloc(sizeof(*exynos_state), GFP_KERNEL);
+	exynos_state = kzalloc_obj(*exynos_state, GFP_KERNEL);
 	if (exynos_state) {
 		__drm_atomic_helper_plane_reset(plane, &exynos_state->base);
 		plane->state->zpos = exynos_plane->config->zpos;
@@ -148,7 +148,7 @@ exynos_drm_plane_duplicate_state(struct drm_plane *plane)
 	struct exynos_drm_plane_state *copy;

 	exynos_state = to_exynos_plane_state(plane->state);
-	copy = kzalloc(sizeof(*exynos_state), GFP_KERNEL);
+	copy = kzalloc_obj(*exynos_state, GFP_KERNEL);
 	if (!copy)
 		return NULL;

diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
index a9a341ea6507..7702788003a7 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
@@ -209,7 +209,7 @@ struct drm_plane *fsl_dcu_drm_primary_create_plane(struct drm_device *dev)
 	struct drm_plane *primary;
 	int ret;

-	primary = kzalloc(sizeof(*primary), GFP_KERNEL);
+	primary = kzalloc_obj(*primary, GFP_KERNEL);
 	if (!primary) {
 		DRM_DEBUG_KMS("Failed to allocate primary plane\n");
 		return NULL;
diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c b/drivers/gpu/drm/gma500/cdv_intel_crt.c
index 06fe7480e7af..df38fefd4722 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_crt.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c
@@ -250,11 +250,11 @@ void cdv_intel_crt_init(struct drm_device *dev,
 	struct drm_encoder *encoder;
 	int ret;

-	gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL);
+	gma_encoder = kzalloc_obj(struct gma_encoder, GFP_KERNEL);
 	if (!gma_encoder)
 		return;

-	gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL);
+	gma_connector = kzalloc_obj(struct gma_connector, GFP_KERNEL);
 	if (!gma_connector)
 		goto err_free_encoder;

diff --git a/drivers/gpu/drm/gma500/cdv_intel_display.c b/drivers/gpu/drm/gma500/cdv_intel_display.c
index 5942a9d46b02..1f6e2f65c33f 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_display.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_display.c
@@ -939,7 +939,7 @@ struct drm_display_mode *cdv_intel_crtc_mode_get(struct drm_device *dev,
 		vsync = p->vsync;
 	}

-	mode = kzalloc(sizeof(*mode), GFP_KERNEL);
+	mode = kzalloc_obj(*mode, GFP_KERNEL);
 	if (!mode)
 		return NULL;

diff --git a/drivers/gpu/drm/gma500/cdv_intel_dp.c b/drivers/gpu/drm/gma500/cdv_intel_dp.c
index 54bf626f0524..4f3fbe31a779 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_dp.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_dp.c
@@ -1953,13 +1953,13 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev
 	const char *name = NULL;
 	int type = DRM_MODE_CONNECTOR_DisplayPort;

-	gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL);
+	gma_encoder = kzalloc_obj(struct gma_encoder, GFP_KERNEL);
 	if (!gma_encoder)
 		return;
-        gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL);
+        gma_connector = kzalloc_obj(struct gma_connector, GFP_KERNEL);
         if (!gma_connector)
                 goto err_connector;
-	intel_dp = kzalloc(sizeof(struct cdv_intel_dp), GFP_KERNEL);
+	intel_dp = kzalloc_obj(struct cdv_intel_dp, GFP_KERNEL);
 	if (!intel_dp)
 	        goto err_priv;

diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
index 8e93ee0d0ccd..5bfdc7adcaab 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
@@ -284,15 +284,15 @@ void cdv_hdmi_init(struct drm_device *dev,
 	int ddc_reg;
 	int ret;

-	gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL);
+	gma_encoder = kzalloc_obj(struct gma_encoder, GFP_KERNEL);
 	if (!gma_encoder)
 		return;

-	gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL);
+	gma_connector = kzalloc_obj(struct gma_connector, GFP_KERNEL);
 	if (!gma_connector)
 		goto err_free_encoder;

-	hdmi_priv = kzalloc(sizeof(struct mid_intel_hdmi_priv), GFP_KERNEL);
+	hdmi_priv = kzalloc_obj(struct mid_intel_hdmi_priv, GFP_KERNEL);
 	if (!hdmi_priv)
 		goto err_free_connector;

diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
index fbe7fe317393..5b6b0ac77c99 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
@@ -501,17 +501,15 @@ void cdv_intel_lvds_init(struct drm_device *dev,
 		return;
 	}

-	gma_encoder = kzalloc(sizeof(struct gma_encoder),
-				    GFP_KERNEL);
+	gma_encoder = kzalloc_obj(struct gma_encoder, GFP_KERNEL);
 	if (!gma_encoder)
 		return;

-	gma_connector = kzalloc(sizeof(struct gma_connector),
-				      GFP_KERNEL);
+	gma_connector = kzalloc_obj(struct gma_connector, GFP_KERNEL);
 	if (!gma_connector)
 		goto err_free_encoder;

-	lvds_priv = kzalloc(sizeof(struct cdv_intel_lvds_priv), GFP_KERNEL);
+	lvds_priv = kzalloc_obj(struct cdv_intel_lvds_priv, GFP_KERNEL);
 	if (!lvds_priv)
 		goto err_free_connector;

diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
index e69b537ded6b..808feee5fe2a 100644
--- a/drivers/gpu/drm/gma500/framebuffer.c
+++ b/drivers/gpu/drm/gma500/framebuffer.c
@@ -75,7 +75,7 @@ struct drm_framebuffer *psb_framebuffer_create(struct drm_device *dev,
 	struct drm_framebuffer *fb;
 	int ret;

-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	fb = kzalloc_obj(*fb, GFP_KERNEL);
 	if (!fb)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
index 2e44a2ac2742..238f0dfafacf 100644
--- a/drivers/gpu/drm/gma500/gem.c
+++ b/drivers/gpu/drm/gma500/gem.c
@@ -146,7 +146,7 @@ psb_gem_create(struct drm_device *dev, u64 size, const char *name, bool stolen,

 	size = roundup(size, PAGE_SIZE);

-	pobj = kzalloc(sizeof(*pobj), GFP_KERNEL);
+	pobj = kzalloc_obj(*pobj, GFP_KERNEL);
 	if (!pobj)
 		return ERR_PTR(-ENOMEM);
 	obj = &pobj->base;
diff --git a/drivers/gpu/drm/gma500/intel_bios.c b/drivers/gpu/drm/gma500/intel_bios.c
index b60720560830..527adf563bfa 100644
--- a/drivers/gpu/drm/gma500/intel_bios.c
+++ b/drivers/gpu/drm/gma500/intel_bios.c
@@ -247,8 +247,7 @@ static void parse_lfp_panel_data(struct drm_psb_private *dev_priv,
 	entry = &lvds_lfp_data->data[lvds_options->panel_type];
 	dvo_timing = &entry->dvo_timing;

-	panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode),
-				      GFP_KERNEL);
+	panel_fixed_mode = kzalloc_obj(*panel_fixed_mode, GFP_KERNEL);
 	if (panel_fixed_mode == NULL) {
 		dev_err(dev_priv->dev.dev, "out of memory for fixed panel mode\n");
 		return;
@@ -286,7 +285,7 @@ static void parse_sdvo_panel_data(struct drm_psb_private *dev_priv,
 	if (!dvo_timing)
 		return;

-	panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), GFP_KERNEL);
+	panel_fixed_mode = kzalloc_obj(*panel_fixed_mode, GFP_KERNEL);

 	if (!panel_fixed_mode)
 		return;
@@ -478,7 +477,7 @@ parse_device_mapping(struct drm_psb_private *dev_priv,
 		DRM_DEBUG_KMS("no child dev is parsed from VBT\n");
 		return;
 	}
-	dev_priv->child_dev = kcalloc(count, sizeof(*p_child), GFP_KERNEL);
+	dev_priv->child_dev = kzalloc_objs(*p_child, count, GFP_KERNEL);
 	if (!dev_priv->child_dev) {
 		DRM_DEBUG_KMS("No memory space for child devices\n");
 		return;
diff --git a/drivers/gpu/drm/gma500/intel_gmbus.c b/drivers/gpu/drm/gma500/intel_gmbus.c
index 2b06ba22f9c6..04eba78fa816 100644
--- a/drivers/gpu/drm/gma500/intel_gmbus.c
+++ b/drivers/gpu/drm/gma500/intel_gmbus.c
@@ -187,7 +187,7 @@ intel_gpio_create(struct drm_psb_private *dev_priv, u32 pin)
 	if (pin >= ARRAY_SIZE(map_pin_to_reg) || !map_pin_to_reg[pin])
 		return NULL;

-	gpio = kzalloc(sizeof(struct intel_gpio), GFP_KERNEL);
+	gpio = kzalloc_obj(struct intel_gpio, GFP_KERNEL);
 	if (gpio == NULL)
 		return NULL;

@@ -399,8 +399,8 @@ int gma_intel_setup_gmbus(struct drm_device *dev)
 	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
 	int ret, i;

-	dev_priv->gmbus = kcalloc(GMBUS_NUM_PORTS, sizeof(struct intel_gmbus),
-				  GFP_KERNEL);
+	dev_priv->gmbus = kzalloc_objs(struct intel_gmbus, GMBUS_NUM_PORTS,
+				       GFP_KERNEL);
 	if (dev_priv->gmbus == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/gma500/intel_i2c.c b/drivers/gpu/drm/gma500/intel_i2c.c
index 9d02a7b6d9a3..e121c7c27638 100644
--- a/drivers/gpu/drm/gma500/intel_i2c.c
+++ b/drivers/gpu/drm/gma500/intel_i2c.c
@@ -107,7 +107,7 @@ struct gma_i2c_chan *gma_i2c_create(struct drm_device *dev, const u32 reg,
 {
 	struct gma_i2c_chan *chan;

-	chan = kzalloc(sizeof(struct gma_i2c_chan), GFP_KERNEL);
+	chan = kzalloc_obj(struct gma_i2c_chan, GFP_KERNEL);
 	if (!chan)
 		goto out_free;

diff --git a/drivers/gpu/drm/gma500/mid_bios.c b/drivers/gpu/drm/gma500/mid_bios.c
index 0326f3ddc621..16128e84936a 100644
--- a/drivers/gpu/drm/gma500/mid_bios.c
+++ b/drivers/gpu/drm/gma500/mid_bios.c
@@ -228,7 +228,7 @@ static int mid_get_vbt_data_r10(struct drm_psb_private *dev_priv, u32 addr)
 	if (read_vbt_r10(addr, &vbt))
 		return -1;

-	gct = kmalloc_array(vbt.panel_count, sizeof(*gct), GFP_KERNEL);
+	gct = kmalloc_objs(*gct, vbt.panel_count, GFP_KERNEL);
 	if (!gct)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/gma500/mmu.c b/drivers/gpu/drm/gma500/mmu.c
index e6753282e70e..7bc6a914a378 100644
--- a/drivers/gpu/drm/gma500/mmu.c
+++ b/drivers/gpu/drm/gma500/mmu.c
@@ -158,7 +158,7 @@ static inline uint32_t psb_mmu_mask_pte(uint32_t pfn, int type)
 struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver,
 				    int trap_pagefaults, int invalid_type)
 {
-	struct psb_mmu_pd *pd = kmalloc(sizeof(*pd), GFP_KERNEL);
+	struct psb_mmu_pd *pd = kmalloc_obj(*pd, GFP_KERNEL);
 	uint32_t *v;
 	int i;

@@ -260,7 +260,7 @@ void psb_mmu_free_pagedir(struct psb_mmu_pd *pd)

 static struct psb_mmu_pt *psb_mmu_alloc_pt(struct psb_mmu_pd *pd)
 {
-	struct psb_mmu_pt *pt = kmalloc(sizeof(*pt), GFP_KERNEL);
+	struct psb_mmu_pt *pt = kmalloc_obj(*pt, GFP_KERNEL);
 	void *v;
 	uint32_t clflush_add = pd->driver->clflush_add >> PAGE_SHIFT;
 	uint32_t clflush_count = PAGE_SIZE / clflush_add;
@@ -425,7 +425,7 @@ struct psb_mmu_driver *psb_mmu_driver_init(struct drm_device *dev,
 	struct psb_mmu_driver *driver;
 	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);

-	driver = kmalloc(sizeof(*driver), GFP_KERNEL);
+	driver = kmalloc_obj(*driver, GFP_KERNEL);

 	if (!driver)
 		return NULL;
diff --git a/drivers/gpu/drm/gma500/oaktrail_hdmi.c b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
index 20d027d552c7..d48c9711e95a 100644
--- a/drivers/gpu/drm/gma500/oaktrail_hdmi.c
+++ b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
@@ -633,11 +633,11 @@ void oaktrail_hdmi_init(struct drm_device *dev,
 	struct drm_connector *connector;
 	struct drm_encoder *encoder;

-	gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL);
+	gma_encoder = kzalloc_obj(struct gma_encoder, GFP_KERNEL);
 	if (!gma_encoder)
 		return;

-	gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL);
+	gma_connector = kzalloc_obj(struct gma_connector, GFP_KERNEL);
 	if (!gma_connector)
 		goto failed_connector;

@@ -677,7 +677,7 @@ void oaktrail_hdmi_setup(struct drm_device *dev)
 	if (!pdev)
 		return;

-	hdmi_dev = kzalloc(sizeof(struct oaktrail_hdmi_dev), GFP_KERNEL);
+	hdmi_dev = kzalloc_obj(struct oaktrail_hdmi_dev, GFP_KERNEL);
 	if (!hdmi_dev) {
 		dev_err(dev->dev, "failed to allocate memory\n");
 		goto out;
diff --git a/drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c b/drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
index 48e8ac560a2a..7c02a92c60cb 100644
--- a/drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
+++ b/drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
@@ -280,7 +280,7 @@ int oaktrail_hdmi_i2c_init(struct pci_dev *dev)

 	hdmi_dev = pci_get_drvdata(dev);

-	i2c_dev = kzalloc(sizeof(struct hdmi_i2c_dev), GFP_KERNEL);
+	i2c_dev = kzalloc_obj(struct hdmi_i2c_dev, GFP_KERNEL);
 	if (!i2c_dev)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c
index 0705ba3813e6..f6ca1559081d 100644
--- a/drivers/gpu/drm/gma500/oaktrail_lvds.c
+++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c
@@ -223,7 +223,7 @@ static void oaktrail_lvds_get_configuration_mode(struct drm_device *dev,

 	/* Use the firmware provided data on Moorestown */
 	if (dev_priv->has_gct) {
-		mode = kzalloc(sizeof(*mode), GFP_KERNEL);
+		mode = kzalloc_obj(*mode, GFP_KERNEL);
 		if (!mode)
 			return;

@@ -302,11 +302,11 @@ void oaktrail_lvds_init(struct drm_device *dev,
 	struct drm_display_mode *scan;	/* *modes, *bios_mode; */
 	int ret;

-	gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL);
+	gma_encoder = kzalloc_obj(struct gma_encoder, GFP_KERNEL);
 	if (!gma_encoder)
 		return;

-	gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL);
+	gma_connector = kzalloc_obj(struct gma_connector, GFP_KERNEL);
 	if (!gma_connector)
 		goto err_free_encoder;

diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c b/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c
index 939c53fd09e8..2b5ef15df09f 100644
--- a/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c
+++ b/drivers/gpu/drm/gma500/oaktrail_lvds_i2c.c
@@ -135,7 +135,7 @@ struct gma_i2c_chan *oaktrail_lvds_i2c_init(struct drm_device *dev)
 	struct gma_i2c_chan *chan;
 	int ret;

-	chan = kzalloc(sizeof(struct gma_i2c_chan), GFP_KERNEL);
+	chan = kzalloc_obj(struct gma_i2c_chan, GFP_KERNEL);
 	if (!chan)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c
index 1ff2bd23db74..2864b209fcdf 100644
--- a/drivers/gpu/drm/gma500/psb_intel_display.c
+++ b/drivers/gpu/drm/gma500/psb_intel_display.c
@@ -404,7 +404,7 @@ struct drm_display_mode *psb_intel_crtc_mode_get(struct drm_device *dev,
 		vsync = p->vsync;
 	}

-	mode = kzalloc(sizeof(*mode), GFP_KERNEL);
+	mode = kzalloc_obj(*mode, GFP_KERNEL);
 	if (!mode)
 		return NULL;

@@ -487,7 +487,7 @@ void psb_intel_crtc_init(struct drm_device *dev, int pipe,
 		return;

 	gma_crtc->crtc_state =
-		kzalloc(sizeof(struct psb_intel_crtc_state), GFP_KERNEL);
+		kzalloc_obj(struct psb_intel_crtc_state, GFP_KERNEL);
 	if (!gma_crtc->crtc_state) {
 		dev_err(dev->dev, "Crtc state error: No memory\n");
 		kfree(gma_crtc);
diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c
index f8f3c42e67a7..6183360b1a81 100644
--- a/drivers/gpu/drm/gma500/psb_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c
@@ -639,20 +639,20 @@ void psb_intel_lvds_init(struct drm_device *dev,
 	int pipe;
 	int ret;

-	gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL);
+	gma_encoder = kzalloc_obj(struct gma_encoder, GFP_KERNEL);
 	if (!gma_encoder) {
 		dev_err(dev->dev, "gma_encoder allocation error\n");
 		return;
 	}
 	encoder = &gma_encoder->base;

-	gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL);
+	gma_connector = kzalloc_obj(struct gma_connector, GFP_KERNEL);
 	if (!gma_connector) {
 		dev_err(dev->dev, "gma_connector allocation error\n");
 		goto err_free_encoder;
 	}

-	lvds_priv = kzalloc(sizeof(struct psb_intel_lvds_priv), GFP_KERNEL);
+	lvds_priv = kzalloc_obj(struct psb_intel_lvds_priv, GFP_KERNEL);
 	if (!lvds_priv) {
 		dev_err(dev->dev, "LVDS private allocation error\n");
 		goto err_free_connector;
diff --git a/drivers/gpu/drm/gma500/psb_intel_sdvo.c b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
index 553e7c7d9bb8..6f973c9044e0 100644
--- a/drivers/gpu/drm/gma500/psb_intel_sdvo.c
+++ b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
@@ -1977,7 +1977,8 @@ psb_intel_sdvo_dvi_init(struct psb_intel_sdvo *psb_intel_sdvo, int device)
 	struct gma_connector *intel_connector;
 	struct psb_intel_sdvo_connector *psb_intel_sdvo_connector;

-	psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL);
+	psb_intel_sdvo_connector = kzalloc_obj(struct psb_intel_sdvo_connector,
+					       GFP_KERNEL);
 	if (!psb_intel_sdvo_connector)
 		return false;

@@ -2017,7 +2018,8 @@ psb_intel_sdvo_tv_init(struct psb_intel_sdvo *psb_intel_sdvo, int type)
 	struct gma_connector *intel_connector;
 	struct psb_intel_sdvo_connector *psb_intel_sdvo_connector;

-	psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL);
+	psb_intel_sdvo_connector = kzalloc_obj(struct psb_intel_sdvo_connector,
+					       GFP_KERNEL);
 	if (!psb_intel_sdvo_connector)
 		return false;

@@ -2056,7 +2058,8 @@ psb_intel_sdvo_analog_init(struct psb_intel_sdvo *psb_intel_sdvo, int device)
 	struct gma_connector *intel_connector;
 	struct psb_intel_sdvo_connector *psb_intel_sdvo_connector;

-	psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL);
+	psb_intel_sdvo_connector = kzalloc_obj(struct psb_intel_sdvo_connector,
+					       GFP_KERNEL);
 	if (!psb_intel_sdvo_connector)
 		return false;

@@ -2090,7 +2093,8 @@ psb_intel_sdvo_lvds_init(struct psb_intel_sdvo *psb_intel_sdvo, int device)
 	struct gma_connector *intel_connector;
 	struct psb_intel_sdvo_connector *psb_intel_sdvo_connector;

-	psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL);
+	psb_intel_sdvo_connector = kzalloc_obj(struct psb_intel_sdvo_connector,
+					       GFP_KERNEL);
 	if (!psb_intel_sdvo_connector)
 		return false;

@@ -2442,7 +2446,7 @@ bool psb_intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
 	struct psb_intel_sdvo *psb_intel_sdvo;
 	int i;

-	psb_intel_sdvo = kzalloc(sizeof(struct psb_intel_sdvo), GFP_KERNEL);
+	psb_intel_sdvo = kzalloc_obj(struct psb_intel_sdvo, GFP_KERNEL);
 	if (!psb_intel_sdvo)
 		return false;

diff --git a/drivers/gpu/drm/gud/gud_connector.c b/drivers/gpu/drm/gud/gud_connector.c
index 1726a3fadff8..b3d5df5f7a5c 100644
--- a/drivers/gpu/drm/gud/gud_connector.c
+++ b/drivers/gpu/drm/gud/gud_connector.c
@@ -246,7 +246,8 @@ static int gud_connector_get_modes(struct drm_connector *connector)
 	if (drm_edid && edid_ctx.edid_override)
 		goto out;

-	reqmodes = kmalloc_array(GUD_CONNECTOR_MAX_NUM_MODES, sizeof(*reqmodes), GFP_KERNEL);
+	reqmodes = kmalloc_objs(*reqmodes, GUD_CONNECTOR_MAX_NUM_MODES,
+				GFP_KERNEL);
 	if (!reqmodes)
 		goto out;

@@ -479,7 +480,8 @@ static int gud_connector_add_properties(struct gud_device *gdrm, struct gud_conn
 	unsigned int i, num_properties;
 	int ret;

-	properties = kcalloc(GUD_CONNECTOR_PROPERTIES_MAX_NUM, sizeof(*properties), GFP_KERNEL);
+	properties = kzalloc_objs(*properties, GUD_CONNECTOR_PROPERTIES_MAX_NUM,
+				  GFP_KERNEL);
 	if (!properties)
 		return -ENOMEM;

@@ -619,7 +621,7 @@ static int gud_connector_create(struct gud_device *gdrm, unsigned int index,
 	int ret, connector_type;
 	u32 flags;

-	gconn = kzalloc(sizeof(*gconn), GFP_KERNEL);
+	gconn = kzalloc_obj(*gconn, GFP_KERNEL);
 	if (!gconn)
 		return -ENOMEM;

@@ -698,7 +700,7 @@ int gud_get_connectors(struct gud_device *gdrm)
 	unsigned int i, num_connectors;
 	int ret;

-	descs = kmalloc_array(GUD_CONNECTORS_MAX_NUM, sizeof(*descs), GFP_KERNEL);
+	descs = kmalloc_objs(*descs, GUD_CONNECTORS_MAX_NUM, GFP_KERNEL);
 	if (!descs)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/gud/gud_drv.c b/drivers/gpu/drm/gud/gud_drv.c
index 42135a48d92e..66780b9f6026 100644
--- a/drivers/gpu/drm/gud/gud_drv.c
+++ b/drivers/gpu/drm/gud/gud_drv.c
@@ -82,7 +82,7 @@ static int gud_get_display_descriptor(struct usb_interface *intf,
 	void *buf;
 	int ret;

-	buf = kmalloc(sizeof(*desc), GFP_KERNEL);
+	buf = kmalloc_obj(*desc, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

@@ -135,7 +135,7 @@ static int gud_usb_get_status(struct usb_interface *intf)
 	int ret, status = -EIO;
 	u8 *buf;

-	buf = kmalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kmalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

@@ -255,7 +255,8 @@ static int gud_plane_add_properties(struct gud_device *gdrm)
 	unsigned int i, num_properties;
 	int ret;

-	properties = kcalloc(GUD_PROPERTIES_MAX_NUM, sizeof(*properties), GFP_KERNEL);
+	properties = kzalloc_objs(*properties, GUD_PROPERTIES_MAX_NUM,
+				  GFP_KERNEL);
 	if (!properties)
 		return -ENOMEM;

@@ -401,7 +402,7 @@ static int gud_alloc_bulk_buffer(struct gud_device *gdrm)
 		return -ENOMEM;

 	num_pages = DIV_ROUND_UP(gdrm->bulk_len, PAGE_SIZE);
-	pages = kmalloc_array(num_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kmalloc_objs(struct page *, num_pages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/display/dvo_ch7017.c b/drivers/gpu/drm/i915/display/dvo_ch7017.c
index f10c0fb8d2c8..032c41e55a07 100644
--- a/drivers/gpu/drm/i915/display/dvo_ch7017.c
+++ b/drivers/gpu/drm/i915/display/dvo_ch7017.c
@@ -207,7 +207,7 @@ static bool ch7017_init(struct intel_dvo_device *dvo,
 	const char *str;
 	u8 val;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (priv == NULL)
 		return false;

diff --git a/drivers/gpu/drm/i915/display/dvo_ch7xxx.c b/drivers/gpu/drm/i915/display/dvo_ch7xxx.c
index 49f02aca818b..b85c9afb0c64 100644
--- a/drivers/gpu/drm/i915/display/dvo_ch7xxx.c
+++ b/drivers/gpu/drm/i915/display/dvo_ch7xxx.c
@@ -218,7 +218,7 @@ static bool ch7xxx_init(struct intel_dvo_device *dvo,
 	u8 vendor, device;
 	char *name, *devid;

-	ch7xxx = kzalloc(sizeof(*ch7xxx), GFP_KERNEL);
+	ch7xxx = kzalloc_obj(*ch7xxx, GFP_KERNEL);
 	if (ch7xxx == NULL)
 		return false;

diff --git a/drivers/gpu/drm/i915/display/dvo_ivch.c b/drivers/gpu/drm/i915/display/dvo_ivch.c
index 0713b2709412..9bcdd02d5f36 100644
--- a/drivers/gpu/drm/i915/display/dvo_ivch.c
+++ b/drivers/gpu/drm/i915/display/dvo_ivch.c
@@ -269,7 +269,7 @@ static bool ivch_init(struct intel_dvo_device *dvo,
 	u16 temp;
 	int i;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (priv == NULL)
 		return false;

diff --git a/drivers/gpu/drm/i915/display/dvo_ns2501.c b/drivers/gpu/drm/i915/display/dvo_ns2501.c
index 80b71bd6a837..248b79795edf 100644
--- a/drivers/gpu/drm/i915/display/dvo_ns2501.c
+++ b/drivers/gpu/drm/i915/display/dvo_ns2501.c
@@ -476,7 +476,7 @@ static bool ns2501_init(struct intel_dvo_device *dvo,
 	struct ns2501_priv *ns;
 	unsigned char ch;

-	ns = kzalloc(sizeof(*ns), GFP_KERNEL);
+	ns = kzalloc_obj(*ns, GFP_KERNEL);
 	if (ns == NULL)
 		return false;

diff --git a/drivers/gpu/drm/i915/display/dvo_sil164.c b/drivers/gpu/drm/i915/display/dvo_sil164.c
index 017b617a8069..765d2517fb10 100644
--- a/drivers/gpu/drm/i915/display/dvo_sil164.c
+++ b/drivers/gpu/drm/i915/display/dvo_sil164.c
@@ -143,7 +143,7 @@ static bool sil164_init(struct intel_dvo_device *dvo,
 	struct sil164_priv *sil;
 	unsigned char ch;

-	sil = kzalloc(sizeof(*sil), GFP_KERNEL);
+	sil = kzalloc_obj(*sil, GFP_KERNEL);
 	if (sil == NULL)
 		return false;

diff --git a/drivers/gpu/drm/i915/display/dvo_tfp410.c b/drivers/gpu/drm/i915/display/dvo_tfp410.c
index ed560e3438db..9bd8305bc291 100644
--- a/drivers/gpu/drm/i915/display/dvo_tfp410.c
+++ b/drivers/gpu/drm/i915/display/dvo_tfp410.c
@@ -175,7 +175,7 @@ static bool tfp410_init(struct intel_dvo_device *dvo,
 	struct tfp410_priv *tfp;
 	int id;

-	tfp = kzalloc(sizeof(*tfp), GFP_KERNEL);
+	tfp = kzalloc_obj(*tfp, GFP_KERNEL);
 	if (tfp == NULL)
 		return false;

diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c
index dac781f54661..b46b79eee5bb 100644
--- a/drivers/gpu/drm/i915/display/icl_dsi.c
+++ b/drivers/gpu/drm/i915/display/icl_dsi.c
@@ -1934,7 +1934,7 @@ void icl_dsi_init(struct intel_display *display,
 	if (port == PORT_NONE)
 		return;

-	intel_dsi = kzalloc(sizeof(*intel_dsi), GFP_KERNEL);
+	intel_dsi = kzalloc_obj(*intel_dsi, GFP_KERNEL);
 	if (!intel_dsi)
 		return;

diff --git a/drivers/gpu/drm/i915/display/intel_atomic.c b/drivers/gpu/drm/i915/display/intel_atomic.c
index 348b1655435e..208d6a449edc 100644
--- a/drivers/gpu/drm/i915/display/intel_atomic.c
+++ b/drivers/gpu/drm/i915/display/intel_atomic.c
@@ -323,7 +323,7 @@ intel_crtc_destroy_state(struct drm_crtc *crtc,
 struct drm_atomic_state *
 intel_atomic_state_alloc(struct drm_device *dev)
 {
-	struct intel_atomic_state *state = kzalloc(sizeof(*state), GFP_KERNEL);
+	struct intel_atomic_state *state = kzalloc_obj(*state, GFP_KERNEL);

 	if (!state || drm_atomic_state_init(dev, &state->base) < 0) {
 		kfree(state);
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index ae0b922d5bc3..4731afb418da 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -486,8 +486,8 @@ init_bdb_block(struct intel_display *display,
 	if (section_id == BDB_MIPI_SEQUENCE && *(const u8 *)block >= 3)
 		block_size += 5;

-	entry = kzalloc(struct_size(entry, data, max(min_size, block_size) + 3),
-			GFP_KERNEL);
+	entry = kzalloc_flex(*entry, data, max(min_size, block_size) + 3,
+			     GFP_KERNEL);
 	if (!entry) {
 		kfree(temp_block);
 		return;
@@ -852,7 +852,7 @@ parse_lfp_panel_dtd(struct intel_display *display,
 					      lfp_data_ptrs,
 					      panel_type);

-	panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), GFP_KERNEL);
+	panel_fixed_mode = kzalloc_obj(*panel_fixed_mode, GFP_KERNEL);
 	if (!panel_fixed_mode)
 		return;

@@ -968,7 +968,7 @@ parse_generic_dtd(struct intel_display *display,

 	dtd = &generic_dtd->dtd[panel->vbt.panel_type];

-	panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), GFP_KERNEL);
+	panel_fixed_mode = kzalloc_obj(*panel_fixed_mode, GFP_KERNEL);
 	if (!panel_fixed_mode)
 		return;

@@ -1141,7 +1141,7 @@ parse_sdvo_lvds_data(struct intel_display *display,
 		return;
 	}

-	panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), GFP_KERNEL);
+	panel_fixed_mode = kzalloc_obj(*panel_fixed_mode, GFP_KERNEL);
 	if (!panel_fixed_mode)
 		return;

@@ -2929,7 +2929,7 @@ parse_general_definitions(struct intel_display *display)
 			    "Found VBT child device with type 0x%x\n",
 			    child->device_type);

-		devdata = kzalloc(sizeof(*devdata), GFP_KERNEL);
+		devdata = kzalloc_obj(*devdata, GFP_KERNEL);
 		if (!devdata)
 			break;

@@ -3010,7 +3010,7 @@ init_vbt_missing_defaults(struct intel_display *display)
 			continue;

 		/* Create fake child device config */
-		devdata = kzalloc(sizeof(*devdata), GFP_KERNEL);
+		devdata = kzalloc_obj(*devdata, GFP_KERNEL);
 		if (!devdata)
 			break;

diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
index 4ee3f5172f4e..e08e477e882a 100644
--- a/drivers/gpu/drm/i915/display/intel_bw.c
+++ b/drivers/gpu/drm/i915/display/intel_bw.c
@@ -1470,7 +1470,7 @@ int intel_bw_init(struct intel_display *display)
 {
 	struct intel_bw_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c b/drivers/gpu/drm/i915/display/intel_cdclk.c
index 9bfbfbf34dc0..46375d4972be 100644
--- a/drivers/gpu/drm/i915/display/intel_cdclk.c
+++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
@@ -3409,7 +3409,7 @@ int intel_cdclk_init(struct intel_display *display)
 {
 	struct intel_cdclk_state *cdclk_state;

-	cdclk_state = kzalloc(sizeof(*cdclk_state), GFP_KERNEL);
+	cdclk_state = kzalloc_obj(*cdclk_state, GFP_KERNEL);
 	if (!cdclk_state)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/display/intel_colorop.c b/drivers/gpu/drm/i915/display/intel_colorop.c
index 1d84933f05aa..8326916ccdc1 100644
--- a/drivers/gpu/drm/i915/display/intel_colorop.c
+++ b/drivers/gpu/drm/i915/display/intel_colorop.c
@@ -15,7 +15,7 @@ struct intel_colorop *intel_colorop_alloc(void)
 {
 	struct intel_colorop *colorop;

-	colorop = kzalloc(sizeof(*colorop), GFP_KERNEL);
+	colorop = kzalloc_obj(*colorop, GFP_KERNEL);
 	if (!colorop)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
index 682bf1be350d..8712f6a61778 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.c
+++ b/drivers/gpu/drm/i915/display/intel_connector.c
@@ -86,7 +86,7 @@ static int intel_connector_init(struct intel_connector *connector)
 	 * need it we'll free the state and allocate a smaller one on the first
 	 * successful commit anyway.
 	 */
-	conn_state = kzalloc(sizeof(*conn_state), GFP_KERNEL);
+	conn_state = kzalloc_obj(*conn_state, GFP_KERNEL);
 	if (!conn_state)
 		return -ENOMEM;

@@ -105,7 +105,7 @@ struct intel_connector *intel_connector_alloc(void)
 {
 	struct intel_connector *connector;

-	connector = kzalloc(sizeof(*connector), GFP_KERNEL);
+	connector = kzalloc_obj(*connector, GFP_KERNEL);
 	if (!connector)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
index 5f9a03877ea9..7be2361e52e7 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -1037,7 +1037,7 @@ void intel_crt_init(struct intel_display *display)
 		intel_de_write(display, adpa_reg, adpa);
 	}

-	crt = kzalloc(sizeof(struct intel_crt), GFP_KERNEL);
+	crt = kzalloc_obj(struct intel_crt, GFP_KERNEL);
 	if (!crt)
 		return;

diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i915/display/intel_crtc.c
index 778ebc5095c3..e41975b34929 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc.c
@@ -168,7 +168,7 @@ struct intel_crtc_state *intel_crtc_state_alloc(struct intel_crtc *crtc)
 {
 	struct intel_crtc_state *crtc_state;

-	crtc_state = kmalloc(sizeof(*crtc_state), GFP_KERNEL);
+	crtc_state = kmalloc_obj(*crtc_state, GFP_KERNEL);

 	if (crtc_state)
 		intel_crtc_state_reset(crtc_state, crtc);
@@ -196,7 +196,7 @@ static struct intel_crtc *intel_crtc_alloc(void)
 	struct intel_crtc_state *crtc_state;
 	struct intel_crtc *crtc;

-	crtc = kzalloc(sizeof(*crtc), GFP_KERNEL);
+	crtc = kzalloc_obj(*crtc, GFP_KERNEL);
 	if (!crtc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/display/intel_dbuf_bw.c b/drivers/gpu/drm/i915/display/intel_dbuf_bw.c
index 8b8894c37f63..73d22de72226 100644
--- a/drivers/gpu/drm/i915/display/intel_dbuf_bw.c
+++ b/drivers/gpu/drm/i915/display/intel_dbuf_bw.c
@@ -284,7 +284,7 @@ int intel_dbuf_bw_init(struct intel_display *display)
 {
 	struct intel_dbuf_bw_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 81b3a6692ca2..4a081b30477c 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -4122,7 +4122,7 @@ intel_encoder_current_mode(struct intel_encoder *encoder)

 	crtc = intel_crtc_for_pipe(display, pipe);

-	mode = kzalloc(sizeof(*mode), GFP_KERNEL);
+	mode = kzalloc_obj(*mode, GFP_KERNEL);
 	if (!mode)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c
index 471f236c9ddf..648294f234cc 100644
--- a/drivers/gpu/drm/i915/display/intel_display_device.c
+++ b/drivers/gpu/drm/i915/display/intel_display_device.c
@@ -1663,7 +1663,7 @@ struct intel_display *intel_display_device_probe(struct pci_dev *pdev,
 	const struct subplatform_desc *subdesc;
 	enum intel_step step;

-	display = kzalloc(sizeof(*display), GFP_KERNEL);
+	display = kzalloc_obj(*display, GFP_KERNEL);
 	if (!display)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
index 9adeebb376b1..6e7e4654eb79 100644
--- a/drivers/gpu/drm/i915/display/intel_display_irq.c
+++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
@@ -2479,7 +2479,7 @@ intel_display_irq_snapshot_capture(struct intel_display *display)
 {
 	struct intel_display_irq_snapshot *snapshot;

-	snapshot = kzalloc(sizeof(*snapshot), GFP_ATOMIC);
+	snapshot = kzalloc_obj(*snapshot, GFP_ATOMIC);
 	if (!snapshot)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_display_power_map.c b/drivers/gpu/drm/i915/display/intel_display_power_map.c
index 9b49952994ce..28b15d9ee45e 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power_map.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power_map.c
@@ -1823,9 +1823,8 @@ __set_power_wells(struct i915_power_domains *power_domains,

 	power_domains->power_well_count = power_well_count;
 	power_domains->power_wells =
-				kcalloc(power_well_count,
-					sizeof(*power_domains->power_wells),
-					GFP_KERNEL);
+				kzalloc_objs(*power_domains->power_wells,
+					     power_well_count, GFP_KERNEL);
 	if (!power_domains->power_wells)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/display/intel_display_rps.c b/drivers/gpu/drm/i915/display/intel_display_rps.c
index e77811396474..f37361f87894 100644
--- a/drivers/gpu/drm/i915/display/intel_display_rps.c
+++ b/drivers/gpu/drm/i915/display/intel_display_rps.c
@@ -59,7 +59,7 @@ void intel_display_rps_boost_after_vblank(struct drm_crtc *crtc,
 	if (drm_crtc_vblank_get(crtc))
 		return;

-	wait = kmalloc(sizeof(*wait), GFP_KERNEL);
+	wait = kmalloc_obj(*wait, GFP_KERNEL);
 	if (!wait) {
 		drm_crtc_vblank_put(crtc);
 		return;
diff --git a/drivers/gpu/drm/i915/display/intel_display_snapshot.c b/drivers/gpu/drm/i915/display/intel_display_snapshot.c
index 66087302fdbc..f650f15ad394 100644
--- a/drivers/gpu/drm/i915/display/intel_display_snapshot.c
+++ b/drivers/gpu/drm/i915/display/intel_display_snapshot.c
@@ -28,7 +28,7 @@ struct intel_display_snapshot *intel_display_snapshot_capture(struct intel_displ
 {
 	struct intel_display_snapshot *snapshot;

-	snapshot = kzalloc(sizeof(*snapshot), GFP_ATOMIC);
+	snapshot = kzalloc_obj(*snapshot, GFP_ATOMIC);
 	if (!snapshot)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_dmc.c b/drivers/gpu/drm/i915/display/intel_dmc.c
index 1182bc9a2e6d..7e51d8873178 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc.c
@@ -1417,7 +1417,7 @@ void intel_dmc_init(struct intel_display *display)
 	 */
 	intel_dmc_runtime_pm_get(display);

-	dmc = kzalloc(sizeof(*dmc), GFP_KERNEL);
+	dmc = kzalloc_obj(*dmc, GFP_KERNEL);
 	if (!dmc)
 		return;

@@ -1547,7 +1547,7 @@ struct intel_dmc_snapshot *intel_dmc_snapshot_capture(struct intel_display *disp
 	if (!HAS_DMC(display))
 		return NULL;

-	snapshot = kzalloc(sizeof(*snapshot), GFP_ATOMIC);
+	snapshot = kzalloc_obj(*snapshot, GFP_ATOMIC);
 	if (!snapshot)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 24f8e60df9ac..96da2f8da8b5 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1765,7 +1765,7 @@ mst_stream_encoder_create(struct intel_digital_port *dig_port, enum pipe pipe)
 	struct intel_dp_mst_encoder *intel_mst;
 	struct intel_encoder *encoder;

-	intel_mst = kzalloc(sizeof(*intel_mst), GFP_KERNEL);
+	intel_mst = kzalloc_obj(*intel_mst, GFP_KERNEL);

 	if (!intel_mst)
 		return NULL;
diff --git a/drivers/gpu/drm/i915/display/intel_dp_tunnel.c b/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
index faa2b7a46699..62f9bf3371cd 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
@@ -381,8 +381,8 @@ add_inherited_tunnel(struct intel_atomic_state *state,
 	}

 	if (!state->inherited_dp_tunnels) {
-		state->inherited_dp_tunnels = kzalloc(sizeof(*state->inherited_dp_tunnels),
-						      GFP_KERNEL);
+		state->inherited_dp_tunnels = kzalloc_obj(*state->inherited_dp_tunnels,
+							  GFP_KERNEL);
 		if (!state->inherited_dp_tunnels)
 			return -ENOMEM;
 	}
diff --git a/drivers/gpu/drm/i915/display/intel_dpt.c b/drivers/gpu/drm/i915/display/intel_dpt.c
index 58d953472218..05e5c8f839a1 100644
--- a/drivers/gpu/drm/i915/display/intel_dpt.c
+++ b/drivers/gpu/drm/i915/display/intel_dpt.c
@@ -280,7 +280,7 @@ intel_dpt_create(struct intel_framebuffer *fb)
 		return ERR_PTR(ret);
 	}

-	dpt = kzalloc(sizeof(*dpt), GFP_KERNEL);
+	dpt = kzalloc_obj(*dpt, GFP_KERNEL);
 	if (!dpt) {
 		i915_gem_object_put(dpt_obj);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c b/drivers/gpu/drm/i915/display/intel_dsb.c
index 91060e2a5762..d9aff12a0a9b 100644
--- a/drivers/gpu/drm/i915/display/intel_dsb.c
+++ b/drivers/gpu/drm/i915/display/intel_dsb.c
@@ -974,7 +974,7 @@ struct intel_dsb *intel_dsb_prepare(struct intel_atomic_state *state,
 	if (!display->params.enable_dsb)
 		return NULL;

-	dsb = kzalloc(sizeof(*dsb), GFP_KERNEL);
+	dsb = kzalloc_obj(*dsb, GFP_KERNEL);
 	if (!dsb)
 		goto out;

diff --git a/drivers/gpu/drm/i915/display/intel_dsb_buffer.c b/drivers/gpu/drm/i915/display/intel_dsb_buffer.c
index 50faf3869b6c..28d63ba2f032 100644
--- a/drivers/gpu/drm/i915/display/intel_dsb_buffer.c
+++ b/drivers/gpu/drm/i915/display/intel_dsb_buffer.c
@@ -46,7 +46,7 @@ struct intel_dsb_buffer *intel_dsb_buffer_create(struct drm_device *drm, size_t
 	u32 *buf;
 	int ret;

-	dsb_buf = kzalloc(sizeof(*dsb_buf), GFP_KERNEL);
+	dsb_buf = kzalloc_obj(*dsb_buf, GFP_KERNEL);
 	if (!dsb_buf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/display/intel_dsi.c b/drivers/gpu/drm/i915/display/intel_dsi.c
index a8f012119165..1ac274964c4c 100644
--- a/drivers/gpu/drm/i915/display/intel_dsi.c
+++ b/drivers/gpu/drm/i915/display/intel_dsi.c
@@ -87,7 +87,7 @@ struct intel_dsi_host *intel_dsi_host_init(struct intel_dsi *intel_dsi,
 	struct intel_dsi_host *host;
 	struct mipi_dsi_device *device;

-	host = kzalloc(sizeof(*host), GFP_KERNEL);
+	host = kzalloc_obj(*host, GFP_KERNEL);
 	if (!host)
 		return NULL;

@@ -102,7 +102,7 @@ struct intel_dsi_host *intel_dsi_host_init(struct intel_dsi *intel_dsi,
 	 * devices by ourselves here too. Need to be careful though, because we
 	 * don't initialize any of the driver model devices here.
 	 */
-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device) {
 		kfree(host);
 		return NULL;
diff --git a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
index 4b815ce6b1fe..d1e7d758fb70 100644
--- a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
+++ b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
@@ -231,7 +231,7 @@ static void soc_opaque_gpio_set_value(struct intel_connector *connector,
 {
 	struct gpiod_lookup_table *lookup;

-	lookup = kzalloc(struct_size(lookup, table, 2), GFP_KERNEL);
+	lookup = kzalloc_flex(*lookup, table, 2, GFP_KERNEL);
 	if (!lookup)
 		return;

diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c
index c2663d6e2c92..d6fbf4fd29d9 100644
--- a/drivers/gpu/drm/i915/display/intel_dvo.c
+++ b/drivers/gpu/drm/i915/display/intel_dvo.c
@@ -494,7 +494,7 @@ void intel_dvo_init(struct intel_display *display)
 	struct intel_encoder *encoder;
 	struct intel_dvo *intel_dvo;

-	intel_dvo = kzalloc(sizeof(*intel_dvo), GFP_KERNEL);
+	intel_dvo = kzalloc_obj(*intel_dvo, GFP_KERNEL);
 	if (!intel_dvo)
 		return;

diff --git a/drivers/gpu/drm/i915/display/intel_encoder.c b/drivers/gpu/drm/i915/display/intel_encoder.c
index 2ffe1f251ef8..b02297d56950 100644
--- a/drivers/gpu/drm/i915/display/intel_encoder.c
+++ b/drivers/gpu/drm/i915/display/intel_encoder.c
@@ -108,7 +108,7 @@ struct intel_digital_port *intel_dig_port_alloc(void)
 {
 	struct intel_digital_port *dig_port;

-	dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
+	dig_port = kzalloc_obj(*dig_port, GFP_KERNEL);
 	if (!dig_port)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index b9bd9b6dfe94..3b6d0d4ccff7 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -2173,7 +2173,7 @@ static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb,
 	if (ret || !fence)
 		goto flush;

-	cb = kmalloc(sizeof(*cb), GFP_KERNEL);
+	cb = kmalloc_obj(*cb, GFP_KERNEL);
 	if (!cb) {
 		dma_fence_put(fence);
 		ret = -ENOMEM;
@@ -2361,7 +2361,7 @@ struct intel_framebuffer *intel_framebuffer_alloc(void)
 {
 	struct intel_framebuffer *intel_fb;

-	intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
+	intel_fb = kzalloc_obj(*intel_fb, GFP_KERNEL);
 	if (!intel_fb)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
index 9f39b6990bbd..c0dfa65809f9 100644
--- a/drivers/gpu/drm/i915/display/intel_fbc.c
+++ b/drivers/gpu/drm/i915/display/intel_fbc.c
@@ -2294,7 +2294,7 @@ static struct intel_fbc *intel_fbc_create(struct intel_display *display,
 {
 	struct intel_fbc *fbc;

-	fbc = kzalloc(sizeof(*fbc), GFP_KERNEL);
+	fbc = kzalloc_obj(*fbc, GFP_KERNEL);
 	if (!fbc)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_global_state.c b/drivers/gpu/drm/i915/display/intel_global_state.c
index 30eff6009e87..49f32828c3f1 100644
--- a/drivers/gpu/drm/i915/display/intel_global_state.c
+++ b/drivers/gpu/drm/i915/display/intel_global_state.c
@@ -52,7 +52,7 @@ static struct intel_global_commit *commit_new(void)
 {
 	struct intel_global_commit *commit;

-	commit = kzalloc(sizeof(*commit), GFP_KERNEL);
+	commit = kzalloc_obj(*commit, GFP_KERNEL);
 	if (!commit)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_gmbus.c b/drivers/gpu/drm/i915/display/intel_gmbus.c
index 2caff677600c..b27330b95145 100644
--- a/drivers/gpu/drm/i915/display/intel_gmbus.c
+++ b/drivers/gpu/drm/i915/display/intel_gmbus.c
@@ -925,7 +925,7 @@ int intel_gmbus_setup(struct intel_display *display)
 		if (!gmbus_pin)
 			continue;

-		bus = kzalloc(sizeof(*bus), GFP_KERNEL);
+		bus = kzalloc_obj(*bus, GFP_KERNEL);
 		if (!bus) {
 			ret = -ENOMEM;
 			goto err;
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c
index 7114fc405c29..7c276b7cc929 100644
--- a/drivers/gpu/drm/i915/display/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
@@ -2327,9 +2327,9 @@ static int initialize_hdcp_port_data(struct intel_connector *connector,
 	data->protocol = (u8)shim->protocol;

 	if (!data->streams)
-		data->streams = kcalloc(INTEL_NUM_PIPES(display),
-					sizeof(struct hdcp2_streamid_type),
-					GFP_KERNEL);
+		data->streams = kzalloc_objs(struct hdcp2_streamid_type,
+					     INTEL_NUM_PIPES(display),
+					     GFP_KERNEL);
 	if (!data->streams) {
 		drm_err(display->drm, "Out of Memory\n");
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c
index 781667b710b4..5b941bfa8c17 100644
--- a/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c
+++ b/drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.c
@@ -633,7 +633,7 @@ int intel_hdcp_gsc_init(struct intel_display *display)
 	struct i915_hdcp_arbiter *arbiter;
 	int ret = 0;

-	arbiter = kzalloc(sizeof(*arbiter), GFP_KERNEL);
+	arbiter = kzalloc_obj(*arbiter, GFP_KERNEL);
 	if (!arbiter)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/display/intel_lpe_audio.c b/drivers/gpu/drm/i915/display/intel_lpe_audio.c
index 5b41abe1c64d..c7f28b537509 100644
--- a/drivers/gpu/drm/i915/display/intel_lpe_audio.c
+++ b/drivers/gpu/drm/i915/display/intel_lpe_audio.c
@@ -87,11 +87,11 @@ lpe_audio_platdev_create(struct intel_display *display)
 	struct platform_device *platdev;
 	struct intel_hdmi_lpe_audio_pdata *pdata;

-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return ERR_PTR(-ENOMEM);

-	rsc = kcalloc(2, sizeof(*rsc), GFP_KERNEL);
+	rsc = kzalloc_objs(*rsc, 2, GFP_KERNEL);
 	if (!rsc) {
 		kfree(pdata);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index 457d60863536..7f085f475664 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -886,7 +886,7 @@ void intel_lvds_init(struct intel_display *display)
 			    "LVDS is not present in VBT, but enabled anyway\n");
 	}

-	lvds_encoder = kzalloc(sizeof(*lvds_encoder), GFP_KERNEL);
+	lvds_encoder = kzalloc_obj(*lvds_encoder, GFP_KERNEL);
 	if (!lvds_encoder)
 		return;

diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
index cbc220310813..e968834dc7b7 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.c
+++ b/drivers/gpu/drm/i915/display/intel_opregion.c
@@ -898,7 +898,7 @@ int intel_opregion_setup(struct intel_display *display)
 		return -ENOTSUPP;
 	}

-	opregion = kzalloc(sizeof(*opregion), GFP_KERNEL);
+	opregion = kzalloc_obj(*opregion, GFP_KERNEL);
 	if (!opregion)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 88eb7ae5765c..8ab5a866fb67 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -1409,7 +1409,7 @@ void intel_overlay_setup(struct intel_display *display)
 	if (!engine || !engine->kernel_context)
 		return;

-	overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
+	overlay = kzalloc_obj(*overlay, GFP_KERNEL);
 	if (!overlay)
 		return;

@@ -1484,7 +1484,7 @@ intel_overlay_snapshot_capture(struct intel_display *display)
 	if (!overlay || !overlay->active)
 		return NULL;

-	error = kmalloc(sizeof(*error), GFP_ATOMIC);
+	error = kmalloc_obj(*error, GFP_ATOMIC);
 	if (error == NULL)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_plane.c b/drivers/gpu/drm/i915/display/intel_plane.c
index 3dc2ed52147f..a5d60180cc7a 100644
--- a/drivers/gpu/drm/i915/display/intel_plane.c
+++ b/drivers/gpu/drm/i915/display/intel_plane.c
@@ -77,11 +77,11 @@ struct intel_plane *intel_plane_alloc(void)
 	struct intel_plane_state *plane_state;
 	struct intel_plane *plane;

-	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
+	plane = kzalloc_obj(*plane, GFP_KERNEL);
 	if (!plane)
 		return ERR_PTR(-ENOMEM);

-	plane_state = kzalloc(sizeof(*plane_state), GFP_KERNEL);
+	plane_state = kzalloc_obj(*plane_state, GFP_KERNEL);
 	if (!plane_state) {
 		kfree(plane);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/i915/display/intel_pmdemand.c b/drivers/gpu/drm/i915/display/intel_pmdemand.c
index dc44a7a169c1..d12fabbe90de 100644
--- a/drivers/gpu/drm/i915/display/intel_pmdemand.c
+++ b/drivers/gpu/drm/i915/display/intel_pmdemand.c
@@ -121,7 +121,7 @@ int intel_pmdemand_init(struct intel_display *display)
 {
 	struct intel_pmdemand_state *pmdemand_state;

-	pmdemand_state = kzalloc(sizeof(*pmdemand_state), GFP_KERNEL);
+	pmdemand_state = kzalloc_obj(*pmdemand_state, GFP_KERNEL);
 	if (!pmdemand_state)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/display/intel_rom.c b/drivers/gpu/drm/i915/display/intel_rom.c
index c8f615315310..930b9cb9d1b7 100644
--- a/drivers/gpu/drm/i915/display/intel_rom.c
+++ b/drivers/gpu/drm/i915/display/intel_rom.c
@@ -47,7 +47,7 @@ struct intel_rom *intel_rom_spi(struct drm_device *drm)
 	struct intel_rom *rom;
 	u32 static_region;

-	rom = kzalloc(sizeof(*rom), GFP_KERNEL);
+	rom = kzalloc_obj(*rom, GFP_KERNEL);
 	if (!rom)
 		return NULL;

@@ -92,7 +92,7 @@ struct intel_rom *intel_rom_pci(struct drm_device *drm)
 {
 	struct intel_rom *rom;

-	rom = kzalloc(sizeof(*rom), GFP_KERNEL);
+	rom = kzalloc_obj(*rom, GFP_KERNEL);
 	if (!rom)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 6c032d81e7ee..273487e8ec5c 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -474,7 +474,7 @@ static bool __intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd,
 	if (!buf)
 		return false;

-	msgs = kcalloc(args_len + 3, sizeof(*msgs), GFP_KERNEL);
+	msgs = kzalloc_objs(*msgs, args_len + 3, GFP_KERNEL);
 	if (!msgs) {
 		kfree(buf);
 		return false;
@@ -2774,11 +2774,11 @@ static struct intel_sdvo_connector *intel_sdvo_connector_alloc(void)
 	struct intel_sdvo_connector *sdvo_connector;
 	struct intel_sdvo_connector_state *conn_state;

-	sdvo_connector = kzalloc(sizeof(*sdvo_connector), GFP_KERNEL);
+	sdvo_connector = kzalloc_obj(*sdvo_connector, GFP_KERNEL);
 	if (!sdvo_connector)
 		return NULL;

-	conn_state = kzalloc(sizeof(*conn_state), GFP_KERNEL);
+	conn_state = kzalloc_obj(*conn_state, GFP_KERNEL);
 	if (!conn_state) {
 		kfree(sdvo_connector);
 		return NULL;
@@ -3389,7 +3389,7 @@ bool intel_sdvo_init(struct intel_display *display,
 	if (!assert_sdvo_port_valid(display, port))
 		return false;

-	intel_sdvo = kzalloc(sizeof(*intel_sdvo), GFP_KERNEL);
+	intel_sdvo = kzalloc_obj(*intel_sdvo, GFP_KERNEL);
 	if (!intel_sdvo)
 		return false;

diff --git a/drivers/gpu/drm/i915/display/intel_tc.c b/drivers/gpu/drm/i915/display/intel_tc.c
index 064f572bbc85..0f9efe45acf2 100644
--- a/drivers/gpu/drm/i915/display/intel_tc.c
+++ b/drivers/gpu/drm/i915/display/intel_tc.c
@@ -1977,7 +1977,7 @@ int intel_tc_port_init(struct intel_digital_port *dig_port, bool is_legacy)
 	if (drm_WARN_ON(display->drm, tc_port == TC_PORT_NONE))
 		return -EINVAL;

-	tc = kzalloc(sizeof(*tc), GFP_KERNEL);
+	tc = kzalloc_obj(*tc, GFP_KERNEL);
 	if (!tc)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/display/intel_tv.c b/drivers/gpu/drm/i915/display/intel_tv.c
index e3ab49815a3c..2036eaf2d1ff 100644
--- a/drivers/gpu/drm/i915/display/intel_tv.c
+++ b/drivers/gpu/drm/i915/display/intel_tv.c
@@ -1966,7 +1966,7 @@ intel_tv_init(struct intel_display *display)
 	    (tv_dac_off & TVDAC_STATE_CHG_EN) != 0)
 		return;

-	intel_tv = kzalloc(sizeof(*intel_tv), GFP_KERNEL);
+	intel_tv = kzalloc_obj(*intel_tv, GFP_KERNEL);
 	if (!intel_tv) {
 		return;
 	}
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
index a6aab79812e5..edd6ca199106 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -3366,7 +3366,7 @@ int intel_dbuf_init(struct intel_display *display)
 {
 	struct intel_dbuf_state *dbuf_state;

-	dbuf_state = kzalloc(sizeof(*dbuf_state), GFP_KERNEL);
+	dbuf_state = kzalloc_obj(*dbuf_state, GFP_KERNEL);
 	if (!dbuf_state)
 		return -ENOMEM;

@@ -3892,7 +3892,7 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
 	if (DISPLAY_VER(display) < 9 || !new_crtc_state->hw.active)
 		return;

-	hw = kzalloc(sizeof(*hw), GFP_KERNEL);
+	hw = kzalloc_obj(*hw, GFP_KERNEL);
 	if (!hw)
 		return;

diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c b/drivers/gpu/drm/i915/display/vlv_dsi.c
index d705af3bf8ba..31625b0070c6 100644
--- a/drivers/gpu/drm/i915/display/vlv_dsi.c
+++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
@@ -1919,7 +1919,7 @@ void vlv_dsi_init(struct intel_display *display)
 	else
 		display->dsi.mmio_base = VLV_MIPI_BASE;

-	intel_dsi = kzalloc(sizeof(*intel_dsi), GFP_KERNEL);
+	intel_dsi = kzalloc_obj(*intel_dsi, GFP_KERNEL);
 	if (!intel_dsi)
 		return;

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_clflush.c b/drivers/gpu/drm/i915/gem/i915_gem_clflush.c
index c1deea20c28a..50ade188edc5 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_clflush.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_clflush.c
@@ -52,7 +52,7 @@ static struct clflush *clflush_work_create(struct drm_i915_gem_object *obj)

 	GEM_BUG_ON(!obj->cache_dirty);

-	clflush = kmalloc(sizeof(*clflush), GFP_KERNEL);
+	clflush = kmalloc_obj(*clflush, GFP_KERNEL);
 	if (!clflush)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
index 3215ef49c975..c364423706c6 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -285,7 +285,7 @@ proto_context_create(struct drm_i915_file_private *fpriv,
 {
 	struct i915_gem_proto_context *pc, *err;

-	pc = kzalloc(sizeof(*pc), GFP_KERNEL);
+	pc = kzalloc_obj(*pc, GFP_KERNEL);
 	if (!pc)
 		return ERR_PTR(-ENOMEM);

@@ -442,7 +442,7 @@ set_proto_ctx_engines_balance(struct i915_user_extension __user *base,
 	if (num_siblings == 0)
 		return 0;

-	siblings = kmalloc_array(num_siblings, sizeof(*siblings), GFP_KERNEL);
+	siblings = kmalloc_objs(*siblings, num_siblings, GFP_KERNEL);
 	if (!siblings)
 		return -ENOMEM;

@@ -644,9 +644,7 @@ set_proto_ctx_engines_parallel_submit(struct i915_user_extension __user *base,
 		return -EINVAL;
 	}

-	siblings = kmalloc_array(num_siblings * width,
-				 sizeof(*siblings),
-				 GFP_KERNEL);
+	siblings = kmalloc_objs(*siblings, num_siblings * width, GFP_KERNEL);
 	if (!siblings)
 		return -ENOMEM;

@@ -761,7 +759,7 @@ static int set_proto_ctx_engines(struct drm_i915_file_private *fpriv,
 	if (set.num_engines > I915_EXEC_RING_MASK + 1)
 		return -EINVAL;

-	set.engines = kmalloc_array(set.num_engines, sizeof(*set.engines), GFP_KERNEL);
+	set.engines = kmalloc_objs(*set.engines, set.num_engines, GFP_KERNEL);
 	if (!set.engines)
 		return -ENOMEM;

@@ -1105,7 +1103,7 @@ static struct i915_gem_engines *alloc_engines(unsigned int count)
 {
 	struct i915_gem_engines *e;

-	e = kzalloc(struct_size(e, engines, count), GFP_KERNEL);
+	e = kzalloc_flex(*e, engines, count, GFP_KERNEL);
 	if (!e)
 		return NULL;

@@ -1611,7 +1609,7 @@ i915_gem_create_context(struct drm_i915_private *i915,
 	int err;
 	int i;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_create.c b/drivers/gpu/drm/i915/gem/i915_gem_create.c
index 189ecdd0a9c1..478f4b98bc2d 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_create.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_create.c
@@ -54,9 +54,8 @@ static int object_set_placements(struct drm_i915_gem_object *obj,
 		obj->mm.placements = &i915->mm.regions[mr->id];
 		obj->mm.n_placements = 1;
 	} else {
-		arr = kmalloc_array(n_placements,
-				    sizeof(struct intel_memory_region *),
-				    GFP_KERNEL);
+		arr = kmalloc_objs(struct intel_memory_region *, n_placements,
+				   GFP_KERNEL);
 		if (!arr)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
index f4f1c979d1b9..db7166784731 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
@@ -36,7 +36,7 @@ static struct sg_table *i915_gem_map_dma_buf(struct dma_buf_attachment *attach,
 	 * Make a copy of the object's sgt, so that we can make an independent
 	 * mapping
 	 */
-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
index d49e96f9be51..c2e91eeb7c16 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
@@ -2006,7 +2006,7 @@ static int eb_capture_stage(struct i915_execbuffer *eb)
 		for_each_batch_create_order(eb, j) {
 			struct i915_capture_list *capture;

-			capture = kmalloc(sizeof(*capture), GFP_KERNEL);
+			capture = kmalloc_obj(*capture, GFP_KERNEL);
 			if (!capture)
 				continue;

@@ -3190,7 +3190,7 @@ eb_composite_fence_create(struct i915_execbuffer *eb, int out_fence_fd)

 	GEM_BUG_ON(!intel_context_is_parent(eb->context));

-	fences = kmalloc_array(eb->num_batches, sizeof(*fences), GFP_KERNEL);
+	fences = kmalloc_objs(*fences, eb->num_batches, GFP_KERNEL);
 	if (!fences)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_internal.c b/drivers/gpu/drm/i915/gem/i915_gem_internal.c
index 232b984f60b6..e90fe30cc44e 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_internal.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_internal.c
@@ -54,7 +54,7 @@ static int i915_gem_object_get_pages_internal(struct drm_i915_gem_object *obj)
 	}

 create_st:
-	st = kmalloc(sizeof(*st), GFP_KERNEL);
+	st = kmalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index 4542135b20d5..e10a9e21e6c8 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -730,7 +730,7 @@ mmap_offset_attach(struct drm_i915_gem_object *obj,
 	if (mmo)
 		goto out;

-	mmo = kmalloc(sizeof(*mmo), GFP_KERNEL);
+	mmo = kmalloc_obj(*mmo, GFP_KERNEL);
 	if (!mmo)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c
index aaa15e7b3f17..e9b7d76927bb 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c
@@ -32,7 +32,7 @@ i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj)
 	if (front)
 		return front;

-	front = kmalloc(sizeof(*front), GFP_KERNEL);
+	front = kmalloc_obj(*front, GFP_KERNEL);
 	if (!front)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c
index c2f8e5f95696..fa6d174987ac 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c
@@ -314,7 +314,7 @@ static void *i915_gem_object_map_page(struct drm_i915_gem_object *obj,

 	if (n_pages > ARRAY_SIZE(stack)) {
 		/* Too big for stack -- allocate temporary array instead */
-		pages = kvmalloc_array(n_pages, sizeof(*pages), GFP_KERNEL);
+		pages = kvmalloc_objs(*pages, n_pages, GFP_KERNEL);
 		if (!pages)
 			return ERR_PTR(-ENOMEM);
 	}
@@ -382,7 +382,7 @@ static struct page **i915_gem_object_panic_pages(struct drm_i915_gem_object *obj
 	struct sgt_iter iter;

 	/* For a 3840x2160 32 bits Framebuffer, this should require ~64K */
-	pages = kmalloc_array(n_pages, sizeof(*pages), GFP_ATOMIC);
+	pages = kmalloc_objs(*pages, n_pages, GFP_ATOMIC);
 	if (!pages)
 		return NULL;

@@ -437,7 +437,7 @@ struct intel_panic *i915_gem_object_alloc_panic(void)
 {
 	struct intel_panic *panic;

-	panic = kzalloc(sizeof(*panic), GFP_KERNEL);
+	panic = kzalloc_obj(*panic, GFP_KERNEL);

 	return panic;
 }
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_phys.c b/drivers/gpu/drm/i915/gem/i915_gem_phys.c
index bc799f182850..71a2c2bb5087 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_phys.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_phys.c
@@ -47,7 +47,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
 	if (!vaddr)
 		return -ENOMEM;

-	st = kmalloc(sizeof(*st), GFP_KERNEL);
+	st = kmalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		goto err_pci;

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
index 95b13d172913..c6c64ba29bc4 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
@@ -222,7 +222,7 @@ static int shmem_get_pages(struct drm_i915_gem_object *obj)
 	GEM_BUG_ON(obj->write_domain & I915_GEM_GPU_DOMAINS);

 rebuild_st:
-	st = kmalloc(sizeof(*st), GFP_KERNEL | __GFP_NOWARN);
+	st = kmalloc_obj(*st, GFP_KERNEL | __GFP_NOWARN);
 	if (!st)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index c3e0b8da485c..a577f8df7c60 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -648,7 +648,7 @@ i915_pages_create_for_stolen(struct drm_device *dev,
 	 * dma mapping in a single scatterlist.
 	 */

-	st = kmalloc(sizeof(*st), GFP_KERNEL);
+	st = kmalloc_obj(*st, GFP_KERNEL);
 	if (st == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -783,7 +783,7 @@ static int _i915_gem_object_stolen_init(struct intel_memory_region *mem,
 	    !(flags & I915_BO_ALLOC_GPU_ONLY))
 		return -ENOSPC;

-	stolen = kzalloc(sizeof(*stolen), GFP_KERNEL);
+	stolen = kzalloc_obj(*stolen, GFP_KERNEL);
 	if (!stolen)
 		return -ENOMEM;

@@ -1074,7 +1074,7 @@ static struct intel_stolen_node *i915_gem_stolen_node_alloc(struct drm_device *d
 	struct drm_i915_private *i915 = to_i915(drm);
 	struct intel_stolen_node *node;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
index 7b1a7d01db2b..46ed4ff8658d 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
@@ -279,7 +279,7 @@ static struct ttm_tt *i915_ttm_tt_create(struct ttm_buffer_object *bo,
 	if (i915_ttm_is_ghost_object(bo))
 		return NULL;

-	i915_tt = kzalloc(sizeof(*i915_tt), GFP_KERNEL);
+	i915_tt = kzalloc_obj(*i915_tt, GFP_KERNEL);
 	if (!i915_tt)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
index 2f6b33edb9c9..ff2e02113fe6 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
@@ -498,7 +498,7 @@ __i915_ttm_move(struct ttm_buffer_object *bo,
 		struct dma_fence *dep = fence;

 		if (!I915_SELFTEST_ONLY(fail_work_allocation))
-			copy_work = kzalloc(sizeof(*copy_work), GFP_KERNEL);
+			copy_work = kzalloc_obj(*copy_work, GFP_KERNEL);

 		if (copy_work) {
 			copy_work->i915 = i915;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
index 77cc3af3d518..6518a02397c6 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
@@ -109,7 +109,7 @@ static int i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
 		return -E2BIG;

 	num_pages = obj->base.size >> PAGE_SHIFT;
-	st = kmalloc(sizeof(*st), GFP_KERNEL);
+	st = kmalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

@@ -258,7 +258,7 @@ int i915_gem_object_userptr_submit_init(struct drm_i915_gem_object *obj)
 	if (ret)
 		return ret;

-	pvec = kvmalloc_array(num_pages, sizeof(struct page *), GFP_KERNEL);
+	pvec = kvmalloc_objs(struct page *, num_pages, GFP_KERNEL);
 	if (!pvec)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_gem_object.c b/drivers/gpu/drm/i915/gem/selftests/huge_gem_object.c
index bac957755068..8caaf325e56a 100644
--- a/drivers/gpu/drm/i915/gem/selftests/huge_gem_object.c
+++ b/drivers/gpu/drm/i915/gem/selftests/huge_gem_object.c
@@ -38,7 +38,7 @@ static int huge_get_pages(struct drm_i915_gem_object *obj)
 		return -E2BIG;

 	npages = obj->base.size / PAGE_SIZE;
-	pages = kmalloc(sizeof(*pages), GFP);
+	pages = kmalloc_obj(*pages, GFP);
 	if (!pages)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
index 02e9bf87f654..44718e728291 100644
--- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
@@ -88,7 +88,7 @@ static int get_huge_pages(struct drm_i915_gem_object *obj)
 	if (overflows_type(obj->base.size >> PAGE_SHIFT, unsigned int))
 		return -E2BIG;

-	st = kmalloc(sizeof(*st), GFP);
+	st = kmalloc_obj(*st, GFP);
 	if (!st)
 		return -ENOMEM;

@@ -220,7 +220,7 @@ static int fake_get_huge_pages(struct drm_i915_gem_object *obj)
 	if (overflows_type(obj->base.size >> PAGE_SHIFT, unsigned int))
 		return -E2BIG;

-	st = kmalloc(sizeof(*st), GFP);
+	st = kmalloc_obj(*st, GFP);
 	if (!st)
 		return -ENOMEM;

@@ -270,7 +270,7 @@ static int fake_get_huge_pages_single(struct drm_i915_gem_object *obj)
 	struct scatterlist *sg;
 	unsigned int page_size;

-	st = kmalloc(sizeof(*st), GFP);
+	st = kmalloc_obj(*st, GFP);
 	if (!st)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c
index 3557e9e6f422..ee661b7d3c6f 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c
@@ -540,7 +540,7 @@ tiled_blits_create(struct intel_engine_cs *engine, struct rnd_state *prng)
 	u64 hole_size;
 	int err;

-	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc_obj(*t, GFP_KERNEL);
 	if (!t)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
index 1330c0b431a7..223a9ca32d22 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
@@ -56,7 +56,7 @@ static int live_nop_switch(void *arg)
 	if (IS_ERR(file))
 		return PTR_ERR(file);

-	ctx = kcalloc(nctx, sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_objs(*ctx, nctx, GFP_KERNEL);
 	if (!ctx) {
 		err = -ENOMEM;
 		goto out_file;
@@ -317,7 +317,7 @@ static int live_parallel_switch(void *arg)
 	engines = i915_gem_context_lock_engines(ctx);
 	count = engines->num_engines;

-	data = kcalloc(count, sizeof(*data), GFP_KERNEL);
+	data = kzalloc_objs(*data, count, GFP_KERNEL);
 	if (!data) {
 		i915_gem_context_unlock_engines(ctx);
 		err = -ENOMEM;
@@ -1054,7 +1054,7 @@ __sseu_prepare(const char *name,
 	if (!(flags & (TEST_BUSY | TEST_RESET)))
 		return 0;

-	*spin = kzalloc(sizeof(**spin), GFP_KERNEL);
+	*spin = kzalloc_obj(**spin, GFP_KERNEL);
 	if (!*spin)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
index 0d250d57496a..17829ad57099 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
@@ -677,7 +677,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
 	list_for_each_entry_safe(hole, next, &mm->hole_stack, hole_stack) {
 		struct drm_mm_node *resv;

-		resv = kzalloc(sizeof(*resv), GFP_NOWAIT);
+		resv = kzalloc_obj(*resv, GFP_NOWAIT);
 		if (!resv) {
 			err = -ENOMEM;
 			goto out_park;
diff --git a/drivers/gpu/drm/i915/gem/selftests/mock_context.c b/drivers/gpu/drm/i915/gem/selftests/mock_context.c
index fd8babb513e5..35cf3d0dd08f 100644
--- a/drivers/gpu/drm/i915/gem/selftests/mock_context.c
+++ b/drivers/gpu/drm/i915/gem/selftests/mock_context.c
@@ -17,7 +17,7 @@ mock_context(struct drm_i915_private *i915,
 	struct i915_gem_engines *e;
 	struct intel_sseu null_sseu = {};

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.c
index 5cd58e0f0dcf..8eabb6aa2f65 100644
--- a/drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.c
+++ b/drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.c
@@ -15,7 +15,7 @@ static struct sg_table *mock_map_dma_buf(struct dma_buf_attachment *attachment,
 	struct scatterlist *sg;
 	int i, err;

-	st = kmalloc(sizeof(*st), GFP_KERNEL);
+	st = kmalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return ERR_PTR(-ENOMEM);

@@ -103,7 +103,7 @@ static struct dma_buf *mock_dmabuf(int npages)
 	struct dma_buf *dmabuf;
 	int i;

-	mock = kmalloc(struct_size(mock, pages, npages), GFP_KERNEL);
+	mock = kmalloc_flex(*mock, pages, npages, GFP_KERNEL);
 	if (!mock)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gt/gen6_ppgtt.c b/drivers/gpu/drm/i915/gt/gen6_ppgtt.c
index c2bdc133c89a..6cbf5dc04d9a 100644
--- a/drivers/gpu/drm/i915/gt/gen6_ppgtt.c
+++ b/drivers/gpu/drm/i915/gt/gen6_ppgtt.c
@@ -431,7 +431,7 @@ struct i915_ppgtt *gen6_ppgtt_create(struct intel_gt *gt)
 	struct gen6_ppgtt *ppgtt;
 	int err;

-	ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
+	ppgtt = kzalloc_obj(*ppgtt, GFP_KERNEL);
 	if (!ppgtt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c
index 398d60a66410..1e1d035a0391 100644
--- a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c
+++ b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c
@@ -1006,7 +1006,7 @@ struct i915_ppgtt *gen8_ppgtt_create(struct intel_gt *gt,
 	struct i915_ppgtt *ppgtt;
 	int err;

-	ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
+	ppgtt = kzalloc_obj(*ppgtt, GFP_KERNEL);
 	if (!ppgtt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
index bf6117d5fc57..e18c019b7725 100644
--- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
+++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
@@ -279,7 +279,7 @@ intel_breadcrumbs_create(struct intel_engine_cs *irq_engine)
 {
 	struct intel_breadcrumbs *b;

-	b = kzalloc(sizeof(*b), GFP_KERNEL);
+	b = kzalloc_obj(*b, GFP_KERNEL);
 	if (!b)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index 98a3a7a9de50..53b7554b78b9 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -471,7 +471,7 @@ static int intel_engine_setup(struct intel_gt *gt, enum intel_engine_id id,
 	if (GEM_DEBUG_WARN_ON(gt->engine_class[info->class][info->instance]))
 		return -EINVAL;

-	engine = kzalloc(sizeof(*engine), GFP_KERNEL);
+	engine = kzalloc_obj(*engine, GFP_KERNEL);
 	if (!engine)
 		return -ENOMEM;

@@ -1311,7 +1311,7 @@ static int measure_breadcrumb_dw(struct intel_context *ce)

 	GEM_BUG_ON(!engine->gt->scratch);

-	frame = kzalloc(sizeof(*frame), GFP_KERNEL);
+	frame = kzalloc_obj(*frame, GFP_KERNEL);
 	if (!frame)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
index 3df683b0402a..546ef2121f44 100644
--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
@@ -2254,7 +2254,7 @@ static struct execlists_capture *capture_regs(struct intel_engine_cs *engine)
 	const gfp_t gfp = GFP_ATOMIC | __GFP_NOWARN;
 	struct execlists_capture *cap;

-	cap = kmalloc(sizeof(*cap), gfp);
+	cap = kmalloc_obj(*cap, gfp);
 	if (!cap)
 		return NULL;

@@ -3934,7 +3934,7 @@ execlists_create_virtual(struct intel_engine_cs **siblings, unsigned int count,
 	unsigned int n;
 	int err;

-	ve = kzalloc(struct_size(ve, siblings, count), GFP_KERNEL);
+	ve = kzalloc_flex(*ve, siblings, count, GFP_KERNEL);
 	if (!ve)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c
index 5eda98ebc1ae..c1904e0d24c7 100644
--- a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c
+++ b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c
@@ -865,9 +865,8 @@ void intel_ggtt_init_fences(struct i915_ggtt *ggtt)
 	if (intel_vgpu_active(i915))
 		num_fences = intel_uncore_read(uncore,
 					       vgtif_reg(avail_rs.fence_num));
-	ggtt->fence_regs = kcalloc(num_fences,
-				   sizeof(*ggtt->fence_regs),
-				   GFP_KERNEL);
+	ggtt->fence_regs = kzalloc_objs(*ggtt->fence_regs, num_fences,
+					GFP_KERNEL);
 	if (!ggtt->fence_regs)
 		num_fences = 0;

diff --git a/drivers/gpu/drm/i915/gt/intel_gsc.c b/drivers/gpu/drm/i915/gt/intel_gsc.c
index c43febc862dc..d0b61fcc6eb7 100644
--- a/drivers/gpu/drm/i915/gt/intel_gsc.c
+++ b/drivers/gpu/drm/i915/gt/intel_gsc.c
@@ -204,7 +204,7 @@ static void gsc_init_one(struct drm_i915_private *i915, struct intel_gsc *gsc,
 	}

 add_device:
-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		goto fail;

diff --git a/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c b/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c
index c7befc5c20d0..372cdc758c5f 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c
@@ -144,8 +144,8 @@ node_create(struct intel_gt_buffer_pool *pool, size_t sz,
 	struct intel_gt_buffer_pool_node *node;
 	struct drm_i915_gem_object *obj;

-	node = kmalloc(sizeof(*node),
-		       GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
+	node = kmalloc_obj(*node,
+			   GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
 	if (!node)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gt/intel_ppgtt.c b/drivers/gpu/drm/i915/gt/intel_ppgtt.c
index d07a4f97b943..72d8473a448b 100644
--- a/drivers/gpu/drm/i915/gt/intel_ppgtt.c
+++ b/drivers/gpu/drm/i915/gt/intel_ppgtt.c
@@ -17,7 +17,7 @@ struct i915_page_table *alloc_pt(struct i915_address_space *vm, int sz)
 {
 	struct i915_page_table *pt;

-	pt = kmalloc(sizeof(*pt), I915_GFP_ALLOW_FAIL);
+	pt = kmalloc_obj(*pt, I915_GFP_ALLOW_FAIL);
 	if (unlikely(!pt))
 		return ERR_PTR(-ENOMEM);

@@ -36,11 +36,11 @@ struct i915_page_directory *__alloc_pd(int count)
 {
 	struct i915_page_directory *pd;

-	pd = kzalloc(sizeof(*pd), I915_GFP_ALLOW_FAIL);
+	pd = kzalloc_obj(*pd, I915_GFP_ALLOW_FAIL);
 	if (unlikely(!pd))
 		return NULL;

-	pd->entry = kcalloc(count, sizeof(*pd->entry), I915_GFP_ALLOW_FAIL);
+	pd->entry = kzalloc_objs(*pd->entry, count, I915_GFP_ALLOW_FAIL);
 	if (unlikely(!pd->entry)) {
 		kfree(pd);
 		return NULL;
diff --git a/drivers/gpu/drm/i915/gt/intel_ring.c b/drivers/gpu/drm/i915/gt/intel_ring.c
index b74d9205c0f5..73e342a95dcb 100644
--- a/drivers/gpu/drm/i915/gt/intel_ring.c
+++ b/drivers/gpu/drm/i915/gt/intel_ring.c
@@ -152,7 +152,7 @@ intel_engine_create_ring(struct intel_engine_cs *engine, int size)
 	GEM_BUG_ON(!is_power_of_2(size));
 	GEM_BUG_ON(RING_CTL_SIZE(size) & ~RING_NR_PAGES);

-	ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kzalloc_obj(*ring, GFP_KERNEL);
 	if (!ring)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gt/intel_timeline.c b/drivers/gpu/drm/i915/gt/intel_timeline.c
index 843f72829a24..98a6aadff7dd 100644
--- a/drivers/gpu/drm/i915/gt/intel_timeline.c
+++ b/drivers/gpu/drm/i915/gt/intel_timeline.c
@@ -151,7 +151,7 @@ __intel_timeline_create(struct intel_gt *gt,
 	struct intel_timeline *timeline;
 	int err;

-	timeline = kzalloc(sizeof(*timeline), GFP_KERNEL);
+	timeline = kzalloc_obj(*timeline, GFP_KERNEL);
 	if (!timeline)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
index ece88c612e27..d47a78af3622 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@ -157,8 +157,8 @@ static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa)
 	if (IS_ALIGNED(wal->count, grow)) { /* Either uninitialized or full. */
 		struct i915_wa *list;

-		list = kmalloc_array(ALIGN(wal->count + 1, grow), sizeof(*list),
-				     GFP_KERNEL);
+		list = kmalloc_objs(*list, ALIGN(wal->count + 1, grow),
+				    GFP_KERNEL);
 		if (!list) {
 			drm_err(&i915->drm, "No space for workaround init!\n");
 			return;
diff --git a/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c b/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c
index 9e4f0e417b3b..67326bc83310 100644
--- a/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c
+++ b/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c
@@ -72,7 +72,7 @@ static struct pulse *pulse_create(void)
 {
 	struct pulse *p;

-	p = kmalloc(sizeof(*p), GFP_KERNEL);
+	p = kmalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return p;

diff --git a/drivers/gpu/drm/i915/gt/selftest_execlists.c b/drivers/gpu/drm/i915/gt/selftest_execlists.c
index a06b397b6d42..1e99179ce32f 100644
--- a/drivers/gpu/drm/i915/gt/selftest_execlists.c
+++ b/drivers/gpu/drm/i915/gt/selftest_execlists.c
@@ -3564,7 +3564,7 @@ static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
 	unsigned long count;
 	int err = 0;

-	arg = kmalloc_array(I915_NUM_ENGINES, sizeof(*arg), GFP_KERNEL);
+	arg = kmalloc_objs(*arg, I915_NUM_ENGINES, GFP_KERNEL);
 	if (!arg)
 		return -ENOMEM;

@@ -3648,9 +3648,8 @@ static int live_preempt_smoke(void *arg)
 	u32 *cs;
 	int n;

-	smoke.contexts = kmalloc_array(smoke.ncontext,
-				       sizeof(*smoke.contexts),
-				       GFP_KERNEL);
+	smoke.contexts = kmalloc_objs(*smoke.contexts, smoke.ncontext,
+				      GFP_KERNEL);
 	if (!smoke.contexts)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
index 4f252f704975..2204058849bd 100644
--- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
+++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
@@ -986,7 +986,7 @@ static int __igt_reset_engines(struct intel_gt *gt,
 			h.ctx->sched.priority = 1024;
 	}

-	threads = kmalloc_array(I915_NUM_ENGINES, sizeof(*threads), GFP_KERNEL);
+	threads = kmalloc_objs(*threads, I915_NUM_ENGINES, GFP_KERNEL);
 	if (!threads)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gt/selftest_migrate.c b/drivers/gpu/drm/i915/gt/selftest_migrate.c
index fdf0e9858607..71f2c2ca71a2 100644
--- a/drivers/gpu/drm/i915/gt/selftest_migrate.c
+++ b/drivers/gpu/drm/i915/gt/selftest_migrate.c
@@ -689,7 +689,7 @@ static int threaded_migrate(struct intel_migrate *migrate,
 	unsigned int i;
 	int err = 0;

-	thread = kcalloc(n_cpus, sizeof(*thread), GFP_KERNEL);
+	thread = kzalloc_objs(*thread, n_cpus, GFP_KERNEL);
 	if (!thread)
 		return 0;

diff --git a/drivers/gpu/drm/i915/gt/selftest_rc6.c b/drivers/gpu/drm/i915/gt/selftest_rc6.c
index 41716ed454b7..166175f0b19c 100644
--- a/drivers/gpu/drm/i915/gt/selftest_rc6.c
+++ b/drivers/gpu/drm/i915/gt/selftest_rc6.c
@@ -201,7 +201,7 @@ randomised_engines(struct intel_gt *gt,
 	if (!n)
 		return NULL;

-	engines = kmalloc_array(n, sizeof(*engines), GFP_KERNEL);
+	engines = kmalloc_objs(*engines, n, GFP_KERNEL);
 	if (!engines)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/gt/selftest_slpc.c b/drivers/gpu/drm/i915/gt/selftest_slpc.c
index e61bb0bad12c..6e25d39fa193 100644
--- a/drivers/gpu/drm/i915/gt/selftest_slpc.c
+++ b/drivers/gpu/drm/i915/gt/selftest_slpc.c
@@ -499,7 +499,7 @@ static int live_slpc_tile_interaction(void *arg)
 	struct slpc_thread *threads;
 	int i = 0, ret = 0;

-	threads = kcalloc(I915_MAX_GT, sizeof(*threads), GFP_KERNEL);
+	threads = kzalloc_objs(*threads, I915_MAX_GT, GFP_KERNEL);
 	if (!threads)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gt/selftest_timeline.c b/drivers/gpu/drm/i915/gt/selftest_timeline.c
index fa36cf920bde..6860b61915b9 100644
--- a/drivers/gpu/drm/i915/gt/selftest_timeline.c
+++ b/drivers/gpu/drm/i915/gt/selftest_timeline.c
@@ -170,7 +170,7 @@ static int mock_hwsp_freelist(void *arg)

 	state.max = PAGE_SIZE / sizeof(*state.history);
 	state.count = 0;
-	state.history = kcalloc(state.max, sizeof(*state.history), GFP_KERNEL);
+	state.history = kzalloc_objs(*state.history, state.max, GFP_KERNEL);
 	if (!state.history) {
 		err = -ENOMEM;
 		goto err_put;
@@ -536,9 +536,8 @@ static int live_hwsp_engine(void *arg)
 	 * independently to each of their breadcrumb slots.
 	 */

-	timelines = kvmalloc_array(NUM_TIMELINES * I915_NUM_ENGINES,
-				   sizeof(*timelines),
-				   GFP_KERNEL);
+	timelines = kvmalloc_objs(*timelines, NUM_TIMELINES * I915_NUM_ENGINES,
+				  GFP_KERNEL);
 	if (!timelines)
 		return -ENOMEM;

@@ -611,9 +610,8 @@ static int live_hwsp_alternate(void *arg)
 	 * engines.
 	 */

-	timelines = kvmalloc_array(NUM_TIMELINES * I915_NUM_ENGINES,
-				   sizeof(*timelines),
-				   GFP_KERNEL);
+	timelines = kvmalloc_objs(*timelines, NUM_TIMELINES * I915_NUM_ENGINES,
+				  GFP_KERNEL);
 	if (!timelines)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
index 14a8b25b6204..24ee4ec4c287 100644
--- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
@@ -1204,7 +1204,7 @@ live_gpu_reset_workarounds(void *arg)
 	if (!intel_has_gpu_reset(gt))
 		return 0;

-	lists = kzalloc(sizeof(*lists), GFP_KERNEL);
+	lists = kzalloc_obj(*lists, GFP_KERNEL);
 	if (!lists)
 		return -ENOMEM;

@@ -1248,7 +1248,7 @@ live_engine_reset_workarounds(void *arg)
 	if (!intel_has_reset_engine(gt))
 		return 0;

-	lists = kzalloc(sizeof(*lists), GFP_KERNEL);
+	lists = kzalloc_obj(*lists, GFP_KERNEL);
 	if (!lists)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gt/shmem_utils.c b/drivers/gpu/drm/i915/gt/shmem_utils.c
index 5f37c699a320..1db6aa1e32d8 100644
--- a/drivers/gpu/drm/i915/gt/shmem_utils.c
+++ b/drivers/gpu/drm/i915/gt/shmem_utils.c
@@ -63,7 +63,7 @@ void *shmem_pin_map(struct file *file)
 	void *vaddr;

 	n_pages = file->f_mapping->host->i_size >> PAGE_SHIFT;
-	pages = kvmalloc_array(n_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kvmalloc_objs(*pages, n_pages, GFP_KERNEL);
 	if (!pages)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/gt/sysfs_engines.c b/drivers/gpu/drm/i915/gt/sysfs_engines.c
index 4a81bc396b21..bb4eb815f0ff 100644
--- a/drivers/gpu/drm/i915/gt/sysfs_engines.c
+++ b/drivers/gpu/drm/i915/gt/sysfs_engines.c
@@ -430,7 +430,7 @@ kobj_engine(struct kobject *dir, struct intel_engine_cs *engine)
 {
 	struct kobj_engine *ke;

-	ke = kzalloc(sizeof(*ke), GFP_KERNEL);
+	ke = kzalloc_obj(*ke, GFP_KERNEL);
 	if (!ke)
 		return NULL;

@@ -458,7 +458,7 @@ static void add_defaults(struct kobj_engine *parent)
 	};
 	struct kobj_engine *ke;

-	ke = kzalloc(sizeof(*ke), GFP_KERNEL);
+	ke = kzalloc_obj(*ke, GFP_KERNEL);
 	if (!ke)
 		return;

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_capture.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_capture.c
index 9547fff672bd..2e7257f5543b 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_capture.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_capture.c
@@ -275,7 +275,7 @@ __alloc_ext_regs(struct __guc_mmio_reg_descr_group *newlist,
 {
 	struct __guc_mmio_reg_descr *list;

-	list = kcalloc(num_regs, sizeof(struct __guc_mmio_reg_descr), GFP_KERNEL);
+	list = kzalloc_objs(struct __guc_mmio_reg_descr, num_regs, GFP_KERNEL);
 	if (!list)
 		return -ENOMEM;

@@ -320,7 +320,8 @@ guc_capture_alloc_steered_lists(struct intel_guc *guc,
 		return;

 	/* allocate an extra for an end marker */
-	extlists = kcalloc(2, sizeof(struct __guc_mmio_reg_descr_group), GFP_KERNEL);
+	extlists = kzalloc_objs(struct __guc_mmio_reg_descr_group, 2,
+				GFP_KERNEL);
 	if (!extlists)
 		return;

@@ -984,13 +985,14 @@ guc_capture_alloc_one_node(struct intel_guc *guc)
 	struct __guc_capture_parsed_output *new;
 	int i;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;

 	for (i = 0; i < GUC_CAPTURE_LIST_TYPE_MAX; ++i) {
-		new->reginfo[i].regs = kcalloc(guc->capture->max_mmio_per_node,
-					       sizeof(struct guc_mmio_reg), GFP_KERNEL);
+		new->reginfo[i].regs = kzalloc_objs(struct guc_mmio_reg,
+						    guc->capture->max_mmio_per_node,
+						    GFP_KERNEL);
 		if (!new->reginfo[i].regs) {
 			while (i)
 				kfree(new->reginfo[--i].regs);
@@ -1639,7 +1641,7 @@ void intel_guc_capture_destroy(struct intel_guc *guc)

 int intel_guc_capture_init(struct intel_guc *guc)
 {
-	guc->capture = kzalloc(sizeof(*guc->capture), GFP_KERNEL);
+	guc->capture = kzalloc_obj(*guc->capture, GFP_KERNEL);
 	if (!guc->capture)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
index f1e53312ed90..8c4da526d461 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
@@ -866,7 +866,7 @@ static struct ct_incoming_msg *ct_alloc_msg(u32 num_dwords)
 {
 	struct ct_incoming_msg *msg;

-	msg = kmalloc(struct_size(msg, msg, num_dwords), GFP_ATOMIC);
+	msg = kmalloc_flex(*msg, msg, num_dwords, GFP_ATOMIC);
 	if (msg)
 		msg->size = num_dwords;
 	return msg;
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
index 68f2b8d363ac..1ba53ff64861 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
@@ -2110,7 +2110,7 @@ static int init_tlb_lookup(struct intel_guc *guc)

 	xa_init_flags(&guc->tlb_lookup, XA_FLAGS_ALLOC);

-	wait = kzalloc(sizeof(*wait), GFP_KERNEL);
+	wait = kzalloc_obj(*wait, GFP_KERNEL);
 	if (!wait)
 		return -ENOMEM;

@@ -4222,9 +4222,7 @@ guc_create_parallel(struct intel_engine_cs **engines,
 	struct intel_context *parent = NULL, *ce, *err;
 	int i, j;

-	siblings = kmalloc_array(num_siblings,
-				 sizeof(*siblings),
-				 GFP_KERNEL);
+	siblings = kmalloc_objs(*siblings, num_siblings, GFP_KERNEL);
 	if (!siblings)
 		return ERR_PTR(-ENOMEM);

@@ -5907,7 +5905,7 @@ guc_create_virtual(struct intel_engine_cs **siblings, unsigned int count,
 	unsigned int n;
 	int err;

-	ve = kzalloc(sizeof(*ve), GFP_KERNEL);
+	ve = kzalloc_obj(*ve, GFP_KERNEL);
 	if (!ve)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/gt/uc/selftest_guc.c b/drivers/gpu/drm/i915/gt/uc/selftest_guc.c
index 68feb55654f7..8556a3e1ac3f 100644
--- a/drivers/gpu/drm/i915/gt/uc/selftest_guc.c
+++ b/drivers/gpu/drm/i915/gt/uc/selftest_guc.c
@@ -153,7 +153,7 @@ static int intel_guc_steal_guc_ids(void *arg)
 	struct i915_request *spin_rq = NULL, *rq, *last = NULL;
 	int number_guc_id_stolen = guc->number_guc_id_stolen;

-	ce = kcalloc(GUC_MAX_CONTEXT_ID, sizeof(*ce), GFP_KERNEL);
+	ce = kzalloc_objs(*ce, GUC_MAX_CONTEXT_ID, GFP_KERNEL);
 	if (!ce) {
 		guc_err(guc, "Context array allocation failed\n");
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index bf7c3d3f5f8a..d5d00cb84f2f 100644
--- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
+++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
@@ -1921,7 +1921,7 @@ static int perform_bb_shadow(struct parser_exec_state *s)
 	if (ret)
 		return ret;

-	bb = kzalloc(sizeof(*bb), GFP_KERNEL);
+	bb = kzalloc_obj(*bb, GFP_KERNEL);
 	if (!bb)
 		return -ENOMEM;

@@ -3226,7 +3226,7 @@ static int init_cmd_table(struct intel_gvt *gvt)
 		if (!(cmd_info[i].devices & gen_type))
 			continue;

-		e = kzalloc(sizeof(*e), GFP_KERNEL);
+		e = kzalloc_obj(*e, GFP_KERNEL);
 		if (!e)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gvt/debugfs.c b/drivers/gpu/drm/i915/gvt/debugfs.c
index ae3fd2c3cd23..36f55861228f 100644
--- a/drivers/gpu/drm/i915/gvt/debugfs.c
+++ b/drivers/gpu/drm/i915/gvt/debugfs.c
@@ -68,7 +68,7 @@ static inline int mmio_diff_handler(struct intel_gvt *gvt,
 	vreg = vgpu_vreg(param->vgpu, offset);

 	if (preg != vreg) {
-		node = kmalloc(sizeof(*node), GFP_ATOMIC);
+		node = kmalloc_obj(*node, GFP_ATOMIC);
 		if (!node)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gvt/display.c b/drivers/gpu/drm/i915/gvt/display.c
index 21341842c0a9..04ddd4709933 100644
--- a/drivers/gpu/drm/i915/gvt/display.c
+++ b/drivers/gpu/drm/i915/gvt/display.c
@@ -562,11 +562,11 @@ static int setup_virtual_dp_monitor(struct intel_vgpu *vgpu, int port_num,
 	if (drm_WARN_ON(&i915->drm, resolution >= GVT_EDID_NUM))
 		return -EINVAL;

-	port->edid = kzalloc(sizeof(*(port->edid)), GFP_KERNEL);
+	port->edid = kzalloc_obj(*(port->edid), GFP_KERNEL);
 	if (!port->edid)
 		return -ENOMEM;

-	port->dpcd = kzalloc(sizeof(*(port->dpcd)), GFP_KERNEL);
+	port->dpcd = kzalloc_obj(*(port->dpcd), GFP_KERNEL);
 	if (!port->dpcd) {
 		kfree(port->edid);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/i915/gvt/dmabuf.c b/drivers/gpu/drm/i915/gvt/dmabuf.c
index 8e76869b352c..255abb5a849b 100644
--- a/drivers/gpu/drm/i915/gvt/dmabuf.c
+++ b/drivers/gpu/drm/i915/gvt/dmabuf.c
@@ -67,7 +67,7 @@ static int vgpu_gem_get_pages(struct drm_i915_gem_object *obj)
 	if (drm_WARN_ON(&dev_priv->drm, !vgpu))
 		return -ENODEV;

-	st = kmalloc(sizeof(*st), GFP_KERNEL);
+	st = kmalloc_obj(*st, GFP_KERNEL);
 	if (unlikely(!st))
 		return -ENOMEM;

@@ -447,15 +447,14 @@ int intel_vgpu_query_plane(struct intel_vgpu *vgpu, void *args)
 	mutex_unlock(&vgpu->dmabuf_lock);

 	/* Need to allocate a new one*/
-	dmabuf_obj = kmalloc(sizeof(struct intel_vgpu_dmabuf_obj), GFP_KERNEL);
+	dmabuf_obj = kmalloc_obj(struct intel_vgpu_dmabuf_obj, GFP_KERNEL);
 	if (unlikely(!dmabuf_obj)) {
 		gvt_vgpu_err("alloc dmabuf_obj failed\n");
 		ret = -ENOMEM;
 		goto out;
 	}

-	dmabuf_obj->info = kmalloc(sizeof(struct intel_vgpu_fb_info),
-				   GFP_KERNEL);
+	dmabuf_obj->info = kmalloc_obj(struct intel_vgpu_fb_info, GFP_KERNEL);
 	if (unlikely(!dmabuf_obj->info)) {
 		gvt_vgpu_err("allocate intel vgpu fb info failed\n");
 		ret = -ENOMEM;
diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c
index 49028e7ef1e0..8cc24620a32e 100644
--- a/drivers/gpu/drm/i915/gvt/gtt.c
+++ b/drivers/gpu/drm/i915/gvt/gtt.c
@@ -654,7 +654,7 @@ static void *alloc_spt(gfp_t gfp_mask)
 {
 	struct intel_vgpu_ppgtt_spt *spt;

-	spt = kzalloc(sizeof(*spt), gfp_mask);
+	spt = kzalloc_obj(*spt, gfp_mask);
 	if (!spt)
 		return NULL;

@@ -1770,7 +1770,7 @@ static struct intel_vgpu_mm *vgpu_alloc_mm(struct intel_vgpu *vgpu)
 {
 	struct intel_vgpu_mm *mm;

-	mm = kzalloc(sizeof(*mm), GFP_KERNEL);
+	mm = kzalloc_obj(*mm, GFP_KERNEL);
 	if (!mm)
 		return NULL;

@@ -2206,7 +2206,7 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off,

 		if (!found) {
 			/* the first partial part */
-			partial_pte = kzalloc(sizeof(*partial_pte), GFP_KERNEL);
+			partial_pte = kzalloc_obj(*partial_pte, GFP_KERNEL);
 			if (!partial_pte)
 				return -ENOMEM;
 			partial_pte->offset = off;
@@ -2502,7 +2502,7 @@ static int setup_spt_oos(struct intel_gvt *gvt)
 	INIT_LIST_HEAD(&gtt->oos_page_use_list_head);

 	for (i = 0; i < preallocated_oos_pages; i++) {
-		oos_page = kzalloc(sizeof(*oos_page), GFP_KERNEL);
+		oos_page = kzalloc_obj(*oos_page, GFP_KERNEL);
 		if (!oos_page) {
 			ret = -ENOMEM;
 			goto fail;
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
index bd20f287720f..ade07397a585 100644
--- a/drivers/gpu/drm/i915/gvt/handlers.c
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
@@ -2892,7 +2892,7 @@ static int handle_mmio(struct intel_gvt_mmio_table_iter *iter, u32 offset,
 			return -EEXIST;
 		}

-		info = kzalloc(sizeof(*info), GFP_KERNEL);
+		info = kzalloc_obj(*info, GFP_KERNEL);
 		if (!info)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c
index 009aa2df7958..62da85b3f2ca 100644
--- a/drivers/gpu/drm/i915/gvt/kvmgt.c
+++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
@@ -250,7 +250,7 @@ static int __gvt_cache_add(struct intel_vgpu *vgpu, gfn_t gfn,
 	struct gvt_dma *new, *itr;
 	struct rb_node **link, *parent = NULL;

-	new = kzalloc(sizeof(struct gvt_dma), GFP_KERNEL);
+	new = kzalloc_obj(struct gvt_dma, GFP_KERNEL);
 	if (!new)
 		return -ENOMEM;

@@ -378,7 +378,7 @@ static void kvmgt_protect_table_add(struct intel_vgpu *info, gfn_t gfn)
 	if (kvmgt_gfn_is_write_protected(info, gfn))
 		return;

-	p = kzalloc(sizeof(struct kvmgt_pgfn), GFP_ATOMIC);
+	p = kzalloc_obj(struct kvmgt_pgfn, GFP_ATOMIC);
 	if (WARN(!p, "gfn: 0x%llx\n", gfn))
 		return;

@@ -595,7 +595,7 @@ int intel_gvt_set_edid(struct intel_vgpu *vgpu, int port_num)
 	struct vfio_edid_region *base;
 	int ret;

-	base = kzalloc(sizeof(*base), GFP_KERNEL);
+	base = kzalloc_obj(*base, GFP_KERNEL);
 	if (!base)
 		return -ENOMEM;

@@ -1183,8 +1183,7 @@ static int intel_vgpu_ioctl_get_region_info(struct vfio_device *vfio_dev,
 			      VFIO_REGION_INFO_FLAG_WRITE;
 		info->size = gvt_aperture_sz(vgpu->gvt);

-		sparse = kzalloc(struct_size(sparse, areas, nr_areas),
-				 GFP_KERNEL);
+		sparse = kzalloc_flex(*sparse, areas, nr_areas, GFP_KERNEL);
 		if (!sparse)
 			return -ENOMEM;

@@ -1830,7 +1829,7 @@ static int intel_gvt_init_device(struct drm_i915_private *i915)
 	if (drm_WARN_ON(&i915->drm, i915->gvt))
 		return -EEXIST;

-	gvt = kzalloc(sizeof(struct intel_gvt), GFP_KERNEL);
+	gvt = kzalloc_obj(struct intel_gvt, GFP_KERNEL);
 	if (!gvt)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gvt/page_track.c b/drivers/gpu/drm/i915/gvt/page_track.c
index b22ef801963e..862e199e5486 100644
--- a/drivers/gpu/drm/i915/gvt/page_track.c
+++ b/drivers/gpu/drm/i915/gvt/page_track.c
@@ -58,7 +58,7 @@ int intel_vgpu_register_page_track(struct intel_vgpu *vgpu, unsigned long gfn,
 	if (track)
 		return -EEXIST;

-	track = kzalloc(sizeof(*track), GFP_KERNEL);
+	track = kzalloc_obj(*track, GFP_KERNEL);
 	if (!track)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gvt/sched_policy.c b/drivers/gpu/drm/i915/gvt/sched_policy.c
index 9736a15a896f..21e823113543 100644
--- a/drivers/gpu/drm/i915/gvt/sched_policy.c
+++ b/drivers/gpu/drm/i915/gvt/sched_policy.c
@@ -282,7 +282,7 @@ static int tbs_sched_init(struct intel_gvt *gvt)

 	struct gvt_sched_data *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -312,7 +312,7 @@ static int tbs_sched_init_vgpu(struct intel_vgpu *vgpu)
 {
 	struct vgpu_sched_data *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
index 96d0bd1fa337..003aacd770e9 100644
--- a/drivers/gpu/drm/i915/gvt/vgpu.c
+++ b/drivers/gpu/drm/i915/gvt/vgpu.c
@@ -113,13 +113,11 @@ int intel_gvt_init_vgpu_types(struct intel_gvt *gvt)
 	unsigned int num_types = ARRAY_SIZE(intel_vgpu_configs);
 	unsigned int i;

-	gvt->types = kcalloc(num_types, sizeof(struct intel_vgpu_type),
-			     GFP_KERNEL);
+	gvt->types = kzalloc_objs(struct intel_vgpu_type, num_types, GFP_KERNEL);
 	if (!gvt->types)
 		return -ENOMEM;

-	gvt->mdev_types = kcalloc(num_types, sizeof(*gvt->mdev_types),
-			     GFP_KERNEL);
+	gvt->mdev_types = kzalloc_objs(*gvt->mdev_types, num_types, GFP_KERNEL);
 	if (!gvt->mdev_types)
 		goto out_free_types;

diff --git a/drivers/gpu/drm/i915/i915_active.c b/drivers/gpu/drm/i915/i915_active.c
index 6b0c1162505a..4cbbbe8307a8 100644
--- a/drivers/gpu/drm/i915/i915_active.c
+++ b/drivers/gpu/drm/i915/i915_active.c
@@ -650,7 +650,7 @@ static int __await_barrier(struct i915_active *ref, struct i915_sw_fence *fence)
 {
 	struct wait_barrier *wb;

-	wb = kmalloc(sizeof(*wb), GFP_KERNEL);
+	wb = kmalloc_obj(*wb, GFP_KERNEL);
 	if (unlikely(!wb))
 		return -ENOMEM;

@@ -1160,7 +1160,7 @@ struct i915_active *i915_active_create(void)
 {
 	struct auto_active *aa;

-	aa = kmalloc(sizeof(*aa), GFP_KERNEL);
+	aa = kmalloc_obj(*aa, GFP_KERNEL);
 	if (!aa)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c
index 7654f1be8d3b..539119d2b594 100644
--- a/drivers/gpu/drm/i915/i915_cmd_parser.c
+++ b/drivers/gpu/drm/i915/i915_cmd_parser.c
@@ -918,8 +918,8 @@ static int init_hash_table(struct intel_engine_cs *engine,
 		for (j = 0; j < table->count; j++) {
 			const struct drm_i915_cmd_descriptor *desc =
 				&table->table[j];
-			struct cmd_node *desc_node =
-				kmalloc(sizeof(*desc_node), GFP_KERNEL);
+			struct cmd_node *desc_node = kmalloc_obj(*desc_node,
+								 GFP_KERNEL);

 			if (!desc_node)
 				return -ENOMEM;
diff --git a/drivers/gpu/drm/i915/i915_deps.c b/drivers/gpu/drm/i915/i915_deps.c
index 91c61864285a..40133e0ac01a 100644
--- a/drivers/gpu/drm/i915/i915_deps.c
+++ b/drivers/gpu/drm/i915/i915_deps.c
@@ -82,7 +82,7 @@ static int i915_deps_grow(struct i915_deps *deps, struct dma_fence *fence,
 		struct dma_fence **new_fences;

 		new_size = max(new_size, I915_DEPS_MIN_ALLOC_CHUNK);
-		new_fences = kmalloc_array(new_size, sizeof(*new_fences), deps->gfp);
+		new_fences = kmalloc_objs(*new_fences, new_size, deps->gfp);
 		if (!new_fences)
 			goto sync;

diff --git a/drivers/gpu/drm/i915/i915_drm_client.c b/drivers/gpu/drm/i915/i915_drm_client.c
index 168d7375304b..2407414c2ff1 100644
--- a/drivers/gpu/drm/i915/i915_drm_client.c
+++ b/drivers/gpu/drm/i915/i915_drm_client.c
@@ -21,7 +21,7 @@ struct i915_drm_client *i915_drm_client_alloc(void)
 {
 	struct i915_drm_client *client;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index b40d4d88de01..6e44b4d633f9 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1319,7 +1319,7 @@ int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file)

 	drm_dbg(&i915->drm, "\n");

-	file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
+	file_priv = kzalloc_obj(*file_priv, GFP_KERNEL);
 	if (!file_priv)
 		goto err_alloc;

diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index 303d8d9b7775..a99b4e45d26c 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -1155,7 +1155,7 @@ i915_vma_coredump_create(const struct intel_gt *gt,
 	if (!vma_res || !vma_res->bi.pages || !compress)
 		return NULL;

-	dst = kmalloc(sizeof(*dst), ALLOW_FAIL);
+	dst = kmalloc_obj(*dst, ALLOW_FAIL);
 	if (!dst)
 		return NULL;

@@ -1502,7 +1502,7 @@ capture_vma_snapshot(struct intel_engine_capture_vma *next,
 	if (!vma_res)
 		return next;

-	c = kmalloc(sizeof(*c), gfp);
+	c = kmalloc_obj(*c, gfp);
 	if (!c)
 		return next;

@@ -1598,7 +1598,7 @@ intel_engine_coredump_alloc(struct intel_engine_cs *engine, gfp_t gfp, u32 dump_
 {
 	struct intel_engine_coredump *ee;

-	ee = kzalloc(sizeof(*ee), gfp);
+	ee = kzalloc_obj(*ee, gfp);
 	if (!ee)
 		return NULL;

@@ -1829,7 +1829,7 @@ gt_record_uc(struct intel_gt_coredump *gt,
 	const struct intel_uc *uc = &gt->_gt->uc;
 	struct intel_uc_coredump *error_uc;

-	error_uc = kzalloc(sizeof(*error_uc), ALLOW_FAIL);
+	error_uc = kzalloc_obj(*error_uc, ALLOW_FAIL);
 	if (!error_uc)
 		return NULL;

@@ -2088,7 +2088,7 @@ i915_gpu_coredump_alloc(struct drm_i915_private *i915, gfp_t gfp)
 	if (!i915->params.error_capture)
 		return NULL;

-	error = kzalloc(sizeof(*error), gfp);
+	error = kzalloc_obj(*error, gfp);
 	if (!error)
 		return NULL;

@@ -2112,7 +2112,7 @@ intel_gt_coredump_alloc(struct intel_gt *gt, gfp_t gfp, u32 dump_flags)
 {
 	struct intel_gt_coredump *gc;

-	gc = kzalloc(sizeof(*gc), gfp);
+	gc = kzalloc_obj(*gc, gfp);
 	if (!gc)
 		return NULL;

@@ -2143,7 +2143,7 @@ i915_vma_capture_prepare(struct intel_gt_coredump *gt)
 {
 	struct i915_vma_compress *compress;

-	compress = kmalloc(sizeof(*compress), ALLOW_FAIL);
+	compress = kmalloc_obj(*compress, ALLOW_FAIL);
 	if (!compress)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/i915_hdcp_gsc.c b/drivers/gpu/drm/i915/i915_hdcp_gsc.c
index 9906da2aef1c..988c4cafa7c6 100644
--- a/drivers/gpu/drm/i915/i915_hdcp_gsc.c
+++ b/drivers/gpu/drm/i915/i915_hdcp_gsc.c
@@ -94,7 +94,7 @@ static struct intel_hdcp_gsc_context *intel_hdcp_gsc_context_alloc(struct drm_de
 	struct intel_hdcp_gsc_context *gsc_context;
 	int ret;

-	gsc_context = kzalloc(sizeof(*gsc_context), GFP_KERNEL);
+	gsc_context = kzalloc_obj(*gsc_context, GFP_KERNEL);
 	if (!gsc_context)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/i915_hwmon.c b/drivers/gpu/drm/i915/i915_hwmon.c
index 7dfe1784153f..9d87d58d2385 100644
--- a/drivers/gpu/drm/i915/i915_hwmon.c
+++ b/drivers/gpu/drm/i915/i915_hwmon.c
@@ -915,7 +915,7 @@ void i915_hwmon_register(struct drm_i915_private *i915)
 	if (!IS_DGFX(i915))
 		return;

-	hwmon = kzalloc(sizeof(*hwmon), GFP_KERNEL);
+	hwmon = kzalloc_obj(*hwmon, GFP_KERNEL);
 	if (!hwmon)
 		return;

diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
index 0b9d9f3f7813..1b11442a3a39 100644
--- a/drivers/gpu/drm/i915/i915_perf.c
+++ b/drivers/gpu/drm/i915/i915_perf.c
@@ -2200,7 +2200,7 @@ alloc_oa_config_buffer(struct i915_perf_stream *stream,
 	u32 *cs;
 	int err;

-	oa_bo = kzalloc(sizeof(*oa_bo), GFP_KERNEL);
+	oa_bo = kzalloc_obj(*oa_bo, GFP_KERNEL);
 	if (!oa_bo)
 		return ERR_PTR(-ENOMEM);

@@ -3872,7 +3872,7 @@ i915_perf_open_ioctl_locked(struct i915_perf *perf,
 		goto err_ctx;
 	}

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream) {
 		ret = -ENOMEM;
 		goto err_ctx;
@@ -4505,7 +4505,7 @@ static struct i915_oa_reg *alloc_oa_regs(struct i915_perf *perf,
 	if (!is_valid)
 		return ERR_PTR(-EINVAL);

-	oa_regs = kmalloc_array(n_regs, sizeof(*oa_regs), GFP_KERNEL);
+	oa_regs = kmalloc_objs(*oa_regs, n_regs, GFP_KERNEL);
 	if (!oa_regs)
 		return ERR_PTR(-ENOMEM);

@@ -4614,7 +4614,7 @@ int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
 		return -EINVAL;
 	}

-	oa_config = kzalloc(sizeof(*oa_config), GFP_KERNEL);
+	oa_config = kzalloc_obj(*oa_config, GFP_KERNEL);
 	if (!oa_config) {
 		drm_dbg(&perf->i915->drm,
 			"Failed to allocate memory for the OA config\n");
@@ -4910,7 +4910,7 @@ static int oa_init_gt(struct intel_gt *gt)
 	struct i915_perf_group *g;
 	intel_engine_mask_t tmp;

-	g = kcalloc(num_groups, sizeof(*g), GFP_KERNEL);
+	g = kzalloc_objs(*g, num_groups, GFP_KERNEL);
 	if (!g)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
index a6697db21c72..d52c1ed69b8e 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
+++ b/drivers/gpu/drm/i915/i915_pmu.c
@@ -1028,16 +1028,16 @@ create_event_attributes(struct i915_pmu *pmu)
 	}

 	/* Allocate attribute objects and table. */
-	i915_attr = kcalloc(count, sizeof(*i915_attr), GFP_KERNEL);
+	i915_attr = kzalloc_objs(*i915_attr, count, GFP_KERNEL);
 	if (!i915_attr)
 		goto err_alloc;

-	pmu_attr = kcalloc(count, sizeof(*pmu_attr), GFP_KERNEL);
+	pmu_attr = kzalloc_objs(*pmu_attr, count, GFP_KERNEL);
 	if (!pmu_attr)
 		goto err_alloc;

 	/* Max one pointer of each attribute type plus a termination entry. */
-	attr = kcalloc(count * 2 + 1, sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_objs(*attr, count * 2 + 1, GFP_KERNEL);
 	if (!attr)
 		goto err_alloc;

diff --git a/drivers/gpu/drm/i915/i915_scatterlist.c b/drivers/gpu/drm/i915/i915_scatterlist.c
index 4d830740946d..ad868adb30dc 100644
--- a/drivers/gpu/drm/i915/i915_scatterlist.c
+++ b/drivers/gpu/drm/i915/i915_scatterlist.c
@@ -90,7 +90,7 @@ struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node,

 	GEM_BUG_ON(!max_segment);

-	rsgt = kmalloc(sizeof(*rsgt), GFP_KERNEL | __GFP_NOWARN);
+	rsgt = kmalloc_obj(*rsgt, GFP_KERNEL | __GFP_NOWARN);
 	if (!rsgt)
 		return ERR_PTR(-ENOMEM);

@@ -178,7 +178,7 @@ struct i915_refct_sgt *i915_rsgt_from_buddy_resource(struct ttm_resource *res,
 	GEM_BUG_ON(list_empty(blocks));
 	GEM_BUG_ON(!max_segment);

-	rsgt = kmalloc(sizeof(*rsgt), GFP_KERNEL | __GFP_NOWARN);
+	rsgt = kmalloc_obj(*rsgt, GFP_KERNEL | __GFP_NOWARN);
 	if (!rsgt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/i915_scheduler.c b/drivers/gpu/drm/i915/i915_scheduler.c
index 70a854557e6e..101df7236d6c 100644
--- a/drivers/gpu/drm/i915/i915_scheduler.c
+++ b/drivers/gpu/drm/i915/i915_scheduler.c
@@ -453,7 +453,7 @@ i915_sched_engine_create(unsigned int subclass)
 {
 	struct i915_sched_engine *sched_engine;

-	sched_engine = kzalloc(sizeof(*sched_engine), GFP_KERNEL);
+	sched_engine = kzalloc_obj(*sched_engine, GFP_KERNEL);
 	if (!sched_engine)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/i915_sw_fence.c b/drivers/gpu/drm/i915/i915_sw_fence.c
index 73e89b168fc3..f24f616e23ee 100644
--- a/drivers/gpu/drm/i915/i915_sw_fence.c
+++ b/drivers/gpu/drm/i915/i915_sw_fence.c
@@ -360,7 +360,7 @@ static int __i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence,

 	pending = I915_SW_FENCE_FLAG_FENCE;
 	if (!wq) {
-		wq = kmalloc(sizeof(*wq), gfp);
+		wq = kmalloc_obj(*wq, gfp);
 		if (!wq) {
 			if (!gfpflags_allow_blocking(gfp))
 				return -ENOMEM;
diff --git a/drivers/gpu/drm/i915/i915_syncmap.c b/drivers/gpu/drm/i915/i915_syncmap.c
index df6437c37373..ed18650d83fd 100644
--- a/drivers/gpu/drm/i915/i915_syncmap.c
+++ b/drivers/gpu/drm/i915/i915_syncmap.c
@@ -197,7 +197,7 @@ __sync_alloc_leaf(struct i915_syncmap *parent, u64 id)
 {
 	struct i915_syncmap *p;

-	p = kmalloc(struct_size(p, seqno, KSYNCMAP), GFP_KERNEL);
+	p = kmalloc_flex(*p, seqno, KSYNCMAP, GFP_KERNEL);
 	if (unlikely(!p))
 		return NULL;

@@ -279,8 +279,7 @@ static noinline int __sync_set(struct i915_syncmap **root, u64 id, u32 seqno)
 			unsigned int above;

 			/* Insert a join above the current layer */
-			next = kzalloc(struct_size(next, child, KSYNCMAP),
-				       GFP_KERNEL);
+			next = kzalloc_flex(*next, child, KSYNCMAP, GFP_KERNEL);
 			if (unlikely(!next))
 				return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/i915_ttm_buddy_manager.c b/drivers/gpu/drm/i915/i915_ttm_buddy_manager.c
index d5c6e6605086..cf79995f1a5b 100644
--- a/drivers/gpu/drm/i915/i915_ttm_buddy_manager.c
+++ b/drivers/gpu/drm/i915/i915_ttm_buddy_manager.c
@@ -48,7 +48,7 @@ static int i915_ttm_buddy_man_alloc(struct ttm_resource_manager *man,
 	if (!lpfn)
 		lpfn = man->size;

-	bman_res = kzalloc(sizeof(*bman_res), GFP_KERNEL);
+	bman_res = kzalloc_obj(*bman_res, GFP_KERNEL);
 	if (!bman_res)
 		return -ENOMEM;

@@ -289,7 +289,7 @@ int i915_ttm_buddy_man_init(struct ttm_device *bdev,
 	struct i915_ttm_buddy_manager *bman;
 	int err;

-	bman = kzalloc(sizeof(*bman), GFP_KERNEL);
+	bman = kzalloc_obj(*bman, GFP_KERNEL);
 	if (!bman)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 2c0a63664e13..39eb1808fd11 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -394,7 +394,7 @@ struct i915_vma_work *i915_vma_work(void)
 {
 	struct i915_vma_work *vw;

-	vw = kzalloc(sizeof(*vw), GFP_KERNEL);
+	vw = kzalloc_obj(*vw, GFP_KERNEL);
 	if (!vw)
 		return NULL;

@@ -1027,7 +1027,7 @@ intel_rotate_pages(struct intel_rotation_info *rot_info,
 	int i;

 	/* Allocate target SG list. */
-	st = kmalloc(sizeof(*st), GFP_KERNEL);
+	st = kmalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		goto err_st_alloc;

@@ -1237,7 +1237,7 @@ intel_remap_pages(struct intel_remapped_info *rem_info,
 	int i;

 	/* Allocate target SG list. */
-	st = kmalloc(sizeof(*st), GFP_KERNEL);
+	st = kmalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		goto err_st_alloc;

@@ -1275,7 +1275,7 @@ intel_partial_pages(const struct i915_gtt_view *view,
 	unsigned int count = view->partial.size;
 	int ret = -ENOMEM;

-	st = kmalloc(sizeof(*st), GFP_KERNEL);
+	st = kmalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		goto err_st_alloc;

diff --git a/drivers/gpu/drm/i915/intel_memory_region.c b/drivers/gpu/drm/i915/intel_memory_region.c
index ce722f20cab1..426355f75db8 100644
--- a/drivers/gpu/drm/i915/intel_memory_region.c
+++ b/drivers/gpu/drm/i915/intel_memory_region.c
@@ -258,7 +258,7 @@ intel_memory_region_create(struct drm_i915_private *i915,
 	struct intel_memory_region *mem;
 	int err;

-	mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+	mem = kzalloc_obj(*mem, GFP_KERNEL);
 	if (!mem)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index fdd2a940f983..b0d7cc7eb98f 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -2072,7 +2072,7 @@ static int __fw_domain_init(struct intel_uncore *uncore,
 	GEM_BUG_ON(domain_id >= FW_DOMAIN_ID_COUNT);
 	GEM_BUG_ON(uncore->fw_domain[domain_id]);

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp.c b/drivers/gpu/drm/i915/pxp/intel_pxp.c
index d4b0c76f335b..d87d58433307 100644
--- a/drivers/gpu/drm/i915/pxp/intel_pxp.c
+++ b/drivers/gpu/drm/i915/pxp/intel_pxp.c
@@ -222,7 +222,7 @@ int intel_pxp_init(struct drm_i915_private *i915)
 	 * including session and object management, or we will init the backend tee
 	 * channel for internal users such as HuC loading by GSC
 	 */
-	i915->pxp = kzalloc(sizeof(*i915->pxp), GFP_KERNEL);
+	i915->pxp = kzalloc_obj(*i915->pxp, GFP_KERNEL);
 	if (!i915->pxp)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/selftests/i915_active.c b/drivers/gpu/drm/i915/selftests/i915_active.c
index 36c3a5460221..3eaee7e8cc65 100644
--- a/drivers/gpu/drm/i915/selftests/i915_active.c
+++ b/drivers/gpu/drm/i915/selftests/i915_active.c
@@ -66,7 +66,7 @@ static struct live_active *__live_alloc(struct drm_i915_private *i915)
 {
 	struct live_active *active;

-	active = kzalloc(sizeof(*active), GFP_KERNEL);
+	active = kzalloc_obj(*active, GFP_KERNEL);
 	if (!active)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
index f8fe3681c3dc..3362421467e8 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
@@ -421,7 +421,7 @@ static int igt_evict_contexts(void *arg)
 		struct reserved *r;

 		mutex_unlock(&ggtt->vm.mutex);
-		r = kcalloc(1, sizeof(*r), GFP_KERNEL);
+		r = kzalloc_objs(*r, 1, GFP_KERNEL);
 		mutex_lock(&ggtt->vm.mutex);
 		if (!r) {
 			err = -ENOMEM;
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
index 0a86e4857539..e6bd06774816 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
@@ -63,7 +63,7 @@ static int fake_get_pages(struct drm_i915_gem_object *obj)
 	struct scatterlist *sg;
 	typeof(obj->base.size) rem;

-	pages = kmalloc(sizeof(*pages), GFP);
+	pages = kmalloc_obj(*pages, GFP);
 	if (!pages)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/selftests/i915_perf.c b/drivers/gpu/drm/i915/selftests/i915_perf.c
index 403134a7acec..411d43acd0d8 100644
--- a/drivers/gpu/drm/i915/selftests/i915_perf.c
+++ b/drivers/gpu/drm/i915/selftests/i915_perf.c
@@ -21,7 +21,7 @@ alloc_empty_config(struct i915_perf *perf)
 {
 	struct i915_oa_config *oa_config;

-	oa_config = kzalloc(sizeof(*oa_config), GFP_KERNEL);
+	oa_config = kzalloc_obj(*oa_config, GFP_KERNEL);
 	if (!oa_config)
 		return -ENOMEM;

@@ -114,7 +114,7 @@ test_stream(struct i915_perf *perf)

 	props.metrics_set = oa_config->id;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream) {
 		i915_oa_config_put(oa_config);
 		return NULL;
diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
index 1260601bda1f..d1d48ea8d264 100644
--- a/drivers/gpu/drm/i915/selftests/i915_request.c
+++ b/drivers/gpu/drm/i915/selftests/i915_request.c
@@ -329,7 +329,7 @@ static void __igt_breadcrumbs_smoketest(struct kthread_work *work)
 	 * that the fences were marked as signaled.
 	 */

-	requests = kcalloc(total, sizeof(*requests), GFP_KERNEL);
+	requests = kzalloc_objs(*requests, total, GFP_KERNEL);
 	if (!requests) {
 		thread->result = -ENOMEM;
 		return;
@@ -472,11 +472,11 @@ static int mock_breadcrumbs_smoketest(void *arg)
 	 * See __igt_breadcrumbs_smoketest();
 	 */

-	threads = kcalloc(ncpus, sizeof(*threads), GFP_KERNEL);
+	threads = kzalloc_objs(*threads, ncpus, GFP_KERNEL);
 	if (!threads)
 		return -ENOMEM;

-	t.contexts = kcalloc(t.ncontexts, sizeof(*t.contexts), GFP_KERNEL);
+	t.contexts = kzalloc_objs(*t.contexts, t.ncontexts, GFP_KERNEL);
 	if (!t.contexts) {
 		ret = -ENOMEM;
 		goto out_threads;
@@ -1203,7 +1203,7 @@ static int live_all_engines(void *arg)
 	 * block doing so, and that they don't complete too soon.
 	 */

-	request = kcalloc(nengines, sizeof(*request), GFP_KERNEL);
+	request = kzalloc_objs(*request, nengines, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;

@@ -1333,7 +1333,7 @@ static int live_sequential_engines(void *arg)
 	 * they are running on independent engines.
 	 */

-	request = kcalloc(nengines, sizeof(*request), GFP_KERNEL);
+	request = kzalloc_objs(*request, nengines, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;

@@ -1626,7 +1626,7 @@ static int live_parallel_engines(void *arg)
 	 * tests that we load up the system maximally.
 	 */

-	threads = kcalloc(nengines, sizeof(*threads), GFP_KERNEL);
+	threads = kzalloc_objs(*threads, nengines, GFP_KERNEL);
 	if (!threads)
 		return -ENOMEM;

@@ -1754,13 +1754,13 @@ static int live_breadcrumbs_smoketest(void *arg)
 		goto out_rpm;
 	}

-	smoke = kcalloc(nengines, sizeof(*smoke), GFP_KERNEL);
+	smoke = kzalloc_objs(*smoke, nengines, GFP_KERNEL);
 	if (!smoke) {
 		ret = -ENOMEM;
 		goto out_file;
 	}

-	threads = kcalloc(ncpus * nengines, sizeof(*threads), GFP_KERNEL);
+	threads = kzalloc_objs(*threads, ncpus * nengines, GFP_KERNEL);
 	if (!threads) {
 		ret = -ENOMEM;
 		goto out_smoke;
@@ -1768,9 +1768,8 @@ static int live_breadcrumbs_smoketest(void *arg)

 	smoke[0].request_alloc = __live_request_alloc;
 	smoke[0].ncontexts = 64;
-	smoke[0].contexts = kcalloc(smoke[0].ncontexts,
-				    sizeof(*smoke[0].contexts),
-				    GFP_KERNEL);
+	smoke[0].contexts = kzalloc_objs(*smoke[0].contexts, smoke[0].ncontexts,
+					 GFP_KERNEL);
 	if (!smoke[0].contexts) {
 		ret = -ENOMEM;
 		goto out_threads;
@@ -2838,11 +2837,11 @@ static int perf_series_engines(void *arg)
 	unsigned int idx;
 	int err = 0;

-	stats = kcalloc(nengines, sizeof(*stats), GFP_KERNEL);
+	stats = kzalloc_objs(*stats, nengines, GFP_KERNEL);
 	if (!stats)
 		return -ENOMEM;

-	ps = kzalloc(struct_size(ps, ce, nengines), GFP_KERNEL);
+	ps = kzalloc_flex(*ps, ce, nengines, GFP_KERNEL);
 	if (!ps) {
 		kfree(stats);
 		return -ENOMEM;
@@ -3194,7 +3193,7 @@ static int perf_parallel_engines(void *arg)
 	struct p_thread *engines;
 	int err = 0;

-	engines = kcalloc(nengines, sizeof(*engines), GFP_KERNEL);
+	engines = kzalloc_objs(*engines, nengines, GFP_KERNEL);
 	if (!engines)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
index 8f5ce71fa453..34bcdbaac7c3 100644
--- a/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
+++ b/drivers/gpu/drm/i915/selftests/i915_sw_fence.c
@@ -47,7 +47,7 @@ static struct i915_sw_fence *alloc_fence(void)
 {
 	struct i915_sw_fence *fence;

-	fence = kmalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kmalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return NULL;

@@ -454,7 +454,7 @@ static int test_chain(void *arg)
 	int ret, i;

 	/* Test a long chain of fences */
-	fences = kmalloc_array(nfences, sizeof(*fences), GFP_KERNEL);
+	fences = kmalloc_objs(*fences, nfences, GFP_KERNEL);
 	if (!fences)
 		return -ENOMEM;

@@ -639,7 +639,7 @@ static struct dma_fence *alloc_dma_fence(void)
 {
 	struct dma_fence *dma;

-	dma = kmalloc(sizeof(*dma), GFP_KERNEL);
+	dma = kmalloc_obj(*dma, GFP_KERNEL);
 	if (dma)
 		dma_fence_init(dma, &mock_fence_ops, &mock_fence_lock, 0, 0);

diff --git a/drivers/gpu/drm/i915/selftests/lib_sw_fence.c b/drivers/gpu/drm/i915/selftests/lib_sw_fence.c
index d79e4defb71d..4ac956dfd1f8 100644
--- a/drivers/gpu/drm/i915/selftests/lib_sw_fence.c
+++ b/drivers/gpu/drm/i915/selftests/lib_sw_fence.c
@@ -109,7 +109,7 @@ struct i915_sw_fence *heap_fence_create(gfp_t gfp)
 {
 	struct heap_fence *h;

-	h = kmalloc(sizeof(*h), gfp);
+	h = kmalloc_obj(*h, gfp);
 	if (!h)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
index b59626c4994c..d6b4796fde82 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
@@ -148,7 +148,7 @@ struct drm_i915_private *mock_gem_device(void)
 	struct pci_dev *pdev;
 	int ret;

-	pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
+	pdev = kzalloc_obj(*pdev, GFP_KERNEL);
 	if (!pdev)
 		return NULL;
 	device_initialize(&pdev->dev);
diff --git a/drivers/gpu/drm/i915/selftests/mock_gtt.c b/drivers/gpu/drm/i915/selftests/mock_gtt.c
index a516c0aa88fd..1b13502add8a 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gtt.c
@@ -66,7 +66,7 @@ struct i915_ppgtt *mock_ppgtt(struct drm_i915_private *i915, const char *name)
 {
 	struct i915_ppgtt *ppgtt;

-	ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
+	ppgtt = kzalloc_obj(*ppgtt, GFP_KERNEL);
 	if (!ppgtt)
 		return NULL;

diff --git a/drivers/gpu/drm/i915/vlv_suspend.c b/drivers/gpu/drm/i915/vlv_suspend.c
index bace7b38329b..b5360ddc34e7 100644
--- a/drivers/gpu/drm/i915/vlv_suspend.c
+++ b/drivers/gpu/drm/i915/vlv_suspend.c
@@ -464,8 +464,7 @@ int vlv_suspend_init(struct drm_i915_private *i915)
 		return 0;

 	/* we write all the values in the struct, so no need to zero it out */
-	i915->vlv_s0ix_state = kmalloc(sizeof(*i915->vlv_s0ix_state),
-				       GFP_KERNEL);
+	i915->vlv_s0ix_state = kmalloc_obj(*i915->vlv_s0ix_state, GFP_KERNEL);
 	if (!i915->vlv_s0ix_state)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/imagination/pvr_ccb.c b/drivers/gpu/drm/imagination/pvr_ccb.c
index 9294b4ba1de7..998b9ceb54ca 100644
--- a/drivers/gpu/drm/imagination/pvr_ccb.c
+++ b/drivers/gpu/drm/imagination/pvr_ccb.c
@@ -543,7 +543,7 @@ struct dma_fence *pvr_kccb_fence_alloc(void)
 {
 	struct pvr_kccb_fence *kccb_fence;

-	kccb_fence = kzalloc(sizeof(*kccb_fence), GFP_KERNEL);
+	kccb_fence = kzalloc_obj(*kccb_fence, GFP_KERNEL);
 	if (!kccb_fence)
 		return NULL;

diff --git a/drivers/gpu/drm/imagination/pvr_context.c b/drivers/gpu/drm/imagination/pvr_context.c
index 5edc3c01af72..1aa4f098f93d 100644
--- a/drivers/gpu/drm/imagination/pvr_context.c
+++ b/drivers/gpu/drm/imagination/pvr_context.c
@@ -292,7 +292,7 @@ int pvr_context_create(struct pvr_file *pvr_file, struct drm_pvr_ioctl_create_co
 	if (ctx_size < 0)
 		return ctx_size;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/imagination/pvr_drv.c b/drivers/gpu/drm/imagination/pvr_drv.c
index 916b40ced7eb..b6171d10e8ac 100644
--- a/drivers/gpu/drm/imagination/pvr_drv.c
+++ b/drivers/gpu/drm/imagination/pvr_drv.c
@@ -1312,7 +1312,7 @@ pvr_drm_driver_open(struct drm_device *drm_dev, struct drm_file *file)
 	struct pvr_device *pvr_dev = to_pvr_device(drm_dev);
 	struct pvr_file *pvr_file;

-	pvr_file = kzalloc(sizeof(*pvr_file), GFP_KERNEL);
+	pvr_file = kzalloc_obj(*pvr_file, GFP_KERNEL);
 	if (!pvr_file)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/imagination/pvr_free_list.c b/drivers/gpu/drm/imagination/pvr_free_list.c
index 5228e214491c..cfcfbd89052a 100644
--- a/drivers/gpu/drm/imagination/pvr_free_list.c
+++ b/drivers/gpu/drm/imagination/pvr_free_list.c
@@ -307,7 +307,7 @@ pvr_free_list_grow(struct pvr_free_list *free_list, u32 num_pages)
 		goto err_unlock;
 	}

-	free_list_node = kzalloc(sizeof(*free_list_node), GFP_KERNEL);
+	free_list_node = kzalloc_obj(*free_list_node, GFP_KERNEL);
 	if (!free_list_node) {
 		err = -ENOMEM;
 		goto err_unlock;
@@ -415,7 +415,7 @@ pvr_free_list_create(struct pvr_file *pvr_file,
 	int err;

 	/* Create and fill out the kernel structure */
-	free_list = kzalloc(sizeof(*free_list), GFP_KERNEL);
+	free_list = kzalloc_obj(*free_list, GFP_KERNEL);

 	if (!free_list)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/imagination/pvr_fw.c b/drivers/gpu/drm/imagination/pvr_fw.c
index 779a58fe6ee8..1cbbaff3e7bf 100644
--- a/drivers/gpu/drm/imagination/pvr_fw.c
+++ b/drivers/gpu/drm/imagination/pvr_fw.c
@@ -1272,7 +1272,7 @@ pvr_fw_object_create_and_map_common(struct pvr_device *pvr_dev, size_t size,
 	/* %DRM_PVR_BO_PM_FW_PROTECT is implicit for FW objects. */
 	flags |= DRM_PVR_BO_PM_FW_PROTECT;

-	fw_obj = kzalloc(sizeof(*fw_obj), GFP_KERNEL);
+	fw_obj = kzalloc_obj(*fw_obj, GFP_KERNEL);
 	if (!fw_obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/imagination/pvr_fw_trace.c b/drivers/gpu/drm/imagination/pvr_fw_trace.c
index 673ee71276e9..f2c92a3b3a94 100644
--- a/drivers/gpu/drm/imagination/pvr_fw_trace.c
+++ b/drivers/gpu/drm/imagination/pvr_fw_trace.c
@@ -455,7 +455,7 @@ static int fw_trace_open(struct inode *inode, struct file *file)
 	struct pvr_fw_trace_seq_data *trace_seq_data;
 	int err;

-	trace_seq_data = kzalloc(sizeof(*trace_seq_data), GFP_KERNEL);
+	trace_seq_data = kzalloc_obj(*trace_seq_data, GFP_KERNEL);
 	if (!trace_seq_data)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/imagination/pvr_gem.c b/drivers/gpu/drm/imagination/pvr_gem.c
index c07c9a915190..7a4e8ec92e1e 100644
--- a/drivers/gpu/drm/imagination/pvr_gem.c
+++ b/drivers/gpu/drm/imagination/pvr_gem.c
@@ -314,7 +314,7 @@ struct drm_gem_object *pvr_gem_create_object(struct drm_device *drm_dev, size_t
 	struct drm_gem_object *gem_obj;
 	struct pvr_gem_object *pvr_obj;

-	pvr_obj = kzalloc(sizeof(*pvr_obj), GFP_KERNEL);
+	pvr_obj = kzalloc_obj(*pvr_obj, GFP_KERNEL);
 	if (!pvr_obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/imagination/pvr_hwrt.c b/drivers/gpu/drm/imagination/pvr_hwrt.c
index dc0c25fa1847..93ea3c8ee176 100644
--- a/drivers/gpu/drm/imagination/pvr_hwrt.c
+++ b/drivers/gpu/drm/imagination/pvr_hwrt.c
@@ -457,7 +457,7 @@ pvr_hwrt_dataset_create(struct pvr_file *pvr_file,
 	int err, i = 0;

 	/* Create and fill out the kernel structure */
-	hwrt = kzalloc(sizeof(*hwrt), GFP_KERNEL);
+	hwrt = kzalloc_obj(*hwrt, GFP_KERNEL);

 	if (!hwrt)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/imagination/pvr_job.c b/drivers/gpu/drm/imagination/pvr_job.c
index 7564b0f21b42..a4e550505504 100644
--- a/drivers/gpu/drm/imagination/pvr_job.c
+++ b/drivers/gpu/drm/imagination/pvr_job.c
@@ -415,7 +415,7 @@ create_job(struct pvr_device *pvr_dev,
 	    (args->hwrt.set_handle || args->hwrt.data_index))
 		return ERR_PTR(-EINVAL);

-	job = kzalloc(sizeof(*job), GFP_KERNEL);
+	job = kzalloc_obj(*job, GFP_KERNEL);
 	if (!job)
 		return ERR_PTR(-ENOMEM);

@@ -718,8 +718,8 @@ pvr_submit_jobs(struct pvr_device *pvr_dev, struct pvr_file *pvr_file,
 	if (err)
 		return err;

-	job_data = kvmalloc_array(args->jobs.count, sizeof(*job_data),
-				  GFP_KERNEL | __GFP_ZERO);
+	job_data = kvmalloc_objs(*job_data, args->jobs.count,
+				 GFP_KERNEL | __GFP_ZERO);
 	if (!job_data) {
 		err = -ENOMEM;
 		goto out_free;
diff --git a/drivers/gpu/drm/imagination/pvr_mmu.c b/drivers/gpu/drm/imagination/pvr_mmu.c
index 450d476d183f..4d35879a344b 100644
--- a/drivers/gpu/drm/imagination/pvr_mmu.c
+++ b/drivers/gpu/drm/imagination/pvr_mmu.c
@@ -1828,7 +1828,7 @@ pvr_page_table_l0_get_or_insert(struct pvr_mmu_op_context *op_ctx,
  */
 struct pvr_mmu_context *pvr_mmu_context_create(struct pvr_device *pvr_dev)
 {
-	struct pvr_mmu_context *ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	struct pvr_mmu_context *ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	int err;

 	if (!ctx)
@@ -1877,8 +1877,7 @@ pvr_page_table_l1_alloc(struct pvr_mmu_context *ctx)
 {
 	int err;

-	struct pvr_page_table_l1 *table =
-		kzalloc(sizeof(*table), GFP_KERNEL);
+	struct pvr_page_table_l1 *table = kzalloc_obj(*table, GFP_KERNEL);

 	if (!table)
 		return ERR_PTR(-ENOMEM);
@@ -1906,8 +1905,7 @@ pvr_page_table_l0_alloc(struct pvr_mmu_context *ctx)
 {
 	int err;

-	struct pvr_page_table_l0 *table =
-		kzalloc(sizeof(*table), GFP_KERNEL);
+	struct pvr_page_table_l0 *table = kzalloc_obj(*table, GFP_KERNEL);

 	if (!table)
 		return ERR_PTR(-ENOMEM);
@@ -2352,8 +2350,7 @@ pvr_mmu_op_context_create(struct pvr_mmu_context *ctx, struct sg_table *sgt,
 {
 	int err;

-	struct pvr_mmu_op_context *op_ctx =
-		kzalloc(sizeof(*op_ctx), GFP_KERNEL);
+	struct pvr_mmu_op_context *op_ctx = kzalloc_obj(*op_ctx, GFP_KERNEL);

 	if (!op_ctx)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/imagination/pvr_power.c b/drivers/gpu/drm/imagination/pvr_power.c
index b9f801c63260..c70a62192d79 100644
--- a/drivers/gpu/drm/imagination/pvr_power.c
+++ b/drivers/gpu/drm/imagination/pvr_power.c
@@ -614,11 +614,11 @@ int pvr_power_domains_init(struct pvr_device *pvr_dev)

 	link_count = domain_count + (domain_count - 1);

-	domain_devs = kcalloc(domain_count, sizeof(*domain_devs), GFP_KERNEL);
+	domain_devs = kzalloc_objs(*domain_devs, domain_count, GFP_KERNEL);
 	if (!domain_devs)
 		return -ENOMEM;

-	domain_links = kcalloc(link_count, sizeof(*domain_links), GFP_KERNEL);
+	domain_links = kzalloc_objs(*domain_links, link_count, GFP_KERNEL);
 	if (!domain_links)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/imagination/pvr_queue.c b/drivers/gpu/drm/imagination/pvr_queue.c
index fc415dd0d7a7..12f759c17f93 100644
--- a/drivers/gpu/drm/imagination/pvr_queue.c
+++ b/drivers/gpu/drm/imagination/pvr_queue.c
@@ -249,7 +249,7 @@ pvr_queue_fence_alloc(void)
 {
 	struct pvr_queue_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return NULL;

@@ -1266,7 +1266,7 @@ struct pvr_queue *pvr_queue_create(struct pvr_context *ctx,
 	if (ctx_state_size < 0)
 		return ERR_PTR(ctx_state_size);

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/imagination/pvr_sync.c b/drivers/gpu/drm/imagination/pvr_sync.c
index 129f646d14ba..b5268c9b885b 100644
--- a/drivers/gpu/drm/imagination/pvr_sync.c
+++ b/drivers/gpu/drm/imagination/pvr_sync.c
@@ -64,7 +64,7 @@ pvr_sync_signal_array_add(struct xarray *array, struct drm_file *file, u32 handl
 	int err;
 	u32 id;

-	sig_sync = kzalloc(sizeof(*sig_sync), GFP_KERNEL);
+	sig_sync = kzalloc_obj(*sig_sync, GFP_KERNEL);
 	if (!sig_sync)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/imagination/pvr_vm.c b/drivers/gpu/drm/imagination/pvr_vm.c
index 9a9ad4e82305..e482bfc00576 100644
--- a/drivers/gpu/drm/imagination/pvr_vm.c
+++ b/drivers/gpu/drm/imagination/pvr_vm.c
@@ -261,9 +261,9 @@ pvr_vm_bind_op_map_init(struct pvr_vm_bind_op *bind_op,
 	if (IS_ERR(bind_op->gpuvm_bo))
 		return PTR_ERR(bind_op->gpuvm_bo);

-	bind_op->new_va = kzalloc(sizeof(*bind_op->new_va), GFP_KERNEL);
-	bind_op->prev_va = kzalloc(sizeof(*bind_op->prev_va), GFP_KERNEL);
-	bind_op->next_va = kzalloc(sizeof(*bind_op->next_va), GFP_KERNEL);
+	bind_op->new_va = kzalloc_obj(*bind_op->new_va, GFP_KERNEL);
+	bind_op->prev_va = kzalloc_obj(*bind_op->prev_va, GFP_KERNEL);
+	bind_op->next_va = kzalloc_obj(*bind_op->next_va, GFP_KERNEL);
 	if (!bind_op->new_va || !bind_op->prev_va || !bind_op->next_va) {
 		err = -ENOMEM;
 		goto err_bind_op_fini;
@@ -310,8 +310,8 @@ pvr_vm_bind_op_unmap_init(struct pvr_vm_bind_op *bind_op,

 	bind_op->type = PVR_VM_BIND_TYPE_UNMAP;

-	bind_op->prev_va = kzalloc(sizeof(*bind_op->prev_va), GFP_KERNEL);
-	bind_op->next_va = kzalloc(sizeof(*bind_op->next_va), GFP_KERNEL);
+	bind_op->prev_va = kzalloc_obj(*bind_op->prev_va, GFP_KERNEL);
+	bind_op->next_va = kzalloc_obj(*bind_op->next_va, GFP_KERNEL);
 	if (!bind_op->prev_va || !bind_op->next_va) {
 		err = -ENOMEM;
 		goto err_bind_op_fini;
@@ -565,7 +565,7 @@ pvr_vm_create_context(struct pvr_device *pvr_dev, bool is_userspace_context)
 		return ERR_PTR(-EINVAL);
 	}

-	vm_ctx = kzalloc(sizeof(*vm_ctx), GFP_KERNEL);
+	vm_ctx = kzalloc_obj(*vm_ctx, GFP_KERNEL);
 	if (!vm_ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/imx/dcss/dcss-plane.c b/drivers/gpu/drm/imx/dcss/dcss-plane.c
index 0b99b407ac0a..07bc2044f76a 100644
--- a/drivers/gpu/drm/imx/dcss/dcss-plane.c
+++ b/drivers/gpu/drm/imx/dcss/dcss-plane.c
@@ -381,7 +381,7 @@ struct dcss_plane *dcss_plane_init(struct drm_device *drm,
 	if (zpos > 2)
 		return ERR_PTR(-EINVAL);

-	dcss_plane = kzalloc(sizeof(*dcss_plane), GFP_KERNEL);
+	dcss_plane = kzalloc_obj(*dcss_plane, GFP_KERNEL);
 	if (!dcss_plane) {
 		DRM_ERROR("failed to allocate plane\n");
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c
index cf7b02b2d52c..eeff0d535b02 100644
--- a/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c
+++ b/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c
@@ -117,7 +117,7 @@ static void imx_drm_crtc_reset(struct drm_crtc *crtc)
 	kfree(to_imx_crtc_state(crtc->state));
 	crtc->state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_crtc_reset(crtc, &state->base);
 }
@@ -126,7 +126,7 @@ static struct drm_crtc_state *imx_drm_crtc_duplicate_state(struct drm_crtc *crtc
 {
 	struct imx_crtc_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c
index db50eccea0ca..0b58871277d7 100644
--- a/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c
+++ b/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c
@@ -308,7 +308,7 @@ static void ipu_plane_state_reset(struct drm_plane *plane)
 		plane->state = NULL;
 	}

-	ipu_state = kzalloc(sizeof(*ipu_state), GFP_KERNEL);
+	ipu_state = kzalloc_obj(*ipu_state, GFP_KERNEL);

 	if (ipu_state)
 		__drm_atomic_helper_plane_reset(plane, &ipu_state->base);
@@ -322,7 +322,7 @@ ipu_plane_duplicate_state(struct drm_plane *plane)
 	if (WARN_ON(!plane->state))
 		return NULL;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_plane_duplicate_state(plane, &state->base);

diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
index 6fbf505d2801..e82cbb92faee 100644
--- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c
+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
@@ -66,7 +66,7 @@ imx_pd_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
 	}

 	*num_output_fmts = 1;
-	output_fmts = kmalloc(sizeof(*output_fmts), GFP_KERNEL);
+	output_fmts = kmalloc_obj(*output_fmts, GFP_KERNEL);
 	if (!output_fmts)
 		return NULL;

@@ -117,7 +117,7 @@ imx_pd_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
 	}

 	*num_input_fmts = 1;
-	input_fmts = kmalloc(sizeof(*input_fmts), GFP_KERNEL);
+	input_fmts = kmalloc_obj(*input_fmts, GFP_KERNEL);
 	if (!input_fmts)
 		return NULL;

diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
index d3213fbf22be..6273058b1bee 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
@@ -923,7 +923,7 @@ ingenic_drm_gem_create_object(struct drm_device *drm, size_t size)
 	struct ingenic_drm *priv = drm_device_get_priv(drm);
 	struct drm_gem_dma_object *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return ERR_PTR(-ENOMEM);

@@ -1387,7 +1387,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
 		goto err_devclk_disable;
 	}

-	private_state = kzalloc(sizeof(*private_state), GFP_KERNEL);
+	private_state = kzalloc_obj(*private_state, GFP_KERNEL);
 	if (!private_state) {
 		ret = -ENOMEM;
 		goto err_clk_notifier_unregister;
diff --git a/drivers/gpu/drm/ingenic/ingenic-ipu.c b/drivers/gpu/drm/ingenic/ingenic-ipu.c
index 32638a713241..88b6b406e796 100644
--- a/drivers/gpu/drm/ingenic/ingenic-ipu.c
+++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c
@@ -887,7 +887,7 @@ static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d)
 		return err;
 	}

-	private_state = kzalloc(sizeof(*private_state), GFP_KERNEL);
+	private_state = kzalloc_obj(*private_state, GFP_KERNEL);
 	if (!private_state) {
 		err = -ENOMEM;
 		goto err_clk_unprepare;
diff --git a/drivers/gpu/drm/kmb/kmb_dsi.c b/drivers/gpu/drm/kmb/kmb_dsi.c
index faf38ca9e44c..1d2ce15d703a 100644
--- a/drivers/gpu/drm/kmb/kmb_dsi.c
+++ b/drivers/gpu/drm/kmb/kmb_dsi.c
@@ -220,14 +220,14 @@ int kmb_dsi_host_bridge_init(struct device *dev)

 	/* Create and register MIPI DSI host */
 	if (!dsi_host) {
-		dsi_host = kzalloc(sizeof(*dsi_host), GFP_KERNEL);
+		dsi_host = kzalloc_obj(*dsi_host, GFP_KERNEL);
 		if (!dsi_host)
 			return -ENOMEM;

 		dsi_host->ops = &kmb_dsi_host_ops;

 		if (!dsi_device) {
-			dsi_device = kzalloc(sizeof(*dsi_device), GFP_KERNEL);
+			dsi_device = kzalloc_obj(*dsi_device, GFP_KERNEL);
 			if (!dsi_device) {
 				kfree(dsi_host);
 				return -ENOMEM;
diff --git a/drivers/gpu/drm/lima/lima_ctx.c b/drivers/gpu/drm/lima/lima_ctx.c
index 0e668fc1e0f9..edcd3733dd95 100644
--- a/drivers/gpu/drm/lima/lima_ctx.c
+++ b/drivers/gpu/drm/lima/lima_ctx.c
@@ -12,7 +12,7 @@ int lima_ctx_create(struct lima_device *dev, struct lima_ctx_mgr *mgr, u32 *id)
 	struct lima_ctx *ctx;
 	int i, err;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx->dev = dev;
diff --git a/drivers/gpu/drm/lima/lima_drv.c b/drivers/gpu/drm/lima/lima_drv.c
index 65210ab081bb..f2bdf0d1b2fc 100644
--- a/drivers/gpu/drm/lima/lima_drv.c
+++ b/drivers/gpu/drm/lima/lima_drv.c
@@ -215,7 +215,7 @@ static int lima_drm_driver_open(struct drm_device *dev, struct drm_file *file)
 	struct lima_drm_priv *priv;
 	struct lima_device *ldev = to_lima_dev(dev);

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c
index 9722b847a539..bed7945d8440 100644
--- a/drivers/gpu/drm/lima/lima_gem.c
+++ b/drivers/gpu/drm/lima/lima_gem.c
@@ -39,8 +39,8 @@ int lima_heap_alloc(struct lima_bo *bo, struct lima_vm *vm)
 	if (bo->base.pages) {
 		pages = bo->base.pages;
 	} else {
-		pages = kvmalloc_array(bo->base.base.size >> PAGE_SHIFT,
-				       sizeof(*pages), GFP_KERNEL | __GFP_ZERO);
+		pages = kvmalloc_objs(*pages, bo->base.base.size >> PAGE_SHIFT,
+				      GFP_KERNEL | __GFP_ZERO);
 		if (!pages) {
 			dma_resv_unlock(bo->base.base.resv);
 			return -ENOMEM;
@@ -73,7 +73,7 @@ int lima_heap_alloc(struct lima_bo *bo, struct lima_vm *vm)
 		dma_unmap_sgtable(dev, bo->base.sgt, DMA_BIDIRECTIONAL, 0);
 		sg_free_table(bo->base.sgt);
 	} else {
-		bo->base.sgt = kmalloc(sizeof(*bo->base.sgt), GFP_KERNEL);
+		bo->base.sgt = kmalloc_obj(*bo->base.sgt, GFP_KERNEL);
 		if (!bo->base.sgt) {
 			ret = -ENOMEM;
 			goto err_out0;
@@ -226,7 +226,7 @@ struct drm_gem_object *lima_gem_create_object(struct drm_device *dev, size_t siz
 {
 	struct lima_bo *bo;

-	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+	bo = kzalloc_obj(*bo, GFP_KERNEL);
 	if (!bo)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/lima/lima_vm.c b/drivers/gpu/drm/lima/lima_vm.c
index 2b2739adc7f5..5db2a1ad1983 100644
--- a/drivers/gpu/drm/lima/lima_vm.c
+++ b/drivers/gpu/drm/lima/lima_vm.c
@@ -109,7 +109,7 @@ int lima_vm_bo_add(struct lima_vm *vm, struct lima_bo *bo, bool create)
 		return -ENOENT;
 	}

-	bo_va = kzalloc(sizeof(*bo_va), GFP_KERNEL);
+	bo_va = kzalloc_obj(*bo_va, GFP_KERNEL);
 	if (!bo_va) {
 		err = -ENOMEM;
 		goto err_out0;
@@ -201,7 +201,7 @@ struct lima_vm *lima_vm_create(struct lima_device *dev)
 {
 	struct lima_vm *vm;

-	vm = kzalloc(sizeof(*vm), GFP_KERNEL);
+	vm = kzalloc_obj(*vm, GFP_KERNEL);
 	if (!vm)
 		return NULL;

diff --git a/drivers/gpu/drm/loongson/lsdc_crtc.c b/drivers/gpu/drm/loongson/lsdc_crtc.c
index a5b7d5c5fd20..32ef0f3826ac 100644
--- a/drivers/gpu/drm/loongson/lsdc_crtc.c
+++ b/drivers/gpu/drm/loongson/lsdc_crtc.c
@@ -397,7 +397,7 @@ static void lsdc_crtc_reset(struct drm_crtc *crtc)
 	if (crtc->state)
 		crtc->funcs->atomic_destroy_state(crtc, crtc->state);

-	priv_crtc_state = kzalloc(sizeof(*priv_crtc_state), GFP_KERNEL);
+	priv_crtc_state = kzalloc_obj(*priv_crtc_state, GFP_KERNEL);

 	if (!priv_crtc_state)
 		__drm_atomic_helper_crtc_reset(crtc, NULL);
@@ -424,7 +424,7 @@ lsdc_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
 	struct lsdc_crtc_state *new_priv_state;
 	struct lsdc_crtc_state *old_priv_state;

-	new_priv_state = kzalloc(sizeof(*new_priv_state), GFP_KERNEL);
+	new_priv_state = kzalloc_obj(*new_priv_state, GFP_KERNEL);
 	if (!new_priv_state)
 		return NULL;

diff --git a/drivers/gpu/drm/loongson/lsdc_gfxpll.c b/drivers/gpu/drm/loongson/lsdc_gfxpll.c
index 249c09d703ad..984ee165cacb 100644
--- a/drivers/gpu/drm/loongson/lsdc_gfxpll.c
+++ b/drivers/gpu/drm/loongson/lsdc_gfxpll.c
@@ -178,7 +178,7 @@ int loongson_gfxpll_create(struct drm_device *ddev,
 	struct loongson_gfxpll *this;
 	int ret;

-	this = kzalloc(sizeof(*this), GFP_KERNEL);
+	this = kzalloc_obj(*this, GFP_KERNEL);
 	if (IS_ERR_OR_NULL(this))
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/loongson/lsdc_i2c.c b/drivers/gpu/drm/loongson/lsdc_i2c.c
index 012b4761c538..5ed314a76dde 100644
--- a/drivers/gpu/drm/loongson/lsdc_i2c.c
+++ b/drivers/gpu/drm/loongson/lsdc_i2c.c
@@ -124,7 +124,7 @@ int lsdc_create_i2c_chan(struct drm_device *ddev,
 	struct lsdc_i2c *li2c;
 	int ret;

-	li2c = kzalloc(sizeof(*li2c), GFP_KERNEL);
+	li2c = kzalloc_obj(*li2c, GFP_KERNEL);
 	if (!li2c)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/loongson/lsdc_pixpll.c b/drivers/gpu/drm/loongson/lsdc_pixpll.c
index 51b9a032cf43..d9c9de7b5de0 100644
--- a/drivers/gpu/drm/loongson/lsdc_pixpll.c
+++ b/drivers/gpu/drm/loongson/lsdc_pixpll.c
@@ -124,7 +124,7 @@ static int lsdc_pixel_pll_setup(struct lsdc_pixpll * const this)
 	if (!this->mmio)
 		return -ENOMEM;

-	pparms = kzalloc(sizeof(*pparms), GFP_KERNEL);
+	pparms = kzalloc_obj(*pparms, GFP_KERNEL);
 	if (!pparms) {
 		iounmap(this->mmio);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/loongson/lsdc_ttm.c b/drivers/gpu/drm/loongson/lsdc_ttm.c
index 5d9075634bf8..3404e18e87b4 100644
--- a/drivers/gpu/drm/loongson/lsdc_ttm.c
+++ b/drivers/gpu/drm/loongson/lsdc_ttm.c
@@ -96,7 +96,7 @@ lsdc_ttm_tt_create(struct ttm_buffer_object *tbo, uint32_t page_flags)
 	struct ttm_tt *tt;
 	int ret;

-	tt = kzalloc(sizeof(*tt), GFP_KERNEL);
+	tt = kzalloc_obj(*tt, GFP_KERNEL);
 	if (!tt)
 		return NULL;

@@ -441,7 +441,7 @@ struct lsdc_bo *lsdc_bo_create(struct drm_device *ddev,
 	enum ttm_bo_type bo_type;
 	int ret;

-	lbo = kzalloc(sizeof(*lbo), GFP_KERNEL);
+	lbo = kzalloc_obj(*lbo, GFP_KERNEL);
 	if (!lbo)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/mediatek/mtk_crtc.c b/drivers/gpu/drm/mediatek/mtk_crtc.c
index 6ad712c0339a..1c1459a4af13 100644
--- a/drivers/gpu/drm/mediatek/mtk_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_crtc.c
@@ -160,7 +160,7 @@ static void mtk_crtc_reset(struct drm_crtc *crtc)
 	kfree(to_mtk_crtc_state(crtc->state));
 	crtc->state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_crtc_reset(crtc, &state->base);
 }
@@ -169,7 +169,7 @@ static struct drm_crtc_state *mtk_crtc_duplicate_state(struct drm_crtc *crtc)
 {
 	struct mtk_crtc_state *state;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c
index 5e67dab6e2e9..08d954e412d1 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -2482,7 +2482,7 @@ static u32 *mtk_dp_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
 	u32 *output_fmts;

 	*num_output_fmts = 0;
-	output_fmts = kmalloc(sizeof(*output_fmts), GFP_KERNEL);
+	output_fmts = kmalloc_obj(*output_fmts, GFP_KERNEL);
 	if (!output_fmts)
 		return NULL;
 	*num_output_fmts = 1;
diff --git a/drivers/gpu/drm/mediatek/mtk_gem.c b/drivers/gpu/drm/mediatek/mtk_gem.c
index 7525a9f9907a..5f7e50ff70ae 100644
--- a/drivers/gpu/drm/mediatek/mtk_gem.c
+++ b/drivers/gpu/drm/mediatek/mtk_gem.c
@@ -50,7 +50,7 @@ static struct sg_table *mtk_gem_prime_get_sg_table(struct drm_gem_object *obj)
 	struct sg_table *sgt;
 	int ret;

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return ERR_PTR(-ENOMEM);

@@ -85,7 +85,7 @@ static struct drm_gem_dma_object *mtk_gem_init(struct drm_device *dev,
 	if (size == 0)
 		return ERR_PTR(-EINVAL);

-	dma_obj = kzalloc(sizeof(*dma_obj), GFP_KERNEL);
+	dma_obj = kzalloc_obj(*dma_obj, GFP_KERNEL);
 	if (!dma_obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/mediatek/mtk_plane.c b/drivers/gpu/drm/mediatek/mtk_plane.c
index fcd10d7e8342..60c35d3cbb9b 100644
--- a/drivers/gpu/drm/mediatek/mtk_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_plane.c
@@ -35,7 +35,7 @@ static void mtk_plane_reset(struct drm_plane *plane)
 		state = to_mtk_plane_state(plane->state);
 		memset(state, 0, sizeof(*state));
 	} else {
-		state = kzalloc(sizeof(*state), GFP_KERNEL);
+		state = kzalloc_obj(*state, GFP_KERNEL);
 		if (!state)
 			return;
 	}
@@ -52,7 +52,7 @@ static struct drm_plane_state *mtk_plane_duplicate_state(struct drm_plane *plane
 	struct mtk_plane_state *old_state = to_mtk_plane_state(plane->state);
 	struct mtk_plane_state *state;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index d019177462cf..fe7451ff4ea4 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -697,7 +697,7 @@ void mgag200_crtc_reset(struct drm_crtc *crtc)
 	if (crtc->state)
 		crtc->funcs->atomic_destroy_state(crtc, crtc->state);

-	mgag200_crtc_state = kzalloc(sizeof(*mgag200_crtc_state), GFP_KERNEL);
+	mgag200_crtc_state = kzalloc_obj(*mgag200_crtc_state, GFP_KERNEL);
 	if (mgag200_crtc_state)
 		__drm_atomic_helper_crtc_reset(crtc, &mgag200_crtc_state->base);
 	else
@@ -713,7 +713,8 @@ struct drm_crtc_state *mgag200_crtc_atomic_duplicate_state(struct drm_crtc *crtc
 	if (!crtc_state)
 		return NULL;

-	new_mgag200_crtc_state = kzalloc(sizeof(*new_mgag200_crtc_state), GFP_KERNEL);
+	new_mgag200_crtc_state = kzalloc_obj(*new_mgag200_crtc_state,
+					     GFP_KERNEL);
 	if (!new_mgag200_crtc_state)
 		return NULL;
 	__drm_atomic_helper_crtc_duplicate_state(crtc, &new_mgag200_crtc_state->base);
diff --git a/drivers/gpu/drm/msm/adreno/a2xx_gpu.c b/drivers/gpu/drm/msm/adreno/a2xx_gpu.c
index f6e48bb8cc69..9cf06fd3a21e 100644
--- a/drivers/gpu/drm/msm/adreno/a2xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a2xx_gpu.c
@@ -457,7 +457,7 @@ static void a2xx_dump(struct msm_gpu *gpu)

 static struct msm_gpu_state *a2xx_gpu_state_get(struct msm_gpu *gpu)
 {
-	struct msm_gpu_state *state = kzalloc(sizeof(*state), GFP_KERNEL);
+	struct msm_gpu_state *state = kzalloc_obj(*state, GFP_KERNEL);

 	if (!state)
 		return ERR_PTR(-ENOMEM);
@@ -509,7 +509,7 @@ static struct msm_gpu *a2xx_gpu_init(struct drm_device *dev)
 		goto fail;
 	}

-	a2xx_gpu = kzalloc(sizeof(*a2xx_gpu), GFP_KERNEL);
+	a2xx_gpu = kzalloc_obj(*a2xx_gpu, GFP_KERNEL);
 	if (!a2xx_gpu) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/msm/adreno/a2xx_gpummu.c b/drivers/gpu/drm/msm/adreno/a2xx_gpummu.c
index 0407c9bc8c1b..4e8148497295 100644
--- a/drivers/gpu/drm/msm/adreno/a2xx_gpummu.c
+++ b/drivers/gpu/drm/msm/adreno/a2xx_gpummu.c
@@ -95,7 +95,7 @@ struct msm_mmu *a2xx_gpummu_new(struct device *dev, struct msm_gpu *gpu)
 {
 	struct a2xx_gpummu *gpummu;

-	gpummu = kzalloc(sizeof(*gpummu), GFP_KERNEL);
+	gpummu = kzalloc_obj(*gpummu, GFP_KERNEL);
 	if (!gpummu)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/msm/adreno/a3xx_gpu.c b/drivers/gpu/drm/msm/adreno/a3xx_gpu.c
index f22d33e99e81..5d47f8c0b7ea 100644
--- a/drivers/gpu/drm/msm/adreno/a3xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a3xx_gpu.c
@@ -480,7 +480,7 @@ static void a3xx_dump(struct msm_gpu *gpu)

 static struct msm_gpu_state *a3xx_gpu_state_get(struct msm_gpu *gpu)
 {
-	struct msm_gpu_state *state = kzalloc(sizeof(*state), GFP_KERNEL);
+	struct msm_gpu_state *state = kzalloc_obj(*state, GFP_KERNEL);

 	if (!state)
 		return ERR_PTR(-ENOMEM);
@@ -533,7 +533,7 @@ static struct msm_gpu *a3xx_gpu_init(struct drm_device *dev)
 		goto fail;
 	}

-	a3xx_gpu = kzalloc(sizeof(*a3xx_gpu), GFP_KERNEL);
+	a3xx_gpu = kzalloc_obj(*a3xx_gpu, GFP_KERNEL);
 	if (!a3xx_gpu) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/msm/adreno/a4xx_gpu.c b/drivers/gpu/drm/msm/adreno/a4xx_gpu.c
index db06c06067ae..e44e45ce0714 100644
--- a/drivers/gpu/drm/msm/adreno/a4xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a4xx_gpu.c
@@ -550,7 +550,7 @@ static const unsigned int a405_registers[] = {

 static struct msm_gpu_state *a4xx_gpu_state_get(struct msm_gpu *gpu)
 {
-	struct msm_gpu_state *state = kzalloc(sizeof(*state), GFP_KERNEL);
+	struct msm_gpu_state *state = kzalloc_obj(*state, GFP_KERNEL);

 	if (!state)
 		return ERR_PTR(-ENOMEM);
@@ -645,7 +645,7 @@ static struct msm_gpu *a4xx_gpu_init(struct drm_device *dev)
 		goto fail;
 	}

-	a4xx_gpu = kzalloc(sizeof(*a4xx_gpu), GFP_KERNEL);
+	a4xx_gpu = kzalloc_obj(*a4xx_gpu, GFP_KERNEL);
 	if (!a4xx_gpu) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
index 56eaff2ee4e4..66e6b828cb84 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
@@ -1570,8 +1570,7 @@ static void a5xx_gpu_state_get_hlsq_regs(struct msm_gpu *gpu,

 static struct msm_gpu_state *a5xx_gpu_state_get(struct msm_gpu *gpu)
 {
-	struct a5xx_gpu_state *a5xx_state = kzalloc(sizeof(*a5xx_state),
-			GFP_KERNEL);
+	struct a5xx_gpu_state *a5xx_state = kzalloc_obj(*a5xx_state, GFP_KERNEL);
 	bool stalled = !!(gpu_read(gpu, REG_A5XX_RBBM_STATUS3) & BIT(24));

 	if (!a5xx_state)
@@ -1735,7 +1734,7 @@ static struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)
 	unsigned int nr_rings;
 	int ret;

-	a5xx_gpu = kzalloc(sizeof(*a5xx_gpu), GFP_KERNEL);
+	a5xx_gpu = kzalloc_obj(*a5xx_gpu, GFP_KERNEL);
 	if (!a5xx_gpu)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
index 2129d230a92b..b8cc33fe7279 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
@@ -2648,7 +2648,7 @@ static struct msm_gpu *a6xx_gpu_init(struct drm_device *dev)
 	bool is_a7xx;
 	int ret, nr_rings = 1;

-	a6xx_gpu = kzalloc(sizeof(*a6xx_gpu), GFP_KERNEL);
+	a6xx_gpu = kzalloc_obj(*a6xx_gpu, GFP_KERNEL);
 	if (!a6xx_gpu)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c
index d2d6b2fd3cba..40933f4d2424 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c
@@ -1584,8 +1584,7 @@ struct msm_gpu_state *a6xx_gpu_state_get(struct msm_gpu *gpu)
 	struct a6xx_crashdumper _dumper = { 0 }, *dumper = NULL;
 	struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
 	struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
-	struct a6xx_gpu_state *a6xx_state = kzalloc(sizeof(*a6xx_state),
-		GFP_KERNEL);
+	struct a6xx_gpu_state *a6xx_state = kzalloc_obj(*a6xx_state, GFP_KERNEL);
 	bool stalled;

 	if (!a6xx_state)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
index 6bf7c46379ae..39c1165c93a7 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
@@ -887,7 +887,7 @@ static void _dpu_crtc_setup_cp_blocks(struct drm_crtc *crtc)
 			if (!state->gamma_lut) {
 				dspp->ops.setup_gc(dspp, NULL);
 			} else {
-				gc_lut = kzalloc(sizeof(*gc_lut), GFP_KERNEL);
+				gc_lut = kzalloc_obj(*gc_lut, GFP_KERNEL);
 				if (!gc_lut)
 					continue;
 				_dpu_crtc_get_gc_lut(state, gc_lut);
@@ -1146,7 +1146,7 @@ void dpu_crtc_commit_kickoff(struct drm_crtc *crtc)

 static void dpu_crtc_reset(struct drm_crtc *crtc)
 {
-	struct dpu_crtc_state *cstate = kzalloc(sizeof(*cstate), GFP_KERNEL);
+	struct dpu_crtc_state *cstate = kzalloc_obj(*cstate, GFP_KERNEL);

 	if (crtc->state)
 		dpu_crtc_destroy_state(crtc, crtc->state);
@@ -1343,7 +1343,7 @@ static int dpu_crtc_reassign_planes(struct drm_crtc *crtc, struct drm_crtc_state
 	if (!crtc_state->enable)
 		return 0;

-	states = kcalloc(total_planes, sizeof(*states), GFP_KERNEL);
+	states = kzalloc_objs(*states, total_planes, GFP_KERNEL);
 	if (!states)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 0623f1dbed97..35986cefbf8b 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -385,7 +385,7 @@ static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms)
 {
 	struct dpu_global_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
index 9b7a8b46bfa9..59c44cce6753 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
@@ -1684,7 +1684,7 @@ static void dpu_plane_reset(struct drm_plane *plane)
 		plane->state = NULL;
 	}

-	pstate = kzalloc(sizeof(*pstate), GFP_KERNEL);
+	pstate = kzalloc_obj(*pstate, GFP_KERNEL);
 	if (!pstate) {
 		DPU_ERROR_PLANE(pdpu, "failed to allocate state\n");
 		return;
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
index 373ae7d9bf01..671f9857fbed 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
@@ -1130,8 +1130,8 @@ static void mdp5_crtc_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state

 static void mdp5_crtc_reset(struct drm_crtc *crtc)
 {
-	struct mdp5_crtc_state *mdp5_cstate =
-		kzalloc(sizeof(*mdp5_cstate), GFP_KERNEL);
+	struct mdp5_crtc_state *mdp5_cstate = kzalloc_obj(*mdp5_cstate,
+						          GFP_KERNEL);

 	if (crtc->state)
 		mdp5_crtc_destroy_state(crtc, crtc->state);
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index 61edf6864092..743517e29626 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -133,7 +133,7 @@ static int mdp5_global_obj_init(struct mdp5_kms *mdp5_kms)
 {
 	struct mdp5_global_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
index 4ca183fb61a9..83088fd8f910 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
@@ -89,7 +89,7 @@ static void mdp5_plane_reset(struct drm_plane *plane)

 	kfree(to_mdp5_plane_state(plane->state));
 	plane->state = NULL;
-	mdp5_state = kzalloc(sizeof(*mdp5_state), GFP_KERNEL);
+	mdp5_state = kzalloc_obj(*mdp5_state, GFP_KERNEL);
 	if (!mdp5_state)
 		return;
 	__drm_atomic_helper_plane_reset(plane, &mdp5_state->base);
diff --git a/drivers/gpu/drm/msm/disp/msm_disp_snapshot.c b/drivers/gpu/drm/msm/disp/msm_disp_snapshot.c
index 2be00b11e557..60af5c02973f 100644
--- a/drivers/gpu/drm/msm/disp/msm_disp_snapshot.c
+++ b/drivers/gpu/drm/msm/disp/msm_disp_snapshot.c
@@ -36,7 +36,7 @@ msm_disp_snapshot_state_sync(struct msm_kms *kms)

 	WARN_ON(!mutex_is_locked(&kms->dump_mutex));

-	disp_state = kzalloc(sizeof(struct msm_disp_state), GFP_KERNEL);
+	disp_state = kzalloc_obj(struct msm_disp_state, GFP_KERNEL);
 	if (!disp_state)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c b/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c
index 19b470968f4d..fdb8ca642794 100644
--- a/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c
+++ b/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c
@@ -172,7 +172,7 @@ void msm_disp_snapshot_add_block(struct msm_disp_state *disp_state, u32 len,
 	struct va_format vaf;
 	va_list va;

-	new_blk = kzalloc(sizeof(struct msm_disp_state_block), GFP_KERNEL);
+	new_blk = kzalloc_obj(struct msm_disp_state_block, GFP_KERNEL);
 	if (!new_blk)
 		return;

diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_ctrl.c
index 5fc261191cb7..00c36fa75c5c 100644
--- a/drivers/gpu/drm/msm/dp/dp_ctrl.c
+++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c
@@ -921,7 +921,7 @@ static void _dp_ctrl_calc_tu(struct msm_dp_ctrl_private *ctrl,
 	uint EXTRA_PIXCLK_CYCLE_DELAY = 4;
 	uint HBLANK_MARGIN = 4;

-	tu = kzalloc(sizeof(*tu), GFP_KERNEL);
+	tu = kzalloc_obj(*tu, GFP_KERNEL);
 	if (!tu)
 		return;

diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_hdcp.c b/drivers/gpu/drm/msm/hdmi/hdmi_hdcp.c
index 0752fe373351..c59c7b4c3ee0 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_hdcp.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_hdcp.c
@@ -1400,7 +1400,7 @@ struct hdmi_hdcp_ctrl *msm_hdmi_hdcp_init(struct hdmi *hdmi)
 		return ERR_PTR(-EINVAL);
 	}

-	hdcp_ctrl = kzalloc(sizeof(*hdcp_ctrl), GFP_KERNEL);
+	hdcp_ctrl = kzalloc_obj(*hdcp_ctrl, GFP_KERNEL);
 	if (!hdcp_ctrl)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c b/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c
index ebefea4fb408..020b2f432b38 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c
@@ -246,7 +246,7 @@ struct i2c_adapter *msm_hdmi_i2c_init(struct hdmi *hdmi)
 	struct i2c_adapter *i2c = NULL;
 	int ret;

-	hdmi_i2c = kzalloc(sizeof(*hdmi_i2c), GFP_KERNEL);
+	hdmi_i2c = kzalloc_obj(*hdmi_i2c, GFP_KERNEL);
 	if (!hdmi_i2c) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/msm/msm_debugfs.c b/drivers/gpu/drm/msm/msm_debugfs.c
index 97dc70876442..785172f5d74f 100644
--- a/drivers/gpu/drm/msm/msm_debugfs.c
+++ b/drivers/gpu/drm/msm/msm_debugfs.c
@@ -76,7 +76,7 @@ static int msm_gpu_open(struct inode *inode, struct file *file)
 	if (!gpu || !gpu->funcs->gpu_state_get)
 		return -ENODEV;

-	show_priv = kmalloc(sizeof(*show_priv), GFP_KERNEL);
+	show_priv = kmalloc_obj(*show_priv, GFP_KERNEL);
 	if (!show_priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index ed2a61c66ac9..2fc0fa82a275 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -247,7 +247,7 @@ static int context_init(struct drm_device *dev, struct drm_file *file)
 	static atomic_t ident = ATOMIC_INIT(0);
 	struct msm_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/msm/msm_fb.c b/drivers/gpu/drm/msm/msm_fb.c
index 1eff615ff9bf..d784d1773dee 100644
--- a/drivers/gpu/drm/msm/msm_fb.c
+++ b/drivers/gpu/drm/msm/msm_fb.c
@@ -194,7 +194,7 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
 		goto fail;
 	}

-	msm_fb = kzalloc(sizeof(*msm_fb), GFP_KERNEL);
+	msm_fb = kzalloc_obj(*msm_fb, GFP_KERNEL);
 	if (!msm_fb) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/msm/msm_fence.c b/drivers/gpu/drm/msm/msm_fence.c
index d41e5a6bbee0..eafd52f03d17 100644
--- a/drivers/gpu/drm/msm/msm_fence.c
+++ b/drivers/gpu/drm/msm/msm_fence.c
@@ -46,7 +46,7 @@ msm_fence_context_alloc(struct drm_device *dev, volatile uint32_t *fenceptr,
 	struct msm_fence_context *fctx;
 	static int index = 0;

-	fctx = kzalloc(sizeof(*fctx), GFP_KERNEL);
+	fctx = kzalloc_obj(*fctx, GFP_KERNEL);
 	if (!fctx)
 		return ERR_PTR(-ENOMEM);

@@ -176,7 +176,7 @@ msm_fence_alloc(void)
 {
 	struct msm_fence *f;

-	f = kzalloc(sizeof(*f), GFP_KERNEL);
+	f = kzalloc_obj(*f, GFP_KERNEL);
 	if (!f)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index da74f1413f94..5d4ab1900984 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -1215,7 +1215,7 @@ static int msm_gem_new_impl(struct drm_device *dev, uint32_t flags,
 		return -EINVAL;
 	}

-	msm_obj = kzalloc(sizeof(*msm_obj), GFP_KERNEL);
+	msm_obj = kzalloc_obj(*msm_obj, GFP_KERNEL);
 	if (!msm_obj)
 		return -ENOMEM;

@@ -1301,7 +1301,7 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
 	msm_obj = to_msm_bo(obj);
 	msm_gem_lock(obj);
 	msm_obj->sgt = sgt;
-	msm_obj->pages = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
+	msm_obj->pages = kvmalloc_objs(struct page *, npages, GFP_KERNEL);
 	if (!msm_obj->pages) {
 		msm_gem_unlock(obj);
 		ret = -ENOMEM;
diff --git a/drivers/gpu/drm/msm/msm_gem_vma.c b/drivers/gpu/drm/msm/msm_gem_vma.c
index 5fd58d910620..3c43e27ce553 100644
--- a/drivers/gpu/drm/msm/msm_gem_vma.c
+++ b/drivers/gpu/drm/msm/msm_gem_vma.c
@@ -375,7 +375,7 @@ msm_gem_vma_new(struct drm_gpuvm *gpuvm, struct drm_gem_object *obj,

 	drm_gpuvm_resv_assert_held(&vm->base);

-	vma = kzalloc(sizeof(*vma), GFP_KERNEL);
+	vma = kzalloc_obj(*vma, GFP_KERNEL);
 	if (!vma)
 		return ERR_PTR(-ENOMEM);

@@ -465,7 +465,7 @@ struct op_arg {
 static int
 vm_op_enqueue(struct op_arg *arg, struct msm_vm_op _op)
 {
-	struct msm_vm_op *op = kmalloc(sizeof(*op), GFP_KERNEL);
+	struct msm_vm_op *op = kmalloc_obj(*op, GFP_KERNEL);
 	if (!op)
 		return -ENOMEM;

@@ -819,7 +819,7 @@ msm_gem_vm_create(struct drm_device *drm, struct msm_mmu *mmu, const char *name,
 	if (IS_ERR(mmu))
 		return ERR_CAST(mmu);

-	vm = kzalloc(sizeof(*vm), GFP_KERNEL);
+	vm = kzalloc_obj(*vm, GFP_KERNEL);
 	if (!vm)
 		return ERR_PTR(-ENOMEM);

@@ -869,8 +869,8 @@ msm_gem_vm_create(struct drm_device *drm, struct msm_mmu *mmu, const char *name,
 		vm->log_shift = MIN(vm_log_shift, 8);

 	if (vm->log_shift) {
-		vm->log = kmalloc_array(1 << vm->log_shift, sizeof(vm->log[0]),
-					GFP_KERNEL | __GFP_ZERO);
+		vm->log = kmalloc_objs(vm->log[0], 1 << vm->log_shift,
+				       GFP_KERNEL | __GFP_ZERO);
 	}

 	return &vm->base;
@@ -952,7 +952,7 @@ vm_bind_job_create(struct drm_device *dev, struct drm_file *file,
 	struct msm_vm_bind_job *job;
 	int ret;

-	job = kzalloc(struct_size(job, ops, nr_ops), GFP_KERNEL | __GFP_NOWARN);
+	job = kzalloc_flex(*job, ops, nr_ops, GFP_KERNEL | __GFP_NOWARN);
 	if (!job)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 995549d0bbbc..24f164a04f59 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -346,8 +346,7 @@ static void crashstate_get_vm_logs(struct msm_gpu_state *state, struct msm_gem_v
 		state->nr_vm_logs = vm_log_len;
 	}

-	state->vm_logs = kmalloc_array(
-		state->nr_vm_logs, sizeof(vm->log[0]), GFP_KERNEL);
+	state->vm_logs = kmalloc_objs(vm->log[0], state->nr_vm_logs, GFP_KERNEL);
 	if (!state->vm_logs) {
 		state->nr_vm_logs = 0;
 	}
diff --git a/drivers/gpu/drm/msm/msm_iommu.c b/drivers/gpu/drm/msm/msm_iommu.c
index 271baf4dc4e8..425ae5eb9af3 100644
--- a/drivers/gpu/drm/msm/msm_iommu.c
+++ b/drivers/gpu/drm/msm/msm_iommu.c
@@ -332,7 +332,7 @@ msm_iommu_pagetable_prealloc_allocate(struct msm_mmu *mmu, struct msm_mmu_preall
 	struct kmem_cache *pt_cache = get_pt_cache(mmu);
 	int ret;

-	p->pages = kvmalloc_array(p->count, sizeof(*p->pages), GFP_KERNEL);
+	p->pages = kvmalloc_objs(*p->pages, p->count, GFP_KERNEL);
 	if (!p->pages)
 		return -ENOMEM;

@@ -521,7 +521,7 @@ struct msm_mmu *msm_iommu_pagetable_create(struct msm_mmu *parent, bool kernel_m
 	if (WARN_ONCE(!ttbr1_cfg, "No per-process page tables"))
 		return ERR_PTR(-ENODEV);

-	pagetable = kzalloc(sizeof(*pagetable), GFP_KERNEL);
+	pagetable = kzalloc_obj(*pagetable, GFP_KERNEL);
 	if (!pagetable)
 		return ERR_PTR(-ENOMEM);

@@ -734,7 +734,7 @@ struct msm_mmu *msm_iommu_new(struct device *dev, unsigned long quirks)

 	iommu_set_pgtable_quirks(domain, quirks);

-	iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
+	iommu = kzalloc_obj(*iommu, GFP_KERNEL);
 	if (!iommu) {
 		iommu_domain_free(domain);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/msm/msm_kms.c b/drivers/gpu/drm/msm/msm_kms.c
index 6e5e94f5c9a7..e5d0ea629448 100644
--- a/drivers/gpu/drm/msm/msm_kms.c
+++ b/drivers/gpu/drm/msm/msm_kms.c
@@ -128,7 +128,7 @@ static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
 {
 	struct msm_vblank_work *vbl_work;

-	vbl_work = kzalloc(sizeof(*vbl_work), GFP_ATOMIC);
+	vbl_work = kzalloc_obj(*vbl_work, GFP_ATOMIC);
 	if (!vbl_work)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/msm/msm_perf.c b/drivers/gpu/drm/msm/msm_perf.c
index c369d4acc378..e40f6aa5917d 100644
--- a/drivers/gpu/drm/msm/msm_perf.c
+++ b/drivers/gpu/drm/msm/msm_perf.c
@@ -204,7 +204,7 @@ int msm_perf_debugfs_init(struct drm_minor *minor)
 	if (priv->perf)
 		return 0;

-	perf = kzalloc(sizeof(*perf), GFP_KERNEL);
+	perf = kzalloc_obj(*perf, GFP_KERNEL);
 	if (!perf)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/msm/msm_rd.c b/drivers/gpu/drm/msm/msm_rd.c
index 54493a94dcb7..3275ce9a4f07 100644
--- a/drivers/gpu/drm/msm/msm_rd.c
+++ b/drivers/gpu/drm/msm/msm_rd.c
@@ -245,7 +245,7 @@ static struct msm_rd_state *rd_init(struct drm_minor *minor, const char *name)
 {
 	struct msm_rd_state *rd;

-	rd = kzalloc(sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_obj(*rd, GFP_KERNEL);
 	if (!rd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/msm/msm_ringbuffer.c b/drivers/gpu/drm/msm/msm_ringbuffer.c
index b2f612e5dc79..9540a615b7a9 100644
--- a/drivers/gpu/drm/msm/msm_ringbuffer.c
+++ b/drivers/gpu/drm/msm/msm_ringbuffer.c
@@ -79,7 +79,7 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id,
 	/* We assume everywhere that MSM_GPU_RINGBUFFER_SZ is a power of 2 */
 	BUILD_BUG_ON(!is_power_of_2(MSM_GPU_RINGBUFFER_SZ));

-	ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kzalloc_obj(*ring, GFP_KERNEL);
 	if (!ring) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/msm/msm_submitqueue.c b/drivers/gpu/drm/msm/msm_submitqueue.c
index d53dfad16bde..04e4a2f2a3b0 100644
--- a/drivers/gpu/drm/msm/msm_submitqueue.c
+++ b/drivers/gpu/drm/msm/msm_submitqueue.c
@@ -151,7 +151,7 @@ get_sched_entity(struct msm_context *ctx, struct msm_ringbuffer *ring,
 		struct drm_gpu_scheduler *sched = &ring->sched;
 		int ret;

-		entity = kzalloc(sizeof(*ctx->entities[idx]), GFP_KERNEL);
+		entity = kzalloc_obj(*ctx->entities[idx], GFP_KERNEL);

 		ret = drm_sched_entity_init(entity, sched_prio, &sched, 1, NULL);
 		if (ret) {
@@ -207,7 +207,7 @@ int msm_submitqueue_create(struct drm_device *drm, struct msm_context *ctx,
 		if (ret)
 			return ret;

-		queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+		queue = kzalloc_obj(*queue, GFP_KERNEL);
 	}

 	if (!queue)
diff --git a/drivers/gpu/drm/msm/msm_syncobj.c b/drivers/gpu/drm/msm/msm_syncobj.c
index 4baa9f522c54..c67aaf6f7105 100644
--- a/drivers/gpu/drm/msm/msm_syncobj.c
+++ b/drivers/gpu/drm/msm/msm_syncobj.c
@@ -19,8 +19,8 @@ msm_syncobj_parse_deps(struct drm_device *dev,
 	int ret = 0;
 	uint32_t i, j;

-	syncobjs = kcalloc(nr_in_syncobjs, sizeof(*syncobjs),
-	                   GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
+	syncobjs = kzalloc_objs(*syncobjs, nr_in_syncobjs,
+				GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
 	if (!syncobjs)
 		return ERR_PTR(-ENOMEM);

@@ -94,8 +94,8 @@ msm_syncobj_parse_post_deps(struct drm_device *dev,
 	int ret = 0;
 	uint32_t i, j;

-	post_deps = kcalloc(nr_syncobjs, sizeof(*post_deps),
-			    GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
+	post_deps = kzalloc_objs(*post_deps, nr_syncobjs,
+				 GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
 	if (!post_deps)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/mxsfb/lcdif_kms.c b/drivers/gpu/drm/mxsfb/lcdif_kms.c
index 72eb0de46b54..e6ef6e318df9 100644
--- a/drivers/gpu/drm/mxsfb/lcdif_kms.c
+++ b/drivers/gpu/drm/mxsfb/lcdif_kms.c
@@ -595,7 +595,7 @@ static void lcdif_crtc_reset(struct drm_crtc *crtc)

 	crtc->state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_crtc_reset(crtc, &state->base);
 }
@@ -609,7 +609,7 @@ lcdif_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
 	if (WARN_ON(!crtc->state))
 		return NULL;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;

diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
index 80493224eb6c..e8b4f272aa8c 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
@@ -1158,7 +1158,7 @@ nv04_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
 	cli = chan->cli;
 	push = &chan->chan.push;

-	s = kzalloc(sizeof(*s), GFP_KERNEL);
+	s = kzalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

@@ -1291,7 +1291,7 @@ nv04_crtc_create(struct drm_device *dev, int crtc_num)
 	struct drm_plane *primary;
 	int ret;

-	nv_crtc = kzalloc(sizeof(*nv_crtc), GFP_KERNEL);
+	nv_crtc = kzalloc_obj(*nv_crtc, GFP_KERNEL);
 	if (!nv_crtc)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/dispnv04/dac.c b/drivers/gpu/drm/nouveau/dispnv04/dac.c
index 2e12bf136607..4137e694a7b6 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/dac.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/dac.c
@@ -532,7 +532,7 @@ nv04_dac_create(struct drm_connector *connector, struct dcb_output *entry)
 	struct drm_device *dev = connector->dev;
 	struct drm_encoder *encoder;

-	nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL);
+	nv_encoder = kzalloc_obj(*nv_encoder, GFP_KERNEL);
 	if (!nv_encoder)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/dispnv04/dfp.c b/drivers/gpu/drm/nouveau/dispnv04/dfp.c
index c724bacc67f8..a1cfc8e562d9 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/dfp.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/dfp.c
@@ -697,7 +697,7 @@ nv04_dfp_create(struct drm_connector *connector, struct dcb_output *entry)
 		return -EINVAL;
 	}

-	nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL);
+	nv_encoder = kzalloc_obj(*nv_encoder, GFP_KERNEL);
 	if (!nv_encoder)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c b/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c
index fd2150e07e36..369646b00802 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/ch7006_drv.c
@@ -444,7 +444,7 @@ static int ch7006_encoder_init(struct i2c_client *client,

 	ch7006_dbg(client, "\n");

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c b/drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c
index 54ea8459332d..1af644b20b0b 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/i2c/sil164_drv.c
@@ -399,7 +399,7 @@ sil164_encoder_init(struct i2c_client *client,
 	struct sil164_priv *priv;
 	struct i2c_client *slave_client;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/dispnv04/overlay.c b/drivers/gpu/drm/nouveau/dispnv04/overlay.c
index 33f29736024a..6d6a69d9d23f 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/overlay.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/overlay.c
@@ -279,7 +279,8 @@ static void
 nv10_overlay_init(struct drm_device *device)
 {
 	struct nouveau_drm *drm = nouveau_drm(device);
-	struct nouveau_plane *plane = kzalloc(sizeof(struct nouveau_plane), GFP_KERNEL);
+	struct nouveau_plane *plane = kzalloc_obj(struct nouveau_plane,
+						  GFP_KERNEL);
 	unsigned int num_formats = ARRAY_SIZE(formats);
 	int ret;

@@ -470,7 +471,8 @@ static void
 nv04_overlay_init(struct drm_device *device)
 {
 	struct nouveau_drm *drm = nouveau_drm(device);
-	struct nouveau_plane *plane = kzalloc(sizeof(struct nouveau_plane), GFP_KERNEL);
+	struct nouveau_plane *plane = kzalloc_obj(struct nouveau_plane,
+						  GFP_KERNEL);
 	int ret;

 	if (!plane)
diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c
index c61ab083f62e..3ddcffe5c58e 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c
@@ -215,7 +215,7 @@ nv04_tv_create(struct drm_connector *connector, struct dcb_output *entry)
 		return type;

 	/* Allocate the necessary memory */
-	nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL);
+	nv_encoder = kzalloc_obj(*nv_encoder, GFP_KERNEL);
 	if (!nv_encoder)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
index 06de05fe5db6..8d252e8013b6 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
@@ -797,7 +797,7 @@ nv17_tv_create(struct drm_connector *connector, struct dcb_output *entry)
 	struct drm_encoder *encoder;
 	struct nv17_tv_encoder *tv_enc = NULL;

-	tv_enc = kzalloc(sizeof(*tv_enc), GFP_KERNEL);
+	tv_enc = kzalloc_obj(*tv_enc, GFP_KERNEL);
 	if (!tv_enc)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/dispnv50/core507d.c b/drivers/gpu/drm/nouveau/dispnv50/core507d.c
index 4b947b67a844..8997e53fd2be 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/core507d.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/core507d.c
@@ -162,7 +162,7 @@ core507d_new_(const struct nv50_core_func *func, struct nouveau_drm *drm,
 	struct nv50_core *core;
 	int ret;

-	if (!(core = *pcore = kzalloc(sizeof(*core), GFP_KERNEL)))
+	if (!(core = *pcore = kzalloc_obj(*core, GFP_KERNEL)))
 		return -ENOMEM;
 	core->func = func;
 	core->disp = disp;
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
index 12b1dba8e05d..c4c5ba876775 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
@@ -1115,7 +1115,7 @@ nv50_msto_new(struct drm_device *dev, struct nv50_head *head, int id)
 	struct nv50_msto *msto;
 	int ret;

-	msto = kzalloc(sizeof(*msto), GFP_KERNEL);
+	msto = kzalloc_obj(*msto, GFP_KERNEL);
 	if (!msto)
 		return ERR_PTR(-ENOMEM);

@@ -1267,7 +1267,7 @@ nv50_mstc_new(struct nv50_mstm *mstm, struct drm_dp_mst_port *port,
 	struct nv50_mstc *mstc;
 	int ret;

-	if (!(mstc = *pmstc = kzalloc(sizeof(*mstc), GFP_KERNEL)))
+	if (!(mstc = *pmstc = kzalloc_obj(*mstc, GFP_KERNEL)))
 		return -ENOMEM;
 	mstc->mstm = mstm;
 	mstc->port = port;
@@ -1520,7 +1520,7 @@ nv50_mstm_new(struct nouveau_encoder *outp, struct drm_dp_aux *aux, int aux_max,
 	struct nv50_mstm *mstm;
 	int ret;

-	if (!(mstm = *pmstm = kzalloc(sizeof(*mstm), GFP_KERNEL)))
+	if (!(mstm = *pmstm = kzalloc_obj(*mstm, GFP_KERNEL)))
 		return -ENOMEM;
 	mstm->outp = outp;
 	mstm->mgr.cbs = &nv50_mstm;
@@ -2496,7 +2496,7 @@ nv50_disp_outp_atomic_add(struct nv50_atom *atom, struct drm_encoder *encoder)
 			return outp;
 	}

-	outp = kzalloc(sizeof(*outp), GFP_KERNEL);
+	outp = kzalloc_obj(*outp, GFP_KERNEL);
 	if (!outp)
 		return ERR_PTR(-ENOMEM);

@@ -2643,7 +2643,7 @@ static struct drm_atomic_state *
 nv50_disp_atomic_state_alloc(struct drm_device *dev)
 {
 	struct nv50_atom *atom;
-	if (!(atom = kzalloc(sizeof(*atom), GFP_KERNEL)) ||
+	if (!(atom = kzalloc_obj(*atom, GFP_KERNEL)) ||
 	    drm_atomic_state_init(dev, &atom->state) < 0) {
 		kfree(atom);
 		return NULL;
@@ -2833,7 +2833,7 @@ nv50_display_create(struct drm_device *dev)
 	int ret, i;
 	bool has_mst = false;

-	disp = kzalloc(sizeof(*disp), GFP_KERNEL);
+	disp = kzalloc_obj(*disp, GFP_KERNEL);
 	if (!disp)
 		return -ENOMEM;

@@ -2900,7 +2900,7 @@ nv50_display_create(struct drm_device *dev)
 	for_each_set_bit(i, &disp->disp->outp_mask, sizeof(disp->disp->outp_mask) * 8) {
 		struct nouveau_encoder *outp;

-		outp = kzalloc(sizeof(*outp), GFP_KERNEL);
+		outp = kzalloc_obj(*outp, GFP_KERNEL);
 		if (!outp)
 			break;

@@ -2921,7 +2921,7 @@ nv50_display_create(struct drm_device *dev)
 		outp->base.base.possible_clones = 0;
 		outp->conn = nouveau_connector(connector);

-		outp->dcb = kzalloc(sizeof(*outp->dcb), GFP_KERNEL);
+		outp->dcb = kzalloc_obj(*outp->dcb, GFP_KERNEL);
 		if (!outp->dcb)
 			break;

diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c b/drivers/gpu/drm/nouveau/dispnv50/head.c
index e32ed1db6c56..3f1b3c6cc7d9 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/head.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/head.c
@@ -470,7 +470,7 @@ nv50_head_atomic_duplicate_state(struct drm_crtc *crtc)
 {
 	struct nv50_head_atom *armh = nv50_head_atom(crtc->state);
 	struct nv50_head_atom *asyh;
-	if (!(asyh = kmalloc(sizeof(*asyh), GFP_KERNEL)))
+	if (!(asyh = kmalloc_obj(*asyh, GFP_KERNEL)))
 		return NULL;
 	__drm_atomic_helper_crtc_duplicate_state(crtc, &asyh->state);
 	asyh->wndw = armh->wndw;
@@ -496,7 +496,7 @@ nv50_head_reset(struct drm_crtc *crtc)
 {
 	struct nv50_head_atom *asyh;

-	if (WARN_ON(!(asyh = kzalloc(sizeof(*asyh), GFP_KERNEL))))
+	if (WARN_ON(!(asyh = kzalloc_obj(*asyh, GFP_KERNEL))))
 		return;

 	if (crtc->state)
@@ -577,7 +577,7 @@ nv50_head_create(struct drm_device *dev, int index)
 	const struct drm_crtc_funcs *funcs;
 	int ret;

-	head = kzalloc(sizeof(*head), GFP_KERNEL);
+	head = kzalloc_obj(*head, GFP_KERNEL);
 	if (!head)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/nouveau/dispnv50/lut.c b/drivers/gpu/drm/nouveau/dispnv50/lut.c
index 6b2ad1e6eab9..e07060917cc0 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/lut.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/lut.c
@@ -38,7 +38,7 @@ nv50_lut_load(struct nv50_lut *lut, int buffer, struct drm_property_blob *blob,
 	int i;

 	if (!in) {
-		in = kvmalloc_array(1024, sizeof(*in), GFP_KERNEL);
+		in = kvmalloc_objs(*in, 1024, GFP_KERNEL);
 		if (!WARN_ON(!in)) {
 			for (i = 0; i < 1024; i++) {
 				in[i].red   =
diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.c b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
index 9a2c20fce0f3..54b4252f4f49 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/wndw.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
@@ -80,7 +80,7 @@ nv50_wndw_ctxdma_new(struct nv50_wndw *wndw, struct drm_framebuffer *fb)
 			return ctxdma;
 	}

-	if (!(ctxdma = kzalloc(sizeof(*ctxdma), GFP_KERNEL)))
+	if (!(ctxdma = kzalloc_obj(*ctxdma, GFP_KERNEL)))
 		return ERR_PTR(-ENOMEM);
 	list_add(&ctxdma->head, &wndw->ctxdma.list);

@@ -730,7 +730,7 @@ nv50_wndw_atomic_duplicate_state(struct drm_plane *plane)
 {
 	struct nv50_wndw_atom *armw = nv50_wndw_atom(plane->state);
 	struct nv50_wndw_atom *asyw;
-	if (!(asyw = kmalloc(sizeof(*asyw), GFP_KERNEL)))
+	if (!(asyw = kmalloc_obj(*asyw, GFP_KERNEL)))
 		return NULL;
 	__drm_atomic_helper_plane_duplicate_state(plane, &asyw->state);
 	asyw->sema = armw->sema;
@@ -757,7 +757,7 @@ nv50_wndw_reset(struct drm_plane *plane)
 {
 	struct nv50_wndw_atom *asyw;

-	if (WARN_ON(!(asyw = kzalloc(sizeof(*asyw), GFP_KERNEL))))
+	if (WARN_ON(!(asyw = kzalloc_obj(*asyw, GFP_KERNEL))))
 		return;

 	if (plane->state)
@@ -863,7 +863,7 @@ nv50_wndw_new_(const struct nv50_wndw_func *func, struct drm_device *dev,
 	int nformat;
 	int ret;

-	if (!(wndw = *pwndw = kzalloc(sizeof(*wndw), GFP_KERNEL)))
+	if (!(wndw = *pwndw = kzalloc_obj(*wndw, GFP_KERNEL)))
 		return -ENOMEM;
 	wndw->func = func;
 	wndw->id = index;
diff --git a/drivers/gpu/drm/nouveau/nouveau_abi16.c b/drivers/gpu/drm/nouveau/nouveau_abi16.c
index a3ba07fc48a0..8c0cfab73f8f 100644
--- a/drivers/gpu/drm/nouveau/nouveau_abi16.c
+++ b/drivers/gpu/drm/nouveau/nouveau_abi16.c
@@ -44,7 +44,7 @@ nouveau_abi16(struct drm_file *file_priv)
 	struct nouveau_cli *cli = nouveau_cli(file_priv);
 	if (!cli->abi16) {
 		struct nouveau_abi16 *abi16;
-		cli->abi16 = abi16 = kzalloc(sizeof(*abi16), GFP_KERNEL);
+		cli->abi16 = abi16 = kzalloc_obj(*abi16, GFP_KERNEL);
 		if (cli->abi16) {
 			abi16->cli = cli;
 			INIT_LIST_HEAD(&abi16->channels);
@@ -124,7 +124,7 @@ nouveau_abi16_obj_new(struct nouveau_abi16 *abi16, enum nouveau_abi16_obj_type t
 	if (obj)
 		return ERR_PTR(-EEXIST);

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return ERR_PTR(-ENOMEM);

@@ -397,7 +397,7 @@ nouveau_abi16_ioctl_channel_alloc(ABI16_IOCTL_ARGS)
 		return nouveau_abi16_put(abi16, -EINVAL);

 	/* allocate "abi16 channel" data and make up a handle for it */
-	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
+	chan = kzalloc_obj(*chan, GFP_KERNEL);
 	if (!chan)
 		return nouveau_abi16_put(abi16, -ENOMEM);

@@ -597,7 +597,7 @@ nouveau_abi16_ioctl_grobj_alloc(ABI16_IOCTL_ARGS)
 	if (!oclass)
 		return nouveau_abi16_put(abi16, -EINVAL);

-	ntfy = kzalloc(sizeof(*ntfy), GFP_KERNEL);
+	ntfy = kzalloc_obj(*ntfy, GFP_KERNEL);
 	if (!ntfy)
 		return nouveau_abi16_put(abi16, -ENOMEM);

@@ -635,7 +635,7 @@ nouveau_abi16_ioctl_notifierobj_alloc(ABI16_IOCTL_ARGS)
 	if (!chan)
 		return nouveau_abi16_put(abi16, -ENOENT);

-	ntfy = kzalloc(sizeof(*ntfy), GFP_KERNEL);
+	ntfy = kzalloc_obj(*ntfy, GFP_KERNEL);
 	if (!ntfy)
 		return nouveau_abi16_put(abi16, -ENOMEM);

diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c
index 4a75d146a171..1ddc8d1817f6 100644
--- a/drivers/gpu/drm/nouveau/nouveau_backlight.c
+++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c
@@ -314,7 +314,7 @@ nouveau_backlight_init(struct drm_connector *connector)
 	if (!nv_encoder)
 		return 0;

-	bl = kzalloc(sizeof(*bl), GFP_KERNEL);
+	bl = kzalloc_obj(*bl, GFP_KERNEL);
 	if (!bl)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index f26562eafffc..710f0551e091 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -222,7 +222,7 @@ nouveau_bo_alloc(struct nouveau_cli *cli, u64 *size, int *align, u32 domain,
 		return ERR_PTR(-EINVAL);
 	}

-	nvbo = kzalloc(sizeof(struct nouveau_bo), GFP_KERNEL);
+	nvbo = kzalloc_obj(struct nouveau_bo, GFP_KERNEL);
 	if (!nvbo)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.c b/drivers/gpu/drm/nouveau/nouveau_chan.c
index b1e92b1f7a26..5b94aa9c1d9d 100644
--- a/drivers/gpu/drm/nouveau/nouveau_chan.c
+++ b/drivers/gpu/drm/nouveau/nouveau_chan.c
@@ -149,7 +149,7 @@ nouveau_channel_prep(struct nouveau_cli *cli,
 	u32 target;
 	int ret;

-	chan = *pchan = kzalloc(sizeof(*chan), GFP_KERNEL);
+	chan = *pchan = kzalloc_obj(*chan, GFP_KERNEL);
 	if (!chan)
 		return -ENOMEM;

@@ -545,7 +545,7 @@ nouveau_channels_init(struct nouveau_drm *drm)

 	drm->chan_nr = drm->chan_total = channels->data;
 	drm->runl_nr = fls64(runlists->data);
-	drm->runl = kcalloc(drm->runl_nr, sizeof(*drm->runl), GFP_KERNEL);
+	drm->runl = kzalloc_objs(*drm->runl, drm->runl_nr, GFP_KERNEL);
 	if (!drm->runl)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index 63621b1510f6..a8250d04eaf4 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -232,7 +232,7 @@ nouveau_conn_atomic_duplicate_state(struct drm_connector *connector)
 {
 	struct nouveau_conn_atom *armc = nouveau_conn_atom(connector->state);
 	struct nouveau_conn_atom *asyc;
-	if (!(asyc = kmalloc(sizeof(*asyc), GFP_KERNEL)))
+	if (!(asyc = kmalloc_obj(*asyc, GFP_KERNEL)))
 		return NULL;
 	__drm_atomic_helper_connector_duplicate_state(connector, &asyc->state);
 	asyc->dither = armc->dither;
@@ -249,7 +249,7 @@ nouveau_conn_reset(struct drm_connector *connector)
 	struct nouveau_conn_atom *asyc;

 	if (drm_drv_uses_atomic_modeset(connector->dev)) {
-		if (WARN_ON(!(asyc = kzalloc(sizeof(*asyc), GFP_KERNEL))))
+		if (WARN_ON(!(asyc = kzalloc_obj(*asyc, GFP_KERNEL))))
 			return;

 		if (connector->state)
@@ -1298,7 +1298,7 @@ nouveau_connector_create(struct drm_device *dev, int index)
 	}
 	drm_connector_list_iter_end(&conn_iter);

-	nv_connector = kzalloc(sizeof(*nv_connector), GFP_KERNEL);
+	nv_connector = kzalloc_obj(*nv_connector, GFP_KERNEL);
 	if (!nv_connector)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
index c7869a639bef..cb7c77f5a9a8 100644
--- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c
+++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
@@ -295,7 +295,7 @@ nouveau_drm_debugfs_init(struct drm_minor *minor)
 int
 nouveau_debugfs_init(struct nouveau_drm *drm)
 {
-	drm->debugfs = kzalloc(sizeof(*drm->debugfs), GFP_KERNEL);
+	drm->debugfs = kzalloc_obj(*drm->debugfs, GFP_KERNEL);
 	if (!drm->debugfs)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
index 00515623a2cc..ff51329c5565 100644
--- a/drivers/gpu/drm/nouveau/nouveau_display.c
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
@@ -316,7 +316,7 @@ nouveau_framebuffer_new(struct drm_device *dev,
 		}
 	}

-	if (!(fb = *pfb = kzalloc(sizeof(*fb), GFP_KERNEL)))
+	if (!(fb = *pfb = kzalloc_obj(*fb, GFP_KERNEL)))
 		return -ENOMEM;

 	drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd);
@@ -646,7 +646,7 @@ nouveau_display_create(struct drm_device *dev)
 	struct nouveau_display *disp;
 	int ret;

-	disp = drm->display = kzalloc(sizeof(*disp), GFP_KERNEL);
+	disp = drm->display = kzalloc_obj(*disp, GFP_KERNEL);
 	if (!disp)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nouveau_dmem.c b/drivers/gpu/drm/nouveau/nouveau_dmem.c
index 3d8031296eed..dbc87f8e64f9 100644
--- a/drivers/gpu/drm/nouveau/nouveau_dmem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_dmem.c
@@ -303,7 +303,7 @@ nouveau_dmem_chunk_alloc(struct nouveau_drm *drm, struct page **ppage,
 	unsigned long i, pfn_first, pfn;
 	int ret;

-	chunk = kzalloc(sizeof(*chunk), GFP_KERNEL);
+	chunk = kzalloc_obj(*chunk, GFP_KERNEL);
 	if (chunk == NULL) {
 		ret = -ENOMEM;
 		goto out;
@@ -481,7 +481,7 @@ nouveau_dmem_evict_chunk(struct nouveau_dmem_chunk *chunk)

 	src_pfns = kvcalloc(npages, sizeof(*src_pfns), GFP_KERNEL | __GFP_NOFAIL);
 	dst_pfns = kvcalloc(npages, sizeof(*dst_pfns), GFP_KERNEL | __GFP_NOFAIL);
-	dma_info = kvcalloc(npages, sizeof(*dma_info), GFP_KERNEL | __GFP_NOFAIL);
+	dma_info = kvzalloc_objs(*dma_info, npages, GFP_KERNEL | __GFP_NOFAIL);

 	migrate_device_range(src_pfns, chunk->pagemap.range.start >> PAGE_SHIFT,
 			npages);
@@ -707,7 +707,7 @@ nouveau_dmem_init(struct nouveau_drm *drm)
 	if (drm->client.device.info.family < NV_DEVICE_INFO_V0_PASCAL)
 		return;

-	if (!(drm->dmem = kzalloc(sizeof(*drm->dmem), GFP_KERNEL)))
+	if (!(drm->dmem = kzalloc_obj(*drm->dmem, GFP_KERNEL)))
 		return;

 	drm->dmem->drm = drm;
@@ -855,7 +855,7 @@ nouveau_dmem_migrate_vma(struct nouveau_drm *drm,
 	if (!args.dst)
 		goto out_free_src;

-	dma_info = kmalloc_array(max, sizeof(*dma_info), GFP_KERNEL);
+	dma_info = kmalloc_objs(*dma_info, max, GFP_KERNEL);
 	if (!dma_info)
 		goto out_free_dst;

diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index dc469e571c0a..f5cfac289983 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -739,7 +739,7 @@ nouveau_drm_device_new(const struct drm_driver *drm_driver, struct device *paren
 	struct nouveau_drm *drm;
 	int ret;

-	drm = kzalloc(sizeof(*drm), GFP_KERNEL);
+	drm = kzalloc_obj(*drm, GFP_KERNEL);
 	if (!drm)
 		return ERR_PTR(-ENOMEM);

@@ -1203,7 +1203,7 @@ nouveau_drm_open(struct drm_device *dev, struct drm_file *fpriv)
 		 current->comm, pid_nr(rcu_dereference(fpriv->pid)));
 	rcu_read_unlock();

-	if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) {
+	if (!(cli = kzalloc_obj(*cli, GFP_KERNEL))) {
 		ret = -ENOMEM;
 		goto done;
 	}
diff --git a/drivers/gpu/drm/nouveau/nouveau_exec.c b/drivers/gpu/drm/nouveau/nouveau_exec.c
index c4949e815eb3..b0522e97ebb3 100644
--- a/drivers/gpu/drm/nouveau/nouveau_exec.c
+++ b/drivers/gpu/drm/nouveau/nouveau_exec.c
@@ -219,7 +219,7 @@ nouveau_exec_job_init(struct nouveau_exec_job **pjob,
 		}
 	}

-	job = *pjob = kzalloc(sizeof(*job), GFP_KERNEL);
+	job = *pjob = kzalloc_obj(*job, GFP_KERNEL);
 	if (!job)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c b/drivers/gpu/drm/nouveau/nouveau_fence.c
index 4a193b7d6d9e..6af37c49913f 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fence.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fence.c
@@ -408,7 +408,7 @@ nouveau_fence_create(struct nouveau_fence **pfence,
 	if (unlikely(!chan->fence))
 		return -ENODEV;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
index 395d92ab6271..2ef7cb01a0c9 100644
--- a/drivers/gpu/drm/nouveau/nouveau_gem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
@@ -168,7 +168,7 @@ nouveau_gem_object_unmap(struct nouveau_bo *nvbo, struct nouveau_vma *vma)
 		return;
 	}

-	if (!(work = kmalloc(sizeof(*work), GFP_KERNEL))) {
+	if (!(work = kmalloc_obj(*work, GFP_KERNEL))) {
 		WARN_ON(dma_fence_wait_timeout(fence, false, 2 * HZ) <= 0);
 		nouveau_gem_object_delete(vma);
 		return;
diff --git a/drivers/gpu/drm/nouveau/nouveau_hwmon.c b/drivers/gpu/drm/nouveau/nouveau_hwmon.c
index 34effe6d86ad..a0f018380744 100644
--- a/drivers/gpu/drm/nouveau/nouveau_hwmon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_hwmon.c
@@ -678,7 +678,7 @@ nouveau_hwmon_init(struct drm_device *dev)
 		return 0;
 	}

-	hwmon = drm->hwmon = kzalloc(sizeof(*hwmon), GFP_KERNEL);
+	hwmon = drm->hwmon = kzalloc_obj(*hwmon, GFP_KERNEL);
 	if (!hwmon)
 		return -ENOMEM;
 	hwmon->dev = dev;
diff --git a/drivers/gpu/drm/nouveau/nouveau_led.c b/drivers/gpu/drm/nouveau/nouveau_led.c
index ac950518a820..87397fe57021 100644
--- a/drivers/gpu/drm/nouveau/nouveau_led.c
+++ b/drivers/gpu/drm/nouveau/nouveau_led.c
@@ -89,7 +89,7 @@ nouveau_led_init(struct drm_device *dev)
 	if (nvkm_gpio_find(gpio, 0, DCB_GPIO_LOGO_LED_PWM, 0xff, &logo_led))
 		return 0;

-	drm->led = kzalloc(sizeof(*drm->led), GFP_KERNEL);
+	drm->led = kzalloc_obj(*drm->led, GFP_KERNEL);
 	if (!drm->led)
 		return -ENOMEM;
 	drm->led->dev = dev;
diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.c b/drivers/gpu/drm/nouveau/nouveau_mem.c
index fac92fdbf9cc..b370158ba3f7 100644
--- a/drivers/gpu/drm/nouveau/nouveau_mem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_mem.c
@@ -176,7 +176,7 @@ nouveau_mem_new(struct nouveau_drm *drm, u8 kind, u8 comp,
 {
 	struct nouveau_mem *mem;

-	if (!(mem = kzalloc(sizeof(*mem), GFP_KERNEL)))
+	if (!(mem = kzalloc_obj(*mem, GFP_KERNEL)))
 		return -ENOMEM;

 	mem->drm = drm;
diff --git a/drivers/gpu/drm/nouveau/nouveau_sched.c b/drivers/gpu/drm/nouveau/nouveau_sched.c
index a7bf539e5d86..402ef5e95ad7 100644
--- a/drivers/gpu/drm/nouveau/nouveau_sched.c
+++ b/drivers/gpu/drm/nouveau/nouveau_sched.c
@@ -69,17 +69,17 @@ nouveau_job_init(struct nouveau_job *job,
 			goto err_free_in_sync;
 		}

-		job->out_sync.objs = kcalloc(job->out_sync.count,
-					     sizeof(*job->out_sync.objs),
-					     GFP_KERNEL);
+		job->out_sync.objs = kzalloc_objs(*job->out_sync.objs,
+						  job->out_sync.count,
+						  GFP_KERNEL);
 		if (!job->out_sync.objs) {
 			ret = -ENOMEM;
 			goto err_free_out_sync;
 		}

-		job->out_sync.chains = kcalloc(job->out_sync.count,
-					       sizeof(*job->out_sync.chains),
-					       GFP_KERNEL);
+		job->out_sync.chains = kzalloc_objs(*job->out_sync.chains,
+						    job->out_sync.count,
+						    GFP_KERNEL);
 		if (!job->out_sync.chains) {
 			ret = -ENOMEM;
 			goto err_free_objs;
@@ -467,7 +467,7 @@ nouveau_sched_create(struct nouveau_sched **psched, struct nouveau_drm *drm,
 	struct nouveau_sched *sched;
 	int ret;

-	sched = kzalloc(sizeof(*sched), GFP_KERNEL);
+	sched = kzalloc_obj(*sched, GFP_KERNEL);
 	if (!sched)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
index bd870028514b..a22483f68a7c 100644
--- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c
+++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
@@ -79,7 +79,7 @@ nouveau_sgdma_create_ttm(struct ttm_buffer_object *bo, uint32_t page_flags)
 	else
 		caching = ttm_cached;

-	nvbe = kzalloc(sizeof(*nvbe), GFP_KERNEL);
+	nvbe = kzalloc_obj(*nvbe, GFP_KERNEL);
 	if (!nvbe)
 		return NULL;

diff --git a/drivers/gpu/drm/nouveau/nouveau_svm.c b/drivers/gpu/drm/nouveau/nouveau_svm.c
index b8a3378154d5..947601a8955b 100644
--- a/drivers/gpu/drm/nouveau/nouveau_svm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_svm.c
@@ -223,7 +223,7 @@ nouveau_svmm_join(struct nouveau_svmm *svmm, u64 inst)
 {
 	struct nouveau_ivmm *ivmm;
 	if (svmm) {
-		if (!(ivmm = kmalloc(sizeof(*ivmm), GFP_KERNEL)))
+		if (!(ivmm = kmalloc_obj(*ivmm, GFP_KERNEL)))
 			return -ENOMEM;
 		ivmm->svmm = svmm;
 		ivmm->inst = inst;
@@ -326,7 +326,7 @@ nouveau_svmm_init(struct drm_device *dev, void *data,
 		return -ENOSYS;

 	/* Allocate tracking for SVM-enabled VMM. */
-	if (!(svmm = kzalloc(sizeof(*svmm), GFP_KERNEL)))
+	if (!(svmm = kzalloc_obj(*svmm, GFP_KERNEL)))
 		return -ENOMEM;
 	svmm->vmm = &cli->svm;
 	svmm->unmanaged.start = args->unmanaged_addr;
@@ -475,7 +475,7 @@ nouveau_svm_fault_cache(struct nouveau_svm *svm,
 	nvif_mask(memory, offset + 0x1c, 0x80000000, 0x00000000);

 	if (!buffer->fault[buffer->fault_nr]) {
-		fault = kmalloc(sizeof(*fault), GFP_KERNEL);
+		fault = kmalloc_obj(*fault, GFP_KERNEL);
 		if (WARN_ON(!fault)) {
 			nouveau_svm_fault_cancel(svm, inst, hub, gpc, client);
 			return;
@@ -900,7 +900,7 @@ nouveau_pfns_alloc(unsigned long npages)
 {
 	struct nouveau_pfnmap_args *args;

-	args = kzalloc(struct_size(args, p.phys, npages), GFP_KERNEL);
+	args = kzalloc_flex(*args, p.phys, npages, GFP_KERNEL);
 	if (!args)
 		return NULL;

@@ -1010,7 +1010,8 @@ nouveau_svm_fault_buffer_ctor(struct nouveau_svm *svm, s32 oclass, int id)
 	if (ret)
 		return ret;

-	buffer->fault = kvcalloc(buffer->entries, sizeof(*buffer->fault), GFP_KERNEL);
+	buffer->fault = kvzalloc_objs(*buffer->fault, buffer->entries,
+				      GFP_KERNEL);
 	if (!buffer->fault)
 		return -ENOMEM;

@@ -1062,7 +1063,7 @@ nouveau_svm_init(struct nouveau_drm *drm)
 	if (drm->client.device.info.family > NV_DEVICE_INFO_V0_PASCAL)
 		return;

-	drm->svm = svm = kzalloc(struct_size(drm->svm, buffer, 1), GFP_KERNEL);
+	drm->svm = svm = kzalloc_flex(*drm->svm, buffer, 1, GFP_KERNEL);
 	if (!drm->svm)
 		return;

diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
index 0a55babdf667..89216d0a8e7e 100644
--- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
@@ -181,7 +181,7 @@ static int
 nouveau_ttm_init_vram(struct nouveau_drm *drm)
 {
 	if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA) {
-		struct ttm_resource_manager *man = kzalloc(sizeof(*man), GFP_KERNEL);
+		struct ttm_resource_manager *man = kzalloc_obj(*man, GFP_KERNEL);

 		if (!man)
 			return -ENOMEM;
@@ -229,7 +229,7 @@ nouveau_ttm_init_gtt(struct nouveau_drm *drm)
 		return ttm_range_man_init(&drm->ttm.bdev, TTM_PL_TT, true,
 					  size_pages);

-	man = kzalloc(sizeof(*man), GFP_KERNEL);
+	man = kzalloc_obj(*man, GFP_KERNEL);
 	if (!man)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nouveau_uvmm.c b/drivers/gpu/drm/nouveau/nouveau_uvmm.c
index 0d693760d222..caa26db2b04b 100644
--- a/drivers/gpu/drm/nouveau/nouveau_uvmm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_uvmm.c
@@ -218,7 +218,7 @@ nouveau_uvma_unmap(struct nouveau_uvma *uvma)
 static int
 nouveau_uvma_alloc(struct nouveau_uvma **puvma)
 {
-	*puvma = kzalloc(sizeof(**puvma), GFP_KERNEL);
+	*puvma = kzalloc_obj(**puvma, GFP_KERNEL);
 	if (!*puvma)
 		return -ENOMEM;

@@ -246,7 +246,7 @@ nouveau_uvma_gem_put(struct nouveau_uvma *uvma)
 static int
 nouveau_uvma_region_alloc(struct nouveau_uvma_region **preg)
 {
-	*preg = kzalloc(sizeof(**preg), GFP_KERNEL);
+	*preg = kzalloc_obj(**preg, GFP_KERNEL);
 	if (!*preg)
 		return -ENOMEM;

@@ -1020,7 +1020,7 @@ nouveau_uvmm_validate_range(struct nouveau_uvmm *uvmm, u64 addr, u64 range)
 static int
 nouveau_uvmm_bind_job_alloc(struct nouveau_uvmm_bind_job **pjob)
 {
-	*pjob = kzalloc(sizeof(**pjob), GFP_KERNEL);
+	*pjob = kzalloc_obj(**pjob, GFP_KERNEL);
 	if (!*pjob)
 		return -ENOMEM;

@@ -1618,7 +1618,7 @@ bind_job_op_from_uop(struct bind_job_op **pop,
 {
 	struct bind_job_op *op;

-	op = *pop = kzalloc(sizeof(*op), GFP_KERNEL);
+	op = *pop = kzalloc_obj(*op, GFP_KERNEL);
 	if (!op)
 		return -ENOMEM;

@@ -1911,7 +1911,7 @@ nouveau_uvmm_ioctl_vm_init(struct drm_device *dev,
 		goto out_unlock;
 	}

-	uvmm = kzalloc(sizeof(*uvmm), GFP_KERNEL);
+	uvmm = kzalloc_obj(*uvmm, GFP_KERNEL);
 	if (!uvmm) {
 		ret = -ENOMEM;
 		goto out_unlock;
diff --git a/drivers/gpu/drm/nouveau/nouveau_vmm.c b/drivers/gpu/drm/nouveau/nouveau_vmm.c
index 3dda885df5b2..a5e8efc3042c 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vmm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vmm.c
@@ -87,7 +87,7 @@ nouveau_vma_new(struct nouveau_bo *nvbo, struct nouveau_vmm *vmm,
 		return 0;
 	}

-	if (!(vma = *pvma = kmalloc(sizeof(*vma), GFP_KERNEL)))
+	if (!(vma = *pvma = kmalloc_obj(*vma, GFP_KERNEL)))
 		return -ENOMEM;
 	vma->vmm = vmm;
 	vma->refs = 1;
diff --git a/drivers/gpu/drm/nouveau/nv04_fence.c b/drivers/gpu/drm/nouveau/nv04_fence.c
index fa5c6029f783..7fa9eede7c5d 100644
--- a/drivers/gpu/drm/nouveau/nv04_fence.c
+++ b/drivers/gpu/drm/nouveau/nv04_fence.c
@@ -76,7 +76,7 @@ nv04_fence_context_del(struct nouveau_channel *chan)
 static int
 nv04_fence_context_new(struct nouveau_channel *chan)
 {
-	struct nv04_fence_chan *fctx = kzalloc(sizeof(*fctx), GFP_KERNEL);
+	struct nv04_fence_chan *fctx = kzalloc_obj(*fctx, GFP_KERNEL);
 	if (fctx) {
 		nouveau_fence_context_new(chan, &fctx->base);
 		fctx->base.emit = nv04_fence_emit;
@@ -101,7 +101,7 @@ nv04_fence_create(struct nouveau_drm *drm)
 {
 	struct nv04_fence_priv *priv;

-	priv = drm->fence = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = drm->fence = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nv10_fence.c b/drivers/gpu/drm/nouveau/nv10_fence.c
index 40ee95340814..0f859251d9db 100644
--- a/drivers/gpu/drm/nouveau/nv10_fence.c
+++ b/drivers/gpu/drm/nouveau/nv10_fence.c
@@ -70,7 +70,7 @@ nv10_fence_context_new(struct nouveau_channel *chan)
 {
 	struct nv10_fence_chan *fctx;

-	fctx = chan->fence = kzalloc(sizeof(*fctx), GFP_KERNEL);
+	fctx = chan->fence = kzalloc_obj(*fctx, GFP_KERNEL);
 	if (!fctx)
 		return -ENOMEM;

@@ -96,7 +96,7 @@ nv10_fence_create(struct nouveau_drm *drm)
 {
 	struct nv10_fence_priv *priv;

-	priv = drm->fence = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = drm->fence = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nv17_fence.c b/drivers/gpu/drm/nouveau/nv17_fence.c
index 1b0c0aa3c305..56682cb03d81 100644
--- a/drivers/gpu/drm/nouveau/nv17_fence.c
+++ b/drivers/gpu/drm/nouveau/nv17_fence.c
@@ -83,7 +83,7 @@ nv17_fence_context_new(struct nouveau_channel *chan)
 	u32 limit = start + priv->bo->bo.base.size - 1;
 	int ret = 0;

-	fctx = chan->fence = kzalloc(sizeof(*fctx), GFP_KERNEL);
+	fctx = chan->fence = kzalloc_obj(*fctx, GFP_KERNEL);
 	if (!fctx)
 		return -ENOMEM;

@@ -120,7 +120,7 @@ nv17_fence_create(struct nouveau_drm *drm)
 	struct nv10_fence_priv *priv;
 	int ret = 0;

-	priv = drm->fence = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = drm->fence = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nv50_fence.c b/drivers/gpu/drm/nouveau/nv50_fence.c
index e1f0e8adf313..d64c070fe48b 100644
--- a/drivers/gpu/drm/nouveau/nv50_fence.c
+++ b/drivers/gpu/drm/nouveau/nv50_fence.c
@@ -42,7 +42,7 @@ nv50_fence_context_new(struct nouveau_channel *chan)
 	u32 limit = start + priv->bo->bo.base.size - 1;
 	int ret;

-	fctx = chan->fence = kzalloc(sizeof(*fctx), GFP_KERNEL);
+	fctx = chan->fence = kzalloc_obj(*fctx, GFP_KERNEL);
 	if (!fctx)
 		return -ENOMEM;

@@ -71,7 +71,7 @@ nv50_fence_create(struct nouveau_drm *drm)
 	struct nv10_fence_priv *priv;
 	int ret = 0;

-	priv = drm->fence = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = drm->fence = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nv84_fence.c b/drivers/gpu/drm/nouveau/nv84_fence.c
index 1765b2cedaf9..7a2ad00870af 100644
--- a/drivers/gpu/drm/nouveau/nv84_fence.c
+++ b/drivers/gpu/drm/nouveau/nv84_fence.c
@@ -131,7 +131,7 @@ nv84_fence_context_new(struct nouveau_channel *chan)
 	struct nv84_fence_chan *fctx;
 	int ret;

-	fctx = chan->fence = kzalloc(sizeof(*fctx), GFP_KERNEL);
+	fctx = chan->fence = kzalloc_obj(*fctx, GFP_KERNEL);
 	if (!fctx)
 		return -ENOMEM;

@@ -198,7 +198,7 @@ nv84_fence_create(struct nouveau_drm *drm)
 	u32 domain;
 	int ret;

-	priv = drm->fence = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = drm->fence = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvif/fifo.c b/drivers/gpu/drm/nouveau/nvif/fifo.c
index b0ab80995d98..b42fc34cb5ce 100644
--- a/drivers/gpu/drm/nouveau/nvif/fifo.c
+++ b/drivers/gpu/drm/nouveau/nvif/fifo.c
@@ -36,7 +36,7 @@ nvif_fifo_runlists(struct nvif_device *device)
 	if (device->runlist)
 		return 0;

-	if (!(a = kmalloc(sizeof(*a), GFP_KERNEL)))
+	if (!(a = kmalloc_obj(*a, GFP_KERNEL)))
 		return -ENOMEM;
 	a->m.version = 1;
 	a->m.count = sizeof(a->v) / sizeof(a->v.runlists);
@@ -51,8 +51,8 @@ nvif_fifo_runlists(struct nvif_device *device)
 		goto done;

 	device->runlists = fls64(a->v.runlists.data);
-	device->runlist = kcalloc(device->runlists, sizeof(*device->runlist),
-				  GFP_KERNEL);
+	device->runlist = kzalloc_objs(*device->runlist, device->runlists,
+				       GFP_KERNEL);
 	if (!device->runlist) {
 		ret = -ENOMEM;
 		goto done;
diff --git a/drivers/gpu/drm/nouveau/nvif/mmu.c b/drivers/gpu/drm/nouveau/nvif/mmu.c
index c9dd3cff49a0..eaa96608a264 100644
--- a/drivers/gpu/drm/nouveau/nvif/mmu.c
+++ b/drivers/gpu/drm/nouveau/nvif/mmu.c
@@ -69,15 +69,12 @@ nvif_mmu_ctor(struct nvif_object *parent, const char *name, s32 oclass,
 		goto done;
 	mmu->mem = mems[ret].oclass;

-	mmu->heap = kmalloc_array(mmu->heap_nr, sizeof(*mmu->heap),
-				  GFP_KERNEL);
-	mmu->type = kmalloc_array(mmu->type_nr, sizeof(*mmu->type),
-				  GFP_KERNEL);
+	mmu->heap = kmalloc_objs(*mmu->heap, mmu->heap_nr, GFP_KERNEL);
+	mmu->type = kmalloc_objs(*mmu->type, mmu->type_nr, GFP_KERNEL);
 	if (ret = -ENOMEM, !mmu->heap || !mmu->type)
 		goto done;

-	mmu->kind = kmalloc_array(mmu->kind_nr, sizeof(*mmu->kind),
-				  GFP_KERNEL);
+	mmu->kind = kmalloc_objs(*mmu->kind, mmu->kind_nr, GFP_KERNEL);
 	if (!mmu->kind && mmu->kind_nr)
 		goto done;

diff --git a/drivers/gpu/drm/nouveau/nvif/object.c b/drivers/gpu/drm/nouveau/nvif/object.c
index 70af63d70976..93ad63f9021f 100644
--- a/drivers/gpu/drm/nouveau/nvif/object.c
+++ b/drivers/gpu/drm/nouveau/nvif/object.c
@@ -81,7 +81,7 @@ nvif_object_sclass_get(struct nvif_object *object, struct nvif_sclass **psclass)
 			return ret;
 	}

-	*psclass = kcalloc(args->sclass.count, sizeof(**psclass), GFP_KERNEL);
+	*psclass = kzalloc_objs(**psclass, args->sclass.count, GFP_KERNEL);
 	if (*psclass) {
 		for (i = 0; i < args->sclass.count; i++) {
 			(*psclass)[i].oclass = args->sclass.oclass[i].oclass;
diff --git a/drivers/gpu/drm/nouveau/nvif/outp.c b/drivers/gpu/drm/nouveau/nvif/outp.c
index 32f6c5eb92af..567cacc04989 100644
--- a/drivers/gpu/drm/nouveau/nvif/outp.c
+++ b/drivers/gpu/drm/nouveau/nvif/outp.c
@@ -438,7 +438,7 @@ nvif_outp_edid_get(struct nvif_outp *outp, u8 **pedid)
 	struct nvif_outp_edid_get_v0 *args;
 	int ret;

-	args = kmalloc(sizeof(*args), GFP_KERNEL);
+	args = kmalloc_obj(*args, GFP_KERNEL);
 	if (!args)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvif/vmm.c b/drivers/gpu/drm/nouveau/nvif/vmm.c
index 07c1ebc2a941..15e5f423c680 100644
--- a/drivers/gpu/drm/nouveau/nvif/vmm.c
+++ b/drivers/gpu/drm/nouveau/nvif/vmm.c
@@ -234,8 +234,7 @@ nvif_vmm_ctor(struct nvif_mmu *mmu, const char *name, s32 oclass,
 	vmm->limit = args->size;

 	vmm->page_nr = args->page_nr;
-	vmm->page = kmalloc_array(vmm->page_nr, sizeof(*vmm->page),
-				  GFP_KERNEL);
+	vmm->page = kmalloc_objs(*vmm->page, vmm->page_nr, GFP_KERNEL);
 	if (!vmm->page) {
 		ret = -ENOMEM;
 		goto done;
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/client.c b/drivers/gpu/drm/nouveau/nvkm/core/client.c
index 72c88db627a5..637fa5f89dc7 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/client.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/client.c
@@ -109,7 +109,7 @@ nvkm_client_new(const char *name, u64 device, const char *cfg, const char *dbg,
 	struct nvkm_oclass oclass = { .base = nvkm_uclient_sclass };
 	struct nvkm_client *client;

-	if (!(client = *pclient = kzalloc(sizeof(*client), GFP_KERNEL)))
+	if (!(client = *pclient = kzalloc_obj(*client, GFP_KERNEL)))
 		return -ENOMEM;
 	oclass.client = client;

diff --git a/drivers/gpu/drm/nouveau/nvkm/core/engine.c b/drivers/gpu/drm/nouveau/nvkm/core/engine.c
index 5bf62940d7be..1b94e0aa0f28 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/engine.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/engine.c
@@ -183,7 +183,7 @@ nvkm_engine_new_(const struct nvkm_engine_func *func, struct nvkm_device *device
 		 enum nvkm_subdev_type type, int inst, bool enable,
 		 struct nvkm_engine **pengine)
 {
-	if (!(*pengine = kzalloc(sizeof(**pengine), GFP_KERNEL)))
+	if (!(*pengine = kzalloc_obj(**pengine, GFP_KERNEL)))
 		return -ENOMEM;
 	return nvkm_engine_ctor(func, device, type, inst, enable, *pengine);
 }
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/gpuobj.c b/drivers/gpu/drm/nouveau/nvkm/core/gpuobj.c
index d6de2b3ed2c3..a81eddf777ba 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/gpuobj.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/gpuobj.c
@@ -232,7 +232,7 @@ nvkm_gpuobj_new(struct nvkm_device *device, u32 size, int align, bool zero,
 	struct nvkm_gpuobj *gpuobj;
 	int ret;

-	if (!(gpuobj = *pgpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL)))
+	if (!(gpuobj = *pgpuobj = kzalloc_obj(*gpuobj, GFP_KERNEL)))
 		return -ENOMEM;

 	ret = nvkm_gpuobj_ctor(device, size, align, zero, parent, gpuobj);
@@ -249,7 +249,7 @@ nvkm_gpuobj_new(struct nvkm_device *device, u32 size, int align, bool zero,
 int
 nvkm_gpuobj_wrap(struct nvkm_memory *memory, struct nvkm_gpuobj **pgpuobj)
 {
-	if (!(*pgpuobj = kzalloc(sizeof(**pgpuobj), GFP_KERNEL)))
+	if (!(*pgpuobj = kzalloc_obj(**pgpuobj, GFP_KERNEL)))
 		return -ENOMEM;

 	(*pgpuobj)->addr = nvkm_memory_addr(memory);
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/intr.c b/drivers/gpu/drm/nouveau/nvkm/core/intr.c
index 36a747f0039e..a58de178cdf6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/intr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/intr.c
@@ -239,8 +239,8 @@ nvkm_intr_add(const struct nvkm_intr_func *func, const struct nvkm_intr_data *da
 	intr->data = data;
 	intr->subdev = subdev;
 	intr->leaves = leaves;
-	intr->stat = kcalloc(leaves, sizeof(*intr->stat), GFP_KERNEL);
-	intr->mask = kcalloc(leaves, sizeof(*intr->mask), GFP_KERNEL);
+	intr->stat = kzalloc_objs(*intr->stat, leaves, GFP_KERNEL);
+	intr->mask = kzalloc_objs(*intr->mask, leaves, GFP_KERNEL);
 	if (!intr->stat || !intr->mask) {
 		kfree(intr->stat);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/memory.c b/drivers/gpu/drm/nouveau/nvkm/core/memory.c
index a705c2dfca80..bf69467e44da 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/memory.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/memory.c
@@ -69,7 +69,7 @@ nvkm_memory_tags_get(struct nvkm_memory *memory, struct nvkm_device *device,
 		return 0;
 	}

-	if (!(tags = kmalloc(sizeof(*tags), GFP_KERNEL))) {
+	if (!(tags = kmalloc_obj(*tags, GFP_KERNEL))) {
 		mutex_unlock(&fb->tags.mutex);
 		return -ENOMEM;
 	}
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/mm.c b/drivers/gpu/drm/nouveau/nvkm/core/mm.c
index f78a06a6b2f1..bd47502d82ae 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/mm.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/mm.c
@@ -90,7 +90,7 @@ region_head(struct nvkm_mm *mm, struct nvkm_mm_node *a, u32 size)
 	if (a->length == size)
 		return a;

-	b = kmalloc(sizeof(*b), GFP_KERNEL);
+	b = kmalloc_obj(*b, GFP_KERNEL);
 	if (unlikely(b == NULL))
 		return NULL;

@@ -165,7 +165,7 @@ region_tail(struct nvkm_mm *mm, struct nvkm_mm_node *a, u32 size)
 	if (a->length == size)
 		return a;

-	b = kmalloc(sizeof(*b), GFP_KERNEL);
+	b = kmalloc_obj(*b, GFP_KERNEL);
 	if (unlikely(b == NULL))
 		return NULL;

@@ -247,7 +247,7 @@ nvkm_mm_init(struct nvkm_mm *mm, u8 heap, u32 offset, u32 length, u32 block)
 		next = prev->offset + prev->length;
 		if (next != offset) {
 			BUG_ON(next > offset);
-			if (!(node = kzalloc(sizeof(*node), GFP_KERNEL)))
+			if (!(node = kzalloc_obj(*node, GFP_KERNEL)))
 				return -ENOMEM;
 			node->type   = NVKM_MM_TYPE_HOLE;
 			node->offset = next;
@@ -262,7 +262,7 @@ nvkm_mm_init(struct nvkm_mm *mm, u8 heap, u32 offset, u32 length, u32 block)
 		mm->heap_nodes = 0;
 	}

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/core/object.c b/drivers/gpu/drm/nouveau/nvkm/core/object.c
index af9f00f74c28..6e84cf72bfc8 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/object.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/object.c
@@ -290,7 +290,7 @@ nvkm_object_new_(const struct nvkm_object_func *func,
 		 struct nvkm_object **pobject)
 {
 	if (size == 0) {
-		if (!(*pobject = kzalloc(sizeof(**pobject), GFP_KERNEL)))
+		if (!(*pobject = kzalloc_obj(**pobject, GFP_KERNEL)))
 			return -ENOMEM;
 		nvkm_object_ctor(func, oclass, *pobject);
 		return 0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/oproxy.c b/drivers/gpu/drm/nouveau/nvkm/core/oproxy.c
index 7c9edf752768..bfa9821b3ac4 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/oproxy.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/oproxy.c
@@ -178,7 +178,7 @@ int
 nvkm_oproxy_new_(const struct nvkm_oproxy_func *func,
 		 const struct nvkm_oclass *oclass, struct nvkm_oproxy **poproxy)
 {
-	if (!(*poproxy = kzalloc(sizeof(**poproxy), GFP_KERNEL)))
+	if (!(*poproxy = kzalloc_obj(**poproxy, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_oproxy_ctor(func, oclass, *poproxy);
 	return 0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c
index b7045d1c8415..97f5db788ba6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c
@@ -280,7 +280,7 @@ int
 nvkm_subdev_new_(const struct nvkm_subdev_func *func, struct nvkm_device *device,
 		 enum nvkm_subdev_type type, int inst, struct nvkm_subdev **psubdev)
 {
-	if (!(*psubdev = kzalloc(sizeof(**psubdev), GFP_KERNEL)))
+	if (!(*psubdev = kzalloc_obj(**psubdev, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_subdev_ctor(func, device, type, inst, *psubdev);
 	return 0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/uevent.c b/drivers/gpu/drm/nouveau/nvkm/core/uevent.c
index 46beb6e470ee..5295b2b920e6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/uevent.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/uevent.c
@@ -144,7 +144,7 @@ nvkm_uevent_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 	if (argc < sizeof(args->v0) || args->v0.version != 0)
 		return -ENOSYS;

-	if (!(uevent = kzalloc(sizeof(*uevent), GFP_KERNEL)))
+	if (!(uevent = kzalloc_obj(*uevent, GFP_KERNEL)))
 		return -ENOMEM;
 	*pobject = &uevent->object;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c
index ce774579c89d..4d09157fd7c0 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c
@@ -194,7 +194,7 @@ nvkm_control_new(struct nvkm_device *device, const struct nvkm_oclass *oclass,
 {
 	struct nvkm_control *ctrl;

-	if (!(ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL)))
+	if (!(ctrl = kzalloc_obj(*ctrl, GFP_KERNEL)))
 		return -ENOMEM;
 	*pobject = &ctrl->object;
 	ctrl->device = device;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
index 4c29b60460d4..1e7b4a455049 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
@@ -1688,7 +1688,7 @@ nvkm_device_pci_new(struct pci_dev *pci_dev, const char *cfg, const char *dbg,
 		pcid++;
 	}

-	if (!(pdev = kzalloc(sizeof(*pdev), GFP_KERNEL))) {
+	if (!(pdev = kzalloc_obj(*pdev, GFP_KERNEL))) {
 		pci_disable_device(pci_dev);
 		return -ENOMEM;
 	}
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
index 03aa6f09ec89..d49d92fa4648 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
@@ -253,7 +253,7 @@ nvkm_device_tegra_new(const struct nvkm_device_tegra_func *func,
 	unsigned long rate;
 	int ret;

-	if (!(tdev = kzalloc(sizeof(*tdev), GFP_KERNEL)))
+	if (!(tdev = kzalloc_obj(*tdev, GFP_KERNEL)))
 		return -ENOMEM;

 	tdev->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c
index 32ff3181f47b..7dea6bf31b10 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c
@@ -327,7 +327,7 @@ nvkm_udevice_new(const struct nvkm_oclass *oclass, void *data, u32 size,
 	struct nvkm_client *client = oclass->client;
 	struct nvkm_udevice *udev;

-	if (!(udev = kzalloc(sizeof(*udev), GFP_KERNEL)))
+	if (!(udev = kzalloc_obj(*udev, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nvkm_udevice, oclass, &udev->object);
 	*pobject = &udev->object;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c
index 84745f60912e..d25ef27ccf5d 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c
@@ -232,7 +232,7 @@ nvkm_disp_new_(const struct nvkm_disp_func *func, struct nvkm_device *device,
 	struct nvkm_disp *disp;
 	int ret;

-	if (!(disp = *pdisp = kzalloc(sizeof(**pdisp), GFP_KERNEL)))
+	if (!(disp = *pdisp = kzalloc_obj(**pdisp, GFP_KERNEL)))
 		return -ENOMEM;

 	disp->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.c
index 57a62a2de7c7..9b7148ce8d1b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.c
@@ -86,7 +86,7 @@ nvkm_disp_chan_child_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 	struct nvkm_disp_chan_object *object;
 	int ret;

-	if (!(object = kzalloc(sizeof(*object), GFP_KERNEL)))
+	if (!(object = kzalloc_obj(*object, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_oproxy_ctor(&nvkm_disp_chan_child_func_, oclass, &object->oproxy);
 	object->disp = disp;
@@ -195,7 +195,7 @@ nvkm_disp_chan_new_(struct nvkm_disp *disp, int nr, const struct nvkm_oclass *oc
 	if (args->v0.id >= nr || !args->v0.pushbuf != !user->func->push)
 		return -EINVAL;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	*pobject = &chan->object;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.c
index ff88a5a5253a..e4cfb172c383 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.c
@@ -78,7 +78,7 @@ int
 nvkm_conn_new(struct nvkm_disp *disp, int index, struct nvbios_connE *info,
 	      struct nvkm_conn **pconn)
 {
-	if (!(*pconn = kzalloc(sizeof(**pconn), GFP_KERNEL)))
+	if (!(*pconn = kzalloc_obj(**pconn, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_conn_ctor(disp, index, info, *pconn);
 	return 0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c
index 614921166fba..bf79076081f6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c
@@ -822,7 +822,7 @@ gv100_disp_caps_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 	struct nvkm_disp *disp = nvkm_udisp(oclass->parent);
 	struct gv100_disp_caps *caps;

-	if (!(caps = kzalloc(sizeof(*caps), GFP_KERNEL)))
+	if (!(caps = kzalloc_obj(*caps, GFP_KERNEL)))
 		return -ENOMEM;
 	*pobject = &caps->object;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/head.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/head.c
index 7f5d13d13c94..ffe2ec55a15a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/head.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/head.c
@@ -56,7 +56,7 @@ nvkm_head_new_(const struct nvkm_head_func *func,
 	       struct nvkm_disp *disp, int id)
 {
 	struct nvkm_head *head;
-	if (!(head = kzalloc(sizeof(*head), GFP_KERNEL)))
+	if (!(head = kzalloc_obj(*head, GFP_KERNEL)))
 		return -ENOMEM;
 	head->func = func;
 	head->disp = disp;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.c
index e420bf2e4330..d680ef5355a3 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.c
@@ -58,7 +58,7 @@ nvkm_ior_new_(const struct nvkm_ior_func *func, struct nvkm_disp *disp,
 	      enum nvkm_ior_type type, int id, bool hda)
 {
 	struct nvkm_ior *ior;
-	if (!(ior = kzalloc(sizeof(*ior), GFP_KERNEL)))
+	if (!(ior = kzalloc_obj(*ior, GFP_KERNEL)))
 		return -ENOMEM;
 	ior->func = func;
 	ior->disp = disp;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c
index 28adc5a30f2f..c61453db7597 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c
@@ -379,7 +379,7 @@ nvkm_outp_new_(const struct nvkm_outp_func *func, struct nvkm_disp *disp,
 	enum nvkm_ior_proto proto;
 	enum nvkm_ior_type type;

-	if (!(outp = *poutp = kzalloc(sizeof(*outp), GFP_KERNEL)))
+	if (!(outp = *poutp = kzalloc_obj(*outp, GFP_KERNEL)))
 		return -ENOMEM;

 	outp->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/base.c
index 425cde35f128..8fcc4c587a28 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/base.c
@@ -108,7 +108,7 @@ nvkm_dma_new_(const struct nvkm_dma_func *func, struct nvkm_device *device,
 {
 	struct nvkm_dma *dma;

-	if (!(dma = *pdma = kzalloc(sizeof(*dma), GFP_KERNEL)))
+	if (!(dma = *pdma = kzalloc_obj(*dma, GFP_KERNEL)))
 		return -ENOMEM;
 	dma->func = func;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.c
index ef7ac360101e..2c1b14f93fb2 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.c
@@ -78,7 +78,7 @@ gf100_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass,
 	u32 kind, user, unkn;
 	int ret;

-	if (!(dmaobj = kzalloc(sizeof(*dmaobj), GFP_KERNEL)))
+	if (!(dmaobj = kzalloc_obj(*dmaobj, GFP_KERNEL)))
 		return -ENOMEM;
 	*pdmaobj = &dmaobj->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.c
index c068cee34588..c16449eb3c95 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.c
@@ -76,7 +76,7 @@ gf119_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass,
 	u32 kind, page;
 	int ret;

-	if (!(dmaobj = kzalloc(sizeof(*dmaobj), GFP_KERNEL)))
+	if (!(dmaobj = kzalloc_obj(*dmaobj, GFP_KERNEL)))
 		return -ENOMEM;
 	*pdmaobj = &dmaobj->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.c
index 39eba9fc82be..982ee81fd2bc 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.c
@@ -75,7 +75,7 @@ gv100_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass,
 	u32 kind, page;
 	int ret;

-	if (!(dmaobj = kzalloc(sizeof(*dmaobj), GFP_KERNEL)))
+	if (!(dmaobj = kzalloc_obj(*dmaobj, GFP_KERNEL)))
 		return -ENOMEM;
 	*pdmaobj = &dmaobj->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv04.c
index 5159d5df20a2..fcc87163c2d6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv04.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv04.c
@@ -85,7 +85,7 @@ nv04_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass,
 	struct nv04_dmaobj *dmaobj;
 	int ret;

-	if (!(dmaobj = kzalloc(sizeof(*dmaobj), GFP_KERNEL)))
+	if (!(dmaobj = kzalloc_obj(*dmaobj, GFP_KERNEL)))
 		return -ENOMEM;
 	*pdmaobj = &dmaobj->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.c
index 6a85b5dea643..5cf0986c7944 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.c
@@ -78,7 +78,7 @@ nv50_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass,
 	u32 user, part, comp, kind;
 	int ret;

-	if (!(dmaobj = kzalloc(sizeof(*dmaobj), GFP_KERNEL)))
+	if (!(dmaobj = kzalloc_obj(*dmaobj, GFP_KERNEL)))
 		return -ENOMEM;
 	*pdmaobj = &dmaobj->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c
index cf8e356867b4..bf6a225f5673 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c
@@ -341,7 +341,7 @@ nvkm_falcon_new_(const struct nvkm_falcon_func *func, struct nvkm_device *device
 {
 	struct nvkm_falcon *falcon;

-	if (!(falcon = kzalloc(sizeof(*falcon), GFP_KERNEL)))
+	if (!(falcon = kzalloc_obj(*falcon, GFP_KERNEL)))
 		return -ENOMEM;
 	falcon->func = func;
 	falcon->addr = addr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c
index 1561287a32f2..7dad0bf10631 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c
@@ -377,7 +377,7 @@ nvkm_fifo_new_(const struct nvkm_fifo_func *func, struct nvkm_device *device,
 {
 	struct nvkm_fifo *fifo;

-	if (!(fifo = *pfifo = kzalloc(sizeof(*fifo), GFP_KERNEL)))
+	if (!(fifo = *pfifo = kzalloc_obj(*fifo, GFP_KERNEL)))
 		return -ENOMEM;

 	fifo->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/cgrp.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/cgrp.c
index 814db9daa194..2b852341d8f4 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/cgrp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/cgrp.c
@@ -69,7 +69,7 @@ nvkm_cgrp_ectx_get(struct nvkm_cgrp *cgrp, struct nvkm_engn *engn, struct nvkm_e

 	/* Nope - create a fresh one. */
 	CGRP_TRACE(cgrp, "ctor ectx %d[%s]", engn->id, engn->engine->subdev.name);
-	if (!(ectx = *pectx = kzalloc(sizeof(*ectx), GFP_KERNEL)))
+	if (!(ectx = *pectx = kzalloc_obj(*ectx, GFP_KERNEL)))
 		return -ENOMEM;

 	ectx->engn = engn;
@@ -141,7 +141,7 @@ nvkm_cgrp_vctx_get(struct nvkm_cgrp *cgrp, struct nvkm_engn *engn, struct nvkm_c

 	/* Now, create the sub-context. */
 	CGRP_TRACE(cgrp, "ctor vctx %d[%s]", engn->id, engn->engine->subdev.name);
-	if (!(vctx = *pvctx = kzalloc(sizeof(*vctx), GFP_KERNEL))) {
+	if (!(vctx = *pvctx = kzalloc_obj(*vctx, GFP_KERNEL))) {
 		nvkm_cgrp_ectx_put(cgrp, &ectx);
 		return -ENOMEM;
 	}
@@ -224,7 +224,7 @@ nvkm_cgrp_new(struct nvkm_runl *runl, const char *name, struct nvkm_vmm *vmm, bo
 {
 	struct nvkm_cgrp *cgrp;

-	if (!(cgrp = *pcgrp = kmalloc(sizeof(*cgrp), GFP_KERNEL)))
+	if (!(cgrp = *pcgrp = kmalloc_obj(*cgrp, GFP_KERNEL)))
 		return -ENOMEM;

 	cgrp->func = runl->fifo->func->cgrp.func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c
index e5bbd8563007..0c6a5220ef80 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c
@@ -117,7 +117,7 @@ nvkm_chan_cctx_get(struct nvkm_chan *chan, struct nvkm_engn *engn, struct nvkm_c

 	/* Now, create the channel context - to track engine binding. */
 	CHAN_TRACE(chan, "ctor cctx %d[%s]", engn->id, engn->engine->subdev.name);
-	if (!(cctx = *pcctx = kzalloc(sizeof(*cctx), GFP_KERNEL))) {
+	if (!(cctx = *pcctx = kzalloc_obj(*cctx, GFP_KERNEL))) {
 		nvkm_cgrp_vctx_put(cgrp, &vctx);
 		ret = -ENOMEM;
 		goto done;
@@ -367,7 +367,7 @@ nvkm_chan_new_(const struct nvkm_chan_func *func, struct nvkm_runl *runl, int ru
 		return -EINVAL;
 	}

-	if (!(chan = *pchan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = *pchan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;

 	chan->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chid.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chid.c
index 23944d95efd5..e7e0c381606c 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chid.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chid.c
@@ -89,7 +89,7 @@ nvkm_chid_new(const struct nvkm_event_func *func, struct nvkm_subdev *subdev,
 	struct nvkm_chid *chid;
 	int id;

-	if (!(chid = *pchid = kzalloc(struct_size(chid, used, nr), GFP_KERNEL)))
+	if (!(chid = *pchid = kzalloc_flex(*chid, used, nr, GFP_KERNEL)))
 		return -ENOMEM;

 	kref_init(&chid->kref);
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.c
index 454a481a0aef..42e49781eb21 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.c
@@ -349,7 +349,7 @@ nvkm_runl_add(struct nvkm_runl *runl, int engi, const struct nvkm_engn_func *fun
 		return NULL;
 	}

-	if (!(engn = kzalloc(sizeof(*engn), GFP_KERNEL)))
+	if (!(engn = kzalloc_obj(*engn, GFP_KERNEL)))
 		return NULL;

 	engn->func = func;
@@ -398,7 +398,7 @@ nvkm_runl_new(struct nvkm_fifo *fifo, int runi, u32 addr, int id_nr)
 	struct nvkm_runl *runl;
 	int ret;

-	if (!(runl = kzalloc(sizeof(*runl), GFP_KERNEL)))
+	if (!(runl = kzalloc_obj(*runl, GFP_KERNEL)))
 		return ERR_PTR(-ENOMEM);

 	runl->func = fifo->func->runl;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runq.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runq.c
index 33bcf5fb3ef0..e26e0f093755 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runq.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runq.c
@@ -34,7 +34,7 @@ nvkm_runq_new(struct nvkm_fifo *fifo, int pbid)
 {
 	struct nvkm_runq *runq;

-	if (!(runq = kzalloc(sizeof(*runq), GFP_KERNEL)))
+	if (!(runq = kzalloc_obj(*runq, GFP_KERNEL)))
 		return NULL;

 	runq->func = fifo->func->runq;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/ucgrp.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/ucgrp.c
index 52c594dfb1b8..cea98ea25178 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/ucgrp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/ucgrp.c
@@ -104,7 +104,7 @@ nvkm_ucgrp_new(struct nvkm_fifo *fifo, const struct nvkm_oclass *oclass, void *a
 		return PTR_ERR(vmm);

 	/* Allocate channel group. */
-	if (!(ucgrp = kzalloc(sizeof(*ucgrp), GFP_KERNEL))) {
+	if (!(ucgrp = kzalloc_obj(*ucgrp, GFP_KERNEL))) {
 		ret = -ENOMEM;
 		goto done;
 	}
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/uchan.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/uchan.c
index c978b97e10c6..f986dbd14f73 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/uchan.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/uchan.c
@@ -166,7 +166,7 @@ nvkm_uchan_object_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 		return -EINVAL;

 	/* Allocate SW object. */
-	if (!(uobj = kzalloc(sizeof(*uobj), GFP_KERNEL)))
+	if (!(uobj = kzalloc_obj(*uobj, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_oproxy_ctor(&nvkm_uchan_object, oclass, &uobj->oproxy);
@@ -375,7 +375,7 @@ nvkm_uchan_new(struct nvkm_fifo *fifo, struct nvkm_cgrp *cgrp, const struct nvkm
 	}

 	/* Allocate channel. */
-	if (!(uchan = kzalloc(sizeof(*uchan), GFP_KERNEL))) {
+	if (!(uchan = kzalloc_obj(*uchan, GFP_KERNEL))) {
 		ret = -ENOMEM;
 		goto done;
 	}
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
index 3608215f0f11..910ca0d4aa0f 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
@@ -285,7 +285,7 @@ gf100_gr_object_new(const struct nvkm_oclass *oclass, void *data, u32 size,
 	struct gf100_gr_chan *chan = gf100_gr_chan(oclass->parent);
 	struct gf100_gr_object *object;

-	if (!(object = kzalloc(sizeof(*object), GFP_KERNEL)))
+	if (!(object = kzalloc_obj(*object, GFP_KERNEL)))
 		return -ENOMEM;
 	*pobject = &object->object;

@@ -384,7 +384,7 @@ gf100_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nvkm_device *device = gr->base.engine.subdev.device;
 	int ret;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&gf100_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
@@ -2624,7 +2624,7 @@ gf100_gr_new_(const struct gf100_gr_fwif *fwif, struct nvkm_device *device,
 	struct gf100_gr *gr;
 	int ret;

-	if (!(gr = kzalloc(sizeof(*gr), GFP_KERNEL)))
+	if (!(gr = kzalloc_obj(*gr, GFP_KERNEL)))
 		return -ENOMEM;
 	*pgr = &gr->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c
index 82937df8b8c0..3bf288190cd1 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c
@@ -1188,7 +1188,7 @@ nv04_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nv04_gr_chan *chan;
 	unsigned long flags;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv04_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
@@ -1417,7 +1417,7 @@ nv04_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, st
 {
 	struct nv04_gr *gr;

-	if (!(gr = kzalloc(sizeof(*gr), GFP_KERNEL)))
+	if (!(gr = kzalloc_obj(*gr, GFP_KERNEL)))
 		return -ENOMEM;
 	spin_lock_init(&gr->lock);
 	*pgr = &gr->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c
index fcb4e4fce83f..8b724b3acdba 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c
@@ -1007,7 +1007,7 @@ nv10_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nvkm_device *device = gr->base.engine.subdev.device;
 	unsigned long flags;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv10_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
@@ -1177,7 +1177,7 @@ nv10_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device,
 {
 	struct nv10_gr *gr;

-	if (!(gr = kzalloc(sizeof(*gr), GFP_KERNEL)))
+	if (!(gr = kzalloc_obj(*gr, GFP_KERNEL)))
 		return -ENOMEM;
 	spin_lock_init(&gr->lock);
 	*pgr = &gr->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c
index ab57b3b40228..f12053d47fcf 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c
@@ -79,7 +79,7 @@ nv20_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nv20_gr_chan *chan;
 	int ret, i;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv20_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
@@ -334,7 +334,7 @@ nv20_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device,
 {
 	struct nv20_gr *gr;

-	if (!(gr = kzalloc(sizeof(*gr), GFP_KERNEL)))
+	if (!(gr = kzalloc_obj(*gr, GFP_KERNEL)))
 		return -ENOMEM;
 	*pgr = &gr->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.c
index d6bc6904dcc8..91c613e00e5e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.c
@@ -25,7 +25,7 @@ nv25_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nv20_gr_chan *chan;
 	int ret, i;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv25_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.c
index e5a351b51eb9..4435db568bb4 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.c
@@ -25,7 +25,7 @@ nv2a_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nv20_gr_chan *chan;
 	int ret, i;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv2a_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c
index 80370323755e..6da312944498 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c
@@ -26,7 +26,7 @@ nv30_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nv20_gr_chan *chan;
 	int ret, i;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv30_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c
index cdf043bbdd59..8cb48adc5d58 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c
@@ -25,7 +25,7 @@ nv34_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nv20_gr_chan *chan;
 	int ret, i;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv34_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.c
index fa5a6ccb871d..4116872fd2d1 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.c
@@ -25,7 +25,7 @@ nv35_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nv20_gr_chan *chan;
 	int ret, i;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv35_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c
index e3e797cf3034..5af4fa408fb8 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c
@@ -152,7 +152,7 @@ nv40_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nv40_gr_chan *chan;
 	unsigned long flags;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv40_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
@@ -433,7 +433,7 @@ nv40_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device,
 {
 	struct nv40_gr *gr;

-	if (!(gr = kzalloc(sizeof(*gr), GFP_KERNEL)))
+	if (!(gr = kzalloc_obj(*gr, GFP_KERNEL)))
 		return -ENOMEM;
 	*pgr = &gr->base;
 	INIT_LIST_HEAD(&gr->chan);
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.c
index c8a0288c092d..fae9254fa870 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.c
@@ -92,7 +92,7 @@ nv50_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *fifoch,
 	struct nv50_gr *gr = nv50_gr(base);
 	struct nv50_gr_chan *chan;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv50_gr_chan, oclass, &chan->object);
 	chan->gr = gr;
@@ -765,7 +765,7 @@ nv50_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device,
 {
 	struct nv50_gr *gr;

-	if (!(gr = kzalloc(sizeof(*gr), GFP_KERNEL)))
+	if (!(gr = kzalloc_obj(*gr, GFP_KERNEL)))
 		return -ENOMEM;
 	spin_lock_init(&gr->lock);
 	*pgr = &gr->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.c b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.c
index db9fc1ecae0d..ee907c2987a6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.c
@@ -89,7 +89,7 @@ nv31_mpeg_chan_new(struct nvkm_chan *fifoch, const struct nvkm_oclass *oclass,
 	unsigned long flags;
 	int ret = -EBUSY;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv31_mpeg_chan, oclass, &chan->object);
 	chan->mpeg = mpeg;
@@ -277,7 +277,7 @@ nv31_mpeg_new_(const struct nv31_mpeg_func *func, struct nvkm_device *device,
 {
 	struct nv31_mpeg *mpeg;

-	if (!(mpeg = kzalloc(sizeof(*mpeg), GFP_KERNEL)))
+	if (!(mpeg = kzalloc_obj(*mpeg, GFP_KERNEL)))
 		return -ENOMEM;
 	mpeg->func = func;
 	*pmpeg = &mpeg->engine;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c
index 38146f9cc81c..c14b6efcaf6d 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c
@@ -107,7 +107,7 @@ nv44_mpeg_chan_new(struct nvkm_chan *fifoch, const struct nvkm_oclass *oclass,
 	struct nv44_mpeg_chan *chan;
 	unsigned long flags;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nv44_mpeg_chan, oclass, &chan->object);
 	chan->mpeg = mpeg;
@@ -207,7 +207,7 @@ nv44_mpeg_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 {
 	struct nv44_mpeg *mpeg;

-	if (!(mpeg = kzalloc(sizeof(*mpeg), GFP_KERNEL)))
+	if (!(mpeg = kzalloc_obj(*mpeg, GFP_KERNEL)))
 		return -ENOMEM;
 	INIT_LIST_HEAD(&mpeg->chan);
 	*pmpeg = &mpeg->engine;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c
index 7d1c6791ae82..175a372a1de4 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c
@@ -43,7 +43,7 @@ nvkm_nvdec_new_(const struct nvkm_nvdec_fwif *fwif, struct nvkm_device *device,
 	struct nvkm_nvdec *nvdec;
 	int ret;

-	if (!(nvdec = *pnvdec = kzalloc(sizeof(*nvdec), GFP_KERNEL)))
+	if (!(nvdec = *pnvdec = kzalloc_obj(*nvdec, GFP_KERNEL)))
 		return -ENOMEM;

 	ret = nvkm_engine_ctor(&nvkm_nvdec, device, type, inst, true,
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c
index d45dbb42a0db..d8e6c8b58643 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c
@@ -44,7 +44,7 @@ nvkm_nvenc_new_(const struct nvkm_nvenc_fwif *fwif, struct nvkm_device *device,
 	struct nvkm_nvenc *nvenc;
 	int ret;

-	if (!(nvenc = *pnvenc = kzalloc(sizeof(*nvenc), GFP_KERNEL)))
+	if (!(nvenc = *pnvenc = kzalloc_obj(*nvenc, GFP_KERNEL)))
 		return -ENOMEM;

 	ret = nvkm_engine_ctor(&nvkm_nvenc, device, type, inst, true,
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c
index 3e4d6a680ee9..f8c0656f74c1 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c
@@ -137,7 +137,7 @@ nvkm_sec2_new_(const struct nvkm_sec2_fwif *fwif, struct nvkm_device *device,
 	struct nvkm_sec2 *sec2;
 	int ret;

-	if (!(sec2 = *psec2 = kzalloc(sizeof(*sec2), GFP_KERNEL)))
+	if (!(sec2 = *psec2 = kzalloc_obj(*sec2, GFP_KERNEL)))
 		return -ENOMEM;

 	ret = nvkm_engine_ctor(&nvkm_sec2, device, type, inst, true, &sec2->engine);
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/r535.c b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/r535.c
index 83a6bad5967e..fb5c05e49b80 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/r535.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/r535.c
@@ -42,7 +42,7 @@ r535_sec2_new(const struct nvkm_sec2_func *func, struct nvkm_device *device,
 	struct nvkm_sec2 *sec2;
 	int ret;

-	if (!(sec2 = *psec2 = kzalloc(sizeof(*sec2), GFP_KERNEL)))
+	if (!(sec2 = *psec2 = kzalloc_obj(*sec2, GFP_KERNEL)))
 		return -ENOMEM;

 	ret = nvkm_engine_ctor(&r535_sec2, device, type, inst, true, &sec2->engine);
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/base.c
index 20220d6d4a13..3201ab862764 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/base.c
@@ -100,7 +100,7 @@ nvkm_sw_new_(const struct nvkm_sw_func *func, struct nvkm_device *device,
 {
 	struct nvkm_sw *sw;

-	if (!(sw = *psw = kzalloc(sizeof(*sw), GFP_KERNEL)))
+	if (!(sw = *psw = kzalloc_obj(*sw, GFP_KERNEL)))
 		return -ENOMEM;
 	INIT_LIST_HEAD(&sw->chan);
 	sw->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c
index a0273baf4c67..42a1fcacb45b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c
@@ -110,7 +110,7 @@ gf100_sw_chan_new(struct nvkm_sw *sw, struct nvkm_chan *fifoch,
 	struct nv50_sw_chan *chan;
 	int ret, i;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	*pobject = &chan->base.object;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c
index 8a1d112da894..d1fc9c58653d 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c
@@ -111,7 +111,7 @@ nv04_sw_chan_new(struct nvkm_sw *sw, struct nvkm_chan *fifo,
 {
 	struct nv04_sw_chan *chan;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	atomic_set(&chan->ref, 0);
 	*pobject = &chan->base.object;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c
index 742c75859569..cac43cedebf9 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c
@@ -41,7 +41,7 @@ nv10_sw_chan_new(struct nvkm_sw *sw, struct nvkm_chan *fifo,
 {
 	struct nvkm_sw_chan *chan;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	*pobject = &chan->object;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c
index 99476d32c5af..62d719241cf6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c
@@ -106,7 +106,7 @@ nv50_sw_chan_new(struct nvkm_sw *sw, struct nvkm_chan *fifoch,
 	struct nv50_sw_chan *chan;
 	int ret, i;

-	if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL)))
+	if (!(chan = kzalloc_obj(*chan, GFP_KERNEL)))
 		return -ENOMEM;
 	*pobject = &chan->base.object;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nvsw.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nvsw.c
index f5affa1c8f34..023b94c7abe0 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nvsw.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nvsw.c
@@ -64,7 +64,7 @@ nvkm_nvsw_new_(const struct nvkm_nvsw_func *func, struct nvkm_sw_chan *chan,
 {
 	struct nvkm_nvsw *nvsw;

-	if (!(nvsw = kzalloc(sizeof(*nvsw), GFP_KERNEL)))
+	if (!(nvsw = kzalloc_obj(*nvsw, GFP_KERNEL)))
 		return -ENOMEM;
 	*pobject = &nvsw->object;

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c b/drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c
index 910a5bb2d191..e1fa755134d5 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c
@@ -181,7 +181,7 @@ nvkm_xtensa_new_(const struct nvkm_xtensa_func *func, struct nvkm_device *device
 {
 	struct nvkm_xtensa *xtensa;

-	if (!(xtensa = kzalloc(sizeof(*xtensa), GFP_KERNEL)))
+	if (!(xtensa = kzalloc_obj(*xtensa, GFP_KERNEL)))
 		return -ENOMEM;
 	xtensa->func = func;
 	xtensa->addr = addr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/falcon/cmdq.c b/drivers/gpu/drm/nouveau/nvkm/falcon/cmdq.c
index 211ebe7afac6..449ef127e56c 100644
--- a/drivers/gpu/drm/nouveau/nvkm/falcon/cmdq.c
+++ b/drivers/gpu/drm/nouveau/nvkm/falcon/cmdq.c
@@ -203,7 +203,7 @@ nvkm_falcon_cmdq_new(struct nvkm_falcon_qmgr *qmgr, const char *name,
 {
 	struct nvkm_falcon_cmdq *cmdq = *pcmdq;

-	if (!(cmdq = *pcmdq = kzalloc(sizeof(*cmdq), GFP_KERNEL)))
+	if (!(cmdq = *pcmdq = kzalloc_obj(*cmdq, GFP_KERNEL)))
 		return -ENOMEM;

 	cmdq->qmgr = qmgr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/falcon/msgq.c b/drivers/gpu/drm/nouveau/nvkm/falcon/msgq.c
index 16b246fda666..4bff735a08df 100644
--- a/drivers/gpu/drm/nouveau/nvkm/falcon/msgq.c
+++ b/drivers/gpu/drm/nouveau/nvkm/falcon/msgq.c
@@ -203,7 +203,7 @@ nvkm_falcon_msgq_new(struct nvkm_falcon_qmgr *qmgr, const char *name,
 {
 	struct nvkm_falcon_msgq *msgq = *pmsgq;

-	if (!(msgq = *pmsgq = kzalloc(sizeof(*msgq), GFP_KERNEL)))
+	if (!(msgq = *pmsgq = kzalloc_obj(*msgq, GFP_KERNEL)))
 		return -ENOMEM;

 	msgq->qmgr = qmgr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.c b/drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.c
index a453de341a75..4e1518b43fed 100644
--- a/drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.c
@@ -73,7 +73,7 @@ nvkm_falcon_qmgr_new(struct nvkm_falcon *falcon,
 	struct nvkm_falcon_qmgr *qmgr;
 	int i;

-	if (!(qmgr = *pqmgr = kzalloc(sizeof(*qmgr), GFP_KERNEL)))
+	if (!(qmgr = *pqmgr = kzalloc_obj(*qmgr, GFP_KERNEL)))
 		return -ENOMEM;

 	qmgr->falcon = falcon;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c
index 13d829593180..0f83774f31a1 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c
@@ -251,7 +251,7 @@ nvkm_acr_oneinit(struct nvkm_subdev *subdev)

 		nvkm_falcon_put(lsfw->falcon, subdev);

-		if (!(lsf = kmalloc(sizeof(*lsf), GFP_KERNEL)))
+		if (!(lsf = kmalloc_obj(*lsf, GFP_KERNEL)))
 			return -ENOMEM;
 		lsf->func = lsfw->func;
 		lsf->falcon = lsfw->falcon;
@@ -422,7 +422,7 @@ nvkm_acr_new_(const struct nvkm_acr_fwif *fwif, struct nvkm_device *device,
 	struct nvkm_acr *acr;
 	long wprfw;

-	if (!(acr = *pacr = kzalloc(sizeof(*acr), GFP_KERNEL)))
+	if (!(acr = *pacr = kzalloc_obj(*acr, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_subdev_ctor(&nvkm_acr, device, type, inst, &acr->subdev);
 	INIT_LIST_HEAD(&acr->hsfw);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga100.c
index e3370c1551c0..70405ba5a87e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga100.c
@@ -37,7 +37,7 @@ ga100_acr_hsfw_ctor(struct nvkm_acr *acr, const char *bl, const char *fw,
 {
 	struct nvkm_acr_hsfw *hsfw;

-	if (!(hsfw = kzalloc(sizeof(*hsfw), GFP_KERNEL)))
+	if (!(hsfw = kzalloc_obj(*hsfw, GFP_KERNEL)))
 		return -ENOMEM;

 	hsfw->falcon_id = fwif->falcon_id;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga102.c
index c7d38609bb7e..77535b0d1d75 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga102.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga102.c
@@ -32,7 +32,7 @@ ga102_acr_wpr_patch(struct nvkm_acr *acr, s64 adjust)
 	struct nvkm_acr_lsfw *lsfw;
 	u32 offset = 0;

-	lsb = kvmalloc(sizeof(*lsb), GFP_KERNEL);
+	lsb = kvmalloc_obj(*lsb, GFP_KERNEL);
 	if (!lsb)
 		return -ENOMEM;

@@ -67,7 +67,7 @@ ga102_acr_wpr_build_lsb(struct nvkm_acr *acr, struct nvkm_acr_lsfw *lsfw)
 	if (WARN_ON(lsfw->sig->size != sizeof(hdr->signature)))
 		return -EINVAL;

-	hdr = kvzalloc(sizeof(*hdr), GFP_KERNEL);
+	hdr = kvzalloc_obj(*hdr, GFP_KERNEL);
 	if (!hdr)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c
index 31079c947758..5b812bed400d 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c
@@ -247,7 +247,7 @@ gm200_acr_hsfw_ctor(struct nvkm_acr *acr, const char *bl, const char *fw, const
 {
 	struct nvkm_acr_hsfw *hsfw;

-	if (!(hsfw = kzalloc(sizeof(*hsfw), GFP_KERNEL)))
+	if (!(hsfw = kzalloc_obj(*hsfw, GFP_KERNEL)))
 		return -ENOMEM;

 	hsfw->falcon_id = fwif->falcon_id;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/lsfw.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/lsfw.c
index bd104a030243..ecf7500dc135 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/lsfw.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/lsfw.c
@@ -71,7 +71,7 @@ nvkm_acr_lsfw_add(const struct nvkm_acr_lsf_func *func, struct nvkm_acr *acr,
 	}

 	if (!lsfw) {
-		if (!(lsfw = kzalloc(sizeof(*lsfw), GFP_KERNEL)))
+		if (!(lsfw = kzalloc_obj(*lsfw, GFP_KERNEL)))
 			return ERR_PTR(-ENOMEM);

 		lsfw->id = id;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c
index e5e60915029c..8f45161e3f2b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c
@@ -165,7 +165,7 @@ gf100_bar_new_(const struct nvkm_bar_func *func, struct nvkm_device *device,
 	       enum nvkm_subdev_type type, int inst, struct nvkm_bar **pbar)
 {
 	struct gf100_bar *bar;
-	if (!(bar = kzalloc(sizeof(*bar), GFP_KERNEL)))
+	if (!(bar = kzalloc_obj(*bar, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_bar_ctor(func, device, type, inst, &bar->base);
 	bar->bar2_halve = nvkm_boolopt(device->cfgopt, "NvBar2Halve", false);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c
index 6a881becb02c..eb66234bc478 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c
@@ -223,7 +223,7 @@ nv50_bar_new_(const struct nvkm_bar_func *func, struct nvkm_device *device,
 	      enum nvkm_subdev_type type, int inst, u32 pgd_addr, struct nvkm_bar **pbar)
 {
 	struct nv50_bar *bar;
-	if (!(bar = kzalloc(sizeof(*bar), GFP_KERNEL)))
+	if (!(bar = kzalloc_obj(*bar, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_bar_ctor(func, device, type, inst, &bar->base);
 	bar->pgd_addr = pgd_addr;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c
index 91f486ee4c42..9edc439ac790 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c
@@ -156,7 +156,7 @@ nvkm_bios_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 	struct bit_entry bit_i;
 	int ret, idx = 0;

-	if (!(bios = *pbios = kzalloc(sizeof(*bios), GFP_KERNEL)))
+	if (!(bios = *pbios = kzalloc_obj(*bios, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_subdev_ctor(&nvkm_bios, device, type, inst, &bios->subdev);

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/iccsense.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/iccsense.c
index dea444d48f94..f1fec267ebad 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/iccsense.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/iccsense.c
@@ -73,8 +73,7 @@ nvbios_iccsense_parse(struct nvkm_bios *bios, struct nvbios_iccsense *iccsense)
 	}

 	iccsense->nr_entry = cnt;
-	iccsense->rail = kmalloc_array(cnt, sizeof(struct pwr_rail_t),
-				       GFP_KERNEL);
+	iccsense->rail = kmalloc_objs(struct pwr_rail_t, cnt, GFP_KERNEL);
 	if (!iccsense->rail)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.c
index cb05f7f48a98..02c2551b82cf 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.c
@@ -58,7 +58,7 @@ of_init(struct nvkm_bios *bios, const char *name)
 	struct priv *priv;
 	if (!(dn = pci_device_to_OF_node(pdev)))
 		return ERR_PTR(-ENODEV);
-	if (!(priv = kzalloc(sizeof(*priv), GFP_KERNEL)))
+	if (!(priv = kzalloc_obj(*priv, GFP_KERNEL)))
 		return ERR_PTR(-ENOMEM);
 	if ((priv->data = of_get_property(dn, "NVDA,BMP", &priv->size)))
 		return priv;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c
index 8d9812a51ef6..72658f45cdf0 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c
@@ -65,7 +65,7 @@ pcirom_init(struct nvkm_bios *bios, const char *name)

 	if (!(ret = pci_enable_rom(pdev))) {
 		if (ret = -ENOMEM,
-		    (priv = kmalloc(sizeof(*priv), GFP_KERNEL))) {
+		    (priv = kmalloc_obj(*priv, GFP_KERNEL))) {
 			if (ret = -EFAULT,
 			    (priv->rom = pci_map_rom(pdev, &priv->size))) {
 				priv->pdev = pdev;
@@ -104,7 +104,7 @@ platform_init(struct nvkm_bios *bios, const char *name)
 	if (!pdev->rom || pdev->romlen == 0)
 		return ERR_PTR(-ENODEV);

-	if ((priv = kmalloc(sizeof(*priv), GFP_KERNEL))) {
+	if ((priv = kmalloc_obj(*priv, GFP_KERNEL))) {
 		priv->size = pdev->romlen;
 		if (ret = -ENODEV,
 		    (priv->rom = ioremap(pdev->rom, pdev->romlen)))
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowramin.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowramin.c
index 023ddc7c5399..0cae8502301a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowramin.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowramin.c
@@ -102,7 +102,7 @@ pramin_init(struct nvkm_bios *bios, const char *name)
 	}

 	/* modify bar0 PRAMIN window to cover the bios image */
-	if (!(priv = kmalloc(sizeof(*priv), GFP_KERNEL))) {
+	if (!(priv = kmalloc_obj(*priv, GFP_KERNEL))) {
 		nvkm_error(subdev, "... out of memory\n");
 		return ERR_PTR(-ENOMEM);
 	}
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.c
index 0e5a46db52ea..6c789ef5e341 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.c
@@ -56,7 +56,7 @@ nvkm_bus_new_(const struct nvkm_bus_func *func, struct nvkm_device *device,
 	      enum nvkm_subdev_type type, int inst, struct nvkm_bus **pbus)
 {
 	struct nvkm_bus *bus;
-	if (!(bus = *pbus = kzalloc(sizeof(*bus), GFP_KERNEL)))
+	if (!(bus = *pbus = kzalloc_obj(*bus, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_subdev_ctor(&nvkm_bus, device, type, inst, &bus->subdev);
 	bus->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.c
index 2a5668938f2f..8cb4bc5fdedf 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.c
@@ -45,7 +45,7 @@ nvkm_hwsq_init(struct nvkm_subdev *subdev, struct nvkm_hwsq **phwsq)
 {
 	struct nvkm_hwsq *hwsq;

-	hwsq = *phwsq = kmalloc(sizeof(*hwsq), GFP_KERNEL);
+	hwsq = *phwsq = kmalloc_obj(*hwsq, GFP_KERNEL);
 	if (hwsq) {
 		hwsq->subdev = subdev;
 		hwsq->addr = ~0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
index 71420f81714b..39b88d995411 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
@@ -239,7 +239,7 @@ nvkm_cstate_new(struct nvkm_clk *clk, int idx, struct nvkm_pstate *pstate)
 	if (volt && nvkm_volt_map_min(volt, cstepX.voltage) > volt->max_uv)
 		return -EINVAL;

-	cstate = kzalloc(sizeof(*cstate), GFP_KERNEL);
+	cstate = kzalloc_obj(*cstate, GFP_KERNEL);
 	if (!cstate)
 		return -ENOMEM;

@@ -416,7 +416,7 @@ nvkm_pstate_new(struct nvkm_clk *clk, int idx)
 	if (perfE.pstate == 0xff)
 		return 0;

-	pstate = kzalloc(sizeof(*pstate), GFP_KERNEL);
+	pstate = kzalloc_obj(*pstate, GFP_KERNEL);
 	if (!pstate)
 		return -ENOMEM;

@@ -710,7 +710,7 @@ int
 nvkm_clk_new_(const struct nvkm_clk_func *func, struct nvkm_device *device,
 	      enum nvkm_subdev_type type, int inst, bool allow_reclock, struct nvkm_clk **pclk)
 {
-	if (!(*pclk = kzalloc(sizeof(**pclk), GFP_KERNEL)))
+	if (!(*pclk = kzalloc_obj(**pclk, GFP_KERNEL)))
 		return -ENOMEM;
 	return nvkm_clk_ctor(func, device, type, inst, allow_reclock, *pclk);
 }
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c
index 6eea11aefb70..ec1effd3417b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c
@@ -473,7 +473,7 @@ gf100_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 {
 	struct gf100_clk *clk;

-	if (!(clk = kzalloc(sizeof(*clk), GFP_KERNEL)))
+	if (!(clk = kzalloc_obj(*clk, GFP_KERNEL)))
 		return -ENOMEM;
 	*pclk = &clk->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c
index 0d8e2ddcc5ee..8ef413154f7e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c
@@ -509,7 +509,7 @@ gk104_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 {
 	struct gk104_clk *clk;

-	if (!(clk = kzalloc(sizeof(*clk), GFP_KERNEL)))
+	if (!(clk = kzalloc_obj(*clk, GFP_KERNEL)))
 		return -ENOMEM;
 	*pclk = &clk->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c
index 65f5d0f1f3bf..4a87023154ec 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c
@@ -649,7 +649,7 @@ gk20a_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 	struct gk20a_clk *clk;
 	int ret;

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk)
 		return -ENOMEM;
 	*pclk = &clk->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.c
index fa8ca53acbd1..59132544985a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.c
@@ -919,7 +919,7 @@ gm20b_clk_new_speedo0(struct nvkm_device *device, enum nvkm_subdev_type type, in
 	struct gk20a_clk *clk;
 	int ret;

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk)
 		return -ENOMEM;
 	*pclk = &clk->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gp10b.c
index 492b62c0ee96..13fea8f3e5c0 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gp10b.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gp10b.c
@@ -165,7 +165,7 @@ gp10b_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 	struct gp10b_clk *clk;
 	int ret, i;

-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = kzalloc_obj(*clk, GFP_KERNEL);
 	if (!clk)
 		return -ENOMEM;
 	*pclk = &clk->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c
index b5f3969727a2..ed792f2b251e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c
@@ -542,7 +542,7 @@ gt215_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 {
 	struct gt215_clk *clk;

-	if (!(clk = kzalloc(sizeof(*clk), GFP_KERNEL)))
+	if (!(clk = kzalloc_obj(*clk, GFP_KERNEL)))
 		return -ENOMEM;
 	*pclk = &clk->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.c
index 81f103f88dc8..4960cf6acb2d 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.c
@@ -414,7 +414,7 @@ mcp77_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 {
 	struct mcp77_clk *clk;

-	if (!(clk = kzalloc(sizeof(*clk), GFP_KERNEL)))
+	if (!(clk = kzalloc_obj(*clk, GFP_KERNEL)))
 		return -ENOMEM;
 	*pclk = &clk->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.c
index 7ddd8cecb805..de429f26fa4f 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.c
@@ -223,7 +223,7 @@ nv40_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 {
 	struct nv40_clk *clk;

-	if (!(clk = kzalloc(sizeof(*clk), GFP_KERNEL)))
+	if (!(clk = kzalloc_obj(*clk, GFP_KERNEL)))
 		return -ENOMEM;
 	clk->base.pll_calc = nv04_clk_pll_calc;
 	clk->base.pll_prog = nv04_clk_pll_prog;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.c
index e1d31c62f9ec..aec4bb2b3550 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.c
@@ -513,7 +513,7 @@ nv50_clk_new_(const struct nvkm_clk_func *func, struct nvkm_device *device,
 	struct nv50_clk *clk;
 	int ret;

-	if (!(clk = kzalloc(sizeof(*clk), GFP_KERNEL)))
+	if (!(clk = kzalloc_obj(*clk, GFP_KERNEL)))
 		return -ENOMEM;
 	ret = nvkm_clk_ctor(func, device, type, inst, allow_reclock, &clk->base);
 	*pclk = &clk->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c
index 88bc890f89a2..92b846d28869 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c
@@ -439,7 +439,7 @@ nv04_devinit_new_(const struct nvkm_devinit_func *func, struct nvkm_device *devi
 {
 	struct nv04_devinit *init;

-	if (!(init = kzalloc(sizeof(*init), GFP_KERNEL)))
+	if (!(init = kzalloc_obj(*init, GFP_KERNEL)))
 		return -ENOMEM;
 	*pinit = &init->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c
index 07ed8fd778b2..1eb0908dcb5c 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c
@@ -150,7 +150,7 @@ nv50_devinit_new_(const struct nvkm_devinit_func *func, struct nvkm_device *devi
 {
 	struct nv50_devinit *init;

-	if (!(init = kzalloc(sizeof(*init), GFP_KERNEL)))
+	if (!(init = kzalloc_obj(*init, GFP_KERNEL)))
 		return -ENOMEM;
 	*pinit = &init->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/r535.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/r535.c
index 666eb93b1742..e226a2e24da5 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/r535.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/r535.c
@@ -36,7 +36,7 @@ r535_devinit_new(const struct nvkm_devinit_func *hw,
 	struct nvkm_devinit_func *rm;
 	int ret;

-	if (!(rm = kzalloc(sizeof(*rm), GFP_KERNEL)))
+	if (!(rm = kzalloc_obj(*rm, GFP_KERNEL)))
 		return -ENOMEM;

 	rm->dtor = r535_devinit_dtor;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c
index d8d32bb5bcd9..0ebda68c7d96 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c
@@ -76,7 +76,7 @@ nvkm_fault_oneinit_buffer(struct nvkm_fault *fault, int id)
 	struct nvkm_fault_buffer *buffer;
 	int ret;

-	if (!(buffer = kzalloc(sizeof(*buffer), GFP_KERNEL)))
+	if (!(buffer = kzalloc_obj(*buffer, GFP_KERNEL)))
 		return -ENOMEM;
 	buffer->fault = fault;
 	buffer->id = id;
@@ -156,7 +156,7 @@ nvkm_fault_new_(const struct nvkm_fault_func *func, struct nvkm_device *device,
 		enum nvkm_subdev_type type, int inst, struct nvkm_fault **pfault)
 {
 	struct nvkm_fault *fault;
-	if (!(fault = *pfault = kzalloc(sizeof(*fault), GFP_KERNEL)))
+	if (!(fault = *pfault = kzalloc_obj(*fault, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_subdev_ctor(&nvkm_fault, device, type, inst, &fault->subdev);
 	fault->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c
index 7ce1b65e2c1c..f15635ea99b8 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c
@@ -296,7 +296,7 @@ int
 nvkm_fb_new_(const struct nvkm_fb_func *func, struct nvkm_device *device,
 	     enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb)
 {
-	if (!(*pfb = kzalloc(sizeof(**pfb), GFP_KERNEL)))
+	if (!(*pfb = kzalloc_obj(**pfb, GFP_KERNEL)))
 		return -ENOMEM;
 	return nvkm_fb_ctor(func, device, type, inst, *pfb);
 }
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c
index 64281a09fb39..0c3e52e29baa 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c
@@ -112,7 +112,7 @@ gf100_fb_new_(const struct nvkm_fb_func *func, struct nvkm_device *device,
 {
 	struct gf100_fb *fb;

-	if (!(fb = kzalloc(sizeof(*fb), GFP_KERNEL)))
+	if (!(fb = kzalloc_obj(*fb, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_fb_ctor(func, device, type, inst, &fb->base);
 	*pfb = &fb->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c
index 076d968b7297..c2687ade0d7e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c
@@ -244,7 +244,7 @@ nv50_fb_new_(const struct nv50_fb_func *func, struct nvkm_device *device,
 {
 	struct nv50_fb *fb;

-	if (!(fb = kzalloc(sizeof(*fb), GFP_KERNEL)))
+	if (!(fb = kzalloc_obj(*fb, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_fb_ctor(&nv50_fb_, device, type, inst, &fb->base);
 	fb->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/r535.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/r535.c
index d32515010167..167eb70143ce 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/r535.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/r535.c
@@ -35,7 +35,7 @@ r535_fb_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
 	struct nvkm_ram *ram;
 	int ret;

-	if (!(ram = *pram = kzalloc(sizeof(*ram), GFP_KERNEL)))
+	if (!(ram = *pram = kzalloc_obj(*ram, GFP_KERNEL)))
 		return -ENOMEM;

 	ram->func = &r535_fb_ram;
@@ -71,7 +71,7 @@ r535_fb_new(const struct nvkm_fb_func *hw,
 	struct nvkm_fb_func *rm;
 	int ret;

-	if (!(rm = kzalloc(sizeof(*rm), GFP_KERNEL)))
+	if (!(rm = kzalloc_obj(*rm, GFP_KERNEL)))
 		return -ENOMEM;

 	rm->dtor = r535_fb_dtor;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.c
index c826980bf70e..e3f161f27189 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.c
@@ -127,7 +127,7 @@ nvkm_ram_wrap(struct nvkm_device *device, u64 addr, u64 size,
 		return -ENODEV;
 	ram = device->fb->ram;

-	if (!(vram = kzalloc(sizeof(*vram), GFP_KERNEL)))
+	if (!(vram = kzalloc_obj(*vram, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_memory_ctor(&nvkm_vram, &vram->memory);
@@ -135,7 +135,7 @@ nvkm_ram_wrap(struct nvkm_device *device, u64 addr, u64 size,
 	vram->page = NVKM_RAM_MM_SHIFT;
 	*pmemory = &vram->memory;

-	vram->mn = kzalloc(sizeof(*vram->mn), GFP_KERNEL);
+	vram->mn = kzalloc_obj(*vram->mn, GFP_KERNEL);
 	if (!vram->mn)
 		return -ENOMEM;

@@ -163,7 +163,7 @@ nvkm_ram_get(struct nvkm_device *device, u8 heap, u8 type, u8 rpage, u64 size,
 	ram = device->fb->ram;
 	mm = &ram->vram;

-	if (!(vram = kzalloc(sizeof(*vram), GFP_KERNEL)))
+	if (!(vram = kzalloc_obj(*vram, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_memory_ctor(&nvkm_vram, &vram->memory);
 	vram->ram = ram;
@@ -257,7 +257,7 @@ int
 nvkm_ram_new_(const struct nvkm_ram_func *func, struct nvkm_fb *fb,
 	      enum nvkm_ram_type type, u64 size, struct nvkm_ram **pram)
 {
-	if (!(*pram = kzalloc(sizeof(**pram), GFP_KERNEL)))
+	if (!(*pram = kzalloc_obj(**pram, GFP_KERNEL)))
 		return -ENOMEM;
 	return nvkm_ram_ctor(func, fb, type, size, *pram);
 }
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
index ba43fe158b22..1367cb8adb8f 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
@@ -572,7 +572,7 @@ gf100_ram_new_(const struct nvkm_ram_func *func,
 	struct gf100_ram *ram;
 	int ret;

-	if (!(ram = kzalloc(sizeof(*ram), GFP_KERNEL)))
+	if (!(ram = kzalloc_obj(*ram, GFP_KERNEL)))
 		return -ENOMEM;
 	*pram = &ram->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c
index 2b678b60b4d3..9bcbbe5469a3 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c
@@ -1371,7 +1371,7 @@ gk104_ram_train_init(struct nvkm_ram *ram)
 	struct gk104_ram_train *train;
 	int ret, i;

-	if (!(train = kzalloc(sizeof(*train), GFP_KERNEL)))
+	if (!(train = kzalloc_obj(*train, GFP_KERNEL)))
 		return -ENOMEM;

 	for (i = 0; i < 0x100; i++) {
@@ -1446,7 +1446,7 @@ gk104_ram_ctor_data(struct gk104_ram *ram, u8 ramcfg, int i)
 	u32 data;
 	int ret;

-	if (!(cfg = kmalloc(sizeof(*cfg), GFP_KERNEL)))
+	if (!(cfg = kmalloc_obj(*cfg, GFP_KERNEL)))
 		return -ENOMEM;
 	p = &list_last_entry(&ram->cfg, typeof(*cfg), head)->bios;
 	n = &cfg->bios;
@@ -1530,7 +1530,7 @@ gk104_ram_new_(const struct nvkm_ram_func *func, struct nvkm_fb *fb,
 	u8  ramcfg = nvbios_ramcfg_index(subdev);
 	u32 tmp;

-	if (!(ram = kzalloc(sizeof(*ram), GFP_KERNEL)))
+	if (!(ram = kzalloc_obj(*ram, GFP_KERNEL)))
 		return -ENOMEM;
 	*pram = &ram->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c
index 8987a21e81d1..fb958bb6c1d1 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c
@@ -91,7 +91,7 @@ gp100_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
 {
 	struct nvkm_ram *ram;

-	if (!(ram = *pram = kzalloc(sizeof(*ram), GFP_KERNEL)))
+	if (!(ram = *pram = kzalloc_obj(*ram, GFP_KERNEL)))
 		return -ENOMEM;

 	return gf100_ram_ctor(&gp100_ram, fb, ram);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
index bbfde1cb3a17..6417ee503aaf 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
@@ -942,7 +942,7 @@ gt215_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
 	struct gt215_ram *ram;
 	int ret, i;

-	if (!(ram = kzalloc(sizeof(*ram), GFP_KERNEL)))
+	if (!(ram = kzalloc_obj(*ram, GFP_KERNEL)))
 		return -ENOMEM;
 	*pram = &ram->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/rammcp77.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/rammcp77.c
index 7de18e53ef45..2e1890ada5f9 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/rammcp77.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/rammcp77.c
@@ -66,7 +66,7 @@ mcp77_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
 	struct mcp77_ram *ram;
 	int ret;

-	if (!(ram = kzalloc(sizeof(*ram), GFP_KERNEL)))
+	if (!(ram = kzalloc_obj(*ram, GFP_KERNEL)))
 		return -ENOMEM;
 	*pram = &ram->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.c
index 97b3a28ca5c0..5dc6012c67cd 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.c
@@ -192,7 +192,7 @@ nv40_ram_new_(struct nvkm_fb *fb, enum nvkm_ram_type type, u64 size,
 	      struct nvkm_ram **pram)
 {
 	struct nv40_ram *ram;
-	if (!(ram = kzalloc(sizeof(*ram), GFP_KERNEL)))
+	if (!(ram = kzalloc_obj(*ram, GFP_KERNEL)))
 		return -ENOMEM;
 	*pram = &ram->base;
 	return nvkm_ram_ctor(&nv40_ram_func, fb, type, size, &ram->base);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.c
index 7b1eb44ff3da..d767a6488e4c 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.c
@@ -587,7 +587,7 @@ nv50_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
 	struct nv50_ram *ram;
 	int ret, i;

-	if (!(ram = kzalloc(sizeof(*ram), GFP_KERNEL)))
+	if (!(ram = kzalloc_obj(*ram, GFP_KERNEL)))
 		return -ENOMEM;
 	*pram = &ram->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fsp/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fsp/base.c
index e366a980baa9..ba24758d5ed1 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fsp/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fsp/base.c
@@ -55,7 +55,7 @@ nvkm_fsp_new_(const struct nvkm_fsp_func *func,
 {
 	struct nvkm_fsp *fsp;

-	fsp = *pfsp = kzalloc(sizeof(*fsp), GFP_KERNEL);
+	fsp = *pfsp = kzalloc_obj(*fsp, GFP_KERNEL);
 	if (!fsp)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.c
index 375dfce09f84..ad5c0de62459 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.c
@@ -45,7 +45,7 @@ nvkm_fuse_new_(const struct nvkm_fuse_func *func, struct nvkm_device *device,
 	       enum nvkm_subdev_type type, int inst, struct nvkm_fuse **pfuse)
 {
 	struct nvkm_fuse *fuse;
-	if (!(fuse = *pfuse = kzalloc(sizeof(*fuse), GFP_KERNEL)))
+	if (!(fuse = *pfuse = kzalloc_obj(*fuse, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_subdev_ctor(&nvkm_fuse, device, type, inst, &fuse->subdev);
 	fuse->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c
index b2c34878a68f..d8b434a7276d 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c
@@ -227,7 +227,7 @@ nvkm_gpio_new_(const struct nvkm_gpio_func *func, struct nvkm_device *device,
 {
 	struct nvkm_gpio *gpio;

-	if (!(gpio = *pgpio = kzalloc(sizeof(*gpio), GFP_KERNEL)))
+	if (!(gpio = *pgpio = kzalloc_obj(*gpio, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_subdev_ctor(&nvkm_gpio, device, type, inst, &gpio->subdev);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c
index 30cb843ba35c..3952b96a5abb 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c
@@ -132,7 +132,7 @@ nvkm_gsp_new_(const struct nvkm_gsp_fwif *fwif, struct nvkm_device *device,
 {
 	struct nvkm_gsp *gsp;

-	if (!(gsp = *pgsp = kzalloc(sizeof(*gsp), GFP_KERNEL)))
+	if (!(gsp = *pgsp = kzalloc_obj(*gsp, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_subdev_ctor(&nvkm_gsp, device, type, inst, &gsp->subdev);
@@ -148,7 +148,7 @@ nvkm_gsp_new_(const struct nvkm_gsp_fwif *fwif, struct nvkm_device *device,
 	if (fwif->rm) {
 		nvkm_info(&gsp->subdev, "RM version: %s\n", fwif->ver);

-		gsp->rm = kzalloc(sizeof(*gsp->rm), GFP_KERNEL);
+		gsp->rm = kzalloc_obj(*gsp->rm, GFP_KERNEL);
 		if (!gsp->rm)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/engine.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/engine.c
index 3b0e83b2f57f..01c90b592dca 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/engine.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/engine.c
@@ -44,7 +44,7 @@ nvkm_rm_engine_obj_new(struct nvkm_gsp_object *chan, int chid, const struct nvkm
 	struct nvkm_rm_engine_obj *obj;
 	int ret;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return -ENOMEM;

@@ -106,7 +106,7 @@ nvkm_rm_engine_ctor(void *(*dtor)(struct nvkm_engine *), struct nvkm_rm *rm,
 {
 	struct nvkm_engine_func *func;

-	func = kzalloc(struct_size(func, sclass, nclass + 1), GFP_KERNEL);
+	func = kzalloc_flex(*func, sclass, nclass + 1, GFP_KERNEL);
 	if (!func)
 		return -ENOMEM;

@@ -130,7 +130,7 @@ nvkm_rm_engine_new_(struct nvkm_rm *rm, enum nvkm_subdev_type type, int inst, u3
 	struct nvkm_engine *engine;
 	int ret;

-	engine = kzalloc(sizeof(*engine), GFP_KERNEL);
+	engine = kzalloc_obj(*engine, GFP_KERNEL);
 	if (!engine)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gr.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gr.c
index f40b8fcc2bcb..c13aaeb9fc89 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gr.c
@@ -56,7 +56,7 @@ nvkm_rm_gr_new(struct nvkm_rm *rm)
 	struct nvkm_gr_func *func;
 	struct r535_gr *gr;

-	func = kzalloc(struct_size(func, sclass, ARRAY_SIZE(classes) + 1), GFP_KERNEL);
+	func = kzalloc_flex(*func, sclass, ARRAY_SIZE(classes) + 1, GFP_KERNEL);
 	if (!func)
 		return -ENOMEM;

@@ -74,7 +74,7 @@ nvkm_rm_gr_new(struct nvkm_rm *rm)
 		func->sclass[i].ctor = nvkm_rm_gr_obj_ctor;
 	}

-	gr = kzalloc(sizeof(*gr), GFP_KERNEL);
+	gr = kzalloc_obj(*gr, GFP_KERNEL);
 	if (!gr) {
 		kfree(func);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/nvdec.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/nvdec.c
index d9fbfc377864..c0c6695bd547 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/nvdec.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/nvdec.c
@@ -17,7 +17,7 @@ nvkm_rm_nvdec_new(struct nvkm_rm *rm, int inst)
 	struct nvkm_nvdec *nvdec;
 	int ret;

-	nvdec = kzalloc(sizeof(*nvdec), GFP_KERNEL);
+	nvdec = kzalloc_obj(*nvdec, GFP_KERNEL);
 	if (!nvdec)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/nvenc.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/nvenc.c
index 6dfa7b789e07..db1c8b508b08 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/nvenc.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/nvenc.c
@@ -17,7 +17,7 @@ nvkm_rm_nvenc_new(struct nvkm_rm *rm, int inst)
 	struct nvkm_nvenc *nvenc;
 	int ret;

-	nvenc = kzalloc(sizeof(*nvenc), GFP_KERNEL);
+	nvenc = kzalloc_obj(*nvenc, GFP_KERNEL);
 	if (!nvenc)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/bar.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/bar.c
index d06bf95b9a4a..37d0e21905bf 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/bar.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/bar.c
@@ -169,7 +169,7 @@ r535_bar_new_(const struct nvkm_bar_func *hw, struct nvkm_device *device,
 	struct nvkm_bar *bar;
 	int ret;

-	if (!(rm = kzalloc(sizeof(*rm), GFP_KERNEL)))
+	if (!(rm = kzalloc_obj(*rm, GFP_KERNEL)))
 		return -ENOMEM;

 	rm->dtor = r535_bar_dtor;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c
index e962d0e8f837..c0d3d4f66d30 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c
@@ -184,7 +184,7 @@ fbsr_vram(struct fbsr *fbsr, const char *type, u64 addr, u64 size)
 {
 	struct fbsr_item *item;

-	if (!(item = kzalloc(sizeof(*item), GFP_KERNEL)))
+	if (!(item = kzalloc_obj(*item, GFP_KERNEL)))
 		return false;

 	item->type = type;
@@ -309,7 +309,7 @@ r535_instmem_new(const struct nvkm_instmem_func *hw,
 	struct nvkm_instmem_func *rm;
 	int ret;

-	if (!(rm = kzalloc(sizeof(*rm), GFP_KERNEL)))
+	if (!(rm = kzalloc_obj(*rm, GFP_KERNEL)))
 		return -ENOMEM;

 	rm->dtor = r535_instmem_dtor;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c
index 4ed54b386a60..3d20574f5f70 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c
@@ -591,7 +591,7 @@ r535_fifo_new(const struct nvkm_fifo_func *hw, struct nvkm_device *device,
 	const struct nvkm_rm_gpu *gpu = device->gsp->rm->gpu;
 	struct nvkm_fifo_func *rm;

-	if (!(rm = kzalloc(sizeof(*rm), GFP_KERNEL)))
+	if (!(rm = kzalloc_obj(*rm, GFP_KERNEL)))
 		return -ENOMEM;

 	rm->dtor = r535_fifo_dtor;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c
index ddb57d5e73d6..d9029a87c010 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gr.c
@@ -147,7 +147,7 @@ r535_gr_chan_new(struct nvkm_gr *base, struct nvkm_chan *chan, const struct nvkm
 	struct r535_gr_chan *grc;
 	int ret;

-	if (!(grc = kzalloc(sizeof(*grc), GFP_KERNEL)))
+	if (!(grc = kzalloc_obj(*grc, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_object_ctor(&r535_gr_chan, oclass, &grc->object);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
index 7fb13434c051..9fd073619c38 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
@@ -2003,7 +2003,7 @@ static void r535_gsp_retain_logging(struct nvkm_gsp *gsp)
 		goto exit;
 	}

-	log = kzalloc(sizeof(*log), GFP_KERNEL);
+	log = kzalloc_obj(*log, GFP_KERNEL);
 	if (!log)
 		goto error;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/vmm.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/vmm.c
index f25ea610cd99..8ce33b757589 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/vmm.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/vmm.c
@@ -171,7 +171,7 @@ r535_mmu_new(const struct nvkm_mmu_func *hw,
 	struct nvkm_mmu_func *rm;
 	int ret;

-	if (!(rm = kzalloc(sizeof(*rm), GFP_KERNEL)))
+	if (!(rm = kzalloc_obj(*rm, GFP_KERNEL)))
 		return -ENOMEM;

 	rm->dtor = r535_mmu_dtor;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.c
index 6c76e5e14b75..9e523e0d0a10 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.c
@@ -107,7 +107,7 @@ anx9805_bus_new(struct nvkm_i2c_pad *base, int id, u8 drive,
 	struct anx9805_bus *bus;
 	int ret;

-	if (!(bus = kzalloc(sizeof(*bus), GFP_KERNEL)))
+	if (!(bus = kzalloc_obj(*bus, GFP_KERNEL)))
 		return -ENOMEM;
 	*pbus = &bus->base;
 	bus->pad = pad;
@@ -236,7 +236,7 @@ anx9805_aux_new(struct nvkm_i2c_pad *base, int id, u8 drive,
 	struct anx9805_aux *aux;
 	int ret;

-	if (!(aux = kzalloc(sizeof(*aux), GFP_KERNEL)))
+	if (!(aux = kzalloc_obj(*aux, GFP_KERNEL)))
 		return -ENOMEM;
 	*pbus = &aux->base;
 	aux->pad = pad;
@@ -267,7 +267,7 @@ anx9805_pad_new(struct nvkm_i2c_bus *bus, int id, u8 addr,
 {
 	struct anx9805_pad *pad;

-	if (!(pad = kzalloc(sizeof(*pad), GFP_KERNEL)))
+	if (!(pad = kzalloc_obj(*pad, GFP_KERNEL)))
 		return -ENOMEM;
 	*ppad = &pad->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxch.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxch.c
index fafc634acbf6..62b8b9d2d03b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxch.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxch.c
@@ -209,7 +209,7 @@ nvkm_i2c_aux_new_(const struct nvkm_i2c_aux_func *func,
 		  struct nvkm_i2c_pad *pad, int id,
 		  struct nvkm_i2c_aux **paux)
 {
-	if (!(*paux = kzalloc(sizeof(**paux), GFP_KERNEL)))
+	if (!(*paux = kzalloc_obj(**paux, GFP_KERNEL)))
 		return -ENOMEM;
 	return nvkm_i2c_aux_ctor(func, pad, id, *paux);
 }
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c
index 854bb4b5fdb4..4906dad21347 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.c
@@ -171,7 +171,7 @@ g94_i2c_aux_new_(const struct nvkm_i2c_aux_func *func,
 {
 	struct g94_i2c_aux *aux;

-	if (!(aux = kzalloc(sizeof(*aux), GFP_KERNEL)))
+	if (!(aux = kzalloc_obj(*aux, GFP_KERNEL)))
 		return -ENOMEM;
 	*paux = &aux->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c
index 3c5005e3b330..3f0ed4057e9c 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c
@@ -177,7 +177,7 @@ gm200_i2c_aux_new(struct nvkm_i2c_pad *pad, int index, u8 drive,
 {
 	struct gm200_i2c_aux *aux;

-	if (!(aux = kzalloc(sizeof(*aux), GFP_KERNEL)))
+	if (!(aux = kzalloc_obj(*aux, GFP_KERNEL)))
 		return -ENOMEM;
 	*paux = &aux->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
index 454bb21815a2..42b9df6d6825 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
@@ -266,7 +266,7 @@ nvkm_i2c_new_(const struct nvkm_i2c_func *func, struct nvkm_device *device,
 	u8 ver, hdr;
 	int ret, i, ids;

-	if (!(i2c = *pi2c = kzalloc(sizeof(*i2c), GFP_KERNEL)))
+	if (!(i2c = *pi2c = kzalloc_obj(*i2c, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_subdev_ctor(&nvkm_i2c, device, type, inst, &i2c->subdev);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.c
index ed50cc3736b9..84d6c0238be2 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.c
@@ -232,7 +232,7 @@ nvkm_i2c_bus_ctor(const struct nvkm_i2c_bus_func *func,

 	if ( bus->func->drive_scl &&
 	    !nvkm_boolopt(device->cfgopt, "NvI2C", internal)) {
-		if (!(bit = kzalloc(sizeof(*bit), GFP_KERNEL)))
+		if (!(bit = kzalloc_obj(*bit, GFP_KERNEL)))
 			return -ENOMEM;
 		bit->udelay = 10;
 		bit->timeout = usecs_to_jiffies(2200);
@@ -258,7 +258,7 @@ nvkm_i2c_bus_new_(const struct nvkm_i2c_bus_func *func,
 		  struct nvkm_i2c_pad *pad, int id,
 		  struct nvkm_i2c_bus **pbus)
 {
-	if (!(*pbus = kzalloc(sizeof(**pbus), GFP_KERNEL)))
+	if (!(*pbus = kzalloc_obj(**pbus, GFP_KERNEL)))
 		return -ENOMEM;
 	return nvkm_i2c_bus_ctor(func, pad, id, *pbus);
 }
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busgf119.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busgf119.c
index 96bbdda0f439..598df4da20b6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busgf119.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busgf119.c
@@ -85,7 +85,7 @@ gf119_i2c_bus_new(struct nvkm_i2c_pad *pad, int id, u8 drive,
 {
 	struct gf119_i2c_bus *bus;

-	if (!(bus = kzalloc(sizeof(*bus), GFP_KERNEL)))
+	if (!(bus = kzalloc_obj(*bus, GFP_KERNEL)))
 		return -ENOMEM;
 	*pbus = &bus->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv04.c
index a58db159231f..1a83c872d9d0 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv04.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv04.c
@@ -85,7 +85,7 @@ nv04_i2c_bus_new(struct nvkm_i2c_pad *pad, int id, u8 drive, u8 sense,
 {
 	struct nv04_i2c_bus *bus;

-	if (!(bus = kzalloc(sizeof(*bus), GFP_KERNEL)))
+	if (!(bus = kzalloc_obj(*bus, GFP_KERNEL)))
 		return -ENOMEM;
 	*pbus = &bus->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv4e.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv4e.c
index cdd73dcb1197..3019cab91e4b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv4e.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv4e.c
@@ -76,7 +76,7 @@ nv4e_i2c_bus_new(struct nvkm_i2c_pad *pad, int id, u8 drive,
 {
 	struct nv4e_i2c_bus *bus;

-	if (!(bus = kzalloc(sizeof(*bus), GFP_KERNEL)))
+	if (!(bus = kzalloc_obj(*bus, GFP_KERNEL)))
 		return -ENOMEM;
 	*pbus = &bus->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv50.c
index 8db8399381ca..995abbf8ef61 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv50.c
@@ -102,7 +102,7 @@ nv50_i2c_bus_new(struct nvkm_i2c_pad *pad, int id, u8 drive,
 		return -ENODEV;
 	}

-	if (!(bus = kzalloc(sizeof(*bus), GFP_KERNEL)))
+	if (!(bus = kzalloc_obj(*bus, GFP_KERNEL)))
 		return -ENOMEM;
 	*pbus = &bus->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.c
index 2c5fcb9c504b..7b167b691fc6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.c
@@ -109,7 +109,7 @@ int
 nvkm_i2c_pad_new_(const struct nvkm_i2c_pad_func *func, struct nvkm_i2c *i2c,
 		  int id, struct nvkm_i2c_pad **ppad)
 {
-	if (!(*ppad = kzalloc(sizeof(**ppad), GFP_KERNEL)))
+	if (!(*ppad = kzalloc_obj(**ppad, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_i2c_pad_ctor(func, i2c, id, *ppad);
 	return 0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.c
index 8f0ccd3664eb..365747909077 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.c
@@ -188,7 +188,7 @@ nvkm_iccsense_create_sensor(struct nvkm_iccsense *iccsense, u8 id)
 		return NULL;
 	}

-	sensor = kmalloc(sizeof(*sensor), GFP_KERNEL);
+	sensor = kmalloc_obj(*sensor, GFP_KERNEL);
 	if (!sensor)
 		return NULL;

@@ -279,7 +279,7 @@ nvkm_iccsense_oneinit(struct nvkm_subdev *subdev)
 				continue;
 			}

-			rail = kmalloc(sizeof(*rail), GFP_KERNEL);
+			rail = kmalloc_obj(*rail, GFP_KERNEL);
 			if (!rail)
 				return -ENOMEM;

@@ -322,7 +322,7 @@ int
 nvkm_iccsense_new_(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 		   struct nvkm_iccsense **iccsense)
 {
-	if (!(*iccsense = kzalloc(sizeof(**iccsense), GFP_KERNEL)))
+	if (!(*iccsense = kzalloc_obj(**iccsense, GFP_KERNEL)))
 		return -ENOMEM;
 	INIT_LIST_HEAD(&(*iccsense)->sensors);
 	INIT_LIST_HEAD(&(*iccsense)->rails);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c
index 201022ae9214..dab22c47d85e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c
@@ -387,7 +387,7 @@ gk20a_instobj_ctor_dma(struct gk20a_instmem *imem, u32 npages, u32 align,
 	struct nvkm_subdev *subdev = &imem->base.subdev;
 	struct device *dev = subdev->device->dev;

-	if (!(node = kzalloc(sizeof(*node), GFP_KERNEL)))
+	if (!(node = kzalloc_obj(*node, GFP_KERNEL)))
 		return -ENOMEM;
 	*_node = &node->base;

@@ -577,7 +577,7 @@ gk20a_instmem_new(struct nvkm_device *device, enum nvkm_subdev_type type, int in
 	struct nvkm_device_tegra *tdev = device->func->tegra(device);
 	struct gk20a_instmem *imem;

-	if (!(imem = kzalloc(sizeof(*imem), GFP_KERNEL)))
+	if (!(imem = kzalloc_obj(*imem, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_instmem_ctor(&gk20a_instmem, device, type, inst, &imem->base);
 	mutex_init(&imem->lock);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c
index e5320ef849bf..247a7bf5fe39 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c
@@ -125,7 +125,7 @@ nv04_instobj_new(struct nvkm_instmem *base, u32 size, u32 align, bool zero,
 	struct nv04_instobj *iobj;
 	int ret;

-	if (!(iobj = kzalloc(sizeof(*iobj), GFP_KERNEL)))
+	if (!(iobj = kzalloc_obj(*iobj, GFP_KERNEL)))
 		return -ENOMEM;
 	*pmemory = &iobj->base.memory;

@@ -267,7 +267,7 @@ nv04_instmem_new(struct nvkm_device *device, enum nvkm_subdev_type type, int ins
 {
 	struct nv04_instmem *imem;

-	if (!(imem = kzalloc(sizeof(*imem), GFP_KERNEL)))
+	if (!(imem = kzalloc_obj(*imem, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_instmem_ctor(&nv04_instmem, device, type, inst, &imem->base);
 	*pimem = &imem->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c
index 2544b9f0ec85..5a0f30d94198 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c
@@ -124,7 +124,7 @@ nv40_instobj_new(struct nvkm_instmem *base, u32 size, u32 align, bool zero,
 	struct nv40_instobj *iobj;
 	int ret;

-	if (!(iobj = kzalloc(sizeof(*iobj), GFP_KERNEL)))
+	if (!(iobj = kzalloc_obj(*iobj, GFP_KERNEL)))
 		return -ENOMEM;
 	*pmemory = &iobj->base.memory;

@@ -240,7 +240,7 @@ nv40_instmem_new(struct nvkm_device *device, enum nvkm_subdev_type type, int ins
 {
 	struct nv40_instmem *imem;

-	if (!(imem = kzalloc(sizeof(*imem), GFP_KERNEL)))
+	if (!(imem = kzalloc_obj(*imem, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_instmem_ctor(&nv40_instmem, device, type, inst, &imem->base);
 	*pimem = &imem->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
index 4ca6fb30743d..d6c781ae57e9 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
@@ -360,7 +360,7 @@ nv50_instobj_wrap(struct nvkm_instmem *base,
 	struct nv50_instmem *imem = nv50_instmem(base);
 	struct nv50_instobj *iobj;

-	if (!(iobj = kzalloc(sizeof(*iobj), GFP_KERNEL)))
+	if (!(iobj = kzalloc_obj(*iobj, GFP_KERNEL)))
 		return -ENOMEM;
 	*pmemory = &iobj->base.memory;

@@ -431,7 +431,7 @@ nv50_instmem_new_(const struct nvkm_instmem_func *func,
 {
 	struct nv50_instmem *imem;

-	if (!(imem = kzalloc(sizeof(*imem), GFP_KERNEL)))
+	if (!(imem = kzalloc_obj(*imem, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_instmem_ctor(func, device, type, inst, &imem->base);
 	INIT_LIST_HEAD(&imem->lru);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c
index f742a7b7b175..7c1652bc28cd 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c
@@ -133,7 +133,7 @@ nvkm_ltc_new_(const struct nvkm_ltc_func *func, struct nvkm_device *device,
 {
 	struct nvkm_ltc *ltc;

-	if (!(ltc = *pltc = kzalloc(sizeof(*ltc), GFP_KERNEL)))
+	if (!(ltc = *pltc = kzalloc_obj(*ltc, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_subdev_ctor(&nvkm_ltc, device, type, inst, &ltc->subdev);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
index c85600ba69f9..2d7e6d6f8760 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
@@ -130,7 +130,7 @@ nvkm_mc_new_(const struct nvkm_mc_func *func, struct nvkm_device *device,
 	struct nvkm_mc *mc;
 	int ret;

-	if (!(mc = *pmc = kzalloc(sizeof(*mc), GFP_KERNEL)))
+	if (!(mc = *pmc = kzalloc_obj(*mc, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_subdev_ctor(&nvkm_mc, device, type, inst, &mc->subdev);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c
index b67ace7ae93c..2d9c4d6f9162 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c
@@ -68,13 +68,13 @@ nvkm_mmu_ptp_get(struct nvkm_mmu *mmu, u32 size, bool zero)
 	struct nvkm_mmu_ptp *ptp;
 	int slot;

-	if (!(pt = kzalloc(sizeof(*pt), GFP_KERNEL)))
+	if (!(pt = kzalloc_obj(*pt, GFP_KERNEL)))
 		return NULL;

 	ptp = list_first_entry_or_null(&mmu->ptp.list, typeof(*ptp), head);
 	if (!ptp) {
 		/* Need to allocate a new parent to sub-allocate from. */
-		if (!(ptp = kmalloc(sizeof(*ptp), GFP_KERNEL))) {
+		if (!(ptp = kmalloc_obj(*ptp, GFP_KERNEL))) {
 			kfree(pt);
 			return NULL;
 		}
@@ -126,7 +126,7 @@ nvkm_mmu_ptc_find(struct nvkm_mmu *mmu, u32 size)
 			return ptc;
 	}

-	ptc = kmalloc(sizeof(*ptc), GFP_KERNEL);
+	ptc = kmalloc_obj(*ptc, GFP_KERNEL);
 	if (ptc) {
 		INIT_LIST_HEAD(&ptc->item);
 		ptc->size = size;
@@ -199,7 +199,7 @@ nvkm_mmu_ptc_get(struct nvkm_mmu *mmu, u32 size, u32 align, bool zero)
 	mutex_unlock(&mmu->ptc.mutex);

 	/* No such luck, we need to allocate. */
-	if (!(pt = kmalloc(sizeof(*pt), GFP_KERNEL)))
+	if (!(pt = kmalloc_obj(*pt, GFP_KERNEL)))
 		return NULL;
 	pt->ptc = ptc;
 	pt->sub = false;
@@ -434,7 +434,7 @@ int
 nvkm_mmu_new_(const struct nvkm_mmu_func *func, struct nvkm_device *device,
 	      enum nvkm_subdev_type type, int inst, struct nvkm_mmu **pmmu)
 {
-	if (!(*pmmu = kzalloc(sizeof(**pmmu), GFP_KERNEL)))
+	if (!(*pmmu = kzalloc_obj(**pmmu, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_mmu_ctor(func, device, type, inst, *pmmu);
 	return 0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mem.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mem.c
index 92e363dbbc5a..96b620ed07ca 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mem.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mem.c
@@ -163,7 +163,7 @@ nvkm_mem_new_host(struct nvkm_mmu *mmu, int type, u8 page, u64 size,
 	if (page != PAGE_SHIFT)
 		return -EINVAL;

-	if (!(mem = kzalloc(sizeof(*mem), GFP_KERNEL)))
+	if (!(mem = kzalloc_obj(*mem, GFP_KERNEL)))
 		return -ENOMEM;
 	mem->target = target;
 	mem->mmu = mmu;
@@ -191,9 +191,9 @@ nvkm_mem_new_host(struct nvkm_mmu *mmu, int type, u8 page, u64 size,
 	nvkm_memory_ctor(&nvkm_mem_dma, &mem->memory);
 	size = ALIGN(size, PAGE_SIZE) >> PAGE_SHIFT;

-	if (!(mem->mem = kvmalloc_array(size, sizeof(*mem->mem), GFP_KERNEL)))
+	if (!(mem->mem = kvmalloc_objs(*mem->mem, size, GFP_KERNEL)))
 		return -ENOMEM;
-	if (!(mem->dma = kvmalloc_array(size, sizeof(*mem->dma), GFP_KERNEL)))
+	if (!(mem->dma = kvmalloc_objs(*mem->dma, size, GFP_KERNEL)))
 		return -ENOMEM;

 	if (mmu->dma_bits > 32)
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/umem.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/umem.c
index e530bb8b3b17..79ab3a99d98c 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/umem.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/umem.c
@@ -161,7 +161,7 @@ nvkm_umem_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 	if (type >= mmu->type_nr)
 		return -EINVAL;

-	if (!(umem = kzalloc(sizeof(*umem), GFP_KERNEL)))
+	if (!(umem = kzalloc_obj(*umem, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nvkm_umem, oclass, &umem->object);
 	umem->mmu = mmu;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ummu.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ummu.c
index 6870fda4b188..8de3a707b5c2 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ummu.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ummu.c
@@ -172,7 +172,7 @@ nvkm_ummu_new(struct nvkm_device *device, const struct nvkm_oclass *oclass,
 	} else
 		return ret;

-	if (!(ummu = kzalloc(sizeof(*ummu), GFP_KERNEL)))
+	if (!(ummu = kzalloc_obj(*ummu, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_object_ctor(&nvkm_ummu, oclass, &ummu->object);
 	ummu->mmu = mmu;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/uvmm.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/uvmm.c
index cf490ff2b9f1..1778daa0af3a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/uvmm.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/uvmm.c
@@ -551,7 +551,7 @@ nvkm_uvmm_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
 	} else
 		return ret;

-	if (!(uvmm = kzalloc(sizeof(*uvmm), GFP_KERNEL)))
+	if (!(uvmm = kzalloc_obj(*uvmm, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_object_ctor(&nvkm_uvmm, oclass, &uvmm->object);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c
index 19a7407cf702..3a53ce15ea29 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c
@@ -59,7 +59,7 @@ nvkm_vmm_pt_new(const struct nvkm_vmm_desc *desc, bool sparse,
 	pgt->sparse = sparse;

 	if (desc->type == PGD) {
-		pgt->pde = kvcalloc(pten, sizeof(*pgt->pde), GFP_KERNEL);
+		pgt->pde = kvzalloc_objs(*pgt->pde, pten, GFP_KERNEL);
 		if (!pgt->pde) {
 			kfree(pgt);
 			return NULL;
@@ -823,7 +823,7 @@ nvkm_vmm_ptes_get_map(struct nvkm_vmm *vmm, const struct nvkm_vmm_page *page,
 struct nvkm_vma *
 nvkm_vma_new(u64 addr, u64 size)
 {
-	struct nvkm_vma *vma = kzalloc(sizeof(*vma), GFP_KERNEL);
+	struct nvkm_vma *vma = kzalloc_obj(*vma, GFP_KERNEL);
 	if (vma) {
 		vma->addr = addr;
 		vma->size = size;
@@ -1226,7 +1226,7 @@ nvkm_vmm_new_(const struct nvkm_vmm_func *func, struct nvkm_mmu *mmu,
 	      struct lock_class_key *key, const char *name,
 	      struct nvkm_vmm **pvmm)
 {
-	if (!(*pvmm = kzalloc(sizeof(**pvmm), GFP_KERNEL)))
+	if (!(*pvmm = kzalloc_obj(**pvmm, GFP_KERNEL)))
 		return -ENOMEM;
 	return nvkm_vmm_ctor(func, mmu, hdr, managed, addr, size, key, name, *pvmm);
 }
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c
index ff08ad5005a9..86f038ebb360 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c
@@ -346,7 +346,7 @@ nv50_vmm_join(struct nvkm_vmm *vmm, struct nvkm_memory *inst)
 	u64 data;
 	u32 pdei;

-	if (!(join = kmalloc(sizeof(*join), GFP_KERNEL)))
+	if (!(join = kmalloc_obj(*join, GFP_KERNEL)))
 		return -ENOMEM;
 	join->inst = inst;
 	list_add_tail(&join->head, &vmm->join);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.c
index c1acfe642da3..6d6c4b831a58 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.c
@@ -238,7 +238,7 @@ nvkm_mxm_new_(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 	u8  ver, len;
 	u16 data;

-	if (!(mxm = *pmxm = kzalloc(sizeof(*mxm), GFP_KERNEL)))
+	if (!(mxm = *pmxm = kzalloc_obj(*mxm, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_subdev_ctor(&nvkm_mxm, device, type, inst, &mxm->subdev);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
index 0f3e0d324a52..f357d777bc96 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
@@ -162,7 +162,7 @@ nvkm_pci_new_(const struct nvkm_pci_func *func, struct nvkm_device *device,
 {
 	struct nvkm_pci *pci;

-	if (!(pci = *ppci = kzalloc(sizeof(**ppci), GFP_KERNEL)))
+	if (!(pci = *ppci = kzalloc_obj(**ppci, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_subdev_ctor(&nvkm_pci_func, device, type, inst, &pci->subdev);
 	pci->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c
index 9e9004ec4588..0d7cfd73ff17 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c
@@ -161,7 +161,7 @@ nvkm_pmu_new_(const struct nvkm_pmu_fwif *fwif, struct nvkm_device *device,
 	      enum nvkm_subdev_type type, int inst, struct nvkm_pmu **ppmu)
 {
 	struct nvkm_pmu *pmu;
-	if (!(pmu = *ppmu = kzalloc(sizeof(*pmu), GFP_KERNEL)))
+	if (!(pmu = *ppmu = kzalloc_obj(*pmu, GFP_KERNEL)))
 		return -ENOMEM;
 	return nvkm_pmu_ctor(fwif, device, type, inst, *ppmu);
 }
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c
index b5e52b35f5d0..46abf56cc830 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c
@@ -215,7 +215,7 @@ gk20a_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 	struct gk20a_pmu *pmu;
 	int ret;

-	if (!(pmu = kzalloc(sizeof(*pmu), GFP_KERNEL)))
+	if (!(pmu = kzalloc_obj(*pmu, GFP_KERNEL)))
 		return -ENOMEM;
 	*ppmu = &pmu->base;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/memx.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/memx.c
index 22eaebefced3..0fed890a8f95 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/memx.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/memx.c
@@ -53,7 +53,7 @@ nvkm_memx_init(struct nvkm_pmu *pmu, struct nvkm_memx **pmemx)
 	if (ret)
 		return ret;

-	memx = *pmemx = kzalloc(sizeof(*memx), GFP_KERNEL);
+	memx = *pmemx = kzalloc_obj(*memx, GFP_KERNEL);
 	if (!memx)
 		return -ENOMEM;
 	memx->pmu = pmu;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c
index 1510aba33956..2613f5872bcd 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c
@@ -447,7 +447,7 @@ nvkm_therm_new_(const struct nvkm_therm_func *func, struct nvkm_device *device,
 {
 	struct nvkm_therm *therm;

-	if (!(therm = *ptherm = kzalloc(sizeof(*therm), GFP_KERNEL)))
+	if (!(therm = *ptherm = kzalloc_obj(*therm, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_therm_ctor(therm, device, type, inst, func);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fannil.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fannil.c
index 8ae300f911b6..92737c2770b6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fannil.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fannil.c
@@ -40,7 +40,7 @@ nvkm_fannil_create(struct nvkm_therm *therm)
 {
 	struct nvkm_fan *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	therm->fan = priv;
 	if (!priv)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fanpwm.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fanpwm.c
index b13ba9b2f6be..aa13cd45785a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fanpwm.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fanpwm.c
@@ -97,7 +97,7 @@ nvkm_fanpwm_create(struct nvkm_therm *therm, struct dcb_gpio_func *func)
 	     therm->func->pwm_get(therm, func->line, &divs, &duty) == -ENODEV)
 		return -ENODEV;

-	fan = kzalloc(sizeof(*fan), GFP_KERNEL);
+	fan = kzalloc_obj(*fan, GFP_KERNEL);
 	if (!fan)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fantog.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fantog.c
index bfdf4ca5625c..6cfe7fee54f0 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fantog.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/fantog.c
@@ -99,7 +99,7 @@ nvkm_fantog_create(struct nvkm_therm *therm, struct dcb_gpio_func *func)
 			return ret;
 	}

-	fan = kzalloc(sizeof(*fan), GFP_KERNEL);
+	fan = kzalloc_obj(*fan, GFP_KERNEL);
 	if (!fan)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c
index 45e295c271fb..f58f4add5ef3 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c
@@ -112,7 +112,7 @@ gk104_therm_new_(const struct nvkm_therm_func *func, struct nvkm_device *device,
 		 const struct gf100_idle_filter *idle_filter,
 		 struct nvkm_therm **ptherm)
 {
-	struct gk104_therm *therm = kzalloc(sizeof(*therm), GFP_KERNEL);
+	struct gk104_therm *therm = kzalloc_obj(*therm, GFP_KERNEL);

 	if (!therm)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/temp.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/temp.c
index ddb2b2c600ca..b828dec2e3e7 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/temp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/temp.c
@@ -119,7 +119,7 @@ nvkm_therm_sensor_event(struct nvkm_therm *therm, enum nvkm_therm_thrs thrs,
 		if (active) {
 			struct work_struct *work;

-			work = kmalloc(sizeof(*work), GFP_ATOMIC);
+			work = kmalloc_obj(*work, GFP_ATOMIC);
 			if (work) {
 				INIT_WORK(work, nv_poweroff_work);
 				schedule_work(work);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
index a5c3c282b5d0..dcb4763e1c08 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
@@ -187,7 +187,7 @@ nvkm_timer_new_(const struct nvkm_timer_func *func, struct nvkm_device *device,
 {
 	struct nvkm_timer *tmr;

-	if (!(tmr = *ptmr = kzalloc(sizeof(*tmr), GFP_KERNEL)))
+	if (!(tmr = *ptmr = kzalloc_obj(*tmr, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_subdev_ctor(&nvkm_timer, device, type, inst, &tmr->subdev);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c
index eb348dfc1d7a..fb55ff2b2a46 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c
@@ -26,7 +26,7 @@
 struct nvkm_top_device *
 nvkm_top_device_new(struct nvkm_top *top)
 {
-	struct nvkm_top_device *info = kmalloc(sizeof(*info), GFP_KERNEL);
+	struct nvkm_top_device *info = kmalloc_obj(*info, GFP_KERNEL);
 	if (info) {
 		info->type = NVKM_SUBDEV_NR;
 		info->inst = -1;
@@ -152,7 +152,7 @@ nvkm_top_new_(const struct nvkm_top_func *func, struct nvkm_device *device,
 	      enum nvkm_subdev_type type, int inst, struct nvkm_top **ptop)
 {
 	struct nvkm_top *top;
-	if (!(top = *ptop = kzalloc(sizeof(*top), GFP_KERNEL)))
+	if (!(top = *ptop = kzalloc_obj(*top, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_subdev_ctor(&nvkm_top, device, type, inst, &top->subdev);
 	top->func = func;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/base.c
index 62e81d551f44..3d584be9e201 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/base.c
@@ -39,7 +39,7 @@ nvkm_vfn_new_(const struct nvkm_vfn_func *func, struct nvkm_device *device,
 	struct nvkm_vfn *vfn;
 	int ret;

-	if (!(vfn = *pvfn = kzalloc(sizeof(*vfn), GFP_KERNEL)))
+	if (!(vfn = *pvfn = kzalloc_obj(*vfn, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_subdev_ctor(&nvkm_vfn, device, type, inst, &vfn->subdev);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/r535.c b/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/r535.c
index d294844d9eae..e01ea0dcd529 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/r535.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/r535.c
@@ -38,7 +38,7 @@ r535_vfn_new(const struct nvkm_vfn_func *hw,
 	struct nvkm_vfn_func *rm;
 	int ret;

-	if (!(rm = kzalloc(sizeof(*rm), GFP_KERNEL)))
+	if (!(rm = kzalloc_obj(*rm, GFP_KERNEL)))
 		return -ENOMEM;

 	rm->dtor = r535_vfn_dtor;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/uvfn.c b/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/uvfn.c
index 4e64d8843373..27fd15559796 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/uvfn.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/vfn/uvfn.c
@@ -56,7 +56,7 @@ nvkm_uvfn_new(struct nvkm_device *device, const struct nvkm_oclass *oclass,
 	if (argc != 0)
 		return -ENOSYS;

-	if (!(uvfn = kzalloc(sizeof(*uvfn), GFP_KERNEL)))
+	if (!(uvfn = kzalloc_obj(*uvfn, GFP_KERNEL)))
 		return -ENOMEM;

 	nvkm_object_ctor(&nvkm_uvfn, oclass, &uvfn->object);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c
index 803b98df4858..8bb3761e547b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c
@@ -321,7 +321,7 @@ int
 nvkm_volt_new_(const struct nvkm_volt_func *func, struct nvkm_device *device,
 	       enum nvkm_subdev_type type, int inst, struct nvkm_volt **pvolt)
 {
-	if (!(*pvolt = kzalloc(sizeof(**pvolt), GFP_KERNEL)))
+	if (!(*pvolt = kzalloc_obj(**pvolt, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_volt_ctor(func, device, type, inst, *pvolt);
 	return 0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.c
index d1ce4309cfb8..5146666ea0f5 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.c
@@ -113,7 +113,7 @@ gk104_volt_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 		volt_func = &gk104_volt_pwm;
 	}

-	if (!(volt = kzalloc(sizeof(*volt), GFP_KERNEL)))
+	if (!(volt = kzalloc_obj(*volt, GFP_KERNEL)))
 		return -ENOMEM;
 	nvkm_volt_ctor(volt_func, device, type, inst, &volt->base);
 	*pvolt = &volt->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c
index ccac88da8864..5941a1eeabd9 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c
@@ -176,7 +176,7 @@ gk20a_volt_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 {
 	struct gk20a_volt *volt;

-	volt = kzalloc(sizeof(*volt), GFP_KERNEL);
+	volt = kzalloc_obj(*volt, GFP_KERNEL);
 	if (!volt)
 		return -ENOMEM;
 	*pvolt = &volt->base;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.c
index c2e9694d333f..7348acb147bf 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.c
@@ -77,7 +77,7 @@ gm20b_volt_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
 		return -EINVAL;
 	}

-	volt = kzalloc(sizeof(*volt), GFP_KERNEL);
+	volt = kzalloc_obj(*volt, GFP_KERNEL);
 	if (!volt)
 		return -ENOMEM;
 	*pvolt = &volt->base;
diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c
index cf055815077c..c3cca5234f67 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -4603,7 +4603,7 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)
 	int r = 0;
 	struct device_node *np = pdev->dev.of_node;

-	dispc = kzalloc(sizeof(*dispc), GFP_KERNEL);
+	dispc = kzalloc_obj(*dispc, GFP_KERNEL);
 	if (!dispc)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
index b129e5a8d791..1269978ba292 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -1041,7 +1041,7 @@ static int dsi_dump_dsi_irqs(struct seq_file *s, void *p)
 	unsigned long flags;
 	struct dsi_irq_stats *stats;

-	stats = kmalloc(sizeof(*stats), GFP_KERNEL);
+	stats = kmalloc_obj(*stats, GFP_KERNEL);
 	if (!stats)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c
index 692df747e2ae..791d88933084 100644
--- a/drivers/gpu/drm/omapdrm/dss/dss.c
+++ b/drivers/gpu/drm/omapdrm/dss/dss.c
@@ -928,7 +928,7 @@ dss_debugfs_create_file(struct dss_device *dss, const char *name,
 {
 	struct dss_debugfs_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

@@ -1419,7 +1419,7 @@ static int dss_probe(struct platform_device *pdev)
 	struct dss_device *dss;
 	int r;

-	dss = kzalloc(sizeof(*dss), GFP_KERNEL);
+	dss = kzalloc_obj(*dss, GFP_KERNEL);
 	if (!dss)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index 1c2a1920c0a6..ba730242ad74 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -716,7 +716,7 @@ static void omap_crtc_reset(struct drm_crtc *crtc)

 	kfree(crtc->state);

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_crtc_reset(crtc, &state->base);
 }
@@ -731,7 +731,7 @@ omap_crtc_duplicate_state(struct drm_crtc *crtc)

 	current_state = to_omap_crtc_state(crtc->state);

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -793,7 +793,7 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,

 	DBG("%s", channel_names[channel]);

-	omap_crtc = kzalloc(sizeof(*omap_crtc), GFP_KERNEL);
+	omap_crtc = kzalloc_obj(*omap_crtc, GFP_KERNEL);
 	if (!omap_crtc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
index bbe427ab43c1..8312c4d14348 100644
--- a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
+++ b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
@@ -536,7 +536,7 @@ struct tiler_block *tiler_reserve_2d(enum tiler_fmt fmt, u16 w,
 	unsigned long flags;
 	u32 slot_bytes;

-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (!block)
 		return ERR_PTR(-ENOMEM);

@@ -571,7 +571,7 @@ struct tiler_block *tiler_reserve_2d(enum tiler_fmt fmt, u16 w,

 struct tiler_block *tiler_reserve_1d(size_t size)
 {
-	struct tiler_block *block = kzalloc(sizeof(*block), GFP_KERNEL);
+	struct tiler_block *block = kzalloc_obj(*block, GFP_KERNEL);
 	int num_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
 	unsigned long flags;

@@ -774,7 +774,7 @@ static int omap_dmm_probe(struct platform_device *dev)
 	u32 hwinfo, pat_geom;
 	struct resource *mem;

-	omap_dmm = kzalloc(sizeof(*omap_dmm), GFP_KERNEL);
+	omap_dmm = kzalloc_obj(*omap_dmm, GFP_KERNEL);
 	if (!omap_dmm)
 		goto fail;

@@ -885,8 +885,8 @@ static int omap_dmm_probe(struct platform_device *dev)
 	}

 	/* alloc engines */
-	omap_dmm->engines = kcalloc(omap_dmm->num_engines,
-				    sizeof(*omap_dmm->engines), GFP_KERNEL);
+	omap_dmm->engines = kzalloc_objs(*omap_dmm->engines,
+					 omap_dmm->num_engines, GFP_KERNEL);
 	if (!omap_dmm->engines) {
 		ret = -ENOMEM;
 		goto fail;
@@ -904,8 +904,8 @@ static int omap_dmm_probe(struct platform_device *dev)
 		list_add(&omap_dmm->engines[i].idle_node, &omap_dmm->idle_head);
 	}

-	omap_dmm->tcm = kcalloc(omap_dmm->num_lut, sizeof(*omap_dmm->tcm),
-				GFP_KERNEL);
+	omap_dmm->tcm = kzalloc_objs(*omap_dmm->tcm, omap_dmm->num_lut,
+				     GFP_KERNEL);
 	if (!omap_dmm->tcm) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 1b96343226a5..206018aab88e 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -146,7 +146,7 @@ static int omap_atomic_update_normalize_zpos(struct drm_device *dev,
 	struct drm_plane_state **states;
 	int ret = 0;

-	states = kmalloc_array(total_planes, sizeof(*states), GFP_KERNEL);
+	states = kmalloc_objs(*states, total_planes, GFP_KERNEL);
 	if (!states)
 		return -ENOMEM;

@@ -285,7 +285,7 @@ static int omap_global_obj_init(struct drm_device *dev)
 	struct omap_drm_private *priv = dev->dev_private;
 	struct omap_global_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

@@ -798,7 +798,7 @@ static int pdev_probe(struct platform_device *pdev)
 	}

 	/* Allocate and initialize the driver private structure. */
-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c
index 195715b162e3..2577ba92b1b9 100644
--- a/drivers/gpu/drm/omapdrm/omap_encoder.c
+++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
@@ -122,7 +122,7 @@ struct drm_encoder *omap_encoder_init(struct drm_device *dev,
 	struct drm_encoder *encoder = NULL;
 	struct omap_encoder *omap_encoder;

-	omap_encoder = kzalloc(sizeof(*omap_encoder), GFP_KERNEL);
+	omap_encoder = kzalloc_obj(*omap_encoder, GFP_KERNEL);
 	if (!omap_encoder)
 		goto fail;

diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c b/drivers/gpu/drm/omapdrm/omap_fb.c
index b8c249ec1891..c3b1bea75f7f 100644
--- a/drivers/gpu/drm/omapdrm/omap_fb.c
+++ b/drivers/gpu/drm/omapdrm/omap_fb.c
@@ -390,7 +390,7 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
 		goto fail;
 	}

-	omap_fb = kzalloc(sizeof(*omap_fb), GFP_KERNEL);
+	omap_fb = kzalloc_obj(*omap_fb, GFP_KERNEL);
 	if (!omap_fb) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
index 71e79f53489a..63c4bfc9a5c0 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem.c
@@ -254,7 +254,7 @@ static int omap_gem_attach_pages(struct drm_gem_object *obj)
 	 * DSS, GPU, etc. are not cache coherent:
 	 */
 	if (omap_obj->flags & (OMAP_BO_WC|OMAP_BO_UNCACHED)) {
-		addrs = kmalloc_array(npages, sizeof(*addrs), GFP_KERNEL);
+		addrs = kmalloc_objs(*addrs, npages, GFP_KERNEL);
 		if (!addrs) {
 			ret = -ENOMEM;
 			goto free_pages;
@@ -278,7 +278,7 @@ static int omap_gem_attach_pages(struct drm_gem_object *obj)
 			}
 		}
 	} else {
-		addrs = kcalloc(npages, sizeof(*addrs), GFP_KERNEL);
+		addrs = kzalloc_objs(*addrs, npages, GFP_KERNEL);
 		if (!addrs) {
 			ret = -ENOMEM;
 			goto free_pages;
@@ -989,7 +989,7 @@ struct sg_table *omap_gem_get_sg(struct drm_gem_object *obj,
 	if (sgt)
 		goto out;

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		ret = -ENOMEM;
 		goto err_unpin;
@@ -1319,7 +1319,7 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,
 	}

 	/* Allocate the initialize the OMAP GEM object. */
-	omap_obj = kzalloc(sizeof(*omap_obj), GFP_KERNEL);
+	omap_obj = kzalloc_obj(*omap_obj, GFP_KERNEL);
 	if (!omap_obj)
 		return NULL;

@@ -1410,7 +1410,7 @@ struct drm_gem_object *omap_gem_new_dmabuf(struct drm_device *dev, size_t size,
 		unsigned int ret;

 		npages = DIV_ROUND_UP(size, PAGE_SIZE);
-		pages = kcalloc(npages, sizeof(*pages), GFP_KERNEL);
+		pages = kzalloc_objs(*pages, npages, GFP_KERNEL);
 		if (!pages) {
 			omap_gem_free_object(obj);
 			return ERR_PTR(-ENOMEM);
@@ -1470,7 +1470,7 @@ void omap_gem_init(struct drm_device *dev)
 		return;
 	}

-	usergart = kcalloc(3, sizeof(*usergart), GFP_KERNEL);
+	usergart = kzalloc_objs(*usergart, 3, GFP_KERNEL);
 	if (!usergart)
 		return;

diff --git a/drivers/gpu/drm/omapdrm/omap_irq.c b/drivers/gpu/drm/omapdrm/omap_irq.c
index 943c5307da00..b1da72838824 100644
--- a/drivers/gpu/drm/omapdrm/omap_irq.c
+++ b/drivers/gpu/drm/omapdrm/omap_irq.c
@@ -43,7 +43,7 @@ struct omap_irq_wait * omap_irq_wait_init(struct drm_device *dev,
 		u32 irqmask, int count)
 {
 	struct omap_drm_private *priv = dev->dev_private;
-	struct omap_irq_wait *wait = kzalloc(sizeof(*wait), GFP_KERNEL);
+	struct omap_irq_wait *wait = kzalloc_obj(*wait, GFP_KERNEL);
 	unsigned long flags;

 	init_waitqueue_head(&wait->wq);
diff --git a/drivers/gpu/drm/omapdrm/omap_overlay.c b/drivers/gpu/drm/omapdrm/omap_overlay.c
index 6fb7510cbebb..3b673662bf99 100644
--- a/drivers/gpu/drm/omapdrm/omap_overlay.c
+++ b/drivers/gpu/drm/omapdrm/omap_overlay.c
@@ -159,7 +159,7 @@ static struct omap_hw_overlay *omap_overlay_init(enum omap_plane_id overlay_id,
 {
 	struct omap_hw_overlay *overlay;

-	overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
+	overlay = kzalloc_obj(*overlay, GFP_KERNEL);
 	if (!overlay)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c
index f9698890c989..ff2c692c3ede 100644
--- a/drivers/gpu/drm/omapdrm/omap_plane.c
+++ b/drivers/gpu/drm/omapdrm/omap_plane.c
@@ -410,7 +410,7 @@ static void omap_plane_reset(struct drm_plane *plane)
 	if (plane->state)
 		drm_atomic_helper_plane_destroy_state(plane, plane->state);

-	omap_state = kzalloc(sizeof(*omap_state), GFP_KERNEL);
+	omap_state = kzalloc_obj(*omap_state, GFP_KERNEL);
 	if (!omap_state)
 		return;

@@ -427,7 +427,7 @@ omap_plane_atomic_duplicate_state(struct drm_plane *plane)

 	current_state = to_omap_plane_state(plane->state);

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -533,7 +533,7 @@ struct drm_plane *omap_plane_init(struct drm_device *dev,
 	if (WARN_ON(idx >= num_planes))
 		return ERR_PTR(-EINVAL);

-	omap_plane = kzalloc(sizeof(*omap_plane), GFP_KERNEL);
+	omap_plane = kzalloc_obj(*omap_plane, GFP_KERNEL);
 	if (!omap_plane)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index 2f58a9b0773a..191d909f5845 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -207,9 +207,8 @@ panfrost_lookup_bos(struct drm_device *dev,
 	if (ret)
 		return ret;

-	job->mappings = kvmalloc_array(job->bo_count,
-				       sizeof(struct panfrost_gem_mapping *),
-				       GFP_KERNEL | __GFP_ZERO);
+	job->mappings = kvmalloc_objs(struct panfrost_gem_mapping *,
+				      job->bo_count, GFP_KERNEL | __GFP_ZERO);
 	if (!job->mappings)
 		return -ENOMEM;

@@ -317,7 +316,7 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data,
 		goto out_put_syncout;
 	}

-	job = kzalloc(sizeof(*job), GFP_KERNEL);
+	job = kzalloc_obj(*job, GFP_KERNEL);
 	if (!job) {
 		ret = -ENOMEM;
 		goto out_put_jm_ctx;
@@ -598,7 +597,7 @@ static int panfrost_ioctl_sync_bo(struct drm_device *ddev, void *data,
 	if (!args->op_count)
 		return 0;

-	ops = kvmalloc_array(args->op_count, sizeof(*ops), GFP_KERNEL);
+	ops = kvmalloc_objs(*ops, args->op_count, GFP_KERNEL);
 	if (!ops) {
 		DRM_DEBUG("Failed to allocate incoming BO sync ops array\n");
 		return -ENOMEM;
@@ -683,7 +682,7 @@ panfrost_open(struct drm_device *dev, struct drm_file *file)
 	struct panfrost_device *pfdev = to_panfrost_device(dev);
 	struct panfrost_file_priv *panfrost_priv;

-	panfrost_priv = kzalloc(sizeof(*panfrost_priv), GFP_KERNEL);
+	panfrost_priv = kzalloc_obj(*panfrost_priv, GFP_KERNEL);
 	if (!panfrost_priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c
index 47ac8386aabc..a70847a73f98 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem.c
+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c
@@ -175,7 +175,7 @@ int panfrost_gem_open(struct drm_gem_object *obj, struct drm_file *file_priv)
 	struct panfrost_file_priv *priv = file_priv->driver_priv;
 	struct panfrost_gem_mapping *mapping;

-	mapping = kzalloc(sizeof(*mapping), GFP_KERNEL);
+	mapping = kzalloc_obj(*mapping, GFP_KERNEL);
 	if (!mapping)
 		return -ENOMEM;

@@ -429,7 +429,7 @@ struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, size_t
 	struct panfrost_device *pfdev = to_panfrost_device(dev);
 	struct panfrost_gem_object *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
index 11894a6b9fcc..862acf9c8422 100644
--- a/drivers/gpu/drm/panfrost/panfrost_job.c
+++ b/drivers/gpu/drm/panfrost/panfrost_job.c
@@ -95,7 +95,7 @@ static struct dma_fence *panfrost_fence_create(struct panfrost_device *pfdev, in
 	struct panfrost_fence *fence;
 	struct panfrost_job_slot *js = pfdev->js;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return ERR_PTR(-ENOMEM);

@@ -1053,7 +1053,7 @@ int panfrost_jm_ctx_create(struct drm_file *file,
 	struct panfrost_jm_ctx *jm_ctx;
 	int ret;

-	jm_ctx = kzalloc(sizeof(*jm_ctx), GFP_KERNEL);
+	jm_ctx = kzalloc_obj(*jm_ctx, GFP_KERNEL);
 	if (!jm_ctx)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c
index 50ff30849361..71eef57af549 100644
--- a/drivers/gpu/drm/panfrost/panfrost_mmu.c
+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c
@@ -620,14 +620,16 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as,
 	dma_resv_lock(obj->resv, NULL);

 	if (!bo->base.pages) {
-		bo->sgts = kvmalloc_array(bo->base.base.size / SZ_2M,
-				     sizeof(struct sg_table), GFP_KERNEL | __GFP_ZERO);
+		bo->sgts = kvmalloc_objs(struct sg_table,
+					 bo->base.base.size / SZ_2M,
+					 GFP_KERNEL | __GFP_ZERO);
 		if (!bo->sgts) {
 			ret = -ENOMEM;
 			goto err_unlock;
 		}

-		pages = kvmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL | __GFP_ZERO);
+		pages = kvmalloc_objs(struct page *, nr_pages,
+				      GFP_KERNEL | __GFP_ZERO);
 		if (!pages) {
 			kvfree(bo->sgts);
 			bo->sgts = NULL;
@@ -792,7 +794,7 @@ struct panfrost_mmu *panfrost_mmu_ctx_create(struct panfrost_device *pfdev)
 		fmt = ARM_MALI_LPAE;
 	}

-	mmu = kzalloc(sizeof(*mmu), GFP_KERNEL);
+	mmu = kzalloc_obj(*mmu, GFP_KERNEL);
 	if (!mmu)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c
index 165dddfde6ca..e1e51daba356 100644
--- a/drivers/gpu/drm/panthor/panthor_drv.c
+++ b/drivers/gpu/drm/panthor/panthor_drv.c
@@ -382,7 +382,7 @@ panthor_submit_ctx_add_sync_signal(struct panthor_submit_ctx *ctx, u32 handle, u
 	struct dma_fence *cur_fence;
 	int ret;

-	sig_sync = kzalloc(sizeof(*sig_sync), GFP_KERNEL);
+	sig_sync = kzalloc_obj(*sig_sync, GFP_KERNEL);
 	if (!sig_sync)
 		return -ENOMEM;

@@ -723,8 +723,8 @@ panthor_submit_ctx_push_jobs(struct panthor_submit_ctx *ctx,
 static int panthor_submit_ctx_init(struct panthor_submit_ctx *ctx,
 				   struct drm_file *file, u32 job_count)
 {
-	ctx->jobs = kvmalloc_array(job_count, sizeof(*ctx->jobs),
-				   GFP_KERNEL | __GFP_ZERO);
+	ctx->jobs = kvmalloc_objs(*ctx->jobs, job_count,
+				  GFP_KERNEL | __GFP_ZERO);
 	if (!ctx->jobs)
 		return -ENOMEM;

@@ -1471,7 +1471,7 @@ panthor_open(struct drm_device *ddev, struct drm_file *file)
 	struct panthor_file *pfile;
 	int ret;

-	pfile = kzalloc(sizeof(*pfile), GFP_KERNEL);
+	pfile = kzalloc_obj(*pfile, GFP_KERNEL);
 	if (!pfile)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/panthor/panthor_gem.c b/drivers/gpu/drm/panthor/panthor_gem.c
index 2c215efb5320..3d94f9cc94d6 100644
--- a/drivers/gpu/drm/panthor/panthor_gem.c
+++ b/drivers/gpu/drm/panthor/panthor_gem.c
@@ -183,7 +183,7 @@ panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm,
 	if (drm_WARN_ON(&ptdev->base, !vm))
 		return ERR_PTR(-EINVAL);

-	kbo = kzalloc(sizeof(*kbo), GFP_KERNEL);
+	kbo = kzalloc_obj(*kbo, GFP_KERNEL);
 	if (!kbo)
 		return ERR_PTR(-ENOMEM);

@@ -399,7 +399,7 @@ struct drm_gem_object *panthor_gem_create_object(struct drm_device *ddev, size_t
 {
 	struct panthor_gem_object *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/panthor/panthor_heap.c b/drivers/gpu/drm/panthor/panthor_heap.c
index 0b6ff4c0a11b..ded9cb83842c 100644
--- a/drivers/gpu/drm/panthor/panthor_heap.c
+++ b/drivers/gpu/drm/panthor/panthor_heap.c
@@ -145,7 +145,7 @@ static int panthor_alloc_heap_chunk(struct panthor_heap_pool *pool,
 	struct panthor_heap_chunk_header *hdr;
 	int ret;

-	chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
+	chunk = kmalloc_obj(*chunk, GFP_KERNEL);
 	if (!chunk)
 		return -ENOMEM;

@@ -303,7 +303,7 @@ int panthor_heap_create(struct panthor_heap_pool *pool,
 	if (!vm)
 		return -EINVAL;

-	heap = kzalloc(sizeof(*heap), GFP_KERNEL);
+	heap = kzalloc_obj(*heap, GFP_KERNEL);
 	if (!heap) {
 		ret = -ENOMEM;
 		goto err_put_vm;
@@ -541,7 +541,7 @@ panthor_heap_pool_create(struct panthor_device *ptdev, struct panthor_vm *vm)
 	struct panthor_heap_pool *pool;
 	int ret = 0;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/panthor/panthor_mmu.c
index 198d59f42578..c482bbe6fffd 100644
--- a/drivers/gpu/drm/panthor/panthor_mmu.c
+++ b/drivers/gpu/drm/panthor/panthor_mmu.c
@@ -1159,7 +1159,7 @@ panthor_vm_op_ctx_prealloc_vmas(struct panthor_vm_op_ctx *op_ctx)
 	}

 	for (u32 i = 0; i < vma_count; i++) {
-		struct panthor_vma *vma = kzalloc(sizeof(*vma), GFP_KERNEL);
+		struct panthor_vma *vma = kzalloc_obj(*vma, GFP_KERNEL);

 		if (!vma)
 			return -ENOMEM;
@@ -1257,9 +1257,8 @@ static int panthor_vm_prepare_map_op_ctx(struct panthor_vm_op_ctx *op_ctx,
 		   ((ALIGN(va + size, 1ull << 30) - ALIGN_DOWN(va, 1ull << 30)) >> 30) +
 		   ((ALIGN(va + size, 1ull << 21) - ALIGN_DOWN(va, 1ull << 21)) >> 21);

-	op_ctx->rsvd_page_tables.pages = kcalloc(pt_count,
-						 sizeof(*op_ctx->rsvd_page_tables.pages),
-						 GFP_KERNEL);
+	op_ctx->rsvd_page_tables.pages = kzalloc_objs(*op_ctx->rsvd_page_tables.pages,
+						      pt_count, GFP_KERNEL);
 	if (!op_ctx->rsvd_page_tables.pages) {
 		ret = -ENOMEM;
 		goto err_cleanup;
@@ -1312,9 +1311,9 @@ static int panthor_vm_prepare_unmap_op_ctx(struct panthor_vm_op_ctx *op_ctx,
 		goto err_cleanup;

 	if (pt_count) {
-		op_ctx->rsvd_page_tables.pages = kcalloc(pt_count,
-							 sizeof(*op_ctx->rsvd_page_tables.pages),
-							 GFP_KERNEL);
+		op_ctx->rsvd_page_tables.pages = kzalloc_objs(*op_ctx->rsvd_page_tables.pages,
+							      pt_count,
+							      GFP_KERNEL);
 		if (!op_ctx->rsvd_page_tables.pages) {
 			ret = -ENOMEM;
 			goto err_cleanup;
@@ -1587,7 +1586,7 @@ void panthor_vm_pool_destroy(struct panthor_file *pfile)
  */
 int panthor_vm_pool_create(struct panthor_file *pfile)
 {
-	pfile->vms = kzalloc(sizeof(*pfile->vms), GFP_KERNEL);
+	pfile->vms = kzalloc_obj(*pfile->vms, GFP_KERNEL);
 	if (!pfile->vms)
 		return -ENOMEM;

@@ -2426,7 +2425,7 @@ panthor_vm_create(struct panthor_device *ptdev, bool for_mcu,
 	struct panthor_vm *vm;
 	int ret;

-	vm = kzalloc(sizeof(*vm), GFP_KERNEL);
+	vm = kzalloc_obj(*vm, GFP_KERNEL);
 	if (!vm)
 		return ERR_PTR(-ENOMEM);

@@ -2609,7 +2608,7 @@ panthor_vm_bind_job_create(struct drm_file *file,
 	if (vm->destroyed || vm->unusable)
 		return ERR_PTR(-EINVAL);

-	job = kzalloc(sizeof(*job), GFP_KERNEL);
+	job = kzalloc_obj(*job, GFP_KERNEL);
 	if (!job)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c
index ca272dbae14d..e40d7be90bb9 100644
--- a/drivers/gpu/drm/panthor/panthor_sched.c
+++ b/drivers/gpu/drm/panthor/panthor_sched.c
@@ -3512,7 +3512,7 @@ group_create_queue(struct panthor_group *group,
 	if (args->priority > CSF_MAX_QUEUE_PRIO)
 		return ERR_PTR(-EINVAL);

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue)
 		return ERR_PTR(-ENOMEM);

@@ -3659,7 +3659,7 @@ int panthor_group_create(struct panthor_file *pfile,
 	    hweight64(group_args->tiler_core_mask) < group_args->max_tiler_cores)
 		return -EINVAL;

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group)
 		return -ENOMEM;

@@ -3853,7 +3853,7 @@ int panthor_group_pool_create(struct panthor_file *pfile)
 {
 	struct panthor_group_pool *gpool;

-	gpool = kzalloc(sizeof(*gpool), GFP_KERNEL);
+	gpool = kzalloc_obj(*gpool, GFP_KERNEL);
 	if (!gpool)
 		return -ENOMEM;

@@ -3979,7 +3979,7 @@ panthor_job_create(struct panthor_file *pfile,
 	if (qsubmit->latest_flush & GENMASK(30, 24))
 		return ERR_PTR(-EINVAL);

-	job = kzalloc(sizeof(*job), GFP_KERNEL);
+	job = kzalloc_obj(*job, GFP_KERNEL);
 	if (!job)
 		return ERR_PTR(-ENOMEM);

@@ -4011,7 +4011,7 @@ panthor_job_create(struct panthor_file *pfile,
 	 * the previously submitted job.
 	 */
 	if (job->call_info.size) {
-		job->done_fence = kzalloc(sizeof(*job->done_fence), GFP_KERNEL);
+		job->done_fence = kzalloc_obj(*job->done_fence, GFP_KERNEL);
 		if (!job->done_fence) {
 			ret = -ENOMEM;
 			goto err_put_job;
diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
index 2e3200db2f39..47c7f4e68dc6 100644
--- a/drivers/gpu/drm/qxl/qxl_cmd.c
+++ b/drivers/gpu/drm/qxl/qxl_cmd.c
@@ -63,7 +63,7 @@ qxl_ring_create(struct qxl_ring_header *header,
 {
 	struct qxl_ring *ring;

-	ring = kmalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kmalloc_obj(*ring, GFP_KERNEL);
 	if (!ring)
 		return NULL;

diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index a134820aac58..3b6e48b28480 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -58,9 +58,9 @@ static int qxl_alloc_client_monitors_config(struct qxl_device *qdev,
 		qdev->client_monitors_config = NULL;
 	}
 	if (!qdev->client_monitors_config) {
-		qdev->client_monitors_config = kzalloc(
-				struct_size(qdev->client_monitors_config,
-				heads, count), GFP_KERNEL);
+		qdev->client_monitors_config = kzalloc_flex(*qdev->client_monitors_config,
+							    heads, count,
+							    GFP_KERNEL);
 		if (!qdev->client_monitors_config)
 			return -ENOMEM;
 	}
@@ -1008,7 +1008,7 @@ static int qdev_crtc_init(struct drm_device *dev, int crtc_id)
 	struct qxl_device *qdev = to_qxl(dev);
 	int r;

-	qxl_crtc = kzalloc(sizeof(struct qxl_crtc), GFP_KERNEL);
+	qxl_crtc = kzalloc_obj(struct qxl_crtc, GFP_KERNEL);
 	if (!qxl_crtc)
 		return -ENOMEM;

@@ -1159,7 +1159,7 @@ static int qdev_output_init(struct drm_device *dev, int num_output)
 	struct drm_encoder *encoder;
 	int ret;

-	qxl_output = kzalloc(sizeof(struct qxl_output), GFP_KERNEL);
+	qxl_output = kzalloc_obj(struct qxl_output, GFP_KERNEL);
 	if (!qxl_output)
 		return -ENOMEM;

@@ -1241,8 +1241,8 @@ int qxl_create_monitors_object(struct qxl_device *qdev)
 		qxl_bo_physical_address(qdev, qdev->monitors_config_bo, 0);

 	memset(qdev->monitors_config, 0, monitors_config_size);
-	qdev->dumb_heads = kcalloc(qxl_num_crtc, sizeof(qdev->dumb_heads[0]),
-				   GFP_KERNEL);
+	qdev->dumb_heads = kzalloc_objs(qdev->dumb_heads[0], qxl_num_crtc,
+					GFP_KERNEL);
 	if (!qdev->dumb_heads) {
 		qxl_destroy_monitors_object(qdev);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/qxl/qxl_image.c b/drivers/gpu/drm/qxl/qxl_image.c
index 3cc45997533d..01c56913b582 100644
--- a/drivers/gpu/drm/qxl/qxl_image.c
+++ b/drivers/gpu/drm/qxl/qxl_image.c
@@ -40,7 +40,7 @@ qxl_allocate_chunk(struct qxl_device *qdev,
 	struct qxl_drm_chunk *chunk;
 	int ret;

-	chunk = kmalloc(sizeof(struct qxl_drm_chunk), GFP_KERNEL);
+	chunk = kmalloc_obj(struct qxl_drm_chunk, GFP_KERNEL);
 	if (!chunk)
 		return -ENOMEM;

@@ -63,7 +63,7 @@ qxl_image_alloc_objects(struct qxl_device *qdev,
 	struct qxl_drm_image *image;
 	int ret;

-	image = kmalloc(sizeof(struct qxl_drm_image), GFP_KERNEL);
+	image = kmalloc_obj(struct qxl_drm_image, GFP_KERNEL);
 	if (!image)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c
index 336cbff26089..7370fb7f4f5f 100644
--- a/drivers/gpu/drm/qxl/qxl_ioctl.c
+++ b/drivers/gpu/drm/qxl/qxl_ioctl.c
@@ -168,8 +168,8 @@ static int qxl_process_single_command(struct qxl_device *qdev,
 		       cmd->command_size))
 		return -EFAULT;

-	reloc_info = kmalloc_array(cmd->relocs_num,
-				   sizeof(struct qxl_reloc_info), GFP_KERNEL);
+	reloc_info = kmalloc_objs(struct qxl_reloc_info, cmd->relocs_num,
+				  GFP_KERNEL);
 	if (!reloc_info)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index 66635c55cf85..14b325703034 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -116,7 +116,7 @@ int qxl_bo_create(struct qxl_device *qdev, unsigned long size,
 	else
 		type = ttm_bo_type_device;
 	*bo_ptr = NULL;
-	bo = kzalloc(sizeof(struct qxl_bo), GFP_KERNEL);
+	bo = kzalloc_obj(struct qxl_bo, GFP_KERNEL);
 	if (bo == NULL)
 		return -ENOMEM;
 	size = roundup(size, PAGE_SIZE);
diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c
index 7b3c9a6016db..ec2b1120aef9 100644
--- a/drivers/gpu/drm/qxl/qxl_release.c
+++ b/drivers/gpu/drm/qxl/qxl_release.c
@@ -177,7 +177,7 @@ int qxl_release_list_add(struct qxl_release *release, struct qxl_bo *bo)
 			return 0;
 	}

-	entry = kmalloc(sizeof(struct qxl_bo_list), GFP_KERNEL);
+	entry = kmalloc_obj(struct qxl_bo_list, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index 1a40590077dd..7ac5e40ac851 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -109,7 +109,7 @@ static struct ttm_tt *qxl_ttm_tt_create(struct ttm_buffer_object *bo,
 {
 	struct ttm_tt *ttm;

-	ttm = kzalloc(sizeof(struct ttm_tt), GFP_KERNEL);
+	ttm = kzalloc_obj(struct ttm_tt, GFP_KERNEL);
 	if (ttm == NULL)
 		return NULL;
 	if (ttm_tt_init(ttm, bo, page_flags, ttm_cached, 0)) {
diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
index b31125eb9a65..01bbbde30914 100644
--- a/drivers/gpu/drm/radeon/atom.c
+++ b/drivers/gpu/drm/radeon/atom.c
@@ -1281,7 +1281,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
 {
 	int base;
 	struct atom_context *ctx =
-	    kzalloc(sizeof(struct atom_context), GFP_KERNEL);
+	    kzalloc_obj(struct atom_context, GFP_KERNEL);
 	char *str;
 	char name[512];
 	int i;
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
index 3d9f47bc807a..0ed85b5dd193 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -218,7 +218,7 @@ void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder,
 		return;
 	}

-	pdata = kmalloc(sizeof(struct radeon_backlight_privdata), GFP_KERNEL);
+	pdata = kmalloc_obj(struct radeon_backlight_privdata, GFP_KERNEL);
 	if (!pdata) {
 		DRM_ERROR("Memory allocation failed\n");
 		goto error;
@@ -2625,7 +2625,8 @@ radeon_atombios_set_dac_info(struct radeon_encoder *radeon_encoder)
 {
 	struct drm_device *dev = radeon_encoder->base.dev;
 	struct radeon_device *rdev = dev->dev_private;
-	struct radeon_encoder_atom_dac *dac = kzalloc(sizeof(struct radeon_encoder_atom_dac), GFP_KERNEL);
+	struct radeon_encoder_atom_dac *dac = kzalloc_obj(struct radeon_encoder_atom_dac,
+							  GFP_KERNEL);

 	if (!dac)
 		return NULL;
@@ -2638,7 +2639,8 @@ static struct radeon_encoder_atom_dig *
 radeon_atombios_set_dig_info(struct radeon_encoder *radeon_encoder)
 {
 	int encoder_enum = (radeon_encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT;
-	struct radeon_encoder_atom_dig *dig = kzalloc(sizeof(struct radeon_encoder_atom_dig), GFP_KERNEL);
+	struct radeon_encoder_atom_dig *dig = kzalloc_obj(struct radeon_encoder_atom_dig,
+							  GFP_KERNEL);

 	if (!dig)
 		return NULL;
@@ -2676,7 +2678,7 @@ radeon_add_atom_encoder(struct drm_device *dev,
 	}

 	/* add a new one */
-	radeon_encoder = kzalloc(sizeof(struct radeon_encoder), GFP_KERNEL);
+	radeon_encoder = kzalloc_obj(struct radeon_encoder, GFP_KERNEL);
 	if (!radeon_encoder)
 		return;

diff --git a/drivers/gpu/drm/radeon/btc_dpm.c b/drivers/gpu/drm/radeon/btc_dpm.c
index 70931b04bbac..36486a9c7b06 100644
--- a/drivers/gpu/drm/radeon/btc_dpm.c
+++ b/drivers/gpu/drm/radeon/btc_dpm.c
@@ -1992,7 +1992,7 @@ static int btc_initialize_mc_reg_table(struct radeon_device *rdev)
 	struct evergreen_mc_reg_table *eg_table = &eg_pi->mc_reg_table;
 	u8 module_index = rv770_get_memory_module_index(rdev);

-	table = kzalloc(sizeof(struct atom_mc_reg_table), GFP_KERNEL);
+	table = kzalloc_obj(struct atom_mc_reg_table, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -2526,7 +2526,7 @@ int btc_dpm_init(struct radeon_device *rdev)
 	struct atom_clock_dividers dividers;
 	int ret;

-	eg_pi = kzalloc(sizeof(struct evergreen_power_info), GFP_KERNEL);
+	eg_pi = kzalloc_obj(struct evergreen_power_info, GFP_KERNEL);
 	if (eg_pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = eg_pi;
@@ -2552,9 +2552,8 @@ int btc_dpm_init(struct radeon_device *rdev)
 		return ret;

 	rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries =
-		kcalloc(4,
-			sizeof(struct radeon_clock_voltage_dependency_entry),
-			GFP_KERNEL);
+		kzalloc_objs(struct radeon_clock_voltage_dependency_entry, 4,
+			     GFP_KERNEL);
 	if (!rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries) {
 		r600_free_extended_power_table(rdev);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c
index ba8db1d07c07..f8de657c3ed0 100644
--- a/drivers/gpu/drm/radeon/ci_dpm.c
+++ b/drivers/gpu/drm/radeon/ci_dpm.c
@@ -4579,7 +4579,7 @@ static int ci_initialize_mc_reg_table(struct radeon_device *rdev)
 	u8 module_index = rv770_get_memory_module_index(rdev);
 	int ret;

-	table = kzalloc(sizeof(struct atom_mc_reg_table), GFP_KERNEL);
+	table = kzalloc_obj(struct atom_mc_reg_table, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -5517,9 +5517,8 @@ static int ci_parse_power_table(struct radeon_device *rdev)
 		(mode_info->atom_context->bios + data_offset +
 		 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset));

-	rdev->pm.dpm.ps = kcalloc(state_array->ucNumEntries,
-				  sizeof(struct radeon_ps),
-				  GFP_KERNEL);
+	rdev->pm.dpm.ps = kzalloc_objs(struct radeon_ps,
+				       state_array->ucNumEntries, GFP_KERNEL);
 	if (!rdev->pm.dpm.ps)
 		return -ENOMEM;
 	power_state_offset = (u8 *)state_array->states;
@@ -5534,7 +5533,7 @@ static int ci_parse_power_table(struct radeon_device *rdev)
 			ret = -EINVAL;
 			goto err_free_ps;
 		}
-		ps = kzalloc(sizeof(struct ci_ps), GFP_KERNEL);
+		ps = kzalloc_obj(struct ci_ps, GFP_KERNEL);
 		if (ps == NULL) {
 			ret = -ENOMEM;
 			goto err_free_ps;
@@ -5638,7 +5637,7 @@ int ci_dpm_init(struct radeon_device *rdev)
 	struct pci_dev *root = rdev->pdev->bus->self;
 	int ret;

-	pi = kzalloc(sizeof(struct ci_power_info), GFP_KERNEL);
+	pi = kzalloc_obj(struct ci_power_info, GFP_KERNEL);
 	if (pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = pi;
@@ -5741,9 +5740,8 @@ int ci_dpm_init(struct radeon_device *rdev)
 	ci_set_private_data_variables_based_on_pptable(rdev);

 	rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries =
-		kcalloc(4,
-			sizeof(struct radeon_clock_voltage_dependency_entry),
-			GFP_KERNEL);
+		kzalloc_objs(struct radeon_clock_voltage_dependency_entry, 4,
+			     GFP_KERNEL);
 	if (!rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries) {
 		ci_dpm_fini(rdev);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/radeon/cypress_dpm.c b/drivers/gpu/drm/radeon/cypress_dpm.c
index 72a0768df00f..1fe0eecb3ea3 100644
--- a/drivers/gpu/drm/radeon/cypress_dpm.c
+++ b/drivers/gpu/drm/radeon/cypress_dpm.c
@@ -2028,7 +2028,7 @@ int cypress_dpm_init(struct radeon_device *rdev)
 	struct atom_clock_dividers dividers;
 	int ret;

-	eg_pi = kzalloc(sizeof(struct evergreen_power_info), GFP_KERNEL);
+	eg_pi = kzalloc_obj(struct evergreen_power_info, GFP_KERNEL);
 	if (eg_pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = eg_pi;
diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c
index 1162cb5d75ed..257caf19583a 100644
--- a/drivers/gpu/drm/radeon/evergreen_cs.c
+++ b/drivers/gpu/drm/radeon/evergreen_cs.c
@@ -2769,7 +2769,7 @@ int evergreen_cs_parse(struct radeon_cs_parser *p)

 	if (p->track == NULL) {
 		/* initialize tracker, we are in kms */
-		track = kzalloc(sizeof(*track), GFP_KERNEL);
+		track = kzalloc_obj(*track, GFP_KERNEL);
 		if (track == NULL)
 			return -ENOMEM;
 		evergreen_cs_track_init(track);
diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c
index 4aa050385284..7c896c24f03d 100644
--- a/drivers/gpu/drm/radeon/kv_dpm.c
+++ b/drivers/gpu/drm/radeon/kv_dpm.c
@@ -2457,9 +2457,8 @@ static int kv_parse_power_table(struct radeon_device *rdev)
 		(mode_info->atom_context->bios + data_offset +
 		 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset));

-	rdev->pm.dpm.ps = kcalloc(state_array->ucNumEntries,
-				  sizeof(struct radeon_ps),
-				  GFP_KERNEL);
+	rdev->pm.dpm.ps = kzalloc_objs(struct radeon_ps,
+				       state_array->ucNumEntries, GFP_KERNEL);
 	if (!rdev->pm.dpm.ps)
 		return -ENOMEM;
 	power_state_offset = (u8 *)state_array->states;
@@ -2471,7 +2470,7 @@ static int kv_parse_power_table(struct radeon_device *rdev)
 			&non_clock_info_array->nonClockInfo[non_clock_array_index];
 		if (!rdev->pm.power_state[i].clock_info)
 			return -EINVAL;
-		ps = kzalloc(sizeof(struct kv_ps), GFP_KERNEL);
+		ps = kzalloc_obj(struct kv_ps, GFP_KERNEL);
 		if (ps == NULL) {
 			kfree(rdev->pm.dpm.ps);
 			return -ENOMEM;
@@ -2520,7 +2519,7 @@ int kv_dpm_init(struct radeon_device *rdev)
 	struct kv_power_info *pi;
 	int ret, i;

-	pi = kzalloc(sizeof(struct kv_power_info), GFP_KERNEL);
+	pi = kzalloc_obj(struct kv_power_info, GFP_KERNEL);
 	if (pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = pi;
diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c
index 82edbfb259bf..c4305bacd47d 100644
--- a/drivers/gpu/drm/radeon/ni_dpm.c
+++ b/drivers/gpu/drm/radeon/ni_dpm.c
@@ -2104,7 +2104,7 @@ static int ni_init_smc_spll_table(struct radeon_device *rdev)
 	if (ni_pi->spll_table_start == 0)
 		return -EINVAL;

-	spll_table = kzalloc(sizeof(SMC_NISLANDS_SPLL_DIV_TABLE), GFP_KERNEL);
+	spll_table = kzalloc_obj(SMC_NISLANDS_SPLL_DIV_TABLE, GFP_KERNEL);
 	if (spll_table == NULL)
 		return -ENOMEM;

@@ -2879,7 +2879,7 @@ static int ni_initialize_mc_reg_table(struct radeon_device *rdev)
 	struct ni_mc_reg_table *ni_table = &ni_pi->mc_reg_table;
 	u8 module_index = rv770_get_memory_module_index(rdev);

-	table = kzalloc(sizeof(struct atom_mc_reg_table), GFP_KERNEL);
+	table = kzalloc_obj(struct atom_mc_reg_table, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -3147,7 +3147,7 @@ static int ni_initialize_smc_cac_tables(struct radeon_device *rdev)
 	if (ni_pi->enable_cac == false)
 		return 0;

-	cac_tables = kzalloc(sizeof(PP_NIslands_CACTABLES), GFP_KERNEL);
+	cac_tables = kzalloc_obj(PP_NIslands_CACTABLES, GFP_KERNEL);
 	if (!cac_tables)
 		return -ENOMEM;

@@ -4000,9 +4000,9 @@ static int ni_parse_power_table(struct radeon_device *rdev)
 		return -EINVAL;
 	power_info = (union power_info *)(mode_info->atom_context->bios + data_offset);

-	rdev->pm.dpm.ps = kcalloc(power_info->pplib.ucNumStates,
-				  sizeof(struct radeon_ps),
-				  GFP_KERNEL);
+	rdev->pm.dpm.ps = kzalloc_objs(struct radeon_ps,
+				       power_info->pplib.ucNumStates,
+				       GFP_KERNEL);
 	if (!rdev->pm.dpm.ps)
 		return -ENOMEM;

@@ -4018,7 +4018,7 @@ static int ni_parse_power_table(struct radeon_device *rdev)
 			  power_info->pplib.ucNonClockSize));
 		if (power_info->pplib.ucStateEntrySize - 1) {
 			u8 *idx;
-			ps = kzalloc(sizeof(struct ni_ps), GFP_KERNEL);
+			ps = kzalloc_obj(struct ni_ps, GFP_KERNEL);
 			if (ps == NULL) {
 				kfree(rdev->pm.dpm.ps);
 				return -ENOMEM;
@@ -4051,7 +4051,7 @@ int ni_dpm_init(struct radeon_device *rdev)
 	struct atom_clock_dividers dividers;
 	int ret;

-	ni_pi = kzalloc(sizeof(struct ni_power_info), GFP_KERNEL);
+	ni_pi = kzalloc_obj(struct ni_power_info, GFP_KERNEL);
 	if (ni_pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = ni_pi;
@@ -4078,9 +4078,8 @@ int ni_dpm_init(struct radeon_device *rdev)
 		return ret;

 	rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries =
-		kcalloc(4,
-			sizeof(struct radeon_clock_voltage_dependency_entry),
-			GFP_KERNEL);
+		kzalloc_objs(struct radeon_clock_voltage_dependency_entry, 4,
+			     GFP_KERNEL);
 	if (!rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries) {
 		r600_free_extended_power_table(rdev);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index 07a9c523a17a..53d336b15662 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -2063,7 +2063,7 @@ int r100_cs_parse(struct radeon_cs_parser *p)
 	struct r100_cs_track *track;
 	int r;

-	track = kzalloc(sizeof(*track), GFP_KERNEL);
+	track = kzalloc_obj(*track, GFP_KERNEL);
 	if (!track)
 		return -ENOMEM;
 	r100_cs_track_clear(p->rdev, track);
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
index d2ee6deec039..aad94b49671c 100644
--- a/drivers/gpu/drm/radeon/r300.c
+++ b/drivers/gpu/drm/radeon/r300.c
@@ -1284,7 +1284,7 @@ int r300_cs_parse(struct radeon_cs_parser *p)
 	struct r100_cs_track *track;
 	int r;

-	track = kzalloc(sizeof(*track), GFP_KERNEL);
+	track = kzalloc_obj(*track, GFP_KERNEL);
 	if (track == NULL)
 		return -ENOMEM;
 	r100_cs_track_clear(p->rdev, track);
diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
index 8eeceeeca362..5db10ad3fd8b 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -2282,7 +2282,7 @@ int r600_cs_parse(struct radeon_cs_parser *p)

 	if (p->track == NULL) {
 		/* initialize tracker, we are in kms */
-		track = kzalloc(sizeof(*track), GFP_KERNEL);
+		track = kzalloc_obj(*track, GFP_KERNEL);
 		if (track == NULL)
 			return -ENOMEM;
 		r600_cs_track_init(track);
diff --git a/drivers/gpu/drm/radeon/r600_dpm.c b/drivers/gpu/drm/radeon/r600_dpm.c
index 81d58ef667dd..cfe851bf1848 100644
--- a/drivers/gpu/drm/radeon/r600_dpm.c
+++ b/drivers/gpu/drm/radeon/r600_dpm.c
@@ -821,9 +821,9 @@ static int r600_parse_clk_voltage_dep_table(struct radeon_clock_voltage_dependen
 	int i;
 	ATOM_PPLIB_Clock_Voltage_Dependency_Record *entry;

-	radeon_table->entries = kcalloc(atom_table->ucNumEntries,
-					sizeof(struct radeon_clock_voltage_dependency_entry),
-					GFP_KERNEL);
+	radeon_table->entries = kzalloc_objs(struct radeon_clock_voltage_dependency_entry,
+					     atom_table->ucNumEntries,
+					     GFP_KERNEL);
 	if (!radeon_table->entries)
 		return -ENOMEM;

@@ -988,9 +988,8 @@ int r600_parse_extended_power_table(struct radeon_device *rdev)
 			ATOM_PPLIB_PhaseSheddingLimits_Record *entry;

 			rdev->pm.dpm.dyn_state.phase_shedding_limits_table.entries =
-				kcalloc(psl->ucNumEntries,
-					sizeof(struct radeon_phase_shedding_limits_entry),
-					GFP_KERNEL);
+				kzalloc_objs(struct radeon_phase_shedding_limits_entry,
+					     psl->ucNumEntries, GFP_KERNEL);
 			if (!rdev->pm.dpm.dyn_state.phase_shedding_limits_table.entries) {
 				r600_free_extended_power_table(rdev);
 				return -ENOMEM;
@@ -1198,7 +1197,7 @@ int r600_parse_extended_power_table(struct radeon_device *rdev)
 				(mode_info->atom_context->bios + data_offset +
 				 le16_to_cpu(ext_hdr->usPPMTableOffset));
 			rdev->pm.dpm.dyn_state.ppm_table =
-				kzalloc(sizeof(struct radeon_ppm_table), GFP_KERNEL);
+				kzalloc_obj(struct radeon_ppm_table, GFP_KERNEL);
 			if (!rdev->pm.dpm.dyn_state.ppm_table) {
 				r600_free_extended_power_table(rdev);
 				return -ENOMEM;
@@ -1256,7 +1255,8 @@ int r600_parse_extended_power_table(struct radeon_device *rdev)
 					 le16_to_cpu(ext_hdr->usPowerTuneTableOffset));
 			ATOM_PowerTune_Table *pt;
 			rdev->pm.dpm.dyn_state.cac_tdp_table =
-				kzalloc(sizeof(struct radeon_cac_tdp_table), GFP_KERNEL);
+				kzalloc_obj(struct radeon_cac_tdp_table,
+					    GFP_KERNEL);
 			if (!rdev->pm.dpm.dyn_state.cac_tdp_table) {
 				r600_free_extended_power_table(rdev);
 				return -ENOMEM;
diff --git a/drivers/gpu/drm/radeon/radeon_agp.c b/drivers/gpu/drm/radeon/radeon_agp.c
index 89d7b0e9e79f..fb75d0bb8726 100644
--- a/drivers/gpu/drm/radeon/radeon_agp.c
+++ b/drivers/gpu/drm/radeon/radeon_agp.c
@@ -132,7 +132,7 @@ struct radeon_agp_head *radeon_agp_head_init(struct drm_device *dev)
 	struct pci_dev *pdev = to_pci_dev(dev->dev);
 	struct radeon_agp_head *head;

-	head = kzalloc(sizeof(*head), GFP_KERNEL);
+	head = kzalloc_obj(*head, GFP_KERNEL);
 	if (!head)
 		return NULL;
 	head->bridge = agp_find_bridge(pdev);
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
index 81a0a91921b9..35c37b6054ad 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -1632,7 +1632,7 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct
 		lvds_info =
 			(union lvds_info *)(mode_info->atom_context->bios + data_offset);
 		lvds =
-		    kzalloc(sizeof(struct radeon_encoder_atom_dig), GFP_KERNEL);
+		    kzalloc_obj(struct radeon_encoder_atom_dig, GFP_KERNEL);

 		if (!lvds)
 			return NULL;
@@ -1773,7 +1773,8 @@ radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder)
 		dac_info = (struct _COMPASSIONATE_DATA *)
 			(mode_info->atom_context->bios + data_offset);

-		p_dac = kzalloc(sizeof(struct radeon_encoder_primary_dac), GFP_KERNEL);
+		p_dac = kzalloc_obj(struct radeon_encoder_primary_dac,
+				    GFP_KERNEL);

 		if (!p_dac)
 			return NULL;
@@ -1960,7 +1961,7 @@ radeon_atombios_get_tv_dac_info(struct radeon_encoder *encoder)
 		dac_info = (struct _COMPASSIONATE_DATA *)
 			(mode_info->atom_context->bios + data_offset);

-		tv_dac = kzalloc(sizeof(struct radeon_encoder_tv_dac), GFP_KERNEL);
+		tv_dac = kzalloc_obj(struct radeon_encoder_tv_dac, GFP_KERNEL);

 		if (!tv_dac)
 			return NULL;
@@ -2117,9 +2118,8 @@ static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev)
 		num_modes = ATOM_MAX_NUMBEROF_POWER_BLOCK;
 	if (num_modes == 0)
 		return state_index;
-	rdev->pm.power_state = kcalloc(num_modes,
-				       sizeof(struct radeon_power_state),
-				       GFP_KERNEL);
+	rdev->pm.power_state = kzalloc_objs(struct radeon_power_state,
+					    num_modes, GFP_KERNEL);
 	if (!rdev->pm.power_state)
 		return state_index;
 	/* last mode is usually default, array is low to high */
@@ -2127,8 +2127,8 @@ static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev)
 		/* avoid memory leaks from invalid modes or unknown frev. */
 		if (!rdev->pm.power_state[state_index].clock_info) {
 			rdev->pm.power_state[state_index].clock_info =
-				kzalloc(sizeof(struct radeon_pm_clock_info),
-					GFP_KERNEL);
+				kzalloc_obj(struct radeon_pm_clock_info,
+					    GFP_KERNEL);
 		}
 		if (!rdev->pm.power_state[state_index].clock_info)
 			goto out;
@@ -2591,9 +2591,9 @@ static int radeon_atombios_parse_power_table_4_5(struct radeon_device *rdev)
 	radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController);
 	if (power_info->pplib.ucNumStates == 0)
 		return state_index;
-	rdev->pm.power_state = kcalloc(power_info->pplib.ucNumStates,
-				       sizeof(struct radeon_power_state),
-				       GFP_KERNEL);
+	rdev->pm.power_state = kzalloc_objs(struct radeon_power_state,
+					    power_info->pplib.ucNumStates,
+					    GFP_KERNEL);
 	if (!rdev->pm.power_state)
 		return state_index;
 	/* first mode is usually default, followed by low to high */
@@ -2609,10 +2609,9 @@ static int radeon_atombios_parse_power_table_4_5(struct radeon_device *rdev)
 			 (power_state->v1.ucNonClockStateIndex *
 			  power_info->pplib.ucNonClockSize));
 		rdev->pm.power_state[i].clock_info =
-			kcalloc((power_info->pplib.ucStateEntrySize - 1) ?
-				(power_info->pplib.ucStateEntrySize - 1) : 1,
-				sizeof(struct radeon_pm_clock_info),
-				GFP_KERNEL);
+			kzalloc_objs(struct radeon_pm_clock_info,
+				     (power_info->pplib.ucStateEntrySize - 1) ? (power_info->pplib.ucStateEntrySize - 1) : 1,
+				     GFP_KERNEL);
 		if (!rdev->pm.power_state[i].clock_info)
 			return state_index;
 		if (power_info->pplib.ucStateEntrySize - 1) {
@@ -2694,9 +2693,9 @@ static int radeon_atombios_parse_power_table_6(struct radeon_device *rdev)
 		 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset));
 	if (state_array->ucNumEntries == 0)
 		return state_index;
-	rdev->pm.power_state = kcalloc(state_array->ucNumEntries,
-				       sizeof(struct radeon_power_state),
-				       GFP_KERNEL);
+	rdev->pm.power_state = kzalloc_objs(struct radeon_power_state,
+					    state_array->ucNumEntries,
+					    GFP_KERNEL);
 	if (!rdev->pm.power_state)
 		return state_index;
 	power_state_offset = (u8 *)state_array->states;
@@ -2707,10 +2706,9 @@ static int radeon_atombios_parse_power_table_6(struct radeon_device *rdev)
 		non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
 			&non_clock_info_array->nonClockInfo[non_clock_array_index];
 		rdev->pm.power_state[i].clock_info =
-			kcalloc(power_state->v2.ucNumDPMLevels ?
-				power_state->v2.ucNumDPMLevels : 1,
-				sizeof(struct radeon_pm_clock_info),
-				GFP_KERNEL);
+			kzalloc_objs(struct radeon_pm_clock_info,
+				     power_state->v2.ucNumDPMLevels ? power_state->v2.ucNumDPMLevels : 1,
+				     GFP_KERNEL);
 		if (!rdev->pm.power_state[i].clock_info)
 			return state_index;
 		if (power_state->v2.ucNumDPMLevels) {
@@ -2787,12 +2785,12 @@ void radeon_atombios_get_power_modes(struct radeon_device *rdev)
 	}

 	if (state_index == 0) {
-		rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state), GFP_KERNEL);
+		rdev->pm.power_state = kzalloc_obj(struct radeon_power_state,
+						   GFP_KERNEL);
 		if (rdev->pm.power_state) {
 			rdev->pm.power_state[0].clock_info =
-				kcalloc(1,
-				        sizeof(struct radeon_pm_clock_info),
-				        GFP_KERNEL);
+				kzalloc_objs(struct radeon_pm_clock_info, 1,
+				             GFP_KERNEL);
 			if (rdev->pm.power_state[0].clock_info) {
 				/* add the default mode */
 				rdev->pm.power_state[state_index].type =
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
index df8d7f56b028..6cb0b7cfe510 100644
--- a/drivers/gpu/drm/radeon/radeon_combios.c
+++ b/drivers/gpu/drm/radeon/radeon_combios.c
@@ -851,8 +851,7 @@ struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct
 	struct radeon_encoder_primary_dac *p_dac;
 	int found = 0;

-	p_dac = kzalloc(sizeof(struct radeon_encoder_primary_dac),
-			GFP_KERNEL);
+	p_dac = kzalloc_obj(struct radeon_encoder_primary_dac, GFP_KERNEL);

 	if (!p_dac)
 		return NULL;
@@ -1002,7 +1001,7 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct
 	struct radeon_encoder_tv_dac *tv_dac;
 	int found = 0;

-	tv_dac = kzalloc(sizeof(struct radeon_encoder_tv_dac), GFP_KERNEL);
+	tv_dac = kzalloc_obj(struct radeon_encoder_tv_dac, GFP_KERNEL);
 	if (!tv_dac)
 		return NULL;

@@ -1090,7 +1089,7 @@ static struct radeon_encoder_lvds *radeon_legacy_get_lvds_info_from_regs(struct
 	uint32_t ppll_div_sel, ppll_val;
 	uint32_t lvds_ss_gen_cntl = RREG32(RADEON_LVDS_SS_GEN_CNTL);

-	lvds = kzalloc(sizeof(struct radeon_encoder_lvds), GFP_KERNEL);
+	lvds = kzalloc_obj(struct radeon_encoder_lvds, GFP_KERNEL);

 	if (!lvds)
 		return NULL;
@@ -1165,7 +1164,7 @@ struct radeon_encoder_lvds *radeon_combios_get_lvds_info(struct radeon_encoder
 	lcd_info = combios_get_table_offset(dev, COMBIOS_LCD_INFO_TABLE);

 	if (lcd_info) {
-		lvds = kzalloc(sizeof(struct radeon_encoder_lvds), GFP_KERNEL);
+		lvds = kzalloc_obj(struct radeon_encoder_lvds, GFP_KERNEL);

 		if (!lvds)
 			return NULL;
@@ -2630,16 +2629,14 @@ void radeon_combios_get_power_modes(struct radeon_device *rdev)
 	rdev->pm.default_power_state_index = -1;

 	/* allocate 2 power states */
-	rdev->pm.power_state = kcalloc(2, sizeof(struct radeon_power_state),
-				       GFP_KERNEL);
+	rdev->pm.power_state = kzalloc_objs(struct radeon_power_state, 2,
+					    GFP_KERNEL);
 	if (rdev->pm.power_state) {
 		/* allocate 1 clock mode per state */
 		rdev->pm.power_state[0].clock_info =
-			kcalloc(1, sizeof(struct radeon_pm_clock_info),
-				GFP_KERNEL);
+			kzalloc_objs(struct radeon_pm_clock_info, 1, GFP_KERNEL);
 		rdev->pm.power_state[1].clock_info =
-			kcalloc(1, sizeof(struct radeon_pm_clock_info),
-				GFP_KERNEL);
+			kzalloc_objs(struct radeon_pm_clock_info, 1, GFP_KERNEL);
 		if (!rdev->pm.power_state[0].clock_info ||
 		    !rdev->pm.power_state[1].clock_info)
 			goto pm_failed;
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index 012d8b2295b8..e5bf06d7b981 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -1887,7 +1887,7 @@ radeon_add_atom_connector(struct drm_device *dev,
 		}
 	}

-	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
+	radeon_connector = kzalloc_obj(struct radeon_connector, GFP_KERNEL);
 	if (!radeon_connector)
 		return;

@@ -1907,7 +1907,8 @@ radeon_add_atom_connector(struct drm_device *dev,
 	}

 	if (is_dp_bridge) {
-		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
+		radeon_dig_connector = kzalloc_obj(struct radeon_connector_atom_dig,
+						   GFP_KERNEL);
 		if (!radeon_dig_connector)
 			goto failed;
 		radeon_dig_connector->igp_lane_info = igp_lane_info;
@@ -2078,7 +2079,8 @@ radeon_add_atom_connector(struct drm_device *dev,
 			break;
 		case DRM_MODE_CONNECTOR_DVII:
 		case DRM_MODE_CONNECTOR_DVID:
-			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
+			radeon_dig_connector = kzalloc_obj(struct radeon_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!radeon_dig_connector)
 				goto failed;
 			radeon_dig_connector->igp_lane_info = igp_lane_info;
@@ -2140,7 +2142,8 @@ radeon_add_atom_connector(struct drm_device *dev,
 			break;
 		case DRM_MODE_CONNECTOR_HDMIA:
 		case DRM_MODE_CONNECTOR_HDMIB:
-			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
+			radeon_dig_connector = kzalloc_obj(struct radeon_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!radeon_dig_connector)
 				goto failed;
 			radeon_dig_connector->igp_lane_info = igp_lane_info;
@@ -2195,7 +2198,8 @@ radeon_add_atom_connector(struct drm_device *dev,
 				connector->doublescan_allowed = false;
 			break;
 		case DRM_MODE_CONNECTOR_DisplayPort:
-			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
+			radeon_dig_connector = kzalloc_obj(struct radeon_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!radeon_dig_connector)
 				goto failed;
 			radeon_dig_connector->igp_lane_info = igp_lane_info;
@@ -2250,7 +2254,8 @@ radeon_add_atom_connector(struct drm_device *dev,
 			connector->doublescan_allowed = false;
 			break;
 		case DRM_MODE_CONNECTOR_eDP:
-			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
+			radeon_dig_connector = kzalloc_obj(struct radeon_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!radeon_dig_connector)
 				goto failed;
 			radeon_dig_connector->igp_lane_info = igp_lane_info;
@@ -2297,7 +2302,8 @@ radeon_add_atom_connector(struct drm_device *dev,
 			connector->doublescan_allowed = false;
 			break;
 		case DRM_MODE_CONNECTOR_LVDS:
-			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
+			radeon_dig_connector = kzalloc_obj(struct radeon_connector_atom_dig,
+							   GFP_KERNEL);
 			if (!radeon_dig_connector)
 				goto failed;
 			radeon_dig_connector->igp_lane_info = igp_lane_info;
@@ -2379,7 +2385,7 @@ radeon_add_legacy_connector(struct drm_device *dev,
 		}
 	}

-	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
+	radeon_connector = kzalloc_obj(struct radeon_connector, GFP_KERNEL);
 	if (!radeon_connector)
 		return;

diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
index 3f9c0011244f..3b2cbd69b58b 100644
--- a/drivers/gpu/drm/radeon/radeon_cs.c
+++ b/drivers/gpu/drm/radeon/radeon_cs.c
@@ -93,8 +93,7 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p)
 	p->dma_reloc_idx = 0;
 	/* FIXME: we assume that each relocs use 4 dwords */
 	p->nrelocs = chunk->length_dw / 4;
-	p->relocs = kvcalloc(p->nrelocs, sizeof(struct radeon_bo_list),
-			GFP_KERNEL);
+	p->relocs = kvzalloc_objs(struct radeon_bo_list, p->nrelocs, GFP_KERNEL);
 	if (p->relocs == NULL) {
 		return -ENOMEM;
 	}
@@ -297,7 +296,8 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
 	}
 	p->cs_flags = 0;
 	p->nchunks = cs->num_chunks;
-	p->chunks = kvcalloc(p->nchunks, sizeof(struct radeon_cs_chunk), GFP_KERNEL);
+	p->chunks = kvzalloc_objs(struct radeon_cs_chunk, p->nchunks,
+				  GFP_KERNEL);
 	if (p->chunks == NULL) {
 		return -ENOMEM;
 	}
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 5faae0361361..c58d24fe74f9 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -974,7 +974,7 @@ static uint32_t cail_ioreg_read(struct card_info *info, uint32_t reg)
 int radeon_atombios_init(struct radeon_device *rdev)
 {
 	struct card_info *atom_card_info =
-	    kzalloc(sizeof(struct card_info), GFP_KERNEL);
+	    kzalloc_obj(struct card_info, GFP_KERNEL);

 	if (!atom_card_info)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index bc28117e01b4..4296ebd3dd94 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -494,7 +494,7 @@ static int radeon_crtc_page_flip_target(struct drm_crtc *crtc,
 	unsigned long flags;
 	int r;

-	work = kzalloc(sizeof *work, GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (work == NULL)
 		return -ENOMEM;

@@ -682,7 +682,7 @@ static void radeon_crtc_init(struct drm_device *dev, int index)
 	struct radeon_device *rdev = dev->dev_private;
 	struct radeon_crtc *radeon_crtc;

-	radeon_crtc = kzalloc(sizeof(*radeon_crtc), GFP_KERNEL);
+	radeon_crtc = kzalloc_obj(*radeon_crtc, GFP_KERNEL);
 	if (radeon_crtc == NULL)
 		return;

@@ -1346,7 +1346,7 @@ radeon_user_framebuffer_create(struct drm_device *dev,
 		return ERR_PTR(-EINVAL);
 	}

-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	fb = kzalloc_obj(*fb, GFP_KERNEL);
 	if (fb == NULL) {
 		drm_gem_object_put(obj);
 		return ERR_PTR(-ENOMEM);
@@ -1539,7 +1539,8 @@ static void radeon_afmt_init(struct radeon_device *rdev)

 		BUG_ON(num_afmt > ARRAY_SIZE(eg_offsets));
 		for (i = 0; i < num_afmt; i++) {
-			rdev->mode_info.afmt[i] = kzalloc(sizeof(struct radeon_afmt), GFP_KERNEL);
+			rdev->mode_info.afmt[i] = kzalloc_obj(struct radeon_afmt,
+							      GFP_KERNEL);
 			if (rdev->mode_info.afmt[i]) {
 				rdev->mode_info.afmt[i]->offset = eg_offsets[i];
 				rdev->mode_info.afmt[i]->id = i;
@@ -1547,26 +1548,30 @@ static void radeon_afmt_init(struct radeon_device *rdev)
 		}
 	} else if (ASIC_IS_DCE3(rdev)) {
 		/* DCE3.x has 2 audio blocks tied to DIG encoders */
-		rdev->mode_info.afmt[0] = kzalloc(sizeof(struct radeon_afmt), GFP_KERNEL);
+		rdev->mode_info.afmt[0] = kzalloc_obj(struct radeon_afmt,
+						      GFP_KERNEL);
 		if (rdev->mode_info.afmt[0]) {
 			rdev->mode_info.afmt[0]->offset = DCE3_HDMI_OFFSET0;
 			rdev->mode_info.afmt[0]->id = 0;
 		}
-		rdev->mode_info.afmt[1] = kzalloc(sizeof(struct radeon_afmt), GFP_KERNEL);
+		rdev->mode_info.afmt[1] = kzalloc_obj(struct radeon_afmt,
+						      GFP_KERNEL);
 		if (rdev->mode_info.afmt[1]) {
 			rdev->mode_info.afmt[1]->offset = DCE3_HDMI_OFFSET1;
 			rdev->mode_info.afmt[1]->id = 1;
 		}
 	} else if (ASIC_IS_DCE2(rdev)) {
 		/* DCE2 has at least 1 routable audio block */
-		rdev->mode_info.afmt[0] = kzalloc(sizeof(struct radeon_afmt), GFP_KERNEL);
+		rdev->mode_info.afmt[0] = kzalloc_obj(struct radeon_afmt,
+						      GFP_KERNEL);
 		if (rdev->mode_info.afmt[0]) {
 			rdev->mode_info.afmt[0]->offset = DCE2_HDMI_OFFSET0;
 			rdev->mode_info.afmt[0]->id = 0;
 		}
 		/* r6xx has 2 routable audio blocks */
 		if (rdev->family >= CHIP_R600) {
-			rdev->mode_info.afmt[1] = kzalloc(sizeof(struct radeon_afmt), GFP_KERNEL);
+			rdev->mode_info.afmt[1] = kzalloc_obj(struct radeon_afmt,
+							      GFP_KERNEL);
 			if (rdev->mode_info.afmt[1]) {
 				rdev->mode_info.afmt[1]->offset = DCE2_HDMI_OFFSET1;
 				rdev->mode_info.afmt[1]->id = 1;
diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c
index fd083aaa91bb..9d760c221c5a 100644
--- a/drivers/gpu/drm/radeon/radeon_fbdev.c
+++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
@@ -228,7 +228,7 @@ int radeon_fbdev_driver_fbdev_probe(struct drm_fb_helper *fb_helper,
 	}
 	rbo = gem_to_radeon_bo(gobj);

-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	fb = kzalloc_obj(*fb, GFP_KERNEL);
 	if (!fb) {
 		ret = -ENOMEM;
 		goto err_radeon_fbdev_destroy_pinned_object;
diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
index 167d6f122b8e..6a13299089d5 100644
--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -137,7 +137,7 @@ int radeon_fence_emit(struct radeon_device *rdev,
 	u64 seq;

 	/* we are protected by the ring emission mutex */
-	*fence = kmalloc(sizeof(struct radeon_fence), GFP_KERNEL);
+	*fence = kmalloc_obj(struct radeon_fence, GFP_KERNEL);
 	if ((*fence) == NULL)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c
index f3ba4187092c..007d9353b1ab 100644
--- a/drivers/gpu/drm/radeon/radeon_i2c.c
+++ b/drivers/gpu/drm/radeon/radeon_i2c.c
@@ -912,7 +912,7 @@ struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
 	if (rec->mm_i2c && (radeon_hw_i2c == 0))
 		return NULL;

-	i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL);
+	i2c = kzalloc_obj(struct radeon_i2c_chan, GFP_KERNEL);
 	if (i2c == NULL)
 		return NULL;

diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
index 7cbe02ffb193..9833d77170fc 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -640,7 +640,7 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
 	/* new gpu have virtual address space support */
 	if (rdev->family >= CHIP_CAYMAN) {

-		fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
+		fpriv = kzalloc_obj(*fpriv, GFP_KERNEL);
 		if (unlikely(!fpriv)) {
 			r = -ENOMEM;
 			goto err_suspend;
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
index d1e8b9757a65..f2bb046a595e 100644
--- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
+++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
@@ -394,7 +394,7 @@ void radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder,
 		return;
 	}

-	pdata = kmalloc(sizeof(struct radeon_backlight_privdata), GFP_KERNEL);
+	pdata = kmalloc_obj(struct radeon_backlight_privdata, GFP_KERNEL);
 	if (!pdata) {
 		DRM_ERROR("Memory allocation failed\n");
 		goto error;
@@ -1695,7 +1695,7 @@ static struct radeon_encoder_int_tmds *radeon_legacy_get_tmds_info(struct radeon
 	struct radeon_encoder_int_tmds *tmds;
 	bool ret;

-	tmds = kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL);
+	tmds = kzalloc_obj(struct radeon_encoder_int_tmds, GFP_KERNEL);

 	if (!tmds)
 		return NULL;
@@ -1721,7 +1721,7 @@ static struct radeon_encoder_ext_tmds *radeon_legacy_get_ext_tmds_info(struct ra
 	if (rdev->is_atom_bios)
 		return NULL;

-	tmds = kzalloc(sizeof(struct radeon_encoder_ext_tmds), GFP_KERNEL);
+	tmds = kzalloc_obj(struct radeon_encoder_ext_tmds, GFP_KERNEL);

 	if (!tmds)
 		return NULL;
@@ -1752,7 +1752,7 @@ radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_enum, uint32_
 	}

 	/* add a new one */
-	radeon_encoder = kzalloc(sizeof(struct radeon_encoder), GFP_KERNEL);
+	radeon_encoder = kzalloc_obj(struct radeon_encoder, GFP_KERNEL);
 	if (!radeon_encoder)
 		return;

diff --git a/drivers/gpu/drm/radeon/radeon_semaphore.c b/drivers/gpu/drm/radeon/radeon_semaphore.c
index 1f0a9a4ff5ae..28331fef03c5 100644
--- a/drivers/gpu/drm/radeon/radeon_semaphore.c
+++ b/drivers/gpu/drm/radeon/radeon_semaphore.c
@@ -36,7 +36,7 @@ int radeon_semaphore_create(struct radeon_device *rdev,
 {
 	int r;

-	*semaphore = kmalloc(sizeof(struct radeon_semaphore), GFP_KERNEL);
+	*semaphore = kmalloc_obj(struct radeon_semaphore, GFP_KERNEL);
 	if (*semaphore == NULL) {
 		return -ENOMEM;
 	}
diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c
index 818554e60537..cab04dccbd1d 100644
--- a/drivers/gpu/drm/radeon/radeon_test.c
+++ b/drivers/gpu/drm/radeon/radeon_test.c
@@ -60,7 +60,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
 	n = rdev->mc.gtt_size - rdev->gart_pin_size;
 	n /= size;

-	gtt_obj = kcalloc(n, sizeof(*gtt_obj), GFP_KERNEL);
+	gtt_obj = kzalloc_objs(*gtt_obj, n, GFP_KERNEL);
 	if (!gtt_obj) {
 		DRM_ERROR("Failed to allocate %d pointers\n", n);
 		r = 1;
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index 695ac32f7535..4cb141b052b6 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -492,7 +492,7 @@ static struct ttm_tt *radeon_ttm_tt_create(struct ttm_buffer_object *bo,
 #endif
 	rbo = container_of(bo, struct radeon_bo, tbo);

-	gtt = kzalloc(sizeof(struct radeon_ttm_tt), GFP_KERNEL);
+	gtt = kzalloc_obj(struct radeon_ttm_tt, GFP_KERNEL);
 	if (gtt == NULL) {
 		return NULL;
 	}
@@ -533,7 +533,7 @@ static int radeon_ttm_tt_populate(struct ttm_device *bdev,
 	bool slave = !!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL);

 	if (gtt && gtt->userptr) {
-		ttm->sg = kzalloc(sizeof(struct sg_table), GFP_KERNEL);
+		ttm->sg = kzalloc_obj(struct sg_table, GFP_KERNEL);
 		if (!ttm->sg)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c
index 21a5340aefdf..5be6cf123d8d 100644
--- a/drivers/gpu/drm/radeon/radeon_vm.c
+++ b/drivers/gpu/drm/radeon/radeon_vm.c
@@ -133,8 +133,8 @@ struct radeon_bo_list *radeon_vm_get_bos(struct radeon_device *rdev,
 	struct radeon_bo_list *list;
 	unsigned i, idx;

-	list = kvmalloc_array(vm->max_pde_used + 2,
-			     sizeof(struct radeon_bo_list), GFP_KERNEL);
+	list = kvmalloc_objs(struct radeon_bo_list, vm->max_pde_used + 2,
+			     GFP_KERNEL);
 	if (!list)
 		return NULL;

@@ -321,7 +321,7 @@ struct radeon_bo_va *radeon_vm_bo_add(struct radeon_device *rdev,
 {
 	struct radeon_bo_va *bo_va;

-	bo_va = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
+	bo_va = kzalloc_obj(struct radeon_bo_va, GFP_KERNEL);
 	if (bo_va == NULL)
 		return NULL;

@@ -495,7 +495,7 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev,
 	if (bo_va->it.start || bo_va->it.last) {
 		/* add a clone of the bo_va to clear the old address */
 		struct radeon_bo_va *tmp;
-		tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
+		tmp = kzalloc_obj(struct radeon_bo_va, GFP_KERNEL);
 		if (!tmp) {
 			mutex_unlock(&vm->mutex);
 			r = -ENOMEM;
diff --git a/drivers/gpu/drm/radeon/rs780_dpm.c b/drivers/gpu/drm/radeon/rs780_dpm.c
index 24ad12409120..813ef291b349 100644
--- a/drivers/gpu/drm/radeon/rs780_dpm.c
+++ b/drivers/gpu/drm/radeon/rs780_dpm.c
@@ -804,9 +804,9 @@ static int rs780_parse_power_table(struct radeon_device *rdev)
 		return -EINVAL;
 	power_info = (union power_info *)(mode_info->atom_context->bios + data_offset);

-	rdev->pm.dpm.ps = kcalloc(power_info->pplib.ucNumStates,
-				  sizeof(struct radeon_ps),
-				  GFP_KERNEL);
+	rdev->pm.dpm.ps = kzalloc_objs(struct radeon_ps,
+				       power_info->pplib.ucNumStates,
+				       GFP_KERNEL);
 	if (!rdev->pm.dpm.ps)
 		return -ENOMEM;

@@ -826,7 +826,7 @@ static int rs780_parse_power_table(struct radeon_device *rdev)
 				 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset) +
 				 (power_state->v1.ucClockStateIndices[0] *
 				  power_info->pplib.ucClockInfoSize));
-			ps = kzalloc(sizeof(struct igp_ps), GFP_KERNEL);
+			ps = kzalloc_obj(struct igp_ps, GFP_KERNEL);
 			if (ps == NULL) {
 				kfree(rdev->pm.dpm.ps);
 				return -ENOMEM;
@@ -853,7 +853,7 @@ int rs780_dpm_init(struct radeon_device *rdev)
 	u8 frev, crev;
 	int ret;

-	pi = kzalloc(sizeof(struct igp_power_info), GFP_KERNEL);
+	pi = kzalloc_obj(struct igp_power_info, GFP_KERNEL);
 	if (pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = pi;
diff --git a/drivers/gpu/drm/radeon/rv6xx_dpm.c b/drivers/gpu/drm/radeon/rv6xx_dpm.c
index 69d380fff22a..2a4c5d79271b 100644
--- a/drivers/gpu/drm/radeon/rv6xx_dpm.c
+++ b/drivers/gpu/drm/radeon/rv6xx_dpm.c
@@ -1887,9 +1887,9 @@ static int rv6xx_parse_power_table(struct radeon_device *rdev)
 		return -EINVAL;
 	power_info = (union power_info *)(mode_info->atom_context->bios + data_offset);

-	rdev->pm.dpm.ps = kcalloc(power_info->pplib.ucNumStates,
-				  sizeof(struct radeon_ps),
-				  GFP_KERNEL);
+	rdev->pm.dpm.ps = kzalloc_objs(struct radeon_ps,
+				       power_info->pplib.ucNumStates,
+				       GFP_KERNEL);
 	if (!rdev->pm.dpm.ps)
 		return -ENOMEM;

@@ -1905,7 +1905,7 @@ static int rv6xx_parse_power_table(struct radeon_device *rdev)
 			  power_info->pplib.ucNonClockSize));
 		if (power_info->pplib.ucStateEntrySize - 1) {
 			u8 *idx;
-			ps = kzalloc(sizeof(struct rv6xx_ps), GFP_KERNEL);
+			ps = kzalloc_obj(struct rv6xx_ps, GFP_KERNEL);
 			if (ps == NULL) {
 				kfree(rdev->pm.dpm.ps);
 				return -ENOMEM;
@@ -1936,7 +1936,7 @@ int rv6xx_dpm_init(struct radeon_device *rdev)
 	struct rv6xx_power_info *pi;
 	int ret;

-	pi = kzalloc(sizeof(struct rv6xx_power_info), GFP_KERNEL);
+	pi = kzalloc_obj(struct rv6xx_power_info, GFP_KERNEL);
 	if (pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = pi;
diff --git a/drivers/gpu/drm/radeon/rv770_dpm.c b/drivers/gpu/drm/radeon/rv770_dpm.c
index e3e1f6833f12..0de4b5171aac 100644
--- a/drivers/gpu/drm/radeon/rv770_dpm.c
+++ b/drivers/gpu/drm/radeon/rv770_dpm.c
@@ -2283,9 +2283,9 @@ int rv7xx_parse_power_table(struct radeon_device *rdev)
 		return -EINVAL;
 	power_info = (union power_info *)(mode_info->atom_context->bios + data_offset);

-	rdev->pm.dpm.ps = kcalloc(power_info->pplib.ucNumStates,
-				  sizeof(struct radeon_ps),
-				  GFP_KERNEL);
+	rdev->pm.dpm.ps = kzalloc_objs(struct radeon_ps,
+				       power_info->pplib.ucNumStates,
+				       GFP_KERNEL);
 	if (!rdev->pm.dpm.ps)
 		return -ENOMEM;

@@ -2301,7 +2301,7 @@ int rv7xx_parse_power_table(struct radeon_device *rdev)
 			  power_info->pplib.ucNonClockSize));
 		if (power_info->pplib.ucStateEntrySize - 1) {
 			u8 *idx;
-			ps = kzalloc(sizeof(struct rv7xx_ps), GFP_KERNEL);
+			ps = kzalloc_obj(struct rv7xx_ps, GFP_KERNEL);
 			if (ps == NULL) {
 				kfree(rdev->pm.dpm.ps);
 				return -ENOMEM;
@@ -2348,7 +2348,7 @@ int rv770_dpm_init(struct radeon_device *rdev)
 	struct atom_clock_dividers dividers;
 	int ret;

-	pi = kzalloc(sizeof(struct rv7xx_power_info), GFP_KERNEL);
+	pi = kzalloc_obj(struct rv7xx_power_info, GFP_KERNEL);
 	if (pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = pi;
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
index f12227145ef0..b7897f89dee8 100644
--- a/drivers/gpu/drm/radeon/si_dpm.c
+++ b/drivers/gpu/drm/radeon/si_dpm.c
@@ -2419,7 +2419,7 @@ static int si_initialize_smc_dte_tables(struct radeon_device *rdev)
 	if (dte_data->k <= 0)
 		return -EINVAL;

-	dte_tables = kzalloc(sizeof(Smc_SIslands_DTE_Configuration), GFP_KERNEL);
+	dte_tables = kzalloc_obj(Smc_SIslands_DTE_Configuration, GFP_KERNEL);
 	if (dte_tables == NULL) {
 		si_pi->enable_dte = false;
 		return -ENOMEM;
@@ -2599,7 +2599,7 @@ static int si_initialize_smc_cac_tables(struct radeon_device *rdev)
 	if (ni_pi->enable_cac == false)
 		return 0;

-	cac_tables = kzalloc(sizeof(PP_SIslands_CacConfig), GFP_KERNEL);
+	cac_tables = kzalloc_obj(PP_SIslands_CacConfig, GFP_KERNEL);
 	if (!cac_tables)
 		return -ENOMEM;

@@ -2794,7 +2794,7 @@ static int si_init_smc_spll_table(struct radeon_device *rdev)
 	if (si_pi->spll_table_start == 0)
 		return -EINVAL;

-	spll_table = kzalloc(sizeof(SMC_SISLANDS_SPLL_DIV_TABLE), GFP_KERNEL);
+	spll_table = kzalloc_obj(SMC_SISLANDS_SPLL_DIV_TABLE, GFP_KERNEL);
 	if (spll_table == NULL)
 		return -ENOMEM;

@@ -5479,7 +5479,7 @@ static int si_initialize_mc_reg_table(struct radeon_device *rdev)
 	u8 module_index = rv770_get_memory_module_index(rdev);
 	int ret;

-	table = kzalloc(sizeof(struct atom_mc_reg_table), GFP_KERNEL);
+	table = kzalloc_obj(struct atom_mc_reg_table, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -6778,9 +6778,8 @@ static int si_parse_power_table(struct radeon_device *rdev)
 		(mode_info->atom_context->bios + data_offset +
 		 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset));

-	rdev->pm.dpm.ps = kcalloc(state_array->ucNumEntries,
-				  sizeof(struct radeon_ps),
-				  GFP_KERNEL);
+	rdev->pm.dpm.ps = kzalloc_objs(struct radeon_ps,
+				       state_array->ucNumEntries, GFP_KERNEL);
 	if (!rdev->pm.dpm.ps)
 		return -ENOMEM;
 	power_state_offset = (u8 *)state_array->states;
@@ -6792,7 +6791,7 @@ static int si_parse_power_table(struct radeon_device *rdev)
 			&non_clock_info_array->nonClockInfo[non_clock_array_index];
 		if (!rdev->pm.power_state[i].clock_info)
 			return -EINVAL;
-		ps = kzalloc(sizeof(struct ni_ps), GFP_KERNEL);
+		ps = kzalloc_obj(struct ni_ps, GFP_KERNEL);
 		if (ps == NULL) {
 			kfree(rdev->pm.dpm.ps);
 			return -ENOMEM;
@@ -6849,7 +6848,7 @@ int si_dpm_init(struct radeon_device *rdev)
 	struct pci_dev *root = rdev->pdev->bus->self;
 	int ret;

-	si_pi = kzalloc(sizeof(struct si_power_info), GFP_KERNEL);
+	si_pi = kzalloc_obj(struct si_power_info, GFP_KERNEL);
 	if (si_pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = si_pi;
@@ -6899,9 +6898,8 @@ int si_dpm_init(struct radeon_device *rdev)
 		return ret;

 	rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries =
-		kcalloc(4,
-			sizeof(struct radeon_clock_voltage_dependency_entry),
-			GFP_KERNEL);
+		kzalloc_objs(struct radeon_clock_voltage_dependency_entry, 4,
+			     GFP_KERNEL);
 	if (!rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries) {
 		r600_free_extended_power_table(rdev);
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/radeon/sumo_dpm.c b/drivers/gpu/drm/radeon/sumo_dpm.c
index b11f7c5bbcbe..43d452b65c6a 100644
--- a/drivers/gpu/drm/radeon/sumo_dpm.c
+++ b/drivers/gpu/drm/radeon/sumo_dpm.c
@@ -1479,9 +1479,8 @@ static int sumo_parse_power_table(struct radeon_device *rdev)
 		(mode_info->atom_context->bios + data_offset +
 		 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset));

-	rdev->pm.dpm.ps = kcalloc(state_array->ucNumEntries,
-				  sizeof(struct radeon_ps),
-				  GFP_KERNEL);
+	rdev->pm.dpm.ps = kzalloc_objs(struct radeon_ps,
+				       state_array->ucNumEntries, GFP_KERNEL);
 	if (!rdev->pm.dpm.ps)
 		return -ENOMEM;
 	power_state_offset = (u8 *)state_array->states;
@@ -1495,7 +1494,7 @@ static int sumo_parse_power_table(struct radeon_device *rdev)
 			kfree(rdev->pm.dpm.ps);
 			return -EINVAL;
 		}
-		ps = kzalloc(sizeof(struct sumo_ps), GFP_KERNEL);
+		ps = kzalloc_obj(struct sumo_ps, GFP_KERNEL);
 		if (ps == NULL) {
 			kfree(rdev->pm.dpm.ps);
 			return -ENOMEM;
@@ -1745,7 +1744,7 @@ int sumo_dpm_init(struct radeon_device *rdev)
 	u32 hw_rev = (RREG32(HW_REV) & ATI_REV_ID_MASK) >> ATI_REV_ID_SHIFT;
 	int ret;

-	pi = kzalloc(sizeof(struct sumo_power_info), GFP_KERNEL);
+	pi = kzalloc_obj(struct sumo_power_info, GFP_KERNEL);
 	if (pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = pi;
diff --git a/drivers/gpu/drm/radeon/trinity_dpm.c b/drivers/gpu/drm/radeon/trinity_dpm.c
index b9a2c7ccc881..a8e8cb8e2b01 100644
--- a/drivers/gpu/drm/radeon/trinity_dpm.c
+++ b/drivers/gpu/drm/radeon/trinity_dpm.c
@@ -1710,9 +1710,8 @@ static int trinity_parse_power_table(struct radeon_device *rdev)
 		(mode_info->atom_context->bios + data_offset +
 		 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset));

-	rdev->pm.dpm.ps = kcalloc(state_array->ucNumEntries,
-				  sizeof(struct radeon_ps),
-				  GFP_KERNEL);
+	rdev->pm.dpm.ps = kzalloc_objs(struct radeon_ps,
+				       state_array->ucNumEntries, GFP_KERNEL);
 	if (!rdev->pm.dpm.ps)
 		return -ENOMEM;
 	power_state_offset = (u8 *)state_array->states;
@@ -1726,7 +1725,7 @@ static int trinity_parse_power_table(struct radeon_device *rdev)
 			kfree(rdev->pm.dpm.ps);
 			return -EINVAL;
 		}
-		ps = kzalloc(sizeof(struct sumo_ps), GFP_KERNEL);
+		ps = kzalloc_obj(struct sumo_ps, GFP_KERNEL);
 		if (ps == NULL) {
 			kfree(rdev->pm.dpm.ps);
 			return -ENOMEM;
@@ -1903,7 +1902,7 @@ int trinity_dpm_init(struct radeon_device *rdev)
 	struct trinity_power_info *pi;
 	int ret, i;

-	pi = kzalloc(sizeof(struct trinity_power_info), GFP_KERNEL);
+	pi = kzalloc_obj(struct trinity_power_info, GFP_KERNEL);
 	if (pi == NULL)
 		return -ENOMEM;
 	rdev->pm.dpm.priv = pi;
diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c
index 2e2906ab750b..dad019714c3e 100644
--- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c
+++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_crtc.c
@@ -1006,7 +1006,7 @@ static void rcar_du_crtc_reset(struct drm_crtc *crtc)
 		crtc->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return;

diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c
index 6294443f6068..6ef11717b2ff 100644
--- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c
@@ -381,7 +381,7 @@ struct drm_gem_object *rcar_du_gem_prime_import_sg_table(struct drm_device *dev,
 		return drm_gem_dma_prime_import_sg_table(dev, attach, sgt);

 	/* Create a DMA GEM buffer. */
-	dma_obj = kzalloc(sizeof(*dma_obj), GFP_KERNEL);
+	dma_obj = kzalloc_obj(*dma_obj, GFP_KERNEL);
 	if (!dma_obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_plane.c
index c546ab0805d6..29d5574a5d8e 100644
--- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_plane.c
+++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_plane.c
@@ -721,7 +721,7 @@ static void rcar_du_plane_reset(struct drm_plane *plane)
 		plane->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return;

diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c
index 7aa0373563a4..87eb80cb931e 100644
--- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c
+++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c
@@ -404,7 +404,7 @@ rcar_du_vsp_plane_atomic_duplicate_state(struct drm_plane *plane)
 	if (WARN_ON(!plane->state))
 		return NULL;

-	copy = kzalloc(sizeof(*copy), GFP_KERNEL);
+	copy = kzalloc_obj(*copy, GFP_KERNEL);
 	if (copy == NULL)
 		return NULL;

@@ -429,7 +429,7 @@ static void rcar_du_vsp_plane_reset(struct drm_plane *plane)
 		plane->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return;

@@ -488,7 +488,7 @@ int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np,

 	num_planes = rcdu->info->num_rpf;

-	vsp->planes = kcalloc(num_planes, sizeof(*vsp->planes), GFP_KERNEL);
+	vsp->planes = kzalloc_objs(*vsp->planes, num_planes, GFP_KERNEL);
 	if (!vsp->planes)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c
index 8cd37d7b8ae2..0d818663b1ce 100644
--- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c
+++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c
@@ -57,7 +57,7 @@ static int rcar_du_wb_prepare_job(struct drm_writeback_connector *connector,
 	if (!job->fb)
 		return 0;

-	rjob = kzalloc(sizeof(*rjob), GFP_KERNEL);
+	rjob = kzalloc_obj(*rjob, GFP_KERNEL);
 	if (!rjob)
 		return -ENOMEM;

@@ -99,7 +99,7 @@ rcar_du_wb_conn_duplicate_state(struct drm_connector *connector)
 	if (WARN_ON(!connector->state))
 		return NULL;

-	copy = kzalloc(sizeof(*copy), GFP_KERNEL);
+	copy = kzalloc_obj(*copy, GFP_KERNEL);
 	if (!copy)
 		return NULL;

@@ -124,7 +124,7 @@ static void rcar_du_wb_conn_reset(struct drm_connector *connector)
 		connector->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return;

diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c
index 6e7aac6219be..e9a95a026a2a 100644
--- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c
+++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_crtc.c
@@ -336,7 +336,7 @@ static void rzg2l_du_crtc_reset(struct drm_crtc *crtc)
 		crtc->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return;

diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c
index 040d4e4aff00..525889dba500 100644
--- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c
+++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_vsp.c
@@ -249,7 +249,7 @@ rzg2l_du_vsp_plane_atomic_duplicate_state(struct drm_plane *plane)
 	if (WARN_ON(!plane->state))
 		return NULL;

-	copy = kzalloc(sizeof(*copy), GFP_KERNEL);
+	copy = kzalloc_obj(*copy, GFP_KERNEL);
 	if (!copy)
 		return NULL;

@@ -274,7 +274,7 @@ static void rzg2l_du_vsp_plane_reset(struct drm_plane *plane)
 		plane->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return;

diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
index 2e2f37b9d0a4..931d797c598a 100644
--- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
+++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
@@ -551,7 +551,7 @@ shmob_drm_connector_init(struct shmob_drm_device *sdev,
 		return ERR_PTR(-EINVAL);
 	}

-	scon = kzalloc(sizeof(*scon), GFP_KERNEL);
+	scon = kzalloc_obj(*scon, GFP_KERNEL);
 	if (!scon)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_plane.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_plane.c
index 9d166ab2af8b..983e4c72002a 100644
--- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_plane.c
+++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_plane.c
@@ -260,7 +260,7 @@ static void shmob_drm_plane_reset(struct drm_plane *plane)
 		plane->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return;

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
index 2f469d370021..43688d0322d7 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
@@ -36,7 +36,7 @@ rockchip_fb_create(struct drm_device *dev, struct drm_file *file,
 	struct drm_afbc_framebuffer *afbc_fb;
 	int ret;

-	afbc_fb = kzalloc(sizeof(*afbc_fb), GFP_KERNEL);
+	afbc_fb = kzalloc_obj(*afbc_fb, GFP_KERNEL);
 	if (!afbc_fb)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
index df9a8bff2e22..e6216773a6c4 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
@@ -289,7 +289,7 @@ static struct rockchip_gem_object *

 	size = round_up(size, PAGE_SIZE);

-	rk_obj = kzalloc(sizeof(*rk_obj), GFP_KERNEL);
+	rk_obj = kzalloc_obj(*rk_obj, GFP_KERNEL);
 	if (!rk_obj)
 		return ERR_PTR(-ENOMEM);

@@ -434,7 +434,7 @@ struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj)
 	if (rk_obj->pages)
 		return drm_prime_pages_to_sg(obj->dev, rk_obj->pages, rk_obj->num_pages);

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index 1b466623b6c7..ab16765a407b 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -1658,8 +1658,8 @@ static void vop_crtc_destroy_state(struct drm_crtc *crtc,

 static void vop_crtc_reset(struct drm_crtc *crtc)
 {
-	struct rockchip_crtc_state *crtc_state =
-		kzalloc(sizeof(*crtc_state), GFP_KERNEL);
+	struct rockchip_crtc_state *crtc_state = kzalloc_obj(*crtc_state,
+						             GFP_KERNEL);

 	if (crtc->state)
 		vop_crtc_destroy_state(crtc, crtc->state);
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
index ec3b4fde10db..b12970bcc588 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
@@ -2140,8 +2140,7 @@ static void vop2_crtc_destroy_state(struct drm_crtc *crtc,

 static void vop2_crtc_reset(struct drm_crtc *crtc)
 {
-	struct rockchip_crtc_state *vcstate =
-		kzalloc(sizeof(*vcstate), GFP_KERNEL);
+	struct rockchip_crtc_state *vcstate = kzalloc_obj(*vcstate, GFP_KERNEL);

 	if (crtc->state)
 		vop2_crtc_destroy_state(crtc, crtc->state);
diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
index bd7936c03da2..d0b3a10d808f 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -1352,13 +1352,14 @@ int drm_sched_init(struct drm_gpu_scheduler *sched, const struct drm_sched_init_
 		sched->own_submit_wq = true;
 	}

-	sched->sched_rq = kmalloc_array(args->num_rqs, sizeof(*sched->sched_rq),
-					GFP_KERNEL | __GFP_ZERO);
+	sched->sched_rq = kmalloc_objs(*sched->sched_rq, args->num_rqs,
+				       GFP_KERNEL | __GFP_ZERO);
 	if (!sched->sched_rq)
 		goto Out_check_own;
 	sched->num_rqs = args->num_rqs;
 	for (i = DRM_SCHED_PRIORITY_KERNEL; i < sched->num_rqs; i++) {
-		sched->sched_rq[i] = kzalloc(sizeof(*sched->sched_rq[i]), GFP_KERNEL);
+		sched->sched_rq[i] = kzalloc_obj(*sched->sched_rq[i],
+						 GFP_KERNEL);
 		if (!sched->sched_rq[i])
 			goto Out_unroll;
 		drm_sched_rq_init(sched, sched->sched_rq[i]);
diff --git a/drivers/gpu/drm/sitronix/st7920.c b/drivers/gpu/drm/sitronix/st7920.c
index f35a157fdad8..21d9369d01c3 100644
--- a/drivers/gpu/drm/sitronix/st7920.c
+++ b/drivers/gpu/drm/sitronix/st7920.c
@@ -459,7 +459,7 @@ static void st7920_primary_plane_reset(struct drm_plane *plane)

 	drm_WARN_ON_ONCE(plane->dev, plane->state);

-	st7920_state = kzalloc(sizeof(*st7920_state), GFP_KERNEL);
+	st7920_state = kzalloc_obj(*st7920_state, GFP_KERNEL);
 	if (!st7920_state)
 		return;

@@ -474,7 +474,7 @@ static struct drm_plane_state *st7920_primary_plane_duplicate_state(struct drm_p
 	if (drm_WARN_ON_ONCE(plane->dev, !plane->state))
 		return NULL;

-	st7920_state = kzalloc(sizeof(*st7920_state), GFP_KERNEL);
+	st7920_state = kzalloc_obj(*st7920_state, GFP_KERNEL);
 	if (!st7920_state)
 		return NULL;

@@ -581,7 +581,7 @@ static void st7920_crtc_reset(struct drm_crtc *crtc)

 	drm_WARN_ON_ONCE(crtc->dev, crtc->state);

-	st7920_state = kzalloc(sizeof(*st7920_state), GFP_KERNEL);
+	st7920_state = kzalloc_obj(*st7920_state, GFP_KERNEL);
 	if (!st7920_state)
 		return;

@@ -595,7 +595,7 @@ static struct drm_crtc_state *st7920_crtc_duplicate_state(struct drm_crtc *crtc)
 	if (drm_WARN_ON_ONCE(crtc->dev, !crtc->state))
 		return NULL;

-	st7920_state = kzalloc(sizeof(*st7920_state), GFP_KERNEL);
+	st7920_state = kzalloc_obj(*st7920_state, GFP_KERNEL);
 	if (!st7920_state)
 		return NULL;

diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c
index 96cf39320137..aa08e13e4bb7 100644
--- a/drivers/gpu/drm/solomon/ssd130x.c
+++ b/drivers/gpu/drm/solomon/ssd130x.c
@@ -1396,7 +1396,7 @@ static void ssd130x_primary_plane_reset(struct drm_plane *plane)

 	drm_WARN_ON_ONCE(plane->dev, plane->state);

-	ssd130x_state = kzalloc(sizeof(*ssd130x_state), GFP_KERNEL);
+	ssd130x_state = kzalloc_obj(*ssd130x_state, GFP_KERNEL);
 	if (!ssd130x_state)
 		return;

@@ -1553,7 +1553,7 @@ static void ssd130x_crtc_reset(struct drm_crtc *crtc)

 	drm_WARN_ON_ONCE(crtc->dev, crtc->state);

-	ssd130x_state = kzalloc(sizeof(*ssd130x_state), GFP_KERNEL);
+	ssd130x_state = kzalloc_obj(*ssd130x_state, GFP_KERNEL);
 	if (!ssd130x_state)
 		return;

diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
index f16345f01065..b0c73fe2731d 100644
--- a/drivers/gpu/drm/sti/sti_drv.c
+++ b/drivers/gpu/drm/sti/sti_drv.c
@@ -151,7 +151,7 @@ static int sti_init(struct drm_device *ddev)
 {
 	struct sti_private *private;

-	private = kzalloc(sizeof(*private), GFP_KERNEL);
+	private = kzalloc_obj(*private, GFP_KERNEL);
 	if (!private)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.c b/drivers/gpu/drm/sun4i/sun4i_layer.c
index 98f3176366c0..10e8dbdc6a76 100644
--- a/drivers/gpu/drm/sun4i/sun4i_layer.c
+++ b/drivers/gpu/drm/sun4i/sun4i_layer.c
@@ -29,7 +29,7 @@ static void sun4i_backend_layer_reset(struct drm_plane *plane)
 		plane->state = NULL;
 	}

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state)
 		__drm_atomic_helper_plane_reset(plane, &state->state);
 }
@@ -40,7 +40,7 @@ sun4i_backend_layer_duplicate_state(struct drm_plane *plane)
 	struct sun4i_layer_state *orig = state_to_sun4i_layer_state(plane->state);
 	struct sun4i_layer_state *copy;

-	copy = kzalloc(sizeof(*copy), GFP_KERNEL);
+	copy = kzalloc_obj(*copy, GFP_KERNEL);
 	if (!copy)
 		return NULL;

diff --git a/drivers/gpu/drm/sysfb/drm_sysfb_modeset.c b/drivers/gpu/drm/sysfb/drm_sysfb_modeset.c
index 6214b7709b37..02c59d401b45 100644
--- a/drivers/gpu/drm/sysfb/drm_sysfb_modeset.c
+++ b/drivers/gpu/drm/sysfb/drm_sysfb_modeset.c
@@ -427,7 +427,7 @@ void drm_sysfb_plane_reset(struct drm_plane *plane)
 	if (plane->state)
 		drm_sysfb_plane_state_destroy(to_drm_sysfb_plane_state(plane->state));

-	sysfb_plane_state = kzalloc(sizeof(*sysfb_plane_state), GFP_KERNEL);
+	sysfb_plane_state = kzalloc_obj(*sysfb_plane_state, GFP_KERNEL);
 	if (sysfb_plane_state)
 		__drm_gem_reset_shadow_plane(plane, &sysfb_plane_state->base);
 	else
@@ -447,7 +447,7 @@ struct drm_plane_state *drm_sysfb_plane_atomic_duplicate_state(struct drm_plane
 		return NULL;
 	sysfb_plane_state = to_drm_sysfb_plane_state(plane_state);

-	new_sysfb_plane_state = kzalloc(sizeof(*new_sysfb_plane_state), GFP_KERNEL);
+	new_sysfb_plane_state = kzalloc_obj(*new_sysfb_plane_state, GFP_KERNEL);
 	if (!new_sysfb_plane_state)
 		return NULL;
 	new_shadow_plane_state = &new_sysfb_plane_state->base;
@@ -523,7 +523,7 @@ void drm_sysfb_crtc_reset(struct drm_crtc *crtc)
 	if (crtc->state)
 		drm_sysfb_crtc_state_destroy(to_drm_sysfb_crtc_state(crtc->state));

-	sysfb_crtc_state = kzalloc(sizeof(*sysfb_crtc_state), GFP_KERNEL);
+	sysfb_crtc_state = kzalloc_obj(*sysfb_crtc_state, GFP_KERNEL);
 	if (sysfb_crtc_state) {
 		sysfb_crtc_state->format = sysfb->fb_format;
 		__drm_atomic_helper_crtc_reset(crtc, &sysfb_crtc_state->base);
@@ -543,7 +543,7 @@ struct drm_crtc_state *drm_sysfb_crtc_atomic_duplicate_state(struct drm_crtc *cr
 	if (drm_WARN_ON(dev, !crtc_state))
 		return NULL;

-	new_sysfb_crtc_state = kzalloc(sizeof(*new_sysfb_crtc_state), GFP_KERNEL);
+	new_sysfb_crtc_state = kzalloc_obj(*new_sysfb_crtc_state, GFP_KERNEL);
 	if (!new_sysfb_crtc_state)
 		return NULL;

diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index 01e9d5011dd8..21cadb50c671 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -812,7 +812,7 @@ static struct drm_plane *tegra_primary_plane_create(struct drm_device *drm,
 	const u32 *formats;
 	int err;

-	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
+	plane = kzalloc_obj(*plane, GFP_KERNEL);
 	if (!plane)
 		return ERR_PTR(-ENOMEM);

@@ -1115,7 +1115,7 @@ static struct drm_plane *tegra_dc_cursor_plane_create(struct drm_device *drm,
 	const u32 *formats;
 	int err;

-	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
+	plane = kzalloc_obj(*plane, GFP_KERNEL);
 	if (!plane)
 		return ERR_PTR(-ENOMEM);

@@ -1263,7 +1263,7 @@ static struct drm_plane *tegra_dc_overlay_plane_create(struct drm_device *drm,
 	const u32 *formats;
 	int err;

-	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
+	plane = kzalloc_obj(*plane, GFP_KERNEL);
 	if (!plane)
 		return ERR_PTR(-ENOMEM);

@@ -1389,7 +1389,7 @@ static void tegra_dc_destroy(struct drm_crtc *crtc)

 static void tegra_crtc_reset(struct drm_crtc *crtc)
 {
-	struct tegra_dc_state *state = kzalloc(sizeof(*state), GFP_KERNEL);
+	struct tegra_dc_state *state = kzalloc_obj(*state, GFP_KERNEL);

 	if (crtc->state)
 		tegra_crtc_atomic_destroy_state(crtc, crtc->state);
@@ -1406,7 +1406,7 @@ tegra_crtc_atomic_duplicate_state(struct drm_crtc *crtc)
 	struct tegra_dc_state *state = to_dc_state(crtc->state);
 	struct tegra_dc_state *copy;

-	copy = kmalloc(sizeof(*copy), GFP_KERNEL);
+	copy = kmalloc_obj(*copy, GFP_KERNEL);
 	if (!copy)
 		return NULL;

diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index f7222819d672..1d1bbeae4522 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -104,7 +104,7 @@ static int tegra_drm_open(struct drm_device *drm, struct drm_file *filp)
 {
 	struct tegra_drm_file *fpriv;

-	fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
+	fpriv = kzalloc_obj(*fpriv, GFP_KERNEL);
 	if (!fpriv)
 		return -ENOMEM;

@@ -212,7 +212,7 @@ int tegra_drm_submit(struct tegra_drm_context *context,
 	 */
 	num_refs = num_cmdbufs + num_relocs * 2;

-	refs = kmalloc_array(num_refs, sizeof(*refs), GFP_KERNEL);
+	refs = kmalloc_objs(*refs, num_refs, GFP_KERNEL);
 	if (!refs) {
 		err = -ENOMEM;
 		goto put;
@@ -465,7 +465,7 @@ static int tegra_open_channel(struct drm_device *drm, void *data,
 	struct tegra_drm_client *client;
 	int err = -ENODEV;

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return -ENOMEM;

@@ -1147,7 +1147,7 @@ static int host1x_drm_probe(struct host1x_device *dev)
 	if (IS_ERR(drm))
 		return PTR_ERR(drm);

-	tegra = kzalloc(sizeof(*tegra), GFP_KERNEL);
+	tegra = kzalloc_obj(*tegra, GFP_KERNEL);
 	if (!tegra) {
 		err = -ENOMEM;
 		goto put;
diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c
index 8ee96b59fdbc..f28e7bd63508 100644
--- a/drivers/gpu/drm/tegra/dsi.c
+++ b/drivers/gpu/drm/tegra/dsi.c
@@ -772,7 +772,7 @@ static void tegra_dsi_soft_reset(struct tegra_dsi *dsi)

 static void tegra_dsi_connector_reset(struct drm_connector *connector)
 {
-	struct tegra_dsi_state *state = kzalloc(sizeof(*state), GFP_KERNEL);
+	struct tegra_dsi_state *state = kzalloc_obj(*state, GFP_KERNEL);

 	if (!state)
 		return;
diff --git a/drivers/gpu/drm/tegra/fb.c b/drivers/gpu/drm/tegra/fb.c
index 1cef8c5cac50..e795570776fd 100644
--- a/drivers/gpu/drm/tegra/fb.c
+++ b/drivers/gpu/drm/tegra/fb.c
@@ -112,7 +112,7 @@ struct drm_framebuffer *tegra_fb_alloc(struct drm_device *drm,
 	unsigned int i;
 	int err;

-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	fb = kzalloc_obj(*fb, GFP_KERNEL);
 	if (!fb)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
index 6b14f1e919eb..c7355b11424c 100644
--- a/drivers/gpu/drm/tegra/gem.c
+++ b/drivers/gpu/drm/tegra/gem.c
@@ -64,7 +64,7 @@ static struct host1x_bo_mapping *tegra_bo_pin(struct device *dev, struct host1x_
 	struct host1x_bo_mapping *map;
 	int err;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return ERR_PTR(-ENOMEM);

@@ -103,7 +103,7 @@ static struct host1x_bo_mapping *tegra_bo_pin(struct device *dev, struct host1x_
 	 * If we don't have a mapping for this buffer yet, return an SG table
 	 * so that host1x can do the mapping for us via the DMA API.
 	 */
-	map->sgt = kzalloc(sizeof(*map->sgt), GFP_KERNEL);
+	map->sgt = kzalloc_obj(*map->sgt, GFP_KERNEL);
 	if (!map->sgt) {
 		err = -ENOMEM;
 		goto free;
@@ -240,7 +240,7 @@ static int tegra_bo_iommu_map(struct tegra_drm *tegra, struct tegra_bo *bo)
 	if (bo->mm)
 		return -EBUSY;

-	bo->mm = kzalloc(sizeof(*bo->mm), GFP_KERNEL);
+	bo->mm = kzalloc_obj(*bo->mm, GFP_KERNEL);
 	if (!bo->mm)
 		return -ENOMEM;

@@ -302,7 +302,7 @@ static struct tegra_bo *tegra_bo_alloc_object(struct drm_device *drm,
 	struct tegra_bo *bo;
 	int err;

-	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+	bo = kzalloc_obj(*bo, GFP_KERNEL);
 	if (!bo)
 		return ERR_PTR(-ENOMEM);

@@ -639,7 +639,7 @@ tegra_gem_prime_map_dma_buf(struct dma_buf_attachment *attach,
 	struct tegra_bo *bo = to_tegra_bo(gem);
 	struct sg_table *sgt;

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return NULL;

diff --git a/drivers/gpu/drm/tegra/hub.c b/drivers/gpu/drm/tegra/hub.c
index c924ffba4094..e0f84efb3b76 100644
--- a/drivers/gpu/drm/tegra/hub.c
+++ b/drivers/gpu/drm/tegra/hub.c
@@ -769,7 +769,7 @@ struct drm_plane *tegra_shared_plane_create(struct drm_device *drm,
 	const u32 *formats;
 	int err;

-	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
+	plane = kzalloc_obj(*plane, GFP_KERNEL);
 	if (!plane)
 		return ERR_PTR(-ENOMEM);

@@ -943,7 +943,7 @@ static int tegra_display_hub_init(struct host1x_client *client)
 	struct tegra_drm *tegra = drm->dev_private;
 	struct tegra_display_hub_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
index ffe5f06b770d..ce49c2de2c08 100644
--- a/drivers/gpu/drm/tegra/plane.c
+++ b/drivers/gpu/drm/tegra/plane.c
@@ -36,7 +36,7 @@ static void tegra_plane_reset(struct drm_plane *plane)
 	kfree(plane->state);
 	plane->state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state) {
 		plane->state = &state->base;
 		plane->state->plane = plane;
@@ -55,7 +55,7 @@ tegra_plane_atomic_duplicate_state(struct drm_plane *plane)
 	struct tegra_plane_state *copy;
 	unsigned int i;

-	copy = kmalloc(sizeof(*copy), GFP_KERNEL);
+	copy = kmalloc_obj(*copy, GFP_KERNEL);
 	if (!copy)
 		return NULL;

diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
index 4023cb5998f1..a2cb68f42612 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -1721,7 +1721,7 @@ static void tegra_sor_connector_reset(struct drm_connector *connector)
 {
 	struct tegra_sor_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return;

diff --git a/drivers/gpu/drm/tegra/submit.c b/drivers/gpu/drm/tegra/submit.c
index 2430fcc97448..7747d5b9f3ca 100644
--- a/drivers/gpu/drm/tegra/submit.c
+++ b/drivers/gpu/drm/tegra/submit.c
@@ -71,7 +71,7 @@ gather_bo_pin(struct device *dev, struct host1x_bo *bo, enum dma_data_direction
 	struct host1x_bo_mapping *map;
 	int err;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return ERR_PTR(-ENOMEM);

@@ -80,7 +80,7 @@ gather_bo_pin(struct device *dev, struct host1x_bo *bo, enum dma_data_direction
 	map->direction = direction;
 	map->dev = dev;

-	map->sgt = kzalloc(sizeof(*map->sgt), GFP_KERNEL);
+	map->sgt = kzalloc_obj(*map->sgt, GFP_KERNEL);
 	if (!map->sgt) {
 		err = -ENOMEM;
 		goto free;
@@ -193,7 +193,7 @@ static int submit_copy_gather_data(struct gather_bo **pbo, struct device *dev,
 		return -EINVAL;
 	}

-	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+	bo = kzalloc_obj(*bo, GFP_KERNEL);
 	if (!bo) {
 		SUBMIT_ERR(context, "failed to allocate memory for bo info");
 		return -ENOMEM;
@@ -270,7 +270,7 @@ static int submit_process_bufs(struct tegra_drm_context *context, struct gather_
 		return PTR_ERR(bufs);
 	}

-	mappings = kcalloc(args->num_bufs, sizeof(*mappings), GFP_KERNEL);
+	mappings = kzalloc_objs(*mappings, args->num_bufs, GFP_KERNEL);
 	if (!mappings) {
 		SUBMIT_ERR(context, "failed to allocate memory for mapping info");
 		err = -ENOMEM;
@@ -560,7 +560,7 @@ int tegra_drm_ioctl_channel_submit(struct drm_device *drm, void *data,
 	if (err)
 		goto unlock;

-	job_data = kzalloc(sizeof(*job_data), GFP_KERNEL);
+	job_data = kzalloc_obj(*job_data, GFP_KERNEL);
 	if (!job_data) {
 		SUBMIT_ERR(context, "failed to allocate memory for job data");
 		err = -ENOMEM;
diff --git a/drivers/gpu/drm/tegra/uapi.c b/drivers/gpu/drm/tegra/uapi.c
index d0b6a1fa6efa..c4061d0f69a7 100644
--- a/drivers/gpu/drm/tegra/uapi.c
+++ b/drivers/gpu/drm/tegra/uapi.c
@@ -86,7 +86,7 @@ int tegra_drm_ioctl_channel_open(struct drm_device *drm, void *data, struct drm_
 	if (args->flags)
 		return -EINVAL;

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return -ENOMEM;

@@ -206,7 +206,7 @@ int tegra_drm_ioctl_channel_map(struct drm_device *drm, void *data, struct drm_f
 		return -EINVAL;
 	}

-	mapping = kzalloc(sizeof(*mapping), GFP_KERNEL);
+	mapping = kzalloc_obj(*mapping, GFP_KERNEL);
 	if (!mapping) {
 		err = -ENOMEM;
 		goto unlock;
diff --git a/drivers/gpu/drm/tests/drm_gem_shmem_test.c b/drivers/gpu/drm/tests/drm_gem_shmem_test.c
index 4b459f21acfd..f401b9c42a9c 100644
--- a/drivers/gpu/drm/tests/drm_gem_shmem_test.c
+++ b/drivers/gpu/drm/tests/drm_gem_shmem_test.c
@@ -80,7 +80,7 @@ static void drm_gem_shmem_test_obj_create_private(struct kunit *test)
 	buf = kunit_kzalloc(test, TEST_SIZE, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_NULL(test, buf);

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_NULL(test, sgt);

 	ret = kunit_add_action_or_reset(test, kfree_wrapper, sgt);
diff --git a/drivers/gpu/drm/tests/drm_mm_test.c b/drivers/gpu/drm/tests/drm_mm_test.c
index aec9eccdeae9..6a1a27ee5f36 100644
--- a/drivers/gpu/drm/tests/drm_mm_test.c
+++ b/drivers/gpu/drm/tests/drm_mm_test.c
@@ -252,7 +252,7 @@ static void drm_test_mm_align_pot(struct kunit *test, int max)
 	for (bit = max - 1; bit; bit--) {
 		u64 align, size;

-		node = kzalloc(sizeof(*node), GFP_KERNEL);
+		node = kzalloc_obj(*node, GFP_KERNEL);
 		if (!node) {
 			KUNIT_FAIL(test, "failed to allocate node");
 			goto out;
diff --git a/drivers/gpu/drm/tests/drm_panic_test.c b/drivers/gpu/drm/tests/drm_panic_test.c
index d60150877df8..a36f5106c139 100644
--- a/drivers/gpu/drm/tests/drm_panic_test.c
+++ b/drivers/gpu/drm/tests/drm_panic_test.c
@@ -127,7 +127,7 @@ static void drm_test_panic_screen_user_page(struct kunit *test)
 	fb_size = params->width * params->height * sb->format->cpp[0];
 	npages = DIV_ROUND_UP(fb_size, PAGE_SIZE);

-	pages = kmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
+	pages = kmalloc_objs(struct page *, npages, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_NULL(test, pages);

 	for (p = 0; p < npages; p++) {
diff --git a/drivers/gpu/drm/tidss/tidss_crtc.c b/drivers/gpu/drm/tidss/tidss_crtc.c
index 8f81eb560b9e..e7fc496e2ce4 100644
--- a/drivers/gpu/drm/tidss/tidss_crtc.c
+++ b/drivers/gpu/drm/tidss/tidss_crtc.c
@@ -364,7 +364,7 @@ static void tidss_crtc_reset(struct drm_crtc *crtc)
 	if (crtc->state)
 		tidss_crtc_destroy_state(crtc, crtc->state);

-	tstate = kzalloc(sizeof(*tstate), GFP_KERNEL);
+	tstate = kzalloc_obj(*tstate, GFP_KERNEL);
 	if (!tstate) {
 		crtc->state = NULL;
 		return;
@@ -382,7 +382,7 @@ static struct drm_crtc_state *tidss_crtc_duplicate_state(struct drm_crtc *crtc)

 	current_state = to_tidss_crtc_state(crtc->state);

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -425,7 +425,7 @@ struct tidss_crtc *tidss_crtc_create(struct tidss_device *tidss,
 	bool has_ctm = tidss->feat->vp_feat.color.has_ctm;
 	int ret;

-	tcrtc = kzalloc(sizeof(*tcrtc), GFP_KERNEL);
+	tcrtc = kzalloc_obj(*tcrtc, GFP_KERNEL);
 	if (!tcrtc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/tidss/tidss_plane.c b/drivers/gpu/drm/tidss/tidss_plane.c
index bd10bc1b9961..a8e681c4e03b 100644
--- a/drivers/gpu/drm/tidss/tidss_plane.c
+++ b/drivers/gpu/drm/tidss/tidss_plane.c
@@ -203,7 +203,7 @@ struct tidss_plane *tidss_plane_create(struct tidss_device *tidss,
 			   BIT(DRM_MODE_BLEND_COVERAGE));
 	int ret;

-	tplane = kzalloc(sizeof(*tplane), GFP_KERNEL);
+	tplane = kzalloc_obj(*tplane, GFP_KERNEL);
 	if (!tplane)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
index 262f290d85d9..ed0822b3a020 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
@@ -272,7 +272,7 @@ static struct tilcdc_panel_info *of_get_panel_info(struct device_node *np)
 		return NULL;
 	}

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		goto put_node;

diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
index 751b05753c94..585c1a0ec025 100644
--- a/drivers/gpu/drm/tiny/appletbdrm.c
+++ b/drivers/gpu/drm/tiny/appletbdrm.c
@@ -225,7 +225,7 @@ static int appletbdrm_send_msg(struct appletbdrm_device *adev, __le32 msg)
 	struct appletbdrm_msg_simple_request *request;
 	int ret;

-	request = kzalloc(sizeof(*request), GFP_KERNEL);
+	request = kzalloc_obj(*request, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;

@@ -260,7 +260,7 @@ static int appletbdrm_get_information(struct appletbdrm_device *adev)
 	__le32 pixel_format;
 	int ret;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -358,7 +358,8 @@ static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane,
 	if (!appletbdrm_state->request)
 		return -ENOMEM;

-	appletbdrm_state->response = kzalloc(sizeof(*appletbdrm_state->response), GFP_KERNEL);
+	appletbdrm_state->response = kzalloc_obj(*appletbdrm_state->response,
+						 GFP_KERNEL);

 	if (!appletbdrm_state->response)
 		return -ENOMEM;
@@ -505,7 +506,7 @@ static void appletbdrm_primary_plane_reset(struct drm_plane *plane)

 	WARN_ON(plane->state);

-	appletbdrm_state = kzalloc(sizeof(*appletbdrm_state), GFP_KERNEL);
+	appletbdrm_state = kzalloc_obj(*appletbdrm_state, GFP_KERNEL);
 	if (!appletbdrm_state)
 		return;

@@ -520,7 +521,7 @@ static struct drm_plane_state *appletbdrm_primary_plane_duplicate_state(struct d
 	if (WARN_ON(!plane->state))
 		return NULL;

-	appletbdrm_state = kzalloc(sizeof(*appletbdrm_state), GFP_KERNEL);
+	appletbdrm_state = kzalloc_obj(*appletbdrm_state, GFP_KERNEL);
 	if (!appletbdrm_state)
 		return NULL;

diff --git a/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c b/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
index 7b533e4e1e04..5cefc50304e4 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
@@ -49,7 +49,7 @@ static struct ttm_tt *ttm_tt_simple_create(struct ttm_buffer_object *bo, u32 pag
 {
 	struct ttm_tt *tt;

-	tt = kzalloc(sizeof(*tt), GFP_KERNEL);
+	tt = kzalloc_obj(*tt, GFP_KERNEL);
 	ttm_tt_init(tt, bo, page_flags, ttm_cached, 0);

 	return tt;
diff --git a/drivers/gpu/drm/ttm/tests/ttm_mock_manager.c b/drivers/gpu/drm/ttm/tests/ttm_mock_manager.c
index dd395229e388..d6558f5c7e48 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_mock_manager.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_mock_manager.c
@@ -35,7 +35,7 @@ static int ttm_mock_manager_alloc(struct ttm_resource_manager *man,
 	u64 lpfn, fpfn, alloc_size;
 	int err;

-	mock_res = kzalloc(sizeof(*mock_res), GFP_KERNEL);
+	mock_res = kzalloc_obj(*mock_res, GFP_KERNEL);

 	if (!mock_res)
 		return -ENOMEM;
@@ -100,7 +100,7 @@ int ttm_mock_manager_init(struct ttm_device *bdev, u32 mem_type, u32 size)
 	struct ttm_resource_manager *base;
 	int err;

-	manager = kzalloc(sizeof(*manager), GFP_KERNEL);
+	manager = kzalloc_obj(*manager, GFP_KERNEL);
 	if (!manager)
 		return -ENOMEM;

@@ -194,7 +194,7 @@ int ttm_bad_manager_init(struct ttm_device *bdev, u32 mem_type, u32 size)
 {
 	struct ttm_resource_manager *man;

-	man = kzalloc(sizeof(*man), GFP_KERNEL);
+	man = kzalloc_obj(*man, GFP_KERNEL);
 	if (!man)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/ttm/ttm_agp_backend.c b/drivers/gpu/drm/ttm/ttm_agp_backend.c
index fca0a1a3c6fd..a973aafd6f7f 100644
--- a/drivers/gpu/drm/ttm/ttm_agp_backend.c
+++ b/drivers/gpu/drm/ttm/ttm_agp_backend.c
@@ -128,7 +128,7 @@ struct ttm_tt *ttm_agp_tt_create(struct ttm_buffer_object *bo,
 {
 	struct ttm_agp_backend *agp_be;

-	agp_be = kmalloc(sizeof(*agp_be), GFP_KERNEL);
+	agp_be = kmalloc_obj(*agp_be, GFP_KERNEL);
 	if (!agp_be)
 		return NULL;

diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index cabcfeaa70dc..93871aaa33b2 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -233,7 +233,7 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo,
 	struct ttm_transfer_obj *fbo;
 	int ret;

-	fbo = kmalloc(sizeof(*fbo), GFP_KERNEL);
+	fbo = kmalloc_obj(*fbo, GFP_KERNEL);
 	if (!fbo)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
index 217e45958099..b1fa78edad1f 100644
--- a/drivers/gpu/drm/ttm/ttm_pool.c
+++ b/drivers/gpu/drm/ttm/ttm_pool.c
@@ -164,7 +164,7 @@ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags,
 		return p;
 	}

-	dma = kmalloc(sizeof(*dma), GFP_KERNEL);
+	dma = kmalloc_obj(*dma, GFP_KERNEL);
 	if (!dma)
 		return NULL;

@@ -858,7 +858,7 @@ int ttm_pool_restore_and_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
 		if (ctx->gfp_retry_mayfail)
 			gfp |= __GFP_RETRY_MAYFAIL;

-		restore = kzalloc(sizeof(*restore), gfp);
+		restore = kzalloc_obj(*restore, gfp);
 		if (!restore)
 			return -ENOMEM;

diff --git a/drivers/gpu/drm/ttm/ttm_range_manager.c b/drivers/gpu/drm/ttm/ttm_range_manager.c
index db854b581d83..b223b873d0c6 100644
--- a/drivers/gpu/drm/ttm/ttm_range_manager.c
+++ b/drivers/gpu/drm/ttm/ttm_range_manager.c
@@ -73,7 +73,7 @@ static int ttm_range_man_alloc(struct ttm_resource_manager *man,
 	if (!lpfn)
 		lpfn = man->size;

-	node = kzalloc(struct_size(node, mm_nodes, 1), GFP_KERNEL);
+	node = kzalloc_flex(*node, mm_nodes, 1, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

@@ -184,7 +184,7 @@ int ttm_range_man_init_nocheck(struct ttm_device *bdev,
 	struct ttm_resource_manager *man;
 	struct ttm_range_manager *rman;

-	rman = kzalloc(sizeof(*rman), GFP_KERNEL);
+	rman = kzalloc_obj(*rman, GFP_KERNEL);
 	if (!rman)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/ttm/ttm_sys_manager.c b/drivers/gpu/drm/ttm/ttm_sys_manager.c
index 2ced169513cb..fb3e9869704a 100644
--- a/drivers/gpu/drm/ttm/ttm_sys_manager.c
+++ b/drivers/gpu/drm/ttm/ttm_sys_manager.c
@@ -12,7 +12,7 @@ static int ttm_sys_man_alloc(struct ttm_resource_manager *man,
 			     const struct ttm_place *place,
 			     struct ttm_resource **res)
 {
-	*res = kzalloc(sizeof(**res), GFP_KERNEL);
+	*res = kzalloc_obj(**res, GFP_KERNEL);
 	if (!*res)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
index fbf713abd547..3497011eb8ff 100644
--- a/drivers/gpu/drm/ttm/ttm_tt.c
+++ b/drivers/gpu/drm/ttm/ttm_tt.c
@@ -137,8 +137,8 @@ static int ttm_dma_tt_alloc_page_directory(struct ttm_tt *ttm)

 static int ttm_sg_tt_alloc_page_directory(struct ttm_tt *ttm)
 {
-	ttm->dma_address = kvcalloc(ttm->num_pages, sizeof(*ttm->dma_address),
-				    GFP_KERNEL);
+	ttm->dma_address = kvzalloc_objs(*ttm->dma_address, ttm->num_pages,
+					 GFP_KERNEL);
 	if (!ttm->dma_address)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c
index bc58991a6f14..27dac7cc50a6 100644
--- a/drivers/gpu/drm/udl/udl_main.c
+++ b/drivers/gpu/drm/udl/udl_main.c
@@ -218,7 +218,7 @@ static int udl_alloc_urb_list(struct udl_device *udl, int count, size_t size)
 	udl->urbs.size = size;

 	while (udl->urbs.count * size < wanted_size) {
-		unode = kzalloc(sizeof(struct urb_node), GFP_KERNEL);
+		unode = kzalloc_obj(struct urb_node, GFP_KERNEL);
 		if (!unode)
 			break;
 		unode->dev = udl;
diff --git a/drivers/gpu/drm/v3d/v3d_bo.c b/drivers/gpu/drm/v3d/v3d_bo.c
index 36aae97cf6da..146bcb30f37b 100644
--- a/drivers/gpu/drm/v3d/v3d_bo.c
+++ b/drivers/gpu/drm/v3d/v3d_bo.c
@@ -86,7 +86,7 @@ struct drm_gem_object *v3d_create_object(struct drm_device *dev, size_t size)
 	if (size == 0)
 		return ERR_PTR(-EINVAL);

-	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+	bo = kzalloc_obj(*bo, GFP_KERNEL);
 	if (!bo)
 		return ERR_PTR(-ENOMEM);
 	obj = &bo->base.base;
diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
index 8de4f151a5c0..0ed83100c95a 100644
--- a/drivers/gpu/drm/v3d/v3d_drv.c
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
@@ -133,7 +133,7 @@ v3d_open(struct drm_device *dev, struct drm_file *file)
 	struct drm_gpu_scheduler *sched;
 	int i;

-	v3d_priv = kzalloc(sizeof(*v3d_priv), GFP_KERNEL);
+	v3d_priv = kzalloc_obj(*v3d_priv, GFP_KERNEL);
 	if (!v3d_priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/v3d/v3d_fence.c b/drivers/gpu/drm/v3d/v3d_fence.c
index c82500a1df73..0deaf636387e 100644
--- a/drivers/gpu/drm/v3d/v3d_fence.c
+++ b/drivers/gpu/drm/v3d/v3d_fence.c
@@ -8,7 +8,7 @@ struct dma_fence *v3d_fence_create(struct v3d_dev *v3d, enum v3d_queue q)
 	struct v3d_queue_state *queue = &v3d->queue[q];
 	struct v3d_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/v3d/v3d_perfmon.c b/drivers/gpu/drm/v3d/v3d_perfmon.c
index 9a3fe5255874..b1bde69e4517 100644
--- a/drivers/gpu/drm/v3d/v3d_perfmon.c
+++ b/drivers/gpu/drm/v3d/v3d_perfmon.c
@@ -353,8 +353,7 @@ int v3d_perfmon_create_ioctl(struct drm_device *dev, void *data,
 			return -EINVAL;
 	}

-	perfmon = kzalloc(struct_size(perfmon, values, req->ncounters),
-			  GFP_KERNEL);
+	perfmon = kzalloc_flex(*perfmon, values, req->ncounters, GFP_KERNEL);
 	if (!perfmon)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/v3d/v3d_submit.c b/drivers/gpu/drm/v3d/v3d_submit.c
index 794c3571662d..d172cab1564c 100644
--- a/drivers/gpu/drm/v3d/v3d_submit.c
+++ b/drivers/gpu/drm/v3d/v3d_submit.c
@@ -335,9 +335,8 @@ v3d_get_multisync_post_deps(struct drm_file *file_priv,
 		return 0;

 	se->out_syncs = (struct v3d_submit_outsync *)
-			kvmalloc_array(count,
-				       sizeof(struct v3d_submit_outsync),
-				       GFP_KERNEL);
+			kvmalloc_objs(struct v3d_submit_outsync, count,
+				      GFP_KERNEL);
 	if (!se->out_syncs)
 		return -ENOMEM;

@@ -486,9 +485,8 @@ v3d_get_cpu_timestamp_query_params(struct drm_file *file_priv,

 	job->job_type = V3D_CPU_JOB_TYPE_TIMESTAMP_QUERY;

-	query_info->queries = kvmalloc_array(timestamp.count,
-					     sizeof(struct v3d_timestamp_query),
-					     GFP_KERNEL);
+	query_info->queries = kvmalloc_objs(struct v3d_timestamp_query,
+					    timestamp.count, GFP_KERNEL);
 	if (!query_info->queries)
 		return -ENOMEM;

@@ -545,9 +543,8 @@ v3d_get_cpu_reset_timestamp_params(struct drm_file *file_priv,

 	job->job_type = V3D_CPU_JOB_TYPE_RESET_TIMESTAMP_QUERY;

-	query_info->queries = kvmalloc_array(reset.count,
-					     sizeof(struct v3d_timestamp_query),
-					     GFP_KERNEL);
+	query_info->queries = kvmalloc_objs(struct v3d_timestamp_query,
+					    reset.count, GFP_KERNEL);
 	if (!query_info->queries)
 		return -ENOMEM;

@@ -602,9 +599,8 @@ v3d_get_cpu_copy_query_results_params(struct drm_file *file_priv,

 	job->job_type = V3D_CPU_JOB_TYPE_COPY_TIMESTAMP_QUERY;

-	query_info->queries = kvmalloc_array(copy.count,
-					     sizeof(struct v3d_timestamp_query),
-					     GFP_KERNEL);
+	query_info->queries = kvmalloc_objs(struct v3d_timestamp_query,
+					    copy.count, GFP_KERNEL);
 	if (!query_info->queries)
 		return -ENOMEM;

@@ -729,9 +725,8 @@ v3d_get_cpu_reset_performance_params(struct drm_file *file_priv,
 	job->job_type = V3D_CPU_JOB_TYPE_RESET_PERFORMANCE_QUERY;

 	query_info->queries =
-		kvmalloc_array(reset.count,
-			       sizeof(struct v3d_performance_query),
-			       GFP_KERNEL);
+		kvmalloc_objs(struct v3d_performance_query, reset.count,
+			      GFP_KERNEL);
 	if (!query_info->queries)
 		return -ENOMEM;

@@ -771,9 +766,8 @@ v3d_get_cpu_copy_performance_query_params(struct drm_file *file_priv,
 	job->job_type = V3D_CPU_JOB_TYPE_COPY_PERFORMANCE_QUERY;

 	query_info->queries =
-		kvmalloc_array(copy.count,
-			       sizeof(struct v3d_performance_query),
-			       GFP_KERNEL);
+		kvmalloc_objs(struct v3d_performance_query, copy.count,
+			      GFP_KERNEL);
 	if (!query_info->queries)
 		return -ENOMEM;

@@ -1082,8 +1076,8 @@ v3d_submit_tfu_ioctl(struct drm_device *dev, void *data,
 		goto fail;
 	}

-	job->base.bo = kcalloc(ARRAY_SIZE(args->bo_handles),
-			       sizeof(*job->base.bo), GFP_KERNEL);
+	job->base.bo = kzalloc_objs(*job->base.bo, ARRAY_SIZE(args->bo_handles),
+				    GFP_KERNEL);
 	if (!job->base.bo) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/vboxvideo/vbox_mode.c b/drivers/gpu/drm/vboxvideo/vbox_mode.c
index d363c3f0afdf..86229323eeac 100644
--- a/drivers/gpu/drm/vboxvideo/vbox_mode.c
+++ b/drivers/gpu/drm/vboxvideo/vbox_mode.c
@@ -528,7 +528,7 @@ static struct drm_plane *vbox_create_plane(struct vbox_private *vbox,
 		return ERR_PTR(-EINVAL);
 	}

-	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
+	plane = kzalloc_obj(*plane, GFP_KERNEL);
 	if (!plane)
 		return ERR_PTR(-ENOMEM);

@@ -562,7 +562,7 @@ static struct vbox_crtc *vbox_crtc_init(struct drm_device *dev, unsigned int i)
 	if (ret)
 		return ERR_PTR(ret);

-	vbox_crtc = kzalloc(sizeof(*vbox_crtc), GFP_KERNEL);
+	vbox_crtc = kzalloc_obj(*vbox_crtc, GFP_KERNEL);
 	if (!vbox_crtc)
 		return ERR_PTR(-ENOMEM);

@@ -622,7 +622,7 @@ static struct drm_encoder *vbox_encoder_init(struct drm_device *dev,
 {
 	struct vbox_encoder *vbox_encoder;

-	vbox_encoder = kzalloc(sizeof(*vbox_encoder), GFP_KERNEL);
+	vbox_encoder = kzalloc_obj(*vbox_encoder, GFP_KERNEL);
 	if (!vbox_encoder)
 		return NULL;

@@ -808,7 +808,7 @@ static int vbox_connector_init(struct drm_device *dev,
 	struct vbox_connector *vbox_connector;
 	struct drm_connector *connector;

-	vbox_connector = kzalloc(sizeof(*vbox_connector), GFP_KERNEL);
+	vbox_connector = kzalloc_obj(*vbox_connector, GFP_KERNEL);
 	if (!vbox_connector)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
index 46b4474ac41d..274cad424059 100644
--- a/drivers/gpu/drm/vc4/vc4_bo.c
+++ b/drivers/gpu/drm/vc4/vc4_bo.c
@@ -205,8 +205,7 @@ static struct list_head *vc4_get_cache_list_for_size(struct drm_device *dev,
 		struct list_head *new_list;
 		uint32_t i;

-		new_list = kmalloc_array(new_size, sizeof(struct list_head),
-					 GFP_KERNEL);
+		new_list = kmalloc_objs(struct list_head, new_size, GFP_KERNEL);
 		if (!new_list)
 			return NULL;

@@ -400,7 +399,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
 	if (WARN_ON_ONCE(vc4->gen > VC4_GEN_4))
 		return ERR_PTR(-ENODEV);

-	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+	bo = kzalloc_obj(*bo, GFP_KERNEL);
 	if (!bo)
 		return ERR_PTR(-ENOMEM);

@@ -1015,8 +1014,8 @@ int vc4_bo_cache_init(struct drm_device *dev)
 	 * use.  This lets us avoid a bunch of string reallocation in
 	 * the kernel's draw and BO allocation paths.
 	 */
-	vc4->bo_labels = kcalloc(VC4_BO_TYPE_COUNT, sizeof(*vc4->bo_labels),
-				 GFP_KERNEL);
+	vc4->bo_labels = kzalloc_objs(*vc4->bo_labels, VC4_BO_TYPE_COUNT,
+				      GFP_KERNEL);
 	if (!vc4->bo_labels)
 		return -ENOMEM;
 	vc4->num_labels = VC4_BO_TYPE_COUNT;
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index 2a48038abe7a..27a9eab1c2d0 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -997,7 +997,7 @@ vc4_async_page_flip_common(struct drm_crtc *crtc,
 	struct drm_plane *plane = crtc->primary;
 	struct vc4_async_flip_state *flip_state;

-	flip_state = kzalloc(sizeof(*flip_state), GFP_KERNEL);
+	flip_state = kzalloc_obj(*flip_state, GFP_KERNEL);
 	if (!flip_state)
 		return -ENOMEM;

@@ -1105,7 +1105,7 @@ struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc)
 {
 	struct vc4_crtc_state *vc4_state, *old_vc4_state;

-	vc4_state = kzalloc(sizeof(*vc4_state), GFP_KERNEL);
+	vc4_state = kzalloc_obj(*vc4_state, GFP_KERNEL);
 	if (!vc4_state)
 		return NULL;

@@ -1142,7 +1142,7 @@ void vc4_crtc_reset(struct drm_crtc *crtc)
 	if (crtc->state)
 		vc4_crtc_destroy_state(crtc, crtc->state);

-	vc4_crtc_state = kzalloc(sizeof(*vc4_crtc_state), GFP_KERNEL);
+	vc4_crtc_state = kzalloc_obj(*vc4_crtc_state, GFP_KERNEL);
 	if (!vc4_crtc_state) {
 		crtc->state = NULL;
 		return;
diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
index 3846996f9028..0677458e28f8 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
@@ -152,7 +152,7 @@ static int vc4_open(struct drm_device *dev, struct drm_file *file)
 	if (WARN_ON_ONCE(vc4->gen > VC4_GEN_4))
 		return -ENODEV;

-	vc4file = kzalloc(sizeof(*vc4file), GFP_KERNEL);
+	vc4file = kzalloc_obj(*vc4file, GFP_KERNEL);
 	if (!vc4file)
 		return -ENOMEM;
 	vc4file->dev = vc4;
diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c
index ab16164b5eda..42b6dcbaa01b 100644
--- a/drivers/gpu/drm/vc4/vc4_gem.c
+++ b/drivers/gpu/drm/vc4/vc4_gem.c
@@ -110,7 +110,7 @@ vc4_get_hang_state_ioctl(struct drm_device *dev, void *data,
 	state->bo = get_state->bo;
 	memcpy(get_state, state, sizeof(*state));

-	bo_state = kcalloc(state->bo_count, sizeof(*bo_state), GFP_KERNEL);
+	bo_state = kzalloc_objs(*bo_state, state->bo_count, GFP_KERNEL);
 	if (!bo_state) {
 		ret = -ENOMEM;
 		goto err_free;
@@ -161,7 +161,7 @@ vc4_save_hang_state(struct drm_device *dev)
 	unsigned long irqflags;
 	unsigned int i, j, k, unref_list_count;

-	kernel_state = kcalloc(1, sizeof(*kernel_state), GFP_KERNEL);
+	kernel_state = kzalloc_objs(*kernel_state, 1, GFP_KERNEL);
 	if (!kernel_state)
 		return;

@@ -187,8 +187,8 @@ vc4_save_hang_state(struct drm_device *dev)
 		state->bo_count += exec[i]->bo_count + unref_list_count;
 	}

-	kernel_state->bo = kcalloc(state->bo_count,
-				   sizeof(*kernel_state->bo), GFP_ATOMIC);
+	kernel_state->bo = kzalloc_objs(*kernel_state->bo, state->bo_count,
+					GFP_ATOMIC);

 	if (!kernel_state->bo) {
 		spin_unlock_irqrestore(&vc4->job_lock, irqflags);
@@ -622,7 +622,7 @@ vc4_queue_submit(struct drm_device *dev, struct vc4_exec_info *exec,
 	unsigned long irqflags;
 	struct vc4_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return -ENOMEM;
 	fence->dev = dev;
@@ -1043,7 +1043,7 @@ vc4_submit_cl_ioctl(struct drm_device *dev, void *data,
 		return -EINVAL;
 	}

-	exec = kcalloc(1, sizeof(*exec), GFP_KERNEL);
+	exec = kzalloc_objs(*exec, 1, GFP_KERNEL);
 	if (!exec)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 2ea31938168d..ef5825a00bc3 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -2941,8 +2941,7 @@ static int vc4_hdmi_build_regset(struct drm_device *drm,
 	unsigned int i;
 	int ret;

-	regs = kcalloc(variant->num_registers, sizeof(*regs),
-		       GFP_KERNEL);
+	regs = kzalloc_objs(*regs, variant->num_registers, GFP_KERNEL);
 	if (!regs)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
index e563c1210937..de39992bbaa2 100644
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -103,7 +103,7 @@ static int vc4_ctm_obj_init(struct vc4_dev *vc4)

 	drm_modeset_lock_init(&vc4->ctm_state_lock);

-	ctm_state = kzalloc(sizeof(*ctm_state), GFP_KERNEL);
+	ctm_state = kzalloc_obj(*ctm_state, GFP_KERNEL);
 	if (!ctm_state)
 		return -ENOMEM;

@@ -734,7 +734,7 @@ static int vc4_load_tracker_obj_init(struct vc4_dev *vc4)
 {
 	struct vc4_load_tracker_state *load_state;

-	load_state = kzalloc(sizeof(*load_state), GFP_KERNEL);
+	load_state = kzalloc_obj(*load_state, GFP_KERNEL);
 	if (!load_state)
 		return -ENOMEM;

@@ -752,7 +752,7 @@ vc4_hvs_channels_duplicate_state(struct drm_private_obj *obj)
 	struct vc4_hvs_state *state;
 	unsigned int i;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -817,7 +817,7 @@ static int vc4_hvs_channels_obj_init(struct vc4_dev *vc4)
 {
 	struct vc4_hvs_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

@@ -911,7 +911,7 @@ static int vc4_pv_muxing_atomic_check(struct drm_device *dev,
 	 * If the layout changes and doesn't give us that in the future,
 	 * we will need to have something smarter, but it works so far.
 	 */
-	sorted_crtcs = kmalloc_array(dev->num_crtcs, sizeof(*sorted_crtcs), GFP_KERNEL);
+	sorted_crtcs = kmalloc_objs(*sorted_crtcs, dev->num_crtcs, GFP_KERNEL);
 	if (!sorted_crtcs)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vc4/vc4_perfmon.c b/drivers/gpu/drm/vc4/vc4_perfmon.c
index 1ac80c0b258f..26e89e7054a0 100644
--- a/drivers/gpu/drm/vc4/vc4_perfmon.c
+++ b/drivers/gpu/drm/vc4/vc4_perfmon.c
@@ -172,8 +172,7 @@ int vc4_perfmon_create_ioctl(struct drm_device *dev, void *data,
 			return -EINVAL;
 	}

-	perfmon = kzalloc(struct_size(perfmon, counters, req->ncounters),
-			  GFP_KERNEL);
+	perfmon = kzalloc_flex(*perfmon, counters, req->ncounters, GFP_KERNEL);
 	if (!perfmon)
 		return -ENOMEM;
 	perfmon->dev = vc4;
diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
index f00d4076ba07..26392ae43b99 100644
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -374,7 +374,7 @@ static void vc4_plane_reset(struct drm_plane *plane)

 	kfree(plane->state);

-	vc4_state = kzalloc(sizeof(*vc4_state), GFP_KERNEL);
+	vc4_state = kzalloc_obj(*vc4_state, GFP_KERNEL);
 	if (!vc4_state)
 		return;

diff --git a/drivers/gpu/drm/vc4/vc4_validate_shaders.c b/drivers/gpu/drm/vc4/vc4_validate_shaders.c
index b50b6cdac3f4..8e2fe5eef1b9 100644
--- a/drivers/gpu/drm/vc4/vc4_validate_shaders.c
+++ b/drivers/gpu/drm/vc4/vc4_validate_shaders.c
@@ -803,7 +803,7 @@ vc4_validate_shader(struct drm_gem_dma_object *shader_obj)
 	if (!validation_state.branch_targets)
 		goto fail;

-	validated_shader = kcalloc(1, sizeof(*validated_shader), GFP_KERNEL);
+	validated_shader = kzalloc_objs(*validated_shader, 1, GFP_KERNEL);
 	if (!validated_shader)
 		goto fail;

diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
index 260c64733972..7dc9e2e422f5 100644
--- a/drivers/gpu/drm/vgem/vgem_drv.c
+++ b/drivers/gpu/drm/vgem/vgem_drv.c
@@ -60,7 +60,7 @@ static int vgem_open(struct drm_device *dev, struct drm_file *file)
 	struct vgem_file *vfile;
 	int ret;

-	vfile = kzalloc(sizeof(*vfile), GFP_KERNEL);
+	vfile = kzalloc_obj(*vfile, GFP_KERNEL);
 	if (!vfile)
 		return -ENOMEM;

@@ -94,7 +94,7 @@ static struct drm_gem_object *vgem_gem_create_object(struct drm_device *dev, siz
 {
 	struct drm_gem_shmem_object *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/vgem/vgem_fence.c b/drivers/gpu/drm/vgem/vgem_fence.c
index 07db319c3d7f..313e706abe37 100644
--- a/drivers/gpu/drm/vgem/vgem_fence.c
+++ b/drivers/gpu/drm/vgem/vgem_fence.c
@@ -71,7 +71,7 @@ static struct dma_fence *vgem_fence_create(struct vgem_file *vfile,
 {
 	struct vgem_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return NULL;

diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index 6a962c1d6e95..a4b7761d9250 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -334,7 +334,7 @@ virtio_gpu_user_framebuffer_create(struct drm_device *dev,
 	if (!obj)
 		return ERR_PTR(-EINVAL);

-	virtio_gpu_fb = kzalloc(sizeof(*virtio_gpu_fb), GFP_KERNEL);
+	virtio_gpu_fb = kzalloc_obj(*virtio_gpu_fb, GFP_KERNEL);
 	if (virtio_gpu_fb == NULL) {
 		drm_gem_object_put(obj);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/virtio/virtgpu_fence.c b/drivers/gpu/drm/virtio/virtgpu_fence.c
index 44c1d8ef3c4d..7ee31fd89741 100644
--- a/drivers/gpu/drm/virtio/virtgpu_fence.c
+++ b/drivers/gpu/drm/virtio/virtgpu_fence.c
@@ -61,8 +61,8 @@ struct virtio_gpu_fence *virtio_gpu_fence_alloc(struct virtio_gpu_device *vgdev,
 {
 	uint64_t fence_context = base_fence_ctx + ring_idx;
 	struct virtio_gpu_fence_driver *drv = &vgdev->fence_drv;
-	struct virtio_gpu_fence *fence = kzalloc(sizeof(struct virtio_gpu_fence),
-							GFP_KERNEL);
+	struct virtio_gpu_fence *fence = kzalloc_obj(struct virtio_gpu_fence,
+						     GFP_KERNEL);

 	if (!fence)
 		return fence;
diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 90c99d83c4cf..a2f462aeec25 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -154,7 +154,7 @@ struct virtio_gpu_object_array *virtio_gpu_panic_array_alloc(void)
 {
 	struct virtio_gpu_object_array *objs;

-	objs = kmalloc(sizeof(struct virtio_gpu_object_array), GFP_ATOMIC);
+	objs = kmalloc_obj(struct virtio_gpu_object_array, GFP_ATOMIC);
 	if (!objs)
 		return NULL;

@@ -167,7 +167,7 @@ struct virtio_gpu_object_array *virtio_gpu_array_alloc(u32 nents)
 {
 	struct virtio_gpu_object_array *objs;

-	objs = kmalloc(struct_size(objs, objs, nents), GFP_KERNEL);
+	objs = kmalloc_flex(*objs, objs, nents, GFP_KERNEL);
 	if (!objs)
 		return NULL;

diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c
index f3594695bb82..b1a13946d4db 100644
--- a/drivers/gpu/drm/virtio/virtgpu_kms.c
+++ b/drivers/gpu/drm/virtio/virtgpu_kms.c
@@ -316,7 +316,7 @@ int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file *file)
 		return 0;

 	/* allocate a virt GPU context for this opener */
-	vfpriv = kzalloc(sizeof(*vfpriv), GFP_KERNEL);
+	vfpriv = kzalloc_obj(*vfpriv, GFP_KERNEL);
 	if (!vfpriv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c
index 4270bfede7b9..c7381c564492 100644
--- a/drivers/gpu/drm/virtio/virtgpu_object.c
+++ b/drivers/gpu/drm/virtio/virtgpu_object.c
@@ -149,7 +149,7 @@ struct drm_gem_object *virtio_gpu_create_object(struct drm_device *dev,
 	struct virtio_gpu_object_shmem *shmem;
 	struct drm_gem_shmem_object *dshmem;

-	shmem = kzalloc(sizeof(*shmem), GFP_KERNEL);
+	shmem = kzalloc_obj(*shmem, GFP_KERNEL);
 	if (!shmem)
 		return ERR_PTR(-ENOMEM);

@@ -177,9 +177,7 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev,
 	else
 		*nents = pages->orig_nents;

-	*ents = kvmalloc_array(*nents,
-			       sizeof(struct virtio_gpu_mem_entry),
-			       GFP_KERNEL);
+	*ents = kvmalloc_objs(struct virtio_gpu_mem_entry, *nents, GFP_KERNEL);
 	if (!(*ents)) {
 		DRM_ERROR("failed to allocate ent list\n");
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index a7863f8ee4ee..9b72ece71264 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -79,7 +79,7 @@ drm_plane_state *virtio_gpu_plane_duplicate_state(struct drm_plane *plane)
 	if (WARN_ON(!plane->state))
 		return NULL;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;

diff --git a/drivers/gpu/drm/virtio/virtgpu_prime.c b/drivers/gpu/drm/virtio/virtgpu_prime.c
index ce49282198cb..9cae1f3b18e8 100644
--- a/drivers/gpu/drm/virtio/virtgpu_prime.c
+++ b/drivers/gpu/drm/virtio/virtgpu_prime.c
@@ -164,9 +164,8 @@ int virtgpu_dma_buf_import_sgt(struct virtio_gpu_mem_entry **ents,
 	if (IS_ERR(sgt))
 		return PTR_ERR(sgt);

-	*ents = kvmalloc_array(sgt->nents,
-			       sizeof(struct virtio_gpu_mem_entry),
-			       GFP_KERNEL);
+	*ents = kvmalloc_objs(struct virtio_gpu_mem_entry, sgt->nents,
+			      GFP_KERNEL);
 	if (!(*ents)) {
 		dma_buf_unmap_attachment(attach, sgt, DMA_BIDIRECTIONAL);
 		return -ENOMEM;
@@ -315,7 +314,7 @@ struct drm_gem_object *virtgpu_gem_prime_import(struct drm_device *dev,
 	if (!vgdev->has_resource_blob || vgdev->has_virgl_3d)
 		return drm_gem_prime_import(dev, buf);

-	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+	bo = kzalloc_obj(*bo, GFP_KERNEL);
 	if (!bo)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c b/drivers/gpu/drm/virtio/virtgpu_submit.c
index 7d34cf83f5f2..8f171d87545f 100644
--- a/drivers/gpu/drm/virtio/virtgpu_submit.c
+++ b/drivers/gpu/drm/virtio/virtgpu_submit.c
@@ -104,7 +104,7 @@ virtio_gpu_parse_deps(struct virtio_gpu_submit *submit)
 	 * internally for allocations larger than a page size, preventing
 	 * storm of KMSG warnings.
 	 */
-	syncobjs = kvcalloc(num_in_syncobjs, sizeof(*syncobjs), GFP_KERNEL);
+	syncobjs = kvzalloc_objs(*syncobjs, num_in_syncobjs, GFP_KERNEL);
 	if (!syncobjs)
 		return -ENOMEM;

@@ -195,7 +195,7 @@ static int virtio_gpu_parse_post_deps(struct virtio_gpu_submit *submit)
 	if (!num_out_syncobjs)
 		return 0;

-	post_deps = kvcalloc(num_out_syncobjs, sizeof(*post_deps), GFP_KERNEL);
+	post_deps = kvzalloc_objs(*post_deps, num_out_syncobjs, GFP_KERNEL);
 	if (!post_deps)
 		return -ENOMEM;

@@ -277,7 +277,7 @@ static int virtio_gpu_fence_event_create(struct drm_device *dev,
 	struct virtio_gpu_fence_event *e = NULL;
 	int ret;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index 0c194b4e9488..9a45a58e9f58 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -312,7 +312,7 @@ static struct sg_table *vmalloc_to_sgt(char *data, uint32_t size, int *sg_ents)
 	if (WARN_ON(!PAGE_ALIGNED(data)))
 		return NULL;

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return NULL;

@@ -936,8 +936,7 @@ int virtio_gpu_cmd_get_display_info(struct virtio_gpu_device *vgdev)
 	struct virtio_gpu_vbuffer *vbuf;
 	void *resp_buf;

-	resp_buf = kzalloc(sizeof(struct virtio_gpu_resp_display_info),
-			   GFP_KERNEL);
+	resp_buf = kzalloc_obj(struct virtio_gpu_resp_display_info, GFP_KERNEL);
 	if (!resp_buf)
 		return -ENOMEM;

@@ -959,8 +958,7 @@ int virtio_gpu_cmd_get_capset_info(struct virtio_gpu_device *vgdev, int idx)
 	struct virtio_gpu_vbuffer *vbuf;
 	void *resp_buf;

-	resp_buf = kzalloc(sizeof(struct virtio_gpu_resp_capset_info),
-			   GFP_KERNEL);
+	resp_buf = kzalloc_obj(struct virtio_gpu_resp_capset_info, GFP_KERNEL);
 	if (!resp_buf)
 		return -ENOMEM;

@@ -995,7 +993,7 @@ int virtio_gpu_cmd_get_capset(struct virtio_gpu_device *vgdev,
 	if (version > vgdev->capsets[idx].max_version)
 		return -EINVAL;

-	cache_ent = kzalloc(sizeof(*cache_ent), GFP_KERNEL);
+	cache_ent = kzalloc_obj(*cache_ent, GFP_KERNEL);
 	if (!cache_ent)
 		return -ENOMEM;

@@ -1063,8 +1061,7 @@ int virtio_gpu_cmd_get_edids(struct virtio_gpu_device *vgdev)
 		return -EINVAL;

 	for (scanout = 0; scanout < vgdev->num_scanouts; scanout++) {
-		resp_buf = kzalloc(sizeof(struct virtio_gpu_resp_edid),
-				   GFP_KERNEL);
+		resp_buf = kzalloc_obj(struct virtio_gpu_resp_edid, GFP_KERNEL);
 		if (!resp_buf)
 			return -ENOMEM;

@@ -1341,7 +1338,7 @@ virtio_gpu_cmd_resource_assign_uuid(struct virtio_gpu_device *vgdev,
 	struct virtio_gpu_vbuffer *vbuf;
 	struct virtio_gpu_resp_resource_uuid *resp_buf;

-	resp_buf = kzalloc(sizeof(*resp_buf), GFP_KERNEL);
+	resp_buf = kzalloc_obj(*resp_buf, GFP_KERNEL);
 	if (!resp_buf) {
 		spin_lock(&vgdev->resource_export_lock);
 		bo->uuid_state = STATE_ERR;
@@ -1394,7 +1391,7 @@ int virtio_gpu_cmd_map(struct virtio_gpu_device *vgdev,
 	struct virtio_gpu_vbuffer *vbuf;
 	struct virtio_gpu_resp_map_info *resp_buf;

-	resp_buf = kzalloc(sizeof(*resp_buf), GFP_KERNEL);
+	resp_buf = kzalloc_obj(*resp_buf, GFP_KERNEL);
 	if (!resp_buf)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/virtio/virtgpu_vram.c b/drivers/gpu/drm/virtio/virtgpu_vram.c
index 5ad3b7c6f73c..da5d4ee8ddef 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vram.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vram.c
@@ -79,7 +79,7 @@ struct sg_table *virtio_gpu_vram_map_dma_buf(struct virtio_gpu_object *bo,
 	dma_addr_t addr;
 	int ret;

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return ERR_PTR(-ENOMEM);

@@ -193,7 +193,7 @@ int virtio_gpu_vram_create(struct virtio_gpu_device *vgdev,
 	struct virtio_gpu_object_vram *vram;
 	int ret;

-	vram = kzalloc(sizeof(*vram), GFP_KERNEL);
+	vram = kzalloc_obj(*vram, GFP_KERNEL);
 	if (!vram)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vkms/vkms_colorop.c b/drivers/gpu/drm/vkms/vkms_colorop.c
index d03a1f2e9c41..8aeea73de617 100644
--- a/drivers/gpu/drm/vkms/vkms_colorop.c
+++ b/drivers/gpu/drm/vkms/vkms_colorop.c
@@ -24,7 +24,7 @@ static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_pr
 	memset(ops, 0, sizeof(ops));

 	/* 1st op: 1d curve */
-	ops[i] = kzalloc(sizeof(*ops[i]), GFP_KERNEL);
+	ops[i] = kzalloc_obj(*ops[i], GFP_KERNEL);
 	if (!ops[i]) {
 		drm_err(dev, "KMS: Failed to allocate colorop\n");
 		ret = -ENOMEM;
@@ -41,7 +41,7 @@ static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_pr
 	i++;

 	/* 2nd op: 3x4 matrix */
-	ops[i] = kzalloc(sizeof(*ops[i]), GFP_KERNEL);
+	ops[i] = kzalloc_obj(*ops[i], GFP_KERNEL);
 	if (!ops[i]) {
 		drm_err(dev, "KMS: Failed to allocate colorop\n");
 		ret = -ENOMEM;
@@ -57,7 +57,7 @@ static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_pr
 	i++;

 	/* 3rd op: 3x4 matrix */
-	ops[i] = kzalloc(sizeof(*ops[i]), GFP_KERNEL);
+	ops[i] = kzalloc_obj(*ops[i], GFP_KERNEL);
 	if (!ops[i]) {
 		drm_err(dev, "KMS: Failed to allocate colorop\n");
 		ret = -ENOMEM;
@@ -73,7 +73,7 @@ static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_pr
 	i++;

 	/* 4th op: 1d curve */
-	ops[i] = kzalloc(sizeof(*ops[i]), GFP_KERNEL);
+	ops[i] = kzalloc_obj(*ops[i], GFP_KERNEL);
 	if (!ops[i]) {
 		drm_err(dev, "KMS: Failed to allocate colorop\n");
 		ret = -ENOMEM;
diff --git a/drivers/gpu/drm/vkms/vkms_config.c b/drivers/gpu/drm/vkms/vkms_config.c
index 8788df9edb7c..8447b654e229 100644
--- a/drivers/gpu/drm/vkms/vkms_config.c
+++ b/drivers/gpu/drm/vkms/vkms_config.c
@@ -12,7 +12,7 @@ struct vkms_config *vkms_config_create(const char *dev_name)
 {
 	struct vkms_config *config;

-	config = kzalloc(sizeof(*config), GFP_KERNEL);
+	config = kzalloc_obj(*config, GFP_KERNEL);
 	if (!config)
 		return ERR_PTR(-ENOMEM);

@@ -388,7 +388,7 @@ struct vkms_config_plane *vkms_config_create_plane(struct vkms_config *config)
 {
 	struct vkms_config_plane *plane_cfg;

-	plane_cfg = kzalloc(sizeof(*plane_cfg), GFP_KERNEL);
+	plane_cfg = kzalloc_obj(*plane_cfg, GFP_KERNEL);
 	if (!plane_cfg)
 		return ERR_PTR(-ENOMEM);

@@ -448,7 +448,7 @@ struct vkms_config_crtc *vkms_config_create_crtc(struct vkms_config *config)
 {
 	struct vkms_config_crtc *crtc_cfg;

-	crtc_cfg = kzalloc(sizeof(*crtc_cfg), GFP_KERNEL);
+	crtc_cfg = kzalloc_obj(*crtc_cfg, GFP_KERNEL);
 	if (!crtc_cfg)
 		return ERR_PTR(-ENOMEM);

@@ -527,7 +527,7 @@ struct vkms_config_encoder *vkms_config_create_encoder(struct vkms_config *confi
 {
 	struct vkms_config_encoder *encoder_cfg;

-	encoder_cfg = kzalloc(sizeof(*encoder_cfg), GFP_KERNEL);
+	encoder_cfg = kzalloc_obj(*encoder_cfg, GFP_KERNEL);
 	if (!encoder_cfg)
 		return ERR_PTR(-ENOMEM);

@@ -591,7 +591,7 @@ struct vkms_config_connector *vkms_config_create_connector(struct vkms_config *c
 {
 	struct vkms_config_connector *connector_cfg;

-	connector_cfg = kzalloc(sizeof(*connector_cfg), GFP_KERNEL);
+	connector_cfg = kzalloc_obj(*connector_cfg, GFP_KERNEL);
 	if (!connector_cfg)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c
index 506666e21c91..f6471ee9a58c 100644
--- a/drivers/gpu/drm/vkms/vkms_configfs.c
+++ b/drivers/gpu/drm/vkms/vkms_configfs.c
@@ -769,7 +769,7 @@ static struct config_group *make_device_group(struct config_group *group,
 	if (strcmp(name, DEFAULT_DEVICE_NAME) == 0)
 		return ERR_PTR(-EINVAL);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c
index 9a7db1d51022..f5b99ebb37e3 100644
--- a/drivers/gpu/drm/vkms/vkms_crtc.c
+++ b/drivers/gpu/drm/vkms/vkms_crtc.c
@@ -62,7 +62,7 @@ vkms_atomic_crtc_duplicate_state(struct drm_crtc *crtc)
 	if (WARN_ON(!crtc->state))
 		return NULL;

-	vkms_state = kzalloc(sizeof(*vkms_state), GFP_KERNEL);
+	vkms_state = kzalloc_obj(*vkms_state, GFP_KERNEL);
 	if (!vkms_state)
 		return NULL;

@@ -87,8 +87,8 @@ static void vkms_atomic_crtc_destroy_state(struct drm_crtc *crtc,

 static void vkms_atomic_crtc_reset(struct drm_crtc *crtc)
 {
-	struct vkms_crtc_state *vkms_state =
-		kzalloc(sizeof(*vkms_state), GFP_KERNEL);
+	struct vkms_crtc_state *vkms_state = kzalloc_obj(*vkms_state,
+						         GFP_KERNEL);

 	if (crtc->state)
 		vkms_atomic_crtc_destroy_state(crtc, crtc->state);
@@ -137,7 +137,8 @@ static int vkms_crtc_atomic_check(struct drm_crtc *crtc,
 		i++;
 	}

-	vkms_state->active_planes = kcalloc(i, sizeof(*vkms_state->active_planes), GFP_KERNEL);
+	vkms_state->active_planes = kzalloc_objs(*vkms_state->active_planes, i,
+						 GFP_KERNEL);
 	if (!vkms_state->active_planes)
 		return -ENOMEM;
 	vkms_state->num_active_planes = i;
diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c
index 19fe6acad306..73d3c4af7743 100644
--- a/drivers/gpu/drm/vkms/vkms_plane.c
+++ b/drivers/gpu/drm/vkms/vkms_plane.c
@@ -56,11 +56,11 @@ vkms_plane_duplicate_state(struct drm_plane *plane)
 	struct vkms_plane_state *vkms_state;
 	struct vkms_frame_info *frame_info;

-	vkms_state = kzalloc(sizeof(*vkms_state), GFP_KERNEL);
+	vkms_state = kzalloc_obj(*vkms_state, GFP_KERNEL);
 	if (!vkms_state)
 		return NULL;

-	frame_info = kzalloc(sizeof(*frame_info), GFP_KERNEL);
+	frame_info = kzalloc_obj(*frame_info, GFP_KERNEL);
 	if (!frame_info) {
 		DRM_DEBUG_KMS("Couldn't allocate frame_info\n");
 		kfree(vkms_state);
@@ -104,7 +104,7 @@ static void vkms_plane_reset(struct drm_plane *plane)
 		plane->state = NULL; /* must be set to NULL here */
 	}

-	vkms_state = kzalloc(sizeof(*vkms_state), GFP_KERNEL);
+	vkms_state = kzalloc_obj(*vkms_state, GFP_KERNEL);
 	if (!vkms_state) {
 		DRM_ERROR("Cannot allocate vkms_plane_state\n");
 		return;
diff --git a/drivers/gpu/drm/vkms/vkms_writeback.c b/drivers/gpu/drm/vkms/vkms_writeback.c
index 097ae1f0a230..1cd760f75779 100644
--- a/drivers/gpu/drm/vkms/vkms_writeback.c
+++ b/drivers/gpu/drm/vkms/vkms_writeback.c
@@ -81,7 +81,7 @@ static int vkms_wb_prepare_job(struct drm_writeback_connector *wb_connector,
 	if (!job->fb)
 		return 0;

-	vkmsjob = kzalloc(sizeof(*vkmsjob), GFP_KERNEL);
+	vkmsjob = kzalloc_obj(*vkmsjob, GFP_KERNEL);
 	if (!vkmsjob)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vmwgfx/ttm_object.c b/drivers/gpu/drm/vmwgfx/ttm_object.c
index 36d46b79562a..23ffb7069d01 100644
--- a/drivers/gpu/drm/vmwgfx/ttm_object.c
+++ b/drivers/gpu/drm/vmwgfx/ttm_object.c
@@ -318,7 +318,7 @@ int ttm_ref_object_add(struct ttm_object_file *tfile,
 		if (require_existed)
 			return -EPERM;

-		ref = kmalloc(sizeof(*ref), GFP_KERNEL);
+		ref = kmalloc_obj(*ref, GFP_KERNEL);
 		if (unlikely(ref == NULL)) {
 			return -ENOMEM;
 		}
@@ -404,7 +404,7 @@ void ttm_object_file_release(struct ttm_object_file **p_tfile)

 struct ttm_object_file *ttm_object_file_init(struct ttm_object_device *tdev)
 {
-	struct ttm_object_file *tfile = kmalloc(sizeof(*tfile), GFP_KERNEL);
+	struct ttm_object_file *tfile = kmalloc_obj(*tfile, GFP_KERNEL);

 	if (unlikely(tfile == NULL))
 		return NULL;
@@ -422,7 +422,7 @@ struct ttm_object_file *ttm_object_file_init(struct ttm_object_device *tdev)
 struct ttm_object_device *
 ttm_object_device_init(const struct dma_buf_ops *ops)
 {
-	struct ttm_object_device *tdev = kmalloc(sizeof(*tdev), GFP_KERNEL);
+	struct ttm_object_device *tdev = kmalloc_obj(*tdev, GFP_KERNEL);

 	if (unlikely(tdev == NULL))
 		return NULL;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c b/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c
index fa5841fda659..60ebcfe6d428 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c
@@ -586,8 +586,8 @@ int vmw_bo_cpu_blit(struct vmw_bo *vmw_dst,
 					    w, h, diff);

 	if (!src->ttm->pages && src->ttm->sg) {
-		src_pages = kvmalloc_array(src->ttm->num_pages,
-					   sizeof(struct page *), GFP_KERNEL);
+		src_pages = kvmalloc_objs(struct page *, src->ttm->num_pages,
+					  GFP_KERNEL);
 		if (!src_pages)
 			return -ENOMEM;
 		ret = drm_prime_sg_to_page_array(src->ttm->sg, src_pages,
@@ -596,8 +596,8 @@ int vmw_bo_cpu_blit(struct vmw_bo *vmw_dst,
 			goto out;
 	}
 	if (!dst->ttm->pages && dst->ttm->sg) {
-		dst_pages = kvmalloc_array(dst->ttm->num_pages,
-					   sizeof(struct page *), GFP_KERNEL);
+		dst_pages = kvmalloc_objs(struct page *, dst->ttm->num_pages,
+					  GFP_KERNEL);
 		if (!dst_pages) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
index b22887e8c881..97290b5d65d0 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
@@ -449,7 +449,7 @@ int vmw_bo_create(struct vmw_private *vmw,
 {
 	int ret;

-	*p_bo = kmalloc(sizeof(**p_bo), GFP_KERNEL);
+	*p_bo = kmalloc_obj(**p_bo, GFP_KERNEL);
 	if (unlikely(!*p_bo)) {
 		DRM_ERROR("Failed to allocate a buffer.\n");
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cmd.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cmd.c
index 8fe02131a6c4..cfecea9bfa24 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_cmd.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cmd.c
@@ -103,7 +103,7 @@ struct vmw_fifo_state *vmw_fifo_create(struct vmw_private *dev_priv)
 	if (!dev_priv->fifo_mem)
 		return NULL;

-	fifo = kzalloc(sizeof(*fifo), GFP_KERNEL);
+	fifo = kzalloc_obj(*fifo, GFP_KERNEL);
 	if (!fifo)
 		return ERR_PTR(-ENOMEM);
 	fifo->static_buffer_size = VMWGFX_FIFO_STATIC_SIZE;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c
index 94e8982f5616..5756af107555 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c
@@ -961,7 +961,7 @@ void *vmw_cmdbuf_alloc(struct vmw_cmdbuf_man *man,

 	*p_header = NULL;

-	header = kzalloc(sizeof(*header), GFP_KERNEL);
+	header = kzalloc_obj(*header, GFP_KERNEL);
 	if (!header)
 		return ERR_PTR(-ENOMEM);

@@ -1296,7 +1296,7 @@ struct vmw_cmdbuf_man *vmw_cmdbuf_man_create(struct vmw_private *dev_priv)
 	if (!(dev_priv->capabilities & SVGA_CAP_COMMAND_BUFFERS))
 		return ERR_PTR(-ENOSYS);

-	man = kzalloc(sizeof(*man), GFP_KERNEL);
+	man = kzalloc_obj(*man, GFP_KERNEL);
 	if (!man)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c
index 47bc0b411055..b8b4834d40fb 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c
@@ -200,7 +200,7 @@ int vmw_cmdbuf_res_add(struct vmw_cmdbuf_res_manager *man,
 {
 	struct vmw_cmdbuf_res *cres;

-	cres = kzalloc(sizeof(*cres), GFP_KERNEL);
+	cres = kzalloc_obj(*cres, GFP_KERNEL);
 	if (unlikely(!cres))
 		return -ENOMEM;

@@ -284,7 +284,7 @@ vmw_cmdbuf_res_man_create(struct vmw_private *dev_priv)
 {
 	struct vmw_cmdbuf_res_manager *man;

-	man = kzalloc(sizeof(*man), GFP_KERNEL);
+	man = kzalloc_obj(*man, GFP_KERNEL);
 	if (!man)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
index ecc503e42790..0845c00e777d 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
@@ -738,7 +738,7 @@ static int vmw_context_define(struct drm_device *dev, void *data,
 		return -EINVAL;
 	}

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (unlikely(!ctx)) {
 		ret = -ENOMEM;
 		goto out_ret;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c
index 98331c4c0335..6220a1a0326a 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c
@@ -604,7 +604,7 @@ struct vmw_resource *vmw_cotable_alloc(struct vmw_private *dev_priv,
 	int ret;
 	u32 num_entries;

-	vcotbl = kzalloc(sizeof(*vcotbl), GFP_KERNEL);
+	vcotbl = kzalloc_obj(*vcotbl, GFP_KERNEL);
 	if (unlikely(!vcotbl)) {
 		ret = -ENOMEM;
 		goto out_no_alloc;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 599052d07ae8..eb5695bcae89 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -1209,7 +1209,7 @@ static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv)
 	struct vmw_fpriv *vmw_fp;
 	int ret = -ENOMEM;

-	vmw_fp = kzalloc(sizeof(*vmw_fp), GFP_KERNEL);
+	vmw_fp = kzalloc_obj(*vmw_fp, GFP_KERNEL);
 	if (unlikely(!vmw_fp))
 		return ret;

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
index 85795082fef9..4500771a8f42 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -129,7 +129,7 @@ static const struct dma_fence_ops vmw_fence_ops = {

 struct vmw_fence_manager *vmw_fence_manager_init(struct vmw_private *dev_priv)
 {
-	struct vmw_fence_manager *fman = kzalloc(sizeof(*fman), GFP_KERNEL);
+	struct vmw_fence_manager *fman = kzalloc_obj(*fman, GFP_KERNEL);

 	if (unlikely(!fman))
 		return NULL;
@@ -251,7 +251,7 @@ int vmw_fence_create(struct vmw_fence_manager *fman,
 	struct vmw_fence_obj *fence;
 	int ret;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (unlikely(!fence))
 		return -ENOMEM;

@@ -298,7 +298,7 @@ int vmw_user_fence_create(struct drm_file *file_priv,
 	struct vmw_fence_obj *tmp;
 	int ret;

-	ufence = kzalloc(sizeof(*ufence), GFP_KERNEL);
+	ufence = kzalloc_obj(*ufence, GFP_KERNEL);
 	if (unlikely(!ufence)) {
 		ret = -ENOMEM;
 		goto out_no_object;
@@ -580,7 +580,7 @@ int vmw_event_fence_action_queue(struct drm_file *file_priv,
 	struct vmw_event_fence_action *eaction;
 	struct vmw_fence_manager *fman = fman_from_fence(fence);

-	eaction = kzalloc(sizeof(*eaction), GFP_KERNEL);
+	eaction = kzalloc_obj(*eaction, GFP_KERNEL);
 	if (unlikely(!eaction))
 		return -ENOMEM;

@@ -612,7 +612,7 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv,
 	struct drm_device *dev = &fman->dev_priv->drm;
 	int ret;

-	event = kzalloc(sizeof(*event), GFP_KERNEL);
+	event = kzalloc_obj(*event, GFP_KERNEL);
 	if (unlikely(!event)) {
 		DRM_ERROR("Failed to allocate an event.\n");
 		ret = -ENOMEM;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
index 5bd967fbcf55..1a45220d3607 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
@@ -57,7 +57,7 @@ static int vmw_gmrid_man_get_node(struct ttm_resource_manager *man,
 	struct vmwgfx_gmrid_man *gman = to_gmrid_manager(man);
 	int id;

-	*res = kmalloc(sizeof(**res), GFP_KERNEL);
+	*res = kmalloc_obj(**res, GFP_KERNEL);
 	if (!*res)
 		return -ENOMEM;

@@ -154,8 +154,7 @@ static const struct ttm_resource_manager_func vmw_gmrid_manager_func;
 int vmw_gmrid_man_init(struct vmw_private *dev_priv, int type)
 {
 	struct ttm_resource_manager *man;
-	struct vmwgfx_gmrid_man *gman =
-		kzalloc(sizeof(*gman), GFP_KERNEL);
+	struct vmwgfx_gmrid_man *gman = kzalloc_obj(*gman, GFP_KERNEL);

 	if (unlikely(!gman))
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c
index 835d1eed8dd9..1c4fc5f0d586 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c
@@ -196,7 +196,7 @@ int vmw_present_ioctl(struct drm_device *dev, void *data,
 		goto out_clips;
 	}

-	clips = kcalloc(num_clips, sizeof(*clips), GFP_KERNEL);
+	clips = kzalloc_objs(*clips, num_clips, GFP_KERNEL);
 	if (clips == NULL) {
 		DRM_ERROR("Failed to allocate clip rect list.\n");
 		ret = -ENOMEM;
@@ -273,7 +273,7 @@ int vmw_present_readback_ioctl(struct drm_device *dev, void *data,
 		goto out_clips;
 	}

-	clips = kcalloc(num_clips, sizeof(*clips), GFP_KERNEL);
+	clips = kzalloc_objs(*clips, num_clips, GFP_KERNEL);
 	if (clips == NULL) {
 		DRM_ERROR("Failed to allocate clip rect list.\n");
 		ret = -ENOMEM;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index bc51b5d55e38..ca6aec15f113 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -224,7 +224,7 @@ void vmw_du_crtc_reset(struct drm_crtc *crtc)
 		kfree(vmw_crtc_state_to_vcs(crtc->state));
 	}

-	vcs = kzalloc(sizeof(*vcs), GFP_KERNEL);
+	vcs = kzalloc_obj(*vcs, GFP_KERNEL);

 	if (!vcs) {
 		DRM_ERROR("Cannot allocate vmw_crtc_state\n");
@@ -300,7 +300,7 @@ void vmw_du_plane_reset(struct drm_plane *plane)
 	if (plane->state)
 		vmw_du_plane_destroy_state(plane, plane->state);

-	vps = kzalloc(sizeof(*vps), GFP_KERNEL);
+	vps = kzalloc_obj(*vps, GFP_KERNEL);

 	if (!vps) {
 		DRM_ERROR("Cannot allocate vmw_plane_state\n");
@@ -382,7 +382,7 @@ void vmw_du_connector_reset(struct drm_connector *connector)
 		kfree(vmw_connector_state_to_vcs(connector->state));
 	}

-	vcs = kzalloc(sizeof(*vcs), GFP_KERNEL);
+	vcs = kzalloc_obj(*vcs, GFP_KERNEL);

 	if (!vcs) {
 		DRM_ERROR("Cannot allocate vmw_connector_state\n");
@@ -543,7 +543,7 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
 		return -EINVAL;
 	}

-	vfbs = kzalloc(sizeof(*vfbs), GFP_KERNEL);
+	vfbs = kzalloc_obj(*vfbs, GFP_KERNEL);
 	if (!vfbs) {
 		ret = -ENOMEM;
 		goto out_err1;
@@ -632,7 +632,7 @@ static int vmw_kms_new_framebuffer_bo(struct vmw_private *dev_priv,
 		return -EINVAL;
 	}

-	vfbd = kzalloc(sizeof(*vfbd), GFP_KERNEL);
+	vfbd = kzalloc_obj(*vfbd, GFP_KERNEL);
 	if (!vfbd) {
 		ret = -ENOMEM;
 		goto out_err1;
@@ -948,8 +948,8 @@ static int vmw_kms_check_topology(struct drm_device *dev,
 	uint32_t i;
 	int ret = 0;

-	rects = kcalloc(dev->mode_config.num_crtc, sizeof(struct drm_rect),
-			GFP_KERNEL);
+	rects = kzalloc_objs(struct drm_rect, dev->mode_config.num_crtc,
+			     GFP_KERNEL);
 	if (!rects)
 		return -ENOMEM;

@@ -1422,8 +1422,7 @@ int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data,
 	}

 	rects_size = arg->num_outputs * sizeof(struct drm_vmw_rect);
-	rects = kcalloc(arg->num_outputs, sizeof(struct drm_vmw_rect),
-			GFP_KERNEL);
+	rects = kzalloc_objs(struct drm_vmw_rect, arg->num_outputs, GFP_KERNEL);
 	if (unlikely(!rects))
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index c23c9195f0dc..e07ee831064b 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
@@ -416,7 +416,7 @@ static int vmw_ldu_init(struct vmw_private *dev_priv, unsigned unit)
 	struct drm_crtc *crtc;
 	int ret;

-	ldu = kzalloc(sizeof(*ldu), GFP_KERNEL);
+	ldu = kzalloc_obj(*ldu, GFP_KERNEL);
 	if (!ldu)
 		return -ENOMEM;

@@ -547,7 +547,7 @@ int vmw_kms_ldu_init_display(struct vmw_private *dev_priv)
 		return -EINVAL;
 	}

-	dev_priv->ldu_priv = kmalloc(sizeof(*dev_priv->ldu_priv), GFP_KERNEL);
+	dev_priv->ldu_priv = kmalloc_obj(*dev_priv->ldu_priv, GFP_KERNEL);
 	if (!dev_priv->ldu_priv)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
index d8204d4265d3..d29ac15a742b 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
@@ -390,7 +390,7 @@ static unsigned long vmw_mob_calculate_pt_pages(unsigned long data_pages)
  */
 struct vmw_mob *vmw_mob_create(unsigned long data_pages)
 {
-	struct vmw_mob *mob = kzalloc(sizeof(*mob), GFP_KERNEL);
+	struct vmw_mob *mob = kzalloc_obj(*mob, GFP_KERNEL);

 	if (unlikely(!mob))
 		return NULL;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
index 1d9a42cbc88f..84237edf1ac0 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
@@ -981,10 +981,9 @@ int vmw_mksstat_add_ioctl(struct drm_device *dev, void *data,
 	BUG_ON(dev_priv->mksstat_user_pages[slot]);

 	/* Allocate statically-sized temp arrays for pages -- too big to keep in frame */
-	pages_stat = (struct page **)kmalloc_array(
-		ARRAY_SIZE(pdesc->statPPNs) +
-		ARRAY_SIZE(pdesc->infoPPNs) +
-		ARRAY_SIZE(pdesc->strsPPNs), sizeof(*pages_stat), GFP_KERNEL);
+	pages_stat = (struct page **) kmalloc_objs(*pages_stat,
+						   ARRAY_SIZE(pdesc->statPPNs) + ARRAY_SIZE(pdesc->infoPPNs) + ARRAY_SIZE(pdesc->strsPPNs),
+						   GFP_KERNEL);

 	if (!pages_stat)
 		goto err_nomem;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c b/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c
index e20f64b67b26..9a75a35f605b 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c
@@ -539,7 +539,7 @@ int vmw_overlay_init(struct vmw_private *dev_priv)
 	if (dev_priv->overlay_priv)
 		return -EINVAL;

-	overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
+	overlay = kzalloc_obj(*overlay, GFP_KERNEL);
 	if (!overlay)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index 5f5f5a94301f..37bcdfb585ce 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -811,7 +811,7 @@ static int vmw_sou_init(struct vmw_private *dev_priv, unsigned unit)
 	struct drm_crtc *crtc;
 	int ret;

-	sou = kzalloc(sizeof(*sou), GFP_KERNEL);
+	sou = kzalloc_obj(*sou, GFP_KERNEL);
 	if (!sou)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
index a8c8c9375d29..d74d9b72f80d 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
@@ -595,7 +595,7 @@ int vmw_dx_shader_add(struct vmw_cmdbuf_res_manager *man,
 	if (!vmw_shader_id_ok(user_key, shader_type))
 		return -EINVAL;

-	shader = kmalloc(sizeof(*shader), GFP_KERNEL);
+	shader = kmalloc_obj(*shader, GFP_KERNEL);
 	if (!shader) {
 		return -ENOMEM;
 	}
@@ -696,7 +696,7 @@ static int vmw_user_shader_alloc(struct vmw_private *dev_priv,
 	struct vmw_resource *res, *tmp;
 	int ret;

-	ushader = kzalloc(sizeof(*ushader), GFP_KERNEL);
+	ushader = kzalloc_obj(*ushader, GFP_KERNEL);
 	if (unlikely(!ushader)) {
 		ret = -ENOMEM;
 		goto out;
@@ -746,7 +746,7 @@ static struct vmw_resource *vmw_shader_alloc(struct vmw_private *dev_priv,
 	struct vmw_resource *res;
 	int ret;

-	shader = kzalloc(sizeof(*shader), GFP_KERNEL);
+	shader = kzalloc_obj(*shader, GFP_KERNEL);
 	if (unlikely(!shader)) {
 		ret = -ENOMEM;
 		goto out_err;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index 20aab725e53a..14f583ab4bac 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -1541,7 +1541,7 @@ static int vmw_stdu_init(struct vmw_private *dev_priv, unsigned unit)
 	struct drm_crtc *crtc;
 	int    ret;

-	stdu = kzalloc(sizeof(*stdu), GFP_KERNEL);
+	stdu = kzalloc_obj(*stdu, GFP_KERNEL);
 	if (!stdu)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_streamoutput.c b/drivers/gpu/drm/vmwgfx/vmwgfx_streamoutput.c
index edcc40659038..6805c03ae248 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_streamoutput.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_streamoutput.c
@@ -284,7 +284,7 @@ int vmw_dx_streamoutput_add(struct vmw_cmdbuf_res_manager *man,
 	struct vmw_private *dev_priv = ctx->dev_priv;
 	int ret;

-	so = kmalloc(sizeof(*so), GFP_KERNEL);
+	so = kmalloc_obj(*so, GFP_KERNEL);
 	if (!so) {
 		return -ENOMEM;
 	}
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
index c4ac9b47e23a..9ff2d54d548e 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
@@ -741,7 +741,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
 		return -EINVAL;
 	}

-	user_srf = kzalloc(sizeof(*user_srf), GFP_KERNEL);
+	user_srf = kzalloc_obj(*user_srf, GFP_KERNEL);
 	if (unlikely(!user_srf)) {
 		ret = -ENOMEM;
 		goto out_unlock;
@@ -767,8 +767,8 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
 		ret = PTR_ERR(metadata->sizes);
 		goto out_no_sizes;
 	}
-	srf->offsets = kmalloc_array(metadata->num_sizes, sizeof(*srf->offsets),
-				     GFP_KERNEL);
+	srf->offsets = kmalloc_objs(*srf->offsets, metadata->num_sizes,
+				    GFP_KERNEL);
 	if (unlikely(!srf->offsets)) {
 		ret = -ENOMEM;
 		goto out_no_offsets;
@@ -2144,7 +2144,7 @@ int vmw_gb_surface_define(struct vmw_private *dev_priv,
 	if (req->sizes != NULL)
 		return -EINVAL;

-	user_srf = kzalloc(sizeof(*user_srf), GFP_KERNEL);
+	user_srf = kzalloc_obj(*user_srf, GFP_KERNEL);
 	if (unlikely(!user_srf)) {
 		ret = -ENOMEM;
 		goto out_unlock;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c
index ee7964cbdaca..08b492534fe9 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c
@@ -37,7 +37,7 @@ static int vmw_sys_man_alloc(struct ttm_resource_manager *man,
 			     const struct ttm_place *place,
 			     struct ttm_resource **res)
 {
-	*res = kzalloc(sizeof(**res), GFP_KERNEL);
+	*res = kzalloc_obj(**res, GFP_KERNEL);
 	if (!*res)
 		return -ENOMEM;

@@ -60,8 +60,7 @@ static const struct ttm_resource_manager_func vmw_sys_manager_func = {
 int vmw_sys_man_init(struct vmw_private *dev_priv)
 {
 	struct ttm_device *bdev = &dev_priv->bdev;
-	struct ttm_resource_manager *man =
-			kzalloc(sizeof(*man), GFP_KERNEL);
+	struct ttm_resource_manager *man = kzalloc_obj(*man, GFP_KERNEL);

 	if (!man)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
index 5553892d7c3e..232c2b8ff520 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
@@ -404,7 +404,7 @@ static struct ttm_tt *vmw_ttm_tt_create(struct ttm_buffer_object *bo,
 	int ret;
 	bool external = bo->type == ttm_bo_type_sg;

-	vmw_be = kzalloc(sizeof(*vmw_be), GFP_KERNEL);
+	vmw_be = kzalloc_obj(*vmw_be, GFP_KERNEL);
 	if (!vmw_be)
 		return NULL;

diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/intel_bo.c
index e8049a255d21..89ee5f3491c6 100644
--- a/drivers/gpu/drm/xe/display/intel_bo.c
+++ b/drivers/gpu/drm/xe/display/intel_bo.c
@@ -57,7 +57,7 @@ struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj)
 {
 	struct xe_frontbuffer *front;

-	front = kmalloc(sizeof(*front), GFP_KERNEL);
+	front = kmalloc_obj(*front, GFP_KERNEL);
 	if (!front)
 		return NULL;

diff --git a/drivers/gpu/drm/xe/display/xe_dsb_buffer.c b/drivers/gpu/drm/xe/display/xe_dsb_buffer.c
index fa0acb11eaad..1c35eb2def8c 100644
--- a/drivers/gpu/drm/xe/display/xe_dsb_buffer.c
+++ b/drivers/gpu/drm/xe/display/xe_dsb_buffer.c
@@ -43,7 +43,7 @@ struct intel_dsb_buffer *intel_dsb_buffer_create(struct drm_device *drm, size_t
 	struct xe_bo *obj;
 	int ret;

-	dsb_buf = kzalloc(sizeof(*dsb_buf), GFP_KERNEL);
+	dsb_buf = kzalloc_obj(*dsb_buf, GFP_KERNEL);
 	if (!dsb_buf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
index ed1f65f5ef4d..0266deccb31a 100644
--- a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
+++ b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
@@ -95,7 +95,7 @@ static struct intel_hdcp_gsc_context *intel_hdcp_gsc_context_alloc(struct drm_de
 	struct intel_hdcp_gsc_context *gsc_context;
 	int ret;

-	gsc_context = kzalloc(sizeof(*gsc_context), GFP_KERNEL);
+	gsc_context = kzalloc_obj(*gsc_context, GFP_KERNEL);
 	if (!gsc_context)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/display/xe_panic.c b/drivers/gpu/drm/xe/display/xe_panic.c
index e078494dc8ba..e68abd9268f2 100644
--- a/drivers/gpu/drm/xe/display/xe_panic.c
+++ b/drivers/gpu/drm/xe/display/xe_panic.c
@@ -79,7 +79,7 @@ static struct intel_panic *xe_panic_alloc(void)
 {
 	struct intel_panic *panic;

-	panic = kzalloc(sizeof(*panic), GFP_KERNEL);
+	panic = kzalloc_obj(*panic, GFP_KERNEL);

 	return panic;
 }
diff --git a/drivers/gpu/drm/xe/display/xe_stolen.c b/drivers/gpu/drm/xe/display/xe_stolen.c
index 8dc2f86ec602..fac3d60e8a31 100644
--- a/drivers/gpu/drm/xe/display/xe_stolen.c
+++ b/drivers/gpu/drm/xe/display/xe_stolen.c
@@ -86,7 +86,7 @@ static struct intel_stolen_node *xe_stolen_node_alloc(struct drm_device *drm)
 	struct xe_device *xe = to_xe_device(drm);
 	struct intel_stolen_node *node;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return NULL;

diff --git a/drivers/gpu/drm/xe/tests/xe_bo.c b/drivers/gpu/drm/xe/tests/xe_bo.c
index b7d8e45804cf..acbc7802cc5e 100644
--- a/drivers/gpu/drm/xe/tests/xe_bo.c
+++ b/drivers/gpu/drm/xe/tests/xe_bo.c
@@ -482,7 +482,7 @@ static int shrink_test_run_device(struct xe_device *xe)
 		unsigned int mem_type;
 		struct xe_ttm_tt *xe_tt;

-		link = kzalloc(sizeof(*link), GFP_KERNEL);
+		link = kzalloc_obj(*link, GFP_KERNEL);
 		if (!link) {
 			KUNIT_FAIL(test, "Unexpected link allocation failure\n");
 			failed = true;
diff --git a/drivers/gpu/drm/xe/xe_bb.c b/drivers/gpu/drm/xe/xe_bb.c
index 8b678297aaa2..18236fbe8e63 100644
--- a/drivers/gpu/drm/xe/xe_bb.c
+++ b/drivers/gpu/drm/xe/xe_bb.c
@@ -31,7 +31,7 @@ static int bb_prefetch(struct xe_gt *gt)
 struct xe_bb *xe_bb_new(struct xe_gt *gt, u32 dwords, bool usm)
 {
 	struct xe_tile *tile = gt_to_tile(gt);
-	struct xe_bb *bb = kmalloc(sizeof(*bb), GFP_KERNEL);
+	struct xe_bb *bb = kmalloc_obj(*bb, GFP_KERNEL);
 	int err;

 	if (!bb)
@@ -62,7 +62,7 @@ struct xe_bb *xe_bb_new(struct xe_gt *gt, u32 dwords, bool usm)
 struct xe_bb *xe_bb_ccs_new(struct xe_gt *gt, u32 dwords,
 			    enum xe_sriov_vf_ccs_rw_ctxs ctx_id)
 {
-	struct xe_bb *bb = kmalloc(sizeof(*bb), GFP_KERNEL);
+	struct xe_bb *bb = kmalloc_obj(*bb, GFP_KERNEL);
 	struct xe_device *xe = gt_to_xe(gt);
 	struct xe_sa_manager *bb_pool;
 	int err;
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 5dd8fcacbb80..31eacbbfe50a 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -480,7 +480,7 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo,
 	enum ttm_caching caching = ttm_cached;
 	int err;

-	xe_tt = kzalloc(sizeof(*xe_tt), GFP_KERNEL);
+	xe_tt = kzalloc_obj(*xe_tt, GFP_KERNEL);
 	if (!xe_tt)
 		return NULL;

@@ -2089,7 +2089,7 @@ static const struct drm_gem_object_funcs xe_gem_object_funcs = {
  */
 struct xe_bo *xe_bo_alloc(void)
 {
-	struct xe_bo *bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+	struct xe_bo *bo = kzalloc_obj(*bo, GFP_KERNEL);

 	if (!bo)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 82edd0466005..b58191735e31 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -998,7 +998,7 @@ static struct config_group *xe_config_make_device_group(struct config_group *gro
 	if (!match)
 		return ERR_PTR(-ENOENT);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/xe_dep_scheduler.c b/drivers/gpu/drm/xe/xe_dep_scheduler.c
index 9bd3bfd2e526..f1620711fbd2 100644
--- a/drivers/gpu/drm/xe/xe_dep_scheduler.c
+++ b/drivers/gpu/drm/xe/xe_dep_scheduler.c
@@ -86,7 +86,7 @@ xe_dep_scheduler_create(struct xe_device *xe,
 	};
 	int err;

-	dep_scheduler = kzalloc(sizeof(*dep_scheduler), GFP_KERNEL);
+	dep_scheduler = kzalloc_obj(*dep_scheduler, GFP_KERNEL);
 	if (!dep_scheduler)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 1581f4dab69d..f96d992b2ca4 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -86,7 +86,7 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
 	int ret = -ENOMEM;
 	struct task_struct *task = NULL;

-	xef = kzalloc(sizeof(*xef), GFP_KERNEL);
+	xef = kzalloc_obj(*xef, GFP_KERNEL);
 	if (!xef)
 		return ret;

diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c
index 2787bbb36141..b7284acc379c 100644
--- a/drivers/gpu/drm/xe/xe_drm_client.c
+++ b/drivers/gpu/drm/xe/xe_drm_client.c
@@ -88,7 +88,7 @@ struct xe_drm_client *xe_drm_client_alloc(void)
 {
 	struct xe_drm_client *client;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return NULL;

diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index a5c36a317a70..a9fa39bfeca7 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -238,7 +238,7 @@ int xe_eu_stall_init(struct xe_gt *gt)
 	if (!xe_eu_stall_supported_on_platform(xe))
 		return 0;

-	gt->eu_stall = kzalloc(sizeof(*gt->eu_stall), GFP_KERNEL);
+	gt->eu_stall = kzalloc_obj(*gt->eu_stall, GFP_KERNEL);
 	if (!gt->eu_stall) {
 		ret = -ENOMEM;
 		goto exit;
@@ -636,7 +636,8 @@ static int xe_eu_stall_data_buf_alloc(struct xe_eu_stall_data_stream *stream,
 	struct xe_bo *bo;
 	u32 size;

-	stream->xecore_buf = kcalloc(last_xecore, sizeof(*stream->xecore_buf), GFP_KERNEL);
+	stream->xecore_buf = kzalloc_objs(*stream->xecore_buf, last_xecore,
+					  GFP_KERNEL);
 	if (!stream->xecore_buf)
 		return -ENOMEM;

@@ -905,7 +906,7 @@ static int xe_eu_stall_stream_open_locked(struct drm_device *dev,
 		return -EBUSY;
 	}

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_exec.c b/drivers/gpu/drm/xe/xe_exec.c
index dbe6c006f1d6..45b7a7fd7a3b 100644
--- a/drivers/gpu/drm/xe/xe_exec.c
+++ b/drivers/gpu/drm/xe/xe_exec.c
@@ -162,7 +162,7 @@ int xe_exec_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 	}

 	if (args->num_syncs) {
-		syncs = kcalloc(args->num_syncs, sizeof(*syncs), GFP_KERNEL);
+		syncs = kzalloc_objs(*syncs, args->num_syncs, GFP_KERNEL);
 		if (!syncs) {
 			err = -ENOMEM;
 			goto err_exec_queue;
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index 9b6311f7fd4f..36b0bd32e2a6 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -208,7 +208,7 @@ static struct xe_exec_queue *__xe_exec_queue_alloc(struct xe_device *xe,
 	/* only kernel queues can be permanent */
 	XE_WARN_ON((flags & EXEC_QUEUE_FLAG_PERMANENT) && !(flags & EXEC_QUEUE_FLAG_KERNEL));

-	q = kzalloc(struct_size(q, lrc, width), GFP_KERNEL);
+	q = kzalloc_flex(*q, lrc, width, GFP_KERNEL);
 	if (!q)
 		return ERR_PTR(-ENOMEM);

@@ -681,7 +681,7 @@ static int xe_exec_queue_group_init(struct xe_device *xe, struct xe_exec_queue *
 	struct xe_exec_queue_group *group;
 	struct xe_bo *bo;

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_execlist.c b/drivers/gpu/drm/xe/xe_execlist.c
index 8bf330aeaec0..405069c72773 100644
--- a/drivers/gpu/drm/xe/xe_execlist.c
+++ b/drivers/gpu/drm/xe/xe_execlist.c
@@ -352,7 +352,7 @@ static int execlist_exec_queue_init(struct xe_exec_queue *q)

 	drm_info(&xe->drm, "Enabling execlist submission (GuC submission disabled)\n");

-	exl = kzalloc(sizeof(*exl), GFP_KERNEL);
+	exl = kzalloc_obj(*exl, GFP_KERNEL);
 	if (!exl)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 60665ad1415b..2bda426a6986 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -702,7 +702,7 @@ int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)
  **/
 struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
 {
-	struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_NOFS);
+	struct xe_ggtt_node *node = kzalloc_obj(*node, GFP_NOFS);

 	if (!node)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c
index f97abb02aebd..8f45a1e72e1c 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c
@@ -710,7 +710,7 @@ static int config_blob_open(struct inode *inode, struct file *file)
 	if (ret < 0)
 		return ret;

-	cbd = kzalloc(struct_size(cbd, blob, ret), GFP_KERNEL);
+	cbd = kzalloc_flex(*cbd, blob, ret, GFP_KERNEL);
 	if (!cbd)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_gt_sysfs.c b/drivers/gpu/drm/xe/xe_gt_sysfs.c
index 1448be047b4a..e2ab22643c63 100644
--- a/drivers/gpu/drm/xe/xe_gt_sysfs.c
+++ b/drivers/gpu/drm/xe/xe_gt_sysfs.c
@@ -36,7 +36,7 @@ int xe_gt_sysfs_init(struct xe_gt *gt)
 	struct kobj_gt *kg;
 	int err;

-	kg = kzalloc(sizeof(*kg), GFP_KERNEL);
+	kg = kzalloc_obj(*kg, GFP_KERNEL);
 	if (!kg)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index dfbf76037b04..d04589140b77 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -1957,7 +1957,7 @@ static struct xe_guc_ct_snapshot *guc_ct_snapshot_alloc(struct xe_guc_ct *ct, bo
 {
 	struct xe_guc_ct_snapshot *snapshot;

-	snapshot = kzalloc(sizeof(*snapshot), atomic ? GFP_ATOMIC : GFP_KERNEL);
+	snapshot = kzalloc_obj(*snapshot, atomic ? GFP_ATOMIC : GFP_KERNEL);
 	if (!snapshot)
 		return NULL;

diff --git a/drivers/gpu/drm/xe/xe_guc_log.c b/drivers/gpu/drm/xe/xe_guc_log.c
index acac66a4eca7..538d4df0f7aa 100644
--- a/drivers/gpu/drm/xe/xe_guc_log.c
+++ b/drivers/gpu/drm/xe/xe_guc_log.c
@@ -116,7 +116,7 @@ static struct xe_guc_log_snapshot *xe_guc_log_snapshot_alloc(struct xe_guc_log *
 	size_t remain;
 	int i;

-	snapshot = kzalloc(sizeof(*snapshot), atomic ? GFP_ATOMIC : GFP_KERNEL);
+	snapshot = kzalloc_obj(*snapshot, atomic ? GFP_ATOMIC : GFP_KERNEL);
 	if (!snapshot)
 		return NULL;

@@ -128,8 +128,8 @@ static struct xe_guc_log_snapshot *xe_guc_log_snapshot_alloc(struct xe_guc_log *
 	snapshot->size = xe_bo_size(log->bo);
 	snapshot->num_chunks = DIV_ROUND_UP(snapshot->size, GUC_LOG_CHUNK_SIZE);

-	snapshot->copy = kcalloc(snapshot->num_chunks, sizeof(*snapshot->copy),
-				 atomic ? GFP_ATOMIC : GFP_KERNEL);
+	snapshot->copy = kzalloc_objs(*snapshot->copy, snapshot->num_chunks,
+				      atomic ? GFP_ATOMIC : GFP_KERNEL);
 	if (!snapshot->copy)
 		goto fail_snap;

diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index 1b2f66f4425b..e15a38ff7354 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -1903,7 +1903,7 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)

 	xe_gt_assert(guc_to_gt(guc), xe_device_uc_enabled(guc_to_xe(guc)));

-	ge = kzalloc(sizeof(*ge), GFP_KERNEL);
+	ge = kzalloc_obj(*ge, GFP_KERNEL);
 	if (!ge)
 		return -ENOMEM;

@@ -2057,7 +2057,7 @@ static int guc_exec_queue_set_priority(struct xe_exec_queue *q,
 	    exec_queue_killed_or_banned_or_wedged(q))
 		return 0;

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -2075,7 +2075,7 @@ static int guc_exec_queue_set_timeslice(struct xe_exec_queue *q, u32 timeslice_u
 	    exec_queue_killed_or_banned_or_wedged(q))
 		return 0;

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -2094,7 +2094,7 @@ static int guc_exec_queue_set_preempt_timeout(struct xe_exec_queue *q,
 	    exec_queue_killed_or_banned_or_wedged(q))
 		return 0;

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -2115,7 +2115,7 @@ static int guc_exec_queue_set_multi_queue_priority(struct xe_exec_queue *q,
 	    exec_queue_killed_or_banned_or_wedged(q))
 		return 0;

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -3128,7 +3128,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
 	struct xe_guc_submit_exec_queue_snapshot *snapshot;
 	int i;

-	snapshot = kzalloc(sizeof(*snapshot), GFP_ATOMIC);
+	snapshot = kzalloc_obj(*snapshot, GFP_ATOMIC);

 	if (!snapshot)
 		return NULL;
@@ -3144,8 +3144,8 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
 	snapshot->sched_props.preempt_timeout_us =
 		q->sched_props.preempt_timeout_us;

-	snapshot->lrc = kmalloc_array(q->width, sizeof(struct xe_lrc_snapshot *),
-				      GFP_ATOMIC);
+	snapshot->lrc = kmalloc_objs(struct xe_lrc_snapshot *, q->width,
+				     GFP_ATOMIC);

 	if (snapshot->lrc) {
 		for (i = 0; i < q->width; ++i) {
diff --git a/drivers/gpu/drm/xe/xe_heci_gsc.c b/drivers/gpu/drm/xe/xe_heci_gsc.c
index c1f15313f92e..1e0eeb77427c 100644
--- a/drivers/gpu/drm/xe/xe_heci_gsc.c
+++ b/drivers/gpu/drm/xe/xe_heci_gsc.c
@@ -131,7 +131,7 @@ static int heci_gsc_add_device(struct xe_device *xe, const struct heci_gsc_def *
 	struct mei_aux_device *adev;
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return -ENOMEM;
 	adev->irq = heci_gsc->irq;
diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
index 4d3ee5226e3a..688d645e0e73 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine.c
+++ b/drivers/gpu/drm/xe/xe_hw_engine.c
@@ -927,7 +927,7 @@ xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
 	if (!xe_hw_engine_is_valid(hwe))
 		return NULL;

-	snapshot = kzalloc(sizeof(*snapshot), GFP_ATOMIC);
+	snapshot = kzalloc_obj(*snapshot, GFP_ATOMIC);

 	if (!snapshot)
 		return NULL;
diff --git a/drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c b/drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c
index 3c65becb39ad..4425a1ce140f 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c
+++ b/drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c
@@ -549,7 +549,7 @@ kobj_xe_hw_engine_class(struct xe_device *xe, struct kobject *parent, const char
 	struct kobj_eclass *keclass;
 	int err = 0;

-	keclass = kzalloc(sizeof(*keclass), GFP_KERNEL);
+	keclass = kzalloc_obj(*keclass, GFP_KERNEL);
 	if (!keclass)
 		return NULL;

@@ -582,7 +582,7 @@ static int xe_add_hw_engine_class_defaults(struct xe_device *xe,
 	struct kobject *kobj;
 	int err = 0;

-	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
+	kobj = kzalloc_obj(*kobj, GFP_KERNEL);
 	if (!kobj)
 		return -ENOMEM;

@@ -629,7 +629,7 @@ int xe_hw_engine_class_sysfs_init(struct xe_gt *gt)
 	u16 class_mask = 0;
 	int err = 0;

-	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
+	kobj = kzalloc_obj(*kobj, GFP_KERNEL);
 	if (!kobj)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_lmtt.c b/drivers/gpu/drm/xe/xe_lmtt.c
index 2077e1ef8b43..0cff46a0f1f6 100644
--- a/drivers/gpu/drm/xe/xe_lmtt.c
+++ b/drivers/gpu/drm/xe/xe_lmtt.c
@@ -64,7 +64,7 @@ static struct xe_lmtt_pt *lmtt_pt_alloc(struct xe_lmtt *lmtt, unsigned int level
 	struct xe_bo *bo;
 	int err;

-	pt = kzalloc(struct_size(pt, entries, num_entries), GFP_KERNEL);
+	pt = kzalloc_flex(*pt, entries, num_entries, GFP_KERNEL);
 	if (!pt) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index 3db7968aa5e2..4b2091d552fd 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -1616,7 +1616,7 @@ struct xe_lrc *xe_lrc_create(struct xe_hw_engine *hwe, struct xe_vm *vm,
 	struct xe_lrc *lrc;
 	int err;

-	lrc = kzalloc(sizeof(*lrc), GFP_KERNEL);
+	lrc = kzalloc_obj(*lrc, GFP_KERNEL);
 	if (!lrc)
 		return ERR_PTR(-ENOMEM);

@@ -2269,7 +2269,7 @@ u32 *xe_lrc_emit_hwe_state_instructions(struct xe_exec_queue *q, u32 *cs)

 struct xe_lrc_snapshot *xe_lrc_snapshot_capture(struct xe_lrc *lrc)
 {
-	struct xe_lrc_snapshot *snapshot = kmalloc(sizeof(*snapshot), GFP_NOWAIT);
+	struct xe_lrc_snapshot *snapshot = kmalloc_obj(*snapshot, GFP_NOWAIT);

 	if (!snapshot)
 		return NULL;
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index 078a9bc2821d..9d463a48a4d4 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -2303,7 +2303,7 @@ static struct drm_pagemap_addr *xe_migrate_dma_map(struct xe_device *xe,
 	struct drm_pagemap_addr *pagemap_addr;
 	unsigned long i, npages = DIV_ROUND_UP(len, PAGE_SIZE);

-	pagemap_addr = kcalloc(npages, sizeof(*pagemap_addr), GFP_KERNEL);
+	pagemap_addr = kzalloc_objs(*pagemap_addr, npages, GFP_KERNEL);
 	if (!pagemap_addr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_gem.c
index 9a97c4387e4f..c4fb55d2dcce 100644
--- a/drivers/gpu/drm/xe/xe_mmio_gem.c
+++ b/drivers/gpu/drm/xe/xe_mmio_gem.c
@@ -78,7 +78,7 @@ struct xe_mmio_gem *xe_mmio_gem_create(struct xe_device *xe, struct drm_file *fi
 	if ((phys_addr % PAGE_SIZE != 0) || (size % PAGE_SIZE != 0))
 		return ERR_PTR(-EINVAL);

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/xe_nvm.c b/drivers/gpu/drm/xe/xe_nvm.c
index 6f9dd519371c..fb5eb9099921 100644
--- a/drivers/gpu/drm/xe/xe_nvm.c
+++ b/drivers/gpu/drm/xe/xe_nvm.c
@@ -133,7 +133,7 @@ int xe_nvm_init(struct xe_device *xe)
 	if (WARN_ON(xe->nvm))
 		return -EFAULT;

-	xe->nvm = kzalloc(sizeof(*nvm), GFP_KERNEL);
+	xe->nvm = kzalloc_obj(*nvm, GFP_KERNEL);
 	if (!xe->nvm)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index abf87fe0b345..283cd72ef40b 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -905,7 +905,7 @@ __xe_oa_alloc_config_buffer(struct xe_oa_stream *stream, struct xe_oa_config *oa
 	size_t config_length;
 	struct xe_bb *bb;

-	oa_bo = kzalloc(sizeof(*oa_bo), GFP_KERNEL);
+	oa_bo = kzalloc_obj(*oa_bo, GFP_KERNEL);
 	if (!oa_bo)
 		return ERR_PTR(-ENOMEM);

@@ -997,7 +997,7 @@ static int xe_oa_emit_oa_config(struct xe_oa_stream *stream, struct xe_oa_config
 	int i, err, num_signal = 0;
 	struct dma_fence *fence;

-	ofence = kzalloc(sizeof(*ofence), GFP_KERNEL);
+	ofence = kzalloc_obj(*ofence, GFP_KERNEL);
 	if (!ofence) {
 		err = -ENOMEM;
 		goto exit;
@@ -1408,7 +1408,8 @@ static int xe_oa_parse_syncs(struct xe_oa *oa,
 	}

 	if (param->num_syncs) {
-		param->syncs = kcalloc(param->num_syncs, sizeof(*param->syncs), GFP_KERNEL);
+		param->syncs = kzalloc_objs(*param->syncs, param->num_syncs,
+					    GFP_KERNEL);
 		if (!param->syncs) {
 			ret = -ENOMEM;
 			goto exit;
@@ -1852,7 +1853,7 @@ static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
 	if (ret)
 		goto exit;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream) {
 		ret = -ENOMEM;
 		goto err_syncobj;
@@ -2259,7 +2260,7 @@ xe_oa_alloc_regs(struct xe_oa *oa, bool (*is_valid)(struct xe_oa *oa, u32 addr),
 	int err;
 	u32 i;

-	oa_regs = kmalloc_array(n_regs, sizeof(*oa_regs), GFP_KERNEL);
+	oa_regs = kmalloc_objs(*oa_regs, n_regs, GFP_KERNEL);
 	if (!oa_regs)
 		return ERR_PTR(-ENOMEM);

@@ -2361,7 +2362,7 @@ int xe_oa_add_config_ioctl(struct drm_device *dev, u64 data, struct drm_file *fi
 	    XE_IOCTL_DBG(oa->xe, !arg->n_regs))
 		return -EINVAL;

-	oa_config = kzalloc(sizeof(*oa_config), GFP_KERNEL);
+	oa_config = kzalloc_obj(*oa_config, GFP_KERNEL);
 	if (!oa_config)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_pmu.c b/drivers/gpu/drm/xe/xe_pmu.c
index 0b20059dd7b3..ac8303509d48 100644
--- a/drivers/gpu/drm/xe/xe_pmu.c
+++ b/drivers/gpu/drm/xe/xe_pmu.c
@@ -142,7 +142,7 @@ static bool event_gt_forcewake(struct perf_event *event)

 	gt = xe_device_get_gt(xe, config_to_gt_id(config));

-	fw_ref = kzalloc(sizeof(*fw_ref), GFP_KERNEL);
+	fw_ref = kzalloc_obj(*fw_ref, GFP_KERNEL);
 	if (!fw_ref)
 		return false;

diff --git a/drivers/gpu/drm/xe/xe_preempt_fence.c b/drivers/gpu/drm/xe/xe_preempt_fence.c
index 7f587ca3947d..85c792ee0818 100644
--- a/drivers/gpu/drm/xe/xe_preempt_fence.c
+++ b/drivers/gpu/drm/xe/xe_preempt_fence.c
@@ -101,7 +101,7 @@ struct xe_preempt_fence *xe_preempt_fence_alloc(void)
 {
 	struct xe_preempt_fence *pfence;

-	pfence = kmalloc(sizeof(*pfence), GFP_KERNEL);
+	pfence = kmalloc_obj(*pfence, GFP_KERNEL);
 	if (!pfence)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index 6703a7049227..5d3a84baa80b 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -109,11 +109,11 @@ struct xe_pt *xe_pt_create(struct xe_vm *vm, struct xe_tile *tile,
 	int err;

 	if (level) {
-		struct xe_pt_dir *dir = kzalloc(sizeof(*dir), GFP_KERNEL);
+		struct xe_pt_dir *dir = kzalloc_obj(*dir, GFP_KERNEL);

 		pt = (dir) ? &dir->pt : NULL;
 	} else {
-		pt = kzalloc(sizeof(*pt), GFP_KERNEL);
+		pt = kzalloc_obj(*pt, GFP_KERNEL);
 	}
 	if (!pt)
 		return ERR_PTR(-ENOMEM);
@@ -368,9 +368,8 @@ xe_pt_new_shared(struct xe_walk_update *wupd, struct xe_pt *parent,
 	entry->pt_bo->update_index = -1;

 	if (alloc_entries) {
-		entry->pt_entries = kmalloc_array(XE_PDES,
-						  sizeof(*entry->pt_entries),
-						  GFP_KERNEL);
+		entry->pt_entries = kmalloc_objs(*entry->pt_entries, XE_PDES,
+						 GFP_KERNEL);
 		if (!entry->pt_entries)
 			return -ENOMEM;
 	}
@@ -2574,7 +2573,7 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
 		}
 	}

-	rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
+	rfence = kzalloc_obj(*rfence, GFP_KERNEL);
 	if (!rfence) {
 		err = -ENOMEM;
 		goto free_ijob;
diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
index d3e13ea33123..80532bbce727 100644
--- a/drivers/gpu/drm/xe/xe_reg_sr.c
+++ b/drivers/gpu/drm/xe/xe_reg_sr.c
@@ -89,7 +89,7 @@ int xe_reg_sr_add(struct xe_reg_sr *sr,
 		return 0;
 	}

-	pentry = kmalloc(sizeof(*pentry), GFP_KERNEL);
+	pentry = kmalloc_obj(*pentry, GFP_KERNEL);
 	if (!pentry) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/xe/xe_shrinker.c b/drivers/gpu/drm/xe/xe_shrinker.c
index 90244fe59b59..f798404ac337 100644
--- a/drivers/gpu/drm/xe/xe_shrinker.c
+++ b/drivers/gpu/drm/xe/xe_shrinker.c
@@ -282,7 +282,7 @@ static void xe_shrinker_fini(struct drm_device *drm, void *arg)
  */
 int xe_shrinker_create(struct xe_device *xe)
 {
-	struct xe_shrinker *shrinker = kzalloc(sizeof(*shrinker), GFP_KERNEL);
+	struct xe_shrinker *shrinker = kzalloc_obj(*shrinker, GFP_KERNEL);

 	if (!shrinker)
 		return -ENOMEM;
diff --git a/drivers/gpu/drm/xe/xe_sriov_packet.c b/drivers/gpu/drm/xe/xe_sriov_packet.c
index 7a4c3de662e5..26905bc61979 100644
--- a/drivers/gpu/drm/xe/xe_sriov_packet.c
+++ b/drivers/gpu/drm/xe/xe_sriov_packet.c
@@ -89,7 +89,7 @@ struct xe_sriov_packet *xe_sriov_packet_alloc(struct xe_device *xe)
 {
 	struct xe_sriov_packet *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;

diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_sysfs.c b/drivers/gpu/drm/xe/xe_sriov_pf_sysfs.c
index 82a1055985ba..457676713402 100644
--- a/drivers/gpu/drm/xe/xe_sriov_pf_sysfs.c
+++ b/drivers/gpu/drm/xe/xe_sriov_pf_sysfs.c
@@ -364,7 +364,7 @@ static struct kobject *create_xe_sriov_kobj(struct xe_device *xe, unsigned int v

 	xe_sriov_pf_assert_vfid(xe, vfid);

-	vkobj = kzalloc(sizeof(*vkobj), GFP_KERNEL);
+	vkobj = kzalloc_obj(*vkobj, GFP_KERNEL);
 	if (!vkobj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
index 78f4b2c60670..ead9a61b1cdb 100644
--- a/drivers/gpu/drm/xe/xe_svm.c
+++ b/drivers/gpu/drm/xe/xe_svm.c
@@ -109,7 +109,7 @@ xe_svm_range_alloc(struct drm_gpusvm *gpusvm)
 {
 	struct xe_svm_range *range;

-	range = kzalloc(sizeof(*range), GFP_KERNEL);
+	range = kzalloc_obj(*range, GFP_KERNEL);
 	if (!range)
 		return NULL;

@@ -1748,7 +1748,7 @@ static struct xe_pagemap *xe_pagemap_create(struct xe_device *xe, struct xe_vram
 	void *addr;
 	int err;

-	xpagemap = kzalloc(sizeof(*xpagemap), GFP_KERNEL);
+	xpagemap = kzalloc_obj(*xpagemap, GFP_KERNEL);
 	if (!xpagemap)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/xe_sync.c b/drivers/gpu/drm/xe/xe_sync.c
index c8fdcdbd6ae7..69a723a8c68e 100644
--- a/drivers/gpu/drm/xe/xe_sync.c
+++ b/drivers/gpu/drm/xe/xe_sync.c
@@ -59,7 +59,7 @@ static struct xe_user_fence *user_fence_create(struct xe_device *xe, u64 addr,
 	if (get_user(prefetch_val, ptr))
 		return ERR_PTR(-EFAULT);

-	ufence = kzalloc(sizeof(*ufence), GFP_KERNEL);
+	ufence = kzalloc_obj(*ufence, GFP_KERNEL);
 	if (!ufence)
 		return ERR_PTR(-ENOMEM);

@@ -343,8 +343,7 @@ xe_sync_in_fence_get(struct xe_sync_entry *sync, int num_sync,
 				num_fence++;
 		}

-		fences = kmalloc_array(num_fence, sizeof(*fences),
-				       GFP_KERNEL);
+		fences = kmalloc_objs(*fences, num_fence, GFP_KERNEL);
 		if (!fences)
 			return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xe/xe_tile_sysfs.c b/drivers/gpu/drm/xe/xe_tile_sysfs.c
index 9e1236a9ec67..39f04b309e73 100644
--- a/drivers/gpu/drm/xe/xe_tile_sysfs.c
+++ b/drivers/gpu/drm/xe/xe_tile_sysfs.c
@@ -36,7 +36,7 @@ int xe_tile_sysfs_init(struct xe_tile *tile)
 	struct kobj_tile *kt;
 	int err;

-	kt = kzalloc(sizeof(*kt), GFP_KERNEL);
+	kt = kzalloc_obj(*kt, GFP_KERNEL);
 	if (!kt)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_tlb_inval_job.c b/drivers/gpu/drm/xe/xe_tlb_inval_job.c
index 01c413a2537e..0560605588db 100644
--- a/drivers/gpu/drm/xe/xe_tlb_inval_job.c
+++ b/drivers/gpu/drm/xe/xe_tlb_inval_job.c
@@ -108,7 +108,7 @@ xe_tlb_inval_job_create(struct xe_exec_queue *q, struct xe_tlb_inval *tlb_inval,
 	xe_assert(vm->xe, type == XE_EXEC_QUEUE_TLB_INVAL_MEDIA_GT ||
 		  type == XE_EXEC_QUEUE_TLB_INVAL_PRIMARY_GT);

-	job = kmalloc(sizeof(*job), GFP_KERNEL);
+	job = kmalloc_obj(*job, GFP_KERNEL);
 	if (!job)
 		return ERR_PTR(-ENOMEM);

@@ -125,7 +125,7 @@ xe_tlb_inval_job_create(struct xe_exec_queue *q, struct xe_tlb_inval *tlb_inval,
 	xe_exec_queue_get(q);	/* Pairs with put in xe_tlb_inval_job_destroy */
 	xe_vm_get(vm);		/* Pairs with put in xe_tlb_inval_job_destroy */

-	ifence = kmalloc(sizeof(*ifence), GFP_KERNEL);
+	ifence = kmalloc_obj(*ifence, GFP_KERNEL);
 	if (!ifence) {
 		err = -ENOMEM;
 		goto err_job;
diff --git a/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c b/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c
index 99fb7e99eb7f..18d58ad574cf 100644
--- a/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c
@@ -33,7 +33,7 @@ static int xe_ttm_sys_mgr_new(struct ttm_resource_manager *man,
 	struct xe_ttm_sys_node *node;
 	int r;

-	node = kzalloc(struct_size(node, base.mm_nodes, 1), GFP_KERNEL);
+	node = kzalloc_flex(*node, base.mm_nodes, 1, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 6553a19f7cf2..93ad02ec76eb 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -64,7 +64,7 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
 	if (tbo->base.size >> PAGE_SHIFT > (lpfn - place->fpfn))
 		return -E2BIG; /* don't trigger eviction for the impossible */

-	vres = kzalloc(sizeof(*vres), GFP_KERNEL);
+	vres = kzalloc_obj(*vres, GFP_KERNEL);
 	if (!vres)
 		return -ENOMEM;

@@ -371,7 +371,7 @@ int xe_ttm_vram_mgr_alloc_sgt(struct xe_device *xe,
 	if (vres->used_visible_size < res->size)
 		return -EOPNOTSUPP;

-	*sgt = kmalloc(sizeof(**sgt), GFP_KERNEL);
+	*sgt = kmalloc_obj(**sgt, GFP_KERNEL);
 	if (!*sgt)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index dd6d99d7fca8..b53d76dc62b2 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -586,9 +586,9 @@ static int xe_vma_ops_alloc(struct xe_vma_ops *vops, bool array_of_binds)
 			continue;

 		vops->pt_update_ops[i].ops =
-			kmalloc_array(vops->pt_update_ops[i].num_ops,
-				      sizeof(*vops->pt_update_ops[i].ops),
-				      GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
+			kmalloc_objs(*vops->pt_update_ops[i].ops,
+				     vops->pt_update_ops[i].num_ops,
+				     GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
 		if (!vops->pt_update_ops[i].ops)
 			return array_of_binds ? -ENOBUFS : -ENOMEM;
 	}
@@ -667,7 +667,7 @@ static int xe_vm_ops_add_rebind(struct xe_vma_ops *vops, struct xe_vma *vma,
 {
 	struct xe_vma_op *op;

-	op = kzalloc(sizeof(*op), GFP_KERNEL);
+	op = kzalloc_obj(*op, GFP_KERNEL);
 	if (!op)
 		return -ENOMEM;

@@ -803,7 +803,7 @@ xe_vm_ops_add_range_rebind(struct xe_vma_ops *vops,
 {
 	struct xe_vma_op *op;

-	op = kzalloc(sizeof(*op), GFP_KERNEL);
+	op = kzalloc_obj(*op, GFP_KERNEL);
 	if (!op)
 		return -ENOMEM;

@@ -889,7 +889,7 @@ xe_vm_ops_add_range_unbind(struct xe_vma_ops *vops,
 {
 	struct xe_vma_op *op;

-	op = kzalloc(sizeof(*op), GFP_KERNEL);
+	op = kzalloc_obj(*op, GFP_KERNEL);
 	if (!op)
 		return -ENOMEM;

@@ -1008,14 +1008,14 @@ static struct xe_vma *xe_vma_create(struct xe_vm *vm,
 	 * matches what was allocated.
 	 */
 	if (!bo && !is_null && !is_cpu_addr_mirror) {
-		struct xe_userptr_vma *uvma = kzalloc(sizeof(*uvma), GFP_KERNEL);
+		struct xe_userptr_vma *uvma = kzalloc_obj(*uvma, GFP_KERNEL);

 		if (!uvma)
 			return ERR_PTR(-ENOMEM);

 		vma = &uvma->vma;
 	} else {
-		vma = kzalloc(sizeof(*vma), GFP_KERNEL);
+		vma = kzalloc_obj(*vma, GFP_KERNEL);
 		if (!vma)
 			return ERR_PTR(-ENOMEM);

@@ -1235,7 +1235,7 @@ static struct drm_gpuva_op *xe_vm_op_alloc(void)
 {
 	struct xe_vma_op *op;

-	op = kzalloc(sizeof(*op), GFP_KERNEL);
+	op = kzalloc_obj(*op, GFP_KERNEL);

 	if (unlikely(!op))
 		return NULL;
@@ -3161,7 +3161,7 @@ static struct dma_fence *ops_execute(struct xe_vm *vm,
 				++n_fence;
 	}

-	fences = kmalloc_array(n_fence, sizeof(*fences), GFP_KERNEL);
+	fences = kmalloc_objs(*fences, n_fence, GFP_KERNEL);
 	if (!fences) {
 		fence = ERR_PTR(-ENOMEM);
 		goto err_trace;
@@ -3373,10 +3373,9 @@ static int vm_bind_ioctl_check_args(struct xe_device *xe, struct xe_vm *vm,
 		u64 __user *bind_user =
 			u64_to_user_ptr(args->vector_of_binds);

-		*bind_ops = kvmalloc_array(args->num_binds,
-					   sizeof(struct drm_xe_vm_bind_op),
-					   GFP_KERNEL | __GFP_ACCOUNT |
-					   __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
+		*bind_ops = kvmalloc_objs(struct drm_xe_vm_bind_op,
+					  args->num_binds,
+					  GFP_KERNEL | __GFP_ACCOUNT | __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
 		if (!*bind_ops)
 			return args->num_binds > 1 ? -ENOBUFS : -ENOMEM;

@@ -3663,17 +3662,15 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 	}

 	if (args->num_binds) {
-		bos = kvcalloc(args->num_binds, sizeof(*bos),
-			       GFP_KERNEL | __GFP_ACCOUNT |
-			       __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
+		bos = kvzalloc_objs(*bos, args->num_binds,
+				    GFP_KERNEL | __GFP_ACCOUNT | __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
 		if (!bos) {
 			err = -ENOMEM;
 			goto release_vm_lock;
 		}

-		ops = kvcalloc(args->num_binds, sizeof(*ops),
-			       GFP_KERNEL | __GFP_ACCOUNT |
-			       __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
+		ops = kvzalloc_objs(*ops, args->num_binds,
+				    GFP_KERNEL | __GFP_ACCOUNT | __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
 		if (!ops) {
 			err = -ENOMEM;
 			goto free_bos;
@@ -3708,7 +3705,7 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 	}

 	if (args->num_syncs) {
-		syncs = kcalloc(args->num_syncs, sizeof(*syncs), GFP_KERNEL);
+		syncs = kzalloc_objs(*syncs, args->num_syncs, GFP_KERNEL);
 		if (!syncs) {
 			err = -ENOMEM;
 			goto put_obj;
diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.c b/drivers/gpu/drm/xe/xe_vm_madvise.c
index 52147f5eaaa0..c5605e9d9090 100644
--- a/drivers/gpu/drm/xe/xe_vm_madvise.c
+++ b/drivers/gpu/drm/xe/xe_vm_madvise.c
@@ -47,7 +47,8 @@ static int get_vmas(struct xe_vm *vm, struct xe_vmas_in_madvise_range *madvise_r
 	lockdep_assert_held(&vm->lock);

 	madvise_range->num_vmas = 0;
-	madvise_range->vmas = kmalloc_array(max_vmas, sizeof(*madvise_range->vmas), GFP_KERNEL);
+	madvise_range->vmas = kmalloc_objs(*madvise_range->vmas, max_vmas,
+					   GFP_KERNEL);
 	if (!madvise_range->vmas)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
index 4fa45dbe1dcb..79dce72c9bc4 100644
--- a/drivers/gpu/drm/xen/xen_drm_front.c
+++ b/drivers/gpu/drm/xen/xen_drm_front.c
@@ -171,7 +171,7 @@ int xen_drm_front_dbuf_create(struct xen_drm_front_info *front_info,
 	if (unlikely(!evtchnl))
 		return -EIO;

-	dbuf = kzalloc(sizeof(*dbuf), GFP_KERNEL);
+	dbuf = kzalloc_obj(*dbuf, GFP_KERNEL);
 	if (!dbuf)
 		return -ENOMEM;

@@ -496,7 +496,7 @@ static int xen_drm_drv_init(struct xen_drm_front_info *front_info)

 	DRM_INFO("Creating %s\n", xen_drm_driver.desc);

-	drm_info = kzalloc(sizeof(*drm_info), GFP_KERNEL);
+	drm_info = kzalloc_obj(*drm_info, GFP_KERNEL);
 	if (!drm_info) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/xen/xen_drm_front_evtchnl.c b/drivers/gpu/drm/xen/xen_drm_front_evtchnl.c
index e52afd792346..88cc85395791 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_evtchnl.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_evtchnl.c
@@ -212,9 +212,8 @@ int xen_drm_front_evtchnl_create_all(struct xen_drm_front_info *front_info)
 	cfg = &front_info->cfg;

 	front_info->evt_pairs =
-			kcalloc(cfg->num_connectors,
-				sizeof(struct xen_drm_front_evtchnl_pair),
-				GFP_KERNEL);
+			kzalloc_objs(struct xen_drm_front_evtchnl_pair,
+				     cfg->num_connectors, GFP_KERNEL);
 	if (!front_info->evt_pairs) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.c b/drivers/gpu/drm/xen/xen_drm_front_gem.c
index 386ae7441093..afad19fe01d2 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_gem.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_gem.c
@@ -47,8 +47,8 @@ static int gem_alloc_pages_array(struct xen_gem_object *xen_obj,
 				 size_t buf_size)
 {
 	xen_obj->num_pages = DIV_ROUND_UP(buf_size, PAGE_SIZE);
-	xen_obj->pages = kvmalloc_array(xen_obj->num_pages,
-					sizeof(struct page *), GFP_KERNEL);
+	xen_obj->pages = kvmalloc_objs(struct page *, xen_obj->num_pages,
+				       GFP_KERNEL);
 	return !xen_obj->pages ? -ENOMEM : 0;
 }

@@ -118,7 +118,7 @@ static struct xen_gem_object *gem_create_obj(struct drm_device *dev,
 	struct xen_gem_object *xen_obj;
 	int ret;

-	xen_obj = kzalloc(sizeof(*xen_obj), GFP_KERNEL);
+	xen_obj = kzalloc_obj(*xen_obj, GFP_KERNEL);
 	if (!xen_obj)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/drm/xlnx/zynqmp_disp.c b/drivers/gpu/drm/xlnx/zynqmp_disp.c
index 80d1e499a18d..db1053161e35 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_disp.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_disp.c
@@ -1360,7 +1360,7 @@ int zynqmp_disp_probe(struct zynqmp_dpsub *dpsub)
 	struct zynqmp_disp *disp;
 	int ret;

-	disp = kzalloc(sizeof(*disp), GFP_KERNEL);
+	disp = kzalloc_obj(*disp, GFP_KERNEL);
 	if (!disp)
 		return -ENOMEM;

diff --git a/drivers/gpu/drm/xlnx/zynqmp_dp.c b/drivers/gpu/drm/xlnx/zynqmp_dp.c
index 34ddbf98e81d..4f21dc062170 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_dp.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_dp.c
@@ -1739,7 +1739,7 @@ static const struct drm_edid *zynqmp_dp_bridge_edid_read(struct drm_bridge *brid

 static u32 *zynqmp_dp_bridge_default_bus_fmts(unsigned int *num_input_fmts)
 {
-	u32 *formats = kzalloc(sizeof(*formats), GFP_KERNEL);
+	u32 *formats = kzalloc_obj(*formats, GFP_KERNEL);

 	if (formats)
 		*formats = MEDIA_BUS_FMT_FIXED;
diff --git a/drivers/gpu/drm/xlnx/zynqmp_dpsub.c b/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
index 2764c4b17c5e..137d3e85e0fb 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
@@ -189,7 +189,7 @@ static int zynqmp_dpsub_probe(struct platform_device *pdev)
 	int ret;

 	/* Allocate private data. */
-	dpsub = kzalloc(sizeof(*dpsub), GFP_KERNEL);
+	dpsub = kzalloc_obj(*dpsub, GFP_KERNEL);
 	if (!dpsub)
 		return -ENOMEM;

diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c
index e2673bc7cb31..b0c12d63d7b4 100644
--- a/drivers/gpu/host1x/bus.c
+++ b/drivers/gpu/host1x/bus.c
@@ -43,7 +43,7 @@ static int host1x_subdev_add(struct host1x_device *device,
 	struct host1x_subdev *subdev;
 	int err;

-	subdev = kzalloc(sizeof(*subdev), GFP_KERNEL);
+	subdev = kzalloc_obj(*subdev, GFP_KERNEL);
 	if (!subdev)
 		return -ENOMEM;

@@ -459,7 +459,7 @@ static int host1x_device_add(struct host1x *host1x,
 	struct host1x_device *device;
 	int err;

-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		return -ENOMEM;

diff --git a/drivers/gpu/host1x/channel.c b/drivers/gpu/host1x/channel.c
index 08077afe4cde..b2d434746167 100644
--- a/drivers/gpu/host1x/channel.c
+++ b/drivers/gpu/host1x/channel.c
@@ -16,8 +16,8 @@
 int host1x_channel_list_init(struct host1x_channel_list *chlist,
 			     unsigned int num_channels)
 {
-	chlist->channels = kcalloc(num_channels, sizeof(struct host1x_channel),
-				   GFP_KERNEL);
+	chlist->channels = kzalloc_objs(struct host1x_channel, num_channels,
+					GFP_KERNEL);
 	if (!chlist->channels)
 		return -ENOMEM;

diff --git a/drivers/gpu/host1x/context.c b/drivers/gpu/host1x/context.c
index a6f6779662a3..8d7719dab510 100644
--- a/drivers/gpu/host1x/context.c
+++ b/drivers/gpu/host1x/context.c
@@ -35,7 +35,7 @@ int host1x_memory_context_list_init(struct host1x *host1x)
 		return 0;

 	cdl->len = err / 4;
-	cdl->devs = kcalloc(cdl->len, sizeof(*cdl->devs), GFP_KERNEL);
+	cdl->devs = kzalloc_objs(*cdl->devs, cdl->len, GFP_KERNEL);
 	if (!cdl->devs)
 		return -ENOMEM;

diff --git a/drivers/gpu/host1x/fence.c b/drivers/gpu/host1x/fence.c
index 139ad1afd935..d8f3aade9b2e 100644
--- a/drivers/gpu/host1x/fence.c
+++ b/drivers/gpu/host1x/fence.c
@@ -127,7 +127,7 @@ struct dma_fence *host1x_fence_create(struct host1x_syncpt *sp, u32 threshold,
 {
 	struct host1x_syncpt_fence *fence;

-	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kzalloc_obj(*fence, GFP_KERNEL);
 	if (!fence)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/gpu/host1x/mipi.c b/drivers/gpu/host1x/mipi.c
index e51b43dd15a3..90108d695f63 100644
--- a/drivers/gpu/host1x/mipi.c
+++ b/drivers/gpu/host1x/mipi.c
@@ -219,7 +219,7 @@ struct tegra_mipi_device *tegra_mipi_request(struct device *device,
 	if (err < 0)
 		return ERR_PTR(err);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c
index 333f36e0a715..fa3a8f1f7aa7 100644
--- a/drivers/gpu/ipu-v3/ipu-common.c
+++ b/drivers/gpu/ipu-v3/ipu-common.c
@@ -183,7 +183,7 @@ struct ipuv3_channel *ipu_idmac_get(struct ipu_soc *ipu, unsigned num)
 		}
 	}

-	channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kzalloc_obj(*channel, GFP_KERNEL);
 	if (!channel) {
 		channel = ERR_PTR(-ENOMEM);
 		goto out;
diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c
index 3c33b4defab5..e994abcd7a0d 100644
--- a/drivers/gpu/ipu-v3/ipu-image-convert.c
+++ b/drivers/gpu/ipu-v3/ipu-image-convert.c
@@ -2082,7 +2082,7 @@ ipu_image_convert_prepare(struct ipu_soc *ipu, enum ipu_ic_task ic_task,

 	chan = &priv->chan[ic_task];

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

@@ -2402,7 +2402,7 @@ ipu_image_convert(struct ipu_soc *ipu, enum ipu_ic_task ic_task,
 	if (IS_ERR(ctx))
 		return ERR_CAST(ctx);

-	run = kzalloc(sizeof(*run), GFP_KERNEL);
+	run = kzalloc_obj(*run, GFP_KERNEL);
 	if (!run) {
 		ipu_image_convert_unprepare(ctx);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index 68e45a26e85f..1d7d52245197 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -297,7 +297,7 @@ static int register_client(struct pci_dev *pdev,
 {
 	struct vga_switcheroo_client *client;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

diff --git a/drivers/greybus/bundle.c b/drivers/greybus/bundle.c
index a6e1cca06172..f8aee6da89a4 100644
--- a/drivers/greybus/bundle.c
+++ b/drivers/greybus/bundle.c
@@ -197,7 +197,7 @@ struct gb_bundle *gb_bundle_create(struct gb_interface *intf, u8 bundle_id,
 		return NULL;
 	}

-	bundle = kzalloc(sizeof(*bundle), GFP_KERNEL);
+	bundle = kzalloc_obj(*bundle, GFP_KERNEL);
 	if (!bundle)
 		return NULL;

diff --git a/drivers/greybus/connection.c b/drivers/greybus/connection.c
index 9c88861986c8..91fd5cbb716d 100644
--- a/drivers/greybus/connection.c
+++ b/drivers/greybus/connection.c
@@ -165,7 +165,7 @@ _gb_connection_create(struct gb_host_device *hd, int hd_cport_id,
 	}
 	hd_cport_id = ret;

-	connection = kzalloc(sizeof(*connection), GFP_KERNEL);
+	connection = kzalloc_obj(*connection, GFP_KERNEL);
 	if (!connection) {
 		ret = -ENOMEM;
 		goto err_hd_cport_release;
diff --git a/drivers/greybus/control.c b/drivers/greybus/control.c
index b5cf49d09df2..8e5c8288bf5a 100644
--- a/drivers/greybus/control.c
+++ b/drivers/greybus/control.c
@@ -446,7 +446,7 @@ struct gb_control *gb_control_create(struct gb_interface *intf)
 	struct gb_connection *connection;
 	struct gb_control *control;

-	control = kzalloc(sizeof(*control), GFP_KERNEL);
+	control = kzalloc_obj(*control, GFP_KERNEL);
 	if (!control)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/greybus/es2.c b/drivers/greybus/es2.c
index 7630a36ecf81..5acb238dde17 100644
--- a/drivers/greybus/es2.c
+++ b/drivers/greybus/es2.c
@@ -547,7 +547,7 @@ static int cport_enable(struct gb_host_device *hd, u16 cport_id,
 	u32 connection_flags;
 	int ret;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -883,7 +883,7 @@ static struct arpc *arpc_alloc(void *payload, u16 size, u8 type)
 	if (size + sizeof(*rpc->req) > ARPC_OUT_SIZE_MAX)
 		return NULL;

-	rpc = kzalloc(sizeof(*rpc), GFP_KERNEL);
+	rpc = kzalloc_obj(*rpc, GFP_KERNEL);
 	if (!rpc)
 		return NULL;

@@ -892,7 +892,7 @@ static struct arpc *arpc_alloc(void *payload, u16 size, u8 type)
 	if (!rpc->req)
 		goto err_free_rpc;

-	rpc->resp = kzalloc(sizeof(*rpc->resp), GFP_KERNEL);
+	rpc->resp = kzalloc_obj(*rpc->resp, GFP_KERNEL);
 	if (!rpc->resp)
 		goto err_free_req;

@@ -1203,7 +1203,7 @@ static int apb_get_cport_count(struct usb_device *udev)
 	int retval;
 	__le16 *cport_count;

-	cport_count = kzalloc(sizeof(*cport_count), GFP_KERNEL);
+	cport_count = kzalloc_obj(*cport_count, GFP_KERNEL);
 	if (!cport_count)
 		return -ENOMEM;

diff --git a/drivers/greybus/interface.c b/drivers/greybus/interface.c
index a0f3e9422721..881eb5e545a0 100644
--- a/drivers/greybus/interface.c
+++ b/drivers/greybus/interface.c
@@ -789,7 +789,7 @@ struct gb_interface *gb_interface_create(struct gb_module *module,
 	struct gb_host_device *hd = module->hd;
 	struct gb_interface *intf;

-	intf = kzalloc(sizeof(*intf), GFP_KERNEL);
+	intf = kzalloc_obj(*intf, GFP_KERNEL);
 	if (!intf)
 		return NULL;

diff --git a/drivers/greybus/manifest.c b/drivers/greybus/manifest.c
index dd7040697bde..0cb87bea249e 100644
--- a/drivers/greybus/manifest.c
+++ b/drivers/greybus/manifest.c
@@ -157,7 +157,7 @@ static int identify_descriptor(struct gb_interface *intf,
 			 expected_size, desc_size);
 	}

-	descriptor = kzalloc(sizeof(*descriptor), GFP_KERNEL);
+	descriptor = kzalloc_obj(*descriptor, GFP_KERNEL);
 	if (!descriptor)
 		return -ENOMEM;

@@ -275,8 +275,8 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle)
 	if (!count)
 		return 0;

-	bundle->cport_desc = kcalloc(count, sizeof(*bundle->cport_desc),
-				     GFP_KERNEL);
+	bundle->cport_desc = kzalloc_objs(*bundle->cport_desc, count,
+					  GFP_KERNEL);
 	if (!bundle->cport_desc)
 		goto exit;

diff --git a/drivers/greybus/module.c b/drivers/greybus/module.c
index 7f7153a1dd60..1f68516716be 100644
--- a/drivers/greybus/module.c
+++ b/drivers/greybus/module.c
@@ -93,8 +93,7 @@ struct gb_module *gb_module_create(struct gb_host_device *hd, u8 module_id,
 	struct gb_module *module;
 	int i;

-	module = kzalloc(struct_size(module, interfaces, num_interfaces),
-			 GFP_KERNEL);
+	module = kzalloc_flex(*module, interfaces, num_interfaces, GFP_KERNEL);
 	if (!module)
 		return NULL;

diff --git a/drivers/greybus/svc.c b/drivers/greybus/svc.c
index 35ea7147dca6..4efe3dd5bc17 100644
--- a/drivers/greybus/svc.c
+++ b/drivers/greybus/svc.c
@@ -782,8 +782,8 @@ static void gb_svc_pwrmon_debugfs_init(struct gb_svc *svc)
 	if (!rail_names)
 		goto err_pwrmon_debugfs;

-	svc->pwrmon_rails = kcalloc(rail_count, sizeof(*svc->pwrmon_rails),
-				    GFP_KERNEL);
+	svc->pwrmon_rails = kzalloc_objs(*svc->pwrmon_rails, rail_count,
+					 GFP_KERNEL);
 	if (!svc->pwrmon_rails)
 		goto err_pwrmon_debugfs_free;

@@ -1128,7 +1128,7 @@ static int gb_svc_queue_deferred_request(struct gb_operation *operation)
 	struct gb_svc *svc = gb_connection_get_data(operation->connection);
 	struct gb_svc_deferred_request *dr;

-	dr = kmalloc(sizeof(*dr), GFP_KERNEL);
+	dr = kmalloc_obj(*dr, GFP_KERNEL);
 	if (!dr)
 		return -ENOMEM;

@@ -1315,7 +1315,7 @@ struct gb_svc *gb_svc_create(struct gb_host_device *hd)
 {
 	struct gb_svc *svc;

-	svc = kzalloc(sizeof(*svc), GFP_KERNEL);
+	svc = kzalloc_obj(*svc, GFP_KERNEL);
 	if (!svc)
 		return NULL;

diff --git a/drivers/greybus/svc_watchdog.c b/drivers/greybus/svc_watchdog.c
index b6b1682c19c4..2d2171f95822 100644
--- a/drivers/greybus/svc_watchdog.c
+++ b/drivers/greybus/svc_watchdog.c
@@ -112,7 +112,7 @@ int gb_svc_watchdog_create(struct gb_svc *svc)
 	if (svc->watchdog)
 		return 0;

-	watchdog = kmalloc(sizeof(*watchdog), GFP_KERNEL);
+	watchdog = kmalloc_obj(*watchdog, GFP_KERNEL);
 	if (!watchdog)
 		return -ENOMEM;

diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_client.c b/drivers/hid/amd-sfh-hid/amd_sfh_client.c
index 7017bfa59093..8b479441bf90 100644
--- a/drivers/hid/amd-sfh-hid/amd_sfh_client.c
+++ b/drivers/hid/amd-sfh-hid/amd_sfh_client.c
@@ -47,7 +47,7 @@ int amd_sfh_get_report(struct hid_device *hid, int report_id, int report_type)
 	guard(mutex)(&mp2->lock);
 	for (i = 0; i < cli_data->num_hid_devices; i++) {
 		if (cli_data->hid_sensor_hubs[i] == hid) {
-			struct request_list *new = kzalloc(sizeof(*new), GFP_KERNEL);
+			struct request_list *new = kzalloc_obj(*new, GFP_KERNEL);

 			if (!new)
 				return -ENOMEM;
diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_hid.c b/drivers/hid/amd-sfh-hid/amd_sfh_hid.c
index 81f3024b7b1b..59bc9a2e0cd7 100644
--- a/drivers/hid/amd-sfh-hid/amd_sfh_hid.c
+++ b/drivers/hid/amd-sfh-hid/amd_sfh_hid.c
@@ -135,7 +135,7 @@ int amdtp_hid_probe(u32 cur_hid_dev, struct amdtp_cl_data *cli_data)
 	if (IS_ERR(hid))
 		return PTR_ERR(hid);

-	hid_data = kzalloc(sizeof(*hid_data), GFP_KERNEL);
+	hid_data = kzalloc_obj(*hid_data, GFP_KERNEL);
 	if (!hid_data) {
 		rc = -ENOMEM;
 		goto err_hid_data;
diff --git a/drivers/hid/bpf/hid_bpf_dispatch.c b/drivers/hid/bpf/hid_bpf_dispatch.c
index 892aca026ffa..c99d81789eb3 100644
--- a/drivers/hid/bpf/hid_bpf_dispatch.c
+++ b/drivers/hid/bpf/hid_bpf_dispatch.c
@@ -320,7 +320,7 @@ hid_bpf_allocate_context(unsigned int hid_id)
 	if (IS_ERR(hdev))
 		return NULL;

-	ctx_kern = kzalloc(sizeof(*ctx_kern), GFP_KERNEL);
+	ctx_kern = kzalloc_obj(*ctx_kern, GFP_KERNEL);
 	if (!ctx_kern) {
 		hid_put_device(hdev);
 		return NULL;
diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
index 233e367cce1d..189baafe2d1e 100644
--- a/drivers/hid/hid-apple.c
+++ b/drivers/hid/hid-apple.c
@@ -794,7 +794,7 @@ static int apple_backlight_set(struct hid_device *hdev, u16 value, u16 rate)
 	int ret = 0;
 	struct apple_backlight_set_report *rep;

-	rep = kmalloc(sizeof(*rep), GFP_KERNEL);
+	rep = kmalloc_obj(*rep, GFP_KERNEL);
 	if (rep == NULL)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-axff.c b/drivers/hid/hid-axff.c
index fbe4e16ab029..c7dcdffff9e6 100644
--- a/drivers/hid/hid-axff.c
+++ b/drivers/hid/hid-axff.c
@@ -96,7 +96,7 @@ static int axff_init(struct hid_device *hid)
 		return -ENODEV;
 	}

-	axff = kzalloc(sizeof(struct axff_device), GFP_KERNEL);
+	axff = kzalloc_obj(struct axff_device, GFP_KERNEL);
 	if (!axff)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-betopff.c b/drivers/hid/hid-betopff.c
index a6d5f030d023..d739b3746138 100644
--- a/drivers/hid/hid-betopff.c
+++ b/drivers/hid/hid-betopff.c
@@ -100,7 +100,7 @@ static int betopff_init(struct hid_device *hid)
 		}
 	}

-	betopff = kzalloc(sizeof(*betopff), GFP_KERNEL);
+	betopff = kzalloc_obj(*betopff, GFP_KERNEL);
 	if (!betopff)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-cmedia.c b/drivers/hid/hid-cmedia.c
index 528d7f361215..c81c34e5b41a 100644
--- a/drivers/hid/hid-cmedia.c
+++ b/drivers/hid/hid-cmedia.c
@@ -145,7 +145,7 @@ static int cmhid_probe(struct hid_device *hid, const struct hid_device_id *id)
 	int ret;
 	struct cmhid *cm;

-	cm = kzalloc(sizeof(struct cmhid), GFP_KERNEL);
+	cm = kzalloc_obj(struct cmhid, GFP_KERNEL);
 	if (!cm) {
 		ret = -ENOMEM;
 		goto allocfail;
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index a5b3a8ca2fcb..d1ea455ce3d2 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -93,7 +93,7 @@ struct hid_report *hid_register_report(struct hid_device *device,
 	if (report_enum->report_id_hash[id])
 		return report_enum->report_id_hash[id];

-	report = kzalloc(sizeof(struct hid_report), GFP_KERNEL);
+	report = kzalloc_obj(struct hid_report, GFP_KERNEL);
 	if (!report)
 		return NULL;

@@ -1319,8 +1319,9 @@ int hid_open_report(struct hid_device *device)

 	end = start + size;

-	device->collection = kcalloc(HID_DEFAULT_NUM_COLLECTIONS,
-				     sizeof(struct hid_collection), GFP_KERNEL);
+	device->collection = kzalloc_objs(struct hid_collection,
+					  HID_DEFAULT_NUM_COLLECTIONS,
+					  GFP_KERNEL);
 	if (!device->collection) {
 		ret = -ENOMEM;
 		goto err;
@@ -1796,7 +1797,7 @@ static void hid_report_process_ordering(struct hid_device *hid,
 	}

 	/* allocate the memory to process the fields */
-	entries = kcalloc(count, sizeof(*entries), GFP_KERNEL);
+	entries = kzalloc_objs(*entries, count, GFP_KERNEL);
 	if (!entries)
 		return;

@@ -2610,7 +2611,7 @@ static ssize_t new_id_store(struct device_driver *drv, const char *buf,
 	if (ret < 3)
 		return -EINVAL;

-	dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
+	dynid = kzalloc_obj(*dynid, GFP_KERNEL);
 	if (!dynid)
 		return -ENOMEM;

@@ -2972,7 +2973,7 @@ struct hid_device *hid_allocate_device(void)
 	struct hid_device *hdev;
 	int ret = -ENOMEM;

-	hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
+	hdev = kzalloc_obj(*hdev, GFP_KERNEL);
 	if (hdev == NULL)
 		return ERR_PTR(ret);

diff --git a/drivers/hid/hid-corsair.c b/drivers/hid/hid-corsair.c
index 62b99f5c3cf8..750cac0a2a69 100644
--- a/drivers/hid/hid-corsair.c
+++ b/drivers/hid/hid-corsair.c
@@ -427,7 +427,7 @@ static int k90_init_backlight(struct hid_device *dev)
 	size_t name_sz;
 	char *name;

-	drvdata->backlight = kzalloc(sizeof(struct k90_led), GFP_KERNEL);
+	drvdata->backlight = kzalloc_obj(struct k90_led, GFP_KERNEL);
 	if (!drvdata->backlight) {
 		ret = -ENOMEM;
 		goto fail_backlight_alloc;
@@ -471,7 +471,7 @@ static int k90_init_macro_functions(struct hid_device *dev)
 	size_t name_sz;
 	char *name;

-	k90 = kzalloc(sizeof(struct k90_drvdata), GFP_KERNEL);
+	k90 = kzalloc_obj(struct k90_drvdata, GFP_KERNEL);
 	if (!k90) {
 		ret = -ENOMEM;
 		goto fail_drvdata;
diff --git a/drivers/hid/hid-cougar.c b/drivers/hid/hid-cougar.c
index 5596dd940322..0b66a7c61ac6 100644
--- a/drivers/hid/hid-cougar.c
+++ b/drivers/hid/hid-cougar.c
@@ -166,7 +166,7 @@ static int cougar_bind_shared_data(struct hid_device *hdev,

 	shared = cougar_get_shared_data(hdev);
 	if (!shared) {
-		shared = kzalloc(sizeof(*shared), GFP_KERNEL);
+		shared = kzalloc_obj(*shared, GFP_KERNEL);
 		if (!shared) {
 			error = -ENOMEM;
 			goto out;
diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c
index c5865b0d2aaa..220b497c573a 100644
--- a/drivers/hid/hid-debug.c
+++ b/drivers/hid/hid-debug.c
@@ -3681,7 +3681,7 @@ static int hid_debug_events_open(struct inode *inode, struct file *file)
 	struct hid_debug_list *list;
 	unsigned long flags;

-	if (!(list = kzalloc(sizeof(struct hid_debug_list), GFP_KERNEL))) {
+	if (!(list = kzalloc_obj(struct hid_debug_list, GFP_KERNEL))) {
 		err = -ENOMEM;
 		goto out;
 	}
diff --git a/drivers/hid/hid-dr.c b/drivers/hid/hid-dr.c
index 84e1e90a266b..9923b222383a 100644
--- a/drivers/hid/hid-dr.c
+++ b/drivers/hid/hid-dr.c
@@ -104,7 +104,7 @@ static int drff_init(struct hid_device *hid)
 		return -ENODEV;
 	}

-	drff = kzalloc(sizeof(struct drff_device), GFP_KERNEL);
+	drff = kzalloc_obj(struct drff_device, GFP_KERNEL);
 	if (!drff)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-elo.c b/drivers/hid/hid-elo.c
index cf17bdd14d9c..465f04ed1a55 100644
--- a/drivers/hid/hid-elo.c
+++ b/drivers/hid/hid-elo.c
@@ -232,7 +232,7 @@ static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id)
 	if (!hid_is_usb(hdev))
 		return -EINVAL;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-emsff.c b/drivers/hid/hid-emsff.c
index 60bfb6a924d7..0dbe598f2e48 100644
--- a/drivers/hid/hid-emsff.c
+++ b/drivers/hid/hid-emsff.c
@@ -76,7 +76,7 @@ static int emsff_init(struct hid_device *hid)
 		return -ENODEV;
 	}

-	emsff = kzalloc(sizeof(struct emsff_device), GFP_KERNEL);
+	emsff = kzalloc_obj(struct emsff_device, GFP_KERNEL);
 	if (!emsff)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-gaff.c b/drivers/hid/hid-gaff.c
index c6db8b6cc8ee..a9d305a193d2 100644
--- a/drivers/hid/hid-gaff.c
+++ b/drivers/hid/hid-gaff.c
@@ -96,7 +96,7 @@ static int gaff_init(struct hid_device *hid)
 		return -ENODEV;
 	}

-	gaff = kzalloc(sizeof(struct gaff_device), GFP_KERNEL);
+	gaff = kzalloc_obj(struct gaff_device, GFP_KERNEL);
 	if (!gaff)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-google-hammer.c b/drivers/hid/hid-google-hammer.c
index 4c1ccf7a267a..99b2e0919830 100644
--- a/drivers/hid/hid-google-hammer.c
+++ b/drivers/hid/hid-google-hammer.c
@@ -59,8 +59,8 @@ static int cbas_ec_query_base(struct cros_ec_device *ec_dev, bool get_state,
 	struct cros_ec_command *msg;
 	int ret;

-	msg = kzalloc(struct_size(msg, data, max(sizeof(u32), sizeof(*params))),
-		      GFP_KERNEL);
+	msg = kzalloc_flex(*msg, data, max(sizeof(u32), sizeof(*params)),
+			   GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-haptic.c b/drivers/hid/hid-haptic.c
index fc8a9997f815..84f4b1ece777 100644
--- a/drivers/hid/hid-haptic.c
+++ b/drivers/hid/hid-haptic.c
@@ -474,8 +474,8 @@ int hid_haptic_init(struct hid_device *hdev,
 		ret = -ENOMEM;
 		goto duration_map;
 	}
-	haptic->effect = kcalloc(FF_MAX_EFFECTS,
-				 sizeof(struct hid_haptic_effect), GFP_KERNEL);
+	haptic->effect = kzalloc_objs(struct hid_haptic_effect, FF_MAX_EFFECTS,
+				      GFP_KERNEL);
 	if (!haptic->effect) {
 		ret = -ENOMEM;
 		goto output_queue;
diff --git a/drivers/hid/hid-holtekff.c b/drivers/hid/hid-holtekff.c
index 8619b80c834c..56980af08683 100644
--- a/drivers/hid/hid-holtekff.c
+++ b/drivers/hid/hid-holtekff.c
@@ -149,7 +149,7 @@ static int holtekff_init(struct hid_device *hid)
 		return -ENODEV;
 	}

-	holtekff = kzalloc(sizeof(*holtekff), GFP_KERNEL);
+	holtekff = kzalloc_obj(*holtekff, GFP_KERNEL);
 	if (!holtekff)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-hyperv.c b/drivers/hid/hid-hyperv.c
index 9eafff0b6ea4..f092547d08d2 100644
--- a/drivers/hid/hid-hyperv.c
+++ b/drivers/hid/hid-hyperv.c
@@ -149,7 +149,7 @@ static struct mousevsc_dev *mousevsc_alloc_device(struct hv_device *device)
 {
 	struct mousevsc_dev *input_dev;

-	input_dev = kzalloc(sizeof(struct mousevsc_dev), GFP_KERNEL);
+	input_dev = kzalloc_obj(struct mousevsc_dev, GFP_KERNEL);

 	if (!input_dev)
 		return NULL;
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 2633fcd8f910..6137cc0aeeaf 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -531,7 +531,7 @@ static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
 	if (quirks & HID_BATTERY_QUIRK_IGNORE)
 		return 0;

-	psy_desc = kzalloc(sizeof(*psy_desc), GFP_KERNEL);
+	psy_desc = kzalloc_obj(*psy_desc, GFP_KERNEL);
 	if (!psy_desc)
 		return -ENOMEM;

@@ -2023,7 +2023,7 @@ static void report_features(struct hid_device *hid)
 static struct hid_input *hidinput_allocate(struct hid_device *hid,
 					   unsigned int application)
 {
-	struct hid_input *hidinput = kzalloc(sizeof(*hidinput), GFP_KERNEL);
+	struct hid_input *hidinput = kzalloc_obj(*hidinput, GFP_KERNEL);
 	struct input_dev *input_dev = input_allocate_device();
 	const char *suffix = NULL;
 	size_t suffix_len, name_len;
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index 9a2cfa018bd3..7cdf1e895b69 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -768,7 +768,7 @@ static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id)
 		return -ENODEV;
 	}

-	drv_data = kzalloc(sizeof(struct lg_drv_data), GFP_KERNEL);
+	drv_data = kzalloc_obj(struct lg_drv_data, GFP_KERNEL);
 	if (!drv_data) {
 		hid_err(hdev, "Insufficient memory, cannot allocate driver data\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-lg2ff.c b/drivers/hid/hid-lg2ff.c
index 73d07e35f12a..e4a034bd4095 100644
--- a/drivers/hid/hid-lg2ff.c
+++ b/drivers/hid/hid-lg2ff.c
@@ -66,7 +66,7 @@ int lg2ff_init(struct hid_device *hid)
 	if (!report)
 		return -ENODEV;

-	lg2ff = kmalloc(sizeof(struct lg2ff_device), GFP_KERNEL);
+	lg2ff = kmalloc_obj(struct lg2ff_device, GFP_KERNEL);
 	if (!lg2ff)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
index 32b711723f2a..4979f7779de8 100644
--- a/drivers/hid/hid-lg4ff.c
+++ b/drivers/hid/hid-lg4ff.c
@@ -1288,7 +1288,7 @@ int lg4ff_init(struct hid_device *hid)
 		hid_err(hid, "Cannot add device, private driver data not allocated\n");
 		return -1;
 	}
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;
 	spin_lock_init(&entry->report_lock);
diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
index c41fded63f4b..2fb6a67bede2 100644
--- a/drivers/hid/hid-logitech-dj.c
+++ b/drivers/hid/hid-logitech-dj.c
@@ -733,7 +733,7 @@ static struct dj_receiver_dev *dj_get_receiver_dev(struct hid_device *hdev,

 	djrcv_dev = dj_find_receiver_dev(hdev, type);
 	if (!djrcv_dev) {
-		djrcv_dev = kzalloc(sizeof(*djrcv_dev), GFP_KERNEL);
+		djrcv_dev = kzalloc_obj(*djrcv_dev, GFP_KERNEL);
 		if (!djrcv_dev)
 			goto out;

@@ -851,7 +851,7 @@ static void logi_dj_recv_add_djhid_device(struct dj_receiver_dev *djrcv_dev,
 	snprintf(tmpstr, sizeof(tmpstr), ":%d", device_index);
 	strlcat(dj_hiddev->phys, tmpstr, sizeof(dj_hiddev->phys));

-	dj_dev = kzalloc(sizeof(struct dj_device), GFP_KERNEL);
+	dj_dev = kzalloc_obj(struct dj_device, GFP_KERNEL);

 	if (!dj_dev) {
 		hid_err(djrcv_hdev, "%s: failed allocating dj_dev\n", __func__);
@@ -1332,7 +1332,7 @@ static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
 		goto out;
 	}

-	dj_report = kzalloc(sizeof(struct dj_report), GFP_KERNEL);
+	dj_report = kzalloc_obj(struct dj_report, GFP_KERNEL);
 	if (!dj_report)
 		return -ENOMEM;
 	dj_report->report_id = REPORT_ID_DJ_SHORT;
@@ -1356,7 +1356,7 @@ static int logi_dj_recv_switch_to_dj_mode(struct dj_receiver_dev *djrcv_dev,
 	u8 *buf;
 	int retval = 0;

-	dj_report = kzalloc(sizeof(struct dj_report), GFP_KERNEL);
+	dj_report = kzalloc_obj(struct dj_report, GFP_KERNEL);
 	if (!dj_report)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
index 02d83c3bd73d..4f3289b8a7c2 100644
--- a/drivers/hid/hid-logitech-hidpp.c
+++ b/drivers/hid/hid-logitech-hidpp.c
@@ -390,7 +390,7 @@ static int hidpp_send_fap_command_sync(struct hidpp_device *hidpp,
 		return -EINVAL;
 	}

-	message = kzalloc(sizeof(struct hidpp_report), GFP_KERNEL);
+	message = kzalloc_obj(struct hidpp_report, GFP_KERNEL);
 	if (!message)
 		return -ENOMEM;

@@ -443,7 +443,7 @@ static int hidpp_send_rap_command_sync(struct hidpp_device *hidpp_dev,
 	if (param_count > max_count)
 		return -EINVAL;

-	message = kzalloc(sizeof(struct hidpp_report), GFP_KERNEL);
+	message = kzalloc_obj(struct hidpp_report, GFP_KERNEL);
 	if (!message)
 		return -ENOMEM;
 	message->report_id = report_id;
@@ -2527,7 +2527,7 @@ static void hidpp_ff_work_handler(struct work_struct *w)

 static int hidpp_ff_queue_work(struct hidpp_ff_private_data *data, int effect_id, u8 command, u8 *params, u8 size)
 {
-	struct hidpp_ff_work_data *wd = kzalloc(sizeof(*wd), GFP_KERNEL);
+	struct hidpp_ff_work_data *wd = kzalloc_obj(*wd, GFP_KERNEL);
 	int s;

 	if (!wd)
@@ -2853,7 +2853,7 @@ static int hidpp_ff_init(struct hidpp_device *hidpp,
 	data = kmemdup(data, sizeof(*data), GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
-	data->effect_ids = kcalloc(num_slots, sizeof(int), GFP_KERNEL);
+	data->effect_ids = kzalloc_objs(int, num_slots, GFP_KERNEL);
 	if (!data->effect_ids) {
 		kfree(data);
 		return -ENOMEM;
diff --git a/drivers/hid/hid-megaworld.c b/drivers/hid/hid-megaworld.c
index 0476d7d16e7f..62f3e976f6b3 100644
--- a/drivers/hid/hid-megaworld.c
+++ b/drivers/hid/hid-megaworld.c
@@ -57,7 +57,7 @@ static int mwctrl_init(struct hid_device *hid)
 			return -ENODEV;
 	}

-	mwctrl = kzalloc(sizeof(struct mwctrl_device), GFP_KERNEL);
+	mwctrl = kzalloc_obj(struct mwctrl_device, GFP_KERNEL);
 	if (!mwctrl)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-mf.c b/drivers/hid/hid-mf.c
index 49a4052a1496..9a34645e92b6 100644
--- a/drivers/hid/hid-mf.c
+++ b/drivers/hid/hid-mf.c
@@ -88,7 +88,7 @@ static int mf_init(struct hid_device *hid)
 		input_ptr = input_ptr->next;
 		input = list_entry(input_ptr, struct hid_input, list);

-		mf = kzalloc(sizeof(struct mf_device), GFP_KERNEL);
+		mf = kzalloc_obj(struct mf_device, GFP_KERNEL);
 		if (!mf)
 			return -ENOMEM;

diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c
index a7f10c45f62b..f48dc2f34f79 100644
--- a/drivers/hid/hid-ntrig.c
+++ b/drivers/hid/hid-ntrig.c
@@ -900,7 +900,7 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id)
 		hdev->quirks |= HID_QUIRK_MULTI_INPUT
 				| HID_QUIRK_NO_INIT_REPORTS;

-	nd = kmalloc(sizeof(struct ntrig_data), GFP_KERNEL);
+	nd = kmalloc_obj(struct ntrig_data, GFP_KERNEL);
 	if (!nd) {
 		hid_err(hdev, "cannot allocate N-Trig data\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-picolcd_core.c b/drivers/hid/hid-picolcd_core.c
index 6a88e6bc70f3..99cae54dc769 100644
--- a/drivers/hid/hid-picolcd_core.c
+++ b/drivers/hid/hid-picolcd_core.c
@@ -78,7 +78,7 @@ struct picolcd_pending *picolcd_send_and_wait(struct hid_device *hdev,
 		return NULL;
 	if (data->status & PICOLCD_FAILED)
 		return NULL;
-	work = kzalloc(sizeof(*work), GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return NULL;

@@ -528,7 +528,7 @@ static int picolcd_probe(struct hid_device *hdev,
 	 * Let's allocate the picolcd data structure, set some reasonable
 	 * defaults, and associate it with the device
 	 */
-	data = kzalloc(sizeof(struct picolcd_data), GFP_KERNEL);
+	data = kzalloc_obj(struct picolcd_data, GFP_KERNEL);
 	if (data == NULL) {
 		hid_err(hdev, "can't allocate space for Minibox PicoLCD device data\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-pl.c b/drivers/hid/hid-pl.c
index dc11d5322fc0..967f93d9b46b 100644
--- a/drivers/hid/hid-pl.c
+++ b/drivers/hid/hid-pl.c
@@ -140,7 +140,7 @@ static int plff_init(struct hid_device *hid)
 			return -ENODEV;
 		}

-		plff = kzalloc(sizeof(struct plff_device), GFP_KERNEL);
+		plff = kzalloc_obj(struct plff_device, GFP_KERNEL);
 		if (!plff)
 			return -ENOMEM;

diff --git a/drivers/hid/hid-playstation.c b/drivers/hid/hid-playstation.c
index 2ec6d4445e84..2458c6b61358 100644
--- a/drivers/hid/hid-playstation.c
+++ b/drivers/hid/hid-playstation.c
@@ -1658,7 +1658,7 @@ static int dualsense_reset_leds(struct dualsense *ds)
 	struct dualsense_output_report report;
 	struct dualsense_output_report_bt *buf;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-prodikeys.c b/drivers/hid/hid-prodikeys.c
index 6e413df38358..e69b3cb682bc 100644
--- a/drivers/hid/hid-prodikeys.c
+++ b/drivers/hid/hid-prodikeys.c
@@ -797,7 +797,7 @@ static int pk_probe(struct hid_device *hdev, const struct hid_device_id *id)
 	intf = to_usb_interface(hdev->dev.parent);
 	ifnum = intf->cur_altsetting->desc.bInterfaceNumber;

-	pm = kzalloc(sizeof(*pm), GFP_KERNEL);
+	pm = kzalloc_obj(*pm, GFP_KERNEL);
 	if (pm == NULL) {
 		hid_err(hdev, "can't alloc descriptor\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
index 3217e436c052..b6a9cfb71ec9 100644
--- a/drivers/hid/hid-quirks.c
+++ b/drivers/hid/hid-quirks.c
@@ -1164,11 +1164,11 @@ static int hid_modify_dquirk(const struct hid_device_id *id,
 	int list_edited = 0;
 	int ret = 0;

-	hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
+	hdev = kzalloc_obj(*hdev, GFP_KERNEL);
 	if (!hdev)
 		return -ENOMEM;

-	q_new = kmalloc(sizeof(struct quirks_list_struct), GFP_KERNEL);
+	q_new = kmalloc_obj(struct quirks_list_struct, GFP_KERNEL);
 	if (!q_new) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/hid/hid-roccat-arvo.c b/drivers/hid/hid-roccat-arvo.c
index 7b09adfa44a1..f7318bc9e1a5 100644
--- a/drivers/hid/hid-roccat-arvo.c
+++ b/drivers/hid/hid-roccat-arvo.c
@@ -299,7 +299,7 @@ static int arvo_init_specials(struct hid_device *hdev)
 		return 0;
 	}

-	arvo = kzalloc(sizeof(*arvo), GFP_KERNEL);
+	arvo = kzalloc_obj(*arvo, GFP_KERNEL);
 	if (!arvo) {
 		hid_err(hdev, "can't alloc device descriptor\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-roccat-isku.c b/drivers/hid/hid-roccat-isku.c
index 339378771ed5..470c5e47d185 100644
--- a/drivers/hid/hid-roccat-isku.c
+++ b/drivers/hid/hid-roccat-isku.c
@@ -279,7 +279,7 @@ static int isku_init_specials(struct hid_device *hdev)
 		return 0;
 	}

-	isku = kzalloc(sizeof(*isku), GFP_KERNEL);
+	isku = kzalloc_obj(*isku, GFP_KERNEL);
 	if (!isku) {
 		hid_err(hdev, "can't alloc device descriptor\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-roccat-kone.c b/drivers/hid/hid-roccat-kone.c
index fabc08efcfd8..9ec3e015acb9 100644
--- a/drivers/hid/hid-roccat-kone.c
+++ b/drivers/hid/hid-roccat-kone.c
@@ -704,7 +704,7 @@ static int kone_init_specials(struct hid_device *hdev)
 	if (intf->cur_altsetting->desc.bInterfaceProtocol
 			== USB_INTERFACE_PROTOCOL_MOUSE) {

-		kone = kzalloc(sizeof(*kone), GFP_KERNEL);
+		kone = kzalloc_obj(*kone, GFP_KERNEL);
 		if (!kone)
 			return -ENOMEM;
 		hid_set_drvdata(hdev, kone);
diff --git a/drivers/hid/hid-roccat-koneplus.c b/drivers/hid/hid-roccat-koneplus.c
index 77d45d36421a..534d67a2617e 100644
--- a/drivers/hid/hid-roccat-koneplus.c
+++ b/drivers/hid/hid-roccat-koneplus.c
@@ -384,7 +384,7 @@ static int koneplus_init_specials(struct hid_device *hdev)
 	if (intf->cur_altsetting->desc.bInterfaceProtocol
 			== USB_INTERFACE_PROTOCOL_MOUSE) {

-		koneplus = kzalloc(sizeof(*koneplus), GFP_KERNEL);
+		koneplus = kzalloc_obj(*koneplus, GFP_KERNEL);
 		if (!koneplus) {
 			hid_err(hdev, "can't alloc device descriptor\n");
 			return -ENOMEM;
diff --git a/drivers/hid/hid-roccat-konepure.c b/drivers/hid/hid-roccat-konepure.c
index 027bfc55ef9c..1994efc4f26b 100644
--- a/drivers/hid/hid-roccat-konepure.c
+++ b/drivers/hid/hid-roccat-konepure.c
@@ -88,7 +88,7 @@ static int konepure_init_specials(struct hid_device *hdev)
 		return 0;
 	}

-	konepure = kzalloc(sizeof(*konepure), GFP_KERNEL);
+	konepure = kzalloc_obj(*konepure, GFP_KERNEL);
 	if (!konepure) {
 		hid_err(hdev, "can't alloc device descriptor\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-roccat-kovaplus.c b/drivers/hid/hid-roccat-kovaplus.c
index a66f1b4730f3..429d9b86b672 100644
--- a/drivers/hid/hid-roccat-kovaplus.c
+++ b/drivers/hid/hid-roccat-kovaplus.c
@@ -453,7 +453,7 @@ static int kovaplus_init_specials(struct hid_device *hdev)
 	if (intf->cur_altsetting->desc.bInterfaceProtocol
 			== USB_INTERFACE_PROTOCOL_MOUSE) {

-		kovaplus = kzalloc(sizeof(*kovaplus), GFP_KERNEL);
+		kovaplus = kzalloc_obj(*kovaplus, GFP_KERNEL);
 		if (!kovaplus) {
 			hid_err(hdev, "can't alloc device descriptor\n");
 			return -ENOMEM;
diff --git a/drivers/hid/hid-roccat-lua.c b/drivers/hid/hid-roccat-lua.c
index 45e30549c236..a7ed873f8761 100644
--- a/drivers/hid/hid-roccat-lua.c
+++ b/drivers/hid/hid-roccat-lua.c
@@ -119,7 +119,7 @@ static int lua_init_specials(struct hid_device *hdev)
 	struct lua_device *lua;
 	int retval;

-	lua = kzalloc(sizeof(*lua), GFP_KERNEL);
+	lua = kzalloc_obj(*lua, GFP_KERNEL);
 	if (!lua) {
 		hid_err(hdev, "can't alloc device descriptor\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-roccat-pyra.c b/drivers/hid/hid-roccat-pyra.c
index de2da6086e0b..35fffc55eb4f 100644
--- a/drivers/hid/hid-roccat-pyra.c
+++ b/drivers/hid/hid-roccat-pyra.c
@@ -403,7 +403,7 @@ static int pyra_init_specials(struct hid_device *hdev)
 	if (intf->cur_altsetting->desc.bInterfaceProtocol
 			== USB_INTERFACE_PROTOCOL_MOUSE) {

-		pyra = kzalloc(sizeof(*pyra), GFP_KERNEL);
+		pyra = kzalloc_obj(*pyra, GFP_KERNEL);
 		if (!pyra) {
 			hid_err(hdev, "can't alloc device descriptor\n");
 			return -ENOMEM;
diff --git a/drivers/hid/hid-roccat-ryos.c b/drivers/hid/hid-roccat-ryos.c
index 36911c9da4fe..0f4b52ef5404 100644
--- a/drivers/hid/hid-roccat-ryos.c
+++ b/drivers/hid/hid-roccat-ryos.c
@@ -96,7 +96,7 @@ static int ryos_init_specials(struct hid_device *hdev)
 		return 0;
 	}

-	ryos = kzalloc(sizeof(*ryos), GFP_KERNEL);
+	ryos = kzalloc_obj(*ryos, GFP_KERNEL);
 	if (!ryos) {
 		hid_err(hdev, "can't alloc device descriptor\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-roccat-savu.c b/drivers/hid/hid-roccat-savu.c
index fb2e464c3ada..90f9b0feb754 100644
--- a/drivers/hid/hid-roccat-savu.c
+++ b/drivers/hid/hid-roccat-savu.c
@@ -68,7 +68,7 @@ static int savu_init_specials(struct hid_device *hdev)
 		return 0;
 	}

-	savu = kzalloc(sizeof(*savu), GFP_KERNEL);
+	savu = kzalloc_obj(*savu, GFP_KERNEL);
 	if (!savu) {
 		hid_err(hdev, "can't alloc device descriptor\n");
 		return -ENOMEM;
diff --git a/drivers/hid/hid-roccat.c b/drivers/hid/hid-roccat.c
index c7f7562e22e5..5fe16ec1849a 100644
--- a/drivers/hid/hid-roccat.c
+++ b/drivers/hid/hid-roccat.c
@@ -152,7 +152,7 @@ static int roccat_open(struct inode *inode, struct file *file)
 	struct roccat_device *device;
 	int error = 0;

-	reader = kzalloc(sizeof(struct roccat_reader), GFP_KERNEL);
+	reader = kzalloc_obj(struct roccat_reader, GFP_KERNEL);
 	if (!reader)
 		return -ENOMEM;

@@ -301,7 +301,7 @@ int roccat_connect(const struct class *klass, struct hid_device *hid, int report
 	struct roccat_device *device;
 	int temp;

-	device = kzalloc(sizeof(struct roccat_device), GFP_KERNEL);
+	device = kzalloc_obj(struct roccat_device, GFP_KERNEL);
 	if (!device)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-sensor-custom.c b/drivers/hid/hid-sensor-custom.c
index 761760668f6d..75d827c85e14 100644
--- a/drivers/hid/hid-sensor-custom.c
+++ b/drivers/hid/hid-sensor-custom.c
@@ -912,7 +912,7 @@ hid_sensor_custom_get_known(struct hid_sensor_hub_device *hsdev,
 		hid_sensor_custom_known_table;
 	struct hid_sensor_custom_properties *prop;

-	prop = kmalloc(sizeof(struct hid_sensor_custom_properties), GFP_KERNEL);
+	prop = kmalloc_obj(struct hid_sensor_custom_properties, GFP_KERNEL);
 	if (!prop)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
index 0edec902be41..90666ff629de 100644
--- a/drivers/hid/hid-sensor-hub.c
+++ b/drivers/hid/hid-sensor-hub.c
@@ -139,7 +139,7 @@ int sensor_hub_register_callback(struct hid_sensor_hub_device *hsdev,
 			spin_unlock_irqrestore(&pdata->dyn_callback_lock, flags);
 			return -EINVAL;
 		}
-	callback = kzalloc(sizeof(*callback), GFP_ATOMIC);
+	callback = kzalloc_obj(*callback, GFP_ATOMIC);
 	if (!callback) {
 		spin_unlock_irqrestore(&pdata->dyn_callback_lock, flags);
 		return -ENOMEM;
diff --git a/drivers/hid/hid-sjoy.c b/drivers/hid/hid-sjoy.c
index d3a777f52a3f..e567c264aed3 100644
--- a/drivers/hid/hid-sjoy.c
+++ b/drivers/hid/hid-sjoy.c
@@ -83,7 +83,7 @@ static int sjoyff_init(struct hid_device *hid)
 			return -ENODEV;
 		}

-		sjoyff = kzalloc(sizeof(struct sjoyff_device), GFP_KERNEL);
+		sjoyff = kzalloc_obj(struct sjoyff_device, GFP_KERNEL);
 		if (!sjoyff)
 			return -ENOMEM;

diff --git a/drivers/hid/hid-thrustmaster.c b/drivers/hid/hid-thrustmaster.c
index 0bf70664c35e..15847eef4ac0 100644
--- a/drivers/hid/hid-thrustmaster.c
+++ b/drivers/hid/hid-thrustmaster.c
@@ -308,7 +308,7 @@ static int thrustmaster_probe(struct hid_device *hdev, const struct hid_device_i
 	}

 	// Now we allocate the tm_wheel
-	tm_wheel = kzalloc(sizeof(struct tm_wheel), GFP_KERNEL);
+	tm_wheel = kzalloc_obj(struct tm_wheel, GFP_KERNEL);
 	if (!tm_wheel) {
 		ret = -ENOMEM;
 		goto error1;
@@ -328,7 +328,7 @@ static int thrustmaster_probe(struct hid_device *hdev, const struct hid_device_i
 		goto error3;
 	}

-	tm_wheel->response = kzalloc(sizeof(struct tm_wheel_response), GFP_KERNEL);
+	tm_wheel->response = kzalloc_obj(struct tm_wheel_response, GFP_KERNEL);
 	if (!tm_wheel->response) {
 		ret = -ENOMEM;
 		goto error4;
diff --git a/drivers/hid/hid-tmff.c b/drivers/hid/hid-tmff.c
index fcd859aa3a8c..ddb2629ed9e1 100644
--- a/drivers/hid/hid-tmff.c
+++ b/drivers/hid/hid-tmff.c
@@ -132,7 +132,7 @@ static int tmff_init(struct hid_device *hid, const signed short *ff_bits)
 	hidinput = list_entry(hid->inputs.next, struct hid_input, list);
 	input_dev = hidinput->input;

-	tmff = kzalloc(sizeof(struct tmff_device), GFP_KERNEL);
+	tmff = kzalloc_obj(struct tmff_device, GFP_KERNEL);
 	if (!tmff)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-uclogic-params.c b/drivers/hid/hid-uclogic-params.c
index e28176d9d9c9..21b1d865bd0d 100644
--- a/drivers/hid/hid-uclogic-params.c
+++ b/drivers/hid/hid-uclogic-params.c
@@ -1358,13 +1358,13 @@ static int uclogic_params_ugee_v2_init_event_hooks(struct hid_device *hdev,
 	if (!uclogic_params_ugee_v2_has_battery(hdev))
 		return 0;

-	p->event_hooks = kzalloc(sizeof(*p->event_hooks), GFP_KERNEL);
+	p->event_hooks = kzalloc_obj(*p->event_hooks, GFP_KERNEL);
 	if (!p->event_hooks)
 		return -ENOMEM;

 	INIT_LIST_HEAD(&p->event_hooks->list);

-	event_hook = kzalloc(sizeof(*event_hook), GFP_KERNEL);
+	event_hook = kzalloc_obj(*event_hook, GFP_KERNEL);
 	if (!event_hook)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-wiimote-core.c b/drivers/hid/hid-wiimote-core.c
index 5b5fc460a4c5..c24ccfc7c05a 100644
--- a/drivers/hid/hid-wiimote-core.c
+++ b/drivers/hid/hid-wiimote-core.c
@@ -1737,7 +1737,7 @@ static struct wiimote_data *wiimote_create(struct hid_device *hdev)
 {
 	struct wiimote_data *wdata;

-	wdata = kzalloc(sizeof(*wdata), GFP_KERNEL);
+	wdata = kzalloc_obj(*wdata, GFP_KERNEL);
 	if (!wdata)
 		return NULL;

diff --git a/drivers/hid/hid-wiimote-debug.c b/drivers/hid/hid-wiimote-debug.c
index 00f9be55f148..07d7137acfd4 100644
--- a/drivers/hid/hid-wiimote-debug.c
+++ b/drivers/hid/hid-wiimote-debug.c
@@ -174,7 +174,7 @@ int wiidebug_init(struct wiimote_data *wdata)
 	struct wiimote_debug *dbg;
 	unsigned long flags;

-	dbg = kzalloc(sizeof(*dbg), GFP_KERNEL);
+	dbg = kzalloc_obj(*dbg, GFP_KERNEL);
 	if (!dbg)
 		return -ENOMEM;

diff --git a/drivers/hid/hid-zpff.c b/drivers/hid/hid-zpff.c
index aacf7f137b18..b9d94b3fe8b2 100644
--- a/drivers/hid/hid-zpff.c
+++ b/drivers/hid/hid-zpff.c
@@ -71,7 +71,7 @@ static int zpff_init(struct hid_device *hid)
 			return -ENODEV;
 	}

-	zpff = kzalloc(sizeof(struct zpff_device), GFP_KERNEL);
+	zpff = kzalloc_obj(struct zpff_device, GFP_KERNEL);
 	if (!zpff)
 		return -ENOMEM;

diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c
index bbd6f23bce78..c3cd8521b695 100644
--- a/drivers/hid/hidraw.c
+++ b/drivers/hid/hidraw.c
@@ -281,7 +281,7 @@ static int hidraw_open(struct inode *inode, struct file *file)
 	unsigned long flags;
 	int err = 0;

-	if (!(list = kzalloc(sizeof(struct hidraw_list), GFP_KERNEL))) {
+	if (!(list = kzalloc_obj(struct hidraw_list, GFP_KERNEL))) {
 		err = -ENOMEM;
 		goto out;
 	}
@@ -603,7 +603,7 @@ int hidraw_connect(struct hid_device *hid)

 	/* we accept any HID device, all applications */

-	dev = kzalloc(sizeof(struct hidraw), GFP_KERNEL);
+	dev = kzalloc_obj(struct hidraw, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/hid/intel-ish-hid/ishtp-hid.c b/drivers/hid/intel-ish-hid/ishtp-hid.c
index be2c62fc8251..48f06c93a07b 100644
--- a/drivers/hid/intel-ish-hid/ishtp-hid.c
+++ b/drivers/hid/intel-ish-hid/ishtp-hid.c
@@ -214,7 +214,7 @@ int ishtp_hid_probe(unsigned int cur_hid_dev,
 	if (IS_ERR(hid))
 		return PTR_ERR(hid);

-	hid_data = kzalloc(sizeof(*hid_data), GFP_KERNEL);
+	hid_data = kzalloc_obj(*hid_data, GFP_KERNEL);
 	if (!hid_data) {
 		rv = -ENOMEM;
 		goto err_hid_data;
diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c
index b890fbf97a75..ff60be49f2b8 100644
--- a/drivers/hid/intel-ish-hid/ishtp/bus.c
+++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
@@ -435,7 +435,7 @@ static struct ishtp_cl_device *ishtp_bus_add_device(struct ishtp_device *dev,
 	}
 	spin_unlock_irqrestore(&dev->device_list_lock, flags);

-	device = kzalloc(sizeof(struct ishtp_cl_device), GFP_KERNEL);
+	device = kzalloc_obj(struct ishtp_cl_device, GFP_KERNEL);
 	if (!device)
 		return NULL;

diff --git a/drivers/hid/intel-ish-hid/ishtp/client-buffers.c b/drivers/hid/intel-ish-hid/ishtp/client-buffers.c
index 97f4026b1627..717276f8460a 100644
--- a/drivers/hid/intel-ish-hid/ishtp/client-buffers.c
+++ b/drivers/hid/intel-ish-hid/ishtp/client-buffers.c
@@ -66,7 +66,7 @@ int ishtp_cl_alloc_tx_ring(struct ishtp_cl *cl)
 	for (j = 0; j < cl->tx_ring_size; ++j) {
 		struct ishtp_cl_tx_ring	*tx_buf;

-		tx_buf = kzalloc(sizeof(struct ishtp_cl_tx_ring), GFP_KERNEL);
+		tx_buf = kzalloc_obj(struct ishtp_cl_tx_ring, GFP_KERNEL);
 		if (!tx_buf)
 			goto	out;

@@ -183,7 +183,7 @@ struct ishtp_cl_rb *ishtp_io_rb_init(struct ishtp_cl *cl)
 {
 	struct ishtp_cl_rb *rb;

-	rb = kzalloc(sizeof(struct ishtp_cl_rb), GFP_KERNEL);
+	rb = kzalloc_obj(struct ishtp_cl_rb, GFP_KERNEL);
 	if (!rb)
 		return NULL;

diff --git a/drivers/hid/intel-ish-hid/ishtp/client.c b/drivers/hid/intel-ish-hid/ishtp/client.c
index 40f510b1c072..f22b2f85e70f 100644
--- a/drivers/hid/intel-ish-hid/ishtp/client.c
+++ b/drivers/hid/intel-ish-hid/ishtp/client.c
@@ -105,7 +105,7 @@ struct ishtp_cl *ishtp_cl_allocate(struct ishtp_cl_device *cl_device)
 {
 	struct ishtp_cl *cl;

-	cl = kmalloc(sizeof(struct ishtp_cl), GFP_KERNEL);
+	cl = kmalloc_obj(struct ishtp_cl, GFP_KERNEL);
 	if (!cl)
 		return NULL;

diff --git a/drivers/hid/intel-ish-hid/ishtp/hbm.c b/drivers/hid/intel-ish-hid/ishtp/hbm.c
index 97c4fcd9e3c6..9834dbd04726 100644
--- a/drivers/hid/intel-ish-hid/ishtp/hbm.c
+++ b/drivers/hid/intel-ish-hid/ishtp/hbm.c
@@ -34,8 +34,8 @@ static void ishtp_hbm_fw_cl_allocate(struct ishtp_device *dev)
 		return;

 	/* allocate storage for fw clients representation */
-	clients = kcalloc(dev->fw_clients_num, sizeof(struct ishtp_fw_client),
-			  GFP_KERNEL);
+	clients = kzalloc_objs(struct ishtp_fw_client, dev->fw_clients_num,
+			       GFP_KERNEL);
 	if (!clients) {
 		dev->dev_state = ISHTP_DEV_RESETTING;
 		ish_hw_reset(dev);
diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c
index 21a70420151e..a4f57143642c 100644
--- a/drivers/hid/uhid.c
+++ b/drivers/hid/uhid.c
@@ -110,7 +110,7 @@ static int uhid_queue_event(struct uhid_device *uhid, __u32 event)
 	unsigned long flags;
 	struct uhid_event *ev;

-	ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kzalloc_obj(*ev, GFP_KERNEL);
 	if (!ev)
 		return -ENOMEM;

@@ -129,7 +129,7 @@ static int uhid_hid_start(struct hid_device *hid)
 	struct uhid_event *ev;
 	unsigned long flags;

-	ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kzalloc_obj(*ev, GFP_KERNEL);
 	if (!ev)
 		return -ENOMEM;

@@ -240,7 +240,7 @@ static int uhid_hid_get_report(struct hid_device *hid, unsigned char rnum,
 	if (!READ_ONCE(uhid->running))
 		return -EIO;

-	ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kzalloc_obj(*ev, GFP_KERNEL);
 	if (!ev)
 		return -ENOMEM;

@@ -282,7 +282,7 @@ static int uhid_hid_set_report(struct hid_device *hid, unsigned char rnum,
 	if (!READ_ONCE(uhid->running) || count > UHID_DATA_MAX)
 		return -EIO;

-	ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kzalloc_obj(*ev, GFP_KERNEL);
 	if (!ev)
 		return -ENOMEM;

@@ -365,7 +365,7 @@ static int uhid_hid_output_raw(struct hid_device *hid, __u8 *buf, size_t count,
 	if (count < 1 || count > UHID_DATA_MAX)
 		return -EINVAL;

-	ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kzalloc_obj(*ev, GFP_KERNEL);
 	if (!ev)
 		return -ENOMEM;

@@ -433,7 +433,7 @@ static int uhid_event_from_user(const char __user *buffer, size_t len,
 			 */
 			struct uhid_create_req_compat *compat;

-			compat = kzalloc(sizeof(*compat), GFP_KERNEL);
+			compat = kzalloc_obj(*compat, GFP_KERNEL);
 			if (!compat)
 				return -ENOMEM;

@@ -636,7 +636,7 @@ static int uhid_char_open(struct inode *inode, struct file *file)
 {
 	struct uhid_device *uhid;

-	uhid = kzalloc(sizeof(*uhid), GFP_KERNEL);
+	uhid = kzalloc_obj(*uhid, GFP_KERNEL);
 	if (!uhid)
 		return -ENOMEM;

diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 758eb21430cd..922022a9c253 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -858,7 +858,7 @@ static int hid_alloc_buffers(struct usb_device *dev, struct hid_device *hid)
 			&usbhid->inbuf_dma);
 	usbhid->outbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
 			&usbhid->outbuf_dma);
-	usbhid->cr = kmalloc(sizeof(*usbhid->cr), GFP_KERNEL);
+	usbhid->cr = kmalloc_obj(*usbhid->cr, GFP_KERNEL);
 	usbhid->ctrlbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
 			&usbhid->ctrlbuf_dma);
 	if (!usbhid->inbuf || !usbhid->outbuf || !usbhid->cr ||
@@ -1430,7 +1430,7 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *
 	if (usb_string(dev, dev->descriptor.iSerialNumber, hid->uniq, 64) <= 0)
 		hid->uniq[0] = 0;

-	usbhid = kzalloc(sizeof(*usbhid), GFP_KERNEL);
+	usbhid = kzalloc_obj(*usbhid, GFP_KERNEL);
 	if (usbhid == NULL) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/hid/usbhid/hid-pidff.c b/drivers/hid/usbhid/hid-pidff.c
index a4e700b40ba9..6719c976a3c3 100644
--- a/drivers/hid/usbhid/hid-pidff.c
+++ b/drivers/hid/usbhid/hid-pidff.c
@@ -1528,7 +1528,7 @@ int hid_pidff_init_with_quirks(struct hid_device *hid, u32 initial_quirks)
 		return -ENODEV;
 	}

-	pidff = kzalloc(sizeof(*pidff), GFP_KERNEL);
+	pidff = kzalloc_obj(*pidff, GFP_KERNEL);
 	if (!pidff)
 		return -ENOMEM;

diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c
index 59cf3ddfdf78..3a115ea49cd2 100644
--- a/drivers/hid/usbhid/hiddev.c
+++ b/drivers/hid/usbhid/hiddev.c
@@ -434,7 +434,7 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd,
 	struct hid_field *field;
 	int i;

-	uref_multi = kmalloc(sizeof(struct hiddev_usage_ref_multi), GFP_KERNEL);
+	uref_multi = kmalloc_obj(struct hiddev_usage_ref_multi, GFP_KERNEL);
 	if (!uref_multi)
 		return -ENOMEM;
 	uref = &uref_multi->uref;
@@ -890,7 +890,7 @@ int hiddev_connect(struct hid_device *hid, unsigned int force)
 			return -EINVAL;
 	}

-	if (!(hiddev = kzalloc(sizeof(struct hiddev), GFP_KERNEL)))
+	if (!(hiddev = kzalloc_obj(struct hiddev, GFP_KERNEL)))
 		return -ENOMEM;

 	init_waitqueue_head(&hiddev->wait);
diff --git a/drivers/hid/usbhid/usbkbd.c b/drivers/hid/usbhid/usbkbd.c
index af6bc76dbf64..d32a860c6979 100644
--- a/drivers/hid/usbhid/usbkbd.c
+++ b/drivers/hid/usbhid/usbkbd.c
@@ -241,7 +241,7 @@ static int usb_kbd_alloc_mem(struct usb_device *dev, struct usb_kbd *kbd)
 		return -1;
 	if (!(kbd->new = usb_alloc_coherent(dev, 8, GFP_KERNEL, &kbd->new_dma)))
 		return -1;
-	if (!(kbd->cr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL)))
+	if (!(kbd->cr = kmalloc_obj(struct usb_ctrlrequest, GFP_KERNEL)))
 		return -1;
 	if (!(kbd->leds = usb_alloc_coherent(dev, 1, GFP_KERNEL, &kbd->leds_dma)))
 		return -1;
@@ -281,7 +281,7 @@ static int usb_kbd_probe(struct usb_interface *iface,
 	pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
 	maxp = usb_maxpacket(dev, pipe);

-	kbd = kzalloc(sizeof(struct usb_kbd), GFP_KERNEL);
+	kbd = kzalloc_obj(struct usb_kbd, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!kbd || !input_dev)
 		goto fail1;
diff --git a/drivers/hid/usbhid/usbmouse.c b/drivers/hid/usbhid/usbmouse.c
index 3fd93c2e4f4a..da0d30de1d26 100644
--- a/drivers/hid/usbhid/usbmouse.c
+++ b/drivers/hid/usbhid/usbmouse.c
@@ -125,7 +125,7 @@ static int usb_mouse_probe(struct usb_interface *intf, const struct usb_device_i
 	pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
 	maxp = usb_maxpacket(dev, pipe);

-	mouse = kzalloc(sizeof(struct usb_mouse), GFP_KERNEL);
+	mouse = kzalloc_obj(struct usb_mouse, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!mouse || !input_dev)
 		goto fail1;
diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
index afc900560706..e2e9f8afec11 100644
--- a/drivers/hid/wacom_sys.c
+++ b/drivers/hid/wacom_sys.c
@@ -892,7 +892,7 @@ static int wacom_add_shared_data(struct hid_device *hdev)

 	data = wacom_get_hdev_data(hdev);
 	if (!data) {
-		data = kzalloc(sizeof(struct wacom_hdev_data), GFP_KERNEL);
+		data = kzalloc_obj(struct wacom_hdev_data, GFP_KERNEL);
 		if (!data) {
 			mutex_unlock(&wacom_udev_list_lock);
 			return -ENOMEM;
diff --git a/drivers/hsi/clients/cmt_speech.c b/drivers/hsi/clients/cmt_speech.c
index daa8e1bff5d9..5918401a4db9 100644
--- a/drivers/hsi/clients/cmt_speech.c
+++ b/drivers/hsi/clients/cmt_speech.c
@@ -139,7 +139,7 @@ static void cs_notify(u32 message, struct list_head *head)
 		goto out;
 	}

-	entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kmalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry) {
 		dev_err(&cs_char_data.cl->device,
 			"Can't allocate new entry for the queue.\n");
@@ -273,7 +273,7 @@ static int cs_alloc_cmds(struct cs_hsi_iface *hi)
 		msg = hsi_alloc_msg(1, GFP_KERNEL);
 		if (!msg)
 			goto out;
-		buf = kmalloc(sizeof(*buf), GFP_KERNEL);
+		buf = kmalloc_obj(*buf, GFP_KERNEL);
 		if (!buf) {
 			hsi_free_msg(msg);
 			goto out;
@@ -985,7 +985,7 @@ static int cs_hsi_start(struct cs_hsi_iface **hi, struct hsi_client *cl,
 			unsigned long mmap_base, unsigned long mmap_size)
 {
 	int err = 0;
-	struct cs_hsi_iface *hsi_if = kzalloc(sizeof(*hsi_if), GFP_KERNEL);
+	struct cs_hsi_iface *hsi_if = kzalloc_obj(*hsi_if, GFP_KERNEL);

 	dev_dbg(&cl->device, "cs_hsi_start\n");

diff --git a/drivers/hsi/clients/hsi_char.c b/drivers/hsi/clients/hsi_char.c
index 71ce7dbfe31d..3258a7cf81ac 100644
--- a/drivers/hsi/clients/hsi_char.c
+++ b/drivers/hsi/clients/hsi_char.c
@@ -683,7 +683,7 @@ static int hsc_probe(struct device *dev)
 	int ret;
 	int i;

-	cl_data = kzalloc(sizeof(*cl_data), GFP_KERNEL);
+	cl_data = kzalloc_obj(*cl_data, GFP_KERNEL);
 	if (!cl_data)
 		return -ENOMEM;

diff --git a/drivers/hsi/clients/ssi_protocol.c b/drivers/hsi/clients/ssi_protocol.c
index d10a01f3eb9e..e7bb2803ace5 100644
--- a/drivers/hsi/clients/ssi_protocol.c
+++ b/drivers/hsi/clients/ssi_protocol.c
@@ -259,7 +259,7 @@ static int ssip_alloc_cmds(struct ssi_protocol *ssi)
 		msg = hsi_alloc_msg(1, GFP_KERNEL);
 		if (!msg)
 			goto out;
-		buf = kmalloc(sizeof(*buf), GFP_KERNEL);
+		buf = kmalloc_obj(*buf, GFP_KERNEL);
 		if (!buf) {
 			hsi_free_msg(msg);
 			goto out;
@@ -1077,7 +1077,7 @@ static int ssi_protocol_probe(struct device *dev)
 	struct ssi_protocol *ssi;
 	int err;

-	ssi = kzalloc(sizeof(*ssi), GFP_KERNEL);
+	ssi = kzalloc_obj(*ssi, GFP_KERNEL);
 	if (!ssi)
 		return -ENOMEM;

diff --git a/drivers/hsi/hsi_boardinfo.c b/drivers/hsi/hsi_boardinfo.c
index 52500e7fd836..109b0fb71a9a 100644
--- a/drivers/hsi/hsi_boardinfo.c
+++ b/drivers/hsi/hsi_boardinfo.c
@@ -36,7 +36,7 @@ int __init hsi_register_board_info(struct hsi_board_info const *info,
 {
 	struct hsi_cl_info *cl_info;

-	cl_info = kcalloc(len, sizeof(*cl_info), GFP_KERNEL);
+	cl_info = kzalloc_objs(*cl_info, len, GFP_KERNEL);
 	if (!cl_info)
 		return -ENOMEM;

diff --git a/drivers/hsi/hsi_core.c b/drivers/hsi/hsi_core.c
index 8113cb9d4015..84792da4caca 100644
--- a/drivers/hsi/hsi_core.c
+++ b/drivers/hsi/hsi_core.c
@@ -70,7 +70,7 @@ struct hsi_client *hsi_new_client(struct hsi_port *port,
 	struct hsi_client *cl;
 	size_t size;

-	cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+	cl = kzalloc_obj(*cl, GFP_KERNEL);
 	if (!cl)
 		goto err;

@@ -203,7 +203,7 @@ static void hsi_add_client_from_dt(struct hsi_port *port,
 	char name[32];
 	int length, cells, err, i, max_chan, mode;

-	cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+	cl = kzalloc_obj(*cl, GFP_KERNEL);
 	if (!cl)
 		return;

@@ -253,13 +253,13 @@ static void hsi_add_client_from_dt(struct hsi_port *port,

 	cl->rx_cfg.num_channels = cells;
 	cl->tx_cfg.num_channels = cells;
-	cl->rx_cfg.channels = kcalloc(cells, sizeof(channel), GFP_KERNEL);
+	cl->rx_cfg.channels = kzalloc_objs(channel, cells, GFP_KERNEL);
 	if (!cl->rx_cfg.channels) {
 		err = -ENOMEM;
 		goto err;
 	}

-	cl->tx_cfg.channels = kcalloc(cells, sizeof(channel), GFP_KERNEL);
+	cl->tx_cfg.channels = kzalloc_objs(channel, cells, GFP_KERNEL);
 	if (!cl->tx_cfg.channels) {
 		err = -ENOMEM;
 		goto err2;
@@ -468,10 +468,10 @@ struct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags)
 	if (!n_ports)
 		return NULL;

-	hsi = kzalloc(sizeof(*hsi), flags);
+	hsi = kzalloc_obj(*hsi, flags);
 	if (!hsi)
 		return NULL;
-	port = kcalloc(n_ports, sizeof(*port), flags);
+	port = kzalloc_objs(*port, n_ports, flags);
 	if (!port) {
 		kfree(hsi);
 		return NULL;
@@ -482,7 +482,7 @@ struct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags)
 	device_initialize(&hsi->device);

 	for (i = 0; i < n_ports; i++) {
-		port[i] = kzalloc(sizeof(**port), flags);
+		port[i] = kzalloc_obj(**port, flags);
 		if (port[i] == NULL)
 			goto out;
 		port[i]->num = i;
@@ -538,7 +538,7 @@ struct hsi_msg *hsi_alloc_msg(unsigned int nents, gfp_t flags)
 	struct hsi_msg *msg;
 	int err;

-	msg = kzalloc(sizeof(*msg), flags);
+	msg = kzalloc_obj(*msg, flags);
 	if (!msg)
 		return NULL;

diff --git a/drivers/hte/hte.c b/drivers/hte/hte.c
index 23a6eeb8c506..34f40ed46242 100644
--- a/drivers/hte/hte.c
+++ b/drivers/hte/hte.c
@@ -850,7 +850,7 @@ static int hte_register_chip(struct hte_chip *chip)
 		return -EINVAL;
 	}

-	gdev = kzalloc(struct_size(gdev, ei, chip->nlines), GFP_KERNEL);
+	gdev = kzalloc_flex(*gdev, ei, chip->nlines, GFP_KERNEL);
 	if (!gdev)
 		return -ENOMEM;

diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 74fed2c073d4..7c77ada12b2e 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -354,7 +354,7 @@ static struct vmbus_channel *alloc_channel(void)
 {
 	struct vmbus_channel *channel;

-	channel = kzalloc(sizeof(*channel), GFP_ATOMIC);
+	channel = kzalloc_obj(*channel, GFP_ATOMIC);
 	if (!channel)
 		return NULL;

diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 5d9cb5bf2d62..16b9959dba7e 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -313,9 +313,8 @@ int vmbus_connect(void)
 	pr_info("Vmbus version:%d.%d\n",
 		version >> 16, version & 0xFFFF);

-	vmbus_connection.channels = kcalloc(MAX_CHANNEL_RELIDS,
-					    sizeof(struct vmbus_channel *),
-					    GFP_KERNEL);
+	vmbus_connection.channels = kzalloc_objs(struct vmbus_channel *,
+						 MAX_CHANNEL_RELIDS, GFP_KERNEL);
 	if (vmbus_connection.channels == NULL) {
 		ret = -ENOMEM;
 		goto cleanup;
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index ea6835638505..4a2348b7f8a2 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -183,8 +183,8 @@ int hv_synic_alloc(void)
 		memset(hv_cpu, 0, sizeof(*hv_cpu));
 	}

-	hv_context.hv_numa_map = kcalloc(nr_node_ids, sizeof(struct cpumask),
-					 GFP_KERNEL);
+	hv_context.hv_numa_map = kzalloc_objs(struct cpumask, nr_node_ids,
+					      GFP_KERNEL);
 	if (!hv_context.hv_numa_map) {
 		pr_err("Unable to allocate NUMA map\n");
 		goto err;
diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c
index 2b4080e51f97..a848400a59a2 100644
--- a/drivers/hv/hv_balloon.c
+++ b/drivers/hv/hv_balloon.c
@@ -801,7 +801,7 @@ static int pfn_covered(unsigned long start_pfn, unsigned long pfn_cnt)
 		 * is, create a gap and update covered_end_pfn.
 		 */
 		if (has->covered_end_pfn != start_pfn) {
-			gap = kzalloc(sizeof(struct hv_hotadd_gap), GFP_ATOMIC);
+			gap = kzalloc_obj(struct hv_hotadd_gap, GFP_ATOMIC);
 			if (!gap) {
 				ret = -ENOMEM;
 				break;
diff --git a/drivers/hv/hv_kvp.c b/drivers/hv/hv_kvp.c
index 62795f6cbb00..29ef1dc5c184 100644
--- a/drivers/hv/hv_kvp.c
+++ b/drivers/hv/hv_kvp.c
@@ -134,7 +134,7 @@ kvp_register(int reg_value)
 	struct hv_kvp_msg *kvp_msg;
 	char *version;

-	kvp_msg = kzalloc(sizeof(*kvp_msg), GFP_KERNEL);
+	kvp_msg = kzalloc_obj(*kvp_msg, GFP_KERNEL);

 	if (kvp_msg) {
 		version = kvp_msg->body.kvp_register.version;
@@ -385,7 +385,7 @@ kvp_send_key(struct work_struct *dummy)
 	if (kvp_transaction.state != HVUTIL_HOSTMSG_RECEIVED)
 		return;

-	message = kzalloc(sizeof(*message), GFP_KERNEL);
+	message = kzalloc_obj(*message, GFP_KERNEL);
 	if (!message)
 		return;

diff --git a/drivers/hv/hv_proc.c b/drivers/hv/hv_proc.c
index 5f4fd9c3231c..216a0e8fd15b 100644
--- a/drivers/hv/hv_proc.c
+++ b/drivers/hv/hv_proc.c
@@ -40,7 +40,7 @@ int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages)
 		return -ENOMEM;
 	pages = page_address(page);

-	counts = kcalloc(HV_DEPOSIT_MAX, sizeof(int), GFP_KERNEL);
+	counts = kzalloc_objs(int, HV_DEPOSIT_MAX, GFP_KERNEL);
 	if (!counts) {
 		free_page((unsigned long)pages);
 		return -ENOMEM;
diff --git a/drivers/hv/hv_snapshot.c b/drivers/hv/hv_snapshot.c
index 2e7f537d53cf..50f9348789ee 100644
--- a/drivers/hv/hv_snapshot.c
+++ b/drivers/hv/hv_snapshot.c
@@ -184,7 +184,7 @@ static void vss_send_op(void)
 		return;
 	}

-	vss_msg = kzalloc(sizeof(*vss_msg), GFP_KERNEL);
+	vss_msg = kzalloc_obj(*vss_msg, GFP_KERNEL);
 	if (!vss_msg)
 		return;

@@ -424,7 +424,7 @@ int hv_vss_pre_suspend(void)
 	 * write() will fail with EINVAL (see vss_on_msg()), and the daemon
 	 * will reset the device by closing and re-opening it.
 	 */
-	vss_msg = kzalloc(sizeof(*vss_msg), GFP_KERNEL);
+	vss_msg = kzalloc_obj(*vss_msg, GFP_KERNEL);
 	if (!vss_msg)
 		return -ENOMEM;

diff --git a/drivers/hv/hv_utils_transport.c b/drivers/hv/hv_utils_transport.c
index b3de35ff6334..43b7ffae8852 100644
--- a/drivers/hv/hv_utils_transport.c
+++ b/drivers/hv/hv_utils_transport.c
@@ -274,7 +274,7 @@ struct hvutil_transport *hvutil_transport_init(const char *name,
 {
 	struct hvutil_transport *hvt;

-	hvt = kzalloc(sizeof(*hvt), GFP_KERNEL);
+	hvt = kzalloc_obj(*hvt, GFP_KERNEL);
 	if (!hvt)
 		return NULL;

diff --git a/drivers/hv/mshv_debugfs.c b/drivers/hv/mshv_debugfs.c
index ebf2549eb44d..6a080d728836 100644
--- a/drivers/hv/mshv_debugfs.c
+++ b/drivers/hv/mshv_debugfs.c
@@ -156,9 +156,8 @@ static int __init mshv_debugfs_lp_create(struct dentry *parent)
 	struct dentry *lp_dir;
 	int err, lp_index;

-	mshv_lps_stats = kcalloc(mshv_lps_count,
-				 sizeof(*mshv_lps_stats),
-				 GFP_KERNEL_ACCOUNT);
+	mshv_lps_stats = kzalloc_objs(*mshv_lps_stats, mshv_lps_count,
+				      GFP_KERNEL_ACCOUNT);

 	if (!mshv_lps_stats)
 		return -ENOMEM;
@@ -329,8 +328,8 @@ static int mshv_debugfs_partition_stats_create(u64 partition_id,
 	struct hv_stats_page **pstats;
 	int err;

-	pstats = kcalloc(NUM_STATS_AREAS, sizeof(struct hv_stats_page *),
-			 GFP_KERNEL_ACCOUNT);
+	pstats = kzalloc_objs(struct hv_stats_page *, NUM_STATS_AREAS,
+			      GFP_KERNEL_ACCOUNT);
 	if (!pstats)
 		return -ENOMEM;

@@ -472,8 +471,8 @@ static int __init parent_vp_debugfs_create(u32 vp_index,
 	struct hv_stats_page **pstats;
 	int err;

-	pstats = kcalloc(NUM_STATS_AREAS, sizeof(struct hv_stats_page *),
-			 GFP_KERNEL_ACCOUNT);
+	pstats = kzalloc_objs(struct hv_stats_page *, NUM_STATS_AREAS,
+			      GFP_KERNEL_ACCOUNT);
 	if (!pstats)
 		return -ENOMEM;

@@ -512,8 +511,7 @@ static int __init mshv_debugfs_parent_partition_create(void)
 	if (err)
 		goto remove_debugfs_partition;

-	parent_vp_stats = kcalloc(nr_cpu_ids, sizeof(*parent_vp_stats),
-				  GFP_KERNEL);
+	parent_vp_stats = kzalloc_objs(*parent_vp_stats, nr_cpu_ids, GFP_KERNEL);
 	if (!parent_vp_stats) {
 		err = -ENOMEM;
 		goto remove_debugfs_partition;
diff --git a/drivers/hv/mshv_eventfd.c b/drivers/hv/mshv_eventfd.c
index 492c6258045c..5b3c09f08a1e 100644
--- a/drivers/hv/mshv_eventfd.c
+++ b/drivers/hv/mshv_eventfd.c
@@ -394,7 +394,7 @@ static int mshv_irqfd_assign(struct mshv_partition *pt,

 	CLASS(fd, f)(args->fd);

-	irqfd = kzalloc(sizeof(*irqfd), GFP_KERNEL);
+	irqfd = kzalloc_obj(*irqfd, GFP_KERNEL);
 	if (!irqfd)
 		return -ENOMEM;

@@ -439,7 +439,7 @@ static int mshv_irqfd_assign(struct mshv_partition *pt,
 		}

 		if (!irqfd->irqfd_resampler) {
-			rp = kzalloc(sizeof(*rp), GFP_KERNEL_ACCOUNT);
+			rp = kzalloc_obj(*rp, GFP_KERNEL_ACCOUNT);
 			if (!rp) {
 				ret = -ENOMEM;
 				mutex_unlock(&pt->irqfds_resampler_lock);
@@ -707,7 +707,7 @@ static int mshv_assign_ioeventfd(struct mshv_partition *pt,
 	if (IS_ERR(eventfd))
 		return PTR_ERR(eventfd);

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/hv/mshv_irq.c b/drivers/hv/mshv_irq.c
index 798e7e1ab06e..02c56fc3a498 100644
--- a/drivers/hv/mshv_irq.c
+++ b/drivers/hv/mshv_irq.c
@@ -37,8 +37,8 @@ int mshv_update_routing_table(struct mshv_partition *partition,
 	}
 	nr_rt_entries += 1;

-	new = kzalloc(struct_size(new, mshv_girq_info_tbl, nr_rt_entries),
-		      GFP_KERNEL_ACCOUNT);
+	new = kzalloc_flex(*new, mshv_girq_info_tbl, nr_rt_entries,
+			   GFP_KERNEL_ACCOUNT);
 	if (!new)
 		return -ENOMEM;

diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
index e6509c980763..4715d23d22f2 100644
--- a/drivers/hv/mshv_root_main.c
+++ b/drivers/hv/mshv_root_main.c
@@ -713,7 +713,7 @@ mshv_vp_ioctl_get_set_state_pfn(struct mshv_vp *vp,
 		return -EOVERFLOW;

 	/* Pin user pages so hypervisor can copy directly to them */
-	pages = kcalloc(page_count, sizeof(struct page *), GFP_KERNEL);
+	pages = kzalloc_objs(struct page *, page_count, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

@@ -1072,7 +1072,7 @@ mshv_partition_ioctl_create_vp(struct mshv_partition *partition,
 	if (ret)
 		goto unmap_ghcb_page;

-	vp = kzalloc(sizeof(*vp), GFP_KERNEL);
+	vp = kzalloc_obj(*vp, GFP_KERNEL);
 	if (!vp)
 		goto unmap_stats_pages;

@@ -1977,7 +1977,7 @@ mshv_ioctl_create_partition(void __user *user_arg, struct device *module_dev)
 	if (ret)
 		return ret;

-	partition = kzalloc(sizeof(*partition), GFP_KERNEL);
+	partition = kzalloc_obj(*partition, GFP_KERNEL);
 	if (!partition)
 		return -ENOMEM;

diff --git a/drivers/hv/mshv_synic.c b/drivers/hv/mshv_synic.c
index f8b0337cdc82..49e3a59ffb90 100644
--- a/drivers/hv/mshv_synic.c
+++ b/drivers/hv/mshv_synic.c
@@ -605,7 +605,7 @@ mshv_register_doorbell(u64 partition_id, doorbell_cb_t doorbell_cb, void *data,
 	union hv_port_id port_id = { 0 };
 	int ret;

-	port_table_info = kmalloc(sizeof(*port_table_info), GFP_KERNEL);
+	port_table_info = kmalloc_obj(*port_table_info, GFP_KERNEL);
 	if (!port_table_info)
 		return -ENOMEM;

diff --git a/drivers/hv/mshv_vtl_main.c b/drivers/hv/mshv_vtl_main.c
index 7bbbce009732..916021a175f3 100644
--- a/drivers/hv/mshv_vtl_main.c
+++ b/drivers/hv/mshv_vtl_main.c
@@ -117,7 +117,7 @@ mshv_ioctl_create_vtl(void __user *user_arg, struct device *module_dev)
 	struct file *file;
 	int fd;

-	vtl = kzalloc(sizeof(*vtl), GFP_KERNEL);
+	vtl = kzalloc_obj(*vtl, GFP_KERNEL);
 	if (!vtl)
 		return -ENOMEM;

@@ -393,7 +393,7 @@ static int mshv_vtl_ioctl_add_vtl0_mem(struct mshv_vtl *vtl, void __user *arg)
 		return -EFAULT;
 	}

-	pgmap = kzalloc(sizeof(*pgmap), GFP_KERNEL);
+	pgmap = kzalloc_obj(*pgmap, GFP_KERNEL);
 	if (!pgmap)
 		return -ENOMEM;

@@ -1344,7 +1344,7 @@ static int __init mshv_vtl_init(void)
 	/*
 	 * "mshv vtl mem dev" device is later used to setup VTL0 memory.
 	 */
-	mem_dev = kzalloc(sizeof(*mem_dev), GFP_KERNEL);
+	mem_dev = kzalloc_obj(*mem_dev, GFP_KERNEL);
 	if (!mem_dev) {
 		ret = -ENOMEM;
 		goto free_low;
diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
index 3c421a7f78c0..db3c2537360f 100644
--- a/drivers/hv/ring_buffer.c
+++ b/drivers/hv/ring_buffer.c
@@ -196,9 +196,8 @@ int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
 	 * First page holds struct hv_ring_buffer, do wraparound mapping for
 	 * the rest.
 	 */
-	pages_wraparound = kcalloc(page_cnt * 2 - 1,
-				   sizeof(struct page *),
-				   GFP_KERNEL);
+	pages_wraparound = kzalloc_objs(struct page *, page_cnt * 2 - 1,
+					GFP_KERNEL);
 	if (!pages_wraparound)
 		return -ENOMEM;

diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 3e7a52918ce0..3119f68fd27b 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -756,7 +756,7 @@ static int vmbus_add_dynid(struct hv_driver *drv, guid_t *guid)
 {
 	struct vmbus_dynid *dynid;

-	dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
+	dynid = kzalloc_obj(*dynid, GFP_KERNEL);
 	if (!dynid)
 		return -ENOMEM;

@@ -1120,7 +1120,7 @@ static void __vmbus_on_msg_dpc(void *message_page_addr)
 	}

 	if (entry->handler_type	== VMHT_BLOCKING) {
-		ctx = kmalloc(struct_size(ctx, msg.payload, payload_size), GFP_ATOMIC);
+		ctx = kmalloc_flex(*ctx, msg.payload, payload_size, GFP_ATOMIC);
 		if (ctx == NULL)
 			return;

@@ -2156,7 +2156,7 @@ struct hv_device *vmbus_device_create(const guid_t *type,
 {
 	struct hv_device *child_device_obj;

-	child_device_obj = kzalloc(sizeof(struct hv_device), GFP_KERNEL);
+	child_device_obj = kzalloc_obj(struct hv_device, GFP_KERNEL);
 	if (!child_device_obj) {
 		pr_err("Unable to allocate device object for child device\n");
 		return NULL;
@@ -2318,7 +2318,7 @@ static acpi_status vmbus_walk_resources(struct acpi_resource *res, void *ctx)
 	if (end < 0x100000)
 		return AE_OK;

-	new_res = kzalloc(sizeof(*new_res), GFP_ATOMIC);
+	new_res = kzalloc_obj(*new_res, GFP_ATOMIC);
 	if (!new_res)
 		return AE_NO_MEMORY;

@@ -2672,7 +2672,7 @@ static int vmbus_device_add(struct platform_device *pdev)
 	for_each_of_range(&parser, &range) {
 		struct resource *res;

-		res = kzalloc(sizeof(*res), GFP_KERNEL);
+		res = kzalloc_obj(*res, GFP_KERNEL);
 		if (!res) {
 			vmbus_mmio_remove();
 			return -ENOMEM;
diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c
index 7cb66216f358..1fa3657f4630 100644
--- a/drivers/hwmon/acpi_power_meter.c
+++ b/drivers/hwmon/acpi_power_meter.c
@@ -245,9 +245,8 @@ static int read_domain_devices(struct acpi_power_meter_resource *resource)
 	if (!pss->package.count)
 		goto end;

-	resource->domain_devices = kcalloc(pss->package.count,
-					   sizeof(struct acpi_device *),
-					   GFP_KERNEL);
+	resource->domain_devices = kzalloc_objs(struct acpi_device *,
+						pss->package.count, GFP_KERNEL);
 	if (!resource->domain_devices) {
 		res = -ENOMEM;
 		goto end;
@@ -893,7 +892,7 @@ static int acpi_power_meter_add(struct acpi_device *device)
 	if (!device)
 		return -EINVAL;

-	resource = kzalloc(sizeof(*resource), GFP_KERNEL);
+	resource = kzalloc_obj(*resource, GFP_KERNEL);
 	if (!resource)
 		return -ENOMEM;

diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
index fc6d6a9053ce..0dbad1d3808c 100644
--- a/drivers/hwmon/applesmc.c
+++ b/drivers/hwmon/applesmc.c
@@ -586,7 +586,7 @@ static int applesmc_init_smcreg_try(void)
 	s->key_count = count;

 	if (!s->cache)
-		s->cache = kcalloc(s->key_count, sizeof(*s->cache), GFP_KERNEL);
+		s->cache = kzalloc_objs(*s->cache, s->key_count, GFP_KERNEL);
 	if (!s->cache)
 		return -ENOMEM;

@@ -1141,7 +1141,7 @@ static int applesmc_create_nodes(struct applesmc_node_group *groups, int num)
 	int ret, i;

 	for (grp = groups; grp->format; grp++) {
-		grp->nodes = kcalloc(num + 1, sizeof(*node), GFP_KERNEL);
+		grp->nodes = kzalloc_objs(*node, num + 1, GFP_KERNEL);
 		if (!grp->nodes) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
index d2dfa4e30407..eb00a9f08955 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
@@ -492,13 +492,13 @@ init_temp_data(struct platform_data *pdata, unsigned int cpu, int pkg_flag)
 		 * when this information becomes available.
 		 */
 		pdata->nr_cores = NUM_REAL_CORES;
-		pdata->core_data = kcalloc(pdata->nr_cores, sizeof(struct temp_data *),
-					   GFP_KERNEL);
+		pdata->core_data = kzalloc_objs(struct temp_data *,
+						pdata->nr_cores, GFP_KERNEL);
 		if (!pdata->core_data)
 			return NULL;
 	}

-	tdata = kzalloc(sizeof(struct temp_data), GFP_KERNEL);
+	tdata = kzalloc_obj(struct temp_data, GFP_KERNEL);
 	if (!tdata)
 		return NULL;

@@ -625,7 +625,7 @@ static int coretemp_device_add(int zoneid)
 	int err;

 	/* Initialize the per-zone data structures */
-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return -ENOMEM;

@@ -804,8 +804,8 @@ static int __init coretemp_init(void)
 		return -ENODEV;

 	max_zones = topology_max_packages() * topology_max_dies_per_package();
-	zone_devices = kcalloc(max_zones, sizeof(struct platform_device *),
-			      GFP_KERNEL);
+	zone_devices = kzalloc_objs(struct platform_device *, max_zones,
+				    GFP_KERNEL);
 	if (!zone_devices)
 		return -ENOMEM;

diff --git a/drivers/hwmon/drivetemp.c b/drivers/hwmon/drivetemp.c
index 9c5b021aab86..f2fa7223be7a 100644
--- a/drivers/hwmon/drivetemp.c
+++ b/drivers/hwmon/drivetemp.c
@@ -556,7 +556,7 @@ static int drivetemp_add(struct device *dev)
 	struct drivetemp_data *st;
 	int err;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

diff --git a/drivers/hwmon/fschmd.c b/drivers/hwmon/fschmd.c
index a303959879ef..740d46634b4c 100644
--- a/drivers/hwmon/fschmd.c
+++ b/drivers/hwmon/fschmd.c
@@ -1088,7 +1088,7 @@ static int fschmd_probe(struct i2c_client *client)
 	int i, err;
 	enum chips kind = (uintptr_t)i2c_get_match_data(client);

-	data = kzalloc(sizeof(struct fschmd_data), GFP_KERNEL);
+	data = kzalloc_obj(struct fschmd_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
index 714caa6a36a3..a1173ea0b029 100644
--- a/drivers/hwmon/hwmon.c
+++ b/drivers/hwmon/hwmon.c
@@ -533,7 +533,7 @@ static struct attribute *hwmon_genattr(const void *drvdata,
 	if ((mode & 0222) && !ops->write)
 		return ERR_PTR(-EINVAL);

-	hattr = kzalloc(sizeof(*hattr), GFP_KERNEL);
+	hattr = kzalloc_obj(*hattr, GFP_KERNEL);
 	if (!hattr)
 		return ERR_PTR(-ENOMEM);

@@ -879,7 +879,7 @@ __hwmon_create_attrs(const void *drvdata, const struct hwmon_chip_info *chip)
 	if (nattrs == 0)
 		return ERR_PTR(-EINVAL);

-	attrs = kcalloc(nattrs + 1, sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_objs(*attrs, nattrs + 1, GFP_KERNEL);
 	if (!attrs)
 		return ERR_PTR(-ENOMEM);

@@ -917,7 +917,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
 	if (id < 0)
 		return ERR_PTR(id);

-	hwdev = kzalloc(sizeof(*hwdev), GFP_KERNEL);
+	hwdev = kzalloc_obj(*hwdev, GFP_KERNEL);
 	if (hwdev == NULL) {
 		err = -ENOMEM;
 		goto ida_remove;
@@ -933,7 +933,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
 			for (i = 0; groups[i]; i++)
 				ngroups++;

-		hwdev->groups = kcalloc(ngroups, sizeof(*groups), GFP_KERNEL);
+		hwdev->groups = kzalloc_objs(*groups, ngroups, GFP_KERNEL);
 		if (!hwdev->groups) {
 			err = -ENOMEM;
 			goto free_hwmon;
diff --git a/drivers/hwmon/i5k_amb.c b/drivers/hwmon/i5k_amb.c
index b22e0423e324..f3835606179c 100644
--- a/drivers/hwmon/i5k_amb.c
+++ b/drivers/hwmon/i5k_amb.c
@@ -494,7 +494,7 @@ static int i5k_amb_probe(struct platform_device *pdev)
 	struct resource *reso;
 	int i, res;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c
index daed437d34a4..e62e7bab0865 100644
--- a/drivers/hwmon/ibmaem.c
+++ b/drivers/hwmon/ibmaem.c
@@ -517,7 +517,7 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)
 	int i;
 	int res = -ENOMEM;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return res;
 	mutex_init(&data->lock);
@@ -657,7 +657,7 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,
 	int i;
 	int res = -ENOMEM;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return res;
 	mutex_init(&data->lock);
diff --git a/drivers/hwmon/ibmpex.c b/drivers/hwmon/ibmpex.c
index 228c5f6c6f38..331aa8159ab8 100644
--- a/drivers/hwmon/ibmpex.c
+++ b/drivers/hwmon/ibmpex.c
@@ -367,8 +367,8 @@ static int ibmpex_find_sensors(struct ibmpex_bmc_data *data)
 		return -ENOENT;
 	data->num_sensors = err;

-	data->sensors = kcalloc(data->num_sensors, sizeof(*data->sensors),
-				GFP_KERNEL);
+	data->sensors = kzalloc_objs(*data->sensors, data->num_sensors,
+				     GFP_KERNEL);
 	if (!data->sensors)
 		return -ENOMEM;

@@ -438,7 +438,7 @@ static void ibmpex_register_bmc(int iface, struct device *dev)
 	struct ibmpex_bmc_data *data;
 	int err;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return;

diff --git a/drivers/hwmon/sch56xx-common.c b/drivers/hwmon/sch56xx-common.c
index 98e075e54e9d..1b0442fe2bf3 100644
--- a/drivers/hwmon/sch56xx-common.c
+++ b/drivers/hwmon/sch56xx-common.c
@@ -330,7 +330,7 @@ struct regmap *devm_regmap_init_sch56xx(struct device *dev, struct mutex *lock,
 	if (config->reg_bits != 16 && config->val_bits != 8)
 		return ERR_PTR(-EOPNOTSUPP);

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/hwmon/via-cputemp.c b/drivers/hwmon/via-cputemp.c
index 823bff2871e1..72a4f514a78c 100644
--- a/drivers/hwmon/via-cputemp.c
+++ b/drivers/hwmon/via-cputemp.c
@@ -222,7 +222,7 @@ static int via_cputemp_online(unsigned int cpu)
 		goto exit;
 	}

-	pdev_entry = kzalloc(sizeof(struct pdev_entry), GFP_KERNEL);
+	pdev_entry = kzalloc_obj(struct pdev_entry, GFP_KERNEL);
 	if (!pdev_entry) {
 		err = -ENOMEM;
 		goto exit_device_put;
diff --git a/drivers/hwmon/w83793.c b/drivers/hwmon/w83793.c
index 67728f60333f..8081ef3b1592 100644
--- a/drivers/hwmon/w83793.c
+++ b/drivers/hwmon/w83793.c
@@ -1650,7 +1650,7 @@ static int w83793_probe(struct i2c_client *client)
 	int files_pwm = ARRAY_SIZE(w83793_left_pwm) / 5;
 	int files_temp = ARRAY_SIZE(w83793_temp) / 6;

-	data = kzalloc(sizeof(struct w83793_data), GFP_KERNEL);
+	data = kzalloc_obj(struct w83793_data, GFP_KERNEL);
 	if (!data) {
 		err = -ENOMEM;
 		goto exit;
diff --git a/drivers/hwtracing/coresight/coresight-catu.c b/drivers/hwtracing/coresight/coresight-catu.c
index 69b36bae97ab..4123d4e16bbe 100644
--- a/drivers/hwtracing/coresight/coresight-catu.c
+++ b/drivers/hwtracing/coresight/coresight-catu.c
@@ -337,7 +337,7 @@ static int catu_alloc_etr_buf(struct tmc_drvdata *tmc_drvdata,
 	csdev = tmc_etr_get_catu_device(tmc_drvdata);
 	if (!csdev)
 		return -ENODEV;
-	catu_buf = kzalloc(sizeof(*catu_buf), GFP_KERNEL);
+	catu_buf = kzalloc_obj(*catu_buf, GFP_KERNEL);
 	if (!catu_buf)
 		return -ENOMEM;

diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c
index c660cf8adb1c..b03d228f6bf7 100644
--- a/drivers/hwtracing/coresight/coresight-core.c
+++ b/drivers/hwtracing/coresight/coresight-core.c
@@ -821,7 +821,7 @@ static int _coresight_build_path(struct coresight_device *csdev,
 	if (ret)
 		return ret;

-	node = kzalloc(sizeof(struct coresight_node), GFP_KERNEL);
+	node = kzalloc_obj(struct coresight_node, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

@@ -840,7 +840,7 @@ struct coresight_path *coresight_build_path(struct coresight_device *source,
 	if (!sink)
 		return ERR_PTR(-EINVAL);

-	path = kzalloc(sizeof(struct coresight_path), GFP_KERNEL);
+	path = kzalloc_obj(struct coresight_path, GFP_KERNEL);
 	if (!path)
 		return ERR_PTR(-ENOMEM);

@@ -1327,7 +1327,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
 	struct coresight_device *csdev;
 	bool registered = false;

-	csdev = kzalloc(sizeof(*csdev), GFP_KERNEL);
+	csdev = kzalloc_obj(*csdev, GFP_KERNEL);
 	if (!csdev) {
 		ret = -ENOMEM;
 		goto err_out;
diff --git a/drivers/hwtracing/coresight/coresight-cti-platform.c b/drivers/hwtracing/coresight/coresight-cti-platform.c
index d0ae10bf6128..ecb0bdc2c3e6 100644
--- a/drivers/hwtracing/coresight/coresight-cti-platform.c
+++ b/drivers/hwtracing/coresight/coresight-cti-platform.c
@@ -325,7 +325,7 @@ static int cti_plat_process_filter_sigs(struct cti_drvdata *drvdata,
 	if (nr_filter_sigs > drvdata->config.nr_trig_max)
 		return -EINVAL;

-	tg = kzalloc(sizeof(*tg), GFP_KERNEL);
+	tg = kzalloc_obj(*tg, GFP_KERNEL);
 	if (!tg)
 		return -ENOMEM;

diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c
index 3c8a6f795094..01d4c422fed9 100644
--- a/drivers/hwtracing/coresight/coresight-etm-perf.c
+++ b/drivers/hwtracing/coresight/coresight-etm-perf.c
@@ -260,7 +260,7 @@ static void *alloc_event_data(int cpu)
 	struct etm_event_data *event_data;

 	/* First get memory for the session's data */
-	event_data = kzalloc(sizeof(struct etm_event_data), GFP_KERNEL);
+	event_data = kzalloc_obj(struct etm_event_data, GFP_KERNEL);
 	if (!event_data)
 		return NULL;

diff --git a/drivers/hwtracing/coresight/coresight-syscfg.c b/drivers/hwtracing/coresight/coresight-syscfg.c
index 6836b05986e8..de2f6947f521 100644
--- a/drivers/hwtracing/coresight/coresight-syscfg.c
+++ b/drivers/hwtracing/coresight/coresight-syscfg.c
@@ -756,7 +756,7 @@ static int cscfg_list_add_csdev(struct coresight_device *csdev,
 	struct cscfg_registered_csdev *csdev_item;

 	/* allocate the list entry structure */
-	csdev_item = kzalloc(sizeof(struct cscfg_registered_csdev), GFP_KERNEL);
+	csdev_item = kzalloc_obj(struct cscfg_registered_csdev, GFP_KERNEL);
 	if (!csdev_item)
 		return -ENOMEM;

@@ -1190,7 +1190,7 @@ static int cscfg_create_device(void)
 		goto create_dev_exit_unlock;
 	}

-	cscfg_mgr = kzalloc(sizeof(struct cscfg_manager), GFP_KERNEL);
+	cscfg_mgr = kzalloc_obj(struct cscfg_manager, GFP_KERNEL);
 	if (!cscfg_mgr)
 		goto create_dev_exit_unlock;

diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c
index cee82e52c4ea..7aca22d6e335 100644
--- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
+++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
@@ -204,12 +204,11 @@ static int tmc_pages_alloc(struct tmc_pages *tmc_pages,
 	struct device *real_dev = dev->parent;

 	nr_pages = tmc_pages->nr_pages;
-	tmc_pages->daddrs = kcalloc(nr_pages, sizeof(*tmc_pages->daddrs),
+	tmc_pages->daddrs = kzalloc_objs(*tmc_pages->daddrs, nr_pages,
 					 GFP_KERNEL);
 	if (!tmc_pages->daddrs)
 		return -ENOMEM;
-	tmc_pages->pages = kcalloc(nr_pages, sizeof(*tmc_pages->pages),
-					 GFP_KERNEL);
+	tmc_pages->pages = kzalloc_objs(*tmc_pages->pages, nr_pages, GFP_KERNEL);
 	if (!tmc_pages->pages) {
 		kfree(tmc_pages->daddrs);
 		tmc_pages->daddrs = NULL;
@@ -332,7 +331,7 @@ struct tmc_sg_table *tmc_alloc_sg_table(struct device *dev,
 	long rc;
 	struct tmc_sg_table *sg_table;

-	sg_table = kzalloc(sizeof(*sg_table), GFP_KERNEL);
+	sg_table = kzalloc_obj(*sg_table, GFP_KERNEL);
 	if (!sg_table)
 		return ERR_PTR(-ENOMEM);
 	sg_table->data_pages.nr_pages = nr_dpages;
@@ -575,7 +574,7 @@ tmc_init_etr_sg_table(struct device *dev, int node,
 	struct tmc_sg_table *sg_table;
 	struct etr_sg_table *etr_table;

-	etr_table = kzalloc(sizeof(*etr_table), GFP_KERNEL);
+	etr_table = kzalloc_obj(*etr_table, GFP_KERNEL);
 	if (!etr_table)
 		return ERR_PTR(-ENOMEM);
 	nr_entries = tmc_etr_sg_table_entries(nr_dpages);
@@ -612,7 +611,7 @@ static int tmc_etr_alloc_flat_buf(struct tmc_drvdata *drvdata,
 	if (pages)
 		return -EINVAL;

-	flat_buf = kzalloc(sizeof(*flat_buf), GFP_KERNEL);
+	flat_buf = kzalloc_obj(*flat_buf, GFP_KERNEL);
 	if (!flat_buf)
 		return -ENOMEM;

@@ -710,7 +709,7 @@ static int tmc_etr_alloc_resrv_buf(struct tmc_drvdata *drvdata,
 	if (pages)
 		return -EINVAL;

-	resrv_buf = kzalloc(sizeof(*resrv_buf), GFP_KERNEL);
+	resrv_buf = kzalloc_obj(*resrv_buf, GFP_KERNEL);
 	if (!resrv_buf)
 		return -ENOMEM;

@@ -942,7 +941,7 @@ static struct etr_buf *tmc_alloc_etr_buf(struct tmc_drvdata *drvdata,
 	struct device *dev = &drvdata->csdev->dev;

 	get_etr_buf_hw(dev, &buf_hw);
-	etr_buf = kzalloc(sizeof(*etr_buf), GFP_KERNEL);
+	etr_buf = kzalloc_obj(*etr_buf, GFP_KERNEL);
 	if (!etr_buf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/hwtracing/coresight/coresight-trbe.c b/drivers/hwtracing/coresight/coresight-trbe.c
index 474861903f6c..257dd5689c81 100644
--- a/drivers/hwtracing/coresight/coresight-trbe.c
+++ b/drivers/hwtracing/coresight/coresight-trbe.c
@@ -751,7 +751,7 @@ static void *arm_trbe_alloc_buffer(struct coresight_device *csdev,
 	if (!buf)
 		return NULL;

-	pglist = kcalloc(nr_pages, sizeof(*pglist), GFP_KERNEL);
+	pglist = kzalloc_objs(*pglist, nr_pages, GFP_KERNEL);
 	if (!pglist) {
 		kfree(buf);
 		return NULL;
diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_th/core.c
index 2482ecf5776b..641efa0016e0 100644
--- a/drivers/hwtracing/intel_th/core.c
+++ b/drivers/hwtracing/intel_th/core.c
@@ -891,7 +891,7 @@ intel_th_alloc(struct device *dev, const struct intel_th_drvdata *drvdata,
 	int err, r, nr_mmios = 0;
 	struct intel_th *th;

-	th = kzalloc(sizeof(*th), GFP_KERNEL);
+	th = kzalloc_obj(*th, GFP_KERNEL);
 	if (!th)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/hwtracing/intel_th/msu-sink.c b/drivers/hwtracing/intel_th/msu-sink.c
index 256ce3260ad9..d3373be9109b 100644
--- a/drivers/hwtracing/intel_th/msu-sink.c
+++ b/drivers/hwtracing/intel_th/msu-sink.c
@@ -23,7 +23,7 @@ static void *msu_sink_assign(struct device *dev, int *mode)
 {
 	struct msu_sink_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;

diff --git a/drivers/hwtracing/intel_th/msu.c b/drivers/hwtracing/intel_th/msu.c
index f3a13b300835..33e16c40f0ec 100644
--- a/drivers/hwtracing/intel_th/msu.c
+++ b/drivers/hwtracing/intel_th/msu.c
@@ -236,7 +236,7 @@ int intel_th_msu_buffer_register(const struct msu_buffer *mbuf,
 	struct msu_buffer_entry *mbe;
 	int ret = 0;

-	mbe = kzalloc(sizeof(*mbe), GFP_KERNEL);
+	mbe = kzalloc_obj(*mbe, GFP_KERNEL);
 	if (!mbe)
 		return -ENOMEM;

@@ -450,7 +450,7 @@ static struct msc_iter *msc_iter_install(struct msc *msc)
 {
 	struct msc_iter *iter;

-	iter = kzalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kzalloc_obj(*iter, GFP_KERNEL);
 	if (!iter)
 		return ERR_PTR(-ENOMEM);

@@ -1105,7 +1105,7 @@ static int msc_buffer_win_alloc(struct msc *msc, unsigned int nr_blocks)
 	if (!nr_blocks)
 		return 0;

-	win = kzalloc(sizeof(*win), GFP_KERNEL);
+	win = kzalloc_obj(*win, GFP_KERNEL);
 	if (!win)
 		return -ENOMEM;

diff --git a/drivers/hwtracing/ptt/hisi_ptt.c b/drivers/hwtracing/ptt/hisi_ptt.c
index 3090479a2979..3d7a80dacce5 100644
--- a/drivers/hwtracing/ptt/hisi_ptt.c
+++ b/drivers/hwtracing/ptt/hisi_ptt.c
@@ -384,7 +384,7 @@ hisi_ptt_alloc_add_filter(struct hisi_ptt *hisi_ptt, u16 devid, bool is_port)
 		return NULL;
 	}

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (!filter) {
 		pci_err(hisi_ptt->pdev, "failed to add filter for %s\n",
 			filter_name);
@@ -1043,11 +1043,11 @@ static void *hisi_ptt_pmu_setup_aux(struct perf_event *event, void **pages,
 	if (nr_pages < HISI_PTT_TRACE_TOTAL_BUF_SIZE / PAGE_SIZE)
 		return NULL;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return NULL;

-	pagelist = kcalloc(nr_pages, sizeof(*pagelist), GFP_KERNEL);
+	pagelist = kzalloc_objs(*pagelist, nr_pages, GFP_KERNEL);
 	if (!pagelist)
 		goto err;

diff --git a/drivers/hwtracing/stm/core.c b/drivers/hwtracing/stm/core.c
index cdba4e875b28..b3df3104aa3d 100644
--- a/drivers/hwtracing/stm/core.c
+++ b/drivers/hwtracing/stm/core.c
@@ -160,9 +160,9 @@ static int stp_master_alloc(struct stm_device *stm, unsigned int idx)
 {
 	struct stp_master *master;

-	master = kzalloc(struct_size(master, chan_map,
-				     BITS_TO_LONGS(stm->data->sw_nchannels)),
-			 GFP_ATOMIC);
+	master = kzalloc_flex(*master, chan_map,
+			      BITS_TO_LONGS(stm->data->sw_nchannels),
+			      GFP_ATOMIC);
 	if (!master)
 		return -ENOMEM;

@@ -406,7 +406,7 @@ int stm_register_protocol(const struct stm_protocol_driver *pdrv)
 		goto unlock;
 	}

-	pe = kzalloc(sizeof(*pe), GFP_KERNEL);
+	pe = kzalloc_obj(*pe, GFP_KERNEL);
 	if (!pe)
 		goto unlock;

@@ -493,7 +493,7 @@ static int stm_char_open(struct inode *inode, struct file *file)
 	if (!dev)
 		return -ENODEV;

-	stmf = kzalloc(sizeof(*stmf), GFP_KERNEL);
+	stmf = kzalloc_obj(*stmf, GFP_KERNEL);
 	if (!stmf)
 		goto err_put_device;

@@ -1229,7 +1229,7 @@ int stm_source_register_device(struct device *parent,
 	if (!stm_core_up)
 		return -EPROBE_DEFER;

-	src = kzalloc(sizeof(*src), GFP_KERNEL);
+	src = kzalloc_obj(*src, GFP_KERNEL);
 	if (!src)
 		return -ENOMEM;

diff --git a/drivers/hwtracing/stm/p_sys-t.c b/drivers/hwtracing/stm/p_sys-t.c
index 1e75aa0025a3..bcbbc4d92325 100644
--- a/drivers/hwtracing/stm/p_sys-t.c
+++ b/drivers/hwtracing/stm/p_sys-t.c
@@ -128,7 +128,7 @@ static int sys_t_output_open(void *priv, struct stm_output *output)
 	struct sys_t_policy_node *pn = priv;
 	struct sys_t_output *opriv;

-	opriv = kzalloc(sizeof(*opriv), GFP_ATOMIC);
+	opriv = kzalloc_obj(*opriv, GFP_ATOMIC);
 	if (!opriv)
 		return -ENOMEM;

diff --git a/drivers/hwtracing/stm/policy.c b/drivers/hwtracing/stm/policy.c
index 42103c3a177f..f0f8876008ed 100644
--- a/drivers/hwtracing/stm/policy.c
+++ b/drivers/hwtracing/stm/policy.c
@@ -437,7 +437,7 @@ stp_policy_make(struct config_group *group, const char *name)
 		goto unlock_policy;
 	}

-	stm->policy = kzalloc(sizeof(*stm->policy), GFP_KERNEL);
+	stm->policy = kzalloc_obj(*stm->policy, GFP_KERNEL);
 	if (!stm->policy) {
 		ret = ERR_PTR(-ENOMEM);
 		goto unlock_policy;
diff --git a/drivers/i2c/busses/i2c-cp2615.c b/drivers/i2c/busses/i2c-cp2615.c
index e7720ea4045e..b9a86eb10cc2 100644
--- a/drivers/i2c/busses/i2c-cp2615.c
+++ b/drivers/i2c/busses/i2c-cp2615.c
@@ -124,7 +124,7 @@ static int cp2615_check_status(enum cp2615_i2c_status status)
 static int
 cp2615_i2c_send(struct usb_interface *usbif, struct cp2615_i2c_transfer *i2c_w)
 {
-	struct cp2615_iop_msg *msg = kzalloc(sizeof(*msg), GFP_KERNEL);
+	struct cp2615_iop_msg *msg = kzalloc_obj(*msg, GFP_KERNEL);
 	struct usb_device *usbdev = interface_to_usbdev(usbif);
 	int res = cp2615_init_i2c_msg(msg, i2c_w);

@@ -143,7 +143,7 @@ cp2615_i2c_recv(struct usb_interface *usbif, unsigned char tag, void *buf)
 	struct cp2615_i2c_transfer_result *i2c_r;
 	int res;

-	msg = kzalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kzalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -171,7 +171,7 @@ cp2615_i2c_recv(struct usb_interface *usbif, unsigned char tag, void *buf)
 /* Checks if the IOP is functional by querying the part's ID */
 static int cp2615_check_iop(struct usb_interface *usbif)
 {
-	struct cp2615_iop_msg *msg = kzalloc(sizeof(*msg), GFP_KERNEL);
+	struct cp2615_iop_msg *msg = kzalloc_obj(*msg, GFP_KERNEL);
 	struct cp2615_iop_accessory_info *info = (struct cp2615_iop_accessory_info *)&msg->data;
 	struct usb_device *usbdev = interface_to_usbdev(usbif);
 	int res = cp2615_init_iop_msg(msg, iop_GetAccessoryInfo, NULL, 0);
diff --git a/drivers/i2c/busses/i2c-cpm.c b/drivers/i2c/busses/i2c-cpm.c
index 260e1643c2cc..dbe90974167a 100644
--- a/drivers/i2c/busses/i2c-cpm.c
+++ b/drivers/i2c/busses/i2c-cpm.c
@@ -636,7 +636,7 @@ static int cpm_i2c_probe(struct platform_device *ofdev)
 	struct cpm_i2c *cpm;
 	const u32 *data;

-	cpm = kzalloc(sizeof(struct cpm_i2c), GFP_KERNEL);
+	cpm = kzalloc_obj(struct cpm_i2c, GFP_KERNEL);
 	if (!cpm)
 		return -ENOMEM;

diff --git a/drivers/i2c/busses/i2c-designware-amdpsp.c b/drivers/i2c/busses/i2c-designware-amdpsp.c
index 404571ad61a8..c4d3b0ee6f4d 100644
--- a/drivers/i2c/busses/i2c-designware-amdpsp.c
+++ b/drivers/i2c/busses/i2c-designware-amdpsp.c
@@ -93,7 +93,7 @@ static int psp_send_i2c_req(enum psp_i2c_req_type i2c_req_type)
 	int status, ret;

 	/* Allocate command-response buffer */
-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/i2c/busses/i2c-diolan-u2c.c b/drivers/i2c/busses/i2c-diolan-u2c.c
index c02459405b26..ba0a2e03f490 100644
--- a/drivers/i2c/busses/i2c-diolan-u2c.c
+++ b/drivers/i2c/busses/i2c-diolan-u2c.c
@@ -445,7 +445,7 @@ static int diolan_u2c_probe(struct usb_interface *interface,
 		return -ENODEV;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		ret = -ENOMEM;
 		goto error;
diff --git a/drivers/i2c/busses/i2c-eg20t.c b/drivers/i2c/busses/i2c-eg20t.c
index 27ea3c130a16..65ac713e8a84 100644
--- a/drivers/i2c/busses/i2c-eg20t.c
+++ b/drivers/i2c/busses/i2c-eg20t.c
@@ -720,7 +720,7 @@ static int pch_i2c_probe(struct pci_dev *pdev,

 	pch_pci_dbg(pdev, "Entered.\n");

-	adap_info = kzalloc((sizeof(struct adapter_info)), GFP_KERNEL);
+	adap_info = kzalloc_obj(struct adapter_info, GFP_KERNEL);
 	if (adap_info == NULL)
 		return -ENOMEM;

diff --git a/drivers/i2c/busses/i2c-fsi.c b/drivers/i2c/busses/i2c-fsi.c
index 3a7e577e6eac..77b4129e1ee6 100644
--- a/drivers/i2c/busses/i2c-fsi.c
+++ b/drivers/i2c/busses/i2c-fsi.c
@@ -707,7 +707,7 @@ static int fsi_i2c_probe(struct fsi_device *fsi_dev)
 		if (!of_device_is_available(np))
 			continue;

-		port = kzalloc(sizeof(*port), GFP_KERNEL);
+		port = kzalloc_obj(*port, GFP_KERNEL);
 		if (!port) {
 			of_node_put(np);
 			break;
diff --git a/drivers/i2c/busses/i2c-highlander.c b/drivers/i2c/busses/i2c-highlander.c
index 78c5845e0877..ddea5847f0c5 100644
--- a/drivers/i2c/busses/i2c-highlander.c
+++ b/drivers/i2c/busses/i2c-highlander.c
@@ -365,7 +365,7 @@ static int highlander_i2c_probe(struct platform_device *pdev)
 		return -ENODEV;
 	}

-	dev = kzalloc(sizeof(struct highlander_i2c_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct highlander_i2c_dev, GFP_KERNEL);
 	if (unlikely(!dev))
 		return -ENOMEM;

diff --git a/drivers/i2c/busses/i2c-ibm_iic.c b/drivers/i2c/busses/i2c-ibm_iic.c
index 6bf45d752ff9..ca2534bba932 100644
--- a/drivers/i2c/busses/i2c-ibm_iic.c
+++ b/drivers/i2c/busses/i2c-ibm_iic.c
@@ -687,7 +687,7 @@ static int iic_probe(struct platform_device *ofdev)
 	const u32 *freq;
 	int ret;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/i2c/busses/i2c-iop3xx.c b/drivers/i2c/busses/i2c-iop3xx.c
index ce5ca5b90b39..f5c1d2191c98 100644
--- a/drivers/i2c/busses/i2c-iop3xx.c
+++ b/drivers/i2c/busses/i2c-iop3xx.c
@@ -415,13 +415,13 @@ iop3xx_i2c_probe(struct platform_device *pdev)
 	struct i2c_adapter *new_adapter;
 	struct i2c_algo_iop3xx_data *adapter_data;

-	new_adapter = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
+	new_adapter = kzalloc_obj(struct i2c_adapter, GFP_KERNEL);
 	if (!new_adapter) {
 		ret = -ENOMEM;
 		goto out;
 	}

-	adapter_data = kzalloc(sizeof(struct i2c_algo_iop3xx_data), GFP_KERNEL);
+	adapter_data = kzalloc_obj(struct i2c_algo_iop3xx_data, GFP_KERNEL);
 	if (!adapter_data) {
 		ret = -ENOMEM;
 		goto free_adapter;
diff --git a/drivers/i2c/busses/i2c-nforce2.c b/drivers/i2c/busses/i2c-nforce2.c
index d58a308582e4..b673206313fc 100644
--- a/drivers/i2c/busses/i2c-nforce2.c
+++ b/drivers/i2c/busses/i2c-nforce2.c
@@ -359,7 +359,7 @@ static int nforce2_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	int res1, res2;

 	/* we support 2 SMBus adapters */
-	smbuses = kcalloc(2, sizeof(struct nforce2_smbus), GFP_KERNEL);
+	smbuses = kzalloc_objs(struct nforce2_smbus, 2, GFP_KERNEL);
 	if (!smbuses)
 		return -ENOMEM;
 	pci_set_drvdata(dev, smbuses);
diff --git a/drivers/i2c/busses/i2c-parport.c b/drivers/i2c/busses/i2c-parport.c
index 3249bbd5eb43..5ae1c7f8b9b5 100644
--- a/drivers/i2c/busses/i2c-parport.c
+++ b/drivers/i2c/busses/i2c-parport.c
@@ -288,7 +288,7 @@ static void i2c_parport_attach(struct parport *port)
 		return;
 	}

-	adapter = kzalloc(sizeof(struct i2c_par), GFP_KERNEL);
+	adapter = kzalloc_obj(struct i2c_par, GFP_KERNEL);
 	if (!adapter)
 		return;
 	memset(&i2c_parport_cb, 0, sizeof(i2c_parport_cb));
diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
index ac3bb550303f..e159a9aed41f 100644
--- a/drivers/i2c/busses/i2c-piix4.c
+++ b/drivers/i2c/busses/i2c-piix4.c
@@ -919,7 +919,7 @@ static int piix4_add_adapter(struct pci_dev *dev, unsigned short smba,
 	struct i2c_piix4_adapdata *adapdata;
 	int retval;

-	adap = kzalloc(sizeof(*adap), GFP_KERNEL);
+	adap = kzalloc_obj(*adap, GFP_KERNEL);
 	if (adap == NULL) {
 		release_region(smba, SMBIOSIZE);
 		return -ENOMEM;
@@ -930,7 +930,7 @@ static int piix4_add_adapter(struct pci_dev *dev, unsigned short smba,
 	adap->algo = sb800_main ? &piix4_smbus_algorithm_sb800
 				: &smbus_algorithm;

-	adapdata = kzalloc(sizeof(*adapdata), GFP_KERNEL);
+	adapdata = kzalloc_obj(*adapdata, GFP_KERNEL);
 	if (adapdata == NULL) {
 		kfree(adap);
 		release_region(smba, SMBIOSIZE);
diff --git a/drivers/i2c/busses/i2c-pxa-pci.c b/drivers/i2c/busses/i2c-pxa-pci.c
index af2094720a4d..c80a054fc4e9 100644
--- a/drivers/i2c/busses/i2c-pxa-pci.c
+++ b/drivers/i2c/busses/i2c-pxa-pci.c
@@ -112,7 +112,7 @@ static int ce4100_i2c_probe(struct pci_dev *dev,
 		dev_err(&dev->dev, "Missing device tree node.\n");
 		return -EINVAL;
 	}
-	sds = kzalloc(sizeof(*sds), GFP_KERNEL);
+	sds = kzalloc_obj(*sds, GFP_KERNEL);
 	if (!sds)
 		return -ENOMEM;

diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
index ae609bdd2ec4..9958920f635e 100644
--- a/drivers/i2c/busses/i2c-qcom-geni.c
+++ b/drivers/i2c/busses/i2c-qcom-geni.c
@@ -799,7 +799,8 @@ static int geni_i2c_gpi_xfer(struct geni_i2c_dev *gi2c, struct i2c_msg msgs[], i

 	if (gi2c->is_tx_multi_desc_xfer) {
 		tx_multi_xfer->dma_buf = kcalloc(num, sizeof(void *), GFP_KERNEL);
-		tx_multi_xfer->dma_addr = kcalloc(num, sizeof(dma_addr_t), GFP_KERNEL);
+		tx_multi_xfer->dma_addr = kzalloc_objs(dma_addr_t, num,
+						       GFP_KERNEL);
 		if (!tx_multi_xfer->dma_buf || !tx_multi_xfer->dma_addr) {
 			ret = -ENOMEM;
 			goto err;
diff --git a/drivers/i2c/busses/i2c-scmi.c b/drivers/i2c/busses/i2c-scmi.c
index 10a5146b3aa5..c10ad0677949 100644
--- a/drivers/i2c/busses/i2c-scmi.c
+++ b/drivers/i2c/busses/i2c-scmi.c
@@ -359,7 +359,7 @@ static int smbus_cmi_probe(struct platform_device *device)
 	struct acpi_smbus_cmi *smbus_cmi;
 	int ret;

-	smbus_cmi = kzalloc(sizeof(struct acpi_smbus_cmi), GFP_KERNEL);
+	smbus_cmi = kzalloc_obj(struct acpi_smbus_cmi, GFP_KERNEL);
 	if (!smbus_cmi)
 		return -ENOMEM;

diff --git a/drivers/i2c/busses/i2c-sh7760.c b/drivers/i2c/busses/i2c-sh7760.c
index 43f33988b98f..dcdf56398f70 100644
--- a/drivers/i2c/busses/i2c-sh7760.c
+++ b/drivers/i2c/busses/i2c-sh7760.c
@@ -443,7 +443,7 @@ static int sh7760_i2c_probe(struct platform_device *pdev)
 		goto out0;
 	}

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id) {
 		ret = -ENOMEM;
 		goto out0;
diff --git a/drivers/i2c/busses/i2c-simtec.c b/drivers/i2c/busses/i2c-simtec.c
index d90606048611..9572357cc177 100644
--- a/drivers/i2c/busses/i2c-simtec.c
+++ b/drivers/i2c/busses/i2c-simtec.c
@@ -64,7 +64,7 @@ static int simtec_i2c_probe(struct platform_device *dev)
 	int size;
 	int ret;

-	pd = kzalloc(sizeof(struct simtec_i2c_data), GFP_KERNEL);
+	pd = kzalloc_obj(struct simtec_i2c_data, GFP_KERNEL);
 	if (pd == NULL)
 		return -ENOMEM;

diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c
index dc69ed934ec8..e2388862f29e 100644
--- a/drivers/i2c/busses/i2c-stm32f7.c
+++ b/drivers/i2c/busses/i2c-stm32f7.c
@@ -544,7 +544,7 @@ static int stm32f7_i2c_compute_timing(struct stm32f7_i2c_dev *i2c_dev,
 				if (((sdadel >= sdadel_min) &&
 				     (sdadel <= sdadel_max)) &&
 				    (p != p_prev)) {
-					v = kmalloc(sizeof(*v), GFP_KERNEL);
+					v = kmalloc_obj(*v, GFP_KERNEL);
 					if (!v) {
 						ret = -ENOMEM;
 						goto exit;
diff --git a/drivers/i2c/busses/i2c-taos-evm.c b/drivers/i2c/busses/i2c-taos-evm.c
index cb97f72291bc..e8a89b7d2174 100644
--- a/drivers/i2c/busses/i2c-taos-evm.c
+++ b/drivers/i2c/busses/i2c-taos-evm.c
@@ -203,7 +203,7 @@ static int taos_connect(struct serio *serio, struct serio_driver *drv)
 	char *name;
 	int err;

-	taos = kzalloc(sizeof(struct taos_data), GFP_KERNEL);
+	taos = kzalloc_obj(struct taos_data, GFP_KERNEL);
 	if (!taos) {
 		err = -ENOMEM;
 		goto exit;
diff --git a/drivers/i2c/busses/i2c-tiny-usb.c b/drivers/i2c/busses/i2c-tiny-usb.c
index 57dfe5f1a7d9..ab021042901b 100644
--- a/drivers/i2c/busses/i2c-tiny-usb.c
+++ b/drivers/i2c/busses/i2c-tiny-usb.c
@@ -55,7 +55,7 @@ static int usb_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
 	struct i2c_msg *pmsg;
 	int i, ret;

-	pstatus = kmalloc(sizeof(*pstatus), GFP_KERNEL);
+	pstatus = kmalloc_obj(*pstatus, GFP_KERNEL);
 	if (!pstatus)
 		return -ENOMEM;

@@ -123,7 +123,7 @@ static u32 usb_func(struct i2c_adapter *adapter)
 	__le32 *pfunc;
 	u32 ret;

-	pfunc = kmalloc(sizeof(*pfunc), GFP_KERNEL);
+	pfunc = kmalloc_obj(*pfunc, GFP_KERNEL);

 	/* get functionality from adapter */
 	if (!pfunc || usb_read(adapter, CMD_GET_FUNC, 0, 0, pfunc,
@@ -233,7 +233,7 @@ static int i2c_tiny_usb_probe(struct usb_interface *interface,
 	dev_dbg(&interface->dev, "probing usb device\n");

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto error;

diff --git a/drivers/i2c/busses/i2c-virtio.c b/drivers/i2c/busses/i2c-virtio.c
index af1381949f50..01ef98e90243 100644
--- a/drivers/i2c/busses/i2c-virtio.c
+++ b/drivers/i2c/busses/i2c-virtio.c
@@ -139,7 +139,7 @@ static int virtio_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
 	struct virtio_i2c_req *reqs;
 	int count;

-	reqs = kcalloc(num, sizeof(*reqs), GFP_KERNEL);
+	reqs = kzalloc_objs(*reqs, num, GFP_KERNEL);
 	if (!reqs)
 		return -ENOMEM;

diff --git a/drivers/i2c/busses/scx200_acb.c b/drivers/i2c/busses/scx200_acb.c
index 06cf221557f2..1c76aef0a423 100644
--- a/drivers/i2c/busses/scx200_acb.c
+++ b/drivers/i2c/busses/scx200_acb.c
@@ -418,7 +418,7 @@ static struct scx200_acb_iface *scx200_create_iface(const char *text,
 	struct scx200_acb_iface *iface;
 	struct i2c_adapter *adapter;

-	iface = kzalloc(sizeof(*iface), GFP_KERNEL);
+	iface = kzalloc_obj(*iface, GFP_KERNEL);
 	if (!iface)
 		return NULL;

diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c
index dd194476b118..8e3fe365caaf 100644
--- a/drivers/i2c/i2c-atr.c
+++ b/drivers/i2c/i2c-atr.c
@@ -137,7 +137,7 @@ static struct i2c_atr_alias_pool *i2c_atr_alloc_alias_pool(size_t num_aliases, b
 	struct i2c_atr_alias_pool *alias_pool;
 	int ret;

-	alias_pool = kzalloc(sizeof(*alias_pool), GFP_KERNEL);
+	alias_pool = kzalloc_obj(*alias_pool, GFP_KERNEL);
 	if (!alias_pool)
 		return ERR_PTR(-ENOMEM);

@@ -183,7 +183,7 @@ static struct i2c_atr_alias_pair *i2c_atr_create_c2a(struct i2c_atr_chan *chan,

 	lockdep_assert_held(&chan->alias_pairs_lock);

-	c2a = kzalloc(sizeof(*c2a), GFP_KERNEL);
+	c2a = kzalloc_obj(*c2a, GFP_KERNEL);
 	if (!c2a)
 		return NULL;

@@ -724,7 +724,7 @@ struct i2c_atr *i2c_atr_new(struct i2c_adapter *parent, struct device *dev,
 	if (!ops || !ops->attach_addr || !ops->detach_addr)
 		return ERR_PTR(-EINVAL);

-	atr = kzalloc(struct_size(atr, adapter, max_adapters), GFP_KERNEL);
+	atr = kzalloc_flex(*atr, adapter, max_adapters, GFP_KERNEL);
 	if (!atr)
 		return ERR_PTR(-ENOMEM);

@@ -800,7 +800,7 @@ int i2c_atr_add_adapter(struct i2c_atr *atr, struct i2c_atr_adap_desc *desc)
 		return -EEXIST;
 	}

-	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
+	chan = kzalloc_obj(*chan, GFP_KERNEL);
 	if (!chan)
 		return -ENOMEM;

diff --git a/drivers/i2c/i2c-boardinfo.c b/drivers/i2c/i2c-boardinfo.c
index 4df8ad092df3..31fcc051bf20 100644
--- a/drivers/i2c/i2c-boardinfo.c
+++ b/drivers/i2c/i2c-boardinfo.c
@@ -61,7 +61,7 @@ int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsig
 	for (status = 0; len; len--, info++) {
 		struct i2c_devinfo	*devinfo;

-		devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL);
+		devinfo = kzalloc_obj(*devinfo, GFP_KERNEL);
 		if (!devinfo) {
 			pr_debug("i2c-core: can't register boardinfo!\n");
 			status = -ENOMEM;
diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c
index ed90858a27b7..5b16d76a5bc2 100644
--- a/drivers/i2c/i2c-core-acpi.c
+++ b/drivers/i2c/i2c-core-acpi.c
@@ -683,7 +683,7 @@ i2c_acpi_space_handler(u32 function, acpi_physical_address command,
 	if (ACPI_FAILURE(ret))
 		return ret;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client) {
 		ret = AE_NO_MEMORY;
 		goto err;
@@ -793,8 +793,7 @@ int i2c_acpi_install_space_handler(struct i2c_adapter *adapter)
 	if (!handle)
 		return -ENODEV;

-	data = kzalloc(sizeof(struct i2c_acpi_handler_data),
-			    GFP_KERNEL);
+	data = kzalloc_obj(struct i2c_acpi_handler_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index f0fb0cfd56e0..91b388070525 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -964,7 +964,7 @@ i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *inf
 	bool need_put = false;
 	int status;

-	client = kzalloc(sizeof *client, GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return ERR_PTR(-ENOMEM);

@@ -2529,7 +2529,7 @@ static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver)
 		return 0;

 	/* Set up a temporary client to help detect callback */
-	temp_client = kzalloc(sizeof(*temp_client), GFP_KERNEL);
+	temp_client = kzalloc_obj(*temp_client, GFP_KERNEL);
 	if (!temp_client)
 		return -ENOMEM;

diff --git a/drivers/i2c/i2c-core-of-prober.c b/drivers/i2c/i2c-core-of-prober.c
index 0a66267e4836..8c820d70846a 100644
--- a/drivers/i2c/i2c-core-of-prober.c
+++ b/drivers/i2c/i2c-core-of-prober.c
@@ -63,7 +63,7 @@ static int i2c_of_probe_enable_node(struct device *dev, struct device_node *node

 	dev_dbg(dev, "Enabling %pOF\n", node);

-	struct of_changeset *ocs __free(kfree) = kzalloc(sizeof(*ocs), GFP_KERNEL);
+	struct of_changeset *ocs __free(kfree) = kzalloc_obj(*ocs, GFP_KERNEL);
 	if (!ocs)
 		return -ENOMEM;

diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c
index e9577f920286..e4ac9f2df8d5 100644
--- a/drivers/i2c/i2c-dev.c
+++ b/drivers/i2c/i2c-dev.c
@@ -74,7 +74,7 @@ static struct i2c_dev *get_free_i2c_dev(struct i2c_adapter *adap)
 		return ERR_PTR(-ENODEV);
 	}

-	i2c_dev = kzalloc(sizeof(*i2c_dev), GFP_KERNEL);
+	i2c_dev = kzalloc_obj(*i2c_dev, GFP_KERNEL);
 	if (!i2c_dev)
 		return ERR_PTR(-ENOMEM);
 	i2c_dev->adap = adap;
@@ -552,8 +552,8 @@ static long compat_i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned lo
 		if (rdwr_arg.nmsgs > I2C_RDWR_IOCTL_MAX_MSGS)
 			return -EINVAL;

-		rdwr_pa = kmalloc_array(rdwr_arg.nmsgs, sizeof(struct i2c_msg),
-				      GFP_KERNEL);
+		rdwr_pa = kmalloc_objs(struct i2c_msg, rdwr_arg.nmsgs,
+				       GFP_KERNEL);
 		if (!rdwr_pa)
 			return -ENOMEM;

@@ -612,7 +612,7 @@ static int i2cdev_open(struct inode *inode, struct file *file)
 	 * or I2C core code!!  It just holds private copies of addressing
 	 * information and maybe a PEC flag.
 	 */
-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client) {
 		i2c_put_adapter(adap);
 		return -ENOMEM;
diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c
index d59644e50f14..2e7b4073a4df 100644
--- a/drivers/i2c/i2c-mux.c
+++ b/drivers/i2c/i2c-mux.c
@@ -277,7 +277,7 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc,
 		return -EINVAL;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/i2c/i2c-smbus.c b/drivers/i2c/i2c-smbus.c
index 0316b347f9e7..14e45590e97e 100644
--- a/drivers/i2c/i2c-smbus.c
+++ b/drivers/i2c/i2c-smbus.c
@@ -319,8 +319,7 @@ struct i2c_client *i2c_new_slave_host_notify_device(struct i2c_adapter *adapter)
 	struct i2c_client *client;
 	int ret;

-	status = kzalloc(sizeof(struct i2c_slave_host_notify_status),
-			 GFP_KERNEL);
+	status = kzalloc_obj(struct i2c_slave_host_notify_status, GFP_KERNEL);
 	if (!status)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/i2c/i2c-stub.c b/drivers/i2c/i2c-stub.c
index 09e7b7bf4c5f..1d7d105c5643 100644
--- a/drivers/i2c/i2c-stub.c
+++ b/drivers/i2c/i2c-stub.c
@@ -372,8 +372,7 @@ static int __init i2c_stub_init(void)

 	/* Allocate memory for all chips at once */
 	stub_chips_nr = i;
-	stub_chips = kcalloc(stub_chips_nr, sizeof(struct stub_chip),
-			     GFP_KERNEL);
+	stub_chips = kzalloc_objs(struct stub_chip, stub_chips_nr, GFP_KERNEL);
 	if (!stub_chips)
 		return -ENOMEM;

diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index 0eae19b3823d..161eab16d17e 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -858,7 +858,7 @@ i3c_master_alloc_i2c_dev(struct i3c_master_controller *master,
 {
 	struct i2c_dev_desc *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

@@ -983,7 +983,7 @@ i3c_master_alloc_i3c_dev(struct i3c_master_controller *master,
 {
 	struct i3c_dev_desc *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

@@ -1742,7 +1742,7 @@ i3c_master_register_new_i3c_devs(struct i3c_master_controller *master)
 		if (desc->dev || !desc->info.dyn_addr || desc == master->this)
 			continue;

-		desc->dev = kzalloc(sizeof(*desc->dev), GFP_KERNEL);
+		desc->dev = kzalloc_obj(*desc->dev, GFP_KERNEL);
 		if (!desc->dev)
 			continue;

@@ -1852,7 +1852,8 @@ struct i3c_dma *i3c_master_dma_map_single(struct device *dev, void *buf,
 	void *bounce __free(kfree) = NULL;
 	void *dma_buf = buf;

-	struct i3c_dma *dma_xfer __free(kfree) = kzalloc(sizeof(*dma_xfer), GFP_KERNEL);
+	struct i3c_dma *dma_xfer __free(kfree) = kzalloc_obj(*dma_xfer,
+							     GFP_KERNEL);
 	if (!dma_xfer)
 		return NULL;

@@ -2847,7 +2848,7 @@ i3c_generic_ibi_alloc_pool(struct i3c_dev_desc *dev,
 	unsigned int i;
 	int ret;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(-ENOMEM);

@@ -2855,7 +2856,7 @@ i3c_generic_ibi_alloc_pool(struct i3c_dev_desc *dev,
 	INIT_LIST_HEAD(&pool->free_slots);
 	INIT_LIST_HEAD(&pool->pending);

-	pool->slots = kcalloc(req->num_slots, sizeof(*slot), GFP_KERNEL);
+	pool->slots = kzalloc_objs(*slot, req->num_slots, GFP_KERNEL);
 	if (!pool->slots) {
 		ret = -ENOMEM;
 		goto err_free_pool;
@@ -3218,7 +3219,7 @@ int i3c_dev_request_ibi_locked(struct i3c_dev_desc *dev,
 	if (dev->ibi)
 		return -EBUSY;

-	ibi = kzalloc(sizeof(*ibi), GFP_KERNEL);
+	ibi = kzalloc_obj(*ibi, GFP_KERNEL);
 	if (!ibi)
 		return -ENOMEM;

diff --git a/drivers/i3c/master/adi-i3c-master.c b/drivers/i3c/master/adi-i3c-master.c
index 6380a38e6d29..e60dc306a03e 100644
--- a/drivers/i3c/master/adi-i3c-master.c
+++ b/drivers/i3c/master/adi-i3c-master.c
@@ -187,7 +187,7 @@ static struct adi_i3c_xfer *adi_i3c_master_alloc_xfer(struct adi_i3c_master *mas
 {
 	struct adi_i3c_xfer *xfer;

-	xfer = kzalloc(struct_size(xfer, cmds, ncmds), GFP_KERNEL);
+	xfer = kzalloc_flex(*xfer, cmds, ncmds, GFP_KERNEL);
 	if (!xfer)
 		return NULL;

@@ -459,7 +459,7 @@ static int adi_i3c_master_attach_i3c_dev(struct i3c_dev_desc *dev)
 	int slot;
 	u8 addr;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -531,7 +531,7 @@ static int adi_i3c_master_attach_i2c_dev(struct i2c_dev_desc *dev)
 	if (slot < 0)
 		return slot;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/i3c/master/dw-i3c-master.c b/drivers/i3c/master/dw-i3c-master.c
index 7eb09ad10171..e4740cd07c66 100644
--- a/drivers/i3c/master/dw-i3c-master.c
+++ b/drivers/i3c/master/dw-i3c-master.c
@@ -382,7 +382,7 @@ dw_i3c_master_alloc_xfer(struct dw_i3c_master *master, unsigned int ncmds)
 {
 	struct dw_i3c_xfer *xfer;

-	xfer = kzalloc(struct_size(xfer, cmds, ncmds), GFP_KERNEL);
+	xfer = kzalloc_flex(*xfer, cmds, ncmds, GFP_KERNEL);
 	if (!xfer)
 		return NULL;

@@ -1044,7 +1044,7 @@ static int dw_i3c_master_attach_i3c_dev(struct i3c_dev_desc *dev)
 	if (pos < 0)
 		return pos;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -1162,7 +1162,7 @@ static int dw_i3c_master_attach_i2c_dev(struct i2c_dev_desc *dev)
 	if (pos < 0)
 		return pos;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/i3c/master/i3c-master-cdns.c b/drivers/i3c/master/i3c-master-cdns.c
index 8eb76b8ca2b0..2f31e7ef3ea8 100644
--- a/drivers/i3c/master/i3c-master-cdns.c
+++ b/drivers/i3c/master/i3c-master-cdns.c
@@ -498,7 +498,7 @@ cdns_i3c_master_alloc_xfer(struct cdns_i3c_master *master, unsigned int ncmds)
 {
 	struct cdns_i3c_xfer *xfer;

-	xfer = kzalloc(struct_size(xfer, cmds, ncmds), GFP_KERNEL);
+	xfer = kzalloc_flex(*xfer, cmds, ncmds, GFP_KERNEL);
 	if (!xfer)
 		return NULL;

@@ -940,7 +940,7 @@ static int cdns_i3c_master_attach_i3c_dev(struct i3c_dev_desc *dev)
 	struct cdns_i3c_i2c_dev_data *data;
 	int slot;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -991,7 +991,7 @@ static int cdns_i3c_master_attach_i2c_dev(struct i2c_dev_desc *dev)
 	if (slot < 0)
 		return slot;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/i3c/master/mipi-i3c-hci/core.c b/drivers/i3c/master/mipi-i3c-hci/core.c
index e925584113d1..a527e7305c09 100644
--- a/drivers/i3c/master/mipi-i3c-hci/core.c
+++ b/drivers/i3c/master/mipi-i3c-hci/core.c
@@ -410,7 +410,7 @@ static int i3c_hci_attach_i3c_dev(struct i3c_dev_desc *dev)
 	struct i3c_hci_dev_data *dev_data;
 	int ret;

-	dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
+	dev_data = kzalloc_obj(*dev_data, GFP_KERNEL);
 	if (!dev_data)
 		return -ENOMEM;
 	if (hci->cmd == &mipi_i3c_hci_cmd_v1) {
@@ -460,7 +460,7 @@ static int i3c_hci_attach_i2c_dev(struct i2c_dev_desc *dev)

 	if (hci->cmd != &mipi_i3c_hci_cmd_v1)
 		return 0;
-	dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
+	dev_data = kzalloc_obj(*dev_data, GFP_KERNEL);
 	if (!dev_data)
 		return -ENOMEM;
 	ret = mipi_i3c_hci_dat_v1.alloc_entry(hci);
diff --git a/drivers/i3c/master/mipi-i3c-hci/dma.c b/drivers/i3c/master/mipi-i3c-hci/dma.c
index 2e5b4974d431..cdba4c9c839d 100644
--- a/drivers/i3c/master/mipi-i3c-hci/dma.c
+++ b/drivers/i3c/master/mipi-i3c-hci/dma.c
@@ -328,7 +328,7 @@ static int hci_dma_init(struct i3c_hci *hci)
 	}
 	if (nr_rings > XFER_RINGS)
 		nr_rings = XFER_RINGS;
-	rings = kzalloc(struct_size(rings, headers, nr_rings), GFP_KERNEL);
+	rings = kzalloc_flex(*rings, headers, nr_rings, GFP_KERNEL);
 	if (!rings)
 		return -ENOMEM;
 	hci->io_data = rings;
@@ -363,8 +363,8 @@ static int hci_dma_init(struct i3c_hci *hci)
 		rh->resp = dma_alloc_coherent(rings->sysdev, resps_sz,
 					      &rh->resp_dma, GFP_KERNEL);
 		rh->src_xfers =
-			kmalloc_array(rh->xfer_entries, sizeof(*rh->src_xfers),
-				      GFP_KERNEL);
+			kmalloc_objs(*rh->src_xfers, rh->xfer_entries,
+				     GFP_KERNEL);
 		ret = -ENOMEM;
 		if (!rh->xfer || !rh->resp || !rh->src_xfers)
 			goto err_out;
@@ -636,7 +636,7 @@ static int hci_dma_request_ibi(struct i3c_hci *hci, struct i3c_dev_desc *dev,
 	struct i3c_generic_ibi_pool *pool;
 	struct hci_dma_dev_ibi_data *dev_ibi;

-	dev_ibi = kmalloc(sizeof(*dev_ibi), GFP_KERNEL);
+	dev_ibi = kmalloc_obj(*dev_ibi, GFP_KERNEL);
 	if (!dev_ibi)
 		return -ENOMEM;
 	pool = i3c_generic_ibi_alloc_pool(dev, req);
diff --git a/drivers/i3c/master/mipi-i3c-hci/hci.h b/drivers/i3c/master/mipi-i3c-hci/hci.h
index 6035f74212db..7d57ebba0c24 100644
--- a/drivers/i3c/master/mipi-i3c-hci/hci.h
+++ b/drivers/i3c/master/mipi-i3c-hci/hci.h
@@ -107,7 +107,7 @@ struct hci_xfer {

 static inline struct hci_xfer *hci_alloc_xfer(unsigned int n)
 {
-	return kcalloc(n, sizeof(struct hci_xfer), GFP_KERNEL);
+	return kzalloc_objs(struct hci_xfer, n, GFP_KERNEL);
 }

 static inline void hci_free_xfer(struct hci_xfer *xfer, unsigned int n)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 0f05a15c14c7..4fa3d5cf14d2 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -242,7 +242,7 @@ static void mipi_i3c_hci_pci_setup_cell(struct mipi_i3c_hci_pci *hci, int idx,
 	cell->resources = &data->res;
 }

-#define mipi_i3c_hci_pci_alloc(h, x) kcalloc((h)->info->instance_count, sizeof(*(x)), GFP_KERNEL)
+#define mipi_i3c_hci_pci_alloc(h, x) kzalloc_objs(*(x), (h)->info->instance_count, GFP_KERNEL)

 static int mipi_i3c_hci_pci_add_instances(struct mipi_i3c_hci_pci *hci)
 {
diff --git a/drivers/i3c/master/mipi-i3c-hci/pio.c b/drivers/i3c/master/mipi-i3c-hci/pio.c
index 8e868e81acda..0c333e40378c 100644
--- a/drivers/i3c/master/mipi-i3c-hci/pio.c
+++ b/drivers/i3c/master/mipi-i3c-hci/pio.c
@@ -977,7 +977,7 @@ static int hci_pio_request_ibi(struct i3c_hci *hci, struct i3c_dev_desc *dev,
 	struct i3c_generic_ibi_pool *pool;
 	struct hci_pio_dev_ibi_data *dev_ibi;

-	dev_ibi = kmalloc(sizeof(*dev_ibi), GFP_KERNEL);
+	dev_ibi = kmalloc_obj(*dev_ibi, GFP_KERNEL);
 	if (!dev_ibi)
 		return -ENOMEM;
 	pool = i3c_generic_ibi_alloc_pool(dev, req);
diff --git a/drivers/i3c/master/renesas-i3c.c b/drivers/i3c/master/renesas-i3c.c
index 528bccc2c68e..a100bbaabf2d 100644
--- a/drivers/i3c/master/renesas-i3c.c
+++ b/drivers/i3c/master/renesas-i3c.c
@@ -345,7 +345,7 @@ static struct renesas_i3c_xfer *renesas_i3c_alloc_xfer(struct renesas_i3c *i3c,
 {
 	struct renesas_i3c_xfer *xfer;

-	xfer = kzalloc(struct_size(xfer, cmds, ncmds), GFP_KERNEL);
+	xfer = kzalloc_flex(*xfer, cmds, ncmds, GFP_KERNEL);
 	if (!xfer)
 		return NULL;

@@ -874,7 +874,7 @@ static int renesas_i3c_attach_i3c_dev(struct i3c_dev_desc *dev)
 	if (pos < 0)
 		return pos;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -984,7 +984,7 @@ static int renesas_i3c_attach_i2c_dev(struct i2c_dev_desc *dev)
 	if (pos < 0)
 		return pos;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
index 857504d36e18..0e3b1a7be6a4 100644
--- a/drivers/i3c/master/svc-i3c-master.c
+++ b/drivers/i3c/master/svc-i3c-master.c
@@ -900,7 +900,7 @@ static int svc_i3c_master_attach_i3c_dev(struct i3c_dev_desc *dev)
 	if (slot < 0)
 		return slot;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data) {
 		svc_i3c_master_release_slot(master, slot);
 		return -ENOMEM;
@@ -953,7 +953,7 @@ static int svc_i3c_master_attach_i2c_dev(struct i2c_dev_desc *dev)
 	if (slot < 0)
 		return slot;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data) {
 		svc_i3c_master_release_slot(master, slot);
 		return -ENOMEM;
@@ -1504,7 +1504,7 @@ svc_i3c_master_alloc_xfer(struct svc_i3c_master *master, unsigned int ncmds)
 {
 	struct svc_i3c_xfer *xfer;

-	xfer = kzalloc(struct_size(xfer, cmds, ncmds), GFP_KERNEL);
+	xfer = kzalloc_flex(*xfer, cmds, ncmds, GFP_KERNEL);
 	if (!xfer)
 		return NULL;

diff --git a/drivers/iio/adc/ti-tsc2046.c b/drivers/iio/adc/ti-tsc2046.c
index 8eb717b11cff..14d95d63f277 100644
--- a/drivers/iio/adc/ti-tsc2046.c
+++ b/drivers/iio/adc/ti-tsc2046.c
@@ -290,15 +290,15 @@ static int tsc2046_adc_read_one(struct tsc2046_adc_priv *priv, int ch_idx,
 	if (sizeof(struct tsc2046_adc_atom) * max_count > PAGE_SIZE)
 		return -ENOSPC;

-	struct tsc2046_adc_atom *tx_buf __free(kfree) = kcalloc(max_count,
-								sizeof(*tx_buf),
-								GFP_KERNEL);
+	struct tsc2046_adc_atom *tx_buf __free(kfree) = kzalloc_objs(*tx_buf,
+								     max_count,
+								     GFP_KERNEL);
 	if (!tx_buf)
 		return -ENOMEM;

-	struct tsc2046_adc_atom *rx_buf __free(kfree) = kcalloc(max_count,
-								sizeof(*rx_buf),
-								GFP_KERNEL);
+	struct tsc2046_adc_atom *rx_buf __free(kfree) = kzalloc_objs(*rx_buf,
+								     max_count,
+								     GFP_KERNEL);
 	if (!rx_buf)
 		return -ENOMEM;

diff --git a/drivers/iio/buffer/industrialio-buffer-cb.c b/drivers/iio/buffer/industrialio-buffer-cb.c
index f4ebff968493..7a251b030b7e 100644
--- a/drivers/iio/buffer/industrialio-buffer-cb.c
+++ b/drivers/iio/buffer/industrialio-buffer-cb.c
@@ -60,7 +60,7 @@ struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev,
 		return ERR_PTR(-EINVAL);
 	}

-	cb_buff = kzalloc(sizeof(*cb_buff), GFP_KERNEL);
+	cb_buff = kzalloc_obj(*cb_buff, GFP_KERNEL);
 	if (cb_buff == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iio/buffer/industrialio-buffer-dma.c b/drivers/iio/buffer/industrialio-buffer-dma.c
index 1c94b334f987..2425e1113a7d 100644
--- a/drivers/iio/buffer/industrialio-buffer-dma.c
+++ b/drivers/iio/buffer/industrialio-buffer-dma.c
@@ -174,7 +174,7 @@ iio_dma_buffer_alloc_block(struct iio_dma_buffer_queue *queue, size_t size,
 			   bool fileio)
 {
 	struct iio_dma_buffer_block *block __free(kfree) =
-			kzalloc(sizeof(*block), GFP_KERNEL);
+			kzalloc_obj(*block, GFP_KERNEL);
 	if (!block)
 		return NULL;

diff --git a/drivers/iio/buffer/industrialio-buffer-dmaengine.c b/drivers/iio/buffer/industrialio-buffer-dmaengine.c
index 0d3454f4adb0..23b4ac7cca9c 100644
--- a/drivers/iio/buffer/industrialio-buffer-dmaengine.c
+++ b/drivers/iio/buffer/industrialio-buffer-dmaengine.c
@@ -224,7 +224,7 @@ static struct iio_buffer *iio_dmaengine_buffer_alloc(struct dma_chan *chan)
 	if (ret < 0)
 		return ERR_PTR(ret);

-	dmaengine_buffer = kzalloc(sizeof(*dmaengine_buffer), GFP_KERNEL);
+	dmaengine_buffer = kzalloc_obj(*dmaengine_buffer, GFP_KERNEL);
 	if (!dmaengine_buffer)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iio/buffer/industrialio-hw-consumer.c b/drivers/iio/buffer/industrialio-hw-consumer.c
index 526b2a8d725d..9745b3bd4ac7 100644
--- a/drivers/iio/buffer/industrialio-hw-consumer.c
+++ b/drivers/iio/buffer/industrialio-hw-consumer.c
@@ -60,7 +60,7 @@ static struct hw_consumer_buffer *iio_hw_consumer_get_buffer(
 			return buf;
 	}

-	buf = kzalloc(struct_size(buf, scan_mask, mask_longs), GFP_KERNEL);
+	buf = kzalloc_flex(*buf, scan_mask, mask_longs, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -87,7 +87,7 @@ struct iio_hw_consumer *iio_hw_consumer_alloc(struct device *dev)
 	struct iio_channel *chan;
 	int ret;

-	hwc = kzalloc(sizeof(*hwc), GFP_KERNEL);
+	hwc = kzalloc_obj(*hwc, GFP_KERNEL);
 	if (!hwc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iio/buffer/kfifo_buf.c b/drivers/iio/buffer/kfifo_buf.c
index 38034c8bcc04..73e2cd7e7313 100644
--- a/drivers/iio/buffer/kfifo_buf.c
+++ b/drivers/iio/buffer/kfifo_buf.c
@@ -204,7 +204,7 @@ struct iio_buffer *iio_kfifo_allocate(void)
 {
 	struct iio_kfifo *kf;

-	kf = kzalloc(sizeof(*kf), GFP_KERNEL);
+	kf = kzalloc_obj(*kf, GFP_KERNEL);
 	if (!kf)
 		return NULL;

diff --git a/drivers/iio/common/ssp_sensors/ssp_spi.c b/drivers/iio/common/ssp_sensors/ssp_spi.c
index b7f093d7345b..5fd9ef819417 100644
--- a/drivers/iio/common/ssp_sensors/ssp_spi.c
+++ b/drivers/iio/common/ssp_sensors/ssp_spi.c
@@ -77,7 +77,7 @@ static struct ssp_msg *ssp_create_msg(u8 cmd, u16 len, u16 opt, u32 data)
 	struct ssp_msg_header h;
 	struct ssp_msg *msg;

-	msg = kzalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kzalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return NULL;

diff --git a/drivers/iio/dac/ad5360.c b/drivers/iio/dac/ad5360.c
index 8271849b1c83..f95983f81f63 100644
--- a/drivers/iio/dac/ad5360.c
+++ b/drivers/iio/dac/ad5360.c
@@ -439,8 +439,8 @@ static int ad5360_alloc_channels(struct iio_dev *indio_dev)
 	struct iio_chan_spec *channels;
 	unsigned int i;

-	channels = kcalloc(st->chip_info->num_channels,
-			   sizeof(struct iio_chan_spec), GFP_KERNEL);
+	channels = kzalloc_objs(struct iio_chan_spec,
+				st->chip_info->num_channels, GFP_KERNEL);

 	if (!channels)
 		return -ENOMEM;
diff --git a/drivers/iio/dummy/iio_dummy_evgen.c b/drivers/iio/dummy/iio_dummy_evgen.c
index 16d3f144dda0..84bc2281c03a 100644
--- a/drivers/iio/dummy/iio_dummy_evgen.c
+++ b/drivers/iio/dummy/iio_dummy_evgen.c
@@ -47,7 +47,7 @@ static int iio_dummy_evgen_create(void)
 {
 	int ret;

-	iio_evgen = kzalloc(sizeof(*iio_evgen), GFP_KERNEL);
+	iio_evgen = kzalloc_obj(*iio_evgen, GFP_KERNEL);
 	if (!iio_evgen)
 		return -ENOMEM;

diff --git a/drivers/iio/dummy/iio_simple_dummy.c b/drivers/iio/dummy/iio_simple_dummy.c
index 8575d4a08963..cba19b6a23cb 100644
--- a/drivers/iio/dummy/iio_simple_dummy.c
+++ b/drivers/iio/dummy/iio_simple_dummy.c
@@ -588,7 +588,7 @@ static struct iio_sw_device *iio_dummy_probe(const char *name)
 	 * parent = &client->dev;
 	 */

-	swd = kzalloc(sizeof(*swd), GFP_KERNEL);
+	swd = kzalloc_obj(*swd, GFP_KERNEL);
 	if (!swd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iio/dummy/iio_simple_dummy_buffer.c b/drivers/iio/dummy/iio_simple_dummy_buffer.c
index e35e0596cbfb..5bbfda407bc2 100644
--- a/drivers/iio/dummy/iio_simple_dummy_buffer.c
+++ b/drivers/iio/dummy/iio_simple_dummy_buffer.c
@@ -60,7 +60,7 @@ static irqreturn_t iio_simple_dummy_trigger_h(int irq, void *p)
 	 *  - A buffer at the end of the structure accessed via iio_priv()
 	 *    that is marked __aligned(IIO_DMA_MINALIGN).
 	 */
-	scan = kzalloc(sizeof(*scan), GFP_KERNEL);
+	scan = kzalloc_obj(*scan, GFP_KERNEL);
 	if (!scan)
 		goto done;

diff --git a/drivers/iio/imu/adis_buffer.c b/drivers/iio/imu/adis_buffer.c
index cd3db2388164..222b77781639 100644
--- a/drivers/iio/imu/adis_buffer.c
+++ b/drivers/iio/imu/adis_buffer.c
@@ -33,7 +33,7 @@ static int adis_update_scan_mode_burst(struct iio_dev *indio_dev,
 	else
 		burst_max_length = burst_length;

-	adis->xfer = kcalloc(2, sizeof(*adis->xfer), GFP_KERNEL);
+	adis->xfer = kzalloc_objs(*adis->xfer, 2, GFP_KERNEL);
 	if (!adis->xfer)
 		return -ENOMEM;

@@ -81,7 +81,7 @@ int adis_update_scan_mode(struct iio_dev *indio_dev,

 	scan_count = indio_dev->scan_bytes / 2;

-	adis->xfer = kcalloc(scan_count + 1, sizeof(*adis->xfer), GFP_KERNEL);
+	adis->xfer = kzalloc_objs(*adis->xfer, scan_count + 1, GFP_KERNEL);
 	if (!adis->xfer)
 		return -ENOMEM;

diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
index c6259213e150..ac141289a2f3 100644
--- a/drivers/iio/industrialio-buffer.c
+++ b/drivers/iio/industrialio-buffer.c
@@ -1024,7 +1024,7 @@ static int iio_buffer_add_demux(struct iio_buffer *buffer,
 	    (*p)->to + (*p)->length == out_loc) {
 		(*p)->length += length;
 	} else {
-		*p = kmalloc(sizeof(**p), GFP_KERNEL);
+		*p = kmalloc_obj(**p, GFP_KERNEL);
 		if (!(*p))
 			return -ENOMEM;
 		(*p)->from = in_loc;
@@ -1478,7 +1478,7 @@ static struct attribute *iio_buffer_wrap_attr(struct iio_buffer *buffer,
 	struct device_attribute *dattr = to_dev_attr(attr);
 	struct iio_dev_attr *iio_attr;

-	iio_attr = kzalloc(sizeof(*iio_attr), GFP_KERNEL);
+	iio_attr = kzalloc_obj(*iio_attr, GFP_KERNEL);
 	if (!iio_attr)
 		return NULL;

@@ -1507,7 +1507,7 @@ static int iio_buffer_register_legacy_sysfs_groups(struct iio_dev *indio_dev,
 	struct attribute **attrs;
 	int ret;

-	attrs = kcalloc(buffer_attrcount + 1, sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_objs(*attrs, buffer_attrcount + 1, GFP_KERNEL);
 	if (!attrs)
 		return -ENOMEM;

@@ -1521,7 +1521,7 @@ static int iio_buffer_register_legacy_sysfs_groups(struct iio_dev *indio_dev,
 	if (ret)
 		goto error_free_buffer_attrs;

-	attrs = kcalloc(scan_el_attrcount + 1, sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_objs(*attrs, scan_el_attrcount + 1, GFP_KERNEL);
 	if (!attrs) {
 		ret = -ENOMEM;
 		goto error_free_buffer_attrs;
@@ -1674,7 +1674,7 @@ static int iio_buffer_attach_dmabuf(struct iio_dev_buffer_pair *ib,
 	if (copy_from_user(&fd, user_fd, sizeof(fd)))
 		return -EFAULT;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -1862,7 +1862,7 @@ static int iio_buffer_enqueue_dmabuf(struct iio_dev_buffer_pair *ib,

 	priv = attach->importer_priv;

-	fence = kmalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kmalloc_obj(*fence, GFP_KERNEL);
 	if (!fence) {
 		ret = -ENOMEM;
 		goto err_attachment_put;
@@ -2035,7 +2035,7 @@ static long iio_device_buffer_getfd(struct iio_dev *indio_dev, unsigned long arg
 		goto error_iio_dev_put;
 	}

-	ib = kzalloc(sizeof(*ib), GFP_KERNEL);
+	ib = kzalloc_obj(*ib, GFP_KERNEL);
 	if (!ib) {
 		ret = -ENOMEM;
 		goto error_clear_busy_bit;
@@ -2182,7 +2182,7 @@ static int __iio_buffer_alloc_sysfs_and_mask(struct iio_buffer *buffer,
 	}

 	attrn = buffer_attrcount + scan_el_attrcount;
-	attr = kcalloc(attrn + 1, sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_objs(*attr, attrn + 1, GFP_KERNEL);
 	if (!attr) {
 		ret = -ENOMEM;
 		goto error_free_scan_mask;
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 819bfb9c289e..9e3d23368413 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -1192,7 +1192,7 @@ int __iio_add_chan_devattr(const char *postfix,
 	int ret;
 	struct iio_dev_attr *iio_attr, *t;

-	iio_attr = kzalloc(sizeof(*iio_attr), GFP_KERNEL);
+	iio_attr = kzalloc_obj(*iio_attr, GFP_KERNEL);
 	if (iio_attr == NULL)
 		return -ENOMEM;
 	ret = __iio_device_attr_init(&iio_attr->dev_attr,
@@ -1586,9 +1586,8 @@ static int iio_device_register_sysfs(struct iio_dev *indio_dev)
 		attrcount++;

 	iio_dev_opaque->chan_attr_group.attrs =
-		kcalloc(attrcount + 1,
-			sizeof(iio_dev_opaque->chan_attr_group.attrs[0]),
-			GFP_KERNEL);
+		kzalloc_objs(iio_dev_opaque->chan_attr_group.attrs[0],
+			     attrcount + 1, GFP_KERNEL);
 	if (iio_dev_opaque->chan_attr_group.attrs == NULL) {
 		ret = -ENOMEM;
 		goto error_clear_attrs;
@@ -1797,7 +1796,7 @@ static int iio_chrdev_open(struct inode *inode, struct file *filp)

 	iio_device_get(indio_dev);

-	ib = kmalloc(sizeof(*ib), GFP_KERNEL);
+	ib = kmalloc_obj(*ib, GFP_KERNEL);
 	if (!ib) {
 		iio_device_put(indio_dev);
 		clear_bit(IIO_BUSY_BIT_POS, &iio_dev_opaque->flags);
diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c
index 06295cfc2da8..43043ea897e0 100644
--- a/drivers/iio/industrialio-event.c
+++ b/drivers/iio/industrialio-event.c
@@ -583,7 +583,7 @@ int iio_device_register_eventset(struct iio_dev *indio_dev)
 	      iio_check_for_dynamic_events(indio_dev)))
 		return 0;

-	ev_int = kzalloc(sizeof(*ev_int), GFP_KERNEL);
+	ev_int = kzalloc_obj(*ev_int, GFP_KERNEL);
 	if (!ev_int)
 		return -ENOMEM;

@@ -606,9 +606,8 @@ int iio_device_register_eventset(struct iio_dev *indio_dev)
 	}

 	ev_int->group.name = iio_event_group_name;
-	ev_int->group.attrs = kcalloc(attrcount + 1,
-				      sizeof(ev_int->group.attrs[0]),
-				      GFP_KERNEL);
+	ev_int->group.attrs = kzalloc_objs(ev_int->group.attrs[0],
+					   attrcount + 1, GFP_KERNEL);
 	if (ev_int->group.attrs == NULL) {
 		ret = -ENOMEM;
 		goto error_free_setup_event_lines;
diff --git a/drivers/iio/industrialio-gts-helper.c b/drivers/iio/industrialio-gts-helper.c
index f35c36fd4a55..d7b52ca256b2 100644
--- a/drivers/iio/industrialio-gts-helper.c
+++ b/drivers/iio/industrialio-gts-helper.c
@@ -250,12 +250,12 @@ static int iio_gts_alloc_int_table_array(int ***arr, int num_tables, int num_tab
 {
 	int i, **tmp;

-	tmp = kcalloc(num_tables, sizeof(**arr), GFP_KERNEL);
+	tmp = kzalloc_objs(**arr, num_tables, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

 	for (i = 0; i < num_tables; i++) {
-		tmp[i] = kcalloc(num_table_items, sizeof(int), GFP_KERNEL);
+		tmp[i] = kzalloc_objs(int, num_table_items, GFP_KERNEL);
 		if (!tmp[i])
 			goto err_free;
 	}
@@ -432,7 +432,7 @@ static int iio_gts_build_avail_time_table(struct iio_gts *gts)
 	if (!gts->num_itime)
 		return 0;

-	times = kcalloc(gts->num_itime, sizeof(int), GFP_KERNEL);
+	times = kzalloc_objs(int, gts->num_itime, GFP_KERNEL);
 	if (!times)
 		return -ENOMEM;

diff --git a/drivers/iio/industrialio-trigger.c b/drivers/iio/industrialio-trigger.c
index 54416a384232..97a808554609 100644
--- a/drivers/iio/industrialio-trigger.c
+++ b/drivers/iio/industrialio-trigger.c
@@ -372,7 +372,7 @@ struct iio_poll_func
 	va_list vargs;
 	struct iio_poll_func *pf;

-	pf = kmalloc(sizeof(*pf), GFP_KERNEL);
+	pf = kmalloc_obj(*pf, GFP_KERNEL);
 	if (!pf)
 		return NULL;
 	va_start(vargs, fmt);
@@ -557,7 +557,7 @@ struct iio_trigger *viio_trigger_alloc(struct device *parent,
 	struct iio_trigger *trig;
 	int i;

-	trig = kzalloc(sizeof(*trig), GFP_KERNEL);
+	trig = kzalloc_obj(*trig, GFP_KERNEL);
 	if (!trig)
 		return NULL;

diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
index 1e5eb5a41271..44600bc1b879 100644
--- a/drivers/iio/inkern.c
+++ b/drivers/iio/inkern.c
@@ -55,7 +55,7 @@ int iio_map_array_register(struct iio_dev *indio_dev, const struct iio_map *maps

 	guard(mutex)(&iio_map_list_lock);
 	while (maps[i].consumer_dev_name) {
-		mapi = kzalloc(sizeof(*mapi), GFP_KERNEL);
+		mapi = kzalloc_obj(*mapi, GFP_KERNEL);
 		if (!mapi) {
 			ret = -ENOMEM;
 			goto error_ret;
@@ -188,7 +188,7 @@ static struct iio_channel *fwnode_iio_channel_get(struct fwnode_handle *fwnode,
 		return ERR_PTR(-EINVAL);

 	struct iio_channel *channel __free(kfree) =
-		kzalloc(sizeof(*channel), GFP_KERNEL);
+		kzalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return ERR_PTR(-ENOMEM);

@@ -302,7 +302,7 @@ static struct iio_channel *fwnode_iio_channel_get_all(struct device *dev)

 	/* NULL terminated array to save passing size */
 	struct iio_channel *chans __free(kfree) =
-		kcalloc(nummaps + 1, sizeof(*chans), GFP_KERNEL);
+		kzalloc_objs(*chans, nummaps + 1, GFP_KERNEL);
 	if (!chans)
 		return ERR_PTR(-ENOMEM);

@@ -474,7 +474,7 @@ struct iio_channel *iio_channel_get_all(struct device *dev)

 	/* NULL terminated array to save passing size */
 	struct iio_channel *chans __free(kfree) =
-		kcalloc(nummaps + 1, sizeof(*chans), GFP_KERNEL);
+		kzalloc_objs(*chans, nummaps + 1, GFP_KERNEL);
 	if (!chans)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iio/trigger/iio-trig-hrtimer.c b/drivers/iio/trigger/iio-trig-hrtimer.c
index 82c72baccb62..02f137ace26d 100644
--- a/drivers/iio/trigger/iio-trig-hrtimer.c
+++ b/drivers/iio/trigger/iio-trig-hrtimer.c
@@ -131,7 +131,7 @@ static struct iio_sw_trigger *iio_trig_hrtimer_probe(const char *name)
 	struct iio_hrtimer_info *trig_info;
 	int ret;

-	trig_info = kzalloc(sizeof(*trig_info), GFP_KERNEL);
+	trig_info = kzalloc_obj(*trig_info, GFP_KERNEL);
 	if (!trig_info)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iio/trigger/iio-trig-interrupt.c b/drivers/iio/trigger/iio-trig-interrupt.c
index 21c6b6292a72..432c9b2f2c64 100644
--- a/drivers/iio/trigger/iio-trig-interrupt.c
+++ b/drivers/iio/trigger/iio-trig-interrupt.c
@@ -48,7 +48,7 @@ static int iio_interrupt_trigger_probe(struct platform_device *pdev)
 		goto error_ret;
 	}

-	trig_info = kzalloc(sizeof(*trig_info), GFP_KERNEL);
+	trig_info = kzalloc_obj(*trig_info, GFP_KERNEL);
 	if (!trig_info) {
 		ret = -ENOMEM;
 		goto error_free_trigger;
diff --git a/drivers/iio/trigger/iio-trig-loop.c b/drivers/iio/trigger/iio-trig-loop.c
index 7aaed0611899..8996aaffb3f8 100644
--- a/drivers/iio/trigger/iio-trig-loop.c
+++ b/drivers/iio/trigger/iio-trig-loop.c
@@ -80,7 +80,7 @@ static struct iio_sw_trigger *iio_trig_loop_probe(const char *name)
 	struct iio_loop_info *trig_info;
 	int ret;

-	trig_info = kzalloc(sizeof(*trig_info), GFP_KERNEL);
+	trig_info = kzalloc_obj(*trig_info, GFP_KERNEL);
 	if (!trig_info)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iio/trigger/iio-trig-sysfs.c b/drivers/iio/trigger/iio-trig-sysfs.c
index 575d725696a9..f242b3209307 100644
--- a/drivers/iio/trigger/iio-trig-sysfs.c
+++ b/drivers/iio/trigger/iio-trig-sysfs.c
@@ -140,7 +140,7 @@ static int iio_sysfs_trigger_probe(int id)
 		ret = -EINVAL;
 		goto err_unlock;
 	}
-	t = kmalloc(sizeof(*t), GFP_KERNEL);
+	t = kmalloc_obj(*t, GFP_KERNEL);
 	if (t == NULL) {
 		ret = -ENOMEM;
 		goto err_unlock;
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
index 35ba852a172a..0764d71a9dd5 100644
--- a/drivers/infiniband/core/addr.c
+++ b/drivers/infiniband/core/addr.c
@@ -646,7 +646,7 @@ int rdma_resolve_ip(struct sockaddr *src_addr, const struct sockaddr *dst_addr,
 	struct addr_req *req;
 	int ret = 0;

-	req = kzalloc(sizeof *req, GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/agent.c b/drivers/infiniband/core/agent.c
index 25a060a28301..8b889cb85c59 100644
--- a/drivers/infiniband/core/agent.c
+++ b/drivers/infiniband/core/agent.c
@@ -162,7 +162,7 @@ int ib_agent_port_open(struct ib_device *device, int port_num)
 	int ret;

 	/* Create new device info */
-	port_priv = kzalloc(sizeof *port_priv, GFP_KERNEL);
+	port_priv = kzalloc_obj(*port_priv, GFP_KERNEL);
 	if (!port_priv) {
 		ret = -ENOMEM;
 		goto error1;
diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index 0fc1c5bce2f0..c3d542187129 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -296,14 +296,14 @@ alloc_gid_entry(const struct ib_gid_attr *attr)
 	struct ib_gid_table_entry *entry;
 	struct net_device *ndev;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return NULL;

 	ndev = rcu_dereference_protected(attr->ndev, 1);
 	if (ndev) {
-		entry->ndev_storage = kzalloc(sizeof(*entry->ndev_storage),
-					      GFP_KERNEL);
+		entry->ndev_storage = kzalloc_obj(*entry->ndev_storage,
+						  GFP_KERNEL);
 		if (!entry->ndev_storage) {
 			kfree(entry);
 			return NULL;
@@ -771,12 +771,12 @@ const struct ib_gid_attr *rdma_find_gid_by_filter(

 static struct ib_gid_table *alloc_gid_table(int sz)
 {
-	struct ib_gid_table *table = kzalloc(sizeof(*table), GFP_KERNEL);
+	struct ib_gid_table *table = kzalloc_obj(*table, GFP_KERNEL);

 	if (!table)
 		return NULL;

-	table->data_vec = kcalloc(sz, sizeof(*table->data_vec), GFP_KERNEL);
+	table->data_vec = kzalloc_objs(*table->data_vec, sz, GFP_KERNEL);
 	if (!table->data_vec)
 		goto err_free_table;

@@ -1452,7 +1452,7 @@ ib_cache_update(struct ib_device *device, u32 port, bool update_gids,
 	if (!rdma_is_port_valid(device, port))
 		return -EINVAL;

-	tprops = kmalloc(sizeof *tprops, GFP_KERNEL);
+	tprops = kmalloc_obj(*tprops, GFP_KERNEL);
 	if (!tprops)
 		return -ENOMEM;

@@ -1472,9 +1472,8 @@ ib_cache_update(struct ib_device *device, u32 port, bool update_gids,
 	update_pkeys &= !!tprops->pkey_tbl_len;

 	if (update_pkeys) {
-		pkey_cache = kmalloc(struct_size(pkey_cache, table,
-						 tprops->pkey_tbl_len),
-				     GFP_KERNEL);
+		pkey_cache = kmalloc_flex(*pkey_cache, table,
+					  tprops->pkey_tbl_len, GFP_KERNEL);
 		if (!pkey_cache) {
 			ret = -ENOMEM;
 			goto err;
@@ -1583,7 +1582,7 @@ void ib_dispatch_event(const struct ib_event *event)
 {
 	struct ib_update_work *work;

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return;

diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index 024df6ee239d..c2fb11197d02 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -827,7 +827,7 @@ static struct cm_id_private *cm_alloc_id_priv(struct ib_device *device,
 	u32 id;
 	int ret;

-	cm_id_priv = kzalloc(sizeof *cm_id_priv, GFP_KERNEL);
+	cm_id_priv = kzalloc_obj(*cm_id_priv, GFP_KERNEL);
 	if (!cm_id_priv)
 		return ERR_PTR(-ENOMEM);

@@ -976,7 +976,7 @@ static struct cm_timewait_info *cm_create_timewait_info(__be32 local_id)
 {
 	struct cm_timewait_info *timewait_info;

-	timewait_info = kzalloc(sizeof *timewait_info, GFP_KERNEL);
+	timewait_info = kzalloc_obj(*timewait_info, GFP_KERNEL);
 	if (!timewait_info)
 		return ERR_PTR(-ENOMEM);

@@ -3902,7 +3902,7 @@ static int cm_establish(struct ib_cm_id *cm_id)
 	if (!cm_dev)
 		return -ENODEV;

-	work = kmalloc(sizeof *work, GFP_ATOMIC);
+	work = kmalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return -ENOMEM;

@@ -4050,7 +4050,7 @@ static void cm_recv_handler(struct ib_mad_agent *mad_agent,
 	attr_id = be16_to_cpu(mad_recv_wc->recv_buf.mad->mad_hdr.attr_id);
 	atomic_long_inc(&port->counters[CM_RECV][attr_id - CM_ATTR_ID_OFFSET]);

-	work = kmalloc(struct_size(work, path, paths), GFP_KERNEL);
+	work = kmalloc_flex(*work, path, paths, GFP_KERNEL);
 	if (!work) {
 		ib_free_recv_mad(mad_recv_wc);
 		return;
@@ -4348,8 +4348,8 @@ static int cm_add_one(struct ib_device *ib_device)
 	int count = 0;
 	u32 i;

-	cm_dev = kzalloc(struct_size(cm_dev, port, ib_device->phys_port_cnt),
-			 GFP_KERNEL);
+	cm_dev = kzalloc_flex(*cm_dev, port, ib_device->phys_port_cnt,
+			      GFP_KERNEL);
 	if (!cm_dev)
 		return -ENOMEM;

@@ -4366,7 +4366,7 @@ static int cm_add_one(struct ib_device *ib_device)
 		if (!rdma_cap_ib_cm(ib_device, i))
 			continue;

-		port = kzalloc(sizeof *port, GFP_KERNEL);
+		port = kzalloc_obj(*port, GFP_KERNEL);
 		if (!port) {
 			ret = -ENOMEM;
 			goto error1;
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 0ee855a71ed4..e4bd705cc046 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -490,7 +490,7 @@ static int cma_add_id_to_tree(struct rdma_id_private *node_id_priv)
 	unsigned long flags;
 	int result;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

@@ -1013,7 +1013,7 @@ __rdma_create_id(struct net *net, rdma_cm_event_handler event_handler,
 {
 	struct rdma_id_private *id_priv;

-	id_priv = kzalloc(sizeof *id_priv, GFP_KERNEL);
+	id_priv = kzalloc_obj(*id_priv, GFP_KERNEL);
 	if (!id_priv)
 		return ERR_PTR(-ENOMEM);

@@ -2300,8 +2300,8 @@ cma_ib_new_conn_id(const struct rdma_cm_id *listen_id,

 	rt = &id->route;
 	rt->num_pri_alt_paths = ib_event->param.req_rcvd.alternate_path ? 2 : 1;
-	rt->path_rec = kmalloc_array(rt->num_pri_alt_paths,
-				     sizeof(*rt->path_rec), GFP_KERNEL);
+	rt->path_rec = kmalloc_objs(*rt->path_rec, rt->num_pri_alt_paths,
+				    GFP_KERNEL);
 	if (!rt->path_rec)
 		goto err;

@@ -2880,8 +2880,8 @@ static int route_set_path_rec_inbound(struct cma_work *work,
 	struct rdma_route *route = &work->id->id.route;

 	if (!route->path_rec_inbound) {
-		route->path_rec_inbound =
-			kzalloc(sizeof(*route->path_rec_inbound), GFP_KERNEL);
+		route->path_rec_inbound = kzalloc_obj(*route->path_rec_inbound,
+						      GFP_KERNEL);
 		if (!route->path_rec_inbound)
 			return -ENOMEM;
 	}
@@ -2896,8 +2896,8 @@ static int route_set_path_rec_outbound(struct cma_work *work,
 	struct rdma_route *route = &work->id->id.route;

 	if (!route->path_rec_outbound) {
-		route->path_rec_outbound =
-			kzalloc(sizeof(*route->path_rec_outbound), GFP_KERNEL);
+		route->path_rec_outbound = kzalloc_obj(*route->path_rec_outbound,
+						       GFP_KERNEL);
 		if (!route->path_rec_outbound)
 			return -ENOMEM;
 	}
@@ -3083,14 +3083,14 @@ static int cma_resolve_ib_route(struct rdma_id_private *id_priv,
 	struct cma_work *work;
 	int ret;

-	work = kzalloc(sizeof *work, GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

 	cma_init_resolve_route_work(work, id_priv);

 	if (!route->path_rec)
-		route->path_rec = kmalloc(sizeof *route->path_rec, GFP_KERNEL);
+		route->path_rec = kmalloc_obj(*route->path_rec, GFP_KERNEL);
 	if (!route->path_rec) {
 		ret = -ENOMEM;
 		goto err1;
@@ -3204,7 +3204,7 @@ static int cma_resolve_iw_route(struct rdma_id_private *id_priv)
 {
 	struct cma_work *work;

-	work = kzalloc(sizeof *work, GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

@@ -3311,11 +3311,11 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv)
 	tos = id_priv->tos_set ? id_priv->tos : default_roce_tos;
 	mutex_unlock(&id_priv->qp_mutex);

-	work = kzalloc(sizeof *work, GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

-	route->path_rec = kzalloc(sizeof *route->path_rec, GFP_KERNEL);
+	route->path_rec = kzalloc_obj(*route->path_rec, GFP_KERNEL);
 	if (!route->path_rec) {
 		ret = -ENOMEM;
 		goto err1;
@@ -3560,7 +3560,7 @@ static int cma_resolve_loopback(struct rdma_id_private *id_priv)
 	union ib_gid gid;
 	int ret;

-	work = kzalloc(sizeof *work, GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

@@ -3585,7 +3585,7 @@ static int cma_resolve_ib_addr(struct rdma_id_private *id_priv)
 	struct cma_work *work;
 	int ret;

-	work = kzalloc(sizeof *work, GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

@@ -3685,7 +3685,7 @@ static int cma_alloc_port(enum rdma_ucm_port_space ps,

 	lockdep_assert_held(&lock);

-	bind_list = kzalloc(sizeof *bind_list, GFP_KERNEL);
+	bind_list = kzalloc_obj(*bind_list, GFP_KERNEL);
 	if (!bind_list)
 		return -ENOMEM;

@@ -5100,7 +5100,7 @@ int rdma_join_multicast(struct rdma_cm_id *id, struct sockaddr *addr,
 	if (id_priv->id.qp_type != IB_QPT_UD)
 		return -EINVAL;

-	mc = kzalloc(sizeof(*mc), GFP_KERNEL);
+	mc = kzalloc_obj(*mc, GFP_KERNEL);
 	if (!mc)
 		return -ENOMEM;

@@ -5166,7 +5166,7 @@ static int cma_netdev_change(struct net_device *ndev, struct rdma_id_private *id
 	    memcmp(dev_addr->src_dev_addr, ndev->dev_addr, ndev->addr_len)) {
 		pr_info("RDMA CM addr change for ndev %s used by id %p\n",
 			ndev->name, &id_priv->id);
-		work = kzalloc(sizeof *work, GFP_KERNEL);
+		work = kzalloc_obj(*work, GFP_KERNEL);
 		if (!work)
 			return -ENOMEM;

@@ -5373,14 +5373,14 @@ static int cma_add_one(struct ib_device *device)
 	if (!cma_supported(device))
 		return -EOPNOTSUPP;

-	cma_dev = kmalloc(sizeof(*cma_dev), GFP_KERNEL);
+	cma_dev = kmalloc_obj(*cma_dev, GFP_KERNEL);
 	if (!cma_dev)
 		return -ENOMEM;

 	cma_dev->device = device;
-	cma_dev->default_gid_type = kcalloc(device->phys_port_cnt,
-					    sizeof(*cma_dev->default_gid_type),
-					    GFP_KERNEL);
+	cma_dev->default_gid_type = kzalloc_objs(*cma_dev->default_gid_type,
+						 device->phys_port_cnt,
+						 GFP_KERNEL);
 	if (!cma_dev->default_gid_type) {
 		ret = -ENOMEM;
 		goto free_cma_dev;
@@ -5570,7 +5570,7 @@ static void cma_query_ib_service_handler(int status,
 	}

 	id_priv->id.route.service_recs =
-		kmalloc_array(num_recs, sizeof(*recs), GFP_KERNEL);
+		kmalloc_objs(*recs, num_recs, GFP_KERNEL);
 	if (!id_priv->id.route.service_recs) {
 		status = -ENOMEM;
 		goto fail;
@@ -5610,7 +5610,7 @@ static int cma_resolve_ib_service(struct rdma_id_private *id_priv,
 	ib_sa_comp_mask mask = 0;
 	struct cma_work *work;

-	work = kzalloc(sizeof(*work), GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/cma_configfs.c b/drivers/infiniband/core/cma_configfs.c
index f2fb2d8a6597..a914edb8ffef 100644
--- a/drivers/infiniband/core/cma_configfs.c
+++ b/drivers/infiniband/core/cma_configfs.c
@@ -210,8 +210,7 @@ static int make_cma_ports(struct cma_dev_group *cma_dev_group,
 		return -ENODEV;

 	ports_num = ibdev->phys_port_cnt;
-	ports = kcalloc(ports_num, sizeof(*cma_dev_group->ports),
-			GFP_KERNEL);
+	ports = kzalloc_objs(*cma_dev_group->ports, ports_num, GFP_KERNEL);

 	if (!ports)
 		return -ENOMEM;
@@ -285,7 +284,7 @@ static struct config_group *make_cma_dev(struct config_group *group,
 	if (!cma_dev)
 		goto fail;

-	cma_dev_group = kzalloc(sizeof(*cma_dev_group), GFP_KERNEL);
+	cma_dev_group = kzalloc_obj(*cma_dev_group, GFP_KERNEL);

 	if (!cma_dev_group) {
 		err = -ENOMEM;
diff --git a/drivers/infiniband/core/cq.c b/drivers/infiniband/core/cq.c
index 584537c71545..ffe357d01dce 100644
--- a/drivers/infiniband/core/cq.c
+++ b/drivers/infiniband/core/cq.c
@@ -58,7 +58,7 @@ static void rdma_dim_init(struct ib_cq *cq)
 	    cq->poll_ctx == IB_POLL_DIRECT)
 		return;

-	dim = kzalloc(sizeof(struct dim), GFP_KERNEL);
+	dim = kzalloc_obj(struct dim, GFP_KERNEL);
 	if (!dim)
 		return;

@@ -230,7 +230,7 @@ struct ib_cq *__ib_alloc_cq(struct ib_device *dev, void *private, int nr_cqe,
 	atomic_set(&cq->usecnt, 0);
 	cq->comp_vector = comp_vector;

-	cq->wc = kmalloc_array(IB_POLL_BATCH, sizeof(*cq->wc), GFP_KERNEL);
+	cq->wc = kmalloc_objs(*cq->wc, IB_POLL_BATCH, GFP_KERNEL);
 	if (!cq->wc)
 		goto out_free_cq;

diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index 2f2081e75bce..8d50ee81a6d1 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -811,9 +811,8 @@ static int alloc_port_data(struct ib_device *device)
 	 * Therefore port_data is declared as a 1 based array with potential
 	 * empty slots at the beginning.
 	 */
-	pdata_rcu = kzalloc(struct_size(pdata_rcu, pdata,
-					size_add(rdma_end_port(device), 1)),
-			    GFP_KERNEL);
+	pdata_rcu = kzalloc_flex(*pdata_rcu, pdata,
+				 size_add(rdma_end_port(device), 1), GFP_KERNEL);
 	if (!pdata_rcu)
 		return -ENOMEM;
 	/*
@@ -958,7 +957,7 @@ static int add_one_compat_dev(struct ib_device *device,
 	if (ret)
 		goto done;

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev) {
 		ret = -ENOMEM;
 		goto cdev_err;
diff --git a/drivers/infiniband/core/ib_core_uverbs.c b/drivers/infiniband/core/ib_core_uverbs.c
index 1de72ff4610c..9e26868e50b6 100644
--- a/drivers/infiniband/core/ib_core_uverbs.c
+++ b/drivers/infiniband/core/ib_core_uverbs.c
@@ -87,7 +87,7 @@ int rdma_user_mmap_io(struct ib_ucontext *ucontext, struct vm_area_struct *vma,
 		return -EINVAL;
 	lockdep_assert_held(&ufile->device->disassociate_srcu);

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/iwcm.c b/drivers/infiniband/core/iwcm.c
index eb942ab9c405..73e6849140fb 100644
--- a/drivers/infiniband/core/iwcm.c
+++ b/drivers/infiniband/core/iwcm.c
@@ -171,7 +171,7 @@ static int alloc_work_entries(struct iwcm_id_private *cm_id_priv, int count)

 	BUG_ON(!list_empty(&cm_id_priv->work_free_list));
 	while (count--) {
-		work = kmalloc(sizeof(struct iwcm_work), GFP_KERNEL);
+		work = kmalloc_obj(struct iwcm_work, GFP_KERNEL);
 		if (!work) {
 			dealloc_work_entries(cm_id_priv);
 			return -ENOMEM;
@@ -242,7 +242,7 @@ struct iw_cm_id *iw_create_cm_id(struct ib_device *device,
 {
 	struct iwcm_id_private *cm_id_priv;

-	cm_id_priv = kzalloc(sizeof(*cm_id_priv), GFP_KERNEL);
+	cm_id_priv = kzalloc_obj(*cm_id_priv, GFP_KERNEL);
 	if (!cm_id_priv)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/core/iwpm_msg.c b/drivers/infiniband/core/iwpm_msg.c
index 3c9a9869212b..69c85249b465 100644
--- a/drivers/infiniband/core/iwpm_msg.c
+++ b/drivers/infiniband/core/iwpm_msg.c
@@ -649,7 +649,7 @@ int iwpm_remote_info_cb(struct sk_buff *skb, struct netlink_callback *cb)
 				__func__);
 		return ret;
 	}
-	rem_info = kzalloc(sizeof(struct iwpm_remote_info), GFP_ATOMIC);
+	rem_info = kzalloc_obj(struct iwpm_remote_info, GFP_ATOMIC);
 	if (!rem_info) {
 		ret = -ENOMEM;
 		return ret;
diff --git a/drivers/infiniband/core/iwpm_util.c b/drivers/infiniband/core/iwpm_util.c
index eecb369898f5..96c707a49a71 100644
--- a/drivers/infiniband/core/iwpm_util.c
+++ b/drivers/infiniband/core/iwpm_util.c
@@ -58,13 +58,13 @@ static struct iwpm_admin_data iwpm_admin;
  */
 int iwpm_init(u8 nl_client)
 {
-	iwpm_hash_bucket = kcalloc(IWPM_MAPINFO_HASH_SIZE,
-				   sizeof(struct hlist_head), GFP_KERNEL);
+	iwpm_hash_bucket = kzalloc_objs(struct hlist_head,
+					IWPM_MAPINFO_HASH_SIZE, GFP_KERNEL);
 	if (!iwpm_hash_bucket)
 		return -ENOMEM;

-	iwpm_reminfo_bucket = kcalloc(IWPM_REMINFO_HASH_SIZE,
-				      sizeof(struct hlist_head), GFP_KERNEL);
+	iwpm_reminfo_bucket = kzalloc_objs(struct hlist_head,
+					   IWPM_REMINFO_HASH_SIZE, GFP_KERNEL);
 	if (!iwpm_reminfo_bucket) {
 		kfree(iwpm_hash_bucket);
 		return -ENOMEM;
@@ -113,7 +113,7 @@ int iwpm_create_mapinfo(struct sockaddr_storage *local_sockaddr,
 	unsigned long flags;
 	int ret = -EINVAL;

-	map_info = kzalloc(sizeof(struct iwpm_mapping_info), GFP_KERNEL);
+	map_info = kzalloc_obj(struct iwpm_mapping_info, GFP_KERNEL);
 	if (!map_info)
 		return -ENOMEM;

@@ -310,7 +310,7 @@ struct iwpm_nlmsg_request *iwpm_get_nlmsg_request(__u32 nlmsg_seq,
 	struct iwpm_nlmsg_request *nlmsg_request;
 	unsigned long flags;

-	nlmsg_request = kzalloc(sizeof(struct iwpm_nlmsg_request), gfp);
+	nlmsg_request = kzalloc_obj(struct iwpm_nlmsg_request, gfp);
 	if (!nlmsg_request)
 		return NULL;

diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index 8f26bfb69586..a2b2cd4f8e0a 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -386,7 +386,7 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
 	}

 	/* Allocate structures */
-	mad_agent_priv = kzalloc(sizeof *mad_agent_priv, GFP_KERNEL);
+	mad_agent_priv = kzalloc_obj(*mad_agent_priv, GFP_KERNEL);
 	if (!mad_agent_priv) {
 		ret = ERR_PTR(-ENOMEM);
 		goto error1;
@@ -698,7 +698,7 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
 			goto out;
 	}

-	local = kmalloc(sizeof *local, GFP_ATOMIC);
+	local = kmalloc_obj(*local, GFP_ATOMIC);
 	if (!local) {
 		ret = -ENOMEM;
 		goto out;
@@ -1400,7 +1400,7 @@ static int method_in_use(struct ib_mad_mgmt_method_table **method,
 static int allocate_method_table(struct ib_mad_mgmt_method_table **method)
 {
 	/* Allocate management method table */
-	*method = kzalloc(sizeof **method, GFP_ATOMIC);
+	*method = kzalloc_obj(**method, GFP_ATOMIC);
 	return (*method) ? 0 : (-ENOMEM);
 }

@@ -1488,7 +1488,7 @@ static int add_nonoui_reg_req(struct ib_mad_reg_req *mad_reg_req,
 	class = &port_priv->version[mad_reg_req->mgmt_class_version].class;
 	if (!*class) {
 		/* Allocate management class table for "new" class version */
-		*class = kzalloc(sizeof **class, GFP_ATOMIC);
+		*class = kzalloc_obj(**class, GFP_ATOMIC);
 		if (!*class) {
 			ret = -ENOMEM;
 			goto error1;
@@ -1553,7 +1553,7 @@ static int add_oui_reg_req(struct ib_mad_reg_req *mad_reg_req,
 				mad_reg_req->mgmt_class_version].vendor;
 	if (!*vendor_table) {
 		/* Allocate mgmt vendor class table for "new" class version */
-		vendor = kzalloc(sizeof *vendor, GFP_ATOMIC);
+		vendor = kzalloc_obj(*vendor, GFP_ATOMIC);
 		if (!vendor)
 			goto error1;

@@ -1561,7 +1561,7 @@ static int add_oui_reg_req(struct ib_mad_reg_req *mad_reg_req,
 	}
 	if (!(*vendor_table)->vendor_class[vclass]) {
 		/* Allocate table for this management vendor class */
-		vendor_class = kzalloc(sizeof *vendor_class, GFP_ATOMIC);
+		vendor_class = kzalloc_obj(*vendor_class, GFP_ATOMIC);
 		if (!vendor_class)
 			goto error2;

@@ -2612,7 +2612,7 @@ static bool ib_mad_send_error(struct ib_mad_port_private *port_priv,
 		struct ib_qp_attr *attr;

 		/* Transition QP to RTS and fail offending send */
-		attr = kmalloc(sizeof *attr, GFP_KERNEL);
+		attr = kmalloc_obj(*attr, GFP_KERNEL);
 		if (attr) {
 			attr->qp_state = IB_QPS_RTS;
 			attr->cur_qp_state = IB_QPS_SQE;
@@ -3042,7 +3042,7 @@ static int ib_mad_port_start(struct ib_mad_port_private *port_priv)
 	struct ib_qp *qp;
 	u16 pkey_index;

-	attr = kmalloc(sizeof *attr, GFP_KERNEL);
+	attr = kmalloc_obj(*attr, GFP_KERNEL);
 	if (!attr)
 		return -ENOMEM;

@@ -3207,7 +3207,7 @@ static int ib_mad_port_open(struct ib_device *device,
 		return -EFAULT;

 	/* Create new device info */
-	port_priv = kzalloc(sizeof *port_priv, GFP_KERNEL);
+	port_priv = kzalloc_obj(*port_priv, GFP_KERNEL);
 	if (!port_priv)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/mad_rmpp.c b/drivers/infiniband/core/mad_rmpp.c
index 1c5e0eaf1c94..7d577d26f3eb 100644
--- a/drivers/infiniband/core/mad_rmpp.c
+++ b/drivers/infiniband/core/mad_rmpp.c
@@ -279,7 +279,7 @@ create_rmpp_recv(struct ib_mad_agent_private *agent,
 	struct mad_rmpp_recv *rmpp_recv;
 	struct ib_mad_hdr *mad_hdr;

-	rmpp_recv = kmalloc(sizeof *rmpp_recv, GFP_KERNEL);
+	rmpp_recv = kmalloc_obj(*rmpp_recv, GFP_KERNEL);
 	if (!rmpp_recv)
 		return NULL;

diff --git a/drivers/infiniband/core/multicast.c b/drivers/infiniband/core/multicast.c
index a236532a9026..ad2f009886d8 100644
--- a/drivers/infiniband/core/multicast.c
+++ b/drivers/infiniband/core/multicast.c
@@ -570,7 +570,7 @@ static struct mcast_group *acquire_group(struct mcast_port *port,
 		spin_unlock_irqrestore(&port->lock, flags);
 	}

-	group = kzalloc(sizeof *group, gfp_mask);
+	group = kzalloc_obj(*group, gfp_mask);
 	if (!group)
 		return NULL;

@@ -621,7 +621,7 @@ ib_sa_join_multicast(struct ib_sa_client *client,
 	if (!dev)
 		return ERR_PTR(-ENODEV);

-	member = kmalloc(sizeof *member, gfp_mask);
+	member = kmalloc_obj(*member, gfp_mask);
 	if (!member)
 		return ERR_PTR(-ENOMEM);

@@ -823,8 +823,7 @@ static int mcast_add_one(struct ib_device *device)
 	int i;
 	int count = 0;

-	dev = kmalloc(struct_size(dev, port, device->phys_port_cnt),
-		      GFP_KERNEL);
+	dev = kmalloc_flex(*dev, port, device->phys_port_cnt, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/restrack.c b/drivers/infiniband/core/restrack.c
index b097cfcade1c..87a9ac4bf987 100644
--- a/drivers/infiniband/core/restrack.c
+++ b/drivers/infiniband/core/restrack.c
@@ -25,7 +25,7 @@ int rdma_restrack_init(struct ib_device *dev)
 	struct rdma_restrack_root *rt;
 	int i;

-	dev->res = kcalloc(RDMA_RESTRACK_MAX, sizeof(*rt), GFP_KERNEL);
+	dev->res = kzalloc_objs(*rt, RDMA_RESTRACK_MAX, GFP_KERNEL);
 	if (!dev->res)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/roce_gid_mgmt.c b/drivers/infiniband/core/roce_gid_mgmt.c
index a9f2c6b1b29e..22c83e44091d 100644
--- a/drivers/infiniband/core/roce_gid_mgmt.c
+++ b/drivers/infiniband/core/roce_gid_mgmt.c
@@ -352,7 +352,7 @@ static void enum_netdev_ipv4_ips(struct ib_device *ib_dev,
 	}

 	in_dev_for_each_ifa_rcu(ifa, in_dev) {
-		struct sin_list *entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+		struct sin_list *entry = kzalloc_obj(*entry, GFP_ATOMIC);

 		if (!entry)
 			continue;
@@ -395,7 +395,7 @@ static void enum_netdev_ipv6_ips(struct ib_device *ib_dev,

 	read_lock_bh(&in6_dev->lock);
 	list_for_each_entry(ifp, &in6_dev->addr_list, if_list) {
-		struct sin6_list *entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+		struct sin6_list *entry = kzalloc_obj(*entry, GFP_ATOMIC);

 		if (!entry)
 			continue;
@@ -556,7 +556,7 @@ struct upper_list {
 static int netdev_upper_walk(struct net_device *upper,
 			     struct netdev_nested_priv *priv)
 {
-	struct upper_list *entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+	struct upper_list *entry = kmalloc_obj(*entry, GFP_ATOMIC);
 	struct list_head *upper_list = (struct list_head *)priv->data;

 	if (!entry)
@@ -660,8 +660,8 @@ static int netdevice_queue_work(struct netdev_event_work_cmd *cmds,
 				struct net_device *ndev)
 {
 	unsigned int i;
-	struct netdev_event_work *ndev_work =
-		kmalloc(sizeof(*ndev_work), GFP_KERNEL);
+	struct netdev_event_work *ndev_work = kmalloc_obj(*ndev_work,
+							  GFP_KERNEL);

 	if (!ndev_work)
 		return NOTIFY_DONE;
@@ -858,7 +858,7 @@ static int addr_event(struct notifier_block *this, unsigned long event,
 		return NOTIFY_DONE;
 	}

-	work = kmalloc(sizeof(*work), GFP_ATOMIC);
+	work = kmalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return NOTIFY_DONE;

diff --git a/drivers/infiniband/core/rw.c b/drivers/infiniband/core/rw.c
index 518095d82d5d..71345ccf1bf8 100644
--- a/drivers/infiniband/core/rw.c
+++ b/drivers/infiniband/core/rw.c
@@ -162,7 +162,7 @@ static int rdma_rw_init_mr_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
 	int i, j, ret = 0, count = 0;

 	ctx->nr_ops = DIV_ROUND_UP(sg_cnt, pages_per_mr);
-	ctx->reg = kcalloc(ctx->nr_ops, sizeof(*ctx->reg), GFP_KERNEL);
+	ctx->reg = kzalloc_objs(*ctx->reg, ctx->nr_ops, GFP_KERNEL);
 	if (!ctx->reg) {
 		ret = -ENOMEM;
 		goto out;
@@ -213,8 +213,8 @@ static int rdma_rw_init_mr_wrs_bvec(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
 	int i, ret, count = 0;
 	u32 nents = 0;

-	ctx->reg = kcalloc(DIV_ROUND_UP(nr_bvec, pages_per_mr),
-			   sizeof(*ctx->reg), GFP_KERNEL);
+	ctx->reg = kzalloc_objs(*ctx->reg, DIV_ROUND_UP(nr_bvec, pages_per_mr),
+				GFP_KERNEL);
 	if (!ctx->reg)
 		return -ENOMEM;

@@ -222,9 +222,8 @@ static int rdma_rw_init_mr_wrs_bvec(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
 	 * Build scatterlist from bvecs using the iterator. This follows
 	 * the pattern from __blk_rq_map_sg.
 	 */
-	ctx->reg[0].sgt.sgl = kmalloc_array(nr_bvec,
-					    sizeof(*ctx->reg[0].sgt.sgl),
-					    GFP_KERNEL);
+	ctx->reg[0].sgt.sgl = kmalloc_objs(*ctx->reg[0].sgt.sgl, nr_bvec,
+					   GFP_KERNEL);
 	if (!ctx->reg[0].sgt.sgl) {
 		ret = -ENOMEM;
 		goto out_free_reg;
@@ -298,11 +297,11 @@ static int rdma_rw_init_map_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp,

 	ctx->nr_ops = DIV_ROUND_UP(sg_cnt, max_sge);

-	ctx->map.sges = sge = kcalloc(sg_cnt, sizeof(*sge), GFP_KERNEL);
+	ctx->map.sges = sge = kzalloc_objs(*sge, sg_cnt, GFP_KERNEL);
 	if (!ctx->map.sges)
 		goto out;

-	ctx->map.wrs = kcalloc(ctx->nr_ops, sizeof(*ctx->map.wrs), GFP_KERNEL);
+	ctx->map.wrs = kzalloc_objs(*ctx->map.wrs, ctx->nr_ops, GFP_KERNEL);
 	if (!ctx->map.wrs)
 		goto out_free_sges;

@@ -757,7 +756,7 @@ int rdma_rw_ctx_signature_init(struct rdma_rw_ctx *ctx, struct ib_qp *qp,

 	ctx->type = RDMA_RW_SIG_MR;
 	ctx->nr_ops = 1;
-	ctx->reg = kzalloc(sizeof(*ctx->reg), GFP_KERNEL);
+	ctx->reg = kzalloc_obj(*ctx->reg, GFP_KERNEL);
 	if (!ctx->reg) {
 		ret = -ENOMEM;
 		goto out_unmap_prot_sg;
diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
index c23e9c847314..cbea6fdd0e75 100644
--- a/drivers/infiniband/core/sa_query.c
+++ b/drivers/infiniband/core/sa_query.c
@@ -1607,7 +1607,7 @@ static void ib_sa_service_rec_callback(struct ib_sa_query *sa_query, int status,
 		return;
 	}

-	rec = kmalloc_array(num_services, sizeof(*rec), GFP_KERNEL);
+	rec = kmalloc_objs(*rec, num_services, GFP_KERNEL);
 	if (!rec) {
 		query->callback(-ENOMEM, NULL, 0, query->context);
 		return;
@@ -1689,7 +1689,7 @@ int ib_sa_path_rec_get(struct ib_sa_client *client,
 	port  = &sa_dev->port[port_num - sa_dev->start_port];
 	agent = port->agent;

-	query = kzalloc(sizeof(*query), gfp_mask);
+	query = kzalloc_obj(*query, gfp_mask);
 	if (!query)
 		return -ENOMEM;

@@ -1702,8 +1702,7 @@ int ib_sa_path_rec_get(struct ib_sa_client *client,
 		} else if (status == PR_OPA_SUPPORTED) {
 			query->sa_query.flags |= IB_SA_QUERY_OPA;
 		} else {
-			query->conv_pr =
-				kmalloc(sizeof(*query->conv_pr), gfp_mask);
+			query->conv_pr = kmalloc_obj(*query->conv_pr, gfp_mask);
 			if (!query->conv_pr) {
 				ret = -ENOMEM;
 				goto err1;
@@ -1814,7 +1813,7 @@ int ib_sa_service_rec_get(struct ib_sa_client *client,
 	port = &sa_dev->port[port_num - sa_dev->start_port];
 	agent = port->agent;

-	query = kzalloc(sizeof(*query), gfp_mask);
+	query = kzalloc_obj(*query, gfp_mask);
 	if (!query)
 		return -ENOMEM;

@@ -1906,7 +1905,7 @@ int ib_sa_mcmember_rec_query(struct ib_sa_client *client,
 	port  = &sa_dev->port[port_num - sa_dev->start_port];
 	agent = port->agent;

-	query = kzalloc(sizeof(*query), gfp_mask);
+	query = kzalloc_obj(*query, gfp_mask);
 	if (!query)
 		return -ENOMEM;

@@ -2002,7 +2001,7 @@ int ib_sa_guid_info_rec_query(struct ib_sa_client *client,
 	port  = &sa_dev->port[port_num - sa_dev->start_port];
 	agent = port->agent;

-	query = kzalloc(sizeof(*query), gfp_mask);
+	query = kzalloc_obj(*query, gfp_mask);
 	if (!query)
 		return -ENOMEM;

@@ -2131,7 +2130,7 @@ static int ib_sa_classport_info_rec_query(struct ib_sa_port *port,

 	agent = port->agent;

-	query = kzalloc(sizeof(*query), gfp_mask);
+	query = kzalloc_obj(*query, gfp_mask);
 	if (!query)
 		return -ENOMEM;

@@ -2189,7 +2188,7 @@ static void update_ib_cpi(struct work_struct *work)
 	}
 	spin_unlock_irqrestore(&port->classport_lock, flags);

-	cb_context = kmalloc(sizeof(*cb_context), GFP_KERNEL);
+	cb_context = kmalloc_obj(*cb_context, GFP_KERNEL);
 	if (!cb_context)
 		goto err_nomem;

@@ -2307,7 +2306,7 @@ static void update_sm_ah(struct work_struct *work)
 		return;
 	}

-	new_ah = kmalloc(sizeof(*new_ah), GFP_KERNEL);
+	new_ah = kmalloc_obj(*new_ah, GFP_KERNEL);
 	if (!new_ah)
 		return;

@@ -2415,9 +2414,8 @@ static int ib_sa_add_one(struct ib_device *device)
 	s = rdma_start_port(device);
 	e = rdma_end_port(device);

-	sa_dev = kzalloc(struct_size(sa_dev, port,
-				     size_add(size_sub(e, s), 1)),
-			 GFP_KERNEL);
+	sa_dev = kzalloc_flex(*sa_dev, port, size_add(size_sub(e, s), 1),
+			      GFP_KERNEL);
 	if (!sa_dev)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/security.c b/drivers/infiniband/core/security.c
index 3512c2e54efc..deccd7b7eb51 100644
--- a/drivers/infiniband/core/security.c
+++ b/drivers/infiniband/core/security.c
@@ -258,7 +258,7 @@ static int port_pkey_list_insert(struct ib_port_pkey *pp)
 	if (!pkey) {
 		bool found = false;

-		pkey = kzalloc(sizeof(*pkey), GFP_KERNEL);
+		pkey = kzalloc_obj(*pkey, GFP_KERNEL);
 		if (!pkey)
 			return -ENOMEM;

@@ -335,7 +335,7 @@ static struct ib_ports_pkeys *get_new_pps(const struct ib_qp *qp,
 	struct ib_ports_pkeys *new_pps;
 	struct ib_ports_pkeys *qp_pps = qp->qp_sec->ports_pkeys;

-	new_pps = kzalloc(sizeof(*new_pps), GFP_KERNEL);
+	new_pps = kzalloc_obj(*new_pps, GFP_KERNEL);
 	if (!new_pps)
 		return NULL;

@@ -428,7 +428,7 @@ int ib_create_qp_security(struct ib_qp *qp, struct ib_device *dev)
 	if (!is_ib)
 		return 0;

-	qp->qp_sec = kzalloc(sizeof(*qp->qp_sec), GFP_KERNEL);
+	qp->qp_sec = kzalloc_obj(*qp->qp_sec, GFP_KERNEL);
 	if (!qp->qp_sec)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index bfaca07933d8..c2becb0b39a2 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -515,8 +515,8 @@ static int get_perf_mad(struct ib_device *dev, int port_num, __be16 attr,
 	if (!dev->ops.process_mad)
 		return -ENOSYS;

-	in_mad = kzalloc(sizeof(*in_mad), GFP_KERNEL);
-	out_mad = kzalloc(sizeof(*out_mad), GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kzalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad) {
 		ret = -ENOMEM;
 		goto out;
@@ -855,12 +855,12 @@ alloc_hw_stats_device(struct ib_device *ibdev)
 	 * Two extra attribue elements here, one for the lifespan entry and
 	 * one to NULL terminate the list for the sysfs core code
 	 */
-	data = kzalloc(struct_size(data, attrs, size_add(stats->num_counters, 1)),
-		       GFP_KERNEL);
+	data = kzalloc_flex(*data, attrs, size_add(stats->num_counters, 1),
+			    GFP_KERNEL);
 	if (!data)
 		goto err_free_stats;
-	data->group.attrs = kcalloc(stats->num_counters + 2,
-				    sizeof(*data->group.attrs), GFP_KERNEL);
+	data->group.attrs = kzalloc_objs(*data->group.attrs,
+					 stats->num_counters + 2, GFP_KERNEL);
 	if (!data->group.attrs)
 		goto err_free_data;

@@ -962,12 +962,12 @@ alloc_hw_stats_port(struct ib_port *port, struct attribute_group *group)
 	 * Two extra attribue elements here, one for the lifespan entry and
 	 * one to NULL terminate the list for the sysfs core code
 	 */
-	data = kzalloc(struct_size(data, attrs, size_add(stats->num_counters, 1)),
-		       GFP_KERNEL);
+	data = kzalloc_flex(*data, attrs, size_add(stats->num_counters, 1),
+			    GFP_KERNEL);
 	if (!data)
 		goto err_free_stats;
-	group->attrs = kcalloc(stats->num_counters + 2,
-				    sizeof(*group->attrs), GFP_KERNEL);
+	group->attrs = kzalloc_objs(*group->attrs, stats->num_counters + 2,
+				    GFP_KERNEL);
 	if (!group->attrs)
 		goto err_free_data;

@@ -1054,7 +1054,7 @@ alloc_port_table_group(const char *name, struct attribute_group *group,
 	struct attribute **attr_list;
 	int i;

-	attr_list = kcalloc(num + 1, sizeof(*attr_list), GFP_KERNEL);
+	attr_list = kzalloc_objs(*attr_list, num + 1, GFP_KERNEL);
 	if (!attr_list)
 		return -ENOMEM;

@@ -1092,9 +1092,9 @@ static int setup_gid_attrs(struct ib_port *port,
 	struct gid_attr_group *gid_attr_group;
 	int ret;

-	gid_attr_group = kzalloc(struct_size(gid_attr_group, attrs_list,
-					     size_mul(attr->gid_tbl_len, 2)),
-				 GFP_KERNEL);
+	gid_attr_group = kzalloc_flex(*gid_attr_group, attrs_list,
+				      size_mul(attr->gid_tbl_len, 2),
+				      GFP_KERNEL);
 	if (!gid_attr_group)
 		return -ENOMEM;
 	gid_attr_group->port = port;
@@ -1157,9 +1157,9 @@ static struct ib_port *setup_port(struct ib_core_device *coredev, int port_num,
 	struct ib_port *p;
 	int ret;

-	p = kvzalloc(struct_size(p, attrs_list,
-				size_add(attr->gid_tbl_len, attr->pkey_tbl_len)),
-		     GFP_KERNEL);
+	p = kvzalloc_flex(*p, attrs_list,
+			  size_add(attr->gid_tbl_len, attr->pkey_tbl_len),
+			  GFP_KERNEL);
 	if (!p)
 		return ERR_PTR(-ENOMEM);
 	p->ibdev = device;
diff --git a/drivers/infiniband/core/ucaps.c b/drivers/infiniband/core/ucaps.c
index de5cb8bf0a61..d5524f69b981 100644
--- a/drivers/infiniband/core/ucaps.c
+++ b/drivers/infiniband/core/ucaps.c
@@ -160,7 +160,7 @@ int ib_create_ucap(enum rdma_user_cap type)
 		return 0;
 	}

-	ucap = kzalloc(sizeof(*ucap), GFP_KERNEL);
+	ucap = kzalloc_obj(*ucap, GFP_KERNEL);
 	if (!ucap) {
 		ret = -ENOMEM;
 		goto unlock;
diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
index ec3be65a2b88..f84c6a02eaff 100644
--- a/drivers/infiniband/core/ucma.c
+++ b/drivers/infiniband/core/ucma.c
@@ -195,7 +195,7 @@ static struct ucma_context *ucma_alloc_ctx(struct ucma_file *file)
 {
 	struct ucma_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

@@ -262,7 +262,7 @@ static struct ucma_event *ucma_create_uevent(struct ucma_context *ctx,
 {
 	struct ucma_event *uevent;

-	uevent = kzalloc(sizeof(*uevent), GFP_KERNEL);
+	uevent = kzalloc_obj(*uevent, GFP_KERNEL);
 	if (!uevent)
 		return NULL;

@@ -1529,7 +1529,7 @@ static ssize_t ucma_process_join(struct ucma_file *file,
 	if (IS_ERR(ctx))
 		return PTR_ERR(ctx);

-	mc = kzalloc(sizeof(*mc), GFP_KERNEL);
+	mc = kzalloc_obj(*mc, GFP_KERNEL);
 	if (!mc) {
 		ret = -ENOMEM;
 		goto err_put_ctx;
@@ -1770,7 +1770,7 @@ static ssize_t ucma_write_cm_event(struct ucma_file *file,
 	event.status = cmd.status;
 	event.param.arg = cmd.param.arg;

-	uevent = kzalloc(sizeof(*uevent), GFP_KERNEL);
+	uevent = kzalloc_obj(*uevent, GFP_KERNEL);
 	if (!uevent) {
 		ret = -ENOMEM;
 		goto out;
@@ -1885,7 +1885,7 @@ static int ucma_open(struct inode *inode, struct file *filp)
 {
 	struct ucma_file *file;

-	file = kmalloc(sizeof *file, GFP_KERNEL);
+	file = kmalloc_obj(*file, GFP_KERNEL);
 	if (!file)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
index 8137031c2a65..8863fd1b85d8 100644
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -189,7 +189,7 @@ struct ib_umem *ib_umem_get(struct ib_device *device, unsigned long addr,
 	if (access & IB_ACCESS_ON_DEMAND)
 		return ERR_PTR(-EOPNOTSUPP);

-	umem = kzalloc(sizeof(*umem), GFP_KERNEL);
+	umem = kzalloc_obj(*umem, GFP_KERNEL);
 	if (!umem)
 		return ERR_PTR(-ENOMEM);
 	umem->ibdev      = device;
diff --git a/drivers/infiniband/core/umem_dmabuf.c b/drivers/infiniband/core/umem_dmabuf.c
index 939da49b0dcc..dc35dbe18951 100644
--- a/drivers/infiniband/core/umem_dmabuf.c
+++ b/drivers/infiniband/core/umem_dmabuf.c
@@ -136,7 +136,7 @@ ib_umem_dmabuf_get_with_dma_device(struct ib_device *device,
 	if (dmabuf->size < end)
 		goto out_release_dmabuf;

-	umem_dmabuf = kzalloc(sizeof(*umem_dmabuf), GFP_KERNEL);
+	umem_dmabuf = kzalloc_obj(*umem_dmabuf, GFP_KERNEL);
 	if (!umem_dmabuf) {
 		ret = ERR_PTR(-ENOMEM);
 		goto out_release_dmabuf;
diff --git a/drivers/infiniband/core/umem_odp.c b/drivers/infiniband/core/umem_odp.c
index 32267258a19c..d14bd597a2b7 100644
--- a/drivers/infiniband/core/umem_odp.c
+++ b/drivers/infiniband/core/umem_odp.c
@@ -140,7 +140,7 @@ struct ib_umem_odp *ib_umem_odp_alloc_implicit(struct ib_device *device,
 	if (access & IB_ACCESS_HUGETLB)
 		return ERR_PTR(-EINVAL);

-	umem_odp = kzalloc(sizeof(*umem_odp), GFP_KERNEL);
+	umem_odp = kzalloc_obj(*umem_odp, GFP_KERNEL);
 	if (!umem_odp)
 		return ERR_PTR(-ENOMEM);
 	umem = &umem_odp->umem;
@@ -181,7 +181,7 @@ ib_umem_odp_alloc_child(struct ib_umem_odp *root, unsigned long addr,
 	if (WARN_ON(!root->is_implicit_odp))
 		return ERR_PTR(-EINVAL);

-	odp_data = kzalloc(sizeof(*odp_data), GFP_KERNEL);
+	odp_data = kzalloc_obj(*odp_data, GFP_KERNEL);
 	if (!odp_data)
 		return ERR_PTR(-ENOMEM);
 	umem = &odp_data->umem;
@@ -241,7 +241,7 @@ struct ib_umem_odp *ib_umem_odp_get(struct ib_device *device,
 	if (WARN_ON_ONCE(!(access & IB_ACCESS_ON_DEMAND)))
 		return ERR_PTR(-EINVAL);

-	umem_odp = kzalloc(sizeof(struct ib_umem_odp), GFP_KERNEL);
+	umem_odp = kzalloc_obj(struct ib_umem_odp, GFP_KERNEL);
 	if (!umem_odp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c
index 2f7e3c4483fc..0ff2b7ba6b79 100644
--- a/drivers/infiniband/core/user_mad.c
+++ b/drivers/infiniband/core/user_mad.c
@@ -247,7 +247,7 @@ static void recv_handler(struct ib_mad_agent *agent,
 	if (mad_recv_wc->wc->status != IB_WC_SUCCESS)
 		goto err1;

-	packet = kzalloc(sizeof *packet, GFP_KERNEL);
+	packet = kzalloc_obj(*packet, GFP_KERNEL);
 	if (!packet)
 		goto err1;

@@ -1018,7 +1018,7 @@ static int ib_umad_open(struct inode *inode, struct file *filp)
 		goto out;
 	}

-	file = kzalloc(sizeof(*file), GFP_KERNEL);
+	file = kzalloc_obj(*file, GFP_KERNEL);
 	if (!file) {
 		ret = -ENOMEM;
 		goto out;
@@ -1396,9 +1396,8 @@ static int ib_umad_add_one(struct ib_device *device)
 	s = rdma_start_port(device);
 	e = rdma_end_port(device);

-	umad_dev = kzalloc(struct_size(umad_dev, ports,
-				       size_add(size_sub(e, s), 1)),
-			   GFP_KERNEL);
+	umad_dev = kzalloc_flex(*umad_dev, ports, size_add(size_sub(e, s), 1),
+				GFP_KERNEL);
 	if (!umad_dev)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index f4616deeca54..7aa7f1692c73 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -510,7 +510,7 @@ static int xrcd_table_insert(struct ib_uverbs_device *dev,
 	struct rb_node **p = &dev->xrcd_tree.rb_node;
 	struct rb_node *parent = NULL;

-	entry = kmalloc(sizeof *entry, GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1672,8 +1672,8 @@ static int ib_uverbs_query_qp(struct uverbs_attr_bundle *attrs)
 	if (ret)
 		return ret;

-	attr      = kmalloc(sizeof *attr, GFP_KERNEL);
-	init_attr = kmalloc(sizeof *init_attr, GFP_KERNEL);
+	attr = kmalloc_obj(*attr, GFP_KERNEL);
+	init_attr = kmalloc_obj(*init_attr, GFP_KERNEL);
 	if (!attr || !init_attr) {
 		ret = -ENOMEM;
 		goto out;
@@ -1780,7 +1780,7 @@ static int modify_qp(struct uverbs_attr_bundle *attrs,
 	struct ib_qp *qp;
 	int ret;

-	attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_obj(*attr, GFP_KERNEL);
 	if (!attr)
 		return -ENOMEM;

@@ -2525,7 +2525,7 @@ static int ib_uverbs_attach_mcast(struct uverbs_attr_bundle *attrs)
 			goto out_put;
 		}

-	mcast = kmalloc(sizeof *mcast, GFP_KERNEL);
+	mcast = kmalloc_obj(*mcast, GFP_KERNEL);
 	if (!mcast) {
 		ret = -ENOMEM;
 		goto out_put;
@@ -2595,7 +2595,7 @@ struct ib_uflow_resources *flow_resources_alloc(size_t num_specs)
 {
 	struct ib_uflow_resources *resources;

-	resources = kzalloc(sizeof(*resources), GFP_KERNEL);
+	resources = kzalloc_obj(*resources, GFP_KERNEL);

 	if (!resources)
 		return NULL;
@@ -2604,9 +2604,9 @@ struct ib_uflow_resources *flow_resources_alloc(size_t num_specs)
 		goto out;

 	resources->counters =
-		kcalloc(num_specs, sizeof(*resources->counters), GFP_KERNEL);
+		kzalloc_objs(*resources->counters, num_specs, GFP_KERNEL);
 	resources->collection =
-		kcalloc(num_specs, sizeof(*resources->collection), GFP_KERNEL);
+		kzalloc_objs(*resources->collection, num_specs, GFP_KERNEL);

 	if (!resources->counters || !resources->collection)
 		goto err;
@@ -3116,7 +3116,7 @@ static int ib_uverbs_ex_create_rwq_ind_table(struct uverbs_attr_bundle *attrs)
 	if (err)
 		goto err_free;

-	wqs = kcalloc(num_wq_handles, sizeof(*wqs), GFP_KERNEL);
+	wqs = kzalloc_objs(*wqs, num_wq_handles, GFP_KERNEL);
 	if (!wqs) {
 		err = -ENOMEM;
 		goto  err_free;
@@ -3292,8 +3292,8 @@ static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs)
 		goto err_put;
 	}

-	flow_attr = kzalloc(struct_size(flow_attr, flows,
-				cmd.flow_attr.num_of_specs), GFP_KERNEL);
+	flow_attr = kzalloc_flex(*flow_attr, flows, cmd.flow_attr.num_of_specs,
+				 GFP_KERNEL);
 	if (!flow_attr) {
 		err = -ENOMEM;
 		goto err_put;
diff --git a/drivers/infiniband/core/uverbs_ioctl.c b/drivers/infiniband/core/uverbs_ioctl.c
index f80da6a67e24..f37bb447c230 100644
--- a/drivers/infiniband/core/uverbs_ioctl.c
+++ b/drivers/infiniband/core/uverbs_ioctl.c
@@ -120,7 +120,7 @@ __malloc void *_uverbs_alloc(struct uverbs_attr_bundle *bundle, size_t size,
 	if (new_used > pbundle->internal_avail) {
 		struct bundle_alloc_head *buf;

-		buf = kvmalloc(struct_size(buf, data, size), flags);
+		buf = kvmalloc_flex(*buf, data, size, flags);
 		if (!buf)
 			return ERR_PTR(-ENOMEM);
 		buf->next = pbundle->allocated_mem;
diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
index 973fe2c7ef53..2a3c8a5ead1c 100644
--- a/drivers/infiniband/core/uverbs_main.c
+++ b/drivers/infiniband/core/uverbs_main.c
@@ -382,7 +382,7 @@ void ib_uverbs_comp_handler(struct ib_cq *cq, void *cq_context)
 		return;
 	}

-	entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kmalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry) {
 		spin_unlock_irqrestore(&ev_queue->lock, flags);
 		return;
@@ -417,7 +417,7 @@ void ib_uverbs_async_handler(struct ib_uverbs_async_event_file *async_file,
 		return;
 	}

-	entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kmalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry) {
 		spin_unlock_irqrestore(&async_file->ev_queue.lock, flags);
 		return;
@@ -737,7 +737,7 @@ static void rdma_umap_open(struct vm_area_struct *vma)
 	if (!ufile->ucontext)
 		goto out_unlock;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		goto out_unlock;
 	rdma_umap_priv_init(priv, vma, opriv->entry);
@@ -966,7 +966,7 @@ static int ib_uverbs_open(struct inode *inode, struct file *filp)
 		}
 	}

-	file = kzalloc(sizeof(*file), GFP_KERNEL);
+	file = kzalloc_obj(*file, GFP_KERNEL);
 	if (!file) {
 		ret = -ENOMEM;
 		if (module_dependent)
@@ -1154,7 +1154,7 @@ static int ib_uverbs_add_one(struct ib_device *device)
 	    device->type == RDMA_DEVICE_TYPE_SMI)
 		return -EOPNOTSUPP;

-	uverbs_dev = kzalloc(sizeof(*uverbs_dev), GFP_KERNEL);
+	uverbs_dev = kzalloc_obj(*uverbs_dev, GFP_KERNEL);
 	if (!uverbs_dev)
 		return -ENOMEM;

diff --git a/drivers/infiniband/core/uverbs_uapi.c b/drivers/infiniband/core/uverbs_uapi.c
index 38d0bbbee796..7e8b04658526 100644
--- a/drivers/infiniband/core/uverbs_uapi.c
+++ b/drivers/infiniband/core/uverbs_uapi.c
@@ -445,8 +445,8 @@ static int uapi_finalize(struct uverbs_api *uapi)
 	uapi->notsupp_method.handler = ib_uverbs_notsupp;
 	uapi->num_write = max_write + 1;
 	uapi->num_write_ex = max_write_ex + 1;
-	data = kmalloc_array(uapi->num_write + uapi->num_write_ex,
-			     sizeof(*uapi->write_methods), GFP_KERNEL);
+	data = kmalloc_objs(*uapi->write_methods,
+			    uapi->num_write + uapi->num_write_ex, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -648,7 +648,7 @@ struct uverbs_api *uverbs_alloc_api(struct ib_device *ibdev)
 	struct uverbs_api *uapi;
 	int rc;

-	uapi = kzalloc(sizeof(*uapi), GFP_KERNEL);
+	uapi = kzalloc_obj(*uapi, GFP_KERNEL);
 	if (!uapi)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
index a2670a031faf..2e98f1e2e53f 100644
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -1186,7 +1186,7 @@ static struct ib_qp *__ib_open_qp(struct ib_qp *real_qp,
 	unsigned long flags;
 	int err;

-	qp = kzalloc(sizeof *qp, GFP_KERNEL);
+	qp = kzalloc_obj(*qp, GFP_KERNEL);
 	if (!qp)
 		return ERR_PTR(-ENOMEM);

@@ -2420,7 +2420,7 @@ struct ib_mr *ib_alloc_mr_integrity(struct ib_pd *pd,
 		goto out;
 	}

-	sig_attrs = kzalloc(sizeof(struct ib_sig_attrs), GFP_KERNEL);
+	sig_attrs = kzalloc_obj(struct ib_sig_attrs, GFP_KERNEL);
 	if (!sig_attrs) {
 		mr = ERR_PTR(-ENOMEM);
 		goto out;
@@ -3205,7 +3205,7 @@ struct rdma_hw_stats *rdma_alloc_hw_stats_struct(
 {
 	struct rdma_hw_stats *stats;

-	stats = kzalloc(struct_size(stats, value, num_counters), GFP_KERNEL);
+	stats = kzalloc_flex(*stats, value, num_counters, GFP_KERNEL);
 	if (!stats)
 		return NULL;

diff --git a/drivers/infiniband/hw/bng_re/bng_dev.c b/drivers/infiniband/hw/bng_re/bng_dev.c
index d8f8d7f7075f..d43fa9a5b109 100644
--- a/drivers/infiniband/hw/bng_re/bng_dev.c
+++ b/drivers/infiniband/hw/bng_re/bng_dev.c
@@ -77,7 +77,7 @@ static int bng_re_setup_chip_ctx(struct bng_re_dev *rdev)
 	aux_dev = rdev->aux_dev;
 	rdev->bng_res.pdev = aux_dev->pdev;
 	rdev->rcfw.res = &rdev->bng_res;
-	chip_ctx = kzalloc(sizeof(*chip_ctx), GFP_KERNEL);
+	chip_ctx = kzalloc_obj(*chip_ctx, GFP_KERNEL);
 	if (!chip_ctx)
 		return -ENOMEM;
 	chip_ctx->chip_num = aux_dev->chip_num;
@@ -85,7 +85,7 @@ static int bng_re_setup_chip_ctx(struct bng_re_dev *rdev)

 	rdev->chip_ctx = chip_ctx;
 	rdev->bng_res.cctx = rdev->chip_ctx;
-	rdev->dev_attr = kzalloc(sizeof(*rdev->dev_attr), GFP_KERNEL);
+	rdev->dev_attr = kzalloc_obj(*rdev->dev_attr, GFP_KERNEL);
 	if (!rdev->dev_attr)
 		goto free_chip_ctx;
 	rdev->bng_res.dattr = rdev->dev_attr;
@@ -337,7 +337,7 @@ static int bng_re_dev_init(struct bng_re_dev *rdev)
 	}

 	/* Allocate nq record memory */
-	rdev->nqr = kzalloc(sizeof(*rdev->nqr), GFP_KERNEL);
+	rdev->nqr = kzalloc_obj(*rdev->nqr, GFP_KERNEL);
 	if (!rdev->nqr) {
 		bng_re_destroy_chip_ctx(rdev);
 		bnge_unregister_dev(rdev->aux_dev);
@@ -464,7 +464,7 @@ static int bng_re_probe(struct auxiliary_device *adev,
 	struct bng_re_en_dev_info *en_info;
 	int rc;

-	en_info = kzalloc(sizeof(*en_info), GFP_KERNEL);
+	en_info = kzalloc_obj(*en_info, GFP_KERNEL);
 	if (!en_info)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/bng_re/bng_fw.c b/drivers/infiniband/hw/bng_re/bng_fw.c
index 01b3e1cbe719..cd2d2670700d 100644
--- a/drivers/infiniband/hw/bng_re/bng_fw.c
+++ b/drivers/infiniband/hw/bng_re/bng_fw.c
@@ -98,8 +98,8 @@ int bng_re_alloc_fw_channel(struct bng_re_res *res,
 		goto fail;
 	}

-	rcfw->crsqe_tbl = kcalloc(cmdq->hwq.max_elements,
-				  sizeof(*rcfw->crsqe_tbl), GFP_KERNEL);
+	rcfw->crsqe_tbl = kzalloc_objs(*rcfw->crsqe_tbl, cmdq->hwq.max_elements,
+				       GFP_KERNEL);
 	if (!rcfw->crsqe_tbl)
 		goto fail;

diff --git a/drivers/infiniband/hw/bnxt_re/debugfs.c b/drivers/infiniband/hw/bnxt_re/debugfs.c
index e025217861c2..e43698156c61 100644
--- a/drivers/infiniband/hw/bnxt_re/debugfs.c
+++ b/drivers/infiniband/hw/bnxt_re/debugfs.c
@@ -467,7 +467,7 @@ static void bnxt_re_init_cq_coal_debugfs(struct bnxt_re_dev *rdev)
 	if (!_is_cq_coalescing_supported(rdev->dev_attr->dev_cap_flags2))
 		return;

-	dbg_cq_coal_params = kzalloc(sizeof(*dbg_cq_coal_params), GFP_KERNEL);
+	dbg_cq_coal_params = kzalloc_obj(*dbg_cq_coal_params, GFP_KERNEL);
 	if (!dbg_cq_coal_params)
 		return;

@@ -497,7 +497,7 @@ void bnxt_re_debugfs_add_pdev(struct bnxt_re_dev *rdev)

 	bnxt_re_debugfs_add_info(rdev);

-	rdev->cc_config_params = kzalloc(sizeof(*cc_params), GFP_KERNEL);
+	rdev->cc_config_params = kzalloc_obj(*cc_params, GFP_KERNEL);

 	for (i = 0; i < BNXT_RE_CC_PARAM_GEN0; i++) {
 		struct bnxt_re_cc_param *tmp_params = &rdev->cc_config_params->gen0_parms[i];
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
index be3c3f1f87f7..ea1518ba5c02 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
@@ -461,7 +461,7 @@ int bnxt_re_add_gid(const struct ib_gid_attr *attr, void **context)
 		return rc;
 	}

-	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx_tbl = sgid_tbl->ctx;
@@ -593,7 +593,7 @@ static int bnxt_re_create_fence_mr(struct bnxt_re_pd *pd)
 	fence->dma_addr = dma_addr;

 	/* Allocate a MR */
-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr) {
 		rc = -ENOMEM;
 		goto fail;
@@ -651,7 +651,7 @@ bnxt_re_mmap_entry_insert(struct bnxt_re_ucontext *uctx, u64 mem_offset,
 	struct bnxt_re_user_mmap_entry *entry;
 	int ret;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return NULL;

@@ -1190,7 +1190,7 @@ static struct bnxt_re_ah *bnxt_re_create_shadow_qp_ah
 	union ib_gid sgid;
 	int rc;

-	ah = kzalloc(sizeof(*ah), GFP_KERNEL);
+	ah = kzalloc_obj(*ah, GFP_KERNEL);
 	if (!ah)
 		return NULL;

@@ -1237,7 +1237,7 @@ static struct bnxt_re_qp *bnxt_re_create_shadow_qp
 	struct bnxt_re_qp *qp;
 	int rc;

-	qp = kzalloc(sizeof(*qp), GFP_KERNEL);
+	qp = kzalloc_obj(*qp, GFP_KERNEL);
 	if (!qp)
 		return NULL;

@@ -1547,8 +1547,8 @@ static int bnxt_re_create_shadow_gsi(struct bnxt_re_qp *qp,

 	rdev = qp->rdev;
 	/* Create a shadow QP to handle the QP1 traffic */
-	sqp_tbl = kcalloc(BNXT_RE_MAX_GSI_SQP_ENTRIES, sizeof(*sqp_tbl),
-			  GFP_KERNEL);
+	sqp_tbl = kzalloc_objs(*sqp_tbl, BNXT_RE_MAX_GSI_SQP_ENTRIES,
+			       GFP_KERNEL);
 	if (!sqp_tbl)
 		return -ENOMEM;
 	rdev->gsi_ctx.sqp_tbl = sqp_tbl;
@@ -2359,7 +2359,7 @@ int bnxt_re_query_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
 	struct bnxt_qplib_qp *qplib_qp;
 	int rc;

-	qplib_qp = kzalloc(sizeof(*qplib_qp), GFP_KERNEL);
+	qplib_qp = kzalloc_obj(*qplib_qp, GFP_KERNEL);
 	if (!qplib_qp)
 		return -ENOMEM;

@@ -3194,8 +3194,8 @@ int bnxt_re_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
 		cq->qplib_cq.dpi = &uctx->dpi;
 	} else {
 		cq->max_cql = min_t(u32, entries, MAX_CQL_PER_POLL);
-		cq->cql = kcalloc(cq->max_cql, sizeof(struct bnxt_qplib_cqe),
-				  GFP_KERNEL);
+		cq->cql = kzalloc_objs(struct bnxt_qplib_cqe, cq->max_cql,
+				       GFP_KERNEL);
 		if (!cq->cql) {
 			rc = -ENOMEM;
 			goto fail;
@@ -4030,7 +4030,7 @@ struct ib_mr *bnxt_re_get_dma_mr(struct ib_pd *ib_pd, int mr_access_flags)
 	u32 active_mrs;
 	int rc;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -4133,7 +4133,7 @@ struct ib_mr *bnxt_re_alloc_mr(struct ib_pd *ib_pd, enum ib_mr_type type,
 	if (max_num_sg > MAX_PBL_LVL_1_PGS)
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -4185,7 +4185,7 @@ struct ib_mw *bnxt_re_alloc_mw(struct ib_pd *ib_pd, enum ib_mw_type type,
 	u32 active_mws;
 	int rc;

-	mw = kzalloc(sizeof(*mw), GFP_KERNEL);
+	mw = kzalloc_obj(*mw, GFP_KERNEL);
 	if (!mw)
 		return ERR_PTR(-ENOMEM);
 	mw->rdev = rdev;
@@ -4250,7 +4250,7 @@ static struct ib_mr *__bnxt_re_user_reg_mr(struct ib_pd *ib_pd, u64 length, u64
 		return ERR_PTR(-EINVAL);
 	}

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -4507,7 +4507,7 @@ struct ib_flow *bnxt_re_create_flow(struct ib_qp *ib_qp,
 		return ERR_PTR(-EBUSY);
 	}

-	flow = kzalloc(sizeof(*flow), GFP_KERNEL);
+	flow = kzalloc_obj(*flow, GFP_KERNEL);
 	if (!flow) {
 		mutex_unlock(&rdev->qp_lock);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
index ee882456319d..cbb56ba634fc 100644
--- a/drivers/infiniband/hw/bnxt_re/main.c
+++ b/drivers/infiniband/hw/bnxt_re/main.c
@@ -171,7 +171,7 @@ static int bnxt_re_setup_chip_ctx(struct bnxt_re_dev *rdev)
 	en_dev = rdev->en_dev;

 	rdev->qplib_res.pdev = en_dev->pdev;
-	chip_ctx = kzalloc(sizeof(*chip_ctx), GFP_KERNEL);
+	chip_ctx = kzalloc_obj(*chip_ctx, GFP_KERNEL);
 	if (!chip_ctx)
 		return -ENOMEM;
 	chip_ctx->chip_num = en_dev->chip_num;
@@ -182,7 +182,7 @@ static int bnxt_re_setup_chip_ctx(struct bnxt_re_dev *rdev)

 	rdev->qplib_res.cctx = rdev->chip_ctx;
 	rdev->rcfw.res = &rdev->qplib_res;
-	rdev->dev_attr = kzalloc(sizeof(*rdev->dev_attr), GFP_KERNEL);
+	rdev->dev_attr = kzalloc_obj(*rdev->dev_attr, GFP_KERNEL);
 	if (!rdev->dev_attr)
 		goto free_chip_ctx;
 	rdev->qplib_res.dattr = rdev->dev_attr;
@@ -420,7 +420,7 @@ static void bnxt_re_async_notifier(void *handle, struct hwrm_async_event_cmpl *c

 	switch (event_id) {
 	case ASYNC_EVENT_CMPL_EVENT_ID_DCB_CONFIG_CHANGE:
-		dcb_work = kzalloc(sizeof(*dcb_work), GFP_ATOMIC);
+		dcb_work = kzalloc_obj(*dcb_work, GFP_ATOMIC);
 		if (!dcb_work)
 			break;

@@ -2033,7 +2033,7 @@ static int bnxt_re_ib_init(struct bnxt_re_dev *rdev)

 static int bnxt_re_alloc_nqr_mem(struct bnxt_re_dev *rdev)
 {
-	rdev->nqr = kzalloc(sizeof(*rdev->nqr), GFP_KERNEL);
+	rdev->nqr = kzalloc_obj(*rdev->nqr, GFP_KERNEL);
 	if (!rdev->nqr)
 		return -ENOMEM;

@@ -2491,7 +2491,7 @@ static int bnxt_re_probe(struct auxiliary_device *adev,
 	en_dev = aux_priv->edev;

 	mutex_lock(&bnxt_re_mutex);
-	en_info = kzalloc(sizeof(*en_info), GFP_KERNEL);
+	en_info = kzalloc_obj(*en_info, GFP_KERNEL);
 	if (!en_info) {
 		mutex_unlock(&bnxt_re_mutex);
 		return -ENOMEM;
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
index 3e44311bf939..9a491e489b2f 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
@@ -688,8 +688,8 @@ int bnxt_qplib_create_srq(struct bnxt_qplib_res *res,
 	srq->start_idx = 0;
 	srq->last_idx = srq->hwq.max_elements - 1;
 	if (!srq->hwq.is_user) {
-		srq->swq = kcalloc(srq->hwq.max_elements, sizeof(*srq->swq),
-				   GFP_KERNEL);
+		srq->swq = kzalloc_objs(*srq->swq, srq->hwq.max_elements,
+					GFP_KERNEL);
 		if (!srq->swq) {
 			rc = -ENOMEM;
 			goto fail;
@@ -799,7 +799,7 @@ static int bnxt_qplib_alloc_init_swq(struct bnxt_qplib_q *que)
 {
 	int indx;

-	que->swq = kcalloc(que->max_sw_wqe, sizeof(*que->swq), GFP_KERNEL);
+	que->swq = kzalloc_objs(*que->swq, que->max_sw_wqe, GFP_KERNEL);
 	if (!que->swq)
 		return -ENOMEM;

@@ -2096,7 +2096,7 @@ int bnxt_qplib_post_send(struct bnxt_qplib_qp *qp,
 	qp->wqe_cnt++;
 done:
 	if (sch_handler) {
-		nq_work = kzalloc(sizeof(*nq_work), GFP_ATOMIC);
+		nq_work = kzalloc_obj(*nq_work, GFP_ATOMIC);
 		if (nq_work) {
 			nq_work->cq = qp->scq;
 			nq_work->nq = qp->scq->nq;
@@ -2183,7 +2183,7 @@ int bnxt_qplib_post_recv(struct bnxt_qplib_qp *qp,
 	bnxt_qplib_hwq_incr_prod(&rq->dbinfo, hwq, swq->slots);
 done:
 	if (sch_handler) {
-		nq_work = kzalloc(sizeof(*nq_work), GFP_ATOMIC);
+		nq_work = kzalloc_obj(*nq_work, GFP_ATOMIC);
 		if (nq_work) {
 			nq_work->cq = qp->rcq;
 			nq_work->nq = qp->rcq->nq;
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
index 4dad0cfcfa98..4ba87b0ed62f 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
@@ -968,8 +968,8 @@ int bnxt_qplib_alloc_rcfw_channel(struct bnxt_qplib_res *res,
 		goto fail;
 	}

-	rcfw->crsqe_tbl = kcalloc(cmdq->hwq.max_elements,
-				  sizeof(*rcfw->crsqe_tbl), GFP_KERNEL);
+	rcfw->crsqe_tbl = kzalloc_objs(*rcfw->crsqe_tbl, cmdq->hwq.max_elements,
+				       GFP_KERNEL);
 	if (!rcfw->crsqe_tbl)
 		goto fail;

diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.c b/drivers/infiniband/hw/bnxt_re/qplib_res.c
index 4d674a3aee1a..619947e2f114 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_res.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_res.c
@@ -556,7 +556,7 @@ static int bnxt_qplib_alloc_sgid_tbl(struct bnxt_qplib_res *res,
 				     struct bnxt_qplib_sgid_tbl *sgid_tbl,
 				     u16 max)
 {
-	sgid_tbl->tbl = kcalloc(max, sizeof(*sgid_tbl->tbl), GFP_KERNEL);
+	sgid_tbl->tbl = kzalloc_objs(*sgid_tbl->tbl, max, GFP_KERNEL);
 	if (!sgid_tbl->tbl)
 		return -ENOMEM;

@@ -872,8 +872,8 @@ int bnxt_qplib_alloc_res(struct bnxt_qplib_res *res, struct net_device *netdev)

 	/* Allocate one extra to hold the QP1 entries */
 	rcfw->qp_tbl_size = max_t(u32, BNXT_RE_MAX_QPC_COUNT + 1, dev_attr->max_qp);
-	rcfw->qp_tbl = kcalloc(rcfw->qp_tbl_size, sizeof(struct bnxt_qplib_qp_node),
-			       GFP_KERNEL);
+	rcfw->qp_tbl = kzalloc_objs(struct bnxt_qplib_qp_node,
+				    rcfw->qp_tbl_size, GFP_KERNEL);
 	if (!rcfw->qp_tbl)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c
index 14ced7b667fa..c891fc3177e9 100644
--- a/drivers/infiniband/hw/cxgb4/cq.c
+++ b/drivers/infiniband/hw/cxgb4/cq.c
@@ -1095,10 +1095,10 @@ int c4iw_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,

 	if (ucontext) {
 		ret = -ENOMEM;
-		mm = kmalloc(sizeof(*mm), GFP_KERNEL);
+		mm = kmalloc_obj(*mm, GFP_KERNEL);
 		if (!mm)
 			goto err_remove_handle;
-		mm2 = kmalloc(sizeof(*mm2), GFP_KERNEL);
+		mm2 = kmalloc_obj(*mm2, GFP_KERNEL);
 		if (!mm2)
 			goto err_free_mm;

diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
index d892f55febe2..95e01f23c7b9 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -330,7 +330,7 @@ static int qp_open(struct inode *inode, struct file *file)
 	unsigned long index;
 	int count = 1;

-	qpd = kmalloc(sizeof(*qpd), GFP_KERNEL);
+	qpd = kmalloc_obj(*qpd, GFP_KERNEL);
 	if (!qpd)
 		return -ENOMEM;

@@ -424,7 +424,7 @@ static int stag_open(struct inode *inode, struct file *file)
 	int ret = 0;
 	int count = 1;

-	stagd = kmalloc(sizeof(*stagd), GFP_KERNEL);
+	stagd = kmalloc_obj(*stagd, GFP_KERNEL);
 	if (!stagd) {
 		ret = -ENOMEM;
 		goto out;
@@ -675,7 +675,7 @@ static int ep_open(struct inode *inode, struct file *file)
 	int ret = 0;
 	int count = 1;

-	epd = kmalloc(sizeof(*epd), GFP_KERNEL);
+	epd = kmalloc_obj(*epd, GFP_KERNEL);
 	if (!epd) {
 		ret = -ENOMEM;
 		goto out;
@@ -881,9 +881,9 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
 	rdev->status_page->write_cmpl_supported = rdev->lldi.write_cmpl_support;

 	if (c4iw_wr_log) {
-		rdev->wr_log = kcalloc(1 << c4iw_wr_log_size_order,
-				       sizeof(*rdev->wr_log),
-				       GFP_KERNEL);
+		rdev->wr_log = kzalloc_objs(*rdev->wr_log,
+					    1 << c4iw_wr_log_size_order,
+					    GFP_KERNEL);
 		if (rdev->wr_log) {
 			rdev->wr_log_size = 1 << c4iw_wr_log_size_order;
 			atomic_set(&rdev->wr_log_idx, 0);
@@ -1078,7 +1078,7 @@ static void *c4iw_uld_add(const struct cxgb4_lld_info *infop)
 		pr_info("Chelsio T4/T5 RDMA Driver - version %s\n",
 			DRV_VERSION);

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		ctx = ERR_PTR(-ENOMEM);
 		goto out;
@@ -1439,7 +1439,7 @@ static void recover_queues(struct uld_ctx *ctx)
 	xa_for_each(&ctx->dev->qps, index, qp)
 		count++;

-	qp_list.qps = kcalloc(count, sizeof(*qp_list.qps), GFP_ATOMIC);
+	qp_list.qps = kzalloc_objs(*qp_list.qps, count, GFP_ATOMIC);
 	if (!qp_list.qps) {
 		xa_unlock_irq(&ctx->dev->qps);
 		return;
@@ -1522,7 +1522,7 @@ struct c4iw_wr_wait *c4iw_alloc_wr_wait(gfp_t gfp)
 {
 	struct c4iw_wr_wait *wr_waitp;

-	wr_waitp = kzalloc(sizeof(*wr_waitp), gfp);
+	wr_waitp = kzalloc_obj(*wr_waitp, gfp);
 	if (wr_waitp) {
 		kref_init(&wr_waitp->kref);
 		pr_debug("wr_wait %p\n", wr_waitp);
diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c
index adeed7447e7b..caa489c653ce 100644
--- a/drivers/infiniband/hw/cxgb4/mem.c
+++ b/drivers/infiniband/hw/cxgb4/mem.c
@@ -282,7 +282,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry,
 	if (c4iw_fatal_error(rdev))
 		return -EIO;

-	tpt = kmalloc(sizeof(*tpt), GFP_KERNEL);
+	tpt = kmalloc_obj(*tpt, GFP_KERNEL);
 	if (!tpt)
 		return -ENOMEM;

@@ -439,7 +439,7 @@ struct ib_mr *c4iw_get_dma_mr(struct ib_pd *pd, int acc)
 	php = to_c4iw_pd(pd);
 	rhp = php->rhp;

-	mhp = kzalloc(sizeof(*mhp), GFP_KERNEL);
+	mhp = kzalloc_obj(*mhp, GFP_KERNEL);
 	if (!mhp)
 		return ERR_PTR(-ENOMEM);
 	mhp->wr_waitp = c4iw_alloc_wr_wait(GFP_KERNEL);
@@ -517,7 +517,7 @@ struct ib_mr *c4iw_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 	if (mr_exceeds_hw_limits(rhp, length))
 		return ERR_PTR(-EINVAL);

-	mhp = kzalloc(sizeof(*mhp), GFP_KERNEL);
+	mhp = kzalloc_obj(*mhp, GFP_KERNEL);
 	if (!mhp)
 		return ERR_PTR(-ENOMEM);
 	mhp->wr_waitp = c4iw_alloc_wr_wait(GFP_KERNEL);
@@ -618,7 +618,7 @@ struct ib_mr *c4iw_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
 					 use_dsgl))
 		return ERR_PTR(-EINVAL);

-	mhp = kzalloc(sizeof(*mhp), GFP_KERNEL);
+	mhp = kzalloc_obj(*mhp, GFP_KERNEL);
 	if (!mhp) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/infiniband/hw/cxgb4/provider.c b/drivers/infiniband/hw/cxgb4/provider.c
index e059f92d90fd..03db946208b6 100644
--- a/drivers/infiniband/hw/cxgb4/provider.c
+++ b/drivers/infiniband/hw/cxgb4/provider.c
@@ -92,7 +92,7 @@ static int c4iw_alloc_ucontext(struct ib_ucontext *ucontext,
 		pr_err_once("Warning - downlevel libcxgb4 (non-fatal), device status page disabled\n");
 		rhp->rdev.flags |= T4_STATUS_PAGE_DISABLED;
 	} else {
-		mm = kmalloc(sizeof(*mm), GFP_KERNEL);
+		mm = kmalloc_obj(*mm, GFP_KERNEL);
 		if (!mm) {
 			ret = -ENOMEM;
 			goto err;
diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
index 955f061a55e9..f942a5428283 100644
--- a/drivers/infiniband/hw/cxgb4/qp.c
+++ b/drivers/infiniband/hw/cxgb4/qp.c
@@ -223,17 +223,16 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
 	}

 	if (!user) {
-		wq->sq.sw_sq = kcalloc(wq->sq.size, sizeof(*wq->sq.sw_sq),
-				       GFP_KERNEL);
+		wq->sq.sw_sq = kzalloc_objs(*wq->sq.sw_sq, wq->sq.size,
+					    GFP_KERNEL);
 		if (!wq->sq.sw_sq) {
 			ret = -ENOMEM;
 			goto free_rq_qid;//FIXME
 		}

 		if (need_rq) {
-			wq->rq.sw_rq = kcalloc(wq->rq.size,
-					       sizeof(*wq->rq.sw_rq),
-					       GFP_KERNEL);
+			wq->rq.sw_rq = kzalloc_objs(*wq->rq.sw_rq, wq->rq.size,
+						    GFP_KERNEL);
 			if (!wq->rq.sw_rq) {
 				ret = -ENOMEM;
 				goto free_sw_sq;
@@ -2221,26 +2220,25 @@ int c4iw_create_qp(struct ib_qp *qp, struct ib_qp_init_attr *attrs,
 		goto err_destroy_qp;

 	if (udata && ucontext) {
-		sq_key_mm = kmalloc(sizeof(*sq_key_mm), GFP_KERNEL);
+		sq_key_mm = kmalloc_obj(*sq_key_mm, GFP_KERNEL);
 		if (!sq_key_mm) {
 			ret = -ENOMEM;
 			goto err_remove_handle;
 		}
 		if (!attrs->srq) {
-			rq_key_mm = kmalloc(sizeof(*rq_key_mm), GFP_KERNEL);
+			rq_key_mm = kmalloc_obj(*rq_key_mm, GFP_KERNEL);
 			if (!rq_key_mm) {
 				ret = -ENOMEM;
 				goto err_free_sq_key;
 			}
 		}
-		sq_db_key_mm = kmalloc(sizeof(*sq_db_key_mm), GFP_KERNEL);
+		sq_db_key_mm = kmalloc_obj(*sq_db_key_mm, GFP_KERNEL);
 		if (!sq_db_key_mm) {
 			ret = -ENOMEM;
 			goto err_free_rq_key;
 		}
 		if (!attrs->srq) {
-			rq_db_key_mm =
-				kmalloc(sizeof(*rq_db_key_mm), GFP_KERNEL);
+			rq_db_key_mm = kmalloc_obj(*rq_db_key_mm, GFP_KERNEL);
 			if (!rq_db_key_mm) {
 				ret = -ENOMEM;
 				goto err_free_sq_db_key;
@@ -2248,8 +2246,8 @@ int c4iw_create_qp(struct ib_qp *qp, struct ib_qp_init_attr *attrs,
 		}
 		memset(&uresp, 0, sizeof(uresp));
 		if (t4_sq_onchip(&qhp->wq.sq)) {
-			ma_sync_key_mm = kmalloc(sizeof(*ma_sync_key_mm),
-						 GFP_KERNEL);
+			ma_sync_key_mm = kmalloc_obj(*ma_sync_key_mm,
+						     GFP_KERNEL);
 			if (!ma_sync_key_mm) {
 				ret = -ENOMEM;
 				goto err_free_rq_db_key;
@@ -2552,13 +2550,11 @@ static int alloc_srq_queue(struct c4iw_srq *srq, struct c4iw_dev_ucontext *uctx,
 		goto err;

 	if (!user) {
-		wq->sw_rq = kcalloc(wq->size, sizeof(*wq->sw_rq),
-				    GFP_KERNEL);
+		wq->sw_rq = kzalloc_objs(*wq->sw_rq, wq->size, GFP_KERNEL);
 		if (!wq->sw_rq)
 			goto err_put_qpid;
-		wq->pending_wrs = kcalloc(srq->wq.size,
-					  sizeof(*srq->wq.pending_wrs),
-					  GFP_KERNEL);
+		wq->pending_wrs = kzalloc_objs(*srq->wq.pending_wrs,
+					       srq->wq.size, GFP_KERNEL);
 		if (!wq->pending_wrs)
 			goto err_free_sw_rq;
 	}
@@ -2761,12 +2757,12 @@ int c4iw_create_srq(struct ib_srq *ib_srq, struct ib_srq_init_attr *attrs,
 		srq->flags = T4_SRQ_LIMIT_SUPPORT;

 	if (udata) {
-		srq_key_mm = kmalloc(sizeof(*srq_key_mm), GFP_KERNEL);
+		srq_key_mm = kmalloc_obj(*srq_key_mm, GFP_KERNEL);
 		if (!srq_key_mm) {
 			ret = -ENOMEM;
 			goto err_free_queue;
 		}
-		srq_db_key_mm = kmalloc(sizeof(*srq_db_key_mm), GFP_KERNEL);
+		srq_db_key_mm = kmalloc_obj(*srq_db_key_mm, GFP_KERNEL);
 		if (!srq_db_key_mm) {
 			ret = -ENOMEM;
 			goto err_free_srq_key_mm;
diff --git a/drivers/infiniband/hw/cxgb4/resource.c b/drivers/infiniband/hw/cxgb4/resource.c
index e800e8e8bed5..224098e456c6 100644
--- a/drivers/infiniband/hw/cxgb4/resource.c
+++ b/drivers/infiniband/hw/cxgb4/resource.c
@@ -126,7 +126,7 @@ u32 c4iw_get_cqid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
 		rdev->stats.qid.cur += rdev->qpmask + 1;
 		mutex_unlock(&rdev->stats.lock);
 		for (i = qid+1; i & rdev->qpmask; i++) {
-			entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+			entry = kmalloc_obj(*entry, GFP_KERNEL);
 			if (!entry)
 				goto out;
 			entry->qid = i;
@@ -137,13 +137,13 @@ u32 c4iw_get_cqid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
 		 * now put the same ids on the qp list since they all
 		 * map to the same db/gts page.
 		 */
-		entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+		entry = kmalloc_obj(*entry, GFP_KERNEL);
 		if (!entry)
 			goto out;
 		entry->qid = qid;
 		list_add_tail(&entry->entry, &uctx->qpids);
 		for (i = qid+1; i & rdev->qpmask; i++) {
-			entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+			entry = kmalloc_obj(*entry, GFP_KERNEL);
 			if (!entry)
 				goto out;
 			entry->qid = i;
@@ -165,7 +165,7 @@ void c4iw_put_cqid(struct c4iw_rdev *rdev, u32 qid,
 {
 	struct c4iw_qid_list *entry;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return;
 	pr_debug("qid 0x%x\n", qid);
@@ -200,7 +200,7 @@ u32 c4iw_get_qpid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
 		rdev->stats.qid.cur += rdev->qpmask + 1;
 		mutex_unlock(&rdev->stats.lock);
 		for (i = qid+1; i & rdev->qpmask; i++) {
-			entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+			entry = kmalloc_obj(*entry, GFP_KERNEL);
 			if (!entry)
 				goto out;
 			entry->qid = i;
@@ -211,13 +211,13 @@ u32 c4iw_get_qpid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
 		 * now put the same ids on the cq list since they all
 		 * map to the same db/gts page.
 		 */
-		entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+		entry = kmalloc_obj(*entry, GFP_KERNEL);
 		if (!entry)
 			goto out;
 		entry->qid = qid;
 		list_add_tail(&entry->entry, &uctx->cqids);
 		for (i = qid + 1; i & rdev->qpmask; i++) {
-			entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+			entry = kmalloc_obj(*entry, GFP_KERNEL);
 			if (!entry)
 				goto out;
 			entry->qid = i;
@@ -239,7 +239,7 @@ void c4iw_put_qpid(struct c4iw_rdev *rdev, u32 qid,
 {
 	struct c4iw_qid_list *entry;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return;
 	pr_debug("qid 0x%x\n", qid);
diff --git a/drivers/infiniband/hw/cxgb4/restrack.c b/drivers/infiniband/hw/cxgb4/restrack.c
index fd22c85d35f4..d9fdedce0f21 100644
--- a/drivers/infiniband/hw/cxgb4/restrack.c
+++ b/drivers/infiniband/hw/cxgb4/restrack.c
@@ -209,7 +209,7 @@ int c4iw_fill_res_cm_id_entry(struct sk_buff *msg,
 	epcp = (struct c4iw_ep_common *)iw_cm_id->provider_data;
 	if (!epcp)
 		return 0;
-	uep = kzalloc(sizeof(*uep), GFP_KERNEL);
+	uep = kzalloc_obj(*uep, GFP_KERNEL);
 	if (!uep)
 		return 0;

diff --git a/drivers/infiniband/hw/efa/efa_main.c b/drivers/infiniband/hw/efa/efa_main.c
index 6c415b9adb5f..2e6b37385e5a 100644
--- a/drivers/infiniband/hw/efa/efa_main.c
+++ b/drivers/infiniband/hw/efa/efa_main.c
@@ -332,7 +332,7 @@ static int efa_create_eqs(struct efa_dev *dev)

 	neqs = min_t(u32, neqs, dev->num_irq_vectors - EFA_COMP_EQS_VEC_BASE);
 	dev->neqs = neqs;
-	dev->eqs = kcalloc(neqs, sizeof(*dev->eqs), GFP_KERNEL);
+	dev->eqs = kzalloc_objs(*dev->eqs, neqs, GFP_KERNEL);
 	if (!dev->eqs)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/efa/efa_verbs.c b/drivers/infiniband/hw/efa/efa_verbs.c
index 755bba8d58bb..29a4e51dc015 100644
--- a/drivers/infiniband/hw/efa/efa_verbs.c
+++ b/drivers/infiniband/hw/efa/efa_verbs.c
@@ -525,7 +525,7 @@ efa_user_mmap_entry_insert(struct ib_ucontext *ucontext,
 			   u64 address, size_t length,
 			   u8 mmap_flag, u64 *offset)
 {
-	struct efa_user_mmap_entry *entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	struct efa_user_mmap_entry *entry = kzalloc_obj(*entry, GFP_KERNEL);
 	int err;

 	if (!entry)
@@ -1335,7 +1335,7 @@ static struct scatterlist *efa_vmalloc_buf_to_sg(u64 *buf, int page_cnt)
 	struct page *pg;
 	int i;

-	sglist = kmalloc_array(page_cnt, sizeof(*sglist), GFP_KERNEL);
+	sglist = kmalloc_objs(*sglist, page_cnt, GFP_KERNEL);
 	if (!sglist)
 		return NULL;
 	sg_init_table(sglist, page_cnt);
@@ -1374,9 +1374,8 @@ static int pbl_chunk_list_create(struct efa_dev *dev, struct pbl_context *pbl)
 	chunk_list_size = DIV_ROUND_UP(page_cnt, EFA_PTRS_PER_CHUNK);

 	chunk_list->size = chunk_list_size;
-	chunk_list->chunks = kcalloc(chunk_list_size,
-				     sizeof(*chunk_list->chunks),
-				     GFP_KERNEL);
+	chunk_list->chunks = kzalloc_objs(*chunk_list->chunks, chunk_list_size,
+					  GFP_KERNEL);
 	if (!chunk_list->chunks)
 		return -ENOMEM;

@@ -1682,7 +1681,7 @@ static struct efa_mr *efa_alloc_mr(struct ib_pd *ibpd, int access_flags,
 		return ERR_PTR(-EOPNOTSUPP);
 	}

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/erdma/erdma_cm.c b/drivers/infiniband/hw/erdma/erdma_cm.c
index ed21ba0037a4..3b164f645e6e 100644
--- a/drivers/infiniband/hw/erdma/erdma_cm.c
+++ b/drivers/infiniband/hw/erdma/erdma_cm.c
@@ -91,7 +91,7 @@ static void erdma_disassoc_listen_cep(struct erdma_cep *cep)

 static struct erdma_cep *erdma_cep_alloc(struct erdma_dev *dev)
 {
-	struct erdma_cep *cep = kzalloc(sizeof(*cep), GFP_KERNEL);
+	struct erdma_cep *cep = kzalloc_obj(*cep, GFP_KERNEL);
 	unsigned long flags;

 	if (!cep)
@@ -217,7 +217,7 @@ static int erdma_cm_alloc_work(struct erdma_cep *cep, int num)
 	struct erdma_cm_work *work;

 	while (num--) {
-		work = kmalloc(sizeof(*work), GFP_KERNEL);
+		work = kmalloc_obj(*work, GFP_KERNEL);
 		if (!work) {
 			if (!(list_empty(&cep->work_freelist)))
 				erdma_cm_free_work(cep);
@@ -1340,7 +1340,7 @@ int erdma_create_listen(struct iw_cm_id *id, int backlog)

 	if (!id->provider_data) {
 		id->provider_data =
-			kmalloc(sizeof(struct list_head), GFP_KERNEL);
+			kmalloc_obj(struct list_head, GFP_KERNEL);
 		if (!id->provider_data) {
 			ret = -ENOMEM;
 			goto error;
diff --git a/drivers/infiniband/hw/erdma/erdma_verbs.c b/drivers/infiniband/hw/erdma/erdma_verbs.c
index 109a3f3de911..7adf95d1315b 100644
--- a/drivers/infiniband/hw/erdma/erdma_verbs.c
+++ b/drivers/infiniband/hw/erdma/erdma_verbs.c
@@ -291,8 +291,7 @@ static struct rdma_user_mmap_entry *
 erdma_user_mmap_entry_insert(struct erdma_ucontext *uctx, void *address,
 			     u32 size, u8 mmap_flag, u64 *mmap_offset)
 {
-	struct erdma_user_mmap_entry *entry =
-		kzalloc(sizeof(*entry), GFP_KERNEL);
+	struct erdma_user_mmap_entry *entry = kzalloc_obj(*entry, GFP_KERNEL);
 	int ret;

 	if (!entry)
@@ -600,7 +599,7 @@ static struct erdma_mtt *erdma_create_cont_mtt(struct erdma_dev *dev,
 {
 	struct erdma_mtt *mtt;

-	mtt = kzalloc(sizeof(*mtt), GFP_KERNEL);
+	mtt = kzalloc_obj(*mtt, GFP_KERNEL);
 	if (!mtt)
 		return ERR_PTR(-ENOMEM);

@@ -725,7 +724,7 @@ static struct erdma_mtt *erdma_create_scatter_mtt(struct erdma_dev *dev,
 	struct erdma_mtt *mtt;
 	int ret = -ENOMEM;

-	mtt = kzalloc(sizeof(*mtt), GFP_KERNEL);
+	mtt = kzalloc_obj(*mtt, GFP_KERNEL);
 	if (!mtt)
 		return ERR_PTR(-ENOMEM);

@@ -888,7 +887,7 @@ static int erdma_map_user_dbrecords(struct erdma_ucontext *ctx,
 		if (page->va == (dbrecords_va & PAGE_MASK))
 			goto found;

-	page = kmalloc(sizeof(*page), GFP_KERNEL);
+	page = kmalloc_obj(*page, GFP_KERNEL);
 	if (!page) {
 		rv = -ENOMEM;
 		goto out;
@@ -1116,7 +1115,7 @@ struct ib_mr *erdma_get_dma_mr(struct ib_pd *ibpd, int acc)
 	u32 stag;
 	int ret;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -1160,7 +1159,7 @@ struct ib_mr *erdma_ib_alloc_mr(struct ib_pd *ibpd, enum ib_mr_type mr_type,
 	if (max_num_sg > ERDMA_MR_MAX_MTT_CNT)
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -1246,7 +1245,7 @@ struct ib_mr *erdma_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 len,
 	if (!len || len > dev->attrs.max_mr_size)
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/hfi1/affinity.c b/drivers/infiniband/hw/hfi1/affinity.c
index ee7fedc67b86..28ded5e12b42 100644
--- a/drivers/infiniband/hw/hfi1/affinity.c
+++ b/drivers/infiniband/hw/hfi1/affinity.c
@@ -199,7 +199,7 @@ static struct hfi1_affinity_node *node_affinity_allocate(int node)
 {
 	struct hfi1_affinity_node *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return NULL;
 	entry->node = node;
@@ -406,9 +406,9 @@ static int _dev_comp_vect_mappings_create(struct hfi1_devdata *dd,
 		return -ENOMEM;
 	}

-	dd->comp_vect_mappings = kcalloc(dd->comp_vect_possible_cpus,
-					 sizeof(*dd->comp_vect_mappings),
-					 GFP_KERNEL);
+	dd->comp_vect_mappings = kzalloc_objs(*dd->comp_vect_mappings,
+					      dd->comp_vect_possible_cpus,
+					      GFP_KERNEL);
 	if (!dd->comp_vect_mappings) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c
index 0781ab756d44..b03f39ee1964 100644
--- a/drivers/infiniband/hw/hfi1/chip.c
+++ b/drivers/infiniband/hw/hfi1/chip.c
@@ -14221,7 +14221,7 @@ static struct rsm_map_table *alloc_rsm_map_table(struct hfi1_devdata *dd)
 	struct rsm_map_table *rmt;
 	u8 rxcontext = is_ax(dd) ? 0 : 0xff;  /* 0 is default if a0 ver. */

-	rmt = kmalloc(sizeof(*rmt), GFP_KERNEL);
+	rmt = kmalloc_obj(*rmt, GFP_KERNEL);
 	if (rmt) {
 		memset(rmt->map, rxcontext, sizeof(rmt->map));
 		rmt->used = 0;
@@ -14872,7 +14872,7 @@ static int init_asic_data(struct hfi1_devdata *dd)
 	int ret = 0;

 	/* pre-allocate the asic structure in case we are the first device */
-	asic_data = kzalloc(sizeof(*dd->asic_data), GFP_KERNEL);
+	asic_data = kzalloc_obj(*dd->asic_data, GFP_KERNEL);
 	if (!asic_data)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/hfi1/efivar.c b/drivers/infiniband/hw/hfi1/efivar.c
index 9ed05e10020e..f311b2f328a9 100644
--- a/drivers/infiniband/hw/hfi1/efivar.c
+++ b/drivers/infiniband/hw/hfi1/efivar.c
@@ -41,7 +41,7 @@ static int read_efi_var(const char *name, unsigned long *size,
 	if (!efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE))
 		return -EOPNOTSUPP;

-	uni_name = kcalloc(strlen(name) + 1, sizeof(efi_char16_t), GFP_KERNEL);
+	uni_name = kzalloc_objs(efi_char16_t, strlen(name) + 1, GFP_KERNEL);
 	temp_buffer = kzalloc(EFI_DATA_SIZE, GFP_KERNEL);

 	if (!uni_name || !temp_buffer) {
diff --git a/drivers/infiniband/hw/hfi1/fault.c b/drivers/infiniband/hw/hfi1/fault.c
index a45cbffd52c7..697210b84937 100644
--- a/drivers/infiniband/hw/hfi1/fault.c
+++ b/drivers/infiniband/hw/hfi1/fault.c
@@ -209,7 +209,7 @@ int hfi1_fault_init_debugfs(struct hfi1_ibdev *ibd)
 	struct dentry *parent = ibd->hfi1_ibdev_dbg;
 	struct dentry *fault_dir;

-	ibd->fault = kzalloc(sizeof(*ibd->fault), GFP_KERNEL);
+	ibd->fault = kzalloc_obj(*ibd->fault, GFP_KERNEL);
 	if (!ibd->fault)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/hfi1/file_ops.c b/drivers/infiniband/hw/hfi1/file_ops.c
index 503abec709c9..9baedace9ccc 100644
--- a/drivers/infiniband/hw/hfi1/file_ops.c
+++ b/drivers/infiniband/hw/hfi1/file_ops.c
@@ -158,7 +158,7 @@ static int hfi1_file_open(struct inode *inode, struct file *fp)

 	/* The real work is performed later in assign_ctxt() */

-	fd = kzalloc(sizeof(*fd), GFP_KERNEL);
+	fd = kzalloc_obj(*fd, GFP_KERNEL);

 	if (!fd || init_srcu_struct(&fd->pq_srcu))
 		goto nomem;
diff --git a/drivers/infiniband/hw/hfi1/init.c b/drivers/infiniband/hw/hfi1/init.c
index e4aef102dac0..5bc8250ffbb2 100644
--- a/drivers/infiniband/hw/hfi1/init.c
+++ b/drivers/infiniband/hw/hfi1/init.c
@@ -646,7 +646,7 @@ void hfi1_init_pportdata(struct pci_dev *pdev, struct hfi1_pportdata *ppd,

 	spin_lock_init(&ppd->cc_state_lock);
 	spin_lock_init(&ppd->cc_log_lock);
-	cc_state = kzalloc(sizeof(*cc_state), GFP_KERNEL);
+	cc_state = kzalloc_obj(*cc_state, GFP_KERNEL);
 	RCU_INIT_POINTER(ppd->cc_state, cc_state);
 	if (!cc_state)
 		goto bail;
@@ -1282,7 +1282,7 @@ static struct hfi1_devdata *hfi1_alloc_devdata(struct pci_dev *pdev,
 		goto bail;
 	}

-	dd->comp_vect = kzalloc(sizeof(*dd->comp_vect), GFP_KERNEL);
+	dd->comp_vect = kzalloc_obj(*dd->comp_vect, GFP_KERNEL);
 	if (!dd->comp_vect) {
 		ret = -ENOMEM;
 		goto bail;
diff --git a/drivers/infiniband/hw/hfi1/mad.c b/drivers/infiniband/hw/hfi1/mad.c
index 961fa07116f0..41791ade91bd 100644
--- a/drivers/infiniband/hw/hfi1/mad.c
+++ b/drivers/infiniband/hw/hfi1/mad.c
@@ -390,7 +390,7 @@ static struct trap_node *create_trap_node(u8 type, __be16 trap_num, u32 lid)
 {
 	struct trap_node *trap;

-	trap = kzalloc(sizeof(*trap), GFP_ATOMIC);
+	trap = kzalloc_obj(*trap, GFP_ATOMIC);
 	if (!trap)
 		return NULL;

@@ -3736,7 +3736,7 @@ static void apply_cc_state(struct hfi1_pportdata *ppd)
 {
 	struct cc_state *old_cc_state, *new_cc_state;

-	new_cc_state = kzalloc(sizeof(*new_cc_state), GFP_KERNEL);
+	new_cc_state = kzalloc_obj(*new_cc_state, GFP_KERNEL);
 	if (!new_cc_state)
 		return;

diff --git a/drivers/infiniband/hw/hfi1/msix.c b/drivers/infiniband/hw/hfi1/msix.c
index 77d2ece9a9cb..790a4fd79421 100644
--- a/drivers/infiniband/hw/hfi1/msix.c
+++ b/drivers/infiniband/hw/hfi1/msix.c
@@ -38,8 +38,7 @@ int msix_initialize(struct hfi1_devdata *dd)
 		return ret;
 	}

-	entries = kcalloc(total, sizeof(*dd->msix_info.msix_entries),
-			  GFP_KERNEL);
+	entries = kzalloc_objs(*dd->msix_info.msix_entries, total, GFP_KERNEL);
 	if (!entries) {
 		pci_free_irq_vectors(dd->pcidev);
 		return -ENOMEM;
diff --git a/drivers/infiniband/hw/hfi1/pin_system.c b/drivers/infiniband/hw/hfi1/pin_system.c
index cce56134519b..d8109b06aa70 100644
--- a/drivers/infiniband/hw/hfi1/pin_system.c
+++ b/drivers/infiniband/hw/hfi1/pin_system.c
@@ -119,7 +119,7 @@ static int pin_system_pages(struct user_sdma_request *req,
 	int pinned, cleared;
 	struct page **pages;

-	pages = kcalloc(npages, sizeof(*pages), GFP_KERNEL);
+	pages = kzalloc_objs(*pages, npages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

@@ -173,7 +173,7 @@ static int add_system_pinning(struct user_sdma_request *req,
 	struct sdma_mmu_node *node;
 	int ret;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/hfi1/pio.c b/drivers/infiniband/hw/hfi1/pio.c
index 764286da2ce8..fdf7cecb8336 100644
--- a/drivers/infiniband/hw/hfi1/pio.c
+++ b/drivers/infiniband/hw/hfi1/pio.c
@@ -407,9 +407,8 @@ int init_send_contexts(struct hfi1_devdata *dd)

 	dd->hw_to_sw = kmalloc_array(TXE_NUM_CONTEXTS, sizeof(u8),
 					GFP_KERNEL);
-	dd->send_contexts = kcalloc(dd->num_send_contexts,
-				    sizeof(struct send_context_info),
-				    GFP_KERNEL);
+	dd->send_contexts = kzalloc_objs(struct send_context_info,
+					 dd->num_send_contexts, GFP_KERNEL);
 	if (!dd->send_contexts || !dd->hw_to_sw) {
 		kfree(dd->hw_to_sw);
 		kfree(dd->send_contexts);
@@ -1883,8 +1882,8 @@ int pio_map_init(struct hfi1_devdata *dd, u8 port, u8 num_vls, u8 *vl_scontexts)
 			vl_scontexts[i] = sc_per_vl + (extra > 0 ? 1 : 0);
 	}
 	/* build new map */
-	newmap = kzalloc(struct_size(newmap, map, roundup_pow_of_two(num_vls)),
-			 GFP_KERNEL);
+	newmap = kzalloc_flex(*newmap, map, roundup_pow_of_two(num_vls),
+			      GFP_KERNEL);
 	if (!newmap)
 		goto bail;
 	newmap->actual_vls = num_vls;
@@ -1898,9 +1897,8 @@ int pio_map_init(struct hfi1_devdata *dd, u8 port, u8 num_vls, u8 *vl_scontexts)
 			int sz = roundup_pow_of_two(vl_scontexts[i]);

 			/* only allocate once */
-			newmap->map[i] = kzalloc(struct_size(newmap->map[i],
-							     ksc, sz),
-						 GFP_KERNEL);
+			newmap->map[i] = kzalloc_flex(*newmap->map[i], ksc, sz,
+						      GFP_KERNEL);
 			if (!newmap->map[i])
 				goto bail;
 			newmap->map[i]->mask = (1 << ilog2(sz)) - 1;
@@ -2054,10 +2052,8 @@ int init_credit_return(struct hfi1_devdata *dd)
 	int ret;
 	int i;

-	dd->cr_base = kcalloc(
-		node_affinity.num_possible_nodes,
-		sizeof(struct credit_return_base),
-		GFP_KERNEL);
+	dd->cr_base = kzalloc_objs(struct credit_return_base,
+				   node_affinity.num_possible_nodes, GFP_KERNEL);
 	if (!dd->cr_base) {
 		ret = -ENOMEM;
 		goto done;
diff --git a/drivers/infiniband/hw/hfi1/qsfp.c b/drivers/infiniband/hw/hfi1/qsfp.c
index 3b7842a7f634..7c133037397c 100644
--- a/drivers/infiniband/hw/hfi1/qsfp.c
+++ b/drivers/infiniband/hw/hfi1/qsfp.c
@@ -107,7 +107,7 @@ static struct hfi1_i2c_bus *init_i2c_bus(struct hfi1_devdata *dd,
 	struct hfi1_i2c_bus *bus;
 	int ret;

-	bus = kzalloc(sizeof(*bus), GFP_KERNEL);
+	bus = kzalloc_obj(*bus, GFP_KERNEL);
 	if (!bus)
 		return NULL;

diff --git a/drivers/infiniband/hw/hfi1/sdma.c b/drivers/infiniband/hw/hfi1/sdma.c
index 5cfa4f8fbf3d..04763f50ff60 100644
--- a/drivers/infiniband/hw/hfi1/sdma.c
+++ b/drivers/infiniband/hw/hfi1/sdma.c
@@ -937,7 +937,7 @@ ssize_t sdma_set_cpu_to_sde_map(struct sdma_engine *sde, const char *buf,
 		rht_node = rhashtable_lookup_fast(dd->sdma_rht, &cpu,
 						  sdma_rht_params);
 		if (!rht_node) {
-			rht_node = kzalloc(sizeof(*rht_node), GFP_KERNEL);
+			rht_node = kzalloc_obj(*rht_node, GFP_KERNEL);
 			if (!rht_node) {
 				ret = -ENOMEM;
 				goto out;
@@ -1481,7 +1481,7 @@ int sdma_init(struct hfi1_devdata *dd, u8 port)
 	if (ret < 0)
 		goto bail;

-	tmp_sdma_rht = kzalloc(sizeof(*tmp_sdma_rht), GFP_KERNEL);
+	tmp_sdma_rht = kzalloc_obj(*tmp_sdma_rht, GFP_KERNEL);
 	if (!tmp_sdma_rht) {
 		ret = -ENOMEM;
 		goto bail;
@@ -3017,7 +3017,7 @@ static int _extend_sdma_tx_descs(struct hfi1_devdata *dd, struct sdma_txreq *tx)
 	if (unlikely(tx->num_desc == MAX_DESC))
 		goto enomem;

-	descp = kmalloc_array(MAX_DESC, sizeof(struct sdma_desc), GFP_ATOMIC);
+	descp = kmalloc_objs(struct sdma_desc, MAX_DESC, GFP_ATOMIC);
 	if (!descp)
 		goto enomem;
 	tx->descp = descp;
diff --git a/drivers/infiniband/hw/hfi1/tid_rdma.c b/drivers/infiniband/hw/hfi1/tid_rdma.c
index eafd2f157e32..90ddd59f1e1b 100644
--- a/drivers/infiniband/hw/hfi1/tid_rdma.c
+++ b/drivers/infiniband/hw/hfi1/tid_rdma.c
@@ -233,7 +233,7 @@ bool tid_rdma_conn_reply(struct rvt_qp *qp, u64 data)
 	 * * at the responder, 0 being returned to the requester so as to
 	 *   disable TID RDMA at both the requester and the responder
 	 */
-	remote = kzalloc(sizeof(*remote), GFP_ATOMIC);
+	remote = kzalloc_obj(*remote, GFP_ATOMIC);
 	if (!remote) {
 		ret = false;
 		goto null;
diff --git a/drivers/infiniband/hw/hfi1/user_exp_rcv.c b/drivers/infiniband/hw/hfi1/user_exp_rcv.c
index 62b4f16dab27..1c16d4f9e1ab 100644
--- a/drivers/infiniband/hw/hfi1/user_exp_rcv.c
+++ b/drivers/infiniband/hw/hfi1/user_exp_rcv.c
@@ -52,17 +52,16 @@ int hfi1_user_exp_rcv_init(struct hfi1_filedata *fd,
 {
 	int ret = 0;

-	fd->entry_to_rb = kcalloc(uctxt->expected_count,
-				  sizeof(*fd->entry_to_rb),
-				  GFP_KERNEL);
+	fd->entry_to_rb = kzalloc_objs(*fd->entry_to_rb, uctxt->expected_count,
+				       GFP_KERNEL);
 	if (!fd->entry_to_rb)
 		return -ENOMEM;

 	if (!HFI1_CAP_UGET_MASK(uctxt->flags, TID_UNMAP)) {
 		fd->invalid_tid_idx = 0;
-		fd->invalid_tids = kcalloc(uctxt->expected_count,
-					   sizeof(*fd->invalid_tids),
-					   GFP_KERNEL);
+		fd->invalid_tids = kzalloc_objs(*fd->invalid_tids,
+						uctxt->expected_count,
+						GFP_KERNEL);
 		if (!fd->invalid_tids) {
 			kfree(fd->entry_to_rb);
 			fd->entry_to_rb = NULL;
@@ -170,7 +169,7 @@ static int pin_rcv_pages(struct hfi1_filedata *fd, struct tid_user_buf *tidbuf)
 	}

 	/* Allocate the array of struct page pointers needed for pinning */
-	pages = kcalloc(npages, sizeof(*pages), GFP_KERNEL);
+	pages = kzalloc_objs(*pages, npages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

@@ -736,7 +735,7 @@ static int set_rcvarray_entry(struct hfi1_filedata *fd,
 	 * Allocate the node first so we can handle a potential
 	 * failure before we've programmed anything.
 	 */
-	node = kzalloc(struct_size(node, pages, npages), GFP_KERNEL);
+	node = kzalloc_flex(*node, pages, npages, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/hfi1/user_sdma.c b/drivers/infiniband/hw/hfi1/user_sdma.c
index 9b1aece1b080..f2642fef0bf4 100644
--- a/drivers/infiniband/hw/hfi1/user_sdma.c
+++ b/drivers/infiniband/hw/hfi1/user_sdma.c
@@ -120,7 +120,7 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt,

 	dd = uctxt->dd;

-	pq = kzalloc(sizeof(*pq), GFP_KERNEL);
+	pq = kzalloc_obj(*pq, GFP_KERNEL);
 	if (!pq)
 		return -ENOMEM;
 	pq->dd = dd;
@@ -135,9 +135,7 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt,
 		    activate_packet_queue, NULL, NULL);
 	pq->reqidx = 0;

-	pq->reqs = kcalloc(hfi1_sdma_comp_ring_size,
-			   sizeof(*pq->reqs),
-			   GFP_KERNEL);
+	pq->reqs = kzalloc_objs(*pq->reqs, hfi1_sdma_comp_ring_size, GFP_KERNEL);
 	if (!pq->reqs)
 		goto pq_reqs_nomem;

@@ -158,7 +156,7 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt,
 		goto pq_txreq_nomem;
 	}

-	cq = kzalloc(sizeof(*cq), GFP_KERNEL);
+	cq = kzalloc_obj(*cq, GFP_KERNEL);
 	if (!cq)
 		goto cq_nomem;

diff --git a/drivers/infiniband/hw/hns/hns_roce_alloc.c b/drivers/infiniband/hw/hns/hns_roce_alloc.c
index 6ee911f6885b..8e802f118bc9 100644
--- a/drivers/infiniband/hw/hns/hns_roce_alloc.c
+++ b/drivers/infiniband/hw/hns/hns_roce_alloc.c
@@ -77,7 +77,7 @@ struct hns_roce_buf *hns_roce_buf_alloc(struct hns_roce_dev *hr_dev, u32 size,
 		return ERR_PTR(-EINVAL);

 	gfp_flags = (flags & HNS_ROCE_BUF_NOSLEEP) ? GFP_ATOMIC : GFP_KERNEL;
-	buf = kzalloc(sizeof(*buf), gfp_flags);
+	buf = kzalloc_obj(*buf, gfp_flags);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

@@ -93,7 +93,7 @@ struct hns_roce_buf *hns_roce_buf_alloc(struct hns_roce_dev *hr_dev, u32 size,
 		ntrunk = DIV_ROUND_UP(size, 1 << buf->trunk_shift);
 	}

-	trunks = kcalloc(ntrunk, sizeof(*trunks), gfp_flags);
+	trunks = kzalloc_objs(*trunks, ntrunk, gfp_flags);
 	if (!trunks) {
 		kfree(buf);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/infiniband/hw/hns/hns_roce_bond.c b/drivers/infiniband/hw/hns/hns_roce_bond.c
index cc85f3ce1f3e..e3ffd7e20160 100644
--- a/drivers/infiniband/hw/hns/hns_roce_bond.c
+++ b/drivers/infiniband/hw/hns/hns_roce_bond.c
@@ -253,7 +253,7 @@ static struct hns_roce_die_info *alloc_die_info(int bus_num)
 	struct hns_roce_die_info *die_info;
 	int ret;

-	die_info = kzalloc(sizeof(*die_info), GFP_KERNEL);
+	die_info = kzalloc_obj(*die_info, GFP_KERNEL);
 	if (!die_info)
 		return NULL;

@@ -855,7 +855,7 @@ int hns_roce_alloc_bond_grp(struct hns_roce_dev *hr_dev)
 		return 0;

 	for (i = 0; i < ROCE_BOND_NUM_MAX; i++) {
-		bond_grp = kvzalloc(sizeof(*bond_grp), GFP_KERNEL);
+		bond_grp = kvzalloc_obj(*bond_grp, GFP_KERNEL);
 		if (!bond_grp) {
 			ret = -ENOMEM;
 			goto mem_err;
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.c b/drivers/infiniband/hw/hns/hns_roce_cmd.c
index 873e8a69a1b9..f8a42ea6acac 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.c
@@ -219,7 +219,7 @@ int hns_roce_cmd_use_events(struct hns_roce_dev *hr_dev)
 	int i;

 	hr_cmd->context =
-		kcalloc(hr_cmd->max_cmds, sizeof(*hr_cmd->context), GFP_KERNEL);
+		kzalloc_objs(*hr_cmd->context, hr_cmd->max_cmds, GFP_KERNEL);
 	if (!hr_cmd->context) {
 		hr_dev->cmd_mod = 0;
 		return -ENOMEM;
@@ -254,7 +254,7 @@ hns_roce_alloc_cmd_mailbox(struct hns_roce_dev *hr_dev)
 {
 	struct hns_roce_cmd_mailbox *mailbox;

-	mailbox = kmalloc(sizeof(*mailbox), GFP_KERNEL);
+	mailbox = kmalloc_obj(*mailbox, GFP_KERNEL);
 	if (!mailbox)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/hns/hns_roce_db.c b/drivers/infiniband/hw/hns/hns_roce_db.c
index 5c4c0480832b..ad8fcaf613b9 100644
--- a/drivers/infiniband/hw/hns/hns_roce_db.c
+++ b/drivers/infiniband/hw/hns/hns_roce_db.c
@@ -21,7 +21,7 @@ int hns_roce_db_map_user(struct hns_roce_ucontext *context, unsigned long virt,
 		if (page->user_virt == page_addr)
 			goto found;

-	page = kmalloc(sizeof(*page), GFP_KERNEL);
+	page = kmalloc_obj(*page, GFP_KERNEL);
 	if (!page) {
 		ret = -ENOMEM;
 		goto out;
@@ -72,7 +72,7 @@ static struct hns_roce_db_pgdir *hns_roce_alloc_db_pgdir(
 {
 	struct hns_roce_db_pgdir *pgdir;

-	pgdir = kzalloc(sizeof(*pgdir), GFP_KERNEL);
+	pgdir = kzalloc_obj(*pgdir, GFP_KERNEL);
 	if (!pgdir)
 		return NULL;

diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.c b/drivers/infiniband/hw/hns/hns_roce_hem.c
index 3d479c63b117..11ba69dde716 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hem.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hem.c
@@ -262,7 +262,7 @@ static struct hns_roce_hem *hns_roce_alloc_hem(struct hns_roce_dev *hr_dev,
 		return NULL;
 	}

-	hem = kmalloc(sizeof(*hem), GFP_KERNEL);
+	hem = kmalloc_obj(*hem, GFP_KERNEL);
 	if (!hem)
 		return NULL;

@@ -737,7 +737,7 @@ int hns_roce_init_hem_table(struct hns_roce_dev *hr_dev,
 		obj_per_chunk = table->table_chunk_size / obj_size;
 		num_hem = DIV_ROUND_UP(nobj, obj_per_chunk);

-		table->hem = kcalloc(num_hem, sizeof(*table->hem), GFP_KERNEL);
+		table->hem = kzalloc_objs(*table->hem, num_hem, GFP_KERNEL);
 		if (!table->hem)
 			return -ENOMEM;
 	} else {
@@ -763,8 +763,7 @@ int hns_roce_init_hem_table(struct hns_roce_dev *hr_dev,
 		if (type >= HEM_TYPE_MTT)
 			num_bt_l0 = bt_chunk_num;

-		table->hem = kcalloc(num_hem, sizeof(*table->hem),
-					 GFP_KERNEL);
+		table->hem = kzalloc_objs(*table->hem, num_hem, GFP_KERNEL);
 		if (!table->hem)
 			goto err_kcalloc_hem_buf;

@@ -778,9 +777,9 @@ int hns_roce_init_hem_table(struct hns_roce_dev *hr_dev,
 			if (!table->bt_l1)
 				goto err_kcalloc_bt_l1;

-			table->bt_l1_dma_addr = kcalloc(num_bt_l1,
-						 sizeof(*table->bt_l1_dma_addr),
-						 GFP_KERNEL);
+			table->bt_l1_dma_addr = kzalloc_objs(*table->bt_l1_dma_addr,
+							     num_bt_l1,
+							     GFP_KERNEL);

 			if (!table->bt_l1_dma_addr)
 				goto err_kcalloc_l1_dma;
@@ -793,9 +792,9 @@ int hns_roce_init_hem_table(struct hns_roce_dev *hr_dev,
 			if (!table->bt_l0)
 				goto err_kcalloc_bt_l0;

-			table->bt_l0_dma_addr = kcalloc(num_bt_l0,
-						 sizeof(*table->bt_l0_dma_addr),
-						 GFP_KERNEL);
+			table->bt_l0_dma_addr = kzalloc_objs(*table->bt_l0_dma_addr,
+							     num_bt_l0,
+							     GFP_KERNEL);
 			if (!table->bt_l0_dma_addr)
 				goto err_kcalloc_l0_dma;
 		}
@@ -939,7 +938,7 @@ hem_list_alloc_item(struct hns_roce_dev *hr_dev, int start, int end, int count,
 {
 	struct hns_roce_hem_item *hem;

-	hem = kzalloc(sizeof(*hem), GFP_KERNEL);
+	hem = kzalloc_obj(*hem, GFP_KERNEL);
 	if (!hem)
 		return NULL;

diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
index 5d0a8662249d..3440a6f21c02 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
@@ -1948,7 +1948,7 @@ static int hns_roce_hw_v2_query_counter(struct hns_roce_dev *hr_dev,
 		return -EINVAL;

 	desc_num = DIV_ROUND_UP(HNS_ROCE_HW_CNT_TOTAL, CNT_PER_DESC);
-	desc = kcalloc(desc_num, sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_objs(*desc, desc_num, GFP_KERNEL);
 	if (!desc)
 		return -ENOMEM;

@@ -2881,7 +2881,7 @@ static struct ib_pd *free_mr_init_pd(struct hns_roce_dev *hr_dev)
 	struct hns_roce_pd *hr_pd;
 	struct ib_pd *pd;

-	hr_pd = kzalloc(sizeof(*hr_pd), GFP_KERNEL);
+	hr_pd = kzalloc_obj(*hr_pd, GFP_KERNEL);
 	if (!hr_pd)
 		return NULL;
 	pd = &hr_pd->ibpd;
@@ -2912,7 +2912,7 @@ static struct ib_cq *free_mr_init_cq(struct hns_roce_dev *hr_dev)

 	cq_init_attr.cqe = HNS_ROCE_FREE_MR_USED_CQE_NUM;

-	hr_cq = kzalloc(sizeof(*hr_cq), GFP_KERNEL);
+	hr_cq = kzalloc_obj(*hr_cq, GFP_KERNEL);
 	if (!hr_cq)
 		return NULL;

@@ -2945,7 +2945,7 @@ static int free_mr_init_qp(struct hns_roce_dev *hr_dev, struct ib_cq *cq,
 	struct ib_qp *qp;
 	int ret;

-	hr_qp = kzalloc(sizeof(*hr_qp), GFP_KERNEL);
+	hr_qp = kzalloc_obj(*hr_qp, GFP_KERNEL);
 	if (!hr_qp)
 		return -ENOMEM;

@@ -5021,7 +5021,7 @@ static int alloc_dip_entry(struct xarray *dip_xa, u32 qpn)
 	if (hr_dip)
 		return 0;

-	hr_dip = kzalloc(sizeof(*hr_dip), GFP_KERNEL);
+	hr_dip = kzalloc_obj(*hr_dip, GFP_KERNEL);
 	if (!hr_dip)
 		return -ENOMEM;

@@ -5635,8 +5635,8 @@ static int hns_roce_v2_modify_qp(struct ib_qp *ibqp,
 	 * we should set all bits of the relevant fields in context mask to
 	 * 0 at the same time, else set them to 0x1.
 	 */
-	context = kvzalloc(sizeof(*context), GFP_KERNEL);
-	qpc_mask = kvzalloc(sizeof(*qpc_mask), GFP_KERNEL);
+	context = kvzalloc_obj(*context, GFP_KERNEL);
+	qpc_mask = kvzalloc_obj(*qpc_mask, GFP_KERNEL);
 	if (!context || !qpc_mask)
 		goto out;

@@ -6450,7 +6450,7 @@ static void hns_roce_v2_init_irq_work(struct hns_roce_dev *hr_dev,
 {
 	struct hns_roce_work *irq_work;

-	irq_work = kzalloc(sizeof(struct hns_roce_work), GFP_ATOMIC);
+	irq_work = kzalloc_obj(struct hns_roce_work, GFP_ATOMIC);
 	if (!irq_work)
 		return;

@@ -7107,7 +7107,7 @@ static int hns_roce_v2_init_eq_table(struct hns_roce_dev *hr_dev)
 	eq_num = comp_num + aeq_num;
 	irq_num = eq_num + other_num;

-	eq_table->eq = kcalloc(eq_num, sizeof(*eq_table->eq), GFP_KERNEL);
+	eq_table->eq = kzalloc_objs(*eq_table->eq, eq_num, GFP_KERNEL);
 	if (!eq_table->eq)
 		return -ENOMEM;

@@ -7309,7 +7309,7 @@ static int __hns_roce_hw_v2_init_instance(struct hnae3_handle *handle)
 	if (!hr_dev)
 		return -ENOMEM;

-	hr_dev->priv = kzalloc(sizeof(struct hns_roce_v2_priv), GFP_KERNEL);
+	hr_dev->priv = kzalloc_obj(struct hns_roce_v2_priv, GFP_KERNEL);
 	if (!hr_dev->priv) {
 		ret = -ENOMEM;
 		goto error_failed_kzalloc;
diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c
index a3490bab297a..349910dd99c6 100644
--- a/drivers/infiniband/hw/hns/hns_roce_main.c
+++ b/drivers/infiniband/hw/hns/hns_roce_main.c
@@ -366,7 +366,7 @@ hns_roce_user_mmap_entry_insert(struct ib_ucontext *ucontext, u64 address,
 	struct hns_user_mmap_entry *entry;
 	int ret;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return NULL;

@@ -1153,8 +1153,8 @@ void hns_roce_handle_device_err(struct hns_roce_dev *hr_dev)

 static int hns_roce_alloc_dfx_cnt(struct hns_roce_dev *hr_dev)
 {
-	hr_dev->dfx_cnt = kvcalloc(HNS_ROCE_DFX_CNT_TOTAL, sizeof(atomic64_t),
-				   GFP_KERNEL);
+	hr_dev->dfx_cnt = kvzalloc_objs(atomic64_t, HNS_ROCE_DFX_CNT_TOTAL,
+					GFP_KERNEL);
 	if (!hr_dev->dfx_cnt)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/hns/hns_roce_mr.c b/drivers/infiniband/hw/hns/hns_roce_mr.c
index 31cb8699e198..80917b8926c1 100644
--- a/drivers/infiniband/hw/hns/hns_roce_mr.c
+++ b/drivers/infiniband/hw/hns/hns_roce_mr.c
@@ -200,7 +200,7 @@ struct ib_mr *hns_roce_get_dma_mr(struct ib_pd *pd, int acc)
 	struct hns_roce_mr *mr;
 	int ret;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return  ERR_PTR(-ENOMEM);

@@ -243,7 +243,7 @@ struct ib_mr *hns_roce_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 		goto err_out;
 	}

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr) {
 		ret = -ENOMEM;
 		goto err_out;
@@ -395,7 +395,7 @@ struct ib_mr *hns_roce_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
 		return ERR_PTR(-EINVAL);
 	}

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -458,8 +458,9 @@ int hns_roce_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg, int sg_nents,
 		return sg_num;

 	mr->npages = 0;
-	mr->page_list = kvcalloc(mr->pbl_mtr.hem_cfg.buf_pg_count,
-				 sizeof(dma_addr_t), GFP_KERNEL);
+	mr->page_list = kvzalloc_objs(dma_addr_t,
+				      mr->pbl_mtr.hem_cfg.buf_pg_count,
+				      GFP_KERNEL);
 	if (!mr->page_list)
 		return sg_num;

@@ -650,7 +651,7 @@ static int mtr_map_bufs(struct hns_roce_dev *hr_dev, struct hns_roce_mtr *mtr)
 	page_shift = need_split_huge_page(mtr) ? HNS_HW_PAGE_SHIFT :
 						 mtr->hem_cfg.buf_pg_shift;
 	/* alloc a tmp array to store buffer's dma address */
-	pages = kvcalloc(page_count, sizeof(dma_addr_t), GFP_KERNEL);
+	pages = kvzalloc_objs(dma_addr_t, page_count, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/ionic/ionic_admin.c b/drivers/infiniband/hw/ionic/ionic_admin.c
index 2537aa55d12d..850bd40ae3cc 100644
--- a/drivers/infiniband/hw/ionic/ionic_admin.c
+++ b/drivers/infiniband/hw/ionic/ionic_admin.c
@@ -520,7 +520,7 @@ static struct ionic_vcq *ionic_create_rdma_admincq(struct ionic_ibdev *dev,
 	struct ionic_cq *cq;
 	int rc;

-	vcq = kzalloc(sizeof(*vcq), GFP_KERNEL);
+	vcq = kzalloc_obj(*vcq, GFP_KERNEL);
 	if (!vcq)
 		return ERR_PTR(-ENOMEM);

@@ -558,7 +558,7 @@ static struct ionic_aq *__ionic_create_rdma_adminq(struct ionic_ibdev *dev,
 	struct ionic_aq *aq;
 	int rc;

-	aq = kzalloc(sizeof(*aq), GFP_KERNEL);
+	aq = kzalloc_obj(*aq, GFP_KERNEL);
 	if (!aq)
 		return ERR_PTR(-ENOMEM);

@@ -575,7 +575,7 @@ static struct ionic_aq *__ionic_create_rdma_adminq(struct ionic_ibdev *dev,

 	ionic_queue_dbell_init(&aq->q, aq->aqid);

-	aq->q_wr = kcalloc((u32)aq->q.mask + 1, sizeof(*aq->q_wr), GFP_KERNEL);
+	aq->q_wr = kzalloc_objs(*aq->q_wr, (u32)aq->q.mask + 1, GFP_KERNEL);
 	if (!aq->q_wr) {
 		rc = -ENOMEM;
 		goto err_wr;
@@ -983,7 +983,7 @@ static struct ionic_eq *ionic_create_eq(struct ionic_ibdev *dev, int eqid)
 	struct ionic_eq *eq;
 	int rc;

-	eq = kzalloc(sizeof(*eq), GFP_KERNEL);
+	eq = kzalloc_obj(*eq, GFP_KERNEL);
 	if (!eq)
 		return ERR_PTR(-ENOMEM);

@@ -1095,8 +1095,8 @@ int ionic_create_rdma_admin(struct ionic_ibdev *dev)
 		goto out;
 	}

-	dev->eq_vec = kmalloc_array(dev->lif_cfg.eq_count, sizeof(*dev->eq_vec),
-				    GFP_KERNEL);
+	dev->eq_vec = kmalloc_objs(*dev->eq_vec, dev->lif_cfg.eq_count,
+				   GFP_KERNEL);
 	if (!dev->eq_vec) {
 		rc = -ENOMEM;
 		goto out;
@@ -1126,8 +1126,8 @@ int ionic_create_rdma_admin(struct ionic_ibdev *dev)

 	dev->lif_cfg.eq_count = eq_i;

-	dev->aq_vec = kmalloc_array(dev->lif_cfg.aq_count, sizeof(*dev->aq_vec),
-				    GFP_KERNEL);
+	dev->aq_vec = kmalloc_objs(*dev->aq_vec, dev->lif_cfg.aq_count,
+				   GFP_KERNEL);
 	if (!dev->aq_vec) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/drivers/infiniband/hw/ionic/ionic_controlpath.c b/drivers/infiniband/hw/ionic/ionic_controlpath.c
index ea12d9b8e125..9a2b09b783e0 100644
--- a/drivers/infiniband/hw/ionic/ionic_controlpath.c
+++ b/drivers/infiniband/hw/ionic/ionic_controlpath.c
@@ -343,7 +343,7 @@ ionic_mmap_entry_insert(struct ionic_ctx *ctx, unsigned long size,
 	struct ionic_mmap_entry *entry;
 	int rc;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return NULL;

@@ -852,7 +852,7 @@ struct ib_mr *ionic_get_dma_mr(struct ib_pd *ibpd, int access)
 	struct ionic_pd *pd = to_ionic_pd(ibpd);
 	struct ionic_mr *mr;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -878,7 +878,7 @@ struct ib_mr *ionic_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 length,
 	if (dmah)
 		return ERR_PTR(-EOPNOTSUPP);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -945,7 +945,7 @@ struct ib_mr *ionic_reg_user_mr_dmabuf(struct ib_pd *ibpd, u64 offset,
 	if (dmah)
 		return ERR_PTR(-EOPNOTSUPP);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -1039,7 +1039,7 @@ struct ib_mr *ionic_alloc_mr(struct ib_pd *ibpd, enum ib_mr_type type,
 	if (type != IB_MR_TYPE_MEM_REG)
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -1868,9 +1868,8 @@ static int ionic_qp_sq_init(struct ionic_ibdev *dev, struct ionic_ctx *ctx,

 		ionic_queue_dbell_init(&qp->sq, qp->qpid);

-		qp->sq_meta = kmalloc_array((u32)qp->sq.mask + 1,
-					    sizeof(*qp->sq_meta),
-					    GFP_KERNEL);
+		qp->sq_meta = kmalloc_objs(*qp->sq_meta, (u32)qp->sq.mask + 1,
+					   GFP_KERNEL);
 		if (!qp->sq_meta) {
 			rc = -ENOMEM;
 			goto err_sq_meta;
@@ -2083,9 +2082,8 @@ static int ionic_qp_rq_init(struct ionic_ibdev *dev, struct ionic_ctx *ctx,

 		ionic_queue_dbell_init(&qp->rq, qp->qpid);

-		qp->rq_meta = kmalloc_array((u32)qp->rq.mask + 1,
-					    sizeof(*qp->rq_meta),
-					    GFP_KERNEL);
+		qp->rq_meta = kmalloc_objs(*qp->rq_meta, (u32)qp->rq.mask + 1,
+					   GFP_KERNEL);
 		if (!qp->rq_meta) {
 			rc = -ENOMEM;
 			goto err_rq_meta;
@@ -2205,7 +2203,7 @@ int ionic_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *attr,
 	qp->has_ah = attr->qp_type == IB_QPT_RC;

 	if (qp->has_ah) {
-		qp->hdr = kzalloc(sizeof(*qp->hdr), GFP_KERNEL);
+		qp->hdr = kzalloc_obj(*qp->hdr, GFP_KERNEL);
 		if (!qp->hdr) {
 			rc = -ENOMEM;
 			goto err_ah_alloc;
diff --git a/drivers/infiniband/hw/ionic/ionic_hw_stats.c b/drivers/infiniband/hw/ionic/ionic_hw_stats.c
index 244a80dde08f..3fbdc007dd05 100644
--- a/drivers/infiniband/hw/ionic/ionic_hw_stats.c
+++ b/drivers/infiniband/hw/ionic/ionic_hw_stats.c
@@ -155,9 +155,8 @@ static int ionic_init_hw_stats(struct ionic_ibdev *dev)
 	dev->hw_stats_count = hw_stats_count;

 	/* alloc and init array of names, for alloc_hw_stats */
-	dev->hw_stats_hdrs = kcalloc(hw_stats_count,
-				     sizeof(*dev->hw_stats_hdrs),
-				     GFP_KERNEL);
+	dev->hw_stats_hdrs = kzalloc_objs(*dev->hw_stats_hdrs, hw_stats_count,
+					  GFP_KERNEL);
 	if (!dev->hw_stats_hdrs) {
 		rc = -ENOMEM;
 		goto err_dma;
@@ -241,7 +240,7 @@ ionic_counter_alloc_stats(struct rdma_counter *counter)
 	struct ionic_counter *cntr;
 	int err;

-	cntr = kzalloc(sizeof(*cntr), GFP_KERNEL);
+	cntr = kzalloc_obj(*cntr, GFP_KERNEL);
 	if (!cntr)
 		return NULL;

@@ -402,8 +401,8 @@ static int ionic_alloc_counters(struct ionic_ibdev *dev)
 	cs->queue_stats_count = hw_stats_count;

 	/* alloc and init array of names */
-	cs->stats_hdrs = kcalloc(hw_stats_count, sizeof(*cs->stats_hdrs),
-				 GFP_KERNEL);
+	cs->stats_hdrs = kzalloc_objs(*cs->stats_hdrs, hw_stats_count,
+				      GFP_KERNEL);
 	if (!cs->stats_hdrs) {
 		rc = -ENOMEM;
 		goto err_dma;
@@ -449,8 +448,8 @@ void ionic_stats_init(struct ionic_ibdev *dev)
 	}

 	if (stats_type & IONIC_LIF_RDMA_STAT_QP) {
-		dev->counter_stats = kzalloc(sizeof(*dev->counter_stats),
-					     GFP_KERNEL);
+		dev->counter_stats = kzalloc_obj(*dev->counter_stats,
+						 GFP_KERNEL);
 		if (!dev->counter_stats)
 			return;

diff --git a/drivers/infiniband/hw/irdma/cm.c b/drivers/infiniband/hw/irdma/cm.c
index f4f4f92ba63a..aaff968138e2 100644
--- a/drivers/infiniband/hw/irdma/cm.c
+++ b/drivers/infiniband/hw/irdma/cm.c
@@ -234,7 +234,7 @@ static struct irdma_cm_event *irdma_create_event(struct irdma_cm_node *cm_node,
 	if (!cm_node->cm_id)
 		return NULL;

-	event = kzalloc(sizeof(*event), GFP_ATOMIC);
+	event = kzalloc_obj(*event, GFP_ATOMIC);

 	if (!event)
 		return NULL;
@@ -1136,7 +1136,7 @@ int irdma_schedule_cm_timer(struct irdma_cm_node *cm_node,
 	u32 was_timer_set;
 	unsigned long flags;

-	new_send = kzalloc(sizeof(*new_send), GFP_ATOMIC);
+	new_send = kzalloc_obj(*new_send, GFP_ATOMIC);
 	if (!new_send) {
 		if (type != IRDMA_TIMER_TYPE_CLOSE)
 			irdma_free_sqbuf(vsi, sqbuf);
@@ -1683,7 +1683,8 @@ static int irdma_add_mqh_6(struct irdma_device *iwdev,
 			ibdev_dbg(&iwdev->ibdev, "CM: IP=%pI6, vlan_id=%d, MAC=%pM\n",
 				  &ifp->addr, rdma_vlan_dev_vlan_id(ip_dev),
 				  ip_dev->dev_addr);
-			child_listen_node = kzalloc(sizeof(*child_listen_node), GFP_KERNEL);
+			child_listen_node = kzalloc_obj(*child_listen_node,
+							GFP_KERNEL);
 			ibdev_dbg(&iwdev->ibdev, "CM: Allocating child listener %p\n",
 				  child_listen_node);
 			if (!child_listen_node) {
@@ -1771,7 +1772,8 @@ static int irdma_add_mqh_4(struct irdma_device *iwdev,
 				  "CM: Allocating child CM Listener forIP=%pI4, vlan_id=%d, MAC=%pM\n",
 				  &ifa->ifa_address, rdma_vlan_dev_vlan_id(ip_dev),
 				  ip_dev->dev_addr);
-			child_listen_node = kzalloc(sizeof(*child_listen_node), GFP_KERNEL);
+			child_listen_node = kzalloc_obj(*child_listen_node,
+							GFP_KERNEL);
 			cm_parent_listen_node->cm_core->stats_listen_nodes_created++;
 			ibdev_dbg(&iwdev->ibdev, "CM: Allocating child listener %p\n",
 				  child_listen_node);
@@ -2243,7 +2245,7 @@ irdma_make_cm_node(struct irdma_cm_core *cm_core, struct irdma_device *iwdev,
 	struct net_device *netdev = iwdev->netdev;

 	/* create an hte and cm_node for this instance */
-	cm_node = kzalloc(sizeof(*cm_node), GFP_ATOMIC);
+	cm_node = kzalloc_obj(*cm_node, GFP_ATOMIC);
 	if (!cm_node)
 		return NULL;

@@ -2967,7 +2969,7 @@ irdma_make_listen_node(struct irdma_cm_core *cm_core,
 		/* create a CM listen node
 		 * 1/2 node to compare incoming traffic to
 		 */
-		listener = kzalloc(sizeof(*listener), GFP_KERNEL);
+		listener = kzalloc_obj(*listener, GFP_KERNEL);
 		if (!listener)
 			return NULL;
 		cm_core->stats_listen_nodes_created++;
@@ -3444,7 +3446,7 @@ void irdma_cm_disconn(struct irdma_qp *iwqp)
 	struct disconn_work *work;
 	unsigned long flags;

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return;

diff --git a/drivers/infiniband/hw/irdma/hw.c b/drivers/infiniband/hw/irdma/hw.c
index 31c67b753fc0..8da3b2799593 100644
--- a/drivers/infiniband/hw/irdma/hw.c
+++ b/drivers/infiniband/hw/irdma/hw.c
@@ -1029,7 +1029,7 @@ static int irdma_create_cqp(struct irdma_pci_f *rf)
 	u16 maj_err, min_err;
 	int i, status;

-	cqp->cqp_requests = kcalloc(sqsize, sizeof(*cqp->cqp_requests), GFP_KERNEL);
+	cqp->cqp_requests = kzalloc_objs(*cqp->cqp_requests, sqsize, GFP_KERNEL);
 	if (!cqp->cqp_requests)
 		return -ENOMEM;

@@ -1039,8 +1039,7 @@ static int irdma_create_cqp(struct irdma_pci_f *rf)
 		goto err_scratch;
 	}

-	cqp->oop_op_array = kcalloc(sqsize, sizeof(*cqp->oop_op_array),
-				    GFP_KERNEL);
+	cqp->oop_op_array = kzalloc_objs(*cqp->oop_op_array, sqsize, GFP_KERNEL);
 	if (!cqp->oop_op_array) {
 		status = -ENOMEM;
 		goto err_oop;
@@ -1366,7 +1365,7 @@ static int irdma_setup_ceq_0(struct irdma_pci_f *rf)
 	u32 num_ceqs;

 	num_ceqs = min(rf->msix_count, rf->sc_dev.hmc_fpm_misc.max_ceqs);
-	rf->ceqlist = kcalloc(num_ceqs, sizeof(*rf->ceqlist), GFP_KERNEL);
+	rf->ceqlist = kzalloc_objs(*rf->ceqlist, num_ceqs, GFP_KERNEL);
 	if (!rf->ceqlist) {
 		status = -ENOMEM;
 		goto exit;
@@ -2466,7 +2465,7 @@ struct irdma_apbvt_entry *irdma_add_apbvt(struct irdma_device *iwdev, u16 port)
 		return entry;
 	}

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry) {
 		spin_unlock_irqrestore(&cm_core->apbvt_lock, flags);
 		return NULL;
diff --git a/drivers/infiniband/hw/irdma/i40iw_if.c b/drivers/infiniband/hw/irdma/i40iw_if.c
index 15e036ddaffb..eea222ae125a 100644
--- a/drivers/infiniband/hw/irdma/i40iw_if.c
+++ b/drivers/infiniband/hw/irdma/i40iw_if.c
@@ -120,7 +120,7 @@ static int i40iw_open(struct i40e_info *cdev_info, struct i40e_client *client)
 	if (!iwdev)
 		return -ENOMEM;

-	iwdev->rf = kzalloc(sizeof(*rf), GFP_KERNEL);
+	iwdev->rf = kzalloc_obj(*rf, GFP_KERNEL);
 	if (!iwdev->rf) {
 		ib_dealloc_device(&iwdev->ibdev);
 		return -ENOMEM;
diff --git a/drivers/infiniband/hw/irdma/icrdma_if.c b/drivers/infiniband/hw/irdma/icrdma_if.c
index b49fd9cf2476..60f3c7f1547d 100644
--- a/drivers/infiniband/hw/irdma/icrdma_if.c
+++ b/drivers/infiniband/hw/irdma/icrdma_if.c
@@ -167,8 +167,8 @@ static int icrdma_init_interrupts(struct irdma_pci_f *rf, struct iidc_rdma_core_
 	int i;

 	rf->msix_count = num_online_cpus() + IRDMA_NUM_AEQ_MSIX;
-	rf->msix_entries = kcalloc(rf->msix_count, sizeof(*rf->msix_entries),
-				   GFP_KERNEL);
+	rf->msix_entries = kzalloc_objs(*rf->msix_entries, rf->msix_count,
+					GFP_KERNEL);
 	if (!rf->msix_entries)
 		return -ENOMEM;

@@ -258,7 +258,7 @@ static int icrdma_probe(struct auxiliary_device *aux_dev, const struct auxiliary
 	iwdev = ib_alloc_device(irdma_device, ibdev);
 	if (!iwdev)
 		return -ENOMEM;
-	iwdev->rf = kzalloc(sizeof(*rf), GFP_KERNEL);
+	iwdev->rf = kzalloc_obj(*rf, GFP_KERNEL);
 	if (!iwdev->rf) {
 		ib_dealloc_device(&iwdev->ibdev);
 		return -ENOMEM;
diff --git a/drivers/infiniband/hw/irdma/ig3rdma_if.c b/drivers/infiniband/hw/irdma/ig3rdma_if.c
index e1d6670d9396..4d581ec341f3 100644
--- a/drivers/infiniband/hw/irdma/ig3rdma_if.c
+++ b/drivers/infiniband/hw/irdma/ig3rdma_if.c
@@ -101,8 +101,8 @@ static int ig3rdma_cfg_regions(struct irdma_hw *hw,
 		return -ENOMEM;

 	hw->num_io_regions = le16_to_cpu(idc_priv->num_memory_regions);
-	hw->io_regs = kcalloc(hw->num_io_regions,
-			      sizeof(struct irdma_mmio_region), GFP_KERNEL);
+	hw->io_regs = kzalloc_objs(struct irdma_mmio_region, hw->num_io_regions,
+				   GFP_KERNEL);

 	if (!hw->io_regs) {
 		iounmap(hw->rdma_reg.addr);
@@ -175,7 +175,7 @@ static int ig3rdma_core_probe(struct auxiliary_device *aux_dev,
 	struct irdma_pci_f *rf;
 	int err;

-	rf = kzalloc(sizeof(*rf), GFP_KERNEL);
+	rf = kzalloc_obj(*rf, GFP_KERNEL);
 	if (!rf)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/irdma/utils.c b/drivers/infiniband/hw/irdma/utils.c
index 960432bf7fc9..ab8c5284d4be 100644
--- a/drivers/infiniband/hw/irdma/utils.c
+++ b/drivers/infiniband/hw/irdma/utils.c
@@ -438,7 +438,7 @@ struct irdma_cqp_request *irdma_alloc_and_get_cqp_request(struct irdma_cqp *cqp,
 	}
 	spin_unlock_irqrestore(&cqp->req_lock, flags);
 	if (!cqp_request) {
-		cqp_request = kzalloc(sizeof(*cqp_request), GFP_ATOMIC);
+		cqp_request = kzalloc_obj(*cqp_request, GFP_ATOMIC);
 		if (cqp_request) {
 			cqp_request->dynamic = true;
 			if (wait)
@@ -2025,7 +2025,7 @@ int irdma_puda_create_ah(struct irdma_sc_dev *dev,
 	struct irdma_pci_f *rf = dev_to_rf(dev);
 	int err;

-	ah = kzalloc(sizeof(*ah), GFP_ATOMIC);
+	ah = kzalloc_obj(*ah, GFP_ATOMIC);
 	*ah_ret = ah;
 	if (!ah)
 		return -ENOMEM;
@@ -2431,7 +2431,7 @@ void irdma_generate_flush_completions(struct irdma_qp *iwqp)

 		spin_lock_irqsave(&iwqp->lock, flags2);
 		while (IRDMA_RING_MORE_WORK(*sq_ring)) {
-			cmpl = kzalloc(sizeof(*cmpl), GFP_ATOMIC);
+			cmpl = kzalloc_obj(*cmpl, GFP_ATOMIC);
 			if (!cmpl) {
 				spin_unlock_irqrestore(&iwqp->lock, flags2);
 				spin_unlock_irqrestore(&iwscq->lock, flags1);
@@ -2475,7 +2475,7 @@ void irdma_generate_flush_completions(struct irdma_qp *iwqp)

 		spin_lock_irqsave(&iwqp->lock, flags2);
 		while (IRDMA_RING_MORE_WORK(*rq_ring)) {
-			cmpl = kzalloc(sizeof(*cmpl), GFP_ATOMIC);
+			cmpl = kzalloc_obj(*cmpl, GFP_ATOMIC);
 			if (!cmpl) {
 				spin_unlock_irqrestore(&iwqp->lock, flags2);
 				spin_unlock_irqrestore(&iwrcq->lock, flags1);
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c
index cf8d19150574..818ea15d5d92 100644
--- a/drivers/infiniband/hw/irdma/verbs.c
+++ b/drivers/infiniband/hw/irdma/verbs.c
@@ -157,7 +157,7 @@ static struct rdma_user_mmap_entry*
 irdma_user_mmap_entry_insert(struct irdma_ucontext *ucontext, u64 bar_offset,
 			     enum irdma_mmap_flag mmap_flag, u64 *mmap_offset)
 {
-	struct irdma_user_mmap_entry *entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	struct irdma_user_mmap_entry *entry = kzalloc_obj(*entry, GFP_KERNEL);
 	int ret;

 	if (!entry)
@@ -709,12 +709,14 @@ static int irdma_setup_kmode_qp(struct irdma_device *iwdev,
 		return status;

 	iwqp->kqp.sq_wrid_mem =
-		kcalloc(ukinfo->sq_depth, sizeof(*iwqp->kqp.sq_wrid_mem), GFP_KERNEL);
+		kzalloc_objs(*iwqp->kqp.sq_wrid_mem, ukinfo->sq_depth,
+			     GFP_KERNEL);
 	if (!iwqp->kqp.sq_wrid_mem)
 		return -ENOMEM;

 	iwqp->kqp.rq_wrid_mem =
-		kcalloc(ukinfo->rq_depth, sizeof(*iwqp->kqp.rq_wrid_mem), GFP_KERNEL);
+		kzalloc_objs(*iwqp->kqp.rq_wrid_mem, ukinfo->rq_depth,
+			     GFP_KERNEL);

 	if (!iwqp->kqp.rq_wrid_mem) {
 		kfree(iwqp->kqp.sq_wrid_mem);
@@ -2109,7 +2111,7 @@ static int irdma_resize_cq(struct ib_cq *ibcq, int entries,

 		info.cq_base = kmem_buf.va;
 		info.cq_pa = kmem_buf.pa;
-		cq_buf = kzalloc(sizeof(*cq_buf), GFP_KERNEL);
+		cq_buf = kzalloc_obj(*cq_buf, GFP_KERNEL);
 		if (!cq_buf) {
 			ret = -ENOMEM;
 			goto error;
@@ -3151,7 +3153,7 @@ static struct ib_mr *irdma_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
 	u32 stag;
 	int err_code;

-	iwmr = kzalloc(sizeof(*iwmr), GFP_KERNEL);
+	iwmr = kzalloc_obj(*iwmr, GFP_KERNEL);
 	if (!iwmr)
 		return ERR_PTR(-ENOMEM);

@@ -3368,7 +3370,7 @@ static struct irdma_mr *irdma_alloc_iwmr(struct ib_umem *region,
 	struct irdma_mr *iwmr;
 	unsigned long pgsz_bitmap;

-	iwmr = kzalloc(sizeof(*iwmr), GFP_KERNEL);
+	iwmr = kzalloc_obj(*iwmr, GFP_KERNEL);
 	if (!iwmr)
 		return ERR_PTR(-ENOMEM);

@@ -3807,7 +3809,7 @@ struct ib_mr *irdma_reg_phys_mr(struct ib_pd *pd, u64 addr, u64 size, int access
 	u32 stag;
 	int ret;

-	iwmr = kzalloc(sizeof(*iwmr), GFP_KERNEL);
+	iwmr = kzalloc_obj(*iwmr, GFP_KERNEL);
 	if (!iwmr)
 		return ERR_PTR(-ENOMEM);

@@ -4849,7 +4851,7 @@ static int irdma_attach_mcast(struct ib_qp *ibqp, union ib_gid *ibgid, u16 lid)
 		struct irdma_dma_mem *dma_mem_mc;

 		spin_unlock_irqrestore(&rf->qh_list_lock, flags);
-		mc_qht_elem = kzalloc(sizeof(*mc_qht_elem), GFP_KERNEL);
+		mc_qht_elem = kzalloc_obj(*mc_qht_elem, GFP_KERNEL);
 		if (!mc_qht_elem)
 			return -ENOMEM;

diff --git a/drivers/infiniband/hw/mana/cq.c b/drivers/infiniband/hw/mana/cq.c
index 974dd610dcbf..413fde213120 100644
--- a/drivers/infiniband/hw/mana/cq.c
+++ b/drivers/infiniband/hw/mana/cq.c
@@ -147,7 +147,7 @@ int mana_ib_install_cq_cb(struct mana_ib_dev *mdev, struct mana_ib_cq *cq)
 	if (cq->queue.kmem)
 		gdma_cq = cq->queue.kmem;
 	else
-		gdma_cq = kzalloc(sizeof(*gdma_cq), GFP_KERNEL);
+		gdma_cq = kzalloc_obj(*gdma_cq, GFP_KERNEL);
 	if (!gdma_cq)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana/main.c
index fac159f7128d..3d6a9c427269 100644
--- a/drivers/infiniband/hw/mana/main.c
+++ b/drivers/infiniband/hw/mana/main.c
@@ -793,8 +793,8 @@ int mana_ib_create_eqs(struct mana_ib_dev *mdev)
 	if (err)
 		return err;

-	mdev->eqs = kcalloc(mdev->ib_dev.num_comp_vectors, sizeof(struct gdma_queue *),
-			    GFP_KERNEL);
+	mdev->eqs = kzalloc_objs(struct gdma_queue *,
+				 mdev->ib_dev.num_comp_vectors, GFP_KERNEL);
 	if (!mdev->eqs) {
 		err = -ENOMEM;
 		goto destroy_fatal_eq;
diff --git a/drivers/infiniband/hw/mana/mr.c b/drivers/infiniband/hw/mana/mr.c
index f979f26adc3b..b67d94842721 100644
--- a/drivers/infiniband/hw/mana/mr.c
+++ b/drivers/infiniband/hw/mana/mr.c
@@ -137,7 +137,7 @@ struct ib_mr *mana_ib_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 length,
 	if (access_flags & ~VALID_MR_FLAGS)
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -221,7 +221,7 @@ struct ib_mr *mana_ib_reg_user_mr_dmabuf(struct ib_pd *ibpd, u64 start, u64 leng
 	if (access_flags & ~VALID_MR_FLAGS)
 		return ERR_PTR(-EOPNOTSUPP);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -286,7 +286,7 @@ struct ib_mr *mana_ib_get_dma_mr(struct ib_pd *ibpd, int access_flags)
 	if (access_flags & ~VALID_DMA_MR_FLAGS)
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -360,7 +360,7 @@ struct ib_dm *mana_ib_alloc_dm(struct ib_device *ibdev,
 	struct mana_ib_dm *dm;
 	int err;

-	dm = kzalloc(sizeof(*dm), GFP_KERNEL);
+	dm = kzalloc_obj(*dm, GFP_KERNEL);
 	if (!dm)
 		return ERR_PTR(-ENOMEM);

@@ -425,7 +425,7 @@ struct ib_mr *mana_ib_reg_dm_mr(struct ib_pd *ibpd, struct ib_dm *ibdm,
 	if (attr->access_flags & ~VALID_MR_FLAGS)
 		return ERR_PTR(-EOPNOTSUPP);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/qp.c
index 48c1f4977f21..811b8e0eab67 100644
--- a/drivers/infiniband/hw/mana/qp.c
+++ b/drivers/infiniband/hw/mana/qp.c
@@ -164,8 +164,7 @@ static int mana_ib_create_qp_rss(struct ib_qp *ibqp, struct ib_pd *pd,
 	ibdev_dbg(&mdev->ib_dev, "rx_hash_function %d port %d\n",
 		  ucmd.rx_hash_function, port);

-	mana_ind_table = kcalloc(ind_tbl_size, sizeof(mana_handle_t),
-				 GFP_KERNEL);
+	mana_ind_table = kzalloc_objs(mana_handle_t, ind_tbl_size, GFP_KERNEL);
 	if (!mana_ind_table) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/infiniband/hw/mana/wq.c b/drivers/infiniband/hw/mana/wq.c
index f959f4b9244f..05789069369b 100644
--- a/drivers/infiniband/hw/mana/wq.c
+++ b/drivers/infiniband/hw/mana/wq.c
@@ -25,7 +25,7 @@ struct ib_wq *mana_ib_create_wq(struct ib_pd *pd,
 		return ERR_PTR(err);
 	}

-	wq = kzalloc(sizeof(*wq), GFP_KERNEL);
+	wq = kzalloc_obj(*wq, GFP_KERNEL);
 	if (!wq)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/mlx4/alias_GUID.c b/drivers/infiniband/hw/mlx4/alias_GUID.c
index d7327735b8d0..82c01b99b60d 100644
--- a/drivers/infiniband/hw/mlx4/alias_GUID.c
+++ b/drivers/infiniband/hw/mlx4/alias_GUID.c
@@ -513,7 +513,7 @@ static int set_guid_rec(struct ib_device *ibdev,
 		goto new_schedule;
 	}

-	callback_context = kmalloc(sizeof *callback_context, GFP_KERNEL);
+	callback_context = kmalloc_obj(*callback_context, GFP_KERNEL);
 	if (!callback_context) {
 		err = -ENOMEM;
 		resched_delay = HZ * 5;
@@ -754,7 +754,7 @@ static void alias_guid_work(struct work_struct *work)
 						alias_guid);
 	struct mlx4_ib_dev *dev = container_of(ib_sriov, struct mlx4_ib_dev, sriov);

-	rec = kzalloc(sizeof *rec, GFP_KERNEL);
+	rec = kzalloc_obj(*rec, GFP_KERNEL);
 	if (!rec)
 		return;

@@ -835,8 +835,8 @@ int mlx4_ib_init_alias_guid_service(struct mlx4_ib_dev *dev)

 	if (!mlx4_is_master(dev->dev))
 		return 0;
-	dev->sriov.alias_guid.sa_client =
-		kzalloc(sizeof *dev->sriov.alias_guid.sa_client, GFP_KERNEL);
+	dev->sriov.alias_guid.sa_client = kzalloc_obj(*dev->sriov.alias_guid.sa_client,
+						      GFP_KERNEL);
 	if (!dev->sriov.alias_guid.sa_client)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx4/cm.c b/drivers/infiniband/hw/mlx4/cm.c
index 03aacd526860..a71603353dbd 100644
--- a/drivers/infiniband/hw/mlx4/cm.c
+++ b/drivers/infiniband/hw/mlx4/cm.c
@@ -235,7 +235,7 @@ id_map_alloc(struct ib_device *ibdev, int slave_id, u32 sl_cm_id)
 	struct id_map_entry *ent;
 	struct mlx4_ib_sriov *sriov = &to_mdev(ibdev)->sriov;

-	ent = kmalloc(sizeof (struct id_map_entry), GFP_KERNEL);
+	ent = kmalloc_obj(struct id_map_entry, GFP_KERNEL);
 	if (!ent)
 		return ERR_PTR(-ENOMEM);

@@ -376,7 +376,7 @@ static int alloc_rej_tmout(struct mlx4_ib_sriov *sriov, u32 rem_pv_cm_id, int sl
 	}
 	xa_unlock(&sriov->xa_rej_tmout);

-	item = kmalloc(sizeof(*item), GFP_KERNEL);
+	item = kmalloc_obj(*item, GFP_KERNEL);
 	if (!item)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index c592374f4a58..dc05b3d88fe4 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
@@ -300,7 +300,7 @@ static int mlx4_alloc_resize_buf(struct mlx4_ib_dev *dev, struct mlx4_ib_cq *cq,
 	if (cq->resize_buf)
 		return -EBUSY;

-	cq->resize_buf = kmalloc(sizeof *cq->resize_buf, GFP_KERNEL);
+	cq->resize_buf = kmalloc_obj(*cq->resize_buf, GFP_KERNEL);
 	if (!cq->resize_buf)
 		return -ENOMEM;

@@ -328,7 +328,7 @@ static int mlx4_alloc_resize_umem(struct mlx4_ib_dev *dev, struct mlx4_ib_cq *cq
 	if (ib_copy_from_udata(&ucmd, udata, sizeof ucmd))
 		return -EFAULT;

-	cq->resize_buf = kmalloc(sizeof *cq->resize_buf, GFP_KERNEL);
+	cq->resize_buf = kmalloc_obj(*cq->resize_buf, GFP_KERNEL);
 	if (!cq->resize_buf)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx4/doorbell.c b/drivers/infiniband/hw/mlx4/doorbell.c
index 9bbd695a9fd5..62f9c65ca140 100644
--- a/drivers/infiniband/hw/mlx4/doorbell.c
+++ b/drivers/infiniband/hw/mlx4/doorbell.c
@@ -56,7 +56,7 @@ int mlx4_ib_db_map_user(struct ib_udata *udata, unsigned long virt,
 		if (page->user_virt == (virt & PAGE_MASK))
 			goto found;

-	page = kmalloc(sizeof *page, GFP_KERNEL);
+	page = kmalloc_obj(*page, GFP_KERNEL);
 	if (!page) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
index 91c714f72099..ac58fc6e3730 100644
--- a/drivers/infiniband/hw/mlx4/mad.c
+++ b/drivers/infiniband/hw/mlx4/mad.c
@@ -1133,8 +1133,8 @@ static void handle_slaves_guid_change(struct mlx4_ib_dev *dev, u32 port_num,
 	if (!mlx4_is_mfunc(dev->dev) || !mlx4_is_master(dev->dev))
 		return;

-	in_mad  = kmalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kmalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -1612,15 +1612,12 @@ static int mlx4_ib_alloc_pv_bufs(struct mlx4_ib_demux_pv_ctx *ctx,

 	tun_qp = &ctx->qp[qp_type];

-	tun_qp->ring = kcalloc(nmbr_bufs,
-			       sizeof(struct mlx4_ib_buf),
-			       GFP_KERNEL);
+	tun_qp->ring = kzalloc_objs(struct mlx4_ib_buf, nmbr_bufs, GFP_KERNEL);
 	if (!tun_qp->ring)
 		return -ENOMEM;

-	tun_qp->tx_ring = kcalloc(nmbr_bufs,
-				  sizeof (struct mlx4_ib_tun_tx_buf),
-				  GFP_KERNEL);
+	tun_qp->tx_ring = kzalloc_objs(struct mlx4_ib_tun_tx_buf, nmbr_bufs,
+				       GFP_KERNEL);
 	if (!tun_qp->tx_ring) {
 		kfree(tun_qp->ring);
 		tun_qp->ring = NULL;
@@ -1958,7 +1955,7 @@ static int alloc_pv_object(struct mlx4_ib_dev *dev, int slave, int port,
 	struct mlx4_ib_demux_pv_ctx *ctx;

 	*ret_ctx = NULL;
-	ctx = kzalloc(sizeof (struct mlx4_ib_demux_pv_ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(struct mlx4_ib_demux_pv_ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -2161,8 +2158,8 @@ static int mlx4_ib_alloc_demux_ctx(struct mlx4_ib_dev *dev,
 	int ret = 0;
 	int i;

-	ctx->tun = kcalloc(dev->dev->caps.sqp_demux,
-			   sizeof (struct mlx4_ib_demux_pv_ctx *), GFP_KERNEL);
+	ctx->tun = kzalloc_objs(struct mlx4_ib_demux_pv_ctx *,
+				dev->dev->caps.sqp_demux, GFP_KERNEL);
 	if (!ctx->tun)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index dd35e03402ab..1dab78eb7a03 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -295,7 +295,8 @@ static int mlx4_ib_add_gid(const struct ib_gid_attr *attr, void **context)
 		if (free < 0) {
 			ret = -ENOSPC;
 		} else {
-			port_gid_table->gids[free].ctx = kmalloc(sizeof(*port_gid_table->gids[free].ctx), GFP_ATOMIC);
+			port_gid_table->gids[free].ctx = kmalloc_obj(*port_gid_table->gids[free].ctx,
+								     GFP_ATOMIC);
 			if (!port_gid_table->gids[free].ctx) {
 				ret = -ENOMEM;
 			} else {
@@ -314,8 +315,7 @@ static int mlx4_ib_add_gid(const struct ib_gid_attr *attr, void **context)
 		ctx->refcount++;
 	}
 	if (!ret && hw_update) {
-		gids = kmalloc_array(MLX4_MAX_PORT_GIDS, sizeof(*gids),
-				     GFP_ATOMIC);
+		gids = kmalloc_objs(*gids, MLX4_MAX_PORT_GIDS, GFP_ATOMIC);
 		if (!gids) {
 			ret = -ENOMEM;
 			*context = NULL;
@@ -373,8 +373,7 @@ static int mlx4_ib_del_gid(const struct ib_gid_attr *attr, void **context)
 	if (!ret && hw_update) {
 		int i;

-		gids = kmalloc_array(MLX4_MAX_PORT_GIDS, sizeof(*gids),
-				     GFP_ATOMIC);
+		gids = kmalloc_objs(*gids, MLX4_MAX_PORT_GIDS, GFP_ATOMIC);
 		if (!gids) {
 			ret = -ENOMEM;
 		} else {
@@ -462,8 +461,8 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,

 	resp.response_length = offsetof(typeof(resp), response_length) +
 		sizeof(resp.response_length);
-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!in_mad || !out_mad)
 		goto out;
@@ -661,8 +660,8 @@ static int ib_link_query_port(struct ib_device *ibdev, u32 port,
 	int mad_ifc_flags = MLX4_MAD_IFC_IGNORE_KEYS;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -840,8 +839,8 @@ int __mlx4_ib_query_gid(struct ib_device *ibdev, u32 port, int index,
 	int clear = 0;
 	int mad_ifc_flags = MLX4_MAD_IFC_IGNORE_KEYS;

-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -909,8 +908,8 @@ static int mlx4_ib_query_sl2vl(struct ib_device *ibdev, u32 port,
 		return 0;
 	}

-	in_mad  = kzalloc(sizeof(*in_mad), GFP_KERNEL);
-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -963,8 +962,8 @@ int __mlx4_ib_query_pkey(struct ib_device *ibdev, u32 port, u16 index,
 	int mad_ifc_flags = MLX4_MAD_IFC_IGNORE_KEYS;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -1268,7 +1267,7 @@ static int add_gid_entry(struct ib_qp *ibqp, union ib_gid *gid)
 	struct mlx4_ib_dev *mdev = to_mdev(ibqp->device);
 	struct mlx4_ib_gid_entry *ge;

-	ge = kzalloc(sizeof *ge, GFP_KERNEL);
+	ge = kzalloc_obj(*ge, GFP_KERNEL);
 	if (!ge)
 		return -ENOMEM;

@@ -1708,7 +1707,7 @@ static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp,

 	memset(type, 0, sizeof(type));

-	mflow = kzalloc(sizeof(*mflow), GFP_KERNEL);
+	mflow = kzalloc_obj(*mflow, GFP_KERNEL);
 	if (!mflow) {
 		err = -ENOMEM;
 		goto err_free;
@@ -1845,7 +1844,7 @@ static int mlx4_ib_mcg_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)

 	if (mdev->dev->caps.steering_mode ==
 	    MLX4_STEERING_MODE_DEVICE_MANAGED) {
-		ib_steering = kmalloc(sizeof(*ib_steering), GFP_KERNEL);
+		ib_steering = kmalloc_obj(*ib_steering, GFP_KERNEL);
 		if (!ib_steering)
 			return -ENOMEM;
 	}
@@ -1979,8 +1978,8 @@ static int init_node_data(struct mlx4_ib_dev *dev)
 	int mad_ifc_flags = MLX4_MAD_IFC_IGNORE_KEYS;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -2158,8 +2157,7 @@ static int __mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev,
 	if (!port)
 		num_counters += ARRAY_SIZE(diag_device_only);

-	*pdescs = kcalloc(num_counters, sizeof(struct rdma_stat_desc),
-			  GFP_KERNEL);
+	*pdescs = kzalloc_objs(struct rdma_stat_desc, num_counters, GFP_KERNEL);
 	if (!*pdescs)
 		return -ENOMEM;

@@ -2427,8 +2425,8 @@ static void mlx4_ib_alloc_eqs(struct mlx4_dev *dev, struct mlx4_ib_dev *ibdev)
 {
 	int i, j, eq = 0, total_eqs = 0;

-	ibdev->eq_table = kcalloc(dev->caps.num_comp_vectors,
-				  sizeof(ibdev->eq_table[0]), GFP_KERNEL);
+	ibdev->eq_table = kzalloc_objs(ibdev->eq_table[0],
+				       dev->caps.num_comp_vectors, GFP_KERNEL);
 	if (!ibdev->eq_table)
 		return;

@@ -2732,8 +2730,7 @@ static int mlx4_ib_probe(struct auxiliary_device *adev,
 			counter_index = mlx4_get_default_counter_index(dev,
 								       i + 1);
 		}
-		new_counter_index = kmalloc(sizeof(*new_counter_index),
-					    GFP_KERNEL);
+		new_counter_index = kmalloc_obj(*new_counter_index, GFP_KERNEL);
 		if (!new_counter_index) {
 			err = -ENOMEM;
 			if (allocated)
@@ -2751,8 +2748,8 @@ static int mlx4_ib_probe(struct auxiliary_device *adev,
 	if (mlx4_is_bonded(dev))
 		for (i = 1; i < ibdev->num_ports ; ++i) {
 			new_counter_index =
-					kmalloc(sizeof(struct counter_index),
-						GFP_KERNEL);
+					kmalloc_obj(struct counter_index,
+						    GFP_KERNEL);
 			if (!new_counter_index) {
 				err = -ENOMEM;
 				goto err_counter;
@@ -3035,12 +3032,12 @@ static void do_slave_init(struct mlx4_ib_dev *ibdev, int slave, int do_init)
 	ports = bitmap_weight(actv_ports.ports, dev->caps.num_ports);
 	first_port = find_first_bit(actv_ports.ports, dev->caps.num_ports);

-	dm = kcalloc(ports, sizeof(*dm), GFP_ATOMIC);
+	dm = kzalloc_objs(*dm, ports, GFP_ATOMIC);
 	if (!dm)
 		return;

 	for (i = 0; i < ports; i++) {
-		dm[i] = kmalloc(sizeof (struct mlx4_ib_demux_work), GFP_ATOMIC);
+		dm[i] = kmalloc_obj(struct mlx4_ib_demux_work, GFP_ATOMIC);
 		if (!dm[i]) {
 			while (--i >= 0)
 				kfree(dm[i]);
@@ -3195,7 +3192,7 @@ void mlx4_sched_ib_sl2vl_update_work(struct mlx4_ib_dev *ibdev,
 {
 	struct ib_event_work *ew;

-	ew = kmalloc(sizeof(*ew), GFP_ATOMIC);
+	ew = kmalloc_obj(*ew, GFP_ATOMIC);
 	if (ew) {
 		INIT_WORK(&ew->work, ib_sl2vl_update_work);
 		ew->port = port;
@@ -3218,7 +3215,7 @@ static int mlx4_ib_event(struct notifier_block *this, unsigned long event,
 	if (mlx4_is_bonded(dev) &&
 	    ((event == MLX4_DEV_EVENT_PORT_UP) ||
 	    (event == MLX4_DEV_EVENT_PORT_DOWN))) {
-		ew = kmalloc(sizeof(*ew), GFP_ATOMIC);
+		ew = kmalloc_obj(*ew, GFP_ATOMIC);
 		if (!ew)
 			return NOTIFY_DONE;
 		INIT_WORK(&ew->work, handle_bonded_port_state_event);
@@ -3267,7 +3264,7 @@ static int mlx4_ib_event(struct notifier_block *this, unsigned long event,
 		break;

 	case MLX4_DEV_EVENT_PORT_MGMT_CHANGE:
-		ew = kmalloc(sizeof *ew, GFP_ATOMIC);
+		ew = kmalloc_obj(*ew, GFP_ATOMIC);
 		if (!ew)
 			return NOTIFY_DONE;

diff --git a/drivers/infiniband/hw/mlx4/mcg.c b/drivers/infiniband/hw/mlx4/mcg.c
index e279e69b9a51..ef4ab3bc6ffd 100644
--- a/drivers/infiniband/hw/mlx4/mcg.c
+++ b/drivers/infiniband/hw/mlx4/mcg.c
@@ -824,7 +824,7 @@ static struct mcast_group *acquire_group(struct mlx4_ib_demux_ctx *ctx,
 	if (!create)
 		return ERR_PTR(-ENOENT);

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group)
 		return ERR_PTR(-ENOMEM);

@@ -946,7 +946,7 @@ int mlx4_ib_mcg_multiplex_handler(struct ib_device *ibdev, int port,
 		may_create = 1;
 		fallthrough;
 	case IB_SA_METHOD_DELETE:
-		req = kzalloc(sizeof *req, GFP_KERNEL);
+		req = kzalloc_obj(*req, GFP_KERNEL);
 		if (!req)
 			return -ENOMEM;

@@ -1150,7 +1150,7 @@ void mlx4_ib_mcg_port_cleanup(struct mlx4_ib_demux_ctx *ctx, int destroy_wq)
 		return;
 	}

-	work = kmalloc(sizeof *work, GFP_KERNEL);
+	work = kmalloc_obj(*work, GFP_KERNEL);
 	if (!work) {
 		ctx->flushing = 0;
 		return;
@@ -1211,7 +1211,7 @@ static int push_deleteing_req(struct mcast_group *group, int slave)
 	if (!group->func[slave].join_state)
 		return 0;

-	req = kzalloc(sizeof *req, GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
index 94464f1694d9..27038065ee67 100644
--- a/drivers/infiniband/hw/mlx4/mr.c
+++ b/drivers/infiniband/hw/mlx4/mr.c
@@ -60,7 +60,7 @@ struct ib_mr *mlx4_ib_get_dma_mr(struct ib_pd *pd, int acc)
 	struct mlx4_ib_mr *mr;
 	int err;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -151,7 +151,7 @@ struct ib_mr *mlx4_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 	if (dmah)
 		return ERR_PTR(-EOPNOTSUPP);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -394,7 +394,7 @@ struct ib_mr *mlx4_ib_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
 	    max_num_sg > MLX4_MAX_FAST_REG_PAGES)
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index f2887ae6390e..c7dd9d6e4f8f 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -267,7 +267,7 @@ static void mlx4_ib_qp_event(struct mlx4_qp *qp, enum mlx4_event type)
 	if (!ibqp->event_handler)
 		goto out_no_handler;

-	qpe_work = kzalloc(sizeof(*qpe_work), GFP_ATOMIC);
+	qpe_work = kzalloc_obj(*qpe_work, GFP_ATOMIC);
 	if (!qpe_work)
 		goto out_no_handler;

@@ -472,14 +472,12 @@ static int alloc_proxy_bufs(struct ib_device *dev, struct mlx4_ib_qp *qp)
 	int i;

 	qp->sqp_proxy_rcv =
-		kmalloc_array(qp->rq.wqe_cnt, sizeof(struct mlx4_ib_buf),
-			      GFP_KERNEL);
+		kmalloc_objs(struct mlx4_ib_buf, qp->rq.wqe_cnt, GFP_KERNEL);
 	if (!qp->sqp_proxy_rcv)
 		return -ENOMEM;
 	for (i = 0; i < qp->rq.wqe_cnt; i++) {
 		qp->sqp_proxy_rcv[i].addr =
-			kmalloc(sizeof (struct mlx4_ib_proxy_sqp_hdr),
-				GFP_KERNEL);
+			kmalloc_obj(struct mlx4_ib_proxy_sqp_hdr, GFP_KERNEL);
 		if (!qp->sqp_proxy_rcv[i].addr)
 			goto err;
 		qp->sqp_proxy_rcv[i].map =
@@ -683,7 +681,7 @@ static int create_qp_rss(struct mlx4_ib_dev *dev,
 	qp->mtt = (to_mqp(
 		   (struct ib_qp *)init_attr->rwq_ind_tbl->ind_tbl[0]))->mtt;

-	qp->rss_ctx = kzalloc(sizeof(*qp->rss_ctx), GFP_KERNEL);
+	qp->rss_ctx = kzalloc_obj(*qp->rss_ctx, GFP_KERNEL);
 	if (!qp->rss_ctx) {
 		err = -ENOMEM;
 		goto err_qp_alloc;
@@ -793,7 +791,7 @@ static int mlx4_ib_alloc_wqn(struct mlx4_ib_ucontext *context,
 					 struct mlx4_wqn_range, list);

 	if (!range || (range->refcount == range->size) || range->dirty) {
-		range = kzalloc(sizeof(*range), GFP_KERNEL);
+		range = kzalloc_obj(*range, GFP_KERNEL);
 		if (!range) {
 			err = -ENOMEM;
 			goto out;
@@ -1051,7 +1049,7 @@ static int create_qp_common(struct ib_pd *pd, struct ib_qp_init_attr *init_attr,
 	    qp_type == MLX4_IB_QPT_GSI ||
 	    (qp_type & (MLX4_IB_QPT_PROXY_SMI | MLX4_IB_QPT_PROXY_SMI_OWNER |
 			MLX4_IB_QPT_PROXY_GSI | MLX4_IB_QPT_TUN_SMI_OWNER))) {
-		qp->sqp = kzalloc(sizeof(struct mlx4_ib_sqp), GFP_KERNEL);
+		qp->sqp = kzalloc_obj(struct mlx4_ib_sqp, GFP_KERNEL);
 		if (!qp->sqp)
 			return -ENOMEM;
 	}
@@ -1972,7 +1970,7 @@ static int create_qp_lb_counter(struct mlx4_ib_dev *dev, struct mlx4_ib_qp *qp)
 	if (err)
 		return err;

-	new_counter_index = kmalloc(sizeof(*new_counter_index), GFP_KERNEL);
+	new_counter_index = kmalloc_obj(*new_counter_index, GFP_KERNEL);
 	if (!new_counter_index) {
 		mlx4_counter_free(dev->dev, tmp_idx);
 		return -ENOMEM;
@@ -2165,7 +2163,7 @@ static int __mlx4_ib_modify_qp(void *src, enum mlx4_ib_source_type src_type,
 	    IB_LINK_LAYER_ETHERNET)
 		return -ENOTSUPP;

-	context = kzalloc(sizeof *context, GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return -ENOMEM;

@@ -4167,7 +4165,7 @@ struct ib_wq *mlx4_ib_create_wq(struct ib_pd *pd,
 		return ERR_PTR(-EOPNOTSUPP);
 	}

-	qp = kzalloc(sizeof(*qp), GFP_KERNEL);
+	qp = kzalloc_obj(*qp, GFP_KERNEL);
 	if (!qp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/mlx4/sysfs.c b/drivers/infiniband/hw/mlx4/sysfs.c
index 88f534cf690e..ba0356aa3038 100644
--- a/drivers/infiniband/hw/mlx4/sysfs.c
+++ b/drivers/infiniband/hw/mlx4/sysfs.c
@@ -244,8 +244,8 @@ static int add_port_entries(struct mlx4_ib_dev *device, int port_num)
 	 *	gids (operational)
 	 *	mcg_table
 	 */
-	port->dentr_ar = kzalloc(sizeof (struct mlx4_ib_iov_sysfs_attr_ar),
-				 GFP_KERNEL);
+	port->dentr_ar = kzalloc_obj(struct mlx4_ib_iov_sysfs_attr_ar,
+				     GFP_KERNEL);
 	if (!port->dentr_ar) {
 		ret = -ENOMEM;
 		goto err;
@@ -500,13 +500,12 @@ alloc_group_attrs(ssize_t (*show)(struct mlx4_port *,
 	struct port_table_attribute *element;
 	int i;

-	tab_attr = kcalloc(1 + len, sizeof (struct attribute *), GFP_KERNEL);
+	tab_attr = kzalloc_objs(struct attribute *, 1 + len, GFP_KERNEL);
 	if (!tab_attr)
 		return NULL;

 	for (i = 0; i < len; i++) {
-		element = kzalloc(sizeof (struct port_table_attribute),
-				  GFP_KERNEL);
+		element = kzalloc_obj(struct port_table_attribute, GFP_KERNEL);
 		if (!element)
 			goto err;
 		if (snprintf(element->name, sizeof (element->name),
@@ -630,7 +629,7 @@ static int add_port(struct mlx4_ib_dev *dev, int port_num, int slave)
 	int is_eth = rdma_port_get_link_layer(&dev->ib_dev, port_num) ==
 			IB_LINK_LAYER_ETHERNET;

-	p = kzalloc(sizeof *p, GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx5/cong.c b/drivers/infiniband/hw/mlx5/cong.c
index a78a067e3ce7..fb2bc450f4ff 100644
--- a/drivers/infiniband/hw/mlx5/cong.c
+++ b/drivers/infiniband/hw/mlx5/cong.c
@@ -449,7 +449,7 @@ void mlx5_ib_init_cong_debugfs(struct mlx5_ib_dev *dev, u32 port_num)
 	    !MLX5_CAP_GEN(mdev, cc_modify_allowed))
 		goto put_mdev;

-	dbg_cc_params = kzalloc(sizeof(*dbg_cc_params), GFP_KERNEL);
+	dbg_cc_params = kzalloc_obj(*dbg_cc_params, GFP_KERNEL);
 	if (!dbg_cc_params)
 		goto err;

diff --git a/drivers/infiniband/hw/mlx5/counters.c b/drivers/infiniband/hw/mlx5/counters.c
index e042e0719ead..10feeb77d569 100644
--- a/drivers/infiniband/hw/mlx5/counters.c
+++ b/drivers/infiniband/hw/mlx5/counters.c
@@ -858,13 +858,12 @@ static int __mlx5_ib_alloc_counters(struct mlx5_ib_dev *dev,
 skip_non_qcounters:
 	cnts->num_op_counters = num_op_counters;
 	num_counters += num_op_counters;
-	cnts->descs = kcalloc(num_counters,
-			      sizeof(struct rdma_stat_desc), GFP_KERNEL);
+	cnts->descs = kzalloc_objs(struct rdma_stat_desc, num_counters,
+				   GFP_KERNEL);
 	if (!cnts->descs)
 		return -ENOMEM;

-	cnts->offsets = kcalloc(num_counters,
-				sizeof(*cnts->offsets), GFP_KERNEL);
+	cnts->offsets = kzalloc_objs(*cnts->offsets, num_counters, GFP_KERNEL);
 	if (!cnts->offsets)
 		goto err;

@@ -1074,9 +1073,8 @@ int mlx5_ib_flow_counters_set_data(struct ib_counters *ibcounters,
 		if (cntrs_data->ncounters > MAX_COUNTERS_NUM)
 			return -EINVAL;

-		desc_data = kcalloc(cntrs_data->ncounters,
-				    sizeof(*desc_data),
-				    GFP_KERNEL);
+		desc_data = kzalloc_objs(*desc_data, cntrs_data->ncounters,
+					 GFP_KERNEL);
 		if (!desc_data)
 			return  -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c
index 651d76bca114..c0e06c05555b 100644
--- a/drivers/infiniband/hw/mlx5/cq.c
+++ b/drivers/infiniband/hw/mlx5/cq.c
@@ -1210,7 +1210,7 @@ static int resize_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *cq,
 {
 	int err;

-	cq->resize_buf = kzalloc(sizeof(*cq->resize_buf), GFP_KERNEL);
+	cq->resize_buf = kzalloc_obj(*cq->resize_buf, GFP_KERNEL);
 	if (!cq->resize_buf)
 		return -ENOMEM;

@@ -1449,7 +1449,7 @@ int mlx5_ib_generate_wc(struct ib_cq *ibcq, struct ib_wc *wc)
 	struct mlx5_ib_cq *cq = to_mcq(ibcq);
 	unsigned long flags;

-	soft_wc = kmalloc(sizeof(*soft_wc), GFP_ATOMIC);
+	soft_wc = kmalloc_obj(*soft_wc, GFP_ATOMIC);
 	if (!soft_wc)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx5/data_direct.c b/drivers/infiniband/hw/mlx5/data_direct.c
index b81ac5709b56..a93e31e23dc2 100644
--- a/drivers/infiniband/hw/mlx5/data_direct.c
+++ b/drivers/infiniband/hw/mlx5/data_direct.c
@@ -83,7 +83,7 @@ int mlx5_data_direct_ib_reg(struct mlx5_ib_dev *ibdev, char *vuid)
 	struct mlx5_data_direct_registration *reg;
 	struct mlx5_data_direct_dev *dev;

-	reg = kzalloc(sizeof(*reg), GFP_KERNEL);
+	reg = kzalloc_obj(*reg, GFP_KERNEL);
 	if (!reg)
 		return -ENOMEM;

@@ -160,7 +160,7 @@ static int mlx5_data_direct_probe(struct pci_dev *pdev, const struct pci_device_
 	struct mlx5_data_direct_dev *dev;
 	int err;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx5/devx.c b/drivers/infiniband/hw/mlx5/devx.c
index d31d7f3005c6..5e1cefeaa494 100644
--- a/drivers/infiniband/hw/mlx5/devx.c
+++ b/drivers/infiniband/hw/mlx5/devx.c
@@ -1950,7 +1950,7 @@ subscribe_event_xa_alloc(struct mlx5_devx_event_table *devx_event_table,

 	event = xa_load(&devx_event_table->event_xa, key_level1);
 	if (!event) {
-		event = kzalloc(sizeof(*event), GFP_KERNEL);
+		event = kzalloc_obj(*event, GFP_KERNEL);
 		if (!event)
 			return -ENOMEM;

@@ -1972,7 +1972,7 @@ subscribe_event_xa_alloc(struct mlx5_devx_event_table *devx_event_table,

 	obj_event = xa_load(&event->object_ids, key_level2);
 	if (!obj_event) {
-		obj_event = kzalloc(sizeof(*obj_event), GFP_KERNEL);
+		obj_event = kzalloc_obj(*obj_event, GFP_KERNEL);
 		if (!obj_event)
 			/* Level1 is valid for future use, no need to free */
 			return -ENOMEM;
@@ -2697,7 +2697,7 @@ void mlx5_ib_ufile_hw_cleanup(struct ib_uverbs_file *ufile)
 	int head = 0;
 	int tail = 0;

-	async_cmd = kcalloc(MAX_ASYNC_CMDS, sizeof(*async_cmd), GFP_KERNEL);
+	async_cmd = kzalloc_objs(*async_cmd, MAX_ASYNC_CMDS, GFP_KERNEL);
 	if (!async_cmd)
 		return;

diff --git a/drivers/infiniband/hw/mlx5/dm.c b/drivers/infiniband/hw/mlx5/dm.c
index 9ded2b7c1e31..db45ff9b64a8 100644
--- a/drivers/infiniband/hw/mlx5/dm.c
+++ b/drivers/infiniband/hw/mlx5/dm.c
@@ -285,7 +285,7 @@ static struct ib_dm *handle_alloc_dm_memic(struct ib_ucontext *ctx,
 	if (!dm_db || !MLX5_CAP_DEV_MEM(dm_db->dev, memic))
 		return ERR_PTR(-EOPNOTSUPP);

-	dm = kzalloc(sizeof(*dm), GFP_KERNEL);
+	dm = kzalloc_obj(*dm, GFP_KERNEL);
 	if (!dm)
 		return ERR_PTR(-ENOMEM);

@@ -382,7 +382,7 @@ static struct ib_dm *handle_alloc_dm_sw_icm(struct ib_ucontext *ctx,
 		return ERR_PTR(-EOPNOTSUPP);
 	}

-	dm = kzalloc(sizeof(*dm), GFP_KERNEL);
+	dm = kzalloc_obj(*dm, GFP_KERNEL);
 	if (!dm)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/mlx5/doorbell.c b/drivers/infiniband/hw/mlx5/doorbell.c
index e32111117a5e..277e16a2c714 100644
--- a/drivers/infiniband/hw/mlx5/doorbell.c
+++ b/drivers/infiniband/hw/mlx5/doorbell.c
@@ -58,7 +58,7 @@ int mlx5_ib_db_map_user(struct mlx5_ib_ucontext *context, unsigned long virt,
 		    (page->user_virt == (virt & PAGE_MASK)))
 			goto found;

-	page = kmalloc(sizeof(*page), GFP_KERNEL);
+	page = kmalloc_obj(*page, GFP_KERNEL);
 	if (!page) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/infiniband/hw/mlx5/fs.c b/drivers/infiniband/hw/mlx5/fs.c
index d17823ce7f38..3c23bf34b3ab 100644
--- a/drivers/infiniband/hw/mlx5/fs.c
+++ b/drivers/infiniband/hw/mlx5/fs.c
@@ -1021,7 +1021,7 @@ static struct mlx5_per_qp_opfc *get_per_qp_opfc(struct xarray *qpn_opfc_xa,
 	per_qp_opfc = xa_load(qpn_opfc_xa, qp_num);
 	if (per_qp_opfc)
 		return per_qp_opfc;
-	per_qp_opfc = kzalloc(sizeof(*per_qp_opfc), GFP_KERNEL);
+	per_qp_opfc = kzalloc_obj(*per_qp_opfc, GFP_KERNEL);

 	if (!per_qp_opfc)
 		return NULL;
@@ -1057,7 +1057,7 @@ static int add_op_fc_rules(struct mlx5_ib_dev *dev,

 	opfc->fc = fc_arr[type];

-	spec = kcalloc(MAX_OPFC_RULES, sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_objs(*spec, MAX_OPFC_RULES, GFP_KERNEL);
 	if (!spec) {
 		err = -ENOMEM;
 		goto null_fc;
@@ -1231,7 +1231,7 @@ int mlx5_ib_fs_add_op_fc(struct mlx5_ib_dev *dev, u32 port_num,
 	struct mlx5_ib_flow_prio *prio;
 	struct mlx5_flow_spec *spec;

-	spec = kcalloc(MAX_OPFC_RULES, sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_objs(*spec, MAX_OPFC_RULES, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -1532,8 +1532,8 @@ static struct mlx5_ib_flow_handler *_create_flow_rule(struct mlx5_ib_dev *dev,
 	if (dev->is_rep && is_egress)
 		return ERR_PTR(-EINVAL);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
-	handler = kzalloc(sizeof(*handler), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
+	handler = kzalloc_obj(*handler, GFP_KERNEL);
 	if (!handler || !spec) {
 		err = -ENOMEM;
 		goto free;
@@ -1792,7 +1792,7 @@ static struct ib_flow *mlx5_ib_create_flow(struct ib_qp *qp,
 		goto free_ucmd;
 	}

-	dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+	dst = kzalloc_obj(*dst, GFP_KERNEL);
 	if (!dst) {
 		err = -ENOMEM;
 		goto free_ucmd;
@@ -2060,8 +2060,8 @@ _create_raw_flow_rule(struct mlx5_ib_dev *dev,
 	struct mlx5_flow_table *ft = ft_prio->flow_table;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
-	handler = kzalloc(sizeof(*handler), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
+	handler = kzalloc_obj(*handler, GFP_KERNEL);
 	if (!handler || !spec) {
 		err = -ENOMEM;
 		goto free;
@@ -2153,7 +2153,7 @@ static struct mlx5_ib_flow_handler *raw_fs_rule_add(
 	if (fs_matcher->priority > MLX5_IB_FLOW_LAST_PRIO)
 		return ERR_PTR(-ENOMEM);

-	dst = kcalloc(2, sizeof(*dst), GFP_KERNEL);
+	dst = kzalloc_objs(*dst, 2, GFP_KERNEL);
 	if (!dst)
 		return ERR_PTR(-ENOMEM);

@@ -3080,7 +3080,7 @@ mlx5_ib_create_modify_header(struct mlx5_ib_dev *dev,
 	if (ret)
 		return ERR_PTR(-EINVAL);

-	maction = kzalloc(sizeof(*maction), GFP_KERNEL);
+	maction = kzalloc_obj(*maction, GFP_KERNEL);
 	if (!maction)
 		return ERR_PTR(-ENOMEM);

@@ -3479,23 +3479,23 @@ int mlx5_ib_fs_init(struct mlx5_ib_dev *dev)
 {
 	int i, j;

-	dev->flow_db = kzalloc(sizeof(*dev->flow_db), GFP_KERNEL);
+	dev->flow_db = kzalloc_obj(*dev->flow_db, GFP_KERNEL);

 	if (!dev->flow_db)
 		return -ENOMEM;

 	for (i = 0; i < MLX5_RDMA_TRANSPORT_BYPASS_PRIO; i++) {
 		dev->flow_db->rdma_transport_rx[i] =
-			kcalloc(dev->num_ports,
-				sizeof(struct mlx5_ib_flow_prio), GFP_KERNEL);
+			kzalloc_objs(struct mlx5_ib_flow_prio, dev->num_ports,
+				     GFP_KERNEL);
 		if (!dev->flow_db->rdma_transport_rx[i])
 			goto free_rdma_transport_rx;
 	}

 	for (j = 0; j < MLX5_RDMA_TRANSPORT_BYPASS_PRIO; j++) {
 		dev->flow_db->rdma_transport_tx[j] =
-			kcalloc(dev->num_ports,
-				sizeof(struct mlx5_ib_flow_prio), GFP_KERNEL);
+			kzalloc_objs(struct mlx5_ib_flow_prio, dev->num_ports,
+				     GFP_KERNEL);
 		if (!dev->flow_db->rdma_transport_tx[j])
 			goto free_rdma_transport_tx;
 	}
diff --git a/drivers/infiniband/hw/mlx5/gsi.c b/drivers/infiniband/hw/mlx5/gsi.c
index d5487834ed25..f572d75f6fd6 100644
--- a/drivers/infiniband/hw/mlx5/gsi.c
+++ b/drivers/infiniband/hw/mlx5/gsi.c
@@ -104,13 +104,13 @@ int mlx5_ib_create_gsi(struct ib_pd *pd, struct mlx5_ib_qp *mqp,
 	}

 	gsi = &mqp->gsi;
-	gsi->tx_qps = kcalloc(num_qps, sizeof(*gsi->tx_qps), GFP_KERNEL);
+	gsi->tx_qps = kzalloc_objs(*gsi->tx_qps, num_qps, GFP_KERNEL);
 	if (!gsi->tx_qps)
 		return -ENOMEM;

 	gsi->outstanding_wrs =
-		kcalloc(attr->cap.max_send_wr, sizeof(*gsi->outstanding_wrs),
-			GFP_KERNEL);
+		kzalloc_objs(*gsi->outstanding_wrs, attr->cap.max_send_wr,
+			     GFP_KERNEL);
 	if (!gsi->outstanding_wrs) {
 		ret = -ENOMEM;
 		goto err_free_tx;
diff --git a/drivers/infiniband/hw/mlx5/ib_rep.c b/drivers/infiniband/hw/mlx5/ib_rep.c
index bbecca405171..72c870f4f54b 100644
--- a/drivers/infiniband/hw/mlx5/ib_rep.c
+++ b/drivers/infiniband/hw/mlx5/ib_rep.c
@@ -158,8 +158,7 @@ mlx5_ib_vport_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
 		goto release_transport;
 	}

-	ibdev->port = kcalloc(num_ports, sizeof(*ibdev->port),
-			      GFP_KERNEL);
+	ibdev->port = kzalloc_objs(*ibdev->port, num_ports, GFP_KERNEL);
 	if (!ibdev->port) {
 		ret = -ENOMEM;
 		goto fail_port;
diff --git a/drivers/infiniband/hw/mlx5/ib_virt.c b/drivers/infiniband/hw/mlx5/ib_virt.c
index afeb5e53254f..beb99db3f76f 100644
--- a/drivers/infiniband/hw/mlx5/ib_virt.c
+++ b/drivers/infiniband/hw/mlx5/ib_virt.c
@@ -55,7 +55,7 @@ int mlx5_ib_get_vf_config(struct ib_device *device, int vf, u32 port,
 	struct mlx5_hca_vport_context *rep;
 	int err;

-	rep = kzalloc(sizeof(*rep), GFP_KERNEL);
+	rep = kzalloc_obj(*rep, GFP_KERNEL);
 	if (!rep)
 		return -ENOMEM;

@@ -98,7 +98,7 @@ int mlx5_ib_set_vf_link_state(struct ib_device *device, int vf,
 	struct mlx5_vf_context *vfs_ctx = mdev->priv.sriov.vfs_ctx;
 	int err;

-	in = kzalloc(sizeof(*in), GFP_KERNEL);
+	in = kzalloc_obj(*in, GFP_KERNEL);
 	if (!in)
 		return -ENOMEM;

@@ -157,7 +157,7 @@ static int set_vf_node_guid(struct ib_device *device, int vf, u32 port,
 	struct mlx5_vf_context *vfs_ctx = mdev->priv.sriov.vfs_ctx;
 	int err;

-	in = kzalloc(sizeof(*in), GFP_KERNEL);
+	in = kzalloc_obj(*in, GFP_KERNEL);
 	if (!in)
 		return -ENOMEM;

@@ -181,7 +181,7 @@ static int set_vf_port_guid(struct ib_device *device, int vf, u32 port,
 	struct mlx5_vf_context *vfs_ctx = mdev->priv.sriov.vfs_ctx;
 	int err;

-	in = kzalloc(sizeof(*in), GFP_KERNEL);
+	in = kzalloc_obj(*in, GFP_KERNEL);
 	if (!in)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx5/macsec.c b/drivers/infiniband/hw/mlx5/macsec.c
index 3c56eb5eddf3..f93ce56d7515 100644
--- a/drivers/infiniband/hw/mlx5/macsec.c
+++ b/drivers/infiniband/hw/mlx5/macsec.c
@@ -52,7 +52,7 @@ static struct mlx5_macsec_device *get_macsec_device(void *macdev,
 	if (macsec_device)
 		return macsec_device;

-	macsec_device = kzalloc(sizeof(*macsec_device), GFP_KERNEL);
+	macsec_device = kzalloc_obj(*macsec_device, GFP_KERNEL);
 	if (!macsec_device)
 		return NULL;

@@ -82,7 +82,7 @@ static void mlx5_macsec_save_roce_gid(struct mlx5_macsec_device *macsec_device,
 {
 	struct mlx5_roce_gids *roce_gids;

-	roce_gids = kzalloc(sizeof(*roce_gids), GFP_KERNEL);
+	roce_gids = kzalloc_obj(*roce_gids, GFP_KERNEL);
 	if (!roce_gids)
 		return;

@@ -180,9 +180,8 @@ int mlx5r_macsec_init_gids_and_devlist(struct mlx5_ib_dev *dev)

 	max_gids = MLX5_CAP_ROCE(dev->mdev, roce_address_table_size);
 	for (i = 0; i < dev->num_ports; i++) {
-		dev->port[i].reserved_gids = kcalloc(max_gids,
-						     sizeof(*dev->port[i].reserved_gids),
-						     GFP_KERNEL);
+		dev->port[i].reserved_gids = kzalloc_objs(*dev->port[i].reserved_gids,
+							  max_gids, GFP_KERNEL);
 		if (!dev->port[i].reserved_gids)
 			goto err;

diff --git a/drivers/infiniband/hw/mlx5/mad.c b/drivers/infiniband/hw/mlx5/mad.c
index 2453ae4384a7..41dd186deffd 100644
--- a/drivers/infiniband/hw/mlx5/mad.c
+++ b/drivers/infiniband/hw/mlx5/mad.c
@@ -367,8 +367,8 @@ int mlx5_query_ext_port_caps(struct mlx5_ib_dev *dev, unsigned int port)
 	int err = -ENOMEM;
 	u16 packet_error;

-	in_mad  = kzalloc(sizeof(*in_mad), GFP_KERNEL);
-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -395,7 +395,7 @@ static int mlx5_query_mad_ifc_smp_attr_node_info(struct ib_device *ibdev,
 	struct ib_smp *in_mad;
 	int err;

-	in_mad = kzalloc(sizeof(*in_mad), GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
 	if (!in_mad)
 		return -ENOMEM;

@@ -415,7 +415,7 @@ int mlx5_query_mad_ifc_system_image_guid(struct ib_device *ibdev,
 	struct ib_smp *out_mad;
 	int err;

-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!out_mad)
 		return -ENOMEM;

@@ -437,7 +437,7 @@ int mlx5_query_mad_ifc_max_pkeys(struct ib_device *ibdev,
 	struct ib_smp *out_mad;
 	int err;

-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!out_mad)
 		return -ENOMEM;

@@ -459,7 +459,7 @@ int mlx5_query_mad_ifc_vendor_id(struct ib_device *ibdev,
 	struct ib_smp *out_mad;
 	int err;

-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!out_mad)
 		return -ENOMEM;

@@ -481,8 +481,8 @@ int mlx5_query_mad_ifc_node_desc(struct mlx5_ib_dev *dev, char *node_desc)
 	struct ib_smp *out_mad;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof(*in_mad), GFP_KERNEL);
-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -506,8 +506,8 @@ int mlx5_query_mad_ifc_node_guid(struct mlx5_ib_dev *dev, __be64 *node_guid)
 	struct ib_smp *out_mad;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof(*in_mad), GFP_KERNEL);
-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -532,8 +532,8 @@ int mlx5_query_mad_ifc_pkey(struct ib_device *ibdev, u32 port, u16 index,
 	struct ib_smp *out_mad;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof(*in_mad), GFP_KERNEL);
-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -561,8 +561,8 @@ int mlx5_query_mad_ifc_gids(struct ib_device *ibdev, u32 port, int index,
 	struct ib_smp *out_mad;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof(*in_mad), GFP_KERNEL);
-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -604,8 +604,8 @@ int mlx5_query_mad_ifc_port(struct ib_device *ibdev, u32 port,
 	int ext_active_speed;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof(*in_mad), GFP_KERNEL);
-	out_mad = kmalloc(sizeof(*out_mad), GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 5e06177ace26..a5425f6d5527 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -1460,7 +1460,7 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u32 port,
 	int err;
 	u16 ib_link_width_oper;

-	rep = kzalloc(sizeof(*rep), GFP_KERNEL);
+	rep = kzalloc_obj(*rep, GFP_KERNEL);
 	if (!rep) {
 		err = -ENOMEM;
 		goto out;
@@ -3121,7 +3121,7 @@ static int mlx5_ib_event(struct notifier_block *nb,
 {
 	struct mlx5_ib_event_work *work;

-	work = kmalloc(sizeof(*work), GFP_ATOMIC);
+	work = kmalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return NOTIFY_DONE;

@@ -3141,7 +3141,7 @@ static int mlx5_ib_event_slave_port(struct notifier_block *nb,
 {
 	struct mlx5_ib_event_work *work;

-	work = kmalloc(sizeof(*work), GFP_ATOMIC);
+	work = kmalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return NOTIFY_DONE;

@@ -3188,7 +3188,7 @@ static int mlx5_ib_sys_error_event(struct notifier_block *nb,
 	if (event != MLX5_DEV_EVENT_SYS_ERROR)
 		return NOTIFY_DONE;

-	work = kmalloc(sizeof(*work), GFP_ATOMIC);
+	work = kmalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return NOTIFY_DONE;

@@ -4042,7 +4042,7 @@ static int mlx5_ib_init_multiport_master(struct mlx5_ib_dev *dev)

 		/* build a stub multiport info struct for the native port. */
 		if (i == port_num) {
-			mpi = kzalloc(sizeof(*mpi), GFP_KERNEL);
+			mpi = kzalloc_obj(*mpi, GFP_KERNEL);
 			if (!mpi) {
 				mutex_unlock(&mlx5_ib_multiport_mutex);
 				mlx5_nic_vport_disable_roce(dev->mdev);
@@ -4148,7 +4148,7 @@ alloc_var_entry(struct mlx5_ib_ucontext *c)
 	int err;

 	var_table = &to_mdev(c->ibucontext.device)->var_table;
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

@@ -4269,7 +4269,7 @@ alloc_uar_entry(struct mlx5_ib_ucontext *c,
 	u32 uar_index;
 	int err;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

@@ -5204,8 +5204,9 @@ static struct ib_device *mlx5_ib_add_sub_dev(struct ib_device *parent,
 	if (!mplane)
 		return ERR_PTR(-ENOMEM);

-	mplane->port = kcalloc(mparent->num_plane * mparent->num_ports,
-			       sizeof(*mplane->port), GFP_KERNEL);
+	mplane->port = kzalloc_objs(*mplane->port,
+				    mparent->num_plane * mparent->num_ports,
+				    GFP_KERNEL);
 	if (!mplane->port) {
 		ret = -ENOMEM;
 		goto fail_kcalloc;
@@ -5249,7 +5250,7 @@ static int mlx5r_mp_probe(struct auxiliary_device *adev,
 	bool bound = false;
 	int err;

-	mpi = kzalloc(sizeof(*mpi), GFP_KERNEL);
+	mpi = kzalloc_obj(*mpi, GFP_KERNEL);
 	if (!mpi)
 		return -ENOMEM;

@@ -5325,8 +5326,7 @@ static int mlx5r_probe(struct auxiliary_device *adev,
 			goto fail;
 	}

-	dev->port = kcalloc(num_ports, sizeof(*dev->port),
-			     GFP_KERNEL);
+	dev->port = kzalloc_objs(*dev->port, num_ports, GFP_KERNEL);
 	if (!dev->port) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
index a7b37e3df072..0444be024ff9 100644
--- a/drivers/infiniband/hw/mlx5/mr.c
+++ b/drivers/infiniband/hw/mlx5/mr.c
@@ -156,7 +156,7 @@ static int push_mkey_locked(struct mlx5_cache_ent *ent, u32 mkey)
 	lockdep_assert_held(&ent->mkeys_queue.lock);
 	if (ent->mkeys_queue.ci >=
 	    ent->mkeys_queue.num_pages * NUM_MKEYS_PER_PAGE) {
-		page = kzalloc(sizeof(*page), GFP_ATOMIC);
+		page = kzalloc_obj(*page, GFP_ATOMIC);
 		if (!page)
 			return -ENOMEM;
 		ent->mkeys_queue.num_pages++;
@@ -276,8 +276,8 @@ static int add_keys(struct mlx5_cache_ent *ent, unsigned int num)
 	int i;

 	for (i = 0; i < num; i++) {
-		async_create = kzalloc(sizeof(struct mlx5r_async_create_mkey),
-				       GFP_KERNEL);
+		async_create = kzalloc_obj(struct mlx5r_async_create_mkey,
+					   GFP_KERNEL);
 		if (!async_create)
 			return -ENOMEM;
 		mkc = MLX5_ADDR_OF(create_mkey_in, async_create->in,
@@ -742,7 +742,7 @@ static struct mlx5_ib_mr *_mlx5_mr_cache_alloc(struct mlx5_ib_dev *dev,
 	struct mlx5_ib_mr *mr;
 	int err;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -867,7 +867,7 @@ static int mlx5r_mkeys_init(struct mlx5_cache_ent *ent)
 {
 	struct mlx5_mkeys_page *page;

-	page = kzalloc(sizeof(*page), GFP_KERNEL);
+	page = kzalloc_obj(*page, GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&ent->mkeys_queue.pages_list);
@@ -897,7 +897,7 @@ mlx5r_cache_create_ent_locked(struct mlx5_ib_dev *dev,
 	int order;
 	int ret;

-	ent = kzalloc(sizeof(*ent), GFP_KERNEL);
+	ent = kzalloc_obj(*ent, GFP_KERNEL);
 	if (!ent)
 		return ERR_PTR(-ENOMEM);

@@ -1059,7 +1059,7 @@ struct ib_mr *mlx5_ib_get_dma_mr(struct ib_pd *pd, int acc)
 	u32 *in;
 	int err;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -1207,7 +1207,7 @@ reg_create_crossing_vhca_mr(struct ib_pd *pd, u64 iova, u64 length, int access_f
 	if (!MLX5_CAP_GEN(dev->mdev, crossing_vhca_mkey))
 		return ERR_PTR(-EOPNOTSUPP);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -1272,7 +1272,7 @@ static struct mlx5_ib_mr *reg_create(struct ib_pd *pd, struct ib_umem *umem,

 	if (!page_size)
 		return ERR_PTR(-EINVAL);
-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -1370,7 +1370,7 @@ static struct ib_mr *mlx5_ib_get_dm_mr(struct ib_pd *pd, u64 start_addr,
 	u32 *in;
 	int err;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -2343,7 +2343,7 @@ static struct mlx5_ib_mr *mlx5_ib_alloc_pi_mr(struct ib_pd *pd,
 	u32 *in;
 	int err;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -2400,7 +2400,7 @@ static int mlx5_alloc_integrity_descs(struct ib_pd *pd, struct mlx5_ib_mr *mr,
 	void *mkc;
 	int err;

-	mr->sig = kzalloc(sizeof(*mr->sig), GFP_KERNEL);
+	mr->sig = kzalloc_obj(*mr->sig, GFP_KERNEL);
 	if (!mr->sig)
 		return -ENOMEM;

@@ -2480,7 +2480,7 @@ static struct ib_mr *__mlx5_ib_alloc_mr(struct ib_pd *pd,
 	u32 *in;
 	int err;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c
index e71ee3d52eb0..ed73d3e82ea5 100644
--- a/drivers/infiniband/hw/mlx5/odp.c
+++ b/drivers/infiniband/hw/mlx5/odp.c
@@ -1092,7 +1092,7 @@ static int pagefault_single_data_segment(struct mlx5_ib_dev *dev,
 				continue;
 			}

-			frame = kzalloc(sizeof(*frame), GFP_KERNEL);
+			frame = kzalloc_obj(*frame, GFP_KERNEL);
 			if (!frame) {
 				ret = -ENOMEM;
 				goto end;
@@ -2097,7 +2097,7 @@ int mlx5_ib_advise_mr_prefetch(struct ib_pd *pd,
 		return mlx5_ib_prefetch_sg_list(pd, advice, pf_flags, sg_list,
 						num_sge);

-	work = kvzalloc(struct_size(work, frags, num_sge), GFP_KERNEL);
+	work = kvzalloc_flex(*work, frags, num_sge, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
index 0324909e3151..762a2dfc4455 100644
--- a/drivers/infiniband/hw/mlx5/qp.c
+++ b/drivers/infiniband/hw/mlx5/qp.c
@@ -416,7 +416,7 @@ static void mlx5_ib_qp_event(struct mlx5_core_qp *qp, int type)
 	if (!ibqp->event_handler)
 		goto out_no_handler;

-	qpe_work = kzalloc(sizeof(*qpe_work), GFP_ATOMIC);
+	qpe_work = kzalloc_obj(*qpe_work, GFP_ATOMIC);
 	if (!qpe_work)
 		goto out_no_handler;

@@ -1185,8 +1185,8 @@ static int _create_kernel_qp(struct mlx5_ib_dev *dev,
 					sizeof(*qp->sq.wr_data), GFP_KERNEL);
 	qp->rq.wrid = kvmalloc_array(qp->rq.wqe_cnt,
 				     sizeof(*qp->rq.wrid), GFP_KERNEL);
-	qp->sq.w_list = kvmalloc_array(qp->sq.wqe_cnt,
-				       sizeof(*qp->sq.w_list), GFP_KERNEL);
+	qp->sq.w_list = kvmalloc_objs(*qp->sq.w_list, qp->sq.wqe_cnt,
+				      GFP_KERNEL);
 	qp->sq.wqe_head = kvmalloc_array(qp->sq.wqe_cnt,
 					 sizeof(*qp->sq.wqe_head), GFP_KERNEL);

@@ -5488,7 +5488,7 @@ struct ib_wq *mlx5_ib_create_wq(struct ib_pd *pd,
 	dev = to_mdev(pd->device);
 	switch (init_attr->wq_type) {
 	case IB_WQT_RQ:
-		rwq = kzalloc(sizeof(*rwq), GFP_KERNEL);
+		rwq = kzalloc_obj(*rwq, GFP_KERNEL);
 		if (!rwq)
 			return ERR_PTR(-ENOMEM);
 		err = prepare_user_rq(pd, init_attr, udata, rwq);
diff --git a/drivers/infiniband/hw/mlx5/srq.c b/drivers/infiniband/hw/mlx5/srq.c
index bcb6b324af50..6e79e7a1015e 100644
--- a/drivers/infiniband/hw/mlx5/srq.c
+++ b/drivers/infiniband/hw/mlx5/srq.c
@@ -358,7 +358,7 @@ int mlx5_ib_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *srq_attr)
 	int ret;
 	struct mlx5_srq_attr *out;

-	out = kzalloc(sizeof(*out), GFP_KERNEL);
+	out = kzalloc_obj(*out, GFP_KERNEL);
 	if (!out)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mthca/mthca_allocator.c b/drivers/infiniband/hw/mthca/mthca_allocator.c
index 9f0f79d02d3c..2532ea4e1278 100644
--- a/drivers/infiniband/hw/mthca/mthca_allocator.c
+++ b/drivers/infiniband/hw/mthca/mthca_allocator.c
@@ -157,8 +157,7 @@ int mthca_array_init(struct mthca_array *array, int nent)
 	int npage = (nent * sizeof (void *) + PAGE_SIZE - 1) / PAGE_SIZE;
 	int i;

-	array->page_list = kmalloc_array(npage, sizeof(*array->page_list),
-					 GFP_KERNEL);
+	array->page_list = kmalloc_objs(*array->page_list, npage, GFP_KERNEL);
 	if (!array->page_list)
 		return -ENOMEM;

@@ -231,9 +230,8 @@ int mthca_buf_alloc(struct mthca_dev *dev, int size, int max_direct,
 		if (!dma_list)
 			return -ENOMEM;

-		buf->page_list = kmalloc_array(npages,
-					       sizeof(*buf->page_list),
-					       GFP_KERNEL);
+		buf->page_list = kmalloc_objs(*buf->page_list, npages,
+					      GFP_KERNEL);
 		if (!buf->page_list)
 			goto err_out;

diff --git a/drivers/infiniband/hw/mthca/mthca_av.c b/drivers/infiniband/hw/mthca/mthca_av.c
index 3df1f5ff7932..83a7ba41fa04 100644
--- a/drivers/infiniband/hw/mthca/mthca_av.c
+++ b/drivers/infiniband/hw/mthca/mthca_av.c
@@ -161,7 +161,7 @@ int mthca_create_ah(struct mthca_dev *dev,
 	ah->type = MTHCA_AH_PCI_POOL;

 	if (mthca_is_memfree(dev)) {
-		ah->av   = kmalloc(sizeof *ah->av, GFP_ATOMIC);
+		ah->av = kmalloc_obj(*ah->av, GFP_ATOMIC);
 		if (!ah->av)
 			return -ENOMEM;

@@ -175,7 +175,7 @@ int mthca_create_ah(struct mthca_dev *dev,
 		if (index == -1)
 			goto on_hca_fail;

-		av = kmalloc(sizeof *av, GFP_ATOMIC);
+		av = kmalloc_obj(*av, GFP_ATOMIC);
 		if (!av)
 			goto on_hca_fail;

diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c
index 8fe0cef7e2be..1c51814d5354 100644
--- a/drivers/infiniband/hw/mthca/mthca_cmd.c
+++ b/drivers/infiniband/hw/mthca/mthca_cmd.c
@@ -559,9 +559,8 @@ int mthca_cmd_use_events(struct mthca_dev *dev)
 {
 	int i;

-	dev->cmd.context = kmalloc_array(dev->cmd.max_cmds,
-					 sizeof(struct mthca_cmd_context),
-					 GFP_KERNEL);
+	dev->cmd.context = kmalloc_objs(struct mthca_cmd_context,
+					dev->cmd.max_cmds, GFP_KERNEL);
 	if (!dev->cmd.context)
 		return -ENOMEM;

@@ -611,7 +610,7 @@ struct mthca_mailbox *mthca_alloc_mailbox(struct mthca_dev *dev,
 {
 	struct mthca_mailbox *mailbox;

-	mailbox = kmalloc(sizeof *mailbox, gfp_mask);
+	mailbox = kmalloc_obj(*mailbox, gfp_mask);
 	if (!mailbox)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/mthca/mthca_eq.c b/drivers/infiniband/hw/mthca/mthca_eq.c
index 97287c544da8..5f109a116390 100644
--- a/drivers/infiniband/hw/mthca/mthca_eq.c
+++ b/drivers/infiniband/hw/mthca/mthca_eq.c
@@ -479,8 +479,7 @@ static int mthca_create_eq(struct mthca_dev *dev,
 	eq->nent = roundup_pow_of_two(max(nent, 2));
 	npages = ALIGN(eq->nent * MTHCA_EQ_ENTRY_SIZE, PAGE_SIZE) / PAGE_SIZE;

-	eq->page_list = kmalloc_array(npages, sizeof(*eq->page_list),
-				      GFP_KERNEL);
+	eq->page_list = kmalloc_objs(*eq->page_list, npages, GFP_KERNEL);
 	if (!eq->page_list)
 		goto err_out;

diff --git a/drivers/infiniband/hw/mthca/mthca_mad.c b/drivers/infiniband/hw/mthca/mthca_mad.c
index 04252700790e..8df1bdd1a1bf 100644
--- a/drivers/infiniband/hw/mthca/mthca_mad.c
+++ b/drivers/infiniband/hw/mthca/mthca_mad.c
@@ -52,7 +52,7 @@ static int mthca_update_rate(struct mthca_dev *dev, u8 port_num)
 	struct ib_port_attr *tprops = NULL;
 	int                  ret;

-	tprops = kmalloc(sizeof *tprops, GFP_KERNEL);
+	tprops = kmalloc_obj(*tprops, GFP_KERNEL);
 	if (!tprops)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniband/hw/mthca/mthca_memfree.c
index f2734a5c5f26..e59df6ed0f21 100644
--- a/drivers/infiniband/hw/mthca/mthca_memfree.c
+++ b/drivers/infiniband/hw/mthca/mthca_memfree.c
@@ -145,7 +145,7 @@ struct mthca_icm *mthca_alloc_icm(struct mthca_dev *dev, int npages,
 	/* We use sg_set_buf for coherent allocs, which assumes low memory */
 	BUG_ON(coherent && (gfp_mask & __GFP_HIGHMEM));

-	icm = kmalloc(sizeof *icm, gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN));
+	icm = kmalloc_obj(*icm, gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN));
 	if (!icm)
 		return icm;

@@ -156,8 +156,8 @@ struct mthca_icm *mthca_alloc_icm(struct mthca_dev *dev, int npages,

 	while (npages > 0) {
 		if (!chunk) {
-			chunk = kmalloc(sizeof *chunk,
-					gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN));
+			chunk = kmalloc_obj(*chunk,
+					    gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN));
 			if (!chunk)
 				goto fail;

@@ -367,7 +367,7 @@ struct mthca_icm_table *mthca_alloc_icm_table(struct mthca_dev *dev,
 	obj_per_chunk = MTHCA_TABLE_CHUNK_SIZE / obj_size;
 	num_icm = DIV_ROUND_UP(nobj, obj_per_chunk);

-	table = kmalloc(struct_size(table, icm, num_icm), GFP_KERNEL);
+	table = kmalloc_flex(*table, icm, num_icm, GFP_KERNEL);
 	if (!table)
 		return NULL;

@@ -532,7 +532,7 @@ struct mthca_user_db_table *mthca_init_user_db_tab(struct mthca_dev *dev)
 		return NULL;

 	npages = dev->uar_table.uarc_size / MTHCA_ICM_PAGE_SIZE;
-	db_tab = kmalloc(struct_size(db_tab, page, npages), GFP_KERNEL);
+	db_tab = kmalloc_flex(*db_tab, page, npages, GFP_KERNEL);
 	if (!db_tab)
 		return ERR_PTR(-ENOMEM);

@@ -707,7 +707,7 @@ int mthca_init_db_tab(struct mthca_dev *dev)
 	if (!mthca_is_memfree(dev))
 		return 0;

-	dev->db_tab = kmalloc(sizeof *dev->db_tab, GFP_KERNEL);
+	dev->db_tab = kmalloc_obj(*dev->db_tab, GFP_KERNEL);
 	if (!dev->db_tab)
 		return -ENOMEM;

@@ -717,9 +717,8 @@ int mthca_init_db_tab(struct mthca_dev *dev)
 	dev->db_tab->max_group1 = 0;
 	dev->db_tab->min_group2 = dev->db_tab->npages - 1;

-	dev->db_tab->page = kmalloc_array(dev->db_tab->npages,
-					  sizeof(*dev->db_tab->page),
-					  GFP_KERNEL);
+	dev->db_tab->page = kmalloc_objs(*dev->db_tab->page,
+					 dev->db_tab->npages, GFP_KERNEL);
 	if (!dev->db_tab->page) {
 		kfree(dev->db_tab);
 		return -ENOMEM;
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
index dacb8ceeebe0..eae6c92e7515 100644
--- a/drivers/infiniband/hw/mthca/mthca_mr.c
+++ b/drivers/infiniband/hw/mthca/mthca_mr.c
@@ -146,8 +146,8 @@ static int mthca_buddy_init(struct mthca_buddy *buddy, int max_order)

 	buddy->bits = kcalloc(buddy->max_order + 1, sizeof(*buddy->bits),
 			      GFP_KERNEL);
-	buddy->num_free = kcalloc((buddy->max_order + 1), sizeof *buddy->num_free,
-				  GFP_KERNEL);
+	buddy->num_free = kzalloc_objs(*buddy->num_free, (buddy->max_order + 1),
+				       GFP_KERNEL);
 	if (!buddy->bits || !buddy->num_free)
 		goto err_out;

@@ -212,7 +212,7 @@ static struct mthca_mtt *__mthca_alloc_mtt(struct mthca_dev *dev, int size,
 	if (size <= 0)
 		return ERR_PTR(-EINVAL);

-	mtt = kmalloc(sizeof *mtt, GFP_KERNEL);
+	mtt = kmalloc_obj(*mtt, GFP_KERNEL);
 	if (!mtt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/mthca/mthca_profile.c b/drivers/infiniband/hw/mthca/mthca_profile.c
index 69af65f1b332..230c073dd11f 100644
--- a/drivers/infiniband/hw/mthca/mthca_profile.c
+++ b/drivers/infiniband/hw/mthca/mthca_profile.c
@@ -77,7 +77,7 @@ s64 mthca_make_profile(struct mthca_dev *dev,
 	struct mthca_resource *profile;
 	int i, j;

-	profile = kcalloc(MTHCA_RES_NUM, sizeof(*profile), GFP_KERNEL);
+	profile = kzalloc_objs(*profile, MTHCA_RES_NUM, GFP_KERNEL);
 	if (!profile)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
index dd572d76866c..88ce64eb4704 100644
--- a/drivers/infiniband/hw/mthca/mthca_provider.c
+++ b/drivers/infiniband/hw/mthca/mthca_provider.c
@@ -61,8 +61,8 @@ static int mthca_query_device(struct ib_device *ibdev, struct ib_device_attr *pr
 	if (uhw->inlen || uhw->outlen)
 		return -EINVAL;

-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -125,8 +125,8 @@ static int mthca_query_port(struct ib_device *ibdev,
 	struct ib_smp *out_mad;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -221,8 +221,8 @@ static int mthca_query_pkey(struct ib_device *ibdev,
 	struct ib_smp *out_mad;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -250,8 +250,8 @@ static int mthca_query_gid(struct ib_device *ibdev, u32 port,
 	struct ib_smp *out_mad;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

@@ -516,7 +516,7 @@ static int mthca_create_qp(struct ib_qp *ibqp,
 	case IB_QPT_SMI:
 	case IB_QPT_GSI:
 	{
-		qp->sqp = kzalloc(sizeof(struct mthca_sqp), GFP_KERNEL);
+		qp->sqp = kzalloc_obj(struct mthca_sqp, GFP_KERNEL);
 		if (!qp->sqp)
 			return -ENOMEM;

@@ -660,7 +660,7 @@ static int mthca_alloc_resize_buf(struct mthca_dev *dev, struct mthca_cq *cq,
 		goto unlock;
 	}

-	cq->resize_buf = kmalloc(sizeof *cq->resize_buf, GFP_ATOMIC);
+	cq->resize_buf = kmalloc_obj(*cq->resize_buf, GFP_ATOMIC);
 	if (!cq->resize_buf) {
 		ret = -ENOMEM;
 		goto unlock;
@@ -806,7 +806,7 @@ static struct ib_mr *mthca_get_dma_mr(struct ib_pd *pd, int acc)
 	struct mthca_mr *mr;
 	int err;

-	mr = kmalloc(sizeof *mr, GFP_KERNEL);
+	mr = kmalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -853,7 +853,7 @@ static struct ib_mr *mthca_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 	} else if (ib_copy_from_udata(&ucmd, udata, sizeof ucmd))
 		return ERR_PTR(-EFAULT);

-	mr = kmalloc(sizeof *mr, GFP_KERNEL);
+	mr = kmalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -998,8 +998,8 @@ static int mthca_init_node_data(struct mthca_dev *dev)
 	struct ib_smp *out_mad;
 	int err = -ENOMEM;

-	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
-	out_mad = kmalloc(sizeof *out_mad, GFP_KERNEL);
+	in_mad = kzalloc_obj(*in_mad, GFP_KERNEL);
+	out_mad = kmalloc_obj(*out_mad, GFP_KERNEL);
 	if (!in_mad || !out_mad)
 		goto out;

diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
index 56f06c68f31a..c6a55323408a 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
@@ -355,7 +355,7 @@ static void *ocrdma_init_emb_mqe(u8 opcode, u32 cmd_len)
 {
 	struct ocrdma_mqe *mqe;

-	mqe = kzalloc(sizeof(struct ocrdma_mqe), GFP_KERNEL);
+	mqe = kzalloc_obj(struct ocrdma_mqe, GFP_KERNEL);
 	if (!mqe)
 		return NULL;
 	mqe->hdr.spcl_sge_cnt_emb |=
@@ -1289,7 +1289,7 @@ int ocrdma_mbx_rdma_stats(struct ocrdma_dev *dev, bool reset)
 	struct ocrdma_rdma_stats_resp *old_stats;
 	int status;

-	old_stats = kmalloc(sizeof(*old_stats), GFP_KERNEL);
+	old_stats = kmalloc_obj(*old_stats, GFP_KERNEL);
 	if (old_stats == NULL)
 		return -ENOMEM;

@@ -1332,7 +1332,7 @@ static int ocrdma_mbx_get_ctrl_attribs(struct ocrdma_dev *dev)
 	struct ocrdma_get_ctrl_attribs_rsp *ctrl_attr_rsp;
 	struct mgmt_hba_attribs *hba_attribs;

-	mqe = kzalloc(sizeof(struct ocrdma_mqe), GFP_KERNEL);
+	mqe = kzalloc_obj(struct ocrdma_mqe, GFP_KERNEL);
 	if (!mqe)
 		return status;

@@ -1592,8 +1592,7 @@ void ocrdma_alloc_pd_pool(struct ocrdma_dev *dev)
 {
 	int status;

-	dev->pd_mgr = kzalloc(sizeof(struct ocrdma_pd_resource_mgr),
-			      GFP_KERNEL);
+	dev->pd_mgr = kzalloc_obj(struct ocrdma_pd_resource_mgr, GFP_KERNEL);
 	if (!dev->pd_mgr)
 		return;

@@ -3082,7 +3081,7 @@ static int ocrdma_create_eqs(struct ocrdma_dev *dev)
 	if (!num_eq)
 		return -EINVAL;

-	dev->eq_tbl = kcalloc(num_eq, sizeof(struct ocrdma_eq), GFP_KERNEL);
+	dev->eq_tbl = kzalloc_objs(struct ocrdma_eq, num_eq, GFP_KERNEL);
 	if (!dev->eq_tbl)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
index 5d4b3bc16493..16e3e0ff97b8 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
@@ -219,15 +219,14 @@ static int ocrdma_register_device(struct ocrdma_dev *dev)
 static int ocrdma_alloc_resources(struct ocrdma_dev *dev)
 {
 	mutex_init(&dev->dev_lock);
-	dev->cq_tbl = kcalloc(OCRDMA_MAX_CQ, sizeof(struct ocrdma_cq *),
-			      GFP_KERNEL);
+	dev->cq_tbl = kzalloc_objs(struct ocrdma_cq *, OCRDMA_MAX_CQ,
+				   GFP_KERNEL);
 	if (!dev->cq_tbl)
 		goto alloc_err;

 	if (dev->attr.max_qp) {
-		dev->qp_tbl = kcalloc(OCRDMA_MAX_QP,
-				      sizeof(struct ocrdma_qp *),
-				      GFP_KERNEL);
+		dev->qp_tbl = kzalloc_objs(struct ocrdma_qp *, OCRDMA_MAX_QP,
+					   GFP_KERNEL);
 		if (!dev->qp_tbl)
 			goto alloc_err;
 	}
@@ -271,7 +270,7 @@ static struct ocrdma_dev *ocrdma_add(struct be_dev_info *dev_info)
 		return NULL;
 	}

-	dev->mbx_cmd = kzalloc(sizeof(struct ocrdma_mqe_emb_cmd), GFP_KERNEL);
+	dev->mbx_cmd = kzalloc_obj(struct ocrdma_mqe_emb_cmd, GFP_KERNEL);
 	if (!dev->mbx_cmd)
 		goto init_err;

diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
index 46d911fd38de..e9840337e694 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
@@ -195,7 +195,7 @@ static int ocrdma_add_mmap(struct ocrdma_ucontext *uctx, u64 phy_addr,
 {
 	struct ocrdma_mm *mm;

-	mm = kzalloc(sizeof(*mm), GFP_KERNEL);
+	mm = kzalloc_obj(*mm, GFP_KERNEL);
 	if (mm == NULL)
 		return -ENOMEM;
 	mm->key.phy_addr = phy_addr;
@@ -727,7 +727,7 @@ struct ib_mr *ocrdma_get_dma_mr(struct ib_pd *ibpd, int acc)
 		return ERR_PTR(-EINVAL);
 	}

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -794,8 +794,8 @@ static int ocrdma_build_pbl_tbl(struct ocrdma_dev *dev, struct ocrdma_hw_mr *mr)
 	void *va;
 	dma_addr_t pa;

-	mr->pbl_table = kcalloc(mr->num_pbls, sizeof(struct ocrdma_pbl),
-				GFP_KERNEL);
+	mr->pbl_table = kzalloc_objs(struct ocrdma_pbl, mr->num_pbls,
+				     GFP_KERNEL);

 	if (!mr->pbl_table)
 		return -ENOMEM;
@@ -863,7 +863,7 @@ struct ib_mr *ocrdma_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 len,
 	if (acc & IB_ACCESS_REMOTE_WRITE && !(acc & IB_ACCESS_LOCAL_WRITE))
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(status);
 	mr->umem = ib_umem_get(ibpd->device, start, len, acc);
@@ -1255,8 +1255,7 @@ static void ocrdma_set_qp_db(struct ocrdma_dev *dev, struct ocrdma_qp *qp,
 static int ocrdma_alloc_wr_id_tbl(struct ocrdma_qp *qp)
 {
 	qp->wqe_wr_id_tbl =
-	    kcalloc(qp->sq.max_cnt, sizeof(*(qp->wqe_wr_id_tbl)),
-		    GFP_KERNEL);
+	    kzalloc_objs(*(qp->wqe_wr_id_tbl), qp->sq.max_cnt, GFP_KERNEL);
 	if (qp->wqe_wr_id_tbl == NULL)
 		return -ENOMEM;
 	qp->rqe_wr_id_tbl =
@@ -2911,7 +2910,7 @@ struct ib_mr *ocrdma_alloc_mr(struct ib_pd *ibpd, enum ib_mr_type mr_type,
 	if (max_num_sg > dev->attr.max_pages_per_frmr)
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/qedr/main.c b/drivers/infiniband/hw/qedr/main.c
index ecdfeff3d44f..8b074d8982e5 100644
--- a/drivers/infiniband/hw/qedr/main.c
+++ b/drivers/infiniband/hw/qedr/main.c
@@ -333,8 +333,7 @@ static int qedr_alloc_resources(struct qedr_dev *dev)
 	__le16 *cons_pi;
 	int i, rc;

-	dev->sgid_tbl = kcalloc(QEDR_MAX_SGID, sizeof(union ib_gid),
-				GFP_KERNEL);
+	dev->sgid_tbl = kzalloc_objs(union ib_gid, QEDR_MAX_SGID, GFP_KERNEL);
 	if (!dev->sgid_tbl)
 		return -ENOMEM;

@@ -351,15 +350,13 @@ static int qedr_alloc_resources(struct qedr_dev *dev)
 	}

 	/* Allocate Status blocks for CNQ */
-	dev->sb_array = kcalloc(dev->num_cnq, sizeof(*dev->sb_array),
-				GFP_KERNEL);
+	dev->sb_array = kzalloc_objs(*dev->sb_array, dev->num_cnq, GFP_KERNEL);
 	if (!dev->sb_array) {
 		rc = -ENOMEM;
 		goto err_destroy_wq;
 	}

-	dev->cnq_array = kcalloc(dev->num_cnq,
-				 sizeof(*dev->cnq_array), GFP_KERNEL);
+	dev->cnq_array = kzalloc_objs(*dev->cnq_array, dev->num_cnq, GFP_KERNEL);
 	if (!dev->cnq_array) {
 		rc = -ENOMEM;
 		goto err2;
@@ -789,7 +786,7 @@ static int qedr_init_hw(struct qedr_dev *dev)
 	int rc = 0;
 	int i;

-	in_params =  kzalloc(sizeof(*in_params), GFP_KERNEL);
+	in_params = kzalloc_obj(*in_params, GFP_KERNEL);
 	if (!in_params) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/drivers/infiniband/hw/qedr/qedr_iw_cm.c b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
index 259303b9907c..ff1f138ec34f 100644
--- a/drivers/infiniband/hw/qedr/qedr_iw_cm.c
+++ b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
@@ -108,7 +108,7 @@ qedr_iw_mpa_request(void *context, struct qed_iwarp_cm_event_params *params)
 	struct iw_cm_event event;
 	struct qedr_iw_ep *ep;

-	ep = kzalloc(sizeof(*ep), GFP_ATOMIC);
+	ep = kzalloc_obj(*ep, GFP_ATOMIC);
 	if (!ep)
 		return;

@@ -258,7 +258,7 @@ qedr_iw_disconnect_event(void *context,
 	struct qedr_iw_ep *ep = (struct qedr_iw_ep *)context;
 	struct qedr_dev *dev = ep->dev;

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return;

@@ -560,7 +560,7 @@ int qedr_iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
 	if (!laddr->sin_port || !raddr->sin_port)
 		return -EINVAL;

-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;

@@ -672,7 +672,7 @@ int qedr_iw_create_listen(struct iw_cm_id *cm_id, int backlog)
 	DP_DEBUG(dev, QEDR_MSG_IWARP,
 		 "Create Listener address: %pISpc\n", &cm_id->local_addr);

-	listener = kzalloc(sizeof(*listener), GFP_KERNEL);
+	listener = kzalloc_obj(*listener, GFP_KERNEL);
 	if (!listener)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/qedr/qedr_roce_cm.c b/drivers/infiniband/hw/qedr/qedr_roce_cm.c
index 859f66a51bd2..f0e0ae154302 100644
--- a/drivers/infiniband/hw/qedr/qedr_roce_cm.c
+++ b/drivers/infiniband/hw/qedr/qedr_roce_cm.c
@@ -339,12 +339,10 @@ int qedr_create_gsi_qp(struct qedr_dev *dev, struct ib_qp_init_attr *attrs,
 	qp->rq.max_wr = attrs->cap.max_recv_wr;
 	qp->sq.max_wr = attrs->cap.max_send_wr;

-	qp->rqe_wr_id = kcalloc(qp->rq.max_wr, sizeof(*qp->rqe_wr_id),
-				GFP_KERNEL);
+	qp->rqe_wr_id = kzalloc_objs(*qp->rqe_wr_id, qp->rq.max_wr, GFP_KERNEL);
 	if (!qp->rqe_wr_id)
 		goto err;
-	qp->wqe_wr_id = kcalloc(qp->sq.max_wr, sizeof(*qp->wqe_wr_id),
-				GFP_KERNEL);
+	qp->wqe_wr_id = kzalloc_objs(*qp->wqe_wr_id, qp->sq.max_wr, GFP_KERNEL);
 	if (!qp->wqe_wr_id)
 		goto err;

@@ -507,7 +505,7 @@ static inline int qedr_gsi_build_packet(struct qedr_dev *dev,

 	header_size = ib_ud_header_pack(&udh, &ud_header_buffer);

-	packet = kzalloc(sizeof(*packet), GFP_ATOMIC);
+	packet = kzalloc_obj(*packet, GFP_ATOMIC);
 	if (!packet)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
index ab9bf0922979..ed7d4fc20b21 100644
--- a/drivers/infiniband/hw/qedr/verbs.c
+++ b/drivers/infiniband/hw/qedr/verbs.c
@@ -296,7 +296,7 @@ int qedr_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata)
 	ctx->dpi_addr = oparams.dpi_addr;
 	ctx->dpi_phys_addr = oparams.dpi_phys_addr;
 	ctx->dpi_size = oparams.dpi_size;
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		rc = -ENOMEM;
 		goto err;
@@ -537,7 +537,7 @@ static struct qedr_pbl *qedr_alloc_pbl_tbl(struct qedr_dev *dev,
 	void *va;
 	int i;

-	pbl_table = kcalloc(pbl_info->num_pbls, sizeof(*pbl_table), flags);
+	pbl_table = kzalloc_objs(*pbl_table, pbl_info->num_pbls, flags);
 	if (!pbl_table)
 		return ERR_PTR(-ENOMEM);

@@ -761,7 +761,7 @@ static int qedr_init_user_db_rec(struct ib_udata *udata,
 		return -ENOMEM;
 	}

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		goto err_free_db_data;

@@ -820,7 +820,7 @@ static inline int qedr_init_user_queue(struct ib_udata *udata,
 		qedr_populate_pbls(dev, q->umem, q->pbl_tbl, &q->pbl_info,
 				   FW_PAGE_SHIFT);
 	} else {
-		q->pbl_tbl = kzalloc(sizeof(*q->pbl_tbl), GFP_KERNEL);
+		q->pbl_tbl = kzalloc_obj(*q->pbl_tbl, GFP_KERNEL);
 		if (!q->pbl_tbl) {
 			rc = -ENOMEM;
 			goto err0;
@@ -2187,8 +2187,7 @@ static int qedr_create_kernel_qp(struct qedr_dev *dev,
 	qp->sq.max_wr = min_t(u32, attrs->cap.max_send_wr * dev->wq_multiplier,
 			      dev->attr.max_sqe);

-	qp->wqe_wr_id = kcalloc(qp->sq.max_wr, sizeof(*qp->wqe_wr_id),
-				GFP_KERNEL);
+	qp->wqe_wr_id = kzalloc_objs(*qp->wqe_wr_id, qp->sq.max_wr, GFP_KERNEL);
 	if (!qp->wqe_wr_id) {
 		DP_ERR(dev, "create qp: failed SQ shadow memory allocation\n");
 		return -ENOMEM;
@@ -2205,8 +2204,7 @@ static int qedr_create_kernel_qp(struct qedr_dev *dev,
 	qp->rq.max_wr = (u16) max_t(u32, attrs->cap.max_recv_wr, 1);

 	/* Allocate driver internal RQ array */
-	qp->rqe_wr_id = kcalloc(qp->rq.max_wr, sizeof(*qp->rqe_wr_id),
-				GFP_KERNEL);
+	qp->rqe_wr_id = kzalloc_objs(*qp->rqe_wr_id, qp->rq.max_wr, GFP_KERNEL);
 	if (!qp->rqe_wr_id) {
 		DP_ERR(dev,
 		       "create qp: failed RQ shadow memory allocation\n");
@@ -2972,7 +2970,7 @@ struct ib_mr *qedr_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 len,
 	if (acc & IB_ACCESS_REMOTE_WRITE && !(acc & IB_ACCESS_LOCAL_WRITE))
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(rc);

@@ -3080,7 +3078,7 @@ static struct qedr_mr *__qedr_alloc_mr(struct ib_pd *ibpd,
 		 "qedr_alloc_frmr pd = %d max_page_list_len= %d\n", pd->pd_id,
 		 max_page_list_len);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(rc);

@@ -3221,7 +3219,7 @@ struct ib_mr *qedr_get_dma_mr(struct ib_pd *ibpd, int acc)
 	struct qedr_mr *mr;
 	int rc;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/usnic/usnic_fwd.c b/drivers/infiniband/hw/usnic/usnic_fwd.c
index 18a70850b738..7dd66ee61a4e 100644
--- a/drivers/infiniband/hw/usnic/usnic_fwd.c
+++ b/drivers/infiniband/hw/usnic/usnic_fwd.c
@@ -85,7 +85,7 @@ struct usnic_fwd_dev *usnic_fwd_dev_alloc(struct pci_dev *pdev)
 {
 	struct usnic_fwd_dev *ufdev;

-	ufdev = kzalloc(sizeof(*ufdev), GFP_KERNEL);
+	ufdev = kzalloc_obj(*ufdev, GFP_KERNEL);
 	if (!ufdev)
 		return NULL;

@@ -210,7 +210,7 @@ usnic_fwd_alloc_flow(struct usnic_fwd_dev *ufdev, struct filter *filter,
 	tlv_size = (2*sizeof(struct filter_tlv) + sizeof(struct filter) +
 			sizeof(struct filter_action));

-	flow = kzalloc(sizeof(*flow), GFP_ATOMIC);
+	flow = kzalloc_obj(*flow, GFP_ATOMIC);
 	if (!flow)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/usnic/usnic_ib_main.c b/drivers/infiniband/hw/usnic/usnic_ib_main.c
index 11eca39b73a9..91e91f78f35b 100644
--- a/drivers/infiniband/hw/usnic/usnic_ib_main.c
+++ b/drivers/infiniband/hw/usnic/usnic_ib_main.c
@@ -556,7 +556,7 @@ static int usnic_ib_pci_probe(struct pci_dev *pdev,
 		return -EPERM;
 	}

-	vf = kzalloc(sizeof(*vf), GFP_KERNEL);
+	vf = kzalloc_obj(*vf, GFP_KERNEL);
 	if (!vf)
 		return -ENOMEM;

diff --git a/drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c b/drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c
index 59bfbfaee325..a7327c7a7465 100644
--- a/drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c
+++ b/drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c
@@ -232,7 +232,7 @@ create_roce_custom_flow(struct usnic_ib_qp_grp *qp_grp,
 	}

 	/* Create Flow Handle */
-	qp_flow = kzalloc(sizeof(*qp_flow), GFP_ATOMIC);
+	qp_flow = kzalloc_obj(*qp_flow, GFP_ATOMIC);
 	if (!qp_flow) {
 		err = -ENOMEM;
 		goto out_dealloc_flow;
@@ -305,7 +305,7 @@ create_udp_flow(struct usnic_ib_qp_grp *qp_grp,
 	}

 	/* Create qp_flow */
-	qp_flow = kzalloc(sizeof(*qp_flow), GFP_ATOMIC);
+	qp_flow = kzalloc_obj(*qp_flow, GFP_ATOMIC);
 	if (!qp_flow) {
 		err = -ENOMEM;
 		goto out_dealloc_flow;
@@ -542,8 +542,8 @@ alloc_res_chunk_list(struct usnic_vnic *vnic,
 		/* Do Nothing */
 	}

-	res_chunk_list = kcalloc(res_lst_sz + 1, sizeof(*res_chunk_list),
-					GFP_ATOMIC);
+	res_chunk_list = kzalloc_objs(*res_chunk_list, res_lst_sz + 1,
+				      GFP_ATOMIC);
 	if (!res_chunk_list)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
index ae5df96589d9..bbbea014b784 100644
--- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
+++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
@@ -604,7 +604,7 @@ struct ib_mr *usnic_ib_reg_mr(struct ib_pd *pd, u64 start, u64 length,
 	if (dmah)
 		return ERR_PTR(-EOPNOTSUPP);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/hw/usnic/usnic_uiom.c
index 3fbf99757b11..c659c80a37a6 100644
--- a/drivers/infiniband/hw/usnic/usnic_uiom.c
+++ b/drivers/infiniband/hw/usnic/usnic_uiom.c
@@ -149,9 +149,9 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
 		off = 0;

 		while (ret) {
-			chunk = kmalloc(struct_size(chunk, page_list,
-					min_t(int, ret, USNIC_UIOM_PAGE_CHUNK)),
-					GFP_KERNEL);
+			chunk = kmalloc_flex(*chunk, page_list,
+					     min_t(int, ret, USNIC_UIOM_PAGE_CHUNK),
+					     GFP_KERNEL);
 			if (!chunk) {
 				ret = -ENOMEM;
 				goto out;
@@ -351,7 +351,7 @@ struct usnic_uiom_reg *usnic_uiom_reg_get(struct usnic_uiom_pd *pd,
 	vpn_start = (addr & PAGE_MASK) >> PAGE_SHIFT;
 	vpn_last = vpn_start + npages - 1;

-	uiomr = kmalloc(sizeof(*uiomr), GFP_KERNEL);
+	uiomr = kmalloc_obj(*uiomr, GFP_KERNEL);
 	if (!uiomr)
 		return ERR_PTR(-ENOMEM);

@@ -439,7 +439,7 @@ struct usnic_uiom_pd *usnic_uiom_alloc_pd(struct device *dev)
 	struct usnic_uiom_pd *pd;
 	void *domain;

-	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+	pd = kzalloc_obj(*pd, GFP_KERNEL);
 	if (!pd)
 		return ERR_PTR(-ENOMEM);

@@ -469,7 +469,7 @@ int usnic_uiom_attach_dev_to_pd(struct usnic_uiom_pd *pd, struct device *dev)
 	struct usnic_uiom_dev *uiom_dev;
 	int err;

-	uiom_dev = kzalloc(sizeof(*uiom_dev), GFP_ATOMIC);
+	uiom_dev = kzalloc_obj(*uiom_dev, GFP_ATOMIC);
 	if (!uiom_dev)
 		return -ENOMEM;
 	uiom_dev->dev = dev;
@@ -533,7 +533,7 @@ struct device **usnic_uiom_get_dev_list(struct usnic_uiom_pd *pd)
 	int i = 0;

 	spin_lock(&pd->lock);
-	devs = kcalloc(pd->dev_cnt + 1, sizeof(*devs), GFP_ATOMIC);
+	devs = kzalloc_objs(*devs, pd->dev_cnt + 1, GFP_ATOMIC);
 	if (!devs) {
 		devs = ERR_PTR(-ENOMEM);
 		goto out;
diff --git a/drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.c b/drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.c
index 29d71267af78..235d3a124242 100644
--- a/drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.c
+++ b/drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.c
@@ -70,7 +70,7 @@ static struct usnic_uiom_interval_node*
 usnic_uiom_interval_node_alloc(long int start, long int last, int ref_cnt,
 				int flags)
 {
-	struct usnic_uiom_interval_node *interval = kzalloc(sizeof(*interval),
+	struct usnic_uiom_interval_node *interval = kzalloc_obj(*interval,
 								GFP_ATOMIC);
 	if (!interval)
 		return NULL;
diff --git a/drivers/infiniband/hw/usnic/usnic_vnic.c b/drivers/infiniband/hw/usnic/usnic_vnic.c
index 0c47f73aaed5..2565b1e136cf 100644
--- a/drivers/infiniband/hw/usnic/usnic_vnic.c
+++ b/drivers/infiniband/hw/usnic/usnic_vnic.c
@@ -239,12 +239,12 @@ usnic_vnic_get_resources(struct usnic_vnic *vnic, enum usnic_vnic_res_type type,
 	if (usnic_vnic_res_free_cnt(vnic, type) < cnt || cnt < 0 || !owner)
 		return ERR_PTR(-EINVAL);

-	ret = kzalloc(sizeof(*ret), GFP_ATOMIC);
+	ret = kzalloc_obj(*ret, GFP_ATOMIC);
 	if (!ret)
 		return ERR_PTR(-ENOMEM);

 	if (cnt > 0) {
-		ret->res = kcalloc(cnt, sizeof(*(ret->res)), GFP_ATOMIC);
+		ret->res = kzalloc_objs(*(ret->res), cnt, GFP_ATOMIC);
 		if (!ret->res) {
 			kfree(ret);
 			return ERR_PTR(-ENOMEM);
@@ -311,12 +311,12 @@ static int usnic_vnic_alloc_res_chunk(struct usnic_vnic *vnic,
 	}

 	chunk->cnt = chunk->free_cnt = cnt;
-	chunk->res = kcalloc(cnt, sizeof(*(chunk->res)), GFP_KERNEL);
+	chunk->res = kzalloc_objs(*(chunk->res), cnt, GFP_KERNEL);
 	if (!chunk->res)
 		return -ENOMEM;

 	for (i = 0; i < cnt; i++) {
-		res = kzalloc(sizeof(*res), GFP_KERNEL);
+		res = kzalloc_obj(*res, GFP_KERNEL);
 		if (!res) {
 			err = -ENOMEM;
 			goto fail;
@@ -445,7 +445,7 @@ struct usnic_vnic *usnic_vnic_alloc(struct pci_dev *pdev)
 		return ERR_PTR(-EINVAL);
 	}

-	vnic = kzalloc(sizeof(*vnic), GFP_KERNEL);
+	vnic = kzalloc_obj(*vnic, GFP_KERNEL);
 	if (!vnic)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
index 1664d1d7d969..81970a53a049 100644
--- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
+++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
@@ -257,14 +257,14 @@ static int pvrdma_register_device(struct pvrdma_dev *dev)
 	mutex_init(&dev->port_mutex);
 	spin_lock_init(&dev->desc_lock);

-	dev->cq_tbl = kcalloc(dev->dsr->caps.max_cq, sizeof(struct pvrdma_cq *),
-			      GFP_KERNEL);
+	dev->cq_tbl = kzalloc_objs(struct pvrdma_cq *, dev->dsr->caps.max_cq,
+				   GFP_KERNEL);
 	if (!dev->cq_tbl)
 		return ret;
 	spin_lock_init(&dev->cq_tbl_lock);

-	dev->qp_tbl = kcalloc(dev->dsr->caps.max_qp, sizeof(struct pvrdma_qp *),
-			      GFP_KERNEL);
+	dev->qp_tbl = kzalloc_objs(struct pvrdma_qp *, dev->dsr->caps.max_qp,
+				   GFP_KERNEL);
 	if (!dev->qp_tbl)
 		goto err_cq_free;
 	spin_lock_init(&dev->qp_tbl_lock);
@@ -273,9 +273,8 @@ static int pvrdma_register_device(struct pvrdma_dev *dev)
 	if (dev->dsr->caps.max_srq) {
 		ib_set_device_ops(&dev->ib_dev, &pvrdma_dev_srq_ops);

-		dev->srq_tbl = kcalloc(dev->dsr->caps.max_srq,
-				       sizeof(struct pvrdma_srq *),
-				       GFP_KERNEL);
+		dev->srq_tbl = kzalloc_objs(struct pvrdma_srq *,
+					    dev->dsr->caps.max_srq, GFP_KERNEL);
 		if (!dev->srq_tbl)
 			goto err_qp_free;
 	}
@@ -752,7 +751,7 @@ static int pvrdma_netdevice_event(struct notifier_block *this,
 	struct net_device *event_netdev = netdev_notifier_info_to_dev(ptr);
 	struct pvrdma_netdevice_work *netdev_work;

-	netdev_work = kmalloc(sizeof(*netdev_work), GFP_ATOMIC);
+	netdev_work = kmalloc_obj(*netdev_work, GFP_ATOMIC);
 	if (!netdev_work)
 		return NOTIFY_BAD;

@@ -985,8 +984,8 @@ static int pvrdma_pci_probe(struct pci_dev *pdev,
 	}

 	/* Allocate GID table */
-	dev->sgid_tbl = kcalloc(dev->dsr->caps.gid_tbl_len,
-				sizeof(union ib_gid), GFP_KERNEL);
+	dev->sgid_tbl = kzalloc_objs(union ib_gid, dev->dsr->caps.gid_tbl_len,
+				     GFP_KERNEL);
 	if (!dev->sgid_tbl) {
 		ret = -ENOMEM;
 		goto err_free_uar_table;
diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_misc.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_misc.c
index ba43ad07898c..a4da1b61c27f 100644
--- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_misc.c
+++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_misc.c
@@ -81,8 +81,7 @@ int pvrdma_page_dir_init(struct pvrdma_dev *dev, struct pvrdma_page_dir *pdir,
 	pdir->npages = npages;

 	if (alloc_pages) {
-		pdir->pages = kcalloc(npages, sizeof(*pdir->pages),
-				      GFP_KERNEL);
+		pdir->pages = kzalloc_objs(*pdir->pages, npages, GFP_KERNEL);
 		if (!pdir->pages)
 			goto err;

diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_mr.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_mr.c
index ec7a00c8285b..b53fb23c3c86 100644
--- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_mr.c
+++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_mr.c
@@ -72,7 +72,7 @@ struct ib_mr *pvrdma_get_dma_mr(struct ib_pd *pd, int acc)
 		return ERR_PTR(-EOPNOTSUPP);
 	}

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -146,7 +146,7 @@ struct ib_mr *pvrdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 		goto err_umem;
 	}

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr) {
 		ret = -ENOMEM;
 		goto err_umem;
@@ -222,7 +222,7 @@ struct ib_mr *pvrdma_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
 	    max_num_sg > PVRDMA_MAX_FAST_REG_PAGES)
 		return ERR_PTR(-EINVAL);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/sw/rdmavt/mcast.c b/drivers/infiniband/sw/rdmavt/mcast.c
index 59045bdce2a9..987e9c0b0466 100644
--- a/drivers/infiniband/sw/rdmavt/mcast.c
+++ b/drivers/infiniband/sw/rdmavt/mcast.c
@@ -34,7 +34,7 @@ static struct rvt_mcast_qp *rvt_mcast_qp_alloc(struct rvt_qp *qp)
 {
 	struct rvt_mcast_qp *mqp;

-	mqp = kmalloc(sizeof(*mqp), GFP_KERNEL);
+	mqp = kmalloc_obj(*mqp, GFP_KERNEL);
 	if (!mqp)
 		goto bail;

@@ -66,7 +66,7 @@ static struct rvt_mcast *rvt_mcast_alloc(union ib_gid *mgid, u16 lid)
 {
 	struct rvt_mcast *mcast;

-	mcast = kzalloc(sizeof(*mcast), GFP_KERNEL);
+	mcast = kzalloc_obj(*mcast, GFP_KERNEL);
 	if (!mcast)
 		goto bail;

diff --git a/drivers/infiniband/sw/rdmavt/mr.c b/drivers/infiniband/sw/rdmavt/mr.c
index 86e482593a85..89b1c7410920 100644
--- a/drivers/infiniband/sw/rdmavt/mr.c
+++ b/drivers/infiniband/sw/rdmavt/mr.c
@@ -242,7 +242,7 @@ static struct rvt_mr *__rvt_alloc_mr(int count, struct ib_pd *pd)

 	/* Allocate struct plus pointers to first level page tables. */
 	m = (count + RVT_SEGSZ - 1) / RVT_SEGSZ;
-	mr = kzalloc(struct_size(mr, mr.map, m), GFP_KERNEL);
+	mr = kzalloc_flex(*mr, mr.map, m, GFP_KERNEL);
 	if (!mr)
 		goto bail;

@@ -292,7 +292,7 @@ struct ib_mr *rvt_get_dma_mr(struct ib_pd *pd, int acc)
 	if (ibpd_to_rvtpd(pd)->user)
 		return ERR_PTR(-EPERM);

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr) {
 		ret = ERR_PTR(-ENOMEM);
 		goto bail;
diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c
index 134a79eecfcb..8108660b2d33 100644
--- a/drivers/infiniband/sw/rdmavt/qp.c
+++ b/drivers/infiniband/sw/rdmavt/qp.c
@@ -2650,7 +2650,7 @@ struct rvt_qp_iter *rvt_qp_iter_init(struct rvt_dev_info *rdi,
 {
 	struct rvt_qp_iter *i;

-	i = kzalloc(sizeof(*i), GFP_KERNEL);
+	i = kzalloc_obj(*i, GFP_KERNEL);
 	if (!i)
 		return NULL;

diff --git a/drivers/infiniband/sw/rdmavt/vt.c b/drivers/infiniband/sw/rdmavt/vt.c
index d22d610c2696..3a7b1f3c4ac6 100644
--- a/drivers/infiniband/sw/rdmavt/vt.c
+++ b/drivers/infiniband/sw/rdmavt/vt.c
@@ -53,7 +53,7 @@ struct rvt_dev_info *rvt_alloc_device(size_t size, int nports)
 	if (!rdi)
 		return rdi;

-	rdi->ports = kcalloc(nports, sizeof(*rdi->ports), GFP_KERNEL);
+	rdi->ports = kzalloc_objs(*rdi->ports, nports, GFP_KERNEL);
 	if (!rdi->ports)
 		ib_dealloc_device(&rdi->ibdev);

diff --git a/drivers/infiniband/sw/rxe/rxe_mcast.c b/drivers/infiniband/sw/rxe/rxe_mcast.c
index 07ff47bae31d..6c3c78ddedc9 100644
--- a/drivers/infiniband/sw/rxe/rxe_mcast.c
+++ b/drivers/infiniband/sw/rxe/rxe_mcast.c
@@ -223,7 +223,7 @@ static struct rxe_mcg *rxe_get_mcg(struct rxe_dev *rxe, union ib_gid *mgid)
 	}

 	/* speculative alloc of new mcg */
-	mcg = kzalloc(sizeof(*mcg), GFP_KERNEL);
+	mcg = kzalloc_obj(*mcg, GFP_KERNEL);
 	if (!mcg) {
 		err = -ENOMEM;
 		goto err_dec;
@@ -363,7 +363,7 @@ static int rxe_attach_mcg(struct rxe_mcg *mcg, struct rxe_qp *qp)
 	spin_unlock_bh(&rxe->mcg_lock);

 	/* speculative alloc new mca without using GFP_ATOMIC */
-	mca = kzalloc(sizeof(*mca), GFP_KERNEL);
+	mca = kzalloc_obj(*mca, GFP_KERNEL);
 	if (!mca)
 		return -ENOMEM;

diff --git a/drivers/infiniband/sw/rxe/rxe_mmap.c b/drivers/infiniband/sw/rxe/rxe_mmap.c
index 6b7f2bd69879..6afd158b4b0b 100644
--- a/drivers/infiniband/sw/rxe/rxe_mmap.c
+++ b/drivers/infiniband/sw/rxe/rxe_mmap.c
@@ -120,7 +120,7 @@ struct rxe_mmap_info *rxe_create_mmap_info(struct rxe_dev *rxe, u32 size,
 	if (!udata)
 		return ERR_PTR(-EINVAL);

-	ip = kmalloc(sizeof(*ip), GFP_KERNEL);
+	ip = kmalloc_obj(*ip, GFP_KERNEL);
 	if (!ip)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe/rxe_mr.c
index c71ab780e379..e2a4eb72a56e 100644
--- a/drivers/infiniband/sw/rxe/rxe_mr.c
+++ b/drivers/infiniband/sw/rxe/rxe_mr.c
@@ -156,8 +156,7 @@ static int rxe_mr_fill_pages_from_sgt(struct rxe_mr *mr, struct sg_table *sgt)

 static int __alloc_mr_page_info(struct rxe_mr *mr, int num_pages)
 {
-	mr->page_info = kcalloc(num_pages, sizeof(struct rxe_mr_page),
-				GFP_KERNEL);
+	mr->page_info = kzalloc_objs(struct rxe_mr_page, num_pages, GFP_KERNEL);
 	if (!mr->page_info)
 		return -ENOMEM;

diff --git a/drivers/infiniband/sw/rxe/rxe_odp.c b/drivers/infiniband/sw/rxe/rxe_odp.c
index d3a54bfaf92f..81b7d5cc8313 100644
--- a/drivers/infiniband/sw/rxe/rxe_odp.c
+++ b/drivers/infiniband/sw/rxe/rxe_odp.c
@@ -523,7 +523,7 @@ static int rxe_ib_advise_mr_prefetch(struct ib_pd *ibpd,
 					       num_sge);

 	/* Asynchronous call is "best-effort" and allowed to fail */
-	work = kvzalloc(struct_size(work, frags, num_sge), GFP_KERNEL);
+	work = kvzalloc_flex(*work, frags, num_sge, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index 845bdd03ca28..3e00b1c3db0a 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -152,7 +152,7 @@ static int alloc_rd_atomic_resources(struct rxe_qp *qp, unsigned int n)
 {
 	qp->resp.res_head = 0;
 	qp->resp.res_tail = 0;
-	qp->resp.resources = kcalloc(n, sizeof(struct resp_res), GFP_KERNEL);
+	qp->resp.resources = kzalloc_objs(struct resp_res, n, GFP_KERNEL);

 	if (!qp->resp.resources)
 		return -ENOMEM;
diff --git a/drivers/infiniband/sw/rxe/rxe_queue.c b/drivers/infiniband/sw/rxe/rxe_queue.c
index 9611ee191a46..e27d57ac687f 100644
--- a/drivers/infiniband/sw/rxe/rxe_queue.c
+++ b/drivers/infiniband/sw/rxe/rxe_queue.c
@@ -63,7 +63,7 @@ struct rxe_queue *rxe_queue_init(struct rxe_dev *rxe, int *num_elem,
 	if (*num_elem < 0)
 		return NULL;

-	q = kzalloc(sizeof(*q), GFP_KERNEL);
+	q = kzalloc_obj(*q, GFP_KERNEL);
 	if (!q)
 		return NULL;

diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
index 38d8c408320f..5d1e0b3228c4 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.c
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
@@ -1245,7 +1245,7 @@ static struct ib_mr *rxe_get_dma_mr(struct ib_pd *ibpd, int access)
 	struct rxe_mr *mr;
 	int err;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -1288,7 +1288,7 @@ static struct ib_mr *rxe_reg_user_mr(struct ib_pd *ibpd, u64 start,
 		return ERR_PTR(-EOPNOTSUPP);
 	}

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

@@ -1373,7 +1373,7 @@ static struct ib_mr *rxe_alloc_mr(struct ib_pd *ibpd, enum ib_mr_type mr_type,
 		goto err_out;
 	}

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/sw/siw/siw_cm.c b/drivers/infiniband/sw/siw/siw_cm.c
index 1d3de8209bfa..22fa54cacab9 100644
--- a/drivers/infiniband/sw/siw/siw_cm.c
+++ b/drivers/infiniband/sw/siw/siw_cm.c
@@ -205,7 +205,7 @@ static void siw_cep_socket_assoc(struct siw_cep *cep, struct socket *s)

 static struct siw_cep *siw_cep_alloc(struct siw_device *sdev)
 {
-	struct siw_cep *cep = kzalloc(sizeof(*cep), GFP_KERNEL);
+	struct siw_cep *cep = kzalloc_obj(*cep, GFP_KERNEL);
 	unsigned long flags;

 	if (!cep)
@@ -334,7 +334,7 @@ static int siw_cm_alloc_work(struct siw_cep *cep, int num)
 	struct siw_cm_work *work;

 	while (num--) {
-		work = kmalloc(sizeof(*work), GFP_KERNEL);
+		work = kmalloc_obj(*work, GFP_KERNEL);
 		if (!work) {
 			if (!(list_empty(&cep->work_freelist)))
 				siw_cm_free_work(cep);
@@ -1915,7 +1915,7 @@ int siw_create_listen(struct iw_cm_id *id, int backlog)
 	 */
 	if (!id->provider_data) {
 		id->provider_data =
-			kmalloc(sizeof(struct list_head), GFP_KERNEL);
+			kmalloc_obj(struct list_head, GFP_KERNEL);
 		if (!id->provider_data) {
 			rv = -ENOMEM;
 			goto error;
diff --git a/drivers/infiniband/sw/siw/siw_main.c b/drivers/infiniband/sw/siw/siw_main.c
index 5168307229a9..a896b527bcee 100644
--- a/drivers/infiniband/sw/siw/siw_main.c
+++ b/drivers/infiniband/sw/siw/siw_main.c
@@ -128,14 +128,14 @@ static int siw_init_cpulist(void)
 	siw_cpu_info.num_nodes = num_nodes;

 	siw_cpu_info.tx_valid_cpus =
-		kcalloc(num_nodes, sizeof(struct cpumask *), GFP_KERNEL);
+		kzalloc_objs(struct cpumask *, num_nodes, GFP_KERNEL);
 	if (!siw_cpu_info.tx_valid_cpus) {
 		siw_cpu_info.num_nodes = 0;
 		return -ENOMEM;
 	}
 	for (i = 0; i < siw_cpu_info.num_nodes; i++) {
 		siw_cpu_info.tx_valid_cpus[i] =
-			kzalloc(sizeof(struct cpumask), GFP_KERNEL);
+			kzalloc_obj(struct cpumask, GFP_KERNEL);
 		if (!siw_cpu_info.tx_valid_cpus[i])
 			goto out_err;

diff --git a/drivers/infiniband/sw/siw/siw_mem.c b/drivers/infiniband/sw/siw/siw_mem.c
index d5ddeb17bd22..56d3e5c410ce 100644
--- a/drivers/infiniband/sw/siw/siw_mem.c
+++ b/drivers/infiniband/sw/siw/siw_mem.c
@@ -58,7 +58,7 @@ int siw_mr_add_mem(struct siw_mr *mr, struct ib_pd *pd, void *mem_obj,
 		   u64 start, u64 len, int rights)
 {
 	struct siw_device *sdev = to_siw_dev(pd->device);
-	struct siw_mem *mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+	struct siw_mem *mem = kzalloc_obj(*mem, GFP_KERNEL);
 	struct xa_limit limit = XA_LIMIT(1, SIW_STAG_MAX_INDEX);
 	u32 id, next;

@@ -321,7 +321,7 @@ struct siw_pbl *siw_pbl_alloc(u32 num_buf)
 	if (num_buf == 0)
 		return ERR_PTR(-EINVAL);

-	pbl = kzalloc(struct_size(pbl, pbe, num_buf), GFP_KERNEL);
+	pbl = kzalloc_flex(*pbl, pbe, num_buf, GFP_KERNEL);
 	if (!pbl)
 		return ERR_PTR(-ENOMEM);

@@ -347,12 +347,12 @@ struct siw_umem *siw_umem_get(struct ib_device *base_dev, u64 start,
 	num_pages = PAGE_ALIGN(start + len - first_page_va) >> PAGE_SHIFT;
 	num_chunks = (num_pages >> CHUNK_SHIFT) + 1;

-	umem = kzalloc(sizeof(*umem), GFP_KERNEL);
+	umem = kzalloc_obj(*umem, GFP_KERNEL);
 	if (!umem)
 		return ERR_PTR(-ENOMEM);

 	umem->page_chunk =
-		kcalloc(num_chunks, sizeof(struct siw_page_chunk), GFP_KERNEL);
+		kzalloc_objs(struct siw_page_chunk, num_chunks, GFP_KERNEL);
 	if (!umem->page_chunk) {
 		rv = -ENOMEM;
 		goto err_out;
@@ -376,7 +376,7 @@ struct siw_umem *siw_umem_get(struct ib_device *base_dev, u64 start,
 	for (i = 0; num_pages > 0; i++) {
 		int nents = min_t(int, num_pages, PAGES_PER_CHUNK);
 		struct page **plist =
-			kcalloc(nents, sizeof(struct page *), GFP_KERNEL);
+			kzalloc_objs(struct page *, nents, GFP_KERNEL);

 		if (!plist) {
 			rv = -ENOMEM;
diff --git a/drivers/infiniband/sw/siw/siw_qp.c b/drivers/infiniband/sw/siw/siw_qp.c
index c1e6e7d6e32f..cccfef1e27bf 100644
--- a/drivers/infiniband/sw/siw/siw_qp.c
+++ b/drivers/infiniband/sw/siw/siw_qp.c
@@ -391,7 +391,7 @@ void siw_send_terminate(struct siw_qp *qp)
 		return;
 	}

-	term = kzalloc(sizeof(*term), GFP_KERNEL);
+	term = kzalloc_obj(*term, GFP_KERNEL);
 	if (!term)
 		return;

@@ -405,7 +405,7 @@ void siw_send_terminate(struct siw_qp *qp)
 	if ((qp->term_info.layer == TERM_ERROR_LAYER_DDP) ||
 	    ((qp->term_info.layer == TERM_ERROR_LAYER_RDMAP) &&
 	     (qp->term_info.etype != RDMAP_ETYPE_CATASTROPHIC))) {
-		err_hdr = kzalloc(sizeof(*err_hdr), GFP_KERNEL);
+		err_hdr = kzalloc_obj(*err_hdr, GFP_KERNEL);
 		if (!err_hdr) {
 			kfree(term);
 			return;
diff --git a/drivers/infiniband/sw/siw/siw_verbs.c b/drivers/infiniband/sw/siw/siw_verbs.c
index efa2f097b582..12719394f1ea 100644
--- a/drivers/infiniband/sw/siw/siw_verbs.c
+++ b/drivers/infiniband/sw/siw/siw_verbs.c
@@ -274,7 +274,7 @@ siw_mmap_entry_insert(struct siw_ucontext *uctx,
 		      void *address, size_t length,
 		      u64 *offset)
 {
-	struct siw_user_mmap_entry *entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	struct siw_user_mmap_entry *entry = kzalloc_obj(*entry, GFP_KERNEL);
 	int rv;

 	*offset = SIW_INVAL_UOBJ_KEY;
@@ -1360,7 +1360,7 @@ struct ib_mr *siw_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
 		umem = NULL;
 		goto err_out;
 	}
-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr) {
 		rv = -ENOMEM;
 		goto err_out;
@@ -1441,7 +1441,7 @@ struct ib_mr *siw_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
 		pbl = NULL;
 		goto err_out;
 	}
-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr) {
 		rv = -ENOMEM;
 		goto err_out;
@@ -1556,7 +1556,7 @@ struct ib_mr *siw_get_dma_mr(struct ib_pd *pd, int rights)
 		rv = -ENOMEM;
 		goto err_out;
 	}
-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr) {
 		rv = -ENOMEM;
 		goto err_out;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index b610d36295bb..54de2be1494b 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -360,7 +360,7 @@ static int ipoib_cm_nonsrq_init_rx(struct net_device *dev, struct ib_cm_id *cm_i
 	if (!rx->rx_ring)
 		return -ENOMEM;

-	t = kmalloc(sizeof(*t), GFP_KERNEL);
+	t = kmalloc_obj(*t, GFP_KERNEL);
 	if (!t) {
 		ret = -ENOMEM;
 		goto err_free_1;
@@ -449,7 +449,7 @@ static int ipoib_cm_req_handler(struct ib_cm_id *cm_id,
 	int ret;

 	ipoib_dbg(priv, "REQ arrived\n");
-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;
 	p->dev = dev;
@@ -1304,7 +1304,7 @@ struct ipoib_cm_tx *ipoib_cm_create_tx(struct net_device *dev, struct ipoib_path
 	struct ipoib_dev_priv *priv = ipoib_priv(dev);
 	struct ipoib_cm_tx *tx;

-	tx = kzalloc(sizeof(*tx), GFP_ATOMIC);
+	tx = kzalloc_obj(*tx, GFP_ATOMIC);
 	if (!tx)
 		return NULL;

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index 10b0dbda6cd5..44354d661e65 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -59,7 +59,7 @@ struct ipoib_ah *ipoib_create_ah(struct net_device *dev,
 	struct ipoib_ah *ah;
 	struct ib_ah *vah;

-	ah = kmalloc(sizeof(*ah), GFP_KERNEL);
+	ah = kmalloc_obj(*ah, GFP_KERNEL);
 	if (!ah)
 		return ERR_PTR(-ENOMEM);

@@ -422,7 +422,7 @@ static void ipoib_ib_handle_tx_wc(struct net_device *dev, struct ib_wc *wc)
 		ipoib_warn(priv,
 			   "failed send event (status=%d, wrid=%d vend_err %#x)\n",
 			   wc->status, wr_id, wc->vendor_err);
-		qp_work = kzalloc(sizeof(*qp_work), GFP_ATOMIC);
+		qp_work = kzalloc_obj(*qp_work, GFP_ATOMIC);
 		if (!qp_work)
 			return;

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 4a504b7c4293..934d8e5a8f11 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -169,7 +169,7 @@ static void ipoib_schedule_ifupdown_task(struct net_device *dev, bool up)
 	    (!up && !(dev->flags & IFF_UP)))
 		return;

-	work = kmalloc(sizeof(*work), GFP_KERNEL);
+	work = kmalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return;
 	work->dev = dev;
@@ -673,7 +673,7 @@ struct ipoib_path_iter *ipoib_path_iter_init(struct net_device *dev)
 {
 	struct ipoib_path_iter *iter;

-	iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kmalloc_obj(*iter, GFP_KERNEL);
 	if (!iter)
 		return NULL;

@@ -924,7 +924,7 @@ static struct ipoib_path *path_rec_create(struct net_device *dev, void *gid)
 	if (!priv->broadcast)
 		return NULL;

-	path = kzalloc(sizeof(*path), GFP_ATOMIC);
+	path = kzalloc_obj(*path, GFP_ATOMIC);
 	if (!path)
 		return NULL;

@@ -1443,7 +1443,7 @@ static struct ipoib_neigh *ipoib_neigh_ctor(u8 *daddr,
 {
 	struct ipoib_neigh *neigh;

-	neigh = kzalloc(sizeof(*neigh), GFP_ATOMIC);
+	neigh = kzalloc_obj(*neigh, GFP_ATOMIC);
 	if (!neigh)
 		return NULL;

@@ -1593,11 +1593,11 @@ static int ipoib_neigh_hash_init(struct ipoib_dev_priv *priv)

 	clear_bit(IPOIB_NEIGH_TBL_FLUSH, &priv->flags);
 	ntbl->htbl = NULL;
-	htbl = kzalloc(sizeof(*htbl), GFP_KERNEL);
+	htbl = kzalloc_obj(*htbl, GFP_KERNEL);
 	if (!htbl)
 		return -ENOMEM;
 	size = roundup_pow_of_two(arp_tbl.gc_thresh3);
-	buckets = kvcalloc(size, sizeof(*buckets), GFP_KERNEL);
+	buckets = kvzalloc_objs(*buckets, size, GFP_KERNEL);
 	if (!buckets) {
 		kfree(htbl);
 		return -ENOMEM;
@@ -1773,9 +1773,8 @@ static int ipoib_dev_init_default(struct net_device *dev)
 	ipoib_napi_add(dev);

 	/* Allocate RX/TX "rings" to hold queued skbs */
-	priv->rx_ring =	kcalloc(ipoib_recvq_size,
-				       sizeof(*priv->rx_ring),
-				       GFP_KERNEL);
+	priv->rx_ring =	kzalloc_objs(*priv->rx_ring, ipoib_recvq_size,
+					    GFP_KERNEL);
 	if (!priv->rx_ring)
 		goto out;

@@ -2278,7 +2277,7 @@ int ipoib_intf_init(struct ib_device *hca, u32 port, const char *name,
 	struct ipoib_dev_priv *priv;
 	int rc;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -2664,7 +2663,7 @@ static int ipoib_add_one(struct ib_device *device)
 	unsigned int p;
 	int count = 0;

-	dev_list = kmalloc(sizeof(*dev_list), GFP_KERNEL);
+	dev_list = kmalloc_obj(*dev_list, GFP_KERNEL);
 	if (!dev_list)
 		return -ENOMEM;

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index 8a4ab9ff0a68..7b04186f659e 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -139,7 +139,7 @@ static struct ipoib_mcast *ipoib_mcast_alloc(struct net_device *dev)
 {
 	struct ipoib_mcast *mcast;

-	mcast = kzalloc(sizeof(*mcast), GFP_ATOMIC);
+	mcast = kzalloc_obj(*mcast, GFP_ATOMIC);
 	if (!mcast)
 		return NULL;

@@ -980,7 +980,7 @@ struct ipoib_mcast_iter *ipoib_mcast_iter_init(struct net_device *dev)
 {
 	struct ipoib_mcast_iter *iter;

-	iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kmalloc_obj(*iter, GFP_KERNEL);
 	if (!iter)
 		return NULL;

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
index 86983080d28b..55a612ad2b07 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
@@ -52,7 +52,7 @@ int ipoib_mcast_attach(struct net_device *dev, struct ib_device *hca,

 	if (set_qkey) {
 		ret = -ENOMEM;
-		qp_attr = kmalloc(sizeof(*qp_attr), GFP_KERNEL);
+		qp_attr = kmalloc_obj(*qp_attr, GFP_KERNEL);
 		if (!qp_attr)
 			goto out;

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
index 243e8f555eca..df98b4936c32 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
@@ -274,7 +274,7 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey)
 		    priv->child_type == IPOIB_LEGACY_CHILD) {
 			struct ipoib_vlan_delete_work *work;

-			work = kmalloc(sizeof(*work), GFP_KERNEL);
+			work = kmalloc_obj(*work, GFP_KERNEL);
 			if (!work) {
 				rc = -ENOMEM;
 				goto out;
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c
index dc531fad73de..2e1e97acf342 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
@@ -802,7 +802,7 @@ static struct iscsi_endpoint *iscsi_iser_ep_connect(struct Scsi_Host *shost,
 	if (!ep)
 		return ERR_PTR(-ENOMEM);

-	iser_conn = kzalloc(sizeof(*iser_conn), GFP_KERNEL);
+	iser_conn = kzalloc_obj(*iser_conn, GFP_KERNEL);
 	if (!iser_conn) {
 		err = -ENOMEM;
 		goto failure;
diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c
index f5f090dc4f1e..0ae0f7722e0f 100644
--- a/drivers/infiniband/ulp/iser/iser_initiator.c
+++ b/drivers/infiniband/ulp/iser/iser_initiator.c
@@ -240,9 +240,8 @@ int iser_alloc_rx_descriptors(struct iser_conn *iser_conn,
 		goto alloc_login_buf_fail;

 	iser_conn->num_rx_descs = session->cmds_max;
-	iser_conn->rx_descs = kmalloc_array(iser_conn->num_rx_descs,
-					    sizeof(struct iser_rx_desc),
-					    GFP_KERNEL);
+	iser_conn->rx_descs = kmalloc_objs(struct iser_rx_desc,
+					   iser_conn->num_rx_descs, GFP_KERNEL);
 	if (!iser_conn->rx_descs)
 		goto rx_desc_alloc_fail;

diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c
index 6801b70dc9e0..f08dea6721c4 100644
--- a/drivers/infiniband/ulp/iser/iser_verbs.c
+++ b/drivers/infiniband/ulp/iser/iser_verbs.c
@@ -105,7 +105,7 @@ iser_create_fastreg_desc(struct iser_device *device,
 	enum ib_mr_type mr_type;
 	int ret;

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return ERR_PTR(-ENOMEM);

@@ -305,7 +305,7 @@ struct iser_device *iser_device_find_by_ib_device(struct rdma_cm_id *cma_id)
 		if (device->ib_device->node_guid == cma_id->device->node_guid)
 			goto inc_refcnt;

-	device = kzalloc(sizeof *device, GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		goto out;

diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index af811d060cc8..ab5d8790cf87 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -152,9 +152,8 @@ isert_alloc_rx_descriptors(struct isert_conn *isert_conn)
 	u64 dma_addr;
 	int i, j;

-	isert_conn->rx_descs = kcalloc(ISERT_QP_MAX_RECV_DTOS,
-				       sizeof(struct iser_rx_desc),
-				       GFP_KERNEL);
+	isert_conn->rx_descs = kzalloc_objs(struct iser_rx_desc,
+					    ISERT_QP_MAX_RECV_DTOS, GFP_KERNEL);
 	if (!isert_conn->rx_descs)
 		return -ENOMEM;

@@ -275,7 +274,7 @@ isert_device_get(struct rdma_cm_id *cma_id)
 		}
 	}

-	device = kzalloc(sizeof(struct isert_device), GFP_KERNEL);
+	device = kzalloc_obj(struct isert_device, GFP_KERNEL);
 	if (!device) {
 		mutex_unlock(&device_list_mutex);
 		return ERR_PTR(-ENOMEM);
@@ -333,8 +332,8 @@ isert_alloc_login_buf(struct isert_conn *isert_conn,
 {
 	int ret;

-	isert_conn->login_desc = kzalloc(sizeof(*isert_conn->login_desc),
-			GFP_KERNEL);
+	isert_conn->login_desc = kzalloc_obj(*isert_conn->login_desc,
+					     GFP_KERNEL);
 	if (!isert_conn->login_desc)
 		return -ENOMEM;

@@ -429,7 +428,7 @@ isert_connect_request(struct rdma_cm_id *cma_id, struct rdma_cm_event *event)
 	isert_dbg("cma_id: %p, portal: %p\n",
 		 cma_id, cma_id->context);

-	isert_conn = kzalloc(sizeof(struct isert_conn), GFP_KERNEL);
+	isert_conn = kzalloc_obj(struct isert_conn, GFP_KERNEL);
 	if (!isert_conn)
 		return -ENOMEM;

@@ -2269,7 +2268,7 @@ isert_setup_np(struct iscsi_np *np,
 	struct rdma_cm_id *isert_lid;
 	int ret;

-	isert_np = kzalloc(sizeof(struct isert_np), GFP_KERNEL);
+	isert_np = kzalloc_obj(struct isert_np, GFP_KERNEL);
 	if (!isert_np)
 		return -ENOMEM;

diff --git a/drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.c b/drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.c
index 31cd361416ac..6d3dbf45e9f5 100644
--- a/drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.c
+++ b/drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.c
@@ -238,7 +238,7 @@ int opa_vnic_update_mac_tbl(struct opa_vnic_adapter *adapter,
 		if (!memcmp(mac_addr, empty_mac, ARRAY_SIZE(empty_mac)))
 			continue;

-		node = kzalloc(sizeof(*node), GFP_KERNEL);
+		node = kzalloc_obj(*node, GFP_KERNEL);
 		if (!node) {
 			rc = -ENOMEM;
 			goto updt_done;
@@ -265,7 +265,7 @@ int opa_vnic_update_mac_tbl(struct opa_vnic_adapter *adapter,
 		    (node->index < (loffset + lnum_entries)))
 			continue;

-		new_node = kzalloc(sizeof(*new_node), GFP_KERNEL);
+		new_node = kzalloc_obj(*new_node, GFP_KERNEL);
 		if (!new_node) {
 			rc = -ENOMEM;
 			goto updt_done;
diff --git a/drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c b/drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c
index 071f35711468..6d5f642ff3d3 100644
--- a/drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c
+++ b/drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c
@@ -337,7 +337,7 @@ struct opa_vnic_adapter *opa_vnic_add_netdev(struct ib_device *ibdev,
 		return ERR_CAST(netdev);

 	rn = netdev_priv(netdev);
-	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(*adapter, GFP_KERNEL);
 	if (!adapter) {
 		rc = -ENOMEM;
 		goto adapter_err;
diff --git a/drivers/infiniband/ulp/rtrs/rtrs-clt.c b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
index 59e30640f94a..67405a19ea10 100644
--- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c
+++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
@@ -1364,9 +1364,8 @@ static int alloc_path_reqs(struct rtrs_clt_path *clt_path)
 	enum ib_mr_type mr_type;
 	int i, err = -ENOMEM;

-	clt_path->reqs = kcalloc(clt_path->queue_depth,
-				 sizeof(*clt_path->reqs),
-				 GFP_KERNEL);
+	clt_path->reqs = kzalloc_objs(*clt_path->reqs, clt_path->queue_depth,
+				      GFP_KERNEL);
 	if (!clt_path->reqs)
 		return -ENOMEM;

@@ -1384,7 +1383,7 @@ static int alloc_path_reqs(struct rtrs_clt_path *clt_path)
 		if (!req->iu)
 			goto out;

-		req->sge = kcalloc(2, sizeof(*req->sge), GFP_KERNEL);
+		req->sge = kzalloc_objs(*req->sge, 2, GFP_KERNEL);
 		if (!req->sge)
 			goto out;

@@ -1538,7 +1537,7 @@ static struct rtrs_clt_path *alloc_path(struct rtrs_clt_sess *clt,
 	int cpu;
 	size_t total_con;

-	clt_path = kzalloc(sizeof(*clt_path), GFP_KERNEL);
+	clt_path = kzalloc_obj(*clt_path, GFP_KERNEL);
 	if (!clt_path)
 		goto err;

@@ -1547,15 +1546,14 @@ static struct rtrs_clt_path *alloc_path(struct rtrs_clt_sess *clt,
 	 * +1: Extra connection for user messages
 	 */
 	total_con = con_num + nr_poll_queues + 1;
-	clt_path->s.con = kcalloc(total_con, sizeof(*clt_path->s.con),
-				  GFP_KERNEL);
+	clt_path->s.con = kzalloc_objs(*clt_path->s.con, total_con, GFP_KERNEL);
 	if (!clt_path->s.con)
 		goto err_free_path;

 	clt_path->s.con_num = total_con;
 	clt_path->s.irq_con_num = con_num + 1;

-	clt_path->stats = kzalloc(sizeof(*clt_path->stats), GFP_KERNEL);
+	clt_path->stats = kzalloc_obj(*clt_path->stats, GFP_KERNEL);
 	if (!clt_path->stats)
 		goto err_free_con;

@@ -1622,7 +1620,7 @@ static int create_con(struct rtrs_clt_path *clt_path, unsigned int cid)
 {
 	struct rtrs_clt_con *con;

-	con = kzalloc(sizeof(*con), GFP_KERNEL);
+	con = kzalloc_obj(*con, GFP_KERNEL);
 	if (!con)
 		return -ENOMEM;

@@ -1873,9 +1871,8 @@ static int rtrs_rdma_conn_established(struct rtrs_clt_con *con,
 		}

 		if (!clt_path->rbufs) {
-			clt_path->rbufs = kcalloc(queue_depth,
-						  sizeof(*clt_path->rbufs),
-						  GFP_KERNEL);
+			clt_path->rbufs = kzalloc_objs(*clt_path->rbufs,
+						       queue_depth, GFP_KERNEL);
 			if (!clt_path->rbufs)
 				return -ENOMEM;
 		}
@@ -2730,7 +2727,7 @@ static struct rtrs_clt_sess *alloc_clt(const char *sessname, size_t paths_num,
 	if (strlen(sessname) >= sizeof(clt->sessname))
 		return ERR_PTR(-EINVAL);

-	clt = kzalloc(sizeof(*clt), GFP_KERNEL);
+	clt = kzalloc_obj(*clt, GFP_KERNEL);
 	if (!clt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/infiniband/ulp/rtrs/rtrs-srv.c b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
index 2e09811a10b2..c66929b74805 100644
--- a/drivers/infiniband/ulp/rtrs/rtrs-srv.c
+++ b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
@@ -138,14 +138,13 @@ static int rtrs_srv_alloc_ops_ids(struct rtrs_srv_path *srv_path)
 	struct rtrs_srv_op *id;
 	int i, ret;

-	srv_path->ops_ids = kcalloc(srv->queue_depth,
-				    sizeof(*srv_path->ops_ids),
-				    GFP_KERNEL);
+	srv_path->ops_ids = kzalloc_objs(*srv_path->ops_ids, srv->queue_depth,
+					 GFP_KERNEL);
 	if (!srv_path->ops_ids)
 		goto err;

 	for (i = 0; i < srv->queue_depth; ++i) {
-		id = kzalloc(sizeof(*id), GFP_KERNEL);
+		id = kzalloc_obj(*id, GFP_KERNEL);
 		if (!id)
 			goto err;

@@ -589,7 +588,7 @@ static int map_cont_bufs(struct rtrs_srv_path *srv_path)
 		chunks_per_mr = DIV_ROUND_UP(srv->queue_depth, mrs_num);
 	}

-	srv_path->mrs = kcalloc(mrs_num, sizeof(*srv_path->mrs), GFP_KERNEL);
+	srv_path->mrs = kzalloc_objs(*srv_path->mrs, mrs_num, GFP_KERNEL);
 	if (!srv_path->mrs)
 		return -ENOMEM;

@@ -837,7 +836,7 @@ static int process_info_req(struct rtrs_srv_con *con,
 	strscpy(srv_path->s.sessname, msg->pathname,
 		sizeof(srv_path->s.sessname));

-	rwr = kcalloc(srv_path->mrs_num, sizeof(*rwr), GFP_KERNEL);
+	rwr = kzalloc_objs(*rwr, srv_path->mrs_num, GFP_KERNEL);
 	if (!rwr)
 		return -ENOMEM;

@@ -1436,7 +1435,7 @@ static struct rtrs_srv_sess *get_or_create_srv(struct rtrs_srv_ctx *ctx,
 	}

 	/* need to allocate a new srv */
-	srv = kzalloc(sizeof(*srv), GFP_KERNEL);
+	srv = kzalloc_obj(*srv, GFP_KERNEL);
 	if  (!srv)
 		return ERR_PTR(-ENOMEM);

@@ -1449,8 +1448,7 @@ static struct rtrs_srv_sess *get_or_create_srv(struct rtrs_srv_ctx *ctx,
 	device_initialize(&srv->dev);
 	srv->dev.release = rtrs_srv_dev_release;

-	srv->chunks = kcalloc(srv->queue_depth, sizeof(*srv->chunks),
-			      GFP_KERNEL);
+	srv->chunks = kzalloc_objs(*srv->chunks, srv->queue_depth, GFP_KERNEL);
 	if (!srv->chunks)
 		goto err_free_srv;

@@ -1715,7 +1713,7 @@ static int create_con(struct rtrs_srv_path *srv_path,
 	u32 cq_num, max_send_wr, max_recv_wr, wr_limit;
 	int err, cq_vector;

-	con = kzalloc(sizeof(*con), GFP_KERNEL);
+	con = kzalloc_obj(*con, GFP_KERNEL);
 	if (!con) {
 		err = -ENOMEM;
 		goto err;
@@ -1808,11 +1806,11 @@ static struct rtrs_srv_path *__alloc_path(struct rtrs_srv_sess *srv,
 		err = -EEXIST;
 		goto err;
 	}
-	srv_path = kzalloc(sizeof(*srv_path), GFP_KERNEL);
+	srv_path = kzalloc_obj(*srv_path, GFP_KERNEL);
 	if (!srv_path)
 		goto err;

-	srv_path->stats = kzalloc(sizeof(*srv_path->stats), GFP_KERNEL);
+	srv_path->stats = kzalloc_obj(*srv_path->stats, GFP_KERNEL);
 	if (!srv_path->stats)
 		goto err_free_sess;

@@ -1822,14 +1820,12 @@ static struct rtrs_srv_path *__alloc_path(struct rtrs_srv_sess *srv,

 	srv_path->stats->srv_path = srv_path;

-	srv_path->dma_addr = kcalloc(srv->queue_depth,
-				     sizeof(*srv_path->dma_addr),
-				     GFP_KERNEL);
+	srv_path->dma_addr = kzalloc_objs(*srv_path->dma_addr, srv->queue_depth,
+					  GFP_KERNEL);
 	if (!srv_path->dma_addr)
 		goto err_free_percpu;

-	srv_path->s.con = kcalloc(con_num, sizeof(*srv_path->s.con),
-				  GFP_KERNEL);
+	srv_path->s.con = kzalloc_objs(*srv_path->s.con, con_num, GFP_KERNEL);
 	if (!srv_path->s.con)
 		goto err_free_dma_addr;

@@ -2162,7 +2158,7 @@ static struct rtrs_srv_ctx *alloc_srv_ctx(struct rtrs_srv_ops *ops)
 {
 	struct rtrs_srv_ctx *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

diff --git a/drivers/infiniband/ulp/rtrs/rtrs.c b/drivers/infiniband/ulp/rtrs/rtrs.c
index bc1208ae8216..f316cbe5e62c 100644
--- a/drivers/infiniband/ulp/rtrs/rtrs.c
+++ b/drivers/infiniband/ulp/rtrs/rtrs.c
@@ -26,7 +26,7 @@ struct rtrs_iu *rtrs_iu_alloc(u32 iu_num, size_t size, gfp_t gfp_mask,
 	struct rtrs_iu *ius, *iu;
 	int i;

-	ius = kcalloc(iu_num, sizeof(*ius), gfp_mask);
+	ius = kzalloc_objs(*ius, iu_num, gfp_mask);
 	if (!ius)
 		return NULL;
 	for (i = 0; i < iu_num; i++) {
@@ -618,7 +618,7 @@ rtrs_ib_dev_find_or_add(struct ib_device *ib_dev,
 			goto out_unlock;
 	}
 	mutex_unlock(&pool->mutex);
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto out_err;

diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 510f16004ecd..e1dfc097f774 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -225,7 +225,7 @@ static struct srp_iu *srp_alloc_iu(struct srp_host *host, size_t size,
 {
 	struct srp_iu *iu;

-	iu = kmalloc(sizeof *iu, gfp_mask);
+	iu = kmalloc_obj(*iu, gfp_mask);
 	if (!iu)
 		goto out;

@@ -274,7 +274,7 @@ static int srp_init_ib_qp(struct srp_target_port *target,
 	struct ib_qp_attr *attr;
 	int ret;

-	attr = kmalloc(sizeof *attr, GFP_KERNEL);
+	attr = kmalloc_obj(*attr, GFP_KERNEL);
 	if (!attr)
 		return -ENOMEM;

@@ -418,7 +418,7 @@ static struct srp_fr_pool *srp_create_fr_pool(struct ib_device *device,
 	if (pool_size <= 0)
 		goto err;
 	ret = -ENOMEM;
-	pool = kzalloc(struct_size(pool, desc, pool_size), GFP_KERNEL);
+	pool = kzalloc_flex(*pool, desc, pool_size, GFP_KERNEL);
 	if (!pool)
 		goto err;
 	pool->size = pool_size;
@@ -533,7 +533,7 @@ static int srp_create_ch_ib(struct srp_rdma_ch *ch)
 	const int m = 1 + dev->use_fast_reg * target->mr_per_cmd * 2;
 	int ret;

-	init_attr = kzalloc(sizeof *init_attr, GFP_KERNEL);
+	init_attr = kzalloc_obj(*init_attr, GFP_KERNEL);
 	if (!init_attr)
 		return -ENOMEM;

@@ -806,7 +806,7 @@ static int srp_send_req(struct srp_rdma_ch *ch, uint32_t max_iu_len,
 	char *ipi, *tpi;
 	int status;

-	req = kzalloc(sizeof *req, GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -2257,12 +2257,10 @@ static int srp_alloc_iu_bufs(struct srp_rdma_ch *ch)
 	struct srp_target_port *target = ch->target;
 	int i;

-	ch->rx_ring = kcalloc(target->queue_size, sizeof(*ch->rx_ring),
-			      GFP_KERNEL);
+	ch->rx_ring = kzalloc_objs(*ch->rx_ring, target->queue_size, GFP_KERNEL);
 	if (!ch->rx_ring)
 		goto err_no_ring;
-	ch->tx_ring = kcalloc(target->queue_size, sizeof(*ch->tx_ring),
-			      GFP_KERNEL);
+	ch->tx_ring = kzalloc_objs(*ch->tx_ring, target->queue_size, GFP_KERNEL);
 	if (!ch->tx_ring)
 		goto err_no_ring;

@@ -2387,7 +2385,7 @@ static void srp_cm_rep_handler(struct ib_cm_id *cm_id,

 	if (!target->using_rdma_cm) {
 		ret = -ENOMEM;
-		qp_attr = kmalloc(sizeof(*qp_attr), GFP_KERNEL);
+		qp_attr = kmalloc_obj(*qp_attr, GFP_KERNEL);
 		if (!qp_attr)
 			goto error;

@@ -3824,8 +3822,7 @@ static ssize_t add_target_store(struct device *dev,
 				num_online_cpus());
 	}

-	target->ch = kcalloc(target->ch_count, sizeof(*target->ch),
-			     GFP_KERNEL);
+	target->ch = kzalloc_objs(*target->ch, target->ch_count, GFP_KERNEL);
 	if (!target->ch)
 		goto out;

@@ -3960,7 +3957,7 @@ static struct srp_host *srp_add_port(struct srp_device *device, u32 port)
 {
 	struct srp_host *host;

-	host = kzalloc(sizeof *host, GFP_KERNEL);
+	host = kzalloc_obj(*host, GFP_KERNEL);
 	if (!host)
 		return NULL;

@@ -4010,7 +4007,7 @@ static int srp_add_one(struct ib_device *device)
 	u64 max_pages_per_mr;
 	unsigned int flags = 0;

-	srp_dev = kzalloc(sizeof(*srp_dev), GFP_KERNEL);
+	srp_dev = kzalloc_obj(*srp_dev, GFP_KERNEL);
 	if (!srp_dev)
 		return -ENOMEM;

diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
index e314e6a84d96..6e371b264054 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -127,7 +127,7 @@ static struct kmem_cache *srpt_cache_get(unsigned int object_size)
 		return e->c;
 	}
 	snprintf(name, sizeof(name), "srpt-%u", object_size);
-	e = kmalloc(sizeof(*e), GFP_KERNEL);
+	e = kmalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return NULL;
 	refcount_set(&e->ref, 1);
@@ -790,7 +790,7 @@ static struct srpt_ioctx **srpt_alloc_ioctx_ring(struct srpt_device *sdev,
 	WARN_ON(ioctx_size != sizeof(struct srpt_recv_ioctx) &&
 		ioctx_size != sizeof(struct srpt_send_ioctx));

-	ring = kvmalloc_array(ring_size, sizeof(ring[0]), GFP_KERNEL);
+	ring = kvmalloc_objs(ring[0], ring_size, GFP_KERNEL);
 	if (!ring)
 		goto out;
 	for (i = 0; i < ring_size; ++i) {
@@ -965,8 +965,8 @@ static int srpt_alloc_rw_ctxs(struct srpt_send_ioctx *ioctx,
 	if (nbufs == 1) {
 		ioctx->rw_ctxs = &ioctx->s_rw_ctx;
 	} else {
-		ioctx->rw_ctxs = kmalloc_array(nbufs, sizeof(*ioctx->rw_ctxs),
-			GFP_KERNEL);
+		ioctx->rw_ctxs = kmalloc_objs(*ioctx->rw_ctxs, nbufs,
+					      GFP_KERNEL);
 		if (!ioctx->rw_ctxs)
 			return -ENOMEM;
 	}
@@ -1181,7 +1181,7 @@ static int srpt_init_ch_qp(struct srpt_rdma_ch *ch, struct ib_qp *qp)

 	WARN_ON_ONCE(ch->using_rdma_cm);

-	attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_obj(*attr, GFP_KERNEL);
 	if (!attr)
 		return -ENOMEM;

@@ -1857,7 +1857,7 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch)
 	WARN_ON(ch->rq_size < 1);

 	ret = -ENOMEM;
-	qp_init = kzalloc(sizeof(*qp_init), GFP_KERNEL);
+	qp_init = kzalloc_obj(*qp_init, GFP_KERNEL);
 	if (!qp_init)
 		goto out;

@@ -2089,7 +2089,7 @@ static struct srpt_nexus *srpt_get_nexus(struct srpt_port *sport,

 		if (nexus)
 			break;
-		tmp_nexus = kzalloc(sizeof(*nexus), GFP_KERNEL);
+		tmp_nexus = kzalloc_obj(*nexus, GFP_KERNEL);
 		if (!tmp_nexus) {
 			nexus = ERR_PTR(-ENOMEM);
 			break;
@@ -2241,9 +2241,9 @@ static int srpt_cm_req_recv(struct srpt_device *const sdev,
 	}

 	ret = -ENOMEM;
-	rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
-	rej = kzalloc(sizeof(*rej), GFP_KERNEL);
-	rep_param = kzalloc(sizeof(*rep_param), GFP_KERNEL);
+	rsp = kzalloc_obj(*rsp, GFP_KERNEL);
+	rej = kzalloc_obj(*rej, GFP_KERNEL);
+	rep_param = kzalloc_obj(*rep_param, GFP_KERNEL);
 	if (!rsp || !rej || !rep_param)
 		goto out;

@@ -2273,7 +2273,7 @@ static int srpt_cm_req_recv(struct srpt_device *const sdev,
 	}

 	ret = -ENOMEM;
-	ch = kzalloc(sizeof(*ch), GFP_KERNEL);
+	ch = kzalloc_obj(*ch, GFP_KERNEL);
 	if (!ch) {
 		rej->reason = cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES);
 		pr_err("rejected SRP_LOGIN_REQ because out of memory.\n");
@@ -3210,8 +3210,7 @@ static int srpt_add_one(struct ib_device *device)

 	pr_debug("device = %p\n", device);

-	sdev = kzalloc(struct_size(sdev, port, device->phys_port_cnt),
-		       GFP_KERNEL);
+	sdev = kzalloc_flex(*sdev, port, device->phys_port_cnt, GFP_KERNEL);
 	if (!sdev)
 		return -ENOMEM;

@@ -3790,7 +3789,7 @@ static struct se_portal_group *srpt_make_tpg(struct se_wwn *wwn,
 	struct srpt_tpg *stpg;
 	int res = -ENOMEM;

-	stpg = kzalloc(sizeof(*stpg), GFP_KERNEL);
+	stpg = kzalloc_obj(*stpg, GFP_KERNEL);
 	if (!stpg)
 		return ERR_PTR(res);
 	stpg->sport_id = sport_id;
@@ -3847,7 +3846,7 @@ static struct se_wwn *srpt_make_tport(struct target_fabric_configfs *tf,
 		WARN_ON_ONCE(true);
 		return &(*papi.port_id)->wwn;
 	}
-	port_id = kzalloc(sizeof(*port_id), GFP_KERNEL);
+	port_id = kzalloc_obj(*port_id, GFP_KERNEL);
 	if (!port_id) {
 		srpt_sdev_put(sport->sdev);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/input/apm-power.c b/drivers/input/apm-power.c
index 70a9e1dfba33..211ab2c0793a 100644
--- a/drivers/input/apm-power.c
+++ b/drivers/input/apm-power.c
@@ -52,7 +52,7 @@ static int apmpower_connect(struct input_handler *handler,
 	struct input_handle *handle;
 	int error;

-	handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
+	handle = kzalloc_obj(struct input_handle, GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index 90ff6be85cf4..884b525e799c 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -465,7 +465,7 @@ static int evdev_open(struct inode *inode, struct file *file)
 	struct evdev_client *client;
 	int error;

-	client = kvzalloc(struct_size(client, buffer, bufsize), GFP_KERNEL);
+	client = kvzalloc_flex(*client, buffer, bufsize, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

@@ -1346,7 +1346,7 @@ static int evdev_connect(struct input_handler *handler, struct input_dev *dev,
 		return error;
 	}

-	evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL);
+	evdev = kzalloc_obj(struct evdev, GFP_KERNEL);
 	if (!evdev) {
 		error = -ENOMEM;
 		goto err_free_minor;
diff --git a/drivers/input/ff-core.c b/drivers/input/ff-core.c
index 66f7ffe8c7e0..d6e2c3017435 100644
--- a/drivers/input/ff-core.c
+++ b/drivers/input/ff-core.c
@@ -303,12 +303,11 @@ int input_ff_create(struct input_dev *dev, unsigned int max_effects)
 	}

 	struct ff_device *ff __free(kfree) =
-		kzalloc(struct_size(ff, effect_owners, max_effects),
-			GFP_KERNEL);
+		kzalloc_flex(*ff, effect_owners, max_effects, GFP_KERNEL);
 	if (!ff)
 		return -ENOMEM;

-	ff->effects = kcalloc(max_effects, sizeof(*ff->effects), GFP_KERNEL);
+	ff->effects = kzalloc_objs(*ff->effects, max_effects, GFP_KERNEL);
 	if (!ff->effects)
 		return -ENOMEM;

diff --git a/drivers/input/ff-memless.c b/drivers/input/ff-memless.c
index e0c1c61aae71..e018ea328dda 100644
--- a/drivers/input/ff-memless.c
+++ b/drivers/input/ff-memless.c
@@ -508,7 +508,7 @@ int input_ff_create_memless(struct input_dev *dev, void *data,
 	int error;
 	int i;

-	struct ml_device *ml __free(kfree) = kzalloc(sizeof(*ml), GFP_KERNEL);
+	struct ml_device *ml __free(kfree) = kzalloc_obj(*ml, GFP_KERNEL);
 	if (!ml)
 		return -ENOMEM;

diff --git a/drivers/input/gameport/emu10k1-gp.c b/drivers/input/gameport/emu10k1-gp.c
index 4f4583048f24..cbb67f97d0ca 100644
--- a/drivers/input/gameport/emu10k1-gp.c
+++ b/drivers/input/gameport/emu10k1-gp.c
@@ -43,7 +43,7 @@ static int emu_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	struct gameport *port;
 	int error;

-	emu = kzalloc(sizeof(*emu), GFP_KERNEL);
+	emu = kzalloc_obj(*emu, GFP_KERNEL);
 	port = gameport_allocate_port();
 	if (!emu || !port) {
 		printk(KERN_ERR "emu10k1-gp: Memory allocation failed\n");
diff --git a/drivers/input/gameport/fm801-gp.c b/drivers/input/gameport/fm801-gp.c
index 7ae5009385cc..f5b1a683d1b4 100644
--- a/drivers/input/gameport/fm801-gp.c
+++ b/drivers/input/gameport/fm801-gp.c
@@ -68,7 +68,7 @@ static int fm801_gp_probe(struct pci_dev *pci, const struct pci_device_id *id)
 	struct gameport *port;
 	int error;

-	gp = kzalloc(sizeof(*gp), GFP_KERNEL);
+	gp = kzalloc_obj(*gp, GFP_KERNEL);
 	port = gameport_allocate_port();
 	if (!gp || !port) {
 		printk(KERN_ERR "fm801-gp: Memory allocation failed\n");
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
index f4f12dd00fff..9707b155bc94 100644
--- a/drivers/input/gameport/gameport.c
+++ b/drivers/input/gameport/gameport.c
@@ -374,7 +374,7 @@ static int gameport_queue_event(void *object, struct module *owner,
 		}
 	}

-	event = kmalloc(sizeof(*event), GFP_ATOMIC);
+	event = kmalloc_obj(*event, GFP_ATOMIC);
 	if (!event) {
 		pr_err("Not enough memory to queue event %d\n", event_type);
 		retval = -ENOMEM;
diff --git a/drivers/input/gameport/ns558.c b/drivers/input/gameport/ns558.c
index 880e714b49bc..cb04b49a82be 100644
--- a/drivers/input/gameport/ns558.c
+++ b/drivers/input/gameport/ns558.c
@@ -120,7 +120,7 @@ static int ns558_isa_probe(int io)
 			return -EBUSY;
 	}

-	ns558 = kzalloc(sizeof(*ns558), GFP_KERNEL);
+	ns558 = kzalloc_obj(*ns558, GFP_KERNEL);
 	port = gameport_allocate_port();
 	if (!ns558 || !port) {
 		printk(KERN_ERR "ns558: Memory allocation failed.\n");
@@ -192,7 +192,7 @@ static int ns558_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *did)
 	if (!request_region(ioport, iolen, "ns558-pnp"))
 		return -EBUSY;

-	ns558 = kzalloc(sizeof(*ns558), GFP_KERNEL);
+	ns558 = kzalloc_obj(*ns558, GFP_KERNEL);
 	port = gameport_allocate_port();
 	if (!ns558 || !port) {
 		printk(KERN_ERR "ns558: Memory allocation failed\n");
diff --git a/drivers/input/input-leds.c b/drivers/input/input-leds.c
index 6bbf3806ea37..f0fa83ab9339 100644
--- a/drivers/input/input-leds.c
+++ b/drivers/input/input-leds.c
@@ -101,7 +101,7 @@ static int input_leds_connect(struct input_handler *handler,
 	if (!num_leds)
 		return -ENXIO;

-	leds = kzalloc(struct_size(leds, leds, num_leds), GFP_KERNEL);
+	leds = kzalloc_flex(*leds, leds, num_leds, GFP_KERNEL);
 	if (!leds)
 		return -ENOMEM;

diff --git a/drivers/input/input-mt.c b/drivers/input/input-mt.c
index 09f518897d4a..0d4043797e4c 100644
--- a/drivers/input/input-mt.c
+++ b/drivers/input/input-mt.c
@@ -50,7 +50,7 @@ int input_mt_init_slots(struct input_dev *dev, unsigned int num_slots,
 		return -EINVAL;

 	struct input_mt *mt __free(kfree) =
-			kzalloc(struct_size(mt, slots, num_slots), GFP_KERNEL);
+			kzalloc_flex(*mt, slots, num_slots, GFP_KERNEL);
 	if (!mt)
 		return -ENOMEM;

@@ -84,7 +84,7 @@ int input_mt_init_slots(struct input_dev *dev, unsigned int num_slots,
 		__set_bit(INPUT_PROP_SEMI_MT, dev->propbit);
 	if (flags & INPUT_MT_TRACK) {
 		unsigned int n2 = num_slots * num_slots;
-		mt->red = kcalloc(n2, sizeof(*mt->red), GFP_KERNEL);
+		mt->red = kzalloc_objs(*mt->red, n2, GFP_KERNEL);
 		if (!mt->red)
 			return -ENOMEM;
 	}
diff --git a/drivers/input/input-poller.c b/drivers/input/input-poller.c
index 1ce83d6521bb..fa0c7089f3bb 100644
--- a/drivers/input/input-poller.c
+++ b/drivers/input/input-poller.c
@@ -71,7 +71,7 @@ int input_setup_polling(struct input_dev *dev,
 {
 	struct input_dev_poller *poller;

-	poller = kzalloc(sizeof(*poller), GFP_KERNEL);
+	poller = kzalloc_obj(*poller, GFP_KERNEL);
 	if (!poller) {
 		/*
 		 * We want to show message even though kzalloc() may have
diff --git a/drivers/input/input.c b/drivers/input/input.c
index a500e1e276c2..9486a9ea1541 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -439,7 +439,7 @@ void input_alloc_absinfo(struct input_dev *dev)
 	if (dev->absinfo)
 		return;

-	dev->absinfo = kcalloc(ABS_CNT, sizeof(*dev->absinfo), GFP_KERNEL);
+	dev->absinfo = kzalloc_objs(*dev->absinfo, ABS_CNT, GFP_KERNEL);
 	if (!dev->absinfo) {
 		dev_err(dev->dev.parent ?: &dev->dev,
 			"%s: unable to allocate memory\n", __func__);
@@ -1887,7 +1887,7 @@ struct input_dev *input_allocate_device(void)
 	static atomic_t input_no = ATOMIC_INIT(-1);
 	struct input_dev *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

@@ -1897,7 +1897,7 @@ struct input_dev *input_allocate_device(void)
 	 * when we register the device.
 	 */
 	dev->max_vals = 10;
-	dev->vals = kcalloc(dev->max_vals, sizeof(*dev->vals), GFP_KERNEL);
+	dev->vals = kzalloc_objs(*dev->vals, dev->max_vals, GFP_KERNEL);
 	if (!dev->vals) {
 		kfree(dev);
 		return NULL;
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c
index ba2b17288bcd..5c773f94646f 100644
--- a/drivers/input/joydev.c
+++ b/drivers/input/joydev.c
@@ -261,7 +261,7 @@ static int joydev_open(struct inode *inode, struct file *file)
 	struct joydev_client *client;
 	int error;

-	client = kzalloc(sizeof(struct joydev_client), GFP_KERNEL);
+	client = kzalloc_obj(struct joydev_client, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

@@ -921,7 +921,7 @@ static int joydev_connect(struct input_handler *handler, struct input_dev *dev,
 		return error;
 	}

-	joydev = kzalloc(sizeof(struct joydev), GFP_KERNEL);
+	joydev = kzalloc_obj(struct joydev, GFP_KERNEL);
 	if (!joydev) {
 		error = -ENOMEM;
 		goto err_free_minor;
diff --git a/drivers/input/joystick/a3d.c b/drivers/input/joystick/a3d.c
index 15182f16ed19..07bd0083d654 100644
--- a/drivers/input/joystick/a3d.c
+++ b/drivers/input/joystick/a3d.c
@@ -249,7 +249,7 @@ static int a3d_connect(struct gameport *gameport, struct gameport_driver *drv)
 	int i;
 	int err;

-	a3d = kzalloc(sizeof(*a3d), GFP_KERNEL);
+	a3d = kzalloc_obj(*a3d, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!a3d || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/joystick/adi.c b/drivers/input/joystick/adi.c
index 963250de24b7..fa7d0b80e7b7 100644
--- a/drivers/input/joystick/adi.c
+++ b/drivers/input/joystick/adi.c
@@ -456,7 +456,7 @@ static int adi_connect(struct gameport *gameport, struct gameport_driver *drv)
 	int i;
 	int err;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/drivers/input/joystick/analog.c b/drivers/input/joystick/analog.c
index c709b58d770a..79ed2363b8e5 100644
--- a/drivers/input/joystick/analog.c
+++ b/drivers/input/joystick/analog.c
@@ -582,7 +582,7 @@ static int analog_connect(struct gameport *gameport, struct gameport_driver *drv
 	int i;
 	int err;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/drivers/input/joystick/as5011.c b/drivers/input/joystick/as5011.c
index 49a0dfbbeb49..2d1a23866e64 100644
--- a/drivers/input/joystick/as5011.c
+++ b/drivers/input/joystick/as5011.c
@@ -237,7 +237,7 @@ static int as5011_probe(struct i2c_client *client)
 		return -ENODEV;
 	}

-	as5011 = kmalloc(sizeof(*as5011), GFP_KERNEL);
+	as5011 = kmalloc_obj(*as5011, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!as5011 || !input_dev) {
 		dev_err(&client->dev,
diff --git a/drivers/input/joystick/cobra.c b/drivers/input/joystick/cobra.c
index 5a0ea3ad5efa..781cec6b2b24 100644
--- a/drivers/input/joystick/cobra.c
+++ b/drivers/input/joystick/cobra.c
@@ -141,7 +141,7 @@ static int cobra_connect(struct gameport *gameport, struct gameport_driver *drv)
 	int i, j;
 	int err;

-	cobra = kzalloc(sizeof(*cobra), GFP_KERNEL);
+	cobra = kzalloc_obj(*cobra, GFP_KERNEL);
 	if (!cobra)
 		return -ENOMEM;

diff --git a/drivers/input/joystick/db9.c b/drivers/input/joystick/db9.c
index d5c67a927404..165096fc0a55 100644
--- a/drivers/input/joystick/db9.c
+++ b/drivers/input/joystick/db9.c
@@ -585,7 +585,7 @@ static void db9_attach(struct parport *pp)
 		return;
 	}

-	db9 = kzalloc(sizeof(*db9), GFP_KERNEL);
+	db9 = kzalloc_obj(*db9, GFP_KERNEL);
 	if (!db9)
 		goto err_unreg_pardev;

diff --git a/drivers/input/joystick/fsia6b.c b/drivers/input/joystick/fsia6b.c
index 7e3bc99d766f..0bd7d4bd562a 100644
--- a/drivers/input/joystick/fsia6b.c
+++ b/drivers/input/joystick/fsia6b.c
@@ -132,7 +132,7 @@ static int fsia6b_serio_connect(struct serio *serio, struct serio_driver *drv)
 	int i, j;
 	int sw_id = 0;

-	fsia6b = kzalloc(sizeof(*fsia6b), GFP_KERNEL);
+	fsia6b = kzalloc_obj(*fsia6b, GFP_KERNEL);
 	if (!fsia6b)
 		return -ENOMEM;

diff --git a/drivers/input/joystick/gamecon.c b/drivers/input/joystick/gamecon.c
index ae95cb3d0ae9..03d0e491b688 100644
--- a/drivers/input/joystick/gamecon.c
+++ b/drivers/input/joystick/gamecon.c
@@ -291,7 +291,7 @@ static int gc_n64_init_ff(struct input_dev *dev, int i)
 	struct gc_subdev *sdev;
 	int err;

-	sdev = kmalloc(sizeof(*sdev), GFP_KERNEL);
+	sdev = kmalloc_obj(*sdev, GFP_KERNEL);
 	if (!sdev)
 		return -ENOMEM;

@@ -948,7 +948,7 @@ static void gc_attach(struct parport *pp)
 		return;
 	}

-	gc = kzalloc(sizeof(*gc), GFP_KERNEL);
+	gc = kzalloc_obj(*gc, GFP_KERNEL);
 	if (!gc) {
 		pr_err("Not enough memory\n");
 		goto err_unreg_pardev;
diff --git a/drivers/input/joystick/gf2k.c b/drivers/input/joystick/gf2k.c
index e7ff7bdb1a3a..23dc98146ccd 100644
--- a/drivers/input/joystick/gf2k.c
+++ b/drivers/input/joystick/gf2k.c
@@ -222,7 +222,7 @@ static int gf2k_connect(struct gameport *gameport, struct gameport_driver *drv)
 	unsigned char data[GF2K_LENGTH];
 	int i, err;

-	gf2k = kzalloc(sizeof(*gf2k), GFP_KERNEL);
+	gf2k = kzalloc_obj(*gf2k, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!gf2k || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/joystick/grip.c b/drivers/input/joystick/grip.c
index f339ce2b7a33..f500a32d1ea7 100644
--- a/drivers/input/joystick/grip.c
+++ b/drivers/input/joystick/grip.c
@@ -284,7 +284,7 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv)
 	int i, j, t;
 	int err;

-	grip = kzalloc(sizeof(*grip), GFP_KERNEL);
+	grip = kzalloc_obj(*grip, GFP_KERNEL);
 	if (!grip)
 		return -ENOMEM;

diff --git a/drivers/input/joystick/grip_mp.c b/drivers/input/joystick/grip_mp.c
index 5eadb5a3ca37..7d90d8e5485b 100644
--- a/drivers/input/joystick/grip_mp.c
+++ b/drivers/input/joystick/grip_mp.c
@@ -632,7 +632,7 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv)
 	struct grip_mp *grip;
 	int err;

-	grip = kzalloc(sizeof(*grip), GFP_KERNEL);
+	grip = kzalloc_obj(*grip, GFP_KERNEL);
 	if (!grip)
 		return -ENOMEM;

diff --git a/drivers/input/joystick/guillemot.c b/drivers/input/joystick/guillemot.c
index 1c5a76f72239..eb7faaf3f020 100644
--- a/drivers/input/joystick/guillemot.c
+++ b/drivers/input/joystick/guillemot.c
@@ -163,7 +163,7 @@ static int guillemot_connect(struct gameport *gameport, struct gameport_driver *
 	int i, t;
 	int err;

-	guillemot = kzalloc(sizeof(*guillemot), GFP_KERNEL);
+	guillemot = kzalloc_obj(*guillemot, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!guillemot || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/joystick/iforce/iforce-serio.c b/drivers/input/joystick/iforce/iforce-serio.c
index 75b85c46dfa4..0ca2f9bfb17b 100644
--- a/drivers/input/joystick/iforce/iforce-serio.c
+++ b/drivers/input/joystick/iforce/iforce-serio.c
@@ -185,7 +185,7 @@ static int iforce_serio_connect(struct serio *serio, struct serio_driver *drv)
 	struct iforce_serio *iforce_serio;
 	int err;

-	iforce_serio = kzalloc(sizeof(*iforce_serio), GFP_KERNEL);
+	iforce_serio = kzalloc_obj(*iforce_serio, GFP_KERNEL);
 	if (!iforce_serio)
 		return -ENOMEM;

diff --git a/drivers/input/joystick/iforce/iforce-usb.c b/drivers/input/joystick/iforce/iforce-usb.c
index 1f00f76b0174..b41d0b962e3d 100644
--- a/drivers/input/joystick/iforce/iforce-usb.c
+++ b/drivers/input/joystick/iforce/iforce-usb.c
@@ -207,7 +207,7 @@ static int iforce_usb_probe(struct usb_interface *intf,
 	if (!usb_endpoint_is_int_out(epout))
 		return -ENODEV;

-	iforce_usb = kzalloc(sizeof(*iforce_usb), GFP_KERNEL);
+	iforce_usb = kzalloc_obj(*iforce_usb, GFP_KERNEL);
 	if (!iforce_usb)
 		goto fail;

diff --git a/drivers/input/joystick/interact.c b/drivers/input/joystick/interact.c
index 262f022e5695..88aa77d1fc36 100644
--- a/drivers/input/joystick/interact.c
+++ b/drivers/input/joystick/interact.c
@@ -192,7 +192,7 @@ static int interact_connect(struct gameport *gameport, struct gameport_driver *d
 	int i, t;
 	int err;

-	interact = kzalloc(sizeof(*interact), GFP_KERNEL);
+	interact = kzalloc_obj(*interact, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!interact || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/joystick/joydump.c b/drivers/input/joystick/joydump.c
index 865652a7821d..9feda59dccde 100644
--- a/drivers/input/joystick/joydump.c
+++ b/drivers/input/joystick/joydump.c
@@ -61,7 +61,7 @@ static int joydump_connect(struct gameport *gameport, struct gameport_driver *dr

 	timeout = gameport_time(gameport, 10000); /* 10 ms */

-	buf = kmalloc_array(BUF_SIZE, sizeof(struct joydump), GFP_KERNEL);
+	buf = kmalloc_objs(struct joydump, BUF_SIZE, GFP_KERNEL);
 	if (!buf) {
 		printk(KERN_INFO "joydump: no memory for testing\n");
 		goto jd_end;
diff --git a/drivers/input/joystick/magellan.c b/drivers/input/joystick/magellan.c
index 7622638e5bb8..3b7f5840caeb 100644
--- a/drivers/input/joystick/magellan.c
+++ b/drivers/input/joystick/magellan.c
@@ -132,7 +132,7 @@ static int magellan_connect(struct serio *serio, struct serio_driver *drv)
 	int err = -ENOMEM;
 	int i;

-	magellan = kzalloc(sizeof(*magellan), GFP_KERNEL);
+	magellan = kzalloc_obj(*magellan, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!magellan || !input_dev)
 		goto fail1;
diff --git a/drivers/input/joystick/maplecontrol.c b/drivers/input/joystick/maplecontrol.c
index 8b54f9b18e7c..2a811f302173 100644
--- a/drivers/input/joystick/maplecontrol.c
+++ b/drivers/input/joystick/maplecontrol.c
@@ -102,7 +102,7 @@ static int probe_maple_controller(struct device *dev)
 	struct input_dev *idev;
 	unsigned long data = be32_to_cpu(mdev->devinfo.function_data[0]);

-	pad = kzalloc(sizeof(*pad), GFP_KERNEL);
+	pad = kzalloc_obj(*pad, GFP_KERNEL);
 	idev = input_allocate_device();
 	if (!pad || !idev) {
 		error = -ENOMEM;
diff --git a/drivers/input/joystick/n64joy.c b/drivers/input/joystick/n64joy.c
index 94d2f4e96fe6..b4203825e9e6 100644
--- a/drivers/input/joystick/n64joy.c
+++ b/drivers/input/joystick/n64joy.c
@@ -243,7 +243,7 @@ static int __init n64joy_probe(struct platform_device *pdev)
 	int err = 0;
 	u32 i, j, found = 0;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
 	mutex_init(&priv->n64joy_mutex);
diff --git a/drivers/input/joystick/sidewinder.c b/drivers/input/joystick/sidewinder.c
index 3a5873e5fcb3..645c822638ad 100644
--- a/drivers/input/joystick/sidewinder.c
+++ b/drivers/input/joystick/sidewinder.c
@@ -578,7 +578,7 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)

 	comment[0] = 0;

-	sw = kzalloc(sizeof(*sw), GFP_KERNEL);
+	sw = kzalloc_obj(*sw, GFP_KERNEL);
 	buf = kmalloc(SW_LENGTH, GFP_KERNEL);
 	idbuf = kmalloc(SW_LENGTH, GFP_KERNEL);
 	if (!sw || !buf || !idbuf) {
diff --git a/drivers/input/joystick/spaceball.c b/drivers/input/joystick/spaceball.c
index 4f2221001a95..d562275aa4bc 100644
--- a/drivers/input/joystick/spaceball.c
+++ b/drivers/input/joystick/spaceball.c
@@ -199,7 +199,7 @@ static int spaceball_connect(struct serio *serio, struct serio_driver *drv)
 	if ((id = serio->id.id) > SPACEBALL_MAX_ID)
 		return -ENODEV;

-	spaceball = kmalloc(sizeof(*spaceball), GFP_KERNEL);
+	spaceball = kmalloc_obj(*spaceball, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!spaceball || !input_dev)
 		goto fail1;
diff --git a/drivers/input/joystick/spaceorb.c b/drivers/input/joystick/spaceorb.c
index 7250d74d62a1..3aee84c19a25 100644
--- a/drivers/input/joystick/spaceorb.c
+++ b/drivers/input/joystick/spaceorb.c
@@ -147,7 +147,7 @@ static int spaceorb_connect(struct serio *serio, struct serio_driver *drv)
 	int err = -ENOMEM;
 	int i;

-	spaceorb = kzalloc(sizeof(*spaceorb), GFP_KERNEL);
+	spaceorb = kzalloc_obj(*spaceorb, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!spaceorb || !input_dev)
 		goto fail1;
diff --git a/drivers/input/joystick/stinger.c b/drivers/input/joystick/stinger.c
index 1b24ea21aa30..81d4d1aa1752 100644
--- a/drivers/input/joystick/stinger.c
+++ b/drivers/input/joystick/stinger.c
@@ -118,7 +118,7 @@ static int stinger_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err = -ENOMEM;

-	stinger = kmalloc(sizeof(*stinger), GFP_KERNEL);
+	stinger = kmalloc_obj(*stinger, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!stinger || !input_dev)
 		goto fail1;
diff --git a/drivers/input/joystick/tmdc.c b/drivers/input/joystick/tmdc.c
index 514b1026e379..8d1367fdc400 100644
--- a/drivers/input/joystick/tmdc.c
+++ b/drivers/input/joystick/tmdc.c
@@ -264,7 +264,7 @@ static int tmdc_setup_port(struct tmdc *tmdc, int idx, unsigned char *data)
 	int i, j, b = 0;
 	int err;

-	tmdc->port[idx] = port = kzalloc(sizeof (struct tmdc_port), GFP_KERNEL);
+	tmdc->port[idx] = port = kzalloc_obj(struct tmdc_port, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!port || !input_dev) {
 		err = -ENOMEM;
@@ -348,7 +348,7 @@ static int tmdc_connect(struct gameport *gameport, struct gameport_driver *drv)
 	int i;
 	int err;

-	tmdc = kzalloc(sizeof(*tmdc), GFP_KERNEL);
+	tmdc = kzalloc_obj(*tmdc, GFP_KERNEL);
 	if (!tmdc)
 		return -ENOMEM;

diff --git a/drivers/input/joystick/turbografx.c b/drivers/input/joystick/turbografx.c
index 5f69aef01791..90cddb12efbb 100644
--- a/drivers/input/joystick/turbografx.c
+++ b/drivers/input/joystick/turbografx.c
@@ -170,7 +170,7 @@ static void tgfx_attach(struct parport *pp)
 		return;
 	}

-	tgfx = kzalloc(sizeof(*tgfx), GFP_KERNEL);
+	tgfx = kzalloc_obj(*tgfx, GFP_KERNEL);
 	if (!tgfx) {
 		printk(KERN_ERR "turbografx.c: Not enough memory\n");
 		goto err_unreg_pardev;
diff --git a/drivers/input/joystick/twidjoy.c b/drivers/input/joystick/twidjoy.c
index ab99d76e5d8d..e8f81d3a4d99 100644
--- a/drivers/input/joystick/twidjoy.c
+++ b/drivers/input/joystick/twidjoy.c
@@ -171,7 +171,7 @@ static int twidjoy_connect(struct serio *serio, struct serio_driver *drv)
 	int err = -ENOMEM;
 	int i;

-	twidjoy = kzalloc(sizeof(*twidjoy), GFP_KERNEL);
+	twidjoy = kzalloc_obj(*twidjoy, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!twidjoy || !input_dev)
 		goto fail1;
diff --git a/drivers/input/joystick/warrior.c b/drivers/input/joystick/warrior.c
index ebeab441e9ec..45027058a777 100644
--- a/drivers/input/joystick/warrior.c
+++ b/drivers/input/joystick/warrior.c
@@ -124,7 +124,7 @@ static int warrior_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err = -ENOMEM;

-	warrior = kzalloc(sizeof(*warrior), GFP_KERNEL);
+	warrior = kzalloc_obj(*warrior, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!warrior || !input_dev)
 		goto fail1;
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index 363d50949386..58ff39dee70c 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -1744,7 +1744,7 @@ static int xpad_led_probe(struct usb_xpad *xpad)
 	if (xpad->xtype != XTYPE_XBOX360 && xpad->xtype != XTYPE_XBOX360W)
 		return 0;

-	xpad->led = led = kzalloc(sizeof(*led), GFP_KERNEL);
+	xpad->led = led = kzalloc_obj(*led, GFP_KERNEL);
 	if (!led)
 		return -ENOMEM;

@@ -2077,7 +2077,7 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
 			break;
 	}

-	xpad = kzalloc(sizeof(*xpad), GFP_KERNEL);
+	xpad = kzalloc_obj(*xpad, GFP_KERNEL);
 	if (!xpad)
 		return -ENOMEM;

diff --git a/drivers/input/joystick/zhenhua.c b/drivers/input/joystick/zhenhua.c
index cc0e2a77ac5e..873e71fe6580 100644
--- a/drivers/input/joystick/zhenhua.c
+++ b/drivers/input/joystick/zhenhua.c
@@ -131,7 +131,7 @@ static int zhenhua_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err = -ENOMEM;

-	zhenhua = kzalloc(sizeof(*zhenhua), GFP_KERNEL);
+	zhenhua = kzalloc_obj(*zhenhua, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!zhenhua || !input_dev)
 		goto fail1;
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index 422e28ad1e8e..f149ed800a45 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -1277,7 +1277,7 @@ static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *dev;
 	int err = -ENOMEM;

-	atkbd = kzalloc(sizeof(*atkbd), GFP_KERNEL);
+	atkbd = kzalloc_obj(*atkbd, GFP_KERNEL);
 	dev = input_allocate_device();
 	if (!atkbd || !dev)
 		goto fail1;
diff --git a/drivers/input/keyboard/hil_kbd.c b/drivers/input/keyboard/hil_kbd.c
index 54afb38601b9..8f246865a5ee 100644
--- a/drivers/input/keyboard/hil_kbd.c
+++ b/drivers/input/keyboard/hil_kbd.c
@@ -447,7 +447,7 @@ static int hil_dev_connect(struct serio *serio, struct serio_driver *drv)
 	uint8_t did, *idd;
 	int error;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!dev || !input_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/keyboard/lkkbd.c b/drivers/input/keyboard/lkkbd.c
index 2f130f819363..f0daee8887cb 100644
--- a/drivers/input/keyboard/lkkbd.c
+++ b/drivers/input/keyboard/lkkbd.c
@@ -608,7 +608,7 @@ static int lkkbd_connect(struct serio *serio, struct serio_driver *drv)
 	int i;
 	int err;

-	lk = kzalloc(sizeof(*lk), GFP_KERNEL);
+	lk = kzalloc_obj(*lk, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!lk || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/keyboard/locomokbd.c b/drivers/input/keyboard/locomokbd.c
index 58d4f2096cf9..b6b9354b3354 100644
--- a/drivers/input/keyboard/locomokbd.c
+++ b/drivers/input/keyboard/locomokbd.c
@@ -224,7 +224,7 @@ static int locomokbd_probe(struct locomo_dev *dev)
 	struct input_dev *input_dev;
 	int i, err;

-	locomokbd = kzalloc(sizeof(*locomokbd), GFP_KERNEL);
+	locomokbd = kzalloc_obj(*locomokbd, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!locomokbd || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c
index 1a8f1fa53fbb..52dfdcab55f2 100644
--- a/drivers/input/keyboard/maple_keyb.c
+++ b/drivers/input/keyboard/maple_keyb.c
@@ -151,7 +151,7 @@ static int probe_maple_kbd(struct device *dev)
 	mdev = to_maple_dev(dev);
 	mdrv = to_maple_driver(dev->driver);

-	kbd = kzalloc(sizeof(*kbd), GFP_KERNEL);
+	kbd = kzalloc_obj(*kbd, GFP_KERNEL);
 	if (!kbd) {
 		error = -ENOMEM;
 		goto fail;
diff --git a/drivers/input/keyboard/newtonkbd.c b/drivers/input/keyboard/newtonkbd.c
index 71e0a3f830dd..ee142a2d7c84 100644
--- a/drivers/input/keyboard/newtonkbd.c
+++ b/drivers/input/keyboard/newtonkbd.c
@@ -68,7 +68,7 @@ static int nkbd_connect(struct serio *serio, struct serio_driver *drv)
 	int err = -ENOMEM;
 	int i;

-	nkbd = kzalloc(sizeof(*nkbd), GFP_KERNEL);
+	nkbd = kzalloc_obj(*nkbd, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!nkbd || !input_dev)
 		goto fail1;
diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c
index 9e13f3f70a81..8fd909407ec8 100644
--- a/drivers/input/keyboard/omap-keypad.c
+++ b/drivers/input/keyboard/omap-keypad.c
@@ -193,7 +193,7 @@ static int omap_kp_probe(struct platform_device *pdev)
 	row_shift = get_count_order(pdata->cols);
 	keycodemax = pdata->rows << row_shift;

-	omap_kp = kzalloc(struct_size(omap_kp, keymap, keycodemax), GFP_KERNEL);
+	omap_kp = kzalloc_flex(*omap_kp, keymap, keycodemax, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!omap_kp || !input_dev) {
 		kfree(omap_kp);
diff --git a/drivers/input/keyboard/sh_keysc.c b/drivers/input/keyboard/sh_keysc.c
index 159f41eedd41..7ad799efc539 100644
--- a/drivers/input/keyboard/sh_keysc.c
+++ b/drivers/input/keyboard/sh_keysc.c
@@ -184,7 +184,7 @@ static int sh_keysc_probe(struct platform_device *pdev)
 	if (irq < 0)
 		goto err0;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (priv == NULL) {
 		dev_err(&pdev->dev, "failed to allocate driver data\n");
 		error = -ENOMEM;
diff --git a/drivers/input/keyboard/stowaway.c b/drivers/input/keyboard/stowaway.c
index 7ef0b3f4f549..592801876291 100644
--- a/drivers/input/keyboard/stowaway.c
+++ b/drivers/input/keyboard/stowaway.c
@@ -72,7 +72,7 @@ static int skbd_connect(struct serio *serio, struct serio_driver *drv)
 	int err = -ENOMEM;
 	int i;

-	skbd = kzalloc(sizeof(*skbd), GFP_KERNEL);
+	skbd = kzalloc_obj(*skbd, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!skbd || !input_dev)
 		goto fail1;
diff --git a/drivers/input/keyboard/sunkbd.c b/drivers/input/keyboard/sunkbd.c
index 3299e1919b37..d2783e9a5583 100644
--- a/drivers/input/keyboard/sunkbd.c
+++ b/drivers/input/keyboard/sunkbd.c
@@ -262,7 +262,7 @@ static int sunkbd_connect(struct serio *serio, struct serio_driver *drv)
 	int err = -ENOMEM;
 	int i;

-	sunkbd = kzalloc(sizeof(*sunkbd), GFP_KERNEL);
+	sunkbd = kzalloc_obj(*sunkbd, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!sunkbd || !input_dev)
 		goto fail1;
diff --git a/drivers/input/keyboard/xtkbd.c b/drivers/input/keyboard/xtkbd.c
index befa713268ae..ce061bd76623 100644
--- a/drivers/input/keyboard/xtkbd.c
+++ b/drivers/input/keyboard/xtkbd.c
@@ -70,7 +70,7 @@ static int xtkbd_connect(struct serio *serio, struct serio_driver *drv)
 	int err = -ENOMEM;
 	int i;

-	xtkbd = kmalloc(sizeof(*xtkbd), GFP_KERNEL);
+	xtkbd = kmalloc_obj(*xtkbd, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!xtkbd || !input_dev)
 		goto fail1;
diff --git a/drivers/input/misc/88pm80x_onkey.c b/drivers/input/misc/88pm80x_onkey.c
index 9159b5fec129..32d2f4450b7c 100644
--- a/drivers/input/misc/88pm80x_onkey.c
+++ b/drivers/input/misc/88pm80x_onkey.c
@@ -57,7 +57,7 @@ static int pm80x_onkey_probe(struct platform_device *pdev)
 	struct pm80x_onkey_info *info;
 	int err;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/input/misc/ati_remote2.c b/drivers/input/misc/ati_remote2.c
index e84649af801d..faa03c0b8c92 100644
--- a/drivers/input/misc/ati_remote2.c
+++ b/drivers/input/misc/ati_remote2.c
@@ -772,7 +772,7 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d
 	if (alt->desc.bInterfaceNumber)
 		return -ENODEV;

-	ar2 = kzalloc(sizeof (struct ati_remote2), GFP_KERNEL);
+	ar2 = kzalloc_obj(struct ati_remote2, GFP_KERNEL);
 	if (!ar2)
 		return -ENOMEM;

diff --git a/drivers/input/misc/cm109.c b/drivers/input/misc/cm109.c
index 0cfe5d4a573c..3fbdd160fb2c 100644
--- a/drivers/input/misc/cm109.c
+++ b/drivers/input/misc/cm109.c
@@ -696,7 +696,7 @@ static int cm109_usb_probe(struct usb_interface *intf,
 	if (!usb_endpoint_is_int_in(endpoint))
 		return -ENODEV;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

@@ -721,7 +721,7 @@ static int cm109_usb_probe(struct usb_interface *intf,
 	if (!dev->ctl_data)
 		goto err_out;

-	dev->ctl_req = kmalloc(sizeof(*(dev->ctl_req)), GFP_KERNEL);
+	dev->ctl_req = kmalloc_obj(*(dev->ctl_req), GFP_KERNEL);
 	if (!dev->ctl_req)
 		goto err_out;

diff --git a/drivers/input/misc/cma3000_d0x.c b/drivers/input/misc/cma3000_d0x.c
index b4232b0a3957..b5047f74f632 100644
--- a/drivers/input/misc/cma3000_d0x.c
+++ b/drivers/input/misc/cma3000_d0x.c
@@ -285,7 +285,7 @@ struct cma3000_accl_data *cma3000_init(struct device *dev, int irq,
 		goto err_out;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!data || !input_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/misc/cs40l50-vibra.c b/drivers/input/misc/cs40l50-vibra.c
index 90410025bbae..e6c8c9d165d3 100644
--- a/drivers/input/misc/cs40l50-vibra.c
+++ b/drivers/input/misc/cs40l50-vibra.c
@@ -276,7 +276,7 @@ static void cs40l50_add_worker(struct work_struct *work)
 	/* Update effect if already uploaded, otherwise create new effect */
 	effect = cs40l50_find_effect(work_data->effect->id, &vib->effect_head);
 	if (!effect) {
-		effect = kzalloc(sizeof(*effect), GFP_KERNEL);
+		effect = kzalloc_obj(*effect, GFP_KERNEL);
 		if (!effect) {
 			error = -ENOMEM;
 			goto err_pm;
@@ -392,7 +392,7 @@ static int cs40l50_playback(struct input_dev *dev, int effect_id, int val)
 	struct cs40l50_vibra *vib = input_get_drvdata(dev);
 	struct cs40l50_work *work_data;

-	work_data = kzalloc(sizeof(*work_data), GFP_ATOMIC);
+	work_data = kzalloc_obj(*work_data, GFP_ATOMIC);
 	if (!work_data)
 		return -ENOMEM;

diff --git a/drivers/input/misc/da9052_onkey.c b/drivers/input/misc/da9052_onkey.c
index cc23625019e3..49112b3ff445 100644
--- a/drivers/input/misc/da9052_onkey.c
+++ b/drivers/input/misc/da9052_onkey.c
@@ -80,7 +80,7 @@ static int da9052_onkey_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}

-	onkey = kzalloc(sizeof(*onkey), GFP_KERNEL);
+	onkey = kzalloc_obj(*onkey, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!onkey || !input_dev) {
 		dev_err(&pdev->dev, "Failed to allocate memory\n");
diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c
index 4581f1c53644..52ad6e3a8112 100644
--- a/drivers/input/misc/ims-pcu.c
+++ b/drivers/input/misc/ims-pcu.c
@@ -286,7 +286,7 @@ static int ims_pcu_setup_gamepad(struct ims_pcu *pcu)
 	struct input_dev *input;
 	int error;

-	gamepad = kzalloc(sizeof(*gamepad), GFP_KERNEL);
+	gamepad = kzalloc_obj(*gamepad, GFP_KERNEL);
 	input = input_allocate_device();
 	if (!gamepad || !input) {
 		dev_err(pcu->dev,
@@ -1991,7 +1991,7 @@ static int ims_pcu_probe(struct usb_interface *intf,
 	struct ims_pcu *pcu;
 	int error;

-	pcu = kzalloc(sizeof(*pcu), GFP_KERNEL);
+	pcu = kzalloc_obj(*pcu, GFP_KERNEL);
 	if (!pcu)
 		return -ENOMEM;

diff --git a/drivers/input/misc/keyspan_remote.c b/drivers/input/misc/keyspan_remote.c
index bee4b1376491..219a7a92e5b6 100644
--- a/drivers/input/misc/keyspan_remote.c
+++ b/drivers/input/misc/keyspan_remote.c
@@ -453,7 +453,7 @@ static int keyspan_probe(struct usb_interface *interface, const struct usb_devic
 	if (!endpoint)
 		return -ENODEV;

-	remote = kzalloc(sizeof(*remote), GFP_KERNEL);
+	remote = kzalloc_obj(*remote, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!remote || !input_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/misc/max8997_haptic.c b/drivers/input/misc/max8997_haptic.c
index d5e051a25a74..290c03d8b972 100644
--- a/drivers/input/misc/max8997_haptic.c
+++ b/drivers/input/misc/max8997_haptic.c
@@ -247,7 +247,7 @@ static int max8997_haptic_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!chip || !input_dev) {
 		dev_err(&pdev->dev, "unable to allocate memory\n");
diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc13783-pwrbutton.c
index b83d762ae2e9..d75af824033a 100644
--- a/drivers/input/misc/mc13783-pwrbutton.c
+++ b/drivers/input/misc/mc13783-pwrbutton.c
@@ -108,7 +108,7 @@ static int mc13783_pwrbutton_probe(struct platform_device *pdev)
 		return -ENOMEM;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		err = -ENOMEM;
 		dev_dbg(&pdev->dev, "Can't allocate power button\n");
diff --git a/drivers/input/misc/palmas-pwrbutton.c b/drivers/input/misc/palmas-pwrbutton.c
index d9c5aae143dc..c1608cdee7f2 100644
--- a/drivers/input/misc/palmas-pwrbutton.c
+++ b/drivers/input/misc/palmas-pwrbutton.c
@@ -164,7 +164,7 @@ static int palmas_pwron_probe(struct platform_device *pdev)

 	palmas_pwron_params_ofinit(dev, &config);

-	pwron = kzalloc(sizeof(*pwron), GFP_KERNEL);
+	pwron = kzalloc_obj(*pwron, GFP_KERNEL);
 	if (!pwron)
 		return -ENOMEM;

diff --git a/drivers/input/misc/pcap_keys.c b/drivers/input/misc/pcap_keys.c
index fe43fd72ba7b..003bc50f83a6 100644
--- a/drivers/input/misc/pcap_keys.c
+++ b/drivers/input/misc/pcap_keys.c
@@ -49,7 +49,7 @@ static int pcap_keys_probe(struct platform_device *pdev)
 	struct pcap_keys *pcap_keys;
 	struct input_dev *input_dev;

-	pcap_keys = kmalloc(sizeof(*pcap_keys), GFP_KERNEL);
+	pcap_keys = kmalloc_obj(*pcap_keys, GFP_KERNEL);
 	if (!pcap_keys)
 		return err;

diff --git a/drivers/input/misc/pcf8574_keypad.c b/drivers/input/misc/pcf8574_keypad.c
index 3632cb206e34..bcef6a251237 100644
--- a/drivers/input/misc/pcf8574_keypad.c
+++ b/drivers/input/misc/pcf8574_keypad.c
@@ -91,7 +91,7 @@ static int pcf8574_kp_probe(struct i2c_client *client)
 		return -ENODEV;
 	}

-	lp = kzalloc(sizeof(*lp), GFP_KERNEL);
+	lp = kzalloc_obj(*lp, GFP_KERNEL);
 	if (!lp)
 		return -ENOMEM;

diff --git a/drivers/input/misc/powermate.c b/drivers/input/misc/powermate.c
index ecb92ee5ebbc..dfcab914d5f3 100644
--- a/drivers/input/misc/powermate.c
+++ b/drivers/input/misc/powermate.c
@@ -275,7 +275,7 @@ static int powermate_alloc_buffers(struct usb_device *udev, struct powermate_dev
 	if (!pm->data)
 		return -1;

-	pm->configcr = kmalloc(sizeof(*(pm->configcr)), GFP_KERNEL);
+	pm->configcr = kmalloc_obj(*(pm->configcr), GFP_KERNEL);
 	if (!pm->configcr)
 		return -ENOMEM;

@@ -313,7 +313,7 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i
 		0, interface->desc.bInterfaceNumber, NULL, 0,
 		USB_CTRL_SET_TIMEOUT);

-	pm = kzalloc(sizeof(*pm), GFP_KERNEL);
+	pm = kzalloc_obj(*pm, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!pm || !input_dev)
 		goto fail1;
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
index 13336a2fd49c..f34bda9b1a74 100644
--- a/drivers/input/misc/uinput.c
+++ b/drivers/input/misc/uinput.c
@@ -379,7 +379,7 @@ static int uinput_open(struct inode *inode, struct file *file)
 {
 	struct uinput_device *newdev;

-	newdev = kzalloc(sizeof(*newdev), GFP_KERNEL);
+	newdev = kzalloc_obj(*newdev, GFP_KERNEL);
 	if (!newdev)
 		return -ENOMEM;

diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
index 67f1c7364c95..b046df24a433 100644
--- a/drivers/input/misc/xen-kbdfront.c
+++ b/drivers/input/misc/xen-kbdfront.c
@@ -205,7 +205,7 @@ static int xenkbd_probe(struct xenbus_device *dev,
 	struct xenkbd_info *info;
 	struct input_dev *kbd, *ptr, *mtouch;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure");
 		return -ENOMEM;
diff --git a/drivers/input/misc/yealink.c b/drivers/input/misc/yealink.c
index 08dc53ae1b3c..10a85f60f6d1 100644
--- a/drivers/input/misc/yealink.c
+++ b/drivers/input/misc/yealink.c
@@ -831,7 +831,7 @@ static int usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
 	if (!usb_endpoint_is_int_in(endpoint))
 		return -ENODEV;

-	yld = kzalloc(sizeof(*yld), GFP_KERNEL);
+	yld = kzalloc_obj(*yld, GFP_KERNEL);
 	if (!yld)
 		return -ENOMEM;

@@ -854,7 +854,7 @@ static int usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
 	if (!yld->ctl_data)
 		return usb_cleanup(yld, -ENOMEM);

-	yld->ctl_req = kmalloc(sizeof(*(yld->ctl_req)), GFP_KERNEL);
+	yld->ctl_req = kmalloc_obj(*(yld->ctl_req), GFP_KERNEL);
 	if (yld->ctl_req == NULL)
 		return usb_cleanup(yld, -ENOMEM);

diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index df8953a5196e..700dad83f6d0 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -3206,7 +3206,7 @@ int alps_detect(struct psmouse *psmouse, bool set_properties)
 	 */
 	psmouse_reset(psmouse);

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/input/mouse/appletouch.c b/drivers/input/mouse/appletouch.c
index 3ce63fb35992..f9b8a4aa24e3 100644
--- a/drivers/input/mouse/appletouch.c
+++ b/drivers/input/mouse/appletouch.c
@@ -852,7 +852,7 @@ static int atp_probe(struct usb_interface *iface,
 	}

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!dev || !input_dev) {
 		dev_err(&iface->dev, "Out of memory\n");
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
index dfdfb59cc8b5..a193dc4f8b09 100644
--- a/drivers/input/mouse/bcm5974.c
+++ b/drivers/input/mouse/bcm5974.c
@@ -895,7 +895,7 @@ static int bcm5974_probe(struct usb_interface *iface,
 	cfg = bcm5974_get_config(udev);

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!dev || !input_dev) {
 		dev_err(&iface->dev, "out of memory\n");
diff --git a/drivers/input/mouse/byd.c b/drivers/input/mouse/byd.c
index 7f85c7ab68c5..ec9306e15a07 100644
--- a/drivers/input/mouse/byd.c
+++ b/drivers/input/mouse/byd.c
@@ -469,7 +469,7 @@ int byd_init(struct psmouse *psmouse)
 	if (byd_reset_touchpad(psmouse))
 		return -EIO;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/input/mouse/cypress_ps2.c b/drivers/input/mouse/cypress_ps2.c
index 9446657a5f35..e96b838afcf7 100644
--- a/drivers/input/mouse/cypress_ps2.c
+++ b/drivers/input/mouse/cypress_ps2.c
@@ -624,7 +624,7 @@ int cypress_init(struct psmouse *psmouse)
 	struct cytp_data *cytp;
 	int error;

-	cytp = kzalloc(sizeof(*cytp), GFP_KERNEL);
+	cytp = kzalloc_obj(*cytp, GFP_KERNEL);
 	if (!cytp)
 		return -ENOMEM;

diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index 79ad98cc1e79..c7f510fcb04f 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -2074,7 +2074,7 @@ static int elantech_setup_ps2(struct psmouse *psmouse,
 	int error = -EINVAL;
 	struct input_dev *tp_dev;

-	psmouse->private = etd = kzalloc(sizeof(*etd), GFP_KERNEL);
+	psmouse->private = etd = kzalloc_obj(*etd, GFP_KERNEL);
 	if (!etd)
 		return -ENOMEM;

diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
index 356b99d48544..1e8e3f166b47 100644
--- a/drivers/input/mouse/focaltech.c
+++ b/drivers/input/mouse/focaltech.c
@@ -408,7 +408,7 @@ int focaltech_init(struct psmouse *psmouse)
 	struct focaltech_data *priv;
 	int error;

-	psmouse->private = priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	psmouse->private = priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/input/mouse/hgpk.c b/drivers/input/mouse/hgpk.c
index 6125652e5ad8..23840c8fba32 100644
--- a/drivers/input/mouse/hgpk.c
+++ b/drivers/input/mouse/hgpk.c
@@ -981,7 +981,7 @@ int hgpk_init(struct psmouse *psmouse)
 	struct hgpk_data *priv;
 	int err;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		err = -ENOMEM;
 		goto alloc_fail;
diff --git a/drivers/input/mouse/lifebook.c b/drivers/input/mouse/lifebook.c
index 283ef46f039f..6af7153e9dc7 100644
--- a/drivers/input/mouse/lifebook.c
+++ b/drivers/input/mouse/lifebook.c
@@ -273,7 +273,7 @@ static int lifebook_create_relative_device(struct psmouse *psmouse)
 	struct lifebook_data *priv;
 	int error = -ENOMEM;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	dev2 = input_allocate_device();
 	if (!priv || !dev2)
 		goto err_out;
diff --git a/drivers/input/mouse/maplemouse.c b/drivers/input/mouse/maplemouse.c
index baef4be14b54..ca4901eb7717 100644
--- a/drivers/input/mouse/maplemouse.c
+++ b/drivers/input/mouse/maplemouse.c
@@ -73,7 +73,7 @@ static int probe_maple_mouse(struct device *dev)
 	struct input_dev *input_dev;
 	struct dc_mouse *mse;

-	mse = kzalloc(sizeof(*mse), GFP_KERNEL);
+	mse = kzalloc_obj(*mse, GFP_KERNEL);
 	if (!mse) {
 		error = -ENOMEM;
 		goto fail;
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
index 77ea7da3b1c5..46907609d3d4 100644
--- a/drivers/input/mouse/psmouse-base.c
+++ b/drivers/input/mouse/psmouse-base.c
@@ -1591,7 +1591,7 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
 		psmouse_deactivate(parent);
 	}

-	psmouse = kzalloc(sizeof(*psmouse), GFP_KERNEL);
+	psmouse = kzalloc_obj(*psmouse, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!psmouse || !input_dev)
 		goto err_free;
diff --git a/drivers/input/mouse/psmouse-smbus.c b/drivers/input/mouse/psmouse-smbus.c
index 15bd49ccad22..96df86872017 100644
--- a/drivers/input/mouse/psmouse-smbus.c
+++ b/drivers/input/mouse/psmouse-smbus.c
@@ -154,7 +154,7 @@ static void psmouse_smbus_schedule_remove(struct i2c_client *client)
 {
 	struct psmouse_smbus_removal_work *rwork;

-	rwork = kzalloc(sizeof(*rwork), GFP_KERNEL);
+	rwork = kzalloc_obj(*rwork, GFP_KERNEL);
 	if (rwork) {
 		INIT_WORK(&rwork->work, psmouse_smbus_remove_i2c_device);
 		rwork->client = client;
diff --git a/drivers/input/mouse/sentelic.c b/drivers/input/mouse/sentelic.c
index 44b136fc29aa..4d1fc22f9732 100644
--- a/drivers/input/mouse/sentelic.c
+++ b/drivers/input/mouse/sentelic.c
@@ -1028,7 +1028,7 @@ int fsp_init(struct psmouse *psmouse)
 		     "Finger Sensing Pad, hw: %d.%d.%d, sn: %x, sw: %s\n",
 		     ver >> 4, ver & 0x0F, rev, sn, fsp_drv_ver);

-	psmouse->private = priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	psmouse->private = priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/input/mouse/sermouse.c b/drivers/input/mouse/sermouse.c
index 218c8432a13b..c38779fcff72 100644
--- a/drivers/input/mouse/sermouse.c
+++ b/drivers/input/mouse/sermouse.c
@@ -231,7 +231,7 @@ static int sermouse_connect(struct serio *serio, struct serio_driver *drv)
 	unsigned char c = serio->id.extra;
 	int err = -ENOMEM;

-	sermouse = kzalloc(sizeof(*sermouse), GFP_KERNEL);
+	sermouse = kzalloc_obj(*sermouse, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!sermouse || !input_dev)
 		goto fail1;
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index c5c88a75a019..b9dfcdbefaed 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -741,7 +741,7 @@ static void synaptics_pt_create(struct psmouse *psmouse)
 {
 	struct serio *serio;

-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!serio) {
 		psmouse_err(psmouse,
 			    "not enough memory for pass-through port\n");
@@ -1597,7 +1597,7 @@ static int synaptics_init_ps2(struct psmouse *psmouse,

 	synaptics_apply_quirks(psmouse, info);

-	psmouse->private = priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	psmouse->private = priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/input/mouse/synaptics_usb.c b/drivers/input/mouse/synaptics_usb.c
index 75e45f3ae675..296de386fafe 100644
--- a/drivers/input/mouse/synaptics_usb.c
+++ b/drivers/input/mouse/synaptics_usb.c
@@ -311,7 +311,7 @@ static int synusb_probe(struct usb_interface *intf,
 	if (!ep)
 		return -ENODEV;

-	synusb = kzalloc(sizeof(*synusb), GFP_KERNEL);
+	synusb = kzalloc_obj(*synusb, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!synusb || !input_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpoint.c
index 5f6643b69a2c..c2b2cd057ca3 100644
--- a/drivers/input/mouse/trackpoint.c
+++ b/drivers/input/mouse/trackpoint.c
@@ -409,7 +409,7 @@ int trackpoint_detect(struct psmouse *psmouse, bool set_properties)
 	if (!set_properties)
 		return 0;

-	tp = kzalloc(sizeof(*tp), GFP_KERNEL);
+	tp = kzalloc_obj(*tp, GFP_KERNEL);
 	if (!tp)
 		return -ENOMEM;

diff --git a/drivers/input/mouse/vmmouse.c b/drivers/input/mouse/vmmouse.c
index fb1d986a6895..eda8f9192423 100644
--- a/drivers/input/mouse/vmmouse.c
+++ b/drivers/input/mouse/vmmouse.c
@@ -409,7 +409,7 @@ int vmmouse_init(struct psmouse *psmouse)
 	if (error)
 		return error;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	abs_dev = input_allocate_device();
 	if (!priv || !abs_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/mouse/vsxxxaa.c b/drivers/input/mouse/vsxxxaa.c
index 707cd28f4ba6..4556c5232a82 100644
--- a/drivers/input/mouse/vsxxxaa.c
+++ b/drivers/input/mouse/vsxxxaa.c
@@ -456,7 +456,7 @@ static int vsxxxaa_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err = -ENOMEM;

-	mouse = kzalloc(sizeof(*mouse), GFP_KERNEL);
+	mouse = kzalloc_obj(*mouse, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!mouse || !input_dev)
 		goto fail1;
diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c
index 505c562a5daa..0b842077a7b4 100644
--- a/drivers/input/mousedev.c
+++ b/drivers/input/mousedev.c
@@ -543,7 +543,7 @@ static int mousedev_open(struct inode *inode, struct file *file)
 #endif
 		mousedev = container_of(inode->i_cdev, struct mousedev, cdev);

-	client = kzalloc(sizeof(struct mousedev_client), GFP_KERNEL);
+	client = kzalloc_obj(struct mousedev_client, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

@@ -853,7 +853,7 @@ static struct mousedev *mousedev_create(struct input_dev *dev,
 		goto err_out;
 	}

-	mousedev = kzalloc(sizeof(struct mousedev), GFP_KERNEL);
+	mousedev = kzalloc_obj(struct mousedev, GFP_KERNEL);
 	if (!mousedev) {
 		error = -ENOMEM;
 		goto err_free_minor;
diff --git a/drivers/input/rmi4/rmi_bus.c b/drivers/input/rmi4/rmi_bus.c
index b85ee9db87b0..0e2bb94e67cc 100644
--- a/drivers/input/rmi4/rmi_bus.c
+++ b/drivers/input/rmi4/rmi_bus.c
@@ -78,7 +78,7 @@ int rmi_register_transport_device(struct rmi_transport_dev *xport)
 	struct rmi_device *rmi_dev;
 	int error;

-	rmi_dev = kzalloc(sizeof(struct rmi_device), GFP_KERNEL);
+	rmi_dev = kzalloc_obj(struct rmi_device, GFP_KERNEL);
 	if (!rmi_dev)
 		return -ENOMEM;

diff --git a/drivers/input/rmi4/rmi_f03.c b/drivers/input/rmi4/rmi_f03.c
index e1157ff0f00a..1c7be2d9df42 100644
--- a/drivers/input/rmi4/rmi_f03.c
+++ b/drivers/input/rmi4/rmi_f03.c
@@ -171,7 +171,7 @@ static int rmi_f03_register_pt(struct f03_data *f03)
 {
 	struct serio *serio;

-	serio = kzalloc(sizeof(struct serio), GFP_KERNEL);
+	serio = kzalloc_obj(struct serio, GFP_KERNEL);
 	if (!serio)
 		return -ENOMEM;

diff --git a/drivers/input/serio/altera_ps2.c b/drivers/input/serio/altera_ps2.c
index 761aaaa3e571..b2f5fec9290c 100644
--- a/drivers/input/serio/altera_ps2.c
+++ b/drivers/input/serio/altera_ps2.c
@@ -100,7 +100,7 @@ static int altera_ps2_probe(struct platform_device *pdev)
 		return error;
 	}

-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!serio)
 		return -ENOMEM;

diff --git a/drivers/input/serio/ambakmi.c b/drivers/input/serio/ambakmi.c
index de4b3915c37d..5a4ef62fa3d3 100644
--- a/drivers/input/serio/ambakmi.c
+++ b/drivers/input/serio/ambakmi.c
@@ -114,8 +114,8 @@ static int amba_kmi_probe(struct amba_device *dev,
 	if (ret)
 		return ret;

-	kmi = kzalloc(sizeof(*kmi), GFP_KERNEL);
-	io = kzalloc(sizeof(*io), GFP_KERNEL);
+	kmi = kzalloc_obj(*kmi, GFP_KERNEL);
+	io = kzalloc_obj(*io, GFP_KERNEL);
 	if (!kmi || !io) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/input/serio/ams_delta_serio.c b/drivers/input/serio/ams_delta_serio.c
index 81b3a053df81..206e6dc3f502 100644
--- a/drivers/input/serio/ams_delta_serio.c
+++ b/drivers/input/serio/ams_delta_serio.c
@@ -150,7 +150,7 @@ static int ams_delta_serio_init(struct platform_device *pdev)
 		return err;
 	}

-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!serio)
 		return -ENOMEM;

diff --git a/drivers/input/serio/apbps2.c b/drivers/input/serio/apbps2.c
index a5fbb27088be..5828a4e9fe82 100644
--- a/drivers/input/serio/apbps2.c
+++ b/drivers/input/serio/apbps2.c
@@ -165,7 +165,7 @@ static int apbps2_of_probe(struct platform_device *ofdev)
 	/* Set reload register to core freq in kHz/10 */
 	iowrite32be(freq_hz / 10000, &priv->regs->reload);

-	priv->io = kzalloc(sizeof(*priv->io), GFP_KERNEL);
+	priv->io = kzalloc_obj(*priv->io, GFP_KERNEL);
 	if (!priv->io)
 		return -ENOMEM;

diff --git a/drivers/input/serio/arc_ps2.c b/drivers/input/serio/arc_ps2.c
index 29095d8804d2..bce8d6308f8d 100644
--- a/drivers/input/serio/arc_ps2.c
+++ b/drivers/input/serio/arc_ps2.c
@@ -155,7 +155,7 @@ static int arc_ps2_create_port(struct platform_device *pdev,
 	struct arc_ps2_port *port = &arc_ps2->port[index];
 	struct serio *io;

-	io = kzalloc(sizeof(*io), GFP_KERNEL);
+	io = kzalloc_obj(*io, GFP_KERNEL);
 	if (!io)
 		return -ENOMEM;

diff --git a/drivers/input/serio/ct82c710.c b/drivers/input/serio/ct82c710.c
index 053a15988c45..3a7424bdf877 100644
--- a/drivers/input/serio/ct82c710.c
+++ b/drivers/input/serio/ct82c710.c
@@ -158,7 +158,7 @@ static int __init ct82c710_detect(void)

 static int ct82c710_probe(struct platform_device *dev)
 {
-	ct82c710_port = kzalloc(sizeof(*ct82c710_port), GFP_KERNEL);
+	ct82c710_port = kzalloc_obj(*ct82c710_port, GFP_KERNEL);
 	if (!ct82c710_port)
 		return -ENOMEM;

diff --git a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c
index 9c6ff04c46cf..59c242f97fd3 100644
--- a/drivers/input/serio/gscps2.c
+++ b/drivers/input/serio/gscps2.c
@@ -350,8 +350,8 @@ static int __init gscps2_probe(struct parisc_device *dev)
 	if (dev->id.sversion == 0x96)
 		hpa += GSC_DINO_OFFSET;

-	ps2port = kzalloc(sizeof(*ps2port), GFP_KERNEL);
-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	ps2port = kzalloc_obj(*ps2port, GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!ps2port || !serio) {
 		ret = -ENOMEM;
 		goto fail_nomem;
diff --git a/drivers/input/serio/hil_mlc.c b/drivers/input/serio/hil_mlc.c
index 3fedfc5abc73..f56252d6df5b 100644
--- a/drivers/input/serio/hil_mlc.c
+++ b/drivers/input/serio/hil_mlc.c
@@ -939,7 +939,7 @@ int hil_mlc_register(hil_mlc *mlc)
 	for (i = 0; i < HIL_MLC_DEVMEM; i++) {
 		struct serio *mlc_serio;
 		hil_mlc_copy_di_scratch(mlc, i);
-		mlc_serio = kzalloc(sizeof(*mlc_serio), GFP_KERNEL);
+		mlc_serio = kzalloc_obj(*mlc_serio, GFP_KERNEL);
 		mlc->serio[i] = mlc_serio;
 		if (!mlc->serio[i]) {
 			for (; i >= 0; i--)
diff --git a/drivers/input/serio/hyperv-keyboard.c b/drivers/input/serio/hyperv-keyboard.c
index 0ee7505427ac..7cbf726b47a7 100644
--- a/drivers/input/serio/hyperv-keyboard.c
+++ b/drivers/input/serio/hyperv-keyboard.c
@@ -316,8 +316,8 @@ static int hv_kbd_probe(struct hv_device *hv_dev,
 	struct serio *hv_serio;
 	int error;

-	kbd_dev = kzalloc(sizeof(*kbd_dev), GFP_KERNEL);
-	hv_serio = kzalloc(sizeof(*hv_serio), GFP_KERNEL);
+	kbd_dev = kzalloc_obj(*kbd_dev, GFP_KERNEL);
+	hv_serio = kzalloc_obj(*hv_serio, GFP_KERNEL);
 	if (!kbd_dev || !hv_serio) {
 		error = -ENOMEM;
 		goto err_free_mem;
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index c135254665b6..1a5a7f2f0214 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -1324,7 +1324,7 @@ static int i8042_create_kbd_port(void)
 	struct serio *serio;
 	struct i8042_port *port = &i8042_ports[I8042_KBD_PORT_NO];

-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!serio)
 		return -ENOMEM;

@@ -1354,7 +1354,7 @@ static int i8042_create_aux_port(int idx)
 	int port_no = idx < 0 ? I8042_AUX_PORT_NO : I8042_MUX_PORT_NO + idx;
 	struct i8042_port *port = &i8042_ports[port_no];

-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!serio)
 		return -ENOMEM;

diff --git a/drivers/input/serio/ioc3kbd.c b/drivers/input/serio/ioc3kbd.c
index d2c7ffb9a946..650758115bf0 100644
--- a/drivers/input/serio/ioc3kbd.c
+++ b/drivers/input/serio/ioc3kbd.c
@@ -139,11 +139,11 @@ static int ioc3kbd_probe(struct platform_device *pdev)
 	if (!d)
 		return -ENOMEM;

-	sk = kzalloc(sizeof(*sk), GFP_KERNEL);
+	sk = kzalloc_obj(*sk, GFP_KERNEL);
 	if (!sk)
 		return -ENOMEM;

-	sa = kzalloc(sizeof(*sa), GFP_KERNEL);
+	sa = kzalloc_obj(*sa, GFP_KERNEL);
 	if (!sa) {
 		kfree(sk);
 		return -ENOMEM;
diff --git a/drivers/input/serio/maceps2.c b/drivers/input/serio/maceps2.c
index 3d28a5cddd61..dda52b7d2c1d 100644
--- a/drivers/input/serio/maceps2.c
+++ b/drivers/input/serio/maceps2.c
@@ -117,7 +117,7 @@ static struct serio *maceps2_allocate_port(int idx)
 {
 	struct serio *serio;

-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (serio) {
 		serio->id.type		= SERIO_8042;
 		serio->write		= maceps2_write;
diff --git a/drivers/input/serio/olpc_apsp.c b/drivers/input/serio/olpc_apsp.c
index c07fb8a1799d..14c235b0b4e4 100644
--- a/drivers/input/serio/olpc_apsp.c
+++ b/drivers/input/serio/olpc_apsp.c
@@ -188,7 +188,7 @@ static int olpc_apsp_probe(struct platform_device *pdev)
 		return priv->irq;

 	/* KEYBOARD */
-	kb_serio = kzalloc(sizeof(*kb_serio), GFP_KERNEL);
+	kb_serio = kzalloc_obj(*kb_serio, GFP_KERNEL);
 	if (!kb_serio)
 		return -ENOMEM;
 	kb_serio->id.type	= SERIO_8042_XL;
@@ -203,7 +203,7 @@ static int olpc_apsp_probe(struct platform_device *pdev)
 	serio_register_port(kb_serio);

 	/* TOUCHPAD */
-	pad_serio = kzalloc(sizeof(*pad_serio), GFP_KERNEL);
+	pad_serio = kzalloc_obj(*pad_serio, GFP_KERNEL);
 	if (!pad_serio) {
 		error = -ENOMEM;
 		goto err_pad;
diff --git a/drivers/input/serio/parkbd.c b/drivers/input/serio/parkbd.c
index 22fe55490572..a4b830b499f6 100644
--- a/drivers/input/serio/parkbd.c
+++ b/drivers/input/serio/parkbd.c
@@ -165,7 +165,7 @@ static struct serio *parkbd_allocate_serio(void)
 {
 	struct serio *serio;

-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (serio) {
 		serio->id.type = parkbd_mode;
 		serio->write = parkbd_write;
diff --git a/drivers/input/serio/pcips2.c b/drivers/input/serio/pcips2.c
index 6b9abb2e18c9..9e5d022fa502 100644
--- a/drivers/input/serio/pcips2.c
+++ b/drivers/input/serio/pcips2.c
@@ -137,8 +137,8 @@ static int pcips2_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	if (ret)
 		goto disable;

-	ps2if = kzalloc(sizeof(*ps2if), GFP_KERNEL);
-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	ps2if = kzalloc_obj(*ps2if, GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!ps2if || !serio) {
 		ret = -ENOMEM;
 		goto release;
diff --git a/drivers/input/serio/ps2-gpio.c b/drivers/input/serio/ps2-gpio.c
index 46fb7667b244..a52ce59952a9 100644
--- a/drivers/input/serio/ps2-gpio.c
+++ b/drivers/input/serio/ps2-gpio.c
@@ -405,7 +405,7 @@ static int ps2_gpio_probe(struct platform_device *pdev)
 	int error;

 	drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!drvdata || !serio) {
 		error = -ENOMEM;
 		goto err_free_serio;
diff --git a/drivers/input/serio/ps2mult.c b/drivers/input/serio/ps2mult.c
index b96cee52fc52..e0462ac3aa1d 100644
--- a/drivers/input/serio/ps2mult.c
+++ b/drivers/input/serio/ps2mult.c
@@ -122,7 +122,7 @@ static int ps2mult_create_port(struct ps2mult *psm, int i)
 	struct serio *mx_serio = psm->mx_serio;
 	struct serio *serio;

-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!serio)
 		return -ENOMEM;

@@ -160,7 +160,7 @@ static int ps2mult_connect(struct serio *serio, struct serio_driver *drv)
 	if (!serio->write)
 		return -EINVAL;

-	psm = kzalloc(sizeof(*psm), GFP_KERNEL);
+	psm = kzalloc_obj(*psm, GFP_KERNEL);
 	if (!psm)
 		return -ENOMEM;

diff --git a/drivers/input/serio/q40kbd.c b/drivers/input/serio/q40kbd.c
index ae55c4de092f..55c254fbdb24 100644
--- a/drivers/input/serio/q40kbd.c
+++ b/drivers/input/serio/q40kbd.c
@@ -102,8 +102,8 @@ static int q40kbd_probe(struct platform_device *pdev)
 	struct serio *port;
 	int error;

-	q40kbd = kzalloc(sizeof(*q40kbd), GFP_KERNEL);
-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	q40kbd = kzalloc_obj(*q40kbd, GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!q40kbd || !port) {
 		error = -ENOMEM;
 		goto err_free_mem;
diff --git a/drivers/input/serio/rpckbd.c b/drivers/input/serio/rpckbd.c
index c65c552b0c45..c097716da53e 100644
--- a/drivers/input/serio/rpckbd.c
+++ b/drivers/input/serio/rpckbd.c
@@ -108,8 +108,8 @@ static int rpckbd_probe(struct platform_device *dev)
 	if (tx_irq < 0)
 		return tx_irq;

-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
-	rpckbd = kzalloc(sizeof(*rpckbd), GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
+	rpckbd = kzalloc_obj(*rpckbd, GFP_KERNEL);
 	if (!serio || !rpckbd) {
 		kfree(rpckbd);
 		kfree(serio);
diff --git a/drivers/input/serio/sa1111ps2.c b/drivers/input/serio/sa1111ps2.c
index 375c6f5f905c..32752d898797 100644
--- a/drivers/input/serio/sa1111ps2.c
+++ b/drivers/input/serio/sa1111ps2.c
@@ -254,8 +254,8 @@ static int ps2_probe(struct sa1111_dev *dev)
 	struct serio *serio;
 	int ret;

-	ps2if = kzalloc(sizeof(*ps2if), GFP_KERNEL);
-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	ps2if = kzalloc_obj(*ps2if, GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!ps2if || !serio) {
 		ret = -ENOMEM;
 		goto free;
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
index 2b5ddc5dac19..54dd26249b02 100644
--- a/drivers/input/serio/serio.c
+++ b/drivers/input/serio/serio.c
@@ -244,7 +244,7 @@ static int serio_queue_event(void *object, struct module *owner,
 		}
 	}

-	event = kmalloc(sizeof(*event), GFP_ATOMIC);
+	event = kmalloc_obj(*event, GFP_ATOMIC);
 	if (!event) {
 		pr_err("Not enough memory to queue event %d\n", event_type);
 		return -ENOMEM;
diff --git a/drivers/input/serio/serio_raw.c b/drivers/input/serio/serio_raw.c
index 4d6395088986..70df54435a94 100644
--- a/drivers/input/serio/serio_raw.c
+++ b/drivers/input/serio/serio_raw.c
@@ -270,7 +270,7 @@ static int serio_raw_connect(struct serio *serio, struct serio_driver *drv)
 	struct serio_raw *serio_raw;
 	int err;

-	serio_raw = kzalloc(sizeof(*serio_raw), GFP_KERNEL);
+	serio_raw = kzalloc_obj(*serio_raw, GFP_KERNEL);
 	if (!serio_raw) {
 		dev_dbg(&serio->dev, "can't allocate memory for a device\n");
 		return -ENOMEM;
diff --git a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
index 74ac88796187..46087c02c340 100644
--- a/drivers/input/serio/serport.c
+++ b/drivers/input/serio/serport.c
@@ -78,7 +78,7 @@ static int serport_ldisc_open(struct tty_struct *tty)
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;

-	serport = kzalloc(sizeof(*serport), GFP_KERNEL);
+	serport = kzalloc_obj(*serport, GFP_KERNEL);
 	if (!serport)
 		return -ENOMEM;

@@ -159,7 +159,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file,
 	if (test_and_set_bit(SERPORT_BUSY, &serport->flags))
 		return -EBUSY;

-	serport->serio = serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	serport->serio = serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!serio)
 		return -ENOMEM;

diff --git a/drivers/input/serio/sun4i-ps2.c b/drivers/input/serio/sun4i-ps2.c
index 524929ce1cae..5b46c66b2100 100644
--- a/drivers/input/serio/sun4i-ps2.c
+++ b/drivers/input/serio/sun4i-ps2.c
@@ -209,8 +209,8 @@ static int sun4i_ps2_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	int error;

-	drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	drvdata = kzalloc_obj(*drvdata, GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!drvdata || !serio) {
 		error = -ENOMEM;
 		goto err_free_mem;
diff --git a/drivers/input/serio/userio.c b/drivers/input/serio/userio.c
index 7f627b08055e..3bdb17b4dd25 100644
--- a/drivers/input/serio/userio.c
+++ b/drivers/input/serio/userio.c
@@ -73,7 +73,7 @@ static int userio_device_write(struct serio *id, unsigned char val)
 static int userio_char_open(struct inode *inode, struct file *file)
 {
 	struct userio_device *userio __free(kfree) =
-			kzalloc(sizeof(*userio), GFP_KERNEL);
+			kzalloc_obj(*userio, GFP_KERNEL);
 	if (!userio)
 		return -ENOMEM;

@@ -81,7 +81,7 @@ static int userio_char_open(struct inode *inode, struct file *file)
 	spin_lock_init(&userio->buf_lock);
 	init_waitqueue_head(&userio->waitq);

-	userio->serio = kzalloc(sizeof(*userio->serio), GFP_KERNEL);
+	userio->serio = kzalloc_obj(*userio->serio, GFP_KERNEL);
 	if (!userio->serio)
 		return -ENOMEM;

diff --git a/drivers/input/serio/xilinx_ps2.c b/drivers/input/serio/xilinx_ps2.c
index 01433f0b48f1..0c9ddc532c31 100644
--- a/drivers/input/serio/xilinx_ps2.c
+++ b/drivers/input/serio/xilinx_ps2.c
@@ -247,8 +247,8 @@ static int xps2_of_probe(struct platform_device *ofdev)
 		return -ENODEV;
 	}

-	drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
-	serio = kzalloc(sizeof(*serio), GFP_KERNEL);
+	drvdata = kzalloc_obj(*drvdata, GFP_KERNEL);
+	serio = kzalloc_obj(*serio, GFP_KERNEL);
 	if (!drvdata || !serio) {
 		error = -ENOMEM;
 		goto failed1;
diff --git a/drivers/input/tablet/acecad.c b/drivers/input/tablet/acecad.c
index 0ac16f32b31f..6f39938d5bbc 100644
--- a/drivers/input/tablet/acecad.c
+++ b/drivers/input/tablet/acecad.c
@@ -129,7 +129,7 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_
 	pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
 	maxp = usb_maxpacket(dev, pipe);

-	acecad = kzalloc(sizeof(*acecad), GFP_KERNEL);
+	acecad = kzalloc_obj(*acecad, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!acecad || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/tablet/aiptek.c b/drivers/input/tablet/aiptek.c
index 2b3fbb0455d5..df9ed01dcdb3 100644
--- a/drivers/input/tablet/aiptek.c
+++ b/drivers/input/tablet/aiptek.c
@@ -1673,7 +1673,7 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
 	 */
 	speeds[0] = programmableDelay;

-	aiptek = kzalloc(sizeof(*aiptek), GFP_KERNEL);
+	aiptek = kzalloc_obj(*aiptek, GFP_KERNEL);
 	inputdev = input_allocate_device();
 	if (!aiptek || !inputdev) {
 		dev_warn(&intf->dev,
diff --git a/drivers/input/tablet/hanwang.c b/drivers/input/tablet/hanwang.c
index 42c1e5eaddd5..264cb9c6e807 100644
--- a/drivers/input/tablet/hanwang.c
+++ b/drivers/input/tablet/hanwang.c
@@ -322,7 +322,7 @@ static int hanwang_probe(struct usb_interface *intf, const struct usb_device_id
 	if (intf->cur_altsetting->desc.bNumEndpoints < 1)
 		return -ENODEV;

-	hanwang = kzalloc(sizeof(*hanwang), GFP_KERNEL);
+	hanwang = kzalloc_obj(*hanwang, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!hanwang || !input_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/tablet/kbtab.c b/drivers/input/tablet/kbtab.c
index 794caa102909..658cf6c144bb 100644
--- a/drivers/input/tablet/kbtab.c
+++ b/drivers/input/tablet/kbtab.c
@@ -121,7 +121,7 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i
 	if (!usb_endpoint_is_int_in(endpoint))
 		return -ENODEV;

-	kbtab = kzalloc(sizeof(*kbtab), GFP_KERNEL);
+	kbtab = kzalloc_obj(*kbtab, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!kbtab || !input_dev)
 		goto fail1;
diff --git a/drivers/input/tablet/pegasus_notetaker.c b/drivers/input/tablet/pegasus_notetaker.c
index eabb4a0b8a0d..8ba71855421b 100644
--- a/drivers/input/tablet/pegasus_notetaker.c
+++ b/drivers/input/tablet/pegasus_notetaker.c
@@ -293,7 +293,7 @@ static int pegasus_probe(struct usb_interface *intf,

 	endpoint = &intf->cur_altsetting->endpoint[0].desc;

-	pegasus = kzalloc(sizeof(*pegasus), GFP_KERNEL);
+	pegasus = kzalloc_obj(*pegasus, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!pegasus || !input_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/tablet/wacom_serial4.c b/drivers/input/tablet/wacom_serial4.c
index cf7cea77dabc..218eb157288b 100644
--- a/drivers/input/tablet/wacom_serial4.c
+++ b/drivers/input/tablet/wacom_serial4.c
@@ -521,7 +521,7 @@ static int wacom_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err = -ENOMEM;

-	wacom = kzalloc(sizeof(*wacom), GFP_KERNEL);
+	wacom = kzalloc_obj(*wacom, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!wacom || !input_dev)
 		goto free_device;
diff --git a/drivers/input/touchscreen/ad7877.c b/drivers/input/touchscreen/ad7877.c
index c9aa1847265a..404a4b7f4021 100644
--- a/drivers/input/touchscreen/ad7877.c
+++ b/drivers/input/touchscreen/ad7877.c
@@ -201,7 +201,7 @@ static int ad7877_read(struct spi_device *spi, u16 reg)
 	struct ser_req *req;
 	int status, ret;

-	req = kzalloc(sizeof *req, GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -232,7 +232,7 @@ static int ad7877_write(struct spi_device *spi, u16 reg, u16 val)
 	struct ser_req *req;
 	int status;

-	req = kzalloc(sizeof *req, GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -259,7 +259,7 @@ static int ad7877_read_adc(struct spi_device *spi, unsigned command)
 	int sample;
 	int i;

-	req = kzalloc(sizeof *req, GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index 67264c5b49cb..656e907bc13d 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -357,7 +357,7 @@ static int ads7846_read12_ser(struct device *dev, unsigned command)
 	struct ser_req *req;
 	int status;

-	req = kzalloc(sizeof *req, GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -442,7 +442,7 @@ static int ads7845_read12_ser(struct device *dev, unsigned command)
 	struct ads7845_ser_req *req;
 	int status;

-	req = kzalloc(sizeof *req, GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/input/touchscreen/da9052_tsi.c b/drivers/input/touchscreen/da9052_tsi.c
index c2d3252f8466..ab36ecf2ab3b 100644
--- a/drivers/input/touchscreen/da9052_tsi.c
+++ b/drivers/input/touchscreen/da9052_tsi.c
@@ -232,7 +232,7 @@ static int da9052_ts_probe(struct platform_device *pdev)
 	if (!da9052)
 		return -EINVAL;

-	tsi = kzalloc(sizeof(*tsi), GFP_KERNEL);
+	tsi = kzalloc_obj(*tsi, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!tsi || !input_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/touchscreen/dynapro.c b/drivers/input/touchscreen/dynapro.c
index 998d5ca8071e..6d9a25269639 100644
--- a/drivers/input/touchscreen/dynapro.c
+++ b/drivers/input/touchscreen/dynapro.c
@@ -110,7 +110,7 @@ static int dynapro_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	pdynapro = kzalloc(sizeof(*pdynapro), GFP_KERNEL);
+	pdynapro = kzalloc_obj(*pdynapro, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!pdynapro || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/egalax_ts_serial.c b/drivers/input/touchscreen/egalax_ts_serial.c
index 5f284490a298..b741843719ab 100644
--- a/drivers/input/touchscreen/egalax_ts_serial.c
+++ b/drivers/input/touchscreen/egalax_ts_serial.c
@@ -99,7 +99,7 @@ static int egalax_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int error;

-	egalax = kzalloc(sizeof(*egalax), GFP_KERNEL);
+	egalax = kzalloc_obj(*egalax, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!egalax || !input_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/touchscreen/elo.c b/drivers/input/touchscreen/elo.c
index 137a5f69b83e..f75ea0caf7f9 100644
--- a/drivers/input/touchscreen/elo.c
+++ b/drivers/input/touchscreen/elo.c
@@ -307,7 +307,7 @@ static int elo_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	elo = kzalloc(sizeof(*elo), GFP_KERNEL);
+	elo = kzalloc_obj(*elo, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!elo || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/fujitsu_ts.c b/drivers/input/touchscreen/fujitsu_ts.c
index cef2e93c17bc..3a4f47e37ae7 100644
--- a/drivers/input/touchscreen/fujitsu_ts.c
+++ b/drivers/input/touchscreen/fujitsu_ts.c
@@ -99,7 +99,7 @@ static int fujitsu_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	fujitsu = kzalloc(sizeof(*fujitsu), GFP_KERNEL);
+	fujitsu = kzalloc_obj(*fujitsu, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!fujitsu || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/gunze.c b/drivers/input/touchscreen/gunze.c
index 426d2bc80a93..0311f80d263e 100644
--- a/drivers/input/touchscreen/gunze.c
+++ b/drivers/input/touchscreen/gunze.c
@@ -97,7 +97,7 @@ static int gunze_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	gunze = kzalloc(sizeof(*gunze), GFP_KERNEL);
+	gunze = kzalloc_obj(*gunze, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!gunze || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/hampshire.c b/drivers/input/touchscreen/hampshire.c
index 0a9af8d0218c..b6423c982726 100644
--- a/drivers/input/touchscreen/hampshire.c
+++ b/drivers/input/touchscreen/hampshire.c
@@ -109,7 +109,7 @@ static int hampshire_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	phampshire = kzalloc(sizeof(*phampshire), GFP_KERNEL);
+	phampshire = kzalloc_obj(*phampshire, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!phampshire || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/inexio.c b/drivers/input/touchscreen/inexio.c
index a7604f2c4e3a..72caa754381e 100644
--- a/drivers/input/touchscreen/inexio.c
+++ b/drivers/input/touchscreen/inexio.c
@@ -114,7 +114,7 @@ static int inexio_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	pinexio = kzalloc(sizeof(*pinexio), GFP_KERNEL);
+	pinexio = kzalloc_obj(*pinexio, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!pinexio || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/mc13783_ts.c b/drivers/input/touchscreen/mc13783_ts.c
index 47b8da00027f..f539339ee6a0 100644
--- a/drivers/input/touchscreen/mc13783_ts.c
+++ b/drivers/input/touchscreen/mc13783_ts.c
@@ -168,7 +168,7 @@ static int __init mc13783_ts_probe(struct platform_device *pdev)
 	struct input_dev *idev;
 	int ret = -ENOMEM;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	idev = input_allocate_device();
 	if (!priv || !idev)
 		goto err_free_mem;
diff --git a/drivers/input/touchscreen/migor_ts.c b/drivers/input/touchscreen/migor_ts.c
index 7511a134e302..c7d5ca01beba 100644
--- a/drivers/input/touchscreen/migor_ts.c
+++ b/drivers/input/touchscreen/migor_ts.c
@@ -122,7 +122,7 @@ static int migor_ts_probe(struct i2c_client *client)
 	struct input_dev *input;
 	int error;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	input = input_allocate_device();
 	if (!priv || !input) {
 		dev_err(&client->dev, "failed to allocate memory\n");
diff --git a/drivers/input/touchscreen/mtouch.c b/drivers/input/touchscreen/mtouch.c
index 0427ae08c39d..f4e99ccee363 100644
--- a/drivers/input/touchscreen/mtouch.c
+++ b/drivers/input/touchscreen/mtouch.c
@@ -128,7 +128,7 @@ static int mtouch_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	mtouch = kzalloc(sizeof(*mtouch), GFP_KERNEL);
+	mtouch = kzalloc_obj(*mtouch, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!mtouch || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/pcap_ts.c b/drivers/input/touchscreen/pcap_ts.c
index 083206a3457b..05e90b36246f 100644
--- a/drivers/input/touchscreen/pcap_ts.c
+++ b/drivers/input/touchscreen/pcap_ts.c
@@ -138,7 +138,7 @@ static int pcap_ts_probe(struct platform_device *pdev)
 	struct pcap_ts *pcap_ts;
 	int err = -ENOMEM;

-	pcap_ts = kzalloc(sizeof(*pcap_ts), GFP_KERNEL);
+	pcap_ts = kzalloc_obj(*pcap_ts, GFP_KERNEL);
 	if (!pcap_ts)
 		return err;

diff --git a/drivers/input/touchscreen/penmount.c b/drivers/input/touchscreen/penmount.c
index e027c71cffd9..c4979ce707b8 100644
--- a/drivers/input/touchscreen/penmount.c
+++ b/drivers/input/touchscreen/penmount.c
@@ -199,7 +199,7 @@ static int pm_connect(struct serio *serio, struct serio_driver *drv)
 	int max_x, max_y;
 	int err;

-	pm = kzalloc(sizeof(*pm), GFP_KERNEL);
+	pm = kzalloc_obj(*pm, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!pm || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
index 7b3b10cbfcfc..dbe3ddb1194a 100644
--- a/drivers/input/touchscreen/sur40.c
+++ b/drivers/input/touchscreen/sur40.c
@@ -672,7 +672,7 @@ static int sur40_probe(struct usb_interface *interface,
 		return -ENODEV;

 	/* Allocate memory for our device state and initialize it. */
-	sur40 = kzalloc(sizeof(*sur40), GFP_KERNEL);
+	sur40 = kzalloc_obj(*sur40, GFP_KERNEL);
 	if (!sur40)
 		return -ENOMEM;

diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c
index 0534b2ba650b..d03076da7f04 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -422,7 +422,7 @@ static int titsc_probe(struct platform_device *pdev)
 	int err;

 	/* Allocate memory for device */
-	ts_dev = kzalloc(sizeof(*ts_dev), GFP_KERNEL);
+	ts_dev = kzalloc_obj(*ts_dev, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!ts_dev || !input_dev) {
 		dev_err(&pdev->dev, "failed to allocate memory.\n");
diff --git a/drivers/input/touchscreen/touchit213.c b/drivers/input/touchscreen/touchit213.c
index 53c39ed849f7..6fc1f60fd7a9 100644
--- a/drivers/input/touchscreen/touchit213.c
+++ b/drivers/input/touchscreen/touchit213.c
@@ -139,7 +139,7 @@ static int touchit213_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	touchit213 = kzalloc(sizeof(*touchit213), GFP_KERNEL);
+	touchit213 = kzalloc_obj(*touchit213, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!touchit213 || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/touchright.c b/drivers/input/touchscreen/touchright.c
index 9be7c6bf5e7f..0493ead34b34 100644
--- a/drivers/input/touchscreen/touchright.c
+++ b/drivers/input/touchscreen/touchright.c
@@ -102,7 +102,7 @@ static int tr_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	tr = kzalloc(sizeof(*tr), GFP_KERNEL);
+	tr = kzalloc_obj(*tr, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!tr || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/touchwin.c b/drivers/input/touchscreen/touchwin.c
index 4b92e8711e1d..687fee4a71b9 100644
--- a/drivers/input/touchscreen/touchwin.c
+++ b/drivers/input/touchscreen/touchwin.c
@@ -109,7 +109,7 @@ static int tw_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int err;

-	tw = kzalloc(sizeof(*tw), GFP_KERNEL);
+	tw = kzalloc_obj(*tw, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!tw || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/input/touchscreen/tsc40.c b/drivers/input/touchscreen/tsc40.c
index c5dabebaf96d..b83b839d7d5e 100644
--- a/drivers/input/touchscreen/tsc40.c
+++ b/drivers/input/touchscreen/tsc40.c
@@ -83,7 +83,7 @@ static int tsc_connect(struct serio *serio, struct serio_driver *drv)
 	struct input_dev *input_dev;
 	int error;

-	ptsc = kzalloc(sizeof(*ptsc), GFP_KERNEL);
+	ptsc = kzalloc_obj(*ptsc, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!ptsc || !input_dev) {
 		error = -ENOMEM;
diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c
index 7567efabe014..01dcf448a025 100644
--- a/drivers/input/touchscreen/usbtouchscreen.c
+++ b/drivers/input/touchscreen/usbtouchscreen.c
@@ -378,7 +378,7 @@ static int mtouch_alloc(struct usbtouch_usb *usbtouch)
 {
 	struct mtouch_priv *priv;

-	priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kmalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -938,7 +938,7 @@ static int nexio_alloc(struct usbtouch_usb *usbtouch)
 	struct nexio_priv *priv;
 	int ret = -ENOMEM;

-	priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kmalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		goto out_buf;

@@ -1458,7 +1458,7 @@ static int usbtouch_probe(struct usb_interface *intf,
 	if (!endpoint)
 		return -ENXIO;

-	usbtouch = kzalloc(sizeof(*usbtouch), GFP_KERNEL);
+	usbtouch = kzalloc_obj(*usbtouch, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!usbtouch || !input_dev)
 		goto out_free;
diff --git a/drivers/input/touchscreen/wacom_w8001.c b/drivers/input/touchscreen/wacom_w8001.c
index ed2ca8a689d5..4ddca1128d35 100644
--- a/drivers/input/touchscreen/wacom_w8001.c
+++ b/drivers/input/touchscreen/wacom_w8001.c
@@ -596,7 +596,7 @@ static int w8001_connect(struct serio *serio, struct serio_driver *drv)
 	char basename[64] = "Wacom Serial";
 	int err, err_pen, err_touch;

-	w8001 = kzalloc(sizeof(*w8001), GFP_KERNEL);
+	w8001 = kzalloc_obj(*w8001, GFP_KERNEL);
 	input_dev_pen = input_allocate_device();
 	input_dev_touch = input_allocate_device();
 	if (!w8001 || !input_dev_pen || !input_dev_touch) {
diff --git a/drivers/interconnect/core.c b/drivers/interconnect/core.c
index 6cc979b26151..e4e236798357 100644
--- a/drivers/interconnect/core.c
+++ b/drivers/interconnect/core.c
@@ -172,7 +172,7 @@ static struct icc_path *path_init(struct device *dev, struct icc_node *dst,
 	struct icc_path *path;
 	int i;

-	path = kzalloc(struct_size(path, reqs, num_nodes), GFP_KERNEL);
+	path = kzalloc_flex(*path, reqs, num_nodes, GFP_KERNEL);
 	if (!path)
 		return ERR_PTR(-ENOMEM);

@@ -408,7 +408,7 @@ struct icc_node_data *of_icc_get_from_provider(const struct of_phandle_args *spe
 		return ERR_CAST(node);

 	if (!data) {
-		data = kzalloc(sizeof(*data), GFP_KERNEL);
+		data = kzalloc_obj(*data, GFP_KERNEL);
 		if (!data)
 			return ERR_PTR(-ENOMEM);
 		data->node = node;
@@ -827,7 +827,7 @@ static struct icc_node *icc_node_create_nolock(int id)
 	if (node)
 		return node;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/interconnect/debugfs-client.c b/drivers/interconnect/debugfs-client.c
index 24d7b5a57794..227235b4b184 100644
--- a/drivers/interconnect/debugfs-client.c
+++ b/drivers/interconnect/debugfs-client.c
@@ -86,7 +86,7 @@ static int icc_get_set(void *data, u64 val)
 		goto err_free;
 	}

-	debugfs_path = kzalloc(sizeof(*debugfs_path), GFP_KERNEL);
+	debugfs_path = kzalloc_obj(*debugfs_path, GFP_KERNEL);
 	if (!debugfs_path) {
 		ret = -ENOMEM;
 		goto err_put;
diff --git a/drivers/interconnect/qcom/icc-common.c b/drivers/interconnect/qcom/icc-common.c
index 9b8a9c69e0cb..5f90fcf7b22e 100644
--- a/drivers/interconnect/qcom/icc-common.c
+++ b/drivers/interconnect/qcom/icc-common.c
@@ -19,7 +19,7 @@ struct icc_node_data *qcom_icc_xlate_extended(const struct of_phandle_args *spec
 	if (IS_ERR(node))
 		return ERR_CAST(node);

-	ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
+	ndata = kzalloc_obj(*ndata, GFP_KERNEL);
 	if (!ndata)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
index 5a797c1b31e2..cdda0eb8056f 100644
--- a/drivers/iommu/amd/init.c
+++ b/drivers/iommu/amd/init.c
@@ -659,9 +659,9 @@ static inline void free_dev_table(struct amd_iommu_pci_seg *pci_seg)
 /* Allocate per PCI segment IOMMU rlookup table. */
 static inline int __init alloc_rlookup_table(struct amd_iommu_pci_seg *pci_seg)
 {
-	pci_seg->rlookup_table = kvcalloc(pci_seg->last_bdf + 1,
-					  sizeof(*pci_seg->rlookup_table),
-					  GFP_KERNEL);
+	pci_seg->rlookup_table = kvzalloc_objs(*pci_seg->rlookup_table,
+					       pci_seg->last_bdf + 1,
+					       GFP_KERNEL);
 	if (pci_seg->rlookup_table == NULL)
 		return -ENOMEM;

@@ -676,9 +676,9 @@ static inline void free_rlookup_table(struct amd_iommu_pci_seg *pci_seg)

 static inline int __init alloc_irq_lookup_table(struct amd_iommu_pci_seg *pci_seg)
 {
-	pci_seg->irq_lookup_table = kvcalloc(pci_seg->last_bdf + 1,
-					     sizeof(*pci_seg->irq_lookup_table),
-					     GFP_KERNEL);
+	pci_seg->irq_lookup_table = kvzalloc_objs(*pci_seg->irq_lookup_table,
+						  pci_seg->last_bdf + 1,
+						  GFP_KERNEL);
 	if (pci_seg->irq_lookup_table == NULL)
 		return -ENOMEM;

@@ -695,9 +695,8 @@ static int __init alloc_alias_table(struct amd_iommu_pci_seg *pci_seg)
 {
 	int i;

-	pci_seg->alias_table = kvmalloc_array(pci_seg->last_bdf + 1,
-					      sizeof(*pci_seg->alias_table),
-					      GFP_KERNEL);
+	pci_seg->alias_table = kvmalloc_objs(*pci_seg->alias_table,
+					     pci_seg->last_bdf + 1, GFP_KERNEL);
 	if (!pci_seg->alias_table)
 		return -ENOMEM;

@@ -1285,7 +1284,7 @@ set_dev_entry_from_acpi_range(struct amd_iommu *iommu, u16 first, u16 last,
 		if (search_ivhd_dte_flags(iommu->pci_seg->id, first, last))
 			return;

-		d = kzalloc(sizeof(struct ivhd_dte_flags), GFP_KERNEL);
+		d = kzalloc_obj(struct ivhd_dte_flags, GFP_KERNEL);
 		if (!d)
 			return;

@@ -1357,7 +1356,7 @@ int __init add_special_device(u8 type, u8 id, u32 *devid, bool cmd_line)
 		return 0;
 	}

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1388,7 +1387,7 @@ static int __init add_acpi_hid_device(u8 *hid, u8 *uid, u32 *devid,
 		return 0;
 	}

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1721,7 +1720,7 @@ static struct amd_iommu_pci_seg *__init alloc_pci_segment(u16 id,
 	if (last_bdf < 0)
 		return NULL;

-	pci_seg = kzalloc(sizeof(struct amd_iommu_pci_seg), GFP_KERNEL);
+	pci_seg = kzalloc_obj(struct amd_iommu_pci_seg, GFP_KERNEL);
 	if (pci_seg == NULL)
 		return NULL;

@@ -2041,7 +2040,7 @@ static int __init init_iommu_all(struct acpi_table_header *table)
 			DUMP_printk("       mmio-addr: %016llx\n",
 				    h->mmio_phys);

-			iommu = kzalloc(sizeof(struct amd_iommu), GFP_KERNEL);
+			iommu = kzalloc_obj(struct amd_iommu, GFP_KERNEL);
 			if (iommu == NULL)
 				return -ENOMEM;

@@ -2642,7 +2641,7 @@ static int __init init_unity_map_range(struct ivmd_header *m,
 	if (pci_seg == NULL)
 		return -ENOMEM;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (e == NULL)
 		return -ENOMEM;

diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index ab61ef61e670..e26f94feeaa5 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -372,7 +372,7 @@ static struct iommu_dev_data *alloc_dev_data(struct amd_iommu *iommu, u16 devid)
 	struct iommu_dev_data *dev_data;
 	struct amd_iommu_pci_seg *pci_seg = iommu->pci_seg;

-	dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
+	dev_data = kzalloc_obj(*dev_data, GFP_KERNEL);
 	if (!dev_data)
 		return NULL;

@@ -2277,7 +2277,7 @@ static int pdom_attach_iommu(struct amd_iommu *iommu,
 		goto out_unlock;
 	}

-	pdom_iommu_info = kzalloc(sizeof(*pdom_iommu_info), GFP_ATOMIC);
+	pdom_iommu_info = kzalloc_obj(*pdom_iommu_info, GFP_ATOMIC);
 	if (!pdom_iommu_info) {
 		ret = -ENOMEM;
 		goto out_unlock;
@@ -2547,7 +2547,7 @@ struct protection_domain *protection_domain_alloc(void)
 	struct protection_domain *domain;
 	int domid;

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain)
 		return NULL;

@@ -3248,7 +3248,7 @@ static struct irq_remap_table *__alloc_irq_table(int nid, size_t size)
 {
 	struct irq_remap_table *table;

-	table = kzalloc(sizeof(*table), GFP_KERNEL);
+	table = kzalloc_obj(*table, GFP_KERNEL);
 	if (!table)
 		return NULL;

@@ -3799,15 +3799,14 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
 		}

 		ret = -ENOMEM;
-		data = kzalloc(sizeof(*data), GFP_KERNEL);
+		data = kzalloc_obj(*data, GFP_KERNEL);
 		if (!data)
 			goto out_free_data;

 		if (!AMD_IOMMU_GUEST_IR_GA(amd_iommu_guest_ir))
-			data->entry = kzalloc(sizeof(union irte), GFP_KERNEL);
+			data->entry = kzalloc_obj(union irte, GFP_KERNEL);
 		else
-			data->entry = kzalloc(sizeof(struct irte_ga),
-						     GFP_KERNEL);
+			data->entry = kzalloc_obj(struct irte_ga, GFP_KERNEL);
 		if (!data->entry) {
 			kfree(data);
 			goto out_free_data;
diff --git a/drivers/iommu/amd/iommufd.c b/drivers/iommu/amd/iommufd.c
index 96ec6a4a760d..760b3afaaf13 100644
--- a/drivers/iommu/amd/iommufd.c
+++ b/drivers/iommu/amd/iommufd.c
@@ -19,7 +19,7 @@ void *amd_iommufd_hw_info(struct device *dev, u32 *length, enum iommu_hw_info_ty
 	    *type != IOMMU_HW_INFO_TYPE_AMD)
 		return ERR_PTR(-EOPNOTSUPP);

-	hwinfo = kzalloc(sizeof(*hwinfo), GFP_KERNEL);
+	hwinfo = kzalloc_obj(*hwinfo, GFP_KERNEL);
 	if (!hwinfo)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/amd/nested.c b/drivers/iommu/amd/nested.c
index 66cc36133c8b..1a5ff73db628 100644
--- a/drivers/iommu/amd/nested.c
+++ b/drivers/iommu/amd/nested.c
@@ -68,7 +68,7 @@ static void *gdom_info_load_or_alloc_locked(struct xarray *xa, unsigned long ind
 		return elm;

 	xa_unlock(xa);
-	elm = kzalloc(sizeof(struct guest_domain_mapping_info), GFP_KERNEL);
+	elm = kzalloc_obj(struct guest_domain_mapping_info, GFP_KERNEL);
 	xa_lock(xa);
 	if (!elm)
 		return ERR_PTR(-ENOMEM);
@@ -102,7 +102,7 @@ amd_iommu_alloc_domain_nested(struct iommufd_viommu *viommu, u32 flags,
 	if (user_data->type != IOMMU_HWPT_DATA_AMD_GUEST)
 		return ERR_PTR(-EOPNOTSUPP);

-	ndom = kzalloc(sizeof(*ndom), GFP_KERNEL);
+	ndom = kzalloc_obj(*ndom, GFP_KERNEL);
 	if (!ndom)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/amd/pasid.c b/drivers/iommu/amd/pasid.c
index 77c8e9a91cbc..38cf8f519477 100644
--- a/drivers/iommu/amd/pasid.c
+++ b/drivers/iommu/amd/pasid.c
@@ -121,7 +121,7 @@ int iommu_sva_set_dev_pasid(struct iommu_domain *domain,
 		return ret;

 	/* Add PASID to protection domain pasid list */
-	pdom_dev_data = kzalloc(sizeof(*pdom_dev_data), GFP_KERNEL);
+	pdom_dev_data = kzalloc_obj(*pdom_dev_data, GFP_KERNEL);
 	if (pdom_dev_data == NULL)
 		return ret;

diff --git a/drivers/iommu/apple-dart.c b/drivers/iommu/apple-dart.c
index 83a5aabcd15d..6b679fa53c3e 100644
--- a/drivers/iommu/apple-dart.c
+++ b/drivers/iommu/apple-dart.c
@@ -768,7 +768,7 @@ static struct iommu_domain *apple_dart_domain_alloc_paging(struct device *dev)
 {
 	struct apple_dart_domain *dart_domain;

-	dart_domain = kzalloc(sizeof(*dart_domain), GFP_KERNEL);
+	dart_domain = kzalloc_obj(*dart_domain, GFP_KERNEL);
 	if (!dart_domain)
 		return NULL;

@@ -812,7 +812,7 @@ static int apple_dart_of_xlate(struct device *dev,
 	sid = args->args[0];

 	if (!cfg) {
-		cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+		cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 		if (!cfg)
 			return -ENOMEM;
 		/* Will be ANDed with DART capabilities */
diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c
index 823461a26659..973afced466c 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c
@@ -23,7 +23,7 @@ void *arm_smmu_hw_info(struct device *dev, u32 *length,
 		return impl_ops->hw_info(master->smmu, length, type);
 	}

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);

@@ -121,7 +121,7 @@ int arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state,
 		return ret;
 	}

-	vmaster = kzalloc(sizeof(*vmaster), GFP_KERNEL);
+	vmaster = kzalloc_obj(*vmaster, GFP_KERNEL);
 	if (!vmaster)
 		return -ENOMEM;
 	vmaster->vsmmu = nested_domain->vsmmu;
@@ -261,7 +261,7 @@ arm_vsmmu_alloc_domain_nested(struct iommufd_viommu *viommu, u32 flags,
 	if (ret)
 		return ERR_PTR(ret);

-	nested_domain = kzalloc(sizeof(*nested_domain), GFP_KERNEL_ACCOUNT);
+	nested_domain = kzalloc_obj(*nested_domain, GFP_KERNEL_ACCOUNT);
 	if (!nested_domain)
 		return ERR_PTR(-ENOMEM);

@@ -361,7 +361,7 @@ int arm_vsmmu_cache_invalidate(struct iommufd_viommu *viommu,
 	struct arm_vsmmu_invalidation_cmd *end;
 	int ret;

-	cmds = kcalloc(array->entry_num, sizeof(*cmds), GFP_KERNEL);
+	cmds = kzalloc_objs(*cmds, array->entry_num, GFP_KERNEL);
 	if (!cmds)
 		return -ENOMEM;
 	cur = cmds;
diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
index b397d1714d97..bee947ad5640 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
@@ -1514,9 +1514,9 @@ static int arm_smmu_alloc_cd_tables(struct arm_smmu_master *master)
 		cd_table->l2.num_l1_ents =
 			DIV_ROUND_UP(max_contexts, CTXDESC_L2_ENTRIES);

-		cd_table->l2.l2ptrs = kcalloc(cd_table->l2.num_l1_ents,
-					     sizeof(*cd_table->l2.l2ptrs),
-					     GFP_KERNEL);
+		cd_table->l2.l2ptrs = kzalloc_objs(*cd_table->l2.l2ptrs,
+						   cd_table->l2.num_l1_ents,
+						   GFP_KERNEL);
 		if (!cd_table->l2.l2ptrs)
 			return -ENOMEM;

@@ -2524,7 +2524,7 @@ struct arm_smmu_domain *arm_smmu_domain_alloc(void)
 {
 	struct arm_smmu_domain *smmu_domain;

-	smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
+	smmu_domain = kzalloc_obj(*smmu_domain, GFP_KERNEL);
 	if (!smmu_domain)
 		return ERR_PTR(-ENOMEM);

@@ -2965,7 +2965,7 @@ int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state,
 				return ret;
 		}

-		master_domain = kzalloc(sizeof(*master_domain), GFP_KERNEL);
+		master_domain = kzalloc_obj(*master_domain, GFP_KERNEL);
 		if (!master_domain) {
 			ret = -ENOMEM;
 			goto err_free_vmaster;
@@ -3517,8 +3517,8 @@ static int arm_smmu_insert_master(struct arm_smmu_device *smmu,
 	int ret = 0;
 	struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(master->dev);

-	master->streams = kcalloc(fwspec->num_ids, sizeof(*master->streams),
-				  GFP_KERNEL);
+	master->streams = kzalloc_objs(*master->streams, fwspec->num_ids,
+				       GFP_KERNEL);
 	if (!master->streams)
 		return -ENOMEM;
 	master->num_streams = fwspec->num_ids;
@@ -3597,7 +3597,7 @@ static struct iommu_device *arm_smmu_probe_device(struct device *dev)
 	if (!smmu)
 		return ERR_PTR(-ENODEV);

-	master = kzalloc(sizeof(*master), GFP_KERNEL);
+	master = kzalloc_obj(*master, GFP_KERNEL);
 	if (!master)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c
index 156b87fe456d..c7892443258d 100644
--- a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c
+++ b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c
@@ -693,7 +693,7 @@ tegra241_vintf_alloc_lvcmdq(struct tegra241_vintf *vintf, u16 lidx)
 	char header[64];
 	int ret;

-	vcmdq = kzalloc(sizeof(*vcmdq), GFP_KERNEL);
+	vcmdq = kzalloc_obj(*vcmdq, GFP_KERNEL);
 	if (!vcmdq)
 		return ERR_PTR(-ENOMEM);

@@ -742,8 +742,8 @@ static int tegra241_cmdqv_init_vintf(struct tegra241_cmdqv *cmdqv, u16 max_idx,
 	vintf->cmdqv = cmdqv;
 	vintf->base = cmdqv->base + TEGRA241_VINTF(idx);

-	vintf->lvcmdqs = kcalloc(cmdqv->num_lvcmdqs_per_vintf,
-				 sizeof(*vintf->lvcmdqs), GFP_KERNEL);
+	vintf->lvcmdqs = kzalloc_objs(*vintf->lvcmdqs,
+				      cmdqv->num_lvcmdqs_per_vintf, GFP_KERNEL);
 	if (!vintf->lvcmdqs) {
 		ida_free(&cmdqv->vintf_ids, idx);
 		return -ENOMEM;
@@ -818,7 +818,7 @@ static void *tegra241_cmdqv_hw_info(struct arm_smmu_device *smmu, u32 *length,
 	if (*type != IOMMU_HW_INFO_TYPE_TEGRA241_CMDQV)
 		return ERR_PTR(-EOPNOTSUPP);

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);

@@ -860,7 +860,7 @@ static int tegra241_cmdqv_init_structures(struct arm_smmu_device *smmu)
 	int lidx;
 	int ret;

-	vintf = kzalloc(sizeof(*vintf), GFP_KERNEL);
+	vintf = kzalloc_obj(*vintf, GFP_KERNEL);
 	if (!vintf)
 		return -ENOMEM;

@@ -947,7 +947,7 @@ __tegra241_cmdqv_probe(struct arm_smmu_device *smmu, struct resource *res,
 		1 << FIELD_GET(CMDQV_NUM_SID_PER_VM_LOG2, regval);

 	cmdqv->vintfs =
-		kcalloc(cmdqv->num_vintfs, sizeof(*cmdqv->vintfs), GFP_KERNEL);
+		kzalloc_objs(*cmdqv->vintfs, cmdqv->num_vintfs, GFP_KERNEL);
 	if (!cmdqv->vintfs)
 		goto free_irq;

diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c b/drivers/iommu/arm/arm-smmu/arm-smmu.c
index 1e218fbea35a..a31e90fcfefe 100644
--- a/drivers/iommu/arm/arm-smmu/arm-smmu.c
+++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c
@@ -927,7 +927,7 @@ static struct iommu_domain *arm_smmu_domain_alloc_paging(struct device *dev)
 	 * We can't really do anything meaningful until we've added a
 	 * master.
 	 */
-	smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
+	smmu_domain = kzalloc_obj(*smmu_domain, GFP_KERNEL);
 	if (!smmu_domain)
 		return NULL;

diff --git a/drivers/iommu/arm/arm-smmu/qcom_iommu.c b/drivers/iommu/arm/arm-smmu/qcom_iommu.c
index c98bed38c58a..7126431c966d 100644
--- a/drivers/iommu/arm/arm-smmu/qcom_iommu.c
+++ b/drivers/iommu/arm/arm-smmu/qcom_iommu.c
@@ -329,7 +329,7 @@ static struct iommu_domain *qcom_iommu_domain_alloc_paging(struct device *dev)
 	 * We can't really do anything meaningful until we've added a
 	 * master.
 	 */
-	qcom_domain = kzalloc(sizeof(*qcom_domain), GFP_KERNEL);
+	qcom_domain = kzalloc_obj(*qcom_domain, GFP_KERNEL);
 	if (!qcom_domain)
 		return NULL;

diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index aeaf8fad985c..d1ecb722b546 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -372,7 +372,7 @@ int iommu_get_dma_cookie(struct iommu_domain *domain)
 	if (domain->cookie_type != IOMMU_COOKIE_NONE)
 		return -EEXIST;

-	cookie = kzalloc(sizeof(*cookie), GFP_KERNEL);
+	cookie = kzalloc_obj(*cookie, GFP_KERNEL);
 	if (!cookie)
 		return -ENOMEM;

@@ -404,7 +404,7 @@ int iommu_get_msi_cookie(struct iommu_domain *domain, dma_addr_t base)
 	if (domain->cookie_type != IOMMU_COOKIE_NONE)
 		return -EEXIST;

-	cookie = kzalloc(sizeof(*cookie), GFP_KERNEL);
+	cookie = kzalloc_obj(*cookie, GFP_KERNEL);
 	if (!cookie)
 		return -ENOMEM;

@@ -480,7 +480,7 @@ static int cookie_init_hw_msi_region(struct iommu_dma_cookie *cookie,
 	num_pages = iova_align(iovad, end - start) >> iova_shift(iovad);

 	for (i = 0; i < num_pages; i++) {
-		msi_page = kmalloc(sizeof(*msi_page), GFP_KERNEL);
+		msi_page = kmalloc_obj(*msi_page, GFP_KERNEL);
 		if (!msi_page)
 			return -ENOMEM;

@@ -880,7 +880,7 @@ static struct page **__iommu_dma_alloc_pages(struct device *dev,
 	if (!order_mask)
 		return NULL;

-	pages = kvcalloc(count, sizeof(*pages), GFP_KERNEL);
+	pages = kvzalloc_objs(*pages, count, GFP_KERNEL);
 	if (!pages)
 		return NULL;

@@ -1045,7 +1045,7 @@ struct sg_table *iommu_dma_alloc_noncontiguous(struct device *dev, size_t size,
 {
 	struct dma_sgt_handle *sh;

-	sh = kmalloc(sizeof(*sh), gfp);
+	sh = kmalloc_obj(*sh, gfp);
 	if (!sh)
 		return NULL;

@@ -2157,7 +2157,7 @@ static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev,
 		if (msi_page->phys == msi_addr)
 			return msi_page;

-	msi_page = kzalloc(sizeof(*msi_page), GFP_KERNEL);
+	msi_page = kzalloc_obj(*msi_page, GFP_KERNEL);
 	if (!msi_page)
 		return NULL;

diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
index b512c6b939ac..2e439699382d 100644
--- a/drivers/iommu/exynos-iommu.c
+++ b/drivers/iommu/exynos-iommu.c
@@ -899,7 +899,7 @@ static struct iommu_domain *exynos_iommu_domain_alloc_paging(struct device *dev)
 	/* Check if correct PTE offsets are initialized */
 	BUG_ON(PG_ENT_SHIFT < 0 || !dma_dev);

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain)
 		return NULL;

@@ -1451,7 +1451,7 @@ static int exynos_iommu_of_xlate(struct device *dev,
 		return -ENODEV;

 	if (!owner) {
-		owner = kzalloc(sizeof(*owner), GFP_KERNEL);
+		owner = kzalloc_obj(*owner, GFP_KERNEL);
 		if (!owner)
 			return -ENOMEM;

diff --git a/drivers/iommu/fsl_pamu.c b/drivers/iommu/fsl_pamu.c
index f37d3b044131..8db71fe57894 100644
--- a/drivers/iommu/fsl_pamu.c
+++ b/drivers/iommu/fsl_pamu.c
@@ -785,7 +785,7 @@ static int fsl_pamu_probe(struct platform_device *pdev)
 		goto error;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data) {
 		ret = -ENOMEM;
 		goto error;
diff --git a/drivers/iommu/hyperv-iommu.c b/drivers/iommu/hyperv-iommu.c
index 0961ac805944..b776c52aca6b 100644
--- a/drivers/iommu/hyperv-iommu.c
+++ b/drivers/iommu/hyperv-iommu.c
@@ -276,7 +276,7 @@ static int hyperv_root_irq_remapping_alloc(struct irq_domain *domain,
 	if (ret < 0)
 		return ret;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data) {
 		irq_domain_free_irqs_common(domain, virq, nr_irqs);
 		return -ENOMEM;
diff --git a/drivers/iommu/intel/cache.c b/drivers/iommu/intel/cache.c
index 385ae5cfb30d..e43c93fb9b1d 100644
--- a/drivers/iommu/intel/cache.c
+++ b/drivers/iommu/intel/cache.c
@@ -49,7 +49,7 @@ int cache_tag_assign(struct dmar_domain *domain, u16 did, struct device *dev,
 	struct list_head *prev;
 	unsigned long flags;

-	tag = kzalloc(sizeof(*tag), GFP_KERNEL);
+	tag = kzalloc_obj(*tag, GFP_KERNEL);
 	if (!tag)
 		return -ENOMEM;

@@ -123,7 +123,7 @@ static int domain_qi_batch_alloc(struct dmar_domain *domain)
 	if (domain->qi_batch)
 		goto out_unlock;

-	domain->qi_batch = kzalloc(sizeof(*domain->qi_batch), GFP_ATOMIC);
+	domain->qi_batch = kzalloc_obj(*domain->qi_batch, GFP_ATOMIC);
 	if (!domain->qi_batch)
 		ret = -ENOMEM;
 out_unlock:
diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c
index ec975c73cfe6..4a2143036b94 100644
--- a/drivers/iommu/intel/dmar.c
+++ b/drivers/iommu/intel/dmar.c
@@ -99,7 +99,7 @@ void *dmar_alloc_dev_scope(void *start, void *end, int *cnt)
 	if (*cnt == 0)
 		return NULL;

-	return kcalloc(*cnt, sizeof(struct dmar_dev_scope), GFP_KERNEL);
+	return kzalloc_objs(struct dmar_dev_scope, *cnt, GFP_KERNEL);
 }

 void dmar_free_dev_scope(struct dmar_dev_scope **devices, int *cnt)
@@ -1046,7 +1046,7 @@ static int alloc_iommu(struct dmar_drhd_unit *drhd)
 		return -EINVAL;
 	}

-	iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
+	iommu = kzalloc_obj(*iommu, GFP_KERNEL);
 	if (!iommu)
 		return -ENOMEM;

@@ -1692,7 +1692,7 @@ int dmar_enable_qi(struct intel_iommu *iommu)
 	if (iommu->qi)
 		return 0;

-	iommu->qi = kmalloc(sizeof(*qi), GFP_ATOMIC);
+	iommu->qi = kmalloc_obj(*qi, GFP_ATOMIC);
 	if (!iommu->qi)
 		return -ENOMEM;

@@ -1713,7 +1713,7 @@ int dmar_enable_qi(struct intel_iommu *iommu)

 	qi->desc = desc;

-	qi->desc_status = kcalloc(QI_LENGTH, sizeof(int), GFP_ATOMIC);
+	qi->desc_status = kzalloc_objs(int, QI_LENGTH, GFP_ATOMIC);
 	if (!qi->desc_status) {
 		iommu_free_pages(qi->desc);
 		kfree(qi);
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 705828b06e32..3505ced050f0 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -1030,7 +1030,7 @@ int domain_attach_iommu(struct dmar_domain *domain, struct intel_iommu *iommu)
 	if (domain->domain.type == IOMMU_DOMAIN_SVA)
 		return 0;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -1926,7 +1926,7 @@ int __init dmar_parse_one_rmrr(struct acpi_dmar_header *header, void *arg)
 		add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
 	}

-	rmrru = kzalloc(sizeof(*rmrru), GFP_KERNEL);
+	rmrru = kzalloc_obj(*rmrru, GFP_KERNEL);
 	if (!rmrru)
 		goto out;

@@ -2779,7 +2779,7 @@ static struct dmar_domain *paging_domain_alloc(void)
 {
 	struct dmar_domain *domain;

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain)
 		return ERR_PTR(-ENOMEM);

@@ -3237,7 +3237,7 @@ static struct iommu_device *intel_iommu_probe_device(struct device *dev)
 	if (!iommu || !iommu->iommu.ops)
 		return ERR_PTR(-ENODEV);

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);

@@ -3576,7 +3576,7 @@ domain_add_dev_pasid(struct iommu_domain *domain,
 	unsigned long flags;
 	int ret;

-	dev_pasid = kzalloc(sizeof(*dev_pasid), GFP_KERNEL);
+	dev_pasid = kzalloc_obj(*dev_pasid, GFP_KERNEL);
 	if (!dev_pasid)
 		return ERR_PTR(-ENOMEM);

@@ -3672,7 +3672,7 @@ static void *intel_iommu_hw_info(struct device *dev, u32 *length,
 	    *type != IOMMU_HW_INFO_TYPE_INTEL_VTD)
 		return ERR_PTR(-EOPNOTSUPP);

-	vtd = kzalloc(sizeof(*vtd), GFP_KERNEL);
+	vtd = kzalloc_obj(*vtd, GFP_KERNEL);
 	if (!vtd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_remapping.c
index ecb591e98565..105958b4a29e 100644
--- a/drivers/iommu/intel/irq_remapping.c
+++ b/drivers/iommu/intel/irq_remapping.c
@@ -533,7 +533,7 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)
 	if (iommu->ir_table)
 		return 0;

-	ir_table = kzalloc(sizeof(struct ir_table), GFP_KERNEL);
+	ir_table = kzalloc_obj(struct ir_table, GFP_KERNEL);
 	if (!ir_table)
 		return -ENOMEM;

@@ -1426,7 +1426,7 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain,
 		return ret;

 	ret = -ENOMEM;
-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		goto out_free_parent;

@@ -1448,7 +1448,7 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain,
 		}

 		if (i > 0) {
-			ird = kzalloc(sizeof(*ird), GFP_KERNEL);
+			ird = kzalloc_obj(*ird, GFP_KERNEL);
 			if (!ird)
 				goto out_free_data;
 			/* Initialize the common data */
diff --git a/drivers/iommu/intel/nested.c b/drivers/iommu/intel/nested.c
index e9a440e9c960..2b979bec56ce 100644
--- a/drivers/iommu/intel/nested.c
+++ b/drivers/iommu/intel/nested.c
@@ -218,7 +218,7 @@ intel_iommu_domain_alloc_nested(struct device *dev, struct iommu_domain *parent,
 	if (ret)
 		return ERR_PTR(ret);

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL_ACCOUNT);
+	domain = kzalloc_obj(*domain, GFP_KERNEL_ACCOUNT);
 	if (!domain)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/intel/pasid.c b/drivers/iommu/intel/pasid.c
index b63a71904cfb..5ffe84dee862 100644
--- a/drivers/iommu/intel/pasid.c
+++ b/drivers/iommu/intel/pasid.c
@@ -50,7 +50,7 @@ int intel_pasid_alloc_table(struct device *dev)
 	if (WARN_ON(info->pasid_table))
 		return -EEXIST;

-	pasid_table = kzalloc(sizeof(*pasid_table), GFP_KERNEL);
+	pasid_table = kzalloc_obj(*pasid_table, GFP_KERNEL);
 	if (!pasid_table)
 		return -ENOMEM;

diff --git a/drivers/iommu/intel/perf.c b/drivers/iommu/intel/perf.c
index dceeadc3ee7c..02168f2f20a4 100644
--- a/drivers/iommu/intel/perf.c
+++ b/drivers/iommu/intel/perf.c
@@ -33,8 +33,8 @@ int dmar_latency_enable(struct intel_iommu *iommu, enum latency_type type)

 	spin_lock_irqsave(&latency_lock, flags);
 	if (!iommu->perf_statistic) {
-		iommu->perf_statistic = kcalloc(DMAR_LATENCY_NUM, sizeof(*lstat),
-						GFP_ATOMIC);
+		iommu->perf_statistic = kzalloc_objs(*lstat, DMAR_LATENCY_NUM,
+						     GFP_ATOMIC);
 		if (!iommu->perf_statistic) {
 			ret = -ENOMEM;
 			goto unlock_out;
diff --git a/drivers/iommu/intel/perfmon.c b/drivers/iommu/intel/perfmon.c
index 75f493bcb353..76b62f2c8d92 100644
--- a/drivers/iommu/intel/perfmon.c
+++ b/drivers/iommu/intel/perfmon.c
@@ -591,7 +591,7 @@ int alloc_iommu_pmu(struct intel_iommu *iommu)
 	if (!ecmd_has_pmu_essential(iommu))
 		return -ENODEV;

-	iommu_pmu = kzalloc(sizeof(*iommu_pmu), GFP_KERNEL);
+	iommu_pmu = kzalloc_obj(*iommu_pmu, GFP_KERNEL);
 	if (!iommu_pmu)
 		return -ENOMEM;

diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c
index 71de7947971f..be165cb9d01e 100644
--- a/drivers/iommu/intel/svm.c
+++ b/drivers/iommu/intel/svm.c
@@ -210,7 +210,7 @@ struct iommu_domain *intel_svm_domain_alloc(struct device *dev,
 	if (ret)
 		return ERR_PTR(ret);

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/io-pgfault.c b/drivers/iommu/io-pgfault.c
index 8b5926c1452e..a0d8fd7f2e84 100644
--- a/drivers/iommu/io-pgfault.c
+++ b/drivers/iommu/io-pgfault.c
@@ -65,7 +65,7 @@ static int report_partial_fault(struct iommu_fault_param *fault_param,
 {
 	struct iopf_fault *iopf;

-	iopf = kzalloc(sizeof(*iopf), GFP_KERNEL);
+	iopf = kzalloc_obj(*iopf, GFP_KERNEL);
 	if (!iopf)
 		return -ENOMEM;

@@ -85,7 +85,7 @@ static struct iopf_group *iopf_group_alloc(struct iommu_fault_param *iopf_param,
 	struct iopf_fault *iopf, *next;
 	struct iopf_group *group;

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group) {
 		/*
 		 * We always need to construct the group as we need it to abort
@@ -400,7 +400,7 @@ int iopf_queue_add_device(struct iopf_queue *queue, struct device *dev)
 		goto done_unlock;
 	}

-	fault_param = kzalloc(sizeof(*fault_param), GFP_KERNEL);
+	fault_param = kzalloc_obj(*fault_param, GFP_KERNEL);
 	if (!fault_param) {
 		ret = -ENOMEM;
 		goto done_unlock;
@@ -503,7 +503,7 @@ struct iopf_queue *iopf_queue_alloc(const char *name)
 {
 	struct iopf_queue *queue;

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue)
 		return NULL;

diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c
index 523355e91a2c..67ce99ca82b3 100644
--- a/drivers/iommu/io-pgtable-arm-v7s.c
+++ b/drivers/iommu/io-pgtable-arm-v7s.c
@@ -692,7 +692,7 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg,
 	    !arm_v7s_is_mtk_enabled(cfg))
 		return NULL;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;

diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
index 05d63fe92e43..c5076caf17aa 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -930,7 +930,7 @@ arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg)
 	if (cfg->oas > ARM_LPAE_MAX_ADDR_BITS)
 		return NULL;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;

diff --git a/drivers/iommu/io-pgtable-dart.c b/drivers/iommu/io-pgtable-dart.c
index 54d287cc0dd1..d31f00ff1206 100644
--- a/drivers/iommu/io-pgtable-dart.c
+++ b/drivers/iommu/io-pgtable-dart.c
@@ -388,7 +388,7 @@ dart_alloc_pgtable(struct io_pgtable_cfg *cfg)
 	if (tbl_bits > max_tbl_bits)
 		return NULL;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;

diff --git a/drivers/iommu/iommu-sva.c b/drivers/iommu/iommu-sva.c
index e1e63c2be82b..6f3b26a823ec 100644
--- a/drivers/iommu/iommu-sva.c
+++ b/drivers/iommu/iommu-sva.c
@@ -35,7 +35,7 @@ static struct iommu_mm_data *iommu_alloc_mm_data(struct mm_struct *mm, struct de
 		return iommu_mm;
 	}

-	iommu_mm = kzalloc(sizeof(struct iommu_mm_data), GFP_KERNEL);
+	iommu_mm = kzalloc_obj(struct iommu_mm_data, GFP_KERNEL);
 	if (!iommu_mm)
 		return ERR_PTR(-ENOMEM);

@@ -108,7 +108,7 @@ struct iommu_sva *iommu_sva_bind_device(struct device *dev, struct mm_struct *mm
 		goto out_unlock;
 	}

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle) {
 		ret = -ENOMEM;
 		goto out_unlock;
diff --git a/drivers/iommu/iommu-sysfs.c b/drivers/iommu/iommu-sysfs.c
index 170022c09536..cf72d58fcb7c 100644
--- a/drivers/iommu/iommu-sysfs.c
+++ b/drivers/iommu/iommu-sysfs.c
@@ -59,7 +59,7 @@ int iommu_device_sysfs_add(struct iommu_device *iommu,
 	va_list vargs;
 	int ret;

-	iommu->dev = kzalloc(sizeof(*iommu->dev), GFP_KERNEL);
+	iommu->dev = kzalloc_obj(*iommu->dev, GFP_KERNEL);
 	if (!iommu->dev)
 		return -ENOMEM;

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 4926a43118e6..1a98d65fb35d 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -233,7 +233,7 @@ static int __init iommu_subsys_init(void)
 			(iommu_cmd_line & IOMMU_CMD_LINE_STRICT) ?
 				" (set via kernel command line)" : "");

-	nb = kcalloc(ARRAY_SIZE(iommu_buses), sizeof(*nb), GFP_KERNEL);
+	nb = kzalloc_objs(*nb, ARRAY_SIZE(iommu_buses), GFP_KERNEL);
 	if (!nb)
 		return -ENOMEM;

@@ -383,7 +383,7 @@ static struct dev_iommu *dev_iommu_get(struct device *dev)
 	if (param)
 		return param;

-	param = kzalloc(sizeof(*param), GFP_KERNEL);
+	param = kzalloc_obj(*param, GFP_KERNEL);
 	if (!param)
 		return NULL;

@@ -1053,7 +1053,7 @@ struct iommu_group *iommu_group_alloc(void)
 	struct iommu_group *group;
 	int ret;

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group)
 		return ERR_PTR(-ENOMEM);

@@ -1244,7 +1244,7 @@ static struct group_device *iommu_group_alloc_device(struct iommu_group *group,
 	int ret, i = 0;
 	struct group_device *device;

-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		return ERR_PTR(-ENOMEM);

@@ -2939,7 +2939,7 @@ struct iommu_resv_region *iommu_alloc_resv_region(phys_addr_t start,
 {
 	struct iommu_resv_region *region;

-	region = kzalloc(sizeof(*region), gfp);
+	region = kzalloc_obj(*region, gfp);
 	if (!region)
 		return NULL;

@@ -3010,7 +3010,7 @@ int iommu_fwspec_init(struct device *dev, struct fwnode_handle *iommu_fwnode)
 		return -ENOMEM;

 	/* Preallocate for the overwhelmingly common case of 1 ID */
-	fwspec = kzalloc(struct_size(fwspec, ids, 1), GFP_KERNEL);
+	fwspec = kzalloc_flex(*fwspec, ids, 1, GFP_KERNEL);
 	if (!fwspec)
 		return -ENOMEM;

diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
index 4c842368289f..5a2628854a05 100644
--- a/drivers/iommu/iommufd/device.c
+++ b/drivers/iommu/iommufd/device.c
@@ -87,7 +87,7 @@ static struct iommufd_group *iommufd_get_group(struct iommufd_ctx *ictx,
 	}
 	xa_unlock(&ictx->groups);

-	new_igroup = kzalloc(sizeof(*new_igroup), GFP_KERNEL);
+	new_igroup = kzalloc_obj(*new_igroup, GFP_KERNEL);
 	if (!new_igroup) {
 		iommu_group_put(group);
 		return ERR_PTR(-ENOMEM);
@@ -508,7 +508,7 @@ static int iommufd_hwpt_attach_device(struct iommufd_hw_pagetable *hwpt,
 	if (rc)
 		return rc;

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

@@ -575,7 +575,7 @@ static int iommufd_hwpt_replace_device(struct iommufd_device *idev,

 	old_handle = iommufd_device_get_attach_handle(idev, pasid);

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

@@ -619,7 +619,7 @@ int iommufd_hw_pagetable_attach(struct iommufd_hw_pagetable *hwpt,
 	}

 	if (!attach) {
-		attach = kzalloc(sizeof(*attach), GFP_KERNEL);
+		attach = kzalloc_obj(*attach, GFP_KERNEL);
 		if (!attach) {
 			rc = -ENOMEM;
 			goto err_release_pasid;
diff --git a/drivers/iommu/iommufd/driver.c b/drivers/iommu/iommufd/driver.c
index 21d4a35538f6..b71fb2472945 100644
--- a/drivers/iommu/iommufd/driver.c
+++ b/drivers/iommu/iommufd/driver.c
@@ -155,7 +155,7 @@ int iommufd_viommu_report_event(struct iommufd_viommu *viommu,
 		goto out_set_header;
 	}

-	vevent = kzalloc(struct_size(vevent, event_data, data_len), GFP_ATOMIC);
+	vevent = kzalloc_flex(*vevent, event_data, data_len, GFP_ATOMIC);
 	if (!vevent) {
 		rc = -ENOMEM;
 		vevent = &veventq->lost_events_header;
@@ -202,7 +202,7 @@ iommufd_sw_msi_get_map(struct iommufd_ctx *ictx, phys_addr_t msi_addr,
 	    BITS_PER_BYTE * sizeof_field(struct iommufd_sw_msi_maps, bitmap))
 		return ERR_PTR(-EOVERFLOW);

-	cur = kzalloc(sizeof(*cur), GFP_KERNEL);
+	cur = kzalloc_obj(*cur, GFP_KERNEL);
 	if (!cur)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/iommufd/eventq.c b/drivers/iommu/iommufd/eventq.c
index e23d9ee4fe38..f1e686b3a265 100644
--- a/drivers/iommu/iommufd/eventq.c
+++ b/drivers/iommu/iommufd/eventq.c
@@ -262,7 +262,7 @@ iommufd_veventq_deliver_fetch(struct iommufd_veventq *veventq)
 		next = list_first_entry(list, struct iommufd_vevent, node);
 		/* Make a copy of the lost_events_header for copy_to_user */
 		if (next == &veventq->lost_events_header) {
-			vevent = kzalloc(sizeof(*vevent), GFP_ATOMIC);
+			vevent = kzalloc_obj(*vevent, GFP_ATOMIC);
 			if (!vevent)
 				goto out_unlock;
 		}
diff --git a/drivers/iommu/iommufd/io_pagetable.c b/drivers/iommu/iommufd/io_pagetable.c
index 436992331111..ee003bb2f647 100644
--- a/drivers/iommu/iommufd/io_pagetable.c
+++ b/drivers/iommu/iommufd/io_pagetable.c
@@ -245,7 +245,7 @@ static struct iopt_area *iopt_area_alloc(void)
 {
 	struct iopt_area *area;

-	area = kzalloc(sizeof(*area), GFP_KERNEL_ACCOUNT);
+	area = kzalloc_obj(*area, GFP_KERNEL_ACCOUNT);
 	if (!area)
 		return NULL;
 	RB_CLEAR_NODE(&area->node.rb);
@@ -715,7 +715,7 @@ int iopt_get_pages(struct io_pagetable *iopt, unsigned long iova,
 		struct iopt_pages_list *elm;
 		unsigned long last = min(last_iova, iopt_area_last_iova(area));

-		elm = kzalloc(sizeof(*elm), GFP_KERNEL_ACCOUNT);
+		elm = kzalloc_obj(*elm, GFP_KERNEL_ACCOUNT);
 		if (!elm) {
 			rc = -ENOMEM;
 			goto err_free;
@@ -888,7 +888,7 @@ int iopt_reserve_iova(struct io_pagetable *iopt, unsigned long start,
 	    iopt_allowed_iter_first(iopt, start, last))
 		return -EADDRINUSE;

-	reserved = kzalloc(sizeof(*reserved), GFP_KERNEL_ACCOUNT);
+	reserved = kzalloc_obj(*reserved, GFP_KERNEL_ACCOUNT);
 	if (!reserved)
 		return -ENOMEM;
 	reserved->node.start = start;
diff --git a/drivers/iommu/iommufd/ioas.c b/drivers/iommu/iommufd/ioas.c
index f4721afedadc..fed06c2b728e 100644
--- a/drivers/iommu/iommufd/ioas.c
+++ b/drivers/iommu/iommufd/ioas.c
@@ -132,7 +132,7 @@ static int iommufd_ioas_load_iovas(struct rb_root_cached *itree,
 		if (interval_tree_iter_first(itree, range.start, range.last))
 			return -EINVAL;

-		allowed = kzalloc(sizeof(*allowed), GFP_KERNEL_ACCOUNT);
+		allowed = kzalloc_obj(*allowed, GFP_KERNEL_ACCOUNT);
 		if (!allowed)
 			return -ENOMEM;
 		allowed->node.start = range.start;
diff --git a/drivers/iommu/iommufd/iova_bitmap.c b/drivers/iommu/iommufd/iova_bitmap.c
index b5b67a9d3fb3..151285e0521e 100644
--- a/drivers/iommu/iommufd/iova_bitmap.c
+++ b/drivers/iommu/iommufd/iova_bitmap.c
@@ -247,7 +247,7 @@ struct iova_bitmap *iova_bitmap_alloc(unsigned long iova, size_t length,
 	struct iova_bitmap *bitmap;
 	int rc;

-	bitmap = kzalloc(sizeof(*bitmap), GFP_KERNEL);
+	bitmap = kzalloc_obj(*bitmap, GFP_KERNEL);
 	if (!bitmap)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/iommufd/main.c b/drivers/iommu/iommufd/main.c
index 5cc4b08c25f5..8c6d43601afb 100644
--- a/drivers/iommu/iommufd/main.c
+++ b/drivers/iommu/iommufd/main.c
@@ -296,7 +296,7 @@ static int iommufd_fops_open(struct inode *inode, struct file *filp)
 {
 	struct iommufd_ctx *ictx;

-	ictx = kzalloc(sizeof(*ictx), GFP_KERNEL_ACCOUNT);
+	ictx = kzalloc_obj(*ictx, GFP_KERNEL_ACCOUNT);
 	if (!ictx)
 		return -ENOMEM;

diff --git a/drivers/iommu/iommufd/pages.c b/drivers/iommu/iommufd/pages.c
index f863fea75b98..38efabe95dba 100644
--- a/drivers/iommu/iommufd/pages.c
+++ b/drivers/iommu/iommufd/pages.c
@@ -1372,7 +1372,7 @@ static struct iopt_pages *iopt_alloc_pages(unsigned long start_byte,
 	if (length > SIZE_MAX - PAGE_SIZE || length == 0)
 		return ERR_PTR(-EINVAL);

-	pages = kzalloc(sizeof(*pages), GFP_KERNEL_ACCOUNT);
+	pages = kzalloc_obj(*pages, GFP_KERNEL_ACCOUNT);
 	if (!pages)
 		return ERR_PTR(-ENOMEM);

@@ -1575,7 +1575,7 @@ int iopt_dmabuf_track_domain(struct iopt_pages *pages, struct iopt_area *area,
 		if (WARN_ON(track->domain == domain && track->area == area))
 			return -EINVAL;

-	track = kzalloc(sizeof(*track), GFP_KERNEL);
+	track = kzalloc_obj(*track, GFP_KERNEL);
 	if (!track)
 		return -ENOMEM;
 	track->domain = domain;
@@ -2455,7 +2455,7 @@ int iopt_area_add_access(struct iopt_area *area, unsigned long start_index,
 		return 0;
 	}

-	access = kzalloc(sizeof(*access), GFP_KERNEL_ACCOUNT);
+	access = kzalloc_obj(*access, GFP_KERNEL_ACCOUNT);
 	if (!access) {
 		rc = -ENOMEM;
 		goto err_unlock;
diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selftest.c
index 989d8c4c60a7..530202748016 100644
--- a/drivers/iommu/iommufd/selftest.c
+++ b/drivers/iommu/iommufd/selftest.c
@@ -308,7 +308,7 @@ static void *mock_domain_hw_info(struct device *dev, u32 *length,
 	    *type != IOMMU_HW_INFO_TYPE_SELFTEST)
 		return ERR_PTR(-EOPNOTSUPP);

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);

@@ -353,7 +353,7 @@ __mock_domain_alloc_nested(const struct iommu_user_data *user_data)
 	if (rc)
 		return ERR_PTR(rc);

-	mock_nested = kzalloc(sizeof(*mock_nested), GFP_KERNEL);
+	mock_nested = kzalloc_obj(*mock_nested, GFP_KERNEL);
 	if (!mock_nested)
 		return ERR_PTR(-ENOMEM);
 	mock_nested->domain.ops = &domain_nested_ops;
@@ -441,7 +441,7 @@ mock_domain_alloc_pgtable(struct device *dev,
 	struct mock_iommu_domain *mock;
 	int rc;

-	mock = kzalloc(sizeof(*mock), GFP_KERNEL);
+	mock = kzalloc_obj(*mock, GFP_KERNEL);
 	if (!mock)
 		return ERR_PTR(-ENOMEM);
 	mock->domain.type = IOMMU_DOMAIN_UNMANAGED;
@@ -674,7 +674,7 @@ static int mock_viommu_cache_invalidate(struct iommufd_viommu *viommu,
 		return 0;
 	}

-	cmds = kcalloc(array->entry_num, sizeof(*cmds), GFP_KERNEL);
+	cmds = kzalloc_objs(*cmds, array->entry_num, GFP_KERNEL);
 	if (!cmds)
 		return -ENOMEM;
 	cur = cmds;
@@ -1023,7 +1023,7 @@ static struct mock_dev *mock_dev_create(unsigned long dev_flags)
 	if (dev_flags & ~valid_flags)
 		return ERR_PTR(-EINVAL);

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return ERR_PTR(-ENOMEM);

@@ -1448,7 +1448,7 @@ static struct selftest_access *iommufd_test_alloc_access(void)
 	struct selftest_access *staccess;
 	struct file *filep;

-	staccess = kzalloc(sizeof(*staccess), GFP_KERNEL_ACCOUNT);
+	staccess = kzalloc_obj(*staccess, GFP_KERNEL_ACCOUNT);
 	if (!staccess)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&staccess->items);
@@ -1592,7 +1592,7 @@ static int iommufd_test_access_pages(struct iommufd_ucmd *ucmd,
 	npages = (ALIGN(iova + length, PAGE_SIZE) -
 		  ALIGN_DOWN(iova, PAGE_SIZE)) /
 		 PAGE_SIZE;
-	pages = kvcalloc(npages, sizeof(*pages), GFP_KERNEL_ACCOUNT);
+	pages = kvzalloc_objs(*pages, npages, GFP_KERNEL_ACCOUNT);
 	if (!pages) {
 		rc = -ENOMEM;
 		goto out_put;
@@ -1622,7 +1622,7 @@ static int iommufd_test_access_pages(struct iommufd_ucmd *ucmd,
 			goto out_unaccess;
 	}

-	item = kzalloc(sizeof(*item), GFP_KERNEL_ACCOUNT);
+	item = kzalloc_obj(*item, GFP_KERNEL_ACCOUNT);
 	if (!item) {
 		rc = -ENOMEM;
 		goto out_unaccess;
@@ -2032,7 +2032,7 @@ static int iommufd_test_dmabuf_get(struct iommufd_ucmd *ucmd,
 	if (len == 0 || len > PAGE_SIZE * 512)
 		return -EINVAL;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/iommu/iommufd/viommu.c b/drivers/iommu/iommufd/viommu.c
index 462b457ffd0c..4081deda9b33 100644
--- a/drivers/iommu/iommufd/viommu.c
+++ b/drivers/iommu/iommufd/viommu.c
@@ -312,7 +312,7 @@ iommufd_hw_queue_alloc_phys(struct iommu_hw_queue_alloc *cmd,
 	 * Use kvcalloc() to avoid memory fragmentation for a large page array.
 	 * Set __GFP_NOWARN to avoid syzkaller blowups
 	 */
-	pages = kvcalloc(max_npages, sizeof(*pages), GFP_KERNEL | __GFP_NOWARN);
+	pages = kvzalloc_objs(*pages, max_npages, GFP_KERNEL | __GFP_NOWARN);
 	if (!pages)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c
index 18f839721813..ac9d6a4c1432 100644
--- a/drivers/iommu/iova.c
+++ b/drivers/iommu/iova.c
@@ -715,9 +715,8 @@ int iova_domain_init_rcaches(struct iova_domain *iovad)
 	unsigned int cpu;
 	int i, ret;

-	iovad->rcaches = kcalloc(IOVA_RANGE_CACHE_MAX_SIZE,
-				 sizeof(struct iova_rcache),
-				 GFP_KERNEL);
+	iovad->rcaches = kzalloc_objs(struct iova_rcache,
+				      IOVA_RANGE_CACHE_MAX_SIZE, GFP_KERNEL);
 	if (!iovad->rcaches)
 		return -ENOMEM;

diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
index ca848288dbf2..bd18c3a7ee54 100644
--- a/drivers/iommu/ipmmu-vmsa.c
+++ b/drivers/iommu/ipmmu-vmsa.c
@@ -566,7 +566,7 @@ static struct iommu_domain *ipmmu_domain_alloc_paging(struct device *dev)
 {
 	struct ipmmu_vmsa_domain *domain;

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain)
 		return NULL;

diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
index 819add75a665..00b4ea90e500 100644
--- a/drivers/iommu/msm_iommu.c
+++ b/drivers/iommu/msm_iommu.c
@@ -306,7 +306,7 @@ static struct iommu_domain *msm_iommu_domain_alloc_paging(struct device *dev)
 {
 	struct msm_priv *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		goto fail_nomem;

@@ -605,7 +605,7 @@ static int insert_iommu_master(struct device *dev,
 	int sid;

 	if (list_empty(&(*iommu)->ctx_list)) {
-		master = kzalloc(sizeof(*master), GFP_ATOMIC);
+		master = kzalloc_obj(*master, GFP_ATOMIC);
 		if (!master) {
 			dev_err(dev, "Failed to allocate iommu_master\n");
 			return -ENOMEM;
diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 60fcd3d3b5eb..6dd60f4a8087 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -704,7 +704,7 @@ static struct iommu_domain *mtk_iommu_domain_alloc_paging(struct device *dev)
 {
 	struct mtk_iommu_domain *dom;

-	dom = kzalloc(sizeof(*dom), GFP_KERNEL);
+	dom = kzalloc_obj(*dom, GFP_KERNEL);
 	if (!dom)
 		return NULL;
 	mutex_init(&dom->mutex);
diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
index c8d8eff5373d..e5ad7fa6e4e7 100644
--- a/drivers/iommu/mtk_iommu_v1.c
+++ b/drivers/iommu/mtk_iommu_v1.c
@@ -284,7 +284,7 @@ static struct iommu_domain *mtk_iommu_v1_domain_alloc_paging(struct device *dev)
 {
 	struct mtk_iommu_v1_domain *dom;

-	dom = kzalloc(sizeof(*dom), GFP_KERNEL);
+	dom = kzalloc_obj(*dom, GFP_KERNEL);
 	if (!dom)
 		return NULL;

diff --git a/drivers/iommu/omap-iommu-debug.c b/drivers/iommu/omap-iommu-debug.c
index 259f65291d90..b0853f69f98d 100644
--- a/drivers/iommu/omap-iommu-debug.c
+++ b/drivers/iommu/omap-iommu-debug.c
@@ -147,7 +147,7 @@ static size_t omap_dump_tlb_entries(struct omap_iommu *obj, struct seq_file *s)

 	num = obj->nr_tlb_entries;

-	cr = kcalloc(num, sizeof(*cr), GFP_KERNEL);
+	cr = kzalloc_objs(*cr, num, GFP_KERNEL);
 	if (!cr)
 		return 0;

diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
index 768973b7e511..f4fd0fba6a8c 100644
--- a/drivers/iommu/omap-iommu.c
+++ b/drivers/iommu/omap-iommu.c
@@ -311,7 +311,7 @@ static struct cr_regs *iotlb_alloc_cr(struct omap_iommu *obj,
 		return ERR_PTR(-EINVAL);
 	}

-	cr = kmalloc(sizeof(*cr), GFP_KERNEL);
+	cr = kmalloc_obj(*cr, GFP_KERNEL);
 	if (!cr)
 		return ERR_PTR(-ENOMEM);

@@ -1395,8 +1395,7 @@ static int omap_iommu_attach_init(struct device *dev,
 	if (!odomain->num_iommus)
 		return -ENODEV;

-	odomain->iommus = kcalloc(odomain->num_iommus, sizeof(*iommu),
-				  GFP_ATOMIC);
+	odomain->iommus = kzalloc_objs(*iommu, odomain->num_iommus, GFP_ATOMIC);
 	if (!odomain->iommus)
 		return -ENOMEM;

@@ -1564,7 +1563,7 @@ static struct iommu_domain *omap_iommu_domain_alloc_paging(struct device *dev)
 {
 	struct omap_iommu_domain *omap_domain;

-	omap_domain = kzalloc(sizeof(*omap_domain), GFP_KERNEL);
+	omap_domain = kzalloc_obj(*omap_domain, GFP_KERNEL);
 	if (!omap_domain)
 		return NULL;

@@ -1656,7 +1655,7 @@ static struct iommu_device *omap_iommu_probe_device(struct device *dev)
 	if (num_iommus < 0)
 		return ERR_PTR(-ENODEV);

-	arch_data = kcalloc(num_iommus + 1, sizeof(*arch_data), GFP_KERNEL);
+	arch_data = kzalloc_objs(*arch_data, num_iommus + 1, GFP_KERNEL);
 	if (!arch_data)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/iommu/riscv/iommu.c b/drivers/iommu/riscv/iommu.c
index 2d8fb0859f30..26068cefa837 100644
--- a/drivers/iommu/riscv/iommu.c
+++ b/drivers/iommu/riscv/iommu.c
@@ -853,7 +853,7 @@ static int riscv_iommu_bond_link(struct riscv_iommu_domain *domain,
 	struct riscv_iommu_bond *bond;
 	struct list_head *bonds;

-	bond = kzalloc(sizeof(*bond), GFP_KERNEL);
+	bond = kzalloc_obj(*bond, GFP_KERNEL);
 	if (!bond)
 		return -ENOMEM;
 	bond->dev = dev;
@@ -1380,7 +1380,7 @@ static struct iommu_domain *riscv_iommu_alloc_paging_domain(struct device *dev)
 		return ERR_PTR(-ENODEV);
 	}

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain)
 		return ERR_PTR(-ENOMEM);

@@ -1504,7 +1504,7 @@ static struct iommu_device *riscv_iommu_probe_device(struct device *dev)
 	if (iommu->ddt_mode <= RISCV_IOMMU_DDTP_IOMMU_MODE_BARE)
 		return ERR_PTR(-ENODEV);

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);
 	/*
diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c
index 85f3667e797c..e0cfe7bbef8c 100644
--- a/drivers/iommu/rockchip-iommu.c
+++ b/drivers/iommu/rockchip-iommu.c
@@ -1064,7 +1064,7 @@ static struct iommu_domain *rk_iommu_domain_alloc_paging(struct device *dev)
 	struct rk_iommu_domain *rk_domain;
 	struct rk_iommu *iommu;

-	rk_domain = kzalloc(sizeof(*rk_domain), GFP_KERNEL);
+	rk_domain = kzalloc_obj(*rk_domain, GFP_KERNEL);
 	if (!rk_domain)
 		return NULL;

diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c
index fe679850af28..dcef361f9806 100644
--- a/drivers/iommu/s390-iommu.c
+++ b/drivers/iommu/s390-iommu.c
@@ -531,7 +531,7 @@ static struct iommu_domain *s390_domain_alloc_paging(struct device *dev)
 	struct s390_domain *s390_domain;
 	u64 aperture_size;

-	s390_domain = kzalloc(sizeof(*s390_domain), GFP_KERNEL);
+	s390_domain = kzalloc_obj(*s390_domain, GFP_KERNEL);
 	if (!s390_domain)
 		return NULL;

diff --git a/drivers/iommu/sprd-iommu.c b/drivers/iommu/sprd-iommu.c
index 555d4505c747..0164c08ed9dc 100644
--- a/drivers/iommu/sprd-iommu.c
+++ b/drivers/iommu/sprd-iommu.c
@@ -137,7 +137,7 @@ static struct iommu_domain *sprd_iommu_domain_alloc_paging(struct device *dev)
 {
 	struct sprd_iommu_domain *dom;

-	dom = kzalloc(sizeof(*dom), GFP_KERNEL);
+	dom = kzalloc_obj(*dom, GFP_KERNEL);
 	if (!dom)
 		return NULL;

diff --git a/drivers/iommu/sun50i-iommu.c b/drivers/iommu/sun50i-iommu.c
index 90b26fe21817..30f93e691c09 100644
--- a/drivers/iommu/sun50i-iommu.c
+++ b/drivers/iommu/sun50i-iommu.c
@@ -686,7 +686,7 @@ sun50i_iommu_domain_alloc_paging(struct device *dev)
 {
 	struct sun50i_iommu_domain *sun50i_domain;

-	sun50i_domain = kzalloc(sizeof(*sun50i_domain), GFP_KERNEL);
+	sun50i_domain = kzalloc_obj(*sun50i_domain, GFP_KERNEL);
 	if (!sun50i_domain)
 		return NULL;

diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c
index c391e7f2cde6..4890a88ac169 100644
--- a/drivers/iommu/tegra-smmu.c
+++ b/drivers/iommu/tegra-smmu.c
@@ -289,7 +289,7 @@ static struct iommu_domain *tegra_smmu_domain_alloc_paging(struct device *dev)
 {
 	struct tegra_smmu_as *as;

-	as = kzalloc(sizeof(*as), GFP_KERNEL);
+	as = kzalloc_obj(*as, GFP_KERNEL);
 	if (!as)
 		return NULL;

@@ -308,7 +308,7 @@ static struct iommu_domain *tegra_smmu_domain_alloc_paging(struct device *dev)
 		return NULL;
 	}

-	as->pts = kcalloc(SMMU_NUM_PDE, sizeof(*as->pts), GFP_KERNEL);
+	as->pts = kzalloc_objs(*as->pts, SMMU_NUM_PDE, GFP_KERNEL);
 	if (!as->pts) {
 		kfree(as->count);
 		iommu_free_pages(as->pd);
diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c
index d314fa5cd847..ba8a70fdb494 100644
--- a/drivers/iommu/virtio-iommu.c
+++ b/drivers/iommu/virtio-iommu.c
@@ -231,7 +231,7 @@ static int __viommu_add_req(struct viommu_dev *viommu, void *buf, size_t len,
 	if (write_offset <= 0)
 		return -EINVAL;

-	req = kzalloc(struct_size(req, buf, len), GFP_ATOMIC);
+	req = kzalloc_flex(*req, buf, len, GFP_ATOMIC);
 	if (!req)
 		return -ENOMEM;

@@ -333,7 +333,7 @@ static int viommu_add_mapping(struct viommu_domain *vdomain, u64 iova, u64 end,
 	unsigned long irqflags;
 	struct viommu_mapping *mapping;

-	mapping = kzalloc(sizeof(*mapping), GFP_ATOMIC);
+	mapping = kzalloc_obj(*mapping, GFP_ATOMIC);
 	if (!mapping)
 		return -ENOMEM;

@@ -670,7 +670,7 @@ static struct iommu_domain *viommu_domain_alloc_paging(struct device *dev)
 		return ERR_PTR(-ENODEV);
 	}

-	vdomain = kzalloc(sizeof(*vdomain), GFP_KERNEL);
+	vdomain = kzalloc_obj(*vdomain, GFP_KERNEL);
 	if (!vdomain)
 		return ERR_PTR(-ENOMEM);

@@ -1028,7 +1028,7 @@ static struct iommu_device *viommu_probe_device(struct device *dev)
 	if (!viommu)
 		return ERR_PTR(-ENODEV);

-	vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
+	vdev = kzalloc_obj(*vdev, GFP_KERNEL);
 	if (!vdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/ipack/carriers/tpci200.c b/drivers/ipack/carriers/tpci200.c
index cbfdadecb23b..6d1058dc8faa 100644
--- a/drivers/ipack/carriers/tpci200.c
+++ b/drivers/ipack/carriers/tpci200.c
@@ -209,7 +209,7 @@ static int tpci200_request_irq(struct ipack_device *dev,
 		goto out_unlock;
 	}

-	slot_irq = kzalloc(sizeof(struct slot_irq), GFP_KERNEL);
+	slot_irq = kzalloc_obj(struct slot_irq, GFP_KERNEL);
 	if (slot_irq == NULL) {
 		dev_err(&dev->dev,
 			"Slot [%d:%d] unable to allocate memory for IRQ !\n",
@@ -461,8 +461,8 @@ static int tpci200_install(struct tpci200_board *tpci200)
 {
 	int res;

-	tpci200->slots = kcalloc(TPCI200_NB_SLOT, sizeof(struct tpci200_slot),
-				 GFP_KERNEL);
+	tpci200->slots = kzalloc_objs(struct tpci200_slot, TPCI200_NB_SLOT,
+				      GFP_KERNEL);
 	if (tpci200->slots == NULL)
 		return -ENOMEM;

@@ -487,7 +487,7 @@ static int tpci200_create_device(struct tpci200_board *tpci200, int i)
 	int ret;
 	enum ipack_space space;
 	struct ipack_device *dev =
-		kzalloc(sizeof(struct ipack_device), GFP_KERNEL);
+		kzalloc_obj(struct ipack_device, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	dev->slot = i;
@@ -521,11 +521,11 @@ static int tpci200_pci_probe(struct pci_dev *pdev,
 	struct tpci200_board *tpci200;
 	u32 reg32;

-	tpci200 = kzalloc(sizeof(struct tpci200_board), GFP_KERNEL);
+	tpci200 = kzalloc_obj(struct tpci200_board, GFP_KERNEL);
 	if (!tpci200)
 		return -ENOMEM;

-	tpci200->info = kzalloc(sizeof(struct tpci200_infos), GFP_KERNEL);
+	tpci200->info = kzalloc_obj(struct tpci200_infos, GFP_KERNEL);
 	if (!tpci200->info) {
 		ret = -ENOMEM;
 		goto err_tpci200;
diff --git a/drivers/ipack/devices/ipoctal.c b/drivers/ipack/devices/ipoctal.c
index ba2e9e52d72b..563fdf197101 100644
--- a/drivers/ipack/devices/ipoctal.c
+++ b/drivers/ipack/devices/ipoctal.c
@@ -688,7 +688,7 @@ static int ipoctal_probe(struct ipack_device *dev)
 	int res;
 	struct ipoctal *ipoctal;

-	ipoctal = kzalloc(sizeof(struct ipoctal), GFP_KERNEL);
+	ipoctal = kzalloc_obj(struct ipoctal, GFP_KERNEL);
 	if (ipoctal == NULL)
 		return -ENOMEM;

diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c
index 57d232c909f9..d4ec786bf98d 100644
--- a/drivers/ipack/ipack.c
+++ b/drivers/ipack/ipack.c
@@ -203,7 +203,7 @@ struct ipack_bus_device *ipack_bus_register(struct device *parent, int slots,
 	int bus_nr;
 	struct ipack_bus_device *bus;

-	bus = kzalloc(sizeof(*bus), GFP_KERNEL);
+	bus = kzalloc_obj(*bus, GFP_KERNEL);
 	if (!bus)
 		return NULL;

diff --git a/drivers/irqchip/exynos-combiner.c b/drivers/irqchip/exynos-combiner.c
index 495848442b35..8776f2ba4bae 100644
--- a/drivers/irqchip/exynos-combiner.c
+++ b/drivers/irqchip/exynos-combiner.c
@@ -176,7 +176,7 @@ static void __init combiner_init(void __iomem *combiner_base,

 	nr_irq = max_nr * IRQ_IN_COMBINER;

-	combiner_data = kcalloc(max_nr, sizeof (*combiner_data), GFP_KERNEL);
+	combiner_data = kzalloc_objs(*combiner_data, max_nr, GFP_KERNEL);
 	if (!combiner_data)
 		return;

diff --git a/drivers/irqchip/irq-al-fic.c b/drivers/irqchip/irq-al-fic.c
index 8f300843bbca..f6b637bebcc0 100644
--- a/drivers/irqchip/irq-al-fic.c
+++ b/drivers/irqchip/irq-al-fic.c
@@ -194,7 +194,7 @@ static struct al_fic *al_fic_wire_init(struct device_node *node,
 	int ret;
 	u32 control = CONTROL_MASK_MSI_X;

-	fic = kzalloc(sizeof(*fic), GFP_KERNEL);
+	fic = kzalloc_obj(*fic, GFP_KERNEL);
 	if (!fic)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/irqchip/irq-alpine-msi.c b/drivers/irqchip/irq-alpine-msi.c
index 159d9ec7c0dd..0fb09ddc43ef 100644
--- a/drivers/irqchip/irq-alpine-msi.c
+++ b/drivers/irqchip/irq-alpine-msi.c
@@ -192,7 +192,8 @@ static int alpine_msix_init_domains(struct alpine_msix_data *priv, struct device

 static int alpine_msix_init(struct device_node *node, struct device_node *parent)
 {
-	struct alpine_msix_data *priv __free(kfree) = kzalloc(sizeof(*priv), GFP_KERNEL);
+	struct alpine_msix_data *priv __free(kfree) = kzalloc_obj(*priv,
+								  GFP_KERNEL);
 	struct resource res;
 	int ret;

diff --git a/drivers/irqchip/irq-apple-aic.c b/drivers/irqchip/irq-apple-aic.c
index 3c70364e7cdd..e09939e279f6 100644
--- a/drivers/irqchip/irq-apple-aic.c
+++ b/drivers/irqchip/irq-apple-aic.c
@@ -921,7 +921,7 @@ static void build_fiq_affinity(struct aic_irq_chip *ic, struct device_node *aff)
 	if (WARN_ON(n < 0))
 		return;

-	ic->fiq_aff[fiq] = kzalloc(sizeof(*ic->fiq_aff[fiq]), GFP_KERNEL);
+	ic->fiq_aff[fiq] = kzalloc_obj(*ic->fiq_aff[fiq], GFP_KERNEL);
 	if (!ic->fiq_aff[fiq])
 		return;

@@ -959,7 +959,7 @@ static int __init aic_of_ic_init(struct device_node *node, struct device_node *p
 	if (WARN_ON(!regs))
 		return -EIO;

-	irqc = kzalloc(sizeof(*irqc), GFP_KERNEL);
+	irqc = kzalloc_obj(*irqc, GFP_KERNEL);
 	if (!irqc) {
 		iounmap(regs);
 		return -ENOMEM;
diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c
index a4d03a2d1569..84e8f204edef 100644
--- a/drivers/irqchip/irq-armada-370-xp.c
+++ b/drivers/irqchip/irq-armada-370-xp.c
@@ -835,7 +835,7 @@ static int __init mpic_of_init(struct device_node *node, struct device_node *par
 	struct mpic *mpic;
 	int err;

-	mpic = kzalloc(sizeof(*mpic), GFP_KERNEL);
+	mpic = kzalloc_obj(*mpic, GFP_KERNEL);
 	if (WARN_ON(!mpic))
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-aspeed-i2c-ic.c b/drivers/irqchip/irq-aspeed-i2c-ic.c
index 87c1feb999ff..35189fd06b3d 100644
--- a/drivers/irqchip/irq-aspeed-i2c-ic.c
+++ b/drivers/irqchip/irq-aspeed-i2c-ic.c
@@ -66,7 +66,7 @@ static int __init aspeed_i2c_ic_of_init(struct device_node *node,
 	struct aspeed_i2c_ic *i2c_ic;
 	int ret = 0;

-	i2c_ic = kzalloc(sizeof(*i2c_ic), GFP_KERNEL);
+	i2c_ic = kzalloc_obj(*i2c_ic, GFP_KERNEL);
 	if (!i2c_ic)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-aspeed-intc.c b/drivers/irqchip/irq-aspeed-intc.c
index 8330221799a0..f3ae18de3b95 100644
--- a/drivers/irqchip/irq-aspeed-intc.c
+++ b/drivers/irqchip/irq-aspeed-intc.c
@@ -89,7 +89,7 @@ static int __init aspeed_intc_ic_of_init(struct device_node *node,
 	struct aspeed_intc_ic *intc_ic;
 	int irq, i, ret = 0;

-	intc_ic = kzalloc(sizeof(*intc_ic), GFP_KERNEL);
+	intc_ic = kzalloc_obj(*intc_ic, GFP_KERNEL);
 	if (!intc_ic)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-aspeed-scu-ic.c b/drivers/irqchip/irq-aspeed-scu-ic.c
index 7398c3b9eace..170fc82091da 100644
--- a/drivers/irqchip/irq-aspeed-scu-ic.c
+++ b/drivers/irqchip/irq-aspeed-scu-ic.c
@@ -270,7 +270,7 @@ static int __init aspeed_scu_ic_of_init(struct device_node *node, struct device_
 	if (!variant)
 		return -ENODEV;

-	scu_ic = kzalloc(sizeof(*scu_ic), GFP_KERNEL);
+	scu_ic = kzalloc_obj(*scu_ic, GFP_KERNEL);
 	if (!scu_ic)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-aspeed-vic.c b/drivers/irqchip/irq-aspeed-vic.c
index 9b665b5bb531..35cd50aaed81 100644
--- a/drivers/irqchip/irq-aspeed-vic.c
+++ b/drivers/irqchip/irq-aspeed-vic.c
@@ -196,7 +196,7 @@ static int __init avic_of_init(struct device_node *node,
 	if (WARN_ON(!regs))
 		return -EIO;

-	vic = kzalloc(sizeof(struct aspeed_vic), GFP_KERNEL);
+	vic = kzalloc_obj(struct aspeed_vic, GFP_KERNEL);
 	if (WARN_ON(!vic)) {
 		iounmap(regs);
 		return -ENOMEM;
diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
index e68853815c7a..087eed7ed6db 100644
--- a/drivers/irqchip/irq-atmel-aic-common.c
+++ b/drivers/irqchip/irq-atmel-aic-common.c
@@ -213,7 +213,7 @@ struct irq_domain *__init aic_common_of_init(struct device_node *node,
 	if (!reg_base)
 		return ERR_PTR(-ENOMEM);

-	aic = kcalloc(nchips, sizeof(*aic), GFP_KERNEL);
+	aic = kzalloc_objs(*aic, nchips, GFP_KERNEL);
 	if (!aic) {
 		ret = -ENOMEM;
 		goto err_iounmap;
diff --git a/drivers/irqchip/irq-bcm2712-mip.c b/drivers/irqchip/irq-bcm2712-mip.c
index 4761974ad650..118ab4ac6714 100644
--- a/drivers/irqchip/irq-bcm2712-mip.c
+++ b/drivers/irqchip/irq-bcm2712-mip.c
@@ -238,7 +238,7 @@ static int mip_msi_probe(struct platform_device *pdev, struct device_node *paren
 	struct mip_priv *mip;
 	int ret;

-	mip = kzalloc(sizeof(*mip), GFP_KERNEL);
+	mip = kzalloc_obj(*mip, GFP_KERNEL);
 	if (!mip)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-bcm6345-l1.c b/drivers/irqchip/irq-bcm6345-l1.c
index ca4e141c5bc2..956c53dffca3 100644
--- a/drivers/irqchip/irq-bcm6345-l1.c
+++ b/drivers/irqchip/irq-bcm6345-l1.c
@@ -238,8 +238,8 @@ static int __init bcm6345_l1_init_one(struct device_node *dn,
 	else if (intc->n_words != n_words)
 		return -EINVAL;

-	cpu = intc->cpus[idx] = kzalloc(struct_size(cpu, enable_cache, n_words),
-					GFP_KERNEL);
+	cpu = intc->cpus[idx] = kzalloc_flex(*cpu, enable_cache, n_words,
+					     GFP_KERNEL);
 	if (!cpu)
 		return -ENOMEM;

@@ -296,7 +296,7 @@ static int __init bcm6345_l1_of_init(struct device_node *dn,
 	unsigned int idx;
 	int ret;

-	intc = kzalloc(sizeof(*intc), GFP_KERNEL);
+	intc = kzalloc_obj(*intc, GFP_KERNEL);
 	if (!intc)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-bcm7038-l1.c b/drivers/irqchip/irq-bcm7038-l1.c
index 45c4824be92f..3f838f019f4d 100644
--- a/drivers/irqchip/irq-bcm7038-l1.c
+++ b/drivers/irqchip/irq-bcm7038-l1.c
@@ -242,8 +242,8 @@ static int bcm7038_l1_init_one(struct device_node *dn, unsigned int idx,
 		return -EINVAL;
 	}

-	cpu = intc->cpus[idx] = kzalloc(struct_size(cpu, mask_cache, n_words),
-					GFP_KERNEL);
+	cpu = intc->cpus[idx] = kzalloc_flex(*cpu, mask_cache, n_words,
+					     GFP_KERNEL);
 	if (!cpu)
 		return -ENOMEM;

@@ -398,7 +398,7 @@ static int bcm7038_l1_probe(struct platform_device *pdev, struct device_node *pa
 	struct bcm7038_l1_chip *intc;
 	int idx, ret;

-	intc = kzalloc(sizeof(*intc), GFP_KERNEL);
+	intc = kzalloc_obj(*intc, GFP_KERNEL);
 	if (!intc)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-bcm7120-l2.c b/drivers/irqchip/irq-bcm7120-l2.c
index 518c9d4366a5..341b4e62b942 100644
--- a/drivers/irqchip/irq-bcm7120-l2.c
+++ b/drivers/irqchip/irq-bcm7120-l2.c
@@ -220,7 +220,7 @@ static int bcm7120_l2_intc_probe(struct platform_device *pdev, struct device_nod
 	unsigned int idx, irq, flags;
 	u32 valid_mask[MAX_WORDS] = { };

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -231,8 +231,8 @@ static int bcm7120_l2_intc_probe(struct platform_device *pdev, struct device_nod
 		goto out_unmap;
 	}

-	data->l1_data = kcalloc(data->num_parent_irqs, sizeof(*data->l1_data),
-				GFP_KERNEL);
+	data->l1_data = kzalloc_objs(*data->l1_data, data->num_parent_irqs,
+				     GFP_KERNEL);
 	if (!data->l1_data) {
 		ret = -ENOMEM;
 		goto out_free_l1_data;
diff --git a/drivers/irqchip/irq-brcmstb-l2.c b/drivers/irqchip/irq-brcmstb-l2.c
index bb7078d6524f..c5f4c79e7ea9 100644
--- a/drivers/irqchip/irq-brcmstb-l2.c
+++ b/drivers/irqchip/irq-brcmstb-l2.c
@@ -151,7 +151,7 @@ static int brcmstb_l2_intc_probe(struct platform_device *pdev, struct device_nod
 	int parent_irq;
 	void __iomem *base;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-clps711x.c b/drivers/irqchip/irq-clps711x.c
index c4b73ba2323b..80b9f7bc7bbd 100644
--- a/drivers/irqchip/irq-clps711x.c
+++ b/drivers/irqchip/irq-clps711x.c
@@ -155,7 +155,7 @@ static int __init _clps711x_intc_init(struct device_node *np,
 {
 	int err;

-	clps711x_intc = kzalloc(sizeof(*clps711x_intc), GFP_KERNEL);
+	clps711x_intc = kzalloc_obj(*clps711x_intc, GFP_KERNEL);
 	if (!clps711x_intc)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c
index 66bb39e24a52..c3ddffc28bbd 100644
--- a/drivers/irqchip/irq-crossbar.c
+++ b/drivers/irqchip/irq-crossbar.c
@@ -199,7 +199,7 @@ static int __init crossbar_of_init(struct device_node *node)
 	const __be32 *irqsr;
 	int ret = -ENOMEM;

-	cb = kzalloc(sizeof(*cb), GFP_KERNEL);
+	cb = kzalloc_obj(*cb, GFP_KERNEL);

 	if (!cb)
 		return ret;
@@ -268,7 +268,7 @@ static int __init crossbar_of_init(struct device_node *node)
 	}


-	cb->register_offsets = kcalloc(max, sizeof(int), GFP_KERNEL);
+	cb->register_offsets = kzalloc_objs(int, max, GFP_KERNEL);
 	if (!cb->register_offsets)
 		goto err_irq_map;

diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c
index 8a3410c2b7b5..d9215d785bcc 100644
--- a/drivers/irqchip/irq-gic-v2m.c
+++ b/drivers/irqchip/irq-gic-v2m.c
@@ -293,7 +293,7 @@ static int __init gicv2m_init_one(struct fwnode_handle *fwnode,
 	int ret;
 	struct v2m_data *v2m;

-	v2m = kzalloc(sizeof(struct v2m_data), GFP_KERNEL);
+	v2m = kzalloc_obj(struct v2m_data, GFP_KERNEL);
 	if (!v2m)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 2988def30972..4f3212caa1ef 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -1926,8 +1926,8 @@ static int its_vlpi_map(struct irq_data *d, struct its_cmd_info *info)
 	if (!its_dev->event_map.vm) {
 		struct its_vlpi_map *maps;

-		maps = kcalloc(its_dev->event_map.nr_lpis, sizeof(*maps),
-			       GFP_ATOMIC);
+		maps = kzalloc_objs(*maps, its_dev->event_map.nr_lpis,
+				    GFP_ATOMIC);
 		if (!maps)
 			return -ENOMEM;

@@ -2108,7 +2108,7 @@ static struct lpi_range *mk_lpi_range(u32 base, u32 span)
 {
 	struct lpi_range *range;

-	range = kmalloc(sizeof(*range), GFP_KERNEL);
+	range = kmalloc_obj(*range, GFP_KERNEL);
 	if (range) {
 		range->base_id = base;
 		range->span = span;
@@ -2927,7 +2927,7 @@ static int allocate_vpe_l1_table(void)
 	if (val & GICR_VPROPBASER_4_1_VALID)
 		goto out;

-	gic_data_rdist()->vpe_table_mask = kzalloc(sizeof(cpumask_t), GFP_ATOMIC);
+	gic_data_rdist()->vpe_table_mask = kzalloc_obj(cpumask_t, GFP_ATOMIC);
 	if (!gic_data_rdist()->vpe_table_mask)
 		return -ENOMEM;

@@ -3025,8 +3025,8 @@ static int its_alloc_collections(struct its_node *its)
 {
 	int i;

-	its->collections = kcalloc(nr_cpu_ids, sizeof(*its->collections),
-				   GFP_KERNEL);
+	its->collections = kzalloc_objs(*its->collections, nr_cpu_ids,
+					GFP_KERNEL);
 	if (!its->collections)
 		return -ENOMEM;

@@ -3493,7 +3493,7 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id,

 	itt = itt_alloc_pool(its->numa_node, sz);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);

 	if (alloc_lpis) {
 		lpi_map = its_lpi_alloc(nvecs, &lpi_base, &nr_lpis);
@@ -5139,7 +5139,7 @@ static int its_init_domain(struct its_node *its)
 	};
 	struct msi_domain_info *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -5169,8 +5169,7 @@ static int its_init_vpe_domain(void)
 	its = list_first_entry(&its_nodes, struct its_node, entry);

 	entries = roundup_pow_of_two(nr_cpu_ids);
-	vpe_proxy.vpes = kcalloc(entries, sizeof(*vpe_proxy.vpes),
-				 GFP_KERNEL);
+	vpe_proxy.vpes = kzalloc_objs(*vpe_proxy.vpes, entries, GFP_KERNEL);
 	if (!vpe_proxy.vpes)
 		return -ENOMEM;

@@ -5514,7 +5513,7 @@ static struct its_node __init *its_node_init(struct resource *res,

 	pr_info("ITS %pR\n", res);

-	its = kzalloc(sizeof(*its), GFP_KERNEL);
+	its = kzalloc_obj(*its, GFP_KERNEL);
 	if (!its)
 		goto out_unmap;

@@ -5680,8 +5679,7 @@ static void __init acpi_table_parse_srat_its(void)
 	if (count <= 0)
 		return;

-	its_srat_maps = kmalloc_array(count, sizeof(struct its_srat_map),
-				      GFP_KERNEL);
+	its_srat_maps = kmalloc_objs(struct its_srat_map, count, GFP_KERNEL);
 	if (!its_srat_maps)
 		return;

diff --git a/drivers/irqchip/irq-gic-v3-mbi.c b/drivers/irqchip/irq-gic-v3-mbi.c
index aa11bbe8026a..9254a5e92577 100644
--- a/drivers/irqchip/irq-gic-v3-mbi.c
+++ b/drivers/irqchip/irq-gic-v3-mbi.c
@@ -231,7 +231,7 @@ int __init mbi_init(struct fwnode_handle *fwnode, struct irq_domain *parent)
 		return -EINVAL;

 	mbi_range_nr = n / 2;
-	mbi_ranges = kcalloc(mbi_range_nr, sizeof(*mbi_ranges), GFP_KERNEL);
+	mbi_ranges = kzalloc_objs(*mbi_ranges, mbi_range_nr, GFP_KERNEL);
 	if (!mbi_ranges)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 6607ab58f72e..602870a2b8f8 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -2090,7 +2090,7 @@ static void __init gic_populate_ppi_partitions(struct device_node *gic_node)
 	if (!nr_parts)
 		goto out_put_node;

-	parts = kcalloc(nr_parts, sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, nr_parts, GFP_KERNEL);
 	if (WARN_ON(!parts))
 		goto out_put_node;

@@ -2218,8 +2218,7 @@ static int __init gic_of_init(struct device_node *node, struct device_node *pare
 	if (of_property_read_u32(node, "#redistributor-regions", &nr_redist_regions))
 		nr_redist_regions = 1;

-	rdist_regs = kcalloc(nr_redist_regions, sizeof(*rdist_regs),
-			     GFP_KERNEL);
+	rdist_regs = kzalloc_objs(*rdist_regs, nr_redist_regions, GFP_KERNEL);
 	if (!rdist_regs) {
 		err = -ENOMEM;
 		goto out_unmap_dist;
diff --git a/drivers/irqchip/irq-gic-v5-irs.c b/drivers/irqchip/irq-gic-v5-irs.c
index 8bc4bb121088..8379e975a172 100644
--- a/drivers/irqchip/irq-gic-v5-irs.c
+++ b/drivers/irqchip/irq-gic-v5-irs.c
@@ -727,7 +727,7 @@ static int __init gicv5_irs_of_init(struct device_node *node)
 	u32 idr;
 	int ret;

-	irs_data = kzalloc(sizeof(*irs_data), GFP_KERNEL);
+	irs_data = kzalloc_obj(*irs_data, GFP_KERNEL);
 	if (!irs_data)
 		return -ENOMEM;

@@ -913,7 +913,7 @@ static int __init gic_acpi_parse_madt_irs(union acpi_subtable_headers *header,
 	int ret;

 	/* Per-IRS data structure */
-	irs_data = kzalloc(sizeof(*irs_data), GFP_KERNEL);
+	irs_data = kzalloc_obj(*irs_data, GFP_KERNEL);
 	if (!irs_data)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-gic-v5-its.c b/drivers/irqchip/irq-gic-v5-its.c
index 8c4cf8430871..96c67e168e6f 100644
--- a/drivers/irqchip/irq-gic-v5-its.c
+++ b/drivers/irqchip/irq-gic-v5-its.c
@@ -757,7 +757,7 @@ static struct gicv5_its_dev *gicv5_its_alloc_device(struct gicv5_its_chip_data *
 		return ERR_PTR(-EBUSY);
 	}

-	its_dev = kzalloc(sizeof(*its_dev), GFP_KERNEL);
+	its_dev = kzalloc_obj(*its_dev, GFP_KERNEL);
 	if (!its_dev)
 		return ERR_PTR(-ENOMEM);

@@ -1100,7 +1100,7 @@ static int gicv5_its_init_domain(struct gicv5_its_chip_data *its, struct irq_dom
 	};
 	struct msi_domain_info *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -1125,7 +1125,7 @@ static int __init gicv5_its_init_bases(void __iomem *its_base, struct fwnode_han
 	bool enabled;
 	int ret;

-	its_node = kzalloc(sizeof(*its_node), GFP_KERNEL);
+	its_node = kzalloc_obj(*its_node, GFP_KERNEL);
 	if (!its_node)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-gic-v5-iwb.c b/drivers/irqchip/irq-gic-v5-iwb.c
index c7d5fd34d053..562d3f0df24e 100644
--- a/drivers/irqchip/irq-gic-v5-iwb.c
+++ b/drivers/irqchip/irq-gic-v5-iwb.c
@@ -219,8 +219,8 @@ gicv5_iwb_init_bases(void __iomem *iwb_base, struct platform_device *pdev)
 	unsigned int n;
 	int ret;

-	struct gicv5_iwb_chip_data *iwb_node __free(kfree) = kzalloc(sizeof(*iwb_node),
-								     GFP_KERNEL);
+	struct gicv5_iwb_chip_data *iwb_node __free(kfree) = kzalloc_obj(*iwb_node,
+									 GFP_KERNEL);
 	if (!iwb_node)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/irqchip/irq-goldfish-pic.c b/drivers/irqchip/irq-goldfish-pic.c
index a8b23b507ecd..c2047ccf4360 100644
--- a/drivers/irqchip/irq-goldfish-pic.c
+++ b/drivers/irqchip/irq-goldfish-pic.c
@@ -61,7 +61,7 @@ static int __init goldfish_pic_of_init(struct device_node *of_node,
 	unsigned int parent_irq;
 	int ret = 0;

-	gfpic = kzalloc(sizeof(*gfpic), GFP_KERNEL);
+	gfpic = kzalloc_obj(*gfpic, GFP_KERNEL);
 	if (!gfpic) {
 		ret = -ENOMEM;
 		goto out_err;
diff --git a/drivers/irqchip/irq-idt3243x.c b/drivers/irqchip/irq-idt3243x.c
index f8324fb1fe8f..6812396c6268 100644
--- a/drivers/irqchip/irq-idt3243x.c
+++ b/drivers/irqchip/irq-idt3243x.c
@@ -52,7 +52,7 @@ static int idt_pic_init(struct device_node *of_node, struct device_node *parent)
 	unsigned int parent_irq;
 	int ret = 0;

-	idtpic = kzalloc(sizeof(*idtpic), GFP_KERNEL);
+	idtpic = kzalloc_obj(*idtpic, GFP_KERNEL);
 	if (!idtpic) {
 		ret = -ENOMEM;
 		goto out_err;
diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv2.c
index 04f7ba0657be..7fff14c7b917 100644
--- a/drivers/irqchip/irq-imx-gpcv2.c
+++ b/drivers/irqchip/irq-imx-gpcv2.c
@@ -231,7 +231,7 @@ static int __init imx_gpcv2_irqchip_init(struct device_node *node,
 		return -ENXIO;
 	}

-	cd = kzalloc(sizeof(struct gpcv2_irqchip_data), GFP_KERNEL);
+	cd = kzalloc_obj(struct gpcv2_irqchip_data, GFP_KERNEL);
 	if (!cd)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-ingenic-tcu.c b/drivers/irqchip/irq-ingenic-tcu.c
index 794ecba717c9..e4028ddeb0e8 100644
--- a/drivers/irqchip/irq-ingenic-tcu.c
+++ b/drivers/irqchip/irq-ingenic-tcu.c
@@ -96,7 +96,7 @@ static int __init ingenic_tcu_irq_init(struct device_node *np,
 	if (IS_ERR(map))
 		return PTR_ERR(map);

-	tcu = kzalloc(sizeof(*tcu), GFP_KERNEL);
+	tcu = kzalloc_obj(*tcu, GFP_KERNEL);
 	if (!tcu)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-ingenic.c b/drivers/irqchip/irq-ingenic.c
index 52393724f213..fbbe655fa234 100644
--- a/drivers/irqchip/irq-ingenic.c
+++ b/drivers/irqchip/irq-ingenic.c
@@ -67,7 +67,7 @@ static int __init ingenic_intc_of_init(struct device_node *node,
 	int parent_irq, err = 0;
 	unsigned i;

-	intc = kzalloc(sizeof(*intc), GFP_KERNEL);
+	intc = kzalloc_obj(*intc, GFP_KERNEL);
 	if (!intc) {
 		err = -ENOMEM;
 		goto out_err;
diff --git a/drivers/irqchip/irq-loongarch-avec.c b/drivers/irqchip/irq-loongarch-avec.c
index fb8efde95393..cbea378c25c3 100644
--- a/drivers/irqchip/irq-loongarch-avec.c
+++ b/drivers/irqchip/irq-loongarch-avec.c
@@ -276,7 +276,7 @@ static int avecintc_domain_alloc(struct irq_domain *domain, unsigned int virq,
 {
 	for (unsigned int i = 0; i < nr_irqs; i++) {
 		struct irq_data *irqd = irq_domain_get_irq_data(domain, virq + i);
-		struct avecintc_data *adata = kzalloc(sizeof(*adata), GFP_KERNEL);
+		struct avecintc_data *adata = kzalloc_obj(*adata, GFP_KERNEL);
 		int ret;

 		if (!adata)
diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c
index 37e7e1f9bbe3..b219cd18a8f7 100644
--- a/drivers/irqchip/irq-loongson-eiointc.c
+++ b/drivers/irqchip/irq-loongson-eiointc.c
@@ -584,7 +584,7 @@ int __init eiointc_acpi_init(struct irq_domain *parent,
 	struct eiointc_priv *priv;
 	int node;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -633,7 +633,7 @@ static int __init eiointc_of_init(struct device_node *of_node,
 	struct irq_data *irq_data;
 	int parent_irq, ret;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-loongson-htpic.c b/drivers/irqchip/irq-loongson-htpic.c
index 1c691c4be989..f0ea5dad7a1c 100644
--- a/drivers/irqchip/irq-loongson-htpic.c
+++ b/drivers/irqchip/irq-loongson-htpic.c
@@ -95,7 +95,7 @@ static int __init htpic_of_init(struct device_node *node, struct device_node *pa
 		return -ENODEV;
 	}

-	htpic = kzalloc(sizeof(*htpic), GFP_KERNEL);
+	htpic = kzalloc_obj(*htpic, GFP_KERNEL);
 	if (!htpic)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loongson-htvec.c
index 5a3339da97ad..4645948222ee 100644
--- a/drivers/irqchip/irq-loongson-htvec.c
+++ b/drivers/irqchip/irq-loongson-htvec.c
@@ -192,7 +192,7 @@ static int htvec_init(phys_addr_t addr, unsigned long size,
 	int i;
 	struct htvec *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-loongson-liointc.c b/drivers/irqchip/irq-loongson-liointc.c
index 551597e2c428..44b03de6091a 100644
--- a/drivers/irqchip/irq-loongson-liointc.c
+++ b/drivers/irqchip/irq-loongson-liointc.c
@@ -205,7 +205,7 @@ static int liointc_init(phys_addr_t addr, unsigned long size, int revision,
 	struct irq_domain *domain;
 	struct liointc_priv *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-loongson-pch-lpc.c b/drivers/irqchip/irq-loongson-pch-lpc.c
index 3a125f3e4287..7a074077d8ba 100644
--- a/drivers/irqchip/irq-loongson-pch-lpc.c
+++ b/drivers/irqchip/irq-loongson-pch-lpc.c
@@ -183,7 +183,7 @@ int __init pch_lpc_acpi_init(struct irq_domain *parent,
 	struct irq_fwspec fwspec;
 	struct fwnode_handle *irq_handle;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loongson-pch-msi.c
index 91c856c65d9d..9a2d3804bc6e 100644
--- a/drivers/irqchip/irq-loongson-pch-msi.c
+++ b/drivers/irqchip/irq-loongson-pch-msi.c
@@ -177,7 +177,7 @@ static int pch_msi_init(phys_addr_t msg_address, int irq_base, int irq_count,
 	int ret;
 	struct pch_msi_data *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-loongson-pch-pic.c
index f2acaf93f552..b50fd928e1f6 100644
--- a/drivers/irqchip/irq-loongson-pch-pic.c
+++ b/drivers/irqchip/irq-loongson-pch-pic.c
@@ -329,7 +329,7 @@ static int pch_pic_init(phys_addr_t addr, unsigned long size, int vec_base,
 	struct pch_pic *priv;
 	int i;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-lpc32xx.c b/drivers/irqchip/irq-lpc32xx.c
index 14cca44baa14..7dfd46d8dab2 100644
--- a/drivers/irqchip/irq-lpc32xx.c
+++ b/drivers/irqchip/irq-lpc32xx.c
@@ -198,7 +198,7 @@ static int __init lpc32xx_of_ic_init(struct device_node *node,
 	const __be32 *reg = of_get_property(node, "reg", NULL);
 	u32 parent_irq, i, addr = reg ? be32_to_cpu(*reg) : 0;

-	irqc = kzalloc(sizeof(*irqc), GFP_KERNEL);
+	irqc = kzalloc_obj(*irqc, GFP_KERNEL);
 	if (!irqc)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-ls1x.c b/drivers/irqchip/irq-ls1x.c
index 589d32007fca..5c39e02d40aa 100644
--- a/drivers/irqchip/irq-ls1x.c
+++ b/drivers/irqchip/irq-ls1x.c
@@ -108,7 +108,7 @@ static int __init ls1x_intc_of_init(struct device_node *node,
 	struct ls1x_intc_priv *priv;
 	int parent_irq, err = 0;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-mchp-eic.c b/drivers/irqchip/irq-mchp-eic.c
index 31093a8ab67c..15f4d17a2612 100644
--- a/drivers/irqchip/irq-mchp-eic.c
+++ b/drivers/irqchip/irq-mchp-eic.c
@@ -209,7 +209,7 @@ static int mchp_eic_probe(struct platform_device *pdev, struct device_node *pare
 	struct irq_domain *parent_domain = NULL;
 	int ret, i;

-	eic = kzalloc(sizeof(*eic), GFP_KERNEL);
+	eic = kzalloc_obj(*eic, GFP_KERNEL);
 	if (!eic)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-meson-gpio.c b/drivers/irqchip/irq-meson-gpio.c
index 3fcbb044ae60..a19fa5a5ba3e 100644
--- a/drivers/irqchip/irq-meson-gpio.c
+++ b/drivers/irqchip/irq-meson-gpio.c
@@ -601,7 +601,7 @@ static int meson_gpio_irq_probe(struct platform_device *pdev, struct device_node
 		return -ENXIO;
 	}

-	ctl = kzalloc(sizeof(*ctl), GFP_KERNEL);
+	ctl = kzalloc_obj(*ctl, GFP_KERNEL);
 	if (!ctl)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-mips-cpu.c b/drivers/irqchip/irq-mips-cpu.c
index ac784ef3ed4b..37a8221be9fa 100644
--- a/drivers/irqchip/irq-mips-cpu.c
+++ b/drivers/irqchip/irq-mips-cpu.c
@@ -237,7 +237,7 @@ static void mips_cpu_register_ipi_domain(struct device_node *of_node)
 {
 	struct cpu_ipi_domain_state *ipi_domain_state;

-	ipi_domain_state = kzalloc(sizeof(*ipi_domain_state), GFP_KERNEL);
+	ipi_domain_state = kzalloc_obj(*ipi_domain_state, GFP_KERNEL);
 	ipi_domain = irq_domain_create_hierarchy(irq_domain, IRQ_DOMAIN_FLAG_IPI_SINGLE, 2,
 						 of_fwnode_handle(of_node),
 						 &mips_cpu_ipi_chip_ops, ipi_domain_state);
diff --git a/drivers/irqchip/irq-mst-intc.c b/drivers/irqchip/irq-mst-intc.c
index 7f760f555a76..e4c1281e9ae4 100644
--- a/drivers/irqchip/irq-mst-intc.c
+++ b/drivers/irqchip/irq-mst-intc.c
@@ -263,7 +263,7 @@ static int __init mst_intc_of_init(struct device_node *dn,
 	    of_property_read_u32_index(dn, "mstar,irqs-map-range", 1, &irq_end))
 		return -EINVAL;

-	cd = kzalloc(sizeof(*cd), GFP_KERNEL);
+	cd = kzalloc_obj(*cd, GFP_KERNEL);
 	if (!cd)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-mtk-cirq.c b/drivers/irqchip/irq-mtk-cirq.c
index 9571f622774e..1ac2b2ae94cf 100644
--- a/drivers/irqchip/irq-mtk-cirq.c
+++ b/drivers/irqchip/irq-mtk-cirq.c
@@ -311,7 +311,7 @@ static int __init mtk_cirq_of_init(struct device_node *node,
 		return -EINVAL;
 	}

-	cirq_data = kzalloc(sizeof(*cirq_data), GFP_KERNEL);
+	cirq_data = kzalloc_obj(*cirq_data, GFP_KERNEL);
 	if (!cirq_data)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-mtk-sysirq.c b/drivers/irqchip/irq-mtk-sysirq.c
index 6895e7096b27..1988bb02b4d3 100644
--- a/drivers/irqchip/irq-mtk-sysirq.c
+++ b/drivers/irqchip/irq-mtk-sysirq.c
@@ -133,7 +133,7 @@ static int __init mtk_sysirq_of_init(struct device_node *node,
 		return -EINVAL;
 	}

-	chip_data = kzalloc(sizeof(*chip_data), GFP_KERNEL);
+	chip_data = kzalloc_obj(*chip_data, GFP_KERNEL);
 	if (!chip_data)
 		return -ENOMEM;

@@ -154,9 +154,8 @@ static int __init mtk_sysirq_of_init(struct device_node *node,
 		goto out_free_chip;
 	}

-	chip_data->intpol_bases = kcalloc(nr_intpol_bases,
-					  sizeof(*chip_data->intpol_bases),
-					  GFP_KERNEL);
+	chip_data->intpol_bases = kzalloc_objs(*chip_data->intpol_bases,
+					       nr_intpol_bases, GFP_KERNEL);
 	if (!chip_data->intpol_bases) {
 		ret = -ENOMEM;
 		goto out_free_intpol_words;
diff --git a/drivers/irqchip/irq-mvebu-odmi.c b/drivers/irqchip/irq-mvebu-odmi.c
index e5b2bde3d933..933511ec6d1f 100644
--- a/drivers/irqchip/irq-mvebu-odmi.c
+++ b/drivers/irqchip/irq-mvebu-odmi.c
@@ -178,7 +178,7 @@ static int __init mvebu_odmi_init(struct device_node *node,
 	if (of_property_read_u32(node, "marvell,odmi-frames", &odmis_count))
 		return -EINVAL;

-	odmis = kcalloc(odmis_count, sizeof(struct odmi_data), GFP_KERNEL);
+	odmis = kzalloc_objs(struct odmi_data, odmis_count, GFP_KERNEL);
 	if (!odmis)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-owl-sirq.c b/drivers/irqchip/irq-owl-sirq.c
index 3d93d21f6732..f1985a2dc6a1 100644
--- a/drivers/irqchip/irq-owl-sirq.c
+++ b/drivers/irqchip/irq-owl-sirq.c
@@ -288,7 +288,7 @@ static int __init owl_sirq_init(const struct owl_sirq_params *params,
 		return -ENXIO;
 	}

-	chip_data = kzalloc(sizeof(*chip_data), GFP_KERNEL);
+	chip_data = kzalloc_obj(*chip_data, GFP_KERNEL);
 	if (!chip_data)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-pic32-evic.c b/drivers/irqchip/irq-pic32-evic.c
index d87aca73c009..be99b64bc35d 100644
--- a/drivers/irqchip/irq-pic32-evic.c
+++ b/drivers/irqchip/irq-pic32-evic.c
@@ -221,7 +221,7 @@ static int __init pic32_of_init(struct device_node *node,
 	if (!evic_base)
 		return -ENOMEM;

-	priv = kcalloc(nchips, sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_objs(*priv, nchips, GFP_KERNEL);
 	if (!priv) {
 		ret = -ENOMEM;
 		goto err_iounmap;
diff --git a/drivers/irqchip/irq-riscv-imsic-state.c b/drivers/irqchip/irq-riscv-imsic-state.c
index 7566c8aa2d48..101b871a6014 100644
--- a/drivers/irqchip/irq-riscv-imsic-state.c
+++ b/drivers/irqchip/irq-riscv-imsic-state.c
@@ -512,8 +512,8 @@ static int __init imsic_local_init(void)
 #endif

 		/* Allocate vector array */
-		lpriv->vectors = kcalloc(global->nr_ids + 1, sizeof(*lpriv->vectors),
-					 GFP_KERNEL);
+		lpriv->vectors = kzalloc_objs(*lpriv->vectors,
+					      global->nr_ids + 1, GFP_KERNEL);
 		if (!lpriv->vectors)
 			goto fail_local_cleanup;

@@ -810,7 +810,7 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)
 		return -ENODEV;
 	}

-	imsic = kzalloc(sizeof(*imsic), GFP_KERNEL);
+	imsic = kzalloc_obj(*imsic, GFP_KERNEL);
 	if (!imsic)
 		return -ENOMEM;
 	imsic->fwnode = fwnode;
@@ -828,14 +828,14 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)
 		goto out_free_local;

 	/* Allocate MMIO resource array */
-	mmios = kcalloc(nr_mmios, sizeof(*mmios), GFP_KERNEL);
+	mmios = kzalloc_objs(*mmios, nr_mmios, GFP_KERNEL);
 	if (!mmios) {
 		rc = -ENOMEM;
 		goto out_free_local;
 	}

 	/* Allocate MMIO virtual address array */
-	mmios_va = kcalloc(nr_mmios, sizeof(*mmios_va), GFP_KERNEL);
+	mmios_va = kzalloc_objs(*mmios_va, nr_mmios, GFP_KERNEL);
 	if (!mmios_va) {
 		rc = -ENOMEM;
 		goto out_iounmap;
diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-intc.c
index 70290b35b317..8533a516de1c 100644
--- a/drivers/irqchip/irq-riscv-intc.c
+++ b/drivers/irqchip/irq-riscv-intc.c
@@ -349,13 +349,14 @@ static int __init riscv_intc_acpi_init(union acpi_subtable_headers *header,
 		if (count <= 0)
 			return -EINVAL;

-		rintc_acpi_data = kcalloc(count, sizeof(*rintc_acpi_data), GFP_KERNEL);
+		rintc_acpi_data = kzalloc_objs(*rintc_acpi_data, count,
+					       GFP_KERNEL);
 		if (!rintc_acpi_data)
 			return -ENOMEM;
 	}

 	rintc = (struct acpi_madt_rintc *)header;
-	rintc_acpi_data[nr_rintc] = kzalloc(sizeof(*rintc_acpi_data[0]), GFP_KERNEL);
+	rintc_acpi_data[nr_rintc] = kzalloc_obj(*rintc_acpi_data[0], GFP_KERNEL);
 	if (!rintc_acpi_data[nr_rintc])
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-sifive-plic.c b/drivers/irqchip/irq-sifive-plic.c
index 60fd8f91762b..39e85561e8b3 100644
--- a/drivers/irqchip/irq-sifive-plic.c
+++ b/drivers/irqchip/irq-sifive-plic.c
@@ -640,7 +640,7 @@ static int plic_probe(struct fwnode_handle *fwnode)
 	if (error)
 		goto fail_free_regs;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		error = -ENOMEM;
 		goto fail_free_regs;
diff --git a/drivers/irqchip/irq-sni-exiu.c b/drivers/irqchip/irq-sni-exiu.c
index 0cad68aa8388..2e5596048988 100644
--- a/drivers/irqchip/irq-sni-exiu.c
+++ b/drivers/irqchip/irq-sni-exiu.c
@@ -199,7 +199,7 @@ static struct exiu_irq_data *exiu_init(const struct fwnode_handle *fwnode,
 	struct exiu_irq_data *data;
 	int err;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/irqchip/irq-starfive-jh8100-intc.c b/drivers/irqchip/irq-starfive-jh8100-intc.c
index 705361b4ebe0..aa0a15f97ccf 100644
--- a/drivers/irqchip/irq-starfive-jh8100-intc.c
+++ b/drivers/irqchip/irq-starfive-jh8100-intc.c
@@ -123,7 +123,7 @@ static int starfive_intc_probe(struct platform_device *pdev, struct device_node
 	int parent_irq;
 	int ret;

-	irqc = kzalloc(sizeof(*irqc), GFP_KERNEL);
+	irqc = kzalloc_obj(*irqc, GFP_KERNEL);
 	if (!irqc)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-stm32-exti.c b/drivers/irqchip/irq-stm32-exti.c
index 978811f2abe8..c27aaf7e506a 100644
--- a/drivers/irqchip/irq-stm32-exti.c
+++ b/drivers/irqchip/irq-stm32-exti.c
@@ -269,14 +269,13 @@ stm32_exti_host_data *stm32_exti_host_init(const struct stm32_exti_drv_data *dd,
 {
 	struct stm32_exti_host_data *host_data;

-	host_data = kzalloc(sizeof(*host_data), GFP_KERNEL);
+	host_data = kzalloc_obj(*host_data, GFP_KERNEL);
 	if (!host_data)
 		return NULL;

 	host_data->drv_data = dd;
-	host_data->chips_data = kcalloc(dd->bank_nr,
-					sizeof(struct stm32_exti_chip_data),
-					GFP_KERNEL);
+	host_data->chips_data = kzalloc_objs(struct stm32_exti_chip_data,
+					     dd->bank_nr, GFP_KERNEL);
 	if (!host_data->chips_data)
 		goto free_host_data;

diff --git a/drivers/irqchip/irq-sun4i.c b/drivers/irqchip/irq-sun4i.c
index 9c2c9caeca2a..dde777304171 100644
--- a/drivers/irqchip/irq-sun4i.c
+++ b/drivers/irqchip/irq-sun4i.c
@@ -146,7 +146,7 @@ static int __init sun4i_of_init(struct device_node *node,
 static int __init sun4i_ic_of_init(struct device_node *node,
 				   struct device_node *parent)
 {
-	irq_ic_data = kzalloc(sizeof(struct sun4i_irq_chip_data), GFP_KERNEL);
+	irq_ic_data = kzalloc_obj(struct sun4i_irq_chip_data, GFP_KERNEL);
 	if (!irq_ic_data)
 		return -ENOMEM;

@@ -161,7 +161,7 @@ IRQCHIP_DECLARE(allwinner_sun4i_ic, "allwinner,sun4i-a10-ic", sun4i_ic_of_init);
 static int __init suniv_ic_of_init(struct device_node *node,
 				   struct device_node *parent)
 {
-	irq_ic_data = kzalloc(sizeof(struct sun4i_irq_chip_data), GFP_KERNEL);
+	irq_ic_data = kzalloc_obj(struct sun4i_irq_chip_data, GFP_KERNEL);
 	if (!irq_ic_data)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-tegra.c b/drivers/irqchip/irq-tegra.c
index b6382cf6359a..f0cd19f88cf0 100644
--- a/drivers/irqchip/irq-tegra.c
+++ b/drivers/irqchip/irq-tegra.c
@@ -302,7 +302,7 @@ static int __init tegra_ictlr_init(struct device_node *node,

 	soc = match->data;

-	lic = kzalloc(sizeof(*lic), GFP_KERNEL);
+	lic = kzalloc_obj(*lic, GFP_KERNEL);
 	if (!lic)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-ti-sci-inta.c b/drivers/irqchip/irq-ti-sci-inta.c
index 01963d36cfaf..93aaf19fc4bc 100644
--- a/drivers/irqchip/irq-ti-sci-inta.c
+++ b/drivers/irqchip/irq-ti-sci-inta.c
@@ -222,7 +222,7 @@ static struct ti_sci_inta_vint_desc *ti_sci_inta_alloc_parent_irq(struct irq_dom
 		goto free_vint;
 	}

-	vint_desc = kzalloc(sizeof(*vint_desc), GFP_KERNEL);
+	vint_desc = kzalloc_obj(*vint_desc, GFP_KERNEL);
 	if (!vint_desc) {
 		ret = -ENOMEM;
 		goto free_vint;
diff --git a/drivers/irqchip/irq-vf610-mscm-ir.c b/drivers/irqchip/irq-vf610-mscm-ir.c
index 5d9c7503aa7f..750b3d5b4c1d 100644
--- a/drivers/irqchip/irq-vf610-mscm-ir.c
+++ b/drivers/irqchip/irq-vf610-mscm-ir.c
@@ -188,7 +188,7 @@ static int __init vf610_mscm_ir_of_init(struct device_node *node,
 		return -EINVAL;
 	}

-	mscm_ir_data = kzalloc(sizeof(*mscm_ir_data), GFP_KERNEL);
+	mscm_ir_data = kzalloc_obj(*mscm_ir_data, GFP_KERNEL);
 	if (!mscm_ir_data)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-vt8500.c b/drivers/irqchip/irq-vt8500.c
index 3b742590aec8..48bd0ac5cf63 100644
--- a/drivers/irqchip/irq-vt8500.c
+++ b/drivers/irqchip/irq-vt8500.c
@@ -203,7 +203,7 @@ static int __init vt8500_irq_init(struct device_node *node,
 	struct vt8500_irq_data *intc;
 	int irq, i, ret = 0;

-	intc = kzalloc(sizeof(*intc), GFP_KERNEL);
+	intc = kzalloc_obj(*intc, GFP_KERNEL);
 	if (!intc)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-wpcm450-aic.c b/drivers/irqchip/irq-wpcm450-aic.c
index a8ed4894d29e..22ee3cfbfa03 100644
--- a/drivers/irqchip/irq-wpcm450-aic.c
+++ b/drivers/irqchip/irq-wpcm450-aic.c
@@ -139,7 +139,7 @@ static int __init wpcm450_aic_of_init(struct device_node *node,
 	if (parent)
 		return -EINVAL;

-	aic = kzalloc(sizeof(*aic), GFP_KERNEL);
+	aic = kzalloc_obj(*aic, GFP_KERNEL);
 	if (!aic)
 		return -ENOMEM;

diff --git a/drivers/irqchip/irq-xilinx-intc.c b/drivers/irqchip/irq-xilinx-intc.c
index 92dcb9fdcb25..b922226adbee 100644
--- a/drivers/irqchip/irq-xilinx-intc.c
+++ b/drivers/irqchip/irq-xilinx-intc.c
@@ -171,7 +171,7 @@ static int __init xilinx_intc_of_init(struct device_node *intc,
 	struct xintc_irq_chip *irqc;
 	int ret, irq;

-	irqc = kzalloc(sizeof(*irqc), GFP_KERNEL);
+	irqc = kzalloc_obj(*irqc, GFP_KERNEL);
 	if (!irqc)
 		return -ENOMEM;
 	irqc->base = of_iomap(intc, 0);
diff --git a/drivers/irqchip/qcom-pdc.c b/drivers/irqchip/qcom-pdc.c
index 518f7f0f3dab..10d54ab3ad90 100644
--- a/drivers/irqchip/qcom-pdc.c
+++ b/drivers/irqchip/qcom-pdc.c
@@ -318,7 +318,7 @@ static int pdc_setup_pin_mapping(struct device_node *np)
 		return -EINVAL;

 	pdc_region_cnt = n / 3;
-	pdc_region = kcalloc(pdc_region_cnt, sizeof(*pdc_region), GFP_KERNEL);
+	pdc_region = kzalloc_objs(*pdc_region, pdc_region_cnt, GFP_KERNEL);
 	if (!pdc_region) {
 		pdc_region_cnt = 0;
 		return -ENOMEM;
diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c
index 78e6e7748fb9..b1b367353b4f 100644
--- a/drivers/isdn/capi/capi.c
+++ b/drivers/isdn/capi/capi.c
@@ -148,7 +148,7 @@ static int capiminor_add_ack(struct capiminor *mp, u16 datahandle)
 {
 	struct ackqueue_entry *n;

-	n = kmalloc(sizeof(*n), GFP_ATOMIC);
+	n = kmalloc_obj(*n, GFP_ATOMIC);
 	if (unlikely(!n)) {
 		printk(KERN_ERR "capi: alloc datahandle failed\n");
 		return -1;
@@ -215,7 +215,7 @@ static struct capiminor *capiminor_alloc(struct capi20_appl *ap, u32 ncci)
 	struct device *dev;
 	unsigned int minor;

-	mp = kzalloc(sizeof(*mp), GFP_KERNEL);
+	mp = kzalloc_obj(*mp, GFP_KERNEL);
 	if (!mp) {
 		printk(KERN_ERR "capi: can't alloc capiminor\n");
 		return NULL;
@@ -341,7 +341,7 @@ static struct capincci *capincci_alloc(struct capidev *cdev, u32 ncci)
 {
 	struct capincci *np;

-	np = kzalloc(sizeof(*np), GFP_KERNEL);
+	np = kzalloc_obj(*np, GFP_KERNEL);
 	if (!np)
 		return NULL;
 	np->ncci = ncci;
@@ -981,7 +981,7 @@ static int capi_open(struct inode *inode, struct file *file)
 {
 	struct capidev *cdev;

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		return -ENOMEM;

@@ -1259,8 +1259,8 @@ static int __init capinc_tty_init(void)
 	if (capi_ttyminors <= 0)
 		capi_ttyminors = CAPINC_NR_PORTS;

-	capiminors = kcalloc(capi_ttyminors, sizeof(struct capiminor *),
-			     GFP_KERNEL);
+	capiminors = kzalloc_objs(struct capiminor *, capi_ttyminors,
+				  GFP_KERNEL);
 	if (!capiminors)
 		return -ENOMEM;

diff --git a/drivers/isdn/capi/capiutil.c b/drivers/isdn/capi/capiutil.c
index d7ae42edc4a8..298029340ba8 100644
--- a/drivers/isdn/capi/capiutil.c
+++ b/drivers/isdn/capi/capiutil.c
@@ -538,7 +538,7 @@ static _cdebbuf *cdebbuf_alloc(void)
 		cdb = g_debbuf;
 		goto init;
 	} else
-		cdb = kmalloc(sizeof(_cdebbuf), GFP_ATOMIC);
+		cdb = kmalloc_obj(_cdebbuf, GFP_ATOMIC);
 	if (!cdb)
 		return NULL;
 	cdb->buf = kmalloc(CDEBUG_SIZE, GFP_ATOMIC);
@@ -592,7 +592,7 @@ _cdebbuf *capi_message2str(u8 *msg)
 	if (likely(cdb == g_debbuf))
 		cmsg = g_cmsg;
 	else
-		cmsg = kmalloc(sizeof(_cmsg), GFP_ATOMIC);
+		cmsg = kmalloc_obj(_cmsg, GFP_ATOMIC);
 	if (unlikely(!cmsg)) {
 		cdebbuf_free(cdb);
 		return NULL;
@@ -618,10 +618,10 @@ _cdebbuf *capi_message2str(u8 *msg)

 int __init cdebug_init(void)
 {
-	g_cmsg = kmalloc(sizeof(_cmsg), GFP_KERNEL);
+	g_cmsg = kmalloc_obj(_cmsg, GFP_KERNEL);
 	if (!g_cmsg)
 		return -ENOMEM;
-	g_debbuf = kmalloc(sizeof(_cdebbuf), GFP_KERNEL);
+	g_debbuf = kmalloc_obj(_cdebbuf, GFP_KERNEL);
 	if (!g_debbuf) {
 		kfree(g_cmsg);
 		return -ENOMEM;
diff --git a/drivers/isdn/capi/kcapi.c b/drivers/isdn/capi/kcapi.c
index e8f7e52354bc..f9fa17d68095 100644
--- a/drivers/isdn/capi/kcapi.c
+++ b/drivers/isdn/capi/kcapi.c
@@ -253,7 +253,7 @@ static void do_notify_work(struct work_struct *work)

 static int notify_push(unsigned int event_type, u32 controller)
 {
-	struct capictr_event *event = kmalloc(sizeof(*event), GFP_ATOMIC);
+	struct capictr_event *event = kmalloc_obj(*event, GFP_ATOMIC);

 	if (!event)
 		return -ENOMEM;
diff --git a/drivers/isdn/hardware/mISDN/avmfritz.c b/drivers/isdn/hardware/mISDN/avmfritz.c
index 044e4961376c..e833b45834d2 100644
--- a/drivers/isdn/hardware/mISDN/avmfritz.c
+++ b/drivers/isdn/hardware/mISDN/avmfritz.c
@@ -1090,7 +1090,7 @@ fritzpci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	int err = -ENOMEM;
 	struct fritzcard *card;

-	card = kzalloc(sizeof(struct fritzcard), GFP_KERNEL);
+	card = kzalloc_obj(struct fritzcard, GFP_KERNEL);
 	if (!card) {
 		pr_info("No kmem for fritzcard\n");
 		return err;
diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c
index f6c27ca92c01..23db1ca03fa6 100644
--- a/drivers/isdn/hardware/mISDN/hfcmulti.c
+++ b/drivers/isdn/hardware/mISDN/hfcmulti.c
@@ -4777,7 +4777,7 @@ init_e1_port(struct hfc_multi *hc, struct hm_map *m, int pt)
 	char		name[MISDN_MAX_IDLEN];
 	int		bcount = 0;

-	dch = kzalloc(sizeof(struct dchannel), GFP_KERNEL);
+	dch = kzalloc_obj(struct dchannel, GFP_KERNEL);
 	if (!dch)
 		return -ENOMEM;
 	dch->debug = debug;
@@ -4795,7 +4795,7 @@ init_e1_port(struct hfc_multi *hc, struct hm_map *m, int pt)
 	for (ch = 1; ch <= 31; ch++) {
 		if (!((1 << ch) & hc->bmask[pt])) /* skip unused channel */
 			continue;
-		bch = kzalloc(sizeof(struct bchannel), GFP_KERNEL);
+		bch = kzalloc_obj(struct bchannel, GFP_KERNEL);
 		if (!bch) {
 			printk(KERN_ERR "%s: no memory for bchannel\n",
 			    __func__);
@@ -4850,7 +4850,7 @@ init_multi_port(struct hfc_multi *hc, int pt)
 	int		ch, i, ret = 0;
 	char		name[MISDN_MAX_IDLEN];

-	dch = kzalloc(sizeof(struct dchannel), GFP_KERNEL);
+	dch = kzalloc_obj(struct dchannel, GFP_KERNEL);
 	if (!dch)
 		return -ENOMEM;
 	dch->debug = debug;
@@ -4868,7 +4868,7 @@ init_multi_port(struct hfc_multi *hc, int pt)
 	hc->chan[i + 2].port = pt;
 	hc->chan[i + 2].nt_timer = -1;
 	for (ch = 0; ch < dch->dev.nrbchan; ch++) {
-		bch = kzalloc(sizeof(struct bchannel), GFP_KERNEL);
+		bch = kzalloc_obj(struct bchannel, GFP_KERNEL);
 		if (!bch) {
 			printk(KERN_ERR "%s: no memory for bchannel\n",
 			       __func__);
@@ -4991,7 +4991,7 @@ hfcmulti_init(struct hm_map *m, struct pci_dev *pdev,
 		       type[HFC_cnt]);

 	/* allocate card+fifo structure */
-	hc = kzalloc(sizeof(struct hfc_multi), GFP_KERNEL);
+	hc = kzalloc_obj(struct hfc_multi, GFP_KERNEL);
 	if (!hc) {
 		printk(KERN_ERR "No kmem for HFC-Multi card\n");
 		return -ENOMEM;
diff --git a/drivers/isdn/hardware/mISDN/hfcpci.c b/drivers/isdn/hardware/mISDN/hfcpci.c
index ea8a0ab47afd..6446eea8d9bb 100644
--- a/drivers/isdn/hardware/mISDN/hfcpci.c
+++ b/drivers/isdn/hardware/mISDN/hfcpci.c
@@ -2225,7 +2225,7 @@ hfc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	struct hfc_pci	*card;
 	struct _hfc_map	*m = (struct _hfc_map *)ent->driver_data;

-	card = kzalloc(sizeof(struct hfc_pci), GFP_KERNEL);
+	card = kzalloc_obj(struct hfc_pci, GFP_KERNEL);
 	if (!card) {
 		printk(KERN_ERR "No kmem for HFC card\n");
 		return err;
diff --git a/drivers/isdn/hardware/mISDN/hfcsusb.c b/drivers/isdn/hardware/mISDN/hfcsusb.c
index 541a20cb58f1..293add6adeaf 100644
--- a/drivers/isdn/hardware/mISDN/hfcsusb.c
+++ b/drivers/isdn/hardware/mISDN/hfcsusb.c
@@ -249,7 +249,7 @@ hfcsusb_ph_info(struct hfcsusb *hw)
 	struct dchannel *dch = &hw->dch;
 	int i;

-	phi = kzalloc(struct_size(phi, bch, dch->dev.nrbchan), GFP_ATOMIC);
+	phi = kzalloc_flex(*phi, bch, dch->dev.nrbchan, GFP_ATOMIC);
 	if (!phi)
 		return -ENOMEM;

@@ -1696,7 +1696,7 @@ hfcsusb_stop_endpoint(struct hfcsusb *hw, int channel)
 static int
 setup_hfcsusb(struct hfcsusb *hw)
 {
-	void *dmabuf = kmalloc(sizeof(u_char), GFP_KERNEL);
+	void *dmabuf = kmalloc_obj(u_char, GFP_KERNEL);
 	u_char b;
 	int ret;

@@ -2018,7 +2018,7 @@ hfcsusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
 		return -EIO;

 	iface = iface_used;
-	hw = kzalloc(sizeof(struct hfcsusb), GFP_KERNEL);
+	hw = kzalloc_obj(struct hfcsusb, GFP_KERNEL);
 	if (!hw)
 		return -ENOMEM;	/* got no mem */
 	snprintf(hw->name, MISDN_MAX_IDLEN - 1, "%s", DRIVER_NAME);
diff --git a/drivers/isdn/hardware/mISDN/mISDNinfineon.c b/drivers/isdn/hardware/mISDN/mISDNinfineon.c
index 30876a012711..09d85c5f2ca5 100644
--- a/drivers/isdn/hardware/mISDN/mISDNinfineon.c
+++ b/drivers/isdn/hardware/mISDN/mISDNinfineon.c
@@ -1074,7 +1074,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	int err = -ENOMEM;
 	struct inf_hw *card;

-	card = kzalloc(sizeof(struct inf_hw), GFP_KERNEL);
+	card = kzalloc_obj(struct inf_hw, GFP_KERNEL);
 	if (!card) {
 		pr_info("No memory for Infineon ISDN card\n");
 		return err;
@@ -1108,7 +1108,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		struct inf_hw *sc;

 		for (i = 1; i < 4; i++) {
-			sc = kzalloc(sizeof(struct inf_hw), GFP_KERNEL);
+			sc = kzalloc_obj(struct inf_hw, GFP_KERNEL);
 			if (!sc) {
 				release_card(card);
 				pci_disable_device(pdev);
diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c
index d163850c295e..e5c28f25d190 100644
--- a/drivers/isdn/hardware/mISDN/netjet.c
+++ b/drivers/isdn/hardware/mISDN/netjet.c
@@ -1070,7 +1070,7 @@ nj_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		return -ENODEV;
 	}

-	card = kzalloc(sizeof(struct tiger_hw), GFP_KERNEL);
+	card = kzalloc_obj(struct tiger_hw, GFP_KERNEL);
 	if (!card) {
 		pr_info("No kmem for Netjet\n");
 		return err;
diff --git a/drivers/isdn/hardware/mISDN/speedfax.c b/drivers/isdn/hardware/mISDN/speedfax.c
index 0c405261d940..5df9fd5b0c9c 100644
--- a/drivers/isdn/hardware/mISDN/speedfax.c
+++ b/drivers/isdn/hardware/mISDN/speedfax.c
@@ -443,7 +443,7 @@ static int
 sfaxpci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
 	int err = -ENOMEM;
-	struct sfax_hw *card = kzalloc(sizeof(struct sfax_hw), GFP_KERNEL);
+	struct sfax_hw *card = kzalloc_obj(struct sfax_hw, GFP_KERNEL);

 	if (!card) {
 		pr_info("No memory for Speedfax+ PCI\n");
diff --git a/drivers/isdn/hardware/mISDN/w6692.c b/drivers/isdn/hardware/mISDN/w6692.c
index 168fc345dcdc..60bb2f302b1c 100644
--- a/drivers/isdn/hardware/mISDN/w6692.c
+++ b/drivers/isdn/hardware/mISDN/w6692.c
@@ -1342,7 +1342,7 @@ w6692_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	struct w6692_hw	*card;
 	struct w6692map	*m = (struct w6692map *)ent->driver_data;

-	card = kzalloc(sizeof(struct w6692_hw), GFP_KERNEL);
+	card = kzalloc_obj(struct w6692_hw, GFP_KERNEL);
 	if (!card) {
 		pr_info("No kmem for w6692 card\n");
 		return err;
diff --git a/drivers/isdn/mISDN/clock.c b/drivers/isdn/mISDN/clock.c
index f71eb61db131..2668be9de20a 100644
--- a/drivers/isdn/mISDN/clock.c
+++ b/drivers/isdn/mISDN/clock.c
@@ -91,7 +91,7 @@ struct mISDNclock

 	if (*debug & (DEBUG_CORE | DEBUG_CLOCK))
 		printk(KERN_DEBUG "%s: %s %d\n", __func__, name, pri);
-	iclock = kzalloc(sizeof(struct mISDNclock), GFP_ATOMIC);
+	iclock = kzalloc_obj(struct mISDNclock, GFP_ATOMIC);
 	if (!iclock) {
 		printk(KERN_ERR "%s: No memory for clock entry.\n", __func__);
 		return NULL;
diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c
index 53fad9487574..d5eb2349c414 100644
--- a/drivers/isdn/mISDN/dsp_cmx.c
+++ b/drivers/isdn/mISDN/dsp_cmx.c
@@ -226,7 +226,7 @@ dsp_cmx_add_conf_member(struct dsp *dsp, struct dsp_conf *conf)
 		return -EINVAL;
 	}

-	member = kzalloc(sizeof(struct dsp_conf_member), GFP_ATOMIC);
+	member = kzalloc_obj(struct dsp_conf_member, GFP_ATOMIC);
 	if (!member) {
 		printk(KERN_ERR "kzalloc struct dsp_conf_member failed\n");
 		return -ENOMEM;
@@ -305,7 +305,7 @@ static struct dsp_conf
 		return NULL;
 	}

-	conf = kzalloc(sizeof(struct dsp_conf), GFP_ATOMIC);
+	conf = kzalloc_obj(struct dsp_conf, GFP_ATOMIC);
 	if (!conf) {
 		printk(KERN_ERR "kzalloc struct dsp_conf failed\n");
 		return NULL;
diff --git a/drivers/isdn/mISDN/dsp_pipeline.c b/drivers/isdn/mISDN/dsp_pipeline.c
index b4ed0bb8ddfb..55693dc7206b 100644
--- a/drivers/isdn/mISDN/dsp_pipeline.c
+++ b/drivers/isdn/mISDN/dsp_pipeline.c
@@ -75,7 +75,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem)
 	if (!elem)
 		return -EINVAL;

-	entry = kzalloc(sizeof(struct dsp_element_entry), GFP_ATOMIC);
+	entry = kzalloc_obj(struct dsp_element_entry, GFP_ATOMIC);
 	if (!entry)
 		return -ENOMEM;

@@ -223,8 +223,8 @@ int dsp_pipeline_build(struct dsp_pipeline *pipeline, const char *cfg)
 			if (!strcmp(entry->elem->name, name)) {
 				elem = entry->elem;

-				pipeline_entry = kmalloc(sizeof(struct
-								dsp_pipeline_entry), GFP_ATOMIC);
+				pipeline_entry = kmalloc_obj(struct dsp_pipeline_entry,
+							     GFP_ATOMIC);
 				if (!pipeline_entry) {
 					printk(KERN_ERR "%s: failed to add "
 					       "entry to pipeline: %s (out of "
diff --git a/drivers/isdn/mISDN/l1oip_core.c b/drivers/isdn/mISDN/l1oip_core.c
index 6ab036e4a35f..2e02a81fe760 100644
--- a/drivers/isdn/mISDN/l1oip_core.c
+++ b/drivers/isdn/mISDN/l1oip_core.c
@@ -1370,7 +1370,7 @@ init_card(struct l1oip *hc, int pri, int bundle)
 		       (hc->remoteip >> 8) & 0xff, hc->remoteip & 0xff,
 		       hc->remoteport, hc->ondemand);

-	dch = kzalloc(sizeof(struct dchannel), GFP_KERNEL);
+	dch = kzalloc_obj(struct dchannel, GFP_KERNEL);
 	if (!dch)
 		return -ENOMEM;
 	dch->debug = debug;
@@ -1391,7 +1391,7 @@ init_card(struct l1oip *hc, int pri, int bundle)
 	for (ch = 0; ch < dch->dev.nrbchan; ch++) {
 		if (ch == 15)
 			i++;
-		bch = kzalloc(sizeof(struct bchannel), GFP_KERNEL);
+		bch = kzalloc_obj(struct bchannel, GFP_KERNEL);
 		if (!bch) {
 			printk(KERN_ERR "%s: no memory for bchannel\n",
 			       __func__);
@@ -1477,7 +1477,7 @@ l1oip_init(void)
 			       bundle ? "bundled IP packet for all B-channels" :
 			       "separate IP packets for every B-channel");

-		hc = kzalloc(sizeof(struct l1oip), GFP_ATOMIC);
+		hc = kzalloc_obj(struct l1oip, GFP_ATOMIC);
 		if (!hc) {
 			printk(KERN_ERR "No kmem for L1-over-IP driver.\n");
 			l1oip_cleanup();
diff --git a/drivers/isdn/mISDN/layer1.c b/drivers/isdn/mISDN/layer1.c
index 7b31c25a550e..3fbc170acf9a 100644
--- a/drivers/isdn/mISDN/layer1.c
+++ b/drivers/isdn/mISDN/layer1.c
@@ -374,7 +374,7 @@ int
 create_l1(struct dchannel *dch, dchannel_l1callback *dcb) {
 	struct layer1	*nl1;

-	nl1 = kzalloc(sizeof(struct layer1), GFP_ATOMIC);
+	nl1 = kzalloc_obj(struct layer1, GFP_ATOMIC);
 	if (!nl1) {
 		printk(KERN_ERR "kmalloc struct layer1 failed\n");
 		return -ENOMEM;
diff --git a/drivers/isdn/mISDN/layer2.c b/drivers/isdn/mISDN/layer2.c
index 5bf7fcb282c4..ea32330c1612 100644
--- a/drivers/isdn/mISDN/layer2.c
+++ b/drivers/isdn/mISDN/layer2.c
@@ -2111,7 +2111,7 @@ create_l2(struct mISDNchannel *ch, u_int protocol, u_long options, int tei,
 	struct layer2		*l2;
 	struct channel_req	rq;

-	l2 = kzalloc(sizeof(struct layer2), GFP_KERNEL);
+	l2 = kzalloc_obj(struct layer2, GFP_KERNEL);
 	if (!l2) {
 		printk(KERN_ERR "kzalloc layer2 failed\n");
 		return NULL;
diff --git a/drivers/isdn/mISDN/stack.c b/drivers/isdn/mISDN/stack.c
index c2f76f398613..4226bae0f8c6 100644
--- a/drivers/isdn/mISDN/stack.c
+++ b/drivers/isdn/mISDN/stack.c
@@ -366,7 +366,7 @@ create_stack(struct mISDNdevice *dev)
 	int			err;
 	DECLARE_COMPLETION_ONSTACK(done);

-	newst = kzalloc(sizeof(struct mISDNstack), GFP_KERNEL);
+	newst = kzalloc_obj(struct mISDNstack, GFP_KERNEL);
 	if (!newst) {
 		printk(KERN_ERR "kmalloc mISDN_stack failed\n");
 		return -ENOMEM;
diff --git a/drivers/isdn/mISDN/tei.c b/drivers/isdn/mISDN/tei.c
index 59d28cb19738..e7c1d465cef3 100644
--- a/drivers/isdn/mISDN/tei.c
+++ b/drivers/isdn/mISDN/tei.c
@@ -803,7 +803,7 @@ create_new_tei(struct manager *mgr, int tei, int sapi)
 		printk(KERN_WARNING "%s:no memory for layer2\n", __func__);
 		return NULL;
 	}
-	l2->tm = kzalloc(sizeof(struct teimgr), GFP_KERNEL);
+	l2->tm = kzalloc_obj(struct teimgr, GFP_KERNEL);
 	if (!l2->tm) {
 		kfree(l2);
 		printk(KERN_WARNING "%s:no memory for teimgr\n", __func__);
@@ -1046,7 +1046,7 @@ create_teimgr(struct manager *mgr, struct channel_req *crq)
 		       crq->adr.tei, crq->adr.sapi);
 	if (!l2)
 		return -ENOMEM;
-	l2->tm = kzalloc(sizeof(struct teimgr), GFP_KERNEL);
+	l2->tm = kzalloc_obj(struct teimgr, GFP_KERNEL);
 	if (!l2->tm) {
 		kfree(l2);
 		printk(KERN_ERR "kmalloc teimgr failed\n");
@@ -1345,7 +1345,7 @@ create_teimanager(struct mISDNdevice *dev)
 {
 	struct manager *mgr;

-	mgr = kzalloc(sizeof(struct manager), GFP_KERNEL);
+	mgr = kzalloc_obj(struct manager, GFP_KERNEL);
 	if (!mgr)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&mgr->layer2);
diff --git a/drivers/isdn/mISDN/timerdev.c b/drivers/isdn/mISDN/timerdev.c
index 33521c328a82..25b9625b1cd8 100644
--- a/drivers/isdn/mISDN/timerdev.c
+++ b/drivers/isdn/mISDN/timerdev.c
@@ -47,7 +47,7 @@ mISDN_open(struct inode *ino, struct file *filep)

 	if (*debug & DEBUG_TIMER)
 		printk(KERN_DEBUG "%s(%p,%p)\n", __func__, ino, filep);
-	dev = kmalloc(sizeof(struct mISDNtimerdev) , GFP_KERNEL);
+	dev = kmalloc_obj(struct mISDNtimerdev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	dev->next_id = 1;
@@ -179,7 +179,7 @@ misdn_add_timer(struct mISDNtimerdev *dev, int timeout)
 		wake_up_interruptible(&dev->wait);
 		id = 0;
 	} else {
-		timer = kzalloc(sizeof(struct mISDNtimer), GFP_KERNEL);
+		timer = kzalloc_obj(struct mISDNtimer, GFP_KERNEL);
 		if (!timer)
 			return -ENOMEM;
 		timer->dev = dev;
diff --git a/drivers/leds/led-triggers.c b/drivers/leds/led-triggers.c
index 3799dcc1cf07..2fdb713307c3 100644
--- a/drivers/leds/led-triggers.c
+++ b/drivers/leds/led-triggers.c
@@ -486,7 +486,7 @@ void led_trigger_register_simple(const char *name, struct led_trigger **tp)
 	struct led_trigger *trig;
 	int err;

-	trig = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
+	trig = kzalloc_obj(struct led_trigger, GFP_KERNEL);

 	if (trig) {
 		trig->name = name;
diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c
index f54851dfb42f..138c8fb3514c 100644
--- a/drivers/leds/rgb/leds-qcom-lpg.c
+++ b/drivers/leds/rgb/leds-qcom-lpg.c
@@ -996,7 +996,7 @@ static int lpg_pattern_set(struct lpg_led *led, struct led_pattern *led_pattern,
 	if (len % 2)
 		return -EINVAL;

-	pattern = kcalloc(len / 2, sizeof(*pattern), GFP_KERNEL);
+	pattern = kzalloc_objs(*pattern, len / 2, GFP_KERNEL);
 	if (!pattern)
 		return -ENOMEM;

diff --git a/drivers/leds/trigger/ledtrig-activity.c b/drivers/leds/trigger/ledtrig-activity.c
index c973246a57f9..4f0c16b04876 100644
--- a/drivers/leds/trigger/ledtrig-activity.c
+++ b/drivers/leds/trigger/ledtrig-activity.c
@@ -188,7 +188,7 @@ static int activity_activate(struct led_classdev *led_cdev)
 {
 	struct activity_data *activity_data;

-	activity_data = kzalloc(sizeof(*activity_data), GFP_KERNEL);
+	activity_data = kzalloc_obj(*activity_data, GFP_KERNEL);
 	if (!activity_data)
 		return -ENOMEM;

diff --git a/drivers/leds/trigger/ledtrig-backlight.c b/drivers/leds/trigger/ledtrig-backlight.c
index c1f0f5becaee..80b33f13beee 100644
--- a/drivers/leds/trigger/ledtrig-backlight.c
+++ b/drivers/leds/trigger/ledtrig-backlight.c
@@ -102,7 +102,7 @@ static int bl_trig_activate(struct led_classdev *led)
 {
 	struct bl_trig_notifier *n;

-	n = kzalloc(sizeof(struct bl_trig_notifier), GFP_KERNEL);
+	n = kzalloc_obj(struct bl_trig_notifier, GFP_KERNEL);
 	if (!n)
 		return -ENOMEM;
 	led_set_trigger_data(led, n);
diff --git a/drivers/leds/trigger/ledtrig-gpio.c b/drivers/leds/trigger/ledtrig-gpio.c
index 7f6a2352b0ac..eec6de5ea3bc 100644
--- a/drivers/leds/trigger/ledtrig-gpio.c
+++ b/drivers/leds/trigger/ledtrig-gpio.c
@@ -78,7 +78,7 @@ static int gpio_trig_activate(struct led_classdev *led)
 	struct device *dev = led->dev;
 	int ret;

-	gpio_data = kzalloc(sizeof(*gpio_data), GFP_KERNEL);
+	gpio_data = kzalloc_obj(*gpio_data, GFP_KERNEL);
 	if (!gpio_data)
 		return -ENOMEM;

diff --git a/drivers/leds/trigger/ledtrig-heartbeat.c b/drivers/leds/trigger/ledtrig-heartbeat.c
index 40eb61b6d54e..6ad8b486b058 100644
--- a/drivers/leds/trigger/ledtrig-heartbeat.c
+++ b/drivers/leds/trigger/ledtrig-heartbeat.c
@@ -129,7 +129,7 @@ static int heartbeat_trig_activate(struct led_classdev *led_cdev)
 {
 	struct heartbeat_trig_data *heartbeat_data;

-	heartbeat_data = kzalloc(sizeof(*heartbeat_data), GFP_KERNEL);
+	heartbeat_data = kzalloc_obj(*heartbeat_data, GFP_KERNEL);
 	if (!heartbeat_data)
 		return -ENOMEM;

diff --git a/drivers/leds/trigger/ledtrig-input-events.c b/drivers/leds/trigger/ledtrig-input-events.c
index 3c6414259c27..dcdea964311d 100644
--- a/drivers/leds/trigger/ledtrig-input-events.c
+++ b/drivers/leds/trigger/ledtrig-input-events.c
@@ -75,7 +75,7 @@ static int input_events_connect(struct input_handler *handler, struct input_dev
 	struct input_handle *handle;
 	int ret;

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

diff --git a/drivers/leds/trigger/ledtrig-netdev.c b/drivers/leds/trigger/ledtrig-netdev.c
index c15efe3e5078..e15e7dcdbcd9 100644
--- a/drivers/leds/trigger/ledtrig-netdev.c
+++ b/drivers/leds/trigger/ledtrig-netdev.c
@@ -691,7 +691,7 @@ static int netdev_trig_activate(struct led_classdev *led_cdev)
 	struct device *dev;
 	int rc;

-	trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL);
+	trigger_data = kzalloc_obj(struct led_netdev_data, GFP_KERNEL);
 	if (!trigger_data)
 		return -ENOMEM;

diff --git a/drivers/leds/trigger/ledtrig-oneshot.c b/drivers/leds/trigger/ledtrig-oneshot.c
index bee3bd452abf..b825e607bb9f 100644
--- a/drivers/leds/trigger/ledtrig-oneshot.c
+++ b/drivers/leds/trigger/ledtrig-oneshot.c
@@ -159,7 +159,7 @@ static int oneshot_trig_activate(struct led_classdev *led_cdev)
 {
 	struct oneshot_trig_data *oneshot_data;

-	oneshot_data = kzalloc(sizeof(*oneshot_data), GFP_KERNEL);
+	oneshot_data = kzalloc_obj(*oneshot_data, GFP_KERNEL);
 	if (!oneshot_data)
 		return -ENOMEM;

diff --git a/drivers/leds/trigger/ledtrig-pattern.c b/drivers/leds/trigger/ledtrig-pattern.c
index 9af3c18f14f4..9eaae7757c8e 100644
--- a/drivers/leds/trigger/ledtrig-pattern.c
+++ b/drivers/leds/trigger/ledtrig-pattern.c
@@ -465,7 +465,7 @@ static int pattern_trig_activate(struct led_classdev *led_cdev)
 {
 	struct pattern_trig_data *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/leds/trigger/ledtrig-transient.c b/drivers/leds/trigger/ledtrig-transient.c
index 20f1351464b1..258e5d8db5b2 100644
--- a/drivers/leds/trigger/ledtrig-transient.c
+++ b/drivers/leds/trigger/ledtrig-transient.c
@@ -164,7 +164,7 @@ static int transient_trig_activate(struct led_classdev *led_cdev)
 {
 	struct transient_trig_data *tdata;

-	tdata = kzalloc(sizeof(struct transient_trig_data), GFP_KERNEL);
+	tdata = kzalloc_obj(struct transient_trig_data, GFP_KERNEL);
 	if (!tdata)
 		return -ENOMEM;

diff --git a/drivers/leds/trigger/ledtrig-tty.c b/drivers/leds/trigger/ledtrig-tty.c
index 8cf1485e8165..4ce915e417f8 100644
--- a/drivers/leds/trigger/ledtrig-tty.c
+++ b/drivers/leds/trigger/ledtrig-tty.c
@@ -312,7 +312,7 @@ static int ledtrig_tty_activate(struct led_classdev *led_cdev)
 {
 	struct ledtrig_tty_data *trigger_data;

-	trigger_data = kzalloc(sizeof(*trigger_data), GFP_KERNEL);
+	trigger_data = kzalloc_obj(*trigger_data, GFP_KERNEL);
 	if (!trigger_data)
 		return -ENOMEM;

diff --git a/drivers/leds/uleds.c b/drivers/leds/uleds.c
index 374a841f18c3..b70d203d0b16 100644
--- a/drivers/leds/uleds.c
+++ b/drivers/leds/uleds.c
@@ -53,7 +53,7 @@ static int uleds_open(struct inode *inode, struct file *file)
 {
 	struct uleds_device *udev;

-	udev = kzalloc(sizeof(*udev), GFP_KERNEL);
+	udev = kzalloc_obj(*udev, GFP_KERNEL);
 	if (!udev)
 		return -ENOMEM;

diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c
index 88adee42ba82..959cfbee7387 100644
--- a/drivers/macintosh/adb.c
+++ b/drivers/macintosh/adb.c
@@ -674,7 +674,7 @@ static int adb_open(struct inode *inode, struct file *file)
 		ret = -ENXIO;
 		goto out;
 	}
-	state = kmalloc(sizeof(struct adbdev_state), GFP_KERNEL);
+	state = kmalloc_obj(struct adbdev_state, GFP_KERNEL);
 	if (!state) {
 		ret = -ENOMEM;
 		goto out;
@@ -783,8 +783,7 @@ static ssize_t adb_write(struct file *file, const char __user *buf,
 	if (adb_controller == NULL)
 		return -ENXIO;

-	req = kmalloc(sizeof(struct adb_request),
-					     GFP_KERNEL);
+	req = kmalloc_obj(struct adb_request, GFP_KERNEL);
 	if (req == NULL)
 		return -ENOMEM;

diff --git a/drivers/macintosh/adbhid.c b/drivers/macintosh/adbhid.c
index c5aabf238d0a..c995f1155a94 100644
--- a/drivers/macintosh/adbhid.c
+++ b/drivers/macintosh/adbhid.c
@@ -764,7 +764,7 @@ adbhid_input_register(int id, int default_id, int original_handler_id,
 		return -EEXIST;
 	}

-	adbhid[id] = hid = kzalloc(sizeof(struct adbhid), GFP_KERNEL);
+	adbhid[id] = hid = kzalloc_obj(struct adbhid, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!hid || !input_dev) {
 		err = -ENOMEM;
diff --git a/drivers/macintosh/mac_hid.c b/drivers/macintosh/mac_hid.c
index 06fd910b3fd1..37f25b1f68c9 100644
--- a/drivers/macintosh/mac_hid.c
+++ b/drivers/macintosh/mac_hid.c
@@ -102,7 +102,7 @@ static int mac_hid_emumouse_connect(struct input_handler *handler,
 	if (dev == mac_hid_emumouse_dev)
 		return -ENODEV;

-	handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
+	handle = kzalloc_obj(struct input_handle, GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

diff --git a/drivers/macintosh/macio_asic.c b/drivers/macintosh/macio_asic.c
index bede200e32e8..b11809c41417 100644
--- a/drivers/macintosh/macio_asic.c
+++ b/drivers/macintosh/macio_asic.c
@@ -368,7 +368,7 @@ static struct macio_dev * macio_add_one_device(struct macio_chip *chip,
 	if (np == NULL)
 		return NULL;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/drivers/macintosh/rack-meter.c b/drivers/macintosh/rack-meter.c
index 896a43bd819f..f720c6c64b86 100644
--- a/drivers/macintosh/rack-meter.c
+++ b/drivers/macintosh/rack-meter.c
@@ -396,7 +396,7 @@ static int rackmeter_probe(struct macio_dev* mdev,
 	}

 	/* Create and initialize our instance data */
-	rm = kzalloc(sizeof(*rm), GFP_KERNEL);
+	rm = kzalloc_obj(*rm, GFP_KERNEL);
 	if (rm == NULL) {
 		printk(KERN_ERR "rackmeter: failed to allocate memory !\n");
 		rc = -ENOMEM;
diff --git a/drivers/macintosh/smu.c b/drivers/macintosh/smu.c
index a1534cc6c641..8f1f57a00981 100644
--- a/drivers/macintosh/smu.c
+++ b/drivers/macintosh/smu.c
@@ -1081,7 +1081,7 @@ static int smu_open(struct inode *inode, struct file *file)
 	struct smu_private *pp;
 	unsigned long flags;

-	pp = kzalloc(sizeof(struct smu_private), GFP_KERNEL);
+	pp = kzalloc_obj(struct smu_private, GFP_KERNEL);
 	if (!pp)
 		return -ENOMEM;
 	spin_lock_init(&pp->lock);
diff --git a/drivers/macintosh/therm_adt746x.c b/drivers/macintosh/therm_adt746x.c
index 00693741f744..0f8ac254ecee 100644
--- a/drivers/macintosh/therm_adt746x.c
+++ b/drivers/macintosh/therm_adt746x.c
@@ -498,7 +498,7 @@ static int probe_thermostat(struct i2c_client *client)
 		}
 	}

-	th = kzalloc(sizeof(struct thermostat), GFP_KERNEL);
+	th = kzalloc_obj(struct thermostat, GFP_KERNEL);
 	if (!th)
 		return -ENOMEM;

diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
index 5fe47e784d43..e721c84f51c3 100644
--- a/drivers/macintosh/via-pmu.c
+++ b/drivers/macintosh/via-pmu.c
@@ -2147,7 +2147,7 @@ pmu_open(struct inode *inode, struct file *file)
 	struct pmu_private *pp;
 	unsigned long flags;

-	pp = kmalloc(sizeof(struct pmu_private), GFP_KERNEL);
+	pp = kmalloc_obj(struct pmu_private, GFP_KERNEL);
 	if (!pp)
 		return -ENOMEM;
 	pp->rb_get = pp->rb_put = 0;
diff --git a/drivers/macintosh/windfarm_ad7417_sensor.c b/drivers/macintosh/windfarm_ad7417_sensor.c
index 3ff4577ba847..40af189795d8 100644
--- a/drivers/macintosh/windfarm_ad7417_sensor.c
+++ b/drivers/macintosh/windfarm_ad7417_sensor.c
@@ -260,7 +260,7 @@ static int wf_ad7417_probe(struct i2c_client *client)
 		return -ENXIO;
 	}

-	pv = kzalloc(sizeof(struct wf_ad7417_priv), GFP_KERNEL);
+	pv = kzalloc_obj(struct wf_ad7417_priv, GFP_KERNEL);
 	if (pv == NULL)
 		return -ENODEV;

diff --git a/drivers/macintosh/windfarm_cpufreq_clamp.c b/drivers/macintosh/windfarm_cpufreq_clamp.c
index 28d18ef22bbb..570b5428da1a 100644
--- a/drivers/macintosh/windfarm_cpufreq_clamp.c
+++ b/drivers/macintosh/windfarm_cpufreq_clamp.c
@@ -94,7 +94,7 @@ static int __init wf_cpufreq_clamp_init(void)
 		goto fail;
 	}

-	clamp = kmalloc(sizeof(struct wf_control), GFP_KERNEL);
+	clamp = kmalloc_obj(struct wf_control, GFP_KERNEL);
 	if (clamp == NULL) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/macintosh/windfarm_fcu_controls.c b/drivers/macintosh/windfarm_fcu_controls.c
index 82365f19adb4..c3b95f968592 100644
--- a/drivers/macintosh/windfarm_fcu_controls.c
+++ b/drivers/macintosh/windfarm_fcu_controls.c
@@ -363,7 +363,7 @@ static void wf_fcu_add_fan(struct wf_fcu_priv *pv, const char *name,
 {
 	struct wf_fcu_fan *fan;

-	fan = kzalloc(sizeof(*fan), GFP_KERNEL);
+	fan = kzalloc_obj(*fan, GFP_KERNEL);
 	if (!fan)
 		return;
 	fan->fcu_priv = pv;
@@ -518,7 +518,7 @@ static int wf_fcu_probe(struct i2c_client *client)
 {
 	struct wf_fcu_priv *pv;

-	pv = kzalloc(sizeof(*pv), GFP_KERNEL);
+	pv = kzalloc_obj(*pv, GFP_KERNEL);
 	if (!pv)
 		return -ENOMEM;

diff --git a/drivers/macintosh/windfarm_lm75_sensor.c b/drivers/macintosh/windfarm_lm75_sensor.c
index b5d9c2e40148..188a1a56e34c 100644
--- a/drivers/macintosh/windfarm_lm75_sensor.c
+++ b/drivers/macintosh/windfarm_lm75_sensor.c
@@ -130,7 +130,7 @@ static int wf_lm75_probe(struct i2c_client *client)
 		return -ENXIO;


-	lm = kzalloc(sizeof(struct wf_lm75_sensor), GFP_KERNEL);
+	lm = kzalloc_obj(struct wf_lm75_sensor, GFP_KERNEL);
 	if (lm == NULL)
 		return -ENODEV;

diff --git a/drivers/macintosh/windfarm_lm87_sensor.c b/drivers/macintosh/windfarm_lm87_sensor.c
index 16635e2b180b..dcaba5c7bec1 100644
--- a/drivers/macintosh/windfarm_lm87_sensor.c
+++ b/drivers/macintosh/windfarm_lm87_sensor.c
@@ -128,7 +128,7 @@ static int wf_lm87_probe(struct i2c_client *client)
 		return -ENODEV;
 	}

-	lm = kzalloc(sizeof(struct wf_lm87_sensor), GFP_KERNEL);
+	lm = kzalloc_obj(struct wf_lm87_sensor, GFP_KERNEL);
 	if (lm == NULL)
 		return -ENODEV;

diff --git a/drivers/macintosh/windfarm_max6690_sensor.c b/drivers/macintosh/windfarm_max6690_sensor.c
index d734b31b8236..be9e75e2d3cf 100644
--- a/drivers/macintosh/windfarm_max6690_sensor.c
+++ b/drivers/macintosh/windfarm_max6690_sensor.c
@@ -85,7 +85,7 @@ static int wf_max6690_probe(struct i2c_client *client)
 	else
 		return -ENXIO;

-	max = kzalloc(sizeof(struct wf_6690_sensor), GFP_KERNEL);
+	max = kzalloc_obj(struct wf_6690_sensor, GFP_KERNEL);
 	if (max == NULL) {
 		printk(KERN_ERR "windfarm: Couldn't create MAX6690 sensor: "
 		       "no memory\n");
diff --git a/drivers/macintosh/windfarm_pm121.c b/drivers/macintosh/windfarm_pm121.c
index 660180c843a3..82e2e4aa6b2e 100644
--- a/drivers/macintosh/windfarm_pm121.c
+++ b/drivers/macintosh/windfarm_pm121.c
@@ -531,8 +531,8 @@ static void pm121_create_sys_fans(int loop_id)
 	control = controls[param->control_id];

 	/* Alloc & initialize state */
-	pm121_sys_state[loop_id] = kmalloc(sizeof(struct pm121_sys_state),
-					   GFP_KERNEL);
+	pm121_sys_state[loop_id] = kmalloc_obj(struct pm121_sys_state,
+				               GFP_KERNEL);
 	if (pm121_sys_state[loop_id] == NULL) {
 		printk(KERN_WARNING "pm121: Memory allocation error\n");
 		goto fail;
@@ -668,8 +668,7 @@ static void pm121_create_cpu_fans(void)
 		tmax = 0x5e0000; /* 94 degree default */

 	/* Alloc & initialize state */
-	pm121_cpu_state = kmalloc(sizeof(struct pm121_cpu_state),
-				  GFP_KERNEL);
+	pm121_cpu_state = kmalloc_obj(struct pm121_cpu_state, GFP_KERNEL);
 	if (pm121_cpu_state == NULL)
 		goto fail;
 	pm121_cpu_state->ticks = 1;
diff --git a/drivers/macintosh/windfarm_pm81.c b/drivers/macintosh/windfarm_pm81.c
index ada97377e19e..f62a647a66a3 100644
--- a/drivers/macintosh/windfarm_pm81.c
+++ b/drivers/macintosh/windfarm_pm81.c
@@ -283,8 +283,7 @@ static void wf_smu_create_sys_fans(void)
 	}

 	/* Alloc & initialize state */
-	wf_smu_sys_fans = kmalloc(sizeof(struct wf_smu_sys_fans_state),
-				  GFP_KERNEL);
+	wf_smu_sys_fans = kmalloc_obj(struct wf_smu_sys_fans_state, GFP_KERNEL);
 	if (wf_smu_sys_fans == NULL) {
 		printk(KERN_WARNING "windfarm: Memory allocation error"
 		       " max fan speed\n");
@@ -419,8 +418,7 @@ static void wf_smu_create_cpu_fans(void)
 		tmax = 0x5e0000; /* 94 degree default */

 	/* Alloc & initialize state */
-	wf_smu_cpu_fans = kmalloc(sizeof(struct wf_smu_cpu_fans_state),
-				  GFP_KERNEL);
+	wf_smu_cpu_fans = kmalloc_obj(struct wf_smu_cpu_fans_state, GFP_KERNEL);
 	if (wf_smu_cpu_fans == NULL)
 		goto fail;
        	wf_smu_cpu_fans->ticks = 1;
diff --git a/drivers/macintosh/windfarm_pm91.c b/drivers/macintosh/windfarm_pm91.c
index 108d7938e714..398e61352e16 100644
--- a/drivers/macintosh/windfarm_pm91.c
+++ b/drivers/macintosh/windfarm_pm91.c
@@ -168,8 +168,7 @@ static void wf_smu_create_cpu_fans(void)
 		tmax = 0x5e0000; /* 94 degree default */

 	/* Alloc & initialize state */
-	wf_smu_cpu_fans = kmalloc(sizeof(struct wf_smu_cpu_fans_state),
-				  GFP_KERNEL);
+	wf_smu_cpu_fans = kmalloc_obj(struct wf_smu_cpu_fans_state, GFP_KERNEL);
 	if (wf_smu_cpu_fans == NULL)
 		goto fail;
        	wf_smu_cpu_fans->ticks = 1;
@@ -300,8 +299,8 @@ static void wf_smu_create_drive_fans(void)
 	};

 	/* Alloc & initialize state */
-	wf_smu_drive_fans = kmalloc(sizeof(struct wf_smu_drive_fans_state),
-					GFP_KERNEL);
+	wf_smu_drive_fans = kmalloc_obj(struct wf_smu_drive_fans_state,
+				        GFP_KERNEL);
 	if (wf_smu_drive_fans == NULL) {
 		printk(KERN_WARNING "windfarm: Memory allocation error"
 		       " max fan speed\n");
@@ -381,8 +380,8 @@ static void wf_smu_create_slots_fans(void)
 	};

 	/* Alloc & initialize state */
-	wf_smu_slots_fans = kmalloc(sizeof(struct wf_smu_slots_fans_state),
-					GFP_KERNEL);
+	wf_smu_slots_fans = kmalloc_obj(struct wf_smu_slots_fans_state,
+				        GFP_KERNEL);
 	if (wf_smu_slots_fans == NULL) {
 		printk(KERN_WARNING "windfarm: Memory allocation error"
 		       " max fan speed\n");
diff --git a/drivers/macintosh/windfarm_smu_controls.c b/drivers/macintosh/windfarm_smu_controls.c
index bdd92b27da2a..4cba2b51bd8a 100644
--- a/drivers/macintosh/windfarm_smu_controls.c
+++ b/drivers/macintosh/windfarm_smu_controls.c
@@ -162,7 +162,7 @@ static struct smu_fan_control *smu_fan_create(struct device_node *node,
 	const u32 *reg;
 	const char *l;

-	fct = kmalloc(sizeof(struct smu_fan_control), GFP_KERNEL);
+	fct = kmalloc_obj(struct smu_fan_control, GFP_KERNEL);
 	if (fct == NULL)
 		return NULL;
 	fct->ctrl.ops = &smu_fan_ops;
diff --git a/drivers/macintosh/windfarm_smu_sat.c b/drivers/macintosh/windfarm_smu_sat.c
index ff8805ecf2e5..c613484d7a80 100644
--- a/drivers/macintosh/windfarm_smu_sat.c
+++ b/drivers/macintosh/windfarm_smu_sat.c
@@ -203,7 +203,7 @@ static int wf_sat_probe(struct i2c_client *client)
 	char *name;
 	int vsens[2], isens[2];

-	sat = kzalloc(sizeof(struct wf_sat), GFP_KERNEL);
+	sat = kzalloc_obj(struct wf_sat, GFP_KERNEL);
 	if (sat == NULL)
 		return -ENOMEM;
 	sat->nr = -1;
diff --git a/drivers/macintosh/windfarm_smu_sensors.c b/drivers/macintosh/windfarm_smu_sensors.c
index 2bdb73b34d29..d7c934c5759d 100644
--- a/drivers/macintosh/windfarm_smu_sensors.c
+++ b/drivers/macintosh/windfarm_smu_sensors.c
@@ -200,7 +200,7 @@ static struct smu_ad_sensor *smu_ads_create(struct device_node *node)
 	const char *l;
 	const u32 *v;

-	ads = kmalloc(sizeof(struct smu_ad_sensor), GFP_KERNEL);
+	ads = kmalloc_obj(struct smu_ad_sensor, GFP_KERNEL);
 	if (ads == NULL)
 		return NULL;
 	l = of_get_property(node, "location", NULL);
@@ -338,7 +338,7 @@ smu_cpu_power_create(struct wf_sensor *volts, struct wf_sensor *amps)
 {
 	struct smu_cpu_power_sensor *pow;

-	pow = kmalloc(sizeof(struct smu_cpu_power_sensor), GFP_KERNEL);
+	pow = kmalloc_obj(struct smu_cpu_power_sensor, GFP_KERNEL);
 	if (pow == NULL)
 		return NULL;
 	pow->sens.ops = &smu_cpu_power_ops;
diff --git a/drivers/mailbox/bcm74110-mailbox.c b/drivers/mailbox/bcm74110-mailbox.c
index 2e7e86f3e6a4..344cfc35984b 100644
--- a/drivers/mailbox/bcm74110-mailbox.c
+++ b/drivers/mailbox/bcm74110-mailbox.c
@@ -140,7 +140,7 @@ static void bcm74110_rx_push_init_msg(struct bcm74110_mbox *mbox, u32 val)
 {
 	struct bcm74110_mbox_msg *msg;

-	msg = kzalloc(sizeof(*msg), GFP_ATOMIC);
+	msg = kzalloc_obj(*msg, GFP_ATOMIC);
 	if (!msg)
 		return;

diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c
index 9da16b30eb41..d7c6b38888a3 100644
--- a/drivers/mailbox/mtk-cmdq-mailbox.c
+++ b/drivers/mailbox/mtk-cmdq-mailbox.c
@@ -456,7 +456,7 @@ static int cmdq_mbox_send_data(struct mbox_chan *chan, void *data)
 	/* Client should not flush new tasks if suspended. */
 	WARN_ON(cmdq->suspended);

-	task = kzalloc(sizeof(*task), GFP_ATOMIC);
+	task = kzalloc_obj(*task, GFP_ATOMIC);
 	if (!task)
 		return -ENOMEM;

diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
index 3d487d75c483..ce17092d5c1f 100644
--- a/drivers/mcb/mcb-core.c
+++ b/drivers/mcb/mcb-core.c
@@ -274,7 +274,7 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier)
 	int bus_nr;
 	int rc;

-	bus = kzalloc(sizeof(struct mcb_bus), GFP_KERNEL);
+	bus = kzalloc_obj(struct mcb_bus, GFP_KERNEL);
 	if (!bus)
 		return ERR_PTR(-ENOMEM);

@@ -366,7 +366,7 @@ struct mcb_device *mcb_alloc_dev(struct mcb_bus *bus)
 {
 	struct mcb_device *dev;

-	dev = kzalloc(sizeof(struct mcb_device), GFP_KERNEL);
+	dev = kzalloc_obj(struct mcb_device, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/drivers/mcb/mcb-parse.c b/drivers/mcb/mcb-parse.c
index bf0d7d58c8b0..934f8d96922d 100644
--- a/drivers/mcb/mcb-parse.c
+++ b/drivers/mcb/mcb-parse.c
@@ -146,15 +146,14 @@ static int chameleon_get_bar(void __iomem **base, phys_addr_t mapbase,
 		if (bar_count <= 0 || bar_count > CHAMELEON_BAR_MAX)
 			return -ENODEV;

-		c = kcalloc(bar_count, sizeof(struct chameleon_bar),
-			    GFP_KERNEL);
+		c = kzalloc_objs(struct chameleon_bar, bar_count, GFP_KERNEL);
 		if (!c)
 			return -ENOMEM;

 		chameleon_parse_bar(*base, c, bar_count);
 		*base += BAR_DESC_SIZE(bar_count);
 	} else {
-		c = kzalloc(sizeof(struct chameleon_bar), GFP_KERNEL);
+		c = kzalloc_obj(struct chameleon_bar, GFP_KERNEL);
 		if (!c)
 			return -ENOMEM;

diff --git a/drivers/md/bcache/alloc.c b/drivers/md/bcache/alloc.c
index 7708d92df23e..90cc6ed4bd6d 100644
--- a/drivers/md/bcache/alloc.c
+++ b/drivers/md/bcache/alloc.c
@@ -697,7 +697,7 @@ int bch_open_buckets_alloc(struct cache_set *c)
 	spin_lock_init(&c->data_bucket_lock);

 	for (i = 0; i < MAX_OPEN_BUCKETS; i++) {
-		struct open_bucket *b = kzalloc(sizeof(*b), GFP_KERNEL);
+		struct open_bucket *b = kzalloc_obj(*b, GFP_KERNEL);

 		if (!b)
 			return -ENOMEM;
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 3ed39c823826..27a129d47d0a 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -585,7 +585,7 @@ static struct btree *mca_bucket_alloc(struct cache_set *c,
 	 * kzalloc() is necessary here for initialization,
 	 * see code comments in bch_btree_keys_init().
 	 */
-	struct btree *b = kzalloc(sizeof(struct btree), gfp);
+	struct btree *b = kzalloc_obj(struct btree, gfp);

 	if (!b)
 		return NULL;
diff --git a/drivers/md/bcache/debug.c b/drivers/md/bcache/debug.c
index f327456fc4e0..55f5e202015d 100644
--- a/drivers/md/bcache/debug.c
+++ b/drivers/md/bcache/debug.c
@@ -208,7 +208,7 @@ static int bch_dump_open(struct inode *inode, struct file *file)
 	struct cache_set *c = inode->i_private;
 	struct dump_iterator *i;

-	i = kzalloc(sizeof(struct dump_iterator), GFP_KERNEL);
+	i = kzalloc_obj(struct dump_iterator, GFP_KERNEL);
 	if (!i)
 		return -ENOMEM;

diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index 238d12ffdae8..a304ef80820b 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1527,8 +1527,7 @@ static CLOSURE_CALLBACK(flash_dev_flush)
 static int flash_dev_run(struct cache_set *c, struct uuid_entry *u)
 {
 	int err = -ENOMEM;
-	struct bcache_device *d = kzalloc(sizeof(struct bcache_device),
-					  GFP_KERNEL);
+	struct bcache_device *d = kzalloc_obj(struct bcache_device, GFP_KERNEL);
 	if (!d)
 		goto err_ret;

@@ -1864,7 +1863,7 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
 {
 	int iter_size;
 	struct cache *ca = container_of(sb, struct cache, sb);
-	struct cache_set *c = kzalloc(sizeof(struct cache_set), GFP_KERNEL);
+	struct cache_set *c = kzalloc_obj(struct cache_set, GFP_KERNEL);

 	if (!c)
 		return NULL;
@@ -2543,8 +2542,8 @@ static void register_device_async(struct async_reg_args *args)
 static void *alloc_holder_object(struct cache_sb *sb)
 {
 	if (SB_IS_BDEV(sb))
-		return kzalloc(sizeof(struct cached_dev), GFP_KERNEL);
-	return kzalloc(sizeof(struct cache), GFP_KERNEL);
+		return kzalloc_obj(struct cached_dev, GFP_KERNEL);
+	return kzalloc_obj(struct cache, GFP_KERNEL);
 }

 static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
@@ -2581,7 +2580,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
 	if (!path)
 		goto out_module_put;

-	sb = kmalloc(sizeof(struct cache_sb), GFP_KERNEL);
+	sb = kmalloc_obj(struct cache_sb, GFP_KERNEL);
 	if (!sb)
 		goto out_free_path;

@@ -2633,7 +2632,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
 	if (async_registration) {
 		/* register in asynchronous way */
 		struct async_reg_args *args =
-			kzalloc(sizeof(struct async_reg_args), GFP_KERNEL);
+			kzalloc_obj(struct async_reg_args, GFP_KERNEL);

 		if (!args) {
 			ret = -ENOMEM;
@@ -2710,7 +2709,7 @@ static ssize_t bch_pending_bdevs_cleanup(struct kobject *k,

 	mutex_lock(&bch_register_lock);
 	list_for_each_entry_safe(dc, tdc, &uncached_devices, list) {
-		pdev = kmalloc(sizeof(struct pdev), GFP_KERNEL);
+		pdev = kmalloc_obj(struct pdev, GFP_KERNEL);
 		if (!pdev)
 			break;
 		pdev->dc = dc;
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index 72f38e5b6f5c..b30424075106 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -415,7 +415,7 @@ STORE(__cached_dev)
 			       buf, SB_LABEL_SIZE);
 			bch_uuid_write(dc->disk.c);
 		}
-		env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL);
+		env = kzalloc_obj(struct kobj_uevent_env, GFP_KERNEL);
 		if (!env)
 			return -ENOMEM;
 		add_uevent_var(env, "DRIVER=bcache");
diff --git a/drivers/md/dm-bio-prison-v1.c b/drivers/md/dm-bio-prison-v1.c
index b4d1c4329df3..fc8bb30dc533 100644
--- a/drivers/md/dm-bio-prison-v1.c
+++ b/drivers/md/dm-bio-prison-v1.c
@@ -44,7 +44,7 @@ struct dm_bio_prison *dm_bio_prison_create(void)
 	struct dm_bio_prison *prison;

 	num_locks = dm_num_hash_locks();
-	prison = kzalloc(struct_size(prison, regions, num_locks), GFP_KERNEL);
+	prison = kzalloc_flex(*prison, regions, num_locks, GFP_KERNEL);
 	if (!prison)
 		return NULL;
 	prison->num_locks = num_locks;
@@ -301,7 +301,7 @@ struct dm_deferred_set *dm_deferred_set_create(void)
 	int i;
 	struct dm_deferred_set *ds;

-	ds = kmalloc(sizeof(*ds), GFP_KERNEL);
+	ds = kmalloc_obj(*ds, GFP_KERNEL);
 	if (!ds)
 		return NULL;

diff --git a/drivers/md/dm-bio-prison-v2.c b/drivers/md/dm-bio-prison-v2.c
index cf433b0cf742..d4daf426c2c7 100644
--- a/drivers/md/dm-bio-prison-v2.c
+++ b/drivers/md/dm-bio-prison-v2.c
@@ -36,7 +36,7 @@ static struct kmem_cache *_cell_cache;
  */
 struct dm_bio_prison_v2 *dm_bio_prison_create_v2(struct workqueue_struct *wq)
 {
-	struct dm_bio_prison_v2 *prison = kzalloc(sizeof(*prison), GFP_KERNEL);
+	struct dm_bio_prison_v2 *prison = kzalloc_obj(*prison, GFP_KERNEL);
 	int ret;

 	if (!prison)
diff --git a/drivers/md/dm-cache-background-tracker.c b/drivers/md/dm-cache-background-tracker.c
index b4165f172d62..fb5efaab11a3 100644
--- a/drivers/md/dm-cache-background-tracker.c
+++ b/drivers/md/dm-cache-background-tracker.c
@@ -26,7 +26,7 @@ struct kmem_cache *btracker_work_cache = NULL;

 struct background_tracker *btracker_create(unsigned int max_work)
 {
-	struct background_tracker *b = kmalloc(sizeof(*b), GFP_KERNEL);
+	struct background_tracker *b = kmalloc_obj(*b, GFP_KERNEL);

 	if (!b) {
 		DMERR("couldn't create background_tracker");
diff --git a/drivers/md/dm-cache-metadata.c b/drivers/md/dm-cache-metadata.c
index a9a1ab284076..5060a58605a2 100644
--- a/drivers/md/dm-cache-metadata.c
+++ b/drivers/md/dm-cache-metadata.c
@@ -760,7 +760,7 @@ static struct dm_cache_metadata *metadata_open(struct block_device *bdev,
 	int r;
 	struct dm_cache_metadata *cmd;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		DMERR("could not allocate metadata struct");
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/dm-cache-policy-smq.c b/drivers/md/dm-cache-policy-smq.c
index 7e1e8cc0e33a..bec1b5e95170 100644
--- a/drivers/md/dm-cache-policy-smq.c
+++ b/drivers/md/dm-cache-policy-smq.c
@@ -1735,7 +1735,7 @@ __smq_create(dm_cblock_t cache_size, sector_t origin_size, sector_t cache_block_
 	unsigned int i;
 	unsigned int nr_sentinels_per_queue = 2u * NR_CACHE_LEVELS;
 	unsigned int total_sentinels = 2u * nr_sentinels_per_queue;
-	struct smq_policy *mq = kzalloc(sizeof(*mq), GFP_KERNEL);
+	struct smq_policy *mq = kzalloc_obj(*mq, GFP_KERNEL);

 	if (!mq)
 		return NULL;
diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
index 62d1060619dd..be1af992b931 100644
--- a/drivers/md/dm-cache-target.c
+++ b/drivers/md/dm-cache-target.c
@@ -2387,7 +2387,7 @@ static int cache_create(struct cache_args *ca, struct cache **result)
 	struct dm_cache_metadata *cmd;
 	bool may_format = ca->features.mode == CM_WRITE;

-	cache = kzalloc(sizeof(*cache), GFP_KERNEL);
+	cache = kzalloc_obj(*cache, GFP_KERNEL);
 	if (!cache)
 		return -ENOMEM;

@@ -2612,7 +2612,7 @@ static int cache_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 	struct cache_args *ca;
 	struct cache *cache = NULL;

-	ca = kzalloc(sizeof(*ca), GFP_KERNEL);
+	ca = kzalloc_obj(*ca, GFP_KERNEL);
 	if (!ca) {
 		ti->error = "Error allocating memory for cache";
 		return -ENOMEM;
diff --git a/drivers/md/dm-clone-metadata.c b/drivers/md/dm-clone-metadata.c
index 14c5c28d938b..cb474e852548 100644
--- a/drivers/md/dm-clone-metadata.c
+++ b/drivers/md/dm-clone-metadata.c
@@ -553,7 +553,7 @@ struct dm_clone_metadata *dm_clone_metadata_open(struct block_device *bdev,
 	int r;
 	struct dm_clone_metadata *cmd;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		DMERR("Failed to allocate memory for dm-clone metadata");
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/dm-clone-target.c b/drivers/md/dm-clone-target.c
index a7f73861a8cd..c9b25af70063 100644
--- a/drivers/md/dm-clone-target.c
+++ b/drivers/md/dm-clone-target.c
@@ -580,7 +580,7 @@ static int hash_table_init(struct clone *clone)

 	sz = 1 << HASH_TABLE_BITS;

-	clone->ht = kvmalloc_array(sz, sizeof(struct hash_table_bucket), GFP_KERNEL);
+	clone->ht = kvmalloc_objs(struct hash_table_bucket, sz, GFP_KERNEL);
 	if (!clone->ht)
 		return -ENOMEM;

@@ -1766,7 +1766,7 @@ static int clone_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 	as.argc = argc;
 	as.argv = argv;

-	clone = kzalloc(sizeof(*clone), GFP_KERNEL);
+	clone = kzalloc_obj(*clone, GFP_KERNEL);
 	if (!clone) {
 		ti->error = "Failed to allocate clone structure";
 		return -ENOMEM;
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index 339976d4c2ca..a2f9f0f0db5e 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -2334,9 +2334,8 @@ static int crypt_alloc_tfms_skcipher(struct crypt_config *cc, char *ciphermode)
 	unsigned int i;
 	int err;

-	cc->cipher_tfm.tfms = kcalloc(cc->tfms_count,
-				      sizeof(struct crypto_skcipher *),
-				      GFP_KERNEL);
+	cc->cipher_tfm.tfms = kzalloc_objs(struct crypto_skcipher *,
+					   cc->tfms_count, GFP_KERNEL);
 	if (!cc->cipher_tfm.tfms)
 		return -ENOMEM;

@@ -2364,7 +2363,7 @@ static int crypt_alloc_tfms_aead(struct crypt_config *cc, char *ciphermode)
 {
 	int err;

-	cc->cipher_tfm.tfms = kmalloc(sizeof(struct crypto_skcipher *), GFP_KERNEL);
+	cc->cipher_tfm.tfms = kmalloc_obj(struct crypto_skcipher *, GFP_KERNEL);
 	if (!cc->cipher_tfm.tfms)
 		return -ENOMEM;

@@ -3238,7 +3237,7 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	cc = kzalloc(struct_size(cc, key, key_size), GFP_KERNEL);
+	cc = kzalloc_flex(*cc, key, key_size, GFP_KERNEL);
 	if (!cc) {
 		ti->error = "Cannot allocate encryption context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c
index 029f04776490..5d2dd07a19b0 100644
--- a/drivers/md/dm-delay.c
+++ b/drivers/md/dm-delay.c
@@ -224,7 +224,7 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	dc = kzalloc(sizeof(*dc), GFP_KERNEL);
+	dc = kzalloc_obj(*dc, GFP_KERNEL);
 	if (!dc) {
 		ti->error = "Cannot allocate context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-dust.c b/drivers/md/dm-dust.c
index e75310232bbf..a91f96bad0b9 100644
--- a/drivers/md/dm-dust.c
+++ b/drivers/md/dm-dust.c
@@ -108,7 +108,7 @@ static int dust_add_block(struct dust_device *dd, unsigned long long block,
 	struct badblock *bblock;
 	unsigned long flags;

-	bblock = kmalloc(sizeof(*bblock), GFP_KERNEL);
+	bblock = kmalloc_obj(*bblock, GFP_KERNEL);
 	if (bblock == NULL) {
 		if (!dd->quiet_mode)
 			DMERR("%s: badblock allocation failed", __func__);
@@ -360,7 +360,7 @@ static int dust_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	dd = kzalloc(sizeof(struct dust_device), GFP_KERNEL);
+	dd = kzalloc_obj(struct dust_device, GFP_KERNEL);
 	if (dd == NULL) {
 		ti->error = "Cannot allocate context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-ebs-target.c b/drivers/md/dm-ebs-target.c
index b354e74a670e..4c9a25ae90d6 100644
--- a/drivers/md/dm-ebs-target.c
+++ b/drivers/md/dm-ebs-target.c
@@ -257,7 +257,7 @@ static int ebs_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	ec = ti->private = kzalloc(sizeof(*ec), GFP_KERNEL);
+	ec = ti->private = kzalloc_obj(*ec, GFP_KERNEL);
 	if (!ec) {
 		ti->error = "Cannot allocate ebs context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-era-target.c b/drivers/md/dm-era-target.c
index 9c84e9d13eca..9bec72f04b9b 100644
--- a/drivers/md/dm-era-target.c
+++ b/drivers/md/dm-era-target.c
@@ -808,7 +808,7 @@ static struct era_metadata *metadata_open(struct block_device *bdev,
 					  bool may_format)
 {
 	int r;
-	struct era_metadata *md = kzalloc(sizeof(*md), GFP_KERNEL);
+	struct era_metadata *md = kzalloc_obj(*md, GFP_KERNEL);

 	if (!md)
 		return NULL;
@@ -1473,7 +1473,7 @@ static int era_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	era = kzalloc(sizeof(*era), GFP_KERNEL);
+	era = kzalloc_obj(*era, GFP_KERNEL);
 	if (!era) {
 		ti->error = "Error allocating era structure";
 		return -ENOMEM;
diff --git a/drivers/md/dm-exception-store.c b/drivers/md/dm-exception-store.c
index 88f119a0a2ae..91d541c66709 100644
--- a/drivers/md/dm-exception-store.c
+++ b/drivers/md/dm-exception-store.c
@@ -204,7 +204,7 @@ int dm_exception_store_create(struct dm_target *ti, int argc, char **argv,
 		return -EINVAL;
 	}

-	tmp_store = kzalloc(sizeof(*tmp_store), GFP_KERNEL);
+	tmp_store = kzalloc_obj(*tmp_store, GFP_KERNEL);
 	if (!tmp_store) {
 		ti->error = "Exception store allocation failed";
 		return -ENOMEM;
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index 08925aca838c..922e75bfcf17 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -277,7 +277,7 @@ static int flakey_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	fc = kzalloc(sizeof(*fc), GFP_KERNEL);
+	fc = kzalloc_obj(*fc, GFP_KERNEL);
 	if (!fc) {
 		ti->error = "Cannot allocate context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-init.c b/drivers/md/dm-init.c
index b37bbe762500..703250739a8a 100644
--- a/drivers/md/dm-init.c
+++ b/drivers/md/dm-init.c
@@ -127,7 +127,7 @@ static char __init *dm_parse_table_entry(struct dm_device *dev, char *str)
 	/* Delimit last field that can be terminated by comma */
 	next = str_field_delimit(&field[i], ',');

-	sp = kzalloc(sizeof(*sp), GFP_KERNEL);
+	sp = kzalloc_obj(*sp, GFP_KERNEL);
 	if (!sp)
 		return ERR_PTR(-ENOMEM);
 	dev->table[n] = sp;
@@ -244,7 +244,7 @@ static int __init dm_parse_devices(struct list_head *devices, char *str)

 	DMDEBUG("parsing \"%s\"", str);
 	while (device) {
-		dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+		dev = kzalloc_obj(*dev, GFP_KERNEL);
 		if (!dev)
 			return -ENOMEM;
 		list_add_tail(&dev->list, devices);
diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
index 681b00958d42..3da3ce600758 100644
--- a/drivers/md/dm-integrity.c
+++ b/drivers/md/dm-integrity.c
@@ -4243,7 +4243,8 @@ static struct page_list *dm_integrity_alloc_page_list(unsigned int n_pages)
 	struct page_list *pl;
 	unsigned int i;

-	pl = kvmalloc_array(n_pages + 1, sizeof(struct page_list), GFP_KERNEL | __GFP_ZERO);
+	pl = kvmalloc_objs(struct page_list, n_pages + 1,
+			   GFP_KERNEL | __GFP_ZERO);
 	if (!pl)
 		return NULL;

@@ -4277,9 +4278,8 @@ static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_int
 	struct scatterlist **sl;
 	unsigned int i;

-	sl = kvmalloc_array(ic->journal_sections,
-			    sizeof(struct scatterlist *),
-			    GFP_KERNEL | __GFP_ZERO);
+	sl = kvmalloc_objs(struct scatterlist *, ic->journal_sections,
+			   GFP_KERNEL | __GFP_ZERO);
 	if (!sl)
 		return NULL;

@@ -4296,8 +4296,7 @@ static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_int

 		n_pages = (end_index - start_index + 1);

-		s = kvmalloc_array(n_pages, sizeof(struct scatterlist),
-				   GFP_KERNEL);
+		s = kvmalloc_objs(struct scatterlist, n_pages, GFP_KERNEL);
 		if (!s) {
 			dm_integrity_free_journal_scatterlist(ic, sl);
 			return NULL;
@@ -4500,9 +4499,8 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
 				goto bad;
 			}

-			sg = kvmalloc_array(ic->journal_pages + 1,
-					    sizeof(struct scatterlist),
-					    GFP_KERNEL);
+			sg = kvmalloc_objs(struct scatterlist,
+					   ic->journal_pages + 1, GFP_KERNEL);
 			if (!sg) {
 				*error = "Unable to allocate sg list";
 				r = -ENOMEM;
@@ -4569,9 +4567,9 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
 				r = -ENOMEM;
 				goto bad;
 			}
-			ic->sk_requests = kvmalloc_array(ic->journal_sections,
-							 sizeof(struct skcipher_request *),
-							 GFP_KERNEL | __GFP_ZERO);
+			ic->sk_requests = kvmalloc_objs(struct skcipher_request *,
+							ic->journal_sections,
+							GFP_KERNEL | __GFP_ZERO);
 			if (!ic->sk_requests) {
 				*error = "Unable to allocate sk requests";
 				r = -ENOMEM;
@@ -4703,7 +4701,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned int argc, char **argv
 		return -EINVAL;
 	}

-	ic = kzalloc(sizeof(struct dm_integrity_c), GFP_KERNEL);
+	ic = kzalloc_obj(struct dm_integrity_c, GFP_KERNEL);
 	if (!ic) {
 		ti->error = "Cannot allocate integrity context";
 		return -ENOMEM;
@@ -5272,7 +5270,8 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned int argc, char **argv
 			r = -ENOMEM;
 			goto bad;
 		}
-		ic->bbs = kvmalloc_array(ic->n_bitmap_blocks, sizeof(struct bitmap_block_status), GFP_KERNEL);
+		ic->bbs = kvmalloc_objs(struct bitmap_block_status,
+					ic->n_bitmap_blocks, GFP_KERNEL);
 		if (!ic->bbs) {
 			ti->error = "Could not allocate memory for bitmap";
 			r = -ENOMEM;
diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c
index c37668790577..d08399b40dac 100644
--- a/drivers/md/dm-io.c
+++ b/drivers/md/dm-io.c
@@ -52,7 +52,7 @@ struct dm_io_client *dm_io_client_create(void)
 	unsigned int min_ios = dm_get_reserved_bio_based_ios();
 	int ret;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index fd4bf8e1d73e..7ab970430acd 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -218,7 +218,7 @@ static struct hash_cell *alloc_cell(const char *name, const char *uuid,
 {
 	struct hash_cell *hc;

-	hc = kmalloc(sizeof(*hc), GFP_KERNEL);
+	hc = kmalloc_obj(*hc, GFP_KERNEL);
 	if (!hc)
 		return NULL;

@@ -2136,7 +2136,7 @@ static int dm_open(struct inode *inode, struct file *filp)
 	if (unlikely(r))
 		return r;

-	priv = filp->private_data = kmalloc(sizeof(struct dm_file), GFP_KERNEL);
+	priv = filp->private_data = kmalloc_obj(struct dm_file, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c
index cec9a60227b6..03b81b39c65c 100644
--- a/drivers/md/dm-kcopyd.c
+++ b/drivers/md/dm-kcopyd.c
@@ -219,7 +219,7 @@ static struct page_list *alloc_pl(gfp_t gfp)
 {
 	struct page_list *pl;

-	pl = kmalloc(sizeof(*pl), gfp);
+	pl = kmalloc_obj(*pl, gfp);
 	if (!pl)
 		return NULL;

@@ -918,7 +918,7 @@ struct dm_kcopyd_client *dm_kcopyd_client_create(struct dm_kcopyd_throttle *thro
 	unsigned int reserve_pages;
 	struct dm_kcopyd_client *kc;

-	kc = kzalloc(sizeof(*kc), GFP_KERNEL);
+	kc = kzalloc_obj(*kc, GFP_KERNEL);
 	if (!kc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
index 73bf290af181..3123227a6e1d 100644
--- a/drivers/md/dm-linear.c
+++ b/drivers/md/dm-linear.c
@@ -39,7 +39,7 @@ static int linear_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	lc = kmalloc(sizeof(*lc), GFP_KERNEL);
+	lc = kmalloc_obj(*lc, GFP_KERNEL);
 	if (lc == NULL) {
 		ti->error = "Cannot allocate linear context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-log-userspace-base.c b/drivers/md/dm-log-userspace-base.c
index 607436804a8b..d1bc7d0c89d9 100644
--- a/drivers/md/dm-log-userspace-base.c
+++ b/drivers/md/dm-log-userspace-base.c
@@ -205,7 +205,7 @@ static int userspace_ctr(struct dm_dirty_log *log, struct dm_target *ti,
 		return -EINVAL;
 	}

-	lc = kzalloc(sizeof(*lc), GFP_KERNEL);
+	lc = kzalloc_obj(*lc, GFP_KERNEL);
 	if (!lc) {
 		DMWARN("Unable to allocate userspace log context.");
 		return -ENOMEM;
diff --git a/drivers/md/dm-log-writes.c b/drivers/md/dm-log-writes.c
index f0c84e7a5daa..a1040e8049aa 100644
--- a/drivers/md/dm-log-writes.c
+++ b/drivers/md/dm-log-writes.c
@@ -519,7 +519,7 @@ static int log_writes_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	lc = kzalloc(sizeof(struct log_writes_c), GFP_KERNEL);
+	lc = kzalloc_obj(struct log_writes_c, GFP_KERNEL);
 	if (!lc) {
 		ti->error = "Cannot allocate context";
 		return -ENOMEM;
@@ -587,7 +587,7 @@ static int log_mark(struct log_writes_c *lc, char *data)
 	struct pending_block *block;
 	size_t maxsize = lc->sectorsize - sizeof(struct log_write_entry);

-	block = kzalloc(sizeof(struct pending_block), GFP_KERNEL);
+	block = kzalloc_obj(struct pending_block, GFP_KERNEL);
 	if (!block) {
 		DMERR("Error allocating pending block");
 		return -ENOMEM;
diff --git a/drivers/md/dm-log.c b/drivers/md/dm-log.c
index bced5a783ee3..7865002678f5 100644
--- a/drivers/md/dm-log.c
+++ b/drivers/md/dm-log.c
@@ -153,7 +153,7 @@ struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
 	struct dm_dirty_log_type *type;
 	struct dm_dirty_log *log;

-	log = kmalloc(sizeof(*log), GFP_KERNEL);
+	log = kmalloc_obj(*log, GFP_KERNEL);
 	if (!log)
 		return NULL;

@@ -402,7 +402,7 @@ static int create_log_context(struct dm_dirty_log *log, struct dm_target *ti,

 	region_count = dm_sector_div_up(ti->len, region_size);

-	lc = kmalloc(sizeof(*lc), GFP_KERNEL);
+	lc = kmalloc_obj(*lc, GFP_KERNEL);
 	if (!lc) {
 		DMWARN("couldn't allocate core log");
 		return -ENOMEM;
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
index de03f9b06584..e47cfdf4f5d1 100644
--- a/drivers/md/dm-mpath.c
+++ b/drivers/md/dm-mpath.c
@@ -160,7 +160,7 @@ static bool mpath_double_check_test_bit(int MPATHF_bit, struct multipath *m)
  */
 static struct pgpath *alloc_pgpath(void)
 {
-	struct pgpath *pgpath = kzalloc(sizeof(*pgpath), GFP_KERNEL);
+	struct pgpath *pgpath = kzalloc_obj(*pgpath, GFP_KERNEL);

 	if (!pgpath)
 		return NULL;
@@ -179,7 +179,7 @@ static struct priority_group *alloc_priority_group(void)
 {
 	struct priority_group *pg;

-	pg = kzalloc(sizeof(*pg), GFP_KERNEL);
+	pg = kzalloc_obj(*pg, GFP_KERNEL);

 	if (pg)
 		INIT_LIST_HEAD(&pg->pgpaths);
@@ -216,7 +216,7 @@ static struct multipath *alloc_multipath(struct dm_target *ti)
 {
 	struct multipath *m;

-	m = kzalloc(sizeof(*m), GFP_KERNEL);
+	m = kzalloc_obj(*m, GFP_KERNEL);
 	if (m) {
 		INIT_LIST_HEAD(&m->priority_groups);
 		spin_lock_init(&m->lock);
diff --git a/drivers/md/dm-path-selector.c b/drivers/md/dm-path-selector.c
index 2b0ac200f1c0..28dc759e957a 100644
--- a/drivers/md/dm-path-selector.c
+++ b/drivers/md/dm-path-selector.c
@@ -87,7 +87,7 @@ void dm_put_path_selector(struct path_selector_type *pst)

 static struct ps_internal *_alloc_path_selector(struct path_selector_type *pst)
 {
-	struct ps_internal *psi = kzalloc(sizeof(*psi), GFP_KERNEL);
+	struct ps_internal *psi = kzalloc_obj(*psi, GFP_KERNEL);

 	if (psi)
 		psi->pst = *pst;
diff --git a/drivers/md/dm-pcache/cache.c b/drivers/md/dm-pcache/cache.c
index 534bf07b794f..a616255b83e2 100644
--- a/drivers/md/dm-pcache/cache.c
+++ b/drivers/md/dm-pcache/cache.c
@@ -138,7 +138,8 @@ static int cache_init(struct dm_pcache *pcache)
 	struct pcache_cache_dev *cache_dev = &pcache->cache_dev;
 	int ret;

-	cache->segments = kvcalloc(cache_dev->seg_num, sizeof(struct pcache_cache_segment), GFP_KERNEL);
+	cache->segments = kvzalloc_objs(struct pcache_cache_segment,
+					cache_dev->seg_num, GFP_KERNEL);
 	if (!cache->segments) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/md/dm-pcache/cache_key.c b/drivers/md/dm-pcache/cache_key.c
index 2b77e121f89b..3de356abf952 100644
--- a/drivers/md/dm-pcache/cache_key.c
+++ b/drivers/md/dm-pcache/cache_key.c
@@ -837,7 +837,8 @@ int cache_tree_init(struct pcache_cache *cache, struct pcache_cache_tree *cache_
 	 * Each element is a cache tree structure that contains
 	 * an RB tree root and a spinlock for protecting its contents.
 	 */
-	cache_tree->subtrees = kvcalloc(cache_tree->n_subtrees, sizeof(struct pcache_cache_subtree), GFP_KERNEL);
+	cache_tree->subtrees = kvzalloc_objs(struct pcache_cache_subtree,
+					     cache_tree->n_subtrees, GFP_KERNEL);
 	if (!cache_tree->subtrees) {
 		ret = -ENOMEM;
 		goto key_pool_exit;
diff --git a/drivers/md/dm-pcache/dm_pcache.c b/drivers/md/dm-pcache/dm_pcache.c
index e5f5936fa6f0..c36f2afdadc1 100644
--- a/drivers/md/dm-pcache/dm_pcache.c
+++ b/drivers/md/dm-pcache/dm_pcache.c
@@ -281,7 +281,7 @@ static int dm_pcache_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 	}

 	/* Allocate memory for the cache structure */
-	pcache = kzalloc(sizeof(struct dm_pcache), GFP_KERNEL);
+	pcache = kzalloc_obj(struct dm_pcache, GFP_KERNEL);
 	if (!pcache)
 		return -ENOMEM;

diff --git a/drivers/md/dm-ps-historical-service-time.c b/drivers/md/dm-ps-historical-service-time.c
index f07e773d9cc0..a526b5ab0453 100644
--- a/drivers/md/dm-ps-historical-service-time.c
+++ b/drivers/md/dm-ps-historical-service-time.c
@@ -129,7 +129,7 @@ static u64 fixed_ema(u64 last, u64 next, u64 weight)

 static struct selector *alloc_selector(void)
 {
-	struct selector *s = kmalloc(sizeof(*s), GFP_KERNEL);
+	struct selector *s = kmalloc_obj(*s, GFP_KERNEL);

 	if (s) {
 		INIT_LIST_HEAD(&s->valid_paths);
@@ -289,7 +289,7 @@ static int hst_add_path(struct path_selector *ps, struct dm_path *path,
 	}

 	/* allocate the path */
-	pi = kmalloc(sizeof(*pi), GFP_KERNEL);
+	pi = kmalloc_obj(*pi, GFP_KERNEL);
 	if (!pi) {
 		*error = "historical-service-time ps: Error allocating path context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-ps-io-affinity.c b/drivers/md/dm-ps-io-affinity.c
index 80415a045c68..5d69a4a93684 100644
--- a/drivers/md/dm-ps-io-affinity.c
+++ b/drivers/md/dm-ps-io-affinity.c
@@ -53,7 +53,7 @@ static int ioa_add_path(struct path_selector *ps, struct dm_path *path,
 		return -EINVAL;
 	}

-	pi = kzalloc(sizeof(*pi), GFP_KERNEL);
+	pi = kzalloc_obj(*pi, GFP_KERNEL);
 	if (!pi) {
 		*error = "io-affinity ps: Error allocating path context";
 		return -ENOMEM;
@@ -112,12 +112,11 @@ static int ioa_create(struct path_selector *ps, unsigned int argc, char **argv)
 {
 	struct selector *s;

-	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	s = kmalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

-	s->path_map = kcalloc(nr_cpu_ids, sizeof(struct path_info *),
-			      GFP_KERNEL);
+	s->path_map = kzalloc_objs(struct path_info *, nr_cpu_ids, GFP_KERNEL);
 	if (!s->path_map)
 		goto free_selector;

diff --git a/drivers/md/dm-ps-queue-length.c b/drivers/md/dm-ps-queue-length.c
index 9c68701ed7a4..d2663b1b136c 100644
--- a/drivers/md/dm-ps-queue-length.c
+++ b/drivers/md/dm-ps-queue-length.c
@@ -42,7 +42,7 @@ struct path_info {

 static struct selector *alloc_selector(void)
 {
-	struct selector *s = kmalloc(sizeof(*s), GFP_KERNEL);
+	struct selector *s = kmalloc_obj(*s, GFP_KERNEL);

 	if (s) {
 		INIT_LIST_HEAD(&s->valid_paths);
@@ -142,7 +142,7 @@ static int ql_add_path(struct path_selector *ps, struct dm_path *path,
 	}

 	/* Allocate the path information structure */
-	pi = kmalloc(sizeof(*pi), GFP_KERNEL);
+	pi = kmalloc_obj(*pi, GFP_KERNEL);
 	if (!pi) {
 		*error = "queue-length ps: Error allocating path information";
 		return -ENOMEM;
diff --git a/drivers/md/dm-ps-round-robin.c b/drivers/md/dm-ps-round-robin.c
index 0c12f4073461..ec8b9f27d3e7 100644
--- a/drivers/md/dm-ps-round-robin.c
+++ b/drivers/md/dm-ps-round-robin.c
@@ -55,7 +55,7 @@ struct selector {

 static struct selector *alloc_selector(void)
 {
-	struct selector *s = kmalloc(sizeof(*s), GFP_KERNEL);
+	struct selector *s = kmalloc_obj(*s, GFP_KERNEL);

 	if (s) {
 		INIT_LIST_HEAD(&s->valid_paths);
@@ -144,7 +144,7 @@ static int rr_add_path(struct path_selector *ps, struct dm_path *path,
 	}

 	/* allocate the path */
-	pi = kmalloc(sizeof(*pi), GFP_KERNEL);
+	pi = kmalloc_obj(*pi, GFP_KERNEL);
 	if (!pi) {
 		*error = "round-robin ps: Error allocating path context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-ps-service-time.c b/drivers/md/dm-ps-service-time.c
index 0543fe7969c4..dc119955fadd 100644
--- a/drivers/md/dm-ps-service-time.c
+++ b/drivers/md/dm-ps-service-time.c
@@ -38,7 +38,7 @@ struct path_info {

 static struct selector *alloc_selector(void)
 {
-	struct selector *s = kmalloc(sizeof(*s), GFP_KERNEL);
+	struct selector *s = kmalloc_obj(*s, GFP_KERNEL);

 	if (s) {
 		INIT_LIST_HEAD(&s->valid_paths);
@@ -153,7 +153,7 @@ static int st_add_path(struct path_selector *ps, struct dm_path *path,
 	}

 	/* allocate the path */
-	pi = kmalloc(sizeof(*pi), GFP_KERNEL);
+	pi = kmalloc_obj(*pi, GFP_KERNEL);
 	if (!pi) {
 		*error = "service-time ps: Error allocating path context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
index 4bacdc499984..939d403fda30 100644
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -744,7 +744,7 @@ static struct raid_set *raid_set_alloc(struct dm_target *ti, struct raid_type *r
 		return ERR_PTR(-EINVAL);
 	}

-	rs = kzalloc(struct_size(rs, dev, raid_devs), GFP_KERNEL);
+	rs = kzalloc_flex(*rs, dev, raid_devs, GFP_KERNEL);
 	if (!rs) {
 		ti->error = "Cannot allocate raid context";
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
index 943c0c6b2087..9fb2182ef287 100644
--- a/drivers/md/dm-raid1.c
+++ b/drivers/md/dm-raid1.c
@@ -890,7 +890,7 @@ static struct mirror_set *alloc_context(unsigned int nr_mirrors,
 					struct dm_dirty_log *dl)
 {
 	struct mirror_set *ms =
-		kzalloc(struct_size(ms, mirror, nr_mirrors), GFP_KERNEL);
+		kzalloc_flex(*ms, mirror, nr_mirrors, GFP_KERNEL);

 	if (!ms) {
 		ti->error = "Cannot allocate mirror context";
diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c
index e9b47b659976..a3489965103c 100644
--- a/drivers/md/dm-region-hash.c
+++ b/drivers/md/dm-region-hash.c
@@ -184,7 +184,7 @@ struct dm_region_hash *dm_region_hash_create(
 		;
 	nr_buckets >>= 1;

-	rh = kzalloc(sizeof(*rh), GFP_KERNEL);
+	rh = kzalloc_obj(*rh, GFP_KERNEL);
 	if (!rh) {
 		DMERR("unable to allocate region hash memory");
 		return ERR_PTR(-ENOMEM);
@@ -294,7 +294,7 @@ static struct dm_region *__rh_alloc(struct dm_region_hash *rh, region_t region)

 	nreg = mempool_alloc(&rh->region_pool, GFP_ATOMIC);
 	if (unlikely(!nreg))
-		nreg = kmalloc(sizeof(*nreg), GFP_NOIO | __GFP_NOFAIL);
+		nreg = kmalloc_obj(*nreg, GFP_NOIO | __GFP_NOFAIL);

 	nreg->state = rh->log->type->in_sync(rh->log, region, 1) ?
 		      DM_RH_CLEAN : DM_RH_NOSYNC;
diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c
index 0e13d60bfdd1..c8128af1dcad 100644
--- a/drivers/md/dm-snap-persistent.c
+++ b/drivers/md/dm-snap-persistent.c
@@ -626,8 +626,8 @@ static int persistent_read_metadata(struct dm_exception_store *store,
 	 */
 	ps->exceptions_per_area = (ps->store->chunk_size << SECTOR_SHIFT) /
 				  sizeof(struct disk_exception);
-	ps->callbacks = kvcalloc(ps->exceptions_per_area,
-				 sizeof(*ps->callbacks), GFP_KERNEL);
+	ps->callbacks = kvzalloc_objs(*ps->callbacks, ps->exceptions_per_area,
+				      GFP_KERNEL);
 	if (!ps->callbacks)
 		return -ENOMEM;

@@ -854,7 +854,7 @@ static int persistent_ctr(struct dm_exception_store *store, char *options)
 	int r;

 	/* allocate the pstore */
-	ps = kzalloc(sizeof(*ps), GFP_KERNEL);
+	ps = kzalloc_obj(*ps, GFP_KERNEL);
 	if (!ps)
 		return -ENOMEM;

diff --git a/drivers/md/dm-snap-transient.c b/drivers/md/dm-snap-transient.c
index 1e07a745bedd..b7b449db6c34 100644
--- a/drivers/md/dm-snap-transient.c
+++ b/drivers/md/dm-snap-transient.c
@@ -77,7 +77,7 @@ static int transient_ctr(struct dm_exception_store *store, char *options)
 {
 	struct transient_c *tc;

-	tc = kmalloc(sizeof(struct transient_c), GFP_KERNEL);
+	tc = kmalloc_obj(struct transient_c, GFP_KERNEL);
 	if (!tc)
 		return -ENOMEM;

diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
index dbd148967de4..5a77ccd33232 100644
--- a/drivers/md/dm-snap.c
+++ b/drivers/md/dm-snap.c
@@ -354,8 +354,7 @@ static int init_origin_hash(void)
 {
 	int i;

-	_origins = kmalloc_array(ORIGIN_HASH_SIZE, sizeof(struct list_head),
-				 GFP_KERNEL);
+	_origins = kmalloc_objs(struct list_head, ORIGIN_HASH_SIZE, GFP_KERNEL);
 	if (!_origins) {
 		DMERR("unable to allocate memory for _origins");
 		return -ENOMEM;
@@ -363,9 +362,8 @@ static int init_origin_hash(void)
 	for (i = 0; i < ORIGIN_HASH_SIZE; i++)
 		INIT_LIST_HEAD(_origins + i);

-	_dm_origins = kmalloc_array(ORIGIN_HASH_SIZE,
-				    sizeof(struct list_head),
-				    GFP_KERNEL);
+	_dm_origins = kmalloc_objs(struct list_head, ORIGIN_HASH_SIZE,
+				   GFP_KERNEL);
 	if (!_dm_origins) {
 		DMERR("unable to allocate memory for _dm_origins");
 		kfree(_origins);
@@ -559,7 +557,7 @@ static int register_snapshot(struct dm_snapshot *snap)
 	struct block_device *bdev = snap->origin->bdev;
 	int r = 0;

-	new_o = kmalloc(sizeof(*new_o), GFP_KERNEL);
+	new_o = kmalloc_obj(*new_o, GFP_KERNEL);
 	if (!new_o)
 		return -ENOMEM;

@@ -666,8 +664,7 @@ static int dm_exception_table_init(struct dm_exception_table *et,

 	et->hash_shift = hash_shift;
 	et->hash_mask = size - 1;
-	et->table = kvmalloc_array(size, sizeof(struct dm_hlist_head),
-				   GFP_KERNEL);
+	et->table = kvmalloc_objs(struct dm_hlist_head, size, GFP_KERNEL);
 	if (!et->table)
 		return -ENOMEM;

@@ -1252,7 +1249,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		origin_mode = BLK_OPEN_WRITE;
 	}

-	s = kzalloc(sizeof(*s), GFP_KERNEL);
+	s = kzalloc_obj(*s, GFP_KERNEL);
 	if (!s) {
 		ti->error = "Cannot allocate private snapshot structure";
 		r = -ENOMEM;
@@ -2626,7 +2623,7 @@ static int origin_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	o = kmalloc(sizeof(struct dm_origin), GFP_KERNEL);
+	o = kmalloc_obj(struct dm_origin, GFP_KERNEL);
 	if (!o) {
 		ti->error = "Cannot allocate private origin structure";
 		r = -ENOMEM;
diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c
index 1e5d988f44da..b26656dea4ec 100644
--- a/drivers/md/dm-stats.c
+++ b/drivers/md/dm-stats.c
@@ -971,9 +971,8 @@ static int parse_histogram(const char *h, unsigned int *n_histogram_entries,
 		if (*q == ',')
 			(*n_histogram_entries)++;

-	*histogram_boundaries = kmalloc_array(*n_histogram_entries,
-					      sizeof(unsigned long long),
-					      GFP_KERNEL);
+	*histogram_boundaries = kmalloc_objs(unsigned long long,
+					     *n_histogram_entries, GFP_KERNEL);
 	if (!*histogram_boundaries)
 		return -ENOMEM;

diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
index 20cce876d80c..e06bb1f7518e 100644
--- a/drivers/md/dm-stripe.c
+++ b/drivers/md/dm-stripe.c
@@ -129,7 +129,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	sc = kmalloc(struct_size(sc, stripe, stripes), GFP_KERNEL);
+	sc = kmalloc_flex(*sc, stripe, stripes, GFP_KERNEL);
 	if (!sc) {
 		ti->error = "Memory allocation for striped context failed";
 		return -ENOMEM;
diff --git a/drivers/md/dm-switch.c b/drivers/md/dm-switch.c
index 50a52ca50b34..00dffd4a9ea8 100644
--- a/drivers/md/dm-switch.c
+++ b/drivers/md/dm-switch.c
@@ -62,7 +62,7 @@ static struct switch_ctx *alloc_switch_ctx(struct dm_target *ti, unsigned int nr
 {
 	struct switch_ctx *sctx;

-	sctx = kzalloc(struct_size(sctx, path_list, nr_paths), GFP_KERNEL);
+	sctx = kzalloc_flex(*sctx, path_list, nr_paths, GFP_KERNEL);
 	if (!sctx)
 		return NULL;

diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 7be1d8dc8bdd..4b4712e54797 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -133,7 +133,7 @@ int dm_table_create(struct dm_table **result, blk_mode_t mode,
 	if (num_targets > DM_MAX_TARGETS)
 		return -EOVERFLOW;

-	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc_obj(*t, GFP_KERNEL);

 	if (!t)
 		return -ENOMEM;
@@ -381,7 +381,7 @@ int dm_get_device(struct dm_target *ti, const char *path, blk_mode_t mode,

 	dd = find_device(&t->devices, dev);
 	if (!dd) {
-		dd = kmalloc(sizeof(*dd), GFP_KERNEL);
+		dd = kmalloc_obj(*dd, GFP_KERNEL);
 		if (!dd)
 			return -ENOMEM;

@@ -1391,7 +1391,7 @@ static int dm_table_construct_crypto_profile(struct dm_table *t)
 	unsigned int i;
 	bool empty_profile = true;

-	dmcp = kmalloc(sizeof(*dmcp), GFP_KERNEL);
+	dmcp = kmalloc_obj(*dmcp, GFP_KERNEL);
 	if (!dmcp)
 		return -ENOMEM;
 	dmcp->md = t->md;
diff --git a/drivers/md/dm-target.c b/drivers/md/dm-target.c
index 1fd41289de36..a138e8a24327 100644
--- a/drivers/md/dm-target.c
+++ b/drivers/md/dm-target.c
@@ -128,7 +128,7 @@ static int io_err_get_args(struct dm_target *tt, unsigned int argc, char **args)
 	char dummy;
 	int ret;

-	ioec = kmalloc(sizeof(*ioec), GFP_KERNEL);
+	ioec = kmalloc_obj(*ioec, GFP_KERNEL);
 	if (!ioec) {
 		tt->error = "Cannot allocate io_err context";
 		return -ENOMEM;
diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
index f90679cfec5b..c924ec4d300d 100644
--- a/drivers/md/dm-thin-metadata.c
+++ b/drivers/md/dm-thin-metadata.c
@@ -957,7 +957,7 @@ struct dm_pool_metadata *dm_pool_metadata_open(struct block_device *bdev,
 	int r;
 	struct dm_pool_metadata *pmd;

-	pmd = kmalloc(sizeof(*pmd), GFP_KERNEL);
+	pmd = kmalloc_obj(*pmd, GFP_KERNEL);
 	if (!pmd) {
 		DMERR("could not allocate metadata struct");
 		return ERR_PTR(-ENOMEM);
@@ -1077,7 +1077,7 @@ static int __open_device(struct dm_pool_metadata *pmd,
 		details_le.snapshotted_time = cpu_to_le32(pmd->time);
 	}

-	*td = kmalloc(sizeof(**td), GFP_NOIO);
+	*td = kmalloc_obj(**td, GFP_NOIO);
 	if (!*td)
 		return -ENOMEM;

diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index 52ffb495f5a8..492ead2d9356 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -2949,7 +2949,7 @@ static struct pool *pool_create(struct mapped_device *pool_md,
 		return ERR_CAST(pmd);
 	}

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool) {
 		*error = "Error allocating memory for pool";
 		err_p = ERR_PTR(-ENOMEM);
@@ -3354,7 +3354,7 @@ static int pool_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		goto out;
 	}

-	pt = kzalloc(sizeof(*pt), GFP_KERNEL);
+	pt = kzalloc_obj(*pt, GFP_KERNEL);
 	if (!pt) {
 		r = -ENOMEM;
 		goto out;
@@ -4193,7 +4193,7 @@ static int thin_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		goto out_unlock;
 	}

-	tc = ti->private = kzalloc(sizeof(*tc), GFP_KERNEL);
+	tc = ti->private = kzalloc_obj(*tc, GFP_KERNEL);
 	if (!tc) {
 		ti->error = "Out of memory";
 		r = -ENOMEM;
diff --git a/drivers/md/dm-unstripe.c b/drivers/md/dm-unstripe.c
index 17be48359564..c595d0a138fc 100644
--- a/drivers/md/dm-unstripe.c
+++ b/drivers/md/dm-unstripe.c
@@ -48,7 +48,7 @@ static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		return -EINVAL;
 	}

-	uc = kzalloc(sizeof(*uc), GFP_KERNEL);
+	uc = kzalloc_obj(*uc, GFP_KERNEL);
 	if (!uc) {
 		ti->error = "Memory allocation for unstriped context failed";
 		return -ENOMEM;
diff --git a/drivers/md/dm-verity-fec.c b/drivers/md/dm-verity-fec.c
index 7583607a8aa6..08bb75f00891 100644
--- a/drivers/md/dm-verity-fec.c
+++ b/drivers/md/dm-verity-fec.c
@@ -607,7 +607,7 @@ int verity_fec_ctr_alloc(struct dm_verity *v)
 {
 	struct dm_verity_fec *f;

-	f = kzalloc(sizeof(struct dm_verity_fec), GFP_KERNEL);
+	f = kzalloc_obj(struct dm_verity_fec, GFP_KERNEL);
 	if (!f) {
 		v->ti->error = "Cannot allocate FEC structure";
 		return -ENOMEM;
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index 8089cb74b75d..9dd0c195091f 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -764,8 +764,8 @@ static void verity_submit_prefetch(struct dm_verity *v, struct dm_verity_io *io,
 			return;
 	}

-	pw = kmalloc(sizeof(struct dm_verity_prefetch_work),
-		GFP_NOIO | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN);
+	pw = kmalloc_obj(struct dm_verity_prefetch_work,
+			 GFP_NOIO | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN);

 	if (!pw)
 		return;
@@ -1369,7 +1369,7 @@ static int verity_setup_salt_and_hashstate(struct dm_verity *v, const char *arg)
 	if (likely(v->use_sha256_lib)) {
 		/* Implies version 1: salt at beginning */
 		v->initial_hashstate.sha256 =
-			kmalloc(sizeof(struct sha256_ctx), GFP_KERNEL);
+			kmalloc_obj(struct sha256_ctx, GFP_KERNEL);
 		if (!v->initial_hashstate.sha256) {
 			ti->error = "Cannot allocate initial hash state";
 			return -ENOMEM;
@@ -1430,7 +1430,7 @@ static int verity_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 	char dummy;
 	char *root_hash_digest_to_validate;

-	v = kzalloc(sizeof(struct dm_verity), GFP_KERNEL);
+	v = kzalloc_obj(struct dm_verity, GFP_KERNEL);
 	if (!v) {
 		ti->error = "Cannot allocate verity structure";
 		return -ENOMEM;
diff --git a/drivers/md/dm-writecache.c b/drivers/md/dm-writecache.c
index af54e289bceb..bca442478a8d 100644
--- a/drivers/md/dm-writecache.c
+++ b/drivers/md/dm-writecache.c
@@ -1848,9 +1848,8 @@ static void __writecache_writeback_pmem(struct dm_writecache *wc, struct writeba
 		bio->bi_iter.bi_sector = read_original_sector(wc, e);

 		if (unlikely(max_pages > WB_LIST_INLINE))
-			wb->wc_list = kmalloc_array(max_pages, sizeof(struct wc_entry *),
-						    GFP_NOIO | __GFP_NORETRY |
-						    __GFP_NOMEMALLOC | __GFP_NOWARN);
+			wb->wc_list = kmalloc_objs(struct wc_entry *, max_pages,
+						   GFP_NOIO | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN);

 		if (likely(max_pages <= WB_LIST_INLINE) || unlikely(!wb->wc_list)) {
 			wb->wc_list = wb->wc_list_inline;
@@ -2246,7 +2245,7 @@ static int writecache_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 	as.argc = argc;
 	as.argv = argv;

-	wc = kzalloc(sizeof(struct dm_writecache), GFP_KERNEL);
+	wc = kzalloc_obj(struct dm_writecache, GFP_KERNEL);
 	if (!wc) {
 		ti->error = "Cannot allocate writecache structure";
 		r = -ENOMEM;
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index 83fcd7b31ed9..b9a473ffdb70 100644
--- a/drivers/md/dm-zoned-metadata.c
+++ b/drivers/md/dm-zoned-metadata.c
@@ -303,7 +303,7 @@ static struct dm_zone *dmz_get(struct dmz_metadata *zmd, unsigned int zone_id)
 static struct dm_zone *dmz_insert(struct dmz_metadata *zmd,
 				  unsigned int zone_id, struct dmz_dev *dev)
 {
-	struct dm_zone *zone = kzalloc(sizeof(struct dm_zone), GFP_KERNEL);
+	struct dm_zone *zone = kzalloc_obj(struct dm_zone, GFP_KERNEL);

 	if (!zone)
 		return ERR_PTR(-ENOMEM);
@@ -419,7 +419,7 @@ static struct dmz_mblock *dmz_alloc_mblock(struct dmz_metadata *zmd,
 	}

 	/* Allocate a new block */
-	mblk = kmalloc(sizeof(struct dmz_mblock), GFP_NOIO);
+	mblk = kmalloc_obj(struct dmz_mblock, GFP_NOIO);
 	if (!mblk)
 		return NULL;

@@ -1311,7 +1311,7 @@ static int dmz_load_sb(struct dmz_metadata *zmd)
 		int i;
 		struct dmz_sb *sb;

-		sb = kzalloc(sizeof(struct dmz_sb), GFP_KERNEL);
+		sb = kzalloc_obj(struct dmz_sb, GFP_KERNEL);
 		if (!sb)
 			return -ENOMEM;
 		for (i = 1; i < zmd->nr_devs; i++) {
@@ -1686,8 +1686,8 @@ static int dmz_load_mapping(struct dmz_metadata *zmd)
 	unsigned int bzone_id;

 	/* Metadata block array for the chunk mapping table */
-	zmd->map_mblk = kcalloc(zmd->nr_map_blocks,
-				sizeof(struct dmz_mblock *), GFP_KERNEL);
+	zmd->map_mblk = kzalloc_objs(struct dmz_mblock *, zmd->nr_map_blocks,
+				     GFP_KERNEL);
 	if (!zmd->map_mblk)
 		return -ENOMEM;

@@ -2868,7 +2868,7 @@ int dmz_ctr_metadata(struct dmz_dev *dev, int num_dev,
 	struct dm_zone *zone;
 	int ret;

-	zmd = kzalloc(sizeof(struct dmz_metadata), GFP_KERNEL);
+	zmd = kzalloc_obj(struct dmz_metadata, GFP_KERNEL);
 	if (!zmd)
 		return -ENOMEM;

diff --git a/drivers/md/dm-zoned-reclaim.c b/drivers/md/dm-zoned-reclaim.c
index 76e2c6868548..8598cc9eb40f 100644
--- a/drivers/md/dm-zoned-reclaim.c
+++ b/drivers/md/dm-zoned-reclaim.c
@@ -556,7 +556,7 @@ int dmz_ctr_reclaim(struct dmz_metadata *zmd,
 	struct dmz_reclaim *zrc;
 	int ret;

-	zrc = kzalloc(sizeof(struct dmz_reclaim), GFP_KERNEL);
+	zrc = kzalloc_obj(struct dmz_reclaim, GFP_KERNEL);
 	if (!zrc)
 		return -ENOMEM;

diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
index 9da329078ea4..0e6ddfb96e03 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -545,7 +545,7 @@ static int dmz_queue_chunk_work(struct dmz_target *dmz, struct bio *bio)
 		dmz_get_chunk_work(cw);
 	} else {
 		/* Create a new chunk work */
-		cw = kmalloc(sizeof(struct dm_chunk_work), GFP_NOIO);
+		cw = kmalloc_obj(struct dm_chunk_work, GFP_NOIO);
 		if (unlikely(!cw)) {
 			ret = -ENOMEM;
 			goto out;
@@ -838,18 +838,18 @@ static int dmz_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 	}

 	/* Allocate and initialize the target descriptor */
-	dmz = kzalloc(sizeof(struct dmz_target), GFP_KERNEL);
+	dmz = kzalloc_obj(struct dmz_target, GFP_KERNEL);
 	if (!dmz) {
 		ti->error = "Unable to allocate the zoned target descriptor";
 		return -ENOMEM;
 	}
-	dmz->dev = kcalloc(argc, sizeof(struct dmz_dev), GFP_KERNEL);
+	dmz->dev = kzalloc_objs(struct dmz_dev, argc, GFP_KERNEL);
 	if (!dmz->dev) {
 		ti->error = "Unable to allocate the zoned device descriptors";
 		kfree(dmz);
 		return -ENOMEM;
 	}
-	dmz->ddev = kcalloc(argc, sizeof(struct dm_dev *), GFP_KERNEL);
+	dmz->ddev = kzalloc_objs(struct dm_dev *, argc, GFP_KERNEL);
 	if (!dmz->ddev) {
 		ti->error = "Unable to allocate the dm device descriptors";
 		ret = -ENOMEM;
diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
index 1d4a050dab3a..ca833f147c6a 100644
--- a/drivers/md/md-bitmap.c
+++ b/drivers/md/md-bitmap.c
@@ -1025,8 +1025,7 @@ static int md_bitmap_storage_alloc(struct bitmap_storage *store,
 	num_pages = DIV_ROUND_UP(bytes, PAGE_SIZE);
 	offset = slot_number * num_pages;

-	store->filemap = kmalloc_array(num_pages, sizeof(struct page *),
-				       GFP_KERNEL);
+	store->filemap = kmalloc_objs(struct page *, num_pages, GFP_KERNEL);
 	if (!store->filemap)
 		return -ENOMEM;

@@ -2121,7 +2120,7 @@ static struct bitmap *__bitmap_create(struct mddev *mddev, int slot)
 		return ERR_PTR(-EBUSY);
 	}

-	bitmap = kzalloc(sizeof(*bitmap), GFP_KERNEL);
+	bitmap = kzalloc_obj(*bitmap, GFP_KERNEL);
 	if (!bitmap)
 		return ERR_PTR(-ENOMEM);

@@ -2436,7 +2435,7 @@ static int __bitmap_resize(struct bitmap *bitmap, sector_t blocks,

 	pages = DIV_ROUND_UP(chunks, PAGE_COUNTER_RATIO);

-	new_bp = kcalloc(pages, sizeof(*new_bp), GFP_KERNEL);
+	new_bp = kzalloc_objs(*new_bp, pages, GFP_KERNEL);
 	ret = -ENOMEM;
 	if (!new_bp) {
 		md_bitmap_file_unmap(&store);
diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
index 896279988dfd..c588c972ad54 100644
--- a/drivers/md/md-cluster.c
+++ b/drivers/md/md-cluster.c
@@ -196,7 +196,7 @@ static struct dlm_lock_resource *lockres_init(struct mddev *mddev,
 	int ret, namelen;
 	struct md_cluster_info *cinfo = mddev->cluster_info;

-	res = kzalloc(sizeof(struct dlm_lock_resource), GFP_KERNEL);
+	res = kzalloc_obj(struct dlm_lock_resource, GFP_KERNEL);
 	if (!res)
 		return NULL;
 	init_waitqueue_head(&res->sync_locking);
@@ -886,7 +886,7 @@ static int join(struct mddev *mddev, int nodes)
 	int ret, ops_rv;
 	char str[64];

-	cinfo = kzalloc(sizeof(struct md_cluster_info), GFP_KERNEL);
+	cinfo = kzalloc_obj(struct md_cluster_info, GFP_KERNEL);
 	if (!cinfo)
 		return -ENOMEM;

@@ -1543,8 +1543,8 @@ static int lock_all_bitmaps(struct mddev *mddev)
 	struct md_cluster_info *cinfo = mddev->cluster_info;

 	cinfo->other_bitmap_lockres =
-		kcalloc(mddev->bitmap_info.nodes - 1,
-			sizeof(struct dlm_lock_resource *), GFP_KERNEL);
+		kzalloc_objs(struct dlm_lock_resource *,
+			     mddev->bitmap_info.nodes - 1, GFP_KERNEL);
 	if (!cinfo->other_bitmap_lockres) {
 		pr_err("md: can't alloc mem for other bitmap locks\n");
 		return 0;
diff --git a/drivers/md/md-linear.c b/drivers/md/md-linear.c
index 8d7b82c4a723..beeb88274da4 100644
--- a/drivers/md/md-linear.c
+++ b/drivers/md/md-linear.c
@@ -92,7 +92,7 @@ static struct linear_conf *linear_conf(struct mddev *mddev, int raid_disks)
 	int cnt;
 	int i;

-	conf = kzalloc(struct_size(conf, disks, raid_disks), GFP_KERNEL);
+	conf = kzalloc_flex(*conf, disks, raid_disks, GFP_KERNEL);
 	if (!conf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/md/md-llbitmap.c b/drivers/md/md-llbitmap.c
index cd713a7dc270..e8d7af0c665a 100644
--- a/drivers/md/md-llbitmap.c
+++ b/drivers/md/md-llbitmap.c
@@ -982,7 +982,7 @@ static int llbitmap_create(struct mddev *mddev)
 	if (ret)
 		return ret;

-	llbitmap = kzalloc(sizeof(*llbitmap), GFP_KERNEL);
+	llbitmap = kzalloc_obj(*llbitmap, GFP_KERNEL);
 	if (!llbitmap)
 		return -ENOMEM;

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 72a1c7267851..b7ac2440fbbb 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -853,7 +853,7 @@ static struct mddev *mddev_alloc(dev_t unit)
 	if (unit && MAJOR(unit) != MD_MAJOR)
 		unit &= ~((1 << MdpMinorShift) - 1);

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return ERR_PTR(-ENOMEM);

@@ -1222,8 +1222,8 @@ static int md_sb_equal(mdp_super_t *sb1, mdp_super_t *sb2)
 	int ret;
 	mdp_super_t *tmp1, *tmp2;

-	tmp1 = kmalloc(sizeof(*tmp1),GFP_KERNEL);
-	tmp2 = kmalloc(sizeof(*tmp2),GFP_KERNEL);
+	tmp1 = kmalloc_obj(*tmp1, GFP_KERNEL);
+	tmp2 = kmalloc_obj(*tmp2, GFP_KERNEL);

 	if (!tmp1 || !tmp2) {
 		ret = 0;
@@ -3817,7 +3817,7 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe
 	sector_t size;
 	int err;

-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (!rdev)
 		return ERR_PTR(-ENOMEM);

@@ -7238,7 +7238,7 @@ static int get_bitmap_file(struct mddev *mddev, void __user * arg)
 	char *ptr;
 	int err;

-	file = kzalloc(sizeof(*file), GFP_NOIO);
+	file = kzalloc_obj(*file, GFP_NOIO);
 	if (!file)
 		return -ENOMEM;

@@ -8541,7 +8541,7 @@ struct md_thread *md_register_thread(void (*run) (struct md_thread *),
 {
 	struct md_thread *thread;

-	thread = kzalloc(sizeof(struct md_thread), GFP_KERNEL);
+	thread = kzalloc_obj(struct md_thread, GFP_KERNEL);
 	if (!thread)
 		return NULL;

@@ -10749,7 +10749,7 @@ void md_autodetect_dev(dev_t dev)
 {
 	struct detected_devices_node *node_detected_dev;

-	node_detected_dev = kzalloc(sizeof(*node_detected_dev), GFP_KERNEL);
+	node_detected_dev = kzalloc_obj(*node_detected_dev, GFP_KERNEL);
 	if (node_detected_dev) {
 		node_detected_dev->dev = dev;
 		mutex_lock(&detected_devices_mutex);
diff --git a/drivers/md/persistent-data/dm-block-manager.c b/drivers/md/persistent-data/dm-block-manager.c
index 1ef71e5fcde7..43bd64b77a7d 100644
--- a/drivers/md/persistent-data/dm-block-manager.c
+++ b/drivers/md/persistent-data/dm-block-manager.c
@@ -388,7 +388,7 @@ struct dm_block_manager *dm_block_manager_create(struct block_device *bdev,
 	int r;
 	struct dm_block_manager *bm;

-	bm = kmalloc(sizeof(*bm), GFP_KERNEL);
+	bm = kmalloc_obj(*bm, GFP_KERNEL);
 	if (!bm) {
 		r = -ENOMEM;
 		goto bad;
diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c
index 0c7a2e8d1846..dd02eee4a23c 100644
--- a/drivers/md/persistent-data/dm-btree.c
+++ b/drivers/md/persistent-data/dm-btree.c
@@ -280,7 +280,7 @@ int dm_btree_del(struct dm_btree_info *info, dm_block_t root)
 	 * considered an FS op.  We can't recurse back into the FS, so we
 	 * allocate GFP_NOFS.
 	 */
-	s = kmalloc(sizeof(*s), GFP_NOFS);
+	s = kmalloc_obj(*s, GFP_NOFS);
 	if (!s)
 		return -ENOMEM;
 	s->info = info;
diff --git a/drivers/md/persistent-data/dm-space-map-disk.c b/drivers/md/persistent-data/dm-space-map-disk.c
index f4241f54e20e..1d3cfc87701a 100644
--- a/drivers/md/persistent-data/dm-space-map-disk.c
+++ b/drivers/md/persistent-data/dm-space-map-disk.c
@@ -220,7 +220,7 @@ struct dm_space_map *dm_sm_disk_create(struct dm_transaction_manager *tm,
 	int r;
 	struct sm_disk *smd;

-	smd = kmalloc(sizeof(*smd), GFP_KERNEL);
+	smd = kmalloc_obj(*smd, GFP_KERNEL);
 	if (!smd)
 		return ERR_PTR(-ENOMEM);

@@ -254,7 +254,7 @@ struct dm_space_map *dm_sm_disk_open(struct dm_transaction_manager *tm,
 	int r;
 	struct sm_disk *smd;

-	smd = kmalloc(sizeof(*smd), GFP_KERNEL);
+	smd = kmalloc_obj(*smd, GFP_KERNEL);
 	if (!smd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c
index d48c4fafc779..3c82a715ceed 100644
--- a/drivers/md/persistent-data/dm-space-map-metadata.c
+++ b/drivers/md/persistent-data/dm-space-map-metadata.c
@@ -772,7 +772,7 @@ struct dm_space_map *dm_sm_metadata_init(void)
 {
 	struct sm_metadata *smm;

-	smm = kvmalloc(sizeof(*smm), GFP_KERNEL);
+	smm = kvmalloc_obj(*smm, GFP_KERNEL);
 	if (!smm)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/md/persistent-data/dm-transaction-manager.c b/drivers/md/persistent-data/dm-transaction-manager.c
index 98c745d90f48..1f50f50665ef 100644
--- a/drivers/md/persistent-data/dm-transaction-manager.c
+++ b/drivers/md/persistent-data/dm-transaction-manager.c
@@ -137,7 +137,7 @@ static void insert_shadow(struct dm_transaction_manager *tm, dm_block_t b)
 	unsigned int bucket;
 	struct shadow_info *si;

-	si = kmalloc(sizeof(*si), GFP_NOIO);
+	si = kmalloc_obj(*si, GFP_NOIO);
 	if (si) {
 		struct rb_node **node, *parent;
 		si->where = b;
@@ -185,7 +185,7 @@ static struct dm_transaction_manager *dm_tm_create(struct dm_block_manager *bm,
 	unsigned int i;
 	struct dm_transaction_manager *tm;

-	tm = kmalloc(sizeof(*tm), GFP_KERNEL);
+	tm = kmalloc_obj(*tm, GFP_KERNEL);
 	if (!tm)
 		return ERR_PTR(-ENOMEM);

@@ -207,7 +207,7 @@ struct dm_transaction_manager *dm_tm_create_non_blocking_clone(struct dm_transac
 {
 	struct dm_transaction_manager *tm;

-	tm = kmalloc(sizeof(*tm), GFP_KERNEL);
+	tm = kmalloc_obj(*tm, GFP_KERNEL);
 	if (tm) {
 		tm->is_clone = 1;
 		tm->real = real;
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index d83b2b1c0049..f316267a2c02 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -69,7 +69,7 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
 	struct md_rdev *smallest, *rdev1, *rdev2, *rdev, **dev;
 	struct strip_zone *zone;
 	int cnt;
-	struct r0conf *conf = kzalloc(sizeof(*conf), GFP_KERNEL);
+	struct r0conf *conf = kzalloc_obj(*conf, GFP_KERNEL);
 	unsigned int blksize = 512;

 	if (!mddev_is_dm(mddev))
@@ -143,9 +143,8 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
 	}

 	err = -ENOMEM;
-	conf->strip_zone = kcalloc(conf->nr_strip_zones,
-				   sizeof(struct strip_zone),
-				   GFP_KERNEL);
+	conf->strip_zone = kzalloc_objs(struct strip_zone, conf->nr_strip_zones,
+					GFP_KERNEL);
 	if (!conf->strip_zone)
 		goto abort;
 	conf->devlist = kzalloc(array3_size(sizeof(struct md_rdev *),
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 867db18bc3ba..d5fd7841dd9f 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -155,8 +155,7 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data)
 	if (!r1_bio)
 		return NULL;

-	rps = kmalloc_array(conf->raid_disks * 2, sizeof(struct resync_pages),
-			    gfp_flags);
+	rps = kmalloc_objs(struct resync_pages, conf->raid_disks * 2, gfp_flags);
 	if (!rps)
 		goto out_free_r1bio;

@@ -3070,27 +3069,25 @@ static struct r1conf *setup_conf(struct mddev *mddev)
 	size_t r1bio_size;
 	int err = -ENOMEM;

-	conf = kzalloc(sizeof(struct r1conf), GFP_KERNEL);
+	conf = kzalloc_obj(struct r1conf, GFP_KERNEL);
 	if (!conf)
 		goto abort;

-	conf->nr_pending = kcalloc(BARRIER_BUCKETS_NR,
-				   sizeof(atomic_t), GFP_KERNEL);
+	conf->nr_pending = kzalloc_objs(atomic_t, BARRIER_BUCKETS_NR,
+					GFP_KERNEL);
 	if (!conf->nr_pending)
 		goto abort;

-	conf->nr_waiting = kcalloc(BARRIER_BUCKETS_NR,
-				   sizeof(atomic_t), GFP_KERNEL);
+	conf->nr_waiting = kzalloc_objs(atomic_t, BARRIER_BUCKETS_NR,
+					GFP_KERNEL);
 	if (!conf->nr_waiting)
 		goto abort;

-	conf->nr_queued = kcalloc(BARRIER_BUCKETS_NR,
-				  sizeof(atomic_t), GFP_KERNEL);
+	conf->nr_queued = kzalloc_objs(atomic_t, BARRIER_BUCKETS_NR, GFP_KERNEL);
 	if (!conf->nr_queued)
 		goto abort;

-	conf->barrier = kcalloc(BARRIER_BUCKETS_NR,
-				sizeof(atomic_t), GFP_KERNEL);
+	conf->barrier = kzalloc_objs(atomic_t, BARRIER_BUCKETS_NR, GFP_KERNEL);
 	if (!conf->barrier)
 		goto abort;

diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 9debb20cf129..bdd3a7feaea7 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -152,7 +152,7 @@ static void * r10buf_pool_alloc(gfp_t gfp_flags, void *data)
 		nalloc_rp = nalloc;
 	else
 		nalloc_rp = nalloc * 2;
-	rps = kmalloc_array(nalloc_rp, sizeof(struct resync_pages), gfp_flags);
+	rps = kmalloc_objs(struct resync_pages, nalloc_rp, gfp_flags);
 	if (!rps)
 		goto out_free_r10bio;

@@ -3852,14 +3852,14 @@ static struct r10conf *setup_conf(struct mddev *mddev)
 	}

 	err = -ENOMEM;
-	conf = kzalloc(sizeof(struct r10conf), GFP_KERNEL);
+	conf = kzalloc_obj(struct r10conf, GFP_KERNEL);
 	if (!conf)
 		goto out;

 	/* FIXME calc properly */
-	conf->mirrors = kcalloc(mddev->raid_disks + max(0, -mddev->delta_disks),
-				sizeof(struct raid10_info),
-				GFP_KERNEL);
+	conf->mirrors = kzalloc_objs(struct raid10_info,
+				     mddev->raid_disks + max(0, -mddev->delta_disks),
+				     GFP_KERNEL);
 	if (!conf->mirrors)
 		goto out;

@@ -4281,9 +4281,9 @@ static int raid10_check_reshape(struct mddev *mddev)
 	if (mddev->delta_disks > 0) {
 		/* allocate new 'mirrors' list */
 		conf->mirrors_new =
-			kcalloc(mddev->raid_disks + mddev->delta_disks,
-				sizeof(struct raid10_info),
-				GFP_KERNEL);
+			kzalloc_objs(struct raid10_info,
+				     mddev->raid_disks + mddev->delta_disks,
+				     GFP_KERNEL);
 		if (!conf->mirrors_new)
 			return -ENOMEM;
 	}
@@ -4918,7 +4918,7 @@ static int handle_reshape_read_error(struct mddev *mddev,
 	int idx = 0;
 	struct page **pages;

-	r10b = kmalloc(struct_size(r10b, devs, conf->copies), GFP_NOIO);
+	r10b = kmalloc_flex(*r10b, devs, conf->copies, GFP_NOIO);
 	if (!r10b) {
 		set_bit(MD_RECOVERY_INTR, &mddev->recovery);
 		return -ENOMEM;
diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c
index e29e69335c69..3ae22f6aacda 100644
--- a/drivers/md/raid5-cache.c
+++ b/drivers/md/raid5-cache.c
@@ -2447,7 +2447,7 @@ static int r5l_recovery_log(struct r5l_log *log)
 	int ret;
 	sector_t pos;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -3071,7 +3071,7 @@ int r5l_init_log(struct r5conf *conf, struct md_rdev *rdev)
 		return -EINVAL;
 	}

-	log = kzalloc(sizeof(*log), GFP_KERNEL);
+	log = kzalloc_obj(*log, GFP_KERNEL);
 	if (!log)
 		return -ENOMEM;
 	log->rdev = rdev;
diff --git a/drivers/md/raid5-ppl.c b/drivers/md/raid5-ppl.c
index 56b234683ee6..9dfa07ed723f 100644
--- a/drivers/md/raid5-ppl.c
+++ b/drivers/md/raid5-ppl.c
@@ -1352,7 +1352,7 @@ int ppl_init_log(struct r5conf *conf)
 		return -EINVAL;
 	}

-	ppl_conf = kzalloc(sizeof(struct ppl_conf), GFP_KERNEL);
+	ppl_conf = kzalloc_obj(struct ppl_conf, GFP_KERNEL);
 	if (!ppl_conf)
 		return -ENOMEM;

@@ -1378,8 +1378,8 @@ int ppl_init_log(struct r5conf *conf)
 		goto err;

 	ppl_conf->count = conf->raid_disks;
-	ppl_conf->child_logs = kcalloc(ppl_conf->count, sizeof(struct ppl_log),
-				       GFP_KERNEL);
+	ppl_conf->child_logs = kzalloc_objs(struct ppl_log, ppl_conf->count,
+					    GFP_KERNEL);
 	if (!ppl_conf->child_logs) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 8854e024f311..ba8381cbb2f1 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -513,7 +513,7 @@ init_stripe_shared_pages(struct stripe_head *sh, struct r5conf *conf, int disks)
 	cnt = PAGE_SIZE / conf->stripe_size;
 	nr_pages = (disks + cnt - 1) / cnt;

-	sh->pages = kcalloc(nr_pages, sizeof(struct page *), GFP_KERNEL);
+	sh->pages = kzalloc_objs(struct page *, nr_pages, GFP_KERNEL);
 	if (!sh->pages)
 		return -ENOMEM;
 	sh->nr_pages = nr_pages;
@@ -2610,7 +2610,7 @@ static int resize_stripes(struct r5conf *conf, int newsize)
 	 * is completely stalled, so now is a good time to resize
 	 * conf->disks and the scribble region
 	 */
-	ndisks = kcalloc(newsize, sizeof(struct disk_info), GFP_NOIO);
+	ndisks = kzalloc_objs(struct disk_info, newsize, GFP_NOIO);
 	if (ndisks) {
 		for (i = 0; i < conf->pool_size; i++)
 			ndisks[i] = conf->disks[i];
@@ -7267,8 +7267,8 @@ static int alloc_thread_groups(struct r5conf *conf, int cnt, int *group_cnt,
 	*group_cnt = num_possible_nodes();
 	size = sizeof(struct r5worker) * cnt;
 	workers = kcalloc(size, *group_cnt, GFP_NOIO);
-	*worker_groups = kcalloc(*group_cnt, sizeof(struct r5worker_group),
-				 GFP_NOIO);
+	*worker_groups = kzalloc_objs(struct r5worker_group, *group_cnt,
+				      GFP_NOIO);
 	if (!*worker_groups || !workers) {
 		kfree(workers);
 		kfree(*worker_groups);
@@ -7497,7 +7497,7 @@ static struct r5conf *setup_conf(struct mddev *mddev)
 		return ERR_PTR(-EINVAL);
 	}

-	conf = kzalloc(sizeof(struct r5conf), GFP_KERNEL);
+	conf = kzalloc_obj(struct r5conf, GFP_KERNEL);
 	if (conf == NULL)
 		goto abort;

@@ -7508,9 +7508,8 @@ static struct r5conf *setup_conf(struct mddev *mddev)
 #endif
 	INIT_LIST_HEAD(&conf->free_list);
 	INIT_LIST_HEAD(&conf->pending_list);
-	conf->pending_data = kcalloc(PENDING_IO_MAX,
-				     sizeof(struct r5pending_data),
-				     GFP_KERNEL);
+	conf->pending_data = kzalloc_objs(struct r5pending_data, PENDING_IO_MAX,
+					  GFP_KERNEL);
 	if (!conf->pending_data)
 		goto abort;
 	for (i = 0; i < PENDING_IO_MAX; i++)
@@ -7557,8 +7556,7 @@ static struct r5conf *setup_conf(struct mddev *mddev)
 		conf->previous_raid_disks = mddev->raid_disks - mddev->delta_disks;
 	max_disks = max(conf->raid_disks, conf->previous_raid_disks);

-	conf->disks = kcalloc(max_disks, sizeof(struct disk_info),
-			      GFP_KERNEL);
+	conf->disks = kzalloc_objs(struct disk_info, max_disks, GFP_KERNEL);

 	if (!conf->disks)
 		goto abort;
diff --git a/drivers/media/cec/core/cec-adap.c b/drivers/media/cec/core/cec-adap.c
index ba6828ef540e..b81cdf343209 100644
--- a/drivers/media/cec/core/cec-adap.c
+++ b/drivers/media/cec/core/cec-adap.c
@@ -95,7 +95,7 @@ void cec_queue_event_fh(struct cec_fh *fh,
 	if (ev_idx < CEC_NUM_CORE_EVENTS)
 		entry = &fh->core_events[ev_idx];
 	else
-		entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+		entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (entry) {
 		if (new_ev->event == CEC_EVENT_LOST_MSGS &&
 		    fh->queued_events[ev_idx]) {
@@ -218,7 +218,7 @@ static void cec_queue_msg_fh(struct cec_fh *fh, const struct cec_msg *msg)
 	struct cec_msg_entry *entry;

 	mutex_lock(&fh->lock);
-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (entry) {
 		entry->msg = *msg;
 		/* Add new msg at the end of the queue */
@@ -922,7 +922,7 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
 		return -EBUSY;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/media/cec/core/cec-api.c b/drivers/media/cec/core/cec-api.c
index 2b50578d107e..c634185a3446 100644
--- a/drivers/media/cec/core/cec-api.c
+++ b/drivers/media/cec/core/cec-api.c
@@ -555,7 +555,7 @@ static int cec_open(struct inode *inode, struct file *filp)
 	struct cec_devnode *devnode =
 		container_of(inode->i_cdev, struct cec_devnode, cdev);
 	struct cec_adapter *adap = to_cec_adapter(devnode);
-	struct cec_fh *fh = kzalloc(sizeof(*fh), GFP_KERNEL);
+	struct cec_fh *fh = kzalloc_obj(*fh, GFP_KERNEL);
 	/*
 	 * Initial events that are automatically sent when the cec device is
 	 * opened.
diff --git a/drivers/media/cec/core/cec-core.c b/drivers/media/cec/core/cec-core.c
index dd6e24a0899b..e6d958662d37 100644
--- a/drivers/media/cec/core/cec-core.c
+++ b/drivers/media/cec/core/cec-core.c
@@ -237,7 +237,7 @@ struct cec_adapter *cec_allocate_adapter(const struct cec_adap_ops *ops,
 		return ERR_PTR(-EINVAL);
 	if (WARN_ON(!available_las || available_las > CEC_MAX_LOG_ADDRS))
 		return ERR_PTR(-EINVAL);
-	adap = kzalloc(sizeof(*adap), GFP_KERNEL);
+	adap = kzalloc_obj(*adap, GFP_KERNEL);
 	if (!adap)
 		return ERR_PTR(-ENOMEM);
 	strscpy(adap->name, name, sizeof(adap->name));
diff --git a/drivers/media/cec/core/cec-notifier.c b/drivers/media/cec/core/cec-notifier.c
index 1fed0b1c71e9..026476ce6bfb 100644
--- a/drivers/media/cec/core/cec-notifier.c
+++ b/drivers/media/cec/core/cec-notifier.c
@@ -63,7 +63,7 @@ cec_notifier_get_conn(struct device *hdmi_dev, const char *port_name)
 			return n;
 		}
 	}
-	n = kzalloc(sizeof(*n), GFP_KERNEL);
+	n = kzalloc_obj(*n, GFP_KERNEL);
 	if (!n)
 		goto unlock;
 	n->hdmi_dev = hdmi_dev;
diff --git a/drivers/media/cec/core/cec-pin.c b/drivers/media/cec/core/cec-pin.c
index 4d7155281daa..5299d944b526 100644
--- a/drivers/media/cec/core/cec-pin.c
+++ b/drivers/media/cec/core/cec-pin.c
@@ -1367,7 +1367,7 @@ struct cec_adapter *cec_pin_allocate_adapter(const struct cec_pin_ops *pin_ops,
 					void *priv, const char *name, u32 caps)
 {
 	struct cec_adapter *adap;
-	struct cec_pin *pin = kzalloc(sizeof(*pin), GFP_KERNEL);
+	struct cec_pin *pin = kzalloc_obj(*pin, GFP_KERNEL);

 	if (pin == NULL)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/media/cec/usb/extron-da-hd-4k-plus/extron-da-hd-4k-plus.c b/drivers/media/cec/usb/extron-da-hd-4k-plus/extron-da-hd-4k-plus.c
index bf92576bb2fc..8249d3bb11e4 100644
--- a/drivers/media/cec/usb/extron-da-hd-4k-plus/extron-da-hd-4k-plus.c
+++ b/drivers/media/cec/usb/extron-da-hd-4k-plus/extron-da-hd-4k-plus.c
@@ -1494,7 +1494,7 @@ static int extron_setup(struct extron *extron)

 		if (vendor_id)
 			caps &= ~CEC_CAP_LOG_ADDRS;
-		port = kzalloc(sizeof(*port), GFP_KERNEL);
+		port = kzalloc_obj(*port, GFP_KERNEL);
 		if (!port)
 			return -ENOMEM;

@@ -1769,7 +1769,7 @@ static int extron_connect(struct serio *serio, struct serio_driver *drv)
 		manufacturer_name[0] = 0;
 	}

-	extron = kzalloc(sizeof(*extron), GFP_KERNEL);
+	extron = kzalloc_obj(*extron, GFP_KERNEL);

 	if (!extron)
 		return -ENOMEM;
diff --git a/drivers/media/cec/usb/pulse8/pulse8-cec.c b/drivers/media/cec/usb/pulse8/pulse8-cec.c
index 60569f1670fe..d000416d25c4 100644
--- a/drivers/media/cec/usb/pulse8/pulse8-cec.c
+++ b/drivers/media/cec/usb/pulse8/pulse8-cec.c
@@ -840,7 +840,7 @@ static int pulse8_connect(struct serio *serio, struct serio_driver *drv)
 	struct cec_log_addrs log_addrs = {};
 	u16 pa = CEC_PHYS_ADDR_INVALID;

-	pulse8 = kzalloc(sizeof(*pulse8), GFP_KERNEL);
+	pulse8 = kzalloc_obj(*pulse8, GFP_KERNEL);

 	if (!pulse8)
 		return -ENOMEM;
diff --git a/drivers/media/cec/usb/rainshadow/rainshadow-cec.c b/drivers/media/cec/usb/rainshadow/rainshadow-cec.c
index 6c0cee4b066f..5457fe240654 100644
--- a/drivers/media/cec/usb/rainshadow/rainshadow-cec.c
+++ b/drivers/media/cec/usb/rainshadow/rainshadow-cec.c
@@ -313,7 +313,7 @@ static int rain_connect(struct serio *serio, struct serio_driver *drv)
 	struct cec_log_addrs log_addrs = {};
 	u16 pa = CEC_PHYS_ADDR_INVALID;

-	rain = kzalloc(sizeof(*rain), GFP_KERNEL);
+	rain = kzalloc_obj(*rain, GFP_KERNEL);

 	if (!rain)
 		return -ENOMEM;
diff --git a/drivers/media/common/b2c2/flexcop.c b/drivers/media/common/b2c2/flexcop.c
index 8506de48ba45..88668065a308 100644
--- a/drivers/media/common/b2c2/flexcop.c
+++ b/drivers/media/common/b2c2/flexcop.c
@@ -214,8 +214,8 @@ void flexcop_reset_block_300(struct flexcop_device *fc)
 struct flexcop_device *flexcop_device_kmalloc(size_t bus_specific_len)
 {
 	void *bus;
-	struct flexcop_device *fc = kzalloc(sizeof(struct flexcop_device),
-				GFP_KERNEL);
+	struct flexcop_device *fc = kzalloc_obj(struct flexcop_device,
+						GFP_KERNEL);
 	if (!fc) {
 		err("no memory");
 		return NULL;
diff --git a/drivers/media/common/cypress_firmware.c b/drivers/media/common/cypress_firmware.c
index cdc7050ed3ac..c1c110428928 100644
--- a/drivers/media/common/cypress_firmware.c
+++ b/drivers/media/common/cypress_firmware.c
@@ -75,7 +75,7 @@ int cypress_load_firmware(struct usb_device *udev,
 	struct hexline *hx;
 	int ret, pos = 0;

-	hx = kmalloc(sizeof(*hx), GFP_KERNEL);
+	hx = kmalloc_obj(*hx, GFP_KERNEL);
 	if (!hx)
 		return -ENOMEM;

diff --git a/drivers/media/common/saa7146/saa7146_core.c b/drivers/media/common/saa7146/saa7146_core.c
index 27c53eed8fe3..fc0f88b16dc3 100644
--- a/drivers/media/common/saa7146/saa7146_core.c
+++ b/drivers/media/common/saa7146/saa7146_core.c
@@ -141,7 +141,7 @@ static struct scatterlist* vmalloc_to_sg(unsigned char *virt, int nr_pages)
 	struct page *pg;
 	int i;

-	sglist = kmalloc_array(nr_pages, sizeof(struct scatterlist), GFP_KERNEL);
+	sglist = kmalloc_objs(struct scatterlist, nr_pages, GFP_KERNEL);
 	if (NULL == sglist)
 		return NULL;
 	sg_init_table(sglist, nr_pages);
@@ -334,7 +334,7 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent
 	int err = -ENOMEM;

 	/* clear out mem for sure */
-	dev = kzalloc(sizeof(struct saa7146_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct saa7146_dev, GFP_KERNEL);
 	if (!dev) {
 		ERR("out of memory\n");
 		goto out;
diff --git a/drivers/media/common/saa7146/saa7146_fops.c b/drivers/media/common/saa7146/saa7146_fops.c
index a9e3bad76d54..f448c0a0e05f 100644
--- a/drivers/media/common/saa7146/saa7146_fops.c
+++ b/drivers/media/common/saa7146/saa7146_fops.c
@@ -266,7 +266,7 @@ int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv)
 	}
 	dev->v4l2_dev.ctrl_handler = hdl;

-	vv = kzalloc(sizeof(struct saa7146_vv), GFP_KERNEL);
+	vv = kzalloc_obj(struct saa7146_vv, GFP_KERNEL);
 	if (vv == NULL) {
 		ERR("out of memory. aborting.\n");
 		v4l2_ctrl_handler_free(hdl);
diff --git a/drivers/media/common/siano/smscoreapi.c b/drivers/media/common/siano/smscoreapi.c
index 3732367e0c62..489a8dd0a161 100644
--- a/drivers/media/common/siano/smscoreapi.c
+++ b/drivers/media/common/siano/smscoreapi.c
@@ -439,7 +439,7 @@ static struct smscore_registry_entry_t *smscore_find_registry(char *devpath)
 			return entry;
 		}
 	}
-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (entry) {
 		entry->mode = default_mode;
 		strscpy(entry->devpath, devpath, sizeof(entry->devpath));
@@ -528,7 +528,7 @@ int smscore_register_hotplug(hotplug_t hotplug)
 	int rc = 0;

 	mutex_lock(&g_smscore_deviceslock);
-	notifyee = kmalloc(sizeof(*notifyee), GFP_KERNEL);
+	notifyee = kmalloc_obj(*notifyee, GFP_KERNEL);
 	if (notifyee) {
 		/* now notify callback about existing devices */
 		first = &g_smscore_devices;
@@ -617,7 +617,7 @@ smscore_buffer_t *smscore_createbuffer(u8 *buffer, void *common_buffer,
 {
 	struct smscore_buffer_t *cb;

-	cb = kzalloc(sizeof(*cb), GFP_KERNEL);
+	cb = kzalloc_obj(*cb, GFP_KERNEL);
 	if (!cb)
 		return NULL;

@@ -647,7 +647,7 @@ int smscore_register_device(struct smsdevice_params_t *params,
 	struct smscore_device_t *dev;
 	u8 *buffer;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

@@ -1678,7 +1678,7 @@ static int smscore_validate_client(struct smscore_device_t *coredev,
 		pr_err("The msg ID already registered to another client.\n");
 		return -EEXIST;
 	}
-	listentry = kzalloc(sizeof(*listentry), GFP_KERNEL);
+	listentry = kzalloc_obj(*listentry, GFP_KERNEL);
 	if (!listentry)
 		return -ENOMEM;

@@ -1715,7 +1715,7 @@ int smscore_register_client(struct smscore_device_t *coredev,
 		return -EEXIST;
 	}

-	newclient = kzalloc(sizeof(*newclient), GFP_KERNEL);
+	newclient = kzalloc_obj(*newclient, GFP_KERNEL);
 	if (!newclient)
 		return -ENOMEM;

diff --git a/drivers/media/common/siano/smsdvb-debugfs.c b/drivers/media/common/siano/smsdvb-debugfs.c
index d14ba271db50..e5fbc08d4192 100644
--- a/drivers/media/common/siano/smsdvb-debugfs.c
+++ b/drivers/media/common/siano/smsdvb-debugfs.c
@@ -358,7 +358,7 @@ int smsdvb_debugfs_create(struct smsdvb_client_t *client)
 	if (!smsdvb_debugfs_usb_root || !coredev->is_usb_device)
 		return -ENODEV;

-	debug_data = kzalloc(sizeof(*client->debug_data), GFP_KERNEL);
+	debug_data = kzalloc_obj(*client->debug_data, GFP_KERNEL);
 	if (!debug_data)
 		return -ENOMEM;

diff --git a/drivers/media/common/siano/smsdvb-main.c b/drivers/media/common/siano/smsdvb-main.c
index 9b1a650ed055..f49845a266e5 100644
--- a/drivers/media/common/siano/smsdvb-main.c
+++ b/drivers/media/common/siano/smsdvb-main.c
@@ -1110,7 +1110,7 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev,
 	/* device removal handled by onremove callback */
 	if (!arrival)
 		return 0;
-	client = kzalloc(sizeof(struct smsdvb_client_t), GFP_KERNEL);
+	client = kzalloc_obj(struct smsdvb_client_t, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
index 2d1f253b4929..a70181f8d9d9 100644
--- a/drivers/media/common/videobuf2/videobuf2-core.c
+++ b/drivers/media/common/videobuf2/videobuf2-core.c
@@ -841,7 +841,7 @@ static bool verify_coherency_flags(struct vb2_queue *q, bool non_coherent_mem)
 static int vb2_core_allocated_buffers_storage(struct vb2_queue *q)
 {
 	if (!q->bufs)
-		q->bufs = kcalloc(q->max_num_buffers, sizeof(*q->bufs), GFP_KERNEL);
+		q->bufs = kzalloc_objs(*q->bufs, q->max_num_buffers, GFP_KERNEL);
 	if (!q->bufs)
 		return -ENOMEM;

@@ -2861,7 +2861,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)
 		(read) ? "read" : "write", q->min_reqbufs_allocation, q->fileio_read_once,
 		q->fileio_write_immediately);

-	fileio = kzalloc(sizeof(*fileio), GFP_KERNEL);
+	fileio = kzalloc_obj(*fileio, GFP_KERNEL);
 	if (fileio == NULL)
 		return -ENOMEM;

@@ -3256,7 +3256,7 @@ int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv,
 	if (WARN_ON(q->fileio))
 		return -EBUSY;

-	threadio = kzalloc(sizeof(*threadio), GFP_KERNEL);
+	threadio = kzalloc_obj(*threadio, GFP_KERNEL);
 	if (threadio == NULL)
 		return -ENOMEM;
 	threadio->fnc = fnc;
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
index 7123c5fae92c..983de3b99acb 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
@@ -238,7 +238,7 @@ static void *vb2_dc_alloc(struct vb2_buffer *vb,
 	if (WARN_ON(!dev))
 		return ERR_PTR(-EINVAL);

-	buf = kzalloc(sizeof *buf, GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

@@ -325,7 +325,7 @@ static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf,
 	struct vb2_dc_buf *buf = dbuf->priv;
 	int ret;

-	attach = kzalloc(sizeof(*attach), GFP_KERNEL);
+	attach = kzalloc_obj(*attach, GFP_KERNEL);
 	if (!attach)
 		return -ENOMEM;

@@ -479,7 +479,7 @@ static struct sg_table *vb2_dc_get_base_sgt(struct vb2_dc_buf *buf)
 	if (buf->non_coherent_mem)
 		return buf->dma_sgt;

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		dev_err(buf->dev, "failed to alloc sg table\n");
 		return NULL;
@@ -587,7 +587,7 @@ static void *vb2_dc_get_userptr(struct vb2_buffer *vb, struct device *dev,
 	if (WARN_ON(!dev))
 		return ERR_PTR(-EINVAL);

-	buf = kzalloc(sizeof *buf, GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

@@ -624,7 +624,7 @@ static void *vb2_dc_get_userptr(struct vb2_buffer *vb, struct device *dev,
 		goto out;
 	}

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		pr_err("failed to allocate sg table\n");
 		ret = -ENOMEM;
@@ -779,7 +779,7 @@ static void *vb2_dc_attach_dmabuf(struct vb2_buffer *vb, struct device *dev,
 	if (WARN_ON(!dev))
 		return ERR_PTR(-EINVAL);

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
index b3bf2173c14e..76a9301fb85b 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
@@ -109,7 +109,7 @@ static void *vb2_dma_sg_alloc(struct vb2_buffer *vb, struct device *dev,
 	if (WARN_ON(!dev) || WARN_ON(!size))
 		return ERR_PTR(-EINVAL);

-	buf = kzalloc(sizeof *buf, GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

@@ -126,7 +126,7 @@ static void *vb2_dma_sg_alloc(struct vb2_buffer *vb, struct device *dev,
 	 * there is no memory consistency guarantee, hence dma-sg ignores DMA
 	 * attributes passed from the upper layer.
 	 */
-	buf->pages = kvcalloc(buf->num_pages, sizeof(struct page *), GFP_KERNEL);
+	buf->pages = kvzalloc_objs(struct page *, buf->num_pages, GFP_KERNEL);
 	if (!buf->pages)
 		goto fail_pages_array_alloc;

@@ -230,7 +230,7 @@ static void *vb2_dma_sg_get_userptr(struct vb2_buffer *vb, struct device *dev,
 	if (WARN_ON(!dev))
 		return ERR_PTR(-EINVAL);

-	buf = kzalloc(sizeof *buf, GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

@@ -375,7 +375,7 @@ static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf,
 	struct vb2_dma_sg_buf *buf = dbuf->priv;
 	int ret;

-	attach = kzalloc(sizeof(*attach), GFP_KERNEL);
+	attach = kzalloc_obj(*attach, GFP_KERNEL);
 	if (!attach)
 		return -ENOMEM;

@@ -626,7 +626,7 @@ static void *vb2_dma_sg_attach_dmabuf(struct vb2_buffer *vb, struct device *dev,
 	if (dbuf->size < size)
 		return ERR_PTR(-EFAULT);

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/common/videobuf2/videobuf2-dvb.c b/drivers/media/common/videobuf2/videobuf2-dvb.c
index 3746bf6d1c15..e37dd9007b19 100644
--- a/drivers/media/common/videobuf2/videobuf2-dvb.c
+++ b/drivers/media/common/videobuf2/videobuf2-dvb.c
@@ -299,7 +299,7 @@ struct vb2_dvb_frontend *vb2_dvb_alloc_frontend(
 {
 	struct vb2_dvb_frontend *fe;

-	fe = kzalloc(sizeof(struct vb2_dvb_frontend), GFP_KERNEL);
+	fe = kzalloc_obj(struct vb2_dvb_frontend, GFP_KERNEL);
 	if (fe == NULL)
 		return NULL;

diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
index 3f777068cd34..a410e9078626 100644
--- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
+++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
@@ -39,7 +39,7 @@ static void *vb2_vmalloc_alloc(struct vb2_buffer *vb, struct device *dev,
 {
 	struct vb2_vmalloc_buf *buf;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL | vb->vb2_queue->gfp_flags);
+	buf = kzalloc_obj(*buf, GFP_KERNEL | vb->vb2_queue->gfp_flags);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

@@ -78,7 +78,7 @@ static void *vb2_vmalloc_get_userptr(struct vb2_buffer *vb, struct device *dev,
 	int n_pages, offset, i;
 	int ret = -ENOMEM;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

@@ -221,7 +221,7 @@ static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf,
 	int ret;
 	int i;

-	attach = kzalloc(sizeof(*attach), GFP_KERNEL);
+	attach = kzalloc_obj(*attach, GFP_KERNEL);
 	if (!attach)
 		return -ENOMEM;

@@ -409,7 +409,7 @@ static void *vb2_vmalloc_attach_dmabuf(struct vb2_buffer *vb,
 	if (dbuf->size < size)
 		return ERR_PTR(-EFAULT);

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/dvb-core/dmxdev.c b/drivers/media/dvb-core/dmxdev.c
index c946c8ea6e39..254d56059863 100644
--- a/drivers/media/dvb-core/dmxdev.c
+++ b/drivers/media/dvb-core/dmxdev.c
@@ -892,7 +892,7 @@ static int dvb_dmxdev_add_pid(struct dmxdev *dmxdev,
 	    (!list_empty(&filter->feed.ts)))
 		return -EINVAL;

-	feed = kzalloc(sizeof(struct dmxdev_feed), GFP_KERNEL);
+	feed = kzalloc_obj(struct dmxdev_feed, GFP_KERNEL);
 	if (feed == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/dvb-core/dvb_ca_en50221.c b/drivers/media/dvb-core/dvb_ca_en50221.c
index 7b591aa1179f..d25d4522240a 100644
--- a/drivers/media/dvb-core/dvb_ca_en50221.c
+++ b/drivers/media/dvb-core/dvb_ca_en50221.c
@@ -1880,7 +1880,7 @@ int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter,
 		return -EINVAL;

 	/* initialise the system data */
-	ca = kzalloc(sizeof(*ca), GFP_KERNEL);
+	ca = kzalloc_obj(*ca, GFP_KERNEL);
 	if (!ca) {
 		ret = -ENOMEM;
 		goto exit;
@@ -1889,8 +1889,7 @@ int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter,
 	ca->pub = pubca;
 	ca->flags = flags;
 	ca->slot_count = slot_count;
-	ca->slot_info = kcalloc(slot_count, sizeof(struct dvb_ca_slot),
-				GFP_KERNEL);
+	ca->slot_info = kzalloc_objs(struct dvb_ca_slot, slot_count, GFP_KERNEL);
 	if (!ca->slot_info) {
 		ret = -ENOMEM;
 		goto free_ca;
diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
index a05aa271a1ba..6ba5857d280f 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -3021,7 +3021,7 @@ int dvb_register_frontend(struct dvb_adapter *dvb,
 	if (mutex_lock_interruptible(&frontend_mutex))
 		return -ERESTARTSYS;

-	fe->frontend_priv = kzalloc(sizeof(struct dvb_frontend_private), GFP_KERNEL);
+	fe->frontend_priv = kzalloc_obj(struct dvb_frontend_private, GFP_KERNEL);
 	if (!fe->frontend_priv) {
 		mutex_unlock(&frontend_mutex);
 		return -ENOMEM;
diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c
index 8b980d371a45..00476e7ee048 100644
--- a/drivers/media/dvb-core/dvbdev.c
+++ b/drivers/media/dvb-core/dvbdev.c
@@ -251,13 +251,13 @@ static int dvb_create_tsout_entity(struct dvb_device *dvbdev,
 {
 	int i;

-	dvbdev->tsout_pads = kcalloc(npads, sizeof(*dvbdev->tsout_pads),
-				     GFP_KERNEL);
+	dvbdev->tsout_pads = kzalloc_objs(*dvbdev->tsout_pads, npads,
+					  GFP_KERNEL);
 	if (!dvbdev->tsout_pads)
 		return -ENOMEM;

-	dvbdev->tsout_entity = kcalloc(npads, sizeof(*dvbdev->tsout_entity),
-				       GFP_KERNEL);
+	dvbdev->tsout_entity = kzalloc_objs(*dvbdev->tsout_entity, npads,
+					    GFP_KERNEL);
 	if (!dvbdev->tsout_entity)
 		return -ENOMEM;

@@ -328,15 +328,14 @@ static int dvb_create_media_entity(struct dvb_device *dvbdev,
 		return 0;
 	}

-	dvbdev->entity = kzalloc(sizeof(*dvbdev->entity), GFP_KERNEL);
+	dvbdev->entity = kzalloc_obj(*dvbdev->entity, GFP_KERNEL);
 	if (!dvbdev->entity)
 		return -ENOMEM;

 	dvbdev->entity->name = dvbdev->name;

 	if (npads) {
-		dvbdev->pads = kcalloc(npads, sizeof(*dvbdev->pads),
-				       GFP_KERNEL);
+		dvbdev->pads = kzalloc_objs(*dvbdev->pads, npads, GFP_KERNEL);
 		if (!dvbdev->pads) {
 			kfree(dvbdev->entity);
 			dvbdev->entity = NULL;
@@ -472,7 +471,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
 		return -ENFILE;
 	}

-	*pdvbdev = dvbdev = kzalloc(sizeof(*dvbdev), GFP_KERNEL);
+	*pdvbdev = dvbdev = kzalloc_obj(*dvbdev, GFP_KERNEL);
 	if (!dvbdev) {
 		mutex_unlock(&dvbdev_register_lock);
 		return -ENOMEM;
@@ -500,7 +499,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
 			return -ENOMEM;
 		}

-		new_node = kzalloc(sizeof(*new_node), GFP_KERNEL);
+		new_node = kzalloc_obj(*new_node, GFP_KERNEL);
 		if (!new_node) {
 			kfree(dvbdevfops);
 			kfree(dvbdev);
@@ -712,12 +711,12 @@ int dvb_create_media_graph(struct dvb_adapter *adap,
 		demod = NULL;

 	if (create_rf_connector) {
-		conn = kzalloc(sizeof(*conn), GFP_KERNEL);
+		conn = kzalloc_obj(*conn, GFP_KERNEL);
 		if (!conn)
 			return -ENOMEM;
 		adap->conn = conn;

-		adap->conn_pads = kzalloc(sizeof(*adap->conn_pads), GFP_KERNEL);
+		adap->conn_pads = kzalloc_obj(*adap->conn_pads, GFP_KERNEL);
 		if (!adap->conn_pads)
 			return -ENOMEM;

@@ -1027,7 +1026,7 @@ struct i2c_client *dvb_module_probe(const char *module_name,
 	struct i2c_client *client;
 	struct i2c_board_info *board_info;

-	board_info = kzalloc(sizeof(*board_info), GFP_KERNEL);
+	board_info = kzalloc_obj(*board_info, GFP_KERNEL);
 	if (!board_info)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/a8293.c b/drivers/media/dvb-frontends/a8293.c
index bf2773c5b97a..c1eeed1d08e6 100644
--- a/drivers/media/dvb-frontends/a8293.c
+++ b/drivers/media/dvb-frontends/a8293.c
@@ -218,7 +218,7 @@ static int a8293_probe(struct i2c_client *client)
 	int ret;
 	u8 buf[2];

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/af9013.c b/drivers/media/dvb-frontends/af9013.c
index befd6a4eafd9..d004ec9e94f0 100644
--- a/drivers/media/dvb-frontends/af9013.c
+++ b/drivers/media/dvb-frontends/af9013.c
@@ -1447,7 +1447,7 @@ static int af9013_probe(struct i2c_client *client)
 		.val_bits = 8,
 	};

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index eed2ea4da8fa..584cc0405e4a 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -1062,7 +1062,7 @@ static int af9033_probe(struct i2c_client *client)
 	};

 	/* Allocate memory for the internal state */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/as102_fe.c b/drivers/media/dvb-frontends/as102_fe.c
index bc72d954dc1f..5b17d0b6f3ea 100644
--- a/drivers/media/dvb-frontends/as102_fe.c
+++ b/drivers/media/dvb-frontends/as102_fe.c
@@ -447,7 +447,7 @@ struct dvb_frontend *as102_attach(const char *name,
 	struct as102_state *state;
 	struct dvb_frontend *fe;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/ascot2e.c b/drivers/media/dvb-frontends/ascot2e.c
index cf8e5f1bd101..0d28a3422cae 100644
--- a/drivers/media/dvb-frontends/ascot2e.c
+++ b/drivers/media/dvb-frontends/ascot2e.c
@@ -477,7 +477,7 @@ struct dvb_frontend *ascot2e_attach(struct dvb_frontend *fe,
 	u8 data[4];
 	struct ascot2e_priv *priv = NULL;

-	priv = kzalloc(sizeof(struct ascot2e_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct ascot2e_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;
 	priv->i2c_address = (config->i2c_address >> 1);
diff --git a/drivers/media/dvb-frontends/atbm8830.c b/drivers/media/dvb-frontends/atbm8830.c
index 778c865085bf..2b9dbd748ebc 100644
--- a/drivers/media/dvb-frontends/atbm8830.c
+++ b/drivers/media/dvb-frontends/atbm8830.c
@@ -458,7 +458,7 @@ struct dvb_frontend *atbm8830_attach(const struct atbm8830_config *config,
 	if (config == NULL || i2c == NULL)
 		return NULL;

-	priv = kzalloc(sizeof(struct atbm_state), GFP_KERNEL);
+	priv = kzalloc_obj(struct atbm_state, GFP_KERNEL);
 	if (priv == NULL)
 		goto error_out;

diff --git a/drivers/media/dvb-frontends/bcm3510.c b/drivers/media/dvb-frontends/bcm3510.c
index d935fb10e620..50f43f9c7aef 100644
--- a/drivers/media/dvb-frontends/bcm3510.c
+++ b/drivers/media/dvb-frontends/bcm3510.c
@@ -800,7 +800,7 @@ struct dvb_frontend* bcm3510_attach(const struct bcm3510_config *config,
 	bcm3510_register_value v;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct bcm3510_state), GFP_KERNEL);
+	state = kzalloc_obj(struct bcm3510_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/cx22700.c b/drivers/media/dvb-frontends/cx22700.c
index 1d04c0a652b2..9f36c837fd66 100644
--- a/drivers/media/dvb-frontends/cx22700.c
+++ b/drivers/media/dvb-frontends/cx22700.c
@@ -376,7 +376,7 @@ struct dvb_frontend* cx22700_attach(const struct cx22700_config* config,
 	struct cx22700_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct cx22700_state), GFP_KERNEL);
+	state = kzalloc_obj(struct cx22700_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/cx22702.c b/drivers/media/dvb-frontends/cx22702.c
index 61ad34b7004b..acdc8712d343 100644
--- a/drivers/media/dvb-frontends/cx22702.c
+++ b/drivers/media/dvb-frontends/cx22702.c
@@ -582,7 +582,7 @@ struct dvb_frontend *cx22702_attach(const struct cx22702_config *config,
 	struct cx22702_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct cx22702_state), GFP_KERNEL);
+	state = kzalloc_obj(struct cx22702_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/cx24110.c b/drivers/media/dvb-frontends/cx24110.c
index 65dd9b72ea55..a413dd023aa9 100644
--- a/drivers/media/dvb-frontends/cx24110.c
+++ b/drivers/media/dvb-frontends/cx24110.c
@@ -588,7 +588,7 @@ struct dvb_frontend* cx24110_attach(const struct cx24110_config* config,
 	int ret;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct cx24110_state), GFP_KERNEL);
+	state = kzalloc_obj(struct cx24110_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/cx24113.c b/drivers/media/dvb-frontends/cx24113.c
index 203cb6b3f941..450e9d02e950 100644
--- a/drivers/media/dvb-frontends/cx24113.c
+++ b/drivers/media/dvb-frontends/cx24113.c
@@ -542,7 +542,7 @@ struct dvb_frontend *cx24113_attach(struct dvb_frontend *fe,
 		const struct cx24113_config *config, struct i2c_adapter *i2c)
 {
 	/* allocate memory for the internal state */
-	struct cx24113_state *state = kzalloc(sizeof(*state), GFP_KERNEL);
+	struct cx24113_state *state = kzalloc_obj(*state, GFP_KERNEL);
 	int rc;

 	if (!state)
diff --git a/drivers/media/dvb-frontends/cx24116.c b/drivers/media/dvb-frontends/cx24116.c
index f5dd3a81725a..f7c2d7b165ce 100644
--- a/drivers/media/dvb-frontends/cx24116.c
+++ b/drivers/media/dvb-frontends/cx24116.c
@@ -1116,7 +1116,7 @@ struct dvb_frontend *cx24116_attach(const struct cx24116_config *config,
 	dprintk("%s\n", __func__);

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/cx24117.c b/drivers/media/dvb-frontends/cx24117.c
index 75fc7ad263d0..99555db3c537 100644
--- a/drivers/media/dvb-frontends/cx24117.c
+++ b/drivers/media/dvb-frontends/cx24117.c
@@ -1184,7 +1184,7 @@ struct dvb_frontend *cx24117_attach(const struct cx24117_config *config,
 	}

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct cx24117_state), GFP_KERNEL);
+	state = kzalloc_obj(struct cx24117_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error2;

diff --git a/drivers/media/dvb-frontends/cx24120.c b/drivers/media/dvb-frontends/cx24120.c
index 44515fdbe91d..2602fe350d35 100644
--- a/drivers/media/dvb-frontends/cx24120.c
+++ b/drivers/media/dvb-frontends/cx24120.c
@@ -268,7 +268,7 @@ struct dvb_frontend *cx24120_attach(const struct cx24120_config *config,
 	int demod_rev;

 	info("Conexant cx24120/cx24118 - DVBS/S2 Satellite demod/tuner\n");
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state) {
 		err("Unable to allocate memory for cx24120_state\n");
 		goto error;
diff --git a/drivers/media/dvb-frontends/cx24123.c b/drivers/media/dvb-frontends/cx24123.c
index 539889e638cc..ecc1a017cbe1 100644
--- a/drivers/media/dvb-frontends/cx24123.c
+++ b/drivers/media/dvb-frontends/cx24123.c
@@ -1043,7 +1043,7 @@ struct dvb_frontend *cx24123_attach(const struct cx24123_config *config,
 {
 	/* allocate memory for the internal state */
 	struct cx24123_state *state =
-		kzalloc(sizeof(struct cx24123_state), GFP_KERNEL);
+		kzalloc_obj(struct cx24123_state, GFP_KERNEL);

 	dprintk("\n");
 	if (state == NULL) {
diff --git a/drivers/media/dvb-frontends/cxd2099.c b/drivers/media/dvb-frontends/cxd2099.c
index 5e6e18819a0d..80ca00f22d07 100644
--- a/drivers/media/dvb-frontends/cxd2099.c
+++ b/drivers/media/dvb-frontends/cxd2099.c
@@ -609,7 +609,7 @@ static int cxd2099_probe(struct i2c_client *client)
 	unsigned int val;
 	int ret;

-	ci = kzalloc(sizeof(*ci), GFP_KERNEL);
+	ci = kzalloc_obj(*ci, GFP_KERNEL);
 	if (!ci) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/cxd2820r_core.c b/drivers/media/dvb-frontends/cxd2820r_core.c
index 5aa3d45a691a..ed3f535db949 100644
--- a/drivers/media/dvb-frontends/cxd2820r_core.c
+++ b/drivers/media/dvb-frontends/cxd2820r_core.c
@@ -594,7 +594,7 @@ static int cxd2820r_probe(struct i2c_client *client)

 	dev_dbg(&client->dev, "\n");

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/cxd2841er.c b/drivers/media/dvb-frontends/cxd2841er.c
index 8fcb4417ba22..db58803c85df 100644
--- a/drivers/media/dvb-frontends/cxd2841er.c
+++ b/drivers/media/dvb-frontends/cxd2841er.c
@@ -3844,7 +3844,7 @@ static struct dvb_frontend *cxd2841er_attach(struct cxd2841er_config *cfg,
 	struct cxd2841er_priv *priv = NULL;

 	/* allocate memory for the internal state */
-	priv = kzalloc(sizeof(struct cxd2841er_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct cxd2841er_priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;
 	priv->i2c = i2c;
diff --git a/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c b/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c
index a06d8368ca79..1a1ed41f7555 100644
--- a/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c
+++ b/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c
@@ -1887,7 +1887,7 @@ struct dvb_frontend *cxd2880_attach(struct dvb_frontend *fe,
 		return NULL;
 	}

-	priv = kzalloc(sizeof(struct cxd2880_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct cxd2880_priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/dib0070.c b/drivers/media/dvb-frontends/dib0070.c
index 9a8e7cdd2a24..de91a6e497a7 100644
--- a/drivers/media/dvb-frontends/dib0070.c
+++ b/drivers/media/dvb-frontends/dib0070.c
@@ -738,7 +738,8 @@ static const struct dvb_tuner_ops dib0070_ops = {

 struct dvb_frontend *dib0070_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct dib0070_config *cfg)
 {
-	struct dib0070_state *state = kzalloc(sizeof(struct dib0070_state), GFP_KERNEL);
+	struct dib0070_state *state = kzalloc_obj(struct dib0070_state,
+						  GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/dib0090.c b/drivers/media/dvb-frontends/dib0090.c
index 6cbbb351d545..f11083a955ec 100644
--- a/drivers/media/dvb-frontends/dib0090.c
+++ b/drivers/media/dvb-frontends/dib0090.c
@@ -2606,7 +2606,7 @@ static const struct dib0090_wbd_slope dib0090_wbd_table_default[] = {

 struct dvb_frontend *dib0090_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config)
 {
-	struct dib0090_state *st = kzalloc(sizeof(struct dib0090_state), GFP_KERNEL);
+	struct dib0090_state *st = kzalloc_obj(struct dib0090_state, GFP_KERNEL);
 	if (st == NULL)
 		return NULL;

@@ -2638,7 +2638,8 @@ EXPORT_SYMBOL_GPL(dib0090_register);

 struct dvb_frontend *dib0090_fw_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config)
 {
-	struct dib0090_fw_state *st = kzalloc(sizeof(struct dib0090_fw_state), GFP_KERNEL);
+	struct dib0090_fw_state *st = kzalloc_obj(struct dib0090_fw_state,
+						  GFP_KERNEL);
 	if (st == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/dib3000mb.c b/drivers/media/dvb-frontends/dib3000mb.c
index 63bc7b74bc8b..ab7046a4ff96 100644
--- a/drivers/media/dvb-frontends/dib3000mb.c
+++ b/drivers/media/dvb-frontends/dib3000mb.c
@@ -746,7 +746,7 @@ struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config,
 	struct dib3000_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct dib3000_state), GFP_KERNEL);
+	state = kzalloc_obj(struct dib3000_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/dib3000mc.c b/drivers/media/dvb-frontends/dib3000mc.c
index c2fca8289aba..12ee8a5d3b6e 100644
--- a/drivers/media/dvb-frontends/dib3000mc.c
+++ b/drivers/media/dvb-frontends/dib3000mc.c
@@ -861,7 +861,7 @@ int dib3000mc_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 defa

 	static const u8 DIB3000MC_I2C_ADDRESS[] = { 20, 22, 24, 26 };

-	dmcst = kzalloc(sizeof(struct dib3000mc_state), GFP_KERNEL);
+	dmcst = kzalloc_obj(struct dib3000mc_state, GFP_KERNEL);
 	if (dmcst == NULL)
 		return -ENOMEM;

@@ -910,7 +910,7 @@ struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr
 {
 	struct dvb_frontend *demod;
 	struct dib3000mc_state *st;
-	st = kzalloc(sizeof(struct dib3000mc_state), GFP_KERNEL);
+	st = kzalloc_obj(struct dib3000mc_state, GFP_KERNEL);
 	if (st == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/dib7000m.c b/drivers/media/dvb-frontends/dib7000m.c
index fdb22f32e3a1..ffbc313915ed 100644
--- a/drivers/media/dvb-frontends/dib7000m.c
+++ b/drivers/media/dvb-frontends/dib7000m.c
@@ -1403,7 +1403,7 @@ struct dvb_frontend * dib7000m_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr,
 {
 	struct dvb_frontend *demod;
 	struct dib7000m_state *st;
-	st = kzalloc(sizeof(struct dib7000m_state), GFP_KERNEL);
+	st = kzalloc_obj(struct dib7000m_state, GFP_KERNEL);
 	if (st == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/dib7000p.c b/drivers/media/dvb-frontends/dib7000p.c
index 7d3a994b7cc4..2d0c85fb11a0 100644
--- a/drivers/media/dvb-frontends/dib7000p.c
+++ b/drivers/media/dvb-frontends/dib7000p.c
@@ -2081,7 +2081,7 @@ static int dib7000p_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u
 	int k = 0;
 	u8 new_addr = 0;

-	dpst = kzalloc(sizeof(struct dib7000p_state), GFP_KERNEL);
+	dpst = kzalloc_obj(struct dib7000p_state, GFP_KERNEL);
 	if (!dpst)
 		return -ENOMEM;

@@ -2741,7 +2741,7 @@ static struct dvb_frontend *dib7000p_init(struct i2c_adapter *i2c_adap, u8 i2c_a
 {
 	struct dvb_frontend *demod;
 	struct dib7000p_state *st;
-	st = kzalloc(sizeof(struct dib7000p_state), GFP_KERNEL);
+	st = kzalloc_obj(struct dib7000p_state, GFP_KERNEL);
 	if (st == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/dib8000.c b/drivers/media/dvb-frontends/dib8000.c
index d90f1b0b2051..2266178f0a22 100644
--- a/drivers/media/dvb-frontends/dib8000.c
+++ b/drivers/media/dvb-frontends/dib8000.c
@@ -4307,7 +4307,7 @@ static int dib8000_i2c_enumeration(struct i2c_adapter *host, int no_of_demods,
 		ret = -ENOMEM;
 		goto error_memory_read;
 	}
-	client.i2c_buffer_lock = kzalloc(sizeof(struct mutex), GFP_KERNEL);
+	client.i2c_buffer_lock = kzalloc_obj(struct mutex, GFP_KERNEL);
 	if (!client.i2c_buffer_lock) {
 		dprintk("%s: not enough memory\n", __func__);
 		ret = -ENOMEM;
@@ -4448,10 +4448,10 @@ static struct dvb_frontend *dib8000_init(struct i2c_adapter *i2c_adap, u8 i2c_ad

 	dprintk("dib8000_init\n");

-	state = kzalloc(sizeof(struct dib8000_state), GFP_KERNEL);
+	state = kzalloc_obj(struct dib8000_state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;
-	fe = kzalloc(sizeof(struct dvb_frontend), GFP_KERNEL);
+	fe = kzalloc_obj(struct dvb_frontend, GFP_KERNEL);
 	if (fe == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/dib9000.c b/drivers/media/dvb-frontends/dib9000.c
index 83cf6eadd49c..b2e5fe1af78a 100644
--- a/drivers/media/dvb-frontends/dib9000.c
+++ b/drivers/media/dvb-frontends/dib9000.c
@@ -2474,10 +2474,10 @@ struct dvb_frontend *dib9000_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, c
 {
 	struct dvb_frontend *fe;
 	struct dib9000_state *st;
-	st = kzalloc(sizeof(struct dib9000_state), GFP_KERNEL);
+	st = kzalloc_obj(struct dib9000_state, GFP_KERNEL);
 	if (st == NULL)
 		return NULL;
-	fe = kzalloc(sizeof(struct dvb_frontend), GFP_KERNEL);
+	fe = kzalloc_obj(struct dvb_frontend, GFP_KERNEL);
 	if (fe == NULL) {
 		kfree(st);
 		return NULL;
diff --git a/drivers/media/dvb-frontends/drx39xyj/drxj.c b/drivers/media/dvb-frontends/drx39xyj/drxj.c
index 428b31e60874..c7a91f90ed10 100644
--- a/drivers/media/dvb-frontends/drx39xyj/drxj.c
+++ b/drivers/media/dvb-frontends/drx39xyj/drxj.c
@@ -12276,7 +12276,7 @@ struct dvb_frontend *drx39xxj_attach(struct i2c_adapter *i2c)
 	int result;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct drx39xxj_state), GFP_KERNEL);
+	state = kzalloc_obj(struct drx39xxj_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/drxd_hard.c b/drivers/media/dvb-frontends/drxd_hard.c
index 6a531937f4bb..aefdd620ce2c 100644
--- a/drivers/media/dvb-frontends/drxd_hard.c
+++ b/drivers/media/dvb-frontends/drxd_hard.c
@@ -2910,7 +2910,7 @@ struct dvb_frontend *drxd_attach(const struct drxd_config *config,
 {
 	struct drxd_state *state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/drxk_hard.c b/drivers/media/dvb-frontends/drxk_hard.c
index 9ef367918824..7fb5f46aa1d4 100644
--- a/drivers/media/dvb-frontends/drxk_hard.c
+++ b/drivers/media/dvb-frontends/drxk_hard.c
@@ -6722,7 +6722,7 @@ struct dvb_frontend *drxk_attach(const struct drxk_config *config,
 	int status;

 	dprintk(1, "\n");
-	state = kzalloc(sizeof(struct drxk_state), GFP_KERNEL);
+	state = kzalloc_obj(struct drxk_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/ds3000.c b/drivers/media/dvb-frontends/ds3000.c
index 515aa7c7baf2..d300c357f177 100644
--- a/drivers/media/dvb-frontends/ds3000.c
+++ b/drivers/media/dvb-frontends/ds3000.c
@@ -827,7 +827,7 @@ struct dvb_frontend *ds3000_attach(const struct ds3000_config *config,
 	dprintk("%s\n", __func__);

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/dvb-pll.c b/drivers/media/dvb-frontends/dvb-pll.c
index 1775a4aa0a18..078596bd0361 100644
--- a/drivers/media/dvb-frontends/dvb-pll.c
+++ b/drivers/media/dvb-frontends/dvb-pll.c
@@ -820,7 +820,7 @@ struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr,
 			     fe->ops.i2c_gate_ctrl(fe, 0);
 	}

-	priv = kzalloc(sizeof(struct dvb_pll_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct dvb_pll_priv, GFP_KERNEL);
 	if (!priv)
 		goto out;

diff --git a/drivers/media/dvb-frontends/dvb_dummy_fe.c b/drivers/media/dvb-frontends/dvb_dummy_fe.c
index 9ff1ebaa5e04..9ed03df364d6 100644
--- a/drivers/media/dvb-frontends/dvb_dummy_fe.c
+++ b/drivers/media/dvb-frontends/dvb_dummy_fe.c
@@ -114,7 +114,7 @@ struct dvb_frontend *dvb_dummy_fe_ofdm_attach(void)
 	struct dvb_dummy_fe_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct dvb_dummy_fe_state), GFP_KERNEL);
+	state = kzalloc_obj(struct dvb_dummy_fe_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -135,7 +135,7 @@ struct dvb_frontend *dvb_dummy_fe_qpsk_attach(void)
 	struct dvb_dummy_fe_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct dvb_dummy_fe_state), GFP_KERNEL);
+	state = kzalloc_obj(struct dvb_dummy_fe_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -156,7 +156,7 @@ struct dvb_frontend *dvb_dummy_fe_qam_attach(void)
 	struct dvb_dummy_fe_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct dvb_dummy_fe_state), GFP_KERNEL);
+	state = kzalloc_obj(struct dvb_dummy_fe_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/ec100.c b/drivers/media/dvb-frontends/ec100.c
index 2ad0a3c2f756..be9ee1c90434 100644
--- a/drivers/media/dvb-frontends/ec100.c
+++ b/drivers/media/dvb-frontends/ec100.c
@@ -276,7 +276,7 @@ struct dvb_frontend *ec100_attach(const struct ec100_config *config,
 	u8 tmp;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct ec100_state), GFP_KERNEL);
+	state = kzalloc_obj(struct ec100_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/gp8psk-fe.c b/drivers/media/dvb-frontends/gp8psk-fe.c
index ed671e951a17..8893de2758f6 100644
--- a/drivers/media/dvb-frontends/gp8psk-fe.c
+++ b/drivers/media/dvb-frontends/gp8psk-fe.c
@@ -332,7 +332,7 @@ struct dvb_frontend *gp8psk_fe_attach(const struct gp8psk_fe_ops *ops,
 		return NULL;
 	}

-	st = kzalloc(sizeof(struct gp8psk_fe_state), GFP_KERNEL);
+	st = kzalloc_obj(struct gp8psk_fe_state, GFP_KERNEL);
 	if (!st)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/helene.c b/drivers/media/dvb-frontends/helene.c
index f127adee3ebb..0b68fa8b2664 100644
--- a/drivers/media/dvb-frontends/helene.c
+++ b/drivers/media/dvb-frontends/helene.c
@@ -997,7 +997,7 @@ struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe,
 {
 	struct helene_priv *priv = NULL;

-	priv = kzalloc(sizeof(struct helene_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct helene_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;
 	priv->i2c_address = (config->i2c_address >> 1);
@@ -1033,7 +1033,7 @@ struct dvb_frontend *helene_attach(struct dvb_frontend *fe,
 {
 	struct helene_priv *priv = NULL;

-	priv = kzalloc(sizeof(struct helene_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct helene_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;
 	priv->i2c_address = (config->i2c_address >> 1);
diff --git a/drivers/media/dvb-frontends/horus3a.c b/drivers/media/dvb-frontends/horus3a.c
index 0330b78a5b3f..618301eb26aa 100644
--- a/drivers/media/dvb-frontends/horus3a.c
+++ b/drivers/media/dvb-frontends/horus3a.c
@@ -339,7 +339,7 @@ struct dvb_frontend *horus3a_attach(struct dvb_frontend *fe,
 	u8 buf[3], val;
 	struct horus3a_priv *priv = NULL;

-	priv = kzalloc(sizeof(struct horus3a_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct horus3a_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;
 	priv->i2c_address = (config->i2c_address >> 1);
diff --git a/drivers/media/dvb-frontends/isl6405.c b/drivers/media/dvb-frontends/isl6405.c
index 7d28a743f97e..96635db2eabc 100644
--- a/drivers/media/dvb-frontends/isl6405.c
+++ b/drivers/media/dvb-frontends/isl6405.c
@@ -106,7 +106,7 @@ static void isl6405_release(struct dvb_frontend *fe)
 struct dvb_frontend *isl6405_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c,
 				    u8 i2c_addr, u8 override_set, u8 override_clear)
 {
-	struct isl6405 *isl6405 = kmalloc(sizeof(struct isl6405), GFP_KERNEL);
+	struct isl6405 *isl6405 = kmalloc_obj(struct isl6405, GFP_KERNEL);
 	if (!isl6405)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/isl6421.c b/drivers/media/dvb-frontends/isl6421.c
index 2e9f6f12f849..02d9e3b4e91d 100644
--- a/drivers/media/dvb-frontends/isl6421.c
+++ b/drivers/media/dvb-frontends/isl6421.c
@@ -177,7 +177,7 @@ static void isl6421_release(struct dvb_frontend *fe)
 struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr,
 		   u8 override_set, u8 override_clear, bool override_tone)
 {
-	struct isl6421 *isl6421 = kmalloc(sizeof(struct isl6421), GFP_KERNEL);
+	struct isl6421 *isl6421 = kmalloc_obj(struct isl6421, GFP_KERNEL);
 	if (!isl6421)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/isl6423.c b/drivers/media/dvb-frontends/isl6423.c
index a0d0a3834057..6bffcc381fed 100644
--- a/drivers/media/dvb-frontends/isl6423.c
+++ b/drivers/media/dvb-frontends/isl6423.c
@@ -258,7 +258,7 @@ struct dvb_frontend *isl6423_attach(struct dvb_frontend *fe,
 {
 	struct isl6423_dev *isl6423;

-	isl6423 = kzalloc(sizeof(struct isl6423_dev), GFP_KERNEL);
+	isl6423 = kzalloc_obj(struct isl6423_dev, GFP_KERNEL);
 	if (!isl6423)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/itd1000.c b/drivers/media/dvb-frontends/itd1000.c
index f8f362f50e78..6c1863efe227 100644
--- a/drivers/media/dvb-frontends/itd1000.c
+++ b/drivers/media/dvb-frontends/itd1000.c
@@ -365,7 +365,7 @@ struct dvb_frontend *itd1000_attach(struct dvb_frontend *fe, struct i2c_adapter
 	struct itd1000_state *state = NULL;
 	u8 i = 0;

-	state = kzalloc(sizeof(struct itd1000_state), GFP_KERNEL);
+	state = kzalloc_obj(struct itd1000_state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/ix2505v.c b/drivers/media/dvb-frontends/ix2505v.c
index 3212e333d472..db0875f65de8 100644
--- a/drivers/media/dvb-frontends/ix2505v.c
+++ b/drivers/media/dvb-frontends/ix2505v.c
@@ -267,7 +267,7 @@ struct dvb_frontend *ix2505v_attach(struct dvb_frontend *fe,
 		goto error;
 	}

-	state = kzalloc(sizeof(struct ix2505v_state), GFP_KERNEL);
+	state = kzalloc_obj(struct ix2505v_state, GFP_KERNEL);
 	if (NULL == state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/l64781.c b/drivers/media/dvb-frontends/l64781.c
index fe5af2453d55..cfec598001db 100644
--- a/drivers/media/dvb-frontends/l64781.c
+++ b/drivers/media/dvb-frontends/l64781.c
@@ -497,7 +497,7 @@ struct dvb_frontend* l64781_attach(const struct l64781_config* config,
 			   { .addr = config->demod_address, .flags = I2C_M_RD, .buf = b1, .len = 1 } };

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct l64781_state), GFP_KERNEL);
+	state = kzalloc_obj(struct l64781_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/lg2160.c b/drivers/media/dvb-frontends/lg2160.c
index fe700aa56bff..5c9ebfec4524 100644
--- a/drivers/media/dvb-frontends/lg2160.c
+++ b/drivers/media/dvb-frontends/lg2160.c
@@ -1396,7 +1396,7 @@ struct dvb_frontend *lg2160_attach(const struct lg2160_config *config,
 	       i2c_adap ? i2c_adapter_id(i2c_adap) : 0,
 	       config ? config->i2c_addr : 0);

-	state = kzalloc(sizeof(struct lg216x_state), GFP_KERNEL);
+	state = kzalloc_obj(struct lg216x_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/lgdt3305.c b/drivers/media/dvb-frontends/lgdt3305.c
index bdc8311e1c0b..9fcac3361618 100644
--- a/drivers/media/dvb-frontends/lgdt3305.c
+++ b/drivers/media/dvb-frontends/lgdt3305.c
@@ -1103,7 +1103,7 @@ struct dvb_frontend *lgdt3305_attach(const struct lgdt3305_config *config,
 	       i2c_adap ? i2c_adapter_id(i2c_adap) : 0,
 	       config ? config->i2c_addr : 0);

-	state = kzalloc(sizeof(struct lgdt3305_state), GFP_KERNEL);
+	state = kzalloc_obj(struct lgdt3305_state, GFP_KERNEL);
 	if (state == NULL)
 		goto fail;

diff --git a/drivers/media/dvb-frontends/lgdt3306a.c b/drivers/media/dvb-frontends/lgdt3306a.c
index 6ab9d4de65ce..a6d885d951a5 100644
--- a/drivers/media/dvb-frontends/lgdt3306a.c
+++ b/drivers/media/dvb-frontends/lgdt3306a.c
@@ -1802,7 +1802,7 @@ struct dvb_frontend *lgdt3306a_attach(const struct lgdt3306a_config *config,
 	       i2c_adap ? i2c_adapter_id(i2c_adap) : 0,
 	       config ? config->i2c_addr : 0);

-	state = kzalloc(sizeof(struct lgdt3306a_state), GFP_KERNEL);
+	state = kzalloc_obj(struct lgdt3306a_state, GFP_KERNEL);
 	if (state == NULL)
 		goto fail;

diff --git a/drivers/media/dvb-frontends/lgdt330x.c b/drivers/media/dvb-frontends/lgdt330x.c
index 8c34a5b850bc..43e45c2317e0 100644
--- a/drivers/media/dvb-frontends/lgdt330x.c
+++ b/drivers/media/dvb-frontends/lgdt330x.c
@@ -863,7 +863,7 @@ static int lgdt330x_probe(struct i2c_client *client)
 	u8 buf[1];

 	/* Allocate memory for the internal state */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		goto error;

diff --git a/drivers/media/dvb-frontends/lgs8gl5.c b/drivers/media/dvb-frontends/lgs8gl5.c
index 872abb70d1b6..07e422cb53da 100644
--- a/drivers/media/dvb-frontends/lgs8gl5.c
+++ b/drivers/media/dvb-frontends/lgs8gl5.c
@@ -375,7 +375,7 @@ lgs8gl5_attach(const struct lgs8gl5_config *config, struct i2c_adapter *i2c)
 	dprintk("%s\n", __func__);

 	/* Allocate memory for the internal state */
-	state = kzalloc(sizeof(struct lgs8gl5_state), GFP_KERNEL);
+	state = kzalloc_obj(struct lgs8gl5_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/lgs8gxx.c b/drivers/media/dvb-frontends/lgs8gxx.c
index ffaf60e16ecd..8904f767e4ad 100644
--- a/drivers/media/dvb-frontends/lgs8gxx.c
+++ b/drivers/media/dvb-frontends/lgs8gxx.c
@@ -1012,7 +1012,7 @@ struct dvb_frontend *lgs8gxx_attach(const struct lgs8gxx_config *config,
 	if (config == NULL || i2c == NULL)
 		return NULL;

-	priv = kzalloc(sizeof(struct lgs8gxx_state), GFP_KERNEL);
+	priv = kzalloc_obj(struct lgs8gxx_state, GFP_KERNEL);
 	if (priv == NULL)
 		goto error_out;

diff --git a/drivers/media/dvb-frontends/lnbh25.c b/drivers/media/dvb-frontends/lnbh25.c
index 41bec050642b..e4e4c43465cf 100644
--- a/drivers/media/dvb-frontends/lnbh25.c
+++ b/drivers/media/dvb-frontends/lnbh25.c
@@ -148,7 +148,7 @@ struct dvb_frontend *lnbh25_attach(struct dvb_frontend *fe,
 	struct lnbh25_priv *priv;

 	dev_dbg(&i2c->dev, "%s()\n", __func__);
-	priv = kzalloc(sizeof(struct lnbh25_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct lnbh25_priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;
 	priv->i2c_address = (cfg->i2c_address >> 1);
diff --git a/drivers/media/dvb-frontends/lnbh29.c b/drivers/media/dvb-frontends/lnbh29.c
index 410bae099c32..2bb9f8b9d325 100644
--- a/drivers/media/dvb-frontends/lnbh29.c
+++ b/drivers/media/dvb-frontends/lnbh29.c
@@ -135,7 +135,7 @@ struct dvb_frontend *lnbh29_attach(struct dvb_frontend *fe,
 {
 	struct lnbh29_priv *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/lnbp21.c b/drivers/media/dvb-frontends/lnbp21.c
index 32593b1f75a3..b68fa4424acd 100644
--- a/drivers/media/dvb-frontends/lnbp21.c
+++ b/drivers/media/dvb-frontends/lnbp21.c
@@ -113,7 +113,7 @@ static struct dvb_frontend *lnbx2x_attach(struct dvb_frontend *fe,
 				struct i2c_adapter *i2c, u8 override_set,
 				u8 override_clear, u8 i2c_addr, u8 config)
 {
-	struct lnbp21 *lnbp21 = kmalloc(sizeof(struct lnbp21), GFP_KERNEL);
+	struct lnbp21 *lnbp21 = kmalloc_obj(struct lnbp21, GFP_KERNEL);
 	if (!lnbp21)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/lnbp22.c b/drivers/media/dvb-frontends/lnbp22.c
index cb4ea5d3fad4..98e54f74f306 100644
--- a/drivers/media/dvb-frontends/lnbp22.c
+++ b/drivers/media/dvb-frontends/lnbp22.c
@@ -96,7 +96,7 @@ static void lnbp22_release(struct dvb_frontend *fe)
 struct dvb_frontend *lnbp22_attach(struct dvb_frontend *fe,
 					struct i2c_adapter *i2c)
 {
-	struct lnbp22 *lnbp22 = kmalloc(sizeof(struct lnbp22), GFP_KERNEL);
+	struct lnbp22 *lnbp22 = kmalloc_obj(struct lnbp22, GFP_KERNEL);
 	if (!lnbp22)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/m88ds3103.c b/drivers/media/dvb-frontends/m88ds3103.c
index 5a03485686d9..e419551ca46e 100644
--- a/drivers/media/dvb-frontends/m88ds3103.c
+++ b/drivers/media/dvb-frontends/m88ds3103.c
@@ -1775,7 +1775,7 @@ static int m88ds3103_probe(struct i2c_client *client)
 	int ret;
 	unsigned int utmp;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/m88rs2000.c b/drivers/media/dvb-frontends/m88rs2000.c
index 2aa98203cd65..1804c31ebe0f 100644
--- a/drivers/media/dvb-frontends/m88rs2000.c
+++ b/drivers/media/dvb-frontends/m88rs2000.c
@@ -786,7 +786,7 @@ struct dvb_frontend *m88rs2000_attach(const struct m88rs2000_config *config,
 	struct m88rs2000_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct m88rs2000_state), GFP_KERNEL);
+	state = kzalloc_obj(struct m88rs2000_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/mb86a16.c b/drivers/media/dvb-frontends/mb86a16.c
index 9033e39d75f4..0c9bd4a47be4 100644
--- a/drivers/media/dvb-frontends/mb86a16.c
+++ b/drivers/media/dvb-frontends/mb86a16.c
@@ -1833,7 +1833,7 @@ struct dvb_frontend *mb86a16_attach(const struct mb86a16_config *config,
 	u8 dev_id = 0;
 	struct mb86a16_state *state = NULL;

-	state = kmalloc(sizeof(struct mb86a16_state), GFP_KERNEL);
+	state = kmalloc_obj(struct mb86a16_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/mb86a20s.c b/drivers/media/dvb-frontends/mb86a20s.c
index f8e4bbee5bd5..eb596d3b9da5 100644
--- a/drivers/media/dvb-frontends/mb86a20s.c
+++ b/drivers/media/dvb-frontends/mb86a20s.c
@@ -2052,7 +2052,7 @@ struct dvb_frontend *mb86a20s_attach(const struct mb86a20s_config *config,
 	dev_dbg(&i2c->dev, "%s called.\n", __func__);

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/mn88472.c b/drivers/media/dvb-frontends/mn88472.c
index 729751671c3d..ce3ae7d8d13f 100644
--- a/drivers/media/dvb-frontends/mn88472.c
+++ b/drivers/media/dvb-frontends/mn88472.c
@@ -586,7 +586,7 @@ static int mn88472_probe(struct i2c_client *client)

 	dev_dbg(&client->dev, "\n");

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/mn88473.c b/drivers/media/dvb-frontends/mn88473.c
index fefc640d8afb..371f9faa3038 100644
--- a/drivers/media/dvb-frontends/mn88473.c
+++ b/drivers/media/dvb-frontends/mn88473.c
@@ -626,7 +626,7 @@ static int mn88473_probe(struct i2c_client *client)
 		goto err;
 	}

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/mt312.c b/drivers/media/dvb-frontends/mt312.c
index fb867dd8a26b..06d7153f57d8 100644
--- a/drivers/media/dvb-frontends/mt312.c
+++ b/drivers/media/dvb-frontends/mt312.c
@@ -780,7 +780,7 @@ struct dvb_frontend *mt312_attach(const struct mt312_config *config,
 	struct mt312_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct mt312_state), GFP_KERNEL);
+	state = kzalloc_obj(struct mt312_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/mt352.c b/drivers/media/dvb-frontends/mt352.c
index 1b2889f5cf67..3f57ac209654 100644
--- a/drivers/media/dvb-frontends/mt352.c
+++ b/drivers/media/dvb-frontends/mt352.c
@@ -533,7 +533,7 @@ struct dvb_frontend* mt352_attach(const struct mt352_config* config,
 	struct mt352_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct mt352_state), GFP_KERNEL);
+	state = kzalloc_obj(struct mt352_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/mxl5xx.c b/drivers/media/dvb-frontends/mxl5xx.c
index 930da176e5bf..43d953c898fd 100644
--- a/drivers/media/dvb-frontends/mxl5xx.c
+++ b/drivers/media/dvb-frontends/mxl5xx.c
@@ -1829,7 +1829,7 @@ struct dvb_frontend *mxl5xx_attach(struct i2c_adapter *i2c,
 	struct mxl *state;
 	struct mxl_base *base;

-	state = kzalloc(sizeof(struct mxl), GFP_KERNEL);
+	state = kzalloc_obj(struct mxl, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -1845,7 +1845,7 @@ struct dvb_frontend *mxl5xx_attach(struct i2c_adapter *i2c,
 			goto fail;
 		state->base = base;
 	} else {
-		base = kzalloc(sizeof(struct mxl_base), GFP_KERNEL);
+		base = kzalloc_obj(struct mxl_base, GFP_KERNEL);
 		if (!base)
 			goto fail;
 		base->i2c = i2c;
diff --git a/drivers/media/dvb-frontends/mxl692.c b/drivers/media/dvb-frontends/mxl692.c
index bbc2bc778225..68455628b03d 100644
--- a/drivers/media/dvb-frontends/mxl692.c
+++ b/drivers/media/dvb-frontends/mxl692.c
@@ -1314,7 +1314,7 @@ static int mxl692_probe(struct i2c_client *client)
 	struct mxl692_dev *dev;
 	int ret = 0;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		dev_dbg(&client->dev, "kzalloc() failed\n");
diff --git a/drivers/media/dvb-frontends/nxt200x.c b/drivers/media/dvb-frontends/nxt200x.c
index 1c549ada6ebf..5b0762938c86 100644
--- a/drivers/media/dvb-frontends/nxt200x.c
+++ b/drivers/media/dvb-frontends/nxt200x.c
@@ -1128,7 +1128,7 @@ struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config,
 	u8 buf [] = {0,0,0,0,0};

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct nxt200x_state), GFP_KERNEL);
+	state = kzalloc_obj(struct nxt200x_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/nxt6000.c b/drivers/media/dvb-frontends/nxt6000.c
index e8d4940370dd..ed12ef9cd9df 100644
--- a/drivers/media/dvb-frontends/nxt6000.c
+++ b/drivers/media/dvb-frontends/nxt6000.c
@@ -560,7 +560,7 @@ struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config,
 	struct nxt6000_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct nxt6000_state), GFP_KERNEL);
+	state = kzalloc_obj(struct nxt6000_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/or51132.c b/drivers/media/dvb-frontends/or51132.c
index 74e04c7cca1e..4b0063823736 100644
--- a/drivers/media/dvb-frontends/or51132.c
+++ b/drivers/media/dvb-frontends/or51132.c
@@ -552,7 +552,7 @@ struct dvb_frontend* or51132_attach(const struct or51132_config* config,
 	struct or51132_state* state = NULL;

 	/* Allocate memory for the internal state */
-	state = kzalloc(sizeof(struct or51132_state), GFP_KERNEL);
+	state = kzalloc_obj(struct or51132_state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/or51211.c b/drivers/media/dvb-frontends/or51211.c
index 2e8e7071a67a..2a52b1dc9d0a 100644
--- a/drivers/media/dvb-frontends/or51211.c
+++ b/drivers/media/dvb-frontends/or51211.c
@@ -501,7 +501,7 @@ struct dvb_frontend* or51211_attach(const struct or51211_config* config,
 	struct or51211_state* state = NULL;

 	/* Allocate memory for the internal state */
-	state = kzalloc(sizeof(struct or51211_state), GFP_KERNEL);
+	state = kzalloc_obj(struct or51211_state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/rtl2830.c b/drivers/media/dvb-frontends/rtl2830.c
index aa4ef9aedf17..ee6ba9b7c016 100644
--- a/drivers/media/dvb-frontends/rtl2830.c
+++ b/drivers/media/dvb-frontends/rtl2830.c
@@ -807,7 +807,7 @@ static int rtl2830_probe(struct i2c_client *client)
 	}

 	/* allocate memory for the internal state */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/rtl2832.c b/drivers/media/dvb-frontends/rtl2832.c
index 3b4e46dac1bf..19ec892debb7 100644
--- a/drivers/media/dvb-frontends/rtl2832.c
+++ b/drivers/media/dvb-frontends/rtl2832.c
@@ -1043,7 +1043,7 @@ static int rtl2832_probe(struct i2c_client *client)
 	dev_dbg(&client->dev, "\n");

 	/* allocate memory for the internal state */
-	dev = kzalloc(sizeof(struct rtl2832_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct rtl2832_dev, GFP_KERNEL);
 	if (dev == NULL) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/rtl2832_sdr.c b/drivers/media/dvb-frontends/rtl2832_sdr.c
index 0357624968f1..5a59bdde8f7b 100644
--- a/drivers/media/dvb-frontends/rtl2832_sdr.c
+++ b/drivers/media/dvb-frontends/rtl2832_sdr.c
@@ -1330,7 +1330,7 @@ static int rtl2832_sdr_probe(struct platform_device *pdev)
 		ret = -EINVAL;
 		goto err;
 	}
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		ret = -ENOMEM;
 		goto err_module_put;
diff --git a/drivers/media/dvb-frontends/s5h1409.c b/drivers/media/dvb-frontends/s5h1409.c
index 28b1dca077ea..33f820e2d6d3 100644
--- a/drivers/media/dvb-frontends/s5h1409.c
+++ b/drivers/media/dvb-frontends/s5h1409.c
@@ -946,7 +946,7 @@ struct dvb_frontend *s5h1409_attach(const struct s5h1409_config *config,
 	u16 reg;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct s5h1409_state), GFP_KERNEL);
+	state = kzalloc_obj(struct s5h1409_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/s5h1411.c b/drivers/media/dvb-frontends/s5h1411.c
index fc48e659c2d8..c6379da7361e 100644
--- a/drivers/media/dvb-frontends/s5h1411.c
+++ b/drivers/media/dvb-frontends/s5h1411.c
@@ -861,7 +861,7 @@ struct dvb_frontend *s5h1411_attach(const struct s5h1411_config *config,
 	u16 reg;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct s5h1411_state), GFP_KERNEL);
+	state = kzalloc_obj(struct s5h1411_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/s5h1420.c b/drivers/media/dvb-frontends/s5h1420.c
index d700de1ea6c2..623900e732c1 100644
--- a/drivers/media/dvb-frontends/s5h1420.c
+++ b/drivers/media/dvb-frontends/s5h1420.c
@@ -872,7 +872,8 @@ struct dvb_frontend *s5h1420_attach(const struct s5h1420_config *config,
 				    struct i2c_adapter *i2c)
 {
 	/* allocate memory for the internal state */
-	struct s5h1420_state *state = kzalloc(sizeof(struct s5h1420_state), GFP_KERNEL);
+	struct s5h1420_state *state = kzalloc_obj(struct s5h1420_state,
+						  GFP_KERNEL);
 	u8 i;

 	if (state == NULL)
diff --git a/drivers/media/dvb-frontends/s5h1432.c b/drivers/media/dvb-frontends/s5h1432.c
index ff5d3bdf3bc6..6261df9f383c 100644
--- a/drivers/media/dvb-frontends/s5h1432.c
+++ b/drivers/media/dvb-frontends/s5h1432.c
@@ -337,7 +337,7 @@ struct dvb_frontend *s5h1432_attach(const struct s5h1432_config *config,

 	printk(KERN_INFO " Enter s5h1432_attach(). attach success!\n");
 	/* allocate memory for the internal state */
-	state = kmalloc(sizeof(struct s5h1432_state), GFP_KERNEL);
+	state = kmalloc_obj(struct s5h1432_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/s921.c b/drivers/media/dvb-frontends/s921.c
index 7e461ac159fc..6d38c9742f1d 100644
--- a/drivers/media/dvb-frontends/s921.c
+++ b/drivers/media/dvb-frontends/s921.c
@@ -476,7 +476,7 @@ struct dvb_frontend *s921_attach(const struct s921_config *config,
 {
 	/* allocate memory for the internal state */
 	struct s921_state *state =
-		kzalloc(sizeof(struct s921_state), GFP_KERNEL);
+		kzalloc_obj(struct s921_state, GFP_KERNEL);

 	dprintk("\n");
 	if (!state) {
diff --git a/drivers/media/dvb-frontends/si2165.c b/drivers/media/dvb-frontends/si2165.c
index f87c9357cee3..cb6802b81e41 100644
--- a/drivers/media/dvb-frontends/si2165.c
+++ b/drivers/media/dvb-frontends/si2165.c
@@ -1158,7 +1158,7 @@ static int si2165_probe(struct i2c_client *client)
 	};

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state) {
 		ret = -ENOMEM;
 		goto error;
diff --git a/drivers/media/dvb-frontends/si2168.c b/drivers/media/dvb-frontends/si2168.c
index d6b6b8bc7d4e..f7a1d2fc3cfb 100644
--- a/drivers/media/dvb-frontends/si2168.c
+++ b/drivers/media/dvb-frontends/si2168.c
@@ -681,7 +681,7 @@ static int si2168_probe(struct i2c_client *client)

 	dev_dbg(&client->dev, "\n");

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/si21xx.c b/drivers/media/dvb-frontends/si21xx.c
index 210ccd356e2b..ac50df3c40fb 100644
--- a/drivers/media/dvb-frontends/si21xx.c
+++ b/drivers/media/dvb-frontends/si21xx.c
@@ -902,7 +902,7 @@ struct dvb_frontend *si21xx_attach(const struct si21xx_config *config,
 	dprintk("%s\n", __func__);

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct si21xx_state), GFP_KERNEL);
+	state = kzalloc_obj(struct si21xx_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/sp2.c b/drivers/media/dvb-frontends/sp2.c
index 75adf2a4589f..50103c4a36f9 100644
--- a/drivers/media/dvb-frontends/sp2.c
+++ b/drivers/media/dvb-frontends/sp2.c
@@ -371,7 +371,7 @@ static int sp2_probe(struct i2c_client *client)

 	dev_dbg(&client->dev, "\n");

-	s = kzalloc(sizeof(*s), GFP_KERNEL);
+	s = kzalloc_obj(*s, GFP_KERNEL);
 	if (!s) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/sp887x.c b/drivers/media/dvb-frontends/sp887x.c
index f59c0f96416b..235ecfd45376 100644
--- a/drivers/media/dvb-frontends/sp887x.c
+++ b/drivers/media/dvb-frontends/sp887x.c
@@ -568,7 +568,7 @@ struct dvb_frontend* sp887x_attach(const struct sp887x_config* config,
 	struct sp887x_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct sp887x_state), GFP_KERNEL);
+	state = kzalloc_obj(struct sp887x_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/stb0899_drv.c b/drivers/media/dvb-frontends/stb0899_drv.c
index 35634f9a8ab5..19a31a296e0f 100644
--- a/drivers/media/dvb-frontends/stb0899_drv.c
+++ b/drivers/media/dvb-frontends/stb0899_drv.c
@@ -1613,7 +1613,7 @@ struct dvb_frontend *stb0899_attach(struct stb0899_config *config, struct i2c_ad
 {
 	struct stb0899_state *state = NULL;

-	state = kzalloc(sizeof (struct stb0899_state), GFP_KERNEL);
+	state = kzalloc_obj(struct stb0899_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/stb6000.c b/drivers/media/dvb-frontends/stb6000.c
index d74e34677b92..85900e616490 100644
--- a/drivers/media/dvb-frontends/stb6000.c
+++ b/drivers/media/dvb-frontends/stb6000.c
@@ -218,7 +218,7 @@ struct dvb_frontend *stb6000_attach(struct dvb_frontend *fe, int addr,
 	if (ret != 2)
 		return NULL;

-	priv = kzalloc(sizeof(struct stb6000_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct stb6000_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/stb6100.c b/drivers/media/dvb-frontends/stb6100.c
index c5818a15a0d7..97238cf98067 100644
--- a/drivers/media/dvb-frontends/stb6100.c
+++ b/drivers/media/dvb-frontends/stb6100.c
@@ -534,7 +534,7 @@ struct dvb_frontend *stb6100_attach(struct dvb_frontend *fe,
 {
 	struct stb6100_state *state = NULL;

-	state = kzalloc(sizeof (struct stb6100_state), GFP_KERNEL);
+	state = kzalloc_obj(struct stb6100_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/stv0288.c b/drivers/media/dvb-frontends/stv0288.c
index a5581bd60f9e..40648b74edd4 100644
--- a/drivers/media/dvb-frontends/stv0288.c
+++ b/drivers/media/dvb-frontends/stv0288.c
@@ -557,7 +557,7 @@ struct dvb_frontend *stv0288_attach(const struct stv0288_config *config,
 	int id;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct stv0288_state), GFP_KERNEL);
+	state = kzalloc_obj(struct stv0288_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/stv0297.c b/drivers/media/dvb-frontends/stv0297.c
index 9d4dbd99a5a7..c0634e2436b3 100644
--- a/drivers/media/dvb-frontends/stv0297.c
+++ b/drivers/media/dvb-frontends/stv0297.c
@@ -654,7 +654,7 @@ struct dvb_frontend *stv0297_attach(const struct stv0297_config *config,
 	struct stv0297_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct stv0297_state), GFP_KERNEL);
+	state = kzalloc_obj(struct stv0297_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/stv0299.c b/drivers/media/dvb-frontends/stv0299.c
index ba4bb3685095..cc15bb93b7dc 100644
--- a/drivers/media/dvb-frontends/stv0299.c
+++ b/drivers/media/dvb-frontends/stv0299.c
@@ -671,7 +671,7 @@ struct dvb_frontend* stv0299_attach(const struct stv0299_config* config,
 	int id;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct stv0299_state), GFP_KERNEL);
+	state = kzalloc_obj(struct stv0299_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/stv0367.c b/drivers/media/dvb-frontends/stv0367.c
index 72540ef4e5f8..cf6b1b646b10 100644
--- a/drivers/media/dvb-frontends/stv0367.c
+++ b/drivers/media/dvb-frontends/stv0367.c
@@ -1698,10 +1698,10 @@ struct dvb_frontend *stv0367ter_attach(const struct stv0367_config *config,
 	struct stv0367ter_state *ter_state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct stv0367_state), GFP_KERNEL);
+	state = kzalloc_obj(struct stv0367_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;
-	ter_state = kzalloc(sizeof(struct stv0367ter_state), GFP_KERNEL);
+	ter_state = kzalloc_obj(struct stv0367ter_state, GFP_KERNEL);
 	if (ter_state == NULL)
 		goto error;

@@ -2865,10 +2865,10 @@ struct dvb_frontend *stv0367cab_attach(const struct stv0367_config *config,
 	struct stv0367cab_state *cab_state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct stv0367_state), GFP_KERNEL);
+	state = kzalloc_obj(struct stv0367_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;
-	cab_state = kzalloc(sizeof(struct stv0367cab_state), GFP_KERNEL);
+	cab_state = kzalloc_obj(struct stv0367cab_state, GFP_KERNEL);
 	if (cab_state == NULL)
 		goto error;

@@ -3274,13 +3274,13 @@ struct dvb_frontend *stv0367ddb_attach(const struct stv0367_config *config,
 	struct stv0367cab_state *cab_state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct stv0367_state), GFP_KERNEL);
+	state = kzalloc_obj(struct stv0367_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;
-	ter_state = kzalloc(sizeof(struct stv0367ter_state), GFP_KERNEL);
+	ter_state = kzalloc_obj(struct stv0367ter_state, GFP_KERNEL);
 	if (ter_state == NULL)
 		goto error;
-	cab_state = kzalloc(sizeof(struct stv0367cab_state), GFP_KERNEL);
+	cab_state = kzalloc_obj(struct stv0367cab_state, GFP_KERNEL);
 	if (cab_state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/stv0900_core.c b/drivers/media/dvb-frontends/stv0900_core.c
index e7b9b9b11d7d..3f1edc8559c5 100644
--- a/drivers/media/dvb-frontends/stv0900_core.c
+++ b/drivers/media/dvb-frontends/stv0900_core.c
@@ -85,14 +85,14 @@ static struct stv0900_inode *append_internal(struct stv0900_internal *internal)
 	struct stv0900_inode *new_node = stv0900_first_inode;

 	if (new_node == NULL) {
-		new_node = kmalloc(sizeof(struct stv0900_inode), GFP_KERNEL);
+		new_node = kmalloc_obj(struct stv0900_inode, GFP_KERNEL);
 		stv0900_first_inode = new_node;
 	} else {
 		while (new_node->next_inode != NULL)
 			new_node = new_node->next_inode;

-		new_node->next_inode = kmalloc(sizeof(struct stv0900_inode),
-								GFP_KERNEL);
+		new_node->next_inode = kmalloc_obj(struct stv0900_inode,
+						   GFP_KERNEL);
 		if (new_node->next_inode != NULL)
 			new_node = new_node->next_inode;
 		else
@@ -1348,8 +1348,8 @@ static enum fe_stv0900_error stv0900_init_internal(struct dvb_frontend *fe,
 		dprintk("%s: Find Internal Structure!\n", __func__);
 		return STV0900_NO_ERROR;
 	} else {
-		state->internal = kmalloc(sizeof(struct stv0900_internal),
-								GFP_KERNEL);
+		state->internal = kmalloc_obj(struct stv0900_internal,
+					      GFP_KERNEL);
 		if (state->internal == NULL)
 			return STV0900_INVALID_HANDLE;
 		temp_int = append_internal(state->internal);
@@ -1903,7 +1903,7 @@ struct dvb_frontend *stv0900_attach(const struct stv0900_config *config,
 	struct stv0900_init_params init_params;
 	enum fe_stv0900_error err_stv0900;

-	state = kzalloc(sizeof(struct stv0900_state), GFP_KERNEL);
+	state = kzalloc_obj(struct stv0900_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/stv090x.c b/drivers/media/dvb-frontends/stv090x.c
index f273efa330cf..16ff5c8cf417 100644
--- a/drivers/media/dvb-frontends/stv090x.c
+++ b/drivers/media/dvb-frontends/stv090x.c
@@ -85,7 +85,7 @@ static struct stv090x_dev *append_internal(struct stv090x_internal *internal)
 	struct stv090x_dev *new_dev;
 	struct stv090x_dev *temp_dev;

-	new_dev = kmalloc(sizeof(struct stv090x_dev), GFP_KERNEL);
+	new_dev = kmalloc_obj(struct stv090x_dev, GFP_KERNEL);
 	if (new_dev != NULL) {
 		new_dev->internal = internal;
 		new_dev->next_dev = NULL;
@@ -4906,7 +4906,7 @@ static int stv090x_setup_compound(struct stv090x_state *state)
 		state->internal->num_used++;
 		dprintk(FE_INFO, 1, "Found Internal Structure!");
 	} else {
-		state->internal = kmalloc(sizeof(*state->internal), GFP_KERNEL);
+		state->internal = kmalloc_obj(*state->internal, GFP_KERNEL);
 		if (!state->internal)
 			goto error;
 		temp_int = append_internal(state->internal);
@@ -5002,7 +5002,7 @@ static int stv090x_probe(struct i2c_client *client)

 	struct stv090x_state *state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state) {
 		ret = -ENOMEM;
 		goto error;
@@ -5050,7 +5050,7 @@ struct dvb_frontend *stv090x_attach(struct stv090x_config *config,
 	int ret = 0;
 	struct stv090x_state *state = NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		goto error;

diff --git a/drivers/media/dvb-frontends/stv0910.c b/drivers/media/dvb-frontends/stv0910.c
index 069dec75129c..666562f7ca17 100644
--- a/drivers/media/dvb-frontends/stv0910.c
+++ b/drivers/media/dvb-frontends/stv0910.c
@@ -1766,7 +1766,7 @@ struct dvb_frontend *stv0910_attach(struct i2c_adapter *i2c,
 	struct stv *state;
 	struct stv_base *base;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;

@@ -1788,7 +1788,7 @@ struct dvb_frontend *stv0910_attach(struct i2c_adapter *i2c,
 		base->count++;
 		state->base = base;
 	} else {
-		base = kzalloc(sizeof(*base), GFP_KERNEL);
+		base = kzalloc_obj(*base, GFP_KERNEL);
 		if (!base)
 			goto fail;
 		base->i2c = i2c;
diff --git a/drivers/media/dvb-frontends/stv6110.c b/drivers/media/dvb-frontends/stv6110.c
index 1cf9c095dbff..beb1c832a13d 100644
--- a/drivers/media/dvb-frontends/stv6110.c
+++ b/drivers/media/dvb-frontends/stv6110.c
@@ -408,7 +408,7 @@ struct dvb_frontend *stv6110_attach(struct dvb_frontend *fe,
 	if (ret != 1)
 		return NULL;

-	priv = kzalloc(sizeof(struct stv6110_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct stv6110_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/stv6110x.c b/drivers/media/dvb-frontends/stv6110x.c
index 33c8105da1c3..4122f7655b0a 100644
--- a/drivers/media/dvb-frontends/stv6110x.c
+++ b/drivers/media/dvb-frontends/stv6110x.c
@@ -412,7 +412,7 @@ static int stv6110x_probe(struct i2c_client *client)

 	struct stv6110x_state *stv6110x;

-	stv6110x = kzalloc(sizeof(*stv6110x), GFP_KERNEL);
+	stv6110x = kzalloc_obj(*stv6110x, GFP_KERNEL);
 	if (!stv6110x)
 		return -ENOMEM;

@@ -448,7 +448,7 @@ const struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
 {
 	struct stv6110x_state *stv6110x;

-	stv6110x = kzalloc(sizeof(*stv6110x), GFP_KERNEL);
+	stv6110x = kzalloc_obj(*stv6110x, GFP_KERNEL);
 	if (!stv6110x)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/stv6111.c b/drivers/media/dvb-frontends/stv6111.c
index 0ac15273922d..d367ee7f3cbe 100644
--- a/drivers/media/dvb-frontends/stv6111.c
+++ b/drivers/media/dvb-frontends/stv6111.c
@@ -653,7 +653,7 @@ struct dvb_frontend *stv6111_attach(struct dvb_frontend *fe,
 	int stat = -ENODEV;
 	int gatestat = 0;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;
 	state->adr = adr;
diff --git a/drivers/media/dvb-frontends/tc90522.c b/drivers/media/dvb-frontends/tc90522.c
index 1f8cbf45554a..3ac0b7a0844f 100644
--- a/drivers/media/dvb-frontends/tc90522.c
+++ b/drivers/media/dvb-frontends/tc90522.c
@@ -647,7 +647,7 @@ tc90522_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
 	for (i = 0; i < num; i++)
 		if (msgs[i].flags & I2C_M_RD)
 			rd_num++;
-	new_msgs = kmalloc_array(num + rd_num, sizeof(*new_msgs), GFP_KERNEL);
+	new_msgs = kmalloc_objs(*new_msgs, num + rd_num, GFP_KERNEL);
 	if (!new_msgs)
 		return -ENOMEM;

@@ -788,7 +788,7 @@ static int tc90522_probe(struct i2c_client *client)
 	struct i2c_adapter *adap;
 	int ret;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;
 	state->i2c_client = client;
diff --git a/drivers/media/dvb-frontends/tda10021.c b/drivers/media/dvb-frontends/tda10021.c
index 462e12ab6bd1..9a950ee9562e 100644
--- a/drivers/media/dvb-frontends/tda10021.c
+++ b/drivers/media/dvb-frontends/tda10021.c
@@ -451,7 +451,7 @@ struct dvb_frontend* tda10021_attach(const struct tda1002x_config* config,
 	u8 id;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct tda10021_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda10021_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/tda10023.c b/drivers/media/dvb-frontends/tda10023.c
index 4c2541ecd743..c8b1cc0f7abb 100644
--- a/drivers/media/dvb-frontends/tda10023.c
+++ b/drivers/media/dvb-frontends/tda10023.c
@@ -511,7 +511,7 @@ struct dvb_frontend *tda10023_attach(const struct tda10023_config *config,
 	struct tda10023_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct tda10023_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda10023_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/tda10048.c b/drivers/media/dvb-frontends/tda10048.c
index 1f87eb0dcf2a..fe9685cbf7a5 100644
--- a/drivers/media/dvb-frontends/tda10048.c
+++ b/drivers/media/dvb-frontends/tda10048.c
@@ -1097,7 +1097,7 @@ struct dvb_frontend *tda10048_attach(const struct tda10048_config *config,
 	dprintk(1, "%s()\n", __func__);

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct tda10048_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda10048_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/tda1004x.c b/drivers/media/dvb-frontends/tda1004x.c
index 6f306db6c615..0a1bf80211d3 100644
--- a/drivers/media/dvb-frontends/tda1004x.c
+++ b/drivers/media/dvb-frontends/tda1004x.c
@@ -1271,7 +1271,7 @@ struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config,
 	int id;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct tda1004x_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda1004x_state, GFP_KERNEL);
 	if (!state) {
 		printk(KERN_ERR "Can't allocate memory for tda10045 state\n");
 		return NULL;
@@ -1341,7 +1341,7 @@ struct dvb_frontend* tda10046_attach(const struct tda1004x_config* config,
 	int id;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct tda1004x_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda1004x_state, GFP_KERNEL);
 	if (!state) {
 		printk(KERN_ERR "Can't allocate memory for tda10046 state\n");
 		return NULL;
diff --git a/drivers/media/dvb-frontends/tda10071.c b/drivers/media/dvb-frontends/tda10071.c
index e23794b821cd..430702da6e79 100644
--- a/drivers/media/dvb-frontends/tda10071.c
+++ b/drivers/media/dvb-frontends/tda10071.c
@@ -1156,7 +1156,7 @@ static int tda10071_probe(struct i2c_client *client)
 		.val_bits = 8,
 	};

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/tda10086.c b/drivers/media/dvb-frontends/tda10086.c
index b449514ae585..5e63ded2cfbf 100644
--- a/drivers/media/dvb-frontends/tda10086.c
+++ b/drivers/media/dvb-frontends/tda10086.c
@@ -737,7 +737,7 @@ struct dvb_frontend* tda10086_attach(const struct tda10086_config* config,
 	dprintk ("%s\n", __func__);

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct tda10086_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda10086_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/tda18271c2dd.c b/drivers/media/dvb-frontends/tda18271c2dd.c
index c11563853c07..f10d74ff192c 100644
--- a/drivers/media/dvb-frontends/tda18271c2dd.c
+++ b/drivers/media/dvb-frontends/tda18271c2dd.c
@@ -1215,7 +1215,7 @@ struct dvb_frontend *tda18271c2dd_attach(struct dvb_frontend *fe,
 {
 	struct tda_state *state;

-	state = kzalloc(sizeof(struct tda_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/tda665x.c b/drivers/media/dvb-frontends/tda665x.c
index 346be5011fb7..f9dcbb69e949 100644
--- a/drivers/media/dvb-frontends/tda665x.c
+++ b/drivers/media/dvb-frontends/tda665x.c
@@ -207,7 +207,7 @@ struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
 	struct tda665x_state *state = NULL;
 	struct dvb_tuner_info *info;

-	state = kzalloc(sizeof(struct tda665x_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda665x_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/tda8083.c b/drivers/media/dvb-frontends/tda8083.c
index 44f53624557b..c9f280cdd7db 100644
--- a/drivers/media/dvb-frontends/tda8083.c
+++ b/drivers/media/dvb-frontends/tda8083.c
@@ -417,7 +417,7 @@ struct dvb_frontend* tda8083_attach(const struct tda8083_config* config,
 	struct tda8083_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct tda8083_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda8083_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/tda8261.c b/drivers/media/dvb-frontends/tda8261.c
index 8b06f92745dc..73c90442f403 100644
--- a/drivers/media/dvb-frontends/tda8261.c
+++ b/drivers/media/dvb-frontends/tda8261.c
@@ -168,7 +168,7 @@ struct dvb_frontend *tda8261_attach(struct dvb_frontend *fe,
 {
 	struct tda8261_state *state = NULL;

-	if ((state = kzalloc(sizeof (struct tda8261_state), GFP_KERNEL)) == NULL)
+	if ((state = kzalloc_obj(struct tda8261_state, GFP_KERNEL)) == NULL)
 		goto exit;

 	state->config		= config;
diff --git a/drivers/media/dvb-frontends/tda826x.c b/drivers/media/dvb-frontends/tda826x.c
index eafcf5f7da3d..b51da4053ef5 100644
--- a/drivers/media/dvb-frontends/tda826x.c
+++ b/drivers/media/dvb-frontends/tda826x.c
@@ -150,7 +150,7 @@ struct dvb_frontend *tda826x_attach(struct dvb_frontend *fe, int addr, struct i2
 	if (!(b1[1] & 0x80))
 		return NULL;

-	priv = kzalloc(sizeof(struct tda826x_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct tda826x_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/ts2020.c b/drivers/media/dvb-frontends/ts2020.c
index e25add6cc38e..2368214781a6 100644
--- a/drivers/media/dvb-frontends/ts2020.c
+++ b/drivers/media/dvb-frontends/ts2020.c
@@ -566,7 +566,7 @@ static int ts2020_probe(struct i2c_client *client)
 	}

 	fe = pdata->fe;
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/tua6100.c b/drivers/media/dvb-frontends/tua6100.c
index 41dd9b6d3190..2d052bfb8a23 100644
--- a/drivers/media/dvb-frontends/tua6100.c
+++ b/drivers/media/dvb-frontends/tua6100.c
@@ -175,7 +175,7 @@ struct dvb_frontend *tua6100_attach(struct dvb_frontend *fe, int addr, struct i2
 	if (ret != 2)
 		return NULL;

-	priv = kzalloc(sizeof(struct tua6100_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct tua6100_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/ves1820.c b/drivers/media/dvb-frontends/ves1820.c
index ee5620e731e9..56bbd52d1783 100644
--- a/drivers/media/dvb-frontends/ves1820.c
+++ b/drivers/media/dvb-frontends/ves1820.c
@@ -366,7 +366,7 @@ struct dvb_frontend* ves1820_attach(const struct ves1820_config* config,
 	struct ves1820_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct ves1820_state), GFP_KERNEL);
+	state = kzalloc_obj(struct ves1820_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/ves1x93.c b/drivers/media/dvb-frontends/ves1x93.c
index c60e21d26b88..5c8abcebbd88 100644
--- a/drivers/media/dvb-frontends/ves1x93.c
+++ b/drivers/media/dvb-frontends/ves1x93.c
@@ -450,7 +450,7 @@ struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config,
 	u8 identity;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct ves1x93_state), GFP_KERNEL);
+	state = kzalloc_obj(struct ves1x93_state, GFP_KERNEL);
 	if (state == NULL) goto error;

 	/* setup the state */
diff --git a/drivers/media/dvb-frontends/zd1301_demod.c b/drivers/media/dvb-frontends/zd1301_demod.c
index e8b9e67a8717..0c244fd17623 100644
--- a/drivers/media/dvb-frontends/zd1301_demod.c
+++ b/drivers/media/dvb-frontends/zd1301_demod.c
@@ -470,7 +470,7 @@ static int zd1301_demod_probe(struct platform_device *pdev)
 		goto err;
 	}

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/dvb-frontends/zl10036.c b/drivers/media/dvb-frontends/zl10036.c
index 5ad987c6861b..3d05828e499a 100644
--- a/drivers/media/dvb-frontends/zl10036.c
+++ b/drivers/media/dvb-frontends/zl10036.c
@@ -457,7 +457,7 @@ struct dvb_frontend *zl10036_attach(struct dvb_frontend *fe,
 		return NULL;
 	}

-	state = kzalloc(sizeof(struct zl10036_state), GFP_KERNEL);
+	state = kzalloc_obj(struct zl10036_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/dvb-frontends/zl10039.c b/drivers/media/dvb-frontends/zl10039.c
index a3e4d219400c..54e1e4267c1d 100644
--- a/drivers/media/dvb-frontends/zl10039.c
+++ b/drivers/media/dvb-frontends/zl10039.c
@@ -254,7 +254,7 @@ struct dvb_frontend *zl10039_attach(struct dvb_frontend *fe,
 	struct zl10039_state *state = NULL;

 	dprintk("%s\n", __func__);
-	state = kmalloc(sizeof(struct zl10039_state), GFP_KERNEL);
+	state = kmalloc_obj(struct zl10039_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/dvb-frontends/zl10353.c b/drivers/media/dvb-frontends/zl10353.c
index 8849d05475c2..a9f23b142301 100644
--- a/drivers/media/dvb-frontends/zl10353.c
+++ b/drivers/media/dvb-frontends/zl10353.c
@@ -598,7 +598,7 @@ struct dvb_frontend *zl10353_attach(const struct zl10353_config *config,
 	int id;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct zl10353_state), GFP_KERNEL);
+	state = kzalloc_obj(struct zl10353_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/firewire/firedtv-fw.c b/drivers/media/firewire/firedtv-fw.c
index 5f6e97a8d1c0..5ee96f290fef 100644
--- a/drivers/media/firewire/firedtv-fw.c
+++ b/drivers/media/firewire/firedtv-fw.c
@@ -135,7 +135,7 @@ int fdtv_start_iso(struct firedtv *fdtv)
 	struct fw_device *device = device_of(fdtv);
 	int i, err;

-	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -255,7 +255,7 @@ static int node_probe(struct fw_unit *unit, const struct ieee1394_device_id *id)
 	char name[MAX_MODEL_NAME_LEN];
 	int name_len, i, err;

-	fdtv = kzalloc(sizeof(*fdtv), GFP_KERNEL);
+	fdtv = kzalloc_obj(*fdtv, GFP_KERNEL);
 	if (!fdtv)
 		return -ENOMEM;

diff --git a/drivers/media/i2c/alvium-csi2.c b/drivers/media/i2c/alvium-csi2.c
index 1f088acecf36..c063da7d568d 100644
--- a/drivers/media/i2c/alvium-csi2.c
+++ b/drivers/media/i2c/alvium-csi2.c
@@ -1094,7 +1094,7 @@ static int alvium_setup_mipi_fmt(struct alvium_dev *alvium)
 	/* init alvium_csi2_fmt array */
 	alvium->alvium_csi2_fmt_n = sz;
 	alvium->alvium_csi2_fmt =
-		kmalloc_array(sz, sizeof(struct alvium_pixfmt), GFP_KERNEL);
+		kmalloc_objs(struct alvium_pixfmt, sz, GFP_KERNEL);
 	if (!alvium->alvium_csi2_fmt)
 		return -ENOMEM;

diff --git a/drivers/media/i2c/cs3308.c b/drivers/media/i2c/cs3308.c
index 078e0066ce4b..cc4bd7fd7cdb 100644
--- a/drivers/media/i2c/cs3308.c
+++ b/drivers/media/i2c/cs3308.c
@@ -79,7 +79,7 @@ static int cs3308_probe(struct i2c_client *client)
 	v4l_info(client, "chip found @ 0x%x (%s)\n",
 		 client->addr << 1, client->adapter->name);

-	sd = kzalloc(sizeof(struct v4l2_subdev), GFP_KERNEL);
+	sd = kzalloc_obj(struct v4l2_subdev, GFP_KERNEL);
 	if (sd == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/i2c/ds90ub960.c b/drivers/media/i2c/ds90ub960.c
index 3156f6d6c6de..98f45dcad667 100644
--- a/drivers/media/i2c/ds90ub960.c
+++ b/drivers/media/i2c/ds90ub960.c
@@ -1379,7 +1379,7 @@ static int ub960_parse_dt_txport(struct ub960_data *priv,
 	struct ub960_txport *txport;
 	int ret;

-	txport = kzalloc(sizeof(*txport), GFP_KERNEL);
+	txport = kzalloc_obj(*txport, GFP_KERNEL);
 	if (!txport)
 		return -ENOMEM;

@@ -4573,7 +4573,7 @@ static int ub960_parse_dt_rxport(struct ub960_data *priv, unsigned int nport,
 	struct ub960_rxport *rxport;
 	int ret;

-	rxport = kzalloc(sizeof(*rxport), GFP_KERNEL);
+	rxport = kzalloc_obj(*rxport, GFP_KERNEL);
 	if (!rxport)
 		return -ENOMEM;

diff --git a/drivers/media/i2c/tda1997x.c b/drivers/media/i2c/tda1997x.c
index 3532766cd795..bf4f7b44d42e 100644
--- a/drivers/media/i2c/tda1997x.c
+++ b/drivers/media/i2c/tda1997x.c
@@ -2538,7 +2538,7 @@ static int tda1997x_probe(struct i2c_client *client)
 	if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return -EIO;

-	state = kzalloc(sizeof(struct tda1997x_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tda1997x_state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

diff --git a/drivers/media/i2c/video-i2c.c b/drivers/media/i2c/video-i2c.c
index 1eee2d4f5b40..eebca7a0fb9b 100644
--- a/drivers/media/i2c/video-i2c.c
+++ b/drivers/media/i2c/video-i2c.c
@@ -750,7 +750,7 @@ static int video_i2c_probe(struct i2c_client *client)
 	struct vb2_queue *queue;
 	int ret = -ENODEV;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/media/mc/mc-dev-allocator.c b/drivers/media/mc/mc-dev-allocator.c
index ae17887dec59..b8a170aaee04 100644
--- a/drivers/media/mc/mc-dev-allocator.c
+++ b/drivers/media/mc/mc-dev-allocator.c
@@ -81,7 +81,7 @@ static struct media_device *__media_device_get(struct device *dev,
 		return &mdi->mdev;
 	}

-	mdi = kzalloc(sizeof(*mdi), GFP_KERNEL);
+	mdi = kzalloc_obj(*mdi, GFP_KERNEL);
 	if (!mdi)
 		return NULL;

diff --git a/drivers/media/mc/mc-device.c b/drivers/media/mc/mc-device.c
index 5a4465b290f0..a27afa530592 100644
--- a/drivers/media/mc/mc-device.c
+++ b/drivers/media/mc/mc-device.c
@@ -737,7 +737,7 @@ int __must_check __media_device_register(struct media_device *mdev,
 	struct media_devnode *devnode;
 	int ret;

-	devnode = kzalloc(sizeof(*devnode), GFP_KERNEL);
+	devnode = kzalloc_obj(*devnode, GFP_KERNEL);
 	if (!devnode)
 		return -ENOMEM;

diff --git a/drivers/media/mc/mc-entity.c b/drivers/media/mc/mc-entity.c
index 9519a537bfa2..a078488874b2 100644
--- a/drivers/media/mc/mc-entity.c
+++ b/drivers/media/mc/mc-entity.c
@@ -587,7 +587,7 @@ static int media_pipeline_add_pad(struct media_pipeline *pipe,
 		}
 	}

-	ppad = kzalloc(sizeof(*ppad), GFP_KERNEL);
+	ppad = kzalloc_obj(*ppad, GFP_KERNEL);
 	if (!ppad)
 		return -ENOMEM;

@@ -977,7 +977,7 @@ __must_check int media_pipeline_alloc_start(struct media_pad *pad)
 	 */
 	pipe = media_pad_pipeline(pad);
 	if (!pipe) {
-		new_pipe = kzalloc(sizeof(*new_pipe), GFP_KERNEL);
+		new_pipe = kzalloc_obj(*new_pipe, GFP_KERNEL);
 		if (!new_pipe) {
 			ret = -ENOMEM;
 			goto out;
@@ -1061,7 +1061,7 @@ static struct media_link *media_add_link(struct list_head *head)
 {
 	struct media_link *link;

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (link == NULL)
 		return NULL;

@@ -1547,7 +1547,7 @@ struct media_intf_devnode *media_devnode_create(struct media_device *mdev,
 {
 	struct media_intf_devnode *devnode;

-	devnode = kzalloc(sizeof(*devnode), GFP_KERNEL);
+	devnode = kzalloc_obj(*devnode, GFP_KERNEL);
 	if (!devnode)
 		return NULL;

diff --git a/drivers/media/mc/mc-request.c b/drivers/media/mc/mc-request.c
index 8ad10c72f9db..6668f44359ce 100644
--- a/drivers/media/mc/mc-request.c
+++ b/drivers/media/mc/mc-request.c
@@ -293,7 +293,7 @@ int media_request_alloc(struct media_device *mdev, int *alloc_fd)
 	if (mdev->ops->req_alloc)
 		req = mdev->ops->req_alloc(mdev);
 	else
-		req = kzalloc(sizeof(*req), GFP_KERNEL);
+		req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/media/mmc/siano/smssdio.c b/drivers/media/mmc/siano/smssdio.c
index 8199077faf36..8dc11576f4e8 100644
--- a/drivers/media/mmc/siano/smssdio.c
+++ b/drivers/media/mmc/siano/smssdio.c
@@ -244,7 +244,7 @@ static int smssdio_probe(struct sdio_func *func,

 	board_id = id->driver_data;

-	smsdev = kzalloc(sizeof(struct smssdio_device), GFP_KERNEL);
+	smsdev = kzalloc_obj(struct smssdio_device, GFP_KERNEL);
 	if (!smsdev)
 		return -ENOMEM;

diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c
index 17e4529e537a..26cc0f6b7571 100644
--- a/drivers/media/pci/bt8xx/bttv-driver.c
+++ b/drivers/media/pci/bt8xx/bttv-driver.c
@@ -3216,7 +3216,7 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)
 	if (bttv_num == BTTV_MAX)
 		return -ENOMEM;
 	pr_info("Bt8xx card found (%d)\n", bttv_num);
-	bttvs[bttv_num] = btv = kzalloc(sizeof(*btv), GFP_KERNEL);
+	bttvs[bttv_num] = btv = kzalloc_obj(*btv, GFP_KERNEL);
 	if (btv == NULL) {
 		pr_err("out of memory\n");
 		return -ENOMEM;
diff --git a/drivers/media/pci/bt8xx/bttv-gpio.c b/drivers/media/pci/bt8xx/bttv-gpio.c
index 59a6f160aac7..5b4c6336d2d5 100644
--- a/drivers/media/pci/bt8xx/bttv-gpio.c
+++ b/drivers/media/pci/bt8xx/bttv-gpio.c
@@ -73,7 +73,7 @@ int bttv_sub_add_device(struct bttv_core *core, char *name)
 	struct bttv_sub_device *sub;
 	int err;

-	sub = kzalloc(sizeof(*sub),GFP_KERNEL);
+	sub = kzalloc_obj(*sub, GFP_KERNEL);
 	if (NULL == sub)
 		return -ENOMEM;

diff --git a/drivers/media/pci/bt8xx/bttv-input.c b/drivers/media/pci/bt8xx/bttv-input.c
index 84aa269248fd..45e30ebdc5f8 100644
--- a/drivers/media/pci/bt8xx/bttv-input.c
+++ b/drivers/media/pci/bt8xx/bttv-input.c
@@ -416,7 +416,7 @@ int bttv_input_init(struct bttv *btv)
 	if (!btv->has_remote)
 		return -ENODEV;

-	ir = kzalloc(sizeof(*ir),GFP_KERNEL);
+	ir = kzalloc_obj(*ir, GFP_KERNEL);
 	rc = rc_allocate_device(RC_DRIVER_SCANCODE);
 	if (!ir || !rc)
 		goto err_out_free;
diff --git a/drivers/media/pci/bt8xx/dst_ca.c b/drivers/media/pci/bt8xx/dst_ca.c
index a9cc6e7a57f9..f26ece10d926 100644
--- a/drivers/media/pci/bt8xx/dst_ca.c
+++ b/drivers/media/pci/bt8xx/dst_ca.c
@@ -454,7 +454,7 @@ static int ca_send_message(struct dst_state *state, struct ca_msg *p_ca_message,
 	struct ca_msg *hw_buffer;
 	int result = 0;

-	hw_buffer = kmalloc(sizeof(*hw_buffer), GFP_KERNEL);
+	hw_buffer = kmalloc_obj(*hw_buffer, GFP_KERNEL);
 	if (!hw_buffer)
 		return -ENOMEM;
 	dprintk(verbose, DST_CA_DEBUG, 1, " ");
@@ -535,9 +535,9 @@ static long dst_ca_ioctl(struct file *file, unsigned int cmd, unsigned long ioct
 	mutex_lock(&dst_ca_mutex);
 	dvbdev = file->private_data;
 	state = dvbdev->priv;
-	p_ca_message = kmalloc(sizeof (struct ca_msg), GFP_KERNEL);
-	p_ca_slot_info = kmalloc(sizeof (struct ca_slot_info), GFP_KERNEL);
-	p_ca_caps = kmalloc(sizeof (struct ca_caps), GFP_KERNEL);
+	p_ca_message = kmalloc_obj(struct ca_msg, GFP_KERNEL);
+	p_ca_slot_info = kmalloc_obj(struct ca_slot_info, GFP_KERNEL);
+	p_ca_caps = kmalloc_obj(struct ca_caps, GFP_KERNEL);
 	if (!p_ca_message || !p_ca_slot_info || !p_ca_caps) {
 		result = -ENOMEM;
 		goto free_mem_and_exit;
diff --git a/drivers/media/pci/bt8xx/dvb-bt8xx.c b/drivers/media/pci/bt8xx/dvb-bt8xx.c
index f0fbb468aea2..b9c712c078d2 100644
--- a/drivers/media/pci/bt8xx/dvb-bt8xx.c
+++ b/drivers/media/pci/bt8xx/dvb-bt8xx.c
@@ -657,7 +657,7 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type)

 	case BTTV_BOARD_TWINHAN_DST:
 		/*	DST is not a frontend driver !!!		*/
-		state = kmalloc(sizeof (struct dst_state), GFP_KERNEL);
+		state = kmalloc_obj(struct dst_state, GFP_KERNEL);
 		if (!state) {
 			pr_err("No memory\n");
 			break;
@@ -809,7 +809,7 @@ static int dvb_bt8xx_probe(struct bttv_sub_device *sub)
 	struct pci_dev* bttv_pci_dev;
 	int ret;

-	if (!(card = kzalloc(sizeof(struct dvb_bt8xx_card), GFP_KERNEL)))
+	if (!(card = kzalloc_obj(struct dvb_bt8xx_card, GFP_KERNEL)))
 		return -ENOMEM;

 	mutex_init(&card->lock);
diff --git a/drivers/media/pci/cobalt/cobalt-alsa-main.c b/drivers/media/pci/cobalt/cobalt-alsa-main.c
index c57f87a68269..1b30b44ad112 100644
--- a/drivers/media/pci/cobalt/cobalt-alsa-main.c
+++ b/drivers/media/pci/cobalt/cobalt-alsa-main.c
@@ -45,7 +45,7 @@ static int snd_cobalt_card_create(struct cobalt_stream *s,
 				       struct snd_card *sc,
 				       struct snd_cobalt_card **cobsc)
 {
-	*cobsc = kzalloc(sizeof(struct snd_cobalt_card), GFP_KERNEL);
+	*cobsc = kzalloc_obj(struct snd_cobalt_card, GFP_KERNEL);
 	if (*cobsc == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cobalt/cobalt-driver.c b/drivers/media/pci/cobalt/cobalt-driver.c
index b7695705fdee..1c2b00278c55 100644
--- a/drivers/media/pci/cobalt/cobalt-driver.c
+++ b/drivers/media/pci/cobalt/cobalt-driver.c
@@ -663,7 +663,7 @@ static int cobalt_probe(struct pci_dev *pci_dev,
 	/* FIXME - module parameter arrays constrain max instances */
 	i = atomic_inc_return(&cobalt_instance) - 1;

-	cobalt = kzalloc(sizeof(struct cobalt), GFP_KERNEL);
+	cobalt = kzalloc_obj(struct cobalt, GFP_KERNEL);
 	if (cobalt == NULL)
 		return -ENOMEM;
 	cobalt->pci_dev = pci_dev;
diff --git a/drivers/media/pci/cx18/cx18-alsa-main.c b/drivers/media/pci/cx18/cx18-alsa-main.c
index 9dc361886284..6214e29a5cd6 100644
--- a/drivers/media/pci/cx18/cx18-alsa-main.c
+++ b/drivers/media/pci/cx18/cx18-alsa-main.c
@@ -77,7 +77,7 @@ static int snd_cx18_card_create(struct v4l2_device *v4l2_dev,
 				       struct snd_card *sc,
 				       struct snd_cx18_card **cxsc)
 {
-	*cxsc = kzalloc(sizeof(struct snd_cx18_card), GFP_KERNEL);
+	*cxsc = kzalloc_obj(struct snd_cx18_card, GFP_KERNEL);
 	if (*cxsc == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx18/cx18-driver.c b/drivers/media/pci/cx18/cx18-driver.c
index 74c59a94b2b0..bdfdd403a039 100644
--- a/drivers/media/pci/cx18/cx18-driver.c
+++ b/drivers/media/pci/cx18/cx18-driver.c
@@ -314,7 +314,7 @@ void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv)

 	memset(tv, 0, sizeof(*tv));

-	c = kzalloc(sizeof(*c), GFP_KERNEL);
+	c = kzalloc_obj(*c, GFP_KERNEL);
 	if (!c)
 		return;

@@ -899,7 +899,7 @@ static int cx18_probe(struct pci_dev *pci_dev,
 		return -ENOMEM;
 	}

-	cx = kzalloc(sizeof(*cx), GFP_KERNEL);
+	cx = kzalloc_obj(*cx, GFP_KERNEL);
 	if (!cx)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx18/cx18-fileops.c b/drivers/media/pci/cx18/cx18-fileops.c
index 4944033dbb20..b3d3a6f67ea8 100644
--- a/drivers/media/pci/cx18/cx18-fileops.c
+++ b/drivers/media/pci/cx18/cx18-fileops.c
@@ -732,7 +732,7 @@ static int cx18_serialized_open(struct cx18_stream *s, struct file *filp)
 	CX18_DEBUG_FILE("open %s\n", s->name);

 	/* Allocate memory */
-	item = kzalloc(sizeof(struct cx18_open_id), GFP_KERNEL);
+	item = kzalloc_obj(struct cx18_open_id, GFP_KERNEL);
 	if (NULL == item) {
 		CX18_DEBUG_WARN("nomem on v4l2 open\n");
 		return -ENOMEM;
diff --git a/drivers/media/pci/cx18/cx18-queue.c b/drivers/media/pci/cx18/cx18-queue.c
index eeb5513b1d52..04d6828f0259 100644
--- a/drivers/media/pci/cx18/cx18-queue.c
+++ b/drivers/media/pci/cx18/cx18-queue.c
@@ -361,12 +361,11 @@ int cx18_stream_alloc(struct cx18_stream *s)
 		struct cx18_buffer *buf;

 		/* 1 MDL per buffer to handle the worst & also default case */
-		mdl = kzalloc(sizeof(struct cx18_mdl), GFP_KERNEL|__GFP_NOWARN);
+		mdl = kzalloc_obj(struct cx18_mdl, GFP_KERNEL | __GFP_NOWARN);
 		if (mdl == NULL)
 			break;

-		buf = kzalloc(sizeof(struct cx18_buffer),
-				GFP_KERNEL|__GFP_NOWARN);
+		buf = kzalloc_obj(struct cx18_buffer, GFP_KERNEL | __GFP_NOWARN);
 		if (buf == NULL) {
 			kfree(mdl);
 			break;
diff --git a/drivers/media/pci/cx18/cx18-streams.c b/drivers/media/pci/cx18/cx18-streams.c
index 48203ba16387..b5b969fa9530 100644
--- a/drivers/media/pci/cx18/cx18-streams.c
+++ b/drivers/media/pci/cx18/cx18-streams.c
@@ -343,7 +343,7 @@ static int cx18_prep_dev(struct cx18 *cx, int type)
 	/* Allocate the cx18_dvb struct only for the TS on cards with DTV */
 	if (type == CX18_ENC_STREAM_TYPE_TS) {
 		if (cx->card->hw_all & CX18_HW_DVB) {
-			s->dvb = kzalloc(sizeof(struct cx18_dvb), GFP_KERNEL);
+			s->dvb = kzalloc_obj(struct cx18_dvb, GFP_KERNEL);
 			if (s->dvb == NULL) {
 				CX18_ERR("Couldn't allocate cx18_dvb structure for %s\n",
 					 s->name);
diff --git a/drivers/media/pci/cx23885/altera-ci.c b/drivers/media/pci/cx23885/altera-ci.c
index 0dc348215b72..7eae29e002ea 100644
--- a/drivers/media/pci/cx23885/altera-ci.c
+++ b/drivers/media/pci/cx23885/altera-ci.c
@@ -224,14 +224,14 @@ static struct fpga_inode *append_internal(struct fpga_internal *internal)
 	struct fpga_inode *new_node = fpga_first_inode;

 	if (new_node == NULL) {
-		new_node = kmalloc(sizeof(struct fpga_inode), GFP_KERNEL);
+		new_node = kmalloc_obj(struct fpga_inode, GFP_KERNEL);
 		fpga_first_inode = new_node;
 	} else {
 		while (new_node->next_inode != NULL)
 			new_node = new_node->next_inode;

 		new_node->next_inode =
-				kmalloc(sizeof(struct fpga_inode), GFP_KERNEL);
+				kmalloc_obj(struct fpga_inode, GFP_KERNEL);
 		if (new_node->next_inode != NULL)
 			new_node = new_node->next_inode;
 		else
@@ -634,7 +634,7 @@ static int altera_hw_filt_init(struct altera_ci_config *config, int hw_filt_nr)
 	struct fpga_internal *inter = NULL;
 	int ret = 0;

-	pid_filt = kzalloc(sizeof(struct netup_hw_pid_filter), GFP_KERNEL);
+	pid_filt = kzalloc_obj(struct netup_hw_pid_filter, GFP_KERNEL);

 	ci_dbg_print("%s\n", __func__);

@@ -648,7 +648,7 @@ static int altera_hw_filt_init(struct altera_ci_config *config, int hw_filt_nr)
 		(inter->filts_used)++;
 		ci_dbg_print("%s: Find Internal Structure!\n", __func__);
 	} else {
-		inter = kzalloc(sizeof(struct fpga_internal), GFP_KERNEL);
+		inter = kzalloc_obj(struct fpga_internal, GFP_KERNEL);
 		if (!inter) {
 			ret = -ENOMEM;
 			goto err;
@@ -706,7 +706,7 @@ int altera_ci_init(struct altera_ci_config *config, int ci_nr)
 	int ret = 0;
 	u8 store = 0;

-	state = kzalloc(sizeof(struct altera_ci_state), GFP_KERNEL);
+	state = kzalloc_obj(struct altera_ci_state, GFP_KERNEL);

 	ci_dbg_print("%s\n", __func__);

@@ -721,7 +721,7 @@ int altera_ci_init(struct altera_ci_config *config, int ci_nr)
 		inter->fpga_rw = config->fpga_rw;
 		ci_dbg_print("%s: Find Internal Structure!\n", __func__);
 	} else {
-		inter = kzalloc(sizeof(struct fpga_internal), GFP_KERNEL);
+		inter = kzalloc_obj(struct fpga_internal, GFP_KERNEL);
 		if (!inter) {
 			ret = -ENOMEM;
 			goto err;
diff --git a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax2.c
index 06e41f92092d..f0ecc92fc444 100644
--- a/drivers/media/pci/cx23885/cimax2.c
+++ b/drivers/media/pci/cx23885/cimax2.c
@@ -451,7 +451,7 @@ int netup_ci_init(struct cx23885_tsport *port)
 	int ret;

 	ci_dbg_print("%s\n", __func__);
-	state = kzalloc(sizeof(struct netup_ci_state), GFP_KERNEL);
+	state = kzalloc_obj(struct netup_ci_state, GFP_KERNEL);
 	if (!state) {
 		ci_dbg_print("%s: Unable create CI structure!\n", __func__);
 		ret = -ENOMEM;
diff --git a/drivers/media/pci/cx23885/cx23885-alsa.c b/drivers/media/pci/cx23885/cx23885-alsa.c
index 717fc6c9ef21..e56c5b7d84bc 100644
--- a/drivers/media/pci/cx23885/cx23885-alsa.c
+++ b/drivers/media/pci/cx23885/cx23885-alsa.c
@@ -374,7 +374,7 @@ static int snd_cx23885_hw_params(struct snd_pcm_substream *substream,
 	BUG_ON(!chip->dma_size);
 	BUG_ON(chip->num_periods & (chip->num_periods-1));

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (NULL == buf)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
index a39f445ce22a..ef2d00db794c 100644
--- a/drivers/media/pci/cx23885/cx23885-core.c
+++ b/drivers/media/pci/cx23885/cx23885-core.c
@@ -2124,7 +2124,7 @@ static int cx23885_initdev(struct pci_dev *pci_dev,
 	struct v4l2_ctrl_handler *hdl;
 	int err;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (NULL == dev)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx23885/cx23885-input.c
index d2e84c6457e0..9c6e5b360bab 100644
--- a/drivers/media/pci/cx23885/cx23885-input.c
+++ b/drivers/media/pci/cx23885/cx23885-input.c
@@ -327,7 +327,7 @@ int cx23885_input_init(struct cx23885_dev *dev)
 	}

 	/* cx23885 board instance kernel IR state */
-	kernel_ir = kzalloc(sizeof(struct cx23885_kernel_ir), GFP_KERNEL);
+	kernel_ir = kzalloc_obj(struct cx23885_kernel_ir, GFP_KERNEL);
 	if (kernel_ir == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx23885/cx23888-ir.c b/drivers/media/pci/cx23885/cx23888-ir.c
index 222d04421468..242b47a7d0af 100644
--- a/drivers/media/pci/cx23885/cx23888-ir.c
+++ b/drivers/media/pci/cx23885/cx23888-ir.c
@@ -1142,7 +1142,7 @@ int cx23888_ir_probe(struct cx23885_dev *dev)
 	struct v4l2_subdev_ir_parameters default_params;
 	int ret;

-	state = kzalloc(sizeof(struct cx23888_ir_state), GFP_KERNEL);
+	state = kzalloc_obj(struct cx23888_ir_state, GFP_KERNEL);
 	if (state == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx25821/cx25821-alsa.c b/drivers/media/pci/cx25821/cx25821-alsa.c
index f463365163b7..a8197a9b0abf 100644
--- a/drivers/media/pci/cx25821/cx25821-alsa.c
+++ b/drivers/media/pci/cx25821/cx25821-alsa.c
@@ -512,7 +512,7 @@ static int snd_cx25821_hw_params(struct snd_pcm_substream *substream,
 	BUG_ON(!chip->dma_size);
 	BUG_ON(chip->num_periods & (chip->num_periods - 1));

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (NULL == buf)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx25821/cx25821-core.c b/drivers/media/pci/cx25821/cx25821-core.c
index a7336be44474..d64712f3aed4 100644
--- a/drivers/media/pci/cx25821/cx25821-core.c
+++ b/drivers/media/pci/cx25821/cx25821-core.c
@@ -1266,7 +1266,7 @@ static int cx25821_initdev(struct pci_dev *pci_dev,
 	struct cx25821_dev *dev;
 	int err = 0;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (NULL == dev)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx88/cx88-alsa.c b/drivers/media/pci/cx88/cx88-alsa.c
index 4e574d8390b4..3b8622dd056c 100644
--- a/drivers/media/pci/cx88/cx88-alsa.c
+++ b/drivers/media/pci/cx88/cx88-alsa.c
@@ -465,7 +465,7 @@ static int snd_cx88_hw_params(struct snd_pcm_substream *substream,
 	WARN_ON(!chip->dma_size);
 	WARN_ON(chip->num_periods & (chip->num_periods - 1));

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx88/cx88-cards.c b/drivers/media/pci/cx88/cx88-cards.c
index f01e48c23f8e..3e11bb066f31 100644
--- a/drivers/media/pci/cx88/cx88-cards.c
+++ b/drivers/media/pci/cx88/cx88-cards.c
@@ -3700,7 +3700,7 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
 	struct cx88_core *core;
 	int i;

-	core = kzalloc(sizeof(*core), GFP_KERNEL);
+	core = kzalloc_obj(*core, GFP_KERNEL);
 	if (!core)
 		return NULL;

diff --git a/drivers/media/pci/cx88/cx88-dsp.c b/drivers/media/pci/cx88/cx88-dsp.c
index e378f3b215c7..1d7049edd252 100644
--- a/drivers/media/pci/cx88/cx88-dsp.c
+++ b/drivers/media/pci/cx88/cx88-dsp.c
@@ -252,7 +252,7 @@ static s16 *read_rds_samples(struct cx88_core *core, u32 *N)
 		current_address,
 		current_address - srch->fifo_start, sample_count,
 		cx_read(MO_AUD_INTSTAT));
-	samples = kmalloc_array(sample_count, sizeof(*samples), GFP_KERNEL);
+	samples = kmalloc_objs(*samples, sample_count, GFP_KERNEL);
 	if (!samples)
 		return NULL;

diff --git a/drivers/media/pci/cx88/cx88-input.c b/drivers/media/pci/cx88/cx88-input.c
index b9f2c14d62b4..f94d75c64cf9 100644
--- a/drivers/media/pci/cx88/cx88-input.c
+++ b/drivers/media/pci/cx88/cx88-input.c
@@ -267,7 +267,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
 				 * used with a full-code IR table
 				 */

-	ir = kzalloc(sizeof(*ir), GFP_KERNEL);
+	ir = kzalloc_obj(*ir, GFP_KERNEL);
 	dev = rc_allocate_device(RC_DRIVER_IR_RAW);
 	if (!ir || !dev)
 		goto err_out_free;
diff --git a/drivers/media/pci/cx88/cx88-mpeg.c b/drivers/media/pci/cx88/cx88-mpeg.c
index 2c1d5137ac47..1ed77f812784 100644
--- a/drivers/media/pci/cx88/cx88-mpeg.c
+++ b/drivers/media/pci/cx88/cx88-mpeg.c
@@ -619,7 +619,7 @@ int cx8802_register_driver(struct cx8802_driver *drv)
 			dev->core->boardnr);

 		/* Bring up a new struct for each driver instance */
-		driver = kzalloc(sizeof(*drv), GFP_KERNEL);
+		driver = kzalloc_obj(*drv, GFP_KERNEL);
 		if (!driver) {
 			err = -ENOMEM;
 			goto out;
@@ -715,7 +715,7 @@ static int cx8802_probe(struct pci_dev *pci_dev,
 		goto fail_core;

 	err = -ENOMEM;
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto fail_core;
 	dev->pci = pci_dev;
diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c
index 0c87327689d3..87752ce17df8 100644
--- a/drivers/media/pci/cx88/cx88-video.c
+++ b/drivers/media/pci/cx88/cx88-video.c
@@ -1261,7 +1261,7 @@ static int cx8800_initdev(struct pci_dev *pci_dev,
 	int err;
 	int i;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/media/pci/cx88/cx88-vp3054-i2c.c b/drivers/media/pci/cx88/cx88-vp3054-i2c.c
index ac7f76dc5e21..e421589edf4c 100644
--- a/drivers/media/pci/cx88/cx88-vp3054-i2c.c
+++ b/drivers/media/pci/cx88/cx88-vp3054-i2c.c
@@ -97,7 +97,7 @@ int vp3054_i2c_probe(struct cx8802_dev *dev)
 	if (core->boardnr != CX88_BOARD_DNTV_LIVE_DVB_T_PRO)
 		return 0;

-	vp3054_i2c = kzalloc(sizeof(*vp3054_i2c), GFP_KERNEL);
+	vp3054_i2c = kzalloc_obj(*vp3054_i2c, GFP_KERNEL);
 	if (!vp3054_i2c)
 		return -ENOMEM;
 	dev->vp3054 = vp3054_i2c;
diff --git a/drivers/media/pci/ddbridge/ddbridge-ci.c b/drivers/media/pci/ddbridge/ddbridge-ci.c
index ee20813c33ff..2602256b9f4a 100644
--- a/drivers/media/pci/ddbridge/ddbridge-ci.c
+++ b/drivers/media/pci/ddbridge/ddbridge-ci.c
@@ -155,7 +155,7 @@ static void ci_attach(struct ddb_port *port)
 {
 	struct ddb_ci *ci;

-	ci = kzalloc(sizeof(*ci), GFP_KERNEL);
+	ci = kzalloc_obj(*ci, GFP_KERNEL);
 	if (!ci)
 		return;
 	memcpy(&ci->en, &en_templ, sizeof(en_templ));
@@ -288,7 +288,7 @@ static void ci_xo2_attach(struct ddb_port *port)
 {
 	struct ddb_ci *ci;

-	ci = kzalloc(sizeof(*ci), GFP_KERNEL);
+	ci = kzalloc_obj(*ci, GFP_KERNEL);
 	if (!ci)
 		return;
 	memcpy(&ci->en, &en_xo2_templ, sizeof(en_xo2_templ));
diff --git a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c
index 520ebd16b0c4..57192c5cb9c3 100644
--- a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c
+++ b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c
@@ -100,7 +100,7 @@ struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void)
 	struct ddbridge_dummy_fe_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct ddbridge_dummy_fe_state), GFP_KERNEL);
+	state = kzalloc_obj(struct ddbridge_dummy_fe_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/pci/dm1105/dm1105.c b/drivers/media/pci/dm1105/dm1105.c
index 9e9c7c071acc..1e1d4bda7c56 100644
--- a/drivers/media/pci/dm1105/dm1105.c
+++ b/drivers/media/pci/dm1105/dm1105.c
@@ -976,7 +976,7 @@ static int dm1105_probe(struct pci_dev *pdev,
 	if (dm1105_devcount >= ARRAY_SIZE(card))
 		return -ENODEV;

-	dev = kzalloc(sizeof(struct dm1105_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct dm1105_dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel/ipu-bridge.c
index b2b710094914..72ebe4016ca2 100644
--- a/drivers/media/pci/intel/ipu-bridge.c
+++ b/drivers/media/pci/intel/ipu-bridge.c
@@ -638,7 +638,7 @@ int ipu_bridge_instantiate_vcm(struct device *sensor)
 		return 0;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data) {
 		fwnode_handle_put(vcm_fwnode);
 		return -ENOMEM;
@@ -851,7 +851,7 @@ int ipu_bridge_init(struct device *dev,
 		return dev_err_probe(dev, -EPROBE_DEFER,
 				     "waiting for IVSC to become ready\n");

-	bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
+	bridge = kzalloc_obj(*bridge, GFP_KERNEL);
 	if (!bridge)
 		return -ENOMEM;

diff --git a/drivers/media/pci/intel/ipu6/ipu6-bus.c b/drivers/media/pci/intel/ipu6/ipu6-bus.c
index 5cee2748983b..59879e4861ed 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-bus.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-bus.c
@@ -90,7 +90,7 @@ ipu6_bus_initialize_device(struct pci_dev *pdev, struct device *parent,
 	struct ipu6_device *isp = pci_get_drvdata(pdev);
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/pci/intel/ipu6/ipu6-buttress.c b/drivers/media/pci/intel/ipu6/ipu6-buttress.c
index 103386c4f6ae..8b90ecf49e45 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-buttress.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-buttress.c
@@ -552,7 +552,7 @@ int ipu6_buttress_map_fw_image(struct ipu6_bus_device *sys,

 	n_pages = PFN_UP(fw->size);

-	pages = kmalloc_array(n_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, n_pages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

diff --git a/drivers/media/pci/intel/ipu6/ipu6-dma.c b/drivers/media/pci/intel/ipu6/ipu6-dma.c
index 7296373d36b0..cefb16040c21 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-dma.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-dma.c
@@ -164,7 +164,7 @@ void *ipu6_dma_alloc(struct ipu6_bus_device *sys, size_t size,
 	unsigned int i;
 	int ret;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return NULL;

diff --git a/drivers/media/pci/intel/ipu6/ipu6-fw-com.c b/drivers/media/pci/intel/ipu6/ipu6-fw-com.c
index 40d8ce138a67..13ee09f6d32a 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-fw-com.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-fw-com.c
@@ -170,7 +170,7 @@ void *ipu6_fw_com_prepare(struct ipu6_fw_com_cfg *cfg,
 	if (!cfg || !cfg->cell_start || !cfg->cell_ready)
 		return NULL;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;
 	ctx->dmem_addr = base + cfg->dmem_addr + REGMEM_OFFSET;
diff --git a/drivers/media/pci/intel/ipu6/ipu6-mmu.c b/drivers/media/pci/intel/ipu6/ipu6-mmu.c
index 85cc6d5b4dd1..9eadde7142a3 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-mmu.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-mmu.c
@@ -549,7 +549,7 @@ static struct ipu6_mmu_info *ipu6_mmu_alloc(struct ipu6_device *isp)
 	struct ipu6_mmu_info *mmu_info;
 	int ret;

-	mmu_info = kzalloc(sizeof(*mmu_info), GFP_KERNEL);
+	mmu_info = kzalloc_obj(*mmu_info, GFP_KERNEL);
 	if (!mmu_info)
 		return NULL;

@@ -613,7 +613,7 @@ static struct ipu6_dma_mapping *alloc_dma_mapping(struct ipu6_device *isp)
 {
 	struct ipu6_dma_mapping *dmap;

-	dmap = kzalloc(sizeof(*dmap), GFP_KERNEL);
+	dmap = kzalloc_obj(*dmap, GFP_KERNEL);
 	if (!dmap)
 		return NULL;

diff --git a/drivers/media/pci/intel/ipu6/ipu6.c b/drivers/media/pci/intel/ipu6/ipu6.c
index 24238f8311a6..57fe13ebb621 100644
--- a/drivers/media/pci/intel/ipu6/ipu6.c
+++ b/drivers/media/pci/intel/ipu6/ipu6.c
@@ -381,7 +381,7 @@ ipu6_isys_init(struct pci_dev *pdev, struct device *parent,
 		return ERR_PTR(ret);
 	}

-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return ERR_PTR(-ENOMEM);

@@ -425,7 +425,7 @@ ipu6_psys_init(struct pci_dev *pdev, struct device *parent,
 	struct ipu6_psys_pdata *pdata;
 	int ret;

-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/pci/ivtv/ivtv-alsa-main.c b/drivers/media/pci/ivtv/ivtv-alsa-main.c
index 9e13a7128a53..05d499241c02 100644
--- a/drivers/media/pci/ivtv/ivtv-alsa-main.c
+++ b/drivers/media/pci/ivtv/ivtv-alsa-main.c
@@ -74,7 +74,7 @@ static int snd_ivtv_card_create(struct v4l2_device *v4l2_dev,
 				       struct snd_card *sc,
 				       struct snd_ivtv_card **itvsc)
 {
-	*itvsc = kzalloc(sizeof(struct snd_ivtv_card), GFP_KERNEL);
+	*itvsc = kzalloc_obj(struct snd_ivtv_card, GFP_KERNEL);
 	if (*itvsc == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/pci/ivtv/ivtv-driver.c b/drivers/media/pci/ivtv/ivtv-driver.c
index 459eb6cc370c..9d0d4faf9867 100644
--- a/drivers/media/pci/ivtv/ivtv-driver.c
+++ b/drivers/media/pci/ivtv/ivtv-driver.c
@@ -953,7 +953,7 @@ static int ivtv_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
 	int vbi_buf_size;
 	struct ivtv *itv;

-	itv = kzalloc(sizeof(struct ivtv), GFP_KERNEL);
+	itv = kzalloc_obj(struct ivtv, GFP_KERNEL);
 	if (itv == NULL)
 		return -ENOMEM;
 	itv->pdev = pdev;
diff --git a/drivers/media/pci/ivtv/ivtv-fileops.c b/drivers/media/pci/ivtv/ivtv-fileops.c
index ef9ec062c03a..87c0ef449beb 100644
--- a/drivers/media/pci/ivtv/ivtv-fileops.c
+++ b/drivers/media/pci/ivtv/ivtv-fileops.c
@@ -990,7 +990,7 @@ static int ivtv_open(struct file *filp)
 	}

 	/* Allocate memory */
-	item = kzalloc(sizeof(struct ivtv_open_id), GFP_KERNEL);
+	item = kzalloc_obj(struct ivtv_open_id, GFP_KERNEL);
 	if (NULL == item) {
 		IVTV_DEBUG_WARN("nomem on v4l2 open\n");
 		return -ENOMEM;
diff --git a/drivers/media/pci/ivtv/ivtv-queue.c b/drivers/media/pci/ivtv/ivtv-queue.c
index f7d2d159d800..9e339ef0c82d 100644
--- a/drivers/media/pci/ivtv/ivtv-queue.c
+++ b/drivers/media/pci/ivtv/ivtv-queue.c
@@ -207,8 +207,8 @@ int ivtv_stream_alloc(struct ivtv_stream *s)
 	}
 	s->sg_processing_size = 0;

-	s->sg_dma = kzalloc(sizeof(struct ivtv_sg_element),
-					GFP_KERNEL|__GFP_NOWARN);
+	s->sg_dma = kzalloc_obj(struct ivtv_sg_element,
+				GFP_KERNEL | __GFP_NOWARN);
 	if (s->sg_dma == NULL) {
 		IVTV_ERR("Could not allocate sg_dma for %s stream\n", s->name);
 		kfree(s->sg_pending);
@@ -226,8 +226,8 @@ int ivtv_stream_alloc(struct ivtv_stream *s)

 	/* allocate stream buffers. Initially all buffers are in q_free. */
 	for (i = 0; i < s->buffers; i++) {
-		struct ivtv_buffer *buf = kzalloc(sizeof(struct ivtv_buffer),
-						GFP_KERNEL|__GFP_NOWARN);
+		struct ivtv_buffer *buf = kzalloc_obj(struct ivtv_buffer,
+						      GFP_KERNEL | __GFP_NOWARN);

 		if (buf == NULL)
 			break;
diff --git a/drivers/media/pci/ivtv/ivtvfb.c b/drivers/media/pci/ivtv/ivtvfb.c
index 90c584cf97c2..4f55b44738c9 100644
--- a/drivers/media/pci/ivtv/ivtvfb.c
+++ b/drivers/media/pci/ivtv/ivtvfb.c
@@ -1176,8 +1176,7 @@ static int ivtvfb_init_card(struct ivtv *itv)
 		return -EBUSY;
 	}

-	itv->osd_info = kzalloc(sizeof(struct osd_info),
-					GFP_KERNEL|__GFP_NOWARN);
+	itv->osd_info = kzalloc_obj(struct osd_info, GFP_KERNEL | __GFP_NOWARN);
 	if (itv->osd_info == NULL) {
 		IVTVFB_ERR("Failed to allocate memory for osd_info\n");
 		return -ENOMEM;
diff --git a/drivers/media/pci/mantis/hopper_cards.c b/drivers/media/pci/mantis/hopper_cards.c
index b85aef4e2b24..132b5e21868b 100644
--- a/drivers/media/pci/mantis/hopper_cards.c
+++ b/drivers/media/pci/mantis/hopper_cards.c
@@ -149,7 +149,7 @@ static int hopper_pci_probe(struct pci_dev *pdev,
 	struct mantis_hwconfig *config;
 	int err;

-	mantis = kzalloc(sizeof(*mantis), GFP_KERNEL);
+	mantis = kzalloc_obj(*mantis, GFP_KERNEL);
 	if (!mantis) {
 		err = -ENOMEM;
 		goto fail0;
diff --git a/drivers/media/pci/mantis/mantis_ca.c b/drivers/media/pci/mantis/mantis_ca.c
index 0fad0a923e35..a0998b16ba9e 100644
--- a/drivers/media/pci/mantis/mantis_ca.c
+++ b/drivers/media/pci/mantis/mantis_ca.c
@@ -137,7 +137,7 @@ int mantis_ca_init(struct mantis_pci *mantis)
 	int ca_flags = 0, result;

 	dprintk(MANTIS_DEBUG, 1, "Initializing Mantis CA");
-	ca = kzalloc(sizeof(struct mantis_ca), GFP_KERNEL);
+	ca = kzalloc_obj(struct mantis_ca, GFP_KERNEL);
 	if (!ca) {
 		dprintk(MANTIS_ERROR, 1, "Out of memory!, exiting ..");
 		result = -ENOMEM;
diff --git a/drivers/media/pci/mantis/mantis_cards.c b/drivers/media/pci/mantis/mantis_cards.c
index b44b4cf42f86..3c46e1db8e4a 100644
--- a/drivers/media/pci/mantis/mantis_cards.c
+++ b/drivers/media/pci/mantis/mantis_cards.c
@@ -158,7 +158,7 @@ static int mantis_pci_probe(struct pci_dev *pdev,
 	struct mantis_hwconfig *config;
 	int err;

-	mantis = kzalloc(sizeof(*mantis), GFP_KERNEL);
+	mantis = kzalloc_obj(*mantis, GFP_KERNEL);
 	if (!mantis)
 		return -ENOMEM;

diff --git a/drivers/media/pci/mgb4/mgb4_core.c b/drivers/media/pci/mgb4/mgb4_core.c
index a7cb8dc50b53..cd23758fb9b4 100644
--- a/drivers/media/pci/mgb4/mgb4_core.c
+++ b/drivers/media/pci/mgb4/mgb4_core.c
@@ -522,7 +522,7 @@ static int mgb4_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	};
 	int irqs = pci_msix_vec_count(pdev);

-	mgbdev = kzalloc(sizeof(*mgbdev), GFP_KERNEL);
+	mgbdev = kzalloc_obj(*mgbdev, GFP_KERNEL);
 	if (!mgbdev)
 		return -ENOMEM;

diff --git a/drivers/media/pci/mgb4/mgb4_vin.c b/drivers/media/pci/mgb4/mgb4_vin.c
index e782db79686f..815c87b9210f 100644
--- a/drivers/media/pci/mgb4/mgb4_vin.c
+++ b/drivers/media/pci/mgb4/mgb4_vin.c
@@ -946,7 +946,7 @@ struct mgb4_vin_dev *mgb4_vin_create(struct mgb4_dev *mgbdev, int id)
 	struct device *dev = &pdev->dev;
 	int vin_irq, err_irq;

-	vindev = kzalloc(sizeof(*vindev), GFP_KERNEL);
+	vindev = kzalloc_obj(*vindev, GFP_KERNEL);
 	if (!vindev)
 		return NULL;

diff --git a/drivers/media/pci/mgb4/mgb4_vout.c b/drivers/media/pci/mgb4/mgb4_vout.c
index 44e9565d4d06..cd5a36a41333 100644
--- a/drivers/media/pci/mgb4/mgb4_vout.c
+++ b/drivers/media/pci/mgb4/mgb4_vout.c
@@ -761,7 +761,7 @@ struct mgb4_vout_dev *mgb4_vout_create(struct mgb4_dev *mgbdev, int id)
 	struct pci_dev *pdev = mgbdev->pdev;
 	struct device *dev = &pdev->dev;

-	voutdev = kzalloc(sizeof(*voutdev), GFP_KERNEL);
+	voutdev = kzalloc_obj(*voutdev, GFP_KERNEL);
 	if (!voutdev)
 		return NULL;

diff --git a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c
index 9f2ac33cffa7..08af6717b1c9 100644
--- a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c
+++ b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c
@@ -799,7 +799,7 @@ static int netup_unidvb_initdev(struct pci_dev *pci_dev,
 	}

 	/* allocate device context */
-	ndev = kzalloc(sizeof(*ndev), GFP_KERNEL);
+	ndev = kzalloc_obj(*ndev, GFP_KERNEL);
 	if (!ndev)
 		goto dev_alloc_err;

diff --git a/drivers/media/pci/pluto2/pluto2.c b/drivers/media/pci/pluto2/pluto2.c
index 6ac9b9bd7435..38bd167e821d 100644
--- a/drivers/media/pci/pluto2/pluto2.c
+++ b/drivers/media/pci/pluto2/pluto2.c
@@ -582,7 +582,7 @@ static int pluto2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	struct dmx_demux *dmx;
 	int ret = -ENOMEM;

-	pluto = kzalloc(sizeof(struct pluto), GFP_KERNEL);
+	pluto = kzalloc_obj(struct pluto, GFP_KERNEL);
 	if (!pluto)
 		goto out;

diff --git a/drivers/media/pci/pt1/pt1.c b/drivers/media/pci/pt1/pt1.c
index 1ced093583ac..21a9a3166588 100644
--- a/drivers/media/pci/pt1/pt1.c
+++ b/drivers/media/pci/pt1/pt1.c
@@ -833,7 +833,7 @@ pt1_alloc_adapter(struct pt1 *pt1)
 	struct dmxdev *dmxdev;
 	int ret;

-	adap = kzalloc(sizeof(struct pt1_adapter), GFP_KERNEL);
+	adap = kzalloc_obj(struct pt1_adapter, GFP_KERNEL);
 	if (!adap) {
 		ret = -ENOMEM;
 		goto err;
@@ -1356,7 +1356,7 @@ static int pt1_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		goto err_pci_release_regions;
 	}

-	pt1 = kzalloc(sizeof(struct pt1), GFP_KERNEL);
+	pt1 = kzalloc_obj(struct pt1, GFP_KERNEL);
 	if (!pt1) {
 		ret = -ENOMEM;
 		goto err_pci_iounmap;
diff --git a/drivers/media/pci/pt3/pt3.c b/drivers/media/pci/pt3/pt3.c
index c55aa782b72c..f0fb92017e8f 100644
--- a/drivers/media/pci/pt3/pt3.c
+++ b/drivers/media/pci/pt3/pt3.c
@@ -529,7 +529,7 @@ static int pt3_alloc_adapter(struct pt3_board *pt3, int index)
 	struct pt3_adapter *adap;
 	struct dvb_adapter *da;

-	adap = kzalloc(sizeof(*adap), GFP_KERNEL);
+	adap = kzalloc_obj(*adap, GFP_KERNEL);
 	if (!adap)
 		return -ENOMEM;

diff --git a/drivers/media/pci/saa7134/saa7134-alsa.c b/drivers/media/pci/saa7134/saa7134-alsa.c
index f86a44dfe6e3..ad1a640d7f76 100644
--- a/drivers/media/pci/saa7134/saa7134-alsa.c
+++ b/drivers/media/pci/saa7134/saa7134-alsa.c
@@ -816,7 +816,7 @@ static int snd_card_saa7134_capture_open(struct snd_pcm_substream * substream)

 	mutex_unlock(&dev->dmasound.lock);

-	pcm = kzalloc(sizeof(*pcm), GFP_KERNEL);
+	pcm = kzalloc_obj(*pcm, GFP_KERNEL);
 	if (pcm == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/pci/saa7134/saa7134-core.c b/drivers/media/pci/saa7134/saa7134-core.c
index 537aa65acdc8..5acad9554a61 100644
--- a/drivers/media/pci/saa7134/saa7134-core.c
+++ b/drivers/media/pci/saa7134/saa7134-core.c
@@ -1010,7 +1010,7 @@ static int saa7134_initdev(struct pci_dev *pci_dev,
 	if (saa7134_devcount == SAA7134_MAXBOARDS)
 		return -ENOMEM;

-	dev = kzalloc(sizeof(*dev),GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (NULL == dev)
 		return -ENOMEM;

@@ -1018,7 +1018,7 @@ static int saa7134_initdev(struct pci_dev *pci_dev,
 	sprintf(dev->name, "saa%x[%d]", pci_dev->device, dev->nr);

 #ifdef CONFIG_MEDIA_CONTROLLER
-	dev->media_dev = kzalloc(sizeof(*dev->media_dev), GFP_KERNEL);
+	dev->media_dev = kzalloc_obj(*dev->media_dev, GFP_KERNEL);
 	if (!dev->media_dev) {
 		err = -ENOMEM;
 		goto err_free_dev;
diff --git a/drivers/media/pci/saa7134/saa7134-go7007.c b/drivers/media/pci/saa7134/saa7134-go7007.c
index bd37db5ce363..05f9606b9012 100644
--- a/drivers/media/pci/saa7134/saa7134-go7007.c
+++ b/drivers/media/pci/saa7134/saa7134-go7007.c
@@ -414,7 +414,7 @@ static int saa7134_go7007_init(struct saa7134_dev *dev)
 	if (go == NULL)
 		return -ENOMEM;

-	saa = kzalloc(sizeof(struct saa7134_go7007), GFP_KERNEL);
+	saa = kzalloc_obj(struct saa7134_go7007, GFP_KERNEL);
 	if (saa == NULL) {
 		kfree(go);
 		return -ENOMEM;
diff --git a/drivers/media/pci/saa7134/saa7134-input.c b/drivers/media/pci/saa7134/saa7134-input.c
index 468dbe8d552f..22fbcc2cb585 100644
--- a/drivers/media/pci/saa7134/saa7134-input.c
+++ b/drivers/media/pci/saa7134/saa7134-input.c
@@ -768,7 +768,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
 		return -ENODEV;
 	}

-	ir = kzalloc(sizeof(*ir), GFP_KERNEL);
+	ir = kzalloc_obj(*ir, GFP_KERNEL);
 	rc = rc_allocate_device(RC_DRIVER_SCANCODE);
 	if (!ir || !rc) {
 		err = -ENOMEM;
diff --git a/drivers/media/pci/saa7146/hexium_gemini.c b/drivers/media/pci/saa7146/hexium_gemini.c
index 40b35098f3ea..371beecd92e1 100644
--- a/drivers/media/pci/saa7146/hexium_gemini.c
+++ b/drivers/media/pci/saa7146/hexium_gemini.c
@@ -250,7 +250,7 @@ static int hexium_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_d

 	DEB_EE("\n");

-	hexium = kzalloc(sizeof(*hexium), GFP_KERNEL);
+	hexium = kzalloc_obj(*hexium, GFP_KERNEL);
 	if (!hexium)
 		return -ENOMEM;

diff --git a/drivers/media/pci/saa7146/hexium_orion.c b/drivers/media/pci/saa7146/hexium_orion.c
index a2076728c621..f713d543971e 100644
--- a/drivers/media/pci/saa7146/hexium_orion.c
+++ b/drivers/media/pci/saa7146/hexium_orion.c
@@ -209,7 +209,7 @@ static int hexium_probe(struct saa7146_dev *dev)
 		return -EFAULT;
 	}

-	hexium = kzalloc(sizeof(*hexium), GFP_KERNEL);
+	hexium = kzalloc_obj(*hexium, GFP_KERNEL);
 	if (!hexium)
 		return -ENOMEM;

diff --git a/drivers/media/pci/saa7146/mxb.c b/drivers/media/pci/saa7146/mxb.c
index a14b839098b8..1999d45f2986 100644
--- a/drivers/media/pci/saa7146/mxb.c
+++ b/drivers/media/pci/saa7146/mxb.c
@@ -226,7 +226,7 @@ static int mxb_probe(struct saa7146_dev *dev)
 			V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
 	if (hdl->error)
 		return hdl->error;
-	mxb = kzalloc(sizeof(struct mxb), GFP_KERNEL);
+	mxb = kzalloc_obj(struct mxb, GFP_KERNEL);
 	if (mxb == NULL) {
 		DEB_D("not enough kernel memory\n");
 		return -ENOMEM;
diff --git a/drivers/media/pci/saa7164/saa7164-buffer.c b/drivers/media/pci/saa7164/saa7164-buffer.c
index 7820e4f47fd5..9d1fa04990f7 100644
--- a/drivers/media/pci/saa7164/saa7164-buffer.c
+++ b/drivers/media/pci/saa7164/saa7164-buffer.c
@@ -68,7 +68,7 @@ struct saa7164_buffer *saa7164_buffer_alloc(struct saa7164_port *port,
 		goto ret;
 	}

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		goto ret;

@@ -252,7 +252,7 @@ struct saa7164_user_buffer *saa7164_buffer_alloc_user(struct saa7164_dev *dev,
 {
 	struct saa7164_user_buffer *buf;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return NULL;

diff --git a/drivers/media/pci/saa7164/saa7164-core.c b/drivers/media/pci/saa7164/saa7164-core.c
index a8a004f28ca0..eac9bc9f640c 100644
--- a/drivers/media/pci/saa7164/saa7164-core.c
+++ b/drivers/media/pci/saa7164/saa7164-core.c
@@ -1238,7 +1238,7 @@ static int saa7164_initdev(struct pci_dev *pci_dev,
 	int err, i;
 	u32 version;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (NULL == dev)
 		return -ENOMEM;

diff --git a/drivers/media/pci/saa7164/saa7164-encoder.c b/drivers/media/pci/saa7164/saa7164-encoder.c
index 66d650b5f69a..cae31f11d076 100644
--- a/drivers/media/pci/saa7164/saa7164-encoder.c
+++ b/drivers/media/pci/saa7164/saa7164-encoder.c
@@ -719,7 +719,7 @@ static int fops_open(struct file *file)
 	dprintk(DBGLVL_ENC, "%s()\n", __func__);

 	/* allocate + initialize per filehandle data */
-	fh = kzalloc(sizeof(*fh), GFP_KERNEL);
+	fh = kzalloc_obj(*fh, GFP_KERNEL);
 	if (NULL == fh)
 		return -ENOMEM;

diff --git a/drivers/media/pci/saa7164/saa7164-vbi.c b/drivers/media/pci/saa7164/saa7164-vbi.c
index 57e4362c0d19..fcb9f99890e5 100644
--- a/drivers/media/pci/saa7164/saa7164-vbi.c
+++ b/drivers/media/pci/saa7164/saa7164-vbi.c
@@ -422,7 +422,7 @@ static int fops_open(struct file *file)
 	dprintk(DBGLVL_VBI, "%s()\n", __func__);

 	/* allocate + initialize per filehandle data */
-	fh = kzalloc(sizeof(*fh), GFP_KERNEL);
+	fh = kzalloc_obj(*fh, GFP_KERNEL);
 	if (NULL == fh)
 		return -ENOMEM;

diff --git a/drivers/media/pci/smipcie/smipcie-main.c b/drivers/media/pci/smipcie/smipcie-main.c
index 7db6d443fc54..5bfba2721231 100644
--- a/drivers/media/pci/smipcie/smipcie-main.c
+++ b/drivers/media/pci/smipcie/smipcie-main.c
@@ -946,7 +946,7 @@ static int smi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	if (pci_enable_device(pdev) < 0)
 		return -ENODEV;

-	dev = kzalloc(sizeof(struct smi_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct smi_dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err_pci_disable_device;
diff --git a/drivers/media/pci/solo6x10/solo6x10-core.c b/drivers/media/pci/solo6x10/solo6x10-core.c
index d1d3a83d0122..78335a6838c6 100644
--- a/drivers/media/pci/solo6x10/solo6x10-core.c
+++ b/drivers/media/pci/solo6x10/solo6x10-core.c
@@ -449,7 +449,7 @@ static int solo_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	int ret;
 	u8 chip_id;

-	solo_dev = kzalloc(sizeof(*solo_dev), GFP_KERNEL);
+	solo_dev = kzalloc_obj(*solo_dev, GFP_KERNEL);
 	if (solo_dev == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/pci/solo6x10/solo6x10-g723.c b/drivers/media/pci/solo6x10/solo6x10-g723.c
index 1db9f40ee0c0..5906fd47b583 100644
--- a/drivers/media/pci/solo6x10/solo6x10-g723.c
+++ b/drivers/media/pci/solo6x10/solo6x10-g723.c
@@ -120,7 +120,7 @@ static int snd_solo_pcm_open(struct snd_pcm_substream *ss)
 	struct solo_dev *solo_dev = snd_pcm_substream_chip(ss);
 	struct solo_snd_pcm *solo_pcm;

-	solo_pcm = kzalloc(sizeof(*solo_pcm), GFP_KERNEL);
+	solo_pcm = kzalloc_obj(*solo_pcm, GFP_KERNEL);
 	if (solo_pcm == NULL)
 		goto oom;

diff --git a/drivers/media/pci/solo6x10/solo6x10-v4l2-enc.c b/drivers/media/pci/solo6x10/solo6x10-v4l2-enc.c
index 5ee59b3844cc..d7168b9c9e61 100644
--- a/drivers/media/pci/solo6x10/solo6x10-v4l2-enc.c
+++ b/drivers/media/pci/solo6x10/solo6x10-v4l2-enc.c
@@ -1208,7 +1208,7 @@ static struct solo_enc_dev *solo_enc_alloc(struct solo_dev *solo_dev,
 	struct v4l2_ctrl_handler *hdl;
 	int ret;

-	solo_enc = kzalloc(sizeof(*solo_enc), GFP_KERNEL);
+	solo_enc = kzalloc_obj(*solo_enc, GFP_KERNEL);
 	if (!solo_enc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/pci/ttpci/budget-av.c b/drivers/media/pci/ttpci/budget-av.c
index 69f5e810f9b5..482e71c0fdcc 100644
--- a/drivers/media/pci/ttpci/budget-av.c
+++ b/drivers/media/pci/ttpci/budget-av.c
@@ -1437,7 +1437,7 @@ static int budget_av_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio

 	dprintk(2, "dev: %p\n", dev);

-	budget_av = kzalloc(sizeof(struct budget_av), GFP_KERNEL);
+	budget_av = kzalloc_obj(struct budget_av, GFP_KERNEL);
 	if (!budget_av)
 		return -ENOMEM;

diff --git a/drivers/media/pci/ttpci/budget-ci.c b/drivers/media/pci/ttpci/budget-ci.c
index 33f08adf4feb..86edb4310366 100644
--- a/drivers/media/pci/ttpci/budget-ci.c
+++ b/drivers/media/pci/ttpci/budget-ci.c
@@ -1456,7 +1456,7 @@ static int budget_ci_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio
 	struct budget_ci *budget_ci;
 	int err;

-	budget_ci = kzalloc(sizeof(struct budget_ci), GFP_KERNEL);
+	budget_ci = kzalloc_obj(struct budget_ci, GFP_KERNEL);
 	if (!budget_ci) {
 		err = -ENOMEM;
 		goto out1;
diff --git a/drivers/media/pci/ttpci/budget.c b/drivers/media/pci/ttpci/budget.c
index f623c250909b..ebdc6d2bce4e 100644
--- a/drivers/media/pci/ttpci/budget.c
+++ b/drivers/media/pci/ttpci/budget.c
@@ -788,7 +788,7 @@ static int budget_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_d
 	struct budget *budget = NULL;
 	int err;

-	budget = kmalloc(sizeof(struct budget), GFP_KERNEL);
+	budget = kmalloc_obj(struct budget, GFP_KERNEL);
 	if (budget == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/pci/tw686x/tw686x-core.c b/drivers/media/pci/tw686x/tw686x-core.c
index f39e0e34deb6..bcf93f4a5c83 100644
--- a/drivers/media/pci/tw686x/tw686x-core.c
+++ b/drivers/media/pci/tw686x/tw686x-core.c
@@ -243,22 +243,22 @@ static int tw686x_probe(struct pci_dev *pci_dev,
 	struct tw686x_dev *dev;
 	int err;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	dev->type = pci_id->driver_data;
 	dev->dma_mode = dma_mode;
 	sprintf(dev->name, "tw%04X", pci_dev->device);

-	dev->video_channels = kcalloc(max_channels(dev),
-		sizeof(*dev->video_channels), GFP_KERNEL);
+	dev->video_channels = kzalloc_objs(*dev->video_channels,
+					   max_channels(dev), GFP_KERNEL);
 	if (!dev->video_channels) {
 		err = -ENOMEM;
 		goto free_dev;
 	}

-	dev->audio_channels = kcalloc(max_channels(dev),
-		sizeof(*dev->audio_channels), GFP_KERNEL);
+	dev->audio_channels = kzalloc_objs(*dev->audio_channels,
+					   max_channels(dev), GFP_KERNEL);
 	if (!dev->audio_channels) {
 		err = -ENOMEM;
 		goto free_video;
diff --git a/drivers/media/pci/zoran/videocodec.c b/drivers/media/pci/zoran/videocodec.c
index 8efc5e06b0f7..2874247ad300 100644
--- a/drivers/media/pci/zoran/videocodec.c
+++ b/drivers/media/pci/zoran/videocodec.c
@@ -73,7 +73,7 @@ struct videocodec *videocodec_attach(struct videocodec_master *master)
 			res = codec->setup(codec);
 			if (res == 0) {
 				zrdev_dbg(zr, "%s: '%s'\n", __func__, codec->name);
-				ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+				ptr = kzalloc_obj(*ptr, GFP_KERNEL);
 				if (!ptr)
 					goto out_kfree;
 				ptr->codec = codec;
@@ -180,7 +180,7 @@ int videocodec_register(const struct videocodec *codec)
 		  "videocodec: register '%s', type: %x, flags %lx, magic %lx\n",
 		  codec->name, codec->type, codec->flags, codec->magic);

-	ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+	ptr = kzalloc_obj(*ptr, GFP_KERNEL);
 	if (!ptr)
 		return -ENOMEM;
 	ptr->codec = codec;
diff --git a/drivers/media/pci/zoran/zr36016.c b/drivers/media/pci/zoran/zr36016.c
index d2e136c48a1b..4c6a0a00578b 100644
--- a/drivers/media/pci/zoran/zr36016.c
+++ b/drivers/media/pci/zoran/zr36016.c
@@ -344,7 +344,7 @@ static int zr36016_setup(struct videocodec *codec)
 		return -ENOSPC;
 	}
 	//mem structure init
-	ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+	ptr = kzalloc_obj(*ptr, GFP_KERNEL);
 	codec->data = ptr;
 	if (!ptr)
 		return -ENOMEM;
diff --git a/drivers/media/pci/zoran/zr36050.c b/drivers/media/pci/zoran/zr36050.c
index c17965073557..701e4ef7ec22 100644
--- a/drivers/media/pci/zoran/zr36050.c
+++ b/drivers/media/pci/zoran/zr36050.c
@@ -741,7 +741,7 @@ static int zr36050_setup(struct videocodec *codec)
 		return -ENOSPC;
 	}
 	//mem structure init
-	ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+	ptr = kzalloc_obj(*ptr, GFP_KERNEL);
 	codec->data = ptr;
 	if (!ptr)
 		return -ENOMEM;
diff --git a/drivers/media/pci/zoran/zr36060.c b/drivers/media/pci/zoran/zr36060.c
index d6c12efc5bb6..ddd822e4495a 100644
--- a/drivers/media/pci/zoran/zr36060.c
+++ b/drivers/media/pci/zoran/zr36060.c
@@ -796,7 +796,7 @@ static int zr36060_setup(struct videocodec *codec)
 		return -ENOSPC;
 	}
 	//mem structure init
-	ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+	ptr = kzalloc_obj(*ptr, GFP_KERNEL);
 	codec->data = ptr;
 	if (!ptr)
 		return -ENOMEM;
diff --git a/drivers/media/platform/allegro-dvt/allegro-core.c b/drivers/media/platform/allegro-dvt/allegro-core.c
index eec0b8b30b7f..a6589cd6359e 100644
--- a/drivers/media/platform/allegro-dvt/allegro-core.c
+++ b/drivers/media/platform/allegro-dvt/allegro-core.c
@@ -967,7 +967,7 @@ static int allegro_mbox_notify(struct allegro_mbox *mbox)
 	u32 *tmp;
 	int err;

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -1551,7 +1551,7 @@ static int allocate_buffers_internal(struct allegro_channel *channel,
 	struct allegro_buffer *buffer, *tmp;

 	for (i = 0; i < n; i++) {
-		buffer = kmalloc(sizeof(*buffer), GFP_KERNEL);
+		buffer = kmalloc_obj(*buffer, GFP_KERNEL);
 		if (!buffer) {
 			err = -ENOMEM;
 			goto err;
@@ -1632,7 +1632,7 @@ static ssize_t allegro_h264_write_sps(struct allegro_channel *channel,
 	unsigned int cpb_size;
 	unsigned int cpb_size_scale;

-	sps = kzalloc(sizeof(*sps), GFP_KERNEL);
+	sps = kzalloc_obj(*sps, GFP_KERNEL);
 	if (!sps)
 		return -ENOMEM;

@@ -1729,7 +1729,7 @@ static ssize_t allegro_h264_write_pps(struct allegro_channel *channel,
 	struct nal_h264_pps *pps;
 	ssize_t size;

-	pps = kzalloc(sizeof(*pps), GFP_KERNEL);
+	pps = kzalloc_obj(*pps, GFP_KERNEL);
 	if (!pps)
 		return -ENOMEM;

@@ -1780,7 +1780,7 @@ static ssize_t allegro_hevc_write_vps(struct allegro_channel *channel,
 	s32 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level);
 	s32 tier = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_tier);

-	vps = kzalloc(sizeof(*vps), GFP_KERNEL);
+	vps = kzalloc_obj(*vps, GFP_KERNEL);
 	if (!vps)
 		return -ENOMEM;

@@ -1822,7 +1822,7 @@ static ssize_t allegro_hevc_write_sps(struct allegro_channel *channel,
 	s32 level = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_level);
 	s32 tier = v4l2_ctrl_g_ctrl(channel->mpeg_video_hevc_tier);

-	sps = kzalloc(sizeof(*sps), GFP_KERNEL);
+	sps = kzalloc_obj(*sps, GFP_KERNEL);
 	if (!sps)
 		return -ENOMEM;

@@ -1929,7 +1929,7 @@ static ssize_t allegro_hevc_write_pps(struct allegro_channel *channel,
 	ssize_t size;
 	int i;

-	pps = kzalloc(sizeof(*pps), GFP_KERNEL);
+	pps = kzalloc_obj(*pps, GFP_KERNEL);
 	if (!pps)
 		return -ENOMEM;

diff --git a/drivers/media/platform/amlogic/meson-ge2d/ge2d.c b/drivers/media/platform/amlogic/meson-ge2d/ge2d.c
index c51c6f4e41dc..0b499ed7795f 100644
--- a/drivers/media/platform/amlogic/meson-ge2d/ge2d.c
+++ b/drivers/media/platform/amlogic/meson-ge2d/ge2d.c
@@ -834,7 +834,7 @@ static int ge2d_open(struct file *file)
 	struct ge2d_ctx *ctx = NULL;
 	int ret = 0;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx->ge2d = ge2d;
diff --git a/drivers/media/platform/amphion/vdec.c b/drivers/media/platform/amphion/vdec.c
index adf53b49020e..3302994dbf3f 100644
--- a/drivers/media/platform/amphion/vdec.c
+++ b/drivers/media/platform/amphion/vdec.c
@@ -1927,19 +1927,18 @@ static int vdec_open(struct file *file)
 	struct vdec_t *vdec;
 	int ret;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

-	vdec = kzalloc(sizeof(*vdec), GFP_KERNEL);
+	vdec = kzalloc_obj(*vdec, GFP_KERNEL);
 	if (!vdec) {
 		kfree(inst);
 		return -ENOMEM;
 	}

-	vdec->slots = kmalloc_array(VDEC_SLOT_CNT_DFT,
-				    sizeof(*vdec->slots),
-				    GFP_KERNEL | __GFP_ZERO);
+	vdec->slots = kmalloc_objs(*vdec->slots, VDEC_SLOT_CNT_DFT,
+				   GFP_KERNEL | __GFP_ZERO);
 	if (!vdec->slots) {
 		kfree(vdec);
 		kfree(inst);
diff --git a/drivers/media/platform/amphion/venc.c b/drivers/media/platform/amphion/venc.c
index 9e5cbc2b0d3f..4f13566fed49 100644
--- a/drivers/media/platform/amphion/venc.c
+++ b/drivers/media/platform/amphion/venc.c
@@ -858,7 +858,7 @@ static int venc_frame_encoded(struct vpu_inst *inst, void *arg)
 	if (!info)
 		return -EINVAL;
 	venc = inst->priv;
-	frame = kzalloc(sizeof(*frame), GFP_KERNEL);
+	frame = kzalloc_obj(*frame, GFP_KERNEL);
 	if (!frame)
 		return -ENOMEM;

@@ -1307,11 +1307,11 @@ static int venc_open(struct file *file)
 	struct venc_t *venc;
 	int ret;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

-	venc = kzalloc(sizeof(*venc), GFP_KERNEL);
+	venc = kzalloc_obj(*venc, GFP_KERNEL);
 	if (!venc) {
 		kfree(inst);
 		return -ENOMEM;
diff --git a/drivers/media/platform/amphion/vpu_cmds.c b/drivers/media/platform/amphion/vpu_cmds.c
index ab69412e0aa7..00eda558a739 100644
--- a/drivers/media/platform/amphion/vpu_cmds.c
+++ b/drivers/media/platform/amphion/vpu_cmds.c
@@ -83,11 +83,11 @@ static struct vpu_cmd_t *vpu_alloc_cmd(struct vpu_inst *inst, u32 id, void *data
 	int i;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return NULL;

-	cmd->pkt = kzalloc(sizeof(*cmd->pkt), GFP_KERNEL);
+	cmd->pkt = kzalloc_obj(*cmd->pkt, GFP_KERNEL);
 	if (!cmd->pkt) {
 		kfree(cmd);
 		return NULL;
diff --git a/drivers/media/platform/broadcom/bcm2835-unicam.c b/drivers/media/platform/broadcom/bcm2835-unicam.c
index f10064107d54..9d00ea315763 100644
--- a/drivers/media/platform/broadcom/bcm2835-unicam.c
+++ b/drivers/media/platform/broadcom/bcm2835-unicam.c
@@ -2642,7 +2642,7 @@ static int unicam_probe(struct platform_device *pdev)
 	struct unicam_device *unicam;
 	int ret;

-	unicam = kzalloc(sizeof(*unicam), GFP_KERNEL);
+	unicam = kzalloc_obj(*unicam, GFP_KERNEL);
 	if (!unicam)
 		return -ENOMEM;

diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c
index 8c19f125da3e..df299f29756f 100644
--- a/drivers/media/platform/cadence/cdns-csi2rx.c
+++ b/drivers/media/platform/cadence/cdns-csi2rx.c
@@ -824,7 +824,7 @@ static int csi2rx_probe(struct platform_device *pdev)
 	unsigned int i;
 	int ret;

-	csi2rx = kzalloc(sizeof(*csi2rx), GFP_KERNEL);
+	csi2rx = kzalloc_obj(*csi2rx, GFP_KERNEL);
 	if (!csi2rx)
 		return -ENOMEM;
 	platform_set_drvdata(pdev, csi2rx);
diff --git a/drivers/media/platform/cadence/cdns-csi2tx.c b/drivers/media/platform/cadence/cdns-csi2tx.c
index e22b133f346d..80aefdbe259b 100644
--- a/drivers/media/platform/cadence/cdns-csi2tx.c
+++ b/drivers/media/platform/cadence/cdns-csi2tx.c
@@ -573,7 +573,7 @@ static int csi2tx_probe(struct platform_device *pdev)
 	unsigned int i;
 	int ret;

-	csi2tx = kzalloc(sizeof(*csi2tx), GFP_KERNEL);
+	csi2tx = kzalloc_obj(*csi2tx, GFP_KERNEL);
 	if (!csi2tx)
 		return -ENOMEM;
 	platform_set_drvdata(pdev, csi2tx);
diff --git a/drivers/media/platform/chips-media/coda/coda-bit.c b/drivers/media/platform/chips-media/coda/coda-bit.c
index fa6b72c3bd93..aab26194ad1b 100644
--- a/drivers/media/platform/chips-media/coda/coda-bit.c
+++ b/drivers/media/platform/chips-media/coda/coda-bit.c
@@ -397,7 +397,7 @@ void coda_fill_bitstream(struct coda_ctx *ctx, struct list_head *buffer_list)
 			 */
 			src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);

-			meta = kmalloc(sizeof(*meta), GFP_KERNEL);
+			meta = kmalloc_obj(*meta, GFP_KERNEL);
 			if (meta) {
 				meta->sequence = src_buf->sequence;
 				meta->timecode = src_buf->timecode;
diff --git a/drivers/media/platform/chips-media/coda/coda-common.c b/drivers/media/platform/chips-media/coda/coda-common.c
index 33f712ff8556..fea7682b2217 100644
--- a/drivers/media/platform/chips-media/coda/coda-common.c
+++ b/drivers/media/platform/chips-media/coda/coda-common.c
@@ -2606,7 +2606,7 @@ static int coda_open(struct file *file)
 	int ret;
 	int idx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/chips-media/coda/coda-jpeg.c b/drivers/media/platform/chips-media/coda/coda-jpeg.c
index fb150b87c773..487d08491a42 100644
--- a/drivers/media/platform/chips-media/coda/coda-jpeg.c
+++ b/drivers/media/platform/chips-media/coda/coda-jpeg.c
@@ -355,7 +355,7 @@ int coda_jpeg_decode_header(struct coda_ctx *ctx, struct vb2_buffer *vb)
 	}
 	huff_tab = ctx->params.jpeg_huff_tab;
 	if (!huff_tab) {
-		huff_tab = kzalloc(sizeof(struct coda_huff_tab), GFP_KERNEL);
+		huff_tab = kzalloc_obj(struct coda_huff_tab, GFP_KERNEL);
 		if (!huff_tab)
 			return -ENOMEM;
 		ctx->params.jpeg_huff_tab = huff_tab;
@@ -593,7 +593,7 @@ static int coda9_jpeg_gen_enc_huff_tab(struct coda_ctx *ctx, int tab_num,
 	};
 	int ret = -EINVAL;

-	huff = kzalloc(sizeof(*huff), GFP_KERNEL);
+	huff = kzalloc_obj(*huff, GFP_KERNEL);
 	if (!huff)
 		return -ENOMEM;

@@ -723,7 +723,7 @@ static int coda9_jpeg_load_huff_tab(struct coda_ctx *ctx)
 	int i, j;
 	int ret;

-	huff = kzalloc(sizeof(*huff), GFP_KERNEL);
+	huff = kzalloc_obj(*huff, GFP_KERNEL);
 	if (!huff)
 		return -ENOMEM;

diff --git a/drivers/media/platform/chips-media/coda/imx-vdoa.c b/drivers/media/platform/chips-media/coda/imx-vdoa.c
index c3561fcecb98..2e85043a7f01 100644
--- a/drivers/media/platform/chips-media/coda/imx-vdoa.c
+++ b/drivers/media/platform/chips-media/coda/imx-vdoa.c
@@ -201,7 +201,7 @@ struct vdoa_ctx *vdoa_context_create(struct vdoa_data *vdoa)
 	struct vdoa_ctx *ctx;
 	int err;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
index 8917542b993c..097ab7f595b0 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
@@ -1822,7 +1822,7 @@ static int wave5_vpu_open_dec(struct file *filp)
 	struct v4l2_m2m_ctx *m2m_ctx;
 	int ret = 0;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

@@ -1834,7 +1834,7 @@ static int wave5_vpu_open_dec(struct file *filp)
 	mutex_init(&inst->feed_lock);
 	INIT_LIST_HEAD(&inst->avail_src_bufs);

-	inst->codec_info = kzalloc(sizeof(*inst->codec_info), GFP_KERNEL);
+	inst->codec_info = kzalloc_obj(*inst->codec_info, GFP_KERNEL);
 	if (!inst->codec_info) {
 		kfree(inst);
 		return -ENOMEM;
diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
index 24fc0d0d3f4a..f9373ed9a97b 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
@@ -1571,7 +1571,7 @@ static int wave5_vpu_open_enc(struct file *filp)
 	struct v4l2_ctrl_handler *v4l2_ctrl_hdl;
 	int ret = 0;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;
 	v4l2_ctrl_hdl = &inst->v4l2_ctrl_hdl;
@@ -1580,7 +1580,7 @@ static int wave5_vpu_open_enc(struct file *filp)
 	inst->type = VPU_INST_TYPE_ENC;
 	inst->ops = &wave5_vpu_enc_inst_ops;

-	inst->codec_info = kzalloc(sizeof(*inst->codec_info), GFP_KERNEL);
+	inst->codec_info = kzalloc_obj(*inst->codec_info, GFP_KERNEL);
 	if (!inst->codec_info) {
 		kfree(inst);
 		return -ENOMEM;
diff --git a/drivers/media/platform/imagination/e5010-jpeg-enc.c b/drivers/media/platform/imagination/e5010-jpeg-enc.c
index 1c6e076033ec..803470d12bdb 100644
--- a/drivers/media/platform/imagination/e5010-jpeg-enc.c
+++ b/drivers/media/platform/imagination/e5010-jpeg-enc.c
@@ -728,7 +728,7 @@ static int e5010_open(struct file *file)
 	struct e5010_context *ctx;
 	int ret = 0;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/intel/pxa_camera.c b/drivers/media/platform/intel/pxa_camera.c
index bef1e7137f23..dbd465708f6f 100644
--- a/drivers/media/platform/intel/pxa_camera.c
+++ b/drivers/media/platform/intel/pxa_camera.c
@@ -741,7 +741,7 @@ static struct pxa_camera_format_xlate *pxa_mbus_build_fmts_xlate(
 	if (!fmts)
 		return ERR_PTR(-ENXIO);

-	user_formats = kcalloc(fmts + 1, sizeof(*user_formats), GFP_KERNEL);
+	user_formats = kzalloc_objs(*user_formats, fmts + 1, GFP_KERNEL);
 	if (!user_formats)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/platform/m2m-deinterlace.c b/drivers/media/platform/m2m-deinterlace.c
index af098874ead5..568193243869 100644
--- a/drivers/media/platform/m2m-deinterlace.c
+++ b/drivers/media/platform/m2m-deinterlace.c
@@ -835,7 +835,7 @@ static int deinterlace_open(struct file *file)
 	struct deinterlace_dev *pcdev = video_drvdata(file);
 	struct deinterlace_ctx *ctx = NULL;

-	ctx = kzalloc(sizeof *ctx, GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/marvell/cafe-driver.c b/drivers/media/platform/marvell/cafe-driver.c
index f9796de92aa7..a447099b40cc 100644
--- a/drivers/media/platform/marvell/cafe-driver.c
+++ b/drivers/media/platform/marvell/cafe-driver.c
@@ -327,7 +327,7 @@ static int cafe_smbus_setup(struct cafe_camera *cam)
 	struct i2c_adapter *adap;
 	int ret;

-	adap = kzalloc(sizeof(*adap), GFP_KERNEL);
+	adap = kzalloc_obj(*adap, GFP_KERNEL);
 	if (adap == NULL)
 		return -ENOMEM;
 	adap->owner = THIS_MODULE;
@@ -485,7 +485,7 @@ static int cafe_pci_probe(struct pci_dev *pdev,
 	 * Start putting together one of our big camera structures.
 	 */
 	ret = -ENOMEM;
-	cam = kzalloc(sizeof(struct cafe_camera), GFP_KERNEL);
+	cam = kzalloc_obj(struct cafe_camera, GFP_KERNEL);
 	if (cam == NULL)
 		goto out;
 	pci_set_drvdata(pdev, cam);
diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
index d08fe365cbb2..7a506b1f03da 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
@@ -1151,7 +1151,7 @@ static int mtk_jpeg_open(struct file *file)
 	struct mtk_jpeg_ctx *ctx;
 	int ret = 0;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/mdp/mtk_mdp_m2m.c b/drivers/media/platform/mediatek/mdp/mtk_mdp_m2m.c
index 03c07948dfdd..e069e326d2bd 100644
--- a/drivers/media/platform/mediatek/mdp/mtk_mdp_m2m.c
+++ b/drivers/media/platform/mediatek/mdp/mtk_mdp_m2m.c
@@ -1053,7 +1053,7 @@ static int mtk_mdp_m2m_open(struct file *file)
 	int ret;
 	struct v4l2_format default_format;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
index e5ccf673e152..d4dd2cad0d7f 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
@@ -564,7 +564,7 @@ static struct mdp_cmdq_cmd *mdp_cmdq_prepare(struct mdp_dev *mdp,
 		goto err_uninit;
 	}

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto err_uninit;
@@ -583,13 +583,13 @@ static struct mdp_cmdq_cmd *mdp_cmdq_prepare(struct mdp_dev *mdp,
 		goto err_destroy_pkt;
 	}

-	comps = kcalloc(num_comp, sizeof(*comps), GFP_KERNEL);
+	comps = kzalloc_objs(*comps, num_comp, GFP_KERNEL);
 	if (!comps) {
 		ret = -ENOMEM;
 		goto err_destroy_pkt;
 	}

-	path = kzalloc(sizeof(*path), GFP_KERNEL);
+	path = kzalloc_obj(*path, GFP_KERNEL);
 	if (!path) {
 		ret = -ENOMEM;
 		goto err_free_comps;
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
index f20d2ed1f2bb..978bf12cc1d0 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
@@ -221,7 +221,7 @@ static int mdp_probe(struct platform_device *pdev)
 	struct resource *res;
 	int ret, i, mutex_id;

-	mdp = kzalloc(sizeof(*mdp), GFP_KERNEL);
+	mdp = kzalloc_obj(*mdp, GFP_KERNEL);
 	if (!mdp) {
 		ret = -ENOMEM;
 		goto err_return;
diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c
index 44140987cf5f..bb8f70a42f32 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c
@@ -568,7 +568,7 @@ static int mdp_m2m_open(struct file *file)
 	struct v4l2_format default_format = {};
 	const struct mdp_limit *limit = mdp->mdp_data->def_limit;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_dbgfs.c b/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_dbgfs.c
index 643d6fff088b..c4566eb52db8 100644
--- a/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_dbgfs.c
+++ b/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_dbgfs.c
@@ -149,7 +149,7 @@ void mtk_vcodec_dbgfs_create(struct mtk_vcodec_dec_ctx *ctx)
 	struct mtk_vcodec_dbgfs_inst *dbgfs_inst;
 	struct mtk_vcodec_dec_dev *vcodec_dev = ctx->dev;

-	dbgfs_inst = kzalloc(sizeof(*dbgfs_inst), GFP_KERNEL);
+	dbgfs_inst = kzalloc_obj(*dbgfs_inst, GFP_KERNEL);
 	if (!dbgfs_inst)
 		return;

diff --git a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv.c b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv.c
index 3b81fae9f913..066bb304a34c 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv.c
@@ -200,7 +200,7 @@ static int fops_vcodec_open(struct file *file)
 	struct vb2_queue *src_vq;
 	unsigned long flags;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c
index 8e1cf16a168a..85b88aa45f5b 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c
@@ -735,7 +735,7 @@ static struct media_request *fops_media_request_alloc(struct media_device *mdev)
 {
 	struct mtk_vcodec_dec_request *req;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);

 	return &req->req;
 }
diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c
index 7be4b6086920..a3ea4d2a9fb0 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_av1_req_lat_if.c
@@ -1879,7 +1879,7 @@ static int vdec_av1_slice_init(struct mtk_vcodec_dec_ctx *ctx)
 	struct vdec_av1_slice_init_vsi *vsi;
 	int ret;

-	instance = kzalloc(sizeof(*instance), GFP_KERNEL);
+	instance = kzalloc_obj(*instance, GFP_KERNEL);
 	if (!instance)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_if.c
index 795cb19b075d..a754b96ae84b 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_if.c
@@ -270,7 +270,7 @@ static int vdec_h264_init(struct mtk_vcodec_dec_ctx *ctx)
 	struct vdec_h264_inst *inst = NULL;
 	int err;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_if.c
index b9a5ea7887d3..9cf7ff35731e 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_if.c
@@ -273,7 +273,7 @@ static int vdec_h264_slice_init(struct mtk_vcodec_dec_ctx *ctx)
 	struct vdec_h264_slice_inst *inst;
 	int err;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c
index 9a9dc2f88d6e..d761e70f5933 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_h264_req_multi_if.c
@@ -1208,7 +1208,7 @@ static int vdec_h264_slice_init(struct mtk_vcodec_dec_ctx *ctx)
 	int err, vsi_size;
 	unsigned char *temp;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_hevc_req_multi_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_hevc_req_multi_if.c
index 88eca50c2017..1c925deaa721 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_hevc_req_multi_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_hevc_req_multi_if.c
@@ -858,7 +858,7 @@ static int vdec_hevc_slice_init(struct mtk_vcodec_dec_ctx *ctx)
 	struct vdec_hevc_slice_inst *inst;
 	int err, vsi_size;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp8_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp8_if.c
index 5f848691cea4..af5bd3c24729 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp8_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp8_if.c
@@ -390,7 +390,7 @@ static int vdec_vp8_init(struct mtk_vcodec_dec_ctx *ctx)
 	struct vdec_vp8_inst *inst;
 	int err;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return  -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp8_req_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp8_req_if.c
index e1d4960553f2..27d6af7836b9 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp8_req_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp8_req_if.c
@@ -275,7 +275,7 @@ static int vdec_vp8_slice_init(struct mtk_vcodec_dec_ctx *ctx)
 	struct vdec_vp8_slice_inst *inst;
 	int err;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_req_lat_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_req_lat_if.c
index cd1935014d76..1b4bc0f60b8b 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_req_lat_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_req_lat_if.c
@@ -1848,7 +1848,7 @@ static int vdec_vp9_slice_init(struct mtk_vcodec_dec_ctx *ctx)
 	struct vdec_vp9_slice_init_vsi *vsi;
 	int ret;

-	instance = kzalloc(sizeof(*instance), GFP_KERNEL);
+	instance = kzalloc_obj(*instance, GFP_KERNEL);
 	if (!instance)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c
index 82b8ff38e8f1..c02cdb7acd63 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c
+++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.c
@@ -119,7 +119,7 @@ static int fops_vcodec_open(struct file *file)
 	struct vb2_queue *src_vq;
 	unsigned long flags;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_h264_if.c b/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_h264_if.c
index 0f63657d8bad..d7630d9ae305 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_h264_if.c
+++ b/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_h264_if.c
@@ -588,7 +588,7 @@ static int h264_enc_init(struct mtk_vcodec_enc_ctx *ctx)
 	int ret = 0;
 	struct venc_h264_inst *inst;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_vp8_if.c b/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_vp8_if.c
index 05abca91e742..b85b177ebcce 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_vp8_if.c
+++ b/drivers/media/platform/mediatek/vcodec/encoder/venc/venc_vp8_if.c
@@ -316,7 +316,7 @@ static int vp8_enc_init(struct mtk_vcodec_enc_ctx *ctx)
 	int ret = 0;
 	struct venc_vp8_inst *inst;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/drivers/media/platform/nuvoton/npcm-video.c b/drivers/media/platform/nuvoton/npcm-video.c
index 44e904e61801..eccd92774344 100644
--- a/drivers/media/platform/nuvoton/npcm-video.c
+++ b/drivers/media/platform/nuvoton/npcm-video.c
@@ -411,7 +411,7 @@ static unsigned int npcm_video_add_rect(struct npcm_video *video,
 	struct rect_list *list = NULL;
 	struct v4l2_rect *r;

-	list = kzalloc(sizeof(*list), GFP_KERNEL);
+	list = kzalloc_obj(*list, GFP_KERNEL);
 	if (!list)
 		return 0;

@@ -466,7 +466,7 @@ static struct rect_list *npcm_video_new_rect(struct npcm_video *video,
 	struct rect_list *list = NULL;
 	struct v4l2_rect *r;

-	list = kzalloc(sizeof(*list), GFP_KERNEL);
+	list = kzalloc_obj(*list, GFP_KERNEL);
 	if (!list)
 		return NULL;

@@ -1733,7 +1733,7 @@ static int npcm_video_init(struct npcm_video *video)

 static int npcm_video_probe(struct platform_device *pdev)
 {
-	struct npcm_video *video = kzalloc(sizeof(*video), GFP_KERNEL);
+	struct npcm_video *video = kzalloc_obj(*video, GFP_KERNEL);
 	int rc;
 	void __iomem *regs;

diff --git a/drivers/media/platform/nvidia/tegra-vde/dmabuf-cache.c b/drivers/media/platform/nvidia/tegra-vde/dmabuf-cache.c
index b34244ea14dd..4e4b8c09d5be 100644
--- a/drivers/media/platform/nvidia/tegra-vde/dmabuf-cache.c
+++ b/drivers/media/platform/nvidia/tegra-vde/dmabuf-cache.c
@@ -115,7 +115,7 @@ int tegra_vde_dmabuf_cache_map(struct tegra_vde *vde,
 		goto err_unmap;
 	}

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		err = -ENOMEM;
 		goto err_unmap;
diff --git a/drivers/media/platform/nvidia/tegra-vde/v4l2.c b/drivers/media/platform/nvidia/tegra-vde/v4l2.c
index d94978ae2baf..d877802352d3 100644
--- a/drivers/media/platform/nvidia/tegra-vde/v4l2.c
+++ b/drivers/media/platform/nvidia/tegra-vde/v4l2.c
@@ -811,8 +811,7 @@ static int tegra_open(struct file *file)
 	struct tegra_ctx *ctx;
 	int err;

-	ctx = kzalloc(struct_size(ctx, ctrls, ARRAY_SIZE(ctrl_cfgs)),
-		      GFP_KERNEL);
+	ctx = kzalloc_flex(*ctx, ctrls, ARRAY_SIZE(ctrl_cfgs), GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/nvidia/tegra-vde/vde.c b/drivers/media/platform/nvidia/tegra-vde/vde.c
index 3232392c60e2..a1d4a1ab12f9 100644
--- a/drivers/media/platform/nvidia/tegra-vde/vde.c
+++ b/drivers/media/platform/nvidia/tegra-vde/vde.c
@@ -61,7 +61,7 @@ int tegra_vde_alloc_bo(struct tegra_vde *vde,
 	struct tegra_vde_bo *bo;
 	int err;

-	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+	bo = kzalloc_obj(*bo, GFP_KERNEL);
 	if (!bo)
 		return -ENOMEM;

diff --git a/drivers/media/platform/nxp/dw100/dw100.c b/drivers/media/platform/nxp/dw100/dw100.c
index 4aaf9c3fff53..cf20f1ffc1d1 100644
--- a/drivers/media/platform/nxp/dw100/dw100.c
+++ b/drivers/media/platform/nxp/dw100/dw100.c
@@ -601,7 +601,7 @@ static int dw100_open(struct file *file)
 	struct v4l2_pix_format_mplane *pix_fmt;
 	int ret, i;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
index b558700d1d96..100320ddf545 100644
--- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
+++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
@@ -2200,7 +2200,7 @@ static int mxc_jpeg_open(struct file *file)
 	struct mxc_jpeg_ctx *ctx;
 	int ret = 0;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/nxp/imx-pxp.c b/drivers/media/platform/nxp/imx-pxp.c
index 3f9a67a6bd4d..ad31a3459b94 100644
--- a/drivers/media/platform/nxp/imx-pxp.c
+++ b/drivers/media/platform/nxp/imx-pxp.c
@@ -1646,7 +1646,7 @@ static int pxp_open(struct file *file)

 	if (mutex_lock_interruptible(&dev->dev_mutex))
 		return -ERESTARTSYS;
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		rc = -ENOMEM;
 		goto open_unlock;
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
index 18146978bdf5..87346979ef09 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
@@ -474,8 +474,8 @@ static int mxc_isi_probe(struct platform_device *pdev)

 	isi->pdata = of_device_get_match_data(dev);

-	isi->pipes = kcalloc(isi->pdata->num_channels, sizeof(isi->pipes[0]),
-			     GFP_KERNEL);
+	isi->pipes = kzalloc_objs(isi->pipes[0], isi->pdata->num_channels,
+				  GFP_KERNEL);
 	if (!isi->pipes)
 		return -ENOMEM;

diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c
index 3c26cfef93d1..2cd014a79006 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c
@@ -189,7 +189,7 @@ static int mxc_isi_crossbar_init_state(struct v4l2_subdev *sd,
 	 * pipelines by default.
 	 */
 	routing.num_routes = min(xbar->num_sinks - 1, xbar->num_sources);
-	routes = kcalloc(routing.num_routes, sizeof(*routes), GFP_KERNEL);
+	routes = kzalloc_objs(*routes, routing.num_routes, GFP_KERNEL);
 	if (!routes)
 		return -ENOMEM;

@@ -454,12 +454,11 @@ int mxc_isi_crossbar_init(struct mxc_isi_dev *isi)
 	xbar->num_sources = isi->pdata->num_channels;
 	num_pads = xbar->num_sinks + xbar->num_sources;

-	xbar->pads = kcalloc(num_pads, sizeof(*xbar->pads), GFP_KERNEL);
+	xbar->pads = kzalloc_objs(*xbar->pads, num_pads, GFP_KERNEL);
 	if (!xbar->pads)
 		return -ENOMEM;

-	xbar->inputs = kcalloc(xbar->num_sinks, sizeof(*xbar->inputs),
-			       GFP_KERNEL);
+	xbar->inputs = kzalloc_objs(*xbar->inputs, xbar->num_sinks, GFP_KERNEL);
 	if (!xbar->inputs) {
 		ret = -ENOMEM;
 		goto err_free;
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
index f425ac786854..e6ad1044b954 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
@@ -624,7 +624,7 @@ static int mxc_isi_m2m_open(struct file *file)
 	struct mxc_isi_m2m_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/nxp/mx2_emmaprp.c b/drivers/media/platform/nxp/mx2_emmaprp.c
index 02d57229b9b3..8f588688f049 100644
--- a/drivers/media/platform/nxp/mx2_emmaprp.c
+++ b/drivers/media/platform/nxp/mx2_emmaprp.c
@@ -718,7 +718,7 @@ static int emmaprp_open(struct file *file)
 	struct emmaprp_dev *pcdev = video_drvdata(file);
 	struct emmaprp_ctx *ctx;

-	ctx = kzalloc(sizeof *ctx, GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/media/platform/qcom/iris/iris_buffer.c
index f1f003a787bf..f0fdba0ae987 100644
--- a/drivers/media/platform/qcom/iris/iris_buffer.c
+++ b/drivers/media/platform/qcom/iris/iris_buffer.c
@@ -342,7 +342,7 @@ static int iris_create_internal_buffer(struct iris_inst *inst,
 	if (!buffers->size)
 		return 0;

-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;

diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
index 11815f6f5bac..abffd20cf25b 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
@@ -1087,5 +1087,5 @@ void iris_hfi_gen1_command_ops_init(struct iris_core *core)

 struct iris_inst *iris_hfi_gen1_get_instance(void)
 {
-	return kzalloc(sizeof(struct iris_inst), GFP_KERNEL);
+	return kzalloc_obj(struct iris_inst, GFP_KERNEL);
 }
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
index 715ec9575b90..d45cecd5e544 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
@@ -1329,7 +1329,7 @@ struct iris_inst *iris_hfi_gen2_get_instance(void)
 	struct iris_inst_hfi_gen2 *out;

 	/* The allocation is intentionally larger than struct iris_inst. */
-	out = kzalloc(sizeof(*out), GFP_KERNEL);
+	out = kzalloc_obj(*out, GFP_KERNEL);

 	return &out->inst;
 }
diff --git a/drivers/media/platform/qcom/iris/iris_vdec.c b/drivers/media/platform/qcom/iris/iris_vdec.c
index 467d00044a2f..3cfbdc04d3a9 100644
--- a/drivers/media/platform/qcom/iris/iris_vdec.c
+++ b/drivers/media/platform/qcom/iris/iris_vdec.c
@@ -21,8 +21,8 @@ int iris_vdec_inst_init(struct iris_inst *inst)
 	struct iris_core *core = inst->core;
 	struct v4l2_format *f;

-	inst->fmt_src  = kzalloc(sizeof(*inst->fmt_src), GFP_KERNEL);
-	inst->fmt_dst  = kzalloc(sizeof(*inst->fmt_dst), GFP_KERNEL);
+	inst->fmt_src = kzalloc_obj(*inst->fmt_src, GFP_KERNEL);
+	inst->fmt_dst = kzalloc_obj(*inst->fmt_dst, GFP_KERNEL);

 	inst->fw_min_count = MIN_BUFFERS;

diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
index 6461d9c9d598..d3531a3cc2a2 100644
--- a/drivers/media/platform/qcom/iris/iris_venc.c
+++ b/drivers/media/platform/qcom/iris/iris_venc.c
@@ -19,8 +19,8 @@ int iris_venc_inst_init(struct iris_inst *inst)
 	struct iris_core *core = inst->core;
 	struct v4l2_format *f;

-	inst->fmt_src = kzalloc(sizeof(*inst->fmt_src), GFP_KERNEL);
-	inst->fmt_dst  = kzalloc(sizeof(*inst->fmt_dst), GFP_KERNEL);
+	inst->fmt_src = kzalloc_obj(*inst->fmt_src, GFP_KERNEL);
+	inst->fmt_dst = kzalloc_obj(*inst->fmt_dst, GFP_KERNEL);
 	if (!inst->fmt_src || !inst->fmt_dst) {
 		kfree(inst->fmt_src);
 		kfree(inst->fmt_dst);
diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index 24d2b2fd0340..db3536956131 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -213,7 +213,7 @@ static int venus_enumerate_codecs(struct venus_core *core, u32 type)
 	if (core->res->hfi_version != HFI_VERSION_1XX)
 		return 0;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

@@ -329,7 +329,7 @@ static int venus_add_dynamic_nodes(struct venus_core *core)
 	struct device *dev = core->dev;
 	int ret;

-	core->ocs = kmalloc(sizeof(*core->ocs), GFP_KERNEL);
+	core->ocs = kmalloc_obj(*core->ocs, GFP_KERNEL);
 	if (!core->ocs)
 		return -ENOMEM;

diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
index 2e4363f82231..f4223470f0dd 100644
--- a/drivers/media/platform/qcom/venus/helpers.c
+++ b/drivers/media/platform/qcom/venus/helpers.c
@@ -192,7 +192,7 @@ int venus_helper_alloc_dpb_bufs(struct venus_inst *inst)
 	count = hfi_bufreq_get_count_min(&bufreq, ver);

 	for (i = 0; i < count; i++) {
-		buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+		buf = kzalloc_obj(*buf, GFP_KERNEL);
 		if (!buf) {
 			ret = -ENOMEM;
 			goto fail;
@@ -248,7 +248,7 @@ static int intbufs_set_buffer(struct venus_inst *inst, u32 type)
 		return 0;

 	for (i = 0; i < bufreq.count_actual; i++) {
-		buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+		buf = kzalloc_obj(*buf, GFP_KERNEL);
 		if (!buf) {
 			ret = -ENOMEM;
 			goto fail;
diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index d3da35f67fd5..a6cf17e379f7 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -1702,7 +1702,7 @@ int venus_hfi_create(struct venus_core *core)
 	struct venus_hfi_device *hdev;
 	int ret;

-	hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
+	hdev = kzalloc_obj(*hdev, GFP_KERNEL);
 	if (!hdev)
 		return -ENOMEM;

diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
index 21ca4947a849..3f46e2d8ccce 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -1684,7 +1684,7 @@ static int vdec_open(struct file *file)
 	struct venus_inst *inst;
 	int ret;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
index 0b5843ba536f..32185f29eee5 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -1466,7 +1466,7 @@ static int venc_open(struct file *file)
 	struct venus_inst *inst;
 	int ret;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/drivers/media/platform/raspberrypi/rp1-cfe/cfe.c b/drivers/media/platform/raspberrypi/rp1-cfe/cfe.c
index 62dca76b468d..a02a966d9c3b 100644
--- a/drivers/media/platform/raspberrypi/rp1-cfe/cfe.c
+++ b/drivers/media/platform/raspberrypi/rp1-cfe/cfe.c
@@ -2279,7 +2279,7 @@ static int cfe_probe(struct platform_device *pdev)
 	char debugfs_name[32];
 	int ret;

-	cfe = kzalloc(sizeof(*cfe), GFP_KERNEL);
+	cfe = kzalloc_obj(*cfe, GFP_KERNEL);
 	if (!cfe)
 		return -ENOMEM;

diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-core.c b/drivers/media/platform/renesas/rcar-vin/rcar-core.c
index 100105b620e3..36421defa598 100644
--- a/drivers/media/platform/renesas/rcar-vin/rcar-core.c
+++ b/drivers/media/platform/renesas/rcar-vin/rcar-core.c
@@ -128,7 +128,7 @@ static int rvin_group_get(struct rvin_dev *vin,
 		group = rvin_group_data;
 		kref_get(&group->refcount);
 	} else {
-		group = kzalloc(sizeof(*group), GFP_KERNEL);
+		group = kzalloc_obj(*group, GFP_KERNEL);
 		if (!group) {
 			ret = -ENOMEM;
 			goto err_group;
diff --git a/drivers/media/platform/renesas/rcar_fdp1.c b/drivers/media/platform/renesas/rcar_fdp1.c
index 672869815f63..791cff4a48ea 100644
--- a/drivers/media/platform/renesas/rcar_fdp1.c
+++ b/drivers/media/platform/renesas/rcar_fdp1.c
@@ -2078,7 +2078,7 @@ static int fdp1_open(struct file *file)
 	if (mutex_lock_interruptible(&fdp1->dev_mutex))
 		return -ERESTARTSYS;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		ret = -ENOMEM;
 		goto done;
diff --git a/drivers/media/platform/renesas/rcar_jpu.c b/drivers/media/platform/renesas/rcar_jpu.c
index a6d26b446494..3a3aa6bba9d2 100644
--- a/drivers/media/platform/renesas/rcar_jpu.c
+++ b/drivers/media/platform/renesas/rcar_jpu.c
@@ -1212,7 +1212,7 @@ static int jpu_open(struct file *file)
 	struct jpu_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/renesas/renesas-ceu.c b/drivers/media/platform/renesas/renesas-ceu.c
index deed49d0fb10..a827a4cf6826 100644
--- a/drivers/media/platform/renesas/renesas-ceu.c
+++ b/drivers/media/platform/renesas/renesas-ceu.c
@@ -1616,7 +1616,7 @@ static int ceu_probe(struct platform_device *pdev)
 	int num_subdevs;
 	int ret;

-	ceudev = kzalloc(sizeof(*ceudev), GFP_KERNEL);
+	ceudev = kzalloc_obj(*ceudev, GFP_KERNEL);
 	if (!ceudev)
 		return -ENOMEM;

diff --git a/drivers/media/platform/renesas/vsp1/vsp1_dl.c b/drivers/media/platform/renesas/vsp1/vsp1_dl.c
index d732b4ed1180..f6b5623bf7d5 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_dl.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_dl.c
@@ -259,7 +259,7 @@ vsp1_dl_body_pool_create(struct vsp1_device *vsp1, unsigned int num_bodies,
 	size_t dlb_size;
 	unsigned int i;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;

@@ -274,7 +274,7 @@ vsp1_dl_body_pool_create(struct vsp1_device *vsp1, unsigned int num_bodies,
 	dlb_size = num_entries * sizeof(struct vsp1_dl_entry) + extra_size;
 	pool->size = dlb_size * num_bodies;

-	pool->bodies = kcalloc(num_bodies, sizeof(*pool->bodies), GFP_KERNEL);
+	pool->bodies = kzalloc_objs(*pool->bodies, num_bodies, GFP_KERNEL);
 	if (!pool->bodies) {
 		kfree(pool);
 		return NULL;
@@ -434,7 +434,7 @@ vsp1_dl_cmd_pool_create(struct vsp1_device *vsp1, enum vsp1_extcmd_type type,
 	unsigned int i;
 	size_t cmd_size;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;

@@ -443,7 +443,7 @@ vsp1_dl_cmd_pool_create(struct vsp1_device *vsp1, enum vsp1_extcmd_type type,
 	spin_lock_init(&pool->lock);
 	INIT_LIST_HEAD(&pool->free);

-	pool->cmds = kcalloc(num_cmds, sizeof(*pool->cmds), GFP_KERNEL);
+	pool->cmds = kzalloc_objs(*pool->cmds, num_cmds, GFP_KERNEL);
 	if (!pool->cmds) {
 		kfree(pool);
 		return NULL;
@@ -557,7 +557,7 @@ static struct vsp1_dl_list *vsp1_dl_list_alloc(struct vsp1_dl_manager *dlm)
 	struct vsp1_dl_list *dl;
 	size_t header_offset;

-	dl = kzalloc(sizeof(*dl), GFP_KERNEL);
+	dl = kzalloc_obj(*dl, GFP_KERNEL);
 	if (!dl)
 		return NULL;

diff --git a/drivers/media/platform/renesas/vsp1/vsp1_video.c b/drivers/media/platform/renesas/vsp1/vsp1_video.c
index 75f9a1a85d55..e1f1c2a933ab 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_video.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_video.c
@@ -565,7 +565,7 @@ static struct vsp1_pipeline *vsp1_video_pipeline_get(struct vsp1_video *video)
 	 * when the last reference is released.
 	 */
 	if (!video->rwpf->entity.pipe) {
-		pipe = kzalloc(sizeof(*pipe), GFP_KERNEL);
+		pipe = kzalloc_obj(*pipe, GFP_KERNEL);
 		if (!pipe)
 			return ERR_PTR(-ENOMEM);

@@ -720,8 +720,8 @@ static int vsp1_video_pipeline_setup_partitions(struct vsp1_pipeline *pipe)
 	}

 	pipe->partitions = DIV_ROUND_UP(format->width, div_size);
-	pipe->part_table = kcalloc(pipe->partitions, sizeof(*pipe->part_table),
-				   GFP_KERNEL);
+	pipe->part_table = kzalloc_objs(*pipe->part_table, pipe->partitions,
+					GFP_KERNEL);
 	if (!pipe->part_table)
 		return -ENOMEM;

@@ -1074,7 +1074,7 @@ static int vsp1_video_open(struct file *file)
 	struct v4l2_fh *vfh;
 	int ret = 0;

-	vfh = kzalloc(sizeof(*vfh), GFP_KERNEL);
+	vfh = kzalloc_obj(*vfh, GFP_KERNEL);
 	if (vfh == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/platform/rockchip/rga/rga.c b/drivers/media/platform/rockchip/rga/rga.c
index 43f6a8d99381..736072635ed5 100644
--- a/drivers/media/platform/rockchip/rga/rga.c
+++ b/drivers/media/platform/rockchip/rga/rga.c
@@ -370,7 +370,7 @@ static int rga_open(struct file *file)
 	struct rga_ctx *ctx = NULL;
 	int ret = 0;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx->rga = rga;
diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-h264.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-h264.c
index a1af12c97914..377607c94092 100644
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec-h264.c
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-h264.c
@@ -375,7 +375,7 @@ static int rkvdec_h264_start(struct rkvdec_ctx *ctx)
 	if (ret)
 		return ret;

-	h264_ctx = kzalloc(sizeof(*h264_ctx), GFP_KERNEL);
+	h264_ctx = kzalloc_obj(*h264_ctx, GFP_KERNEL);
 	if (!h264_ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-hevc.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-hevc.c
index 3276f584f5c7..abb695ebe258 100644
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec-hevc.c
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-hevc.c
@@ -528,7 +528,7 @@ static int rkvdec_hevc_start(struct rkvdec_ctx *ctx)
 	struct rkvdec_hevc_priv_tbl *priv_tbl;
 	struct rkvdec_hevc_ctx *hevc_ctx;

-	hevc_ctx = kzalloc(sizeof(*hevc_ctx), GFP_KERNEL);
+	hevc_ctx = kzalloc_obj(*hevc_ctx, GFP_KERNEL);
 	if (!hevc_ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-h264.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-h264.c
index cd0aa3f3a13d..218377f91a0b 100644
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-h264.c
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-h264.c
@@ -383,7 +383,7 @@ static int rkvdec_h264_start(struct rkvdec_ctx *ctx)
 	if (ret)
 		return ret;

-	h264_ctx = kzalloc(sizeof(*h264_ctx), GFP_KERNEL);
+	h264_ctx = kzalloc_obj(*h264_ctx, GFP_KERNEL);
 	if (!h264_ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-hevc.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-hevc.c
index 5f1c11ffb9f0..b5f20c8d4285 100644
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-hevc.c
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu381-hevc.c
@@ -551,7 +551,7 @@ static int rkvdec_hevc_start(struct rkvdec_ctx *ctx)
 	if (ret)
 		return ret;

-	hevc_ctx = kzalloc(sizeof(*hevc_ctx), GFP_KERNEL);
+	hevc_ctx = kzalloc_obj(*hevc_ctx, GFP_KERNEL);
 	if (!hevc_ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-h264.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-h264.c
index 6ab3167addc8..bb53163efe41 100644
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-h264.c
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-h264.c
@@ -447,7 +447,7 @@ static int rkvdec_h264_start(struct rkvdec_ctx *ctx)
 	if (ret)
 		return ret;

-	h264_ctx = kzalloc(sizeof(*h264_ctx), GFP_KERNEL);
+	h264_ctx = kzalloc_obj(*h264_ctx, GFP_KERNEL);
 	if (!h264_ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-hevc.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-hevc.c
index 085c0a63a80c..0e5a58e48608 100644
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-hevc.c
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-hevc.c
@@ -559,7 +559,7 @@ static int rkvdec_hevc_start(struct rkvdec_ctx *ctx)
 	if (ret)
 		return ret;

-	hevc_ctx = kzalloc(sizeof(*hevc_ctx), GFP_KERNEL);
+	hevc_ctx = kzalloc_obj(*hevc_ctx, GFP_KERNEL);
 	if (!hevc_ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c
index ba51a7c2fe55..1e66333e4589 100644
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c
@@ -971,7 +971,7 @@ static int rkvdec_vp9_start(struct rkvdec_ctx *ctx)
 	unsigned char *count_tbl;
 	int ret;

-	vp9_ctx = kzalloc(sizeof(*vp9_ctx), GFP_KERNEL);
+	vp9_ctx = kzalloc_obj(*vp9_ctx, GFP_KERNEL);
 	if (!vp9_ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec.c b/drivers/media/platform/rockchip/rkvdec/rkvdec.c
index 967c452ab61f..2d4493434077 100644
--- a/drivers/media/platform/rockchip/rkvdec/rkvdec.c
+++ b/drivers/media/platform/rockchip/rkvdec/rkvdec.c
@@ -1282,7 +1282,7 @@ static int rkvdec_open(struct file *filp)
 	struct rkvdec_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/samsung/exynos-gsc/gsc-m2m.c b/drivers/media/platform/samsung/exynos-gsc/gsc-m2m.c
index 722e2531e23f..9d15a2115c23 100644
--- a/drivers/media/platform/samsung/exynos-gsc/gsc-m2m.c
+++ b/drivers/media/platform/samsung/exynos-gsc/gsc-m2m.c
@@ -612,7 +612,7 @@ static int gsc_m2m_open(struct file *file)
 	if (mutex_lock_interruptible(&gsc->lock))
 		return -ERESTARTSYS;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		ret = -ENOMEM;
 		goto unlock;
diff --git a/drivers/media/platform/samsung/exynos4-is/fimc-capture.c b/drivers/media/platform/samsung/exynos4-is/fimc-capture.c
index 5b412afd7d60..0b8327e4a875 100644
--- a/drivers/media/platform/samsung/exynos4-is/fimc-capture.c
+++ b/drivers/media/platform/samsung/exynos4-is/fimc-capture.c
@@ -1718,7 +1718,7 @@ static int fimc_register_capture_device(struct fimc_dev *fimc,
 	struct fimc_ctx *ctx;
 	int ret = -ENOMEM;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/samsung/exynos4-is/fimc-m2m.c b/drivers/media/platform/samsung/exynos4-is/fimc-m2m.c
index 562c57f186c6..2aa9c22df72b 100644
--- a/drivers/media/platform/samsung/exynos4-is/fimc-m2m.c
+++ b/drivers/media/platform/samsung/exynos4-is/fimc-m2m.c
@@ -616,7 +616,7 @@ static int fimc_m2m_open(struct file *file)
 	if (test_bit(ST_CAPT_BUSY, &fimc->state))
 		goto unlock;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		ret = -ENOMEM;
 		goto unlock;
diff --git a/drivers/media/platform/samsung/exynos4-is/media-dev.c b/drivers/media/platform/samsung/exynos4-is/media-dev.c
index bc7087eb761a..56d8b7cd3b5a 100644
--- a/drivers/media/platform/samsung/exynos4-is/media-dev.c
+++ b/drivers/media/platform/samsung/exynos4-is/media-dev.c
@@ -373,7 +373,7 @@ static struct exynos_media_pipeline *fimc_md_pipeline_create(
 {
 	struct fimc_pipeline *p;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return NULL;

diff --git a/drivers/media/platform/samsung/s5p-g2d/g2d.c b/drivers/media/platform/samsung/s5p-g2d/g2d.c
index e765dfcc2830..a1d6315d8c4a 100644
--- a/drivers/media/platform/samsung/s5p-g2d/g2d.c
+++ b/drivers/media/platform/samsung/s5p-g2d/g2d.c
@@ -237,7 +237,7 @@ static int g2d_open(struct file *file)
 	struct g2d_ctx *ctx = NULL;
 	int ret = 0;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx->dev = dev;
diff --git a/drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c b/drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c
index ff28482759ec..68250d7bb02d 100644
--- a/drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c
+++ b/drivers/media/platform/samsung/s5p-jpeg/jpeg-core.c
@@ -953,7 +953,7 @@ static int s5p_jpeg_open(struct file *file)
 	struct s5p_jpeg_fmt *out_fmt, *cap_fmt;
 	int ret = 0;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c
index 4948d734eb02..e79441f01a51 100644
--- a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c
+++ b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc.c
@@ -794,7 +794,7 @@ static int s5p_mfc_open(struct file *file)
 	}
 	dev->num_inst++;	/* It is guarded by mfc_mutex in vfd */
 	/* Allocate memory for context */
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		ret = -ENOMEM;
 		goto err_alloc;
diff --git a/drivers/media/platform/st/sti/bdisp/bdisp-v4l2.c b/drivers/media/platform/st/sti/bdisp/bdisp-v4l2.c
index 56169b70652d..6f7b3f0db48e 100644
--- a/drivers/media/platform/st/sti/bdisp/bdisp-v4l2.c
+++ b/drivers/media/platform/st/sti/bdisp/bdisp-v4l2.c
@@ -583,7 +583,7 @@ static int bdisp_open(struct file *file)
 		return -ERESTARTSYS;

 	/* Allocate memory for both context and node */
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		ret = -ENOMEM;
 		goto unlock;
diff --git a/drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c b/drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c
index a078f1107300..ed05feac6944 100644
--- a/drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c
+++ b/drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c
@@ -324,7 +324,7 @@ static int delta_mjpeg_open(struct delta_ctx *pctx)
 {
 	struct delta_mjpeg_ctx *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	pctx->priv = ctx;
diff --git a/drivers/media/platform/st/sti/delta/delta-v4l2.c b/drivers/media/platform/st/sti/delta/delta-v4l2.c
index 6c1a53c771f7..b3fb25bd0f60 100644
--- a/drivers/media/platform/st/sti/delta/delta-v4l2.c
+++ b/drivers/media/platform/st/sti/delta/delta-v4l2.c
@@ -164,7 +164,7 @@ static void delta_push_dts(struct delta_ctx *ctx, u64 val)
 {
 	struct delta_dts *dts;

-	dts = kzalloc(sizeof(*dts), GFP_KERNEL);
+	dts = kzalloc_obj(*dts, GFP_KERNEL);
 	if (!dts)
 		return;

@@ -1629,7 +1629,7 @@ static int delta_open(struct file *file)

 	mutex_lock(&delta->lock);

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/platform/st/sti/hva/hva-v4l2.c b/drivers/media/platform/st/sti/hva/hva-v4l2.c
index 3581b73a99b8..4b2100b7242b 100644
--- a/drivers/media/platform/st/sti/hva/hva-v4l2.c
+++ b/drivers/media/platform/st/sti/hva/hva-v4l2.c
@@ -1165,7 +1165,7 @@ static int hva_open(struct file *file)
 	struct hva_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/media/platform/st/stm32/dma2d/dma2d.c b/drivers/media/platform/st/stm32/dma2d/dma2d.c
index 72488aa922fc..fb11794c6b17 100644
--- a/drivers/media/platform/st/stm32/dma2d/dma2d.c
+++ b/drivers/media/platform/st/stm32/dma2d/dma2d.c
@@ -280,7 +280,7 @@ static int dma2d_open(struct file *file)
 	struct dma2d_ctx *ctx = NULL;
 	int ret = 0;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx->dev = dev;
diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c
index 19e6b187be22..ccf3c19883c0 100644
--- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c
+++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c
@@ -867,7 +867,7 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(struct device *dev,
 	int ret = 0;

 	/* Allocate the dcmipp_bytecap_device struct */
-	vcap = kzalloc(sizeof(*vcap), GFP_KERNEL);
+	vcap = kzalloc_obj(*vcap, GFP_KERNEL);
 	if (!vcap)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c
index f9e4a3a9ef3f..4704cc4d6111 100644
--- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c
+++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c
@@ -581,7 +581,7 @@ dcmipp_byteproc_ent_init(struct device *dev, const char *entity_name,
 	int ret;

 	/* Allocate the byteproc struct */
-	byteproc = kzalloc(sizeof(*byteproc), GFP_KERNEL);
+	byteproc = kzalloc_obj(*byteproc, GFP_KERNEL);
 	if (!byteproc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.c b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.c
index 562933e08d62..f6e83e72c940 100644
--- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.c
+++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.c
@@ -20,7 +20,7 @@ struct media_pad *dcmipp_pads_init(u16 num_pads, const unsigned long *pads_flags
 	unsigned int i;

 	/* Allocate memory for the pads */
-	pads = kcalloc(num_pads, sizeof(*pads), GFP_KERNEL);
+	pads = kzalloc_objs(*pads, num_pads, GFP_KERNEL);
 	if (!pads)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c
index c4bc76909b1c..ac19ed966521 100644
--- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c
+++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c
@@ -527,7 +527,7 @@ struct dcmipp_ent_device *dcmipp_inp_ent_init(struct device *dev,
 	int ret;

 	/* Allocate the inp struct */
-	inp = kzalloc(sizeof(*inp), GFP_KERNEL);
+	inp = kzalloc_obj(*inp, GFP_KERNEL);
 	if (!inp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c b/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
index 7c4dd1ac772d..a2e4dae765ee 100644
--- a/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
+++ b/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
@@ -709,7 +709,7 @@ static int deinterlace_open(struct file *file)
 	if (mutex_lock_interruptible(&dev->dev_mutex))
 		return -ERESTARTSYS;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		mutex_unlock(&dev->dev_mutex);
 		return -ENOMEM;
diff --git a/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c b/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
index 2deab920884a..05b51e5fc01f 100644
--- a/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
+++ b/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
@@ -642,7 +642,7 @@ static int rotate_open(struct file *file)
 	if (mutex_lock_interruptible(&dev->dev_mutex))
 		return -ERESTARTSYS;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		mutex_unlock(&dev->dev_mutex);
 		return -ENOMEM;
diff --git a/drivers/media/platform/ti/cal/cal.c b/drivers/media/platform/ti/cal/cal.c
index 3e25ce0c3c3b..c0883b948cbc 100644
--- a/drivers/media/platform/ti/cal/cal.c
+++ b/drivers/media/platform/ti/cal/cal.c
@@ -1012,7 +1012,7 @@ static struct cal_ctx *cal_ctx_create(struct cal_dev *cal, int inst)
 	struct cal_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

diff --git a/drivers/media/platform/ti/davinci/vpif.c b/drivers/media/platform/ti/davinci/vpif.c
index 969d623fc842..f0d724efb494 100644
--- a/drivers/media/platform/ti/davinci/vpif.c
+++ b/drivers/media/platform/ti/davinci/vpif.c
@@ -450,7 +450,7 @@ static int vpif_probe(struct platform_device *pdev)
 	if (IS_ERR(vpif_base))
 		return PTR_ERR(vpif_base);

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -482,7 +482,7 @@ static int vpif_probe(struct platform_device *pdev)
 	res_irq = DEFINE_RES_IRQ_NAMED(irq, of_node_full_name(pdev->dev.of_node));
 	res_irq.flags |= irq_get_trigger_type(irq);

-	pdev_capture = kzalloc(sizeof(*pdev_capture), GFP_KERNEL);
+	pdev_capture = kzalloc_obj(*pdev_capture, GFP_KERNEL);
 	if (!pdev_capture) {
 		ret = -ENOMEM;
 		goto err_put_rpm;
@@ -501,7 +501,7 @@ static int vpif_probe(struct platform_device *pdev)
 	if (ret)
 		goto err_put_pdev_capture;

-	pdev_display = kzalloc(sizeof(*pdev_display), GFP_KERNEL);
+	pdev_display = kzalloc_obj(*pdev_display, GFP_KERNEL);
 	if (!pdev_display) {
 		ret = -ENOMEM;
 		goto err_del_pdev_capture;
diff --git a/drivers/media/platform/ti/davinci/vpif_capture.c b/drivers/media/platform/ti/davinci/vpif_capture.c
index 243c6196b024..6b7d19a7529a 100644
--- a/drivers/media/platform/ti/davinci/vpif_capture.c
+++ b/drivers/media/platform/ti/davinci/vpif_capture.c
@@ -1335,8 +1335,7 @@ static int initialize_vpif(void)

 	/* Allocate memory for six channel objects */
 	for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++) {
-		vpif_obj.dev[i] =
-		    kzalloc(sizeof(*vpif_obj.dev[i]), GFP_KERNEL);
+		vpif_obj.dev[i] = kzalloc_obj(*vpif_obj.dev[i], GFP_KERNEL);
 		/* If memory allocation fails, return error */
 		if (!vpif_obj.dev[i]) {
 			free_channel_objects_index = i;
@@ -1651,7 +1650,7 @@ static int vpif_probe(struct platform_device *pdev)
 	vpif_obj.config = pdev->dev.platform_data;

 	subdev_count = vpif_obj.config->subdev_count;
-	vpif_obj.sd = kcalloc(subdev_count, sizeof(*vpif_obj.sd), GFP_KERNEL);
+	vpif_obj.sd = kzalloc_objs(*vpif_obj.sd, subdev_count, GFP_KERNEL);
 	if (!vpif_obj.sd) {
 		err = -ENOMEM;
 		goto probe_subdev_out;
diff --git a/drivers/media/platform/ti/davinci/vpif_display.c b/drivers/media/platform/ti/davinci/vpif_display.c
index 1e7815e9f8e0..b8349ebcde33 100644
--- a/drivers/media/platform/ti/davinci/vpif_display.c
+++ b/drivers/media/platform/ti/davinci/vpif_display.c
@@ -1089,7 +1089,7 @@ static int initialize_vpif(void)
 	/* Allocate memory for six channel objects */
 	for (i = 0; i < VPIF_DISPLAY_MAX_DEVICES; i++) {
 		vpif_obj.dev[i] =
-		    kzalloc(sizeof(struct channel_obj), GFP_KERNEL);
+		    kzalloc_obj(struct channel_obj, GFP_KERNEL);
 		/* If memory allocation fails, return error */
 		if (!vpif_obj.dev[i]) {
 			free_channel_objects_index = i;
@@ -1264,7 +1264,7 @@ static int vpif_probe(struct platform_device *pdev)
 	vpif_obj.config = pdev->dev.platform_data;
 	subdev_count = vpif_obj.config->subdev_count;
 	subdevdata = vpif_obj.config->subdevinfo;
-	vpif_obj.sd = kcalloc(subdev_count, sizeof(*vpif_obj.sd), GFP_KERNEL);
+	vpif_obj.sd = kzalloc_objs(*vpif_obj.sd, subdev_count, GFP_KERNEL);
 	if (!vpif_obj.sd) {
 		err = -ENOMEM;
 		goto vpif_unregister;
diff --git a/drivers/media/platform/ti/omap/omap_vout.c b/drivers/media/platform/ti/omap/omap_vout.c
index 22782e9f1f4e..b88c78d724d6 100644
--- a/drivers/media/platform/ti/omap/omap_vout.c
+++ b/drivers/media/platform/ti/omap/omap_vout.c
@@ -1452,7 +1452,7 @@ static int __init omap_vout_create_video_devices(struct platform_device *pdev)

 	for (k = 0; k < pdev->num_resources; k++) {

-		vout = kzalloc(sizeof(struct omap_vout_device), GFP_KERNEL);
+		vout = kzalloc_obj(struct omap_vout_device, GFP_KERNEL);
 		if (!vout) {
 			dev_err(&pdev->dev, ": could not allocate memory\n");
 			return -ENOMEM;
@@ -1611,7 +1611,7 @@ static int __init omap_vout_probe(struct platform_device *pdev)
 		goto err_dss_init;
 	}

-	vid_dev = kzalloc(sizeof(struct omap2video_device), GFP_KERNEL);
+	vid_dev = kzalloc_obj(struct omap2video_device, GFP_KERNEL);
 	if (vid_dev == NULL) {
 		ret = -ENOMEM;
 		goto err_dss_init;
diff --git a/drivers/media/platform/ti/omap3isp/isp.c b/drivers/media/platform/ti/omap3isp/isp.c
index 8ac2bdcdf87b..23a433455459 100644
--- a/drivers/media/platform/ti/omap3isp/isp.c
+++ b/drivers/media/platform/ti/omap3isp/isp.c
@@ -2231,7 +2231,7 @@ static int isp_probe(struct platform_device *pdev)
 	int ret;
 	int i, m;

-	isp = kzalloc(sizeof(*isp), GFP_KERNEL);
+	isp = kzalloc_obj(*isp, GFP_KERNEL);
 	if (!isp) {
 		dev_err(&pdev->dev, "could not allocate memory\n");
 		return -ENOMEM;
diff --git a/drivers/media/platform/ti/omap3isp/ispccdc.c b/drivers/media/platform/ti/omap3isp/ispccdc.c
index 9dbf06ac058d..2e2daadbd575 100644
--- a/drivers/media/platform/ti/omap3isp/ispccdc.c
+++ b/drivers/media/platform/ti/omap3isp/ispccdc.c
@@ -419,7 +419,7 @@ static int ccdc_lsc_config(struct isp_ccdc_device *ccdc,
 		return -EINVAL;
 	}

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (req == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/platform/ti/omap3isp/isph3a_aewb.c b/drivers/media/platform/ti/omap3isp/isph3a_aewb.c
index ae93da9c4542..1da1b71773bb 100644
--- a/drivers/media/platform/ti/omap3isp/isph3a_aewb.c
+++ b/drivers/media/platform/ti/omap3isp/isph3a_aewb.c
@@ -291,7 +291,7 @@ int omap3isp_h3a_aewb_init(struct isp_device *isp)
 	struct omap3isp_h3a_aewb_config *aewb_recover_cfg = NULL;
 	int ret;

-	aewb_cfg = kzalloc(sizeof(*aewb_cfg), GFP_KERNEL);
+	aewb_cfg = kzalloc_obj(*aewb_cfg, GFP_KERNEL);
 	if (!aewb_cfg)
 		return -ENOMEM;

@@ -301,7 +301,7 @@ int omap3isp_h3a_aewb_init(struct isp_device *isp)
 	aewb->isp = isp;

 	/* Set recover state configuration */
-	aewb_recover_cfg = kzalloc(sizeof(*aewb_recover_cfg), GFP_KERNEL);
+	aewb_recover_cfg = kzalloc_obj(*aewb_recover_cfg, GFP_KERNEL);
 	if (!aewb_recover_cfg) {
 		dev_err(aewb->isp->dev,
 			"AEWB: cannot allocate memory for recover configuration.\n");
diff --git a/drivers/media/platform/ti/omap3isp/isph3a_af.c b/drivers/media/platform/ti/omap3isp/isph3a_af.c
index ca478da4ad34..ff806d162529 100644
--- a/drivers/media/platform/ti/omap3isp/isph3a_af.c
+++ b/drivers/media/platform/ti/omap3isp/isph3a_af.c
@@ -354,7 +354,7 @@ int omap3isp_h3a_af_init(struct isp_device *isp)
 	struct omap3isp_h3a_af_config *af_recover_cfg = NULL;
 	int ret;

-	af_cfg = kzalloc(sizeof(*af_cfg), GFP_KERNEL);
+	af_cfg = kzalloc_obj(*af_cfg, GFP_KERNEL);
 	if (af_cfg == NULL)
 		return -ENOMEM;

@@ -364,7 +364,7 @@ int omap3isp_h3a_af_init(struct isp_device *isp)
 	af->isp = isp;

 	/* Set recover state configuration */
-	af_recover_cfg = kzalloc(sizeof(*af_recover_cfg), GFP_KERNEL);
+	af_recover_cfg = kzalloc_obj(*af_recover_cfg, GFP_KERNEL);
 	if (!af_recover_cfg) {
 		dev_err(af->isp->dev,
 			"AF: cannot allocate memory for recover configuration.\n");
diff --git a/drivers/media/platform/ti/omap3isp/isphist.c b/drivers/media/platform/ti/omap3isp/isphist.c
index 7851ad13d84f..8459fd9d5fc4 100644
--- a/drivers/media/platform/ti/omap3isp/isphist.c
+++ b/drivers/media/platform/ti/omap3isp/isphist.c
@@ -477,7 +477,7 @@ int omap3isp_hist_init(struct isp_device *isp)
 	struct omap3isp_hist_config *hist_cfg;
 	int ret;

-	hist_cfg = kzalloc(sizeof(*hist_cfg), GFP_KERNEL);
+	hist_cfg = kzalloc_obj(*hist_cfg, GFP_KERNEL);
 	if (hist_cfg == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/platform/ti/omap3isp/ispstat.c b/drivers/media/platform/ti/omap3isp/ispstat.c
index 64bc71d830c4..ad34cc2c6f05 100644
--- a/drivers/media/platform/ti/omap3isp/ispstat.c
+++ b/drivers/media/platform/ti/omap3isp/ispstat.c
@@ -1047,7 +1047,7 @@ int omap3isp_stat_init(struct ispstat *stat, const char *name,
 {
 	int ret;

-	stat->buf = kcalloc(STAT_MAX_BUFS, sizeof(*stat->buf), GFP_KERNEL);
+	stat->buf = kzalloc_objs(*stat->buf, STAT_MAX_BUFS, GFP_KERNEL);
 	if (!stat->buf)
 		return -ENOMEM;

diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c b/drivers/media/platform/ti/omap3isp/ispvideo.c
index 86cb27b6ca4e..f2a48387d158 100644
--- a/drivers/media/platform/ti/omap3isp/ispvideo.c
+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c
@@ -1371,7 +1371,7 @@ static int isp_video_open(struct file *file)
 	struct vb2_queue *queue;
 	int ret = 0;

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (handle == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/platform/ti/vpe/vip.c b/drivers/media/platform/ti/vpe/vip.c
index d4236ac6d867..33805f3b0a81 100644
--- a/drivers/media/platform/ti/vpe/vip.c
+++ b/drivers/media/platform/ti/vpe/vip.c
@@ -3035,7 +3035,7 @@ static int alloc_stream(struct vip_port *port, int stream_id, int vfl_type)
 	struct list_head *pos, *tmp;
 	int ret, i;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		return -ENOMEM;

@@ -3079,7 +3079,7 @@ static int alloc_stream(struct vip_port *port, int stream_id, int vfl_type)
 	/* Allocate/populate Drop queue entries */
 	INIT_LIST_HEAD(&stream->dropq);
 	for (i = 0; i < VIP_DROPQ_SIZE; i++) {
-		buf = kzalloc(sizeof(*buf), GFP_ATOMIC);
+		buf = kzalloc_obj(*buf, GFP_ATOMIC);
 		if (!buf) {
 			ret = -ENOMEM;
 			goto do_free_dropq;
diff --git a/drivers/media/platform/ti/vpe/vpe.c b/drivers/media/platform/ti/vpe/vpe.c
index 1a549775cabe..5effa0558f0f 100644
--- a/drivers/media/platform/ti/vpe/vpe.c
+++ b/drivers/media/platform/ti/vpe/vpe.c
@@ -2272,7 +2272,7 @@ static int vpe_open(struct file *file)

 	vpe_dbg(dev, "vpe_open\n");

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/verisilicon/hantro_drv.c b/drivers/media/platform/verisilicon/hantro_drv.c
index 94f58f4e4a4e..0a14970f0472 100644
--- a/drivers/media/platform/verisilicon/hantro_drv.c
+++ b/drivers/media/platform/verisilicon/hantro_drv.c
@@ -640,7 +640,7 @@ static int hantro_open(struct file *filp)
 	 * helper functions used here.
 	 */

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/media/platform/via/via-camera.c b/drivers/media/platform/via/via-camera.c
index 5702eff664d4..fe8d94906e37 100644
--- a/drivers/media/platform/via/via-camera.c
+++ b/drivers/media/platform/via/via-camera.c
@@ -1164,7 +1164,7 @@ static int viacam_probe(struct platform_device *pdev)
 	/*
 	 * Basic structure initialization.
 	 */
-	cam = kzalloc (sizeof(struct via_camera), GFP_KERNEL);
+	cam = kzalloc_obj(struct via_camera, GFP_KERNEL);
 	if (cam == NULL)
 		return -ENOMEM;
 	via_cam_info = cam;
diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index 9a45cda05779..dab1deea05ea 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -338,7 +338,7 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
 	struct v4l2_device *v4l2_dev;
 	int retval;

-	radio = kzalloc(sizeof(struct dsbr100_device), GFP_KERNEL);
+	radio = kzalloc_obj(struct dsbr100_device, GFP_KERNEL);

 	if (!radio)
 		return -ENOMEM;
diff --git a/drivers/media/radio/radio-aimslab.c b/drivers/media/radio/radio-aimslab.c
index 2c1d413e8636..5a477ac9487b 100644
--- a/drivers/media/radio/radio-aimslab.c
+++ b/drivers/media/radio/radio-aimslab.c
@@ -67,7 +67,7 @@ struct rtrack {

 static struct radio_isa_card *rtrack_alloc(void)
 {
-	struct rtrack *rt = kzalloc(sizeof(struct rtrack), GFP_KERNEL);
+	struct rtrack *rt = kzalloc_obj(struct rtrack, GFP_KERNEL);

 	if (rt)
 		rt->curvol = 0xff;
diff --git a/drivers/media/radio/radio-aztech.c b/drivers/media/radio/radio-aztech.c
index 0a4667bb7034..4e4721ed61e7 100644
--- a/drivers/media/radio/radio-aztech.c
+++ b/drivers/media/radio/radio-aztech.c
@@ -82,7 +82,7 @@ static void aztech_set_pins(void *handle, u8 pins)

 static struct radio_isa_card *aztech_alloc(void)
 {
-	struct aztech *az = kzalloc(sizeof(*az), GFP_KERNEL);
+	struct aztech *az = kzalloc_obj(*az, GFP_KERNEL);

 	return az ? &az->isa : NULL;
 }
diff --git a/drivers/media/radio/radio-gemtek.c b/drivers/media/radio/radio-gemtek.c
index a3265f1dd189..5f2637ffabae 100644
--- a/drivers/media/radio/radio-gemtek.c
+++ b/drivers/media/radio/radio-gemtek.c
@@ -179,7 +179,7 @@ static unsigned long gemtek_convfreq(unsigned long freq)

 static struct radio_isa_card *gemtek_alloc(void)
 {
-	struct gemtek *gt = kzalloc(sizeof(*gt), GFP_KERNEL);
+	struct gemtek *gt = kzalloc_obj(*gt, GFP_KERNEL);

 	if (gt)
 		gt->muted = true;
diff --git a/drivers/media/radio/radio-keene.c b/drivers/media/radio/radio-keene.c
index c133305fd019..a26da2e9fbab 100644
--- a/drivers/media/radio/radio-keene.c
+++ b/drivers/media/radio/radio-keene.c
@@ -311,7 +311,7 @@ static int usb_keene_probe(struct usb_interface *intf,
 	if (dev->product && strcmp(dev->product, "B-LINK USB Audio  "))
 		return -ENODEV;

-	radio = kzalloc(sizeof(struct keene_device), GFP_KERNEL);
+	radio = kzalloc_obj(struct keene_device, GFP_KERNEL);
 	if (radio)
 		radio->buffer = kmalloc(BUFFER_LENGTH, GFP_KERNEL);

diff --git a/drivers/media/radio/radio-ma901.c b/drivers/media/radio/radio-ma901.c
index 657c3dda6648..e768c40ab73d 100644
--- a/drivers/media/radio/radio-ma901.c
+++ b/drivers/media/radio/radio-ma901.c
@@ -346,7 +346,7 @@ static int usb_ma901radio_probe(struct usb_interface *intf,
 		|| strncmp(dev->manufacturer, "www.masterkit.ru", 16) != 0))
 		return -ENODEV;

-	radio = kzalloc(sizeof(struct ma901radio_device), GFP_KERNEL);
+	radio = kzalloc_obj(struct ma901radio_device, GFP_KERNEL);
 	if (!radio) {
 		dev_err(&intf->dev, "kzalloc for ma901radio_device failed\n");
 		retval = -ENOMEM;
diff --git a/drivers/media/radio/radio-maxiradio.c b/drivers/media/radio/radio-maxiradio.c
index 1a5dbae24ef4..cfa0568791fd 100644
--- a/drivers/media/radio/radio-maxiradio.c
+++ b/drivers/media/radio/radio-maxiradio.c
@@ -122,7 +122,7 @@ static int maxiradio_probe(struct pci_dev *pdev,
 	struct v4l2_device *v4l2_dev;
 	int retval = -ENOMEM;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		dev_err(&pdev->dev, "not enough memory\n");
 		return -ENOMEM;
diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c
index cb0437b4c331..2e74f915c873 100644
--- a/drivers/media/radio/radio-mr800.c
+++ b/drivers/media/radio/radio-mr800.c
@@ -501,7 +501,7 @@ static int usb_amradio_probe(struct usb_interface *intf,
 	struct amradio_device *radio;
 	int retval;

-	radio = kzalloc(sizeof(struct amradio_device), GFP_KERNEL);
+	radio = kzalloc_obj(struct amradio_device, GFP_KERNEL);

 	if (!radio) {
 		dev_err(&intf->dev, "kmalloc for amradio_device failed\n");
diff --git a/drivers/media/radio/radio-raremono.c b/drivers/media/radio/radio-raremono.c
index f60775b005e1..45b491ad1601 100644
--- a/drivers/media/radio/radio-raremono.c
+++ b/drivers/media/radio/radio-raremono.c
@@ -301,7 +301,7 @@ static int usb_raremono_probe(struct usb_interface *intf,
 	struct raremono_device *radio;
 	int retval = 0;

-	radio = kzalloc(sizeof(*radio), GFP_KERNEL);
+	radio = kzalloc_obj(*radio, GFP_KERNEL);
 	if (!radio)
 		return -ENOMEM;
 	radio->buffer = kmalloc(BUFFER_LENGTH, GFP_KERNEL);
diff --git a/drivers/media/radio/radio-rtrack2.c b/drivers/media/radio/radio-rtrack2.c
index efc02069bf9d..1e24e2d9cbbc 100644
--- a/drivers/media/radio/radio-rtrack2.c
+++ b/drivers/media/radio/radio-rtrack2.c
@@ -47,7 +47,7 @@ MODULE_PARM_DESC(radio_nr, "Radio device numbers");

 static struct radio_isa_card *rtrack2_alloc(void)
 {
-	return kzalloc(sizeof(struct radio_isa_card), GFP_KERNEL);
+	return kzalloc_obj(struct radio_isa_card, GFP_KERNEL);
 }

 static void zero(struct radio_isa_card *isa)
diff --git a/drivers/media/radio/radio-sf16fmr2.c b/drivers/media/radio/radio-sf16fmr2.c
index d0dde55b7930..cdd489ca2d9a 100644
--- a/drivers/media/radio/radio-sf16fmr2.c
+++ b/drivers/media/radio/radio-sf16fmr2.c
@@ -252,7 +252,7 @@ static int fmr2_probe(struct fmr2 *fmr2, struct device *pdev, int io)

 static int fmr2_isa_match(struct device *pdev, unsigned int ndev)
 {
-	struct fmr2 *fmr2 = kzalloc(sizeof(*fmr2), GFP_KERNEL);
+	struct fmr2 *fmr2 = kzalloc_obj(*fmr2, GFP_KERNEL);
 	if (!fmr2)
 		return 0;

@@ -269,7 +269,7 @@ static int fmr2_isa_match(struct device *pdev, unsigned int ndev)
 static int fmr2_pnp_probe(struct pnp_dev *pdev, const struct pnp_device_id *id)
 {
 	int ret;
-	struct fmr2 *fmr2 = kzalloc(sizeof(*fmr2), GFP_KERNEL);
+	struct fmr2 *fmr2 = kzalloc_obj(*fmr2, GFP_KERNEL);
 	if (!fmr2)
 		return -ENOMEM;

diff --git a/drivers/media/radio/radio-shark.c b/drivers/media/radio/radio-shark.c
index 127a3be0e0f0..381196d6c675 100644
--- a/drivers/media/radio/radio-shark.c
+++ b/drivers/media/radio/radio-shark.c
@@ -327,7 +327,7 @@ static int usb_shark_probe(struct usb_interface *intf,
 		return -EINVAL;
 	}

-	shark = kzalloc(sizeof(struct shark_device), GFP_KERNEL);
+	shark = kzalloc_obj(struct shark_device, GFP_KERNEL);
 	if (!shark)
 		return retval;

diff --git a/drivers/media/radio/radio-shark2.c b/drivers/media/radio/radio-shark2.c
index e3e6aa87fe08..9e1d00d6bac1 100644
--- a/drivers/media/radio/radio-shark2.c
+++ b/drivers/media/radio/radio-shark2.c
@@ -293,7 +293,7 @@ static int usb_shark_probe(struct usb_interface *intf,
 		return -EINVAL;
 	}

-	shark = kzalloc(sizeof(struct shark_device), GFP_KERNEL);
+	shark = kzalloc_obj(struct shark_device, GFP_KERNEL);
 	if (!shark)
 		return retval;

diff --git a/drivers/media/radio/radio-tea5764.c b/drivers/media/radio/radio-tea5764.c
index dd85b0b1bcd9..ec953b8cb7ab 100644
--- a/drivers/media/radio/radio-tea5764.c
+++ b/drivers/media/radio/radio-tea5764.c
@@ -420,7 +420,7 @@ static int tea5764_i2c_probe(struct i2c_client *client)
 	int ret;

 	PDEBUG("probe");
-	radio = kzalloc(sizeof(struct tea5764_device), GFP_KERNEL);
+	radio = kzalloc_obj(struct tea5764_device, GFP_KERNEL);
 	if (!radio)
 		return -ENOMEM;

diff --git a/drivers/media/radio/radio-terratec.c b/drivers/media/radio/radio-terratec.c
index 43817dd0a0fe..a160bcc2643f 100644
--- a/drivers/media/radio/radio-terratec.c
+++ b/drivers/media/radio/radio-terratec.c
@@ -56,7 +56,7 @@ MODULE_PARM_DESC(radio_nr, "Radio device number");

 static struct radio_isa_card *terratec_alloc(void)
 {
-	return kzalloc(sizeof(struct radio_isa_card), GFP_KERNEL);
+	return kzalloc_obj(struct radio_isa_card, GFP_KERNEL);
 }

 static int terratec_s_mute_volume(struct radio_isa_card *isa, bool mute, int vol)
diff --git a/drivers/media/radio/radio-trust.c b/drivers/media/radio/radio-trust.c
index dfb8b62f0e2b..31d5e5efafaa 100644
--- a/drivers/media/radio/radio-trust.c
+++ b/drivers/media/radio/radio-trust.c
@@ -55,7 +55,7 @@ struct trust {

 static struct radio_isa_card *trust_alloc(void)
 {
-	struct trust *tr = kzalloc(sizeof(*tr), GFP_KERNEL);
+	struct trust *tr = kzalloc_obj(*tr, GFP_KERNEL);

 	return tr ? &tr->isa : NULL;
 }
diff --git a/drivers/media/radio/radio-typhoon.c b/drivers/media/radio/radio-typhoon.c
index 1aa856df70df..4c49d9103135 100644
--- a/drivers/media/radio/radio-typhoon.c
+++ b/drivers/media/radio/radio-typhoon.c
@@ -75,7 +75,7 @@ struct typhoon {

 static struct radio_isa_card *typhoon_alloc(void)
 {
-	struct typhoon *ty = kzalloc(sizeof(*ty), GFP_KERNEL);
+	struct typhoon *ty = kzalloc_obj(*ty, GFP_KERNEL);

 	return ty ? &ty->isa : NULL;
 }
diff --git a/drivers/media/radio/radio-zoltrix.c b/drivers/media/radio/radio-zoltrix.c
index e043bee52384..cf1a823e0aa9 100644
--- a/drivers/media/radio/radio-zoltrix.c
+++ b/drivers/media/radio/radio-zoltrix.c
@@ -79,7 +79,7 @@ struct zoltrix {

 static struct radio_isa_card *zoltrix_alloc(void)
 {
-	struct zoltrix *zol = kzalloc(sizeof(*zol), GFP_KERNEL);
+	struct zoltrix *zol = kzalloc_obj(*zol, GFP_KERNEL);

 	return zol ? &zol->isa : NULL;
 }
diff --git a/drivers/media/radio/saa7706h.c b/drivers/media/radio/saa7706h.c
index d9eecddffd91..71850c3b02a4 100644
--- a/drivers/media/radio/saa7706h.c
+++ b/drivers/media/radio/saa7706h.c
@@ -344,7 +344,7 @@ static int saa7706h_probe(struct i2c_client *client)
 	v4l_info(client, "chip found @ 0x%02x (%s)\n",
 			client->addr << 1, client->adapter->name);

-	state = kzalloc(sizeof(struct saa7706h_state), GFP_KERNEL);
+	state = kzalloc_obj(struct saa7706h_state, GFP_KERNEL);
 	if (state == NULL)
 		return -ENOMEM;
 	sd = &state->sd;
diff --git a/drivers/media/radio/si470x/radio-si470x-usb.c b/drivers/media/radio/si470x/radio-si470x-usb.c
index aa7a580dbecc..79208c0b5c4a 100644
--- a/drivers/media/radio/si470x/radio-si470x-usb.c
+++ b/drivers/media/radio/si470x/radio-si470x-usb.c
@@ -570,7 +570,7 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
 	unsigned char version_warning = 0;

 	/* private data allocation and initialization */
-	radio = kzalloc(sizeof(struct si470x_device), GFP_KERNEL);
+	radio = kzalloc_obj(struct si470x_device, GFP_KERNEL);
 	if (!radio) {
 		retval = -ENOMEM;
 		goto err_initial;
diff --git a/drivers/media/radio/si4713/radio-usb-si4713.c b/drivers/media/radio/si4713/radio-usb-si4713.c
index 2cf36c8abdde..a4bfda695413 100644
--- a/drivers/media/radio/si4713/radio-usb-si4713.c
+++ b/drivers/media/radio/si4713/radio-usb-si4713.c
@@ -420,7 +420,7 @@ static int usb_si4713_probe(struct usb_interface *intf,
 			id->idVendor, id->idProduct);

 	/* Initialize local device structure */
-	radio = kzalloc(sizeof(struct si4713_usb_device), GFP_KERNEL);
+	radio = kzalloc_obj(struct si4713_usb_device, GFP_KERNEL);
 	if (radio)
 		radio->buffer = kmalloc(BUFFER_LENGTH, GFP_KERNEL);

diff --git a/drivers/media/radio/tef6862.c b/drivers/media/radio/tef6862.c
index b00ccf651922..7f95498a5551 100644
--- a/drivers/media/radio/tef6862.c
+++ b/drivers/media/radio/tef6862.c
@@ -153,7 +153,7 @@ static int tef6862_probe(struct i2c_client *client)
 	v4l_info(client, "chip found @ 0x%02x (%s)\n",
 			client->addr << 1, client->adapter->name);

-	state = kzalloc(sizeof(struct tef6862_state), GFP_KERNEL);
+	state = kzalloc_obj(struct tef6862_state, GFP_KERNEL);
 	if (state == NULL)
 		return -ENOMEM;
 	state->freq = TEF6862_LO_FREQ;
diff --git a/drivers/media/rc/ati_remote.c b/drivers/media/rc/ati_remote.c
index a733914a2574..6bde5c913e99 100644
--- a/drivers/media/rc/ati_remote.c
+++ b/drivers/media/rc/ati_remote.c
@@ -839,7 +839,7 @@ static int ati_remote_probe(struct usb_interface *interface,
 		return -ENODEV;
 	}

-	ati_remote = kzalloc(sizeof (struct ati_remote), GFP_KERNEL);
+	ati_remote = kzalloc_obj(struct ati_remote, GFP_KERNEL);
 	rc_dev = rc_allocate_device(RC_DRIVER_SCANCODE);
 	if (!ati_remote || !rc_dev)
 		goto exit_free_dev_rdev;
diff --git a/drivers/media/rc/ene_ir.c b/drivers/media/rc/ene_ir.c
index d6c54a3bccc2..6e61173ba233 100644
--- a/drivers/media/rc/ene_ir.c
+++ b/drivers/media/rc/ene_ir.c
@@ -993,7 +993,7 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
 	struct ene_device *dev;

 	/* allocate memory */
-	dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
+	dev = kzalloc_obj(struct ene_device, GFP_KERNEL);
 	rdev = rc_allocate_device(RC_DRIVER_IR_RAW);
 	if (!dev || !rdev)
 		goto exit_free_dev_rdev;
diff --git a/drivers/media/rc/fintek-cir.c b/drivers/media/rc/fintek-cir.c
index 3fb0968efd57..92a38d04d979 100644
--- a/drivers/media/rc/fintek-cir.c
+++ b/drivers/media/rc/fintek-cir.c
@@ -465,7 +465,7 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
 	struct rc_dev *rdev;
 	int ret = -ENOMEM;

-	fintek = kzalloc(sizeof(struct fintek_dev), GFP_KERNEL);
+	fintek = kzalloc_obj(struct fintek_dev, GFP_KERNEL);
 	if (!fintek)
 		return ret;

diff --git a/drivers/media/rc/iguanair.c b/drivers/media/rc/iguanair.c
index 8af94246e591..bb5bd62c8645 100644
--- a/drivers/media/rc/iguanair.c
+++ b/drivers/media/rc/iguanair.c
@@ -392,7 +392,7 @@ static int iguanair_probe(struct usb_interface *intf,
 	if (idesc->desc.bNumEndpoints < 2)
 		return -ENODEV;

-	ir = kzalloc(sizeof(*ir), GFP_KERNEL);
+	ir = kzalloc_obj(*ir, GFP_KERNEL);
 	rc = rc_allocate_device(RC_DRIVER_IR_RAW);
 	if (!ir || !rc) {
 		ret = -ENOMEM;
diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
index 35b9e07003d8..0cb2ad180728 100644
--- a/drivers/media/rc/imon.c
+++ b/drivers/media/rc/imon.c
@@ -614,7 +614,7 @@ static int send_packet(struct imon_context *ictx)
 		ictx->tx_urb->actual_length = 0;
 	} else {
 		/* fill request into kmalloc'ed space: */
-		control_req = kmalloc(sizeof(*control_req), GFP_KERNEL);
+		control_req = kmalloc_obj(*control_req, GFP_KERNEL);
 		if (control_req == NULL)
 			return -ENOMEM;

@@ -2233,7 +2233,7 @@ static struct imon_context *imon_init_intf0(struct usb_interface *intf,
 	struct usb_host_interface *iface_desc;
 	int ret = -ENOMEM;

-	ictx = kzalloc(sizeof(*ictx), GFP_KERNEL);
+	ictx = kzalloc_obj(*ictx, GFP_KERNEL);
 	if (!ictx)
 		goto exit;

diff --git a/drivers/media/rc/ir_toy.c b/drivers/media/rc/ir_toy.c
index 533faa117517..cf3b27817131 100644
--- a/drivers/media/rc/ir_toy.c
+++ b/drivers/media/rc/ir_toy.c
@@ -418,7 +418,7 @@ static int irtoy_probe(struct usb_interface *intf,
 		return -ENODEV;
 	}

-	irtoy = kzalloc(sizeof(*irtoy), GFP_KERNEL);
+	irtoy = kzalloc_obj(*irtoy, GFP_KERNEL);
 	if (!irtoy)
 		return -ENOMEM;

diff --git a/drivers/media/rc/ite-cir.c b/drivers/media/rc/ite-cir.c
index 2bacecb02262..448f5c5db616 100644
--- a/drivers/media/rc/ite-cir.c
+++ b/drivers/media/rc/ite-cir.c
@@ -1304,7 +1304,7 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
 	int model_no;
 	int io_rsrc_no;

-	itdev = kzalloc(sizeof(struct ite_dev), GFP_KERNEL);
+	itdev = kzalloc_obj(struct ite_dev, GFP_KERNEL);
 	if (!itdev)
 		return ret;

diff --git a/drivers/media/rc/lirc_dev.c b/drivers/media/rc/lirc_dev.c
index 7d4942925993..735b0630b172 100644
--- a/drivers/media/rc/lirc_dev.c
+++ b/drivers/media/rc/lirc_dev.c
@@ -128,7 +128,7 @@ static int lirc_open(struct inode *inode, struct file *file)
 {
 	struct rc_dev *dev = container_of(inode->i_cdev, struct rc_dev,
 					  lirc_cdev);
-	struct lirc_fh *fh = kzalloc(sizeof(*fh), GFP_KERNEL);
+	struct lirc_fh *fh = kzalloc_obj(*fh, GFP_KERNEL);
 	unsigned long flags;
 	int retval;

@@ -267,7 +267,7 @@ static ssize_t lirc_transmit(struct file *file, const char __user *buf,
 			goto out_unlock;
 		}

-		raw = kmalloc_array(LIRCBUF_SIZE, sizeof(*raw), GFP_KERNEL);
+		raw = kmalloc_objs(*raw, LIRCBUF_SIZE, GFP_KERNEL);
 		if (!raw) {
 			ret = -ENOMEM;
 			goto out_unlock;
diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c
index 044767eb3a38..d35fff006ac9 100644
--- a/drivers/media/rc/mceusb.c
+++ b/drivers/media/rc/mceusb.c
@@ -1715,7 +1715,7 @@ static int mceusb_dev_probe(struct usb_interface *intf,
 		pipe = usb_rcvbulkpipe(dev, ep_in->bEndpointAddress);
 	maxp = usb_maxpacket(dev, pipe);

-	ir = kzalloc(sizeof(struct mceusb_dev), GFP_KERNEL);
+	ir = kzalloc_obj(struct mceusb_dev, GFP_KERNEL);
 	if (!ir)
 		goto mem_alloc_fail;

diff --git a/drivers/media/rc/nuvoton-cir.c b/drivers/media/rc/nuvoton-cir.c
index 2214d41ef579..4cf74ac2d76c 100644
--- a/drivers/media/rc/nuvoton-cir.c
+++ b/drivers/media/rc/nuvoton-cir.c
@@ -639,7 +639,7 @@ static int nvt_ir_raw_set_wakeup_filter(struct rc_dev *dev,
 	if (!sc_filter->mask)
 		return 0;

-	raw = kmalloc_array(WAKEUP_MAX_SIZE, sizeof(*raw), GFP_KERNEL);
+	raw = kmalloc_objs(*raw, WAKEUP_MAX_SIZE, GFP_KERNEL);
 	if (!raw)
 		return -ENOMEM;

diff --git a/drivers/media/rc/rc-ir-raw.c b/drivers/media/rc/rc-ir-raw.c
index 5dafe11f61c6..d1f8bb6af874 100644
--- a/drivers/media/rc/rc-ir-raw.c
+++ b/drivers/media/rc/rc-ir-raw.c
@@ -615,7 +615,7 @@ int ir_raw_event_prepare(struct rc_dev *dev)
 	if (!dev)
 		return -EINVAL;

-	dev->raw = kzalloc(sizeof(*dev->raw), GFP_KERNEL);
+	dev->raw = kzalloc_obj(*dev->raw, GFP_KERNEL);
 	if (!dev->raw)
 		return -ENOMEM;

diff --git a/drivers/media/rc/rc-loopback.c b/drivers/media/rc/rc-loopback.c
index 8288366f891f..959a1167d376 100644
--- a/drivers/media/rc/rc-loopback.c
+++ b/drivers/media/rc/rc-loopback.c
@@ -185,7 +185,7 @@ static int loop_set_wakeup_filter(struct rc_dev *dev,
 		return 0;

 	/* encode the specified filter and loop it back */
-	raw = kmalloc_array(max, sizeof(*raw), GFP_KERNEL);
+	raw = kmalloc_objs(*raw, max, GFP_KERNEL);
 	if (!raw)
 		return -ENOMEM;

diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
index b9bf5cdcde4a..b67af602fbe6 100644
--- a/drivers/media/rc/rc-main.c
+++ b/drivers/media/rc/rc-main.c
@@ -1701,7 +1701,7 @@ struct rc_dev *rc_allocate_device(enum rc_driver_type type)
 {
 	struct rc_dev *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/drivers/media/rc/redrat3.c b/drivers/media/rc/redrat3.c
index a49173f54a4d..2471bb4d66b8 100644
--- a/drivers/media/rc/redrat3.c
+++ b/drivers/media/rc/redrat3.c
@@ -502,7 +502,7 @@ static int redrat3_set_timeout(struct rc_dev *rc_dev, unsigned int timeoutus)
 	__be32 *timeout;
 	int ret;

-	timeout = kmalloc(sizeof(*timeout), GFP_KERNEL);
+	timeout = kmalloc_obj(*timeout, GFP_KERNEL);
 	if (!timeout)
 		return -ENOMEM;

@@ -768,13 +768,11 @@ static int redrat3_transmit_ir(struct rc_dev *rcdev, unsigned *txbuf,
 	/* rr3 will disable rc detector on transmit */
 	rr3->transmitting = true;

-	sample_lens = kcalloc(RR3_DRIVER_MAXLENS,
-			      sizeof(*sample_lens),
-			      GFP_KERNEL);
+	sample_lens = kzalloc_objs(*sample_lens, RR3_DRIVER_MAXLENS, GFP_KERNEL);
 	if (!sample_lens)
 		return -ENOMEM;

-	irdata = kzalloc(sizeof(*irdata), GFP_KERNEL);
+	irdata = kzalloc_obj(*irdata, GFP_KERNEL);
 	if (!irdata) {
 		ret = -ENOMEM;
 		goto out;
@@ -1022,7 +1020,7 @@ static int redrat3_dev_probe(struct usb_interface *intf,
 	}

 	/* allocate memory for our device state and initialize it */
-	rr3 = kzalloc(sizeof(*rr3), GFP_KERNEL);
+	rr3 = kzalloc_obj(*rr3, GFP_KERNEL);
 	if (!rr3)
 		goto no_endpoints;

diff --git a/drivers/media/rc/streamzap.c b/drivers/media/rc/streamzap.c
index d3b48a0dd1f4..38e0db1b4964 100644
--- a/drivers/media/rc/streamzap.c
+++ b/drivers/media/rc/streamzap.c
@@ -285,7 +285,7 @@ static int streamzap_probe(struct usb_interface *intf,
 	int pipe, maxp;

 	/* Allocate space for device driver specific data */
-	sz = kzalloc(sizeof(struct streamzap_ir), GFP_KERNEL);
+	sz = kzalloc_obj(struct streamzap_ir, GFP_KERNEL);
 	if (!sz)
 		return -ENOMEM;

diff --git a/drivers/media/rc/ttusbir.c b/drivers/media/rc/ttusbir.c
index 560a26f3965c..8b70c1e809ed 100644
--- a/drivers/media/rc/ttusbir.c
+++ b/drivers/media/rc/ttusbir.c
@@ -187,7 +187,7 @@ static int ttusbir_probe(struct usb_interface *intf,
 	int i, j, ret;
 	int altsetting = -1;

-	tt = kzalloc(sizeof(*tt), GFP_KERNEL);
+	tt = kzalloc_obj(*tt, GFP_KERNEL);
 	rc = rc_allocate_device(RC_DRIVER_IR_RAW);
 	if (!tt || !rc) {
 		ret = -ENOMEM;
diff --git a/drivers/media/rc/winbond-cir.c b/drivers/media/rc/winbond-cir.c
index 25884a79985c..875ead5240a5 100644
--- a/drivers/media/rc/winbond-cir.c
+++ b/drivers/media/rc/winbond-cir.c
@@ -1017,7 +1017,7 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
 		return -ENODEV;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data) {
 		err = -ENOMEM;
 		goto exit;
diff --git a/drivers/media/rc/xbox_remote.c b/drivers/media/rc/xbox_remote.c
index a1572381d097..79c3bfe60437 100644
--- a/drivers/media/rc/xbox_remote.c
+++ b/drivers/media/rc/xbox_remote.c
@@ -213,7 +213,7 @@ static int xbox_remote_probe(struct usb_interface *interface,
 		return -ENODEV;
 	}

-	xbox_remote = kzalloc(sizeof(*xbox_remote), GFP_KERNEL);
+	xbox_remote = kzalloc_obj(*xbox_remote, GFP_KERNEL);
 	rc_dev = rc_allocate_device(RC_DRIVER_SCANCODE);
 	if (!xbox_remote || !rc_dev)
 		goto exit_free_dev_rdev;
diff --git a/drivers/media/spi/cxd2880-spi.c b/drivers/media/spi/cxd2880-spi.c
index 65fa7f857fca..352ff42b9121 100644
--- a/drivers/media/spi/cxd2880-spi.c
+++ b/drivers/media/spi/cxd2880-spi.c
@@ -516,7 +516,7 @@ cxd2880_spi_probe(struct spi_device *spi)
 		return -EINVAL;
 	}

-	dvb_spi = kzalloc(sizeof(struct cxd2880_dvb_spi), GFP_KERNEL);
+	dvb_spi = kzalloc_obj(struct cxd2880_dvb_spi, GFP_KERNEL);
 	if (!dvb_spi)
 		return -ENOMEM;

diff --git a/drivers/media/test-drivers/vicodec/vicodec-core.c b/drivers/media/test-drivers/vicodec/vicodec-core.c
index be846f711969..d3d4bb41c8ea 100644
--- a/drivers/media/test-drivers/vicodec/vicodec-core.c
+++ b/drivers/media/test-drivers/vicodec/vicodec-core.c
@@ -1836,7 +1836,7 @@ static int vicodec_open(struct file *file)

 	if (mutex_lock_interruptible(vfd->lock))
 		return -ERESTARTSYS;
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		rc = -ENOMEM;
 		goto open_unlock;
@@ -2105,7 +2105,7 @@ static int vicodec_probe(struct platform_device *pdev)
 	struct vicodec_dev *dev;
 	int ret;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/media/test-drivers/vidtv/vidtv_bridge.c b/drivers/media/test-drivers/vidtv/vidtv_bridge.c
index 438483c62fac..03bb7c79df47 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_bridge.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_bridge.c
@@ -490,7 +490,7 @@ static int vidtv_bridge_probe(struct platform_device *pdev)
 	struct vidtv_dvb *dvb;
 	int ret;

-	dvb = kzalloc(sizeof(*dvb), GFP_KERNEL);
+	dvb = kzalloc_obj(*dvb, GFP_KERNEL);
 	if (!dvb)
 		return -ENOMEM;

diff --git a/drivers/media/test-drivers/vidtv/vidtv_channel.c b/drivers/media/test-drivers/vidtv/vidtv_channel.c
index 3541155c6fc6..4ba65853c3ed 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_channel.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_channel.c
@@ -67,7 +67,7 @@ struct vidtv_channel
 	const u16 s302m_beethoven_event_id  = 1;
 	struct vidtv_channel *s302m;

-	s302m = kzalloc(sizeof(*s302m), GFP_KERNEL);
+	s302m = kzalloc_obj(*s302m, GFP_KERNEL);
 	if (!s302m)
 		return NULL;

@@ -389,7 +389,7 @@ static struct vidtv_psi_desc_service_list_entry

 			s_desc = (struct vidtv_psi_desc_service *)desc;

-			curr_e = kzalloc(sizeof(*curr_e), GFP_KERNEL);
+			curr_e = kzalloc_obj(*curr_e, GFP_KERNEL);
 			if (!curr_e) {
 				vidtv_channel_destroy_service_list(head_e);
 				return NULL;
diff --git a/drivers/media/test-drivers/vidtv/vidtv_demod.c b/drivers/media/test-drivers/vidtv/vidtv_demod.c
index 505f96fccbf3..31ee6d706744 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_demod.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_demod.c
@@ -418,7 +418,7 @@ static int vidtv_demod_i2c_probe(struct i2c_client *client)
 	struct vidtv_demod_state *state;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

diff --git a/drivers/media/test-drivers/vidtv/vidtv_mux.c b/drivers/media/test-drivers/vidtv/vidtv_mux.c
index f99878eff7ac..01bed6d82437 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_mux.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_mux.c
@@ -50,7 +50,7 @@ static struct vidtv_mux_pid_ctx
 	if (ctx)
 		return ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

@@ -480,7 +480,7 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
 {
 	struct vidtv_mux *m;

-	m = kzalloc(sizeof(*m), GFP_KERNEL);
+	m = kzalloc_obj(*m, GFP_KERNEL);
 	if (!m)
 		return NULL;

diff --git a/drivers/media/test-drivers/vidtv/vidtv_psi.c b/drivers/media/test-drivers/vidtv/vidtv_psi.c
index 2a51c898c11e..2cd3f5d7c142 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_psi.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_psi.c
@@ -285,7 +285,7 @@ struct vidtv_psi_desc_service *vidtv_psi_service_desc_init(struct vidtv_psi_desc
 	u32 service_name_len = service_name ? strlen(service_name) : 0;
 	u32 provider_name_len = provider_name ? strlen(provider_name) : 0;

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return NULL;

@@ -360,7 +360,7 @@ struct vidtv_psi_desc_network_name
 	u32 network_name_len = network_name ? strlen(network_name) : 0;
 	struct vidtv_psi_desc_network_name *desc;

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return NULL;

@@ -390,14 +390,14 @@ struct vidtv_psi_desc_service_list
 	struct vidtv_psi_desc_service_list *desc;
 	u16 length = 0;

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return NULL;

 	desc->type = SERVICE_LIST_DESCRIPTOR;

 	while (entry) {
-		curr_e = kzalloc(sizeof(*curr_e), GFP_KERNEL);
+		curr_e = kzalloc_obj(*curr_e, GFP_KERNEL);
 		if (!curr_e) {
 			while (head_e) {
 				curr_e = head_e;
@@ -441,7 +441,7 @@ struct vidtv_psi_desc_short_event
 	struct vidtv_psi_desc_short_event *desc;
 	u32 text_len =  text ? strlen(text) : 0;

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return NULL;

@@ -895,7 +895,7 @@ vidtv_psi_pat_program_init(struct vidtv_psi_table_pat_program *head,
 	struct vidtv_psi_table_pat_program *program;
 	const u16 RESERVED = 0x07;

-	program = kzalloc(sizeof(*program), GFP_KERNEL);
+	program = kzalloc_obj(*program, GFP_KERNEL);
 	if (!program)
 		return NULL;

@@ -967,7 +967,7 @@ struct vidtv_psi_table_pat *vidtv_psi_pat_table_init(u16 transport_stream_id)
 	const u16 ZERO = 0x0;
 	const u16 ONES = 0x03;

-	pat = kzalloc(sizeof(*pat), GFP_KERNEL);
+	pat = kzalloc_obj(*pat, GFP_KERNEL);
 	if (!pat)
 		return NULL;

@@ -1067,7 +1067,7 @@ vidtv_psi_pmt_stream_init(struct vidtv_psi_table_pmt_stream *head,
 	const u16 ZERO = 0x0;
 	u16 desc_loop_len;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		return NULL;

@@ -1153,7 +1153,7 @@ struct vidtv_psi_table_pmt *vidtv_psi_pmt_table_init(u16 program_number,
 	const u16 ZERO = 0x0;
 	u16 desc_loop_len;

-	pmt = kzalloc(sizeof(*pmt), GFP_KERNEL);
+	pmt = kzalloc_obj(*pmt, GFP_KERNEL);
 	if (!pmt)
 		return NULL;

@@ -1298,7 +1298,7 @@ struct vidtv_psi_table_sdt *vidtv_psi_sdt_table_init(u16 network_id,
 	const u16 ONES = 0x03;
 	const u16 ONE = 0x1;

-	sdt  = kzalloc(sizeof(*sdt), GFP_KERNEL);
+	sdt = kzalloc_obj(*sdt, GFP_KERNEL);
 	if (!sdt)
 		return NULL;

@@ -1438,7 +1438,7 @@ struct vidtv_psi_table_sdt_service
 {
 	struct vidtv_psi_table_sdt_service *service;

-	service = kzalloc(sizeof(*service), GFP_KERNEL);
+	service = kzalloc_obj(*service, GFP_KERNEL);
 	if (!service)
 		return NULL;

@@ -1523,9 +1523,8 @@ vidtv_psi_pmt_create_sec_for_each_pat_entry(struct vidtv_psi_table_pat *pat,
 		program = program->next;
 	}

-	pmt_secs = kcalloc(num_pmt,
-			   sizeof(struct vidtv_psi_table_pmt *),
-			   GFP_KERNEL);
+	pmt_secs = kzalloc_objs(struct vidtv_psi_table_pmt *, num_pmt,
+				GFP_KERNEL);
 	if (!pmt_secs)
 		return NULL;

@@ -1622,11 +1621,11 @@ struct vidtv_psi_table_nit
 	const u16 ONES = 0x03;
 	const u16 ONE = 0x1;

-	nit = kzalloc(sizeof(*nit), GFP_KERNEL);
+	nit = kzalloc_obj(*nit, GFP_KERNEL);
 	if (!nit)
 		return NULL;

-	transport = kzalloc(sizeof(*transport), GFP_KERNEL);
+	transport = kzalloc_obj(*transport, GFP_KERNEL);
 	if (!transport)
 		goto free_nit;

@@ -1857,7 +1856,7 @@ struct vidtv_psi_table_eit
 	const u16 ONE = 0x1;
 	const u16 ONES = 0x03;

-	eit = kzalloc(sizeof(*eit), GFP_KERNEL);
+	eit = kzalloc_obj(*eit, GFP_KERNEL);
 	if (!eit)
 		return NULL;

@@ -1982,7 +1981,7 @@ struct vidtv_psi_table_eit_event
 	int mjd, l;
 	__be16 mjd_be;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return NULL;

diff --git a/drivers/media/test-drivers/vidtv/vidtv_s302m.c b/drivers/media/test-drivers/vidtv/vidtv_s302m.c
index 9da18eac04b5..1a2ffcf0796f 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_s302m.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_s302m.c
@@ -148,7 +148,7 @@ static struct vidtv_access_unit *vidtv_s302m_access_unit_init(struct vidtv_acces
 {
 	struct vidtv_access_unit *au;

-	au = kzalloc(sizeof(*au), GFP_KERNEL);
+	au = kzalloc_obj(*au, GFP_KERNEL);
 	if (!au)
 		return NULL;

@@ -445,7 +445,7 @@ struct vidtv_encoder
 	struct vidtv_s302m_ctx *ctx;
 	struct vidtv_encoder *e;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return NULL;

diff --git a/drivers/media/test-drivers/vidtv/vidtv_tuner.c b/drivers/media/test-drivers/vidtv/vidtv_tuner.c
index 4ba302d569d6..735eb3b6824d 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_tuner.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_tuner.c
@@ -396,7 +396,7 @@ static int vidtv_tuner_i2c_probe(struct i2c_client *client)
 	struct dvb_frontend *fe           = config->fe;
 	struct vidtv_tuner_dev *tuner_dev = NULL;

-	tuner_dev = kzalloc(sizeof(*tuner_dev), GFP_KERNEL);
+	tuner_dev = kzalloc_obj(*tuner_dev, GFP_KERNEL);
 	if (!tuner_dev)
 		return -ENOMEM;

diff --git a/drivers/media/test-drivers/vim2m.c b/drivers/media/test-drivers/vim2m.c
index c33c18ea5210..ae091cb67794 100644
--- a/drivers/media/test-drivers/vim2m.c
+++ b/drivers/media/test-drivers/vim2m.c
@@ -1365,7 +1365,7 @@ static int vim2m_open(struct file *file)

 	if (mutex_lock_interruptible(&dev->dev_mutex))
 		return -ERESTARTSYS;
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		rc = -ENOMEM;
 		goto open_unlock;
@@ -1492,7 +1492,7 @@ static int vim2m_probe(struct platform_device *pdev)
 	struct video_device *vfd;
 	int ret;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/media/test-drivers/vimc/vimc-capture.c b/drivers/media/test-drivers/vimc/vimc-capture.c
index 7f6124025fc9..e8a91f78a484 100644
--- a/drivers/media/test-drivers/vimc/vimc-capture.c
+++ b/drivers/media/test-drivers/vimc/vimc-capture.c
@@ -397,7 +397,7 @@ static struct vimc_ent_device *vimc_capture_add(struct vimc_device *vimc,
 	int ret;

 	/* Allocate the vimc_capture_device struct */
-	vcapture = kzalloc(sizeof(*vcapture), GFP_KERNEL);
+	vcapture = kzalloc_obj(*vcapture, GFP_KERNEL);
 	if (!vcapture)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/test-drivers/vimc/vimc-core.c b/drivers/media/test-drivers/vimc/vimc-core.c
index f632c77e52f5..7267766662fa 100644
--- a/drivers/media/test-drivers/vimc/vimc-core.c
+++ b/drivers/media/test-drivers/vimc/vimc-core.c
@@ -287,8 +287,8 @@ static int vimc_register_devices(struct vimc_device *vimc)
 		return ret;
 	}
 	/* allocate ent_devs */
-	vimc->ent_devs = kcalloc(vimc->pipe_cfg->num_ents,
-				 sizeof(*vimc->ent_devs), GFP_KERNEL);
+	vimc->ent_devs = kzalloc_objs(*vimc->ent_devs, vimc->pipe_cfg->num_ents,
+				      GFP_KERNEL);
 	if (!vimc->ent_devs) {
 		ret = -ENOMEM;
 		goto err_v4l2_unregister;
@@ -354,7 +354,7 @@ static int vimc_probe(struct platform_device *pdev)
 	if (vimc_allocator == VIMC_ALLOCATOR_DMA_CONTIG)
 		dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));

-	vimc = kzalloc(sizeof(*vimc), GFP_KERNEL);
+	vimc = kzalloc_obj(*vimc, GFP_KERNEL);
 	if (!vimc)
 		return -ENOMEM;

diff --git a/drivers/media/test-drivers/vimc/vimc-debayer.c b/drivers/media/test-drivers/vimc/vimc-debayer.c
index bbb7c7a86df0..9f86944a04a5 100644
--- a/drivers/media/test-drivers/vimc/vimc-debayer.c
+++ b/drivers/media/test-drivers/vimc/vimc-debayer.c
@@ -564,7 +564,7 @@ static struct vimc_ent_device *vimc_debayer_add(struct vimc_device *vimc,
 	int ret;

 	/* Allocate the vdebayer struct */
-	vdebayer = kzalloc(sizeof(*vdebayer), GFP_KERNEL);
+	vdebayer = kzalloc_obj(*vdebayer, GFP_KERNEL);
 	if (!vdebayer)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/test-drivers/vimc/vimc-lens.c b/drivers/media/test-drivers/vimc/vimc-lens.c
index 96399057a2b5..9b7909ded8d6 100644
--- a/drivers/media/test-drivers/vimc/vimc-lens.c
+++ b/drivers/media/test-drivers/vimc/vimc-lens.c
@@ -54,7 +54,7 @@ static struct vimc_ent_device *vimc_lens_add(struct vimc_device *vimc,
 	int ret;

 	/* Allocate the vlens struct */
-	vlens = kzalloc(sizeof(*vlens), GFP_KERNEL);
+	vlens = kzalloc_obj(*vlens, GFP_KERNEL);
 	if (!vlens)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/test-drivers/vimc/vimc-scaler.c b/drivers/media/test-drivers/vimc/vimc-scaler.c
index 47d0d63865a0..eb0a45944e4f 100644
--- a/drivers/media/test-drivers/vimc/vimc-scaler.c
+++ b/drivers/media/test-drivers/vimc/vimc-scaler.c
@@ -392,7 +392,7 @@ static struct vimc_ent_device *vimc_scaler_add(struct vimc_device *vimc,
 	int ret;

 	/* Allocate the vscaler struct */
-	vscaler = kzalloc(sizeof(*vscaler), GFP_KERNEL);
+	vscaler = kzalloc_obj(*vscaler, GFP_KERNEL);
 	if (!vscaler)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/test-drivers/vimc/vimc-sensor.c b/drivers/media/test-drivers/vimc/vimc-sensor.c
index 027767777763..e53d28e59ac3 100644
--- a/drivers/media/test-drivers/vimc/vimc-sensor.c
+++ b/drivers/media/test-drivers/vimc/vimc-sensor.c
@@ -382,7 +382,7 @@ static struct vimc_ent_device *vimc_sensor_add(struct vimc_device *vimc,
 	int ret;

 	/* Allocate the vsensor struct */
-	vsensor = kzalloc(sizeof(*vsensor), GFP_KERNEL);
+	vsensor = kzalloc_obj(*vsensor, GFP_KERNEL);
 	if (!vsensor)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/test-drivers/visl/visl-core.c b/drivers/media/test-drivers/visl/visl-core.c
index 26c6c6835f79..5ef662fa6cfa 100644
--- a/drivers/media/test-drivers/visl/visl-core.c
+++ b/drivers/media/test-drivers/visl/visl-core.c
@@ -332,7 +332,7 @@ static int visl_open(struct file *file)

 	if (mutex_lock_interruptible(&dev->dev_mutex))
 		return -ERESTARTSYS;
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		rc = -ENOMEM;
 		goto unlock;
@@ -437,7 +437,7 @@ static int visl_probe(struct platform_device *pdev)
 	int ret;
 	int rc;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/media/test-drivers/visl/visl-debugfs.c b/drivers/media/test-drivers/visl/visl-debugfs.c
index 45f2a8268014..8cb75c63aca6 100644
--- a/drivers/media/test-drivers/visl/visl-debugfs.c
+++ b/drivers/media/test-drivers/visl/visl-debugfs.c
@@ -45,7 +45,7 @@ void visl_trace_bitstream(struct visl_ctx *ctx, struct visl_run *run)
 	struct dentry *dentry;
 	char name[32];

-	blob  = kzalloc(sizeof(*blob), GFP_KERNEL);
+	blob = kzalloc_obj(*blob, GFP_KERNEL);
 	if (!blob)
 		return;

diff --git a/drivers/media/test-drivers/vivid/vivid-core.c b/drivers/media/test-drivers/vivid/vivid-core.c
index 9c0b1a32b5c9..5d73701f9080 100644
--- a/drivers/media/test-drivers/vivid/vivid-core.c
+++ b/drivers/media/test-drivers/vivid/vivid-core.c
@@ -1814,7 +1814,7 @@ static int vivid_create_instance(struct platform_device *pdev, int inst)
 	int i;

 	/* allocate main vivid state structure */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/media/tuners/e4000.c b/drivers/media/tuners/e4000.c
index 549b2009f974..3c2d90fe4349 100644
--- a/drivers/media/tuners/e4000.c
+++ b/drivers/media/tuners/e4000.c
@@ -621,7 +621,7 @@ static int e4000_probe(struct i2c_client *client)
 		.val_bits = 8,
 	};

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/tuners/fc0011.c b/drivers/media/tuners/fc0011.c
index 3d3b54be2955..e982c1834fe4 100644
--- a/drivers/media/tuners/fc0011.c
+++ b/drivers/media/tuners/fc0011.c
@@ -485,7 +485,7 @@ struct dvb_frontend *fc0011_attach(struct dvb_frontend *fe,
 {
 	struct fc0011_priv *priv;

-	priv = kzalloc(sizeof(struct fc0011_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct fc0011_priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;

diff --git a/drivers/media/tuners/fc0012.c b/drivers/media/tuners/fc0012.c
index 81e65acbdb17..efe0fd2f4673 100644
--- a/drivers/media/tuners/fc0012.c
+++ b/drivers/media/tuners/fc0012.c
@@ -435,7 +435,7 @@ struct dvb_frontend *fc0012_attach(struct dvb_frontend *fe,
 	if (fe->ops.i2c_gate_ctrl)
 		fe->ops.i2c_gate_ctrl(fe, 1);

-	priv = kzalloc(sizeof(struct fc0012_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct fc0012_priv, GFP_KERNEL);
 	if (!priv) {
 		ret = -ENOMEM;
 		dev_err(&i2c->dev, "%s: kzalloc() failed\n", KBUILD_MODNAME);
diff --git a/drivers/media/tuners/fc0013.c b/drivers/media/tuners/fc0013.c
index 90d2ef067594..d0049a302689 100644
--- a/drivers/media/tuners/fc0013.c
+++ b/drivers/media/tuners/fc0013.c
@@ -526,7 +526,7 @@ struct dvb_frontend *fc0013_attach(struct dvb_frontend *fe,
 {
 	struct fc0013_priv *priv = NULL;

-	priv = kzalloc(sizeof(struct fc0013_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct fc0013_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/fc2580.c b/drivers/media/tuners/fc2580.c
index 046389896dc5..992e716a0703 100644
--- a/drivers/media/tuners/fc2580.c
+++ b/drivers/media/tuners/fc2580.c
@@ -518,7 +518,7 @@ static int fc2580_probe(struct i2c_client *client)
 		.val_bits = 8,
 	};

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/tuners/it913x.c b/drivers/media/tuners/it913x.c
index 9186174a46fd..a78ce6c76b9c 100644
--- a/drivers/media/tuners/it913x.c
+++ b/drivers/media/tuners/it913x.c
@@ -385,7 +385,7 @@ static int it913x_probe(struct platform_device *pdev)
 	int ret;
 	char *chip_ver_str;

-	dev = kzalloc(sizeof(struct it913x_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct it913x_dev, GFP_KERNEL);
 	if (dev == NULL) {
 		ret = -ENOMEM;
 		dev_err(&pdev->dev, "kzalloc() failed\n");
diff --git a/drivers/media/tuners/m88rs6000t.c b/drivers/media/tuners/m88rs6000t.c
index cc57980ed417..16144f4b363e 100644
--- a/drivers/media/tuners/m88rs6000t.c
+++ b/drivers/media/tuners/m88rs6000t.c
@@ -612,7 +612,7 @@ static int m88rs6000t_probe(struct i2c_client *client)
 		{0x75, 0xFC},
 	};

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		dev_err(&client->dev, "kzalloc() failed\n");
diff --git a/drivers/media/tuners/max2165.c b/drivers/media/tuners/max2165.c
index 1575ab94e1c8..04c25efb3baa 100644
--- a/drivers/media/tuners/max2165.c
+++ b/drivers/media/tuners/max2165.c
@@ -394,7 +394,7 @@ struct dvb_frontend *max2165_attach(struct dvb_frontend *fe,
 		i2c ? i2c_adapter_id(i2c) : -1,
 		cfg ? cfg->i2c_address : -1);

-	priv = kzalloc(sizeof(struct max2165_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct max2165_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/mc44s803.c b/drivers/media/tuners/mc44s803.c
index ed8bdf7ebd99..fb5dc3bef84f 100644
--- a/drivers/media/tuners/mc44s803.c
+++ b/drivers/media/tuners/mc44s803.c
@@ -315,7 +315,7 @@ struct dvb_frontend *mc44s803_attach(struct dvb_frontend *fe,

 	reg = 0;

-	priv = kzalloc(sizeof(struct mc44s803_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct mc44s803_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/msi001.c b/drivers/media/tuners/msi001.c
index ad6c72c1ed04..071847007e65 100644
--- a/drivers/media/tuners/msi001.c
+++ b/drivers/media/tuners/msi001.c
@@ -426,7 +426,7 @@ static int msi001_probe(struct spi_device *spi)

 	dev_dbg(&spi->dev, "\n");

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/tuners/mt2060.c b/drivers/media/tuners/mt2060.c
index 4b9dca2f17cc..3ae1c4de9dd3 100644
--- a/drivers/media/tuners/mt2060.c
+++ b/drivers/media/tuners/mt2060.c
@@ -407,7 +407,7 @@ struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter
 	struct mt2060_priv *priv = NULL;
 	u8 id = 0;

-	priv = kzalloc(sizeof(struct mt2060_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct mt2060_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/mt2063.c b/drivers/media/tuners/mt2063.c
index 2c8ce74ddca4..5e226618321a 100644
--- a/drivers/media/tuners/mt2063.c
+++ b/drivers/media/tuners/mt2063.c
@@ -2212,7 +2212,7 @@ struct dvb_frontend *mt2063_attach(struct dvb_frontend *fe,

 	dprintk(2, "\n");

-	state = kzalloc(sizeof(struct mt2063_state), GFP_KERNEL);
+	state = kzalloc_obj(struct mt2063_state, GFP_KERNEL);
 	if (!state)
 		return NULL;

diff --git a/drivers/media/tuners/mt20xx.c b/drivers/media/tuners/mt20xx.c
index baf708f42428..5d89b84e4fb9 100644
--- a/drivers/media/tuners/mt20xx.c
+++ b/drivers/media/tuners/mt20xx.c
@@ -596,7 +596,7 @@ struct dvb_frontend *microtune_attach(struct dvb_frontend *fe,
 	unsigned char buf[21];
 	int company_code;

-	priv = kzalloc(sizeof(struct microtune_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct microtune_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;
 	fe->tuner_priv = priv;
diff --git a/drivers/media/tuners/mt2131.c b/drivers/media/tuners/mt2131.c
index eebc06088341..31ada489ba27 100644
--- a/drivers/media/tuners/mt2131.c
+++ b/drivers/media/tuners/mt2131.c
@@ -248,7 +248,7 @@ struct dvb_frontend * mt2131_attach(struct dvb_frontend *fe,

 	dprintk(1, "%s()\n", __func__);

-	priv = kzalloc(sizeof(struct mt2131_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct mt2131_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/mt2266.c b/drivers/media/tuners/mt2266.c
index 2e92885a6bcb..84bba08ae0a4 100644
--- a/drivers/media/tuners/mt2266.c
+++ b/drivers/media/tuners/mt2266.c
@@ -313,7 +313,7 @@ struct dvb_frontend * mt2266_attach(struct dvb_frontend *fe, struct i2c_adapter
 	struct mt2266_priv *priv = NULL;
 	u8 id = 0;

-	priv = kzalloc(sizeof(struct mt2266_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct mt2266_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/mxl301rf.c b/drivers/media/tuners/mxl301rf.c
index 3b61c3afed18..4cae9d2d37d2 100644
--- a/drivers/media/tuners/mxl301rf.c
+++ b/drivers/media/tuners/mxl301rf.c
@@ -289,7 +289,7 @@ static int mxl301rf_probe(struct i2c_client *client)
 	struct mxl301rf_config *cfg;
 	struct dvb_frontend *fe;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

diff --git a/drivers/media/tuners/mxl5005s.c b/drivers/media/tuners/mxl5005s.c
index 0e811c5eae6c..5538066a57ed 100644
--- a/drivers/media/tuners/mxl5005s.c
+++ b/drivers/media/tuners/mxl5005s.c
@@ -4103,7 +4103,7 @@ struct dvb_frontend *mxl5005s_attach(struct dvb_frontend *fe,
 	struct mxl5005s_state *state = NULL;
 	dprintk(1, "%s()\n", __func__);

-	state = kzalloc(sizeof(struct mxl5005s_state), GFP_KERNEL);
+	state = kzalloc_obj(struct mxl5005s_state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/qm1d1b0004.c b/drivers/media/tuners/qm1d1b0004.c
index c53aeb558413..dae101ac56f1 100644
--- a/drivers/media/tuners/qm1d1b0004.c
+++ b/drivers/media/tuners/qm1d1b0004.c
@@ -208,7 +208,7 @@ qm1d1b0004_probe(struct i2c_client *client)
 	fe = cfg->fe;
 	i2c_set_clientdata(client, fe);

-	fe->tuner_priv = kzalloc(sizeof(struct qm1d1b0004_state), GFP_KERNEL);
+	fe->tuner_priv = kzalloc_obj(struct qm1d1b0004_state, GFP_KERNEL);
 	if (!fe->tuner_priv) {
 		ret = -ENOMEM;
 		goto err_mem;
diff --git a/drivers/media/tuners/qm1d1c0042.c b/drivers/media/tuners/qm1d1c0042.c
index c58f5b6526f1..3a9037a2a74b 100644
--- a/drivers/media/tuners/qm1d1c0042.c
+++ b/drivers/media/tuners/qm1d1c0042.c
@@ -407,7 +407,7 @@ static int qm1d1c0042_probe(struct i2c_client *client)
 	struct qm1d1c0042_config *cfg;
 	struct dvb_frontend *fe;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;
 	state->i2c = client;
diff --git a/drivers/media/tuners/qt1010.c b/drivers/media/tuners/qt1010.c
index 48fc79cd4027..2aee4556ad53 100644
--- a/drivers/media/tuners/qt1010.c
+++ b/drivers/media/tuners/qt1010.c
@@ -411,7 +411,7 @@ struct dvb_frontend * qt1010_attach(struct dvb_frontend *fe,
 	struct qt1010_priv *priv = NULL;
 	u8 id;

-	priv = kzalloc(sizeof(struct qt1010_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct qt1010_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
index def06c262ea2..1239206a0ac4 100644
--- a/drivers/media/tuners/si2157.c
+++ b/drivers/media/tuners/si2157.c
@@ -884,7 +884,7 @@ static int si2157_probe(struct i2c_client *client)
 	struct si2157_cmd cmd;
 	int ret;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		dev_err(&client->dev, "kzalloc() failed\n");
diff --git a/drivers/media/tuners/tda18212.c b/drivers/media/tuners/tda18212.c
index 39f2dc9c2845..435189d37655 100644
--- a/drivers/media/tuners/tda18212.c
+++ b/drivers/media/tuners/tda18212.c
@@ -186,7 +186,7 @@ static int tda18212_probe(struct i2c_client *client)
 		.val_bits = 8,
 	};

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		ret = -ENOMEM;
 		dev_err(&client->dev, "kzalloc() failed\n");
diff --git a/drivers/media/tuners/tda18218.c b/drivers/media/tuners/tda18218.c
index 7d8d84dcb245..f3b54e815657 100644
--- a/drivers/media/tuners/tda18218.c
+++ b/drivers/media/tuners/tda18218.c
@@ -292,7 +292,7 @@ struct dvb_frontend *tda18218_attach(struct dvb_frontend *fe,
 		0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xf6
 	};

-	priv = kzalloc(sizeof(struct tda18218_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct tda18218_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/tda18250.c b/drivers/media/tuners/tda18250.c
index 68d0275f29e1..4e77ebc10114 100644
--- a/drivers/media/tuners/tda18250.c
+++ b/drivers/media/tuners/tda18250.c
@@ -769,7 +769,7 @@ static int tda18250_probe(struct i2c_client *client)
 		.volatile_table = &tda18250_volatile_table,
 	};

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/tuners/tda827x.c b/drivers/media/tuners/tda827x.c
index ad68ee6c5ed4..adc00ee687a1 100644
--- a/drivers/media/tuners/tda827x.c
+++ b/drivers/media/tuners/tda827x.c
@@ -873,7 +873,7 @@ struct dvb_frontend *tda827x_attach(struct dvb_frontend *fe, int addr,
 	struct tda827x_priv *priv = NULL;

 	dprintk("%s:\n", __func__);
-	priv = kzalloc(sizeof(struct tda827x_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct tda827x_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;

diff --git a/drivers/media/tuners/tda8290.c b/drivers/media/tuners/tda8290.c
index 98851482c0cc..f15dca8f5b08 100644
--- a/drivers/media/tuners/tda8290.c
+++ b/drivers/media/tuners/tda8290.c
@@ -734,7 +734,7 @@ struct dvb_frontend *tda829x_attach(struct dvb_frontend *fe,
 	struct tda8290_priv *priv = NULL;
 	char *name;

-	priv = kzalloc(sizeof(struct tda8290_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct tda8290_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;
 	fe->analog_demod_priv = priv;
diff --git a/drivers/media/tuners/tea5761.c b/drivers/media/tuners/tea5761.c
index 425e9fd3f3d4..1e3ea4fd7013 100644
--- a/drivers/media/tuners/tea5761.c
+++ b/drivers/media/tuners/tea5761.c
@@ -315,7 +315,7 @@ struct dvb_frontend *tea5761_attach(struct dvb_frontend *fe,
 	if (tea5761_autodetection(i2c_adap, i2c_addr) != 0)
 		return NULL;

-	priv = kzalloc(sizeof(struct tea5761_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct tea5761_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;
 	fe->tuner_priv = priv;
diff --git a/drivers/media/tuners/tea5767.c b/drivers/media/tuners/tea5767.c
index ef4acb1f1bfa..81deab8f2b20 100644
--- a/drivers/media/tuners/tea5767.c
+++ b/drivers/media/tuners/tea5767.c
@@ -441,7 +441,7 @@ struct dvb_frontend *tea5767_attach(struct dvb_frontend *fe,
 {
 	struct tea5767_priv *priv = NULL;

-	priv = kzalloc(sizeof(struct tea5767_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct tea5767_priv, GFP_KERNEL);
 	if (priv == NULL)
 		return NULL;
 	fe->tuner_priv = priv;
diff --git a/drivers/media/tuners/tua9001.c b/drivers/media/tuners/tua9001.c
index 562a7a5c26f5..59bd15ba6280 100644
--- a/drivers/media/tuners/tua9001.c
+++ b/drivers/media/tuners/tua9001.c
@@ -178,7 +178,7 @@ static int tua9001_probe(struct i2c_client *client)
 		.val_bits = 16,
 	};

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/tuners/tuner-i2c.h b/drivers/media/tuners/tuner-i2c.h
index 724952e001cd..336acbbc622b 100644
--- a/drivers/media/tuners/tuner-i2c.h
+++ b/drivers/media/tuners/tuner-i2c.h
@@ -132,7 +132,7 @@ static inline int tuner_i2c_xfer_send_recv(struct tuner_i2c_props *props,
 		}							\
 	}								\
 	if (0 == __ret) {						\
-		state = kzalloc(sizeof(type), GFP_KERNEL);		\
+		state = kzalloc_obj(type, GFP_KERNEL);		\
 		if (NULL == state)					\
 			goto __fail;					\
 		state->i2c_props.addr = i2caddr;			\
diff --git a/drivers/media/tuners/xc2028.c b/drivers/media/tuners/xc2028.c
index 807585d2dfde..f0f99142941f 100644
--- a/drivers/media/tuners/xc2028.c
+++ b/drivers/media/tuners/xc2028.c
@@ -332,7 +332,7 @@ static int load_all_firmwares(struct dvb_frontend *fe,
 		   n_array, priv->fname, name,
 		   priv->firm_version >> 8, priv->firm_version & 0xff);

-	priv->firm = kcalloc(n_array, sizeof(*priv->firm), GFP_KERNEL);
+	priv->firm = kzalloc_objs(*priv->firm, n_array, GFP_KERNEL);
 	if (priv->firm == NULL) {
 		tuner_err("Not enough memory to load firmware file.\n");
 		rc = -ENOMEM;
diff --git a/drivers/media/tuners/xc4000.c b/drivers/media/tuners/xc4000.c
index b44c97e4e5ec..674e863839c9 100644
--- a/drivers/media/tuners/xc4000.c
+++ b/drivers/media/tuners/xc4000.c
@@ -763,7 +763,7 @@ static int xc4000_fwupload(struct dvb_frontend *fe)
 		n_array, fname, name,
 		priv->firm_version >> 8, priv->firm_version & 0xff);

-	priv->firm = kcalloc(n_array, sizeof(*priv->firm), GFP_KERNEL);
+	priv->firm = kzalloc_objs(*priv->firm, n_array, GFP_KERNEL);
 	if (priv->firm == NULL) {
 		printk(KERN_ERR "Not enough memory to load firmware file.\n");
 		rc = -ENOMEM;
diff --git a/drivers/media/usb/airspy/airspy.c b/drivers/media/usb/airspy/airspy.c
index 08f0920cf6ca..1751a67842bc 100644
--- a/drivers/media/usb/airspy/airspy.c
+++ b/drivers/media/usb/airspy/airspy.c
@@ -968,7 +968,7 @@ static int airspy_probe(struct usb_interface *intf,
 	buf = NULL;
 	ret = -ENOMEM;

-	s = kzalloc(sizeof(struct airspy), GFP_KERNEL);
+	s = kzalloc_obj(struct airspy, GFP_KERNEL);
 	if (s == NULL) {
 		dev_err(&intf->dev, "Could not allocate memory for state\n");
 		return -ENOMEM;
diff --git a/drivers/media/usb/as102/as102_fw.c b/drivers/media/usb/as102/as102_fw.c
index 514764247588..6c14b2754b83 100644
--- a/drivers/media/usb/as102/as102_fw.c
+++ b/drivers/media/usb/as102/as102_fw.c
@@ -96,7 +96,7 @@ static int as102_firmware_upload(struct as10x_bus_adapter_t *bus_adap,
 	int total_read_bytes = 0, errno = 0;
 	unsigned char addr_has_changed = 0;

-	fw_pkt = kmalloc(sizeof(*fw_pkt), GFP_KERNEL);
+	fw_pkt = kmalloc_obj(*fw_pkt, GFP_KERNEL);
 	if (!fw_pkt)
 		return -ENOMEM;

diff --git a/drivers/media/usb/as102/as102_usb_drv.c b/drivers/media/usb/as102/as102_usb_drv.c
index e0ef66a522e2..594dde4578ce 100644
--- a/drivers/media/usb/as102/as102_usb_drv.c
+++ b/drivers/media/usb/as102/as102_usb_drv.c
@@ -345,7 +345,7 @@ static int as102_usb_probe(struct usb_interface *intf,
 		return -EINVAL;
 	}

-	as102_dev = kzalloc(sizeof(struct as102_dev_t), GFP_KERNEL);
+	as102_dev = kzalloc_obj(struct as102_dev_t, GFP_KERNEL);
 	if (as102_dev == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c
index 1e246b47766d..d99f32d5d06f 100644
--- a/drivers/media/usb/au0828/au0828-core.c
+++ b/drivers/media/usb/au0828/au0828-core.c
@@ -670,7 +670,7 @@ static int au0828_usb_probe(struct usb_interface *interface,
 		return -ENODEV;
 	}

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		pr_err("%s() Unable to allocate memory\n", __func__);
 		return -ENOMEM;
diff --git a/drivers/media/usb/au0828/au0828-input.c b/drivers/media/usb/au0828/au0828-input.c
index 3d3368202cd0..9de5e7fdbbef 100644
--- a/drivers/media/usb/au0828/au0828-input.c
+++ b/drivers/media/usb/au0828/au0828-input.c
@@ -283,7 +283,7 @@ int au0828_rc_register(struct au0828_dev *dev)
 	if (!i2c_rc_dev_addr)
 		return -ENODEV;

-	ir = kzalloc(sizeof(*ir), GFP_KERNEL);
+	ir = kzalloc_obj(*ir, GFP_KERNEL);
 	rc = rc_allocate_device(RC_DRIVER_IR_RAW);
 	if (!ir || !rc)
 		goto error;
diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c b/drivers/media/usb/cx231xx/cx231xx-cards.c
index 691f073892b3..00029ea23c63 100644
--- a/drivers/media/usb/cx231xx/cx231xx-cards.c
+++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
@@ -1295,7 +1295,7 @@ void cx231xx_card_setup(struct cx231xx *dev)
 				u8 eeprom[256];
 				struct i2c_client client;
 			};
-			struct eeprom *e = kzalloc(sizeof(*e), GFP_KERNEL);
+			struct eeprom *e = kzalloc_obj(*e, GFP_KERNEL);

 			if (e == NULL) {
 				dev_err(dev->dev,
@@ -1381,7 +1381,7 @@ static int cx231xx_media_device_init(struct cx231xx *dev,
 #ifdef CONFIG_MEDIA_CONTROLLER
 	struct media_device *mdev;

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return -ENOMEM;

diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index 0037b4b1381e..913d53abd0e4 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -627,7 +627,7 @@ static int dvb_init(struct cx231xx *dev)
 		return 0;
 	}

-	dvb = kzalloc(sizeof(struct cx231xx_dvb), GFP_KERNEL);
+	dvb = kzalloc_obj(struct cx231xx_dvb, GFP_KERNEL);

 	if (dvb == NULL) {
 		dev_info(dev->dev,
diff --git a/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c b/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
index f1c79f351ec8..acbc951dbdc0 100644
--- a/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
+++ b/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
@@ -392,7 +392,7 @@ static int dvb_usbv2_media_device_init(struct dvb_usb_adapter *adap)
 	struct dvb_usb_device *d = adap_to_d(adap);
 	struct usb_device *udev = d->udev;

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return -ENOMEM;

@@ -904,7 +904,7 @@ int dvb_usbv2_probe(struct usb_interface *intf,
 		goto err;
 	}

-	d = kzalloc(sizeof(struct dvb_usb_device), GFP_KERNEL);
+	d = kzalloc_obj(struct dvb_usb_device, GFP_KERNEL);
 	if (!d) {
 		dev_err(&udev->dev, "%s: kzalloc() failed\n", KBUILD_MODNAME);
 		ret = -ENOMEM;
diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c b/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c
index a6ad5f477520..4811f4d1ac87 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-demod.c
@@ -577,7 +577,7 @@ struct dvb_frontend *mxl111sf_demod_attach(struct mxl111sf_state *mxl_state,

 	mxl_dbg("()");

-	state = kzalloc(sizeof(struct mxl111sf_demod_state), GFP_KERNEL);
+	state = kzalloc_obj(struct mxl111sf_demod_state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.c b/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.c
index 6686f75cbd94..0cc78fd8e916 100644
--- a/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.c
+++ b/drivers/media/usb/dvb-usb-v2/mxl111sf-tuner.c
@@ -482,7 +482,7 @@ struct dvb_frontend *mxl111sf_tuner_attach(struct dvb_frontend *fe,

 	mxl_dbg("()");

-	state = kzalloc(sizeof(struct mxl111sf_tuner_state), GFP_KERNEL);
+	state = kzalloc_obj(struct mxl111sf_tuner_state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/media/usb/dvb-usb/af9005-fe.c b/drivers/media/usb/dvb-usb/af9005-fe.c
index 404e56b32145..b6fb72c97aef 100644
--- a/drivers/media/usb/dvb-usb/af9005-fe.c
+++ b/drivers/media/usb/dvb-usb/af9005-fe.c
@@ -1423,7 +1423,7 @@ struct dvb_frontend *af9005_fe_attach(struct dvb_usb_device *d)
 	struct af9005_fe_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct af9005_fe_state), GFP_KERNEL);
+	state = kzalloc_obj(struct af9005_fe_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/usb/dvb-usb/cinergyT2-fe.c b/drivers/media/usb/dvb-usb/cinergyT2-fe.c
index efb207c23a64..84f167a463ce 100644
--- a/drivers/media/usb/dvb-usb/cinergyT2-fe.c
+++ b/drivers/media/usb/dvb-usb/cinergyT2-fe.c
@@ -268,8 +268,8 @@ static const struct dvb_frontend_ops cinergyt2_fe_ops;

 struct dvb_frontend *cinergyt2_fe_attach(struct dvb_usb_device *d)
 {
-	struct cinergyt2_fe_state *s = kzalloc(sizeof(
-					struct cinergyt2_fe_state), GFP_KERNEL);
+	struct cinergyt2_fe_state *s = kzalloc_obj(struct cinergyt2_fe_state,
+						   GFP_KERNEL);
 	if (s == NULL)
 		return NULL;

diff --git a/drivers/media/usb/dvb-usb/dtt200u-fe.c b/drivers/media/usb/dvb-usb/dtt200u-fe.c
index 586afe22d817..30d2e6d46b5b 100644
--- a/drivers/media/usb/dvb-usb/dtt200u-fe.c
+++ b/drivers/media/usb/dvb-usb/dtt200u-fe.c
@@ -206,7 +206,7 @@ struct dvb_frontend* dtt200u_fe_attach(struct dvb_usb_device *d)
 	struct dtt200u_fe_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(struct dtt200u_fe_state), GFP_KERNEL);
+	state = kzalloc_obj(struct dtt200u_fe_state, GFP_KERNEL);
 	if (state == NULL)
 		goto error;

diff --git a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c
index 0a7f8ba90992..94e1e7ce278d 100644
--- a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c
+++ b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c
@@ -103,7 +103,7 @@ static int dvb_usb_media_device_init(struct dvb_usb_adapter *adap)
 	struct dvb_usb_device *d = adap->dev;
 	struct usb_device *udev = d->udev;

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return -ENOMEM;

diff --git a/drivers/media/usb/dvb-usb/dvb-usb-init.c b/drivers/media/usb/dvb-usb/dvb-usb-init.c
index fbf58012becd..656401276d09 100644
--- a/drivers/media/usb/dvb-usb/dvb-usb-init.c
+++ b/drivers/media/usb/dvb-usb/dvb-usb-init.c
@@ -278,7 +278,7 @@ int dvb_usb_device_init(struct usb_interface *intf,
 	if (du != NULL)
 		*du = NULL;

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		err("no memory for 'struct dvb_usb_device'");
 		return -ENOMEM;
diff --git a/drivers/media/usb/dvb-usb/vp702x-fe.c b/drivers/media/usb/dvb-usb/vp702x-fe.c
index c1e7931900ee..0f9bd7abbcec 100644
--- a/drivers/media/usb/dvb-usb/vp702x-fe.c
+++ b/drivers/media/usb/dvb-usb/vp702x-fe.c
@@ -323,7 +323,8 @@ static const struct dvb_frontend_ops vp702x_fe_ops;

 struct dvb_frontend * vp702x_fe_attach(struct dvb_usb_device *d)
 {
-	struct vp702x_fe_state *s = kzalloc(sizeof(struct vp702x_fe_state), GFP_KERNEL);
+	struct vp702x_fe_state *s = kzalloc_obj(struct vp702x_fe_state,
+						GFP_KERNEL);
 	if (s == NULL)
 		goto error;

diff --git a/drivers/media/usb/dvb-usb/vp7045-fe.c b/drivers/media/usb/dvb-usb/vp7045-fe.c
index e99740ec2650..a6555fc0b79a 100644
--- a/drivers/media/usb/dvb-usb/vp7045-fe.c
+++ b/drivers/media/usb/dvb-usb/vp7045-fe.c
@@ -140,7 +140,8 @@ static const struct dvb_frontend_ops vp7045_fe_ops;

 struct dvb_frontend * vp7045_fe_attach(struct dvb_usb_device *d)
 {
-	struct vp7045_fe_state *s = kzalloc(sizeof(struct vp7045_fe_state), GFP_KERNEL);
+	struct vp7045_fe_state *s = kzalloc_obj(struct vp7045_fe_state,
+						GFP_KERNEL);
 	if (s == NULL)
 		goto error;

diff --git a/drivers/media/usb/em28xx/em28xx-audio.c b/drivers/media/usb/em28xx/em28xx-audio.c
index ce1b0d9e0741..ca8432d47301 100644
--- a/drivers/media/usb/em28xx/em28xx-audio.c
+++ b/drivers/media/usb/em28xx/em28xx-audio.c
@@ -750,7 +750,7 @@ static int em28xx_audio_urb_init(struct em28xx *dev)
 	if (!dev->adev.transfer_buffer)
 		return -ENOMEM;

-	dev->adev.urb = kcalloc(num_urb, sizeof(*dev->adev.urb), GFP_KERNEL);
+	dev->adev.urb = kzalloc_objs(*dev->adev.urb, num_urb, GFP_KERNEL);
 	if (!dev->adev.urb) {
 		kfree(dev->adev.transfer_buffer);
 		return -ENOMEM;
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
index a51cbcf429e1..2fa43caaa968 100644
--- a/drivers/media/usb/em28xx/em28xx-cards.c
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
@@ -3488,7 +3488,7 @@ static int em28xx_media_device_init(struct em28xx *dev,
 #ifdef CONFIG_MEDIA_CONTROLLER
 	struct media_device *mdev;

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return -ENOMEM;

@@ -3905,7 +3905,7 @@ static int em28xx_usb_probe(struct usb_interface *intf,
 	}

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		retval = -ENOMEM;
 		goto err;
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c
index b94f5c70ab75..c6151d2a21a6 100644
--- a/drivers/media/usb/em28xx/em28xx-dvb.c
+++ b/drivers/media/usb/em28xx/em28xx-dvb.c
@@ -1500,7 +1500,7 @@ static int em28xx_dvb_init(struct em28xx *dev)

 	dev_info(&dev->intf->dev, "Binding DVB extension\n");

-	dvb = kzalloc(sizeof(*dvb), GFP_KERNEL);
+	dvb = kzalloc_obj(*dvb, GFP_KERNEL);
 	if (!dvb)
 		return -ENOMEM;

diff --git a/drivers/media/usb/em28xx/em28xx-input.c b/drivers/media/usb/em28xx/em28xx-input.c
index 5f3b00869bdb..f8de173affd5 100644
--- a/drivers/media/usb/em28xx/em28xx-input.c
+++ b/drivers/media/usb/em28xx/em28xx-input.c
@@ -724,7 +724,7 @@ static int em28xx_ir_init(struct em28xx *dev)

 	dev_info(&dev->intf->dev, "Registering input extension\n");

-	ir = kzalloc(sizeof(*ir), GFP_KERNEL);
+	ir = kzalloc_obj(*ir, GFP_KERNEL);
 	if (!ir)
 		goto ref_put;
 	rc = rc_allocate_device(RC_DRIVER_SCANCODE);
@@ -765,7 +765,7 @@ static int em28xx_ir_init(struct em28xx *dev)
 			goto error;
 		}

-		ir->i2c_client = kzalloc(sizeof(*ir->i2c_client), GFP_KERNEL);
+		ir->i2c_client = kzalloc_obj(*ir->i2c_client, GFP_KERNEL);
 		if (!ir->i2c_client)
 			goto error;
 		ir->i2c_client->adapter = &ir->dev->i2c_adap[dev->def_i2c_bus];
diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index 2dfa3242a7ab..ca88b6b13724 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -2529,7 +2529,7 @@ static int em28xx_v4l2_init(struct em28xx *dev)

 	mutex_lock(&dev->lock);

-	v4l2 = kzalloc(sizeof(*v4l2), GFP_KERNEL);
+	v4l2 = kzalloc_obj(*v4l2, GFP_KERNEL);
 	if (!v4l2) {
 		mutex_unlock(&dev->lock);
 		return -ENOMEM;
diff --git a/drivers/media/usb/go7007/go7007-driver.c b/drivers/media/usb/go7007/go7007-driver.c
index 468406302cd5..77f4d9a249ea 100644
--- a/drivers/media/usb/go7007/go7007-driver.c
+++ b/drivers/media/usb/go7007/go7007-driver.c
@@ -694,7 +694,7 @@ struct go7007 *go7007_alloc(const struct go7007_board_info *board,
 {
 	struct go7007 *go;

-	go = kzalloc(sizeof(struct go7007), GFP_KERNEL);
+	go = kzalloc_obj(struct go7007, GFP_KERNEL);
 	if (go == NULL)
 		return NULL;
 	go->dev = dev;
diff --git a/drivers/media/usb/go7007/go7007-usb.c b/drivers/media/usb/go7007/go7007-usb.c
index 334cdde81a5c..8a42aaac9cba 100644
--- a/drivers/media/usb/go7007/go7007-usb.c
+++ b/drivers/media/usb/go7007/go7007-usb.c
@@ -1115,7 +1115,7 @@ static int go7007_usb_probe(struct usb_interface *intf,
 	if (go == NULL)
 		return -ENOMEM;

-	usb = kzalloc(sizeof(struct go7007_usb), GFP_KERNEL);
+	usb = kzalloc_obj(struct go7007_usb, GFP_KERNEL);
 	if (usb == NULL) {
 		kfree(go);
 		return -ENOMEM;
diff --git a/drivers/media/usb/go7007/s2250-board.c b/drivers/media/usb/go7007/s2250-board.c
index a155b987282f..23f577b0cfbf 100644
--- a/drivers/media/usb/go7007/s2250-board.c
+++ b/drivers/media/usb/go7007/s2250-board.c
@@ -509,7 +509,7 @@ static int s2250_probe(struct i2c_client *client)
 	if (IS_ERR(audio))
 		return PTR_ERR(audio);

-	state = kzalloc(sizeof(struct s2250), GFP_KERNEL);
+	state = kzalloc_obj(struct s2250, GFP_KERNEL);
 	if (state == NULL) {
 		i2c_unregister_device(audio);
 		return -ENOMEM;
diff --git a/drivers/media/usb/go7007/snd-go7007.c b/drivers/media/usb/go7007/snd-go7007.c
index 9a6bd87fce03..c294c9486611 100644
--- a/drivers/media/usb/go7007/snd-go7007.c
+++ b/drivers/media/usb/go7007/snd-go7007.c
@@ -207,7 +207,7 @@ int go7007_snd_init(struct go7007 *go)
 		dev++;
 		return -ENOENT;
 	}
-	gosnd = kmalloc(sizeof(struct go7007_snd), GFP_KERNEL);
+	gosnd = kmalloc_obj(struct go7007_snd, GFP_KERNEL);
 	if (gosnd == NULL)
 		return -ENOMEM;
 	spin_lock_init(&gosnd->lock);
diff --git a/drivers/media/usb/gspca/stv06xx/stv06xx_hdcs.c b/drivers/media/usb/gspca/stv06xx/stv06xx_hdcs.c
index 303b055fefea..ecb73b0b186b 100644
--- a/drivers/media/usb/gspca/stv06xx/stv06xx_hdcs.c
+++ b/drivers/media/usb/gspca/stv06xx/stv06xx_hdcs.c
@@ -368,7 +368,7 @@ static int hdcs_probe_1x00(struct sd *sd)
 	sd->gspca_dev.cam.cam_mode = hdcs1x00_mode;
 	sd->gspca_dev.cam.nmodes = ARRAY_SIZE(hdcs1x00_mode);

-	hdcs = kmalloc(sizeof(struct hdcs), GFP_KERNEL);
+	hdcs = kmalloc_obj(struct hdcs, GFP_KERNEL);
 	if (!hdcs)
 		return -ENOMEM;

@@ -425,7 +425,7 @@ static int hdcs_probe_1020(struct sd *sd)
 	sd->gspca_dev.cam.cam_mode = hdcs1020_mode;
 	sd->gspca_dev.cam.nmodes = ARRAY_SIZE(hdcs1020_mode);

-	hdcs = kmalloc(sizeof(struct hdcs), GFP_KERNEL);
+	hdcs = kmalloc_obj(struct hdcs, GFP_KERNEL);
 	if (!hdcs)
 		return -ENOMEM;

diff --git a/drivers/media/usb/gspca/stv06xx/stv06xx_pb0100.c b/drivers/media/usb/gspca/stv06xx/stv06xx_pb0100.c
index ae382b3b5f7f..984e6283ce83 100644
--- a/drivers/media/usb/gspca/stv06xx/stv06xx_pb0100.c
+++ b/drivers/media/usb/gspca/stv06xx/stv06xx_pb0100.c
@@ -126,7 +126,7 @@ static int pb0100_init_controls(struct sd *sd)
 		.def = 1,
 	};

-	ctrls = kzalloc(sizeof(*ctrls), GFP_KERNEL);
+	ctrls = kzalloc_obj(*ctrls, GFP_KERNEL);
 	if (!ctrls)
 		return -ENOMEM;

diff --git a/drivers/media/usb/hackrf/hackrf.c b/drivers/media/usb/hackrf/hackrf.c
index 0b50de8775a3..599ebcad2bcc 100644
--- a/drivers/media/usb/hackrf/hackrf.c
+++ b/drivers/media/usb/hackrf/hackrf.c
@@ -1348,7 +1348,7 @@ static int hackrf_probe(struct usb_interface *intf,
 	int ret;
 	u8 u8tmp, buf[BUF_SIZE];

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/usb/hdpvr/hdpvr-core.c b/drivers/media/usb/hdpvr/hdpvr-core.c
index 52e05a69c46e..eba330e00fb7 100644
--- a/drivers/media/usb/hdpvr/hdpvr-core.c
+++ b/drivers/media/usb/hdpvr/hdpvr-core.c
@@ -276,7 +276,7 @@ static int hdpvr_probe(struct usb_interface *interface,
 	int retval = -ENOMEM;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		dev_err(&interface->dev, "Out of memory\n");
 		goto error;
diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c b/drivers/media/usb/hdpvr/hdpvr-video.c
index 8c7ae362d992..54c0484a14d8 100644
--- a/drivers/media/usb/hdpvr/hdpvr-video.c
+++ b/drivers/media/usb/hdpvr/hdpvr-video.c
@@ -147,7 +147,7 @@ int hdpvr_alloc_buffers(struct hdpvr_device *dev, uint count)

 	for (i = 0; i < count; i++) {

-		buf = kzalloc(sizeof(struct hdpvr_buffer), GFP_KERNEL);
+		buf = kzalloc_obj(struct hdpvr_buffer, GFP_KERNEL);
 		if (!buf) {
 			v4l2_err(&dev->v4l2_dev, "cannot allocate buffer\n");
 			goto exit;
@@ -379,7 +379,7 @@ static int hdpvr_stop_streaming(struct hdpvr_device *dev)

 static int hdpvr_open(struct file *file)
 {
-	struct hdpvr_fh *fh = kzalloc(sizeof(*fh), GFP_KERNEL);
+	struct hdpvr_fh *fh = kzalloc_obj(*fh, GFP_KERNEL);

 	if (fh == NULL)
 		return -ENOMEM;
diff --git a/drivers/media/usb/msi2500/msi2500.c b/drivers/media/usb/msi2500/msi2500.c
index 33099f39146a..330955ddb703 100644
--- a/drivers/media/usb/msi2500/msi2500.c
+++ b/drivers/media/usb/msi2500/msi2500.c
@@ -1170,7 +1170,7 @@ static int msi2500_probe(struct usb_interface *intf,
 		.max_speed_hz		= 12000000,
 	};

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-context.c b/drivers/media/usb/pvrusb2/pvrusb2-context.c
index 73c95ba2328a..ca970f7f4bc0 100644
--- a/drivers/media/usb/pvrusb2/pvrusb2-context.c
+++ b/drivers/media/usb/pvrusb2/pvrusb2-context.c
@@ -204,7 +204,7 @@ struct pvr2_context *pvr2_context_create(
 	void (*setup_func)(struct pvr2_context *))
 {
 	struct pvr2_context *mp = NULL;
-	mp = kzalloc(sizeof(*mp),GFP_KERNEL);
+	mp = kzalloc_obj(*mp, GFP_KERNEL);
 	if (!mp) goto done;
 	pvr2_trace(PVR2_TRACE_CTXT,"pvr2_context %p (create)",mp);
 	mp->setup_func = setup_func;
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-dvb.c b/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
index 3610139fb9ad..064c11b7effe 100644
--- a/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
+++ b/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
@@ -449,7 +449,7 @@ struct pvr2_dvb_adapter *pvr2_dvb_create(struct pvr2_context *pvr)
 		   the DVB side of the driver either.  For now. */
 		return NULL;
 	}
-	adap = kzalloc(sizeof(*adap), GFP_KERNEL);
+	adap = kzalloc_obj(*adap, GFP_KERNEL);
 	if (!adap) return adap;
 	pvr2_channel_init(&adap->channel, pvr);
 	adap->channel.check_func = pvr2_dvb_internal_check;
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
index 5807734ae26c..fe988c6b693f 100644
--- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
@@ -2367,7 +2367,7 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
 		goto fail;
 	}

-	hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
+	hdw = kzalloc_obj(*hdw, GFP_KERNEL);
 	pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
 		   hdw,hdw_desc->description);
 	pvr2_trace(PVR2_TRACE_INFO, "Hardware description: %s",
@@ -2424,8 +2424,8 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,

 	hdw->control_cnt = CTRLDEF_COUNT;
 	hdw->control_cnt += MPEGDEF_COUNT;
-	hdw->controls = kcalloc(hdw->control_cnt, sizeof(struct pvr2_ctrl),
-				GFP_KERNEL);
+	hdw->controls = kzalloc_objs(struct pvr2_ctrl, hdw->control_cnt,
+				     GFP_KERNEL);
 	if (!hdw->controls) goto fail;
 	hdw->hdw_desc = hdw_desc;
 	hdw->ir_scheme_active = hdw->hdw_desc->ir_scheme;
@@ -2450,9 +2450,8 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
 	}

 	/* Define and configure additional controls from cx2341x module. */
-	hdw->mpeg_ctrl_info = kcalloc(MPEGDEF_COUNT,
-				      sizeof(*(hdw->mpeg_ctrl_info)),
-				      GFP_KERNEL);
+	hdw->mpeg_ctrl_info = kzalloc_objs(*(hdw->mpeg_ctrl_info),
+					   MPEGDEF_COUNT, GFP_KERNEL);
 	if (!hdw->mpeg_ctrl_info) goto fail;
 	for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
 		cptr = hdw->controls + idx + CTRLDEF_COUNT;
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-io.c b/drivers/media/usb/pvrusb2/pvrusb2-io.c
index 28ffe7981f8c..1341967ac666 100644
--- a/drivers/media/usb/pvrusb2/pvrusb2-io.c
+++ b/drivers/media/usb/pvrusb2/pvrusb2-io.c
@@ -299,7 +299,7 @@ static int pvr2_stream_buffer_count(struct pvr2_stream *sp, unsigned int cnt)
 		if (scnt > sp->buffer_slot_count) {
 			struct pvr2_buffer **nb;

-			nb = kmalloc_array(scnt, sizeof(*nb), GFP_KERNEL);
+			nb = kmalloc_objs(*nb, scnt, GFP_KERNEL);
 			if (!nb) return -ENOMEM;
 			if (sp->buffer_slot_count) {
 				memcpy(nb, sp->buffers,
@@ -311,7 +311,7 @@ static int pvr2_stream_buffer_count(struct pvr2_stream *sp, unsigned int cnt)
 		}
 		while (sp->buffer_total_count < cnt) {
 			struct pvr2_buffer *bp;
-			bp = kmalloc(sizeof(*bp), GFP_KERNEL);
+			bp = kmalloc_obj(*bp, GFP_KERNEL);
 			if (!bp) return -ENOMEM;
 			ret = pvr2_buffer_init(bp, sp, sp->buffer_total_count);
 			if (ret) {
@@ -460,7 +460,7 @@ static void buffer_complete(struct urb *urb)
 struct pvr2_stream *pvr2_stream_create(void)
 {
 	struct pvr2_stream *sp;
-	sp = kzalloc(sizeof(*sp), GFP_KERNEL);
+	sp = kzalloc_obj(*sp, GFP_KERNEL);
 	if (!sp) return sp;
 	pvr2_trace(PVR2_TRACE_INIT, "pvr2_stream_create: sp=%p", sp);
 	pvr2_stream_init(sp);
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-ioread.c b/drivers/media/usb/pvrusb2/pvrusb2-ioread.c
index 46f8013849b9..d397231f153d 100644
--- a/drivers/media/usb/pvrusb2/pvrusb2-ioread.c
+++ b/drivers/media/usb/pvrusb2/pvrusb2-ioread.c
@@ -73,7 +73,7 @@ static void pvr2_ioread_done(struct pvr2_ioread *cp)
 struct pvr2_ioread *pvr2_ioread_create(void)
 {
 	struct pvr2_ioread *cp;
-	cp = kzalloc(sizeof(*cp),GFP_KERNEL);
+	cp = kzalloc_obj(*cp, GFP_KERNEL);
 	if (!cp) return NULL;
 	pvr2_trace(PVR2_TRACE_STRUCT,"pvr2_ioread_create id=%p",cp);
 	if (pvr2_ioread_init(cp) < 0) {
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-sysfs.c b/drivers/media/usb/pvrusb2/pvrusb2-sysfs.c
index 3077399901aa..f2cb644ca3d7 100644
--- a/drivers/media/usb/pvrusb2/pvrusb2-sysfs.c
+++ b/drivers/media/usb/pvrusb2/pvrusb2-sysfs.c
@@ -289,7 +289,7 @@ static void pvr2_sysfs_add_control(struct pvr2_sysfs *sfp,int ctl_id)
 	cptr = pvr2_hdw_get_ctrl_by_index(sfp->channel.hdw,ctl_id);
 	if (!cptr) return;

-	cip = kzalloc(sizeof(*cip),GFP_KERNEL);
+	cip = kzalloc_obj(*cip, GFP_KERNEL);
 	if (!cip) return;
 	pvr2_sysfs_trace("Creating pvr2_sysfs_ctl_item id=%p",cip);

@@ -411,7 +411,7 @@ static void pvr2_sysfs_add_debugifc(struct pvr2_sysfs *sfp)
 	struct pvr2_sysfs_debugifc *dip;
 	int ret;

-	dip = kzalloc(sizeof(*dip),GFP_KERNEL);
+	dip = kzalloc_obj(*dip, GFP_KERNEL);
 	if (!dip) return;
 	sysfs_attr_init(&dip->attr_debugcmd.attr);
 	dip->attr_debugcmd.attr.name = "debugcmd";
@@ -615,7 +615,7 @@ static void class_dev_create(struct pvr2_sysfs *sfp)

 	usb_dev = pvr2_hdw_get_dev(sfp->channel.hdw);
 	if (!usb_dev) return;
-	class_dev = kzalloc(sizeof(*class_dev),GFP_KERNEL);
+	class_dev = kzalloc_obj(*class_dev, GFP_KERNEL);
 	if (!class_dev) return;

 	pvr2_sysfs_trace("Creating class_dev id=%p",class_dev);
@@ -748,7 +748,7 @@ static void pvr2_sysfs_internal_check(struct pvr2_channel *chp)
 void pvr2_sysfs_create(struct pvr2_context *mp)
 {
 	struct pvr2_sysfs *sfp;
-	sfp = kzalloc(sizeof(*sfp),GFP_KERNEL);
+	sfp = kzalloc_obj(*sfp, GFP_KERNEL);
 	if (!sfp)
 		return;
 	pvr2_trace(PVR2_TRACE_STRUCT,"Creating pvr2_sysfs id=%p",sfp);
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
index f9535a484738..6fd0bfb5f699 100644
--- a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
+++ b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
@@ -944,7 +944,7 @@ static int pvr2_v4l2_open(struct file *file)
 		return -EIO;
 	}

-	fhp = kzalloc(sizeof(*fhp),GFP_KERNEL);
+	fhp = kzalloc_obj(*fhp, GFP_KERNEL);
 	if (!fhp) {
 		return -ENOMEM;
 	}
@@ -1236,7 +1236,7 @@ struct pvr2_v4l2 *pvr2_v4l2_create(struct pvr2_context *mnp)
 {
 	struct pvr2_v4l2 *vp;

-	vp = kzalloc(sizeof(*vp),GFP_KERNEL);
+	vp = kzalloc_obj(*vp, GFP_KERNEL);
 	if (!vp) return vp;
 	pvr2_channel_init(&vp->channel,mnp);
 	pvr2_trace(PVR2_TRACE_STRUCT,"Creating pvr2_v4l2 id=%p",vp);
@@ -1244,12 +1244,12 @@ struct pvr2_v4l2 *pvr2_v4l2_create(struct pvr2_context *mnp)
 	vp->channel.check_func = pvr2_v4l2_internal_check;

 	/* register streams */
-	vp->dev_video = kzalloc(sizeof(*vp->dev_video),GFP_KERNEL);
+	vp->dev_video = kzalloc_obj(*vp->dev_video, GFP_KERNEL);
 	if (!vp->dev_video) goto fail;
 	pvr2_v4l2_dev_init(vp->dev_video,vp,VFL_TYPE_VIDEO);
 	if (pvr2_hdw_get_input_available(vp->channel.mc_head->hdw) &
 	    (1 << PVR2_CVAL_INPUT_RADIO)) {
-		vp->dev_radio = kzalloc(sizeof(*vp->dev_radio),GFP_KERNEL);
+		vp->dev_radio = kzalloc_obj(*vp->dev_radio, GFP_KERNEL);
 		if (!vp->dev_radio) goto fail;
 		pvr2_v4l2_dev_init(vp->dev_radio,vp,VFL_TYPE_RADIO);
 	}
diff --git a/drivers/media/usb/pwc/pwc-if.c b/drivers/media/usb/pwc/pwc-if.c
index c6e5d031f068..b57502237f3a 100644
--- a/drivers/media/usb/pwc/pwc-if.c
+++ b/drivers/media/usb/pwc/pwc-if.c
@@ -1026,7 +1026,7 @@ static int usb_pwc_probe(struct usb_interface *intf, const struct usb_device_id
 		PWC_WARNING("Warning: more than 1 configuration available.\n");

 	/* Allocate structure, initialize pointers, mutexes, etc. and link it to the usb_device */
-	pdev = kzalloc(sizeof(struct pwc_device), GFP_KERNEL);
+	pdev = kzalloc_obj(struct pwc_device, GFP_KERNEL);
 	if (pdev == NULL) {
 		PWC_ERROR("Oops, could not allocate memory for pwc_device.\n");
 		return -ENOMEM;
diff --git a/drivers/media/usb/s2255/s2255drv.c b/drivers/media/usb/s2255/s2255drv.c
index 8332f2c5aed7..189a356eaf34 100644
--- a/drivers/media/usb/s2255/s2255drv.c
+++ b/drivers/media/usb/s2255/s2255drv.c
@@ -2207,7 +2207,7 @@ static int s2255_probe(struct usb_interface *interface,
 	int fw_size;

 	/* allocate memory for our device state and initialize it to zero */
-	dev = kzalloc(sizeof(struct s2255_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct s2255_dev, GFP_KERNEL);
 	if (dev == NULL) {
 		s2255_dev_err(&interface->dev, "out of memory\n");
 		return -ENOMEM;
@@ -2221,7 +2221,7 @@ static int s2255_probe(struct usb_interface *interface,

 	refcount_set(&dev->num_channels, 0);
 	dev->pid = id->idProduct;
-	dev->fw_data = kzalloc(sizeof(struct s2255_fw), GFP_KERNEL);
+	dev->fw_data = kzalloc_obj(struct s2255_fw, GFP_KERNEL);
 	if (!dev->fw_data)
 		goto errorFWDATA1;
 	mutex_init(&dev->lock);
diff --git a/drivers/media/usb/siano/smsusb.c b/drivers/media/usb/siano/smsusb.c
index 2c8179a84991..4d9cb4184ca2 100644
--- a/drivers/media/usb/siano/smsusb.c
+++ b/drivers/media/usb/siano/smsusb.c
@@ -367,7 +367,7 @@ static void *siano_media_device_register(struct smsusb_device_t *dev,
 	struct sms_board *board = sms_get_board(board_id);
 	int ret;

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return NULL;

@@ -397,7 +397,7 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id)
 	int align = 0;

 	/* create device object */
-	dev = kzalloc(sizeof(struct smsusb_device_t), GFP_KERNEL);
+	dev = kzalloc_obj(struct smsusb_device_t, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/media/usb/stk1160/stk1160-core.c b/drivers/media/usb/stk1160/stk1160-core.c
index 25d725c2ab3c..ec4a9e2f42ab 100644
--- a/drivers/media/usb/stk1160/stk1160-core.c
+++ b/drivers/media/usb/stk1160/stk1160-core.c
@@ -295,7 +295,7 @@ static int stk1160_probe(struct usb_interface *interface,
 		return rc;
 	}

-	dev = kzalloc(sizeof(struct stk1160), GFP_KERNEL);
+	dev = kzalloc_obj(struct stk1160, GFP_KERNEL);
 	if (dev == NULL) {
 		kfree(alt_max_pkt_size);
 		return -ENOMEM;
diff --git a/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c b/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
index 9e016b71aa91..9cd0ea41300c 100644
--- a/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
+++ b/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
@@ -1606,7 +1606,7 @@ static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *i

 	if (intf->altsetting->desc.bInterfaceNumber != 1) return -ENODEV;

-	if (!(ttusb = kzalloc(sizeof(struct ttusb), GFP_KERNEL)))
+	if (!(ttusb = kzalloc_obj(struct ttusb, GFP_KERNEL)))
 		return -ENOMEM;

 	ttusb->dev = udev;
diff --git a/drivers/media/usb/ttusb-dec/ttusb_dec.c b/drivers/media/usb/ttusb-dec/ttusb_dec.c
index b4575fe89c95..24ba5c1c48d2 100644
--- a/drivers/media/usb/ttusb-dec/ttusb_dec.c
+++ b/drivers/media/usb/ttusb-dec/ttusb_dec.c
@@ -809,8 +809,7 @@ static void ttusb_dec_process_urb(struct urb *urb)
 			b = urb->transfer_buffer + d->offset;
 			length = d->actual_length;

-			if ((frame = kmalloc(sizeof(struct urb_frame),
-					     GFP_ATOMIC))) {
+			if ((frame = kmalloc_obj(struct urb_frame, GFP_ATOMIC))) {
 				unsigned long flags;

 				memcpy(frame->data, b, length);
@@ -1061,8 +1060,7 @@ static int ttusb_dec_start_sec_feed(struct dvb_demux_feed *dvbdmxfeed)

 	if (!result) {
 		if (c_length == 2) {
-			if (!(finfo = kmalloc(sizeof(struct filter_info),
-					      GFP_ATOMIC)))
+			if (!(finfo = kmalloc_obj(struct filter_info, GFP_ATOMIC)))
 				return -ENOMEM;

 			finfo->stream_id = c[1];
@@ -1644,7 +1642,7 @@ static int ttusb_dec_probe(struct usb_interface *intf,

 	udev = interface_to_usbdev(intf);

-	if (!(dec = kzalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
+	if (!(dec = kzalloc_obj(struct ttusb_dec, GFP_KERNEL))) {
 		printk("%s: couldn't allocate memory.\n", __func__);
 		return -ENOMEM;
 	}
diff --git a/drivers/media/usb/ttusb-dec/ttusbdecfe.c b/drivers/media/usb/ttusb-dec/ttusbdecfe.c
index dff6bf532ce3..df4ade291db4 100644
--- a/drivers/media/usb/ttusb-dec/ttusbdecfe.c
+++ b/drivers/media/usb/ttusb-dec/ttusbdecfe.c
@@ -198,7 +198,7 @@ struct dvb_frontend* ttusbdecfe_dvbt_attach(const struct ttusbdecfe_config* conf
 	struct ttusbdecfe_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kmalloc(sizeof(struct ttusbdecfe_state), GFP_KERNEL);
+	state = kmalloc_obj(struct ttusbdecfe_state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

@@ -218,7 +218,7 @@ struct dvb_frontend* ttusbdecfe_dvbs_attach(const struct ttusbdecfe_config* conf
 	struct ttusbdecfe_state* state = NULL;

 	/* allocate memory for the internal state */
-	state = kmalloc(sizeof(struct ttusbdecfe_state), GFP_KERNEL);
+	state = kmalloc_obj(struct ttusbdecfe_state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/media/usb/usbtv/usbtv-core.c b/drivers/media/usb/usbtv/usbtv-core.c
index 1f7620cd2996..12ed28253d0c 100644
--- a/drivers/media/usb/usbtv/usbtv-core.c
+++ b/drivers/media/usb/usbtv/usbtv-core.c
@@ -87,7 +87,7 @@ static int usbtv_probe(struct usb_interface *intf,
 	size = size * usb_endpoint_maxp_mult(&ep->desc);

 	/* Device structure */
-	usbtv = kzalloc(sizeof(struct usbtv), GFP_KERNEL);
+	usbtv = kzalloc_obj(struct usbtv, GFP_KERNEL);
 	if (usbtv == NULL)
 		return -ENOMEM;
 	usbtv->dev = dev;
diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index f0f6f8454d9c..2c511d1d9bf9 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -600,7 +600,7 @@ static const struct uvc_control_mapping *uvc_ctrl_filter_plf_mapping(
 	u8 init_val;
 	int ret;

-	buf = kmalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kmalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -3339,8 +3339,7 @@ static int uvc_ctrl_init_chain(struct uvc_video_chain *chain)
 		if (ncontrols == 0)
 			continue;

-		entity->controls = kcalloc(ncontrols, sizeof(*ctrl),
-					   GFP_KERNEL);
+		entity->controls = kzalloc_objs(*ctrl, ncontrols, GFP_KERNEL);
 		if (entity->controls == NULL)
 			return -ENOMEM;
 		entity->ncontrols = ncontrols;
diff --git a/drivers/media/usb/uvc/uvc_debugfs.c b/drivers/media/usb/uvc/uvc_debugfs.c
index 14fa41cb8148..1ea4a4e82662 100644
--- a/drivers/media/usb/uvc/uvc_debugfs.c
+++ b/drivers/media/usb/uvc/uvc_debugfs.c
@@ -29,7 +29,7 @@ static int uvc_debugfs_stats_open(struct inode *inode, struct file *file)
 	struct uvc_streaming *stream = inode->i_private;
 	struct uvc_debugfs_buffer *buf;

-	buf = kmalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kmalloc_obj(*buf, GFP_KERNEL);
 	if (buf == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
index aa3e8d295e0f..05c5f70c0a93 100644
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -200,7 +200,7 @@ static struct uvc_streaming *uvc_stream_new(struct uvc_device *dev,
 {
 	struct uvc_streaming *stream;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (stream == NULL)
 		return NULL;

@@ -1761,7 +1761,7 @@ static struct uvc_video_chain *uvc_alloc_chain(struct uvc_device *dev)
 {
 	struct uvc_video_chain *chain;

-	chain = kzalloc(sizeof(*chain), GFP_KERNEL);
+	chain = kzalloc_obj(*chain, GFP_KERNEL);
 	if (chain == NULL)
 		return NULL;

@@ -2193,7 +2193,7 @@ static int uvc_probe(struct usb_interface *intf,
 	int ret;

 	/* Allocate memory for the device and initialize it. */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/usb/uvc/uvc_metadata.c b/drivers/media/usb/uvc/uvc_metadata.c
index c23b174965c3..59e2b05aaf21 100644
--- a/drivers/media/usb/uvc/uvc_metadata.c
+++ b/drivers/media/usb/uvc/uvc_metadata.c
@@ -181,7 +181,7 @@ static int uvc_meta_detect_msxu(struct uvc_device *dev)
 	 * USB requires buffers aligned in a special way, simplest way is to
 	 * make sure that query_ctrl will work is to kmalloc() them.
 	 */
-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc_status.c
index 231cfee8e7c2..018d25101bb8 100644
--- a/drivers/media/usb/uvc/uvc_status.c
+++ b/drivers/media/usb/uvc/uvc_status.c
@@ -263,7 +263,7 @@ int uvc_status_init(struct uvc_device *dev)
 	if (ep == NULL)
 		return 0;

-	dev->status = kzalloc(sizeof(*dev->status), GFP_KERNEL);
+	dev->status = kzalloc_obj(*dev->status, GFP_KERNEL);
 	if (!dev->status)
 		return -ENOMEM;

diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
index 30c160daed8c..98e6c4135dfd 100644
--- a/drivers/media/usb/uvc/uvc_v4l2.c
+++ b/drivers/media/usb/uvc/uvc_v4l2.c
@@ -133,7 +133,7 @@ static int uvc_ioctl_xu_ctrl_map(struct uvc_video_chain *chain,
 		return -EINVAL;
 	}

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (map == NULL)
 		return -ENOMEM;

@@ -572,7 +572,7 @@ static int uvc_v4l2_open(struct file *file)
 	uvc_dbg(stream->dev, CALLS, "%s\n", __func__);

 	/* Create the device handle. */
-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
index 59eb95a4b70c..249a225563f9 100644
--- a/drivers/media/usb/uvc/uvc_video.c
+++ b/drivers/media/usb/uvc/uvc_video.c
@@ -682,8 +682,7 @@ static int uvc_video_clock_init(struct uvc_clock *clock)
 	spin_lock_init(&clock->lock);
 	clock->size = 32;

-	clock->samples = kmalloc_array(clock->size, sizeof(*clock->samples),
-				       GFP_KERNEL);
+	clock->samples = kmalloc_objs(*clock->samples, clock->size, GFP_KERNEL);
 	if (clock->samples == NULL)
 		return -ENOMEM;

diff --git a/drivers/media/v4l2-core/tuner-core.c b/drivers/media/v4l2-core/tuner-core.c
index 5687089bea6e..b6e7c11ef7e5 100644
--- a/drivers/media/v4l2-core/tuner-core.c
+++ b/drivers/media/v4l2-core/tuner-core.c
@@ -633,7 +633,7 @@ static int tuner_probe(struct i2c_client *client)
 	int ret;
 #endif

-	t = kzalloc(sizeof(struct tuner), GFP_KERNEL);
+	t = kzalloc_obj(struct tuner, GFP_KERNEL);
 	if (NULL == t)
 		return -ENOMEM;
 	v4l2_i2c_subdev_init(&t->sd, client, &tuner_ops);
diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c
index 1c08bba9ecb9..c04a0e7c6edf 100644
--- a/drivers/media/v4l2-core/v4l2-async.c
+++ b/drivers/media/v4l2-core/v4l2-async.c
@@ -779,7 +779,7 @@ int v4l2_async_subdev_endpoint_add(struct v4l2_subdev *sd,
 {
 	struct v4l2_async_subdev_endpoint *ase;

-	ase = kmalloc(sizeof(*ase), GFP_KERNEL);
+	ase = kmalloc_obj(*ase, GFP_KERNEL);
 	if (!ase)
 		return -ENOMEM;

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-api.c b/drivers/media/v4l2-core/v4l2-ctrls-api.c
index 0078a04c5445..03040c8eaa79 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-api.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-api.c
@@ -431,8 +431,7 @@ int v4l2_g_ext_ctrls_common(struct v4l2_ctrl_handler *hdl,
 		return class_check(hdl, cs->which);

 	if (cs->count > ARRAY_SIZE(helper)) {
-		helpers = kvmalloc_array(cs->count, sizeof(helper[0]),
-					 GFP_KERNEL);
+		helpers = kvmalloc_objs(helper[0], cs->count, GFP_KERNEL);
 		if (!helpers)
 			return -ENOMEM;
 	}
@@ -617,8 +616,7 @@ int try_set_ext_ctrls_common(struct v4l2_fh *fh,
 		return class_check(hdl, cs->which);

 	if (cs->count > ARRAY_SIZE(helper)) {
-		helpers = kvmalloc_array(cs->count, sizeof(helper[0]),
-					 GFP_KERNEL);
+		helpers = kvmalloc_objs(helper[0], cs->count, GFP_KERNEL);
 		if (!helpers)
 			return -ENOMEM;
 	}
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index 79a157975f70..3e8b4a38b8ae 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -1725,8 +1725,8 @@ int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
 	INIT_LIST_HEAD(&hdl->ctrls);
 	INIT_LIST_HEAD(&hdl->ctrl_refs);
 	hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
-	hdl->buckets = kvcalloc(hdl->nr_of_buckets, sizeof(hdl->buckets[0]),
-				GFP_KERNEL);
+	hdl->buckets = kvzalloc_objs(hdl->buckets[0], hdl->nr_of_buckets,
+				     GFP_KERNEL);
 	hdl->error = hdl->buckets ? 0 : -ENOMEM;
 	v4l2_ctrl_handler_init_request(hdl);
 	return hdl->error;
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-request.c b/drivers/media/v4l2-core/v4l2-ctrls-request.c
index e77f722b36a4..e6d7f731d01a 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-request.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-request.c
@@ -198,7 +198,7 @@ v4l2_ctrls_find_req_obj(struct v4l2_ctrl_handler *hdl,
 	if (!set)
 		return ERR_PTR(-ENOMEM);

-	new_hdl = kzalloc(sizeof(*new_hdl), GFP_KERNEL);
+	new_hdl = kzalloc_obj(*new_hdl, GFP_KERNEL);
 	if (!new_hdl)
 		return ERR_PTR(-ENOMEM);

@@ -341,7 +341,7 @@ void v4l2_ctrl_request_complete(struct media_request *req,
 		int ret;

 		/* Create a new request so the driver can return controls */
-		hdl = kzalloc(sizeof(*hdl), GFP_KERNEL);
+		hdl = kzalloc_obj(*hdl, GFP_KERNEL);
 		if (!hdl)
 			return;

diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
index 10a126e50c1c..8add56232e84 100644
--- a/drivers/media/v4l2-core/v4l2-dev.c
+++ b/drivers/media/v4l2-core/v4l2-dev.c
@@ -146,7 +146,7 @@ static inline int devnode_find(struct video_device *vdev, int from, int to)

 struct video_device *video_device_alloc(void)
 {
-	return kzalloc(sizeof(struct video_device), GFP_KERNEL);
+	return kzalloc_obj(struct video_device, GFP_KERNEL);
 }
 EXPORT_SYMBOL(video_device_alloc);

diff --git a/drivers/media/v4l2-core/v4l2-device.c b/drivers/media/v4l2-core/v4l2-device.c
index 63b12ef9d4d9..779ae282ab11 100644
--- a/drivers/media/v4l2-core/v4l2-device.c
+++ b/drivers/media/v4l2-core/v4l2-device.c
@@ -205,7 +205,7 @@ int __v4l2_device_register_subdev_nodes(struct v4l2_device *v4l2_dev,
 		if (sd->devnode)
 			continue;

-		vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
+		vdev = kzalloc_obj(*vdev, GFP_KERNEL);
 		if (!vdev) {
 			err = -ENOMEM;
 			goto clean_up;
diff --git a/drivers/media/v4l2-core/v4l2-dv-timings.c b/drivers/media/v4l2-core/v4l2-dv-timings.c
index 346d1b0e10ce..a6233bdab3d4 100644
--- a/drivers/media/v4l2-core/v4l2-dv-timings.c
+++ b/drivers/media/v4l2-core/v4l2-dv-timings.c
@@ -1237,7 +1237,7 @@ struct v4l2_debugfs_if *v4l2_debugfs_if_alloc(struct dentry *root, u32 if_types,
 	if (IS_ERR_OR_NULL(root) || !if_types || !if_read)
 		return NULL;

-	infoframes = kzalloc(sizeof(*infoframes), GFP_KERNEL);
+	infoframes = kzalloc_obj(*infoframes, GFP_KERNEL);
 	if (!infoframes)
 		return NULL;

diff --git a/drivers/media/v4l2-core/v4l2-event.c b/drivers/media/v4l2-core/v4l2-event.c
index 3898ff7edddb..b92561fb65d4 100644
--- a/drivers/media/v4l2-core/v4l2-event.c
+++ b/drivers/media/v4l2-core/v4l2-event.c
@@ -235,7 +235,7 @@ int v4l2_event_subscribe(struct v4l2_fh *fh,
 	if (elems < 1)
 		elems = 1;

-	sev = kvzalloc(struct_size(sev, events, elems), GFP_KERNEL);
+	sev = kvzalloc_flex(*sev, events, elems, GFP_KERNEL);
 	if (!sev)
 		return -ENOMEM;
 	sev->elems = elems;
diff --git a/drivers/media/v4l2-core/v4l2-fh.c b/drivers/media/v4l2-core/v4l2-fh.c
index df3ba9d4674b..fdd247b945a3 100644
--- a/drivers/media/v4l2-core/v4l2-fh.c
+++ b/drivers/media/v4l2-core/v4l2-fh.c
@@ -57,7 +57,7 @@ EXPORT_SYMBOL_GPL(v4l2_fh_add);
 int v4l2_fh_open(struct file *filp)
 {
 	struct video_device *vdev = video_devdata(filp);
-	struct v4l2_fh *fh = kzalloc(sizeof(*fh), GFP_KERNEL);
+	struct v4l2_fh *fh = kzalloc_obj(*fh, GFP_KERNEL);

 	if (fh == NULL)
 		return -ENOMEM;
diff --git a/drivers/media/v4l2-core/v4l2-flash-led-class.c b/drivers/media/v4l2-core/v4l2-flash-led-class.c
index 355595a0fefa..735434d4b4c2 100644
--- a/drivers/media/v4l2-core/v4l2-flash-led-class.c
+++ b/drivers/media/v4l2-core/v4l2-flash-led-class.c
@@ -443,8 +443,8 @@ static int v4l2_flash_init_controls(struct v4l2_flash *v4l2_flash,
 		return -ENOMEM;

 	/* allocate memory dynamically so as not to exceed stack frame size */
-	ctrl_init_data = kcalloc(NUM_FLASH_CTRLS, sizeof(*ctrl_init_data),
-					GFP_KERNEL);
+	ctrl_init_data = kzalloc_objs(*ctrl_init_data, NUM_FLASH_CTRLS,
+				      GFP_KERNEL);
 	if (!ctrl_init_data)
 		return -ENOMEM;

diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
index 22ec702a4567..c3ea009b8ffb 100644
--- a/drivers/media/v4l2-core/v4l2-fwnode.c
+++ b/drivers/media/v4l2-core/v4l2-fwnode.c
@@ -785,7 +785,7 @@ int v4l2_fwnode_connector_add_link(struct fwnode_handle *fwnode,
 	if (!connector_ep)
 		return -ENOTCONN;

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (!link) {
 		err = -ENOMEM;
 		goto err;
@@ -1257,7 +1257,7 @@ int v4l2_async_register_subdev_sensor(struct v4l2_subdev *sd)
 	if (WARN_ON(!sd->dev))
 		return -ENODEV;

-	notifier = kzalloc(sizeof(*notifier), GFP_KERNEL);
+	notifier = kzalloc_obj(*notifier, GFP_KERNEL);
 	if (!notifier)
 		return -ENOMEM;

diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c b/drivers/media/v4l2-core/v4l2-mem2mem.c
index b661f483dad3..2c933f4644aa 100644
--- a/drivers/media/v4l2-core/v4l2-mem2mem.c
+++ b/drivers/media/v4l2-core/v4l2-mem2mem.c
@@ -1190,7 +1190,7 @@ struct v4l2_m2m_dev *v4l2_m2m_init(const struct v4l2_m2m_ops *m2m_ops)
 	if (!m2m_ops || WARN_ON(!m2m_ops->device_run))
 		return ERR_PTR(-EINVAL);

-	m2m_dev = kzalloc(sizeof *m2m_dev, GFP_KERNEL);
+	m2m_dev = kzalloc_obj(*m2m_dev, GFP_KERNEL);
 	if (!m2m_dev)
 		return ERR_PTR(-ENOMEM);

@@ -1238,7 +1238,7 @@ struct v4l2_m2m_ctx *v4l2_m2m_ctx_init(struct v4l2_m2m_dev *m2m_dev,
 	struct v4l2_m2m_queue_ctx *out_q_ctx, *cap_q_ctx;
 	int ret;

-	m2m_ctx = kzalloc(sizeof *m2m_ctx, GFP_KERNEL);
+	m2m_ctx = kzalloc_obj(*m2m_ctx, GFP_KERNEL);
 	if (!m2m_ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c
index 66842b975f91..c358cb40b829 100644
--- a/drivers/media/v4l2-core/v4l2-subdev.c
+++ b/drivers/media/v4l2-core/v4l2-subdev.c
@@ -99,7 +99,7 @@ static int subdev_open(struct file *file)
 	struct v4l2_subdev_fh *subdev_fh;
 	int ret;

-	subdev_fh = kzalloc(sizeof(*subdev_fh), GFP_KERNEL);
+	subdev_fh = kzalloc_obj(*subdev_fh, GFP_KERNEL);
 	if (subdev_fh == NULL)
 		return -ENOMEM;

@@ -1606,7 +1606,7 @@ __v4l2_subdev_state_alloc(struct v4l2_subdev *sd, const char *lock_name,
 	struct v4l2_subdev_state *state;
 	int ret;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return ERR_PTR(-ENOMEM);

@@ -1620,8 +1620,8 @@ __v4l2_subdev_state_alloc(struct v4l2_subdev *sd, const char *lock_name,

 	/* Drivers that support streams do not need the legacy pad config */
 	if (!(sd->flags & V4L2_SUBDEV_FL_STREAMS) && sd->entity.num_pads) {
-		state->pads = kvcalloc(sd->entity.num_pads,
-				       sizeof(*state->pads), GFP_KERNEL);
+		state->pads = kvzalloc_objs(*state->pads, sd->entity.num_pads,
+					    GFP_KERNEL);
 		if (!state->pads) {
 			ret = -ENOMEM;
 			goto err;
@@ -1889,9 +1889,9 @@ v4l2_subdev_init_stream_configs(struct v4l2_subdev_stream_configs *stream_config
 	}

 	if (new_configs.num_configs) {
-		new_configs.configs = kvcalloc(new_configs.num_configs,
-					       sizeof(*new_configs.configs),
-					       GFP_KERNEL);
+		new_configs.configs = kvzalloc_objs(*new_configs.configs,
+						    new_configs.num_configs,
+						    GFP_KERNEL);

 		if (!new_configs.configs)
 			return -ENOMEM;
diff --git a/drivers/memory/samsung/exynos-srom.c b/drivers/memory/samsung/exynos-srom.c
index d913fb901973..1863c85642dd 100644
--- a/drivers/memory/samsung/exynos-srom.c
+++ b/drivers/memory/samsung/exynos-srom.c
@@ -54,7 +54,7 @@ exynos_srom_alloc_reg_dump(const unsigned long *rdump,
 	struct exynos_srom_reg_dump *rd;
 	unsigned int i;

-	rd = kcalloc(nr_rdump, sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_objs(*rd, nr_rdump, GFP_KERNEL);
 	if (!rd)
 		return NULL;

diff --git a/drivers/memory/tegra/tegra124-emc.c b/drivers/memory/tegra/tegra124-emc.c
index 9978ff911c47..68496f9012ff 100644
--- a/drivers/memory/tegra/tegra124-emc.c
+++ b/drivers/memory/tegra/tegra124-emc.c
@@ -1291,7 +1291,7 @@ emc_of_icc_xlate_extended(const struct of_phandle_args *spec, void *data)
 		if (node->id != TEGRA_ICC_EMEM)
 			continue;

-		ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
+		ndata = kzalloc_obj(*ndata, GFP_KERNEL);
 		if (!ndata)
 			return ERR_PTR(-ENOMEM);

diff --git a/drivers/memory/tegra/tegra124.c b/drivers/memory/tegra/tegra124.c
index 9d7393e19f12..965bfab127f5 100644
--- a/drivers/memory/tegra/tegra124.c
+++ b/drivers/memory/tegra/tegra124.c
@@ -1182,7 +1182,7 @@ tegra124_mc_of_icc_xlate_extended(const struct of_phandle_args *spec, void *data
 		if (node->id != idx)
 			continue;

-		ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
+		ndata = kzalloc_obj(*ndata, GFP_KERNEL);
 		if (!ndata)
 			return ERR_PTR(-ENOMEM);

diff --git a/drivers/memory/tegra/tegra20-emc.c b/drivers/memory/tegra/tegra20-emc.c
index 398cb8ae2e38..48a546315d1c 100644
--- a/drivers/memory/tegra/tegra20-emc.c
+++ b/drivers/memory/tegra/tegra20-emc.c
@@ -958,7 +958,7 @@ emc_of_icc_xlate_extended(const struct of_phandle_args *spec, void *data)
 		if (node->id != TEGRA_ICC_EMEM)
 			continue;

-		ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
+		ndata = kzalloc_obj(*ndata, GFP_KERNEL);
 		if (!ndata)
 			return ERR_PTR(-ENOMEM);

diff --git a/drivers/memory/tegra/tegra20.c b/drivers/memory/tegra/tegra20.c
index a3022e715dee..40bee3ff4a45 100644
--- a/drivers/memory/tegra/tegra20.c
+++ b/drivers/memory/tegra/tegra20.c
@@ -401,7 +401,7 @@ tegra20_mc_of_icc_xlate_extended(const struct of_phandle_args *spec, void *data)
 		if (node->id != idx)
 			continue;

-		ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
+		ndata = kzalloc_obj(*ndata, GFP_KERNEL);
 		if (!ndata)
 			return ERR_PTR(-ENOMEM);

@@ -615,7 +615,7 @@ static int tegra20_mc_stats_show(struct seq_file *s, void *unused)
 	struct tegra20_mc_client_stat *stats;
 	unsigned int i;

-	stats = kcalloc(mc->soc->num_clients + 1, sizeof(*stats), GFP_KERNEL);
+	stats = kzalloc_objs(*stats, mc->soc->num_clients + 1, GFP_KERNEL);
 	if (!stats)
 		return -ENOMEM;

diff --git a/drivers/memory/tegra/tegra30-emc.c b/drivers/memory/tegra/tegra30-emc.c
index 914116d8ec16..8226cadc1f8f 100644
--- a/drivers/memory/tegra/tegra30-emc.c
+++ b/drivers/memory/tegra/tegra30-emc.c
@@ -1476,7 +1476,7 @@ emc_of_icc_xlate_extended(const struct of_phandle_args *spec, void *data)
 		if (node->id != TEGRA_ICC_EMEM)
 			continue;

-		ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
+		ndata = kzalloc_obj(*ndata, GFP_KERNEL);
 		if (!ndata)
 			return ERR_PTR(-ENOMEM);

diff --git a/drivers/memory/tegra/tegra30.c b/drivers/memory/tegra/tegra30.c
index d3e685c8431f..d9f255da5c0e 100644
--- a/drivers/memory/tegra/tegra30.c
+++ b/drivers/memory/tegra/tegra30.c
@@ -1344,7 +1344,7 @@ tegra30_mc_of_icc_xlate_extended(const struct of_phandle_args *spec, void *data)
 		if (node->id != idx)
 			continue;

-		ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
+		ndata = kzalloc_obj(*ndata, GFP_KERNEL);
 		if (!ndata)
 			return ERR_PTR(-ENOMEM);

diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c
index acafc910bbac..d3641ba53bc9 100644
--- a/drivers/memstick/core/memstick.c
+++ b/drivers/memstick/core/memstick.c
@@ -380,8 +380,7 @@ EXPORT_SYMBOL(memstick_set_rw_addr);

 static struct memstick_dev *memstick_alloc_card(struct memstick_host *host)
 {
-	struct memstick_dev *card = kzalloc(sizeof(struct memstick_dev),
-					    GFP_KERNEL);
+	struct memstick_dev *card = kzalloc_obj(struct memstick_dev, GFP_KERNEL);
 	struct memstick_dev *old_card = host->card;
 	struct ms_id_register id_reg;

diff --git a/drivers/memstick/core/ms_block.c b/drivers/memstick/core/ms_block.c
index 1af157ce0a63..6835849bf309 100644
--- a/drivers/memstick/core/ms_block.c
+++ b/drivers/memstick/core/ms_block.c
@@ -1203,8 +1203,7 @@ static int msb_read_boot_blocks(struct msb_data *msb)
 	dbg_verbose("Start of a scan for the boot blocks");

 	if (!msb->boot_page) {
-		page = kmalloc_array(2, sizeof(struct ms_boot_page),
-				     GFP_KERNEL);
+		page = kmalloc_objs(struct ms_boot_page, 2, GFP_KERNEL);
 		if (!page)
 			return -ENOMEM;

@@ -2151,7 +2150,7 @@ static int msb_probe(struct memstick_dev *card)
 	struct msb_data *msb;
 	int rc = 0;

-	msb = kzalloc(sizeof(struct msb_data), GFP_KERNEL);
+	msb = kzalloc_obj(struct msb_data, GFP_KERNEL);
 	if (!msb)
 		return -ENOMEM;
 	memstick_set_drvdata(card, msb);
@@ -2225,7 +2224,7 @@ static int msb_resume(struct memstick_dev *card)
 #endif
 	mutex_lock(&card->host->lock);

-	new_msb = kzalloc(sizeof(struct msb_data), GFP_KERNEL);
+	new_msb = kzalloc_obj(struct msb_data, GFP_KERNEL);
 	if (!new_msb)
 		goto out;

diff --git a/drivers/memstick/core/mspro_block.c b/drivers/memstick/core/mspro_block.c
index e507bb11c802..57c2b28f88bd 100644
--- a/drivers/memstick/core/mspro_block.c
+++ b/drivers/memstick/core/mspro_block.c
@@ -939,9 +939,8 @@ static int mspro_block_read_attributes(struct memstick_dev *card)
 	} else
 		attr_count = attr->count;

-	msb->attr_group.attrs = kcalloc(attr_count + 1,
-					sizeof(*msb->attr_group.attrs),
-					GFP_KERNEL);
+	msb->attr_group.attrs = kzalloc_objs(*msb->attr_group.attrs,
+					     attr_count + 1, GFP_KERNEL);
 	if (!msb->attr_group.attrs) {
 		rc = -ENOMEM;
 		goto out_free_attr;
@@ -955,7 +954,7 @@ static int mspro_block_read_attributes(struct memstick_dev *card)
 	}

 	for (cnt = 0; cnt < attr_count; ++cnt) {
-		s_attr = kzalloc(sizeof(struct mspro_sys_attr), GFP_KERNEL);
+		s_attr = kzalloc_obj(struct mspro_sys_attr, GFP_KERNEL);
 		if (!s_attr) {
 			rc = -ENOMEM;
 			goto out_free_buffer;
@@ -1211,7 +1210,7 @@ static int mspro_block_probe(struct memstick_dev *card)
 	struct mspro_block_data *msb;
 	int rc = 0;

-	msb = kzalloc(sizeof(struct mspro_block_data), GFP_KERNEL);
+	msb = kzalloc_obj(struct mspro_block_data, GFP_KERNEL);
 	if (!msb)
 		return -ENOMEM;
 	memstick_set_drvdata(card, msb);
@@ -1298,7 +1297,7 @@ static int mspro_block_resume(struct memstick_dev *card)
 	unsigned char cnt;

 	mutex_lock(&host->lock);
-	new_msb = kzalloc(sizeof(struct mspro_block_data), GFP_KERNEL);
+	new_msb = kzalloc_obj(struct mspro_block_data, GFP_KERNEL);
 	if (!new_msb) {
 		rc = -ENOMEM;
 		goto out_unlock;
diff --git a/drivers/memstick/host/jmb38x_ms.c b/drivers/memstick/host/jmb38x_ms.c
index 79e66e30417c..122300b89279 100644
--- a/drivers/memstick/host/jmb38x_ms.c
+++ b/drivers/memstick/host/jmb38x_ms.c
@@ -926,7 +926,7 @@ static int jmb38x_ms_probe(struct pci_dev *pdev,
 		goto err_out_int;
 	}

-	jm = kzalloc(struct_size(jm, hosts, cnt), GFP_KERNEL);
+	jm = kzalloc_flex(*jm, hosts, cnt, GFP_KERNEL);
 	if (!jm) {
 		rc = -ENOMEM;
 		goto err_out_int;
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index e60a8d3947c9..de771eb6facd 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1771,7 +1771,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
 	struct proc_dir_entry *dent;
 #endif

-	ioc = kzalloc(sizeof(MPT_ADAPTER), GFP_KERNEL);
+	ioc = kzalloc_obj(MPT_ADAPTER, GFP_KERNEL);
 	if (ioc == NULL) {
 		printk(KERN_ERR MYNAM ": ERROR - Insufficient memory to add adapter!\n");
 		return -ENOMEM;
@@ -5700,8 +5700,7 @@ mpt_inactive_raid_volumes(MPT_ADAPTER *ioc, u8 channel, u8 id)
 		    buffer->PhysDisk[i].PhysDiskNum, &phys_disk) != 0)
 			continue;

-		if ((component_info = kmalloc(sizeof (*component_info),
-		 GFP_KERNEL)) == NULL)
+		if ((component_info = kmalloc_obj(*component_info, GFP_KERNEL)) == NULL)
 			continue;

 		component_info->volumeID = id;
diff --git a/drivers/message/fusion/mptfc.c b/drivers/message/fusion/mptfc.c
index cd52db6fe76c..b65bc679106a 100644
--- a/drivers/message/fusion/mptfc.c
+++ b/drivers/message/fusion/mptfc.c
@@ -484,7 +484,7 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
 		}
 	}
 	if (new_ri) {	/* allocate one */
-		ri = kzalloc(sizeof(struct mptfc_rport_info), GFP_KERNEL);
+		ri = kzalloc_obj(struct mptfc_rport_info, GFP_KERNEL);
 		if (!ri)
 			return;
 		list_add_tail(&ri->list, &ioc->fc_rports);
@@ -572,7 +572,7 @@ mptfc_target_alloc(struct scsi_target *starget)
 	struct mptfc_rport_info *ri;
 	int			rc;

-	vtarget = kzalloc(sizeof(VirtTarget), GFP_KERNEL);
+	vtarget = kzalloc_obj(VirtTarget, GFP_KERNEL);
 	if (!vtarget)
 		return -ENOMEM;
 	starget->hostdata = vtarget;
@@ -650,7 +650,7 @@ mptfc_sdev_init(struct scsi_device *sdev)
 	hd = shost_priv(sdev->host);
 	ioc = hd->ioc;

-	vdevice = kzalloc(sizeof(VirtDevice), GFP_KERNEL);
+	vdevice = kzalloc_obj(VirtDevice, GFP_KERNEL);
 	if (!vdevice) {
 		printk(MYIOC_s_ERR_FMT "sdev_init kmalloc(%zd) FAILED!\n",
 				ioc->name, sizeof(VirtDevice));
diff --git a/drivers/message/fusion/mptlan.c b/drivers/message/fusion/mptlan.c
index de2e7bcf4784..0da0d472aaff 100644
--- a/drivers/message/fusion/mptlan.c
+++ b/drivers/message/fusion/mptlan.c
@@ -391,14 +391,13 @@ mpt_lan_open(struct net_device *dev)
 				"a moment.\n");
 	}

-	priv->mpt_txfidx = kmalloc_array(priv->tx_max_out, sizeof(int),
-					 GFP_KERNEL);
+	priv->mpt_txfidx = kmalloc_objs(int, priv->tx_max_out, GFP_KERNEL);
 	if (priv->mpt_txfidx == NULL)
 		goto out;
 	priv->mpt_txfidx_tail = -1;

-	priv->SendCtl = kcalloc(priv->tx_max_out, sizeof(struct BufferControl),
-				GFP_KERNEL);
+	priv->SendCtl = kzalloc_objs(struct BufferControl, priv->tx_max_out,
+				     GFP_KERNEL);
 	if (priv->SendCtl == NULL)
 		goto out_mpt_txfidx;
 	for (i = 0; i < priv->tx_max_out; i++)
@@ -406,15 +405,13 @@ mpt_lan_open(struct net_device *dev)

 	dlprintk((KERN_INFO MYNAM "@lo: Finished initializing SendCtl\n"));

-	priv->mpt_rxfidx = kmalloc_array(priv->max_buckets_out, sizeof(int),
-					 GFP_KERNEL);
+	priv->mpt_rxfidx = kmalloc_objs(int, priv->max_buckets_out, GFP_KERNEL);
 	if (priv->mpt_rxfidx == NULL)
 		goto out_SendCtl;
 	priv->mpt_rxfidx_tail = -1;

-	priv->RcvCtl = kcalloc(priv->max_buckets_out,
-			       sizeof(struct BufferControl),
-			       GFP_KERNEL);
+	priv->RcvCtl = kzalloc_objs(struct BufferControl, priv->max_buckets_out,
+				    GFP_KERNEL);
 	if (priv->RcvCtl == NULL)
 		goto out_mpt_rxfidx;
 	for (i = 0; i < priv->max_buckets_out; i++)
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index 5276bdb7acc2..0b9e787ae3d5 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -603,7 +603,7 @@ mptsas_add_device_component(MPT_ADAPTER *ioc, u8 channel, u8 id,
 		}
 	}

-	sas_info = kzalloc(sizeof(struct mptsas_device_info), GFP_KERNEL);
+	sas_info = kzalloc_obj(struct mptsas_device_info, GFP_KERNEL);
 	if (!sas_info)
 		goto out;

@@ -756,7 +756,7 @@ mptsas_add_device_component_starget_ir(MPT_ADAPTER *ioc,
 		}
 	}

-	sas_info = kzalloc(sizeof(struct mptsas_device_info), GFP_KERNEL);
+	sas_info = kzalloc_obj(struct mptsas_device_info, GFP_KERNEL);
 	if (sas_info) {
 		sas_info->fw.id = starget->id;
 		sas_info->os.id = starget->id;
@@ -907,8 +907,8 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
 		 * Forming a port
 		 */
 		if (!port_details) {
-			port_details = kzalloc(sizeof(struct
-				mptsas_portinfo_details), GFP_KERNEL);
+			port_details = kzalloc_obj(struct mptsas_portinfo_details,
+						   GFP_KERNEL);
 			if (!port_details)
 				goto out;
 			port_details->num_phys = 1;
@@ -1038,7 +1038,7 @@ mptsas_queue_rescan(MPT_ADAPTER *ioc)
 {
 	struct fw_event_work *fw_event;

-	fw_event = kzalloc(sizeof(*fw_event), GFP_ATOMIC);
+	fw_event = kzalloc_obj(*fw_event, GFP_ATOMIC);
 	if (!fw_event) {
 		printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n",
 		    ioc->name, __func__, __LINE__);
@@ -1150,8 +1150,8 @@ mptsas_target_reset_queue(MPT_ADAPTER *ioc,
 		vtarget->deleted = 1; /* block IO */
 	}

-	target_reset_list = kzalloc(sizeof(struct mptsas_target_reset_event),
-	    GFP_ATOMIC);
+	target_reset_list = kzalloc_obj(struct mptsas_target_reset_event,
+					GFP_ATOMIC);
 	if (!target_reset_list) {
 		dfailprintk(ioc, printk(MYIOC_s_WARN_FMT
 			"%s, failed to allocate mem @%d..!!\n",
@@ -1751,7 +1751,7 @@ mptsas_target_alloc(struct scsi_target *starget)
 	int 			 i;
 	MPT_ADAPTER		*ioc = hd->ioc;

-	vtarget = kzalloc(sizeof(VirtTarget), GFP_KERNEL);
+	vtarget = kzalloc_obj(VirtTarget, GFP_KERNEL);
 	if (!vtarget)
 		return -ENOMEM;

@@ -1878,7 +1878,7 @@ mptsas_sdev_init(struct scsi_device *sdev)
 	int 			i;
 	MPT_ADAPTER *ioc = hd->ioc;

-	vdevice = kzalloc(sizeof(VirtDevice), GFP_KERNEL);
+	vdevice = kzalloc_obj(VirtDevice, GFP_KERNEL);
 	if (!vdevice) {
 		printk(MYIOC_s_ERR_FMT "sdev_init kzalloc(%zd) FAILED!\n",
 				ioc->name, sizeof(VirtDevice));
@@ -2428,8 +2428,8 @@ mptsas_sas_io_unit_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
 		goto out_free_consistent;

 	port_info->num_phys = buffer->NumPhys;
-	port_info->phy_info = kcalloc(port_info->num_phys,
-		sizeof(struct mptsas_phyinfo), GFP_KERNEL);
+	port_info->phy_info = kzalloc_objs(struct mptsas_phyinfo,
+					   port_info->num_phys, GFP_KERNEL);
 	if (!port_info->phy_info) {
 		error = -ENOMEM;
 		goto out_free_consistent;
@@ -2719,8 +2719,8 @@ mptsas_sas_expander_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info,

 	/* save config data */
 	port_info->num_phys = (buffer->NumPhys) ? buffer->NumPhys : 1;
-	port_info->phy_info = kcalloc(port_info->num_phys,
-		sizeof(struct mptsas_phyinfo), GFP_KERNEL);
+	port_info->phy_info = kzalloc_objs(struct mptsas_phyinfo,
+					   port_info->num_phys, GFP_KERNEL);
 	if (!port_info->phy_info) {
 		error = -ENOMEM;
 		goto out_free_consistent;
@@ -3309,7 +3309,7 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc)
 	struct mptsas_portinfo *port_info, *hba;
 	int error = -ENOMEM, i;

-	hba = kzalloc(sizeof(struct mptsas_portinfo), GFP_KERNEL);
+	hba = kzalloc_obj(struct mptsas_portinfo, GFP_KERNEL);
 	if (! hba)
 		goto out;

@@ -3444,12 +3444,12 @@ mptsas_expander_event_add(MPT_ADAPTER *ioc,
 	int i;
 	__le64 sas_address;

-	port_info = kzalloc(sizeof(struct mptsas_portinfo), GFP_KERNEL);
+	port_info = kzalloc_obj(struct mptsas_portinfo, GFP_KERNEL);
 	BUG_ON(!port_info);
 	port_info->num_phys = (expander_data->NumPhys) ?
 	    expander_data->NumPhys : 1;
-	port_info->phy_info = kcalloc(port_info->num_phys,
-	    sizeof(struct mptsas_phyinfo), GFP_KERNEL);
+	port_info->phy_info = kzalloc_objs(struct mptsas_phyinfo,
+					   port_info->num_phys, GFP_KERNEL);
 	BUG_ON(!port_info->phy_info);
 	memcpy(&sas_address, &expander_data->SASAddress, sizeof(__le64));
 	for (i = 0; i < port_info->num_phys; i++) {
@@ -3677,7 +3677,7 @@ mptsas_expander_add(MPT_ADAPTER *ioc, u16 handle)
 	    MPI_SAS_EXPAND_PGAD_FORM_SHIFT), handle)))
 		return NULL;

-	port_info = kzalloc(sizeof(struct mptsas_portinfo), GFP_KERNEL);
+	port_info = kzalloc_obj(struct mptsas_portinfo, GFP_KERNEL);
 	if (!port_info) {
 		dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
 		"%s: exit at line=%d\n", ioc->name,
@@ -3945,7 +3945,7 @@ mptsas_probe_expanders(MPT_ADAPTER *ioc)
 			continue;
 		}

-		port_info = kzalloc(sizeof(struct mptsas_portinfo), GFP_KERNEL);
+		port_info = kzalloc_obj(struct mptsas_portinfo, GFP_KERNEL);
 		if (!port_info) {
 			dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
 			"%s: exit at line=%d\n", ioc->name,
diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c
index 14707d19fbbd..62cf9d582386 100644
--- a/drivers/message/fusion/mptspi.c
+++ b/drivers/message/fusion/mptspi.c
@@ -405,7 +405,7 @@ static int mptspi_target_alloc(struct scsi_target *starget)
 		return -ENODEV;

 	ioc = hd->ioc;
-	vtarget = kzalloc(sizeof(VirtTarget), GFP_KERNEL);
+	vtarget = kzalloc_obj(VirtTarget, GFP_KERNEL);
 	if (!vtarget)
 		return -ENOMEM;

@@ -725,7 +725,7 @@ static int mptspi_sdev_init(struct scsi_device *sdev)
 		mptscsih_is_phys_disk(ioc, 0, sdev->id) == 0)
 			return -ENXIO;

-	vdevice = kzalloc(sizeof(VirtDevice), GFP_KERNEL);
+	vdevice = kzalloc_obj(VirtDevice, GFP_KERNEL);
 	if (!vdevice) {
 		printk(MYIOC_s_ERR_FMT "sdev_init kmalloc(%zd) FAILED!\n",
 				ioc->name, sizeof(VirtDevice));
@@ -1152,7 +1152,7 @@ static void mpt_work_wrapper(struct work_struct *work)

 static void mpt_dv_raid(struct _MPT_SCSI_HOST *hd, int disk)
 {
-	struct work_queue_wrapper *wqw = kmalloc(sizeof(*wqw), GFP_ATOMIC);
+	struct work_queue_wrapper *wqw = kmalloc_obj(*wqw, GFP_ATOMIC);
 	MPT_ADAPTER *ioc = hd->ioc;

 	if (!wqw) {
@@ -1288,7 +1288,7 @@ mptspi_dv_renegotiate_work(struct work_struct *work)
 static void
 mptspi_dv_renegotiate(struct _MPT_SCSI_HOST *hd)
 {
-	struct work_queue_wrapper *wqw = kmalloc(sizeof(*wqw), GFP_ATOMIC);
+	struct work_queue_wrapper *wqw = kmalloc_obj(*wqw, GFP_ATOMIC);

 	if (!wqw)
 		return;
diff --git a/drivers/mfd/cros_ec_dev.c b/drivers/mfd/cros_ec_dev.c
index dc80a272726b..777cb2a24983 100644
--- a/drivers/mfd/cros_ec_dev.c
+++ b/drivers/mfd/cros_ec_dev.c
@@ -188,7 +188,7 @@ static int ec_device_probe(struct platform_device *pdev)
 	struct device_node *node;
 	struct device *dev = &pdev->dev;
 	struct cros_ec_platform *ec_platform = dev_get_platdata(dev);
-	struct cros_ec_dev *ec = kzalloc(sizeof(*ec), GFP_KERNEL);
+	struct cros_ec_dev *ec = kzalloc_obj(*ec, GFP_KERNEL);
 	struct ec_response_pchg_count pchg_count;
 	int i;

diff --git a/drivers/mfd/dln2.c b/drivers/mfd/dln2.c
index fbbe82c6e75b..eb70156e5abf 100644
--- a/drivers/mfd/dln2.c
+++ b/drivers/mfd/dln2.c
@@ -125,7 +125,7 @@ int dln2_register_event_cb(struct platform_device *pdev, u16 id,
 	unsigned long flags;
 	int ret = 0;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -778,7 +778,7 @@ static int dln2_probe(struct usb_interface *interface,
 	if (ret)
 		return ret;

-	dln2 = kzalloc(sizeof(*dln2), GFP_KERNEL);
+	dln2 = kzalloc_obj(*dln2, GFP_KERNEL);
 	if (!dln2)
 		return -ENOMEM;

diff --git a/drivers/mfd/ezx-pcap.c b/drivers/mfd/ezx-pcap.c
index 1be4557b7bdd..d98a02a073ac 100644
--- a/drivers/mfd/ezx-pcap.c
+++ b/drivers/mfd/ezx-pcap.c
@@ -302,7 +302,7 @@ int pcap_adc_async(struct pcap_chip *pcap, u8 bank, u32 flags, u8 ch[],
 	unsigned long irq_flags;

 	/* This will be freed after we have a result */
-	req = kmalloc(sizeof(struct pcap_adc_request), GFP_KERNEL);
+	req = kmalloc_obj(struct pcap_adc_request, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c
index 50bf3260f65d..ae6af552f6d2 100644
--- a/drivers/mfd/sm501.c
+++ b/drivers/mfd/sm501.c
@@ -1335,7 +1335,7 @@ static int sm501_plat_probe(struct platform_device *dev)
 	struct sm501_devdata *sm;
 	int ret;

-	sm = kzalloc(sizeof(*sm), GFP_KERNEL);
+	sm = kzalloc_obj(*sm, GFP_KERNEL);
 	if (!sm) {
 		ret = -ENOMEM;
 		goto err1;
@@ -1518,7 +1518,7 @@ static int sm501_pci_probe(struct pci_dev *dev,
 	struct sm501_devdata *sm;
 	int err;

-	sm = kzalloc(sizeof(*sm), GFP_KERNEL);
+	sm = kzalloc_obj(*sm, GFP_KERNEL);
 	if (!sm) {
 		err = -ENOMEM;
 		goto err1;
diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c
index e5d5def594f6..6bf0bcf49ff4 100644
--- a/drivers/mfd/syscon.c
+++ b/drivers/mfd/syscon.c
@@ -51,7 +51,7 @@ static struct syscon *of_syscon_register(struct device_node *np, bool check_res)

 	WARN_ON(!mutex_is_locked(&syscon_list_lock));

-	struct syscon *syscon __free(kfree) = kzalloc(sizeof(*syscon), GFP_KERNEL);
+	struct syscon *syscon __free(kfree) = kzalloc_obj(*syscon, GFP_KERNEL);
 	if (!syscon)
 		return ERR_PTR(-ENOMEM);

@@ -212,7 +212,7 @@ int of_syscon_register_regmap(struct device_node *np, struct regmap *regmap)
 	if (!np || !regmap)
 		return -EINVAL;

-	syscon = kzalloc(sizeof(*syscon), GFP_KERNEL);
+	syscon = kzalloc_obj(*syscon, GFP_KERNEL);
 	if (!syscon)
 		return -ENOMEM;

diff --git a/drivers/mfd/timberdale.c b/drivers/mfd/timberdale.c
index b059713db875..b44af8ca1360 100644
--- a/drivers/mfd/timberdale.c
+++ b/drivers/mfd/timberdale.c
@@ -649,7 +649,7 @@ static int timb_probe(struct pci_dev *dev,
 	struct msix_entry *msix_entries = NULL;
 	u8 ip_setup;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -698,8 +698,8 @@ static int timb_probe(struct pci_dev *dev,
 		goto err_config;
 	}

-	msix_entries = kcalloc(TIMBERDALE_NR_IRQS, sizeof(*msix_entries),
-			       GFP_KERNEL);
+	msix_entries = kzalloc_objs(*msix_entries, TIMBERDALE_NR_IRQS,
+				    GFP_KERNEL);
 	if (!msix_entries)
 		goto err_config;

diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
index d3ab40651307..4def9eeb964f 100644
--- a/drivers/mfd/twl4030-irq.c
+++ b/drivers/mfd/twl4030-irq.c
@@ -631,7 +631,7 @@ int twl4030_sih_setup(struct device *dev, int module, int irq_base)
 		return status;
 	}

-	agent = kzalloc(sizeof(*agent), GFP_KERNEL);
+	agent = kzalloc_obj(*agent, GFP_KERNEL);
 	if (!agent)
 		return -ENOMEM;

diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c
index 4b450d78a65f..b2f304984505 100644
--- a/drivers/mfd/ucb1x00-core.c
+++ b/drivers/mfd/ucb1x00-core.c
@@ -395,7 +395,7 @@ static int ucb1x00_add_dev(struct ucb1x00 *ucb, struct ucb1x00_driver *drv)
 	struct ucb1x00_dev *dev;
 	int ret;

-	dev = kmalloc(sizeof(struct ucb1x00_dev), GFP_KERNEL);
+	dev = kmalloc_obj(struct ucb1x00_dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

@@ -513,7 +513,7 @@ static int ucb1x00_probe(struct mcp *mcp)
 		goto out;
 	}

-	ucb = kzalloc(sizeof(struct ucb1x00), GFP_KERNEL);
+	ucb = kzalloc_obj(struct ucb1x00, GFP_KERNEL);
 	ret = -ENOMEM;
 	if (!ucb)
 		goto out;
diff --git a/drivers/mfd/ucb1x00-ts.c b/drivers/mfd/ucb1x00-ts.c
index 6e1b38f9f26c..ff1b018969d5 100644
--- a/drivers/mfd/ucb1x00-ts.c
+++ b/drivers/mfd/ucb1x00-ts.c
@@ -367,7 +367,7 @@ static int ucb1x00_ts_add(struct ucb1x00_dev *dev)
 	struct input_dev *idev;
 	int err;

-	ts = kzalloc(sizeof(struct ucb1x00_ts), GFP_KERNEL);
+	ts = kzalloc_obj(struct ucb1x00_ts, GFP_KERNEL);
 	idev = input_allocate_device();
 	if (!ts || !idev) {
 		err = -ENOMEM;
diff --git a/drivers/mfd/viperboard.c b/drivers/mfd/viperboard.c
index ba867b7ecfad..7c0b1ae0c6bc 100644
--- a/drivers/mfd/viperboard.c
+++ b/drivers/mfd/viperboard.c
@@ -53,7 +53,7 @@ static int vprbrd_probe(struct usb_interface *interface,
 	int pipe, ret;

 	/* allocate memory for our device state and initialize it */
-	vb = kzalloc(sizeof(*vb), GFP_KERNEL);
+	vb = kzalloc_obj(*vb, GFP_KERNEL);
 	if (!vb)
 		return -ENOMEM;

diff --git a/drivers/mfd/wm831x-auxadc.c b/drivers/mfd/wm831x-auxadc.c
index 18618a8f9206..5db027c904ad 100644
--- a/drivers/mfd/wm831x-auxadc.c
+++ b/drivers/mfd/wm831x-auxadc.c
@@ -35,7 +35,7 @@ static int wm831x_auxadc_read_irq(struct wm831x *wm831x,
 	int ret;
 	bool ena = false;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/misc/ad525x_dpot.c b/drivers/misc/ad525x_dpot.c
index 04683b981e54..8024378b4e61 100644
--- a/drivers/misc/ad525x_dpot.c
+++ b/drivers/misc/ad525x_dpot.c
@@ -686,7 +686,7 @@ int ad_dpot_probe(struct device *dev,
 	struct dpot_data *data;
 	int i, err = 0;

-	data = kzalloc(sizeof(struct dpot_data), GFP_KERNEL);
+	data = kzalloc_obj(struct dpot_data, GFP_KERNEL);
 	if (!data) {
 		err = -ENOMEM;
 		goto exit;
diff --git a/drivers/misc/altera-stapl/altera.c b/drivers/misc/altera-stapl/altera.c
index bbe3967c3a4c..334117d3a214 100644
--- a/drivers/misc/altera-stapl/altera.c
+++ b/drivers/misc/altera-stapl/altera.c
@@ -290,13 +290,13 @@ static int altera_execute(struct altera_state *astate,
 	if (sym_count <= 0)
 		goto exit_done;

-	vars = kcalloc(sym_count, sizeof(long), GFP_KERNEL);
+	vars = kzalloc_objs(long, sym_count, GFP_KERNEL);

 	if (vars == NULL)
 		status = -ENOMEM;

 	if (status == 0) {
-		var_size = kcalloc(sym_count, sizeof(s32), GFP_KERNEL);
+		var_size = kzalloc_objs(s32, sym_count, GFP_KERNEL);

 		if (var_size == NULL)
 			status = -ENOMEM;
@@ -1098,8 +1098,8 @@ static int altera_execute(struct altera_state *astate,
 				/* Allocate a writable buffer for this array */
 				count = var_size[variable_id];
 				long_tmp = vars[variable_id];
-				longptr_tmp = kcalloc(count, sizeof(long),
-								GFP_KERNEL);
+				longptr_tmp = kzalloc_objs(long, count,
+							   GFP_KERNEL);
 				vars[variable_id] = (long)longptr_tmp;

 				if (vars[variable_id] == 0) {
@@ -2342,8 +2342,7 @@ static int altera_get_act_info(u8 *p,
 			(p[proc_table + (13 * act_proc_id) + 8] & 0x03);

 		procptr =
-				kzalloc(sizeof(struct altera_procinfo),
-								GFP_KERNEL);
+				kzalloc_obj(struct altera_procinfo, GFP_KERNEL);

 		if (procptr == NULL)
 			status = -ENOMEM;
@@ -2399,7 +2398,7 @@ int altera_init(struct altera_config *config, const struct firmware *fw)
 		retval = -ENOMEM;
 		goto free_key;
 	}
-	astate = kzalloc(sizeof(struct altera_state), GFP_KERNEL);
+	astate = kzalloc_obj(struct altera_state, GFP_KERNEL);
 	if (!astate) {
 		retval = -ENOMEM;
 		goto free_value;
diff --git a/drivers/misc/apds9802als.c b/drivers/misc/apds9802als.c
index 6db4db975b9a..26d5e002dfa4 100644
--- a/drivers/misc/apds9802als.c
+++ b/drivers/misc/apds9802als.c
@@ -217,7 +217,7 @@ static int apds9802als_probe(struct i2c_client *client)
 	int res;
 	struct als_data *data;

-	data = kzalloc(sizeof(struct als_data), GFP_KERNEL);
+	data = kzalloc_obj(struct als_data, GFP_KERNEL);
 	if (data == NULL) {
 		dev_err(&client->dev, "Memory allocation failed\n");
 		return -ENOMEM;
diff --git a/drivers/misc/apds990x.c b/drivers/misc/apds990x.c
index 58946c4ff1a5..b057e659135f 100644
--- a/drivers/misc/apds990x.c
+++ b/drivers/misc/apds990x.c
@@ -1055,7 +1055,7 @@ static int apds990x_probe(struct i2c_client *client)
 	struct apds990x_chip *chip;
 	int err;

-	chip = kzalloc(sizeof *chip, GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (!chip)
 		return -ENOMEM;

diff --git a/drivers/misc/bcm-vk/bcm_vk_dev.c b/drivers/misc/bcm-vk/bcm_vk_dev.c
index d4a96137728d..cdcf334f0ede 100644
--- a/drivers/misc/bcm-vk/bcm_vk_dev.c
+++ b/drivers/misc/bcm-vk/bcm_vk_dev.c
@@ -1289,7 +1289,7 @@ static int bcm_vk_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	u32 boot_status;

 	/* allocate vk structure which is tied to kref for freeing */
-	vk = kzalloc(sizeof(*vk), GFP_KERNEL);
+	vk = kzalloc_obj(*vk, GFP_KERNEL);
 	if (!vk)
 		return -ENOMEM;

diff --git a/drivers/misc/bcm-vk/bcm_vk_msg.c b/drivers/misc/bcm-vk/bcm_vk_msg.c
index 665a3888708a..8537c76e2541 100644
--- a/drivers/misc/bcm-vk/bcm_vk_msg.c
+++ b/drivers/misc/bcm-vk/bcm_vk_msg.c
@@ -700,7 +700,7 @@ int bcm_vk_send_shutdown_msg(struct bcm_vk *vk, u32 shut_type,
 		return -EINVAL;
 	}

-	entry = kzalloc(struct_size(entry, to_v_msg, 1), GFP_KERNEL);
+	entry = kzalloc_flex(*entry, to_v_msg, 1, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;
 	entry->to_v_blks = 1;	/* always 1 block */
diff --git a/drivers/misc/bcm-vk/bcm_vk_sg.c b/drivers/misc/bcm-vk/bcm_vk_sg.c
index d309216ee181..bd8c726fdc0f 100644
--- a/drivers/misc/bcm-vk/bcm_vk_sg.c
+++ b/drivers/misc/bcm-vk/bcm_vk_sg.c
@@ -60,9 +60,7 @@ static int bcm_vk_dma_alloc(struct device *dev,
 	dma->nr_pages = last - first + 1;

 	/* Allocate DMA pages */
-	dma->pages = kmalloc_array(dma->nr_pages,
-				   sizeof(struct page *),
-				   GFP_KERNEL);
+	dma->pages = kmalloc_objs(struct page *, dma->nr_pages, GFP_KERNEL);
 	if (!dma->pages)
 		return -ENOMEM;

diff --git a/drivers/misc/c2port/core.c b/drivers/misc/c2port/core.c
index babdb60cc46c..707871bc4a50 100644
--- a/drivers/misc/c2port/core.c
+++ b/drivers/misc/c2port/core.c
@@ -912,7 +912,7 @@ struct c2port_device *c2port_device_register(char *name,
 		unlikely(!ops->c2d_get) || unlikely(!ops->c2d_set))
 		return ERR_PTR(-EINVAL);

-	c2dev = kzalloc(sizeof(struct c2port_device), GFP_KERNEL);
+	c2dev = kzalloc_obj(struct c2port_device, GFP_KERNEL);
 	if (unlikely(!c2dev))
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/misc/cardreader/rtsx_pcr.c b/drivers/misc/cardreader/rtsx_pcr.c
index f9952d76d6ed..d7211b305918 100644
--- a/drivers/misc/cardreader/rtsx_pcr.c
+++ b/drivers/misc/cardreader/rtsx_pcr.c
@@ -1385,8 +1385,7 @@ static int rtsx_pci_init_chip(struct rtsx_pcr *pcr)
 	pcr_dbg(pcr, "PID: 0x%04x, IC version: 0x%02x\n",
 			PCI_PID(pcr), pcr->ic_version);

-	pcr->slots = kcalloc(pcr->num_slots, sizeof(struct rtsx_slot),
-			GFP_KERNEL);
+	pcr->slots = kzalloc_objs(struct rtsx_slot, pcr->num_slots, GFP_KERNEL);
 	if (!pcr->slots)
 		return -ENOMEM;

@@ -1494,13 +1493,13 @@ static int rtsx_pci_probe(struct pci_dev *pcidev,
 	if (ret)
 		goto disable;

-	pcr = kzalloc(sizeof(*pcr), GFP_KERNEL);
+	pcr = kzalloc_obj(*pcr, GFP_KERNEL);
 	if (!pcr) {
 		ret = -ENOMEM;
 		goto release_pci;
 	}

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle) {
 		ret = -ENOMEM;
 		goto free_pcr;
diff --git a/drivers/misc/cs5535-mfgpt.c b/drivers/misc/cs5535-mfgpt.c
index 2b6778d8d166..f0bfc6210dab 100644
--- a/drivers/misc/cs5535-mfgpt.c
+++ b/drivers/misc/cs5535-mfgpt.c
@@ -187,7 +187,7 @@ struct cs5535_mfgpt_timer *cs5535_mfgpt_alloc_timer(int timer_nr, int domain)
 	if (timer_nr < 0)
 		goto done;

-	timer = kmalloc(sizeof(*timer), GFP_KERNEL);
+	timer = kmalloc_obj(*timer, GFP_KERNEL);
 	if (!timer) {
 		/* aw hell */
 		spin_lock_irqsave(&mfgpt->lock, flags);
diff --git a/drivers/misc/eeprom/max6875.c b/drivers/misc/eeprom/max6875.c
index a3e4cada3b51..dae682d8c4a7 100644
--- a/drivers/misc/eeprom/max6875.c
+++ b/drivers/misc/eeprom/max6875.c
@@ -144,7 +144,7 @@ static int max6875_probe(struct i2c_client *client)
 	if (client->addr & 1)
 		return -ENODEV;

-	data = kzalloc(sizeof(struct max6875_data), GFP_KERNEL);
+	data = kzalloc_obj(struct max6875_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c
index ca4c420e4a2f..7c2964762ef0 100644
--- a/drivers/misc/enclosure.c
+++ b/drivers/misc/enclosure.c
@@ -117,7 +117,7 @@ enclosure_register(struct device *dev, const char *name, int components,
 		   struct enclosure_component_callbacks *cb)
 {
 	struct enclosure_device *edev =
-		kzalloc(struct_size(edev, component, components), GFP_KERNEL);
+		kzalloc_flex(*edev, component, components, GFP_KERNEL);
 	int err, i;

 	BUG_ON(!cb);
diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c
index 4f5a79c50f58..d212649fe7f9 100644
--- a/drivers/misc/fastrpc.c
+++ b/drivers/misc/fastrpc.c
@@ -424,7 +424,7 @@ static int __fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev,
 {
 	struct fastrpc_buf *buf;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

@@ -600,7 +600,7 @@ static struct fastrpc_invoke_ctx *fastrpc_context_alloc(
 	unsigned long flags;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

@@ -611,14 +611,13 @@ static struct fastrpc_invoke_ctx *fastrpc_context_alloc(
 		     REMOTE_SCALARS_OUTBUFS(sc);

 	if (ctx->nscalars) {
-		ctx->maps = kcalloc(ctx->nscalars,
-				    sizeof(*ctx->maps), GFP_KERNEL);
+		ctx->maps = kzalloc_objs(*ctx->maps, ctx->nscalars, GFP_KERNEL);
 		if (!ctx->maps) {
 			kfree(ctx);
 			return ERR_PTR(-ENOMEM);
 		}
-		ctx->olaps = kcalloc(ctx->nscalars,
-				    sizeof(*ctx->olaps), GFP_KERNEL);
+		ctx->olaps = kzalloc_objs(*ctx->olaps, ctx->nscalars,
+					  GFP_KERNEL);
 		if (!ctx->olaps) {
 			kfree(ctx->maps);
 			kfree(ctx);
@@ -705,7 +704,7 @@ static int fastrpc_dma_buf_attach(struct dma_buf *dmabuf,
 	struct fastrpc_buf *buffer = dmabuf->priv;
 	int ret;

-	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	a = kzalloc_obj(*a, GFP_KERNEL);
 	if (!a)
 		return -ENOMEM;

@@ -787,7 +786,7 @@ static int fastrpc_map_attach(struct fastrpc_user *fl, int fd,
 	struct scatterlist *sgl = NULL;
 	int err = 0, sgl_index = 0;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

@@ -1307,7 +1306,8 @@ static int fastrpc_init_create_static_process(struct fastrpc_user *fl,
 	} inbuf;
 	u32 sc;

-	args = kcalloc(FASTRPC_CREATE_STATIC_PROCESS_NARGS, sizeof(*args), GFP_KERNEL);
+	args = kzalloc_objs(*args, FASTRPC_CREATE_STATIC_PROCESS_NARGS,
+			    GFP_KERNEL);
 	if (!args)
 		return -ENOMEM;

@@ -1432,7 +1432,7 @@ static int fastrpc_init_create_process(struct fastrpc_user *fl,
 	u32 sc;
 	bool unsigned_module = false;

-	args = kcalloc(FASTRPC_CREATE_PROCESS_NARGS, sizeof(*args), GFP_KERNEL);
+	args = kzalloc_objs(*args, FASTRPC_CREATE_PROCESS_NARGS, GFP_KERNEL);
 	if (!args)
 		return -ENOMEM;

@@ -1627,7 +1627,7 @@ static int fastrpc_device_open(struct inode *inode, struct file *filp)
 	fdevice = miscdev_to_fdevice(filp->private_data);
 	cctx = fdevice->cctx;

-	fl = kzalloc(sizeof(*fl), GFP_KERNEL);
+	fl = kzalloc_obj(*fl, GFP_KERNEL);
 	if (!fl)
 		return -ENOMEM;

@@ -1734,7 +1734,7 @@ static int fastrpc_invoke(struct fastrpc_user *fl, char __user *argp)
 	/* nscalars is truncated here to max supported value */
 	nscalars = REMOTE_SCALARS_LENGTH(inv.sc);
 	if (nscalars) {
-		args = kcalloc(nscalars, sizeof(*args), GFP_KERNEL);
+		args = kzalloc_objs(*args, nscalars, GFP_KERNEL);
 		if (!args)
 			return -ENOMEM;

@@ -2371,7 +2371,7 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)
 	else if (!qcom_scm_is_available())
 		return -EPROBE_DEFER;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/misc/genwqe/card_base.c b/drivers/misc/genwqe/card_base.c
index 224a7e97cbea..75b970d1012e 100644
--- a/drivers/misc/genwqe/card_base.c
+++ b/drivers/misc/genwqe/card_base.c
@@ -141,7 +141,7 @@ static struct genwqe_dev *genwqe_dev_alloc(void)
 	if (i >= GENWQE_CARD_NO_MAX)
 		return ERR_PTR(-ENODEV);

-	cd = kzalloc(sizeof(struct genwqe_dev), GFP_KERNEL);
+	cd = kzalloc_obj(struct genwqe_dev, GFP_KERNEL);
 	if (!cd)
 		return ERR_PTR(-ENOMEM);

@@ -403,8 +403,7 @@ static int genwqe_ffdc_buffs_alloc(struct genwqe_dev *cd)
 		/* currently support only the debug units mentioned here */
 		cd->ffdc[type].entries = e;
 		cd->ffdc[type].regs =
-			kmalloc_array(e, sizeof(struct genwqe_reg),
-				      GFP_KERNEL);
+			kmalloc_objs(struct genwqe_reg, e, GFP_KERNEL);
 		/*
 		 * regs == NULL is ok, the using code treats this as no regs,
 		 * Printing warning is ok in this case.
diff --git a/drivers/misc/genwqe/card_ddcb.c b/drivers/misc/genwqe/card_ddcb.c
index fd7d5cd50d39..87286ad04a4b 100644
--- a/drivers/misc/genwqe/card_ddcb.c
+++ b/drivers/misc/genwqe/card_ddcb.c
@@ -194,7 +194,7 @@ struct genwqe_ddcb_cmd *ddcb_requ_alloc(void)
 {
 	struct ddcb_requ *req;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return NULL;

@@ -1046,16 +1046,15 @@ static int setup_ddcb_queue(struct genwqe_dev *cd, struct ddcb_queue *queue)
 			"[%s] **err: could not allocate DDCB **\n", __func__);
 		return -ENOMEM;
 	}
-	queue->ddcb_req = kcalloc(queue->ddcb_max, sizeof(struct ddcb_requ *),
-				  GFP_KERNEL);
+	queue->ddcb_req = kzalloc_objs(struct ddcb_requ *, queue->ddcb_max,
+				       GFP_KERNEL);
 	if (!queue->ddcb_req) {
 		rc = -ENOMEM;
 		goto free_ddcbs;
 	}

-	queue->ddcb_waitqs = kcalloc(queue->ddcb_max,
-				     sizeof(wait_queue_head_t),
-				     GFP_KERNEL);
+	queue->ddcb_waitqs = kzalloc_objs(wait_queue_head_t, queue->ddcb_max,
+					  GFP_KERNEL);
 	if (!queue->ddcb_waitqs) {
 		rc = -ENOMEM;
 		goto free_requs;
diff --git a/drivers/misc/genwqe/card_debugfs.c b/drivers/misc/genwqe/card_debugfs.c
index 491fb4482da2..7fc0dce42aa7 100644
--- a/drivers/misc/genwqe/card_debugfs.c
+++ b/drivers/misc/genwqe/card_debugfs.c
@@ -53,7 +53,7 @@ static int curr_dbg_uidn_show(struct seq_file *s, void *unused, int uid)
 	if (entries == 0)
 		return 0;

-	regs = kcalloc(entries, sizeof(*regs), GFP_KERNEL);
+	regs = kzalloc_objs(*regs, entries, GFP_KERNEL);
 	if (regs == NULL)
 		return -ENOMEM;

@@ -122,7 +122,7 @@ static int curr_regs_show(struct seq_file *s, void *unused)
 	unsigned int i;
 	struct genwqe_reg *regs;

-	regs = kcalloc(GENWQE_FFDC_REGS, sizeof(*regs), GFP_KERNEL);
+	regs = kzalloc_objs(*regs, GENWQE_FFDC_REGS, GFP_KERNEL);
 	if (regs == NULL)
 		return -ENOMEM;

diff --git a/drivers/misc/genwqe/card_dev.c b/drivers/misc/genwqe/card_dev.c
index 4441aca2280a..9b5458c10053 100644
--- a/drivers/misc/genwqe/card_dev.c
+++ b/drivers/misc/genwqe/card_dev.c
@@ -301,7 +301,7 @@ static int genwqe_open(struct inode *inode, struct file *filp)
 	struct genwqe_dev *cd;
 	struct genwqe_file *cfile;

-	cfile = kzalloc(sizeof(*cfile), GFP_KERNEL);
+	cfile = kzalloc_obj(*cfile, GFP_KERNEL);
 	if (cfile == NULL)
 		return -ENOMEM;

@@ -446,7 +446,7 @@ static int genwqe_mmap(struct file *filp, struct vm_area_struct *vma)
 	if (get_order(vsize) > MAX_PAGE_ORDER)
 		return -ENOMEM;

-	dma_map = kzalloc(sizeof(struct dma_mapping), GFP_KERNEL);
+	dma_map = kzalloc_obj(struct dma_mapping, GFP_KERNEL);
 	if (dma_map == NULL)
 		return -ENOMEM;

@@ -783,7 +783,7 @@ static int genwqe_pin_mem(struct genwqe_file *cfile, struct genwqe_mem *m)
 	map_addr = (m->addr & PAGE_MASK);
 	map_size = round_up(m->size + (m->addr & ~PAGE_MASK), PAGE_SIZE);

-	dma_map = kzalloc(sizeof(struct dma_mapping), GFP_KERNEL);
+	dma_map = kzalloc_obj(struct dma_mapping, GFP_KERNEL);
 	if (dma_map == NULL)
 		return -ENOMEM;

diff --git a/drivers/misc/hpilo.c b/drivers/misc/hpilo.c
index 04bd34c8c506..174cabc7307f 100644
--- a/drivers/misc/hpilo.c
+++ b/drivers/misc/hpilo.c
@@ -570,7 +570,7 @@ static int ilo_open(struct inode *ip, struct file *fp)
 	hw = container_of(ip->i_cdev, struct ilo_hwinfo, cdev);

 	/* new ccb allocation */
-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -798,7 +798,7 @@ static int ilo_probe(struct pci_dev *pdev,

 	/* track global allocations for this device */
 	error = -ENOMEM;
-	ilo_hw = kzalloc(sizeof(*ilo_hw), GFP_KERNEL);
+	ilo_hw = kzalloc_obj(*ilo_hw, GFP_KERNEL);
 	if (!ilo_hw)
 		goto out;

diff --git a/drivers/misc/ibmasm/command.c b/drivers/misc/ibmasm/command.c
index 733dd30fbacc..9e4f45be78d7 100644
--- a/drivers/misc/ibmasm/command.c
+++ b/drivers/misc/ibmasm/command.c
@@ -24,7 +24,7 @@ struct command *ibmasm_new_command(struct service_processor *sp, size_t buffer_s
 	if (buffer_size > IBMASM_CMD_MAX_BUFFER_SIZE)
 		return NULL;

-	cmd = kzalloc(sizeof(struct command), GFP_KERNEL);
+	cmd = kzalloc_obj(struct command, GFP_KERNEL);
 	if (cmd == NULL)
 		return NULL;

diff --git a/drivers/misc/ibmasm/event.c b/drivers/misc/ibmasm/event.c
index 40ce75f8970c..41aabfcd256f 100644
--- a/drivers/misc/ibmasm/event.c
+++ b/drivers/misc/ibmasm/event.c
@@ -139,7 +139,7 @@ int ibmasm_event_buffer_init(struct service_processor *sp)
 	struct ibmasm_event *event;
 	int i;

-	buffer = kmalloc(sizeof(struct event_buffer), GFP_KERNEL);
+	buffer = kmalloc_obj(struct event_buffer, GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;

diff --git a/drivers/misc/ibmasm/ibmasmfs.c b/drivers/misc/ibmasm/ibmasmfs.c
index 824c5b664985..f203bc3e8068 100644
--- a/drivers/misc/ibmasm/ibmasmfs.c
+++ b/drivers/misc/ibmasm/ibmasmfs.c
@@ -235,7 +235,7 @@ static int command_file_open(struct inode *inode, struct file *file)
 	if (!inode->i_private)
 		return -ENODEV;

-	command_data = kmalloc(sizeof(struct ibmasmfs_command_data), GFP_KERNEL);
+	command_data = kmalloc_obj(struct ibmasmfs_command_data, GFP_KERNEL);
 	if (!command_data)
 		return -ENOMEM;

@@ -344,7 +344,7 @@ static int event_file_open(struct inode *inode, struct file *file)

 	sp = inode->i_private;

-	event_data = kmalloc(sizeof(struct ibmasmfs_event_data), GFP_KERNEL);
+	event_data = kmalloc_obj(struct ibmasmfs_event_data, GFP_KERNEL);
 	if (!event_data)
 		return -ENOMEM;

@@ -430,7 +430,7 @@ static int r_heartbeat_file_open(struct inode *inode, struct file *file)
 	if (!inode->i_private)
 		return -ENODEV;

-	rhbeat = kmalloc(sizeof(struct ibmasmfs_heartbeat_data), GFP_KERNEL);
+	rhbeat = kmalloc_obj(struct ibmasmfs_heartbeat_data, GFP_KERNEL);
 	if (!rhbeat)
 		return -ENOMEM;

diff --git a/drivers/misc/ibmasm/module.c b/drivers/misc/ibmasm/module.c
index dc8a06c06c63..ea625673826b 100644
--- a/drivers/misc/ibmasm/module.c
+++ b/drivers/misc/ibmasm/module.c
@@ -64,7 +64,7 @@ static int ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
 	/* vnc client won't work without bus-mastering */
 	pci_set_master(pdev);

-	sp = kzalloc(sizeof(struct service_processor), GFP_KERNEL);
+	sp = kzalloc_obj(struct service_processor, GFP_KERNEL);
 	if (sp == NULL) {
 		dev_err(&pdev->dev, "Failed to allocate memory\n");
 		result = -ENOMEM;
diff --git a/drivers/misc/ibmvmc.c b/drivers/misc/ibmvmc.c
index e5f935b5249d..78ecc28f00fb 100644
--- a/drivers/misc/ibmvmc.c
+++ b/drivers/misc/ibmvmc.c
@@ -830,7 +830,7 @@ static int ibmvmc_open(struct inode *inode, struct file *file)
 		 (unsigned long)inode, (unsigned long)file,
 		 ibmvmc.state);

-	session = kzalloc(sizeof(*session), GFP_KERNEL);
+	session = kzalloc_obj(*session, GFP_KERNEL);
 	if (!session)
 		return -ENOMEM;

diff --git a/drivers/misc/ics932s401.c b/drivers/misc/ics932s401.c
index 4cdb1087838f..df4d36fe46ac 100644
--- a/drivers/misc/ics932s401.c
+++ b/drivers/misc/ics932s401.c
@@ -433,7 +433,7 @@ static int ics932s401_probe(struct i2c_client *client)
 	struct ics932s401_data *data;
 	int err;

-	data = kzalloc(sizeof(struct ics932s401_data), GFP_KERNEL);
+	data = kzalloc_obj(struct ics932s401_data, GFP_KERNEL);
 	if (!data) {
 		err = -ENOMEM;
 		goto exit;
diff --git a/drivers/misc/isl29003.c b/drivers/misc/isl29003.c
index 9f26db467a81..ea56dde9183d 100644
--- a/drivers/misc/isl29003.c
+++ b/drivers/misc/isl29003.c
@@ -383,7 +383,7 @@ static int isl29003_probe(struct i2c_client *client)
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
 		return -EIO;

-	data = kzalloc(sizeof(struct isl29003_data), GFP_KERNEL);
+	data = kzalloc_obj(struct isl29003_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/misc/keba/cp500.c b/drivers/misc/keba/cp500.c
index d0c6113dcff3..6039a718d92f 100644
--- a/drivers/misc/keba/cp500.c
+++ b/drivers/misc/keba/cp500.c
@@ -335,7 +335,7 @@ static int cp500_register_i2c(struct cp500 *cp500)
 {
 	int ret;

-	cp500->i2c = kzalloc(sizeof(*cp500->i2c), GFP_KERNEL);
+	cp500->i2c = kzalloc_obj(*cp500->i2c, GFP_KERNEL);
 	if (!cp500->i2c)
 		return -ENOMEM;

@@ -386,7 +386,7 @@ static int cp500_register_spi(struct cp500 *cp500, u8 esc_type)
 	int info_size;
 	int ret;

-	cp500->spi = kzalloc(sizeof(*cp500->spi), GFP_KERNEL);
+	cp500->spi = kzalloc_obj(*cp500->spi, GFP_KERNEL);
 	if (!cp500->spi)
 		return -ENOMEM;

@@ -443,7 +443,7 @@ static int cp500_register_fan(struct cp500 *cp500)
 {
 	int ret;

-	cp500->fan = kzalloc(sizeof(*cp500->fan), GFP_KERNEL);
+	cp500->fan = kzalloc_obj(*cp500->fan, GFP_KERNEL);
 	if (!cp500->fan)
 		return -ENOMEM;

@@ -491,7 +491,7 @@ static int cp500_register_batt(struct cp500 *cp500)
 {
 	int ret;

-	cp500->batt = kzalloc(sizeof(*cp500->batt), GFP_KERNEL);
+	cp500->batt = kzalloc_obj(*cp500->batt, GFP_KERNEL);
 	if (!cp500->batt)
 		return -ENOMEM;

@@ -541,7 +541,7 @@ static int cp500_register_uart(struct cp500 *cp500,
 {
 	int ret;

-	*uart = kzalloc(sizeof(**uart), GFP_KERNEL);
+	*uart = kzalloc_obj(**uart, GFP_KERNEL);
 	if (!*uart)
 		return -ENOMEM;

diff --git a/drivers/misc/lan966x_pci.c b/drivers/misc/lan966x_pci.c
index 9c79b58137e5..6245ea993d1b 100644
--- a/drivers/misc/lan966x_pci.c
+++ b/drivers/misc/lan966x_pci.c
@@ -58,7 +58,7 @@ static struct pci_dev_intr_ctrl *pci_dev_create_intr_ctrl(struct pci_dev *pdev)
 	if (!fwnode)
 		return ERR_PTR(-ENODEV);

-	intr_ctrl = kmalloc(sizeof(*intr_ctrl), GFP_KERNEL);
+	intr_ctrl = kmalloc_obj(*intr_ctrl, GFP_KERNEL);
 	if (!intr_ctrl)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/misc/lis3lv02d/lis3lv02d.c b/drivers/misc/lis3lv02d/lis3lv02d.c
index 1a634ac1a241..f5adec86ca28 100644
--- a/drivers/misc/lis3lv02d/lis3lv02d.c
+++ b/drivers/misc/lis3lv02d/lis3lv02d.c
@@ -952,7 +952,7 @@ int lis3lv02d_init_dt(struct lis3lv02d *lis3)
 	if (!lis3->of_node)
 		return 0;

-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return -ENOMEM;

diff --git a/drivers/misc/lkdtm/bugs.c b/drivers/misc/lkdtm/bugs.c
index b2aee36b956d..6de369f0ccd2 100644
--- a/drivers/misc/lkdtm/bugs.c
+++ b/drivers/misc/lkdtm/bugs.c
@@ -477,7 +477,7 @@ static void lkdtm_FAM_BOUNDS(void)
 {
 	struct lkdtm_cb_fam *inst;

-	inst = kzalloc(struct_size(inst, array, element_count + 1), GFP_KERNEL);
+	inst = kzalloc_flex(*inst, array, element_count + 1, GFP_KERNEL);
 	if (!inst) {
 		pr_err("FAIL: could not allocate test struct!\n");
 		return;
@@ -533,7 +533,7 @@ static void lkdtm_PTR_BOUNDS(void)
 {
 	struct lkdtm_cb_ptr *inst;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kzalloc_obj(*inst, GFP_KERNEL);
 	if (!inst) {
 		pr_err("FAIL: could not allocate struct lkdtm_cb_ptr!\n");
 		return;
@@ -547,7 +547,7 @@ static void lkdtm_PTR_BOUNDS(void)
 	inst->len = element_count;

 	/* Double element_count */
-	inst->extra = kcalloc(element_count * 2, sizeof(*inst->extra), GFP_KERNEL);
+	inst->extra = kzalloc_objs(*inst->extra, element_count * 2, GFP_KERNEL);
 	inst->nr_extra = element_count * 2;

 	pr_info("Pointer access within bounds ...\n");
diff --git a/drivers/misc/mchp_pci1xxxx/mchp_pci1xxxx_gp.c b/drivers/misc/mchp_pci1xxxx/mchp_pci1xxxx_gp.c
index 34c9be437432..30c24a3e728f 100644
--- a/drivers/misc/mchp_pci1xxxx/mchp_pci1xxxx_gp.c
+++ b/drivers/misc/mchp_pci1xxxx/mchp_pci1xxxx_gp.c
@@ -42,8 +42,8 @@ static int gp_aux_bus_probe(struct pci_dev *pdev, const struct pci_device_id *id
 	if (!aux_bus)
 		return -ENOMEM;

-	aux_bus->aux_device_wrapper[0] = kzalloc(sizeof(*aux_bus->aux_device_wrapper[0]),
-						 GFP_KERNEL);
+	aux_bus->aux_device_wrapper[0] = kzalloc_obj(*aux_bus->aux_device_wrapper[0],
+						     GFP_KERNEL);
 	if (!aux_bus->aux_device_wrapper[0])
 		return -ENOMEM;

@@ -67,8 +67,8 @@ static int gp_aux_bus_probe(struct pci_dev *pdev, const struct pci_device_id *id
 	if (retval)
 		goto err_aux_dev_add_0;

-	aux_bus->aux_device_wrapper[1] = kzalloc(sizeof(*aux_bus->aux_device_wrapper[1]),
-						 GFP_KERNEL);
+	aux_bus->aux_device_wrapper[1] = kzalloc_obj(*aux_bus->aux_device_wrapper[1],
+						     GFP_KERNEL);
 	if (!aux_bus->aux_device_wrapper[1]) {
 		retval =  -ENOMEM;
 		goto err_aux_dev_add_0;
diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
index 2c810ab12e62..fb311b6633d6 100644
--- a/drivers/misc/mei/bus.c
+++ b/drivers/misc/mei/bus.c
@@ -1363,7 +1363,7 @@ static struct mei_cl_device *mei_cl_bus_dev_alloc(struct mei_device *bus,
 	struct mei_cl_device *cldev;
 	struct mei_cl *cl;

-	cldev = kzalloc(sizeof(*cldev), GFP_KERNEL);
+	cldev = kzalloc_obj(*cldev, GFP_KERNEL);
 	if (!cldev)
 		return NULL;

diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c
index 5dc665515263..2ad20921ffb7 100644
--- a/drivers/misc/mei/client.c
+++ b/drivers/misc/mei/client.c
@@ -370,7 +370,7 @@ static struct mei_cl_cb *mei_io_cb_init(struct mei_cl *cl,
 {
 	struct mei_cl_cb *cb;

-	cb = kzalloc(sizeof(*cb), GFP_KERNEL);
+	cb = kzalloc_obj(*cb, GFP_KERNEL);
 	if (!cb)
 		return NULL;

@@ -605,7 +605,7 @@ struct mei_cl *mei_cl_allocate(struct mei_device *dev)
 {
 	struct mei_cl *cl;

-	cl = kmalloc(sizeof(*cl), GFP_KERNEL);
+	cl = kmalloc_obj(*cl, GFP_KERNEL);
 	if (!cl)
 		return NULL;

@@ -1273,7 +1273,7 @@ struct mei_cl_vtag *mei_cl_vtag_alloc(struct file *fp, u8 vtag)
 {
 	struct mei_cl_vtag *cl_vtag;

-	cl_vtag = kzalloc(sizeof(*cl_vtag), GFP_KERNEL);
+	cl_vtag = kzalloc_obj(*cl_vtag, GFP_KERNEL);
 	if (!cl_vtag)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/misc/mei/gsc_proxy/mei_gsc_proxy.c b/drivers/misc/mei/gsc_proxy/mei_gsc_proxy.c
index f52fe23a6c0b..00467dc56b9b 100644
--- a/drivers/misc/mei/gsc_proxy/mei_gsc_proxy.c
+++ b/drivers/misc/mei/gsc_proxy/mei_gsc_proxy.c
@@ -141,7 +141,7 @@ static int mei_gsc_proxy_probe(struct mei_cl_device *cldev,
 		goto enable_err_exit;
 	}

-	comp_master = kzalloc(sizeof(*comp_master), GFP_KERNEL);
+	comp_master = kzalloc_obj(*comp_master, GFP_KERNEL);
 	if (!comp_master) {
 		ret = -ENOMEM;
 		goto err_exit;
diff --git a/drivers/misc/mei/hbm.c b/drivers/misc/mei/hbm.c
index ccd9df5d1c7d..19db57456f2c 100644
--- a/drivers/misc/mei/hbm.c
+++ b/drivers/misc/mei/hbm.c
@@ -409,7 +409,7 @@ static int mei_hbm_me_cl_add(struct mei_device *dev,

 	mei_me_cl_rm_by_uuid(dev, uuid);

-	me_cl = kzalloc(sizeof(*me_cl), GFP_KERNEL);
+	me_cl = kzalloc_obj(*me_cl, GFP_KERNEL);
 	if (!me_cl)
 		return -ENOMEM;

diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index 323f10620d90..68cb4da376f9 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -819,7 +819,7 @@ static int mei_hdcp_probe(struct mei_cl_device *cldev,
 		goto enable_err_exit;
 	}

-	comp_arbiter = kzalloc(sizeof(*comp_arbiter), GFP_KERNEL);
+	comp_arbiter = kzalloc_obj(*comp_arbiter, GFP_KERNEL);
 	if (!comp_arbiter) {
 		ret = -ENOMEM;
 		goto err_exit;
diff --git a/drivers/misc/mei/interrupt.c b/drivers/misc/mei/interrupt.c
index 3f210413fd32..d11d19e75726 100644
--- a/drivers/misc/mei/interrupt.c
+++ b/drivers/misc/mei/interrupt.c
@@ -133,7 +133,8 @@ static int mei_cl_irq_read_msg(struct mei_cl *cl,
 				break;
 			case MEI_EXT_HDR_GSC:
 				gsc_f2h = (struct mei_ext_hdr_gsc_f2h *)ext;
-				cb->ext_hdr = (struct mei_ext_hdr *)kzalloc(sizeof(*gsc_f2h), GFP_KERNEL);
+				cb->ext_hdr = (struct mei_ext_hdr *) kzalloc_obj(*gsc_f2h,
+										 GFP_KERNEL);
 				if (!cb->ext_hdr) {
 					cb->status = -ENOMEM;
 					goto discard;
diff --git a/drivers/misc/mei/pxp/mei_pxp.c b/drivers/misc/mei/pxp/mei_pxp.c
index 2820d389c88e..b79573c32a4d 100644
--- a/drivers/misc/mei/pxp/mei_pxp.c
+++ b/drivers/misc/mei/pxp/mei_pxp.c
@@ -273,7 +273,7 @@ static int mei_pxp_probe(struct mei_cl_device *cldev,
 		goto enable_err_exit;
 	}

-	comp_master = kzalloc(sizeof(*comp_master), GFP_KERNEL);
+	comp_master = kzalloc_obj(*comp_master, GFP_KERNEL);
 	if (!comp_master) {
 		ret = -ENOMEM;
 		goto err_exit;
diff --git a/drivers/misc/mei/vsc-fw-loader.c b/drivers/misc/mei/vsc-fw-loader.c
index 43abefa806e1..dc32510c9ddb 100644
--- a/drivers/misc/mei/vsc-fw-loader.c
+++ b/drivers/misc/mei/vsc-fw-loader.c
@@ -721,7 +721,7 @@ int vsc_tp_init(struct vsc_tp *tp, struct device *dev)
 	void *rx_buf __free(kfree) = NULL;
 	int ret;

-	fw_loader = kzalloc(sizeof(*fw_loader), GFP_KERNEL);
+	fw_loader = kzalloc_obj(*fw_loader, GFP_KERNEL);
 	if (!fw_loader)
 		return -ENOMEM;

diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
index 9087f045e362..727d9bbe1a29 100644
--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
@@ -705,7 +705,7 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev,
 {
 	struct ntsync_obj *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return NULL;
 	obj->type = type;
@@ -884,7 +884,7 @@ static int setup_wait(struct ntsync_device *dev,
 	if (args->alert)
 		fds[count] = args->alert;

-	q = kmalloc(struct_size(q, entries, total_count), GFP_KERNEL);
+	q = kmalloc_flex(*q, entries, total_count, GFP_KERNEL);
 	if (!q)
 		return -ENOMEM;
 	q->task = current;
@@ -1145,7 +1145,7 @@ static int ntsync_char_open(struct inode *inode, struct file *file)
 {
 	struct ntsync_device *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/misc/ocxl/afu_irq.c b/drivers/misc/ocxl/afu_irq.c
index f6b821fc274c..3969fc9d58e2 100644
--- a/drivers/misc/ocxl/afu_irq.c
+++ b/drivers/misc/ocxl/afu_irq.c
@@ -107,7 +107,7 @@ int ocxl_afu_irq_alloc(struct ocxl_context *ctx, int *irq_id)
 	struct afu_irq *irq;
 	int rc;

-	irq = kzalloc(sizeof(struct afu_irq), GFP_KERNEL);
+	irq = kzalloc_obj(struct afu_irq, GFP_KERNEL);
 	if (!irq)
 		return -ENOMEM;

diff --git a/drivers/misc/ocxl/context.c b/drivers/misc/ocxl/context.c
index cded7d1caf32..3ca1c442fb39 100644
--- a/drivers/misc/ocxl/context.c
+++ b/drivers/misc/ocxl/context.c
@@ -10,7 +10,7 @@ int ocxl_context_alloc(struct ocxl_context **context, struct ocxl_afu *afu,
 	int pasid;
 	struct ocxl_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/misc/ocxl/core.c b/drivers/misc/ocxl/core.c
index aebfc53a2d09..608ac6a2d855 100644
--- a/drivers/misc/ocxl/core.c
+++ b/drivers/misc/ocxl/core.c
@@ -17,7 +17,7 @@ static struct ocxl_afu *alloc_afu(struct ocxl_fn *fn)
 {
 	struct ocxl_afu *afu;

-	afu = kzalloc(sizeof(struct ocxl_afu), GFP_KERNEL);
+	afu = kzalloc_obj(struct ocxl_afu, GFP_KERNEL);
 	if (!afu)
 		return NULL;

@@ -300,7 +300,7 @@ static struct ocxl_fn *alloc_function(void)
 {
 	struct ocxl_fn *fn;

-	fn = kzalloc(sizeof(struct ocxl_fn), GFP_KERNEL);
+	fn = kzalloc_obj(struct ocxl_fn, GFP_KERNEL);
 	if (!fn)
 		return NULL;

diff --git a/drivers/misc/ocxl/file.c b/drivers/misc/ocxl/file.c
index 7eb74711ac96..fc03b82c3eb6 100644
--- a/drivers/misc/ocxl/file.c
+++ b/drivers/misc/ocxl/file.c
@@ -526,7 +526,7 @@ int ocxl_file_register_afu(struct ocxl_afu *afu)
 	struct ocxl_fn *fn = afu->fn;
 	struct pci_dev *pci_dev = to_pci_dev(fn->dev.parent);

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (info == NULL)
 		return -ENOMEM;

diff --git a/drivers/misc/ocxl/link.c b/drivers/misc/ocxl/link.c
index 03402203cacd..c413d065abe7 100644
--- a/drivers/misc/ocxl/link.c
+++ b/drivers/misc/ocxl/link.c
@@ -345,7 +345,7 @@ static int alloc_spa(struct pci_dev *dev, struct ocxl_link *link)
 {
 	struct spa *spa;

-	spa = kzalloc(sizeof(struct spa), GFP_KERNEL);
+	spa = kzalloc_obj(struct spa, GFP_KERNEL);
 	if (!spa)
 		return -ENOMEM;

@@ -387,7 +387,7 @@ static int alloc_link(struct pci_dev *dev, int PE_mask, struct ocxl_link **out_l
 	struct ocxl_link *link;
 	int rc;

-	link = kzalloc(sizeof(struct ocxl_link), GFP_KERNEL);
+	link = kzalloc_obj(struct ocxl_link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;

@@ -559,7 +559,7 @@ int ocxl_link_add_pe(void *link_handle, int pasid, u32 pidr, u32 tidr,
 		goto unlock;
 	}

-	pe_data = kmalloc(sizeof(*pe_data), GFP_KERNEL);
+	pe_data = kmalloc_obj(*pe_data, GFP_KERNEL);
 	if (!pe_data) {
 		rc = -ENOMEM;
 		goto unlock;
diff --git a/drivers/misc/ocxl/pasid.c b/drivers/misc/ocxl/pasid.c
index d14cb56e6920..677870f49290 100644
--- a/drivers/misc/ocxl/pasid.c
+++ b/drivers/misc/ocxl/pasid.c
@@ -28,7 +28,7 @@ static int range_alloc(struct list_head *head, u32 size, int max_id,
 	struct id_range *cur, *new;
 	int rc, last_end;

-	new = kmalloc(sizeof(struct id_range), GFP_KERNEL);
+	new = kmalloc_obj(struct id_range, GFP_KERNEL);
 	if (!new)
 		return -ENOMEM;

diff --git a/drivers/misc/pch_phub.c b/drivers/misc/pch_phub.c
index 0d63e834dbe7..c69a88a09332 100644
--- a/drivers/misc/pch_phub.c
+++ b/drivers/misc/pch_phub.c
@@ -666,7 +666,7 @@ static int pch_phub_probe(struct pci_dev *pdev,
 	int ret;
 	struct pch_phub_reg *chip;

-	chip = kzalloc(sizeof(struct pch_phub_reg), GFP_KERNEL);
+	chip = kzalloc_obj(struct pch_phub_reg, GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;

diff --git a/drivers/misc/phantom.c b/drivers/misc/phantom.c
index 701db2c5859b..cb7f7d9243d3 100644
--- a/drivers/misc/phantom.c
+++ b/drivers/misc/phantom.c
@@ -362,7 +362,7 @@ static int phantom_probe(struct pci_dev *pdev,
 	}

 	retval = -ENOMEM;
-	pht = kzalloc(sizeof(*pht), GFP_KERNEL);
+	pht = kzalloc_obj(*pht, GFP_KERNEL);
 	if (pht == NULL) {
 		dev_err(&pdev->dev, "unable to allocate device\n");
 		goto err_reg;
diff --git a/drivers/misc/rpmb-core.c b/drivers/misc/rpmb-core.c
index 2d653926cdbb..2bd557665d1a 100644
--- a/drivers/misc/rpmb-core.c
+++ b/drivers/misc/rpmb-core.c
@@ -161,7 +161,7 @@ struct rpmb_dev *rpmb_dev_register(struct device *dev,
 	    !descr->dev_id_len)
 		return ERR_PTR(-EINVAL);

-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (!rdev)
 		return ERR_PTR(-ENOMEM);
 	rdev->descr = *descr;
diff --git a/drivers/misc/sgi-gru/grumain.c b/drivers/misc/sgi-gru/grumain.c
index 3036c15f3689..171d38913dcf 100644
--- a/drivers/misc/sgi-gru/grumain.c
+++ b/drivers/misc/sgi-gru/grumain.c
@@ -356,7 +356,7 @@ struct gru_vma_data *gru_alloc_vma_data(struct vm_area_struct *vma, int tsid)
 {
 	struct gru_vma_data *vdata = NULL;

-	vdata = kmalloc(sizeof(*vdata), GFP_KERNEL);
+	vdata = kmalloc_obj(*vdata, GFP_KERNEL);
 	if (!vdata)
 		return NULL;

diff --git a/drivers/misc/sgi-gru/grutlbpurge.c b/drivers/misc/sgi-gru/grutlbpurge.c
index 1107dd3e2e9f..1bb07781a105 100644
--- a/drivers/misc/sgi-gru/grutlbpurge.c
+++ b/drivers/misc/sgi-gru/grutlbpurge.c
@@ -237,7 +237,7 @@ static struct mmu_notifier *gru_alloc_notifier(struct mm_struct *mm)
 {
 	struct gru_mm_struct *gms;

-	gms = kzalloc(sizeof(*gms), GFP_KERNEL);
+	gms = kzalloc_obj(*gms, GFP_KERNEL);
 	if (!gms)
 		return ERR_PTR(-ENOMEM);
 	STAT(gms_alloc);
diff --git a/drivers/misc/sgi-xp/xpc_main.c b/drivers/misc/sgi-xp/xpc_main.c
index 9fe816bf3957..4e608379d6e7 100644
--- a/drivers/misc/sgi-xp/xpc_main.c
+++ b/drivers/misc/sgi-xp/xpc_main.c
@@ -400,9 +400,8 @@ xpc_setup_ch_structures(struct xpc_partition *part)
 	 * memory.
 	 */
 	DBUG_ON(part->channels != NULL);
-	part->channels = kcalloc(XPC_MAX_NCHANNELS,
-				 sizeof(struct xpc_channel),
-				 GFP_KERNEL);
+	part->channels = kzalloc_objs(struct xpc_channel, XPC_MAX_NCHANNELS,
+				      GFP_KERNEL);
 	if (part->channels == NULL) {
 		dev_err(xpc_chan, "can't get memory for channels\n");
 		return xpNoMemory;
@@ -890,9 +889,8 @@ xpc_setup_partitions(void)
 	short partid;
 	struct xpc_partition *part;

-	xpc_partitions = kcalloc(xp_max_npartitions,
-				 sizeof(struct xpc_partition),
-				 GFP_KERNEL);
+	xpc_partitions = kzalloc_objs(struct xpc_partition, xp_max_npartitions,
+				      GFP_KERNEL);
 	if (xpc_partitions == NULL) {
 		dev_err(xpc_part, "can't get memory for partition structure\n");
 		return -ENOMEM;
diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c
index 2f03a7080d96..ccd3047580c5 100644
--- a/drivers/misc/sgi-xp/xpc_uv.c
+++ b/drivers/misc/sgi-xp/xpc_uv.c
@@ -147,7 +147,7 @@ xpc_create_gru_mq_uv(unsigned int mq_size, int cpu, char *irq_name,
 	struct xpc_gru_mq_uv *mq;
 	struct uv_IO_APIC_route_entry *mmr_value;

-	mq = kmalloc(sizeof(struct xpc_gru_mq_uv), GFP_KERNEL);
+	mq = kmalloc_obj(struct xpc_gru_mq_uv, GFP_KERNEL);
 	if (mq == NULL) {
 		dev_err(xpc_part, "xpc_create_gru_mq_uv() failed to kmalloc() "
 			"a xpc_gru_mq_uv structure\n");
@@ -155,8 +155,7 @@ xpc_create_gru_mq_uv(unsigned int mq_size, int cpu, char *irq_name,
 		goto out_0;
 	}

-	mq->gru_mq_desc = kzalloc(sizeof(struct gru_message_queue_desc),
-				  GFP_KERNEL);
+	mq->gru_mq_desc = kzalloc_obj(struct gru_message_queue_desc, GFP_KERNEL);
 	if (mq->gru_mq_desc == NULL) {
 		dev_err(xpc_part, "xpc_create_gru_mq_uv() failed to kmalloc() "
 			"a gru_message_queue_desc structure\n");
@@ -623,9 +622,8 @@ xpc_send_activate_IRQ_uv(struct xpc_partition *part, void *msg, size_t msg_size,
 	if (!(part_uv->flags & XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV)) {
 		gru_mq_desc = part_uv->cached_activate_gru_mq_desc;
 		if (gru_mq_desc == NULL) {
-			gru_mq_desc = kmalloc(sizeof(struct
-					      gru_message_queue_desc),
-					      GFP_ATOMIC);
+			gru_mq_desc = kmalloc_obj(struct gru_message_queue_desc,
+						  GFP_ATOMIC);
 			if (gru_mq_desc == NULL) {
 				ret = xpNoMemory;
 				goto done;
@@ -1075,9 +1073,8 @@ xpc_setup_msg_structures_uv(struct xpc_channel *ch)

 	DBUG_ON(ch->flags & XPC_C_SETUP);

-	ch_uv->cached_notify_gru_mq_desc = kmalloc(sizeof(struct
-						   gru_message_queue_desc),
-						   GFP_KERNEL);
+	ch_uv->cached_notify_gru_mq_desc = kmalloc_obj(struct gru_message_queue_desc,
+						       GFP_KERNEL);
 	if (ch_uv->cached_notify_gru_mq_desc == NULL)
 		return xpNoMemory;

diff --git a/drivers/misc/sgi-xp/xpnet.c b/drivers/misc/sgi-xp/xpnet.c
index 2396ba3b03bd..1533b72d57b1 100644
--- a/drivers/misc/sgi-xp/xpnet.c
+++ b/drivers/misc/sgi-xp/xpnet.c
@@ -431,7 +431,7 @@ xpnet_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	 * xpc_send_notifies are relying on this skb.  When none
 	 * remain, release the skb.
 	 */
-	queued_msg = kmalloc(sizeof(struct xpnet_pending_msg), GFP_ATOMIC);
+	queued_msg = kmalloc_obj(struct xpnet_pending_msg, GFP_ATOMIC);
 	if (queued_msg == NULL) {
 		dev_warn(xpnet, "failed to kmalloc %ld bytes; dropping "
 			 "packet\n", sizeof(struct xpnet_pending_msg));
diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c
index c98ff8aa221c..39b38d639638 100644
--- a/drivers/misc/sram.c
+++ b/drivers/misc/sram.c
@@ -191,7 +191,7 @@ static int sram_reserve_regions(struct sram_dev *sram, struct resource *res)
 	 * after the reserved blocks from the dt are processed.
 	 */
 	nblocks = (np) ? of_get_available_child_count(np) + 1 : 1;
-	rblocks = kcalloc(nblocks, sizeof(*rblocks), GFP_KERNEL);
+	rblocks = kzalloc_objs(*rblocks, nblocks, GFP_KERNEL);
 	if (!rblocks)
 		return -ENOMEM;

diff --git a/drivers/misc/tifm_core.c b/drivers/misc/tifm_core.c
index 12355d34e193..96ad091089a7 100644
--- a/drivers/misc/tifm_core.c
+++ b/drivers/misc/tifm_core.c
@@ -176,7 +176,7 @@ struct tifm_adapter *tifm_alloc_adapter(unsigned int num_sockets,
 {
 	struct tifm_adapter *fm;

-	fm = kzalloc(struct_size(fm, sockets, num_sockets), GFP_KERNEL);
+	fm = kzalloc_flex(*fm, sockets, num_sockets, GFP_KERNEL);
 	if (fm) {
 		fm->dev.class = &tifm_adapter_class;
 		fm->dev.parent = dev;
@@ -252,7 +252,7 @@ struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id,
 	if (!tifm_media_type_name(type, 0))
 		return sock;

-	sock = kzalloc(sizeof(struct tifm_dev), GFP_KERNEL);
+	sock = kzalloc_obj(struct tifm_dev, GFP_KERNEL);
 	if (sock) {
 		spin_lock_init(&sock->lock);
 		sock->type = type;
diff --git a/drivers/misc/tsl2550.c b/drivers/misc/tsl2550.c
index 1a7796ab3fad..8f592afe1a32 100644
--- a/drivers/misc/tsl2550.c
+++ b/drivers/misc/tsl2550.c
@@ -343,7 +343,7 @@ static int tsl2550_probe(struct i2c_client *client)
 		goto exit;
 	}

-	data = kzalloc(sizeof(struct tsl2550_data), GFP_KERNEL);
+	data = kzalloc_obj(struct tsl2550_data, GFP_KERNEL);
 	if (!data) {
 		err = -ENOMEM;
 		goto exit;
diff --git a/drivers/misc/uacce/uacce.c b/drivers/misc/uacce/uacce.c
index 6d71355528d3..55735335ce12 100644
--- a/drivers/misc/uacce/uacce.c
+++ b/drivers/misc/uacce/uacce.c
@@ -158,7 +158,7 @@ static int uacce_fops_open(struct inode *inode, struct file *filep)
 	if (!uacce)
 		return -ENODEV;

-	q = kzalloc(sizeof(struct uacce_queue), GFP_KERNEL);
+	q = kzalloc_obj(struct uacce_queue, GFP_KERNEL);
 	if (!q)
 		return -ENOMEM;

@@ -251,7 +251,7 @@ static int uacce_fops_mmap(struct file *filep, struct vm_area_struct *vma)
 	else
 		return -EINVAL;

-	qfr = kzalloc(sizeof(*qfr), GFP_KERNEL);
+	qfr = kzalloc_obj(*qfr, GFP_KERNEL);
 	if (!qfr)
 		return -ENOMEM;

@@ -506,7 +506,7 @@ struct uacce_device *uacce_alloc(struct device *parent,
 	struct uacce_device *uacce;
 	int ret;

-	uacce = kzalloc(sizeof(struct uacce_device), GFP_KERNEL);
+	uacce = kzalloc_obj(struct uacce_device, GFP_KERNEL);
 	if (!uacce)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c
index 216a16395968..5ae13779bd1a 100644
--- a/drivers/misc/vmw_balloon.c
+++ b/drivers/misc/vmw_balloon.c
@@ -1616,7 +1616,7 @@ static int vmballoon_enable_stats(struct vmballoon *b)
 	if (b->stats)
 		goto out;

-	b->stats = kzalloc(sizeof(*b->stats), GFP_KERNEL);
+	b->stats = kzalloc_obj(*b->stats, GFP_KERNEL);

 	if (!b->stats) {
 		/* allocation failed */
diff --git a/drivers/misc/vmw_vmci/vmci_context.c b/drivers/misc/vmw_vmci/vmci_context.c
index 8069d271ed81..0a87d5430385 100644
--- a/drivers/misc/vmw_vmci/vmci_context.c
+++ b/drivers/misc/vmw_vmci/vmci_context.c
@@ -104,7 +104,7 @@ struct vmci_ctx *vmci_ctx_create(u32 cid, u32 priv_flags,
 		goto err_out;
 	}

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context) {
 		pr_warn("Failed to allocate memory for VMCI context\n");
 		error = -ENOMEM;
@@ -294,7 +294,7 @@ int vmci_ctx_enqueue_datagram(u32 cid, struct vmci_datagram *dg)
 	}

 	/* Allocate guest call entry and add it to the target VM's queue. */
-	dq_entry = kmalloc(sizeof(*dq_entry), GFP_KERNEL);
+	dq_entry = kmalloc_obj(*dq_entry, GFP_KERNEL);
 	if (dq_entry == NULL) {
 		pr_warn("Failed to allocate memory for datagram\n");
 		vmci_ctx_put(context);
@@ -598,7 +598,7 @@ int vmci_ctx_add_notification(u32 context_id, u32 remote_cid)
 		goto out;
 	}

-	notifier = kmalloc(sizeof(struct vmci_handle_list), GFP_KERNEL);
+	notifier = kmalloc_obj(struct vmci_handle_list, GFP_KERNEL);
 	if (!notifier) {
 		result = VMCI_ERROR_NO_MEM;
 		goto out;
diff --git a/drivers/misc/vmw_vmci/vmci_datagram.c b/drivers/misc/vmw_vmci/vmci_datagram.c
index 3964d9e5a39b..1a276717e20a 100644
--- a/drivers/misc/vmw_vmci/vmci_datagram.c
+++ b/drivers/misc/vmw_vmci/vmci_datagram.c
@@ -71,7 +71,7 @@ static int dg_create_handle(u32 resource_id,

 	handle = vmci_make_handle(context_id, resource_id);

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		pr_warn("Failed allocating memory for datagram entry\n");
 		return VMCI_ERROR_NO_MEM;
@@ -224,8 +224,8 @@ static int dg_dispatch_as_host(u32 context_id, struct vmci_datagram *dg)
 				return VMCI_ERROR_NO_MEM;
 			}

-			dg_info = kmalloc(struct_size(dg_info, msg_payload, dg->payload_size),
-					  GFP_ATOMIC);
+			dg_info = kmalloc_flex(*dg_info, msg_payload,
+					       dg->payload_size, GFP_ATOMIC);
 			if (!dg_info) {
 				atomic_dec(&delayed_dg_host_queue_size);
 				vmci_resource_put(resource);
diff --git a/drivers/misc/vmw_vmci/vmci_doorbell.c b/drivers/misc/vmw_vmci/vmci_doorbell.c
index 53eeb9e6cb56..c2db2d4ab7f6 100644
--- a/drivers/misc/vmw_vmci/vmci_doorbell.c
+++ b/drivers/misc/vmw_vmci/vmci_doorbell.c
@@ -402,7 +402,7 @@ int vmci_doorbell_create(struct vmci_handle *handle,
 	    priv_flags & ~VMCI_PRIVILEGE_ALL_FLAGS)
 		return VMCI_ERROR_INVALID_ARGS;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (entry == NULL) {
 		pr_warn("Failed allocating memory for datagram entry\n");
 		return VMCI_ERROR_NO_MEM;
diff --git a/drivers/misc/vmw_vmci/vmci_event.c b/drivers/misc/vmw_vmci/vmci_event.c
index 9a41ab65378d..85dc12860f17 100644
--- a/drivers/misc/vmw_vmci/vmci_event.c
+++ b/drivers/misc/vmw_vmci/vmci_event.c
@@ -151,7 +151,7 @@ int vmci_event_subscribe(u32 event,
 		return VMCI_ERROR_INVALID_ARGS;
 	}

-	sub = kzalloc(sizeof(*sub), GFP_KERNEL);
+	sub = kzalloc_obj(*sub, GFP_KERNEL);
 	if (!sub)
 		return VMCI_ERROR_NO_MEM;

diff --git a/drivers/misc/vmw_vmci/vmci_handle_array.c b/drivers/misc/vmw_vmci/vmci_handle_array.c
index 681b3500125a..fd94e4f90322 100644
--- a/drivers/misc/vmw_vmci/vmci_handle_array.c
+++ b/drivers/misc/vmw_vmci/vmci_handle_array.c
@@ -19,7 +19,7 @@ struct vmci_handle_arr *vmci_handle_arr_create(u32 capacity, u32 max_capacity)
 		capacity = min((u32)VMCI_HANDLE_ARRAY_DEFAULT_CAPACITY,
 			       max_capacity);

-	array = kmalloc(struct_size(array, entries, capacity), GFP_ATOMIC);
+	array = kmalloc_flex(*array, entries, capacity, GFP_ATOMIC);
 	if (!array)
 		return NULL;

diff --git a/drivers/misc/vmw_vmci/vmci_host.c b/drivers/misc/vmw_vmci/vmci_host.c
index b64944367ac5..88fea05203d5 100644
--- a/drivers/misc/vmw_vmci/vmci_host.c
+++ b/drivers/misc/vmw_vmci/vmci_host.c
@@ -120,7 +120,7 @@ static int vmci_host_open(struct inode *inode, struct file *filp)
 {
 	struct vmci_host_dev *vmci_host_dev;

-	vmci_host_dev = kzalloc(sizeof(struct vmci_host_dev), GFP_KERNEL);
+	vmci_host_dev = kzalloc_obj(struct vmci_host_dev, GFP_KERNEL);
 	if (vmci_host_dev == NULL)
 		return -ENOMEM;

diff --git a/drivers/misc/vmw_vmci/vmci_queue_pair.c b/drivers/misc/vmw_vmci/vmci_queue_pair.c
index b88ac144ad32..d2a7f79f4e8d 100644
--- a/drivers/misc/vmw_vmci/vmci_queue_pair.c
+++ b/drivers/misc/vmw_vmci/vmci_queue_pair.c
@@ -895,7 +895,7 @@ qp_guest_endpoint_create(struct vmci_handle handle,
 		handle = vmci_make_handle(context_id, VMCI_INVALID_ID);
 	}

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (entry) {
 		entry->qp.peer = peer;
 		entry->qp.flags = flags;
@@ -1318,7 +1318,7 @@ static int qp_broker_create(struct vmci_handle handle,
 	if (is_local && peer != VMCI_INVALID_ID && context_id != peer)
 		return VMCI_ERROR_NO_ACCESS;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return VMCI_ERROR_NO_MEM;

@@ -2722,7 +2722,7 @@ int vmci_qpair_alloc(struct vmci_qp **qpair,
 		return VMCI_ERROR_INVALID_ARGS;
 	}

-	my_qpair = kzalloc(sizeof(*my_qpair), GFP_KERNEL);
+	my_qpair = kzalloc_obj(*my_qpair, GFP_KERNEL);
 	if (!my_qpair)
 		return VMCI_ERROR_NO_MEM;

diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index fb6eb2d79b4f..b39cd61cea44 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -422,7 +422,7 @@ static struct mmc_blk_ioc_data *mmc_blk_ioctl_copy_from_user(
 	struct mmc_blk_ioc_data *idata;
 	int err;

-	idata = kzalloc(sizeof(*idata), GFP_KERNEL);
+	idata = kzalloc_obj(*idata, GFP_KERNEL);
 	if (!idata) {
 		err = -ENOMEM;
 		goto out;
@@ -737,7 +737,7 @@ static int mmc_blk_ioctl_multi_cmd(struct mmc_blk_data *md,
 		return -EINVAL;

 	n = num_of_cmds;
-	idata = kcalloc(n, sizeof(*idata), GFP_KERNEL);
+	idata = kzalloc_objs(*idata, n, GFP_KERNEL);
 	if (!idata)
 		return -ENOMEM;

@@ -2562,7 +2562,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
 		return ERR_PTR(devidx);
 	}

-	md = kzalloc(sizeof(*md), GFP_KERNEL);
+	md = kzalloc_obj(*md, GFP_KERNEL);
 	if (!md) {
 		ret = -ENOMEM;
 		goto out;
@@ -2794,12 +2794,12 @@ static struct mmc_blk_ioc_data **alloc_idata(struct mmc_rpmb_data *rpmb,
 	struct mmc_blk_ioc_data **idata;
 	unsigned int n;

-	idata = kcalloc(cmd_count, sizeof(*idata), GFP_KERNEL);
+	idata = kzalloc_objs(*idata, cmd_count, GFP_KERNEL);
 	if (!idata)
 		return NULL;

 	for (n = 0; n < cmd_count; n++) {
-		idata[n] = kcalloc(1, sizeof(**idata), GFP_KERNEL);
+		idata[n] = kzalloc_objs(**idata, 1, GFP_KERNEL);
 		if (!idata[n]) {
 			free_idata(idata, n);
 			return NULL;
@@ -2942,7 +2942,7 @@ static int mmc_blk_alloc_rpmb_part(struct mmc_card *card,
 	if (devidx < 0)
 		return devidx;

-	rpmb = kzalloc(sizeof(*rpmb), GFP_KERNEL);
+	rpmb = kzalloc_obj(*rpmb, GFP_KERNEL);
 	if (!rpmb) {
 		ida_free(&mmc_rpmb_ida, devidx);
 		return -ENOMEM;
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index ec4f3462bf80..740b082da3e2 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -279,7 +279,7 @@ struct mmc_card *mmc_alloc_card(struct mmc_host *host, const struct device_type
 {
 	struct mmc_card *card;

-	card = kzalloc(sizeof(struct mmc_card), GFP_KERNEL);
+	card = kzalloc_obj(struct mmc_card, GFP_KERNEL);
 	if (!card)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/mmc/core/mmc_test.c b/drivers/mmc/core/mmc_test.c
index 01d1e62c2ce7..70cc83a8a1ee 100644
--- a/drivers/mmc/core/mmc_test.c
+++ b/drivers/mmc/core/mmc_test.c
@@ -348,11 +348,11 @@ static struct mmc_test_mem *mmc_test_alloc_mem(unsigned long min_sz,
 	if (max_segs > max_page_cnt)
 		max_segs = max_page_cnt;

-	mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+	mem = kzalloc_obj(*mem, GFP_KERNEL);
 	if (!mem)
 		return NULL;

-	mem->arr = kcalloc(max_segs, sizeof(*mem->arr), GFP_KERNEL);
+	mem->arr = kzalloc_objs(*mem->arr, max_segs, GFP_KERNEL);
 	if (!mem->arr)
 		goto out_free;

@@ -533,7 +533,7 @@ static void mmc_test_save_transfer_result(struct mmc_test_card *test,
 	if (!test->gr)
 		return;

-	tr = kmalloc(sizeof(*tr), GFP_KERNEL);
+	tr = kmalloc_obj(*tr, GFP_KERNEL);
 	if (!tr)
 		return;

@@ -765,7 +765,7 @@ static void mmc_test_req_reset(struct mmc_test_req *rq)

 static struct mmc_test_req *mmc_test_req_alloc(void)
 {
-	struct mmc_test_req *rq = kmalloc(sizeof(*rq), GFP_KERNEL);
+	struct mmc_test_req *rq = kmalloc_obj(*rq, GFP_KERNEL);

 	if (rq)
 		mmc_test_req_reset(rq);
@@ -1570,14 +1570,13 @@ static int mmc_test_area_init(struct mmc_test_card *test, int erase, int fill)
 	if (!t->mem)
 		return -ENOMEM;

-	t->sg = kmalloc_array(t->max_segs, sizeof(*t->sg), GFP_KERNEL);
+	t->sg = kmalloc_objs(*t->sg, t->max_segs, GFP_KERNEL);
 	if (!t->sg) {
 		ret = -ENOMEM;
 		goto out_free;
 	}

-	t->sg_areq = kmalloc_array(t->max_segs, sizeof(*t->sg_areq),
-				   GFP_KERNEL);
+	t->sg_areq = kmalloc_objs(*t->sg_areq, t->max_segs, GFP_KERNEL);
 	if (!t->sg_areq) {
 		ret = -ENOMEM;
 		goto out_free;
@@ -2968,7 +2967,7 @@ static void mmc_test_run(struct mmc_test_card *test, int testcase)
 			}
 		}

-		gr = kzalloc(sizeof(*gr), GFP_KERNEL);
+		gr = kzalloc_obj(*gr, GFP_KERNEL);
 		if (gr) {
 			INIT_LIST_HEAD(&gr->tr_lst);

@@ -3100,7 +3099,7 @@ static ssize_t mtf_test_write(struct file *file, const char __user *buf,
 	if (ret)
 		return ret;

-	test = kzalloc(sizeof(*test), GFP_KERNEL);
+	test = kzalloc_obj(*test, GFP_KERNEL);
 	if (!test)
 		return -ENOMEM;

@@ -3189,7 +3188,7 @@ static int __mmc_test_register_dbgfs_file(struct mmc_card *card,
 		file = debugfs_create_file(name, mode, card->debugfs_root,
 					   card, fops);

-	df = kmalloc(sizeof(*df), GFP_KERNEL);
+	df = kmalloc_obj(*df, GFP_KERNEL);
 	if (!df) {
 		debugfs_remove(file);
 		return -ENOMEM;
diff --git a/drivers/mmc/core/queue.c b/drivers/mmc/core/queue.c
index 284856c8f655..13000fc57e2e 100644
--- a/drivers/mmc/core/queue.c
+++ b/drivers/mmc/core/queue.c
@@ -167,7 +167,7 @@ static struct scatterlist *mmc_alloc_sg(unsigned short sg_len, gfp_t gfp)
 {
 	struct scatterlist *sg;

-	sg = kmalloc_array(sg_len, sizeof(*sg), gfp);
+	sg = kmalloc_objs(*sg, sg_len, gfp);
 	if (sg)
 		sg_init_table(sg, sg_len);

diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
index 6e5bdc2f0cc8..060da5c4ea75 100644
--- a/drivers/mmc/core/sdio_bus.c
+++ b/drivers/mmc/core/sdio_bus.c
@@ -337,7 +337,7 @@ struct sdio_func *sdio_alloc_func(struct mmc_card *card)
 {
 	struct sdio_func *func;

-	func = kzalloc(sizeof(struct sdio_func), GFP_KERNEL);
+	func = kzalloc_obj(struct sdio_func, GFP_KERNEL);
 	if (!func)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/mmc/core/sdio_uart.c b/drivers/mmc/core/sdio_uart.c
index 7423a601e1e5..a37d91347931 100644
--- a/drivers/mmc/core/sdio_uart.c
+++ b/drivers/mmc/core/sdio_uart.c
@@ -1021,7 +1021,7 @@ static int sdio_uart_probe(struct sdio_func *func,
 	struct sdio_uart_port *port;
 	int ret;

-	port = kzalloc(sizeof(struct sdio_uart_port), GFP_KERNEL);
+	port = kzalloc_obj(struct sdio_uart_port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/drivers/mmc/host/dw_mmc-rockchip.c b/drivers/mmc/host/dw_mmc-rockchip.c
index 62c68cda1e21..2a2aee4054f7 100644
--- a/drivers/mmc/host/dw_mmc-rockchip.c
+++ b/drivers/mmc/host/dw_mmc-rockchip.c
@@ -306,8 +306,7 @@ static int dw_mci_rk3288_execute_tuning(struct dw_mci_slot *slot, u32 opcode)
 		return -EIO;
 	}

-	ranges = kmalloc_array(priv->num_phases / 2 + 1,
-			       sizeof(*ranges), GFP_KERNEL);
+	ranges = kmalloc_objs(*ranges, priv->num_phases / 2 + 1, GFP_KERNEL);
 	if (!ranges)
 		return -ENOMEM;

diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 9e74b675e92d..1e0c3904cded 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -834,7 +834,7 @@ static int dw_mci_edmac_start_dma(struct dw_mci *host,
 static int dw_mci_edmac_init(struct dw_mci *host)
 {
 	/* Request external dma channel */
-	host->dms = kzalloc(sizeof(struct dw_mci_dma_slave), GFP_KERNEL);
+	host->dms = kzalloc_obj(struct dw_mci_dma_slave, GFP_KERNEL);
 	if (!host->dms)
 		return -ENOMEM;

diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
index 42936e248c55..8ab52b4de02e 100644
--- a/drivers/mmc/host/mmc_spi.c
+++ b/drivers/mmc/host/mmc_spi.c
@@ -1236,7 +1236,7 @@ static int mmc_spi_probe(struct spi_device *spi)
 	}

 	/* Preallocate buffers */
-	host->data = kmalloc(sizeof(*host->data), GFP_KERNEL);
+	host->data = kmalloc_obj(*host->data, GFP_KERNEL);
 	if (!host->data)
 		goto fail_nobuf1;

diff --git a/drivers/mmc/host/of_mmc_spi.c b/drivers/mmc/host/of_mmc_spi.c
index 05939f30a5ae..d3137d23533c 100644
--- a/drivers/mmc/host/of_mmc_spi.c
+++ b/drivers/mmc/host/of_mmc_spi.c
@@ -57,7 +57,7 @@ struct mmc_spi_platform_data *mmc_spi_get_pdata(struct spi_device *spi)
 	if (dev->platform_data || !dev_fwnode(dev))
 		return dev->platform_data;

-	oms = kzalloc(sizeof(*oms), GFP_KERNEL);
+	oms = kzalloc_obj(*oms, GFP_KERNEL);
 	if (!oms)
 		return NULL;

diff --git a/drivers/mmc/host/ushc.c b/drivers/mmc/host/ushc.c
index 2b7456e942f7..6a4274bac5c0 100644
--- a/drivers/mmc/host/ushc.c
+++ b/drivers/mmc/host/ushc.c
@@ -462,7 +462,7 @@ static int ushc_probe(struct usb_interface *intf, const struct usb_device_id *id
 		ret = -ENOMEM;
 		goto err;
 	}
-	ushc->int_data = kzalloc(sizeof(struct ushc_int_data), GFP_KERNEL);
+	ushc->int_data = kzalloc_obj(struct ushc_int_data, GFP_KERNEL);
 	if (ushc->int_data == NULL) {
 		ret = -ENOMEM;
 		goto err;
@@ -479,7 +479,7 @@ static int ushc_probe(struct usb_interface *intf, const struct usb_device_id *id
 		ret = -ENOMEM;
 		goto err;
 	}
-	ushc->cbw = kzalloc(sizeof(struct ushc_cbw), GFP_KERNEL);
+	ushc->cbw = kzalloc_obj(struct ushc_cbw, GFP_KERNEL);
 	if (ushc->cbw == NULL) {
 		ret = -ENOMEM;
 		goto err;
@@ -501,7 +501,7 @@ static int ushc_probe(struct usb_interface *intf, const struct usb_device_id *id
 		ret = -ENOMEM;
 		goto err;
 	}
-	ushc->csw = kzalloc(sizeof(struct ushc_csw), GFP_KERNEL);
+	ushc->csw = kzalloc_obj(struct ushc_csw, GFP_KERNEL);
 	if (ushc->csw == NULL) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/most/configfs.c b/drivers/most/configfs.c
index 36d8c917f65f..03b977a4c070 100644
--- a/drivers/most/configfs.c
+++ b/drivers/most/configfs.c
@@ -426,7 +426,7 @@ static struct config_item *most_common_make_item(struct config_group *group,
 	struct mdev_link *mdev_link;
 	struct most_common *mc = to_most_common(group->cg_subsys);

-	mdev_link = kzalloc(sizeof(*mdev_link), GFP_KERNEL);
+	mdev_link = kzalloc_obj(*mdev_link, GFP_KERNEL);
 	if (!mdev_link)
 		return ERR_PTR(-ENOMEM);

@@ -526,7 +526,7 @@ static struct config_item *most_snd_grp_make_item(struct config_group *group,
 {
 	struct mdev_link *mdev_link;

-	mdev_link = kzalloc(sizeof(*mdev_link), GFP_KERNEL);
+	mdev_link = kzalloc_obj(*mdev_link, GFP_KERNEL);
 	if (!mdev_link)
 		return ERR_PTR(-ENOMEM);

@@ -607,7 +607,7 @@ static struct config_group *most_sound_make_group(struct config_group *group,
 	}
 	if (!try_module_get(ms->mod))
 		return ERR_PTR(-ENOLCK);
-	most = kzalloc(sizeof(*most), GFP_KERNEL);
+	most = kzalloc_obj(*most, GFP_KERNEL);
 	if (!most) {
 		module_put(ms->mod);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/most/core.c b/drivers/most/core.c
index 40d63e38fef5..3bbe8bed402a 100644
--- a/drivers/most/core.c
+++ b/drivers/most/core.c
@@ -880,7 +880,7 @@ static int arm_mbo_chain(struct most_channel *c, int dir,
 	atomic_set(&c->mbo_nq_level, 0);

 	for (i = 0; i < c->cfg.num_buffers; i++) {
-		mbo = kzalloc(sizeof(*mbo), GFP_KERNEL);
+		mbo = kzalloc_obj(*mbo, GFP_KERNEL);
 		if (!mbo)
 			goto flush_fifos;

@@ -1300,7 +1300,7 @@ int most_register_interface(struct most_interface *iface)
 		return id;
 	}

-	iface->p = kzalloc(sizeof(*iface->p), GFP_KERNEL);
+	iface->p = kzalloc_obj(*iface->p, GFP_KERNEL);
 	if (!iface->p) {
 		ida_free(&mdev_id, id);
 		put_device(iface->dev);
@@ -1324,7 +1324,7 @@ int most_register_interface(struct most_interface *iface)
 	for (i = 0; i < iface->num_channels; i++) {
 		const char *name_suffix = iface->channel_vector[i].name_suffix;

-		c = kzalloc(sizeof(*c), GFP_KERNEL);
+		c = kzalloc_obj(*c, GFP_KERNEL);
 		if (!c)
 			goto err_free_resources;
 		if (!name_suffix)
diff --git a/drivers/most/most_cdev.c b/drivers/most/most_cdev.c
index b9423f82373d..87f770b03466 100644
--- a/drivers/most/most_cdev.c
+++ b/drivers/most/most_cdev.c
@@ -429,7 +429,7 @@ static int comp_probe(struct most_interface *iface, int channel_id,
 	if (current_minor < 0)
 		return current_minor;

-	c = kzalloc(sizeof(*c), GFP_KERNEL);
+	c = kzalloc_obj(*c, GFP_KERNEL);
 	if (!c) {
 		retval = -ENOMEM;
 		goto err_remove_ida;
diff --git a/drivers/most/most_snd.c b/drivers/most/most_snd.c
index 45d762804c5e..ffd51f2d0d9b 100644
--- a/drivers/most/most_snd.c
+++ b/drivers/most/most_snd.c
@@ -542,7 +542,7 @@ static int audio_probe_channel(struct most_interface *iface, int channel_id,
 		adpt->pcm_dev_idx++;
 		goto skip_adpt_alloc;
 	}
-	adpt = kzalloc(sizeof(*adpt), GFP_KERNEL);
+	adpt = kzalloc_obj(*adpt, GFP_KERNEL);
 	if (!adpt)
 		return -ENOMEM;

@@ -574,7 +574,7 @@ static int audio_probe_channel(struct most_interface *iface, int channel_id,
 		capture_count = 1;
 		direction = SNDRV_PCM_STREAM_CAPTURE;
 	}
-	channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kzalloc_obj(*channel, GFP_KERNEL);
 	if (!channel) {
 		ret = -ENOMEM;
 		goto err_free_adpt;
diff --git a/drivers/most/most_usb.c b/drivers/most/most_usb.c
index 41ee169f80c5..0c61d023ac0a 100644
--- a/drivers/most/most_usb.c
+++ b/drivers/most/most_usb.c
@@ -142,7 +142,7 @@ static inline int drci_rd_reg(struct usb_device *dev, u16 reg, u16 *buf)
 	__le16 *dma_buf;
 	u8 req_type = USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE;

-	dma_buf = kzalloc(sizeof(*dma_buf), GFP_KERNEL);
+	dma_buf = kzalloc_obj(*dma_buf, GFP_KERNEL);
 	if (!dma_buf)
 		return -ENOMEM;

@@ -960,7 +960,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)
 	struct usb_endpoint_descriptor *ep_desc;
 	int ret = -ENOMEM;

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return -ENOMEM;

@@ -1000,11 +1000,11 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)
 	mdev->dev.init_name = mdev->description;
 	mdev->dev.parent = &interface->dev;
 	mdev->dev.release = release_mdev;
-	mdev->conf = kcalloc(num_endpoints, sizeof(*mdev->conf), GFP_KERNEL);
+	mdev->conf = kzalloc_objs(*mdev->conf, num_endpoints, GFP_KERNEL);
 	if (!mdev->conf)
 		goto err_free_mdev;

-	mdev->cap = kcalloc(num_endpoints, sizeof(*mdev->cap), GFP_KERNEL);
+	mdev->cap = kzalloc_objs(*mdev->cap, num_endpoints, GFP_KERNEL);
 	if (!mdev->cap)
 		goto err_free_conf;

@@ -1015,7 +1015,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)
 		goto err_free_cap;

 	mdev->busy_urbs =
-		kcalloc(num_endpoints, sizeof(*mdev->busy_urbs), GFP_KERNEL);
+		kzalloc_objs(*mdev->busy_urbs, num_endpoints, GFP_KERNEL);
 	if (!mdev->busy_urbs)
 		goto err_free_ep_address;

@@ -1064,7 +1064,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)
 	if (le16_to_cpu(usb_dev->descriptor.idProduct) == USB_DEV_ID_OS81118 ||
 	    le16_to_cpu(usb_dev->descriptor.idProduct) == USB_DEV_ID_OS81119 ||
 	    le16_to_cpu(usb_dev->descriptor.idProduct) == USB_DEV_ID_OS81210) {
-		mdev->dci = kzalloc(sizeof(*mdev->dci), GFP_KERNEL);
+		mdev->dci = kzalloc_obj(*mdev->dci, GFP_KERNEL);
 		if (!mdev->dci) {
 			mutex_unlock(&mdev->io_mutex);
 			most_deregister_interface(&mdev->iface);
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c
index c10693ba265b..9a54e390cd44 100644
--- a/drivers/mtd/chips/cfi_cmdset_0001.c
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
@@ -501,7 +501,7 @@ struct mtd_info *cfi_cmdset_0001(struct map_info *map, int primary)
 	struct mtd_info *mtd;
 	int i;

-	mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
+	mtd = kzalloc_obj(*mtd, GFP_KERNEL);
 	if (!mtd)
 		return NULL;
 	mtd->priv = map;
@@ -627,9 +627,8 @@ static struct mtd_info *cfi_intelext_setup(struct mtd_info *mtd)
 	mtd->size = devsize * cfi->numchips;

 	mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips;
-	mtd->eraseregions = kcalloc(mtd->numeraseregions,
-				    sizeof(struct mtd_erase_region_info),
-				    GFP_KERNEL);
+	mtd->eraseregions = kzalloc_objs(struct mtd_erase_region_info,
+					 mtd->numeraseregions, GFP_KERNEL);
 	if (!mtd->eraseregions)
 		goto setup_err;

@@ -777,13 +776,11 @@ static int cfi_intelext_partition_fixup(struct mtd_info *mtd,
 		}

 		numvirtchips = cfi->numchips * numparts;
-		newcfi = kmalloc(struct_size(newcfi, chips, numvirtchips),
-				 GFP_KERNEL);
+		newcfi = kmalloc_flex(*newcfi, chips, numvirtchips, GFP_KERNEL);
 		if (!newcfi)
 			return -ENOMEM;
-		shared = kmalloc_array(cfi->numchips,
-				       sizeof(struct flchip_shared),
-				       GFP_KERNEL);
+		shared = kmalloc_objs(struct flchip_shared, cfi->numchips,
+				      GFP_KERNEL);
 		if (!shared) {
 			kfree(newcfi);
 			return -ENOMEM;
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
index 7c91429a670b..efb3ba02432e 100644
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
@@ -604,7 +604,7 @@ struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary)
 	struct mtd_info *mtd;
 	int i;

-	mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
+	mtd = kzalloc_obj(*mtd, GFP_KERNEL);
 	if (!mtd)
 		return NULL;
 	mtd->priv = map;
@@ -776,9 +776,8 @@ static struct mtd_info *cfi_amdstd_setup(struct mtd_info *mtd)
 	mtd->size = devsize * cfi->numchips;

 	mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips;
-	mtd->eraseregions = kmalloc_array(mtd->numeraseregions,
-					  sizeof(struct mtd_erase_region_info),
-					  GFP_KERNEL);
+	mtd->eraseregions = kmalloc_objs(struct mtd_erase_region_info,
+					 mtd->numeraseregions, GFP_KERNEL);
 	if (!mtd->eraseregions)
 		goto setup_err;

@@ -2819,7 +2818,7 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
 	for (i = 0; i < mtd->numeraseregions; i++)
 		max_sectors += regions[i].numblocks;

-	sect = kcalloc(max_sectors, sizeof(struct ppb_lock), GFP_KERNEL);
+	sect = kzalloc_objs(struct ppb_lock, max_sectors, GFP_KERNEL);
 	if (!sect)
 		return -ENOMEM;

diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c
index 5e5266e2c2e1..5665d3b72da1 100644
--- a/drivers/mtd/chips/cfi_cmdset_0020.c
+++ b/drivers/mtd/chips/cfi_cmdset_0020.c
@@ -172,7 +172,7 @@ static struct mtd_info *cfi_staa_setup(struct map_info *map)
 	int i,j;
 	unsigned long devsize = (1<<cfi->cfiq->DevSize) * cfi->interleave;

-	mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
+	mtd = kzalloc_obj(*mtd, GFP_KERNEL);
 	//printk(KERN_DEBUG "number of CFI chips: %d\n", cfi->numchips);

 	if (!mtd) {
@@ -185,9 +185,8 @@ static struct mtd_info *cfi_staa_setup(struct map_info *map)
 	mtd->size = devsize * cfi->numchips;

 	mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips;
-	mtd->eraseregions = kmalloc_array(mtd->numeraseregions,
-					  sizeof(struct mtd_erase_region_info),
-					  GFP_KERNEL);
+	mtd->eraseregions = kmalloc_objs(struct mtd_erase_region_info,
+					 mtd->numeraseregions, GFP_KERNEL);
 	if (!mtd->eraseregions) {
 		kfree(cfi->cmdset_priv);
 		kfree(mtd);
diff --git a/drivers/mtd/chips/cfi_probe.c b/drivers/mtd/chips/cfi_probe.c
index e254f9cd2796..926bf7b61e59 100644
--- a/drivers/mtd/chips/cfi_probe.c
+++ b/drivers/mtd/chips/cfi_probe.c
@@ -208,7 +208,8 @@ static int __xipram cfi_chip_setup(struct map_info *map,
 	if (!num_erase_regions)
 		return 0;

-	cfi->cfiq = kmalloc(struct_size(cfi->cfiq, EraseRegionInfo, num_erase_regions), GFP_KERNEL);
+	cfi->cfiq = kmalloc_flex(*cfi->cfiq, EraseRegionInfo, num_erase_regions,
+				 GFP_KERNEL);
 	if (!cfi->cfiq)
 		return 0;

diff --git a/drivers/mtd/chips/gen_probe.c b/drivers/mtd/chips/gen_probe.c
index 9e53fcd7600d..ebf653ba8f6a 100644
--- a/drivers/mtd/chips/gen_probe.c
+++ b/drivers/mtd/chips/gen_probe.c
@@ -134,7 +134,7 @@ static struct cfi_private *genprobe_ident_chips(struct map_info *map, struct chi
 	 * our caller, and copy the appropriate data into them.
 	 */

-	retcfi = kmalloc(struct_size(retcfi, chips, cfi.numchips), GFP_KERNEL);
+	retcfi = kmalloc_flex(*retcfi, chips, cfi.numchips, GFP_KERNEL);

 	if (!retcfi) {
 		kfree(cfi.cfiq);
diff --git a/drivers/mtd/chips/jedec_probe.c b/drivers/mtd/chips/jedec_probe.c
index 3c631608f6d6..d7acf0425e4f 100644
--- a/drivers/mtd/chips/jedec_probe.c
+++ b/drivers/mtd/chips/jedec_probe.c
@@ -1985,7 +1985,8 @@ static int cfi_jedec_setup(struct map_info *map, struct cfi_private *cfi, int in

 	num_erase_regions = jedec_table[index].nr_regions;

-	cfi->cfiq = kmalloc(struct_size(cfi->cfiq, EraseRegionInfo, num_erase_regions), GFP_KERNEL);
+	cfi->cfiq = kmalloc_flex(*cfi->cfiq, EraseRegionInfo, num_erase_regions,
+				 GFP_KERNEL);
 	if (!cfi->cfiq) {
 		//xx printk(KERN_WARNING "%s: kmalloc failed for CFI ident structure\n", map->name);
 		return 0;
diff --git a/drivers/mtd/chips/map_absent.c b/drivers/mtd/chips/map_absent.c
index fc68557f49c0..6a9bd84a6def 100644
--- a/drivers/mtd/chips/map_absent.c
+++ b/drivers/mtd/chips/map_absent.c
@@ -46,7 +46,7 @@ static struct mtd_info *map_absent_probe(struct map_info *map)
 {
 	struct mtd_info *mtd;

-	mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
+	mtd = kzalloc_obj(*mtd, GFP_KERNEL);
 	if (!mtd) {
 		return NULL;
 	}
diff --git a/drivers/mtd/chips/map_ram.c b/drivers/mtd/chips/map_ram.c
index f9d3e32ef8e9..f94d20672423 100644
--- a/drivers/mtd/chips/map_ram.c
+++ b/drivers/mtd/chips/map_ram.c
@@ -57,7 +57,7 @@ static struct mtd_info *map_ram_probe(struct map_info *map)
 #endif
 	/* OK. It seems to be RAM. */

-	mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
+	mtd = kzalloc_obj(*mtd, GFP_KERNEL);
 	if (!mtd)
 		return NULL;

diff --git a/drivers/mtd/chips/map_rom.c b/drivers/mtd/chips/map_rom.c
index 0823b15aaadb..644ef8d62cc8 100644
--- a/drivers/mtd/chips/map_rom.c
+++ b/drivers/mtd/chips/map_rom.c
@@ -45,7 +45,7 @@ static struct mtd_info *map_rom_probe(struct map_info *map)
 {
 	struct mtd_info *mtd;

-	mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
+	mtd = kzalloc_obj(*mtd, GFP_KERNEL);
 	if (!mtd)
 		return NULL;

diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c
index b06c8dd51562..41b1c1348efe 100644
--- a/drivers/mtd/devices/block2mtd.c
+++ b/drivers/mtd/devices/block2mtd.c
@@ -271,7 +271,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
 	if (!devname)
 		return NULL;

-	dev = kzalloc(sizeof(struct block2mtd_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct block2mtd_dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/drivers/mtd/devices/docg3.c b/drivers/mtd/devices/docg3.c
index c93769c233d9..8db760b2c900 100644
--- a/drivers/mtd/devices/docg3.c
+++ b/drivers/mtd/devices/docg3.c
@@ -1810,10 +1810,10 @@ doc_probe_device(struct docg3_cascade *cascade, int floor, struct device *dev)
 	struct mtd_info *mtd;

 	ret = -ENOMEM;
-	docg3 = kzalloc(sizeof(struct docg3), GFP_KERNEL);
+	docg3 = kzalloc_obj(struct docg3, GFP_KERNEL);
 	if (!docg3)
 		goto nomem1;
-	mtd = kzalloc(sizeof(struct mtd_info), GFP_KERNEL);
+	mtd = kzalloc_obj(struct mtd_info, GFP_KERNEL);
 	if (!mtd)
 		goto nomem2;
 	mtd->priv = docg3;
diff --git a/drivers/mtd/devices/ms02-nv.c b/drivers/mtd/devices/ms02-nv.c
index 08f76ff839a7..0a5d6ca1fe2f 100644
--- a/drivers/mtd/devices/ms02-nv.c
+++ b/drivers/mtd/devices/ms02-nv.c
@@ -117,7 +117,7 @@ static int __init ms02nv_init_one(ulong addr)
 	int ret = -ENODEV;

 	/* The module decodes 8MiB of address space. */
-	mod_res = kzalloc(sizeof(*mod_res), GFP_KERNEL);
+	mod_res = kzalloc_obj(*mod_res, GFP_KERNEL);
 	if (!mod_res)
 		return -ENOMEM;

@@ -138,10 +138,10 @@ static int __init ms02nv_init_one(ulong addr)
 	}

 	ret = -ENOMEM;
-	mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
+	mtd = kzalloc_obj(*mtd, GFP_KERNEL);
 	if (!mtd)
 		goto err_out_mod_res_rel;
-	mp = kzalloc(sizeof(*mp), GFP_KERNEL);
+	mp = kzalloc_obj(*mp, GFP_KERNEL);
 	if (!mp)
 		goto err_out_mtd;

@@ -149,7 +149,7 @@ static int __init ms02nv_init_one(ulong addr)
 	mp->resource.module = mod_res;

 	/* Firmware's diagnostic NVRAM area. */
-	diag_res = kzalloc(sizeof(*diag_res), GFP_KERNEL);
+	diag_res = kzalloc_obj(*diag_res, GFP_KERNEL);
 	if (!diag_res)
 		goto err_out_mp;

@@ -162,7 +162,7 @@ static int __init ms02nv_init_one(ulong addr)
 	mp->resource.diag_ram = diag_res;

 	/* User-available general-purpose NVRAM area. */
-	user_res = kzalloc(sizeof(*user_res), GFP_KERNEL);
+	user_res = kzalloc_obj(*user_res, GFP_KERNEL);
 	if (!user_res)
 		goto err_out_diag_res;

@@ -175,7 +175,7 @@ static int __init ms02nv_init_one(ulong addr)
 	mp->resource.user_ram = user_res;

 	/* Control and status register. */
-	csr_res = kzalloc(sizeof(*csr_res), GFP_KERNEL);
+	csr_res = kzalloc_obj(*csr_res, GFP_KERNEL);
 	if (!csr_res)
 		goto err_out_user_res;

diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c
index ec52277e3dd5..3eebca290f50 100644
--- a/drivers/mtd/devices/mtd_dataflash.c
+++ b/drivers/mtd/devices/mtd_dataflash.c
@@ -627,7 +627,7 @@ static int add_dataflash_otp(struct spi_device *spi, char *name, int nr_pages,
 	char				*otp_tag = "";
 	int				err = 0;

-	priv = kzalloc(sizeof *priv, GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/mtd/devices/mtd_intel_dg.c b/drivers/mtd/devices/mtd_intel_dg.c
index 7f751c48a76d..ed5a07459012 100644
--- a/drivers/mtd/devices/mtd_intel_dg.c
+++ b/drivers/mtd/devices/mtd_intel_dg.c
@@ -720,7 +720,7 @@ static int intel_dg_nvm_init_mtd(struct intel_dg_nvm *nvm, struct device *device
 	nvm->mtd.erasesize = SZ_4K; /* 4K bytes granularity */
 	nvm->mtd.size = nvm->size;

-	parts = kcalloc(nvm->nregions, sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, nvm->nregions, GFP_KERNEL);
 	if (!parts)
 		return -ENOMEM;

@@ -764,7 +764,7 @@ static int intel_dg_mtd_probe(struct auxiliary_device *aux_dev,
 		return -ENODEV;
 	}

-	nvm = kzalloc(struct_size(nvm, regions, nregions), GFP_KERNEL);
+	nvm = kzalloc_flex(*nvm, regions, nregions, GFP_KERNEL);
 	if (!nvm)
 		return -ENOMEM;

diff --git a/drivers/mtd/devices/mtdram.c b/drivers/mtd/devices/mtdram.c
index 1c97fabc4bf9..5418cfcfb1d9 100644
--- a/drivers/mtd/devices/mtdram.c
+++ b/drivers/mtd/devices/mtdram.c
@@ -158,7 +158,7 @@ static int __init init_mtdram(void)
 		return -EINVAL;

 	/* Allocate some memory */
-	mtd_info = kmalloc(sizeof(struct mtd_info), GFP_KERNEL);
+	mtd_info = kmalloc_obj(struct mtd_info, GFP_KERNEL);
 	if (!mtd_info)
 		return -ENOMEM;

diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c
index fd9ec165e61a..d35f43dec8e3 100644
--- a/drivers/mtd/devices/phram.c
+++ b/drivers/mtd/devices/phram.c
@@ -130,7 +130,7 @@ static int register_device(struct platform_device *pdev, const char *name,
 	struct phram_mtd_list *new;
 	int ret = -ENOMEM;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		goto out0;

diff --git a/drivers/mtd/devices/pmc551.c b/drivers/mtd/devices/pmc551.c
index 6597fc2aad34..1d793bf7ad71 100644
--- a/drivers/mtd/devices/pmc551.c
+++ b/drivers/mtd/devices/pmc551.c
@@ -715,11 +715,11 @@ static int __init init_pmc551(void)
 			msize = length;
 		}

-		mtd = kzalloc(sizeof(struct mtd_info), GFP_KERNEL);
+		mtd = kzalloc_obj(struct mtd_info, GFP_KERNEL);
 		if (!mtd)
 			break;

-		priv = kzalloc(sizeof(struct mypriv), GFP_KERNEL);
+		priv = kzalloc_obj(struct mypriv, GFP_KERNEL);
 		if (!priv) {
 			kfree(mtd);
 			break;
diff --git a/drivers/mtd/devices/slram.c b/drivers/mtd/devices/slram.c
index 8297b366a066..1ac94e837f26 100644
--- a/drivers/mtd/devices/slram.c
+++ b/drivers/mtd/devices/slram.c
@@ -135,17 +135,17 @@ static int register_device(char *name, unsigned long start, unsigned long length
 		curmtd = &(*curmtd)->next;
 	}

-	*curmtd = kmalloc(sizeof(slram_mtd_list_t), GFP_KERNEL);
+	*curmtd = kmalloc_obj(slram_mtd_list_t, GFP_KERNEL);
 	if (!(*curmtd)) {
 		E("slram: Cannot allocate new MTD device.\n");
 		return(-ENOMEM);
 	}
-	(*curmtd)->mtdinfo = kzalloc(sizeof(struct mtd_info), GFP_KERNEL);
+	(*curmtd)->mtdinfo = kzalloc_obj(struct mtd_info, GFP_KERNEL);
 	(*curmtd)->next = NULL;

 	if ((*curmtd)->mtdinfo)	{
 		(*curmtd)->mtdinfo->priv =
-			kzalloc(sizeof(slram_priv_t), GFP_KERNEL);
+			kzalloc_obj(slram_priv_t, GFP_KERNEL);

 		if (!(*curmtd)->mtdinfo->priv) {
 			kfree((*curmtd)->mtdinfo);
diff --git a/drivers/mtd/ftl.c b/drivers/mtd/ftl.c
index 59a901549257..bc372a0c040d 100644
--- a/drivers/mtd/ftl.c
+++ b/drivers/mtd/ftl.c
@@ -201,16 +201,14 @@ static int build_maps(partition_t *part)
     /* Set up erase unit maps */
     part->DataUnits = le16_to_cpu(part->header.NumEraseUnits) -
 	part->header.NumTransferUnits;
-    part->EUNInfo = kmalloc_array(part->DataUnits, sizeof(struct eun_info_t),
-                                  GFP_KERNEL);
+    part->EUNInfo = kmalloc_objs(struct eun_info_t, part->DataUnits, GFP_KERNEL);
     if (!part->EUNInfo)
 	    goto out;
     for (i = 0; i < part->DataUnits; i++)
 	part->EUNInfo[i].Offset = 0xffffffff;
     part->XferInfo =
-	kmalloc_array(part->header.NumTransferUnits,
-                      sizeof(struct xfer_info_t),
-                      GFP_KERNEL);
+	kmalloc_objs(struct xfer_info_t, part->header.NumTransferUnits,
+                     GFP_KERNEL);
     if (!part->XferInfo)
 	    goto out_EUNInfo;

@@ -339,7 +337,7 @@ static int erase_xfer(partition_t *part,
     /* Is there a free erase slot? Always in MTD. */


-    erase=kmalloc(sizeof(struct erase_info), GFP_KERNEL);
+    erase=kmalloc_obj(struct erase_info, GFP_KERNEL);
     if (!erase)
             return -ENOMEM;

@@ -1007,7 +1005,7 @@ static void ftl_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
 {
 	partition_t *partition;

-	partition = kzalloc(sizeof(partition_t), GFP_KERNEL);
+	partition = kzalloc_obj(partition_t, GFP_KERNEL);

 	if (!partition) {
 		printk(KERN_WARNING "No memory to scan for FTL on %s\n",
diff --git a/drivers/mtd/inftlcore.c b/drivers/mtd/inftlcore.c
index 58c6e1743f5c..cde1e3f52a49 100644
--- a/drivers/mtd/inftlcore.c
+++ b/drivers/mtd/inftlcore.c
@@ -52,7 +52,7 @@ static void inftl_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)

 	pr_debug("INFTL: add_mtd for %s\n", mtd->name);

-	inftl = kzalloc(sizeof(*inftl), GFP_KERNEL);
+	inftl = kzalloc_obj(*inftl, GFP_KERNEL);

 	if (!inftl)
 		return;
diff --git a/drivers/mtd/lpddr/lpddr_cmds.c b/drivers/mtd/lpddr/lpddr_cmds.c
index cd37d58abacb..97f960af44b4 100644
--- a/drivers/mtd/lpddr/lpddr_cmds.c
+++ b/drivers/mtd/lpddr/lpddr_cmds.c
@@ -41,7 +41,7 @@ struct mtd_info *lpddr_cmdset(struct map_info *map)
 	int numchips;
 	int i, j;

-	mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
+	mtd = kzalloc_obj(*mtd, GFP_KERNEL);
 	if (!mtd)
 		return NULL;
 	mtd->priv = map;
@@ -65,8 +65,7 @@ struct mtd_info *lpddr_cmdset(struct map_info *map)
 	mtd->erasesize = 1 << lpddr->qinfo->UniformBlockSizeShift;
 	mtd->writesize = 1 << lpddr->qinfo->BufSizeShift;

-	shared = kmalloc_array(lpddr->numchips, sizeof(struct flchip_shared),
-						GFP_KERNEL);
+	shared = kmalloc_objs(struct flchip_shared, lpddr->numchips, GFP_KERNEL);
 	if (!shared) {
 		kfree(mtd);
 		return NULL;
diff --git a/drivers/mtd/lpddr/qinfo_probe.c b/drivers/mtd/lpddr/qinfo_probe.c
index 42281e460c62..9339da9f09a1 100644
--- a/drivers/mtd/lpddr/qinfo_probe.c
+++ b/drivers/mtd/lpddr/qinfo_probe.c
@@ -120,7 +120,7 @@ static int lpddr_pfow_present(struct map_info *map, struct lpddr_private *lpddr)
 static int lpddr_chip_setup(struct map_info *map, struct lpddr_private *lpddr)
 {

-	lpddr->qinfo = kzalloc(sizeof(struct qinfo_chip), GFP_KERNEL);
+	lpddr->qinfo = kzalloc_obj(struct qinfo_chip, GFP_KERNEL);
 	if (!lpddr->qinfo)
 		return 0;

@@ -167,8 +167,7 @@ static struct lpddr_private *lpddr_probe_chip(struct map_info *map)
 	lpddr.numchips = 1;

 	numvirtchips = lpddr.numchips * lpddr.qinfo->HWPartsNum;
-	retlpddr = kzalloc(struct_size(retlpddr, chips, numvirtchips),
-			   GFP_KERNEL);
+	retlpddr = kzalloc_flex(*retlpddr, chips, numvirtchips, GFP_KERNEL);
 	if (!retlpddr)
 		return NULL;

diff --git a/drivers/mtd/maps/amd76xrom.c b/drivers/mtd/maps/amd76xrom.c
index 281fcbaa74e7..1825f8e2898f 100644
--- a/drivers/mtd/maps/amd76xrom.c
+++ b/drivers/mtd/maps/amd76xrom.c
@@ -188,7 +188,7 @@ static int amd76xrom_init_one(struct pci_dev *pdev,
 		int i;

 		if (!map) {
-			map = kmalloc(sizeof(*map), GFP_KERNEL);
+			map = kmalloc_obj(*map, GFP_KERNEL);
 			if (!map)
 				goto out;
 		}
diff --git a/drivers/mtd/maps/ck804xrom.c b/drivers/mtd/maps/ck804xrom.c
index c0216bc740cc..0ac4b26b1dd7 100644
--- a/drivers/mtd/maps/ck804xrom.c
+++ b/drivers/mtd/maps/ck804xrom.c
@@ -218,7 +218,7 @@ static int __init ck804xrom_init_one(struct pci_dev *pdev,
 		int i;

 		if (!map) {
-			map = kmalloc(sizeof(*map), GFP_KERNEL);
+			map = kmalloc_obj(*map, GFP_KERNEL);
 			if (!map)
 				goto out;
 		}
diff --git a/drivers/mtd/maps/esb2rom.c b/drivers/mtd/maps/esb2rom.c
index 15d5b76ff504..14d050a5629f 100644
--- a/drivers/mtd/maps/esb2rom.c
+++ b/drivers/mtd/maps/esb2rom.c
@@ -278,7 +278,7 @@ static int __init esb2rom_init_one(struct pci_dev *pdev,
 		int i;

 		if (!map) {
-			map = kmalloc(sizeof(*map), GFP_KERNEL);
+			map = kmalloc_obj(*map, GFP_KERNEL);
 			if (!map)
 				goto out;
 		}
diff --git a/drivers/mtd/maps/ichxrom.c b/drivers/mtd/maps/ichxrom.c
index c8b2793691db..b940beb70b65 100644
--- a/drivers/mtd/maps/ichxrom.c
+++ b/drivers/mtd/maps/ichxrom.c
@@ -212,7 +212,7 @@ static int __init ichxrom_init_one(struct pci_dev *pdev,
 		int i;

 		if (!map) {
-			map = kmalloc(sizeof(*map), GFP_KERNEL);
+			map = kmalloc_obj(*map, GFP_KERNEL);
 			if (!map)
 				goto out;
 		}
diff --git a/drivers/mtd/maps/pci.c b/drivers/mtd/maps/pci.c
index ca00d211e73e..b70b8edceb1b 100644
--- a/drivers/mtd/maps/pci.c
+++ b/drivers/mtd/maps/pci.c
@@ -264,7 +264,7 @@ static int mtd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	if (err)
 		goto out;

-	map = kmalloc(sizeof(*map), GFP_KERNEL);
+	map = kmalloc_obj(*map, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!map)
 		goto release;
diff --git a/drivers/mtd/maps/pcmciamtd.c b/drivers/mtd/maps/pcmciamtd.c
index 206a3c463e6e..8b7192ff6f04 100644
--- a/drivers/mtd/maps/pcmciamtd.c
+++ b/drivers/mtd/maps/pcmciamtd.c
@@ -674,7 +674,7 @@ static int pcmciamtd_probe(struct pcmcia_device *link)
 	struct pcmciamtd_dev *dev;

 	/* Create new memory card device */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) return -ENOMEM;
 	pr_debug("dev=0x%p\n", dev);

diff --git a/drivers/mtd/maps/pismo.c b/drivers/mtd/maps/pismo.c
index ecf68922da73..30b95fd3352d 100644
--- a/drivers/mtd/maps/pismo.c
+++ b/drivers/mtd/maps/pismo.c
@@ -218,7 +218,7 @@ static int pismo_probe(struct i2c_client *client)
 		return -EIO;
 	}

-	pismo = kzalloc(sizeof(*pismo), GFP_KERNEL);
+	pismo = kzalloc_obj(*pismo, GFP_KERNEL);
 	if (!pismo)
 		return -ENOMEM;

diff --git a/drivers/mtd/maps/plat-ram.c b/drivers/mtd/maps/plat-ram.c
index 1c541eaf477a..d0f9b81ad7c5 100644
--- a/drivers/mtd/maps/plat-ram.c
+++ b/drivers/mtd/maps/plat-ram.c
@@ -109,7 +109,7 @@ static int platram_probe(struct platform_device *pdev)

 	pdata = dev_get_platdata(&pdev->dev);

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (info == NULL) {
 		err = -ENOMEM;
 		goto exit_error;
diff --git a/drivers/mtd/maps/pxa2xx-flash.c b/drivers/mtd/maps/pxa2xx-flash.c
index f27c25db6778..5ad7ae7a311c 100644
--- a/drivers/mtd/maps/pxa2xx-flash.c
+++ b/drivers/mtd/maps/pxa2xx-flash.c
@@ -51,7 +51,7 @@ static int pxa2xx_flash_probe(struct platform_device *pdev)
 	if (!res)
 		return -ENODEV;

-	info = kzalloc(sizeof(struct pxa2xx_flash_info), GFP_KERNEL);
+	info = kzalloc_obj(struct pxa2xx_flash_info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c
index 6a54a84d0d9c..ed69df084352 100644
--- a/drivers/mtd/maps/sa1100-flash.c
+++ b/drivers/mtd/maps/sa1100-flash.c
@@ -170,7 +170,7 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
 	/*
 	 * Allocate the map_info structs in one go.
 	 */
-	info = kzalloc(struct_size(info, subdev, nr), GFP_KERNEL);
+	info = kzalloc_flex(*info, subdev, nr, GFP_KERNEL);
 	if (!info) {
 		ret = -ENOMEM;
 		goto out;
@@ -222,7 +222,7 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
 	} else if (info->num_subdev > 1) {
 		struct mtd_info **cdev;

-		cdev = kmalloc_array(nr, sizeof(*cdev), GFP_KERNEL);
+		cdev = kmalloc_objs(*cdev, nr, GFP_KERNEL);
 		if (!cdev) {
 			ret = -ENOMEM;
 			goto err;
diff --git a/drivers/mtd/maps/sun_uflash.c b/drivers/mtd/maps/sun_uflash.c
index ea3aa026b55b..aebbf2931f1c 100644
--- a/drivers/mtd/maps/sun_uflash.c
+++ b/drivers/mtd/maps/sun_uflash.c
@@ -61,7 +61,7 @@ static int uflash_devinit(struct platform_device *op, struct device_node *dp)
 		return -ENODEV;
 	}

-	up = kzalloc(sizeof(struct uflash_dev), GFP_KERNEL);
+	up = kzalloc_obj(struct uflash_dev, GFP_KERNEL);
 	if (!up)
 		return -ENOMEM;

diff --git a/drivers/mtd/maps/vmu-flash.c b/drivers/mtd/maps/vmu-flash.c
index 53019d313db7..bd4ebcde51db 100644
--- a/drivers/mtd/maps/vmu-flash.c
+++ b/drivers/mtd/maps/vmu-flash.c
@@ -73,7 +73,7 @@ static struct vmu_block *ofs_to_block(unsigned long src_ofs,
 	if (num > card->parts[partition].numblocks)
 		goto failed;

-	vblock = kmalloc(sizeof(struct vmu_block), GFP_KERNEL);
+	vblock = kmalloc_obj(struct vmu_block, GFP_KERNEL);
 	if (!vblock)
 		goto failed;

@@ -539,7 +539,7 @@ static void vmu_queryblocks(struct mapleq *mq)
 	mtd_cur->_sync = vmu_flash_sync;
 	mtd_cur->writesize = card->blocklen;

-	mpart = kmalloc(sizeof(struct mdev_part), GFP_KERNEL);
+	mpart = kmalloc_obj(struct mdev_part, GFP_KERNEL);
 	if (!mpart)
 		goto fail_mpart;

@@ -548,7 +548,7 @@ static void vmu_queryblocks(struct mapleq *mq)
 	mtd_cur->priv = mpart;
 	mtd_cur->owner = THIS_MODULE;

-	pcache = kzalloc(sizeof(struct vmu_cache), GFP_KERNEL);
+	pcache = kzalloc_obj(struct vmu_cache, GFP_KERNEL);
 	if (!pcache)
 		goto fail_cache_create;
 	part_cur->pcache = pcache;
@@ -609,7 +609,7 @@ static int vmu_connect(struct maple_device *mdev)

 	basic_flash_data = be32_to_cpu(mdev->devinfo.function_data[c - 1]);

-	card = kmalloc(sizeof(struct memcard), GFP_KERNEL);
+	card = kmalloc_obj(struct memcard, GFP_KERNEL);
 	if (!card) {
 		error = -ENOMEM;
 		goto fail_nomem;
@@ -627,15 +627,13 @@ static int vmu_connect(struct maple_device *mdev)
 	* Not sure there are actually any multi-partition devices in the
 	* real world, but the hardware supports them, so, so will we
 	*/
-	card->parts = kmalloc_array(card->partitions, sizeof(struct vmupart),
-				    GFP_KERNEL);
+	card->parts = kmalloc_objs(struct vmupart, card->partitions, GFP_KERNEL);
 	if (!card->parts) {
 		error = -ENOMEM;
 		goto fail_partitions;
 	}

-	card->mtd = kmalloc_array(card->partitions, sizeof(struct mtd_info),
-				  GFP_KERNEL);
+	card->mtd = kmalloc_objs(struct mtd_info, card->partitions, GFP_KERNEL);
 	if (!card->mtd) {
 		error = -ENOMEM;
 		goto fail_mtd_info;
diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
index 28e09d080440..470a838cbab7 100644
--- a/drivers/mtd/mtd_blkdevs.c
+++ b/drivers/mtd/mtd_blkdevs.c
@@ -324,7 +324,7 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
 		new->readonly = 1;

 	ret = -ENOMEM;
-	new->tag_set = kzalloc(sizeof(*new->tag_set), GFP_KERNEL);
+	new->tag_set = kzalloc_obj(*new->tag_set, GFP_KERNEL);
 	if (!new->tag_set)
 		goto out_list_del;

diff --git a/drivers/mtd/mtdblock.c b/drivers/mtd/mtdblock.c
index 9751416c2a91..80614f218228 100644
--- a/drivers/mtd/mtdblock.c
+++ b/drivers/mtd/mtdblock.c
@@ -316,7 +316,7 @@ static int mtdblock_flush(struct mtd_blktrans_dev *dev)

 static void mtdblock_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
 {
-	struct mtdblk_dev *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	struct mtdblk_dev *dev = kzalloc_obj(*dev, GFP_KERNEL);

 	if (!dev)
 		return;
diff --git a/drivers/mtd/mtdblock_ro.c b/drivers/mtd/mtdblock_ro.c
index ef6299af60e4..e82f27eec5ae 100644
--- a/drivers/mtd/mtdblock_ro.c
+++ b/drivers/mtd/mtdblock_ro.c
@@ -36,7 +36,7 @@ static int mtdblock_writesect(struct mtd_blktrans_dev *dev,

 static void mtdblock_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
 {
-	struct mtd_blktrans_dev *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	struct mtd_blktrans_dev *dev = kzalloc_obj(*dev, GFP_KERNEL);

 	if (!dev)
 		return;
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index 335c702633ff..35b31fea77f3 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -72,7 +72,7 @@ static int mtdchar_open(struct inode *inode, struct file *file)
 		goto out1;
 	}

-	mfi = kzalloc(sizeof(*mfi), GFP_KERNEL);
+	mfi = kzalloc_obj(*mfi, GFP_KERNEL);
 	if (!mfi) {
 		ret = -ENOMEM;
 		goto out1;
@@ -923,7 +923,7 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
 	{
 		struct erase_info *erase;

-		erase=kzalloc(sizeof(struct erase_info),GFP_KERNEL);
+		erase=kzalloc_obj(struct erase_info, GFP_KERNEL);
 		if (!erase)
 			ret = -ENOMEM;
 		else {
@@ -1162,7 +1162,7 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
 		if (!master->ooblayout)
 			return -EOPNOTSUPP;

-		usrlay = kmalloc(sizeof(*usrlay), GFP_KERNEL);
+		usrlay = kmalloc_obj(*usrlay, GFP_KERNEL);
 		if (!usrlay)
 			return -ENOMEM;

diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c
index f56f44aa8625..c4145ba218df 100644
--- a/drivers/mtd/mtdconcat.c
+++ b/drivers/mtd/mtdconcat.c
@@ -416,7 +416,7 @@ static int concat_erase(struct mtd_info *mtd, struct erase_info *instr)
 	}

 	/* make a local copy of instr to avoid modifying the caller's struct */
-	erase = kmalloc(sizeof (struct erase_info), GFP_KERNEL);
+	erase = kmalloc_obj(struct erase_info, GFP_KERNEL);

 	if (!erase)
 		return -ENOMEM;
@@ -823,9 +823,8 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[],	/* subdevices to c
 		concat->mtd.erasesize = max_erasesize;
 		concat->mtd.numeraseregions = num_erase_region;
 		concat->mtd.eraseregions = erase_region_p =
-		    kmalloc_array(num_erase_region,
-				  sizeof(struct mtd_erase_region_info),
-				  GFP_KERNEL);
+		    kmalloc_objs(struct mtd_erase_region_info, num_erase_region,
+				 GFP_KERNEL);
 		if (!erase_region_p) {
 			kfree(concat);
 			printk
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
index 2876501a7814..2c0be153a96e 100644
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -53,7 +53,7 @@ static struct mtd_info *allocate_partition(struct mtd_info *parent,
 	u64 tmp;

 	/* allocate the partition structure */
-	child = kzalloc(sizeof(*child), GFP_KERNEL);
+	child = kzalloc_obj(*child, GFP_KERNEL);
 	name = kstrdup(part->name, GFP_KERNEL);
 	if (!name || !child) {
 		printk(KERN_ERR"memory allocation error while creating partitions for \"%s\"\n",
diff --git a/drivers/mtd/mtdswap.c b/drivers/mtd/mtdswap.c
index d8f2e5be2d31..a2d072da1bbe 100644
--- a/drivers/mtd/mtdswap.c
+++ b/drivers/mtd/mtdswap.c
@@ -1413,11 +1413,11 @@ static void mtdswap_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
 		"%u spare, %u bad blocks\n",
 		MTDSWAP_PREFIX, part, swap_size / 1024, spare_cnt, bad_blocks);

-	d = kzalloc(sizeof(struct mtdswap_dev), GFP_KERNEL);
+	d = kzalloc_obj(struct mtdswap_dev, GFP_KERNEL);
 	if (!d)
 		return;

-	mbd_dev = kzalloc(sizeof(struct mtd_blktrans_dev), GFP_KERNEL);
+	mbd_dev = kzalloc_obj(struct mtd_blktrans_dev, GFP_KERNEL);
 	if (!mbd_dev) {
 		kfree(d);
 		return;
diff --git a/drivers/mtd/nand/ecc-sw-bch.c b/drivers/mtd/nand/ecc-sw-bch.c
index 0d9310dd6f52..8ed20f176521 100644
--- a/drivers/mtd/nand/ecc-sw-bch.c
+++ b/drivers/mtd/nand/ecc-sw-bch.c
@@ -227,7 +227,7 @@ int nand_ecc_sw_bch_init_ctx(struct nand_device *nand)
 		return -EINVAL;
 	}

-	engine_conf = kzalloc(sizeof(*engine_conf), GFP_KERNEL);
+	engine_conf = kzalloc_obj(*engine_conf, GFP_KERNEL);
 	if (!engine_conf)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/ecc-sw-hamming.c b/drivers/mtd/nand/ecc-sw-hamming.c
index bc62a71f9fdd..65fe971a409d 100644
--- a/drivers/mtd/nand/ecc-sw-hamming.c
+++ b/drivers/mtd/nand/ecc-sw-hamming.c
@@ -496,7 +496,7 @@ int nand_ecc_sw_hamming_init_ctx(struct nand_device *nand)
 	if (conf->step_size != 256 && conf->step_size != 512)
 		conf->step_size = 256;

-	engine_conf = kzalloc(sizeof(*engine_conf), GFP_KERNEL);
+	engine_conf = kzalloc_obj(*engine_conf, GFP_KERNEL);
 	if (!engine_conf)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/onenand/generic.c b/drivers/mtd/nand/onenand/generic.c
index 4e6fd1c34484..69ca617985c8 100644
--- a/drivers/mtd/nand/onenand/generic.c
+++ b/drivers/mtd/nand/onenand/generic.c
@@ -37,7 +37,7 @@ static int generic_onenand_probe(struct platform_device *pdev)
 	unsigned long size = resource_size(res);
 	int err;

-	info = kzalloc(sizeof(struct onenand_info), GFP_KERNEL);
+	info = kzalloc_obj(struct onenand_info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/onenand/onenand_base.c b/drivers/mtd/nand/onenand/onenand_base.c
index 0dc2ea4fc857..e69f46ff2b11 100644
--- a/drivers/mtd/nand/onenand/onenand_base.c
+++ b/drivers/mtd/nand/onenand/onenand_base.c
@@ -3728,9 +3728,8 @@ static int onenand_probe(struct mtd_info *mtd)
 		/* Maximum possible erase regions */
 		mtd->numeraseregions = this->dies << 1;
 		mtd->eraseregions =
-			kcalloc(this->dies << 1,
-				sizeof(struct mtd_erase_region_info),
-				GFP_KERNEL);
+			kzalloc_objs(struct mtd_erase_region_info,
+				     this->dies << 1, GFP_KERNEL);
 		if (!mtd->eraseregions)
 			return -ENOMEM;
 	}
diff --git a/drivers/mtd/nand/onenand/onenand_bbt.c b/drivers/mtd/nand/onenand/onenand_bbt.c
index d7fe35bc45cb..380e5051595f 100644
--- a/drivers/mtd/nand/onenand/onenand_bbt.c
+++ b/drivers/mtd/nand/onenand/onenand_bbt.c
@@ -231,7 +231,7 @@ int onenand_default_bbt(struct mtd_info *mtd)
 	struct onenand_chip *this = mtd->priv;
 	struct bbm_info *bbm;

-	this->bbm = kzalloc(sizeof(struct bbm_info), GFP_KERNEL);
+	this->bbm = kzalloc_obj(struct bbm_info, GFP_KERNEL);
 	if (!this->bbm)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/qpic_common.c b/drivers/mtd/nand/qpic_common.c
index db6c46a6fe01..0acd6c65f326 100644
--- a/drivers/mtd/nand/qpic_common.c
+++ b/drivers/mtd/nand/qpic_common.c
@@ -156,7 +156,7 @@ int qcom_prepare_bam_async_desc(struct qcom_nand_controller *nandc,
 	enum dma_transfer_direction dir_eng;
 	struct dma_async_tx_descriptor *dma_desc;

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return -ENOMEM;

@@ -364,7 +364,7 @@ int qcom_prep_adm_dma_desc(struct qcom_nand_controller *nandc, bool read,
 	struct scatterlist *sgl;
 	int ret;

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/raw/au1550nd.c b/drivers/mtd/nand/raw/au1550nd.c
index 04d64724c400..6b09eb643ed2 100644
--- a/drivers/mtd/nand/raw/au1550nd.c
+++ b/drivers/mtd/nand/raw/au1550nd.c
@@ -266,7 +266,7 @@ static int au1550nd_probe(struct platform_device *pdev)
 		return -ENODEV;
 	}

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c
index 66385c4fb994..b05a41ce2e35 100644
--- a/drivers/mtd/nand/raw/cafe_nand.c
+++ b/drivers/mtd/nand/raw/cafe_nand.c
@@ -678,7 +678,7 @@ static int cafe_nand_probe(struct pci_dev *pdev,

 	pci_set_master(pdev);

-	cafe = kzalloc(sizeof(*cafe), GFP_KERNEL);
+	cafe = kzalloc_obj(*cafe, GFP_KERNEL);
 	if (!cafe) {
 		err = -ENOMEM;
 		goto out_disable_device;
diff --git a/drivers/mtd/nand/raw/cs553x_nand.c b/drivers/mtd/nand/raw/cs553x_nand.c
index ec95d787001b..ca2a7e16b5d8 100644
--- a/drivers/mtd/nand/raw/cs553x_nand.c
+++ b/drivers/mtd/nand/raw/cs553x_nand.c
@@ -273,7 +273,7 @@ static int __init cs553x_init_one(int cs, int mmio, unsigned long adr)
 	}

 	/* Allocate memory for MTD device structure and private data */
-	controller = kzalloc(sizeof(*controller), GFP_KERNEL);
+	controller = kzalloc_obj(*controller, GFP_KERNEL);
 	if (!controller) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/mtd/nand/raw/fsl_elbc_nand.c b/drivers/mtd/nand/raw/fsl_elbc_nand.c
index 03dbe37df021..fdca096d74ba 100644
--- a/drivers/mtd/nand/raw/fsl_elbc_nand.c
+++ b/drivers/mtd/nand/raw/fsl_elbc_nand.c
@@ -895,13 +895,13 @@ static int fsl_elbc_nand_probe(struct platform_device *pdev)
 		return -ENODEV;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

 	mutex_lock(&fsl_elbc_nand_mutex);
 	if (!fsl_lbc_ctrl_dev->nand) {
-		elbc_fcm_ctrl = kzalloc(sizeof(*elbc_fcm_ctrl), GFP_KERNEL);
+		elbc_fcm_ctrl = kzalloc_obj(*elbc_fcm_ctrl, GFP_KERNEL);
 		if (!elbc_fcm_ctrl) {
 			mutex_unlock(&fsl_elbc_nand_mutex);
 			ret = -ENOMEM;
diff --git a/drivers/mtd/nand/raw/fsl_ifc_nand.c b/drivers/mtd/nand/raw/fsl_ifc_nand.c
index 7be95d0be248..6eb507f6a204 100644
--- a/drivers/mtd/nand/raw/fsl_ifc_nand.c
+++ b/drivers/mtd/nand/raw/fsl_ifc_nand.c
@@ -1018,7 +1018,7 @@ static int fsl_ifc_nand_probe(struct platform_device *dev)

 	mutex_lock(&fsl_ifc_nand_mutex);
 	if (!fsl_ifc_ctrl_dev->nand) {
-		ifc_nand_ctrl = kzalloc(sizeof(*ifc_nand_ctrl), GFP_KERNEL);
+		ifc_nand_ctrl = kzalloc_obj(*ifc_nand_ctrl, GFP_KERNEL);
 		if (!ifc_nand_ctrl) {
 			mutex_unlock(&fsl_ifc_nand_mutex);
 			return -ENOMEM;
diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
index f2322de93ab4..29f603fb2d8f 100644
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -1062,7 +1062,7 @@ static int nand_choose_interface_config(struct nand_chip *chip)
 	if (!nand_controller_can_setup_interface(chip))
 		return 0;

-	iface = kzalloc(sizeof(*iface), GFP_KERNEL);
+	iface = kzalloc_obj(*iface, GFP_KERNEL);
 	if (!iface)
 		return -ENOMEM;

@@ -5429,8 +5429,8 @@ static int of_get_nand_secure_regions(struct nand_chip *chip)
 		return nr_elem;

 	chip->nr_secure_regions = nr_elem / 2;
-	chip->secure_regions = kcalloc(chip->nr_secure_regions, sizeof(*chip->secure_regions),
-				       GFP_KERNEL);
+	chip->secure_regions = kzalloc_objs(*chip->secure_regions,
+					    chip->nr_secure_regions, GFP_KERNEL);
 	if (!chip->secure_regions)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/raw/nand_bbt.c b/drivers/mtd/nand/raw/nand_bbt.c
index 3050ab7e6eb6..5e500bf2a3c2 100644
--- a/drivers/mtd/nand/raw/nand_bbt.c
+++ b/drivers/mtd/nand/raw/nand_bbt.c
@@ -1375,7 +1375,7 @@ static int nand_create_badblock_pattern(struct nand_chip *this)
 		pr_warn("Bad block pattern already allocated; not replacing\n");
 		return -EINVAL;
 	}
-	bd = kzalloc(sizeof(*bd), GFP_KERNEL);
+	bd = kzalloc_obj(*bd, GFP_KERNEL);
 	if (!bd)
 		return -ENOMEM;
 	bd->options = this->bbt_options & BADBLOCK_SCAN_MASK;
diff --git a/drivers/mtd/nand/raw/nand_hynix.c b/drivers/mtd/nand/raw/nand_hynix.c
index b663659b2f49..12f4e5d1038e 100644
--- a/drivers/mtd/nand/raw/nand_hynix.c
+++ b/drivers/mtd/nand/raw/nand_hynix.c
@@ -705,7 +705,7 @@ static int hynix_nand_init(struct nand_chip *chip)
 	else
 		chip->options |= NAND_BBM_FIRSTPAGE | NAND_BBM_SECONDPAGE;

-	hynix = kzalloc(sizeof(*hynix), GFP_KERNEL);
+	hynix = kzalloc_obj(*hynix, GFP_KERNEL);
 	if (!hynix)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/raw/nand_jedec.c b/drivers/mtd/nand/raw/nand_jedec.c
index 89e6dd8ed1a8..8b2725863fbf 100644
--- a/drivers/mtd/nand/raw/nand_jedec.c
+++ b/drivers/mtd/nand/raw/nand_jedec.c
@@ -42,7 +42,7 @@ int nand_jedec_detect(struct nand_chip *chip)
 		return 0;

 	/* JEDEC chip: allocate a buffer to hold its parameter page */
-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/raw/nand_micron.c b/drivers/mtd/nand/raw/nand_micron.c
index c0192881906b..b97a2bd606ae 100644
--- a/drivers/mtd/nand/raw/nand_micron.c
+++ b/drivers/mtd/nand/raw/nand_micron.c
@@ -484,7 +484,7 @@ static int micron_nand_init(struct nand_chip *chip)
 	int ondie;
 	int ret;

-	micron = kzalloc(sizeof(*micron), GFP_KERNEL);
+	micron = kzalloc_obj(*micron, GFP_KERNEL);
 	if (!micron)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/raw/nand_onfi.c b/drivers/mtd/nand/raw/nand_onfi.c
index 11954440e4de..c4e7304372f1 100644
--- a/drivers/mtd/nand/raw/nand_onfi.c
+++ b/drivers/mtd/nand/raw/nand_onfi.c
@@ -306,7 +306,7 @@ int nand_onfi_detect(struct nand_chip *chip)
 	if (le16_to_cpu(p->opt_cmd) & ONFI_OPT_CMD_READ_CACHE)
 		chip->parameters.supports_read_cache = true;

-	onfi = kzalloc(sizeof(*onfi), GFP_KERNEL);
+	onfi = kzalloc_obj(*onfi, GFP_KERNEL);
 	if (!onfi) {
 		ret = -ENOMEM;
 		goto free_model;
diff --git a/drivers/mtd/nand/raw/nandsim.c b/drivers/mtd/nand/raw/nandsim.c
index 84942e7e528f..4e7ea6c11a15 100644
--- a/drivers/mtd/nand/raw/nandsim.c
+++ b/drivers/mtd/nand/raw/nandsim.c
@@ -851,7 +851,7 @@ static int ns_parse_weakblocks(void)
 		}
 		if (*w == ',')
 			w += 1;
-		wb = kzalloc(sizeof(*wb), GFP_KERNEL);
+		wb = kzalloc_obj(*wb, GFP_KERNEL);
 		if (!wb) {
 			NS_ERR("unable to allocate memory.\n");
 			return -ENOMEM;
@@ -902,7 +902,7 @@ static int ns_parse_weakpages(void)
 		}
 		if (*w == ',')
 			w += 1;
-		wp = kzalloc(sizeof(*wp), GFP_KERNEL);
+		wp = kzalloc_obj(*wp, GFP_KERNEL);
 		if (!wp) {
 			NS_ERR("unable to allocate memory.\n");
 			return -ENOMEM;
@@ -953,7 +953,7 @@ static int ns_parse_gravepages(void)
 		}
 		if (*g == ',')
 			g += 1;
-		gp = kzalloc(sizeof(*gp), GFP_KERNEL);
+		gp = kzalloc_obj(*gp, GFP_KERNEL);
 		if (!gp) {
 			NS_ERR("unable to allocate memory.\n");
 			return -ENOMEM;
@@ -2268,7 +2268,7 @@ static int __init ns_init_module(void)
 		return -EINVAL;
 	}

-	ns = kzalloc(sizeof(struct nandsim), GFP_KERNEL);
+	ns = kzalloc_obj(struct nandsim, GFP_KERNEL);
 	if (!ns) {
 		NS_ERR("unable to allocate core structures.\n");
 		return -ENOMEM;
diff --git a/drivers/mtd/nand/raw/pasemi_nand.c b/drivers/mtd/nand/raw/pasemi_nand.c
index 0b1f7670660e..05d3e58c50dc 100644
--- a/drivers/mtd/nand/raw/pasemi_nand.c
+++ b/drivers/mtd/nand/raw/pasemi_nand.c
@@ -113,7 +113,7 @@ static int pasemi_nand_probe(struct platform_device *ofdev)
 	dev_dbg(dev, "pasemi_nand at %pR\n", &res);

 	/* Allocate memory for MTD device structure and private data */
-	ddata = kzalloc(sizeof(*ddata), GFP_KERNEL);
+	ddata = kzalloc_obj(*ddata, GFP_KERNEL);
 	if (!ddata) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/mtd/nand/raw/r852.c b/drivers/mtd/nand/raw/r852.c
index 918974d088cf..24e702919b87 100644
--- a/drivers/mtd/nand/raw/r852.c
+++ b/drivers/mtd/nand/raw/r852.c
@@ -867,7 +867,7 @@ static int  r852_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
 	error = -ENOMEM;

 	/* init nand chip, but register it only on card insert */
-	chip = kzalloc(sizeof(struct nand_chip), GFP_KERNEL);
+	chip = kzalloc_obj(struct nand_chip, GFP_KERNEL);

 	if (!chip)
 		goto error4;
@@ -883,7 +883,7 @@ static int  r852_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
 	chip->legacy.write_buf = r852_write_buf;

 	/* init our device structure */
-	dev = kzalloc(sizeof(struct r852_device), GFP_KERNEL);
+	dev = kzalloc_obj(struct r852_device, GFP_KERNEL);

 	if (!dev)
 		goto error5;
diff --git a/drivers/mtd/nand/raw/sharpsl.c b/drivers/mtd/nand/raw/sharpsl.c
index 142e93b200a3..d74097783036 100644
--- a/drivers/mtd/nand/raw/sharpsl.c
+++ b/drivers/mtd/nand/raw/sharpsl.c
@@ -132,7 +132,7 @@ static int sharpsl_nand_probe(struct platform_device *pdev)
 	}

 	/* Allocate memory for MTD device structure and private data */
-	sharpsl = kzalloc(sizeof(struct sharpsl_nand), GFP_KERNEL);
+	sharpsl = kzalloc_obj(struct sharpsl_nand, GFP_KERNEL);
 	if (!sharpsl)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/raw/txx9ndfmc.c b/drivers/mtd/nand/raw/txx9ndfmc.c
index 907fb5de4269..e49c38abef68 100644
--- a/drivers/mtd/nand/raw/txx9ndfmc.c
+++ b/drivers/mtd/nand/raw/txx9ndfmc.c
@@ -319,8 +319,7 @@ static int txx9ndfmc_probe(struct platform_device *dev)

 		if (!(plat->ch_mask & (1 << i)))
 			continue;
-		txx9_priv = kzalloc(sizeof(struct txx9ndfmc_priv),
-				    GFP_KERNEL);
+		txx9_priv = kzalloc_obj(struct txx9ndfmc_priv, GFP_KERNEL);
 		if (!txx9_priv)
 			continue;
 		chip = &txx9_priv->chip;
diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index 29fb2ac19569..86dee7d13a38 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -350,7 +350,7 @@ static int spinand_ondie_ecc_init_ctx(struct nand_device *nand)
 	nand->ecc.ctx.conf.step_size = nand->ecc.requirements.step_size;
 	nand->ecc.ctx.conf.strength = nand->ecc.requirements.strength;

-	engine_conf = kzalloc(sizeof(*engine_conf), GFP_KERNEL);
+	engine_conf = kzalloc_obj(*engine_conf, GFP_KERNEL);
 	if (!engine_conf)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/spi/gigadevice.c b/drivers/mtd/nand/spi/gigadevice.c
index e4380208edd0..137571093ec0 100644
--- a/drivers/mtd/nand/spi/gigadevice.c
+++ b/drivers/mtd/nand/spi/gigadevice.c
@@ -642,7 +642,7 @@ static int gd5fxgm9_spinand_init(struct spinand_device *spinand)
 {
 	struct gigadevice_priv *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c
index 84be5e0402b5..2e6b9be9c58b 100644
--- a/drivers/mtd/nand/spi/macronix.c
+++ b/drivers/mtd/nand/spi/macronix.c
@@ -499,7 +499,7 @@ static int macronix_spinand_init(struct spinand_device *spinand)
 {
 	struct macronix_priv *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/mtd/nftlcore.c b/drivers/mtd/nftlcore.c
index 868aa3d35d09..9f3c193fb0c4 100644
--- a/drivers/mtd/nftlcore.c
+++ b/drivers/mtd/nftlcore.c
@@ -45,7 +45,7 @@ static void nftl_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)

 	pr_debug("NFTL: add_mtd for %s\n", mtd->name);

-	nftl = kzalloc(sizeof(struct NFTLrecord), GFP_KERNEL);
+	nftl = kzalloc_obj(struct NFTLrecord, GFP_KERNEL);

 	if (!nftl)
 		return;
diff --git a/drivers/mtd/parsers/bcm47xxpart.c b/drivers/mtd/parsers/bcm47xxpart.c
index 49c8e7f27f21..b8ba7d2f22e1 100644
--- a/drivers/mtd/parsers/bcm47xxpart.c
+++ b/drivers/mtd/parsers/bcm47xxpart.c
@@ -106,8 +106,8 @@ static int bcm47xxpart_parse(struct mtd_info *master,
 		blocksize = 0x1000;

 	/* Alloc */
-	parts = kcalloc(BCM47XXPART_MAX_PARTS, sizeof(struct mtd_partition),
-			GFP_KERNEL);
+	parts = kzalloc_objs(struct mtd_partition, BCM47XXPART_MAX_PARTS,
+			     GFP_KERNEL);
 	if (!parts)
 		return -ENOMEM;

diff --git a/drivers/mtd/parsers/brcm_u-boot.c b/drivers/mtd/parsers/brcm_u-boot.c
index 984f98923446..168cd629c277 100644
--- a/drivers/mtd/parsers/brcm_u-boot.c
+++ b/drivers/mtd/parsers/brcm_u-boot.c
@@ -37,7 +37,7 @@ static int brcm_u_boot_parse(struct mtd_info *mtd,
 	int err;
 	int i = 0;

-	parts = kcalloc(BRCM_U_BOOT_MAX_PARTS, sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, BRCM_U_BOOT_MAX_PARTS, GFP_KERNEL);
 	if (!parts)
 		return -ENOMEM;

diff --git a/drivers/mtd/parsers/ofpart_core.c b/drivers/mtd/parsers/ofpart_core.c
index 599adb69eba6..02cf6a539e3f 100644
--- a/drivers/mtd/parsers/ofpart_core.c
+++ b/drivers/mtd/parsers/ofpart_core.c
@@ -102,7 +102,7 @@ static int parse_fixed_partitions(struct mtd_info *master,
 		return 0;
 	}

-	parts = kcalloc(nr_parts, sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, nr_parts, GFP_KERNEL);
 	if (!parts) {
 		if (dedicated)
 			of_node_put(ofpart_node);
@@ -249,7 +249,7 @@ static int parse_ofoldpart_partitions(struct mtd_info *master,

 	nr_parts = plen / sizeof(part[0]);

-	parts = kcalloc(nr_parts, sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, nr_parts, GFP_KERNEL);
 	if (!parts)
 		return -ENOMEM;

diff --git a/drivers/mtd/parsers/parser_trx.c b/drivers/mtd/parsers/parser_trx.c
index 4814cf218e17..cfd9ab8caff5 100644
--- a/drivers/mtd/parsers/parser_trx.c
+++ b/drivers/mtd/parsers/parser_trx.c
@@ -65,8 +65,8 @@ static int parser_trx_parse(struct mtd_info *mtd,
 	if (err != 0 && err != -EINVAL)
 		pr_err("failed to parse \"brcm,trx-magic\" DT attribute, using default: %d\n", err);

-	parts = kcalloc(TRX_PARSER_MAX_PARTS, sizeof(struct mtd_partition),
-			GFP_KERNEL);
+	parts = kzalloc_objs(struct mtd_partition, TRX_PARSER_MAX_PARTS,
+			     GFP_KERNEL);
 	if (!parts)
 		return -ENOMEM;

diff --git a/drivers/mtd/parsers/qcomsmempart.c b/drivers/mtd/parsers/qcomsmempart.c
index 4311b89d8df0..dd595387946b 100644
--- a/drivers/mtd/parsers/qcomsmempart.c
+++ b/drivers/mtd/parsers/qcomsmempart.c
@@ -123,7 +123,7 @@ static int parse_qcomsmem_part(struct mtd_info *mtd,
 			numparts++;
 	}

-	parts = kcalloc(numparts, sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, numparts, GFP_KERNEL);
 	if (!parts)
 		return -ENOMEM;

diff --git a/drivers/mtd/parsers/redboot.c b/drivers/mtd/parsers/redboot.c
index 3b55b676ca6b..4f3f5145ea83 100644
--- a/drivers/mtd/parsers/redboot.c
+++ b/drivers/mtd/parsers/redboot.c
@@ -203,7 +203,7 @@ static int parse_redboot_partitions(struct mtd_info *master,
 		if (!redboot_checksum(&buf[i]))
 			break;

-		new_fl = kmalloc(sizeof(struct fis_list), GFP_KERNEL);
+		new_fl = kmalloc_obj(struct fis_list, GFP_KERNEL);
 		namelen += strlen(buf[i].name) + 1;
 		if (!new_fl) {
 			ret = -ENOMEM;
diff --git a/drivers/mtd/parsers/scpart.c b/drivers/mtd/parsers/scpart.c
index 6e5e11c37078..84b89499b200 100644
--- a/drivers/mtd/parsers/scpart.c
+++ b/drivers/mtd/parsers/scpart.c
@@ -80,7 +80,7 @@ static int scpart_scan_partmap(struct mtd_info *master, loff_t partmap_offs,
 	if (cnt > 0) {
 		int bytes = cnt * sizeof(*pdesc);

-		pdesc = kcalloc(cnt, sizeof(*pdesc), GFP_KERNEL);
+		pdesc = kzalloc_objs(*pdesc, cnt, GFP_KERNEL);
 		if (!pdesc) {
 			res = -ENOMEM;
 			goto free;
@@ -171,8 +171,8 @@ static int scpart_parse(struct mtd_info *master,
 		goto free;
 	}

-	parts = kcalloc(of_get_child_count(ofpart_node), sizeof(*parts),
-		GFP_KERNEL);
+	parts = kzalloc_objs(*parts, of_get_child_count(ofpart_node),
+			     GFP_KERNEL);
 	if (!parts) {
 		res = -ENOMEM;
 		goto free;
diff --git a/drivers/mtd/parsers/sharpslpart.c b/drivers/mtd/parsers/sharpslpart.c
index 671a61845bd5..ce1e255b707d 100644
--- a/drivers/mtd/parsers/sharpslpart.c
+++ b/drivers/mtd/parsers/sharpslpart.c
@@ -362,9 +362,8 @@ static int sharpsl_parse_mtd_partitions(struct mtd_info *master,
 		return err;
 	}

-	sharpsl_nand_parts = kcalloc(SHARPSL_NAND_PARTS,
-				     sizeof(*sharpsl_nand_parts),
-				     GFP_KERNEL);
+	sharpsl_nand_parts = kzalloc_objs(*sharpsl_nand_parts,
+					  SHARPSL_NAND_PARTS, GFP_KERNEL);
 	if (!sharpsl_nand_parts)
 		return -ENOMEM;

diff --git a/drivers/mtd/parsers/tplink_safeloader.c b/drivers/mtd/parsers/tplink_safeloader.c
index 4fcaf92d22e4..3a4e9b84277f 100644
--- a/drivers/mtd/parsers/tplink_safeloader.c
+++ b/drivers/mtd/parsers/tplink_safeloader.c
@@ -82,7 +82,7 @@ static int mtd_parser_tplink_safeloader_parse(struct mtd_info *mtd,
 	int idx;
 	int err;

-	parts = kcalloc(TPLINK_SAFELOADER_MAX_PARTS, sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, TPLINK_SAFELOADER_MAX_PARTS, GFP_KERNEL);
 	if (!parts) {
 		err = -ENOMEM;
 		goto err_out;
diff --git a/drivers/mtd/rfd_ftl.c b/drivers/mtd/rfd_ftl.c
index be26cc67a1c4..f7d5591e8858 100644
--- a/drivers/mtd/rfd_ftl.c
+++ b/drivers/mtd/rfd_ftl.c
@@ -185,8 +185,8 @@ static int scan_header(struct partition *part)
 	if (!part->header_cache)
 		goto err;

-	part->blocks = kcalloc(part->total_blocks, sizeof(struct block),
-			GFP_KERNEL);
+	part->blocks = kzalloc_objs(struct block, part->total_blocks,
+				    GFP_KERNEL);
 	if (!part->blocks)
 		goto err;

@@ -270,7 +270,7 @@ static int erase_block(struct partition *part, int block)
 	struct erase_info *erase;
 	int rc;

-	erase = kmalloc(sizeof(struct erase_info), GFP_KERNEL);
+	erase = kmalloc_obj(struct erase_info, GFP_KERNEL);
 	if (!erase)
 		return -ENOMEM;

@@ -752,7 +752,7 @@ static void rfd_ftl_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
 	    mtd->size > UINT_MAX)
 		return;

-	part = kzalloc(sizeof(struct partition), GFP_KERNEL);
+	part = kzalloc_obj(struct partition, GFP_KERNEL);
 	if (!part)
 		return;

diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c
index 5988cba30eb3..5da82a4612b6 100644
--- a/drivers/mtd/sm_ftl.c
+++ b/drivers/mtd/sm_ftl.c
@@ -64,7 +64,7 @@ static struct attribute_group *sm_create_sysfs_attributes(struct sm_ftl *ftl)

 	/* Initialize sysfs attributes */
 	vendor_attribute =
-		kzalloc(sizeof(struct sm_sysfs_attribute), GFP_KERNEL);
+		kzalloc_obj(struct sm_sysfs_attribute, GFP_KERNEL);
 	if (!vendor_attribute)
 		goto error2;

@@ -78,14 +78,14 @@ static struct attribute_group *sm_create_sysfs_attributes(struct sm_ftl *ftl)


 	/* Create array of pointers to the attributes */
-	attributes = kcalloc(NUM_ATTRIBUTES + 1, sizeof(struct attribute *),
-								GFP_KERNEL);
+	attributes = kzalloc_objs(struct attribute *, NUM_ATTRIBUTES + 1,
+				  GFP_KERNEL);
 	if (!attributes)
 		goto error3;
 	attributes[0] = &vendor_attribute->dev_attr.attr;

 	/* Finally create the attribute group */
-	attr_group = kzalloc(sizeof(struct attribute_group), GFP_KERNEL);
+	attr_group = kzalloc_obj(struct attribute_group, GFP_KERNEL);
 	if (!attr_group)
 		goto error4;
 	attr_group->attrs = attributes;
@@ -1134,7 +1134,7 @@ static void sm_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
 	struct sm_ftl *ftl;

 	/* Allocate & initialize our private structure */
-	ftl = kzalloc(sizeof(struct sm_ftl), GFP_KERNEL);
+	ftl = kzalloc_obj(struct sm_ftl, GFP_KERNEL);
 	if (!ftl)
 		goto error1;

@@ -1156,8 +1156,7 @@ static void sm_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
 		goto error2;

 	/* Allocate zone array, it will be initialized on demand */
-	ftl->zones = kcalloc(ftl->zone_count, sizeof(struct ftl_zone),
-								GFP_KERNEL);
+	ftl->zones = kzalloc_objs(struct ftl_zone, ftl->zone_count, GFP_KERNEL);
 	if (!ftl->zones)
 		goto error3;

@@ -1171,7 +1170,7 @@ static void sm_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)


 	/* Allocate upper layer structure and initialize it */
-	trans = kzalloc(sizeof(struct mtd_blktrans_dev), GFP_KERNEL);
+	trans = kzalloc_obj(struct mtd_blktrans_dev, GFP_KERNEL);
 	if (!trans)
 		goto error5;

diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
index d3f8a78efd3b..d48170eceec6 100644
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
@@ -1553,7 +1553,7 @@ spi_nor_init_erase_cmd(const struct spi_nor_erase_region *region,
 {
 	struct spi_nor_erase_command *cmd;

-	cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kmalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c
index a8324c2da0ac..1514f21c8557 100644
--- a/drivers/mtd/spi-nor/sfdp.c
+++ b/drivers/mtd/spi-nor/sfdp.c
@@ -760,7 +760,7 @@ static const u32 *spi_nor_get_map_in_use(struct spi_nor *nor, const u32 *smpt,
 	u8 read_data_mask, map_id;

 	/* Use a kmalloc'ed bounce buffer to guarantee it is DMA-able. */
-	buf = kmalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kmalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/mtd/ssfdc.c b/drivers/mtd/ssfdc.c
index 46c01fa2ec46..b4e9a1c11c54 100644
--- a/drivers/mtd/ssfdc.c
+++ b/drivers/mtd/ssfdc.c
@@ -295,7 +295,7 @@ static void ssfdcr_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
 	if (cis_sector == -1)
 		return;

-	ssfdc = kzalloc(sizeof(*ssfdc), GFP_KERNEL);
+	ssfdc = kzalloc_obj(*ssfdc, GFP_KERNEL);
 	if (!ssfdc)
 		return;

diff --git a/drivers/mtd/tests/stresstest.c b/drivers/mtd/tests/stresstest.c
index 8062098930d6..ec5d7bd93b77 100644
--- a/drivers/mtd/tests/stresstest.c
+++ b/drivers/mtd/tests/stresstest.c
@@ -178,7 +178,7 @@ static int __init mtd_stresstest_init(void)
 	err = -ENOMEM;
 	readbuf = vmalloc(bufsize);
 	writebuf = vmalloc(bufsize);
-	offsets = kmalloc_array(ebcnt, sizeof(int), GFP_KERNEL);
+	offsets = kmalloc_objs(int, ebcnt, GFP_KERNEL);
 	if (!readbuf || !writebuf || !offsets)
 		goto out;
 	for (i = 0; i < ebcnt; i++)
diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
index 884171871d0e..9823e0bd7a51 100644
--- a/drivers/mtd/ubi/attach.c
+++ b/drivers/mtd/ubi/attach.c
@@ -131,7 +131,7 @@ static struct ubi_ainf_volume *find_or_add_av(struct ubi_attach_info *ai,
 		return NULL;

 	/* The volume is absent - add it */
-	av = kzalloc(sizeof(*av), GFP_KERNEL);
+	av = kzalloc_obj(*av, GFP_KERNEL);
 	if (!av)
 		return ERR_PTR(-ENOMEM);

@@ -1451,7 +1451,7 @@ static struct ubi_attach_info *alloc_ai(const char *slab_name)
 {
 	struct ubi_attach_info *ai;

-	ai = kzalloc(sizeof(struct ubi_attach_info), GFP_KERNEL);
+	ai = kzalloc_obj(struct ubi_attach_info, GFP_KERNEL);
 	if (!ai)
 		return ai;

diff --git a/drivers/mtd/ubi/block.c b/drivers/mtd/ubi/block.c
index b53fd147fa65..4428486fb287 100644
--- a/drivers/mtd/ubi/block.c
+++ b/drivers/mtd/ubi/block.c
@@ -368,7 +368,7 @@ int ubiblock_create(struct ubi_volume_info *vi)
 		goto out_unlock;
 	}

-	dev = kzalloc(sizeof(struct ubiblock), GFP_KERNEL);
+	dev = kzalloc_obj(struct ubiblock, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto out_unlock;
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index ef6a22f372f9..d7493b61bee4 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -930,7 +930,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
 		}
 	}

-	ubi = kzalloc(sizeof(struct ubi_device), GFP_KERNEL);
+	ubi = kzalloc_obj(struct ubi_device, GFP_KERNEL);
 	if (!ubi)
 		return -ENOMEM;

diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c
index b700a0efaa93..0b233b6a2d9c 100644
--- a/drivers/mtd/ubi/cdev.c
+++ b/drivers/mtd/ubi/cdev.c
@@ -727,7 +727,7 @@ static int rename_volumes(struct ubi_device *ubi,
 		int name_len = req->ents[i].name_len;
 		const char *name = req->ents[i].name;

-		re = kzalloc(sizeof(struct ubi_rename_entry), GFP_KERNEL);
+		re = kzalloc_obj(struct ubi_rename_entry, GFP_KERNEL);
 		if (!re) {
 			err = -ENOMEM;
 			goto out_free;
@@ -801,7 +801,7 @@ static int rename_volumes(struct ubi_device *ubi,
 			goto out_free;
 		}

-		re1 = kzalloc(sizeof(struct ubi_rename_entry), GFP_KERNEL);
+		re1 = kzalloc_obj(struct ubi_rename_entry, GFP_KERNEL);
 		if (!re1) {
 			err = -ENOMEM;
 			ubi_close_volume(desc);
@@ -1007,7 +1007,7 @@ static long ubi_cdev_ioctl(struct file *file, unsigned int cmd,
 		struct ubi_rnvol_req *req;

 		dbg_gen("re-name volumes");
-		req = kmalloc(sizeof(struct ubi_rnvol_req), GFP_KERNEL);
+		req = kmalloc_obj(struct ubi_rnvol_req, GFP_KERNEL);
 		if (!req) {
 			err = -ENOMEM;
 			break;
diff --git a/drivers/mtd/ubi/eba.c b/drivers/mtd/ubi/eba.c
index c7ba7a15c9f7..dbc448e2b7a6 100644
--- a/drivers/mtd/ubi/eba.c
+++ b/drivers/mtd/ubi/eba.c
@@ -124,12 +124,11 @@ struct ubi_eba_table *ubi_eba_create_table(struct ubi_volume *vol,
 	int err = -ENOMEM;
 	int i;

-	tbl = kzalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kzalloc_obj(*tbl, GFP_KERNEL);
 	if (!tbl)
 		return ERR_PTR(-ENOMEM);

-	tbl->entries = kmalloc_array(nentries, sizeof(*tbl->entries),
-				     GFP_KERNEL);
+	tbl->entries = kmalloc_objs(*tbl->entries, nentries, GFP_KERNEL);
 	if (!tbl->entries)
 		goto err;

@@ -248,7 +247,7 @@ static struct ubi_ltree_entry *ltree_add_entry(struct ubi_device *ubi,
 {
 	struct ubi_ltree_entry *le, *le1, *le_free;

-	le = kmalloc(sizeof(struct ubi_ltree_entry), GFP_NOFS);
+	le = kmalloc_obj(struct ubi_ltree_entry, GFP_NOFS);
 	if (!le)
 		return ERR_PTR(-ENOMEM);

@@ -1536,11 +1535,11 @@ int self_check_eba(struct ubi_device *ubi, struct ubi_attach_info *ai_fastmap,

 	num_volumes = ubi->vtbl_slots + UBI_INT_VOL_COUNT;

-	scan_eba = kmalloc_array(num_volumes, sizeof(*scan_eba), GFP_KERNEL);
+	scan_eba = kmalloc_objs(*scan_eba, num_volumes, GFP_KERNEL);
 	if (!scan_eba)
 		return -ENOMEM;

-	fm_eba = kmalloc_array(num_volumes, sizeof(*fm_eba), GFP_KERNEL);
+	fm_eba = kmalloc_objs(*fm_eba, num_volumes, GFP_KERNEL);
 	if (!fm_eba) {
 		kfree(scan_eba);
 		return -ENOMEM;
@@ -1551,17 +1550,15 @@ int self_check_eba(struct ubi_device *ubi, struct ubi_attach_info *ai_fastmap,
 		if (!vol)
 			continue;

-		scan_eba[i] = kmalloc_array(vol->reserved_pebs,
-					    sizeof(**scan_eba),
-					    GFP_KERNEL);
+		scan_eba[i] = kmalloc_objs(**scan_eba, vol->reserved_pebs,
+					   GFP_KERNEL);
 		if (!scan_eba[i]) {
 			ret = -ENOMEM;
 			goto out_free;
 		}

-		fm_eba[i] = kmalloc_array(vol->reserved_pebs,
-					  sizeof(**fm_eba),
-					  GFP_KERNEL);
+		fm_eba[i] = kmalloc_objs(**fm_eba, vol->reserved_pebs,
+					 GFP_KERNEL);
 		if (!fm_eba[i]) {
 			ret = -ENOMEM;
 			kfree(scan_eba[i]);
diff --git a/drivers/mtd/ubi/fastmap-wl.c b/drivers/mtd/ubi/fastmap-wl.c
index e2bc1122bfd3..a0f750411f9d 100644
--- a/drivers/mtd/ubi/fastmap-wl.c
+++ b/drivers/mtd/ubi/fastmap-wl.c
@@ -466,7 +466,7 @@ int ubi_ensure_anchor_pebs(struct ubi_device *ubi)
 	ubi->wl_scheduled = 1;
 	spin_unlock(&ubi->wl_lock);

-	wrk = kmalloc(sizeof(struct ubi_work), GFP_NOFS);
+	wrk = kmalloc_obj(struct ubi_work, GFP_NOFS);
 	if (!wrk) {
 		spin_lock(&ubi->wl_lock);
 		ubi->wl_scheduled = 0;
diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c
index 9a4940874be5..30953ff2ff52 100644
--- a/drivers/mtd/ubi/fastmap.c
+++ b/drivers/mtd/ubi/fastmap.c
@@ -889,13 +889,13 @@ int ubi_scan_fastmap(struct ubi_device *ubi, struct ubi_attach_info *ai,
 	down_write(&ubi->fm_protect);
 	memset(ubi->fm_buf, 0, ubi->fm_size);

-	fmsb = kmalloc(sizeof(*fmsb), GFP_KERNEL);
+	fmsb = kmalloc_obj(*fmsb, GFP_KERNEL);
 	if (!fmsb) {
 		ret = -ENOMEM;
 		goto out;
 	}

-	fm = kzalloc(sizeof(*fm), GFP_KERNEL);
+	fm = kzalloc_obj(*fm, GFP_KERNEL);
 	if (!fm) {
 		ret = -ENOMEM;
 		kfree(fmsb);
@@ -1416,7 +1416,7 @@ static int invalidate_fastmap(struct ubi_device *ubi)
 	ubi->fm = NULL;

 	ret = -ENOMEM;
-	fm = kzalloc(sizeof(*fm), GFP_NOFS);
+	fm = kzalloc_obj(*fm, GFP_NOFS);
 	if (!fm)
 		goto out;

@@ -1501,7 +1501,7 @@ int ubi_update_fastmap(struct ubi_device *ubi)
 		return 0;
 	}

-	new_fm = kzalloc(sizeof(*new_fm), GFP_NOFS);
+	new_fm = kzalloc_obj(*new_fm, GFP_NOFS);
 	if (!new_fm) {
 		up_write(&ubi->fm_eba_sem);
 		up_write(&ubi->work_sem);
diff --git a/drivers/mtd/ubi/gluebi.c b/drivers/mtd/ubi/gluebi.c
index 1b980d15d9fb..e56b4172264c 100644
--- a/drivers/mtd/ubi/gluebi.c
+++ b/drivers/mtd/ubi/gluebi.c
@@ -281,7 +281,7 @@ static int gluebi_create(struct ubi_device_info *di,
 	struct gluebi_device *gluebi, *g;
 	struct mtd_info *mtd;

-	gluebi = kzalloc(sizeof(struct gluebi_device), GFP_KERNEL);
+	gluebi = kzalloc_obj(struct gluebi_device, GFP_KERNEL);
 	if (!gluebi)
 		return -ENOMEM;

diff --git a/drivers/mtd/ubi/kapi.c b/drivers/mtd/ubi/kapi.c
index df0a5a57b072..7cc239245e42 100644
--- a/drivers/mtd/ubi/kapi.c
+++ b/drivers/mtd/ubi/kapi.c
@@ -140,7 +140,7 @@ struct ubi_volume_desc *ubi_open_volume(int ubi_num, int vol_id, int mode)
 		goto out_put_ubi;
 	}

-	desc = kmalloc(sizeof(struct ubi_volume_desc), GFP_KERNEL);
+	desc = kmalloc_obj(struct ubi_volume_desc, GFP_KERNEL);
 	if (!desc) {
 		err = -ENOMEM;
 		goto out_put_ubi;
diff --git a/drivers/mtd/ubi/nvmem.c b/drivers/mtd/ubi/nvmem.c
index 34f8c1d3cdee..bc2cfb355d5c 100644
--- a/drivers/mtd/ubi/nvmem.c
+++ b/drivers/mtd/ubi/nvmem.c
@@ -75,7 +75,7 @@ static int ubi_nvmem_add(struct ubi_volume_info *vi)
 	    WARN_ON_ONCE(vi->size <= 0))
 		return -EINVAL;

-	unv = kzalloc(sizeof(struct ubi_nvmem), GFP_KERNEL);
+	unv = kzalloc_obj(struct ubi_nvmem, GFP_KERNEL);
 	if (!unv)
 		return -ENOMEM;

diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h
index 44803d3329f4..af466cd83ae0 100644
--- a/drivers/mtd/ubi/ubi.h
+++ b/drivers/mtd/ubi/ubi.h
@@ -1100,7 +1100,7 @@ ubi_alloc_vid_buf(const struct ubi_device *ubi, gfp_t gfp_flags)
 	struct ubi_vid_io_buf *vidb;
 	void *buf;

-	vidb = kzalloc(sizeof(*vidb), gfp_flags);
+	vidb = kzalloc_obj(*vidb, gfp_flags);
 	if (!vidb)
 		return NULL;

diff --git a/drivers/mtd/ubi/vmt.c b/drivers/mtd/ubi/vmt.c
index e5cf3bdca3b0..ffec2c649698 100644
--- a/drivers/mtd/ubi/vmt.c
+++ b/drivers/mtd/ubi/vmt.c
@@ -172,7 +172,7 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req)
 	if (ubi->ro_mode)
 		return -EROFS;

-	vol = kzalloc(sizeof(struct ubi_volume), GFP_KERNEL);
+	vol = kzalloc_obj(struct ubi_volume, GFP_KERNEL);
 	if (!vol)
 		return -ENOMEM;

diff --git a/drivers/mtd/ubi/vtbl.c b/drivers/mtd/ubi/vtbl.c
index 6e5489e233dd..74427a03e896 100644
--- a/drivers/mtd/ubi/vtbl.c
+++ b/drivers/mtd/ubi/vtbl.c
@@ -531,7 +531,7 @@ static int init_volumes(struct ubi_device *ubi,
 		if (be32_to_cpu(vtbl[i].reserved_pebs) == 0)
 			continue; /* Empty record */

-		vol = kzalloc(sizeof(struct ubi_volume), GFP_KERNEL);
+		vol = kzalloc_obj(struct ubi_volume, GFP_KERNEL);
 		if (!vol)
 			return -ENOMEM;

@@ -623,7 +623,7 @@ static int init_volumes(struct ubi_device *ubi,
 	}

 	/* And add the layout volume */
-	vol = kzalloc(sizeof(struct ubi_volume), GFP_KERNEL);
+	vol = kzalloc_obj(struct ubi_volume, GFP_KERNEL);
 	if (!vol)
 		return -ENOMEM;

diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c
index fbd399cf6503..e3705db8e570 100644
--- a/drivers/mtd/ubi/wl.c
+++ b/drivers/mtd/ubi/wl.c
@@ -602,7 +602,7 @@ static int schedule_erase(struct ubi_device *ubi, struct ubi_wl_entry *e,
 	dbg_wl("schedule erasure of PEB %d, EC %d, torture %d",
 	       e->pnum, e->ec, torture);

-	wl_wrk = kmalloc(sizeof(struct ubi_work), GFP_NOFS);
+	wl_wrk = kmalloc_obj(struct ubi_work, GFP_NOFS);
 	if (!wl_wrk)
 		return -ENOMEM;

@@ -1071,7 +1071,7 @@ static int ensure_wear_leveling(struct ubi_device *ubi, int nested)
 	ubi->wl_scheduled = 1;
 	spin_unlock(&ubi->wl_lock);

-	wrk = kmalloc(sizeof(struct ubi_work), GFP_NOFS);
+	wrk = kmalloc_obj(struct ubi_work, GFP_NOFS);
 	if (!wrk) {
 		err = -ENOMEM;
 		goto out_cancel;
diff --git a/drivers/mux/core.c b/drivers/mux/core.c
index a3840fe0995f..236e4f02f38e 100644
--- a/drivers/mux/core.c
+++ b/drivers/mux/core.c
@@ -681,7 +681,7 @@ static struct mux_state *mux_state_get(struct device *dev, const char *mux_name)
 {
 	struct mux_state *mstate;

-	mstate = kzalloc(sizeof(*mstate), GFP_KERNEL);
+	mstate = kzalloc_obj(*mstate, GFP_KERNEL);
 	if (!mstate)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/amt.c b/drivers/net/amt.c
index 902c817a0dea..f2f3139e38a5 100644
--- a/drivers/net/amt.c
+++ b/drivers/net/amt.c
@@ -368,7 +368,7 @@ static struct amt_source_node *amt_alloc_snode(struct amt_group_node *gnode,
 {
 	struct amt_source_node *snode;

-	snode = kzalloc(sizeof(*snode), GFP_ATOMIC);
+	snode = kzalloc_obj(*snode, GFP_ATOMIC);
 	if (!snode)
 		return NULL;

diff --git a/drivers/net/arcnet/com20020_cs.c b/drivers/net/arcnet/com20020_cs.c
index 75f08aa7528b..a6d9207cfc16 100644
--- a/drivers/net/arcnet/com20020_cs.c
+++ b/drivers/net/arcnet/com20020_cs.c
@@ -119,7 +119,7 @@ static int com20020_probe(struct pcmcia_device *p_dev)
 	dev_dbg(&p_dev->dev, "com20020_attach()\n");

 	/* Create new network device */
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		goto fail_alloc_info;

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 55a960da42b5..cddcbb5883c6 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -491,7 +491,7 @@ static int bond_ipsec_add_sa(struct net_device *bond_dev,
 		goto out;
 	}

-	ipsec = kmalloc(sizeof(*ipsec), GFP_KERNEL);
+	ipsec = kmalloc_obj(*ipsec, GFP_KERNEL);
 	if (!ipsec) {
 		err = -ENOMEM;
 		goto out;
@@ -1387,7 +1387,7 @@ static inline int slave_enable_netpoll(struct slave *slave)
 	struct netpoll *np;
 	int err = 0;

-	np = kzalloc(sizeof(*np), GFP_KERNEL);
+	np = kzalloc_obj(*np, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!np)
 		goto out;
@@ -1711,7 +1711,7 @@ static struct slave *bond_alloc_slave(struct bonding *bond,
 {
 	struct slave *slave = NULL;

-	slave = kzalloc(sizeof(*slave), GFP_KERNEL);
+	slave = kzalloc_obj(*slave, GFP_KERNEL);
 	if (!slave)
 		return NULL;

@@ -1723,8 +1723,8 @@ static struct slave *bond_alloc_slave(struct bonding *bond,
 		return NULL;

 	if (BOND_MODE(bond) == BOND_MODE_8023AD) {
-		SLAVE_AD_INFO(slave) = kzalloc(sizeof(struct ad_slave_info),
-					       GFP_KERNEL);
+		SLAVE_AD_INFO(slave) = kzalloc_obj(struct ad_slave_info,
+						   GFP_KERNEL);
 		if (!SLAVE_AD_INFO(slave)) {
 			kobject_put(&slave->kobj);
 			return NULL;
@@ -2982,7 +2982,7 @@ struct bond_vlan_tag *bond_verify_device_path(struct net_device *start_dev,
 	struct list_head  *iter;

 	if (start_dev == end_dev) {
-		tags = kcalloc(level + 1, sizeof(*tags), GFP_ATOMIC);
+		tags = kzalloc_objs(*tags, level + 1, GFP_ATOMIC);
 		if (!tags)
 			return ERR_PTR(-ENOMEM);
 		tags[level].vlan_proto = BOND_VLAN_PROTO_NONE;
@@ -5097,10 +5097,9 @@ int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave)

 	might_sleep();

-	usable_slaves = kzalloc(struct_size(usable_slaves, arr,
-					    bond->slave_cnt), GFP_KERNEL);
-	all_slaves = kzalloc(struct_size(all_slaves, arr,
-					 bond->slave_cnt), GFP_KERNEL);
+	usable_slaves = kzalloc_flex(*usable_slaves, arr, bond->slave_cnt,
+				     GFP_KERNEL);
+	all_slaves = kzalloc_flex(*all_slaves, arr, bond->slave_cnt, GFP_KERNEL);
 	if (!usable_slaves || !all_slaves) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/caif/caif_virtio.c b/drivers/net/caif/caif_virtio.c
index c60386bf2d1a..8ac1a4b8e055 100644
--- a/drivers/net/caif/caif_virtio.c
+++ b/drivers/net/caif/caif_virtio.c
@@ -493,7 +493,7 @@ static struct buf_info *cfv_alloc_and_copy_to_shm(struct cfv_info *cfv,
 		goto err;
 	}

-	buf_info = kmalloc(sizeof(struct buf_info), GFP_ATOMIC);
+	buf_info = kmalloc_obj(struct buf_info, GFP_ATOMIC);
 	if (unlikely(!buf_info))
 		goto err;

diff --git a/drivers/net/can/ctucanfd/ctucanfd_pci.c b/drivers/net/can/ctucanfd/ctucanfd_pci.c
index 9da09e7dd63a..2d731a6f0be0 100644
--- a/drivers/net/can/ctucanfd/ctucanfd_pci.c
+++ b/drivers/net/can/ctucanfd/ctucanfd_pci.c
@@ -153,7 +153,7 @@ static int ctucan_pci_probe(struct pci_dev *pdev,

 	ntxbufs = 4;

-	bdata = kzalloc(sizeof(*bdata), GFP_KERNEL);
+	bdata = kzalloc_obj(*bdata, GFP_KERNEL);
 	if (!bdata) {
 		ret = -ENOMEM;
 		goto err_pci_iounmap_bar0;
diff --git a/drivers/net/can/grcan.c b/drivers/net/can/grcan.c
index 3b1b09943436..56758ddf939b 100644
--- a/drivers/net/can/grcan.c
+++ b/drivers/net/can/grcan.c
@@ -1054,8 +1054,7 @@ static int grcan_open(struct net_device *dev)
 		return err;
 	}

-	priv->echo_skb = kcalloc(dma->tx.size, sizeof(*priv->echo_skb),
-				 GFP_KERNEL);
+	priv->echo_skb = kzalloc_objs(*priv->echo_skb, dma->tx.size, GFP_KERNEL);
 	if (!priv->echo_skb) {
 		err = -ENOMEM;
 		goto exit_free_dma_buffers;
diff --git a/drivers/net/can/sja1000/ems_pci.c b/drivers/net/can/sja1000/ems_pci.c
index 5bca719d61f5..c4716df2e00f 100644
--- a/drivers/net/can/sja1000/ems_pci.c
+++ b/drivers/net/can/sja1000/ems_pci.c
@@ -260,7 +260,7 @@ static int ems_pci_add_card(struct pci_dev *pdev,
 	}

 	/* Allocating card structures to hold addresses, ... */
-	card = kzalloc(sizeof(*card), GFP_KERNEL);
+	card = kzalloc_obj(*card, GFP_KERNEL);
 	if (!card) {
 		pci_disable_device(pdev);
 		return -ENOMEM;
diff --git a/drivers/net/can/sja1000/ems_pcmcia.c b/drivers/net/can/sja1000/ems_pcmcia.c
index 4642b6d4aaf7..fad4c51767ed 100644
--- a/drivers/net/can/sja1000/ems_pcmcia.c
+++ b/drivers/net/can/sja1000/ems_pcmcia.c
@@ -165,7 +165,7 @@ static int ems_pcmcia_add_card(struct pcmcia_device *pdev, unsigned long base)
 	int err, i;

 	/* Allocating card structures to hold addresses, ... */
-	card = kzalloc(sizeof(struct ems_pcmcia_card), GFP_KERNEL);
+	card = kzalloc_obj(struct ems_pcmcia_card, GFP_KERNEL);
 	if (!card)
 		return -ENOMEM;

diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c
index 10d88cbda465..4ab825636092 100644
--- a/drivers/net/can/sja1000/peak_pci.c
+++ b/drivers/net/can/sja1000/peak_pci.c
@@ -452,7 +452,7 @@ static int peak_pciec_probe(struct pci_dev *pdev, struct net_device *dev)
 	/* channel is the first one: do the init part */
 	} else {
 		/* create the bit banging I2C adapter structure */
-		card = kzalloc(sizeof(*card), GFP_KERNEL);
+		card = kzalloc_obj(*card, GFP_KERNEL);
 		if (!card)
 			return -ENOMEM;

diff --git a/drivers/net/can/sja1000/peak_pcmcia.c b/drivers/net/can/sja1000/peak_pcmcia.c
index e1610b527d13..04b37c746620 100644
--- a/drivers/net/can/sja1000/peak_pcmcia.c
+++ b/drivers/net/can/sja1000/peak_pcmcia.c
@@ -650,7 +650,7 @@ static int pcan_probe(struct pcmcia_device *pdev)
 		goto probe_err_1;
 	}

-	card = kzalloc(sizeof(struct pcan_pccard), GFP_KERNEL);
+	card = kzalloc_obj(struct pcan_pccard, GFP_KERNEL);
 	if (!card) {
 		err = -ENOMEM;
 		goto probe_err_2;
diff --git a/drivers/net/can/sja1000/plx_pci.c b/drivers/net/can/sja1000/plx_pci.c
index 67e5316c6372..d1c9427f6a5d 100644
--- a/drivers/net/can/sja1000/plx_pci.c
+++ b/drivers/net/can/sja1000/plx_pci.c
@@ -629,7 +629,7 @@ static int plx_pci_add_card(struct pci_dev *pdev,
 		 ci->name, PCI_SLOT(pdev->devfn));

 	/* Allocate card structures to hold addresses, ... */
-	card = kzalloc(sizeof(*card), GFP_KERNEL);
+	card = kzalloc_obj(*card, GFP_KERNEL);
 	if (!card) {
 		pci_disable_device(pdev);
 		return -ENOMEM;
diff --git a/drivers/net/can/softing/softing_cs.c b/drivers/net/can/softing/softing_cs.c
index e5c939b63fa6..c37390fa7e6a 100644
--- a/drivers/net/can/softing/softing_cs.c
+++ b/drivers/net/can/softing/softing_cs.c
@@ -256,7 +256,7 @@ static int softingcs_probe(struct pcmcia_device *pcmcia)
 	}

 	/* create softing platform device */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		ret = -ENOMEM;
 		goto mem_failed;
diff --git a/drivers/net/can/softing/softing_main.c b/drivers/net/can/softing/softing_main.c
index 79bc64395ac4..4872f636e367 100644
--- a/drivers/net/can/softing/softing_main.c
+++ b/drivers/net/can/softing/softing_main.c
@@ -767,7 +767,7 @@ static int softing_pdev_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}

-	card = kzalloc(sizeof(*card), GFP_KERNEL);
+	card = kzalloc_obj(*card, GFP_KERNEL);
 	if (!card)
 		return -ENOMEM;
 	card->pdat = pdat;
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
index 5134ebb85880..6ef8a3fa2f1e 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
@@ -1961,11 +1961,11 @@ mcp251xfd_register_get_dev_id(const struct mcp251xfd_priv *priv, u32 *dev_id,
 	struct spi_transfer xfer[2] = { };
 	int err;

-	buf_rx = kzalloc(sizeof(*buf_rx), GFP_KERNEL);
+	buf_rx = kzalloc_obj(*buf_rx, GFP_KERNEL);
 	if (!buf_rx)
 		return -ENOMEM;

-	buf_tx = kzalloc(sizeof(*buf_tx), GFP_KERNEL);
+	buf_tx = kzalloc_obj(*buf_tx, GFP_KERNEL);
 	if (!buf_tx) {
 		err = -ENOMEM;
 		goto out_kfree_buf_rx;
diff --git a/drivers/net/can/usb/esd_usb.c b/drivers/net/can/usb/esd_usb.c
index 8cc924c47042..029a321bac10 100644
--- a/drivers/net/can/usb/esd_usb.c
+++ b/drivers/net/can/usb/esd_usb.c
@@ -726,7 +726,7 @@ static int esd_usb_start(struct esd_usb_net_priv *priv)
 	union esd_usb_msg *msg;
 	int err, i;

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg) {
 		err = -ENOMEM;
 		goto out;
@@ -962,7 +962,7 @@ static int esd_usb_stop(struct esd_usb_net_priv *priv)
 	int err;
 	int i;

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -1068,7 +1068,7 @@ static int esd_usb_2_set_bittiming(struct net_device *netdev)
 	if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
 		canbtr |= ESD_USB_TRIPLE_SAMPLES;

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -1130,7 +1130,7 @@ static int esd_usb_3_set_bittiming(struct net_device *netdev)
 	u16 flags = 0;
 	int err;

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -1302,7 +1302,7 @@ static int esd_usb_probe(struct usb_interface *intf,
 	union esd_usb_msg *msg;
 	int i, err;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		err = -ENOMEM;
 		goto done;
@@ -1314,7 +1314,7 @@ static int esd_usb_probe(struct usb_interface *intf,

 	usb_set_intfdata(intf, dev);

-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc_obj(*msg, GFP_KERNEL);
 	if (!msg) {
 		err = -ENOMEM;
 		goto free_msg;
diff --git a/drivers/net/can/usb/f81604.c b/drivers/net/can/usb/f81604.c
index efe61ece79ea..435c7d878138 100644
--- a/drivers/net/can/usb/f81604.c
+++ b/drivers/net/can/usb/f81604.c
@@ -678,7 +678,7 @@ static int f81604_register_urbs(struct f81604_port_priv *priv)
 			break;
 		}

-		frame = kmalloc(sizeof(*frame), GFP_KERNEL);
+		frame = kmalloc_obj(*frame, GFP_KERNEL);
 		if (!frame) {
 			usb_free_urb(rx_urb);
 			ret = -ENOMEM;
@@ -717,7 +717,7 @@ static int f81604_register_urbs(struct f81604_port_priv *priv)
 		goto error;
 	}

-	int_data = kmalloc(sizeof(*int_data), GFP_KERNEL);
+	int_data = kmalloc_obj(*int_data, GFP_KERNEL);
 	if (!int_data) {
 		usb_free_urb(int_urb);
 		ret = -ENOMEM;
@@ -919,7 +919,7 @@ static netdev_tx_t f81604_start_xmit(struct sk_buff *skb,
 	if (!write_urb)
 		goto nomem_urb;

-	frame = kzalloc(sizeof(*frame), GFP_ATOMIC);
+	frame = kzalloc_obj(*frame, GFP_ATOMIC);
 	if (!frame)
 		goto nomem_buf;

diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
index d8b2dd74b3a1..95de036c4410 100644
--- a/drivers/net/can/usb/gs_usb.c
+++ b/drivers/net/can/usb/gs_usb.c
@@ -1560,7 +1560,7 @@ static int gs_usb_probe(struct usb_interface *intf,
 		return -EINVAL;
 	}

-	parent = kzalloc(struct_size(parent, canch, icount), GFP_KERNEL);
+	parent = kzalloc_flex(*parent, canch, icount, GFP_KERNEL);
 	if (!parent)
 		return -ENOMEM;

diff --git a/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c b/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
index a59f20dad692..e765210626ce 100644
--- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
+++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
@@ -580,7 +580,7 @@ static int kvaser_usb_hydra_send_simple_cmd(struct kvaser_usb *dev,
 	size_t cmd_len;
 	int err;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -621,7 +621,7 @@ kvaser_usb_hydra_send_simple_cmd_async(struct kvaser_usb_net_priv *priv,
 	size_t cmd_len;
 	int err;

-	cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
+	cmd = kzalloc_obj(*cmd, GFP_ATOMIC);
 	if (!cmd)
 		return -ENOMEM;

@@ -742,7 +742,7 @@ static int kvaser_usb_hydra_map_channel(struct kvaser_usb *dev, u16 transid,
 	struct kvaser_cmd *cmd;
 	int err;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -784,7 +784,7 @@ static int kvaser_usb_hydra_get_single_capability(struct kvaser_usb *dev,
 	int err;
 	int i;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -1465,7 +1465,7 @@ kvaser_usb_hydra_frame_to_cmd_ext(const struct kvaser_usb_net_priv *priv,
 	u32 kcan_id;
 	u32 kcan_header;

-	cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
+	cmd = kzalloc_obj(*cmd, GFP_ATOMIC);
 	if (!cmd)
 		return NULL;

@@ -1544,7 +1544,7 @@ kvaser_usb_hydra_frame_to_cmd_std(const struct kvaser_usb_net_priv *priv,
 	u32 flags;
 	u32 id;

-	cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
+	cmd = kzalloc_obj(*cmd, GFP_ATOMIC);
 	if (!cmd)
 		return NULL;

@@ -1610,7 +1610,7 @@ static int kvaser_usb_hydra_get_busparams(struct kvaser_usb_net_priv *priv,
 	if (!hydra)
 		return -EINVAL;

-	cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL);
+	cmd = kzalloc_objs(struct kvaser_cmd, 1, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -1655,7 +1655,7 @@ static int kvaser_usb_hydra_set_bittiming(const struct net_device *netdev,
 	size_t cmd_len;
 	int err;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -1685,7 +1685,7 @@ static int kvaser_usb_hydra_set_data_bittiming(const struct net_device *netdev,
 	size_t cmd_len;
 	int err;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -1842,7 +1842,7 @@ static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)
 	u32 fw_version;
 	struct kvaser_usb_dev_card_data *card_data = &dev->card_data;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -1985,7 +1985,7 @@ static int kvaser_usb_hydra_set_led(struct kvaser_usb_net_priv *priv,
 	size_t cmd_len;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -2021,7 +2021,7 @@ static int kvaser_usb_hydra_set_opt_mode(const struct kvaser_usb_net_priv *priv)
 		return -EINVAL;
 	}

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c b/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
index 1167d38344f1..8e32d98ab0a3 100644
--- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
+++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
@@ -616,7 +616,7 @@ kvaser_usb_leaf_frame_to_cmd(const struct kvaser_usb_net_priv *priv,
 	u8 *cmd_tx_can_flags = NULL;		/* GCC */
 	struct can_frame *cf = (struct can_frame *)skb->data;

-	cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC);
+	cmd = kmalloc_obj(*cmd, GFP_ATOMIC);
 	if (cmd) {
 		cmd->u.tx_can.tid = transid & 0xff;
 		cmd->len = *cmd_len = CMD_HEADER_LEN +
@@ -723,7 +723,7 @@ static int kvaser_usb_leaf_send_simple_cmd(const struct kvaser_usb *dev,
 	struct kvaser_cmd *cmd;
 	int rc;

-	cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kmalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -873,7 +873,7 @@ static int kvaser_usb_leaf_get_single_capability(struct kvaser_usb *dev,
 	int err;
 	int i;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -970,7 +970,7 @@ static int kvaser_usb_leaf_set_led(struct kvaser_usb_net_priv *priv,
 	struct kvaser_cmd *cmd;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -1079,7 +1079,7 @@ static int kvaser_usb_leaf_simple_cmd_async(struct kvaser_usb_net_priv *priv,
 	struct kvaser_cmd *cmd;
 	int err;

-	cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
+	cmd = kzalloc_obj(*cmd, GFP_ATOMIC);
 	if (!cmd)
 		return -ENOMEM;

@@ -1752,7 +1752,7 @@ static int kvaser_usb_leaf_set_opt_mode(const struct kvaser_usb_net_priv *priv)
 	struct kvaser_cmd *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -1824,7 +1824,7 @@ static int kvaser_usb_leaf_flush_queue(struct kvaser_usb_net_priv *priv)
 	struct kvaser_cmd *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -1881,7 +1881,7 @@ static int kvaser_usb_leaf_set_bittiming(const struct net_device *netdev,
 	struct kvaser_cmd *cmd;
 	int rc;

-	cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kmalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/net/can/usb/nct6694_canfd.c b/drivers/net/can/usb/nct6694_canfd.c
index dd6df2ec3742..de60c2d1cdd1 100644
--- a/drivers/net/can/usb/nct6694_canfd.c
+++ b/drivers/net/can/usb/nct6694_canfd.c
@@ -527,7 +527,7 @@ static int nct6694_canfd_start(struct net_device *ndev)
 	u32 en_tdc;
 	int ret;

-	setting = kzalloc(sizeof(*setting), GFP_KERNEL);
+	setting = kzalloc_obj(*setting, GFP_KERNEL);
 	if (!setting)
 		return -ENOMEM;

@@ -596,7 +596,7 @@ static void nct6694_canfd_stop(struct net_device *ndev)
 	 * mode allows the device to monitor bus activity without actively
 	 * participating in communication.
 	 */
-	setting = kzalloc(sizeof(*setting), GFP_KERNEL);
+	setting = kzalloc_obj(*setting, GFP_KERNEL);
 	if (!setting)
 		return;

@@ -707,7 +707,7 @@ static int nct6694_canfd_get_clock(struct nct6694_canfd_priv *priv)
 	};
 	int ret;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
index be84191cde56..fbdc9b644241 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
@@ -939,7 +939,7 @@ static int pcan_usb_fd_init(struct peak_usb_device *dev)
 	/* do this for 1st channel only */
 	if (!dev->prev_siblings) {
 		/* allocate netdevices common structure attached to first one */
-		pdev->usb_if = kzalloc(sizeof(*pdev->usb_if), GFP_KERNEL);
+		pdev->usb_if = kzalloc_obj(*pdev->usb_if, GFP_KERNEL);
 		if (!pdev->usb_if)
 			goto err_out;

diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
index 7be286293b1a..db5d43bd4220 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
@@ -870,10 +870,9 @@ static int pcan_usb_pro_init(struct peak_usb_device *dev)
 	/* do this for 1st channel only */
 	if (!dev->prev_siblings) {
 		/* allocate netdevices common structure attached to first one */
-		usb_if = kzalloc(sizeof(struct pcan_usb_pro_interface),
-				 GFP_KERNEL);
-		fi = kmalloc(sizeof(struct pcan_usb_pro_fwinfo), GFP_KERNEL);
-		bi = kmalloc(sizeof(struct pcan_usb_pro_blinfo), GFP_KERNEL);
+		usb_if = kzalloc_obj(struct pcan_usb_pro_interface, GFP_KERNEL);
+		fi = kmalloc_obj(struct pcan_usb_pro_fwinfo, GFP_KERNEL);
+		bi = kmalloc_obj(struct pcan_usb_pro_blinfo, GFP_KERNEL);
 		if (!usb_if || !fi || !bi) {
 			err = -ENOMEM;
 			goto err_out;
diff --git a/drivers/net/can/usb/ucan.c b/drivers/net/can/usb/ucan.c
index de61d9da99e3..906aca08cf5c 100644
--- a/drivers/net/can/usb/ucan.c
+++ b/drivers/net/can/usb/ucan.c
@@ -330,9 +330,8 @@ static int ucan_alloc_context_array(struct ucan_priv *up)
 	/* release contexts if any */
 	ucan_release_context_array(up);

-	up->context_array = kcalloc(up->device_info.tx_fifo,
-				    sizeof(*up->context_array),
-				    GFP_KERNEL);
+	up->context_array = kzalloc_objs(*up->context_array,
+					 up->device_info.tx_fifo, GFP_KERNEL);
 	if (!up->context_array) {
 		netdev_err(up->netdev,
 			   "Not enough memory to allocate tx contexts\n");
diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c
index e22362e6f0cd..8df91e4c1237 100644
--- a/drivers/net/dsa/bcm_sf2_cfp.c
+++ b/drivers/net/dsa/bcm_sf2_cfp.c
@@ -950,7 +950,7 @@ static int bcm_sf2_cfp_rule_set(struct dsa_switch *ds, int port,
 	if (ret == 0)
 		return -EEXIST;

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

diff --git a/drivers/net/dsa/hirschmann/hellcreek.c b/drivers/net/dsa/hirschmann/hellcreek.c
index dd5f263ab984..1e1917eafd7a 100644
--- a/drivers/net/dsa/hirschmann/hellcreek.c
+++ b/drivers/net/dsa/hirschmann/hellcreek.c
@@ -1265,7 +1265,7 @@ static int hellcreek_devlink_region_vlan_snapshot(struct devlink *dl,
 	struct hellcreek *hellcreek = ds->priv;
 	int i;

-	table = kcalloc(VLAN_N_VID, sizeof(*entry), GFP_KERNEL);
+	table = kzalloc_objs(*entry, VLAN_N_VID, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -1293,7 +1293,7 @@ static int hellcreek_devlink_region_fdb_snapshot(struct devlink *dl,
 	struct hellcreek *hellcreek = ds->priv;
 	size_t i;

-	table = kcalloc(hellcreek->fdb_entries, sizeof(*entry), GFP_KERNEL);
+	table = kzalloc_objs(*entry, hellcreek->fdb_entries, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

diff --git a/drivers/net/dsa/microchip/ksz9477_acl.c b/drivers/net/dsa/microchip/ksz9477_acl.c
index 7ba778df63ac..efd1da08bb45 100644
--- a/drivers/net/dsa/microchip/ksz9477_acl.c
+++ b/drivers/net/dsa/microchip/ksz9477_acl.c
@@ -1060,7 +1060,7 @@ int ksz9477_port_acl_init(struct ksz_device *dev, int port)
 	struct ksz9477_acl_priv *acl;
 	int ret, i;

-	acl = kzalloc(sizeof(*acl), GFP_KERNEL);
+	acl = kzalloc_obj(*acl, GFP_KERNEL);
 	if (!acl)
 		return -ENOMEM;

diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index e5fa1f5fc09b..ddcbb1be4818 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -4835,7 +4835,7 @@ int ksz_switch_macaddr_get(struct dsa_switch *ds, int port,
 		return 0;
 	}

-	switch_macaddr = kzalloc(sizeof(*switch_macaddr), GFP_KERNEL);
+	switch_macaddr = kzalloc_obj(*switch_macaddr, GFP_KERNEL);
 	if (!switch_macaddr)
 		return -ENOMEM;

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 09002c853b78..7a43110e74b7 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -2024,7 +2024,7 @@ static int mv88e6xxx_mst_get(struct mv88e6xxx_chip *chip, struct net_device *br,
 	if (err)
 		goto err;

-	mst = kzalloc(sizeof(*mst), GFP_KERNEL);
+	mst = kzalloc_obj(*mst, GFP_KERNEL);
 	if (!mst) {
 		err = -ENOMEM;
 		goto err;
diff --git a/drivers/net/dsa/mv88e6xxx/devlink.c b/drivers/net/dsa/mv88e6xxx/devlink.c
index da69e0b85879..f241e7df6eb5 100644
--- a/drivers/net/dsa/mv88e6xxx/devlink.c
+++ b/drivers/net/dsa/mv88e6xxx/devlink.c
@@ -378,9 +378,8 @@ static int mv88e6xxx_region_atu_snapshot(struct devlink *dl,
 	struct mv88e6xxx_chip *chip = ds->priv;
 	int fid = -1, err = 0, count = 0;

-	table = kcalloc(mv88e6xxx_num_databases(chip),
-			sizeof(struct mv88e6xxx_devlink_atu_entry),
-			GFP_KERNEL);
+	table = kzalloc_objs(struct mv88e6xxx_devlink_atu_entry,
+			     mv88e6xxx_num_databases(chip), GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -440,9 +439,8 @@ static int mv88e6xxx_region_vtu_snapshot(struct devlink *dl,
 	struct mv88e6xxx_vtu_entry vlan;
 	int err;

-	table = kcalloc(mv88e6xxx_max_vid(chip) + 1,
-			sizeof(struct mv88e6xxx_devlink_vtu_entry),
-			GFP_KERNEL);
+	table = kzalloc_objs(struct mv88e6xxx_devlink_vtu_entry,
+			     mv88e6xxx_max_vid(chip) + 1, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -523,9 +521,8 @@ static int mv88e6xxx_region_stu_snapshot(struct devlink *dl,
 	struct mv88e6xxx_stu_entry stu;
 	int err;

-	table = kcalloc(mv88e6xxx_max_sid(chip) + 1,
-			sizeof(struct mv88e6xxx_devlink_stu_entry),
-			GFP_KERNEL);
+	table = kzalloc_objs(struct mv88e6xxx_devlink_stu_entry,
+			     mv88e6xxx_max_sid(chip) + 1, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

diff --git a/drivers/net/dsa/mv88e6xxx/pcs-6185.c b/drivers/net/dsa/mv88e6xxx/pcs-6185.c
index af7e06d265f7..176480cdee5a 100644
--- a/drivers/net/dsa/mv88e6xxx/pcs-6185.c
+++ b/drivers/net/dsa/mv88e6xxx/pcs-6185.c
@@ -131,7 +131,7 @@ static int mv88e6185_pcs_init(struct mv88e6xxx_chip *chip, int port)

 	dev = chip->dev;

-	mpcs = kzalloc(sizeof(*mpcs), GFP_KERNEL);
+	mpcs = kzalloc_obj(*mpcs, GFP_KERNEL);
 	if (!mpcs)
 		return -ENOMEM;

diff --git a/drivers/net/dsa/mv88e6xxx/pcs-6352.c b/drivers/net/dsa/mv88e6xxx/pcs-6352.c
index 36993400837e..ecd8b5efccf6 100644
--- a/drivers/net/dsa/mv88e6xxx/pcs-6352.c
+++ b/drivers/net/dsa/mv88e6xxx/pcs-6352.c
@@ -267,7 +267,7 @@ static struct marvell_c22_pcs *marvell_c22_pcs_alloc(struct device *dev,
 {
 	struct marvell_c22_pcs *mpcs;

-	mpcs = kzalloc(sizeof(*mpcs), GFP_KERNEL);
+	mpcs = kzalloc_obj(*mpcs, GFP_KERNEL);
 	if (!mpcs)
 		return NULL;

diff --git a/drivers/net/dsa/mv88e6xxx/pcs-639x.c b/drivers/net/dsa/mv88e6xxx/pcs-639x.c
index 5db17c0b77f5..c7728b00297d 100644
--- a/drivers/net/dsa/mv88e6xxx/pcs-639x.c
+++ b/drivers/net/dsa/mv88e6xxx/pcs-639x.c
@@ -67,7 +67,7 @@ mv88e639x_pcs_alloc(struct device *dev, struct mii_bus *bus, unsigned int addr,
 {
 	struct mv88e639x_pcs *mpcs;

-	mpcs = kzalloc(sizeof(*mpcs), GFP_KERNEL);
+	mpcs = kzalloc_obj(*mpcs, GFP_KERNEL);
 	if (!mpcs)
 		return NULL;

diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c
index 5d34eb82e639..1587dd33a557 100644
--- a/drivers/net/dsa/ocelot/felix.c
+++ b/drivers/net/dsa/ocelot/felix.c
@@ -109,8 +109,7 @@ static int felix_tag_8021q_vlan_add_rx(struct dsa_switch *ds, int port,

 	key_length = ocelot->vcap[VCAP_ES0].keys[VCAP_ES0_IGR_PORT].length;

-	outer_tagging_rule = kzalloc(sizeof(struct ocelot_vcap_filter),
-				     GFP_KERNEL);
+	outer_tagging_rule = kzalloc_obj(struct ocelot_vcap_filter, GFP_KERNEL);
 	if (!outer_tagging_rule)
 		return -ENOMEM;

@@ -178,11 +177,11 @@ static int felix_tag_8021q_vlan_add_tx(struct dsa_switch *ds, int port,
 	unsigned long cookie;
 	int err;

-	untagging_rule = kzalloc(sizeof(struct ocelot_vcap_filter), GFP_KERNEL);
+	untagging_rule = kzalloc_obj(struct ocelot_vcap_filter, GFP_KERNEL);
 	if (!untagging_rule)
 		return -ENOMEM;

-	redirect_rule = kzalloc(sizeof(struct ocelot_vcap_filter), GFP_KERNEL);
+	redirect_rule = kzalloc_obj(struct ocelot_vcap_filter, GFP_KERNEL);
 	if (!redirect_rule) {
 		kfree(untagging_rule);
 		return -ENOMEM;
@@ -1540,8 +1539,8 @@ static int felix_init_structs(struct felix *felix, int num_phys_ports)
 	ocelot->npi_xtr_prefix	= OCELOT_TAG_PREFIX_SHORT;
 	ocelot->devlink		= felix->ds->devlink;

-	port_phy_modes = kcalloc(num_phys_ports, sizeof(phy_interface_t),
-				 GFP_KERNEL);
+	port_phy_modes = kzalloc_objs(phy_interface_t, num_phys_ports,
+				      GFP_KERNEL);
 	if (!port_phy_modes)
 		return -ENOMEM;

diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelot/felix_vsc9959.c
index 8cf4c8986587..86b9a24d3e33 100644
--- a/drivers/net/dsa/ocelot/felix_vsc9959.c
+++ b/drivers/net/dsa/ocelot/felix_vsc9959.c
@@ -2201,7 +2201,7 @@ static int vsc9959_psfp_sgi_table_add(struct ocelot *ocelot,
 			return 0;
 		}

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

diff --git a/drivers/net/dsa/sja1105/sja1105_devlink.c b/drivers/net/dsa/sja1105/sja1105_devlink.c
index 30b1f1ba762f..c1dd9ccc32d0 100644
--- a/drivers/net/dsa/sja1105/sja1105_devlink.c
+++ b/drivers/net/dsa/sja1105/sja1105_devlink.c
@@ -82,8 +82,8 @@ static int sja1105_setup_devlink_regions(struct dsa_switch *ds)
 	struct devlink_region *region;
 	u64 size;

-	priv->regions = kcalloc(num_regions, sizeof(struct devlink_region *),
-				GFP_KERNEL);
+	priv->regions = kzalloc_objs(struct devlink_region *, num_regions,
+				     GFP_KERNEL);
 	if (!priv->regions)
 		return -ENOMEM;

diff --git a/drivers/net/dsa/sja1105/sja1105_flower.c b/drivers/net/dsa/sja1105/sja1105_flower.c
index 05d8ed3121e7..c91f7371471c 100644
--- a/drivers/net/dsa/sja1105/sja1105_flower.c
+++ b/drivers/net/dsa/sja1105/sja1105_flower.c
@@ -41,7 +41,7 @@ static int sja1105_setup_bcast_policer(struct sja1105_private *priv,
 	int rc;

 	if (!rule) {
-		rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+		rule = kzalloc_obj(*rule, GFP_KERNEL);
 		if (!rule)
 			return -ENOMEM;

@@ -112,7 +112,7 @@ static int sja1105_setup_tc_policer(struct sja1105_private *priv,
 	int rc;

 	if (!rule) {
-		rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+		rule = kzalloc_obj(*rule, GFP_KERNEL);
 		if (!rule)
 			return -ENOMEM;

diff --git a/drivers/net/dsa/sja1105/sja1105_tas.c b/drivers/net/dsa/sja1105/sja1105_tas.c
index d5949d2c3e71..a3090c70b428 100644
--- a/drivers/net/dsa/sja1105/sja1105_tas.c
+++ b/drivers/net/dsa/sja1105/sja1105_tas.c
@@ -477,7 +477,7 @@ bool sja1105_gating_check_conflicts(struct sja1105_private *priv, int port,
 	if (list_empty(&gating_cfg->entries))
 		return false;

-	dummy = kzalloc(struct_size(dummy, entries, num_entries), GFP_KERNEL);
+	dummy = kzalloc_flex(*dummy, entries, num_entries, GFP_KERNEL);
 	if (!dummy) {
 		NL_SET_ERR_MSG_MOD(extack, "Failed to allocate memory");
 		return true;
diff --git a/drivers/net/dsa/sja1105/sja1105_vl.c b/drivers/net/dsa/sja1105/sja1105_vl.c
index b7e95d60a6e4..7ec1ce5edf07 100644
--- a/drivers/net/dsa/sja1105/sja1105_vl.c
+++ b/drivers/net/dsa/sja1105/sja1105_vl.c
@@ -16,7 +16,7 @@ static int sja1105_insert_gate_entry(struct sja1105_gating_config *gating_cfg,
 	struct sja1105_gate_entry *e;
 	int rc;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return -ENOMEM;

@@ -524,7 +524,7 @@ int sja1105_vl_redirect(struct sja1105_private *priv, int port,
 	}

 	if (!rule) {
-		rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+		rule = kzalloc_obj(*rule, GFP_KERNEL);
 		if (!rule)
 			return -ENOMEM;

@@ -622,7 +622,7 @@ int sja1105_vl_gate(struct sja1105_private *priv, int port,
 	}

 	if (!rule) {
-		rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+		rule = kzalloc_obj(*rule, GFP_KERNEL);
 		if (!rule)
 			return -ENOMEM;

@@ -635,9 +635,8 @@ int sja1105_vl_gate(struct sja1105_private *priv, int port,
 		rule->vl.base_time = base_time;
 		rule->vl.cycle_time = cycle_time;
 		rule->vl.num_entries = num_entries;
-		rule->vl.entries = kcalloc(num_entries,
-					   sizeof(struct action_gate_entry),
-					   GFP_KERNEL);
+		rule->vl.entries = kzalloc_objs(struct action_gate_entry,
+						num_entries, GFP_KERNEL);
 		if (!rule->vl.entries) {
 			rc = -ENOMEM;
 			goto out;
diff --git a/drivers/net/dsa/vitesse-vsc73xx-core.c b/drivers/net/dsa/vitesse-vsc73xx-core.c
index 9d31b8258268..a2feb30843b6 100644
--- a/drivers/net/dsa/vitesse-vsc73xx-core.c
+++ b/drivers/net/dsa/vitesse-vsc73xx-core.c
@@ -1664,7 +1664,7 @@ static int vsc73xx_port_vlan_add(struct dsa_switch *ds, int port,
 	vsc73xx_vlan = vsc73xx_bridge_vlan_find(vsc, vlan->vid);

 	if (!vsc73xx_vlan) {
-		vsc73xx_vlan = kzalloc(sizeof(*vsc73xx_vlan), GFP_KERNEL);
+		vsc73xx_vlan = kzalloc_obj(*vsc73xx_vlan, GFP_KERNEL);
 		if (!vsc73xx_vlan)
 			return -ENOMEM;

diff --git a/drivers/net/eql.c b/drivers/net/eql.c
index 9ba10efd3794..3fccbe2a63a0 100644
--- a/drivers/net/eql.c
+++ b/drivers/net/eql.c
@@ -425,7 +425,7 @@ static int eql_enslave(struct net_device *master_dev, slaving_request_t __user *
 	if ((master_dev->flags & IFF_UP) == IFF_UP) {
 		/* slave is not a master & not already a slave: */
 		if (!eql_is_master(slave_dev) && !eql_is_slave(slave_dev)) {
-			slave_t *s = kzalloc(sizeof(*s), GFP_KERNEL);
+			slave_t *s = kzalloc_obj(*s, GFP_KERNEL);
 			equalizer_t *eql = netdev_priv(master_dev);
 			int ret;

diff --git a/drivers/net/ethernet/adi/adin1110.c b/drivers/net/ethernet/adi/adin1110.c
index 1b4e37d000b9..53fac3dc8be6 100644
--- a/drivers/net/ethernet/adi/adin1110.c
+++ b/drivers/net/ethernet/adi/adin1110.c
@@ -1492,7 +1492,7 @@ static int adin1110_switchdev_event(struct notifier_block *unused,
 	if (!adin1110_port_dev_check(netdev))
 		return NOTIFY_DONE;

-	switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+	switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 	if (WARN_ON(!switchdev_work))
 		return NOTIFY_BAD;

diff --git a/drivers/net/ethernet/agere/et131x.c b/drivers/net/ethernet/agere/et131x.c
index 5c8217638dda..30cc8acd2b8c 100644
--- a/drivers/net/ethernet/agere/et131x.c
+++ b/drivers/net/ethernet/agere/et131x.c
@@ -1866,10 +1866,10 @@ static int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter)
 	struct fbr_lookup *fbr;

 	/* Alloc memory for the lookup table */
-	rx_ring->fbr[0] = kzalloc(sizeof(*fbr), GFP_KERNEL);
+	rx_ring->fbr[0] = kzalloc_obj(*fbr, GFP_KERNEL);
 	if (rx_ring->fbr[0] == NULL)
 		return -ENOMEM;
-	rx_ring->fbr[1] = kzalloc(sizeof(*fbr), GFP_KERNEL);
+	rx_ring->fbr[1] = kzalloc_obj(*fbr, GFP_KERNEL);
 	if (rx_ring->fbr[1] == NULL)
 		return -ENOMEM;

@@ -2089,7 +2089,7 @@ static int et131x_init_recv(struct et131x_adapter *adapter)

 	/* Setup each RFD */
 	for (rfdct = 0; rfdct < rx_ring->num_rfd; rfdct++) {
-		rfd = kzalloc(sizeof(*rfd), GFP_ATOMIC | GFP_DMA);
+		rfd = kzalloc_obj(*rfd, GFP_ATOMIC | GFP_DMA);
 		if (!rfd)
 			return -ENOMEM;

@@ -2357,8 +2357,8 @@ static int et131x_tx_dma_memory_alloc(struct et131x_adapter *adapter)
 	struct tx_ring *tx_ring = &adapter->tx_ring;

 	/* Allocate memory for the TCB's (Transmit Control Block) */
-	tx_ring->tcb_ring = kcalloc(NUM_TCB, sizeof(struct tcb),
-				    GFP_KERNEL | GFP_DMA);
+	tx_ring->tcb_ring = kzalloc_objs(struct tcb, NUM_TCB,
+					 GFP_KERNEL | GFP_DMA);
 	if (!tx_ring->tcb_ring)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c
index 89f22f3f47dc..84090dee9814 100644
--- a/drivers/net/ethernet/airoha/airoha_npu.c
+++ b/drivers/net/ethernet/airoha/airoha_npu.c
@@ -333,7 +333,7 @@ static int airoha_npu_ppe_init(struct airoha_npu *npu)
 	struct ppe_mbox_data *ppe_data;
 	int err;

-	ppe_data = kzalloc(sizeof(*ppe_data), GFP_KERNEL);
+	ppe_data = kzalloc_obj(*ppe_data, GFP_KERNEL);
 	if (!ppe_data)
 		return -ENOMEM;

@@ -354,7 +354,7 @@ static int airoha_npu_ppe_deinit(struct airoha_npu *npu)
 	struct ppe_mbox_data *ppe_data;
 	int err;

-	ppe_data = kzalloc(sizeof(*ppe_data), GFP_KERNEL);
+	ppe_data = kzalloc_obj(*ppe_data, GFP_KERNEL);
 	if (!ppe_data)
 		return -ENOMEM;

@@ -375,7 +375,7 @@ static int airoha_npu_ppe_flush_sram_entries(struct airoha_npu *npu,
 	struct ppe_mbox_data *ppe_data;
 	int err;

-	ppe_data = kzalloc(sizeof(*ppe_data), GFP_KERNEL);
+	ppe_data = kzalloc_obj(*ppe_data, GFP_KERNEL);
 	if (!ppe_data)
 		return -ENOMEM;

@@ -399,7 +399,7 @@ static int airoha_npu_foe_commit_entry(struct airoha_npu *npu,
 	struct ppe_mbox_data *ppe_data;
 	int err;

-	ppe_data = kzalloc(sizeof(*ppe_data), GFP_ATOMIC);
+	ppe_data = kzalloc_obj(*ppe_data, GFP_ATOMIC);
 	if (!ppe_data)
 		return -ENOMEM;

@@ -434,7 +434,7 @@ static int airoha_npu_ppe_stats_setup(struct airoha_npu *npu,
 	int err, size = num_stats_entries * sizeof(*npu->stats);
 	struct ppe_mbox_data *ppe_data;

-	ppe_data = kzalloc(sizeof(*ppe_data), GFP_ATOMIC);
+	ppe_data = kzalloc_obj(*ppe_data, GFP_ATOMIC);
 	if (!ppe_data)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/airoha/airoha_ppe.c b/drivers/net/ethernet/airoha/airoha_ppe.c
index 2221bafaf7c9..a0f4c6e33bfc 100644
--- a/drivers/net/ethernet/airoha/airoha_ppe.c
+++ b/drivers/net/ethernet/airoha/airoha_ppe.c
@@ -778,7 +778,7 @@ airoha_ppe_foe_commit_subflow_entry(struct airoha_ppe *ppe,
 	if (!hwe_p)
 		return -EINVAL;

-	f = kzalloc(sizeof(*f), GFP_ATOMIC);
+	f = kzalloc_obj(*f, GFP_ATOMIC);
 	if (!f)
 		return -ENOMEM;

@@ -1173,7 +1173,7 @@ static int airoha_ppe_flow_offload_replace(struct airoha_eth *eth,
 			return err;
 	}

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/alacritech/slicoss.c b/drivers/net/ethernet/alacritech/slicoss.c
index 7488fb6ace0b..808ee88dcdc8 100644
--- a/drivers/net/ethernet/alacritech/slicoss.c
+++ b/drivers/net/ethernet/alacritech/slicoss.c
@@ -192,7 +192,7 @@ static int slic_new_upr(struct slic_device *sdev, unsigned int type,
 {
 	struct slic_upr *upr;

-	upr = kmalloc(sizeof(*upr), GFP_ATOMIC);
+	upr = kmalloc_obj(*upr, GFP_ATOMIC);
 	if (!upr)
 		return -ENOMEM;
 	upr->type = type;
@@ -845,7 +845,7 @@ static int slic_init_tx_queue(struct slic_device *sdev)
 	txq->put_idx = 0;
 	txq->done_idx = 0;

-	txq->txbuffs = kcalloc(txq->len, sizeof(*buff), GFP_KERNEL);
+	txq->txbuffs = kzalloc_objs(*buff, txq->len, GFP_KERNEL);
 	if (!txq->txbuffs)
 		return -ENOMEM;

@@ -922,7 +922,7 @@ static int slic_init_rx_queue(struct slic_device *sdev)
 	rxq->done_idx = 0;
 	rxq->put_idx = 0;

-	buff = kcalloc(rxq->len, sizeof(*buff), GFP_KERNEL);
+	buff = kzalloc_objs(*buff, rxq->len, GFP_KERNEL);
 	if (!buff)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/allwinner/sun4i-emac.c b/drivers/net/ethernet/allwinner/sun4i-emac.c
index 2f516b950f4e..fc7341a5cbb7 100644
--- a/drivers/net/ethernet/allwinner/sun4i-emac.c
+++ b/drivers/net/ethernet/allwinner/sun4i-emac.c
@@ -223,7 +223,7 @@ emac_alloc_dma_req(struct emac_board_info *db,
 {
 	struct emac_dma_req *req;

-	req = kzalloc(sizeof(struct emac_dma_req), GFP_ATOMIC);
+	req = kzalloc_obj(struct emac_dma_req, GFP_ATOMIC);
 	if (!req)
 		return NULL;

diff --git a/drivers/net/ethernet/alteon/acenic.c b/drivers/net/ethernet/alteon/acenic.c
index 9e6f91df2ba0..81f57bc6b3a2 100644
--- a/drivers/net/ethernet/alteon/acenic.c
+++ b/drivers/net/ethernet/alteon/acenic.c
@@ -1149,7 +1149,7 @@ static int ace_init(struct net_device *dev)
 	/*
 	 * Get the memory for the skb rings.
 	 */
-	if (!(ap->skb = kzalloc(sizeof(struct ace_skb), GFP_KERNEL))) {
+	if (!(ap->skb = kzalloc_obj(struct ace_skb, GFP_KERNEL))) {
 		ecode = -EAGAIN;
 		goto init_error;
 	}
diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c
index ca55c5fd11df..2893fbaa51ca 100644
--- a/drivers/net/ethernet/altera/altera_tse_main.c
+++ b/drivers/net/ethernet/altera/altera_tse_main.c
@@ -258,14 +258,12 @@ static int alloc_init_skbufs(struct altera_tse_private *priv)
 	int i;

 	/* Create Rx ring buffer */
-	priv->rx_ring = kcalloc(rx_descs, sizeof(struct tse_buffer),
-				GFP_KERNEL);
+	priv->rx_ring = kzalloc_objs(struct tse_buffer, rx_descs, GFP_KERNEL);
 	if (!priv->rx_ring)
 		goto err_rx_ring;

 	/* Create Tx ring buffer */
-	priv->tx_ring = kcalloc(tx_descs, sizeof(struct tse_buffer),
-				GFP_KERNEL);
+	priv->tx_ring = kzalloc_objs(struct tse_buffer, tx_descs, GFP_KERNEL);
 	if (!priv->tx_ring)
 		goto err_tx_ring;

diff --git a/drivers/net/ethernet/amd/lance.c b/drivers/net/ethernet/amd/lance.c
index b1e6620ad41d..98afd8cb0efb 100644
--- a/drivers/net/ethernet/amd/lance.c
+++ b/drivers/net/ethernet/amd/lance.c
@@ -551,7 +551,7 @@ static int __init lance_probe1(struct net_device *dev, int ioaddr, int irq, int
 	dev->base_addr = ioaddr;
 	/* Make certain the data structures used by the LANCE are aligned and DMAble. */

-	lp = kzalloc(sizeof(*lp), GFP_DMA | GFP_KERNEL);
+	lp = kzalloc_obj(*lp, GFP_DMA | GFP_KERNEL);
 	if (!lp)
 		return -ENOMEM;
 	if (lance_debug > 6) printk(" (#0x%05lx)", (unsigned long)lp);
diff --git a/drivers/net/ethernet/amd/pcnet32.c b/drivers/net/ethernet/amd/pcnet32.c
index 9eaefa0f5e80..e0705a54366b 100644
--- a/drivers/net/ethernet/amd/pcnet32.c
+++ b/drivers/net/ethernet/amd/pcnet32.c
@@ -491,11 +491,11 @@ static void pcnet32_realloc_tx_ring(struct net_device *dev,
 	if (!new_tx_ring)
 		return;

-	new_dma_addr_list = kcalloc(entries, sizeof(dma_addr_t), GFP_ATOMIC);
+	new_dma_addr_list = kzalloc_objs(dma_addr_t, entries, GFP_ATOMIC);
 	if (!new_dma_addr_list)
 		goto free_new_tx_ring;

-	new_skb_list = kcalloc(entries, sizeof(struct sk_buff *), GFP_ATOMIC);
+	new_skb_list = kzalloc_objs(struct sk_buff *, entries, GFP_ATOMIC);
 	if (!new_skb_list)
 		goto free_new_lists;

@@ -550,11 +550,11 @@ static void pcnet32_realloc_rx_ring(struct net_device *dev,
 	if (!new_rx_ring)
 		return;

-	new_dma_addr_list = kcalloc(entries, sizeof(dma_addr_t), GFP_ATOMIC);
+	new_dma_addr_list = kzalloc_objs(dma_addr_t, entries, GFP_ATOMIC);
 	if (!new_dma_addr_list)
 		goto free_new_rx_ring;

-	new_skb_list = kcalloc(entries, sizeof(struct sk_buff *), GFP_ATOMIC);
+	new_skb_list = kzalloc_objs(struct sk_buff *, entries, GFP_ATOMIC);
 	if (!new_skb_list)
 		goto free_new_lists;

@@ -2035,23 +2035,21 @@ static int pcnet32_alloc_ring(struct net_device *dev, const char *name)
 		return -ENOMEM;
 	}

-	lp->tx_dma_addr = kcalloc(lp->tx_ring_size, sizeof(dma_addr_t),
-				  GFP_KERNEL);
+	lp->tx_dma_addr = kzalloc_objs(dma_addr_t, lp->tx_ring_size, GFP_KERNEL);
 	if (!lp->tx_dma_addr)
 		return -ENOMEM;

-	lp->rx_dma_addr = kcalloc(lp->rx_ring_size, sizeof(dma_addr_t),
-				  GFP_KERNEL);
+	lp->rx_dma_addr = kzalloc_objs(dma_addr_t, lp->rx_ring_size, GFP_KERNEL);
 	if (!lp->rx_dma_addr)
 		return -ENOMEM;

-	lp->tx_skbuff = kcalloc(lp->tx_ring_size, sizeof(struct sk_buff *),
-				GFP_KERNEL);
+	lp->tx_skbuff = kzalloc_objs(struct sk_buff *, lp->tx_ring_size,
+				     GFP_KERNEL);
 	if (!lp->tx_skbuff)
 		return -ENOMEM;

-	lp->rx_skbuff = kcalloc(lp->rx_ring_size, sizeof(struct sk_buff *),
-				GFP_KERNEL);
+	lp->rx_skbuff = kzalloc_objs(struct sk_buff *, lp->rx_ring_size,
+				     GFP_KERNEL);
 	if (!lp->rx_skbuff)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/amd/pds_core/auxbus.c b/drivers/net/ethernet/amd/pds_core/auxbus.c
index 92f359f2b449..6f0ffdf14e96 100644
--- a/drivers/net/ethernet/amd/pds_core/auxbus.c
+++ b/drivers/net/ethernet/amd/pds_core/auxbus.c
@@ -140,7 +140,7 @@ static struct pds_auxiliary_dev *pdsc_auxbus_dev_register(struct pdsc *cf,
 	struct pds_auxiliary_dev *padev;
 	int err;

-	padev = kzalloc(sizeof(*padev), GFP_KERNEL);
+	padev = kzalloc_obj(*padev, GFP_KERNEL);
 	if (!padev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/amd/pds_core/core.c b/drivers/net/ethernet/amd/pds_core/core.c
index 076dfe2910c7..af2f2c7f5de5 100644
--- a/drivers/net/ethernet/amd/pds_core/core.c
+++ b/drivers/net/ethernet/amd/pds_core/core.c
@@ -415,9 +415,9 @@ static int pdsc_viftypes_init(struct pdsc *pdsc)
 {
 	enum pds_core_vif_types vt;

-	pdsc->viftype_status = kcalloc(ARRAY_SIZE(pdsc_viftype_defaults),
-				       sizeof(*pdsc->viftype_status),
-				       GFP_KERNEL);
+	pdsc->viftype_status = kzalloc_objs(*pdsc->viftype_status,
+					    ARRAY_SIZE(pdsc_viftype_defaults),
+					    GFP_KERNEL);
 	if (!pdsc->viftype_status)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/amd/pds_core/dev.c b/drivers/net/ethernet/amd/pds_core/dev.c
index 495ef4ef8c10..6ae27bfb3375 100644
--- a/drivers/net/ethernet/amd/pds_core/dev.c
+++ b/drivers/net/ethernet/amd/pds_core/dev.c
@@ -359,7 +359,7 @@ int pdsc_dev_init(struct pdsc *pdsc)
 	nintrs = min_t(unsigned int, num_online_cpus(), nintrs);

 	/* Get intr_info struct array for tracking */
-	pdsc->intr_info = kcalloc(nintrs, sizeof(*pdsc->intr_info), GFP_KERNEL);
+	pdsc->intr_info = kzalloc_objs(*pdsc->intr_info, nintrs, GFP_KERNEL);
 	if (!pdsc->intr_info)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/amd/pds_core/main.c b/drivers/net/ethernet/amd/pds_core/main.c
index c7a2eff57632..743b154d2a88 100644
--- a/drivers/net/ethernet/amd/pds_core/main.c
+++ b/drivers/net/ethernet/amd/pds_core/main.c
@@ -146,8 +146,7 @@ static int pdsc_sriov_configure(struct pci_dev *pdev, int num_vfs)
 	int ret = 0;

 	if (num_vfs > 0) {
-		pdsc->vfs = kcalloc(num_vfs, sizeof(struct pdsc_vf),
-				    GFP_KERNEL);
+		pdsc->vfs = kzalloc_objs(struct pdsc_vf, num_vfs, GFP_KERNEL);
 		if (!pdsc->vfs)
 			return -ENOMEM;
 		pdsc->num_vfs = num_vfs;
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-selftest.c b/drivers/net/ethernet/amd/xgbe/xgbe-selftest.c
index 55e5e467facd..488f96bec1e7 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-selftest.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-selftest.c
@@ -112,7 +112,7 @@ static int __xgbe_test_loopback(struct xgbe_prv_data *pdata,
 	struct sk_buff *skb = NULL;
 	int ret = 0;

-	tdata = kzalloc(sizeof(*tdata), GFP_KERNEL);
+	tdata = kzalloc_obj(*tdata, GFP_KERNEL);
 	if (!tdata)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/apm/xgene-v2/main.c b/drivers/net/ethernet/apm/xgene-v2/main.c
index d7ca847d44c7..b88764615994 100644
--- a/drivers/net/ethernet/apm/xgene-v2/main.c
+++ b/drivers/net/ethernet/apm/xgene-v2/main.c
@@ -405,7 +405,7 @@ static struct xge_desc_ring *xge_create_desc_ring(struct net_device *ndev)
 	struct xge_desc_ring *ring;
 	u16 size;

-	ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kzalloc_obj(*ring, GFP_KERNEL);
 	if (!ring)
 		return NULL;

@@ -417,8 +417,8 @@ static struct xge_desc_ring *xge_create_desc_ring(struct net_device *ndev)
 	if (!ring->desc_addr)
 		goto err;

-	ring->pkt_info = kcalloc(XGENE_ENET_NUM_DESC, sizeof(*ring->pkt_info),
-				 GFP_KERNEL);
+	ring->pkt_info = kzalloc_objs(*ring->pkt_info, XGENE_ENET_NUM_DESC,
+				      GFP_KERNEL);
 	if (!ring->pkt_info)
 		goto err;

diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_filters.c b/drivers/net/ethernet/aquantia/atlantic/aq_filters.c
index 30a573db02bb..4f0b66917ce0 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_filters.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_filters.c
@@ -688,7 +688,7 @@ int aq_add_rxnfc_rule(struct aq_nic_s *aq_nic, const struct ethtool_rxnfc *cmd)
 	if (err)
 		goto err_exit;

-	aq_rx_fltr = kzalloc(sizeof(*aq_rx_fltr), GFP_KERNEL);
+	aq_rx_fltr = kzalloc_obj(*aq_rx_fltr, GFP_KERNEL);
 	if (unlikely(!aq_rx_fltr)) {
 		err = -ENOMEM;
 		goto err_exit;
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_macsec.c b/drivers/net/ethernet/aquantia/atlantic/aq_macsec.c
index 6afff8af5e86..a47d5ec74b94 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_macsec.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_macsec.c
@@ -1462,7 +1462,7 @@ int aq_macsec_init(struct aq_nic_s *nic)
 	if (!(caps_lo & BIT(CAPS_LO_MACSEC)))
 		return 0;

-	nic->macsec_cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	nic->macsec_cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!nic->macsec_cfg)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
index ed5231dece3f..05d656fb4a27 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
@@ -244,7 +244,7 @@ static int aq_pci_probe(struct pci_dev *pdev,
 	if (err)
 		goto err_ioremap;

-	self->aq_hw = kzalloc(sizeof(*self->aq_hw), GFP_KERNEL);
+	self->aq_hw = kzalloc_obj(*self->aq_hw, GFP_KERNEL);
 	if (!self->aq_hw) {
 		err = -ENOMEM;
 		goto err_ioremap;
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c b/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
index 0fa0f891c0e0..83216657d1d8 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
@@ -1130,8 +1130,8 @@ static void aq_ptp_gpio_init(struct ptp_clock_info *info,
 	if (!info->n_pins)
 		return;

-	info->pin_config = kcalloc(info->n_pins, sizeof(struct ptp_pin_desc),
-				   GFP_KERNEL);
+	info->pin_config = kzalloc_objs(struct ptp_pin_desc, info->n_pins,
+					GFP_KERNEL);

 	if (!info->pin_config)
 		return;
@@ -1183,7 +1183,7 @@ int aq_ptp_init(struct aq_nic_s *aq_nic, unsigned int idx_vec)

 	aq_ptp_offset_init(&mbox.info.ptp_offset);

-	aq_ptp = kzalloc(sizeof(*aq_ptp), GFP_KERNEL);
+	aq_ptp = kzalloc_obj(*aq_ptp, GFP_KERNEL);
 	if (!aq_ptp) {
 		err = -ENOMEM;
 		goto err_exit;
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
index d23d23bed39f..62478c605503 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
@@ -138,7 +138,7 @@ static int aq_ring_alloc(struct aq_ring_s *self,
 	int err = 0;

 	self->buff_ring =
-		kcalloc(self->size, sizeof(struct aq_ring_buff_s), GFP_KERNEL);
+		kzalloc_objs(struct aq_ring_buff_s, self->size, GFP_KERNEL);

 	if (!self->buff_ring) {
 		err = -ENOMEM;
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
index 9769ab4f9bef..90eaf11076d2 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
@@ -104,7 +104,7 @@ struct aq_vec_s *aq_vec_alloc(struct aq_nic_s *aq_nic, unsigned int idx,
 {
 	struct aq_vec_s *self = NULL;

-	self = kzalloc(sizeof(*self), GFP_KERNEL);
+	self = kzalloc_obj(*self, GFP_KERNEL);
 	if (!self)
 		goto err_exit;

diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c
index cbc730c7cff2..13e3bd7fe82b 100644
--- a/drivers/net/ethernet/atheros/ag71xx.c
+++ b/drivers/net/ethernet/atheros/ag71xx.c
@@ -1305,7 +1305,7 @@ static int ag71xx_rings_init(struct ag71xx *ag)
 	ring_size = BIT(tx->order) + BIT(rx->order);
 	tx_size = BIT(tx->order);

-	tx->buf = kcalloc(ring_size, sizeof(*tx->buf), GFP_KERNEL);
+	tx->buf = kzalloc_objs(*tx->buf, ring_size, GFP_KERNEL);
 	if (!tx->buf)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c
index ad6d6abd885f..9b1923055293 100644
--- a/drivers/net/ethernet/atheros/alx/main.c
+++ b/drivers/net/ethernet/atheros/alx/main.c
@@ -616,7 +616,7 @@ static int alx_set_mac_address(struct net_device *netdev, void *data)
 static int alx_alloc_tx_ring(struct alx_priv *alx, struct alx_tx_queue *txq,
 			     int offset)
 {
-	txq->bufs = kcalloc(txq->count, sizeof(struct alx_buffer), GFP_KERNEL);
+	txq->bufs = kzalloc_objs(struct alx_buffer, txq->count, GFP_KERNEL);
 	if (!txq->bufs)
 		return -ENOMEM;

@@ -630,7 +630,7 @@ static int alx_alloc_tx_ring(struct alx_priv *alx, struct alx_tx_queue *txq,
 static int alx_alloc_rx_ring(struct alx_priv *alx, struct alx_rx_queue *rxq,
 			     int offset)
 {
-	rxq->bufs = kcalloc(rxq->count, sizeof(struct alx_buffer), GFP_KERNEL);
+	rxq->bufs = kzalloc_objs(struct alx_buffer, rxq->count, GFP_KERNEL);
 	if (!rxq->bufs)
 		return -ENOMEM;

@@ -746,7 +746,7 @@ static int alx_alloc_napis(struct alx_priv *alx)

 	/* allocate alx_napi structures */
 	for (i = 0; i < alx->num_napi; i++) {
-		np = kzalloc(sizeof(struct alx_napi), GFP_KERNEL);
+		np = kzalloc_obj(struct alx_napi, GFP_KERNEL);
 		if (!np)
 			goto err_out;

@@ -758,7 +758,7 @@ static int alx_alloc_napis(struct alx_priv *alx)
 	/* allocate tx queues */
 	for (i = 0; i < alx->num_txq; i++) {
 		np = alx->qnapi[i];
-		txq = kzalloc(sizeof(*txq), GFP_KERNEL);
+		txq = kzalloc_obj(*txq, GFP_KERNEL);
 		if (!txq)
 			goto err_out;

@@ -775,7 +775,7 @@ static int alx_alloc_napis(struct alx_priv *alx)

 	/* allocate rx queues */
 	np = alx->qnapi[0];
-	rxq = kzalloc(sizeof(*rxq), GFP_KERNEL);
+	rxq = kzalloc_obj(*rxq, GFP_KERNEL);
 	if (!rxq)
 		goto err_out;

diff --git a/drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c b/drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c
index d0a480430a95..612abed61fff 100644
--- a/drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c
+++ b/drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c
@@ -689,8 +689,8 @@ static int bcmasp_alloc_buffers(struct bcmasp_intf *intf)
 	if (!intf->tx_spb_cpu)
 		goto free_rx_edpkt_dma;

-	intf->tx_cbs = kcalloc(DESC_RING_COUNT, sizeof(struct bcmasp_tx_cb),
-			       GFP_KERNEL);
+	intf->tx_cbs = kzalloc_objs(struct bcmasp_tx_cb, DESC_RING_COUNT,
+				    GFP_KERNEL);
 	if (!intf->tx_cbs)
 		goto free_tx_spb_dma;

diff --git a/drivers/net/ethernet/broadcom/bcm4908_enet.c b/drivers/net/ethernet/broadcom/bcm4908_enet.c
index 203e8d0dd04b..fa1fd5667596 100644
--- a/drivers/net/ethernet/broadcom/bcm4908_enet.c
+++ b/drivers/net/ethernet/broadcom/bcm4908_enet.c
@@ -181,7 +181,7 @@ static int bcm4908_dma_alloc_buf_descs(struct bcm4908_enet *enet,
 		goto err_free_buf_descs;
 	}

-	ring->slots = kcalloc(ring->length, sizeof(*ring->slots), GFP_KERNEL);
+	ring->slots = kzalloc_objs(*ring->slots, ring->length, GFP_KERNEL);
 	if (!ring->slots)
 		goto err_free_buf_descs;

diff --git a/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
index 92204fea1f08..00408af127e1 100644
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
@@ -981,8 +981,8 @@ static int bcm_enet_open(struct net_device *dev)
 	priv->tx_desc_alloc_size = size;
 	priv->tx_desc_cpu = p;

-	priv->tx_skb = kcalloc(priv->tx_ring_size, sizeof(struct sk_buff *),
-			       GFP_KERNEL);
+	priv->tx_skb = kzalloc_objs(struct sk_buff *, priv->tx_ring_size,
+				    GFP_KERNEL);
 	if (!priv->tx_skb) {
 		ret = -ENOMEM;
 		goto out_free_tx_ring;
@@ -2149,8 +2149,8 @@ static int bcm_enetsw_open(struct net_device *dev)
 	priv->tx_desc_alloc_size = size;
 	priv->tx_desc_cpu = p;

-	priv->tx_skb = kcalloc(priv->tx_ring_size, sizeof(struct sk_buff *),
-			       GFP_KERNEL);
+	priv->tx_skb = kzalloc_objs(struct sk_buff *, priv->tx_ring_size,
+				    GFP_KERNEL);
 	if (!priv->tx_skb) {
 		dev_err(kdev, "cannot allocate tx skb queue\n");
 		ret = -ENOMEM;
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index bc4e1f3b3752..f81392cbedd1 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -1486,7 +1486,7 @@ static int bcm_sysport_init_tx_ring(struct bcm_sysport_priv *priv,
 	/* Simple descriptors partitioning for now */
 	size = 256;

-	ring->cbs = kcalloc(size, sizeof(struct bcm_sysport_cb), GFP_KERNEL);
+	ring->cbs = kzalloc_objs(struct bcm_sysport_cb, size, GFP_KERNEL);
 	if (!ring->cbs) {
 		netif_err(priv, hw, priv->netdev, "CB allocation failed\n");
 		return -ENOMEM;
@@ -1665,8 +1665,8 @@ static int bcm_sysport_init_rx_ring(struct bcm_sysport_priv *priv)
 	priv->rx_bds = priv->base + SYS_PORT_RDMA_OFFSET;
 	priv->rx_c_index = 0;
 	priv->rx_read_ptr = 0;
-	priv->rx_cbs = kcalloc(priv->num_rx_bds, sizeof(struct bcm_sysport_cb),
-				GFP_KERNEL);
+	priv->rx_cbs = kzalloc_objs(struct bcm_sysport_cb, priv->num_rx_bds,
+				    GFP_KERNEL);
 	if (!priv->rx_cbs) {
 		netif_err(priv, hw, priv->netdev, "CB allocation failed\n");
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c b/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c
index 5f4cb4991964..d530046e027d 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_auxr.c
@@ -210,7 +210,7 @@ void bnge_rdma_aux_device_init(struct bnge_dev *bd)
 	if (!bnge_is_roce_en(bd))
 		return;

-	aux_priv = kzalloc(sizeof(*aux_priv), GFP_KERNEL);
+	aux_priv = kzalloc_obj(*aux_priv, GFP_KERNEL);
 	if (!aux_priv)
 		goto exit;

@@ -235,13 +235,13 @@ void bnge_rdma_aux_device_init(struct bnge_dev *bd)
 	}
 	bd->aux_priv = aux_priv;

-	auxr_dev = kzalloc(sizeof(*auxr_dev), GFP_KERNEL);
+	auxr_dev = kzalloc_obj(*auxr_dev, GFP_KERNEL);
 	if (!auxr_dev)
 		goto aux_dev_uninit;

 	aux_priv->auxr_dev = auxr_dev;

-	auxr_info = kzalloc(sizeof(*auxr_info), GFP_KERNEL);
+	auxr_info = kzalloc_obj(*auxr_info, GFP_KERNEL);
 	if (!auxr_info)
 		goto aux_dev_uninit;

diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm.c b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm.c
index c3087e5cd875..cf6e503d63a6 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm.c
@@ -229,7 +229,7 @@ bnge_hwrm_create_token(struct bnge_dev *bd, enum bnge_hwrm_chnl dst)
 {
 	struct bnge_hwrm_wait_token *token;

-	token = kzalloc(sizeof(*token), GFP_KERNEL);
+	token = kzalloc_obj(*token, GFP_KERNEL);
 	if (!token)
 		return NULL;

diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c
index 91a4ef9e3150..579943445b24 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_hwrm_lib.c
@@ -242,7 +242,7 @@ static int bnge_alloc_all_ctx_pg_info(struct bnge_dev *bd, int ctx_max)

 		if (ctxm->instance_bmap)
 			n = hweight32(ctxm->instance_bmap);
-		ctxm->pg_info = kcalloc(n, sizeof(*ctxm->pg_info), GFP_KERNEL);
+		ctxm->pg_info = kzalloc_objs(*ctxm->pg_info, n, GFP_KERNEL);
 		if (!ctxm->pg_info)
 			return -ENOMEM;
 	}
@@ -269,7 +269,7 @@ int bnge_hwrm_func_backing_store_qcaps(struct bnge_dev *bd)
 	if (rc)
 		return rc;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	bd->ctx = ctx;
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c
index b8e258842c61..74b552ee1796 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c
@@ -127,11 +127,11 @@ static void bnge_free_cp_desc_arr(struct bnge_cp_ring_info *cpr)

 static int bnge_alloc_nq_desc_arr(struct bnge_nq_ring_info *nqr, int n)
 {
-	nqr->desc_ring = kcalloc(n, sizeof(*nqr->desc_ring), GFP_KERNEL);
+	nqr->desc_ring = kzalloc_objs(*nqr->desc_ring, n, GFP_KERNEL);
 	if (!nqr->desc_ring)
 		return -ENOMEM;

-	nqr->desc_mapping = kcalloc(n, sizeof(*nqr->desc_mapping), GFP_KERNEL);
+	nqr->desc_mapping = kzalloc_objs(*nqr->desc_mapping, n, GFP_KERNEL);
 	if (!nqr->desc_mapping)
 		goto err_free_desc_ring;
 	return 0;
@@ -144,11 +144,11 @@ static int bnge_alloc_nq_desc_arr(struct bnge_nq_ring_info *nqr, int n)

 static int bnge_alloc_cp_desc_arr(struct bnge_cp_ring_info *cpr, int n)
 {
-	cpr->desc_ring = kcalloc(n, sizeof(*cpr->desc_ring), GFP_KERNEL);
+	cpr->desc_ring = kzalloc_objs(*cpr->desc_ring, n, GFP_KERNEL);
 	if (!cpr->desc_ring)
 		return -ENOMEM;

-	cpr->desc_mapping = kcalloc(n, sizeof(*cpr->desc_mapping), GFP_KERNEL);
+	cpr->desc_mapping = kzalloc_objs(*cpr->desc_mapping, n, GFP_KERNEL);
 	if (!cpr->desc_mapping)
 		goto err_free_desc_ring;
 	return 0;
@@ -287,8 +287,7 @@ static int bnge_alloc_nq_tree(struct bnge_net *bn)
 			tx = 1;
 		}

-		nqr->cp_ring_arr = kcalloc(cp_count, sizeof(*cpr),
-					   GFP_KERNEL);
+		nqr->cp_ring_arr = kzalloc_objs(*cpr, cp_count, GFP_KERNEL);
 		if (!nqr->cp_ring_arr) {
 			rc = -ENOMEM;
 			goto err_free_nq_tree;
@@ -510,21 +509,21 @@ static int bnge_alloc_tpa_info(struct bnge_net *bn)
 	for (i = 0; i < bd->rx_nr_rings; i++) {
 		struct bnge_rx_ring_info *rxr = &bn->rx_ring[i];

-		rxr->rx_tpa = kcalloc(bn->max_tpa, sizeof(struct bnge_tpa_info),
-				      GFP_KERNEL);
+		rxr->rx_tpa = kzalloc_objs(struct bnge_tpa_info, bn->max_tpa,
+					   GFP_KERNEL);
 		if (!rxr->rx_tpa)
 			goto err_free_tpa_info;

 		for (j = 0; j < bn->max_tpa; j++) {
 			struct rx_agg_cmp *agg;

-			agg = kcalloc(MAX_SKB_FRAGS, sizeof(*agg), GFP_KERNEL);
+			agg = kzalloc_objs(*agg, MAX_SKB_FRAGS, GFP_KERNEL);
 			if (!agg)
 				goto err_free_tpa_info;
 			rxr->rx_tpa[j].agg_arr = agg;
 		}
-		rxr->rx_tpa_idx_map = kzalloc(sizeof(*rxr->rx_tpa_idx_map),
-					      GFP_KERNEL);
+		rxr->rx_tpa_idx_map = kzalloc_obj(*rxr->rx_tpa_idx_map,
+						  GFP_KERNEL);
 		if (!rxr->rx_tpa_idx_map)
 			goto err_free_tpa_info;
 	}
@@ -813,8 +812,8 @@ static int bnge_alloc_vnics(struct bnge_net *bn)
 	 */
 	num_vnics = 1;

-	bn->vnic_info = kcalloc(num_vnics, sizeof(struct bnge_vnic_info),
-				GFP_KERNEL);
+	bn->vnic_info = kzalloc_objs(struct bnge_vnic_info, num_vnics,
+				     GFP_KERNEL);
 	if (!bn->vnic_info)
 		return -ENOMEM;

@@ -841,9 +840,8 @@ static int bnge_init_ring_grps(struct bnge_net *bn)
 	struct bnge_dev *bd = bn->bd;
 	int i;

-	bn->grp_info = kcalloc(bd->nq_nr_rings,
-			       sizeof(struct bnge_ring_grp_info),
-			       GFP_KERNEL);
+	bn->grp_info = kzalloc_objs(struct bnge_ring_grp_info, bd->nq_nr_rings,
+				    GFP_KERNEL);
 	if (!bn->grp_info)
 		return -ENOMEM;
 	for (i = 0; i < bd->nq_nr_rings; i++) {
@@ -903,9 +901,8 @@ static int bnge_alloc_core(struct bnge_net *bn)
 		nqr->ring_struct.ring_mem.flags = BNGE_RMEM_RING_PTE_FLAG;
 	}

-	bn->rx_ring = kcalloc(bd->rx_nr_rings,
-			      sizeof(struct bnge_rx_ring_info),
-			      GFP_KERNEL);
+	bn->rx_ring = kzalloc_objs(struct bnge_rx_ring_info, bd->rx_nr_rings,
+				   GFP_KERNEL);
 	if (!bn->rx_ring)
 		goto err_free_core;

@@ -920,9 +917,8 @@ static int bnge_alloc_core(struct bnge_net *bn)
 		bn->bnapi[i]->rx_ring = &bn->rx_ring[i];
 	}

-	bn->tx_ring = kcalloc(bd->tx_nr_rings,
-			      sizeof(struct bnge_tx_ring_info),
-			      GFP_KERNEL);
+	bn->tx_ring = kzalloc_objs(struct bnge_tx_ring_info, bd->tx_nr_rings,
+				   GFP_KERNEL);
 	if (!bn->tx_ring)
 		goto err_free_core;

@@ -1778,7 +1774,7 @@ static struct bnge_l2_filter *bnge_alloc_l2_filter(struct bnge_net *bn,
 	if (fltr)
 		return fltr;

-	fltr = kzalloc(sizeof(*fltr), gfp);
+	fltr = kzalloc_obj(*fltr, gfp);
 	if (!fltr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_resc.c b/drivers/net/ethernet/broadcom/bnge/bnge_resc.c
index 943df5f60f01..155b48cd2af8 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_resc.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_resc.c
@@ -389,7 +389,7 @@ int bnge_alloc_irqs(struct bnge_dev *bd)
 	num_entries = irqs_demand;
 	if (pci_msix_can_alloc_dyn(bd->pdev))
 		num_entries = max;
-	bd->irq_tbl = kcalloc(num_entries, sizeof(*bd->irq_tbl), GFP_KERNEL);
+	bd->irq_tbl = kzalloc_objs(*bd->irq_tbl, num_entries, GFP_KERNEL);
 	if (!bd->irq_tbl) {
 		rc = -ENOMEM;
 		goto err_free_irqs;
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c
index ee97be440c33..fb89737b481d 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c
@@ -158,8 +158,8 @@ static int bnge_alloc_ctx_pg_tbls(struct bnge_dev *bd,
 		int nr_tbls, i;

 		rmem->depth = 2;
-		ctx_pg->ctx_pg_tbl = kcalloc(MAX_CTX_PAGES, sizeof(ctx_pg),
-					     GFP_KERNEL);
+		ctx_pg->ctx_pg_tbl = kzalloc_objs(ctx_pg, MAX_CTX_PAGES,
+						  GFP_KERNEL);
 		if (!ctx_pg->ctx_pg_tbl)
 			return -ENOMEM;
 		nr_tbls = DIV_ROUND_UP(ctx_pg->nr_pages, MAX_CTX_PAGES);
@@ -170,7 +170,7 @@ static int bnge_alloc_ctx_pg_tbls(struct bnge_dev *bd,
 		for (i = 0; i < nr_tbls; i++) {
 			struct bnge_ctx_pg_info *pg_tbl;

-			pg_tbl = kzalloc(sizeof(*pg_tbl), GFP_KERNEL);
+			pg_tbl = kzalloc_obj(*pg_tbl, GFP_KERNEL);
 			if (!pg_tbl)
 				return -ENOMEM;
 			ctx_pg->ctx_pg_tbl[i] = pg_tbl;
diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c
index 805daae9dd36..97aafe021477 100644
--- a/drivers/net/ethernet/broadcom/bnx2.c
+++ b/drivers/net/ethernet/broadcom/bnx2.c
@@ -8084,7 +8084,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
 	bp->phy_flags = 0;

 	bp->temp_stats_blk =
-		kzalloc(sizeof(struct statistics_block), GFP_KERNEL);
+		kzalloc_obj(struct statistics_block, GFP_KERNEL);

 	if (!bp->temp_stats_blk) {
 		rc = -ENOMEM;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index e59530357e2c..ea0fc6add87d 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -4582,9 +4582,9 @@ static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index)
 			   "allocating tx memory of fp %d cos %d\n",
 			   index, cos);

-			txdata->tx_buf_ring = kcalloc(NUM_TX_BD,
-						      sizeof(struct sw_tx_bd),
-						      GFP_KERNEL);
+			txdata->tx_buf_ring = kzalloc_objs(struct sw_tx_bd,
+							   NUM_TX_BD,
+							   GFP_KERNEL);
 			if (!txdata->tx_buf_ring)
 				goto alloc_mem_err;
 			txdata->tx_desc_ring = BNX2X_PCI_ALLOC(&txdata->tx_desc_mapping,
@@ -4598,7 +4598,7 @@ static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index)
 	if (!skip_rx_queue(bp, index)) {
 		/* fastpath rx rings: rx_buf rx_desc rx_comp */
 		bnx2x_fp(bp, index, rx_buf_ring) =
-			kcalloc(NUM_RX_BD, sizeof(struct sw_rx_bd), GFP_KERNEL);
+			kzalloc_objs(struct sw_rx_bd, NUM_RX_BD, GFP_KERNEL);
 		if (!bnx2x_fp(bp, index, rx_buf_ring))
 			goto alloc_mem_err;
 		bnx2x_fp(bp, index, rx_desc_ring) =
@@ -4616,8 +4616,7 @@ static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index)

 		/* SGE ring */
 		bnx2x_fp(bp, index, rx_page_ring) =
-			kcalloc(NUM_RX_SGE, sizeof(struct sw_rx_page),
-				GFP_KERNEL);
+			kzalloc_objs(struct sw_rx_page, NUM_RX_SGE, GFP_KERNEL);
 		if (!bnx2x_fp(bp, index, rx_page_ring))
 			goto alloc_mem_err;
 		bnx2x_fp(bp, index, rx_sge_ring) =
@@ -4747,13 +4746,14 @@ int bnx2x_alloc_mem_bp(struct bnx2x *bp)
 	bp->fp_array_size = fp_array_size;
 	BNX2X_DEV_INFO("fp_array_size %d\n", bp->fp_array_size);

-	fp = kcalloc(bp->fp_array_size, sizeof(*fp), GFP_KERNEL);
+	fp = kzalloc_objs(*fp, bp->fp_array_size, GFP_KERNEL);
 	if (!fp)
 		goto alloc_err;
 	for (i = 0; i < bp->fp_array_size; i++) {
 		fp[i].tpa_info =
-			kcalloc(ETH_MAX_AGGREGATION_QUEUES_E1H_E2,
-				sizeof(struct bnx2x_agg_info), GFP_KERNEL);
+			kzalloc_objs(struct bnx2x_agg_info,
+				     ETH_MAX_AGGREGATION_QUEUES_E1H_E2,
+				     GFP_KERNEL);
 		if (!(fp[i].tpa_info))
 			goto alloc_err;
 	}
@@ -4761,14 +4761,14 @@ int bnx2x_alloc_mem_bp(struct bnx2x *bp)
 	bp->fp = fp;

 	/* allocate sp objs */
-	bp->sp_objs = kcalloc(bp->fp_array_size, sizeof(struct bnx2x_sp_objs),
-			      GFP_KERNEL);
+	bp->sp_objs = kzalloc_objs(struct bnx2x_sp_objs, bp->fp_array_size,
+				   GFP_KERNEL);
 	if (!bp->sp_objs)
 		goto alloc_err;

 	/* allocate fp_stats */
-	bp->fp_stats = kcalloc(bp->fp_array_size, sizeof(struct bnx2x_fp_stats),
-			       GFP_KERNEL);
+	bp->fp_stats = kzalloc_objs(struct bnx2x_fp_stats, bp->fp_array_size,
+				    GFP_KERNEL);
 	if (!bp->fp_stats)
 		goto alloc_err;

@@ -4777,19 +4777,19 @@ int bnx2x_alloc_mem_bp(struct bnx2x *bp)
 		BNX2X_MAX_RSS_COUNT(bp) * BNX2X_MULTI_TX_COS + CNIC_SUPPORT(bp);
 	BNX2X_DEV_INFO("txq_array_size %d", txq_array_size);

-	bp->bnx2x_txq = kcalloc(txq_array_size, sizeof(struct bnx2x_fp_txdata),
-				GFP_KERNEL);
+	bp->bnx2x_txq = kzalloc_objs(struct bnx2x_fp_txdata, txq_array_size,
+				     GFP_KERNEL);
 	if (!bp->bnx2x_txq)
 		goto alloc_err;

 	/* msix table */
-	tbl = kcalloc(msix_table_size, sizeof(*tbl), GFP_KERNEL);
+	tbl = kzalloc_objs(*tbl, msix_table_size, GFP_KERNEL);
 	if (!tbl)
 		goto alloc_err;
 	bp->msix_table = tbl;

 	/* ilt */
-	ilt = kzalloc(sizeof(*ilt), GFP_KERNEL);
+	ilt = kzalloc_obj(*ilt, GFP_KERNEL);
 	if (!ilt)
 		goto alloc_err;
 	bp->ilt = ilt;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 6a1cc2032bf3..745b023e2e08 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -6577,7 +6577,7 @@ static int bnx2x_gunzip_init(struct bnx2x *bp)
 	if (bp->gunzip_buf  == NULL)
 		goto gunzip_nomem1;

-	bp->strm = kmalloc(sizeof(*bp->strm), GFP_KERNEL);
+	bp->strm = kmalloc_obj(*bp->strm, GFP_KERNEL);
 	if (bp->strm  == NULL)
 		goto gunzip_nomem2;

@@ -8396,8 +8396,8 @@ int bnx2x_alloc_mem(struct bnx2x *bp)
 			goto alloc_mem_err;
 		allocated += bp->context[i].size;
 	}
-	bp->ilt->lines = kcalloc(ILT_MAX_LINES, sizeof(struct ilt_line),
-				 GFP_KERNEL);
+	bp->ilt->lines = kzalloc_objs(struct ilt_line, ILT_MAX_LINES,
+				      GFP_KERNEL);
 	if (!bp->ilt->lines)
 		goto alloc_mem_err;

@@ -10660,7 +10660,7 @@ static int bnx2x_prev_mark_path(struct bnx2x *bp, bool after_undi)
 	up(&bnx2x_prev_sem);

 	/* Create an entry for this path and add it */
-	tmp_list = kmalloc(sizeof(struct bnx2x_prev_path_list), GFP_KERNEL);
+	tmp_list = kmalloc_obj(struct bnx2x_prev_path_list, GFP_KERNEL);
 	if (!tmp_list) {
 		BNX2X_ERR("Failed to allocate 'bnx2x_prev_path_list'\n");
 		return -ENOMEM;
@@ -12954,7 +12954,7 @@ static int bnx2x_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)

 	DP(NETIF_MSG_IFUP, "Adding VLAN %d\n", vid);

-	vlan = kmalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kmalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan)
 		return -ENOMEM;

@@ -14841,7 +14841,7 @@ static int bnx2x_get_fc_npiv(struct net_device *dev,

 	DP(BNX2X_MSG_MCP, "About to read the FC-NPIV table\n");

-	tbl = kmalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kmalloc_obj(*tbl, GFP_KERNEL);
 	if (!tbl) {
 		BNX2X_ERR("Failed to allocate fc_npiv table\n");
 		goto out;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
index 02c8213915a5..07a908a2c72f 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
@@ -251,7 +251,7 @@ static inline struct bnx2x_exeq_elem *bnx2x_exe_queue_alloc_elem(
 	struct bnx2x *bp)
 {
 	DP(BNX2X_MSG_SP, "Allocating a new exe_queue element\n");
-	return kzalloc(sizeof(struct bnx2x_exeq_elem), GFP_ATOMIC);
+	return kzalloc_obj(struct bnx2x_exeq_elem, GFP_ATOMIC);
 }

 /************************ raw_obj functions ***********************************/
@@ -1736,7 +1736,7 @@ static inline int bnx2x_vlan_mac_get_registry_elem(
 	/* Allocate a new registry element if needed. */
 	if (!restore &&
 	    ((cmd == BNX2X_VLAN_MAC_ADD) || (cmd == BNX2X_VLAN_MAC_MOVE))) {
-		reg_elem = kzalloc(sizeof(*reg_elem), GFP_ATOMIC);
+		reg_elem = kzalloc_obj(*reg_elem, GFP_ATOMIC);
 		if (!reg_elem)
 			return -ENOMEM;

@@ -2688,7 +2688,7 @@ static int bnx2x_mcast_enqueue_cmd(struct bnx2x *bp,
 		return 0;

 	/* Add mcast is called under spin_lock, thus calling with GFP_ATOMIC */
-	new_cmd = kzalloc(sizeof(*new_cmd), GFP_ATOMIC);
+	new_cmd = kzalloc_obj(*new_cmd, GFP_ATOMIC);
 	if (!new_cmd)
 		return -ENOMEM;

@@ -3846,7 +3846,7 @@ static inline int bnx2x_mcast_refresh_registry_e1(struct bnx2x *bp,
 		if (!list_empty(&o->registry.exact_match.macs))
 			return 0;

-		elem = kcalloc(len, sizeof(*elem), GFP_ATOMIC);
+		elem = kzalloc_objs(*elem, len, GFP_ATOMIC);
 		if (!elem) {
 			BNX2X_ERR("Failed to allocate registry memory\n");
 			return -ENOMEM;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
index 12198fc3ab22..5aeb5b6a64b5 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
@@ -551,8 +551,8 @@ int bnx2x_vf_mcast(struct bnx2x *bp, struct bnx2x_virtf *vf,
 	else
 		set_bit(RAMROD_COMP_WAIT, &mcast.ramrod_flags);
 	if (mc_num) {
-		mc = kcalloc(mc_num, sizeof(struct bnx2x_mcast_list_elem),
-			     GFP_KERNEL);
+		mc = kzalloc_objs(struct bnx2x_mcast_list_elem, mc_num,
+				  GFP_KERNEL);
 		if (!mc) {
 			BNX2X_ERR("Cannot Configure multicasts due to lack of memory\n");
 			return -ENOMEM;
@@ -1218,7 +1218,7 @@ int bnx2x_iov_init_one(struct bnx2x *bp, int int_mode_param,
 	}

 	/* allocate the vfs database */
-	bp->vfdb = kzalloc(sizeof(*(bp->vfdb)), GFP_KERNEL);
+	bp->vfdb = kzalloc_obj(*(bp->vfdb), GFP_KERNEL);
 	if (!bp->vfdb) {
 		BNX2X_ERR("failed to allocate vf database\n");
 		err = -ENOMEM;
@@ -1247,9 +1247,8 @@ int bnx2x_iov_init_one(struct bnx2x *bp, int int_mode_param,
 	   num_vfs_param, iov->nr_virtfn);

 	/* allocate the vf array */
-	bp->vfdb->vfs = kcalloc(BNX2X_NR_VIRTFN(bp),
-				sizeof(struct bnx2x_virtf),
-				GFP_KERNEL);
+	bp->vfdb->vfs = kzalloc_objs(struct bnx2x_virtf, BNX2X_NR_VIRTFN(bp),
+				     GFP_KERNEL);
 	if (!bp->vfdb->vfs) {
 		BNX2X_ERR("failed to allocate vf array\n");
 		err = -ENOMEM;
@@ -1275,9 +1274,8 @@ int bnx2x_iov_init_one(struct bnx2x *bp, int int_mode_param,
 	}

 	/* allocate the queue arrays for all VFs */
-	bp->vfdb->vfqs = kcalloc(BNX2X_MAX_NUM_VF_QUEUES,
-				 sizeof(struct bnx2x_vf_queue),
-				 GFP_KERNEL);
+	bp->vfdb->vfqs = kzalloc_objs(struct bnx2x_vf_queue,
+				      BNX2X_MAX_NUM_VF_QUEUES, GFP_KERNEL);

 	if (!bp->vfdb->vfqs) {
 		BNX2X_ERR("failed to allocate vf queue array\n");
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
index 8946a931e87e..818481f7a3ea 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
@@ -1654,8 +1654,7 @@ static int bnx2x_vf_mbx_macvlan_list(struct bnx2x *bp,
 	int i, j;
 	struct bnx2x_vf_mac_vlan_filters *fl = NULL;

-	fl = kzalloc(struct_size(fl, filters, tlv->n_mac_vlan_filters),
-		     GFP_KERNEL);
+	fl = kzalloc_flex(*fl, filters, tlv->n_mac_vlan_filters, GFP_KERNEL);
 	if (!fl)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index fb45e1dd1dd7..ad5035cd8ac3 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -3752,21 +3752,20 @@ static int bnxt_alloc_one_tpa_info(struct bnxt *bp,
 	struct rx_agg_cmp *agg;
 	int i;

-	rxr->rx_tpa = kcalloc(bp->max_tpa, sizeof(struct bnxt_tpa_info),
-			      GFP_KERNEL);
+	rxr->rx_tpa = kzalloc_objs(struct bnxt_tpa_info, bp->max_tpa,
+				   GFP_KERNEL);
 	if (!rxr->rx_tpa)
 		return -ENOMEM;

 	if (!(bp->flags & BNXT_FLAG_CHIP_P5_PLUS))
 		return 0;
 	for (i = 0; i < bp->max_tpa; i++) {
-		agg = kcalloc(MAX_SKB_FRAGS, sizeof(*agg), GFP_KERNEL);
+		agg = kzalloc_objs(*agg, MAX_SKB_FRAGS, GFP_KERNEL);
 		if (!agg)
 			return -ENOMEM;
 		rxr->rx_tpa[i].agg_arr = agg;
 	}
-	rxr->rx_tpa_idx_map = kzalloc(sizeof(*rxr->rx_tpa_idx_map),
-				      GFP_KERNEL);
+	rxr->rx_tpa_idx_map = kzalloc_obj(*rxr->rx_tpa_idx_map, GFP_KERNEL);
 	if (!rxr->rx_tpa_idx_map)
 		return -ENOMEM;

@@ -4081,11 +4080,11 @@ static void bnxt_free_cp_arrays(struct bnxt_cp_ring_info *cpr)

 static int bnxt_alloc_cp_arrays(struct bnxt_cp_ring_info *cpr, int n)
 {
-	cpr->cp_desc_ring = kcalloc(n, sizeof(*cpr->cp_desc_ring), GFP_KERNEL);
+	cpr->cp_desc_ring = kzalloc_objs(*cpr->cp_desc_ring, n, GFP_KERNEL);
 	if (!cpr->cp_desc_ring)
 		return -ENOMEM;
-	cpr->cp_desc_mapping = kcalloc(n, sizeof(*cpr->cp_desc_mapping),
-				       GFP_KERNEL);
+	cpr->cp_desc_mapping = kzalloc_objs(*cpr->cp_desc_mapping, n,
+					    GFP_KERNEL);
 	if (!cpr->cp_desc_mapping)
 		return -ENOMEM;
 	return 0;
@@ -4232,8 +4231,7 @@ static int bnxt_alloc_cp_rings(struct bnxt *bp)
 			tx = 1;
 		}

-		cpr->cp_ring_arr = kcalloc(cp_count, sizeof(*cpr),
-					   GFP_KERNEL);
+		cpr->cp_ring_arr = kzalloc_objs(*cpr, cp_count, GFP_KERNEL);
 		if (!cpr->cp_ring_arr)
 			return -ENOMEM;
 		cpr->cp_ring_count = cp_count;
@@ -4627,9 +4625,8 @@ static int bnxt_init_ring_grps(struct bnxt *bp, bool irq_re_init)
 	int i;

 	if (irq_re_init) {
-		bp->grp_info = kcalloc(bp->cp_nr_rings,
-				       sizeof(struct bnxt_ring_grp_info),
-				       GFP_KERNEL);
+		bp->grp_info = kzalloc_objs(struct bnxt_ring_grp_info,
+					    bp->cp_nr_rings, GFP_KERNEL);
 		if (!bp->grp_info)
 			return -ENOMEM;
 	}
@@ -4667,8 +4664,8 @@ static int bnxt_alloc_vnics(struct bnxt *bp)
 	if (BNXT_CHIP_TYPE_NITRO_A0(bp))
 		num_vnics++;

-	bp->vnic_info = kcalloc(num_vnics, sizeof(struct bnxt_vnic_info),
-				GFP_KERNEL);
+	bp->vnic_info = kzalloc_objs(struct bnxt_vnic_info, num_vnics,
+				     GFP_KERNEL);
 	if (!bp->vnic_info)
 		return -ENOMEM;

@@ -5248,7 +5245,7 @@ static int bnxt_alloc_stats(struct bnxt *bp)
 		struct bnxt_napi *bnapi = bp->bnapi[i];
 		struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;

-		cpr->sw_stats = kzalloc(sizeof(*cpr->sw_stats), GFP_KERNEL);
+		cpr->sw_stats = kzalloc_obj(*cpr->sw_stats, GFP_KERNEL);
 		if (!cpr->sw_stats)
 			return -ENOMEM;

@@ -5516,9 +5513,8 @@ static int bnxt_alloc_mem(struct bnxt *bp, bool irq_re_init)
 			}
 		}

-		bp->rx_ring = kcalloc(bp->rx_nr_rings,
-				      sizeof(struct bnxt_rx_ring_info),
-				      GFP_KERNEL);
+		bp->rx_ring = kzalloc_objs(struct bnxt_rx_ring_info,
+					   bp->rx_nr_rings, GFP_KERNEL);
 		if (!bp->rx_ring)
 			return -ENOMEM;

@@ -5537,9 +5533,8 @@ static int bnxt_alloc_mem(struct bnxt *bp, bool irq_re_init)
 			bp->bnapi[i]->rx_ring = &bp->rx_ring[i];
 		}

-		bp->tx_ring = kcalloc(bp->tx_nr_rings,
-				      sizeof(struct bnxt_tx_ring_info),
-				      GFP_KERNEL);
+		bp->tx_ring = kzalloc_objs(struct bnxt_tx_ring_info,
+					   bp->tx_nr_rings, GFP_KERNEL);
 		if (!bp->tx_ring)
 			return -ENOMEM;

@@ -6096,7 +6091,7 @@ static struct bnxt_l2_filter *bnxt_alloc_l2_filter(struct bnxt *bp,
 	if (fltr)
 		return fltr;

-	fltr = kzalloc(sizeof(*fltr), gfp);
+	fltr = kzalloc_obj(*fltr, gfp);
 	if (!fltr)
 		return ERR_PTR(-ENOMEM);
 	spin_lock_bh(&bp->ntp_fltr_lock);
@@ -6125,7 +6120,7 @@ struct bnxt_l2_filter *bnxt_alloc_new_l2_filter(struct bnxt *bp,
 		fltr = ERR_PTR(-EEXIST);
 		goto l2_filter_exit;
 	}
-	fltr = kzalloc(sizeof(*fltr), GFP_ATOMIC);
+	fltr = kzalloc_obj(*fltr, GFP_ATOMIC);
 	if (!fltr) {
 		fltr = ERR_PTR(-ENOMEM);
 		goto l2_filter_exit;
@@ -8655,7 +8650,7 @@ static int bnxt_alloc_all_ctx_pg_info(struct bnxt *bp, int ctx_max)

 		if (ctxm->instance_bmap)
 			n = hweight32(ctxm->instance_bmap);
-		ctxm->pg_info = kcalloc(n, sizeof(*ctxm->pg_info), GFP_KERNEL);
+		ctxm->pg_info = kzalloc_objs(*ctxm->pg_info, n, GFP_KERNEL);
 		if (!ctxm->pg_info)
 			return -ENOMEM;
 	}
@@ -8682,7 +8677,7 @@ static int bnxt_hwrm_func_backing_store_qcaps_v2(struct bnxt *bp)
 		return rc;

 	if (!ctx) {
-		ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+		ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 		if (!ctx)
 			return -ENOMEM;
 		bp->ctx = ctx;
@@ -8769,7 +8764,7 @@ static int bnxt_hwrm_func_backing_store_qcaps(struct bnxt *bp)

 		ctx = bp->ctx;
 		if (!ctx) {
-			ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+			ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 			if (!ctx) {
 				rc = -ENOMEM;
 				goto ctx_err;
@@ -9048,8 +9043,8 @@ static int bnxt_alloc_ctx_pg_tbls(struct bnxt *bp,
 		int nr_tbls, i;

 		rmem->depth = 2;
-		ctx_pg->ctx_pg_tbl = kcalloc(MAX_CTX_PAGES, sizeof(ctx_pg),
-					     GFP_KERNEL);
+		ctx_pg->ctx_pg_tbl = kzalloc_objs(ctx_pg, MAX_CTX_PAGES,
+						  GFP_KERNEL);
 		if (!ctx_pg->ctx_pg_tbl)
 			return -ENOMEM;
 		nr_tbls = DIV_ROUND_UP(ctx_pg->nr_pages, MAX_CTX_PAGES);
@@ -9060,7 +9055,7 @@ static int bnxt_alloc_ctx_pg_tbls(struct bnxt *bp,
 		for (i = 0; i < nr_tbls; i++) {
 			struct bnxt_ctx_pg_info *pg_tbl;

-			pg_tbl = kzalloc(sizeof(*pg_tbl), GFP_KERNEL);
+			pg_tbl = kzalloc_obj(*pg_tbl, GFP_KERNEL);
 			if (!pg_tbl)
 				return -ENOMEM;
 			ctx_pg->ctx_pg_tbl[i] = pg_tbl;
@@ -9569,8 +9564,7 @@ static int bnxt_alloc_crash_dump_mem(struct bnxt *bp)
 	if (bp->fw_crash_mem)
 		bnxt_free_ctx_pg_tbls(bp, bp->fw_crash_mem);
 	else
-		bp->fw_crash_mem = kzalloc(sizeof(*bp->fw_crash_mem),
-					   GFP_KERNEL);
+		bp->fw_crash_mem = kzalloc_obj(*bp->fw_crash_mem, GFP_KERNEL);
 	if (!bp->fw_crash_mem)
 		return -ENOMEM;

@@ -9677,7 +9671,7 @@ static int __bnxt_hwrm_ptp_qcfg(struct bnxt *bp)
 		goto exit;
 	}
 	if (!ptp) {
-		ptp = kzalloc(sizeof(*ptp), GFP_KERNEL);
+		ptp = kzalloc_obj(*ptp, GFP_KERNEL);
 		if (!ptp) {
 			rc = -ENOMEM;
 			goto exit;
@@ -9949,7 +9943,7 @@ static int __bnxt_alloc_fw_health(struct bnxt *bp)
 	if (bp->fw_health)
 		return 0;

-	bp->fw_health = kzalloc(sizeof(*bp->fw_health), GFP_KERNEL);
+	bp->fw_health = kzalloc_obj(*bp->fw_health, GFP_KERNEL);
 	if (!bp->fw_health)
 		return -ENOMEM;

@@ -11460,7 +11454,7 @@ static int bnxt_init_int_mode(struct bnxt *bp)
 	tbl_size = total_vecs;
 	if (pci_msix_can_alloc_dyn(bp->pdev))
 		tbl_size = max;
-	bp->irq_tbl = kcalloc(tbl_size, sizeof(*bp->irq_tbl), GFP_KERNEL);
+	bp->irq_tbl = kzalloc_objs(*bp->irq_tbl, tbl_size, GFP_KERNEL);
 	if (bp->irq_tbl) {
 		for (i = 0; i < total_vecs; i++)
 			bp->irq_tbl[i].vector = pci_irq_vector(bp->pdev, i);
@@ -12957,7 +12951,7 @@ static int bnxt_set_xps_mapping(struct bnxt *bp)
 	cpumask_t *q_map;
 	int rc = 0;

-	q_map = kcalloc(bp->tx_nr_rings_per_tc, sizeof(*q_map), GFP_KERNEL);
+	q_map = kzalloc_objs(*q_map, bp->tx_nr_rings_per_tc, GFP_KERNEL);
 	if (!q_map)
 		return -ENOMEM;

@@ -15650,7 +15644,7 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
 			return -EINVAL;
 		}
 	}
-	new_fltr = kzalloc(sizeof(*new_fltr), GFP_ATOMIC);
+	new_fltr = kzalloc_obj(*new_fltr, GFP_ATOMIC);
 	if (!new_fltr) {
 		bnxt_del_l2_filter(bp, l2_fltr);
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c
index a00b67334f9b..00e3ef076d93 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c
@@ -529,7 +529,7 @@ static int bnxt_dcbnl_ieee_getets(struct net_device *dev, struct ieee_ets *ets)
 		if (bp->dcbx_cap & DCB_CAP_DCBX_HOST)
 			return 0;

-		my_ets = kzalloc(sizeof(*my_ets), GFP_KERNEL);
+		my_ets = kzalloc_obj(*my_ets, GFP_KERNEL);
 		if (!my_ets)
 			return -ENOMEM;
 		rc = bnxt_hwrm_queue_cos2bw_qcfg(bp, my_ets);
@@ -568,7 +568,7 @@ static int bnxt_dcbnl_ieee_setets(struct net_device *dev, struct ieee_ets *ets)
 	rc = bnxt_ets_validate(bp, ets, &max_tc);
 	if (!rc) {
 		if (!my_ets) {
-			my_ets = kzalloc(sizeof(*my_ets), GFP_KERNEL);
+			my_ets = kzalloc_obj(*my_ets, GFP_KERNEL);
 			if (!my_ets)
 				return -ENOMEM;
 			/* initialize PRI2TC mappings to invalid value */
@@ -604,7 +604,7 @@ static int bnxt_dcbnl_ieee_getpfc(struct net_device *dev, struct ieee_pfc *pfc)
 		if (bp->dcbx_cap & DCB_CAP_DCBX_HOST)
 			return 0;

-		my_pfc = kzalloc(sizeof(*my_pfc), GFP_KERNEL);
+		my_pfc = kzalloc_obj(*my_pfc, GFP_KERNEL);
 		if (!my_pfc)
 			return 0;
 		bp->ieee_pfc = my_pfc;
@@ -642,7 +642,7 @@ static int bnxt_dcbnl_ieee_setpfc(struct net_device *dev, struct ieee_pfc *pfc)
 		return -EINVAL;

 	if (!my_pfc) {
-		my_pfc = kzalloc(sizeof(*my_pfc), GFP_KERNEL);
+		my_pfc = kzalloc_obj(*my_pfc, GFP_KERNEL);
 		if (!my_pfc)
 			return -ENOMEM;
 		bp->ieee_pfc = my_pfc;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index 53a83b6680c4..e7455ef8984a 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -1371,7 +1371,7 @@ static int bnxt_add_ntuple_cls_rule(struct bnxt *bp,
 			return -EOPNOTSUPP;
 	}

-	new_fltr = kzalloc(sizeof(*new_fltr), GFP_KERNEL);
+	new_fltr = kzalloc_obj(*new_fltr, GFP_KERNEL);
 	if (!new_fltr)
 		return -ENOMEM;

@@ -5485,7 +5485,7 @@ void bnxt_ethtool_init(struct bnxt *bp)

 	test_info = bp->test_info;
 	if (!test_info) {
-		test_info = kzalloc(sizeof(*bp->test_info), GFP_KERNEL);
+		test_info = kzalloc_obj(*bp->test_info, GFP_KERNEL);
 		if (!test_info)
 			return;
 		bp->test_info = test_info;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c
index 5ce190f50120..fcb4edb24012 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c
@@ -371,7 +371,7 @@ __hwrm_acquire_token(struct bnxt *bp, enum bnxt_hwrm_chnl dst)
 {
 	struct bnxt_hwrm_wait_token *token;

-	token = kzalloc(sizeof(*token), GFP_KERNEL);
+	token = kzalloc_obj(*token, GFP_KERNEL);
 	if (!token)
 		return NULL;

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
index ad89c5fa9b40..0135c53d4b47 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
@@ -983,9 +983,8 @@ static int bnxt_ptp_pps_init(struct bnxt *bp)
 	pps_info = &ptp->pps_info;
 	pps_info->num_pins = resp->num_pins;
 	ptp_info->n_pins = pps_info->num_pins;
-	ptp_info->pin_config = kcalloc(ptp_info->n_pins,
-				       sizeof(*ptp_info->pin_config),
-				       GFP_KERNEL);
+	ptp_info->pin_config = kzalloc_objs(*ptp_info->pin_config,
+					    ptp_info->n_pins, GFP_KERNEL);
 	if (!ptp_info->pin_config) {
 		hwrm_req_drop(bp, req);
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
index be7deb9cc410..d0f5f2ad5b26 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
@@ -459,7 +459,7 @@ static int bnxt_alloc_vf_resources(struct bnxt *bp, int num_vfs)
 	struct pci_dev *pdev = bp->pdev;
 	u32 nr_pages, size, i, j, k = 0;

-	bp->pf.vf = kcalloc(num_vfs, sizeof(struct bnxt_vf_info), GFP_KERNEL);
+	bp->pf.vf = kzalloc_objs(struct bnxt_vf_info, num_vfs, GFP_KERNEL);
 	if (!bp->pf.vf)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
index 2d66bf59cd64..c678305d588c 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
@@ -977,7 +977,7 @@ bnxt_tc_get_l2_node(struct bnxt *bp, struct rhashtable *l2_table,

 	l2_node = rhashtable_lookup_fast(l2_table, l2_key, ht_params);
 	if (!l2_node) {
-		l2_node = kzalloc(sizeof(*l2_node), GFP_KERNEL);
+		l2_node = kzalloc_obj(*l2_node, GFP_KERNEL);
 		if (!l2_node) {
 			rc = -ENOMEM;
 			return NULL;
@@ -1128,7 +1128,7 @@ bnxt_tc_get_tunnel_node(struct bnxt *bp, struct rhashtable *tunnel_table,

 	tunnel_node = rhashtable_lookup_fast(tunnel_table, tun_key, *ht_params);
 	if (!tunnel_node) {
-		tunnel_node = kzalloc(sizeof(*tunnel_node), GFP_KERNEL);
+		tunnel_node = kzalloc_obj(*tunnel_node, GFP_KERNEL);
 		if (!tunnel_node) {
 			rc = -ENOMEM;
 			goto err;
@@ -1535,7 +1535,7 @@ static int bnxt_tc_add_flow(struct bnxt *bp, u16 src_fid,
 	int rc;

 	/* allocate memory for the new flow and it's node */
-	new_node = kzalloc(sizeof(*new_node), GFP_KERNEL);
+	new_node = kzalloc_obj(*new_node, GFP_KERNEL);
 	if (!new_node) {
 		rc = -ENOMEM;
 		goto done;
@@ -1915,7 +1915,7 @@ static int bnxt_tc_setup_indr_block(struct net_device *netdev, struct Qdisc *sch

 	switch (f->command) {
 	case FLOW_BLOCK_BIND:
-		cb_priv = kmalloc(sizeof(*cb_priv), GFP_KERNEL);
+		cb_priv = kmalloc_obj(*cb_priv, GFP_KERNEL);
 		if (!cb_priv)
 			return -ENOMEM;

@@ -2018,7 +2018,7 @@ int bnxt_init_tc(struct bnxt *bp)
 	if (bp->hwrm_spec_code < 0x10803)
 		return 0;

-	tc_info = kzalloc(sizeof(*tc_info), GFP_KERNEL);
+	tc_info = kzalloc_obj(*tc_info, GFP_KERNEL);
 	if (!tc_info)
 		return -ENOMEM;
 	mutex_init(&tc_info->lock);
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
index 927971c362f1..ca95f6e70dde 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -333,8 +333,8 @@ void bnxt_ulp_irq_restart(struct bnxt *bp, int err)
 			return;

 		if (!err) {
-			ent = kcalloc(ulp->msix_requested, sizeof(*ent),
-				      GFP_KERNEL);
+			ent = kzalloc_objs(*ent, ulp->msix_requested,
+					   GFP_KERNEL);
 			if (!ent)
 				return;
 			bnxt_fill_msix_vecs(bp, ent);
@@ -479,7 +479,7 @@ void bnxt_rdma_aux_device_init(struct bnxt *bp)
 	if (!(bp->flags & BNXT_FLAG_ROCE_CAP))
 		return;

-	aux_priv = kzalloc(sizeof(*bp->aux_priv), GFP_KERNEL);
+	aux_priv = kzalloc_obj(*bp->aux_priv, GFP_KERNEL);
 	if (!aux_priv)
 		goto exit;

@@ -509,13 +509,13 @@ void bnxt_rdma_aux_device_init(struct bnxt *bp)
 	 * any error unwinding will need to include a call to
 	 * auxiliary_device_uninit.
 	 */
-	edev = kzalloc(sizeof(*edev), GFP_KERNEL);
+	edev = kzalloc_obj(*edev, GFP_KERNEL);
 	if (!edev)
 		goto aux_dev_uninit;

 	aux_priv->edev = edev;

-	ulp = kzalloc(sizeof(*ulp), GFP_KERNEL);
+	ulp = kzalloc_obj(*ulp, GFP_KERNEL);
 	if (!ulp)
 		goto aux_dev_uninit;

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c
index bd116fd578d8..d0a67616f927 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c
@@ -496,7 +496,7 @@ int bnxt_vf_reps_create(struct bnxt *bp)
 	if (!(bp->flags & BNXT_FLAG_DSN_VALID))
 		return -ENODEV;

-	bp->vf_reps = kcalloc(num_vfs, sizeof(vf_rep), GFP_KERNEL);
+	bp->vf_reps = kzalloc_objs(vf_rep, num_vfs, GFP_KERNEL);
 	if (!bp->vf_reps)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c
index 6e97a5a7daaf..bd4238737fef 100644
--- a/drivers/net/ethernet/broadcom/cnic.c
+++ b/drivers/net/ethernet/broadcom/cnic.c
@@ -1062,7 +1062,7 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)
 		}
 	}

-	udev = kzalloc(sizeof(struct cnic_uio_dev), GFP_ATOMIC);
+	udev = kzalloc_obj(struct cnic_uio_dev, GFP_ATOMIC);
 	if (!udev)
 		return -ENOMEM;

@@ -1208,7 +1208,7 @@ static int cnic_alloc_bnx2x_context(struct cnic_dev *dev)
 	if (blks > cp->ethdev->ctx_tbl_len)
 		return -ENOMEM;

-	cp->ctx_arr = kcalloc(blks, sizeof(struct cnic_ctx), GFP_KERNEL);
+	cp->ctx_arr = kzalloc_objs(struct cnic_ctx, blks, GFP_KERNEL);
 	if (cp->ctx_arr == NULL)
 		return -ENOMEM;

@@ -1261,13 +1261,13 @@ static int cnic_alloc_bnx2x_resc(struct cnic_dev *dev)
 			cp->fcoe_init_cid = 0x10;
 	}

-	cp->iscsi_tbl = kcalloc(MAX_ISCSI_TBL_SZ, sizeof(struct cnic_iscsi),
-				GFP_KERNEL);
+	cp->iscsi_tbl = kzalloc_objs(struct cnic_iscsi, MAX_ISCSI_TBL_SZ,
+				     GFP_KERNEL);
 	if (!cp->iscsi_tbl)
 		goto error;

-	cp->ctx_tbl = kcalloc(cp->max_cid_space, sizeof(struct cnic_context),
-			      GFP_KERNEL);
+	cp->ctx_tbl = kzalloc_objs(struct cnic_context, cp->max_cid_space,
+				   GFP_KERNEL);
 	if (!cp->ctx_tbl)
 		goto error;

@@ -4105,8 +4105,8 @@ static int cnic_cm_alloc_mem(struct cnic_dev *dev)
 	u32 port_id;
 	int i;

-	cp->csk_tbl = kvcalloc(MAX_CM_SK_TBL_SZ, sizeof(struct cnic_sock),
-			       GFP_KERNEL);
+	cp->csk_tbl = kvzalloc_objs(struct cnic_sock, MAX_CM_SK_TBL_SZ,
+				    GFP_KERNEL);
 	if (!cp->csk_tbl)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 05512aa10c20..a6f8805e1932 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -3083,8 +3083,8 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv, bool flush_rx)
 	/* Initialize common Rx ring structures */
 	priv->rx_bds = priv->base + priv->hw_params->rdma_offset;
 	priv->num_rx_bds = TOTAL_DESC;
-	priv->rx_cbs = kcalloc(priv->num_rx_bds, sizeof(struct enet_cb),
-			       GFP_KERNEL);
+	priv->rx_cbs = kzalloc_objs(struct enet_cb, priv->num_rx_bds,
+				    GFP_KERNEL);
 	if (!priv->rx_cbs)
 		return -ENOMEM;

@@ -3096,8 +3096,8 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv, bool flush_rx)
 	/* Initialize common TX ring structures */
 	priv->tx_bds = priv->base + priv->hw_params->tdma_offset;
 	priv->num_tx_bds = TOTAL_DESC;
-	priv->tx_cbs = kcalloc(priv->num_tx_bds, sizeof(struct enet_cb),
-			       GFP_KERNEL);
+	priv->tx_cbs = kzalloc_objs(struct enet_cb, priv->num_tx_bds,
+				    GFP_KERNEL);
 	if (!priv->tx_cbs) {
 		kfree(priv->rx_cbs);
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/broadcom/sb1250-mac.c b/drivers/net/ethernet/broadcom/sb1250-mac.c
index 30865fe03eeb..4787ea610edc 100644
--- a/drivers/net/ethernet/broadcom/sb1250-mac.c
+++ b/drivers/net/ethernet/broadcom/sb1250-mac.c
@@ -622,9 +622,9 @@ static void sbdma_initctx(struct sbmacdma *d, struct sbmac_softc *s, int chan,

 	d->sbdma_maxdescr = maxdescr;

-	d->sbdma_dscrtable_unaligned = kcalloc(d->sbdma_maxdescr + 1,
-					       sizeof(*d->sbdma_dscrtable),
-					       GFP_KERNEL);
+	d->sbdma_dscrtable_unaligned = kzalloc_objs(*d->sbdma_dscrtable,
+						    d->sbdma_maxdescr + 1,
+						    GFP_KERNEL);

 	/*
 	 * The descriptor table must be aligned to at least 16 bytes or the
@@ -642,8 +642,8 @@ static void sbdma_initctx(struct sbmacdma *d, struct sbmac_softc *s, int chan,
 	 * And context table
 	 */

-	d->sbdma_ctxtable = kcalloc(d->sbdma_maxdescr,
-				    sizeof(*d->sbdma_ctxtable), GFP_KERNEL);
+	d->sbdma_ctxtable = kzalloc_objs(*d->sbdma_ctxtable, d->sbdma_maxdescr,
+					 GFP_KERNEL);

 #ifdef CONFIG_SBMAC_COALESCE
 	/*
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 75f66587983d..746c95dc11cd 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -8729,9 +8729,8 @@ static int tg3_mem_tx_acquire(struct tg3 *tp)
 		tnapi++;

 	for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
-		tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE,
-					    sizeof(struct tg3_tx_ring_info),
-					    GFP_KERNEL);
+		tnapi->tx_buffers = kzalloc_objs(struct tg3_tx_ring_info,
+						 TG3_TX_RING_SIZE, GFP_KERNEL);
 		if (!tnapi->tx_buffers)
 			goto err_out;

diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c
index 9bed33295839..ec3750f055b8 100644
--- a/drivers/net/ethernet/brocade/bna/bnad.c
+++ b/drivers/net/ethernet/brocade/bna/bnad.c
@@ -1345,8 +1345,8 @@ bnad_mem_alloc(struct bnad *bnad,
 		return 0;
 	}

-	mem_info->mdl = kcalloc(mem_info->num, sizeof(struct bna_mem_descr),
-				GFP_KERNEL);
+	mem_info->mdl = kzalloc_objs(struct bna_mem_descr, mem_info->num,
+				     GFP_KERNEL);
 	if (mem_info->mdl == NULL)
 		return -ENOMEM;

@@ -1458,9 +1458,8 @@ bnad_txrx_irq_alloc(struct bnad *bnad, enum bnad_intr_source src,

 	if (cfg_flags & BNAD_CF_MSIX) {
 		intr_info->intr_type = BNA_INTR_T_MSIX;
-		intr_info->idl = kcalloc(intr_info->num,
-					sizeof(struct bna_intr_descr),
-					GFP_KERNEL);
+		intr_info->idl = kzalloc_objs(struct bna_intr_descr,
+					      intr_info->num, GFP_KERNEL);
 		if (!intr_info->idl)
 			return -ENOMEM;

@@ -1484,9 +1483,8 @@ bnad_txrx_irq_alloc(struct bnad *bnad, enum bnad_intr_source src,
 	} else {
 		intr_info->intr_type = BNA_INTR_T_INTX;
 		intr_info->num = 1;
-		intr_info->idl = kcalloc(intr_info->num,
-					sizeof(struct bna_intr_descr),
-					GFP_KERNEL);
+		intr_info->idl = kzalloc_objs(struct bna_intr_descr,
+					      intr_info->num, GFP_KERNEL);
 		if (!intr_info->idl)
 			return -ENOMEM;

@@ -2642,7 +2640,7 @@ bnad_enable_msix(struct bnad *bnad)
 		return;

 	bnad->msix_table =
-		kcalloc(bnad->msix_num, sizeof(struct msix_entry), GFP_KERNEL);
+		kzalloc_objs(struct msix_entry, bnad->msix_num, GFP_KERNEL);

 	if (!bnad->msix_table)
 		goto intx_mode;
diff --git a/drivers/net/ethernet/brocade/bna/bnad_debugfs.c b/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
index 8f0972e6737c..8a2eb4504760 100644
--- a/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
+++ b/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
@@ -45,7 +45,7 @@ bnad_debugfs_open_fwtrc(struct inode *inode, struct file *file)
 	unsigned long flags;
 	int rc;

-	fw_debug = kzalloc(sizeof(struct bnad_debug_info), GFP_KERNEL);
+	fw_debug = kzalloc_obj(struct bnad_debug_info, GFP_KERNEL);
 	if (!fw_debug)
 		return -ENOMEM;

@@ -85,7 +85,7 @@ bnad_debugfs_open_fwsave(struct inode *inode, struct file *file)
 	unsigned long flags;
 	int rc;

-	fw_debug = kzalloc(sizeof(struct bnad_debug_info), GFP_KERNEL);
+	fw_debug = kzalloc_obj(struct bnad_debug_info, GFP_KERNEL);
 	if (!fw_debug)
 		return -ENOMEM;

@@ -122,7 +122,7 @@ bnad_debugfs_open_reg(struct inode *inode, struct file *file)
 {
 	struct bnad_debug_info *reg_debug;

-	reg_debug = kzalloc(sizeof(struct bnad_debug_info), GFP_KERNEL);
+	reg_debug = kzalloc_obj(struct bnad_debug_info, GFP_KERNEL);
 	if (!reg_debug)
 		return -ENOMEM;

@@ -185,7 +185,7 @@ bnad_debugfs_open_drvinfo(struct inode *inode, struct file *file)
 	struct bnad_debug_info *drv_info;
 	int rc;

-	drv_info = kzalloc(sizeof(struct bnad_debug_info), GFP_KERNEL);
+	drv_info = kzalloc_obj(struct bnad_debug_info, GFP_KERNEL);
 	if (!drv_info)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/brocade/bna/bnad_ethtool.c b/drivers/net/ethernet/brocade/bna/bnad_ethtool.c
index 216e25f26dbb..446234e3ca53 100644
--- a/drivers/net/ethernet/brocade/bna/bnad_ethtool.c
+++ b/drivers/net/ethernet/brocade/bna/bnad_ethtool.c
@@ -285,7 +285,7 @@ bnad_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo)

 	strscpy(drvinfo->driver, BNAD_NAME, sizeof(drvinfo->driver));

-	ioc_attr = kzalloc(sizeof(*ioc_attr), GFP_KERNEL);
+	ioc_attr = kzalloc_obj(*ioc_attr, GFP_KERNEL);
 	if (ioc_attr) {
 		spin_lock_irqsave(&bnad->bna_lock, flags);
 		bfa_nw_ioc_get_attr(&bnad->bna.ioceth.ioc, ioc_attr);
@@ -900,7 +900,7 @@ bnad_get_flash_partition_by_offset(struct bnad *bnad, u32 offset,
 	u32 i, flash_part = 0, ret;
 	unsigned long flags = 0;

-	flash_attr = kzalloc(sizeof(struct bfa_flash_attr), GFP_KERNEL);
+	flash_attr = kzalloc_obj(struct bfa_flash_attr, GFP_KERNEL);
 	if (!flash_attr)
 		return 0;

diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index 43cd013bb70e..86f516563db6 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -3734,7 +3734,7 @@ static int gem_add_flow_filter(struct net_device *netdev,
 	int ret = -EINVAL;
 	bool added = false;

-	newfs = kmalloc(sizeof(*newfs), GFP_KERNEL);
+	newfs = kmalloc_obj(*newfs, GFP_KERNEL);
 	if (newfs == NULL)
 		return -ENOMEM;
 	memcpy(&newfs->fs, fs, sizeof(newfs->fs));
diff --git a/drivers/net/ethernet/calxeda/xgmac.c b/drivers/net/ethernet/calxeda/xgmac.c
index 331ac6a3dc38..283948d784da 100644
--- a/drivers/net/ethernet/calxeda/xgmac.c
+++ b/drivers/net/ethernet/calxeda/xgmac.c
@@ -729,8 +729,8 @@ static int xgmac_dma_desc_rings_init(struct net_device *dev)

 	netdev_dbg(priv->dev, "mtu [%d] bfsize [%d]\n", dev->mtu, bfsize);

-	priv->rx_skbuff = kcalloc(DMA_RX_RING_SZ, sizeof(struct sk_buff *),
-				  GFP_KERNEL);
+	priv->rx_skbuff = kzalloc_objs(struct sk_buff *, DMA_RX_RING_SZ,
+				       GFP_KERNEL);
 	if (!priv->rx_skbuff)
 		return -ENOMEM;

@@ -742,8 +742,8 @@ static int xgmac_dma_desc_rings_init(struct net_device *dev)
 	if (!priv->dma_rx)
 		goto err_dma_rx;

-	priv->tx_skbuff = kcalloc(DMA_TX_RING_SZ, sizeof(struct sk_buff *),
-				  GFP_KERNEL);
+	priv->tx_skbuff = kzalloc_objs(struct sk_buff *, DMA_TX_RING_SZ,
+				       GFP_KERNEL);
 	if (!priv->tx_skbuff)
 		goto err_tx_skb;

diff --git a/drivers/net/ethernet/cavium/liquidio/lio_core.c b/drivers/net/ethernet/cavium/liquidio/lio_core.c
index 215dac201b4a..baccb0169068 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_core.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_core.c
@@ -89,12 +89,12 @@ int lio_setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs)
 	int i, j;

 	lio->glist_lock =
-	    kcalloc(num_iqs, sizeof(*lio->glist_lock), GFP_KERNEL);
+	    kzalloc_objs(*lio->glist_lock, num_iqs, GFP_KERNEL);
 	if (!lio->glist_lock)
 		return -ENOMEM;

 	lio->glist =
-	    kcalloc(num_iqs, sizeof(*lio->glist), GFP_KERNEL);
+	    kzalloc_objs(*lio->glist, num_iqs, GFP_KERNEL);
 	if (!lio->glist) {
 		kfree(lio->glist_lock);
 		lio->glist_lock = NULL;
@@ -107,10 +107,10 @@ int lio_setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs)
 	/* allocate memory to store virtual and dma base address of
 	 * per glist consistent memory
 	 */
-	lio->glists_virt_base = kcalloc(num_iqs, sizeof(*lio->glists_virt_base),
-					GFP_KERNEL);
-	lio->glists_dma_base = kcalloc(num_iqs, sizeof(*lio->glists_dma_base),
-				       GFP_KERNEL);
+	lio->glists_virt_base = kzalloc_objs(*lio->glists_virt_base, num_iqs,
+					     GFP_KERNEL);
+	lio->glists_dma_base = kzalloc_objs(*lio->glists_dma_base, num_iqs,
+					    GFP_KERNEL);

 	if (!lio->glists_virt_base || !lio->glists_dma_base) {
 		lio_delete_glists(lio);
@@ -138,7 +138,7 @@ int lio_setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs)
 			g = kzalloc_node(sizeof(*g), GFP_KERNEL,
 					 numa_node);
 			if (!g)
-				g = kzalloc(sizeof(*g), GFP_KERNEL);
+				g = kzalloc_obj(*g, GFP_KERNEL);
 			if (!g)
 				break;

@@ -1051,9 +1051,8 @@ int octeon_setup_interrupt(struct octeon_device *oct, u32 num_ioqs)
 			aux_irq_name = &queue_irq_names
 				[IRQ_NAME_OFF(MAX_IOQ_INTERRUPTS_PER_PF)];

-		oct->msix_entries = kcalloc(oct->num_msix_irqs,
-					    sizeof(struct msix_entry),
-					    GFP_KERNEL);
+		oct->msix_entries = kzalloc_objs(struct msix_entry,
+						 oct->num_msix_irqs, GFP_KERNEL);
 		if (!oct->msix_entries) {
 			dev_err(&oct->pci_dev->dev, "Memory Alloc failed...\n");
 			kfree(oct->irq_name_storage);
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.c b/drivers/net/ethernet/cavium/liquidio/octeon_device.c
index 1753bb87dfbd..e61f18467a15 100644
--- a/drivers/net/ethernet/cavium/liquidio/octeon_device.c
+++ b/drivers/net/ethernet/cavium/liquidio/octeon_device.c
@@ -1164,7 +1164,7 @@ octeon_register_dispatch_fn(struct octeon_device *oct,

 		dev_dbg(&oct->pci_dev->dev,
 			"Adding opcode to dispatch list linked list\n");
-		dispatch = kmalloc(sizeof(*dispatch), GFP_KERNEL);
+		dispatch = kmalloc_obj(*dispatch, GFP_KERNEL);
 		if (!dispatch)
 			return 1;

diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
index 0b6e30a8feb0..7ef2a9f606a1 100644
--- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
+++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
@@ -1465,7 +1465,7 @@ int nicvf_open(struct net_device *netdev)

 	/* Register NAPI handler for processing CQEs */
 	for (qidx = 0; qidx < qs->cq_cnt; qidx++) {
-		cq_poll = kzalloc(sizeof(*cq_poll), GFP_KERNEL);
+		cq_poll = kzalloc_obj(*cq_poll, GFP_KERNEL);
 		if (!cq_poll) {
 			err = -ENOMEM;
 			goto napi_del;
@@ -2052,9 +2052,9 @@ static void nicvf_set_rx_mode(struct net_device *netdev)
 			mode |= BGX_XCAST_MCAST_FILTER;
 			/* here we need to copy mc addrs */
 			if (netdev_mc_count(netdev)) {
-				mc_list = kmalloc(struct_size(mc_list, mc,
-							      netdev_mc_count(netdev)),
-						  GFP_ATOMIC);
+				mc_list = kmalloc_flex(*mc_list, mc,
+						       netdev_mc_count(netdev),
+						       GFP_ATOMIC);
 				if (unlikely(!mc_list))
 					return;
 				mc_list->count = 0;
diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
index 5211759bfe47..12bea0b6a4e6 100644
--- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
+++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
@@ -289,8 +289,7 @@ static int  nicvf_init_rbdr(struct nicvf *nic, struct rbdr *rbdr,
 		rbdr->is_xdp = true;
 	}
 	rbdr->pgcnt = roundup_pow_of_two(rbdr->pgcnt);
-	rbdr->pgcache = kcalloc(rbdr->pgcnt, sizeof(*rbdr->pgcache),
-				GFP_KERNEL);
+	rbdr->pgcache = kzalloc_objs(*rbdr->pgcache, rbdr->pgcnt, GFP_KERNEL);
 	if (!rbdr->pgcache)
 		return -ENOMEM;
 	rbdr->pgidx = 0;
diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
index 9efb60842ad1..87723e4140b0 100644
--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
+++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
@@ -1086,8 +1086,7 @@ static int bgx_lmac_enable(struct bgx *bgx, u8 lmacid)

 	/* actual number of filters available to exact LMAC */
 	lmac->dmacs_count = (RX_DMAC_COUNT / bgx->lmac_count);
-	lmac->dmacs = kcalloc(lmac->dmacs_count, sizeof(*lmac->dmacs),
-			      GFP_KERNEL);
+	lmac->dmacs = kzalloc_objs(*lmac->dmacs, lmac->dmacs_count, GFP_KERNEL);
 	if (!lmac->dmacs)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/chelsio/cxgb/espi.c b/drivers/net/ethernet/chelsio/cxgb/espi.c
index ef70569435be..a7dd518b6ea9 100644
--- a/drivers/net/ethernet/chelsio/cxgb/espi.c
+++ b/drivers/net/ethernet/chelsio/cxgb/espi.c
@@ -280,7 +280,7 @@ void t1_espi_destroy(struct peespi *espi)

 struct peespi *t1_espi_create(adapter_t *adapter)
 {
-	struct peespi *espi = kzalloc(sizeof(*espi), GFP_KERNEL);
+	struct peespi *espi = kzalloc_obj(*espi, GFP_KERNEL);

 	if (espi)
 		espi->adapter = adapter;
diff --git a/drivers/net/ethernet/chelsio/cxgb/mv88e1xxx.c b/drivers/net/ethernet/chelsio/cxgb/mv88e1xxx.c
index 30b003484fc1..4c4a43828110 100644
--- a/drivers/net/ethernet/chelsio/cxgb/mv88e1xxx.c
+++ b/drivers/net/ethernet/chelsio/cxgb/mv88e1xxx.c
@@ -358,7 +358,7 @@ static struct cphy *mv88e1xxx_phy_create(struct net_device *dev, int phy_addr,
 					 const struct mdio_ops *mdio_ops)
 {
 	struct adapter *adapter = netdev_priv(dev);
-	struct cphy *cphy = kzalloc(sizeof(*cphy), GFP_KERNEL);
+	struct cphy *cphy = kzalloc_obj(*cphy, GFP_KERNEL);

 	if (!cphy)
 		return NULL;
diff --git a/drivers/net/ethernet/chelsio/cxgb/mv88x201x.c b/drivers/net/ethernet/chelsio/cxgb/mv88x201x.c
index 556c8ad68fa8..8c3d3250b72c 100644
--- a/drivers/net/ethernet/chelsio/cxgb/mv88x201x.c
+++ b/drivers/net/ethernet/chelsio/cxgb/mv88x201x.c
@@ -203,7 +203,7 @@ static struct cphy *mv88x201x_phy_create(struct net_device *dev, int phy_addr,
 					 const struct mdio_ops *mdio_ops)
 {
 	u32 val;
-	struct cphy *cphy = kzalloc(sizeof(*cphy), GFP_KERNEL);
+	struct cphy *cphy = kzalloc_obj(*cphy, GFP_KERNEL);

 	if (!cphy)
 		return NULL;
diff --git a/drivers/net/ethernet/chelsio/cxgb/my3126.c b/drivers/net/ethernet/chelsio/cxgb/my3126.c
index 60aa45b375b6..9d29f0767dcb 100644
--- a/drivers/net/ethernet/chelsio/cxgb/my3126.c
+++ b/drivers/net/ethernet/chelsio/cxgb/my3126.c
@@ -171,7 +171,7 @@ static const struct cphy_ops my3126_ops = {
 static struct cphy *my3126_phy_create(struct net_device *dev,
 			int phy_addr, const struct mdio_ops *mdio_ops)
 {
-	struct cphy *cphy = kzalloc(sizeof (*cphy), GFP_KERNEL);
+	struct cphy *cphy = kzalloc_obj(*cphy, GFP_KERNEL);

 	if (!cphy)
 		return NULL;
diff --git a/drivers/net/ethernet/chelsio/cxgb/sge.c b/drivers/net/ethernet/chelsio/cxgb/sge.c
index 5f354cf62cdd..21d7f84af72e 100644
--- a/drivers/net/ethernet/chelsio/cxgb/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb/sge.c
@@ -366,7 +366,7 @@ static int tx_sched_init(struct sge *sge)
 	struct sched *s;
 	int i;

-	s = kzalloc(sizeof (struct sched), GFP_KERNEL);
+	s = kzalloc_obj(struct sched, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

@@ -2095,7 +2095,7 @@ static void espibug_workaround(struct timer_list *t)
  */
 struct sge *t1_sge_create(struct adapter *adapter, struct sge_params *p)
 {
-	struct sge *sge = kzalloc(sizeof(*sge), GFP_KERNEL);
+	struct sge *sge = kzalloc_obj(*sge, GFP_KERNEL);
 	int i;

 	if (!sge)
diff --git a/drivers/net/ethernet/chelsio/cxgb/tp.c b/drivers/net/ethernet/chelsio/cxgb/tp.c
index 4337cee0763e..66dfe57b9f01 100644
--- a/drivers/net/ethernet/chelsio/cxgb/tp.c
+++ b/drivers/net/ethernet/chelsio/cxgb/tp.c
@@ -58,7 +58,7 @@ void t1_tp_destroy(struct petp *tp)

 struct petp *t1_tp_create(adapter_t *adapter, struct tp_params *p)
 {
-	struct petp *tp = kzalloc(sizeof(*tp), GFP_KERNEL);
+	struct petp *tp = kzalloc_obj(*tp, GFP_KERNEL);

 	if (!tp)
 		return NULL;
diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
index 3b1321c8ed14..ce9880805a42 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
@@ -3242,7 +3242,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	mmio_len = pci_resource_len(pdev, 0);
 	ai = t3_get_adapter_info(ent->driver_data);

-	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(*adapter, GFP_KERNEL);
 	if (!adapter) {
 		err = -ENOMEM;
 		goto out_release_regions;
diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c
index 5a9f6925e1fa..cf8916f4e3d6 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c
@@ -1185,7 +1185,7 @@ int cxgb3_offload_activate(struct adapter *adapter)
 	unsigned int l2t_capacity;
 	struct l2t_data *l2td;

-	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc_obj(*t, GFP_KERNEL);
 	if (!t)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.c b/drivers/net/ethernet/chelsio/cxgb3/l2t.c
index 5d5f3380ecca..6bcb952fe832 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/l2t.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/l2t.c
@@ -408,7 +408,7 @@ struct l2t_data *t3_init_l2t(unsigned int l2t_capacity)
 	struct l2t_data *d;
 	int i;

-	d = kvzalloc(struct_size(d, l2tab, l2t_capacity), GFP_KERNEL);
+	d = kvzalloc_flex(*d, l2tab, l2t_capacity, GFP_KERNEL);
 	if (!d)
 		return NULL;

diff --git a/drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c b/drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c
index 5060d3998889..fb958857bfd6 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c
@@ -287,7 +287,7 @@ struct clip_tbl *t4_init_clip_tbl(unsigned int clipt_start,
 	if (clipt_size < CLIPT_MIN_HASH_BUCKETS)
 		return NULL;

-	ctbl = kvzalloc(struct_size(ctbl, hash_list, clipt_size), GFP_KERNEL);
+	ctbl = kvzalloc_flex(*ctbl, hash_list, clipt_size, GFP_KERNEL);
 	if (!ctbl)
 		return NULL;

@@ -301,7 +301,7 @@ struct clip_tbl *t4_init_clip_tbl(unsigned int clipt_start,
 	for (i = 0; i < ctbl->clipt_size; ++i)
 		INIT_LIST_HEAD(&ctbl->hash_list[i]);

-	cl_list = kvcalloc(clipt_size, sizeof(struct clip_entry), GFP_KERNEL);
+	cl_list = kvzalloc_objs(struct clip_entry, clipt_size, GFP_KERNEL);
 	if (!cl_list) {
 		kvfree(ctbl);
 		return NULL;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
index 14e0d989c3ba..6e2e5644b825 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
@@ -860,7 +860,7 @@ static int cctrl_tbl_show(struct seq_file *seq, void *v)
 	u16 (*incr)[NCCTRL_WIN];
 	struct adapter *adap = seq->private;

-	incr = kmalloc_array(NMTUS, sizeof(*incr), GFP_KERNEL);
+	incr = kmalloc_objs(*incr, NMTUS, GFP_KERNEL);
 	if (!incr)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
index faf8f7e86520..3c66db1f765a 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
@@ -2250,13 +2250,12 @@ int cxgb4_init_ethtool_filters(struct adapter *adap)
 	u32 nentries, i;
 	int ret;

-	eth_filter = kzalloc(sizeof(*eth_filter), GFP_KERNEL);
+	eth_filter = kzalloc_obj(*eth_filter, GFP_KERNEL);
 	if (!eth_filter)
 		return -ENOMEM;

-	eth_filter_info = kcalloc(adap->params.nports,
-				  sizeof(*eth_filter_info),
-				  GFP_KERNEL);
+	eth_filter_info = kzalloc_objs(*eth_filter_info, adap->params.nports,
+				       GFP_KERNEL);
 	if (!eth_filter_info) {
 		ret = -ENOMEM;
 		goto free_eth_filter;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
index dd9e68465e69..dad0e72a52ab 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
@@ -1389,7 +1389,7 @@ static int cxgb4_set_hash_filter(struct net_device *dev,
 	if (iq < 0)
 		return iq;

-	f = kzalloc(sizeof(*f), GFP_KERNEL);
+	f = kzalloc_obj(*f, GFP_KERNEL);
 	if (!f)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 043733c5c812..20eeb4deab49 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -388,7 +388,7 @@ static int cxgb4_mac_sync(struct net_device *netdev, const u8 *mac_addr)
 	 * list and program it
 	 */
 	if (uhash || mhash) {
-		new_entry = kzalloc(sizeof(*new_entry), GFP_ATOMIC);
+		new_entry = kzalloc_obj(*new_entry, GFP_ATOMIC);
 		if (!new_entry)
 			return -ENOMEM;
 		ether_addr_copy(new_entry->addr, mac_addr);
@@ -478,7 +478,7 @@ int cxgb4_change_mac(struct port_info *pi, unsigned int viid,
 				goto set_hash;
 			}
 		}
-		new_entry = kzalloc(sizeof(*new_entry), GFP_KERNEL);
+		new_entry = kzalloc_obj(*new_entry, GFP_KERNEL);
 		if (!new_entry)
 			return -ENOMEM;
 		ether_addr_copy(new_entry->addr, addr);
@@ -1330,7 +1330,7 @@ static int cxgb4_port_mirror_alloc_queues(struct net_device *dev)
 	if (s->mirror_rxq[pi->port_id])
 		return 0;

-	mirror_rxq = kcalloc(pi->nmirrorqsets, sizeof(*mirror_rxq), GFP_KERNEL);
+	mirror_rxq = kzalloc_objs(*mirror_rxq, pi->nmirrorqsets, GFP_KERNEL);
 	if (!mirror_rxq)
 		return -ENOMEM;

@@ -4057,7 +4057,7 @@ static int adap_config_hma(struct adapter *adapter)

 	page_size = HMA_PAGE_SIZE;
 	page_order = HMA_PAGE_ORDER;
-	adapter->hma.sgt = kzalloc(sizeof(*adapter->hma.sgt), GFP_KERNEL);
+	adapter->hma.sgt = kzalloc_obj(*adapter->hma.sgt, GFP_KERNEL);
 	if (unlikely(!adapter->hma.sgt)) {
 		dev_err(adapter->pdev_dev, "HMA SG table allocation failed\n");
 		return -ENOMEM;
@@ -4097,8 +4097,7 @@ static int adap_config_hma(struct adapter *adapter)
 	}
 	adapter->hma.flags |= HMA_DMA_MAPPED_FLAG;

-	adapter->hma.phy_addr = kcalloc(sgt->nents, sizeof(dma_addr_t),
-					GFP_KERNEL);
+	adapter->hma.phy_addr = kzalloc_objs(dma_addr_t, sgt->nents, GFP_KERNEL);
 	if (unlikely(!adapter->hma.phy_addr))
 		goto free_hma;

@@ -4812,7 +4811,7 @@ static int adap_init0(struct adapter *adap, int vpd_skip)
 		/* allocate memory to read the header of the firmware on the
 		 * card
 		 */
-		card_fw = kvzalloc(sizeof(*card_fw), GFP_KERNEL);
+		card_fw = kvzalloc_obj(*card_fw, GFP_KERNEL);
 		if (!card_fw) {
 			ret = -ENOMEM;
 			goto bye;
@@ -5022,15 +5021,15 @@ static int adap_init0(struct adapter *adap, int vpd_skip)
 	adap->sge.egr_sz = val[0] - adap->sge.egr_start + 1;
 	adap->sge.ingr_sz = val[1] - adap->sge.ingr_start + 1;

-	adap->sge.egr_map = kcalloc(adap->sge.egr_sz,
-				    sizeof(*adap->sge.egr_map), GFP_KERNEL);
+	adap->sge.egr_map = kzalloc_objs(*adap->sge.egr_map, adap->sge.egr_sz,
+					 GFP_KERNEL);
 	if (!adap->sge.egr_map) {
 		ret = -ENOMEM;
 		goto bye;
 	}

-	adap->sge.ingr_map = kcalloc(adap->sge.ingr_sz,
-				     sizeof(*adap->sge.ingr_map), GFP_KERNEL);
+	adap->sge.ingr_map = kzalloc_objs(*adap->sge.ingr_map,
+					  adap->sge.ingr_sz, GFP_KERNEL);
 	if (!adap->sge.ingr_map) {
 		ret = -ENOMEM;
 		goto bye;
@@ -5836,7 +5835,7 @@ static int alloc_msix_info(struct adapter *adap, u32 num_vec)
 {
 	struct msix_info *msix_info;

-	msix_info = kcalloc(num_vec, sizeof(*msix_info), GFP_KERNEL);
+	msix_info = kzalloc_objs(*msix_info, num_vec, GFP_KERNEL);
 	if (!msix_info)
 		return -ENOMEM;

@@ -5935,7 +5934,7 @@ static int enable_msix(struct adapter *adap)
 	want += EXTRA_VECS;
 	need += EXTRA_VECS;

-	entries = kmalloc_array(want, sizeof(*entries), GFP_KERNEL);
+	entries = kmalloc_objs(*entries, want, GFP_KERNEL);
 	if (!entries)
 		return -ENOMEM;

@@ -6350,8 +6349,9 @@ static int cxgb4_iov_configure(struct pci_dev *pdev, int num_vfs)
 			return err;
 		}
 		/* Allocate and set up VF Information. */
-		adap->vfinfo = kcalloc(pci_sriov_get_totalvfs(pdev),
-				       sizeof(struct vf_info), GFP_KERNEL);
+		adap->vfinfo = kzalloc_objs(struct vf_info,
+					    pci_sriov_get_totalvfs(pdev),
+					    GFP_KERNEL);
 		if (!adap->vfinfo) {
 			unregister_netdev(adap->port[0]);
 			free_netdev(adap->port[0]);
@@ -6604,7 +6604,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 		goto out_disable_device;
 	}

-	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(*adapter, GFP_KERNEL);
 	if (!adapter) {
 		err = -ENOMEM;
 		goto out_unmap_bar0;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c
index 60f4d5b5eb3a..94c8ce39310b 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c
@@ -42,7 +42,7 @@ static int cxgb4_mps_ref_inc(struct adapter *adap, const u8 *mac_addr,
 			goto unlock;
 		}
 	}
-	mps_entry = kzalloc(sizeof(*mps_entry), GFP_ATOMIC);
+	mps_entry = kzalloc_obj(*mps_entry, GFP_ATOMIC);
 	if (!mps_entry) {
 		ret = -ENOMEM;
 		goto unlock;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
index e2b5554531b5..79db92f3ba62 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
@@ -145,7 +145,7 @@ static void cxgb4_action_natmode_tweak(struct ch_filter_specification *fs,

 static struct ch_tc_flower_entry *allocate_flower_entry(void)
 {
-	struct ch_tc_flower_entry *new = kzalloc(sizeof(*new), GFP_KERNEL);
+	struct ch_tc_flower_entry *new = kzalloc_obj(*new, GFP_KERNEL);
 	if (new)
 		spin_lock_init(&new->lock);
 	return new;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_matchall.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_matchall.c
index f8dcf0b4abcd..4d53744b2130 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_matchall.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_matchall.c
@@ -531,13 +531,12 @@ int cxgb4_init_tc_matchall(struct adapter *adap)
 	struct cxgb4_tc_matchall *tc_matchall;
 	int ret;

-	tc_matchall = kzalloc(sizeof(*tc_matchall), GFP_KERNEL);
+	tc_matchall = kzalloc_obj(*tc_matchall, GFP_KERNEL);
 	if (!tc_matchall)
 		return -ENOMEM;

-	tc_port_matchall = kcalloc(adap->params.nports,
-				   sizeof(*tc_port_matchall),
-				   GFP_KERNEL);
+	tc_port_matchall = kzalloc_objs(*tc_port_matchall, adap->params.nports,
+					GFP_KERNEL);
 	if (!tc_port_matchall) {
 		ret = -ENOMEM;
 		goto out_free_matchall;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c
index a2dcd2e24263..9d07540e2955 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c
@@ -100,8 +100,7 @@ static int cxgb4_init_eosw_txq(struct net_device *dev,

 	memset(eosw_txq, 0, sizeof(*eosw_txq));

-	ring = kcalloc(CXGB4_EOSW_TXQ_DEFAULT_DESC_NUM,
-		       sizeof(*ring), GFP_KERNEL);
+	ring = kzalloc_objs(*ring, CXGB4_EOSW_TXQ_DEFAULT_DESC_NUM, GFP_KERNEL);
 	if (!ring)
 		return -ENOMEM;

@@ -157,15 +156,13 @@ static int cxgb4_mqprio_alloc_hw_resources(struct net_device *dev)

 	/* Allocate ETHOFLD hardware queue structures if not done already */
 	if (!refcount_read(&adap->tc_mqprio->refcnt)) {
-		adap->sge.eohw_rxq = kcalloc(adap->sge.eoqsets,
-					     sizeof(struct sge_ofld_rxq),
-					     GFP_KERNEL);
+		adap->sge.eohw_rxq = kzalloc_objs(struct sge_ofld_rxq,
+						  adap->sge.eoqsets, GFP_KERNEL);
 		if (!adap->sge.eohw_rxq)
 			return -ENOMEM;

-		adap->sge.eohw_txq = kcalloc(adap->sge.eoqsets,
-					     sizeof(struct sge_eohw_txq),
-					     GFP_KERNEL);
+		adap->sge.eohw_txq = kzalloc_objs(struct sge_eohw_txq,
+						  adap->sge.eoqsets, GFP_KERNEL);
 		if (!adap->sge.eohw_txq) {
 			kfree(adap->sge.eohw_rxq);
 			return -ENOMEM;
@@ -657,12 +654,12 @@ int cxgb4_init_tc_mqprio(struct adapter *adap)
 	int ret = 0;
 	u8 i;

-	tc_mqprio = kzalloc(sizeof(*tc_mqprio), GFP_KERNEL);
+	tc_mqprio = kzalloc_obj(*tc_mqprio, GFP_KERNEL);
 	if (!tc_mqprio)
 		return -ENOMEM;

-	tc_port_mqprio = kcalloc(adap->params.nports, sizeof(*tc_port_mqprio),
-				 GFP_KERNEL);
+	tc_port_mqprio = kzalloc_objs(*tc_port_mqprio, adap->params.nports,
+				      GFP_KERNEL);
 	if (!tc_port_mqprio) {
 		ret = -ENOMEM;
 		goto out_free_mqprio;
@@ -673,8 +670,8 @@ int cxgb4_init_tc_mqprio(struct adapter *adap)
 	tc_mqprio->port_mqprio = tc_port_mqprio;
 	for (i = 0; i < adap->params.nports; i++) {
 		port_mqprio = &tc_mqprio->port_mqprio[i];
-		eosw_txq = kcalloc(adap->tids.neotids, sizeof(*eosw_txq),
-				   GFP_KERNEL);
+		eosw_txq = kzalloc_objs(*eosw_txq, adap->tids.neotids,
+					GFP_KERNEL);
 		if (!eosw_txq) {
 			ret = -ENOMEM;
 			goto out_free_ports;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
index 8524246fd67e..dbfa657c04b9 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
@@ -501,7 +501,7 @@ struct cxgb4_tc_u32_table *cxgb4_init_tc_u32(struct adapter *adap)
 	if (!max_tids)
 		return NULL;

-	t = kvzalloc(struct_size(t, table, max_tids), GFP_KERNEL);
+	t = kvzalloc_flex(*t, table, max_tids, GFP_KERNEL);
 	if (!t)
 		return NULL;

diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
index 5c13bcb4550d..c1fe70fc3286 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
@@ -241,7 +241,7 @@ static int cfg_queues_uld(struct adapter *adap, unsigned int uld_type,
 	struct sge_uld_rxq_info *rxq_info;
 	int i, nrxq, ciq_size;

-	rxq_info = kzalloc(sizeof(*rxq_info), GFP_KERNEL);
+	rxq_info = kzalloc_obj(*rxq_info, GFP_KERNEL);
 	if (!rxq_info)
 		return -ENOMEM;

@@ -269,8 +269,7 @@ static int cfg_queues_uld(struct adapter *adap, unsigned int uld_type,
 	}

 	nrxq = rxq_info->nrxq + rxq_info->nciq; /* total rxq's */
-	rxq_info->uldrxq = kcalloc(nrxq, sizeof(struct sge_ofld_rxq),
-				   GFP_KERNEL);
+	rxq_info->uldrxq = kzalloc_objs(struct sge_ofld_rxq, nrxq, GFP_KERNEL);
 	if (!rxq_info->uldrxq) {
 		kfree(rxq_info);
 		return -ENOMEM;
@@ -472,7 +471,7 @@ setup_sge_txq_uld(struct adapter *adap, unsigned int uld_type,
 	    (atomic_inc_return(&txq_info->users) > 1))
 		return 0;

-	txq_info = kzalloc(sizeof(*txq_info), GFP_KERNEL);
+	txq_info = kzalloc_obj(*txq_info, GFP_KERNEL);
 	if (!txq_info)
 		return -ENOMEM;
 	if (uld_type == CXGB4_ULD_CRYPTO) {
@@ -489,8 +488,8 @@ setup_sge_txq_uld(struct adapter *adap, unsigned int uld_type,
 		i = min_t(int, uld_info->ntxq, num_online_cpus());
 		txq_info->ntxq = roundup(i, adap->params.nports);
 	}
-	txq_info->uldtxq = kcalloc(txq_info->ntxq, sizeof(struct sge_uld_txq),
-				   GFP_KERNEL);
+	txq_info->uldtxq = kzalloc_objs(struct sge_uld_txq, txq_info->ntxq,
+					GFP_KERNEL);
 	if (!txq_info->uldtxq) {
 		kfree(txq_info);
 		return -ENOMEM;
@@ -525,19 +524,17 @@ int t4_uld_mem_alloc(struct adapter *adap)
 {
 	struct sge *s = &adap->sge;

-	adap->uld = kcalloc(CXGB4_ULD_MAX, sizeof(*adap->uld), GFP_KERNEL);
+	adap->uld = kzalloc_objs(*adap->uld, CXGB4_ULD_MAX, GFP_KERNEL);
 	if (!adap->uld)
 		return -ENOMEM;

-	s->uld_rxq_info = kcalloc(CXGB4_ULD_MAX,
-				  sizeof(struct sge_uld_rxq_info *),
-				  GFP_KERNEL);
+	s->uld_rxq_info = kzalloc_objs(struct sge_uld_rxq_info *, CXGB4_ULD_MAX,
+				       GFP_KERNEL);
 	if (!s->uld_rxq_info)
 		goto err_uld;

-	s->uld_txq_info = kcalloc(CXGB4_TX_MAX,
-				  sizeof(struct sge_uld_txq_info *),
-				  GFP_KERNEL);
+	s->uld_txq_info = kzalloc_objs(struct sge_uld_txq_info *, CXGB4_TX_MAX,
+				       GFP_KERNEL);
 	if (!s->uld_txq_info)
 		goto err_uld_rx;
 	return 0;
@@ -805,7 +802,7 @@ void cxgb4_register_uld(enum cxgb4_uld type,
 	if (type >= CXGB4_ULD_MAX)
 		return;

-	uld_entry = kzalloc(sizeof(*uld_entry), GFP_KERNEL);
+	uld_entry = kzalloc_obj(*uld_entry, GFP_KERNEL);
 	if (!uld_entry)
 		return;

diff --git a/drivers/net/ethernet/chelsio/cxgb4/l2t.c b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
index c02b4e9c06b2..1e2a6bac25ba 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/l2t.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
@@ -620,7 +620,7 @@ struct l2t_data *t4_init_l2t(unsigned int l2t_start, unsigned int l2t_end)
 	if (l2t_size < L2T_MIN_HASH_BUCKETS)
 		return NULL;

-	d = kvzalloc(struct_size(d, l2tab, l2t_size), GFP_KERNEL);
+	d = kvzalloc_flex(*d, l2tab, l2t_size, GFP_KERNEL);
 	if (!d)
 		return NULL;

diff --git a/drivers/net/ethernet/chelsio/cxgb4/sched.c b/drivers/net/ethernet/chelsio/cxgb4/sched.c
index 38a30aeee122..8e73a5c49529 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sched.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sched.c
@@ -225,7 +225,7 @@ static int t4_sched_queue_bind(struct port_info *pi, struct ch_sched_queue *p)
 	if (p->queue < 0 || p->queue >= pi->nqsets)
 		return -ERANGE;

-	qe = kvzalloc(sizeof(struct sched_queue_entry), GFP_KERNEL);
+	qe = kvzalloc_obj(struct sched_queue_entry, GFP_KERNEL);
 	if (!qe)
 		return -ENOMEM;

@@ -294,7 +294,7 @@ static int t4_sched_flowc_bind(struct port_info *pi, struct ch_sched_flowc *p)
 	if (p->tid < 0 || p->tid >= adap->tids.neotids)
 		return -ERANGE;

-	fe = kvzalloc(sizeof(*fe), GFP_KERNEL);
+	fe = kvzalloc_obj(*fe, GFP_KERNEL);
 	if (!fe)
 		return -ENOMEM;

@@ -653,7 +653,7 @@ struct sched_table *t4_init_sched(unsigned int sched_size)
 	struct sched_table *s;
 	unsigned int i;

-	s = kvzalloc(struct_size(s, tab, sched_size), GFP_KERNEL);
+	s = kvzalloc_flex(*s, tab, sched_size, GFP_KERNEL);
 	if (!s)
 		return NULL;

diff --git a/drivers/net/ethernet/chelsio/cxgb4/smt.c b/drivers/net/ethernet/chelsio/cxgb4/smt.c
index e617e4aabbcc..315c7605622f 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/smt.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/smt.c
@@ -47,7 +47,7 @@ struct smt_data *t4_init_smt(void)

 	smt_size = SMT_SIZE;

-	s = kvzalloc(struct_size(s, smtab, smt_size), GFP_KERNEL);
+	s = kvzalloc_flex(*s, smtab, smt_size, GFP_KERNEL);
 	if (!s)
 		return NULL;
 	s->smt_size = smt_size;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/srq.c b/drivers/net/ethernet/chelsio/cxgb4/srq.c
index a77d6ac1ee8c..1f7e2dece66c 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/srq.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/srq.c
@@ -40,7 +40,7 @@ struct srq_data *t4_init_srq(int srq_size)
 {
 	struct srq_data *s;

-	s = kvzalloc(sizeof(*s), GFP_KERNEL);
+	s = kvzalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return NULL;

diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
index 2fbe0f059a0b..592f736f6c85 100644
--- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
@@ -288,7 +288,7 @@ static int cxgb4vf_change_mac(struct port_info *pi, unsigned int viid,
 				goto set_hash;
 			}
 		}
-		new_entry = kzalloc(sizeof(*new_entry), GFP_KERNEL);
+		new_entry = kzalloc_obj(*new_entry, GFP_KERNEL);
 		if (!new_entry)
 			return -ENOMEM;
 		ether_addr_copy(new_entry->addr, addr);
@@ -953,7 +953,7 @@ static int cxgb4vf_mac_sync(struct net_device *netdev, const u8 *mac_addr)
 	 * list and program it
 	 */
 	if (uhash || mhash) {
-		new_entry = kzalloc(sizeof(*new_entry), GFP_ATOMIC);
+		new_entry = kzalloc_obj(*new_entry, GFP_ATOMIC);
 		if (!new_entry)
 			return -ENOMEM;
 		ether_addr_copy(new_entry->addr, mac_addr);
@@ -2935,7 +2935,7 @@ static int cxgb4vf_pci_probe(struct pci_dev *pdev,
 	/*
 	 * Allocate our adapter data structure and attach it to the device.
 	 */
-	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(*adapter, GFP_KERNEL);
 	if (!adapter) {
 		err = -ENOMEM;
 		goto err_release_regions;
diff --git a/drivers/net/ethernet/chelsio/inline_crypto/ch_ipsec/chcr_ipsec.c b/drivers/net/ethernet/chelsio/inline_crypto/ch_ipsec/chcr_ipsec.c
index 074717d4bb16..e89150c0f2c7 100644
--- a/drivers/net/ethernet/chelsio/inline_crypto/ch_ipsec/chcr_ipsec.c
+++ b/drivers/net/ethernet/chelsio/inline_crypto/ch_ipsec/chcr_ipsec.c
@@ -104,7 +104,7 @@ static void *ch_ipsec_uld_add(const struct cxgb4_lld_info *infop)

 	pr_info_once("%s - version %s\n", CHIPSEC_DRV_DESC,
 		     CHIPSEC_DRV_VERSION);
-	u_ctx = kzalloc(sizeof(*u_ctx), GFP_KERNEL);
+	u_ctx = kzalloc_obj(*u_ctx, GFP_KERNEL);
 	if (!u_ctx) {
 		u_ctx = ERR_PTR(-ENOMEM);
 		goto out;
@@ -295,7 +295,7 @@ static int ch_ipsec_xfrm_add_state(struct net_device *dev,
 		return -ENODEV;
 	}

-	sa_entry = kzalloc(sizeof(*sa_entry), GFP_KERNEL);
+	sa_entry = kzalloc_obj(*sa_entry, GFP_KERNEL);
 	if (!sa_entry) {
 		res = -ENOMEM;
 		module_put(THIS_MODULE);
diff --git a/drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c b/drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c
index b8ebb56de65e..eb53e3a3ccf9 100644
--- a/drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c
+++ b/drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c
@@ -442,7 +442,7 @@ static int chcr_ktls_dev_add(struct net_device *netdev, struct sock *sk,
 	if (u_ctx && u_ctx->detach)
 		goto out;

-	tx_info = kvzalloc(sizeof(*tx_info), GFP_KERNEL);
+	tx_info = kvzalloc_obj(*tx_info, GFP_KERNEL);
 	if (!tx_info)
 		goto out;

@@ -2117,7 +2117,7 @@ static void *chcr_ktls_uld_add(const struct cxgb4_lld_info *lldi)

 	pr_info_once("%s - version %s\n", CHCR_KTLS_DRV_DESC,
 		     CHCR_KTLS_DRV_VERSION);
-	u_ctx = kzalloc(sizeof(*u_ctx), GFP_KERNEL);
+	u_ctx = kzalloc_obj(*u_ctx, GFP_KERNEL);
 	if (!u_ctx) {
 		u_ctx = ERR_PTR(-ENOMEM);
 		goto out;
diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c
index ee0154337a9c..caa46c191268 100644
--- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c
+++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c
@@ -57,7 +57,7 @@ static unsigned char new_state[16] = {

 static struct chtls_sock *chtls_sock_create(struct chtls_dev *cdev)
 {
-	struct chtls_sock *csk = kzalloc(sizeof(*csk), GFP_ATOMIC);
+	struct chtls_sock *csk = kzalloc_obj(*csk, GFP_ATOMIC);

 	if (!csk)
 		return NULL;
@@ -548,7 +548,7 @@ static struct listen_info *listen_hash_add(struct chtls_dev *cdev,
 					   struct sock *sk,
 					   unsigned int stid)
 {
-	struct listen_info *p = kmalloc(sizeof(*p), GFP_KERNEL);
+	struct listen_info *p = kmalloc_obj(*p, GFP_KERNEL);

 	if (p) {
 		int key = listen_hashfn(sk);
@@ -666,7 +666,7 @@ int chtls_listen_start(struct chtls_dev *cdev, struct sock *sk)
 	if (listen_hash_find(cdev, sk) >= 0)   /* already have it */
 		return -EADDRINUSE;

-	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_main.c b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_main.c
index daa1ebaef511..511ca3bfce3f 100644
--- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_main.c
+++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_main.c
@@ -95,7 +95,7 @@ static int chtls_start_listen(struct chtls_dev *cdev, struct sock *sk)
 		return -EADDRNOTAVAIL;

 	sk->sk_backlog_rcv = listen_backlog_rcv;
-	clisten = kmalloc(sizeof(*clisten), GFP_KERNEL);
+	clisten = kmalloc_obj(*clisten, GFP_KERNEL);
 	if (!clisten)
 		return -ENOMEM;
 	clisten->cdev = cdev;
@@ -114,7 +114,7 @@ static void chtls_stop_listen(struct chtls_dev *cdev, struct sock *sk)
 	if (sk->sk_protocol != IPPROTO_TCP)
 		return;

-	clisten = kmalloc(sizeof(*clisten), GFP_KERNEL);
+	clisten = kmalloc_obj(*clisten, GFP_KERNEL);
 	if (!clisten)
 		return;
 	clisten->cdev = cdev;
@@ -238,11 +238,11 @@ static void *chtls_uld_add(const struct cxgb4_lld_info *info)
 	struct chtls_dev *cdev;
 	int i, j;

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		goto out;

-	lldi = kzalloc(sizeof(*lldi), GFP_KERNEL);
+	lldi = kzalloc_obj(*lldi, GFP_KERNEL);
 	if (!lldi)
 		goto out_lldi;

diff --git a/drivers/net/ethernet/cisco/enic/enic_clsf.c b/drivers/net/ethernet/cisco/enic/enic_clsf.c
index 837f954873ee..581e89da9091 100644
--- a/drivers/net/ethernet/cisco/enic/enic_clsf.c
+++ b/drivers/net/ethernet/cisco/enic/enic_clsf.c
@@ -235,7 +235,7 @@ int enic_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
 				struct hlist_head *head;

 				head = &enic->rfs_h.ht_head[tbl_idx];
-				d = kmalloc(sizeof(*d), GFP_ATOMIC);
+				d = kmalloc_obj(*d, GFP_ATOMIC);
 				if (d) {
 					d->fltr_id = n->fltr_id;
 					INIT_HLIST_NODE(&d->node);
@@ -257,7 +257,7 @@ int enic_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
 			goto ret_unlock;
 		}

-		n = kmalloc(sizeof(*n), GFP_ATOMIC);
+		n = kmalloc_obj(*n, GFP_ATOMIC);
 		if (!n) {
 			res = -ENOMEM;
 			enic->rfs_h.free++;
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
index 6bc8dfdb3d4b..14dc4c5aa825 100644
--- a/drivers/net/ethernet/cisco/enic/enic_main.c
+++ b/drivers/net/ethernet/cisco/enic/enic_main.c
@@ -2456,35 +2456,35 @@ static void enic_free_enic_resources(struct enic *enic)

 static int enic_alloc_enic_resources(struct enic *enic)
 {
-	enic->wq = kcalloc(enic->wq_avail, sizeof(struct enic_wq), GFP_KERNEL);
+	enic->wq = kzalloc_objs(struct enic_wq, enic->wq_avail, GFP_KERNEL);
 	if (!enic->wq)
 		goto free_queues;

-	enic->rq = kcalloc(enic->rq_avail, sizeof(struct enic_rq), GFP_KERNEL);
+	enic->rq = kzalloc_objs(struct enic_rq, enic->rq_avail, GFP_KERNEL);
 	if (!enic->rq)
 		goto free_queues;

-	enic->cq = kcalloc(enic->cq_avail, sizeof(struct vnic_cq), GFP_KERNEL);
+	enic->cq = kzalloc_objs(struct vnic_cq, enic->cq_avail, GFP_KERNEL);
 	if (!enic->cq)
 		goto free_queues;

-	enic->napi = kcalloc(enic->wq_avail + enic->rq_avail,
-			     sizeof(struct napi_struct), GFP_KERNEL);
+	enic->napi = kzalloc_objs(struct napi_struct,
+				  enic->wq_avail + enic->rq_avail, GFP_KERNEL);
 	if (!enic->napi)
 		goto free_queues;

-	enic->msix_entry = kcalloc(enic->intr_avail, sizeof(struct msix_entry),
-				   GFP_KERNEL);
+	enic->msix_entry = kzalloc_objs(struct msix_entry, enic->intr_avail,
+					GFP_KERNEL);
 	if (!enic->msix_entry)
 		goto free_queues;

-	enic->msix = kcalloc(enic->intr_avail, sizeof(struct enic_msix_entry),
-			     GFP_KERNEL);
+	enic->msix = kzalloc_objs(struct enic_msix_entry, enic->intr_avail,
+				  GFP_KERNEL);
 	if (!enic->msix)
 		goto free_queues;

-	enic->intr = kcalloc(enic->intr_avail, sizeof(struct vnic_intr),
-			     GFP_KERNEL);
+	enic->intr = kzalloc_objs(struct vnic_intr, enic->intr_avail,
+				  GFP_KERNEL);
 	if (!enic->intr)
 		goto free_queues;

@@ -2737,7 +2737,7 @@ static int enic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 #endif

 	/* Allocate structure for port profiles */
-	enic->pp = kcalloc(num_pps, sizeof(*enic->pp), GFP_KERNEL);
+	enic->pp = kzalloc_objs(*enic->pp, num_pps, GFP_KERNEL);
 	if (!enic->pp) {
 		err = -ENOMEM;
 		goto err_out_disable_sriov_pp;
diff --git a/drivers/net/ethernet/cisco/enic/vnic_dev.c b/drivers/net/ethernet/cisco/enic/vnic_dev.c
index 9f6089e81608..5a8a49f8c44f 100644
--- a/drivers/net/ethernet/cisco/enic/vnic_dev.c
+++ b/drivers/net/ethernet/cisco/enic/vnic_dev.c
@@ -371,7 +371,7 @@ static int vnic_dev_init_devcmd2(struct vnic_dev *vdev)
 	if (vdev->devcmd2)
 		return 0;

-	vdev->devcmd2 = kzalloc(sizeof(*vdev->devcmd2), GFP_KERNEL);
+	vdev->devcmd2 = kzalloc_obj(*vdev->devcmd2, GFP_KERNEL);
 	if (!vdev->devcmd2)
 		return -ENOMEM;

@@ -1053,7 +1053,7 @@ struct vnic_dev *vnic_dev_register(struct vnic_dev *vdev,
 	unsigned int num_bars)
 {
 	if (!vdev) {
-		vdev = kzalloc(sizeof(struct vnic_dev), GFP_KERNEL);
+		vdev = kzalloc_obj(struct vnic_dev, GFP_KERNEL);
 		if (!vdev)
 			return NULL;
 	}
diff --git a/drivers/net/ethernet/cortina/gemini.c b/drivers/net/ethernet/cortina/gemini.c
index 6a2004bbe87f..d5608611cee8 100644
--- a/drivers/net/ethernet/cortina/gemini.c
+++ b/drivers/net/ethernet/cortina/gemini.c
@@ -554,7 +554,7 @@ static int gmac_setup_txqs(struct net_device *netdev)

 	rwptr_reg = port->dma_base + GMAC_SW_TX_QUEUE0_PTR_REG;

-	skb_tab = kcalloc(len, sizeof(*skb_tab), GFP_KERNEL);
+	skb_tab = kzalloc_objs(*skb_tab, len, GFP_KERNEL);
 	if (!skb_tab)
 		return -ENOMEM;

@@ -940,8 +940,7 @@ static int geth_setup_freeq(struct gemini_ethernet *geth)
 	}

 	/* Allocate a mapping to page look-up index */
-	geth->freeq_pages = kcalloc(pages, sizeof(*geth->freeq_pages),
-				    GFP_KERNEL);
+	geth->freeq_pages = kzalloc_objs(*geth->freeq_pages, pages, GFP_KERNEL);
 	if (!geth->freeq_pages)
 		goto err_freeq;
 	geth->num_freeq_pages = pages;
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 52e10467b3e4..fb9c9d8bc659 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -4207,8 +4207,7 @@ static int be_vf_setup_init(struct be_adapter *adapter)
 	struct be_vf_cfg *vf_cfg;
 	int vf;

-	adapter->vf_cfg = kcalloc(adapter->num_vfs, sizeof(*vf_cfg),
-				  GFP_KERNEL);
+	adapter->vf_cfg = kzalloc_objs(*vf_cfg, adapter->num_vfs, GFP_KERNEL);
 	if (!adapter->vf_cfg)
 		return -ENOMEM;

@@ -4686,13 +4685,13 @@ static int be_if_create(struct be_adapter *adapter)
 	if (!adapter->pmac_id)
 		return -ENOMEM;

-	adapter->mc_list = kcalloc(be_max_mc(adapter),
-				   sizeof(*adapter->mc_list), GFP_KERNEL);
+	adapter->mc_list = kzalloc_objs(*adapter->mc_list, be_max_mc(adapter),
+					GFP_KERNEL);
 	if (!adapter->mc_list)
 		return -ENOMEM;

-	adapter->uc_list = kcalloc(be_max_uc(adapter),
-				   sizeof(*adapter->uc_list), GFP_KERNEL);
+	adapter->uc_list = kzalloc_objs(*adapter->uc_list, be_max_uc(adapter),
+					GFP_KERNEL);
 	if (!adapter->uc_list)
 		return -ENOMEM;

@@ -5048,7 +5047,7 @@ static struct be_cmd_work *be_alloc_work(struct be_adapter *adapter,
 {
 	struct be_cmd_work *work;

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work) {
 		dev_err(&adapter->pdev->dev,
 			"be_work memory allocation failed\n");
diff --git a/drivers/net/ethernet/engleder/tsnep_main.c b/drivers/net/ethernet/engleder/tsnep_main.c
index b118407c30e8..eddfde68d503 100644
--- a/drivers/net/ethernet/engleder/tsnep_main.c
+++ b/drivers/net/ethernet/engleder/tsnep_main.c
@@ -2102,14 +2102,12 @@ int tsnep_enable_xsk(struct tsnep_queue *queue, struct xsk_buff_pool *pool)
 	if (frame_size < TSNEP_XSK_RX_BUF_SIZE)
 		return -EOPNOTSUPP;

-	queue->rx->page_buffer = kcalloc(TSNEP_RING_SIZE,
-					 sizeof(*queue->rx->page_buffer),
-					 GFP_KERNEL);
+	queue->rx->page_buffer = kzalloc_objs(*queue->rx->page_buffer,
+					      TSNEP_RING_SIZE, GFP_KERNEL);
 	if (!queue->rx->page_buffer)
 		return -ENOMEM;
-	queue->rx->xdp_batch = kcalloc(TSNEP_RING_SIZE,
-				       sizeof(*queue->rx->xdp_batch),
-				       GFP_KERNEL);
+	queue->rx->xdp_batch = kzalloc_objs(*queue->rx->xdp_batch,
+					    TSNEP_RING_SIZE, GFP_KERNEL);
 	if (!queue->rx->xdp_batch) {
 		kfree(queue->rx->page_buffer);
 		queue->rx->page_buffer = NULL;
diff --git a/drivers/net/ethernet/engleder/tsnep_rxnfc.c b/drivers/net/ethernet/engleder/tsnep_rxnfc.c
index 9ac2a0cf3833..9342dff7a073 100644
--- a/drivers/net/ethernet/engleder/tsnep_rxnfc.c
+++ b/drivers/net/ethernet/engleder/tsnep_rxnfc.c
@@ -231,7 +231,7 @@ int tsnep_rxnfc_add_rule(struct tsnep_adapter *adapter,
 		return -EINVAL;
 	}

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/engleder/tsnep_selftests.c b/drivers/net/ethernet/engleder/tsnep_selftests.c
index 8a9145f93147..1a67d3136456 100644
--- a/drivers/net/ethernet/engleder/tsnep_selftests.c
+++ b/drivers/net/ethernet/engleder/tsnep_selftests.c
@@ -354,7 +354,7 @@ static bool tsnep_test_taprio(struct tsnep_adapter *adapter)
 	struct tc_taprio_qopt_offload *qopt;
 	int i;

-	qopt = kzalloc(struct_size(qopt, entries, 255), GFP_KERNEL);
+	qopt = kzalloc_flex(*qopt, entries, 255, GFP_KERNEL);
 	if (!qopt)
 		return false;
 	for (i = 0; i < 255; i++)
@@ -451,7 +451,7 @@ static bool tsnep_test_taprio_change(struct tsnep_adapter *adapter)
 	struct tc_taprio_qopt_offload *qopt;
 	int i;

-	qopt = kzalloc(struct_size(qopt, entries, 255), GFP_KERNEL);
+	qopt = kzalloc_flex(*qopt, entries, 255, GFP_KERNEL);
 	if (!qopt)
 		return false;
 	for (i = 0; i < 255; i++)
@@ -604,7 +604,7 @@ static bool tsnep_test_taprio_extension(struct tsnep_adapter *adapter)
 	struct tc_taprio_qopt_offload *qopt;
 	int i;

-	qopt = kzalloc(struct_size(qopt, entries, 255), GFP_KERNEL);
+	qopt = kzalloc_flex(*qopt, entries, 255, GFP_KERNEL);
 	if (!qopt)
 		return false;
 	for (i = 0; i < 255; i++)
diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c
index ed3fa80af8c3..0071d9538661 100644
--- a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c
+++ b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c
@@ -421,7 +421,7 @@ static int dpaa_set_coalesce(struct net_device *dev,
 	bool *needs_revert;
 	int cpu, res;

-	needs_revert = kcalloc(num_possible_cpus(), sizeof(bool), GFP_KERNEL);
+	needs_revert = kzalloc_objs(bool, num_possible_cpus(), GFP_KERNEL);
 	if (!needs_revert)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
index 76f808d38066..0db00bebb268 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
@@ -237,14 +237,14 @@ int dpaa2_eth_dl_traps_register(struct dpaa2_eth_priv *priv)
 	struct device *dev = net_dev->dev.parent;
 	int err;

-	dpaa2_eth_trap_data = kzalloc(sizeof(*dpaa2_eth_trap_data), GFP_KERNEL);
+	dpaa2_eth_trap_data = kzalloc_obj(*dpaa2_eth_trap_data, GFP_KERNEL);
 	if (!dpaa2_eth_trap_data)
 		return -ENOMEM;
 	priv->trap_data = dpaa2_eth_trap_data;

-	dpaa2_eth_trap_data->trap_items_arr = kcalloc(ARRAY_SIZE(dpaa2_eth_traps_arr),
-						      sizeof(struct dpaa2_eth_trap_item),
-						      GFP_KERNEL);
+	dpaa2_eth_trap_data->trap_items_arr = kzalloc_objs(struct dpaa2_eth_trap_item,
+							   ARRAY_SIZE(dpaa2_eth_traps_arr),
+							   GFP_KERNEL);
 	if (!dpaa2_eth_trap_data->trap_items_arr) {
 		err = -ENOMEM;
 		goto trap_data_free;
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
index 18d86badd6ea..70691bf85e2d 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -920,7 +920,7 @@ static int dpaa2_eth_build_sg_fd(struct dpaa2_eth_priv *priv,
 	if (unlikely(PAGE_SIZE / sizeof(struct scatterlist) < nr_frags + 1))
 		return -EINVAL;

-	scl = kmalloc_array(nr_frags + 1, sizeof(struct scatterlist), GFP_ATOMIC);
+	scl = kmalloc_objs(struct scatterlist, nr_frags + 1, GFP_ATOMIC);
 	if (unlikely(!scl))
 		return -ENOMEM;

@@ -3125,7 +3125,7 @@ static struct dpaa2_eth_channel *dpaa2_eth_alloc_channel(struct dpaa2_eth_priv *
 	struct device *dev = priv->net_dev->dev.parent;
 	int err;

-	channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kzalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return NULL;

@@ -3392,7 +3392,7 @@ struct dpaa2_eth_bp *dpaa2_eth_allocate_dpbp(struct dpaa2_eth_priv *priv)
 		return ERR_PTR(err);
 	}

-	bp = kzalloc(sizeof(*bp), GFP_KERNEL);
+	bp = kzalloc_obj(*bp, GFP_KERNEL);
 	if (!bp) {
 		err = -ENOMEM;
 		goto err_alloc;
@@ -4673,7 +4673,7 @@ static int dpaa2_eth_connect_mac(struct dpaa2_eth_priv *priv)
 		goto out_put_device;
 	}

-	mac = kzalloc(sizeof(struct dpaa2_mac), GFP_KERNEL);
+	mac = kzalloc_obj(struct dpaa2_mac, GFP_KERNEL);
 	if (!mac) {
 		err = -ENOMEM;
 		goto out_put_device;
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-flower.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-flower.c
index 701a87370737..388f81713f1e 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-flower.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-flower.c
@@ -505,7 +505,7 @@ dpaa2_switch_cls_flower_replace_acl(struct dpaa2_switch_filter_block *block,
 		return -ENOMEM;
 	}

-	acl_entry = kzalloc(sizeof(*acl_entry), GFP_KERNEL);
+	acl_entry = kzalloc_obj(*acl_entry, GFP_KERNEL);
 	if (!acl_entry)
 		return -ENOMEM;

@@ -633,7 +633,7 @@ dpaa2_switch_cls_flower_replace_mirror(struct dpaa2_switch_filter_block *block,
 		}
 	}

-	mirror_entry = kzalloc(sizeof(*mirror_entry), GFP_KERNEL);
+	mirror_entry = kzalloc_obj(*mirror_entry, GFP_KERNEL);
 	if (!mirror_entry)
 		return -ENOMEM;

@@ -708,7 +708,7 @@ dpaa2_switch_cls_matchall_replace_acl(struct dpaa2_switch_filter_block *block,
 		return -ENOMEM;
 	}

-	acl_entry = kzalloc(sizeof(*acl_entry), GFP_KERNEL);
+	acl_entry = kzalloc_obj(*acl_entry, GFP_KERNEL);
 	if (!acl_entry)
 		return -ENOMEM;

@@ -780,7 +780,7 @@ dpaa2_switch_cls_matchall_replace_mirror(struct dpaa2_switch_filter_block *block
 		}
 	}

-	mirror_entry = kzalloc(sizeof(*mirror_entry), GFP_KERNEL);
+	mirror_entry = kzalloc_obj(*mirror_entry, GFP_KERNEL);
 	if (!mirror_entry)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
index 66240c340492..2b0cac347fec 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
@@ -1456,7 +1456,7 @@ static int dpaa2_switch_port_connect_mac(struct ethsw_port_priv *port_priv)
 		goto out_put_device;
 	}

-	mac = kzalloc(sizeof(*mac), GFP_KERNEL);
+	mac = kzalloc_obj(*mac, GFP_KERNEL);
 	if (!mac) {
 		err = -ENOMEM;
 		goto out_put_device;
@@ -2334,7 +2334,7 @@ static int dpaa2_switch_port_event(struct notifier_block *nb,
 	if (!dpaa2_switch_port_dev_check(dev))
 		return NOTIFY_DONE;

-	switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+	switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 	if (!switchdev_work)
 		return NOTIFY_BAD;

@@ -3385,7 +3385,7 @@ static int dpaa2_switch_probe(struct fsl_mc_device *sw_dev)
 	int i, err;

 	/* Allocate switch core*/
-	ethsw = kzalloc(sizeof(*ethsw), GFP_KERNEL);
+	ethsw = kzalloc_obj(*ethsw, GFP_KERNEL);

 	if (!ethsw)
 		return -ENOMEM;
@@ -3408,23 +3408,22 @@ static int dpaa2_switch_probe(struct fsl_mc_device *sw_dev)
 	if (err)
 		goto err_free_cmdport;

-	ethsw->ports = kcalloc(ethsw->sw_attr.num_ifs, sizeof(*ethsw->ports),
-			       GFP_KERNEL);
+	ethsw->ports = kzalloc_objs(*ethsw->ports, ethsw->sw_attr.num_ifs,
+				    GFP_KERNEL);
 	if (!(ethsw->ports)) {
 		err = -ENOMEM;
 		goto err_teardown;
 	}

-	ethsw->fdbs = kcalloc(ethsw->sw_attr.num_ifs, sizeof(*ethsw->fdbs),
-			      GFP_KERNEL);
+	ethsw->fdbs = kzalloc_objs(*ethsw->fdbs, ethsw->sw_attr.num_ifs,
+				   GFP_KERNEL);
 	if (!ethsw->fdbs) {
 		err = -ENOMEM;
 		goto err_free_ports;
 	}

-	ethsw->filter_blocks = kcalloc(ethsw->sw_attr.num_ifs,
-				       sizeof(*ethsw->filter_blocks),
-				       GFP_KERNEL);
+	ethsw->filter_blocks = kzalloc_objs(*ethsw->filter_blocks,
+					    ethsw->sw_attr.num_ifs, GFP_KERNEL);
 	if (!ethsw->filter_blocks) {
 		err = -ENOMEM;
 		goto err_free_fdbs;
diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
index e380a4f39855..d6575a446adf 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
@@ -2268,7 +2268,7 @@ enetc_alloc_tx_resources(struct enetc_ndev_priv *priv)
 	struct enetc_bdr_resource *tx_res;
 	int i, err;

-	tx_res = kcalloc(priv->num_tx_rings, sizeof(*tx_res), GFP_KERNEL);
+	tx_res = kzalloc_objs(*tx_res, priv->num_tx_rings, GFP_KERNEL);
 	if (!tx_res)
 		return ERR_PTR(-ENOMEM);

@@ -2340,7 +2340,7 @@ enetc_alloc_rx_resources(struct enetc_ndev_priv *priv, bool extended)
 	struct enetc_bdr_resource *rx_res;
 	int i, err;

-	rx_res = kcalloc(priv->num_rx_rings, sizeof(*rx_res), GFP_KERNEL);
+	rx_res = kzalloc_objs(*rx_res, priv->num_rx_rings, GFP_KERNEL);
 	if (!rx_res)
 		return ERR_PTR(-ENOMEM);

@@ -2469,7 +2469,7 @@ static int enetc_setup_default_rss_table(struct enetc_si *si, int num_groups)
 	int *rss_table;
 	int i;

-	rss_table = kmalloc_array(si->num_rss, sizeof(*rss_table), GFP_KERNEL);
+	rss_table = kmalloc_objs(*rss_table, si->num_rss, GFP_KERNEL);
 	if (!rss_table)
 		return -ENOMEM;

@@ -2562,8 +2562,8 @@ int enetc_alloc_si_resources(struct enetc_ndev_priv *priv)
 {
 	struct enetc_si *si = priv->si;

-	priv->cls_rules = kcalloc(si->num_fs_entries, sizeof(*priv->cls_rules),
-				  GFP_KERNEL);
+	priv->cls_rules = kzalloc_objs(*priv->cls_rules, si->num_fs_entries,
+				       GFP_KERNEL);
 	if (!priv->cls_rules)
 		return -ENOMEM;

@@ -3454,7 +3454,7 @@ static int enetc_int_vector_init(struct enetc_ndev_priv *priv, int i,
 	struct enetc_bdr *bdr;
 	int j, err;

-	v = kzalloc(struct_size(v, tx_ring, v_tx_rings), GFP_KERNEL);
+	v = kzalloc_flex(*v, tx_ring, v_tx_rings, GFP_KERNEL);
 	if (!v)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c
index 5850540634b0..689b9f13c5eb 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c
@@ -192,7 +192,7 @@ static int enetc4_pf_set_uc_exact_filter(struct enetc_pf *pf)
 		goto unlock_netif_addr;
 	}

-	mac_tbl = kcalloc(mac_cnt, sizeof(*mac_tbl), GFP_ATOMIC);
+	mac_tbl = kzalloc_objs(*mac_tbl, mac_cnt, GFP_ATOMIC);
 	if (!mac_tbl) {
 		err = -ENOMEM;
 		goto unlock_netif_addr;
diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
index de0fb272c847..eb3a50a94df7 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
@@ -814,7 +814,7 @@ static int enetc_init_port_rss_memory(struct enetc_si *si)
 	if (!num_rss)
 		return 0;

-	rss_table = kcalloc(num_rss, sizeof(*rss_table), GFP_KERNEL);
+	rss_table = kzalloc_objs(*rss_table, num_rss, GFP_KERNEL);
 	if (!rss_table)
 		return -ENOMEM;

@@ -958,8 +958,8 @@ static int enetc_pf_probe(struct pci_dev *pdev,

 	pf->total_vfs = pci_sriov_get_totalvfs(pdev);
 	if (pf->total_vfs) {
-		pf->vf_state = kcalloc(pf->total_vfs, sizeof(struct enetc_vf_state),
-				       GFP_KERNEL);
+		pf->vf_state = kzalloc_objs(struct enetc_vf_state,
+					    pf->total_vfs, GFP_KERNEL);
 		if (!pf->vf_state)
 			goto err_alloc_vf_state;
 	}
diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ptp.c b/drivers/net/ethernet/freescale/enetc/enetc_ptp.c
index b8413d3b4f16..dbf35abea7f7 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_ptp.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_ptp.c
@@ -53,7 +53,7 @@ static int enetc_ptp_probe(struct pci_dev *pdev,

 	pci_set_master(pdev);

-	ptp_qoriq = kzalloc(sizeof(*ptp_qoriq), GFP_KERNEL);
+	ptp_qoriq = kzalloc_obj(*ptp_qoriq, GFP_KERNEL);
 	if (!ptp_qoriq) {
 		err = -ENOMEM;
 		goto err_alloc_ptp;
diff --git a/drivers/net/ethernet/freescale/enetc/enetc_qos.c b/drivers/net/ethernet/freescale/enetc/enetc_qos.c
index ccf86651455c..6ff65108cc97 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_qos.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_qos.c
@@ -1153,7 +1153,7 @@ static int enetc_psfp_parse_clsflower(struct enetc_ndev_priv *priv,
 	if (!entryg)
 		return -EINVAL;

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (!filter)
 		return -ENOMEM;

@@ -1266,7 +1266,7 @@ static int enetc_psfp_parse_clsflower(struct enetc_ndev_priv *priv,

 	filter->sgi_index = sgi->index;

-	sfi = kzalloc(sizeof(*sfi), GFP_KERNEL);
+	sfi = kzalloc_obj(*sfi, GFP_KERNEL);
 	if (!sfi) {
 		err = -ENOMEM;
 		goto free_gate;
@@ -1283,7 +1283,7 @@ static int enetc_psfp_parse_clsflower(struct enetc_ndev_priv *priv,
 			goto free_sfi;

 		if (entryp->police.burst) {
-			fmi = kzalloc(sizeof(*fmi), GFP_KERNEL);
+			fmi = kzalloc_obj(*fmi, GFP_KERNEL);
 			if (!fmi) {
 				err = -ENOMEM;
 				goto free_sfi;
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 0d926bf18195..c43539d4bab0 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -3952,7 +3952,7 @@ static int fec_enet_alloc_queue(struct net_device *ndev)
 	struct fec_enet_priv_tx_q *txq;

 	for (i = 0; i < fep->num_tx_queues; i++) {
-		txq = kzalloc(sizeof(*txq), GFP_KERNEL);
+		txq = kzalloc_obj(*txq, GFP_KERNEL);
 		if (!txq) {
 			ret = -ENOMEM;
 			goto alloc_failed;
@@ -3975,8 +3975,7 @@ static int fec_enet_alloc_queue(struct net_device *ndev)
 	}

 	for (i = 0; i < fep->num_rx_queues; i++) {
-		fep->rx_queue[i] = kzalloc(sizeof(*fep->rx_queue[i]),
-					   GFP_KERNEL);
+		fep->rx_queue[i] = kzalloc_obj(*fep->rx_queue[i], GFP_KERNEL);
 		if (!fep->rx_queue[i]) {
 			ret = -ENOMEM;
 			goto alloc_failed;
@@ -4426,7 +4425,7 @@ fec_alloc_new_rxq_xsk(struct fec_enet_private *fep, int queue,
 	union fec_rx_buffer *buf;
 	int i;

-	rxq = kzalloc(sizeof(*rxq), GFP_KERNEL);
+	rxq = kzalloc_obj(*rxq, GFP_KERNEL);
 	if (!rxq)
 		return NULL;

@@ -4467,7 +4466,7 @@ fec_alloc_new_rxq_pp(struct fec_enet_private *fep, int queue)
 	union fec_rx_buffer *buf;
 	int i = 0;

-	rxq = kzalloc(sizeof(*rxq), GFP_KERNEL);
+	rxq = kzalloc_obj(*rxq, GFP_KERNEL);
 	if (!rxq)
 		return NULL;

diff --git a/drivers/net/ethernet/freescale/fec_mpc52xx_phy.c b/drivers/net/ethernet/freescale/fec_mpc52xx_phy.c
index 3d073f0fae63..f182480909f1 100644
--- a/drivers/net/ethernet/freescale/fec_mpc52xx_phy.c
+++ b/drivers/net/ethernet/freescale/fec_mpc52xx_phy.c
@@ -74,7 +74,7 @@ static int mpc52xx_fec_mdio_probe(struct platform_device *of)
 	bus = mdiobus_alloc();
 	if (bus == NULL)
 		return -ENOMEM;
-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (priv == NULL) {
 		err = -ENOMEM;
 		goto out_free;
diff --git a/drivers/net/ethernet/freescale/fman/fman.c b/drivers/net/ethernet/freescale/fman/fman.c
index 11887458f050..b8d603fb70dc 100644
--- a/drivers/net/ethernet/freescale/fman/fman.c
+++ b/drivers/net/ethernet/freescale/fman/fman.c
@@ -1688,12 +1688,12 @@ static int fman_config(struct fman *fman)

 	base_addr = fman->dts_params.base_addr;

-	fman->state = kzalloc(sizeof(*fman->state), GFP_KERNEL);
+	fman->state = kzalloc_obj(*fman->state, GFP_KERNEL);
 	if (!fman->state)
 		goto err_fm_state;

 	/* Allocate the FM driver's parameters structure */
-	fman->cfg = kzalloc(sizeof(*fman->cfg), GFP_KERNEL);
+	fman->cfg = kzalloc_obj(*fman->cfg, GFP_KERNEL);
 	if (!fman->cfg)
 		goto err_fm_drv;

@@ -2697,7 +2697,7 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
 	struct clk *clk;
 	u32 clk_rate;

-	fman = kzalloc(sizeof(*fman), GFP_KERNEL);
+	fman = kzalloc_obj(*fman, GFP_KERNEL);
 	if (!fman)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
index 51402dff72c5..12d739808f16 100644
--- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c
+++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
@@ -1055,7 +1055,7 @@ static int dtsec_add_hash_mac_address(struct fman_mac *dtsec,
 	set_bucket(dtsec->regs, bucket, true);

 	/* Create element to be added to the driver hash table */
-	hash_entry = kmalloc(sizeof(*hash_entry), GFP_ATOMIC);
+	hash_entry = kmalloc_obj(*hash_entry, GFP_ATOMIC);
 	if (!hash_entry)
 		return -ENOMEM;
 	hash_entry->addr = addr;
@@ -1348,12 +1348,12 @@ static struct fman_mac *dtsec_config(struct mac_device *mac_dev,
 	struct dtsec_cfg *dtsec_drv_param;

 	/* allocate memory for the UCC GETH data structure. */
-	dtsec = kzalloc(sizeof(*dtsec), GFP_KERNEL);
+	dtsec = kzalloc_obj(*dtsec, GFP_KERNEL);
 	if (!dtsec)
 		return NULL;

 	/* allocate memory for the d_tsec driver parameters data structure. */
-	dtsec_drv_param = kzalloc(sizeof(*dtsec_drv_param), GFP_KERNEL);
+	dtsec_drv_param = kzalloc_obj(*dtsec_drv_param, GFP_KERNEL);
 	if (!dtsec_drv_param)
 		goto err_dtsec;

diff --git a/drivers/net/ethernet/freescale/fman/fman_keygen.c b/drivers/net/ethernet/freescale/fman/fman_keygen.c
index e73f6ef3c6ee..f4b83b5eb018 100644
--- a/drivers/net/ethernet/freescale/fman/fman_keygen.c
+++ b/drivers/net/ethernet/freescale/fman/fman_keygen.c
@@ -629,7 +629,7 @@ struct fman_keygen *keygen_init(struct fman_kg_regs __iomem *keygen_regs)
 	int i;

 	/* Allocate memory for KeyGen driver */
-	keygen = kzalloc(sizeof(*keygen), GFP_KERNEL);
+	keygen = kzalloc_obj(*keygen, GFP_KERNEL);
 	if (!keygen)
 		return NULL;

diff --git a/drivers/net/ethernet/freescale/fman/fman_mac.h b/drivers/net/ethernet/freescale/fman/fman_mac.h
index e5d6cddea731..83d53f33abc2 100644
--- a/drivers/net/ethernet/freescale/fman/fman_mac.h
+++ b/drivers/net/ethernet/freescale/fman/fman_mac.h
@@ -224,14 +224,13 @@ static inline struct eth_hash_t *alloc_hash_table(u16 size)
 	struct eth_hash_t *hash;

 	/* Allocate address hash table */
-	hash = kmalloc(sizeof(*hash), GFP_KERNEL);
+	hash = kmalloc_obj(*hash, GFP_KERNEL);
 	if (!hash)
 		return NULL;

 	hash->size = size;

-	hash->lsts = kmalloc_array(hash->size, sizeof(struct list_head),
-				   GFP_KERNEL);
+	hash->lsts = kmalloc_objs(struct list_head, hash->size, GFP_KERNEL);
 	if (!hash->lsts) {
 		kfree(hash);
 		return NULL;
diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c
index c84f0336c94c..f9461bba1a66 100644
--- a/drivers/net/ethernet/freescale/fman/fman_memac.c
+++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
@@ -811,7 +811,7 @@ static int memac_add_hash_mac_address(struct fman_mac *memac,
 	hash = get_mac_addr_hash_code(addr) & HASH_CTRL_ADDR_MASK;

 	/* Create element to be added to the driver hash table */
-	hash_entry = kmalloc(sizeof(*hash_entry), GFP_ATOMIC);
+	hash_entry = kmalloc_obj(*hash_entry, GFP_ATOMIC);
 	if (!hash_entry)
 		return -ENOMEM;
 	hash_entry->addr = addr;
@@ -1086,12 +1086,12 @@ static struct fman_mac *memac_config(struct mac_device *mac_dev,
 	struct memac_cfg *memac_drv_param;

 	/* allocate memory for the m_emac data structure */
-	memac = kzalloc(sizeof(*memac), GFP_KERNEL);
+	memac = kzalloc_obj(*memac, GFP_KERNEL);
 	if (!memac)
 		return NULL;

 	/* allocate memory for the m_emac driver parameters data structure */
-	memac_drv_param = kzalloc(sizeof(*memac_drv_param), GFP_KERNEL);
+	memac_drv_param = kzalloc_obj(*memac_drv_param, GFP_KERNEL);
 	if (!memac_drv_param) {
 		memac_free(memac);
 		return NULL;
diff --git a/drivers/net/ethernet/freescale/fman/fman_muram.c b/drivers/net/ethernet/freescale/fman/fman_muram.c
index 1ed245a2ee01..eb85c54c9408 100644
--- a/drivers/net/ethernet/freescale/fman/fman_muram.c
+++ b/drivers/net/ethernet/freescale/fman/fman_muram.c
@@ -40,7 +40,7 @@ struct muram_info *fman_muram_init(phys_addr_t base, size_t size)
 	void __iomem *vaddr;
 	int ret;

-	muram = kzalloc(sizeof(*muram), GFP_KERNEL);
+	muram = kzalloc_obj(*muram, GFP_KERNEL);
 	if (!muram)
 		return NULL;

diff --git a/drivers/net/ethernet/freescale/fman/fman_port.c b/drivers/net/ethernet/freescale/fman/fman_port.c
index e977389f7088..a3e8c77dbb57 100644
--- a/drivers/net/ethernet/freescale/fman/fman_port.c
+++ b/drivers/net/ethernet/freescale/fman/fman_port.c
@@ -1297,7 +1297,7 @@ int fman_port_config(struct fman_port *port, struct fman_port_params *params)
 	int err;

 	/* Allocate the FM driver's parameters structure */
-	port->cfg = kzalloc(sizeof(*port->cfg), GFP_KERNEL);
+	port->cfg = kzalloc_obj(*port->cfg, GFP_KERNEL);
 	if (!port->cfg)
 		return -EINVAL;

@@ -1753,7 +1753,7 @@ static int fman_port_probe(struct platform_device *of_dev)
 	u16 port_speed;
 	u8 port_id;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/freescale/fman/fman_tgec.c b/drivers/net/ethernet/freescale/fman/fman_tgec.c
index fecfca6eba03..05edac07ba6c 100644
--- a/drivers/net/ethernet/freescale/fman/fman_tgec.c
+++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c
@@ -505,7 +505,7 @@ static int tgec_add_hash_mac_address(struct fman_mac *tgec,
 	hash = (crc >> TGEC_HASH_MCAST_SHIFT) & TGEC_HASH_ADR_MSK;

 	/* Create element to be added to the driver hash table */
-	hash_entry = kmalloc(sizeof(*hash_entry), GFP_ATOMIC);
+	hash_entry = kmalloc_obj(*hash_entry, GFP_ATOMIC);
 	if (!hash_entry)
 		return -ENOMEM;
 	hash_entry->addr = addr;
@@ -711,12 +711,12 @@ static struct fman_mac *tgec_config(struct mac_device *mac_dev,
 	struct tgec_cfg *cfg;

 	/* allocate memory for the UCC GETH data structure. */
-	tgec = kzalloc(sizeof(*tgec), GFP_KERNEL);
+	tgec = kzalloc_obj(*tgec, GFP_KERNEL);
 	if (!tgec)
 		return NULL;

 	/* allocate memory for the 10G MAC driver parameters data structure. */
-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg) {
 		tgec_free(tgec);
 		return NULL;
diff --git a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
index f563692a4a00..3ba98561f566 100644
--- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
+++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
@@ -866,7 +866,7 @@ static int fs_enet_probe(struct platform_device *ofdev)
 	if (!ops)
 		return -EINVAL;

-	fpi = kzalloc(sizeof(*fpi), GFP_KERNEL);
+	fpi = kzalloc_obj(*fpi, GFP_KERNEL);
 	if (!fpi)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c b/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c
index 66038e2a4ae3..2a27dc0b5653 100644
--- a/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c
+++ b/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c
@@ -152,7 +152,7 @@ static int fs_enet_mdio_probe(struct platform_device *ofdev)
 	struct bb_info *bitbang;
 	int ret = -ENOMEM;

-	bitbang = kzalloc(sizeof(struct bb_info), GFP_KERNEL);
+	bitbang = kzalloc_obj(struct bb_info, GFP_KERNEL);
 	if (!bitbang)
 		goto out;

diff --git a/drivers/net/ethernet/freescale/fs_enet/mii-fec.c b/drivers/net/ethernet/freescale/fs_enet/mii-fec.c
index dec31b638941..512e897cea08 100644
--- a/drivers/net/ethernet/freescale/fs_enet/mii-fec.c
+++ b/drivers/net/ethernet/freescale/fs_enet/mii-fec.c
@@ -108,7 +108,7 @@ static int fs_enet_mdio_probe(struct platform_device *ofdev)
 	if (!new_bus)
 		goto out;

-	fec = kzalloc(sizeof(struct fec_info), GFP_KERNEL);
+	fec = kzalloc_obj(struct fec_info, GFP_KERNEL);
 	if (!fec)
 		goto out_mii;

diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 7c0f049f0938..a58cd09b4c0d 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -413,8 +413,8 @@ static int gfar_alloc_tx_queues(struct gfar_private *priv)
 	int i;

 	for (i = 0; i < priv->num_tx_queues; i++) {
-		priv->tx_queue[i] = kzalloc(sizeof(struct gfar_priv_tx_q),
-					    GFP_KERNEL);
+		priv->tx_queue[i] = kzalloc_obj(struct gfar_priv_tx_q,
+						GFP_KERNEL);
 		if (!priv->tx_queue[i])
 			return -ENOMEM;

@@ -431,8 +431,8 @@ static int gfar_alloc_rx_queues(struct gfar_private *priv)
 	int i;

 	for (i = 0; i < priv->num_rx_queues; i++) {
-		priv->rx_queue[i] = kzalloc(sizeof(struct gfar_priv_rx_q),
-					    GFP_KERNEL);
+		priv->rx_queue[i] = kzalloc_obj(struct gfar_priv_rx_q,
+						GFP_KERNEL);
 		if (!priv->rx_queue[i])
 			return -ENOMEM;

@@ -507,8 +507,7 @@ static int gfar_parse_group(struct device_node *np,
 	int i;

 	for (i = 0; i < GFAR_NUM_IRQS; i++) {
-		grp->irqinfo[i] = kzalloc(sizeof(struct gfar_irqinfo),
-					  GFP_KERNEL);
+		grp->irqinfo[i] = kzalloc_obj(struct gfar_irqinfo, GFP_KERNEL);
 		if (!grp->irqinfo[i])
 			return -ENOMEM;
 	}
@@ -1376,9 +1375,8 @@ static int gfar_alloc_skb_resources(struct net_device *ndev)
 	for (i = 0; i < priv->num_tx_queues; i++) {
 		tx_queue = priv->tx_queue[i];
 		tx_queue->tx_skbuff =
-			kmalloc_array(tx_queue->tx_ring_size,
-				      sizeof(*tx_queue->tx_skbuff),
-				      GFP_KERNEL);
+			kmalloc_objs(*tx_queue->tx_skbuff,
+				     tx_queue->tx_ring_size, GFP_KERNEL);
 		if (!tx_queue->tx_skbuff)
 			goto cleanup;

@@ -1388,9 +1386,9 @@ static int gfar_alloc_skb_resources(struct net_device *ndev)

 	for (i = 0; i < priv->num_rx_queues; i++) {
 		rx_queue = priv->rx_queue[i];
-		rx_queue->rx_buff = kcalloc(rx_queue->rx_ring_size,
-					    sizeof(*rx_queue->rx_buff),
-					    GFP_KERNEL);
+		rx_queue->rx_buff = kzalloc_objs(*rx_queue->rx_buff,
+						 rx_queue->rx_ring_size,
+						 GFP_KERNEL);
 		if (!rx_queue->rx_buff)
 			goto cleanup;
 	}
diff --git a/drivers/net/ethernet/freescale/gianfar_ethtool.c b/drivers/net/ethernet/freescale/gianfar_ethtool.c
index 6fa752d3b60d..528a0717084c 100644
--- a/drivers/net/ethernet/freescale/gianfar_ethtool.c
+++ b/drivers/net/ethernet/freescale/gianfar_ethtool.c
@@ -1241,7 +1241,7 @@ static int gfar_process_filer_changes(struct gfar_private *priv)
 	s32 ret = 0;

 	/* So index is set to zero, too! */
-	tab = kzalloc(sizeof(*tab), GFP_KERNEL);
+	tab = kzalloc_obj(*tab, GFP_KERNEL);
 	if (tab == NULL)
 		return -ENOMEM;

@@ -1293,7 +1293,7 @@ static int gfar_add_cls(struct gfar_private *priv,
 	struct ethtool_flow_spec_container *temp, *comp;
 	int ret = 0;

-	temp = kmalloc(sizeof(*temp), GFP_KERNEL);
+	temp = kmalloc_obj(*temp, GFP_KERNEL);
 	if (temp == NULL)
 		return -ENOMEM;
 	memcpy(&temp->fs, flow, sizeof(temp->fs));
diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
index 131d1210dc4a..b1ced6432f26 100644
--- a/drivers/net/ethernet/freescale/ucc_geth.c
+++ b/drivers/net/ethernet/freescale/ucc_geth.c
@@ -2071,8 +2071,8 @@ static int ucc_geth_alloc_tx(struct ucc_geth_private *ugeth)
 	for (j = 0; j < ucc_geth_tx_queues(ug_info); j++) {
 		/* Setup the skbuff rings */
 		ugeth->tx_skbuff[j] =
-			kcalloc(ugeth->ug_info->bdRingLenTx[j],
-				sizeof(struct sk_buff *), GFP_KERNEL);
+			kzalloc_objs(struct sk_buff *,
+				     ugeth->ug_info->bdRingLenTx[j], GFP_KERNEL);

 		if (ugeth->tx_skbuff[j] == NULL) {
 			if (netif_msg_ifup(ugeth))
@@ -2129,8 +2129,8 @@ static int ucc_geth_alloc_rx(struct ucc_geth_private *ugeth)
 	for (j = 0; j < ucc_geth_rx_queues(ug_info); j++) {
 		/* Setup the skbuff rings */
 		ugeth->rx_skbuff[j] =
-			kcalloc(ugeth->ug_info->bdRingLenRx[j],
-				sizeof(struct sk_buff *), GFP_KERNEL);
+			kzalloc_objs(struct sk_buff *,
+				     ugeth->ug_info->bdRingLenRx[j], GFP_KERNEL);

 		if (ugeth->rx_skbuff[j] == NULL) {
 			if (netif_msg_ifup(ugeth))
@@ -2677,7 +2677,7 @@ static int ucc_geth_startup(struct ucc_geth_private *ugeth)
 	 * allocated resources can be released when the channel is freed.
 	 */
 	if (!(ugeth->p_init_enet_param_shadow =
-	      kzalloc(sizeof(struct ucc_geth_init_pram), GFP_KERNEL))) {
+	      kzalloc_obj(struct ucc_geth_init_pram, GFP_KERNEL))) {
 		if (netif_msg_ifup(ugeth))
 			pr_err("Can not allocate memory for p_UccInitEnetParamShadows\n");
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/fungible/funcore/fun_dev.c b/drivers/net/ethernet/fungible/funcore/fun_dev.c
index ce97b76f9ae0..1c1e66068fed 100644
--- a/drivers/net/ethernet/fungible/funcore/fun_dev.c
+++ b/drivers/net/ethernet/fungible/funcore/fun_dev.c
@@ -210,7 +210,7 @@ static int fun_init_cmd_ctx(struct fun_dev *fdev, unsigned int ntags)
 {
 	unsigned int i;

-	fdev->cmd_ctx = kvcalloc(ntags, sizeof(*fdev->cmd_ctx), GFP_KERNEL);
+	fdev->cmd_ctx = kvzalloc_objs(*fdev->cmd_ctx, ntags, GFP_KERNEL);
 	if (!fdev->cmd_ctx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/fungible/funcore/fun_queue.c b/drivers/net/ethernet/fungible/funcore/fun_queue.c
index d07ee3e4f52a..200983145606 100644
--- a/drivers/net/ethernet/fungible/funcore/fun_queue.c
+++ b/drivers/net/ethernet/fungible/funcore/fun_queue.c
@@ -405,7 +405,7 @@ void fun_free_queue(struct fun_queue *funq)
 struct fun_queue *fun_alloc_queue(struct fun_dev *fdev, int qid,
 				  const struct fun_queue_alloc_req *req)
 {
-	struct fun_queue *funq = kzalloc(sizeof(*funq), GFP_KERNEL);
+	struct fun_queue *funq = kzalloc_obj(*funq, GFP_KERNEL);

 	if (!funq)
 		return NULL;
diff --git a/drivers/net/ethernet/fungible/funeth/funeth_main.c b/drivers/net/ethernet/fungible/funeth/funeth_main.c
index 792cddac6f1b..2255f203674a 100644
--- a/drivers/net/ethernet/fungible/funeth/funeth_main.c
+++ b/drivers/net/ethernet/fungible/funeth/funeth_main.c
@@ -424,7 +424,7 @@ static struct funeth_txq **alloc_xdpqs(struct net_device *dev, unsigned int nqs,
 	unsigned int i;
 	int err;

-	xdpqs = kcalloc(nqs, sizeof(*xdpqs), GFP_KERNEL);
+	xdpqs = kzalloc_objs(*xdpqs, nqs, GFP_KERNEL);
 	if (!xdpqs)
 		return ERR_PTR(-ENOMEM);

@@ -486,7 +486,7 @@ static int fun_alloc_rings(struct net_device *netdev, struct fun_qset *qset)
 	if (err)
 		return err;

-	rxqs = kcalloc(qset->ntxqs + qset->nrxqs, sizeof(*rxqs), GFP_KERNEL);
+	rxqs = kzalloc_objs(*rxqs, qset->ntxqs + qset->nrxqs, GFP_KERNEL);
 	if (!rxqs)
 		return -ENOMEM;

@@ -1175,7 +1175,7 @@ static int fun_init_vports(struct fun_ethdev *ed, unsigned int n)
 	if (ed->num_vports)
 		return -EINVAL;

-	ed->vport_info = kvcalloc(n, sizeof(*ed->vport_info), GFP_KERNEL);
+	ed->vport_info = kvzalloc_objs(*ed->vport_info, n, GFP_KERNEL);
 	if (!ed->vport_info)
 		return -ENOMEM;
 	ed->num_vports = n;
@@ -1833,7 +1833,7 @@ static int fun_create_ports(struct fun_ethdev *ed, unsigned int nports)
 		return -EINVAL;
 	}

-	ed->netdevs = kcalloc(nports, sizeof(*ed->netdevs), GFP_KERNEL);
+	ed->netdevs = kzalloc_objs(*ed->netdevs, nports, GFP_KERNEL);
 	if (!ed->netdevs)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/ethernet/google/gve/gve_ethtool.c
index 42a0a6f7b296..a2b5aeee0831 100644
--- a/drivers/net/ethernet/google/gve/gve_ethtool.c
+++ b/drivers/net/ethernet/google/gve/gve_ethtool.c
@@ -176,8 +176,8 @@ gve_get_ethtool_stats(struct net_device *netdev,
 	priv = netdev_priv(netdev);
 	num_tx_queues = gve_num_tx_queues(priv);
 	report_stats = priv->stats_report->stats;
-	rx_qid_to_stats_idx = kmalloc_array(priv->rx_cfg.num_queues,
-					    sizeof(int), GFP_KERNEL);
+	rx_qid_to_stats_idx = kmalloc_objs(int, priv->rx_cfg.num_queues,
+					   GFP_KERNEL);
 	if (!rx_qid_to_stats_idx)
 		return;
 	for (ring = 0; ring < priv->rx_cfg.num_queues; ring++) {
@@ -185,8 +185,7 @@ gve_get_ethtool_stats(struct net_device *netdev,
 		if (!gve_rx_was_added_to_block(priv, ring))
 			num_stopped_rxqs++;
 	}
-	tx_qid_to_stats_idx = kmalloc_array(num_tx_queues,
-					    sizeof(int), GFP_KERNEL);
+	tx_qid_to_stats_idx = kmalloc_objs(int, num_tx_queues, GFP_KERNEL);
 	if (!tx_qid_to_stats_idx) {
 		kfree(rx_qid_to_stats_idx);
 		return;
diff --git a/drivers/net/ethernet/google/gve/gve_flow_rule.c b/drivers/net/ethernet/google/gve/gve_flow_rule.c
index 0bb8cd1876a3..f97b124b1c6a 100644
--- a/drivers/net/ethernet/google/gve/gve_flow_rule.c
+++ b/drivers/net/ethernet/google/gve/gve_flow_rule.c
@@ -269,7 +269,7 @@ int gve_add_flow_rule(struct gve_priv *priv, struct ethtool_rxnfc *cmd)
 	if (!priv->max_flow_rules)
 		return -EOPNOTSUPP;

-	rule = kvzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kvzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c
index 0ee864b0afe0..75c4748f9de2 100644
--- a/drivers/net/ethernet/google/gve/gve_main.c
+++ b/drivers/net/ethernet/google/gve/gve_main.c
@@ -151,8 +151,8 @@ static int gve_alloc_flow_rule_caches(struct gve_priv *priv)
 		return 0;

 	flow_rules_cache->rules_cache =
-		kvcalloc(GVE_FLOW_RULES_CACHE_SIZE, sizeof(*flow_rules_cache->rules_cache),
-			 GFP_KERNEL);
+		kvzalloc_objs(*flow_rules_cache->rules_cache,
+			      GVE_FLOW_RULES_CACHE_SIZE, GFP_KERNEL);
 	if (!flow_rules_cache->rules_cache) {
 		dev_err(&priv->pdev->dev, "Cannot alloc flow rules cache\n");
 		return -ENOMEM;
@@ -485,8 +485,8 @@ static int gve_alloc_notify_blocks(struct gve_priv *priv)
 	int i, j;
 	int err;

-	priv->msix_vectors = kvcalloc(num_vecs_requested,
-				      sizeof(*priv->msix_vectors), GFP_KERNEL);
+	priv->msix_vectors = kvzalloc_objs(*priv->msix_vectors,
+					   num_vecs_requested, GFP_KERNEL);
 	if (!priv->msix_vectors)
 		return -ENOMEM;
 	for (i = 0; i < num_vecs_requested; i++)
@@ -666,8 +666,8 @@ static int gve_setup_device_resources(struct gve_priv *priv)
 	}

 	if (!gve_is_gqi(priv)) {
-		priv->ptype_lut_dqo = kvzalloc(sizeof(*priv->ptype_lut_dqo),
-					       GFP_KERNEL);
+		priv->ptype_lut_dqo = kvzalloc_obj(*priv->ptype_lut_dqo,
+						   GFP_KERNEL);
 		if (!priv->ptype_lut_dqo) {
 			err = -ENOMEM;
 			goto abort_with_stats_report;
@@ -1090,17 +1090,17 @@ struct gve_queue_page_list *gve_alloc_queue_page_list(struct gve_priv *priv,
 	int err;
 	int i;

-	qpl = kvzalloc(sizeof(*qpl), GFP_KERNEL);
+	qpl = kvzalloc_obj(*qpl, GFP_KERNEL);
 	if (!qpl)
 		return NULL;

 	qpl->id = id;
 	qpl->num_entries = 0;
-	qpl->pages = kvcalloc(pages, sizeof(*qpl->pages), GFP_KERNEL);
+	qpl->pages = kvzalloc_objs(*qpl->pages, pages, GFP_KERNEL);
 	if (!qpl->pages)
 		goto abort;

-	qpl->page_buses = kvcalloc(pages, sizeof(*qpl->page_buses), GFP_KERNEL);
+	qpl->page_buses = kvzalloc_objs(*qpl->page_buses, pages, GFP_KERNEL);
 	if (!qpl->page_buses)
 		goto abort;

diff --git a/drivers/net/ethernet/google/gve/gve_ptp.c b/drivers/net/ethernet/google/gve/gve_ptp.c
index de42fc2c19a1..eb836ebcbd60 100644
--- a/drivers/net/ethernet/google/gve/gve_ptp.c
+++ b/drivers/net/ethernet/google/gve/gve_ptp.c
@@ -70,7 +70,7 @@ static int gve_ptp_init(struct gve_priv *priv)
 	struct gve_ptp *ptp;
 	int err;

-	priv->ptp = kzalloc(sizeof(*priv->ptp), GFP_KERNEL);
+	priv->ptp = kzalloc_obj(*priv->ptp, GFP_KERNEL);
 	if (!priv->ptp)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/google/gve/gve_rx.c b/drivers/net/ethernet/google/gve/gve_rx.c
index ec424d2f4f57..197513da0fe5 100644
--- a/drivers/net/ethernet/google/gve/gve_rx.c
+++ b/drivers/net/ethernet/google/gve/gve_rx.c
@@ -390,8 +390,8 @@ int gve_rx_alloc_rings_gqi(struct gve_priv *priv,
 	int err = 0;
 	int i, j;

-	rx = kvcalloc(cfg->qcfg_rx->max_queues, sizeof(struct gve_rx_ring),
-		      GFP_KERNEL);
+	rx = kvzalloc_objs(struct gve_rx_ring, cfg->qcfg_rx->max_queues,
+			   GFP_KERNEL);
 	if (!rx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/ethernet/google/gve/gve_rx_dqo.c
index 63a96106a693..282c10e50d53 100644
--- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c
+++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c
@@ -320,8 +320,8 @@ int gve_rx_alloc_rings_dqo(struct gve_priv *priv,
 	int err;
 	int i;

-	rx = kvcalloc(cfg->qcfg_rx->max_queues, sizeof(struct gve_rx_ring),
-		      GFP_KERNEL);
+	rx = kvzalloc_objs(struct gve_rx_ring, cfg->qcfg_rx->max_queues,
+			   GFP_KERNEL);
 	if (!rx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/google/gve/gve_tx.c b/drivers/net/ethernet/google/gve/gve_tx.c
index 97efc8d27e6f..d2023cee1f35 100644
--- a/drivers/net/ethernet/google/gve/gve_tx.c
+++ b/drivers/net/ethernet/google/gve/gve_tx.c
@@ -345,8 +345,8 @@ int gve_tx_alloc_rings_gqi(struct gve_priv *priv,
 		return -EINVAL;
 	}

-	tx = kvcalloc(cfg->qcfg->max_queues, sizeof(struct gve_tx_ring),
-		      GFP_KERNEL);
+	tx = kvzalloc_objs(struct gve_tx_ring, cfg->qcfg->max_queues,
+			   GFP_KERNEL);
 	if (!tx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/google/gve/gve_tx_dqo.c b/drivers/net/ethernet/google/gve/gve_tx_dqo.c
index 28e85730f785..44980f61e330 100644
--- a/drivers/net/ethernet/google/gve/gve_tx_dqo.c
+++ b/drivers/net/ethernet/google/gve/gve_tx_dqo.c
@@ -266,9 +266,8 @@ static int gve_tx_qpl_buf_init(struct gve_tx_ring *tx)
 		tx->dqo.qpl->num_entries;
 	int i;

-	tx->dqo.tx_qpl_buf_next = kvcalloc(num_tx_qpl_bufs,
-					   sizeof(tx->dqo.tx_qpl_buf_next[0]),
-					   GFP_KERNEL);
+	tx->dqo.tx_qpl_buf_next = kvzalloc_objs(tx->dqo.tx_qpl_buf_next[0],
+						num_tx_qpl_bufs, GFP_KERNEL);
 	if (!tx->dqo.tx_qpl_buf_next)
 		return -ENOMEM;

@@ -337,9 +336,9 @@ static int gve_tx_alloc_ring_dqo(struct gve_priv *priv,
 	num_pending_packets /= 2;

 	tx->dqo.num_pending_packets = min_t(int, num_pending_packets, S16_MAX);
-	tx->dqo.pending_packets = kvcalloc(tx->dqo.num_pending_packets,
-					   sizeof(tx->dqo.pending_packets[0]),
-					   GFP_KERNEL);
+	tx->dqo.pending_packets = kvzalloc_objs(tx->dqo.pending_packets[0],
+						tx->dqo.num_pending_packets,
+						GFP_KERNEL);
 	if (!tx->dqo.pending_packets)
 		goto err;

@@ -417,8 +416,8 @@ int gve_tx_alloc_rings_dqo(struct gve_priv *priv,
 		return -EINVAL;
 	}

-	tx = kvcalloc(cfg->qcfg->max_queues, sizeof(struct gve_tx_ring),
-		      GFP_KERNEL);
+	tx = kvzalloc_objs(struct gve_tx_ring, cfg->qcfg->max_queues,
+			   GFP_KERNEL);
 	if (!tx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.c b/drivers/net/ethernet/hisilicon/hns/hnae.c
index d4293f76d69d..5c3b4eaf144b 100644
--- a/drivers/net/ethernet/hisilicon/hns/hnae.c
+++ b/drivers/net/ethernet/hisilicon/hns/hnae.c
@@ -208,8 +208,8 @@ hnae_init_ring(struct hnae_queue *q, struct hnae_ring *ring, int flags)
 	assert(ring->next_to_use == 0);
 	assert(ring->next_to_clean == 0);

-	ring->desc_cb = kcalloc(ring->desc_num, sizeof(ring->desc_cb[0]),
-			GFP_KERNEL);
+	ring->desc_cb = kzalloc_objs(ring->desc_cb[0], ring->desc_num,
+				     GFP_KERNEL);
 	if (!ring->desc_cb) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
index 8ce910f8d0cc..a4f4c4d14035 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
@@ -81,8 +81,7 @@ static struct hnae_handle *hns_ae_get_handle(struct hnae_ae_dev *dev,
 	vfnum_per_port = hns_ae_get_vf_num_per_port(dsaf_dev, port_id);
 	qnum_per_vf = hns_ae_get_q_num_per_vf(dsaf_dev, port_id);

-	vf_cb = kzalloc(struct_size(vf_cb, ae_handle.qs, qnum_per_vf),
-			GFP_KERNEL);
+	vf_cb = kzalloc_flex(*vf_cb, ae_handle.qs, qnum_per_vf, GFP_KERNEL);
 	if (unlikely(!vf_cb)) {
 		dev_err(dsaf_dev->dev, "malloc vf_cb fail!\n");
 		ae_handle = ERR_PTR(-ENOMEM);
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
index 6d746a9fb687..dbc6d5c6644c 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
@@ -1099,8 +1099,8 @@ static struct hns3_enet_ring *hns3_backup_ringparam(struct hns3_nic_priv *priv)
 	struct hns3_enet_ring *tmp_rings;
 	int i;

-	tmp_rings = kcalloc(handle->kinfo.num_tqps * 2,
-			    sizeof(struct hns3_enet_ring), GFP_KERNEL);
+	tmp_rings = kzalloc_objs(struct hns3_enet_ring,
+				 handle->kinfo.num_tqps * 2, GFP_KERNEL);
 	if (!tmp_rings)
 		return NULL;

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
index b76d25074e99..5a7ce1eea30c 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
@@ -800,7 +800,7 @@ hclge_dbg_dump_reg_tqp(struct hclge_dev *hdev,
 	if (ret)
 		return ret;

-	desc_src = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
+	desc_src = kzalloc_objs(struct hclge_desc, bd_num, GFP_KERNEL);
 	if (!desc_src)
 		return -ENOMEM;

@@ -852,7 +852,7 @@ hclge_dbg_dump_reg_common(struct hclge_dev *hdev,
 	if (ret)
 		return ret;

-	desc_src = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
+	desc_src = kzalloc_objs(struct hclge_desc, bd_num, GFP_KERNEL);
 	if (!desc_src)
 		return -ENOMEM;

@@ -2278,7 +2278,7 @@ static int hclge_dbg_get_imp_stats_info(struct seq_file *s, void *data)
 		return -EINVAL;
 	}

-	desc_src = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
+	desc_src = kzalloc_objs(struct hclge_desc, bd_num, GFP_KERNEL);
 	if (!desc_src)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c
index cc7f46c0b35f..02d21c5e8e0e 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c
@@ -2481,7 +2481,7 @@ static int hclge_handle_all_ras_errors(struct hclge_dev *hdev)
 		return ret;

 	bd_num = max_t(u32, mpf_bd_num, pf_bd_num);
-	desc = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
+	desc = kzalloc_objs(struct hclge_desc, bd_num, GFP_KERNEL);
 	if (!desc)
 		return -ENOMEM;

@@ -3038,7 +3038,7 @@ static int hclge_handle_all_hw_msix_error(struct hclge_dev *hdev,
 		goto out;

 	bd_num = max_t(u32, mpf_bd_num, pf_bd_num);
-	desc = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
+	desc = kzalloc_objs(struct hclge_desc, bd_num, GFP_KERNEL);
 	if (!desc)
 		return -ENOMEM;

@@ -3127,7 +3127,7 @@ void hclge_handle_all_hns_hw_errors(struct hnae3_ae_dev *ae_dev)
 		return;

 	bd_num = max_t(u32, mpf_bd_num, pf_bd_num);
-	desc = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
+	desc = kzalloc_objs(struct hclge_desc, bd_num, GFP_KERNEL);
 	if (!desc)
 		return;

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index edec994981c7..80aa566ad31f 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -492,7 +492,7 @@ static int hclge_mac_update_stats_complete(struct hclge_dev *hdev)
 	/* This may be called inside atomic sections,
 	 * so GFP_ATOMIC is more suitable here
 	 */
-	desc = kcalloc(desc_num, sizeof(struct hclge_desc), GFP_ATOMIC);
+	desc = kzalloc_objs(struct hclge_desc, desc_num, GFP_ATOMIC);
 	if (!desc)
 		return -ENOMEM;

@@ -2418,7 +2418,7 @@ int hclge_buffer_alloc(struct hclge_dev *hdev)
 	struct hclge_pkt_buf_alloc *pkt_buf;
 	int ret;

-	pkt_buf = kzalloc(sizeof(*pkt_buf), GFP_KERNEL);
+	pkt_buf = kzalloc_obj(*pkt_buf, GFP_KERNEL);
 	if (!pkt_buf)
 		return -ENOMEM;

@@ -6582,7 +6582,7 @@ static int hclge_add_fd_entry(struct hnae3_handle *handle,
 	if (ret)
 		return ret;

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

@@ -7124,7 +7124,7 @@ static int hclge_add_fd_entry_by_arfs(struct hnae3_handle *handle, u16 queue_id,
 			return -ENOSPC;
 		}

-		rule = kzalloc(sizeof(*rule), GFP_ATOMIC);
+		rule = kzalloc_obj(*rule, GFP_ATOMIC);
 		if (!rule) {
 			spin_unlock_bh(&hdev->fd_rule_lock);
 			return -ENOMEM;
@@ -7410,7 +7410,7 @@ static int hclge_add_cls_flower(struct hnae3_handle *handle,
 		return ret;
 	}

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

@@ -8578,7 +8578,7 @@ int hclge_update_mac_list(struct hclge_vport *vport,
 		return -ENOENT;
 	}

-	mac_node = kzalloc(sizeof(*mac_node), GFP_ATOMIC);
+	mac_node = kzalloc_obj(*mac_node, GFP_ATOMIC);
 	if (!mac_node) {
 		spin_unlock_bh(&vport->mac_list_lock);
 		return -ENOMEM;
@@ -8986,7 +8986,7 @@ static void hclge_sync_vport_mac_table(struct hclge_vport *vport,
 			list_move_tail(&mac_node->node, &tmp_del_list);
 			break;
 		case HCLGE_MAC_TO_ADD:
-			new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC);
+			new_node = kzalloc_obj(*new_node, GFP_ATOMIC);
 			if (!new_node)
 				goto stop_traverse;
 			ether_addr_copy(new_node->mac_addr, mac_node->mac_addr);
@@ -9328,7 +9328,7 @@ int hclge_update_mac_node_for_dev_addr(struct hclge_vport *vport,

 	new_node = hclge_find_mac_node(list, new_addr);
 	if (!new_node) {
-		new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC);
+		new_node = kzalloc_obj(*new_node, GFP_ATOMIC);
 		if (!new_node)
 			return -ENOMEM;

@@ -10093,7 +10093,7 @@ static void hclge_add_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id,
 		}
 	}

-	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan) {
 		mutex_unlock(&hdev->vport_lock);
 		return;
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
index b7d4e06a55d4..7801c39df38d 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
@@ -212,7 +212,7 @@ static int hclge_get_ring_chain_from_mbx(
 	cur_chain = ring_chain;

 	for (i = 1; i < ring_num; i++) {
-		new_chain = kzalloc(sizeof(*new_chain), GFP_KERNEL);
+		new_chain = kzalloc_obj(*new_chain, GFP_KERNEL);
 		if (!new_chain)
 			goto err;

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_regs.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_regs.c
index 8c057192aae6..3bd3195d789e 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_regs.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_regs.c
@@ -190,7 +190,7 @@ static int hclge_get_32_bit_regs(struct hclge_dev *hdev, u32 regs_num,
 	nodata_num = HCLGE_32_BIT_DESC_NODATA_LEN;
 	cmd_num = DIV_ROUND_UP(regs_num + nodata_num,
 			       HCLGE_32_BIT_REG_RTN_DATANUM);
-	desc = kcalloc(cmd_num, sizeof(struct hclge_desc), GFP_KERNEL);
+	desc = kzalloc_objs(struct hclge_desc, cmd_num, GFP_KERNEL);
 	if (!desc)
 		return -ENOMEM;

@@ -244,7 +244,7 @@ static int hclge_get_64_bit_regs(struct hclge_dev *hdev, u32 regs_num,
 	nodata_len = HCLGE_64_BIT_DESC_NODATA_LEN;
 	cmd_num = DIV_ROUND_UP(regs_num + nodata_len,
 			       HCLGE_64_BIT_REG_RTN_DATANUM);
-	desc = kcalloc(cmd_num, sizeof(struct hclge_desc), GFP_KERNEL);
+	desc = kzalloc_objs(struct hclge_desc, cmd_num, GFP_KERNEL);
 	if (!desc)
 		return -ENOMEM;

@@ -394,7 +394,7 @@ static int hclge_get_dfx_reg_len(struct hclge_dev *hdev, int *len)
 	int ret;
 	u32 i;

-	bd_num_list = kcalloc(dfx_reg_type_num, sizeof(int), GFP_KERNEL);
+	bd_num_list = kzalloc_objs(int, dfx_reg_type_num, GFP_KERNEL);
 	if (!bd_num_list)
 		return -ENOMEM;

@@ -455,7 +455,7 @@ static int hclge_get_dfx_reg(struct hclge_dev *hdev, void *data)
 	int ret;
 	u32 i;

-	bd_num_list = kcalloc(dfx_reg_type_num, sizeof(int), GFP_KERNEL);
+	bd_num_list = kzalloc_objs(int, dfx_reg_type_num, GFP_KERNEL);
 	if (!bd_num_list)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
index 70327a73dee3..0cc911e6c732 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
@@ -977,7 +977,7 @@ static int hclgevf_update_mac_list(struct hnae3_handle *handle,
 		return -ENOENT;
 	}

-	mac_node = kzalloc(sizeof(*mac_node), GFP_ATOMIC);
+	mac_node = kzalloc_obj(*mac_node, GFP_ATOMIC);
 	if (!mac_node) {
 		spin_unlock_bh(&hdev->mac_table.mac_list_lock);
 		return -ENOMEM;
@@ -1156,7 +1156,7 @@ static void hclgevf_sync_mac_list(struct hclgevf_dev *hdev,
 			list_move_tail(&mac_node->node, &tmp_del_list);
 			break;
 		case HCLGEVF_MAC_TO_ADD:
-			new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC);
+			new_node = kzalloc_obj(*new_node, GFP_ATOMIC);
 			if (!new_node)
 				goto stop_traverse;

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_debugfs.c b/drivers/net/ethernet/huawei/hinic/hinic_debugfs.c
index 061952c6c21a..39ceba2820bf 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_debugfs.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_debugfs.c
@@ -88,7 +88,7 @@ static int hinic_dbg_get_func_table(struct hinic_dev *nic_dev, int idx)
 	int ret = ~0;
 	int err;

-	read_data = kzalloc(sizeof(*read_data), GFP_KERNEL);
+	read_data = kzalloc_obj(*read_data, GFP_KERNEL);
 	if (!read_data)
 		return ~0;

@@ -182,7 +182,7 @@ static int create_dbg_files(struct hinic_dev *dev, enum hinic_dbg_type type, voi
 	struct hinic_debug_priv *tmp;
 	int i;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_devlink.c b/drivers/net/ethernet/huawei/hinic/hinic_devlink.c
index 300bc267a259..f4d34fdbc014 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_devlink.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_devlink.c
@@ -130,7 +130,7 @@ static int hinic_flash_fw(struct hinic_devlink_priv *priv, const u8 *data,
 	int total_len_flag = 0;
 	int err;

-	fw_update_msg = kzalloc(sizeof(*fw_update_msg), GFP_KERNEL);
+	fw_update_msg = kzalloc_obj(*fw_update_msg, GFP_KERNEL);
 	if (!fw_update_msg)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c b/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
index f28528df5aac..d4787347d0c5 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
@@ -1392,7 +1392,7 @@ static void hinic_get_ethtool_stats(struct net_device *netdev,
 				sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
 	}

-	port_stats = kzalloc(sizeof(*port_stats), GFP_KERNEL);
+	port_stats = kzalloc_obj(*port_stats, GFP_KERNEL);
 	if (!port_stats) {
 		memset(&data[i], 0,
 		       ARRAY_SIZE(hinic_port_stats) * sizeof(*data));
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hw_mbox.c b/drivers/net/ethernet/huawei/hinic/hinic_hw_mbox.c
index 97c1584dc05b..f8aef328f8c0 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_hw_mbox.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_hw_mbox.c
@@ -487,7 +487,7 @@ static void recv_mbox_handler(struct hinic_mbox_func_to_func *func_to_func,
 	if (!rcv_mbox_temp->buf_out)
 		goto err_alloc_rcv_mbox_buf;

-	mbox_work = kzalloc(sizeof(*mbox_work), GFP_KERNEL);
+	mbox_work = kzalloc_obj(*mbox_work, GFP_KERNEL);
 	if (!mbox_work)
 		goto err_alloc_mbox_work;

@@ -603,7 +603,7 @@ static bool check_vf_mbox_random_id(struct hinic_mbox_func_to_func *func_to_func
 		 "The mailbox random id(0x%x) of func_id(0x%x) doesn't match with pf reservation(0x%x)\n",
 		 random_id, src, func_to_func->vf_mbx_rand_id[src]);

-	mbox_work = kzalloc(sizeof(*mbox_work), GFP_KERNEL);
+	mbox_work = kzalloc_obj(*mbox_work, GFP_KERNEL);
 	if (!mbox_work)
 		return false;

@@ -1402,7 +1402,7 @@ int hinic_func_to_func_init(struct hinic_hwdev *hwdev)
 	int err;

 	pfhwdev =  container_of(hwdev, struct hinic_pfhwdev, hwdev);
-	func_to_func = kzalloc(sizeof(*func_to_func), GFP_KERNEL);
+	func_to_func = kzalloc_obj(*func_to_func, GFP_KERNEL);
 	if (!func_to_func)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hw_mgmt.c b/drivers/net/ethernet/huawei/hinic/hinic_hw_mgmt.c
index 4aa1f433ed24..8bda0a26a345 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_hw_mgmt.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_hw_mgmt.c
@@ -441,7 +441,7 @@ static void mgmt_recv_msg_handler(struct hinic_pf_to_mgmt *pf_to_mgmt,
 {
 	struct hinic_mgmt_msg_handle_work *mgmt_work = NULL;

-	mgmt_work = kzalloc(sizeof(*mgmt_work), GFP_KERNEL);
+	mgmt_work = kzalloc_obj(*mgmt_work, GFP_KERNEL);
 	if (!mgmt_work)
 		return;

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_port.c b/drivers/net/ethernet/huawei/hinic/hinic_port.c
index 486fb0e20bef..868e666cc392 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_port.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_port.c
@@ -1032,7 +1032,7 @@ int hinic_get_phy_port_stats(struct hinic_dev *nic_dev,
 	struct pci_dev *pdev = hwif->pdev;
 	int err;

-	port_stats = kzalloc(sizeof(*port_stats), GFP_KERNEL);
+	port_stats = kzalloc_obj(*port_stats, GFP_KERNEL);
 	if (!port_stats)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_cmdq.c b/drivers/net/ethernet/huawei/hinic3/hinic3_cmdq.c
index 86720bb119e9..ab38da085ae5 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_cmdq.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_cmdq.c
@@ -123,7 +123,7 @@ struct hinic3_cmd_buf *hinic3_alloc_cmd_buf(struct hinic3_hwdev *hwdev)

 	cmdqs = hwdev->cmdqs;

-	cmd_buf = kmalloc(sizeof(*cmd_buf), GFP_ATOMIC);
+	cmd_buf = kmalloc_obj(*cmd_buf, GFP_ATOMIC);
 	if (!cmd_buf)
 		return NULL;

@@ -614,8 +614,8 @@ static int init_cmdq(struct hinic3_cmdq *cmdq, struct hinic3_hwdev *hwdev,

 	spin_lock_init(&cmdq->cmdq_lock);

-	cmdq->cmd_infos = kcalloc(cmdq->wq.q_depth, sizeof(*cmdq->cmd_infos),
-				  GFP_KERNEL);
+	cmdq->cmd_infos = kzalloc_objs(*cmdq->cmd_infos, cmdq->wq.q_depth,
+				       GFP_KERNEL);
 	if (!cmdq->cmd_infos) {
 		err = -ENOMEM;
 		return err;
@@ -738,7 +738,7 @@ static int init_cmdqs(struct hinic3_hwdev *hwdev)
 {
 	struct hinic3_cmdqs *cmdqs;

-	cmdqs = kzalloc(sizeof(*cmdqs), GFP_KERNEL);
+	cmdqs = kzalloc_obj(*cmdqs, GFP_KERNEL);
 	if (!cmdqs)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_eqs.c b/drivers/net/ethernet/huawei/hinic3/hinic3_eqs.c
index a2c3962116d5..78f50dc6513a 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_eqs.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_eqs.c
@@ -648,7 +648,7 @@ int hinic3_aeqs_init(struct hinic3_hwdev *hwdev, u16 num_aeqs,
 	u16 q_id;
 	int err;

-	aeqs = kzalloc(sizeof(*aeqs), GFP_KERNEL);
+	aeqs = kzalloc_obj(*aeqs, GFP_KERNEL);
 	if (!aeqs)
 		return -ENOMEM;

@@ -720,7 +720,7 @@ int hinic3_ceqs_init(struct hinic3_hwdev *hwdev, u16 num_ceqs,
 	u16 q_id;
 	int err;

-	ceqs = kzalloc(sizeof(*ceqs), GFP_KERNEL);
+	ceqs = kzalloc_obj(*ceqs, GFP_KERNEL);
 	if (!ceqs)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_filter.c b/drivers/net/ethernet/huawei/hinic3/hinic3_filter.c
index 6349d71f574b..6d378c86aabd 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_filter.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_filter.c
@@ -75,7 +75,7 @@ static void hinic3_add_filter(struct net_device *netdev,
 	struct hinic3_nic_dev *nic_dev = netdev_priv(netdev);
 	struct hinic3_mac_filter *f;

-	f = kzalloc(sizeof(*f), GFP_ATOMIC);
+	f = kzalloc_obj(*f, GFP_ATOMIC);
 	if (!f)
 		return;

@@ -110,7 +110,7 @@ hinic3_mac_filter_entry_clone(const struct hinic3_mac_filter *src)
 {
 	struct hinic3_mac_filter *f;

-	f = kzalloc(sizeof(*f), GFP_ATOMIC);
+	f = kzalloc_obj(*f, GFP_ATOMIC);
 	if (!f)
 		return NULL;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_hw_cfg.c b/drivers/net/ethernet/huawei/hinic3/hinic3_hw_cfg.c
index 7827c1f626db..c65dec383535 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_hw_cfg.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_hw_cfg.c
@@ -86,8 +86,7 @@ static int hinic3_init_irq_info(struct hinic3_hwdev *hwdev)
 	}

 	irq_info = &cfg_mgmt->irq_info;
-	irq_info->irq = kcalloc(intr_num, sizeof(struct hinic3_irq),
-				GFP_KERNEL);
+	irq_info->irq = kzalloc_objs(struct hinic3_irq, intr_num, GFP_KERNEL);
 	if (!irq_info->irq)
 		return -ENOMEM;

@@ -130,7 +129,7 @@ int hinic3_init_cfg_mgmt(struct hinic3_hwdev *hwdev)
 	struct hinic3_cfg_mgmt_info *cfg_mgmt;
 	int err;

-	cfg_mgmt = kzalloc(sizeof(*cfg_mgmt), GFP_KERNEL);
+	cfg_mgmt = kzalloc_obj(*cfg_mgmt, GFP_KERNEL);
 	if (!cfg_mgmt)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c b/drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c
index 7906d4057cf2..f0b402b792b9 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_hwdev.c
@@ -528,7 +528,7 @@ int hinic3_init_hwdev(struct pci_dev *pdev)
 	struct hinic3_hwdev *hwdev;
 	int err;

-	hwdev = kzalloc(sizeof(*hwdev), GFP_KERNEL);
+	hwdev = kzalloc_obj(*hwdev, GFP_KERNEL);
 	if (!hwdev)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_hwif.c b/drivers/net/ethernet/huawei/hinic3/hinic3_hwif.c
index 801f48e241f8..c1eeedbe0c15 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_hwif.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_hwif.c
@@ -432,7 +432,7 @@ int hinic3_init_hwif(struct hinic3_hwdev *hwdev)
 	u32 attr1, attr4, attr5;
 	int err;

-	hwif = kzalloc(sizeof(*hwif), GFP_KERNEL);
+	hwif = kzalloc_obj(*hwif, GFP_KERNEL);
 	if (!hwif)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_lld.c b/drivers/net/ethernet/huawei/hinic3/hinic3_lld.c
index 87413e192f10..b5d026c95d39 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_lld.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_lld.c
@@ -60,7 +60,7 @@ static struct hinic3_adev *hinic3_add_one_adev(struct hinic3_hwdev *hwdev,
 	const char *svc_name;
 	int ret;

-	hadev = kzalloc(sizeof(*hadev), GFP_KERNEL);
+	hadev = kzalloc_obj(*hadev, GFP_KERNEL);
 	if (!hadev)
 		return NULL;

@@ -250,7 +250,7 @@ static int hinic3_pci_init(struct pci_dev *pdev)
 	struct hinic3_pcidev *pci_adapter;
 	int err;

-	pci_adapter = kzalloc(sizeof(*pci_adapter), GFP_KERNEL);
+	pci_adapter = kzalloc_obj(*pci_adapter, GFP_KERNEL);
 	if (!pci_adapter)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_main.c b/drivers/net/ethernet/huawei/hinic3/hinic3_main.c
index 6275d94dfefd..3c9efe037793 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_main.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_main.c
@@ -57,9 +57,8 @@ static int hinic3_init_intr_coalesce(struct net_device *netdev)
 {
 	struct hinic3_nic_dev *nic_dev = netdev_priv(netdev);

-	nic_dev->intr_coalesce = kcalloc(nic_dev->max_qps,
-					 sizeof(*nic_dev->intr_coalesce),
-					 GFP_KERNEL);
+	nic_dev->intr_coalesce = kzalloc_objs(*nic_dev->intr_coalesce,
+					      nic_dev->max_qps, GFP_KERNEL);

 	if (!nic_dev->intr_coalesce)
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_mbox.c b/drivers/net/ethernet/huawei/hinic3/hinic3_mbox.c
index c871fd0fb109..8c7bb38cc57d 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_mbox.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_mbox.c
@@ -320,7 +320,7 @@ static int hinic3_init_func_mbox_msg_channel(struct hinic3_hwdev *hwdev)
 	int err;

 	mbox = hwdev->mbox;
-	mbox->func_msg = kzalloc(sizeof(*mbox->func_msg), GFP_KERNEL);
+	mbox->func_msg = kzalloc_obj(*mbox->func_msg, GFP_KERNEL);
 	if (!mbox->func_msg)
 		return -ENOMEM;

@@ -412,7 +412,7 @@ int hinic3_init_mbox(struct hinic3_hwdev *hwdev)
 	struct hinic3_mbox *mbox;
 	int err;

-	mbox = kzalloc(sizeof(*mbox), GFP_KERNEL);
+	mbox = kzalloc_obj(*mbox, GFP_KERNEL);
 	if (!mbox)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_mgmt.c b/drivers/net/ethernet/huawei/hinic3/hinic3_mgmt.c
index be2a2ae75fc0..29422ac14bb8 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_mgmt.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_mgmt.c
@@ -120,7 +120,7 @@ static void hinic3_init_mgmt_msg_work(struct hinic3_msg_pf_to_mgmt *pf_to_mgmt,
 {
 	struct mgmt_msg_handle_work *mgmt_work;

-	mgmt_work = kmalloc(sizeof(*mgmt_work), GFP_KERNEL);
+	mgmt_work = kmalloc_obj(*mgmt_work, GFP_KERNEL);
 	if (!mgmt_work)
 		return;

@@ -252,7 +252,7 @@ int hinic3_pf_to_mgmt_init(struct hinic3_hwdev *hwdev)
 	struct hinic3_msg_pf_to_mgmt *pf_to_mgmt;
 	int err;

-	pf_to_mgmt = kzalloc(sizeof(*pf_to_mgmt), GFP_KERNEL);
+	pf_to_mgmt = kzalloc_obj(*pf_to_mgmt, GFP_KERNEL);
 	if (!pf_to_mgmt)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_netdev_ops.c b/drivers/net/ethernet/huawei/hinic3/hinic3_netdev_ops.c
index 75adfe897e81..7830bff30859 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_netdev_ops.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_netdev_ops.c
@@ -99,9 +99,8 @@ static int hinic3_setup_num_qps(struct net_device *netdev)

 	nic_dev->num_qp_irq = 0;

-	nic_dev->qps_msix_entries = kcalloc(nic_dev->max_qps,
-					    sizeof(struct msix_entry),
-					    GFP_KERNEL);
+	nic_dev->qps_msix_entries = kzalloc_objs(struct msix_entry,
+						 nic_dev->max_qps, GFP_KERNEL);
 	if (!nic_dev->qps_msix_entries)
 		return -ENOMEM;

@@ -127,20 +126,20 @@ static int hinic3_alloc_txrxq_resources(struct net_device *netdev,
 {
 	int err;

-	q_params->txqs_res = kcalloc(q_params->num_qps,
-				     sizeof(*q_params->txqs_res), GFP_KERNEL);
+	q_params->txqs_res = kzalloc_objs(*q_params->txqs_res,
+					  q_params->num_qps, GFP_KERNEL);
 	if (!q_params->txqs_res)
 		return -ENOMEM;

-	q_params->rxqs_res = kcalloc(q_params->num_qps,
-				     sizeof(*q_params->rxqs_res), GFP_KERNEL);
+	q_params->rxqs_res = kzalloc_objs(*q_params->rxqs_res,
+					  q_params->num_qps, GFP_KERNEL);
 	if (!q_params->rxqs_res) {
 		err = -ENOMEM;
 		goto err_free_txqs_res_arr;
 	}

-	q_params->irq_cfg = kcalloc(q_params->num_qps,
-				    sizeof(*q_params->irq_cfg), GFP_KERNEL);
+	q_params->irq_cfg = kzalloc_objs(*q_params->irq_cfg, q_params->num_qps,
+					 GFP_KERNEL);
 	if (!q_params->irq_cfg) {
 		err = -ENOMEM;
 		goto err_free_rxqs_res_arr;
diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_nic_io.c b/drivers/net/ethernet/huawei/hinic3/hinic3_nic_io.c
index 90887d2bb127..0ded1000b369 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_nic_io.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_nic_io.c
@@ -212,7 +212,7 @@ int hinic3_init_nic_io(struct hinic3_nic_dev *nic_dev)
 	struct hinic3_nic_io *nic_io;
 	int err;

-	nic_io = kzalloc(sizeof(*nic_io), GFP_KERNEL);
+	nic_io = kzalloc_obj(*nic_io, GFP_KERNEL);
 	if (!nic_io)
 		return -ENOMEM;

@@ -408,13 +408,13 @@ int hinic3_alloc_qps(struct hinic3_nic_dev *nic_dev,
 	if (qp_params->num_qps > nic_io->max_qps || !qp_params->num_qps)
 		return -EINVAL;

-	sqs = kcalloc(qp_params->num_qps, sizeof(*sqs), GFP_KERNEL);
+	sqs = kzalloc_objs(*sqs, qp_params->num_qps, GFP_KERNEL);
 	if (!sqs) {
 		err = -ENOMEM;
 		goto err_out;
 	}

-	rqs = kcalloc(qp_params->num_qps, sizeof(*rqs), GFP_KERNEL);
+	rqs = kzalloc_objs(*rqs, qp_params->num_qps, GFP_KERNEL);
 	if (!rqs) {
 		err = -ENOMEM;
 		goto err_free_sqs;
diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_queue_common.c b/drivers/net/ethernet/huawei/hinic3/hinic3_queue_common.c
index fab9011de9ad..9c00d1ed825a 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_queue_common.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_queue_common.c
@@ -44,8 +44,8 @@ int hinic3_queue_pages_alloc(struct hinic3_hwdev *hwdev,
 	u32 pg_idx;
 	int err;

-	qpages->pages = kcalloc(qpages->num_pages, sizeof(qpages->pages[0]),
-				GFP_KERNEL);
+	qpages->pages = kzalloc_objs(qpages->pages[0], qpages->num_pages,
+				     GFP_KERNEL);
 	if (!qpages->pages)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_rx.c b/drivers/net/ethernet/huawei/hinic3/hinic3_rx.c
index 159c291fa293..f2d43beab444 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_rx.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_rx.c
@@ -66,7 +66,7 @@ int hinic3_alloc_rxqs(struct net_device *netdev)
 	struct hinic3_rxq *rxq;
 	u16 q_id;

-	nic_dev->rxqs = kcalloc(num_rxqs, sizeof(*nic_dev->rxqs), GFP_KERNEL);
+	nic_dev->rxqs = kzalloc_objs(*nic_dev->rxqs, num_rxqs, GFP_KERNEL);
 	if (!nic_dev->rxqs)
 		return -ENOMEM;

@@ -419,8 +419,8 @@ int hinic3_alloc_rxqs_res(struct net_device *netdev, u16 num_rq,

 	for (idx = 0; idx < num_rq; idx++) {
 		rqres = &rxqs_res[idx];
-		rqres->rx_info = kcalloc(rq_depth, sizeof(*rqres->rx_info),
-					 GFP_KERNEL);
+		rqres->rx_info = kzalloc_objs(*rqres->rx_info, rq_depth,
+					      GFP_KERNEL);
 		if (!rqres->rx_info)
 			goto err_free_rqres;

diff --git a/drivers/net/ethernet/huawei/hinic3/hinic3_tx.c b/drivers/net/ethernet/huawei/hinic3/hinic3_tx.c
index 6d3dc930ca97..8c988df8963e 100644
--- a/drivers/net/ethernet/huawei/hinic3/hinic3_tx.c
+++ b/drivers/net/ethernet/huawei/hinic3/hinic3_tx.c
@@ -48,7 +48,7 @@ int hinic3_alloc_txqs(struct net_device *netdev)
 	struct pci_dev *pdev = nic_dev->pdev;
 	struct hinic3_txq *txq;

-	nic_dev->txqs = kcalloc(num_txqs, sizeof(*nic_dev->txqs),  GFP_KERNEL);
+	nic_dev->txqs = kzalloc_objs(*nic_dev->txqs, num_txqs, GFP_KERNEL);
 	if (!nic_dev->txqs)
 		return -ENOMEM;

@@ -681,14 +681,14 @@ int hinic3_alloc_txqs_res(struct net_device *netdev, u16 num_sq,
 	for (idx = 0; idx < num_sq; idx++) {
 		tqres = &txqs_res[idx];

-		tqres->tx_info = kcalloc(sq_depth, sizeof(*tqres->tx_info),
-					 GFP_KERNEL);
+		tqres->tx_info = kzalloc_objs(*tqres->tx_info, sq_depth,
+					      GFP_KERNEL);
 		if (!tqres->tx_info)
 			goto err_free_tqres;

-		tqres->bds = kcalloc(sq_depth * HINIC3_BDS_PER_SQ_WQEBB +
-				     HINIC3_MAX_SQ_SGE, sizeof(*tqres->bds),
-				     GFP_KERNEL);
+		tqres->bds = kzalloc_objs(*tqres->bds,
+					  sq_depth * HINIC3_BDS_PER_SQ_WQEBB + HINIC3_MAX_SQ_SGE,
+					  GFP_KERNEL);
 		if (!tqres->bds) {
 			kfree(tqres->tx_info);
 			goto err_free_tqres;
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
index 9b006bc353a1..a2d7f5468590 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
@@ -173,7 +173,7 @@ static void ehea_update_firmware_handles(void)
 			 num_portres * EHEA_NUM_PORTRES_FW_HANDLES;

 	if (num_fw_handles) {
-		arr = kcalloc(num_fw_handles, sizeof(*arr), GFP_KERNEL);
+		arr = kzalloc_objs(*arr, num_fw_handles, GFP_KERNEL);
 		if (!arr)
 			goto out;  /* Keep the existing array */
 	} else
@@ -256,7 +256,7 @@ static void ehea_update_bcmc_registrations(void)
 		}

 	if (num_registrations) {
-		arr = kcalloc(num_registrations, sizeof(*arr), GFP_ATOMIC);
+		arr = kzalloc_objs(*arr, num_registrations, GFP_ATOMIC);
 		if (!arr)
 			goto out;  /* Keep the existing array */
 	} else
@@ -1487,7 +1487,7 @@ static int ehea_init_port_res(struct ehea_port *port, struct ehea_port_res *pr,
 			pr->send_cq->attr.act_nr_of_cqes,
 			pr->recv_cq->attr.act_nr_of_cqes);

-	init_attr = kzalloc(sizeof(*init_attr), GFP_KERNEL);
+	init_attr = kzalloc_obj(*init_attr, GFP_KERNEL);
 	if (!init_attr) {
 		ret = -ENOMEM;
 		pr_err("no mem for ehea_qp_init_attr\n");
@@ -1899,7 +1899,7 @@ static void ehea_add_multicast_entry(struct ehea_port *port, u8 *mc_mac_addr)
 	struct ehea_mc_list *ehea_mcl_entry;
 	u64 hret;

-	ehea_mcl_entry = kzalloc(sizeof(*ehea_mcl_entry), GFP_ATOMIC);
+	ehea_mcl_entry = kzalloc_obj(*ehea_mcl_entry, GFP_ATOMIC);
 	if (!ehea_mcl_entry)
 		return;

@@ -2968,7 +2968,7 @@ static struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter,

 	port->msg_enable = netif_msg_init(msg_level, EHEA_MSG_DEFAULT);

-	port->mc_list = kzalloc(sizeof(struct ehea_mc_list), GFP_KERNEL);
+	port->mc_list = kzalloc_obj(struct ehea_mc_list, GFP_KERNEL);
 	if (!port->mc_list) {
 		ret = -ENOMEM;
 		goto out_free_ethdev;
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_qmr.c b/drivers/net/ethernet/ibm/ehea/ehea_qmr.c
index db45373ea31c..e9d51e65efe8 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_qmr.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_qmr.c
@@ -114,7 +114,7 @@ struct ehea_cq *ehea_create_cq(struct ehea_adapter *adapter,
 	int ret;
 	void *vpage;

-	cq = kzalloc(sizeof(*cq), GFP_KERNEL);
+	cq = kzalloc_obj(*cq, GFP_KERNEL);
 	if (!cq)
 		goto out_nomem;

@@ -235,7 +235,7 @@ struct ehea_eq *ehea_create_eq(struct ehea_adapter *adapter,
 	void *vpage;
 	struct ehea_eq *eq;

-	eq = kzalloc(sizeof(*eq), GFP_KERNEL);
+	eq = kzalloc_obj(*eq, GFP_KERNEL);
 	if (!eq)
 		return NULL;

@@ -404,7 +404,7 @@ struct ehea_qp *ehea_create_qp(struct ehea_adapter *adapter,
 	u32 wqe_size_in_bytes_rq2, wqe_size_in_bytes_rq3;


-	qp = kzalloc(sizeof(*qp), GFP_KERNEL);
+	qp = kzalloc_obj(*qp, GFP_KERNEL);
 	if (!qp)
 		return NULL;

@@ -542,7 +542,7 @@ static inline int ehea_init_top_bmap(struct ehea_top_bmap *ehea_top_bmap,
 {
 	if (!ehea_top_bmap->dir[dir]) {
 		ehea_top_bmap->dir[dir] =
-			kzalloc(sizeof(struct ehea_dir_bmap), GFP_KERNEL);
+			kzalloc_obj(struct ehea_dir_bmap, GFP_KERNEL);
 		if (!ehea_top_bmap->dir[dir])
 			return -ENOMEM;
 	}
@@ -553,7 +553,7 @@ static inline int ehea_init_bmap(struct ehea_bmap *ehea_bmap, int top, int dir)
 {
 	if (!ehea_bmap->top[top]) {
 		ehea_bmap->top[top] =
-			kzalloc(sizeof(struct ehea_top_bmap), GFP_KERNEL);
+			kzalloc_obj(struct ehea_top_bmap, GFP_KERNEL);
 		if (!ehea_bmap->top[top])
 			return -ENOMEM;
 	}
@@ -613,7 +613,7 @@ static int ehea_update_busmap(unsigned long pfn, unsigned long nr_pages, int add
 		return 0;

 	if (!ehea_bmap) {
-		ehea_bmap = kzalloc(sizeof(struct ehea_bmap), GFP_KERNEL);
+		ehea_bmap = kzalloc_obj(struct ehea_bmap, GFP_KERNEL);
 		if (!ehea_bmap)
 			return -ENOMEM;
 	}
diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
index 6f0821f1e798..3108bf50576f 100644
--- a/drivers/net/ethernet/ibm/ibmveth.c
+++ b/drivers/net/ethernet/ibm/ibmveth.c
@@ -169,7 +169,7 @@ static int ibmveth_alloc_buffer_pool(struct ibmveth_buff_pool *pool)
 	if (!pool->free_map)
 		return -1;

-	pool->dma_addr = kcalloc(pool->size, sizeof(dma_addr_t), GFP_KERNEL);
+	pool->dma_addr = kzalloc_objs(dma_addr_t, pool->size, GFP_KERNEL);
 	if (!pool->dma_addr) {
 		kfree(pool->free_map);
 		pool->free_map = NULL;
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 3808148c1fc7..1241be315d58 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -932,16 +932,14 @@ static void release_stats_buffers(struct ibmvnic_adapter *adapter)
 static int init_stats_buffers(struct ibmvnic_adapter *adapter)
 {
 	adapter->tx_stats_buffers =
-				kcalloc(IBMVNIC_MAX_QUEUES,
-					sizeof(struct ibmvnic_tx_queue_stats),
-					GFP_KERNEL);
+				kzalloc_objs(struct ibmvnic_tx_queue_stats,
+					     IBMVNIC_MAX_QUEUES, GFP_KERNEL);
 	if (!adapter->tx_stats_buffers)
 		return -ENOMEM;

 	adapter->rx_stats_buffers =
-				kcalloc(IBMVNIC_MAX_QUEUES,
-					sizeof(struct ibmvnic_rx_queue_stats),
-					GFP_KERNEL);
+				kzalloc_objs(struct ibmvnic_rx_queue_stats,
+					     IBMVNIC_MAX_QUEUES, GFP_KERNEL);
 	if (!adapter->rx_stats_buffers)
 		return -ENOMEM;

@@ -1096,9 +1094,8 @@ static int init_rx_pools(struct net_device *netdev)
 	/* Allocate/populate the pools. */
 	release_rx_pools(adapter);

-	adapter->rx_pool = kcalloc(num_pools,
-				   sizeof(struct ibmvnic_rx_pool),
-				   GFP_KERNEL);
+	adapter->rx_pool = kzalloc_objs(struct ibmvnic_rx_pool, num_pools,
+					GFP_KERNEL);
 	if (!adapter->rx_pool) {
 		dev_err(dev, "Failed to allocate rx pools\n");
 		return -ENOMEM;
@@ -1120,17 +1117,15 @@ static int init_rx_pools(struct net_device *netdev)
 		rx_pool->index = i;
 		rx_pool->buff_size = ALIGN(buff_size, L1_CACHE_BYTES);

-		rx_pool->free_map = kcalloc(rx_pool->size, sizeof(int),
-					    GFP_KERNEL);
+		rx_pool->free_map = kzalloc_objs(int, rx_pool->size, GFP_KERNEL);
 		if (!rx_pool->free_map) {
 			dev_err(dev, "Couldn't alloc free_map %d\n", i);
 			rc = -ENOMEM;
 			goto out_release;
 		}

-		rx_pool->rx_buff = kcalloc(rx_pool->size,
-					   sizeof(struct ibmvnic_rx_buff),
-					   GFP_KERNEL);
+		rx_pool->rx_buff = kzalloc_objs(struct ibmvnic_rx_buff,
+						rx_pool->size, GFP_KERNEL);
 		if (!rx_pool->rx_buff) {
 			dev_err(dev, "Couldn't alloc rx buffers\n");
 			rc = -ENOMEM;
@@ -1243,13 +1238,12 @@ static int init_one_tx_pool(struct net_device *netdev,
 {
 	int i;

-	tx_pool->tx_buff = kcalloc(pool_size,
-				   sizeof(struct ibmvnic_tx_buff),
-				   GFP_KERNEL);
+	tx_pool->tx_buff = kzalloc_objs(struct ibmvnic_tx_buff, pool_size,
+					GFP_KERNEL);
 	if (!tx_pool->tx_buff)
 		return -ENOMEM;

-	tx_pool->free_map = kcalloc(pool_size, sizeof(int), GFP_KERNEL);
+	tx_pool->free_map = kzalloc_objs(int, pool_size, GFP_KERNEL);
 	if (!tx_pool->free_map) {
 		kfree(tx_pool->tx_buff);
 		tx_pool->tx_buff = NULL;
@@ -1341,13 +1335,13 @@ static int init_tx_pools(struct net_device *netdev)
 	pool_size = adapter->req_tx_entries_per_subcrq;
 	num_pools = adapter->num_active_tx_scrqs;

-	adapter->tx_pool = kcalloc(num_pools,
-				   sizeof(struct ibmvnic_tx_pool), GFP_KERNEL);
+	adapter->tx_pool = kzalloc_objs(struct ibmvnic_tx_pool, num_pools,
+					GFP_KERNEL);
 	if (!adapter->tx_pool)
 		return -ENOMEM;

-	adapter->tso_pool = kcalloc(num_pools,
-				    sizeof(struct ibmvnic_tx_pool), GFP_KERNEL);
+	adapter->tso_pool = kzalloc_objs(struct ibmvnic_tx_pool, num_pools,
+					 GFP_KERNEL);
 	/* To simplify release_tx_pools() ensure that ->tx_pool and
 	 * ->tso_pool are either both NULL or both non-NULL.
 	 */
@@ -1471,8 +1465,8 @@ static int init_napi(struct ibmvnic_adapter *adapter)
 {
 	int i;

-	adapter->napi = kcalloc(adapter->req_rx_queues,
-				sizeof(struct napi_struct), GFP_KERNEL);
+	adapter->napi = kzalloc_objs(struct napi_struct, adapter->req_rx_queues,
+				     GFP_KERNEL);
 	if (!adapter->napi)
 		return -ENOMEM;

@@ -1859,7 +1853,7 @@ static int init_resources(struct ibmvnic_adapter *adapter)
 	if (rc)
 		return rc;

-	adapter->vpd = kzalloc(sizeof(*adapter->vpd), GFP_KERNEL);
+	adapter->vpd = kzalloc_obj(*adapter->vpd, GFP_KERNEL);
 	if (!adapter->vpd)
 		return -ENOMEM;

@@ -3450,7 +3444,7 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
 		}
 	}

-	rwi = kzalloc(sizeof(*rwi), GFP_ATOMIC);
+	rwi = kzalloc_obj(*rwi, GFP_ATOMIC);
 	if (!rwi) {
 		ret = ENOMEM;
 		goto err;
@@ -4055,7 +4049,7 @@ static struct ibmvnic_sub_crq_queue *init_sub_crq_queue(struct ibmvnic_adapter
 	struct ibmvnic_sub_crq_queue *scrq;
 	int rc;

-	scrq = kzalloc(sizeof(*scrq), GFP_KERNEL);
+	scrq = kzalloc_obj(*scrq, GFP_KERNEL);
 	if (!scrq)
 		return NULL;

@@ -4447,7 +4441,7 @@ static int init_sub_crqs(struct ibmvnic_adapter *adapter)

 	total_queues = adapter->req_tx_queues + adapter->req_rx_queues;

-	allqueues = kcalloc(total_queues, sizeof(*allqueues), GFP_KERNEL);
+	allqueues = kzalloc_objs(*allqueues, total_queues, GFP_KERNEL);
 	if (!allqueues)
 		return -ENOMEM;

@@ -4486,8 +4480,8 @@ static int init_sub_crqs(struct ibmvnic_adapter *adapter)
 		}
 	}

-	adapter->tx_scrq = kcalloc(adapter->req_tx_queues,
-				   sizeof(*adapter->tx_scrq), GFP_KERNEL);
+	adapter->tx_scrq = kzalloc_objs(*adapter->tx_scrq,
+					adapter->req_tx_queues, GFP_KERNEL);
 	if (!adapter->tx_scrq)
 		goto tx_failed;

@@ -4497,8 +4491,8 @@ static int init_sub_crqs(struct ibmvnic_adapter *adapter)
 		adapter->num_active_tx_scrqs++;
 	}

-	adapter->rx_scrq = kcalloc(adapter->req_rx_queues,
-				   sizeof(*adapter->rx_scrq), GFP_KERNEL);
+	adapter->rx_scrq = kzalloc_objs(*adapter->rx_scrq,
+					adapter->req_rx_queues, GFP_KERNEL);
 	if (!adapter->rx_scrq)
 		goto rx_failed;

diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
index 5c56c1edd492..321a15a220a6 100644
--- a/drivers/net/ethernet/intel/e100.c
+++ b/drivers/net/ethernet/intel/e100.c
@@ -2156,7 +2156,7 @@ static int e100_rx_alloc_list(struct nic *nic)
 	nic->rx_to_use = nic->rx_to_clean = NULL;
 	nic->ru_running = RU_UNINITIALIZED;

-	if (!(nic->rxs = kcalloc(count, sizeof(struct rx), GFP_KERNEL)))
+	if (!(nic->rxs = kzalloc_objs(struct rx, count, GFP_KERNEL)))
 		return -ENOMEM;

 	for (rx = nic->rxs, i = 0; i < count; rx++, i++) {
diff --git a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
index 726365c567ef..132644a387ef 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
@@ -582,13 +582,13 @@ static int e1000_set_ringparam(struct net_device *netdev,
 	rx_old = adapter->rx_ring;

 	err = -ENOMEM;
-	txdr = kcalloc(adapter->num_tx_queues, sizeof(struct e1000_tx_ring),
-		       GFP_KERNEL);
+	txdr = kzalloc_objs(struct e1000_tx_ring, adapter->num_tx_queues,
+			    GFP_KERNEL);
 	if (!txdr)
 		goto err_alloc_tx;

-	rxdr = kcalloc(adapter->num_rx_queues, sizeof(struct e1000_rx_ring),
-		       GFP_KERNEL);
+	rxdr = kzalloc_objs(struct e1000_rx_ring, adapter->num_rx_queues,
+			    GFP_KERNEL);
 	if (!rxdr)
 		goto err_alloc_rx;

@@ -984,8 +984,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 	if (!txdr->count)
 		txdr->count = E1000_DEFAULT_TXD;

-	txdr->buffer_info = kcalloc(txdr->count, sizeof(struct e1000_tx_buffer),
-				    GFP_KERNEL);
+	txdr->buffer_info = kzalloc_objs(struct e1000_tx_buffer, txdr->count,
+					 GFP_KERNEL);
 	if (!txdr->buffer_info) {
 		ret_val = 1;
 		goto err_nomem;
@@ -1043,8 +1043,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 	if (!rxdr->count)
 		rxdr->count = E1000_DEFAULT_RXD;

-	rxdr->buffer_info = kcalloc(rxdr->count, sizeof(struct e1000_rx_buffer),
-				    GFP_KERNEL);
+	rxdr->buffer_info = kzalloc_objs(struct e1000_rx_buffer, rxdr->count,
+					 GFP_KERNEL);
 	if (!rxdr->buffer_info) {
 		ret_val = 5;
 		goto err_nomem;
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index 7f078ec9c14c..b0ecd3413ffb 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -1322,13 +1322,13 @@ static int e1000_sw_init(struct e1000_adapter *adapter)
  **/
 static int e1000_alloc_queues(struct e1000_adapter *adapter)
 {
-	adapter->tx_ring = kcalloc(adapter->num_tx_queues,
-				   sizeof(struct e1000_tx_ring), GFP_KERNEL);
+	adapter->tx_ring = kzalloc_objs(struct e1000_tx_ring,
+					adapter->num_tx_queues, GFP_KERNEL);
 	if (!adapter->tx_ring)
 		return -ENOMEM;

-	adapter->rx_ring = kcalloc(adapter->num_rx_queues,
-				   sizeof(struct e1000_rx_ring), GFP_KERNEL);
+	adapter->rx_ring = kzalloc_objs(struct e1000_rx_ring,
+					adapter->num_rx_queues, GFP_KERNEL);
 	if (!adapter->rx_ring) {
 		kfree(adapter->tx_ring);
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
index 7b1ac90b3de4..21094a03189a 100644
--- a/drivers/net/ethernet/intel/e1000e/ethtool.c
+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
@@ -1173,8 +1173,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 	if (!tx_ring->count)
 		tx_ring->count = E1000_DEFAULT_TXD;

-	tx_ring->buffer_info = kcalloc(tx_ring->count,
-				       sizeof(struct e1000_buffer), GFP_KERNEL);
+	tx_ring->buffer_info = kzalloc_objs(struct e1000_buffer, tx_ring->count,
+					    GFP_KERNEL);
 	if (!tx_ring->buffer_info) {
 		ret_val = 1;
 		goto err_nomem;
@@ -1234,8 +1234,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 	if (!rx_ring->count)
 		rx_ring->count = E1000_DEFAULT_RXD;

-	rx_ring->buffer_info = kcalloc(rx_ring->count,
-				       sizeof(struct e1000_buffer), GFP_KERNEL);
+	rx_ring->buffer_info = kzalloc_objs(struct e1000_buffer, rx_ring->count,
+					    GFP_KERNEL);
 	if (!rx_ring->buffer_info) {
 		ret_val = 5;
 		goto err_nomem;
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index ddbe2f7d8112..edd503b79f98 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -2050,10 +2050,9 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
 	case E1000E_INT_MODE_MSIX:
 		if (adapter->flags & FLAG_HAS_MSIX) {
 			adapter->num_vectors = 3; /* RxQ0, TxQ0 and other */
-			adapter->msix_entries = kcalloc(adapter->num_vectors,
-							sizeof(struct
-							       msix_entry),
-							GFP_KERNEL);
+			adapter->msix_entries = kzalloc_objs(struct msix_entry,
+							     adapter->num_vectors,
+							     GFP_KERNEL);
 			if (adapter->msix_entries) {
 				struct e1000_adapter *a = adapter;

@@ -2370,9 +2369,9 @@ int e1000e_setup_rx_resources(struct e1000_ring *rx_ring)

 	for (i = 0; i < rx_ring->count; i++) {
 		buffer_info = &rx_ring->buffer_info[i];
-		buffer_info->ps_pages = kcalloc(PS_PAGE_BUFFERS,
-						sizeof(struct e1000_ps_page),
-						GFP_KERNEL);
+		buffer_info->ps_pages = kzalloc_objs(struct e1000_ps_page,
+						     PS_PAGE_BUFFERS,
+						     GFP_KERNEL);
 		if (!buffer_info->ps_pages)
 			goto err_pages;
 	}
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_main.c b/drivers/net/ethernet/intel/fm10k/fm10k_main.c
index b8c15b837fda..9f2620a14484 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_main.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_main.c
@@ -1597,7 +1597,7 @@ static int fm10k_alloc_q_vector(struct fm10k_intfc *interface,
 	ring_count = txr_count + rxr_count;

 	/* allocate q_vector and rings */
-	q_vector = kzalloc(struct_size(q_vector, ring, ring_count), GFP_KERNEL);
+	q_vector = kzalloc_flex(*q_vector, ring, ring_count, GFP_KERNEL);
 	if (!q_vector)
 		return -ENOMEM;

@@ -1825,8 +1825,8 @@ static int fm10k_init_msix_capability(struct fm10k_intfc *interface)
 	v_budget = min_t(int, v_budget, hw->mac.max_msix_vectors);

 	/* A failure in MSI-X entry allocation is fatal. */
-	interface->msix_entries = kcalloc(v_budget, sizeof(struct msix_entry),
-					  GFP_KERNEL);
+	interface->msix_entries = kzalloc_objs(struct msix_entry, v_budget,
+					       GFP_KERNEL);
 	if (!interface->msix_entries)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
index 34ab5ff9823b..c86701be4364 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
@@ -649,7 +649,7 @@ int fm10k_queue_vlan_request(struct fm10k_intfc *interface,
 	/* This must be atomic since we may be called while the netdev
 	 * addr_list_lock is held
 	 */
-	request = kzalloc(sizeof(*request), GFP_ATOMIC);
+	request = kzalloc_obj(*request, GFP_ATOMIC);
 	if (!request)
 		return -ENOMEM;

@@ -688,7 +688,7 @@ int fm10k_queue_mac_request(struct fm10k_intfc *interface, u16 glort,
 	/* This must be atomic since we may be called while the netdev
 	 * addr_list_lock is held
 	 */
-	request = kzalloc(sizeof(*request), GFP_ATOMIC);
+	request = kzalloc_obj(*request, GFP_ATOMIC);
 	if (!request)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/i40e/i40e_client.c b/drivers/net/ethernet/intel/i40e/i40e_client.c
index 518bc738ea3b..dacebf773adf 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_client.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_client.c
@@ -291,7 +291,7 @@ static int i40e_register_auxiliary_dev(struct i40e_info *ldev, const char *name)
 	struct auxiliary_device *aux_dev;
 	int ret;

-	i40e_aux_dev = kzalloc(sizeof(*i40e_aux_dev), GFP_KERNEL);
+	i40e_aux_dev = kzalloc_obj(*i40e_aux_dev, GFP_KERNEL);
 	if (!i40e_aux_dev)
 		return -ENOMEM;

@@ -337,7 +337,7 @@ static void i40e_client_add_instance(struct i40e_pf *pf)
 	struct i40e_client_instance *cdev = NULL;
 	struct netdev_hw_addr *mac = NULL;

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		return;

@@ -466,7 +466,7 @@ int i40e_lan_add_device(struct i40e_pf *pf)
 			goto out;
 		}
 	}
-	ldev = kzalloc(sizeof(*ldev), GFP_KERNEL);
+	ldev = kzalloc_obj(*ldev, GFP_KERNEL);
 	if (!ldev) {
 		ret = -ENOMEM;
 		goto out;
@@ -566,8 +566,8 @@ static int i40e_client_setup_qvlist(struct i40e_info *ldev,
 	struct i40e_qv_info *qv_info;
 	u32 v_idx, i, reg_idx, reg;

-	ldev->qvlist_info = kzalloc(struct_size(ldev->qvlist_info, qv_info,
-				    qvlist_info->num_vectors), GFP_KERNEL);
+	ldev->qvlist_info = kzalloc_flex(*ldev->qvlist_info, qv_info,
+					 qvlist_info->num_vectors, GFP_KERNEL);
 	if (!ldev->qvlist_info)
 		return -ENOMEM;
 	ldev->qvlist_info->num_vectors = qvlist_info->num_vectors;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c
index c17b5d290f0a..8056fa9d9cf2 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c
@@ -983,9 +983,8 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
 			int i, ret;
 			u16 switch_id;

-			bw_data = kzalloc(sizeof(
-				    struct i40e_aqc_query_port_ets_config_resp),
-					  GFP_KERNEL);
+			bw_data = kzalloc_obj(struct i40e_aqc_query_port_ets_config_resp,
+					      GFP_KERNEL);
 			if (!bw_data) {
 				ret = -ENOMEM;
 				goto command_write_done;
@@ -1229,7 +1228,7 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
 		struct libie_aq_desc *desc;
 		int ret;

-		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+		desc = kzalloc_obj(*desc, GFP_KERNEL);
 		if (!desc)
 			goto command_write_done;
 		cnt = sscanf(&cmd_buf[11],
@@ -1277,7 +1276,7 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
 		u8 *buff;
 		int ret;

-		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+		desc = kzalloc_obj(*desc, GFP_KERNEL);
 		if (!desc)
 			goto command_write_done;
 		cnt = sscanf(&cmd_buf[20],
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index 6a47ea0927e9..3ddc29db8dc5 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -2120,8 +2120,8 @@ static int i40e_set_ringparam(struct net_device *netdev,
 		netdev_info(netdev,
 			    "Changing Tx descriptor count from %d to %d.\n",
 			    vsi->tx_rings[0]->count, new_tx_count);
-		tx_rings = kcalloc(tx_alloc_queue_pairs,
-				   sizeof(struct i40e_ring), GFP_KERNEL);
+		tx_rings = kzalloc_objs(struct i40e_ring, tx_alloc_queue_pairs,
+					GFP_KERNEL);
 		if (!tx_rings) {
 			err = -ENOMEM;
 			goto done;
@@ -2159,8 +2159,8 @@ static int i40e_set_ringparam(struct net_device *netdev,
 		netdev_info(netdev,
 			    "Changing Rx descriptor count from %d to %d\n",
 			    vsi->rx_rings[0]->count, new_rx_count);
-		rx_rings = kcalloc(vsi->alloc_queue_pairs,
-				   sizeof(struct i40e_ring), GFP_KERNEL);
+		rx_rings = kzalloc_objs(struct i40e_ring,
+					vsi->alloc_queue_pairs, GFP_KERNEL);
 		if (!rx_rings) {
 			err = -ENOMEM;
 			goto free_tx;
@@ -3976,7 +3976,7 @@ static int i40e_add_flex_offset(struct list_head *flex_pit_list,
 {
 	struct i40e_flex_pit *new_pit, *entry;

-	new_pit = kzalloc(sizeof(*entry), GFP_KERNEL);
+	new_pit = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!new_pit)
 		return -ENOMEM;

@@ -4867,7 +4867,7 @@ static int i40e_add_fdir_ethtool(struct i40e_vsi *vsi,
 		q_index = ring;
 	}

-	input = kzalloc(sizeof(*input), GFP_KERNEL);
+	input = kzalloc_obj(*input, GFP_KERNEL);

 	if (!input)
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 02de186dcc8f..05dc5ddc918c 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -1462,7 +1462,7 @@ static int i40e_correct_mac_vlan_filters(struct i40e_vsi *vsi,
 				return -ENOMEM;

 			/* Create a temporary i40e_new_mac_filter */
-			new = kzalloc(sizeof(*new), GFP_ATOMIC);
+			new = kzalloc_obj(*new, GFP_ATOMIC);
 			if (!new)
 				return -ENOMEM;

@@ -1574,7 +1574,7 @@ static int i40e_correct_vf_mac_vlan_filters(struct i40e_vsi *vsi,
 			if (!add_head)
 				return -ENOMEM;
 			/* Create a temporary i40e_new_mac_filter */
-			new_mac = kzalloc(sizeof(*new_mac), GFP_ATOMIC);
+			new_mac = kzalloc_obj(*new_mac, GFP_ATOMIC);
 			if (!new_mac)
 				return -ENOMEM;
 			new_mac->f = add_head;
@@ -1651,7 +1651,7 @@ struct i40e_mac_filter *i40e_add_filter(struct i40e_vsi *vsi,

 	f = i40e_find_filter(vsi, macaddr, vlan);
 	if (!f) {
-		f = kzalloc(sizeof(*f), GFP_ATOMIC);
+		f = kzalloc_obj(*f, GFP_ATOMIC);
 		if (!f)
 			return NULL;

@@ -2606,7 +2606,7 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi)
 			}
 			if (f->state == I40E_FILTER_NEW) {
 				/* Create a temporary i40e_new_mac_filter */
-				new = kzalloc(sizeof(*new), GFP_ATOMIC);
+				new = kzalloc_obj(*new, GFP_ATOMIC);
 				if (!new)
 					goto err_no_memory_locked;

@@ -6686,7 +6686,7 @@ static int i40e_configure_queue_channels(struct i40e_vsi *vsi)
 	vsi->tc_seid_map[0] = vsi->seid;
 	for (i = 1; i < I40E_MAX_TRAFFIC_CLASS; i++) {
 		if (vsi->tc_config.enabled_tc & BIT(i)) {
-			ch = kzalloc(sizeof(*ch), GFP_KERNEL);
+			ch = kzalloc_obj(*ch, GFP_KERNEL);
 			if (!ch) {
 				ret = -ENOMEM;
 				goto err_free;
@@ -7962,7 +7962,7 @@ static int i40e_setup_macvlans(struct i40e_vsi *vsi, u16 macvlan_cnt, u16 qcnt,
 	/* Create channels for macvlans */
 	INIT_LIST_HEAD(&vsi->macvlan_list);
 	for (i = 0; i < macvlan_cnt; i++) {
-		ch = kzalloc(sizeof(*ch), GFP_KERNEL);
+		ch = kzalloc_obj(*ch, GFP_KERNEL);
 		if (!ch) {
 			ret = -ENOMEM;
 			goto err_free;
@@ -8074,7 +8074,7 @@ static void *i40e_fwd_add(struct net_device *netdev, struct net_device *vdev)
 		return ERR_PTR(-EBUSY);

 	/* create the fwd struct */
-	fwd = kzalloc(sizeof(*fwd), GFP_KERNEL);
+	fwd = kzalloc_obj(*fwd, GFP_KERNEL);
 	if (!fwd)
 		return ERR_PTR(-ENOMEM);

@@ -8835,7 +8835,7 @@ static int i40e_configure_clsflower(struct i40e_vsi *vsi,
 		clear_bit(I40E_FLAG_FD_SB_TO_CLOUD_FILTER, vsi->back->flags);
 	}

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (!filter)
 		return -ENOMEM;

@@ -11540,7 +11540,7 @@ static int i40e_vsi_mem_alloc(struct i40e_pf *pf, enum i40e_vsi_type type)
 	}
 	pf->next_vsi = ++i;

-	vsi = kzalloc(sizeof(*vsi), GFP_KERNEL);
+	vsi = kzalloc_obj(*vsi, GFP_KERNEL);
 	if (!vsi) {
 		ret = -ENOMEM;
 		goto unlock_pf;
@@ -11711,7 +11711,7 @@ static int i40e_alloc_rings(struct i40e_vsi *vsi)
 	/* Set basic values in the rings to be used later during open() */
 	for (i = 0; i < vsi->alloc_queue_pairs; i++) {
 		/* allocate space for both Tx and Rx in one shot */
-		ring = kcalloc(qpv, sizeof(struct i40e_ring), GFP_KERNEL);
+		ring = kzalloc_objs(struct i40e_ring, qpv, GFP_KERNEL);
 		if (!ring)
 			goto err_out;

@@ -11914,8 +11914,7 @@ static int i40e_init_msix(struct i40e_pf *pf)
 	     "Calculation of remaining vectors underflowed. This is an accounting bug when determining total MSI-X vectors.\n");

 	v_budget += pf->num_lan_msix;
-	pf->msix_entries = kcalloc(v_budget, sizeof(struct msix_entry),
-				   GFP_KERNEL);
+	pf->msix_entries = kzalloc_objs(struct msix_entry, v_budget, GFP_KERNEL);
 	if (!pf->msix_entries)
 		return -ENOMEM;

@@ -12028,7 +12027,7 @@ static int i40e_vsi_alloc_q_vector(struct i40e_vsi *vsi, int v_idx)
 	struct i40e_q_vector *q_vector;

 	/* allocate q_vector */
-	q_vector = kzalloc(sizeof(struct i40e_q_vector), GFP_KERNEL);
+	q_vector = kzalloc_obj(struct i40e_q_vector, GFP_KERNEL);
 	if (!q_vector)
 		return -ENOMEM;

@@ -14581,7 +14580,7 @@ static int i40e_veb_mem_alloc(struct i40e_pf *pf)
 		goto err_alloc_veb;  /* out of VEB slots! */
 	}

-	veb = kzalloc(sizeof(*veb), GFP_KERNEL);
+	veb = kzalloc_obj(*veb, GFP_KERNEL);
 	if (!veb) {
 		ret = -ENOMEM;
 		goto err_alloc_veb;
@@ -15441,8 +15440,7 @@ static int i40e_init_recovery_mode(struct i40e_pf *pf, struct i40e_hw *hw)
 		pf->num_alloc_vsi = pf->hw.func_caps.num_vsis;

 	/* Set up the vsi struct and our local tracking of the MAIN PF vsi. */
-	pf->vsi = kcalloc(pf->num_alloc_vsi, sizeof(struct i40e_vsi *),
-			  GFP_KERNEL);
+	pf->vsi = kzalloc_objs(struct i40e_vsi *, pf->num_alloc_vsi, GFP_KERNEL);
 	if (!pf->vsi) {
 		err = -ENOMEM;
 		goto err_switch_setup;
@@ -15865,8 +15863,7 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	}

 	/* Set up the *vsi struct and our local tracking of the MAIN PF vsi. */
-	pf->vsi = kcalloc(pf->num_alloc_vsi, sizeof(struct i40e_vsi *),
-			  GFP_KERNEL);
+	pf->vsi = kzalloc_objs(struct i40e_vsi *, pf->num_alloc_vsi, GFP_KERNEL);
 	if (!pf->vsi) {
 		err = -ENOMEM;
 		goto err_switch_setup;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ptp.c b/drivers/net/ethernet/intel/i40e/i40e_ptp.c
index 33535418178b..416b42743439 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ptp.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ptp.c
@@ -1132,7 +1132,7 @@ int i40e_ptp_alloc_pins(struct i40e_pf *pf)
 		return 0;

 	pf->ptp_pins =
-		kzalloc(sizeof(struct i40e_ptp_pins_settings), GFP_KERNEL);
+		kzalloc_obj(struct i40e_ptp_pins_settings, GFP_KERNEL);

 	if (!pf->ptp_pins) {
 		dev_warn(&pf->pdev->dev, "Cannot allocate memory for PTP pins structure.\n");
@@ -1344,9 +1344,8 @@ static int i40e_init_pin_config(struct i40e_pf *pf)
 	pf->ptp_caps.pps = 1;
 	pf->ptp_caps.n_per_out = 2;

-	pf->ptp_caps.pin_config = kcalloc(pf->ptp_caps.n_pins,
-					  sizeof(*pf->ptp_caps.pin_config),
-					  GFP_KERNEL);
+	pf->ptp_caps.pin_config = kzalloc_objs(*pf->ptp_caps.pin_config,
+					       pf->ptp_caps.n_pins, GFP_KERNEL);
 	if (!pf->ptp_caps.pin_config)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
index cc0b9efc2637..f89927bfa9d1 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
@@ -1572,7 +1572,7 @@ int i40e_setup_rx_descriptors(struct i40e_ring *rx_ring)
 	rx_ring->xdp_prog = rx_ring->vsi->xdp_prog;

 	rx_ring->rx_bi =
-		kcalloc(rx_ring->count, sizeof(*rx_ring->rx_bi), GFP_KERNEL);
+		kzalloc_objs(*rx_ring->rx_bi, rx_ring->count, GFP_KERNEL);
 	if (!rx_ring->rx_bi)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index 1fa877b52f61..fb4560cc42f4 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -1261,7 +1261,7 @@ static void i40e_get_vlan_list_sync(struct i40e_vsi *vsi, u16 *num_vlans,

 	spin_lock_bh(&vsi->mac_filter_hash_lock);
 	*num_vlans = __i40e_getnum_vf_vsi_vlan_filters(vsi);
-	*vlan_list = kcalloc(*num_vlans, sizeof(**vlan_list), GFP_ATOMIC);
+	*vlan_list = kzalloc_objs(**vlan_list, *num_vlans, GFP_ATOMIC);
 	if (!(*vlan_list))
 		goto err;

@@ -1844,7 +1844,7 @@ int i40e_alloc_vfs(struct i40e_pf *pf, u16 num_alloc_vfs)
 		}
 	}
 	/* allocate memory */
-	vfs = kcalloc(num_alloc_vfs, sizeof(struct i40e_vf), GFP_KERNEL);
+	vfs = kzalloc_objs(struct i40e_vf, num_alloc_vfs, GFP_KERNEL);
 	if (!vfs) {
 		ret = -ENOMEM;
 		goto err_alloc;
@@ -3956,7 +3956,7 @@ static int i40e_vc_add_cloud_filter(struct i40e_vf *vf, u8 *msg)
 		goto err_out;
 	}

-	cfilter = kzalloc(sizeof(*cfilter), GFP_KERNEL);
+	cfilter = kzalloc_obj(*cfilter, GFP_KERNEL);
 	if (!cfilter) {
 		aq_ret = -ENOMEM;
 		goto err_out;
diff --git a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
index 2cc21289a707..e0163e2e022b 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
@@ -1276,7 +1276,7 @@ static int iavf_add_fdir_ethtool(struct iavf_adapter *adapter, struct ethtool_rx
 	}
 	spin_unlock_bh(&adapter->fdir_fltr_lock);

-	fltr = kzalloc(sizeof(*fltr), GFP_KERNEL);
+	fltr = kzalloc_obj(*fltr, GFP_KERNEL);
 	if (!fltr)
 		return -ENOMEM;

@@ -1519,7 +1519,7 @@ iavf_set_rxfh_fields(struct net_device *netdev,
 	if (hash_flds == IAVF_ADV_RSS_HASH_INVALID)
 		return -EINVAL;

-	rss_new = kzalloc(sizeof(*rss_new), GFP_KERNEL);
+	rss_new = kzalloc_obj(*rss_new, GFP_KERNEL);
 	if (!rss_new)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c
index 4b0fc8f354bc..5ee145d9dd0b 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_main.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_main.c
@@ -771,7 +771,7 @@ iavf_vlan_filter *iavf_add_vlan(struct iavf_adapter *adapter,

 	f = iavf_find_vlan(adapter, vlan);
 	if (!f) {
-		f = kzalloc(sizeof(*f), GFP_ATOMIC);
+		f = kzalloc_obj(*f, GFP_ATOMIC);
 		if (!f)
 			goto clearout;

@@ -978,7 +978,7 @@ struct iavf_mac_filter *iavf_add_filter(struct iavf_adapter *adapter,

 	f = iavf_find_filter(adapter, macaddr);
 	if (!f) {
-		f = kzalloc(sizeof(*f), GFP_ATOMIC);
+		f = kzalloc_obj(*f, GFP_ATOMIC);
 		if (!f)
 			return f;

@@ -1585,12 +1585,12 @@ static int iavf_alloc_queues(struct iavf_adapter *adapter)
 					  (int)(num_online_cpus()));


-	adapter->tx_rings = kcalloc(num_active_queues,
-				    sizeof(struct iavf_ring), GFP_KERNEL);
+	adapter->tx_rings = kzalloc_objs(struct iavf_ring, num_active_queues,
+					 GFP_KERNEL);
 	if (!adapter->tx_rings)
 		goto err_out;
-	adapter->rx_rings = kcalloc(num_active_queues,
-				    sizeof(struct iavf_ring), GFP_KERNEL);
+	adapter->rx_rings = kzalloc_objs(struct iavf_ring, num_active_queues,
+					 GFP_KERNEL);
 	if (!adapter->rx_rings)
 		goto err_out;

@@ -1653,8 +1653,8 @@ static int iavf_set_interrupt_capability(struct iavf_adapter *adapter)
 	v_budget = min_t(int, pairs + NONQ_VECS,
 			 (int)adapter->vf_res->max_vectors);

-	adapter->msix_entries = kcalloc(v_budget,
-					sizeof(struct msix_entry), GFP_KERNEL);
+	adapter->msix_entries = kzalloc_objs(struct msix_entry, v_budget,
+					     GFP_KERNEL);
 	if (!adapter->msix_entries) {
 		err = -ENOMEM;
 		goto out;
@@ -1812,8 +1812,7 @@ static int iavf_alloc_q_vectors(struct iavf_adapter *adapter)
 	struct iavf_q_vector *q_vector;

 	num_q_vectors = adapter->num_msix_vectors - NONQ_VECS;
-	adapter->q_vectors = kcalloc(num_q_vectors, sizeof(*q_vector),
-				     GFP_KERNEL);
+	adapter->q_vectors = kzalloc_objs(*q_vector, num_q_vectors, GFP_KERNEL);
 	if (!adapter->q_vectors)
 		return -ENOMEM;

@@ -4119,7 +4118,7 @@ static int iavf_configure_clsflower(struct iavf_adapter *adapter,
 		return -EINVAL;
 	}

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (!filter)
 		return -ENOMEM;
 	filter->cookie = cls_flower->cookie;
@@ -4234,7 +4233,7 @@ static int iavf_add_cls_u32(struct iavf_adapter *adapter,
 		return -EOPNOTSUPP;
 	}

-	fltr = kzalloc(sizeof(*fltr), GFP_KERNEL);
+	fltr = kzalloc_obj(*fltr, GFP_KERNEL);
 	if (!fltr)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/iavf/iavf_ptp.c b/drivers/net/ethernet/intel/iavf/iavf_ptp.c
index 9cbd8c154031..f2f3411878e1 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_ptp.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_ptp.c
@@ -133,7 +133,7 @@ static struct iavf_ptp_aq_cmd *iavf_allocate_ptp_cmd(enum virtchnl_ops v_opcode,
 {
 	struct iavf_ptp_aq_cmd *cmd;

-	cmd = kzalloc(struct_size(cmd, msg, msglen), GFP_KERNEL);
+	cmd = kzalloc_flex(*cmd, msg, msglen, GFP_KERNEL);
 	if (!cmd)
 		return NULL;

diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c b/drivers/net/ethernet/intel/ice/devlink/devlink.c
index 2ef39cc70c21..38081776ce65 100644
--- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
+++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
@@ -285,7 +285,7 @@ static int ice_devlink_info_get(struct devlink *devlink,
 		return err;
 	}

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/devlink/port.c b/drivers/net/ethernet/intel/ice/devlink/port.c
index 63fb36fc4b3d..ce830213e73a 100644
--- a/drivers/net/ethernet/intel/ice/devlink/port.c
+++ b/drivers/net/ethernet/intel/ice/devlink/port.c
@@ -58,8 +58,9 @@ static void ice_devlink_port_options_print(struct ice_pf *pf)
 	const char *str;
 	int status;

-	options = kcalloc(ICE_AQC_PORT_OPT_MAX * ICE_MAX_PORT_PER_PCI_DEV,
-			  sizeof(*options), GFP_KERNEL);
+	options = kzalloc_objs(*options,
+			       ICE_AQC_PORT_OPT_MAX * ICE_MAX_PORT_PER_PCI_DEV,
+			       GFP_KERNEL);
 	if (!options)
 		return;

@@ -920,7 +921,7 @@ ice_alloc_dynamic_port(struct ice_pf *pf,
 	if (err)
 		return err;

-	dyn_port = kzalloc(sizeof(*dyn_port), GFP_KERNEL);
+	dyn_port = kzalloc_obj(*dyn_port, GFP_KERNEL);
 	if (!dyn_port) {
 		err = -ENOMEM;
 		goto unroll_reserve_sf_num;
diff --git a/drivers/net/ethernet/intel/ice/ice_adapter.c b/drivers/net/ethernet/intel/ice/ice_adapter.c
index 0a8a48cd4bce..d5b857b07f21 100644
--- a/drivers/net/ethernet/intel/ice/ice_adapter.c
+++ b/drivers/net/ethernet/intel/ice/ice_adapter.c
@@ -55,7 +55,7 @@ static struct ice_adapter *ice_adapter_new(struct pci_dev *pdev)
 {
 	struct ice_adapter *adapter;

-	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(*adapter, GFP_KERNEL);
 	if (!adapter)
 		return NULL;

diff --git a/drivers/net/ethernet/intel/ice/ice_arfs.c b/drivers/net/ethernet/intel/ice/ice_arfs.c
index 1f7834c03550..fe9b40654df2 100644
--- a/drivers/net/ethernet/intel/ice/ice_arfs.c
+++ b/drivers/net/ethernet/intel/ice/ice_arfs.c
@@ -534,13 +534,12 @@ static int ice_init_arfs_cntrs(struct ice_vsi *vsi)
 	if (!vsi || vsi->type != ICE_VSI_PF)
 		return -EINVAL;

-	vsi->arfs_fltr_cntrs = kzalloc(sizeof(*vsi->arfs_fltr_cntrs),
-				       GFP_KERNEL);
+	vsi->arfs_fltr_cntrs = kzalloc_obj(*vsi->arfs_fltr_cntrs, GFP_KERNEL);
 	if (!vsi->arfs_fltr_cntrs)
 		return -ENOMEM;

-	vsi->arfs_last_fltr_id = kzalloc(sizeof(*vsi->arfs_last_fltr_id),
-					 GFP_KERNEL);
+	vsi->arfs_last_fltr_id = kzalloc_obj(*vsi->arfs_last_fltr_id,
+					     GFP_KERNEL);
 	if (!vsi->arfs_last_fltr_id) {
 		kfree(vsi->arfs_fltr_cntrs);
 		vsi->arfs_fltr_cntrs = NULL;
@@ -562,8 +561,8 @@ void ice_init_arfs(struct ice_vsi *vsi)
 	if (!vsi || vsi->type != ICE_VSI_PF || ice_is_arfs_active(vsi))
 		return;

-	arfs_fltr_list = kcalloc(ICE_MAX_ARFS_LIST, sizeof(*arfs_fltr_list),
-				 GFP_KERNEL);
+	arfs_fltr_list = kzalloc_objs(*arfs_fltr_list, ICE_MAX_ARFS_LIST,
+				      GFP_KERNEL);
 	if (!arfs_fltr_list)
 		return;

diff --git a/drivers/net/ethernet/intel/ice/ice_base.c b/drivers/net/ethernet/intel/ice/ice_base.c
index afbff8aa9ceb..35089e80e810 100644
--- a/drivers/net/ethernet/intel/ice/ice_base.c
+++ b/drivers/net/ethernet/intel/ice/ice_base.c
@@ -107,7 +107,7 @@ static int ice_vsi_alloc_q_vector(struct ice_vsi *vsi, u16 v_idx)
 	int err;

 	/* allocate q_vector */
-	q_vector = kzalloc(sizeof(*q_vector), GFP_KERNEL);
+	q_vector = kzalloc_obj(*q_vector, GFP_KERNEL);
 	if (!q_vector)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index 64e798b8f18f..651cd5476f88 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -1067,7 +1067,7 @@ int ice_init_hw(struct ice_hw *hw)
 	if (status)
 		goto err_unroll_sched;

-	pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps) {
 		status = -ENOMEM;
 		goto err_unroll_sched;
@@ -1103,8 +1103,8 @@ int ice_init_hw(struct ice_hw *hw)

 	/* Get MAC information */
 	/* A single port can report up to two (LAN and WoL) addresses */
-	mac_buf = kcalloc(2, sizeof(struct ice_aqc_manage_mac_read_resp),
-			  GFP_KERNEL);
+	mac_buf = kzalloc_objs(struct ice_aqc_manage_mac_read_resp, 2,
+			       GFP_KERNEL);
 	if (!mac_buf) {
 		status = -ENOMEM;
 		goto err_unroll_fltr_mgmt_struct;
@@ -3630,7 +3630,7 @@ int ice_update_link_info(struct ice_port_info *pi)
 	if (li->link_info & ICE_AQ_MEDIA_AVAILABLE) {
 		struct ice_aqc_get_phy_caps_data *pcaps __free(kfree) = NULL;

-		pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+		pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 		if (!pcaps)
 			return -ENOMEM;

@@ -3881,7 +3881,7 @@ ice_set_fc(struct ice_port_info *pi, u8 *aq_failures, bool ena_auto_link_update)
 	*aq_failures = 0;
 	hw = pi->hw;

-	pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps)
 		return -ENOMEM;

@@ -4020,7 +4020,7 @@ ice_cfg_phy_fec(struct ice_port_info *pi, struct ice_aqc_set_phy_cfg_data *cfg,

 	hw = pi->hw;

-	pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps)
 		return -ENOMEM;

@@ -4358,7 +4358,7 @@ int ice_get_phy_lane_number(struct ice_hw *hw)
 	    hw->device_id == ICE_DEV_ID_E825C_SGMII)
 		return hw->pf_id;

-	options = kcalloc(ICE_AQC_PORT_OPT_MAX, sizeof(*options), GFP_KERNEL);
+	options = kzalloc_objs(*options, ICE_AQC_PORT_OPT_MAX, GFP_KERNEL);
 	if (!options)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c
index 9fc8681cc58e..9d0e71598948 100644
--- a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c
@@ -399,7 +399,7 @@ int ice_pf_dcb_cfg(struct ice_pf *pf, struct ice_dcbx_cfg *new_cfg, bool locked)
 	}

 	/* Notify AUX drivers about impending change to TCs */
-	event = kzalloc(sizeof(*event), GFP_KERNEL);
+	event = kzalloc_obj(*event, GFP_KERNEL);
 	if (!event) {
 		ret = -ENOMEM;
 		goto free_cfg;
@@ -575,7 +575,7 @@ void ice_dcb_rebuild(struct ice_pf *pf)

 dcb_error:
 	dev_err(dev, "Disabling DCB until new settings occur\n");
-	err_cfg = kzalloc(sizeof(*err_cfg), GFP_KERNEL);
+	err_cfg = kzalloc_obj(*err_cfg, GFP_KERNEL);
 	if (!err_cfg) {
 		mutex_unlock(&pf->tc_mutex);
 		return;
@@ -641,7 +641,7 @@ int ice_dcb_sw_dflt_cfg(struct ice_pf *pf, bool ets_willing, bool locked)

 	hw = &pf->hw;
 	pi = hw->port_info;
-	dcbcfg = kzalloc(sizeof(*dcbcfg), GFP_KERNEL);
+	dcbcfg = kzalloc_obj(*dcbcfg, GFP_KERNEL);
 	if (!dcbcfg)
 		return -ENOMEM;

@@ -791,7 +791,7 @@ void ice_pf_dcb_recfg(struct ice_pf *pf, bool locked)
 		privd = cdev->iidc_priv;
 		ice_setup_dcb_qos_info(pf, &privd->qos_info);
 		/* Notify the AUX drivers that TC change is finished */
-		event = kzalloc(sizeof(*event), GFP_KERNEL);
+		event = kzalloc_obj(*event, GFP_KERNEL);
 		if (!event)
 			return;

diff --git a/drivers/net/ethernet/intel/ice/ice_dpll.c b/drivers/net/ethernet/intel/ice/ice_dpll.c
index baf02512d041..23bbfcbca490 100644
--- a/drivers/net/ethernet/intel/ice/ice_dpll.c
+++ b/drivers/net/ethernet/intel/ice/ice_dpll.c
@@ -3276,7 +3276,7 @@ static int ice_dpll_pin_notify(struct notifier_block *nb, unsigned long action,
 	if (pin->fwnode != info->fwnode)
 		return NOTIFY_DONE; /* Not this pin */

-	work = kzalloc(sizeof(*work), GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return NOTIFY_DONE;

@@ -4145,7 +4145,7 @@ static int ice_dpll_init_info_e825c(struct ice_pf *pf)
 	d->clock_id = ice_generate_clock_id(pf);
 	d->num_inputs = ICE_SYNCE_CLK_NUM;

-	d->inputs = kcalloc(d->num_inputs, sizeof(*d->inputs), GFP_KERNEL);
+	d->inputs = kzalloc_objs(*d->inputs, d->num_inputs, GFP_KERNEL);
 	if (!d->inputs)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch_br.c b/drivers/net/ethernet/intel/ice/ice_eswitch_br.c
index cccb7ddf61c9..e043e8ddbc9d 100644
--- a/drivers/net/ethernet/intel/ice/ice_eswitch_br.c
+++ b/drivers/net/ethernet/intel/ice/ice_eswitch_br.c
@@ -129,11 +129,11 @@ ice_eswitch_br_fwd_rule_create(struct ice_hw *hw, int vsi_idx, int port_type,

 	lkups_cnt = ice_eswitch_br_get_lkups_cnt(vid);

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return ERR_PTR(-ENOMEM);

-	list = kcalloc(lkups_cnt, sizeof(*list), GFP_ATOMIC);
+	list = kzalloc_objs(*list, lkups_cnt, GFP_ATOMIC);
 	if (!list) {
 		err = -ENOMEM;
 		goto err_list_alloc;
@@ -190,11 +190,11 @@ ice_eswitch_br_guard_rule_create(struct ice_hw *hw, u16 vsi_idx,

 	lkups_cnt = ice_eswitch_br_get_lkups_cnt(vid);

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		goto err_exit;

-	list = kcalloc(lkups_cnt, sizeof(*list), GFP_ATOMIC);
+	list = kzalloc_objs(*list, lkups_cnt, GFP_ATOMIC);
 	if (!list)
 		goto err_list_alloc;

@@ -233,7 +233,7 @@ ice_eswitch_br_flow_create(struct device *dev, struct ice_hw *hw, int vsi_idx,
 	struct ice_esw_br_flow *flow;
 	int err;

-	flow = kzalloc(sizeof(*flow), GFP_KERNEL);
+	flow = kzalloc_obj(*flow, GFP_KERNEL);
 	if (!flow)
 		return ERR_PTR(-ENOMEM);

@@ -418,7 +418,7 @@ ice_eswitch_br_fdb_entry_create(struct net_device *netdev,
 	if (fdb_entry)
 		ice_eswitch_br_fdb_entry_notify_and_cleanup(bridge, fdb_entry);

-	fdb_entry = kzalloc(sizeof(*fdb_entry), GFP_KERNEL);
+	fdb_entry = kzalloc_obj(*fdb_entry, GFP_KERNEL);
 	if (!fdb_entry) {
 		err = -ENOMEM;
 		goto err_exit;
@@ -513,7 +513,7 @@ ice_eswitch_br_fdb_work_alloc(struct switchdev_notifier_fdb_info *fdb_info,
 	struct ice_esw_br_fdb_work *work;
 	unsigned char *mac;

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return ERR_PTR(-ENOMEM);

@@ -698,7 +698,7 @@ ice_eswitch_br_vlan_create(u16 vid, u16 flags, struct ice_esw_br_port *port)
 	struct ice_esw_br_vlan *vlan;
 	int err;

-	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan)
 		return ERR_PTR(-ENOMEM);

@@ -916,7 +916,7 @@ ice_eswitch_br_port_init(struct ice_esw_br *bridge)
 {
 	struct ice_esw_br_port *br_port;

-	br_port = kzalloc(sizeof(*br_port), GFP_KERNEL);
+	br_port = kzalloc_obj(*br_port, GFP_KERNEL);
 	if (!br_port)
 		return ERR_PTR(-ENOMEM);

@@ -1013,7 +1013,7 @@ ice_eswitch_br_init(struct ice_esw_br_offloads *br_offloads, int ifindex)
 	struct ice_esw_br *bridge;
 	int err;

-	bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
+	bridge = kzalloc_obj(*bridge, GFP_KERNEL);
 	if (!bridge)
 		return ERR_PTR(-ENOMEM);

@@ -1217,7 +1217,7 @@ ice_eswitch_br_offloads_alloc(struct ice_pf *pf)
 	if (pf->eswitch.br_offloads)
 		return ERR_PTR(-EEXIST);

-	br_offloads = kzalloc(sizeof(*br_offloads), GFP_KERNEL);
+	br_offloads = kzalloc_obj(*br_offloads, GFP_KERNEL);
 	if (!br_offloads)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index c6bc29cfb8e6..4cce51840369 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -1652,7 +1652,7 @@ ice_get_fecparam(struct net_device *netdev, struct ethtool_fecparam *fecparam)
 		break;
 	}

-	caps = kzalloc(sizeof(*caps), GFP_KERNEL);
+	caps = kzalloc_obj(*caps, GFP_KERNEL);
 	if (!caps)
 		return -ENOMEM;

@@ -2364,7 +2364,7 @@ ice_get_link_ksettings(struct net_device *netdev,
 	/* flow control is symmetric and always supported */
 	ethtool_link_ksettings_add_link_mode(ks, supported, Pause);

-	caps = kzalloc(sizeof(*caps), GFP_KERNEL);
+	caps = kzalloc_obj(*caps, GFP_KERNEL);
 	if (!caps)
 		return -ENOMEM;

@@ -2629,7 +2629,7 @@ ice_set_link_ksettings(struct net_device *netdev,
 	    pi->phy.link_info.link_info & ICE_AQ_LINK_UP)
 		return -EOPNOTSUPP;

-	phy_caps = kzalloc(sizeof(*phy_caps), GFP_KERNEL);
+	phy_caps = kzalloc_obj(*phy_caps, GFP_KERNEL);
 	if (!phy_caps)
 		return -ENOMEM;

@@ -3265,7 +3265,7 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring,
 	netdev_info(netdev, "Changing Tx descriptor count from %d to %d\n",
 		    vsi->tx_rings[0]->count, new_tx_cnt);

-	tx_rings = kcalloc(vsi->num_txq, sizeof(*tx_rings), GFP_KERNEL);
+	tx_rings = kzalloc_objs(*tx_rings, vsi->num_txq, GFP_KERNEL);
 	if (!tx_rings) {
 		err = -ENOMEM;
 		goto done;
@@ -3295,7 +3295,7 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring,
 	netdev_info(netdev, "Changing XDP descriptor count from %d to %d\n",
 		    vsi->xdp_rings[0]->count, new_tx_cnt);

-	xdp_rings = kcalloc(vsi->num_xdp_txq, sizeof(*xdp_rings), GFP_KERNEL);
+	xdp_rings = kzalloc_objs(*xdp_rings, vsi->num_xdp_txq, GFP_KERNEL);
 	if (!xdp_rings) {
 		err = -ENOMEM;
 		goto free_tx;
@@ -3325,7 +3325,7 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring,
 	netdev_info(netdev, "Changing Rx descriptor count from %d to %d\n",
 		    vsi->rx_rings[0]->count, new_rx_cnt);

-	rx_rings = kcalloc(vsi->num_rxq, sizeof(*rx_rings), GFP_KERNEL);
+	rx_rings = kzalloc_objs(*rx_rings, vsi->num_rxq, GFP_KERNEL);
 	if (!rx_rings) {
 		err = -ENOMEM;
 		goto done;
@@ -3445,7 +3445,7 @@ ice_get_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause)

 	dcbx_cfg = &pi->qos_cfg.local_dcbx_cfg;

-	pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps)
 		return;

@@ -3511,7 +3511,7 @@ ice_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause)
 	 * so compare pause->autoneg with SW configured to prevent the user from
 	 * using set pause param to chance autoneg.
 	 */
-	pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_flex_pipe.c b/drivers/net/ethernet/intel/ice/ice_flex_pipe.c
index c0dbec369366..28516878fa53 100644
--- a/drivers/net/ethernet/intel/ice/ice_flex_pipe.c
+++ b/drivers/net/ethernet/intel/ice/ice_flex_pipe.c
@@ -3734,7 +3734,7 @@ ice_adj_prof_priorities(struct ice_hw *hw, enum ice_block blk, u16 vsig,
 	int status = 0;
 	u16 idx;

-	attr_used = kcalloc(ICE_MAX_PTG_ATTRS, sizeof(*attr_used), GFP_KERNEL);
+	attr_used = kzalloc_objs(*attr_used, ICE_MAX_PTG_ATTRS, GFP_KERNEL);
 	if (!attr_used)
 		return -ENOMEM;

@@ -4021,7 +4021,7 @@ ice_find_prof_vsig(struct ice_hw *hw, enum ice_block blk, u64 hdl, u16 *vsig)

 	INIT_LIST_HEAD(&lst);

-	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc_obj(*t, GFP_KERNEL);
 	if (!t)
 		return false;

diff --git a/drivers/net/ethernet/intel/ice/ice_flow.c b/drivers/net/ethernet/intel/ice/ice_flow.c
index c9b6d0a84bd1..51f718020073 100644
--- a/drivers/net/ethernet/intel/ice/ice_flow.c
+++ b/drivers/net/ethernet/intel/ice/ice_flow.c
@@ -1468,7 +1468,7 @@ ice_flow_add_prof_sync(struct ice_hw *hw, enum ice_block blk,
 	if (prof_id >= ids->count)
 		return -ENOSPC;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -1661,7 +1661,7 @@ ice_flow_set_parser_prof(struct ice_hw *hw, u16 dest_vsi, u16 fdir_vsi,
 	int status;
 	int i, idx;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -2552,7 +2552,7 @@ ice_add_rss_cfg_sync(struct ice_hw *hw, u16 vsi_handle,
 	segs_cnt = (cfg->hdr_type == ICE_RSS_OUTER_HEADERS) ?
 			ICE_FLOW_SEG_SINGLE : ICE_FLOW_SEG_MAX;

-	segs = kcalloc(segs_cnt, sizeof(*segs), GFP_KERNEL);
+	segs = kzalloc_objs(*segs, segs_cnt, GFP_KERNEL);
 	if (!segs)
 		return -ENOMEM;

@@ -2699,7 +2699,7 @@ ice_rem_rss_cfg_sync(struct ice_hw *hw, u16 vsi_handle,

 	segs_cnt = (cfg->hdr_type == ICE_RSS_OUTER_HEADERS) ?
 			ICE_FLOW_SEG_SINGLE : ICE_FLOW_SEG_MAX;
-	segs = kcalloc(segs_cnt, sizeof(*segs), GFP_KERNEL);
+	segs = kzalloc_objs(*segs, segs_cnt, GFP_KERNEL);
 	if (!segs)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_fw_update.c b/drivers/net/ethernet/intel/ice/ice_fw_update.c
index 973a13d3d92a..b67fde32577a 100644
--- a/drivers/net/ethernet/intel/ice/ice_fw_update.c
+++ b/drivers/net/ethernet/intel/ice/ice_fw_update.c
@@ -862,7 +862,7 @@ int ice_get_pending_updates(struct ice_pf *pf, u8 *pending,
 	struct ice_hw *hw = &pf->hw;
 	int err;

-	dev_caps = kzalloc(sizeof(*dev_caps), GFP_KERNEL);
+	dev_caps = kzalloc_obj(*dev_caps, GFP_KERNEL);
 	if (!dev_caps)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_gnss.c b/drivers/net/ethernet/intel/ice/ice_gnss.c
index 6b26290452d4..e81d46412043 100644
--- a/drivers/net/ethernet/intel/ice/ice_gnss.c
+++ b/drivers/net/ethernet/intel/ice/ice_gnss.c
@@ -174,7 +174,7 @@ static struct gnss_serial *ice_gnss_struct_init(struct ice_pf *pf)
 	struct kthread_worker *kworker;
 	struct gnss_serial *gnss;

-	gnss = kzalloc(sizeof(*gnss), GFP_KERNEL);
+	gnss = kzalloc_obj(*gnss, GFP_KERNEL);
 	if (!gnss)
 		return NULL;

diff --git a/drivers/net/ethernet/intel/ice/ice_idc.c b/drivers/net/ethernet/intel/ice/ice_idc.c
index 420d45c2558b..5487edc36260 100644
--- a/drivers/net/ethernet/intel/ice/ice_idc.c
+++ b/drivers/net/ethernet/intel/ice/ice_idc.c
@@ -308,7 +308,7 @@ int ice_plug_aux_dev(struct ice_pf *pf)
 	if (!cdev)
 		return -ENODEV;

-	iadev = kzalloc(sizeof(*iadev), GFP_KERNEL);
+	iadev = kzalloc_obj(*iadev, GFP_KERNEL);
 	if (!iadev)
 		return -ENOMEM;

@@ -376,13 +376,13 @@ int ice_init_rdma(struct ice_pf *pf)
 		return 0;
 	}

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		return -ENOMEM;

 	pf->cdev_info = cdev;

-	privd = kzalloc(sizeof(*privd), GFP_KERNEL);
+	privd = kzalloc_obj(*privd, GFP_KERNEL);
 	if (!privd) {
 		ret = -ENOMEM;
 		goto err_privd_alloc;
diff --git a/drivers/net/ethernet/intel/ice/ice_irq.c b/drivers/net/ethernet/intel/ice/ice_irq.c
index 1d9b2d646474..3864fdcdeae0 100644
--- a/drivers/net/ethernet/intel/ice/ice_irq.c
+++ b/drivers/net/ethernet/intel/ice/ice_irq.c
@@ -81,7 +81,7 @@ static struct ice_irq_entry *ice_get_irq_res(struct ice_pf *pf,
 	unsigned int index;
 	int ret;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return NULL;

diff --git a/drivers/net/ethernet/intel/ice/ice_lag.c b/drivers/net/ethernet/intel/ice/ice_lag.c
index d2576d606e10..af285bba3b1a 100644
--- a/drivers/net/ethernet/intel/ice/ice_lag.c
+++ b/drivers/net/ethernet/intel/ice/ice_lag.c
@@ -742,7 +742,7 @@ static void ice_lag_build_netdev_list(struct ice_lag *lag,
 	INIT_LIST_HEAD(&ndlist->node);
 	rcu_read_lock();
 	for_each_netdev_in_bond_rcu(lag->upper_netdev, tmp_nd) {
-		nl = kzalloc(sizeof(*nl), GFP_ATOMIC);
+		nl = kzalloc_obj(*nl, GFP_ATOMIC);
 		if (!nl)
 			break;

@@ -2310,7 +2310,7 @@ ice_lag_event_handler(struct notifier_block *notif_blk, unsigned long event,
 		return NOTIFY_DONE;

 	/* This memory will be freed at the end of ice_lag_process_event */
-	lag_work = kzalloc(sizeof(*lag_work), GFP_KERNEL);
+	lag_work = kzalloc_obj(*lag_work, GFP_KERNEL);
 	if (!lag_work)
 		return -ENOMEM;

@@ -2332,7 +2332,7 @@ ice_lag_event_handler(struct notifier_block *notif_blk, unsigned long event,

 		rcu_read_lock();
 		for_each_netdev_in_bond_rcu(upper_netdev, tmp_nd) {
-			nd_list = kzalloc(sizeof(*nd_list), GFP_ATOMIC);
+			nd_list = kzalloc_obj(*nd_list, GFP_ATOMIC);
 			if (!nd_list)
 				break;

@@ -2577,7 +2577,7 @@ int ice_init_lag(struct ice_pf *pf)
 	if (!ice_is_feature_supported(pf, ICE_F_SRIOV_LAG))
 		return 0;

-	pf->lag = kzalloc(sizeof(*lag), GFP_KERNEL);
+	pf->lag = kzalloc_obj(*lag, GFP_KERNEL);
 	if (!pf->lag)
 		return -ENOMEM;
 	lag = pf->lag;
diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
index d921269e1fe7..c5695b2e2319 100644
--- a/drivers/net/ethernet/intel/ice/ice_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_lib.c
@@ -290,7 +290,7 @@ static void ice_vsi_delete_from_hw(struct ice_vsi *vsi)
 	int status;

 	ice_fltr_remove_all(vsi);
-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return;

@@ -396,7 +396,7 @@ static int ice_vsi_alloc_ring_stats(struct ice_vsi *vsi)
 		ring_stats = tx_ring_stats[i];

 		if (!ring_stats) {
-			ring_stats = kzalloc(sizeof(*ring_stats), GFP_KERNEL);
+			ring_stats = kzalloc_obj(*ring_stats, GFP_KERNEL);
 			if (!ring_stats)
 				goto err_out;

@@ -417,7 +417,7 @@ static int ice_vsi_alloc_ring_stats(struct ice_vsi *vsi)
 		ring_stats = rx_ring_stats[i];

 		if (!ring_stats) {
-			ring_stats = kzalloc(sizeof(*ring_stats), GFP_KERNEL);
+			ring_stats = kzalloc_obj(*ring_stats, GFP_KERNEL);
 			if (!ring_stats)
 				goto err_out;

@@ -533,19 +533,19 @@ static int ice_vsi_alloc_stat_arrays(struct ice_vsi *vsi)
 	/* realloc will happen in rebuild path */
 		return 0;

-	vsi_stat = kzalloc(sizeof(*vsi_stat), GFP_KERNEL);
+	vsi_stat = kzalloc_obj(*vsi_stat, GFP_KERNEL);
 	if (!vsi_stat)
 		return -ENOMEM;

 	vsi_stat->tx_ring_stats =
-		kcalloc(vsi->alloc_txq, sizeof(*vsi_stat->tx_ring_stats),
-			GFP_KERNEL);
+		kzalloc_objs(*vsi_stat->tx_ring_stats, vsi->alloc_txq,
+			     GFP_KERNEL);
 	if (!vsi_stat->tx_ring_stats)
 		goto err_alloc_tx;

 	vsi_stat->rx_ring_stats =
-		kcalloc(vsi->alloc_rxq, sizeof(*vsi_stat->rx_ring_stats),
-			GFP_KERNEL);
+		kzalloc_objs(*vsi_stat->rx_ring_stats, vsi->alloc_rxq,
+			     GFP_KERNEL);
 	if (!vsi_stat->rx_ring_stats)
 		goto err_alloc_rx;

@@ -1239,7 +1239,7 @@ static int ice_vsi_init(struct ice_vsi *vsi, u32 vsi_flags)
 	int ret = 0;

 	dev = ice_pf_to_dev(pf);
-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -1403,7 +1403,7 @@ static int ice_vsi_alloc_rings(struct ice_vsi *vsi)
 		struct ice_tx_ring *ring;

 		/* allocate with kzalloc(), free with kfree_rcu() */
-		ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+		ring = kzalloc_obj(*ring, GFP_KERNEL);

 		if (!ring)
 			goto err_out;
@@ -1427,7 +1427,7 @@ static int ice_vsi_alloc_rings(struct ice_vsi *vsi)
 		struct ice_rx_ring *ring;

 		/* allocate with kzalloc(), free with kfree_rcu() */
-		ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+		ring = kzalloc_obj(*ring, GFP_KERNEL);
 		if (!ring)
 			goto err_out;

@@ -3104,8 +3104,8 @@ int ice_vsi_rebuild(struct ice_vsi *vsi, u32 vsi_flags)
 	if (ret)
 		goto unlock;

-	coalesce = kcalloc(vsi->num_q_vectors,
-			   sizeof(struct ice_coalesce_stored), GFP_KERNEL);
+	coalesce = kzalloc_objs(struct ice_coalesce_stored, vsi->num_q_vectors,
+				GFP_KERNEL);
 	if (!coalesce) {
 		ret = -ENOMEM;
 		goto decfg;
@@ -3387,7 +3387,7 @@ int ice_vsi_cfg_tc(struct ice_vsi *vsi, u8 ena_tc)
 	vsi->tc_cfg.ena_tc = ena_tc;
 	vsi->tc_cfg.numtc = num_tc;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 4da37caa3ec9..45036a066012 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -875,7 +875,7 @@ void ice_print_link_msg(struct ice_vsi *vsi, bool isup)
 		an = "False";

 	/* Get FEC mode requested based on PHY caps last SW configuration */
-	caps = kzalloc(sizeof(*caps), GFP_KERNEL);
+	caps = kzalloc_obj(*caps, GFP_KERNEL);
 	if (!caps) {
 		fec_req = "Unknown";
 		an_advertised = "Unknown";
@@ -1951,7 +1951,7 @@ static int ice_force_phys_link_state(struct ice_vsi *vsi, bool link_up)

 	pi = vsi->port_info;

-	pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps)
 		return -ENOMEM;

@@ -2010,7 +2010,7 @@ static int ice_init_nvm_phy_type(struct ice_port_info *pi)
 	struct ice_pf *pf = pi->hw->back;
 	int err;

-	pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps)
 		return -ENOMEM;

@@ -2122,7 +2122,7 @@ static int ice_init_phy_user_cfg(struct ice_port_info *pi)
 	if (!(phy->link_info.link_info & ICE_AQ_MEDIA_AVAILABLE))
 		return -EIO;

-	pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps)
 		return -ENOMEM;

@@ -2202,7 +2202,7 @@ static int ice_configure_phy(struct ice_vsi *vsi)
 	if (test_bit(ICE_FLAG_LINK_DOWN_ON_CLOSE_ENA, pf->flags))
 		return ice_force_phys_link_state(vsi, true);

-	pcaps = kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps)
 		return -ENOMEM;

@@ -2236,7 +2236,7 @@ static int ice_configure_phy(struct ice_vsi *vsi)
 		goto done;
 	}

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg) {
 		err = -ENOMEM;
 		goto done;
@@ -2385,7 +2385,7 @@ static void ice_service_task(struct work_struct *work)
 	if (test_and_clear_bit(ICE_AUX_ERR_PENDING, pf->state)) {
 		struct iidc_rdma_event *event;

-		event = kzalloc(sizeof(*event), GFP_KERNEL);
+		event = kzalloc_obj(*event, GFP_KERNEL);
 		if (event) {
 			set_bit(IIDC_RDMA_EVENT_CRIT_ERR, event->type);
 			/* report the entire OICR value to AUX driver */
@@ -2408,7 +2408,7 @@ static void ice_service_task(struct work_struct *work)
 	if (test_and_clear_bit(ICE_FLAG_MTU_CHANGED, pf->flags)) {
 		struct iidc_rdma_event *event;

-		event = kzalloc(sizeof(*event), GFP_KERNEL);
+		event = kzalloc_obj(*event, GFP_KERNEL);
 		if (event) {
 			set_bit(IIDC_RDMA_EVENT_AFTER_MTU_CHANGE, event->type);
 			ice_send_event_to_aux(pf, event);
@@ -2609,11 +2609,11 @@ static int ice_xdp_alloc_setup_rings(struct ice_vsi *vsi)
 		struct ice_ring_stats *ring_stats;
 		struct ice_tx_ring *xdp_ring;

-		xdp_ring = kzalloc(sizeof(*xdp_ring), GFP_KERNEL);
+		xdp_ring = kzalloc_obj(*xdp_ring, GFP_KERNEL);
 		if (!xdp_ring)
 			goto free_xdp_rings;

-		ring_stats = kzalloc(sizeof(*ring_stats), GFP_KERNEL);
+		ring_stats = kzalloc_obj(*ring_stats, GFP_KERNEL);
 		if (!ring_stats) {
 			ice_free_tx_ring(xdp_ring);
 			goto free_xdp_rings;
@@ -4204,7 +4204,7 @@ static void ice_set_safe_mode_vlan_cfg(struct ice_pf *pf)
 	if (!vsi)
 		return;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return;

@@ -4910,7 +4910,7 @@ static int ice_init_pf_sw(struct ice_pf *pf)
 	int err;

 	/* create switch struct for the switch element created by FW on boot */
-	pf->first_sw = kzalloc(sizeof(*pf->first_sw), GFP_KERNEL);
+	pf->first_sw = kzalloc_obj(*pf->first_sw, GFP_KERNEL);
 	if (!pf->first_sw)
 		return -ENOMEM;

@@ -8096,7 +8096,7 @@ int ice_set_rss_hfunc(struct ice_vsi *vsi, u8 hfunc)
 	    hfunc != ICE_AQ_VSI_Q_OPT_RSS_HASH_SYM_TPLZ)
 		return -EOPNOTSUPP;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -8168,7 +8168,7 @@ static int ice_vsi_update_bridge_mode(struct ice_vsi *vsi, u16 bmode)

 	vsi_props = &vsi->info;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -9142,7 +9142,7 @@ static int ice_create_q_channels(struct ice_vsi *vsi)
 		if (!(vsi->all_enatc & BIT(i)))
 			continue;

-		ch = kzalloc(sizeof(*ch), GFP_KERNEL);
+		ch = kzalloc_obj(*ch, GFP_KERNEL);
 		if (!ch) {
 			ret = -ENOMEM;
 			goto err_free;
@@ -9573,7 +9573,7 @@ ice_indr_setup_tc_block(struct net_device *netdev, struct Qdisc *sch,
 		if (indr_priv)
 			return -EEXIST;

-		indr_priv = kzalloc(sizeof(*indr_priv), GFP_KERNEL);
+		indr_priv = kzalloc_obj(*indr_priv, GFP_KERNEL);
 		if (!indr_priv)
 			return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_parser.c b/drivers/net/ethernet/intel/ice/ice_parser.c
index 664beb64f557..4dd3f666daa8 100644
--- a/drivers/net/ethernet/intel/ice/ice_parser.c
+++ b/drivers/net/ethernet/intel/ice/ice_parser.c
@@ -1895,7 +1895,7 @@ static struct ice_xlt_kb *ice_xlt_kb_get(struct ice_hw *hw, u32 sect_type)
 	if (!seg)
 		return ERR_PTR(-EINVAL);

-	kb = kzalloc(sizeof(*kb), GFP_KERNEL);
+	kb = kzalloc_obj(*kb, GFP_KERNEL);
 	if (!kb)
 		return ERR_PTR(-ENOMEM);

@@ -2000,7 +2000,7 @@ struct ice_parser *ice_parser_create(struct ice_hw *hw)
 	struct ice_parser *p;
 	void *err;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index 22c3986b910a..db2213e0e1b5 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -706,7 +706,7 @@ ice_ptp_alloc_tx_tracker(struct ice_ptp_tx *tx)
 	unsigned long *in_use, *stale;
 	struct ice_tx_tstamp *tstamps;

-	tstamps = kcalloc(tx->len, sizeof(*tstamps), GFP_KERNEL);
+	tstamps = kzalloc_objs(*tstamps, tx->len, GFP_KERNEL);
 	in_use = bitmap_zalloc(tx->len, GFP_KERNEL);
 	stale = bitmap_zalloc(tx->len, GFP_KERNEL);

diff --git a/drivers/net/ethernet/intel/ice/ice_repr.c b/drivers/net/ethernet/intel/ice/ice_repr.c
index cb08746556a6..7bdcc0e5986b 100644
--- a/drivers/net/ethernet/intel/ice/ice_repr.c
+++ b/drivers/net/ethernet/intel/ice/ice_repr.c
@@ -369,7 +369,7 @@ static struct ice_repr *ice_repr_create(struct ice_vsi *src_vsi)
 	struct ice_repr *repr;
 	int err;

-	repr = kzalloc(sizeof(*repr), GFP_KERNEL);
+	repr = kzalloc_obj(*repr, GFP_KERNEL);
 	if (!repr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/intel/ice/ice_sf_eth.c b/drivers/net/ethernet/intel/ice/ice_sf_eth.c
index 1a2c94375ca7..93e62050e00a 100644
--- a/drivers/net/ethernet/intel/ice/ice_sf_eth.c
+++ b/drivers/net/ethernet/intel/ice/ice_sf_eth.c
@@ -273,7 +273,7 @@ ice_sf_eth_activate(struct ice_dynamic_port *dyn_port,
 		return err;
 	}

-	sf_dev = kzalloc(sizeof(*sf_dev), GFP_KERNEL);
+	sf_dev = kzalloc_obj(*sf_dev, GFP_KERNEL);
 	if (!sf_dev) {
 		err = -ENOMEM;
 		NL_SET_ERR_MSG_MOD(extack, "Could not allocate SF memory");
diff --git a/drivers/net/ethernet/intel/ice/ice_sriov.c b/drivers/net/ethernet/intel/ice/ice_sriov.c
index 6b1126ddb561..7c15d62bb14b 100644
--- a/drivers/net/ethernet/intel/ice/ice_sriov.c
+++ b/drivers/net/ethernet/intel/ice/ice_sriov.c
@@ -695,7 +695,7 @@ static int ice_create_vf_entries(struct ice_pf *pf, u16 num_vfs)
 	pci_read_config_word(pdev, pos + PCI_SRIOV_VF_DID, &vf_pdev_id);

 	for (u16 vf_id = 0; vf_id < num_vfs; vf_id++) {
-		vf = kzalloc(sizeof(*vf), GFP_KERNEL);
+		vf = kzalloc_obj(*vf, GFP_KERNEL);
 		if (!vf) {
 			err = -ENOMEM;
 			goto err_free_entries;
diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c b/drivers/net/ethernet/intel/ice/ice_switch.c
index 84848f0123e7..515e96c44bfa 100644
--- a/drivers/net/ethernet/intel/ice/ice_switch.c
+++ b/drivers/net/ethernet/intel/ice/ice_switch.c
@@ -1847,7 +1847,7 @@ ice_cfg_rdma_fltr(struct ice_hw *hw, u16 vsi_handle, bool enable)
 	if (!cached_ctx)
 		return -ENOENT;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -2069,7 +2069,7 @@ ice_update_recipe_lkup_idx(struct ice_hw *hw,
 	u16 num_recps = ICE_MAX_NUM_RECIPES;
 	int status;

-	rcp_list = kcalloc(num_recps, sizeof(*rcp_list), GFP_KERNEL);
+	rcp_list = kzalloc_objs(*rcp_list, num_recps, GFP_KERNEL);
 	if (!rcp_list)
 		return -ENOMEM;

@@ -2326,7 +2326,7 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
 	bitmap_zero(result_bm, ICE_MAX_FV_WORDS);

 	/* we need a buffer big enough to accommodate all the recipes */
-	tmp = kcalloc(ICE_MAX_NUM_RECIPES, sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_objs(*tmp, ICE_MAX_NUM_RECIPES, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

@@ -5096,7 +5096,7 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,
 	if (recp_cnt > ICE_MAX_CHAIN_RECIPE_RES)
 		return -E2BIG;

-	buf = kcalloc(recp_cnt, sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_objs(*buf, recp_cnt, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

@@ -5324,7 +5324,7 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
 	if (!lkups_cnt)
 		return -EINVAL;

-	lkup_exts = kzalloc(sizeof(*lkup_exts), GFP_KERNEL);
+	lkup_exts = kzalloc_obj(*lkup_exts, GFP_KERNEL);
 	if (!lkup_exts)
 		return -ENOMEM;

@@ -5346,7 +5346,7 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
 		}
 	}

-	rm = kzalloc(sizeof(*rm), GFP_KERNEL);
+	rm = kzalloc_obj(*rm, GFP_KERNEL);
 	if (!rm) {
 		status = -ENOMEM;
 		goto err_free_lkup_exts;
@@ -5530,7 +5530,7 @@ ice_dummy_packet_add_vlan(const struct ice_dummy_pkt_profile *dummy_pkt,
 	memcpy(pkt + etype_off + off, dummy_pkt->pkt + etype_off,
 	       dummy_pkt->pkt_len - etype_off);

-	profile = kzalloc(sizeof(*profile), GFP_KERNEL);
+	profile = kzalloc_obj(*profile, GFP_KERNEL);
 	if (!profile) {
 		kfree(offsets);
 		kfree(pkt);
diff --git a/drivers/net/ethernet/intel/ice/ice_tc_lib.c b/drivers/net/ethernet/intel/ice/ice_tc_lib.c
index fb9ea7f8ef44..c687da8d950d 100644
--- a/drivers/net/ethernet/intel/ice/ice_tc_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_tc_lib.c
@@ -931,7 +931,7 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr)
 		return ice_pass_vf_tx_lldp(vsi, false);

 	lkups_cnt = ice_tc_count_lkups(flags, fltr);
-	list = kcalloc(lkups_cnt, sizeof(*list), GFP_ATOMIC);
+	list = kzalloc_objs(*list, lkups_cnt, GFP_ATOMIC);
 	if (!list)
 		return -ENOMEM;

@@ -1177,7 +1177,7 @@ ice_add_tc_flower_adv_fltr(struct ice_vsi *vsi,
 	}

 	lkups_cnt = ice_tc_count_lkups(flags, tc_fltr);
-	list = kcalloc(lkups_cnt, sizeof(*list), GFP_ATOMIC);
+	list = kzalloc_objs(*list, lkups_cnt, GFP_ATOMIC);
 	if (!list)
 		return -ENOMEM;

@@ -2191,7 +2191,7 @@ ice_add_tc_fltr(struct net_device *netdev, struct ice_vsi *vsi,
 	/* by default, set output to be INVALID */
 	*__fltr = NULL;

-	fltr = kzalloc(sizeof(*fltr), GFP_KERNEL);
+	fltr = kzalloc_obj(*fltr, GFP_KERNEL);
 	if (!fltr)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c b/drivers/net/ethernet/intel/ice/ice_txrx.c
index 6fa201a14f51..642b761c38a2 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
@@ -397,7 +397,7 @@ static int ice_alloc_tstamp_ring(struct ice_tx_ring *tx_ring)
 	struct ice_tstamp_ring *tstamp_ring;

 	/* allocate with kzalloc(), free with kfree_rcu() */
-	tstamp_ring = kzalloc(sizeof(*tstamp_ring), GFP_KERNEL);
+	tstamp_ring = kzalloc_obj(*tstamp_ring, GFP_KERNEL);
 	if (!tstamp_ring)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_vf_lib.c b/drivers/net/ethernet/intel/ice/ice_vf_lib.c
index de9e81ccee66..dba56e317b77 100644
--- a/drivers/net/ethernet/intel/ice/ice_vf_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_vf_lib.c
@@ -1112,7 +1112,7 @@ static int ice_cfg_mac_antispoof(struct ice_vsi *vsi, bool enable)
 	struct ice_vsi_ctx *ctx;
 	int err;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_vsi_vlan_lib.c b/drivers/net/ethernet/intel/ice/ice_vsi_vlan_lib.c
index ada78f83b3ac..79f18e693e04 100644
--- a/drivers/net/ethernet/intel/ice/ice_vsi_vlan_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_vsi_vlan_lib.c
@@ -94,7 +94,7 @@ static int ice_vsi_manage_vlan_insertion(struct ice_vsi *vsi)
 	struct ice_vsi_ctx *ctxt;
 	int err;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -141,7 +141,7 @@ static int ice_vsi_manage_vlan_stripping(struct ice_vsi *vsi, bool ena)
 	if (vsi->info.port_based_inner_vlan)
 		return 0;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -239,7 +239,7 @@ static int __ice_vsi_set_inner_port_vlan(struct ice_vsi *vsi, u16 pvid_info)
 	struct ice_vsi_ctx *ctxt;
 	int ret;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -292,7 +292,7 @@ int ice_vsi_clear_inner_port_vlan(struct ice_vsi *vsi)
 	struct ice_vsi_ctx *ctxt;
 	int ret;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -336,7 +336,7 @@ static int ice_cfg_vlan_pruning(struct ice_vsi *vsi, bool ena)
 		return 0;

 	pf = vsi->back;
-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -382,7 +382,7 @@ static int ice_cfg_vlan_antispoof(struct ice_vsi *vsi, bool enable)
 	struct ice_vsi_ctx *ctx;
 	int err;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -478,7 +478,7 @@ int ice_vsi_ena_outer_stripping(struct ice_vsi *vsi, u16 tpid)
 	if (tpid_to_vsi_outer_vlan_type(tpid, &tag_type))
 		return -EINVAL;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -529,7 +529,7 @@ int ice_vsi_dis_outer_stripping(struct ice_vsi *vsi)
 	if (vsi->info.port_based_outer_vlan)
 		return 0;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -584,7 +584,7 @@ int ice_vsi_ena_outer_insertion(struct ice_vsi *vsi, u16 tpid)
 	if (tpid_to_vsi_outer_vlan_type(tpid, &tag_type))
 		return -EINVAL;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -636,7 +636,7 @@ int ice_vsi_dis_outer_insertion(struct ice_vsi *vsi)
 	if (vsi->info.port_based_outer_vlan)
 		return 0;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -694,7 +694,7 @@ __ice_vsi_set_outer_port_vlan(struct ice_vsi *vsi, u16 vlan_info, u16 tpid)
 	if (tpid_to_vsi_outer_vlan_type(tpid, &tag_type))
 		return -EINVAL;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -767,7 +767,7 @@ int ice_vsi_clear_outer_port_vlan(struct ice_vsi *vsi)
 	struct ice_vsi_ctx *ctxt;
 	int err;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

@@ -794,7 +794,7 @@ int ice_vsi_clear_port_vlan(struct ice_vsi *vsi)
 	struct ice_vsi_ctx *ctxt;
 	int err;

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/ice_xsk.c b/drivers/net/ethernet/intel/ice/ice_xsk.c
index 953e68ed0f9a..e01eae07b6ed 100644
--- a/drivers/net/ethernet/intel/ice/ice_xsk.c
+++ b/drivers/net/ethernet/intel/ice/ice_xsk.c
@@ -174,9 +174,8 @@ int
 ice_realloc_rx_xdp_bufs(struct ice_rx_ring *rx_ring, bool pool_present)
 {
 	if (pool_present) {
-		rx_ring->xdp_buf = kcalloc(rx_ring->count,
-					   sizeof(*rx_ring->xdp_buf),
-					   GFP_KERNEL);
+		rx_ring->xdp_buf = kzalloc_objs(*rx_ring->xdp_buf,
+						rx_ring->count, GFP_KERNEL);
 		if (!rx_ring->xdp_buf)
 			return -ENOMEM;
 	} else {
diff --git a/drivers/net/ethernet/intel/ice/virt/fdir.c b/drivers/net/ethernet/intel/ice/virt/fdir.c
index ae83c3914e29..8b2c882fb39c 100644
--- a/drivers/net/ethernet/intel/ice/virt/fdir.c
+++ b/drivers/net/ethernet/intel/ice/virt/fdir.c
@@ -875,7 +875,7 @@ ice_vc_fdir_parse_raw(struct ice_vf *vf,
 	if (hw->debug_mask & ICE_DBG_PARSER)
 		ice_parser_result_dump(hw, &rslt);

-	conf->prof = kzalloc(sizeof(*conf->prof), GFP_KERNEL);
+	conf->prof = kzalloc_obj(*conf->prof, GFP_KERNEL);
 	if (!conf->prof) {
 		status = -ENOMEM;
 		goto err_parser_destroy;
@@ -2128,7 +2128,7 @@ int ice_vc_add_fdir_fltr(struct ice_vf *vf, u8 *msg)
 		goto err_exit;
 	}

-	stat = kzalloc(sizeof(*stat), GFP_KERNEL);
+	stat = kzalloc_obj(*stat, GFP_KERNEL);
 	if (!stat) {
 		v_ret = VIRTCHNL_STATUS_ERR_NO_MEMORY;
 		dev_dbg(dev, "Alloc stat for VF %d failed\n", vf->vf_id);
@@ -2332,7 +2332,7 @@ int ice_vc_del_fdir_fltr(struct ice_vf *vf, u8 *msg)
 		goto err_exit;
 	}

-	stat = kzalloc(sizeof(*stat), GFP_KERNEL);
+	stat = kzalloc_obj(*stat, GFP_KERNEL);
 	if (!stat) {
 		v_ret = VIRTCHNL_STATUS_ERR_NO_MEMORY;
 		dev_dbg(dev, "Alloc stat for VF %d failed\n", vf->vf_id);
diff --git a/drivers/net/ethernet/intel/ice/virt/rss.c b/drivers/net/ethernet/intel/ice/virt/rss.c
index 085e69ec0cfc..2f259b261512 100644
--- a/drivers/net/ethernet/intel/ice/virt/rss.c
+++ b/drivers/net/ethernet/intel/ice/virt/rss.c
@@ -380,7 +380,7 @@ ice_vc_rss_hash_update(struct ice_hw *hw, struct ice_vsi *vsi, u8 hash_type)
 	struct ice_vsi_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ice/virt/virtchnl.c b/drivers/net/ethernet/intel/ice/virt/virtchnl.c
index f3f921134379..9abfba8ae6bd 100644
--- a/drivers/net/ethernet/intel/ice/virt/virtchnl.c
+++ b/drivers/net/ethernet/intel/ice/virt/virtchnl.c
@@ -1658,7 +1658,7 @@ static int ice_vc_get_offload_vlan_v2_caps(struct ice_vf *vf)
 		goto out;
 	}

-	caps = kzalloc(sizeof(*caps), GFP_KERNEL);
+	caps = kzalloc_obj(*caps, GFP_KERNEL);
 	if (!caps) {
 		v_ret = VIRTCHNL_STATUS_ERR_NO_MEMORY;
 		goto out;
@@ -2477,7 +2477,7 @@ static int ice_vc_get_phc_time(struct ice_vf *vf)

 	v_ret = VIRTCHNL_STATUS_SUCCESS;

-	phc_time = kzalloc(sizeof(*phc_time), GFP_KERNEL);
+	phc_time = kzalloc_obj(*phc_time, GFP_KERNEL);
 	if (!phc_time) {
 		v_ret = VIRTCHNL_STATUS_ERR_NO_MEMORY;
 		goto err;
diff --git a/drivers/net/ethernet/intel/idpf/idpf_controlq.c b/drivers/net/ethernet/intel/idpf/idpf_controlq.c
index 67894eda2d29..e3681dedc888 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_controlq.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_controlq.c
@@ -127,7 +127,7 @@ int idpf_ctlq_add(struct idpf_hw *hw,
 	bool is_rxq = false;
 	int err;

-	cq = kzalloc(sizeof(*cq), GFP_KERNEL);
+	cq = kzalloc_obj(*cq, GFP_KERNEL);
 	if (!cq)
 		return -ENOMEM;

@@ -159,9 +159,8 @@ int idpf_ctlq_add(struct idpf_hw *hw,
 		idpf_ctlq_init_rxq_bufs(cq);
 	} else {
 		/* Allocate the array of msg pointers for TX queues */
-		cq->bi.tx_msg = kcalloc(qinfo->len,
-					sizeof(struct idpf_ctlq_msg *),
-					GFP_KERNEL);
+		cq->bi.tx_msg = kzalloc_objs(struct idpf_ctlq_msg *, qinfo->len,
+					     GFP_KERNEL);
 		if (!cq->bi.tx_msg) {
 			err = -ENOMEM;
 			goto init_dealloc_q_mem;
diff --git a/drivers/net/ethernet/intel/idpf/idpf_controlq_setup.c b/drivers/net/ethernet/intel/idpf/idpf_controlq_setup.c
index a942a6385d06..dfdbfb89b090 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_controlq_setup.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_controlq_setup.c
@@ -40,8 +40,8 @@ static int idpf_ctlq_alloc_bufs(struct idpf_hw *hw,
 	/* We'll be allocating the buffer info memory first, then we can
 	 * allocate the mapped buffers for the event processing
 	 */
-	cq->bi.rx_buff = kcalloc(cq->ring_size, sizeof(struct idpf_dma_mem *),
-				 GFP_KERNEL);
+	cq->bi.rx_buff = kzalloc_objs(struct idpf_dma_mem *, cq->ring_size,
+				      GFP_KERNEL);
 	if (!cq->bi.rx_buff)
 		return -ENOMEM;

@@ -50,8 +50,8 @@ static int idpf_ctlq_alloc_bufs(struct idpf_hw *hw,
 		struct idpf_dma_mem *bi;
 		int num = 1; /* number of idpf_dma_mem to be allocated */

-		cq->bi.rx_buff[i] = kcalloc(num, sizeof(struct idpf_dma_mem),
-					    GFP_KERNEL);
+		cq->bi.rx_buff[i] = kzalloc_objs(struct idpf_dma_mem, num,
+						 GFP_KERNEL);
 		if (!cq->bi.rx_buff[i])
 			goto unwind_alloc_cq_bufs;

diff --git a/drivers/net/ethernet/intel/idpf/idpf_dev.c b/drivers/net/ethernet/intel/idpf/idpf_dev.c
index a4625638cf3f..c7c38e22c975 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_dev.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_dev.c
@@ -83,8 +83,7 @@ static int idpf_intr_reg_init(struct idpf_vport *vport,
 	u16 total_vecs;

 	total_vecs = idpf_get_reserved_vecs(vport->adapter);
-	reg_vals = kcalloc(total_vecs, sizeof(struct idpf_vec_regs),
-			   GFP_KERNEL);
+	reg_vals = kzalloc_objs(struct idpf_vec_regs, total_vecs, GFP_KERNEL);
 	if (!reg_vals)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/idpf/idpf_ethtool.c b/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
index 1d78a621d65b..8cfb09ff8ebd 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_ethtool.c
@@ -200,11 +200,11 @@ static int idpf_add_flow_steer(struct net_device *netdev,
 	if (q_index >= num_rxq)
 		return -EINVAL;

-	rule = kzalloc(struct_size(rule, rule_info, 1), GFP_KERNEL);
+	rule = kzalloc_flex(*rule, rule_info, 1, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

-	fltr = kzalloc(sizeof(*fltr), GFP_KERNEL);
+	fltr = kzalloc_obj(*fltr, GFP_KERNEL);
 	if (!fltr) {
 		err = -ENOMEM;
 		goto out_free_rule;
@@ -310,7 +310,7 @@ static int idpf_del_flow_steer(struct net_device *netdev,
 	if (!idpf_sideband_action_ena(vport, fsp))
 		return -EOPNOTSUPP;

-	rule = kzalloc(struct_size(rule, rule_info, 1), GFP_KERNEL);
+	rule = kzalloc_flex(*rule, rule_info, 1, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/idpf/idpf_idc.c b/drivers/net/ethernet/intel/idpf/idpf_idc.c
index 6dad0593f7f2..42fb8659142a 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_idc.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_idc.c
@@ -60,7 +60,7 @@ static int idpf_plug_vport_aux_dev(struct iidc_rdma_core_dev_info *cdev_info,
 	struct auxiliary_device *adev;
 	int ret;

-	iadev = kzalloc(sizeof(*iadev), GFP_KERNEL);
+	iadev = kzalloc_obj(*iadev, GFP_KERNEL);
 	if (!iadev)
 		return -ENOMEM;

@@ -120,7 +120,7 @@ static int idpf_idc_init_aux_vport_dev(struct idpf_vport *vport)
 	if (!(le16_to_cpu(vport_msg->vport_flags) & VIRTCHNL2_VPORT_ENABLE_RDMA))
 		return 0;

-	vport->vdev_info = kzalloc(sizeof(*vdev_info), GFP_KERNEL);
+	vport->vdev_info = kzalloc_obj(*vdev_info, GFP_KERNEL);
 	if (!vport->vdev_info)
 		return -ENOMEM;

@@ -198,7 +198,7 @@ static int idpf_plug_core_aux_dev(struct iidc_rdma_core_dev_info *cdev_info)
 	struct auxiliary_device *adev;
 	int ret;

-	iadev = kzalloc(sizeof(*iadev), GFP_KERNEL);
+	iadev = kzalloc_obj(*iadev, GFP_KERNEL);
 	if (!iadev)
 		return -ENOMEM;

@@ -414,12 +414,12 @@ int idpf_idc_init_aux_core_dev(struct idpf_adapter *adapter,
 	struct iidc_rdma_priv_dev_info *privd;
 	int err, i;

-	adapter->cdev_info = kzalloc(sizeof(*cdev_info), GFP_KERNEL);
+	adapter->cdev_info = kzalloc_obj(*cdev_info, GFP_KERNEL);
 	if (!adapter->cdev_info)
 		return -ENOMEM;
 	cdev_info = adapter->cdev_info;

-	privd = kzalloc(sizeof(*privd), GFP_KERNEL);
+	privd = kzalloc_obj(*privd, GFP_KERNEL);
 	if (!privd) {
 		err = -ENOMEM;
 		goto err_privd_alloc;
@@ -431,9 +431,8 @@ int idpf_idc_init_aux_core_dev(struct idpf_adapter *adapter,
 	privd->ftype = ftype;

 	privd->mapped_mem_regions =
-		kcalloc(adapter->hw.num_lan_regs,
-			sizeof(struct iidc_rdma_lan_mapped_mem_region),
-			GFP_KERNEL);
+		kzalloc_objs(struct iidc_rdma_lan_mapped_mem_region,
+			     adapter->hw.num_lan_regs, GFP_KERNEL);
 	if (!privd->mapped_mem_regions) {
 		err = -ENOMEM;
 		goto err_plug_aux_dev;
diff --git a/drivers/net/ethernet/intel/idpf/idpf_lib.c b/drivers/net/ethernet/intel/idpf/idpf_lib.c
index 94da5fbd56f1..a70f8ba7aad2 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_lib.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_lib.c
@@ -359,9 +359,9 @@ int idpf_intr_req(struct idpf_adapter *adapter)
 			num_rdma_vecs = IDPF_MIN_RDMA_VEC;
 		}

-		adapter->rdma_msix_entries = kcalloc(num_rdma_vecs,
-						     sizeof(struct msix_entry),
-						     GFP_KERNEL);
+		adapter->rdma_msix_entries = kzalloc_objs(struct msix_entry,
+							  num_rdma_vecs,
+							  GFP_KERNEL);
 		if (!adapter->rdma_msix_entries) {
 			err = -ENOMEM;
 			goto free_irq;
@@ -369,8 +369,8 @@ int idpf_intr_req(struct idpf_adapter *adapter)
 	}

 	num_lan_vecs = actual_vecs - num_rdma_vecs;
-	adapter->msix_entries = kcalloc(num_lan_vecs, sizeof(struct msix_entry),
-					GFP_KERNEL);
+	adapter->msix_entries = kzalloc_objs(struct msix_entry, num_lan_vecs,
+					     GFP_KERNEL);
 	if (!adapter->msix_entries) {
 		err = -ENOMEM;
 		goto free_rdma_msix;
@@ -577,7 +577,7 @@ static int __idpf_add_mac_filter(struct idpf_vport_config *vport_config,
 		return 0;
 	}

-	f = kzalloc(sizeof(*f), GFP_ATOMIC);
+	f = kzalloc_obj(*f, GFP_ATOMIC);
 	if (!f) {
 		spin_unlock_bh(&vport_config->mac_filter_list_lock);

@@ -1239,7 +1239,7 @@ static struct idpf_vport *idpf_vport_alloc(struct idpf_adapter *adapter,
 	if (idx == IDPF_NO_FREE_SLOT)
 		return NULL;

-	vport = kzalloc(sizeof(*vport), GFP_KERNEL);
+	vport = kzalloc_obj(*vport, GFP_KERNEL);
 	if (!vport)
 		return vport;

@@ -1248,14 +1248,14 @@ static struct idpf_vport *idpf_vport_alloc(struct idpf_adapter *adapter,
 		struct idpf_vport_config *vport_config;
 		struct idpf_q_coalesce *q_coal;

-		vport_config = kzalloc(sizeof(*vport_config), GFP_KERNEL);
+		vport_config = kzalloc_obj(*vport_config, GFP_KERNEL);
 		if (!vport_config) {
 			kfree(vport);

 			return NULL;
 		}

-		q_coal = kcalloc(num_max_q, sizeof(*q_coal), GFP_KERNEL);
+		q_coal = kzalloc_objs(*q_coal, num_max_q, GFP_KERNEL);
 		if (!q_coal) {
 			kfree(vport_config);
 			kfree(vport);
@@ -2027,7 +2027,7 @@ int idpf_initiate_soft_reset(struct idpf_vport *vport,
 	 * error occurred, the existing vport will be untouched.
 	 *
 	 */
-	new_vport = kzalloc(sizeof(*vport), GFP_KERNEL);
+	new_vport = kzalloc_obj(*vport, GFP_KERNEL);
 	if (!new_vport)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/idpf/idpf_main.c b/drivers/net/ethernet/intel/idpf/idpf_main.c
index de5d722cc21d..be6760249dc8 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_main.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_main.c
@@ -238,7 +238,7 @@ static int idpf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	struct idpf_adapter *adapter;
 	int err;

-	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(*adapter, GFP_KERNEL);
 	if (!adapter)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/idpf/idpf_ptp.c b/drivers/net/ethernet/intel/idpf/idpf_ptp.c
index 4a805a9541f0..c098d3f66a34 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_ptp.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_ptp.c
@@ -936,7 +936,7 @@ int idpf_ptp_init(struct idpf_adapter *adapter)
 		return -EOPNOTSUPP;
 	}

-	adapter->ptp = kzalloc(sizeof(*adapter->ptp), GFP_KERNEL);
+	adapter->ptp = kzalloc_obj(*adapter->ptp, GFP_KERNEL);
 	if (!adapter->ptp)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/idpf/idpf_txrx.c b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
index 376050308b06..259316af9ec5 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_txrx.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
@@ -183,8 +183,8 @@ static int idpf_tx_buf_alloc_all(struct idpf_tx_queue *tx_q)
 		tx_q->buf_pool_size = U16_MAX;
 	else
 		tx_q->buf_pool_size = tx_q->desc_count;
-	tx_q->tx_buf = kcalloc(tx_q->buf_pool_size, sizeof(*tx_q->tx_buf),
-			       GFP_KERNEL);
+	tx_q->tx_buf = kzalloc_objs(*tx_q->tx_buf, tx_q->buf_pool_size,
+				    GFP_KERNEL);
 	if (!tx_q->tx_buf)
 		return -ENOMEM;

@@ -1204,9 +1204,9 @@ static int idpf_qp_enable(const struct idpf_vport *vport,
 	if (!rsrc->xdp_txq_offset)
 		goto config;

-	q_vector->xsksq = kcalloc(DIV_ROUND_UP(rsrc->num_rxq_grp,
-					       rsrc->num_q_vectors),
-				  sizeof(*q_vector->xsksq), GFP_KERNEL);
+	q_vector->xsksq = kzalloc_objs(*q_vector->xsksq,
+				       DIV_ROUND_UP(rsrc->num_rxq_grp, rsrc->num_q_vectors),
+				       GFP_KERNEL);
 	if (!q_vector->xsksq)
 		return -ENOMEM;

@@ -1439,8 +1439,7 @@ static int idpf_vport_init_fast_path_txqs(struct idpf_vport *vport,
 	struct work_struct *tstamp_task = &vport->tstamp_task;
 	int k = 0;

-	vport->txqs = kcalloc(rsrc->num_txq, sizeof(*vport->txqs),
-			      GFP_KERNEL);
+	vport->txqs = kzalloc_objs(*vport->txqs, rsrc->num_txq, GFP_KERNEL);
 	if (!vport->txqs)
 		return -ENOMEM;

@@ -1711,8 +1710,8 @@ static int idpf_txq_group_alloc(struct idpf_vport *vport,
 {
 	bool split, flow_sch_en;

-	rsrc->txq_grps = kcalloc(rsrc->num_txq_grp,
-				 sizeof(*rsrc->txq_grps), GFP_KERNEL);
+	rsrc->txq_grps = kzalloc_objs(*rsrc->txq_grps, rsrc->num_txq_grp,
+				      GFP_KERNEL);
 	if (!rsrc->txq_grps)
 		return -ENOMEM;

@@ -1728,8 +1727,8 @@ static int idpf_txq_group_alloc(struct idpf_vport *vport,
 		tx_qgrp->num_txq = num_txq;

 		for (unsigned int j = 0; j < tx_qgrp->num_txq; j++) {
-			tx_qgrp->txqs[j] = kzalloc(sizeof(*tx_qgrp->txqs[j]),
-						   GFP_KERNEL);
+			tx_qgrp->txqs[j] = kzalloc_obj(*tx_qgrp->txqs[j],
+						       GFP_KERNEL);
 			if (!tx_qgrp->txqs[j])
 				goto err_alloc;
 		}
@@ -1756,7 +1755,7 @@ static int idpf_txq_group_alloc(struct idpf_vport *vport,

 			idpf_queue_set(FLOW_SCH_EN, q);

-			q->refillq = kzalloc(sizeof(*q->refillq), GFP_KERNEL);
+			q->refillq = kzalloc_obj(*q->refillq, GFP_KERNEL);
 			if (!q->refillq)
 				goto err_alloc;

@@ -1767,9 +1766,9 @@ static int idpf_txq_group_alloc(struct idpf_vport *vport,
 		if (!split)
 			continue;

-		tx_qgrp->complq = kcalloc(IDPF_COMPLQ_PER_GROUP,
-					  sizeof(*tx_qgrp->complq),
-					  GFP_KERNEL);
+		tx_qgrp->complq = kzalloc_objs(*tx_qgrp->complq,
+					       IDPF_COMPLQ_PER_GROUP,
+					       GFP_KERNEL);
 		if (!tx_qgrp->complq)
 			goto err_alloc;

@@ -1806,8 +1805,8 @@ static int idpf_rxq_group_alloc(struct idpf_vport *vport,
 	bool hs, rsc;
 	int err = 0;

-	rsrc->rxq_grps = kcalloc(rsrc->num_rxq_grp,
-				 sizeof(struct idpf_rxq_group), GFP_KERNEL);
+	rsrc->rxq_grps = kzalloc_objs(struct idpf_rxq_group, rsrc->num_rxq_grp,
+				      GFP_KERNEL);
 	if (!rsrc->rxq_grps)
 		return -ENOMEM;

@@ -1821,9 +1820,8 @@ static int idpf_rxq_group_alloc(struct idpf_vport *vport,
 		if (!idpf_is_queue_model_split(rsrc->rxq_model)) {
 			rx_qgrp->singleq.num_rxq = num_rxq;
 			for (unsigned int j = 0; j < num_rxq; j++) {
-				rx_qgrp->singleq.rxqs[j] =
-						kzalloc(sizeof(*rx_qgrp->singleq.rxqs[j]),
-							GFP_KERNEL);
+				rx_qgrp->singleq.rxqs[j] = kzalloc_obj(*rx_qgrp->singleq.rxqs[j],
+								       GFP_KERNEL);
 				if (!rx_qgrp->singleq.rxqs[j]) {
 					err = -ENOMEM;
 					goto err_alloc;
@@ -1835,17 +1833,16 @@ static int idpf_rxq_group_alloc(struct idpf_vport *vport,

 		for (unsigned int j = 0; j < num_rxq; j++) {
 			rx_qgrp->splitq.rxq_sets[j] =
-				kzalloc(sizeof(struct idpf_rxq_set),
-					GFP_KERNEL);
+				kzalloc_obj(struct idpf_rxq_set, GFP_KERNEL);
 			if (!rx_qgrp->splitq.rxq_sets[j]) {
 				err = -ENOMEM;
 				goto err_alloc;
 			}
 		}

-		rx_qgrp->splitq.bufq_sets = kcalloc(rsrc->num_bufqs_per_qgrp,
-						    sizeof(struct idpf_bufq_set),
-						    GFP_KERNEL);
+		rx_qgrp->splitq.bufq_sets = kzalloc_objs(struct idpf_bufq_set,
+							 rsrc->num_bufqs_per_qgrp,
+							 GFP_KERNEL);
 		if (!rx_qgrp->splitq.bufq_sets) {
 			err = -ENOMEM;
 			goto err_alloc;
@@ -1880,9 +1877,9 @@ static int idpf_rxq_group_alloc(struct idpf_vport *vport,
 					rsrc->bufq_desc_count[j];
 				idpf_queue_set(GEN_CHK, refillq);
 				idpf_queue_set(RFL_GEN_CHK, refillq);
-				refillq->ring = kcalloc(refillq->desc_count,
-							sizeof(*refillq->ring),
-							GFP_KERNEL);
+				refillq->ring = kzalloc_objs(*refillq->ring,
+							     refillq->desc_count,
+							     GFP_KERNEL);
 				if (!refillq->ring) {
 					err = -ENOMEM;
 					goto err_alloc;
@@ -4567,8 +4564,8 @@ int idpf_vport_intr_alloc(struct idpf_vport *vport,

 	user_config = &vport->adapter->vport_config[idx]->user_config;

-	rsrc->q_vectors = kcalloc(rsrc->num_q_vectors,
-				  sizeof(struct idpf_q_vector), GFP_KERNEL);
+	rsrc->q_vectors = kzalloc_objs(struct idpf_q_vector,
+				       rsrc->num_q_vectors, GFP_KERNEL);
 	if (!rsrc->q_vectors)
 		return -ENOMEM;

@@ -4595,37 +4592,34 @@ int idpf_vport_intr_alloc(struct idpf_vport *vport,
 		q_vector->rx_intr_mode = q_coal->rx_intr_mode;
 		q_vector->rx_itr_idx = VIRTCHNL2_ITR_IDX_0;

-		q_vector->tx = kcalloc(txqs_per_vector, sizeof(*q_vector->tx),
-				       GFP_KERNEL);
+		q_vector->tx = kzalloc_objs(*q_vector->tx, txqs_per_vector,
+					    GFP_KERNEL);
 		if (!q_vector->tx)
 			goto error;

-		q_vector->rx = kcalloc(rxqs_per_vector, sizeof(*q_vector->rx),
-				       GFP_KERNEL);
+		q_vector->rx = kzalloc_objs(*q_vector->rx, rxqs_per_vector,
+					    GFP_KERNEL);
 		if (!q_vector->rx)
 			goto error;

 		if (!idpf_is_queue_model_split(rsrc->rxq_model))
 			continue;

-		q_vector->bufq = kcalloc(bufqs_per_vector,
-					 sizeof(*q_vector->bufq),
-					 GFP_KERNEL);
+		q_vector->bufq = kzalloc_objs(*q_vector->bufq, bufqs_per_vector,
+					      GFP_KERNEL);
 		if (!q_vector->bufq)
 			goto error;

-		q_vector->complq = kcalloc(complqs_per_vector,
-					   sizeof(*q_vector->complq),
-					   GFP_KERNEL);
+		q_vector->complq = kzalloc_objs(*q_vector->complq,
+						complqs_per_vector, GFP_KERNEL);
 		if (!q_vector->complq)
 			goto error;

 		if (!rsrc->xdp_txq_offset)
 			continue;

-		q_vector->xsksq = kcalloc(rxqs_per_vector,
-					  sizeof(*q_vector->xsksq),
-					  GFP_KERNEL);
+		q_vector->xsksq = kzalloc_objs(*q_vector->xsksq,
+					       rxqs_per_vector, GFP_KERNEL);
 		if (!q_vector->xsksq)
 			goto error;
 	}
diff --git a/drivers/net/ethernet/intel/idpf/idpf_vf_dev.c b/drivers/net/ethernet/intel/idpf/idpf_vf_dev.c
index 7527b967e2e7..57559a2bc9dd 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_vf_dev.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_vf_dev.c
@@ -82,8 +82,7 @@ static int idpf_vf_intr_reg_init(struct idpf_vport *vport,
 	u16 total_vecs;

 	total_vecs = idpf_get_reserved_vecs(vport->adapter);
-	reg_vals = kcalloc(total_vecs, sizeof(struct idpf_vec_regs),
-			   GFP_KERNEL);
+	reg_vals = kzalloc_objs(struct idpf_vec_regs, total_vecs, GFP_KERNEL);
 	if (!reg_vals)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
index d46affaf7185..f1a8ae9d8118 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
@@ -132,7 +132,7 @@ static int idpf_mb_clean(struct idpf_adapter *adapter,
 	struct idpf_dma_mem *dma_mem;
 	int err;

-	q_msg = kcalloc(num_q_msg, sizeof(struct idpf_ctlq_msg *), GFP_ATOMIC);
+	q_msg = kzalloc_objs(struct idpf_ctlq_msg *, num_q_msg, GFP_ATOMIC);
 	if (!q_msg)
 		return -ENOMEM;

@@ -238,11 +238,11 @@ int idpf_send_mb_msg(struct idpf_adapter *adapter, struct idpf_ctlq_info *asq,
 	if (err)
 		return err;

-	ctlq_msg = kzalloc(sizeof(*ctlq_msg), GFP_ATOMIC);
+	ctlq_msg = kzalloc_obj(*ctlq_msg, GFP_ATOMIC);
 	if (!ctlq_msg)
 		return -ENOMEM;

-	dma_mem = kzalloc(sizeof(*dma_mem), GFP_ATOMIC);
+	dma_mem = kzalloc_obj(*dma_mem, GFP_ATOMIC);
 	if (!dma_mem) {
 		err = -ENOMEM;
 		goto dma_mem_error;
@@ -740,7 +740,7 @@ struct idpf_queue_set *idpf_alloc_queue_set(struct idpf_adapter *adapter,
 {
 	struct idpf_queue_set *qp;

-	qp = kzalloc(struct_size(qp, qs, num), GFP_KERNEL);
+	qp = kzalloc_flex(*qp, qs, num, GFP_KERNEL);
 	if (!qp)
 		return NULL;

@@ -1059,7 +1059,7 @@ static int idpf_send_get_lan_memory_regions(struct idpf_adapter *adapter)
 		return -EINVAL;

 	hw = &adapter->hw;
-	hw->lan_regs = kcalloc(num_regions, sizeof(*hw->lan_regs), GFP_KERNEL);
+	hw->lan_regs = kzalloc_objs(*hw->lan_regs, num_regions, GFP_KERNEL);
 	if (!hw->lan_regs)
 		return -ENOMEM;

@@ -1091,8 +1091,7 @@ static int idpf_calc_remaining_mmio_regs(struct idpf_adapter *adapter)
 	struct idpf_hw *hw = &adapter->hw;

 	hw->num_lan_regs = IDPF_MMIO_MAP_FALLBACK_MAX_REMAINING;
-	hw->lan_regs = kcalloc(hw->num_lan_regs, sizeof(*hw->lan_regs),
-			       GFP_KERNEL);
+	hw->lan_regs = kzalloc_objs(*hw->lan_regs, hw->num_lan_regs, GFP_KERNEL);
 	if (!hw->lan_regs)
 		return -ENOMEM;

@@ -1291,8 +1290,8 @@ idpf_vport_init_queue_reg_chunks(struct idpf_vport_config *vport_config,

 	kfree(q_info->queue_chunks);

-	q_info->queue_chunks = kcalloc(num_chunks, sizeof(*q_info->queue_chunks),
-				       GFP_KERNEL);
+	q_info->queue_chunks = kzalloc_objs(*q_info->queue_chunks, num_chunks,
+					    GFP_KERNEL);
 	if (!q_info->queue_chunks) {
 		q_info->num_chunks = 0;
 		return -ENOMEM;
@@ -1845,7 +1844,7 @@ static int idpf_send_config_tx_queue_set_msg(const struct idpf_queue_set *qs)
 		.chunk_sz	= sizeof(*qi),
 	};

-	qi = kcalloc(qs->num, sizeof(*qi), GFP_KERNEL);
+	qi = kzalloc_objs(*qi, qs->num, GFP_KERNEL);
 	if (!qi)
 		return -ENOMEM;

@@ -2034,7 +2033,7 @@ static int idpf_send_config_rx_queue_set_msg(const struct idpf_queue_set *qs)
 		.chunk_sz	= sizeof(*qi),
 	};

-	qi = kcalloc(qs->num, sizeof(*qi), GFP_KERNEL);
+	qi = kzalloc_objs(*qi, qs->num, GFP_KERNEL);
 	if (!qi)
 		return -ENOMEM;

@@ -2161,7 +2160,7 @@ static int idpf_send_ena_dis_queue_set_msg(const struct idpf_queue_set *qs,
 		.num_chunks	= qs->num,
 	};

-	qc = kcalloc(qs->num, sizeof(*qc), GFP_KERNEL);
+	qc = kzalloc_objs(*qc, qs->num, GFP_KERNEL);
 	if (!qc)
 		return -ENOMEM;

@@ -2328,7 +2327,7 @@ idpf_send_map_unmap_queue_set_vector_msg(const struct idpf_queue_set *qs,
 	};
 	bool split;

-	vqv = kcalloc(qs->num, sizeof(*vqv), GFP_KERNEL);
+	vqv = kzalloc_objs(*vqv, qs->num, GFP_KERNEL);
 	if (!vqv)
 		return -ENOMEM;

@@ -3198,16 +3197,16 @@ static int idpf_send_get_rx_ptype_msg(struct idpf_adapter *adapter)
 	u16 next_ptype_id = 0;
 	ssize_t reply_sz;

-	singleq_pt_lkup = kcalloc(IDPF_RX_MAX_BASE_PTYPE,
-				  sizeof(*singleq_pt_lkup), GFP_KERNEL);
+	singleq_pt_lkup = kzalloc_objs(*singleq_pt_lkup, IDPF_RX_MAX_BASE_PTYPE,
+				       GFP_KERNEL);
 	if (!singleq_pt_lkup)
 		return -ENOMEM;

-	splitq_pt_lkup = kcalloc(max_ptype, sizeof(*splitq_pt_lkup), GFP_KERNEL);
+	splitq_pt_lkup = kzalloc_objs(*splitq_pt_lkup, max_ptype, GFP_KERNEL);
 	if (!splitq_pt_lkup)
 		return -ENOMEM;

-	get_ptype_info = kzalloc(sizeof(*get_ptype_info), GFP_KERNEL);
+	get_ptype_info = kzalloc_obj(*get_ptype_info, GFP_KERNEL);
 	if (!get_ptype_info)
 		return -ENOMEM;

@@ -3435,15 +3434,13 @@ static int idpf_vport_params_buf_alloc(struct idpf_adapter *adapter)
 {
 	u16 num_max_vports = idpf_get_max_vports(adapter);

-	adapter->vport_params_reqd = kcalloc(num_max_vports,
-					     sizeof(*adapter->vport_params_reqd),
-					     GFP_KERNEL);
+	adapter->vport_params_reqd = kzalloc_objs(*adapter->vport_params_reqd,
+						  num_max_vports, GFP_KERNEL);
 	if (!adapter->vport_params_reqd)
 		return -ENOMEM;

-	adapter->vport_params_recvd = kcalloc(num_max_vports,
-					      sizeof(*adapter->vport_params_recvd),
-					      GFP_KERNEL);
+	adapter->vport_params_recvd = kzalloc_objs(*adapter->vport_params_recvd,
+						   num_max_vports, GFP_KERNEL);
 	if (!adapter->vport_params_recvd)
 		goto err_mem;

@@ -3454,9 +3451,8 @@ static int idpf_vport_params_buf_alloc(struct idpf_adapter *adapter)
 	if (adapter->vport_config)
 		return 0;

-	adapter->vport_config = kcalloc(num_max_vports,
-					sizeof(*adapter->vport_config),
-					GFP_KERNEL);
+	adapter->vport_config = kzalloc_objs(*adapter->vport_config,
+					     num_max_vports, GFP_KERNEL);
 	if (!adapter->vport_config)
 		goto err_mem;

@@ -3488,7 +3484,8 @@ int idpf_vc_core_init(struct idpf_adapter *adapter)
 	int err = 0;

 	if (!adapter->vcxn_mngr) {
-		adapter->vcxn_mngr = kzalloc(sizeof(*adapter->vcxn_mngr), GFP_KERNEL);
+		adapter->vcxn_mngr = kzalloc_obj(*adapter->vcxn_mngr,
+						 GFP_KERNEL);
 		if (!adapter->vcxn_mngr) {
 			err = -ENOMEM;
 			goto init_failed;
@@ -3560,15 +3557,14 @@ int idpf_vc_core_init(struct idpf_adapter *adapter)
 	pci_sriov_set_totalvfs(adapter->pdev, idpf_get_max_vfs(adapter));
 	num_max_vports = idpf_get_max_vports(adapter);
 	adapter->max_vports = num_max_vports;
-	adapter->vports = kcalloc(num_max_vports, sizeof(*adapter->vports),
-				  GFP_KERNEL);
+	adapter->vports = kzalloc_objs(*adapter->vports, num_max_vports,
+				       GFP_KERNEL);
 	if (!adapter->vports)
 		return -ENOMEM;

 	if (!adapter->netdevs) {
-		adapter->netdevs = kcalloc(num_max_vports,
-					   sizeof(struct net_device *),
-					   GFP_KERNEL);
+		adapter->netdevs = kzalloc_objs(struct net_device *,
+						num_max_vports, GFP_KERNEL);
 		if (!adapter->netdevs) {
 			err = -ENOMEM;
 			goto err_netdev_alloc;
@@ -4335,8 +4331,8 @@ int idpf_add_del_mac_filters(struct idpf_adapter *adapter,
 	}

 	/* Fill all the new filters into virtchannel message */
-	mac_addr = kcalloc(total_filters, sizeof(struct virtchnl2_mac_addr),
-			   GFP_ATOMIC);
+	mac_addr = kzalloc_objs(struct virtchnl2_mac_addr, total_filters,
+				GFP_ATOMIC);
 	if (!mac_addr) {
 		spin_unlock_bh(&vport_config->mac_filter_list_lock);

diff --git a/drivers/net/ethernet/intel/idpf/idpf_virtchnl_ptp.c b/drivers/net/ethernet/intel/idpf/idpf_virtchnl_ptp.c
index 61cedb6f2854..2980164ba9fb 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_virtchnl_ptp.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_virtchnl_ptp.c
@@ -39,8 +39,8 @@ int idpf_ptp_get_caps(struct idpf_adapter *adapter)
 	u32 temp_offset;
 	int reply_sz;

-	recv_ptp_caps_msg = kzalloc(sizeof(struct virtchnl2_ptp_get_caps),
-				    GFP_KERNEL);
+	recv_ptp_caps_msg = kzalloc_obj(struct virtchnl2_ptp_get_caps,
+					GFP_KERNEL);
 	if (!recv_ptp_caps_msg)
 		return -ENOMEM;

@@ -395,7 +395,7 @@ int idpf_ptp_get_vport_tstamps_caps(struct idpf_vport *vport)
 	for (u16 i = 0; i < tstamp_caps->num_entries; i++) {
 		__le32 offset_l, offset_h;

-		ptp_tx_tstamp = kzalloc(sizeof(*ptp_tx_tstamp), GFP_KERNEL);
+		ptp_tx_tstamp = kzalloc_obj(*ptp_tx_tstamp, GFP_KERNEL);
 		if (!ptp_tx_tstamp) {
 			err = -ENOMEM;
 			goto err_free_ptp_tx_stamp_list;
diff --git a/drivers/net/ethernet/intel/idpf/xdp.c b/drivers/net/ethernet/intel/idpf/xdp.c
index 2b60f2a78684..a94bde86f84f 100644
--- a/drivers/net/ethernet/intel/idpf/xdp.c
+++ b/drivers/net/ethernet/intel/idpf/xdp.c
@@ -154,7 +154,7 @@ int idpf_xdpsqs_get(const struct idpf_vport *vport)
 	if (!idpf_xdp_enabled(vport))
 		return 0;

-	timers = kvcalloc(vport->num_xdp_txq, sizeof(*timers), GFP_KERNEL);
+	timers = kvzalloc_objs(*timers, vport->num_xdp_txq, GFP_KERNEL);
 	if (!timers)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index b507576b28b2..117d2a0ca620 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -2919,7 +2919,7 @@ static int igb_add_ethtool_nfc_entry(struct igb_adapter *adapter,
 	if ((fsp->flow_type & ~FLOW_EXT) != ETHER_FLOW)
 		return -EINVAL;

-	input = kzalloc(sizeof(*input), GFP_KERNEL);
+	input = kzalloc_obj(*input, GFP_KERNEL);
 	if (!input)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index dbea37269d2c..5dc97daf6ac1 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -2711,7 +2711,7 @@ static int igb_configure_clsflower(struct igb_adapter *adapter,
 		return -EINVAL;
 	}

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (!filter)
 		return -ENOMEM;

@@ -3775,8 +3775,9 @@ static int igb_enable_sriov(struct pci_dev *pdev, int num_vfs, bool reinit)
 	} else
 		adapter->vfs_allocated_count = num_vfs;

-	adapter->vf_data = kcalloc(adapter->vfs_allocated_count,
-				sizeof(struct vf_data_storage), GFP_KERNEL);
+	adapter->vf_data = kzalloc_objs(struct vf_data_storage,
+					adapter->vfs_allocated_count,
+					GFP_KERNEL);

 	/* if allocation failed then we do not support SR-IOV */
 	if (!adapter->vf_data) {
@@ -3794,9 +3795,8 @@ static int igb_enable_sriov(struct pci_dev *pdev, int num_vfs, bool reinit)
 			     (1 + IGB_PF_MAC_FILTERS_RESERVED +
 			      adapter->vfs_allocated_count);

-	adapter->vf_mac_list = kcalloc(num_vf_mac_filters,
-				       sizeof(struct vf_mac_filter),
-				       GFP_KERNEL);
+	adapter->vf_mac_list = kzalloc_objs(struct vf_mac_filter,
+					    num_vf_mac_filters, GFP_KERNEL);

 	mac_list = adapter->vf_mac_list;
 	INIT_LIST_HEAD(&adapter->vf_macs.l);
@@ -4091,9 +4091,8 @@ static int igb_sw_init(struct igb_adapter *adapter)
 	/* Assume MSI-X interrupts, will be checked during IRQ allocation */
 	adapter->flags |= IGB_FLAG_HAS_MSIX;

-	adapter->mac_table = kcalloc(hw->mac.rar_entry_count,
-				     sizeof(struct igb_mac_addr),
-				     GFP_KERNEL);
+	adapter->mac_table = kzalloc_objs(struct igb_mac_addr,
+					  hw->mac.rar_entry_count, GFP_KERNEL);
 	if (!adapter->mac_table)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c
index ac57212ab02b..72ea2e6ce15b 100644
--- a/drivers/net/ethernet/intel/igbvf/netdev.c
+++ b/drivers/net/ethernet/intel/igbvf/netdev.c
@@ -1017,8 +1017,7 @@ static void igbvf_set_interrupt_capability(struct igbvf_adapter *adapter)
 	int i;

 	/* we allocate 3 vectors, 1 for Tx, 1 for Rx, one for PF messages */
-	adapter->msix_entries = kcalloc(3, sizeof(struct msix_entry),
-					GFP_KERNEL);
+	adapter->msix_entries = kzalloc_objs(struct msix_entry, 3, GFP_KERNEL);
 	if (adapter->msix_entries) {
 		for (i = 0; i < 3; i++)
 			adapter->msix_entries[i].entry = i;
@@ -1098,11 +1097,11 @@ static int igbvf_alloc_queues(struct igbvf_adapter *adapter)
 {
 	struct net_device *netdev = adapter->netdev;

-	adapter->tx_ring = kzalloc(sizeof(struct igbvf_ring), GFP_KERNEL);
+	adapter->tx_ring = kzalloc_obj(struct igbvf_ring, GFP_KERNEL);
 	if (!adapter->tx_ring)
 		return -ENOMEM;

-	adapter->rx_ring = kzalloc(sizeof(struct igbvf_ring), GFP_KERNEL);
+	adapter->rx_ring = kzalloc_obj(struct igbvf_ring, GFP_KERNEL);
 	if (!adapter->rx_ring) {
 		kfree(adapter->tx_ring);
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 3172cdbca9cc..35b74213ca8b 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -1395,7 +1395,7 @@ static int igc_ethtool_add_nfc_rule(struct igc_adapter *adapter,
 		return -EINVAL;
 	}

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/igc/igc_leds.c b/drivers/net/ethernet/intel/igc/igc_leds.c
index 3929b25b6ae6..d6e011695adc 100644
--- a/drivers/net/ethernet/intel/igc/igc_leds.c
+++ b/drivers/net/ethernet/intel/igc/igc_leds.c
@@ -268,7 +268,7 @@ int igc_led_setup(struct igc_adapter *adapter)

 	mutex_init(&adapter->led_mutex);

-	leds = kcalloc(IGC_NUM_LEDS, sizeof(*leds), GFP_KERNEL);
+	leds = kzalloc_objs(*leds, IGC_NUM_LEDS, GFP_KERNEL);
 	if (!leds)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index 89a321a344d2..73d841e63d2d 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -4633,8 +4633,8 @@ static void igc_set_interrupt_capability(struct igc_adapter *adapter,
 	/* add 1 vector for link status interrupts */
 	numvecs++;

-	adapter->msix_entries = kcalloc(numvecs, sizeof(struct msix_entry),
-					GFP_KERNEL);
+	adapter->msix_entries = kzalloc_objs(struct msix_entry, numvecs,
+				             GFP_KERNEL);

 	if (!adapter->msix_entries)
 		return;
@@ -4863,8 +4863,7 @@ static int igc_alloc_q_vector(struct igc_adapter *adapter,
 	/* allocate q_vector and rings */
 	q_vector = adapter->q_vector[v_idx];
 	if (!q_vector)
-		q_vector = kzalloc(struct_size(q_vector, ring, ring_count),
-				   GFP_KERNEL);
+		q_vector = kzalloc_flex(*q_vector, ring, ring_count, GFP_KERNEL);
 	else
 		memset(q_vector, 0, struct_size(q_vector, ring, ring_count));
 	if (!q_vector)
diff --git a/drivers/net/ethernet/intel/ixgbe/devlink/devlink.c b/drivers/net/ethernet/intel/ixgbe/devlink/devlink.c
index d227f4d2a2d1..165a8f12745f 100644
--- a/drivers/net/ethernet/intel/ixgbe/devlink/devlink.c
+++ b/drivers/net/ethernet/intel/ixgbe/devlink/devlink.c
@@ -318,7 +318,7 @@ static int ixgbe_devlink_info_get(struct devlink *devlink,
 	struct ixgbe_info_ctx *ctx;
 	int err;

-	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
index 3dd5a16a14df..0ecc4f7d0288 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
@@ -516,8 +516,8 @@ static int ixgbe_dcbnl_ieee_setets(struct net_device *dev,
 		return -EINVAL;

 	if (!adapter->ixgbe_ieee_ets) {
-		adapter->ixgbe_ieee_ets = kmalloc(sizeof(struct ieee_ets),
-						  GFP_KERNEL);
+		adapter->ixgbe_ieee_ets = kmalloc_obj(struct ieee_ets,
+						      GFP_KERNEL);
 		if (!adapter->ixgbe_ieee_ets)
 			return -ENOMEM;

@@ -593,8 +593,8 @@ static int ixgbe_dcbnl_ieee_setpfc(struct net_device *dev,
 		return -EINVAL;

 	if (!adapter->ixgbe_ieee_pfc) {
-		adapter->ixgbe_ieee_pfc = kmalloc(sizeof(struct ieee_pfc),
-						  GFP_KERNEL);
+		adapter->ixgbe_ieee_pfc = kmalloc_obj(struct ieee_pfc,
+						      GFP_KERNEL);
 		if (!adapter->ixgbe_ieee_pfc)
 			return -ENOMEM;
 	}
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c
index c2f8189a0738..f8a4331e8fe3 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c
@@ -1285,7 +1285,7 @@ int ixgbe_update_link_info(struct ixgbe_hw *hw)
 	if (!(li->link_info & IXGBE_ACI_MEDIA_AVAILABLE))
 		return 0;

-	pcaps =	kzalloc(sizeof(*pcaps), GFP_KERNEL);
+	pcaps = kzalloc_obj(*pcaps, GFP_KERNEL);
 	if (!pcaps)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index bb4b53fee234..56aabaa5caec 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -2981,7 +2981,7 @@ static int ixgbe_add_ethtool_fdir_entry(struct ixgbe_adapter *adapter,
 		return -EINVAL;
 	}

-	input = kzalloc(sizeof(*input), GFP_ATOMIC);
+	input = kzalloc_obj(*input, GFP_ATOMIC);
 	if (!input)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_fw_update.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_fw_update.c
index e5479fc07a07..c44c9bf53cc4 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_fw_update.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_fw_update.c
@@ -516,7 +516,7 @@ int ixgbe_get_pending_updates(struct ixgbe_adapter *adapter, u8 *pending,
 	struct ixgbe_hw *hw = &adapter->hw;
 	int err;

-	dev_caps = kzalloc(sizeof(*dev_caps), GFP_KERNEL);
+	dev_caps = kzalloc_obj(*dev_caps, GFP_KERNEL);
 	if (!dev_caps)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
index d1f4073b36f9..6da3e52cea7a 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
@@ -904,7 +904,7 @@ int ixgbe_ipsec_vf_add_sa(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
 		goto err_out;
 	}

-	xs = kzalloc(sizeof(*xs), GFP_ATOMIC);
+	xs = kzalloc_obj(*xs, GFP_ATOMIC);
 	if (unlikely(!xs)) {
 		err = -ENOMEM;
 		goto err_out;
@@ -1233,7 +1233,7 @@ void ixgbe_init_ipsec_offload(struct ixgbe_adapter *adapter)
 	if (t_dis || r_dis)
 		return;

-	ipsec = kzalloc(sizeof(*ipsec), GFP_KERNEL);
+	ipsec = kzalloc_obj(*ipsec, GFP_KERNEL);
 	if (!ipsec)
 		goto err1;
 	hash_init(ipsec->rx_sa_list);
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
index a1d04914fbbc..f5c00cf57d43 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
@@ -768,9 +768,8 @@ static int ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter)
 	 */
 	vector_threshold = MIN_MSIX_COUNT;

-	adapter->msix_entries = kcalloc(vectors,
-					sizeof(struct msix_entry),
-					GFP_KERNEL);
+	adapter->msix_entries = kzalloc_objs(struct msix_entry, vectors,
+					     GFP_KERNEL);
 	if (!adapter->msix_entries)
 		return -ENOMEM;

@@ -859,8 +858,7 @@ static int ixgbe_alloc_q_vector(struct ixgbe_adapter *adapter,
 	q_vector = kzalloc_node(struct_size(q_vector, ring, ring_count),
 				GFP_KERNEL, node);
 	if (!q_vector)
-		q_vector = kzalloc(struct_size(q_vector, ring, ring_count),
-				   GFP_KERNEL);
+		q_vector = kzalloc_flex(*q_vector, ring, ring_count, GFP_KERNEL);
 	if (!q_vector)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index c58051e4350b..59b3acb62134 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -6895,8 +6895,8 @@ static int ixgbe_sw_init(struct ixgbe_adapter *adapter,
 #endif /* IXGBE_FCOE */

 	/* initialize static ixgbe jump table entries */
-	adapter->jump_tables[0] = kzalloc(sizeof(*adapter->jump_tables[0]),
-					  GFP_KERNEL);
+	adapter->jump_tables[0] = kzalloc_obj(*adapter->jump_tables[0],
+					      GFP_KERNEL);
 	if (!adapter->jump_tables[0])
 		return -ENOMEM;
 	adapter->jump_tables[0]->mat = ixgbe_ipv4_fields;
@@ -6904,9 +6904,8 @@ static int ixgbe_sw_init(struct ixgbe_adapter *adapter,
 	for (i = 1; i < IXGBE_MAX_LINK_HANDLE; i++)
 		adapter->jump_tables[i] = NULL;

-	adapter->mac_table = kcalloc(hw->mac.num_rar_entries,
-				     sizeof(struct ixgbe_mac_addr),
-				     GFP_KERNEL);
+	adapter->mac_table = kzalloc_objs(struct ixgbe_mac_addr,
+					  hw->mac.num_rar_entries, GFP_KERNEL);
 	if (!adapter->mac_table)
 		return -ENOMEM;

@@ -10273,15 +10272,15 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,
 			    (__force u32)cls->knode.sel->offmask)
 				return err;

-			jump = kzalloc(sizeof(*jump), GFP_KERNEL);
+			jump = kzalloc_obj(*jump, GFP_KERNEL);
 			if (!jump)
 				return -ENOMEM;
-			input = kzalloc(sizeof(*input), GFP_KERNEL);
+			input = kzalloc_obj(*input, GFP_KERNEL);
 			if (!input) {
 				err = -ENOMEM;
 				goto free_jump;
 			}
-			mask = kzalloc(sizeof(*mask), GFP_KERNEL);
+			mask = kzalloc_obj(*mask, GFP_KERNEL);
 			if (!mask) {
 				err = -ENOMEM;
 				goto free_input;
@@ -10305,10 +10304,10 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,
 		return 0;
 	}

-	input = kzalloc(sizeof(*input), GFP_KERNEL);
+	input = kzalloc_obj(*input, GFP_KERNEL);
 	if (!input)
 		return -ENOMEM;
-	mask = kzalloc(sizeof(*mask), GFP_KERNEL);
+	mask = kzalloc_obj(*mask, GFP_KERNEL);
 	if (!mask) {
 		err = -ENOMEM;
 		goto free_input;
@@ -10786,7 +10785,7 @@ static void *ixgbe_fwd_add(struct net_device *pdev, struct net_device *vdev)
 			return ERR_PTR(-ENOMEM);
 	}

-	accel = kzalloc(sizeof(*accel), GFP_KERNEL);
+	accel = kzalloc_obj(*accel, GFP_KERNEL);
 	if (!accel)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
index ee133d6749b3..40dfdf62ab33 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
@@ -37,8 +37,7 @@ static inline void ixgbe_alloc_vf_macvlans(struct ixgbe_adapter *adapter,
 	if (!num_vf_macvlans)
 		return;

-	mv_list = kcalloc(num_vf_macvlans, sizeof(struct vf_macvlans),
-			  GFP_KERNEL);
+	mv_list = kzalloc_objs(struct vf_macvlans, num_vf_macvlans, GFP_KERNEL);
 	if (mv_list) {
 		for (i = 0; i < num_vf_macvlans; i++) {
 			mv_list[i].vf = -1;
@@ -65,8 +64,8 @@ static int __ixgbe_enable_sriov(struct ixgbe_adapter *adapter,
 			  IXGBE_FLAG_VMDQ_ENABLED;

 	/* Allocate memory for per VF control structures */
-	adapter->vfinfo = kcalloc(num_vfs, sizeof(struct vf_data_storage),
-				  GFP_KERNEL);
+	adapter->vfinfo = kzalloc_objs(struct vf_data_storage, num_vfs,
+				       GFP_KERNEL);
 	if (!adapter->vfinfo)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/ixgbevf/ipsec.c b/drivers/net/ethernet/intel/ixgbevf/ipsec.c
index fce35924ff8b..780ebcdbd4a7 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ipsec.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ipsec.c
@@ -628,7 +628,7 @@ void ixgbevf_init_ipsec_offload(struct ixgbevf_adapter *adapter)
 		return;
 	}

-	ipsec = kzalloc(sizeof(*ipsec), GFP_KERNEL);
+	ipsec = kzalloc_obj(*ipsec, GFP_KERNEL);
 	if (!ipsec)
 		goto err1;
 	hash_init(ipsec->rx_sa_list);
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index d5ce20f47def..38af1f35b339 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -2716,8 +2716,8 @@ static int ixgbevf_set_interrupt_capability(struct ixgbevf_adapter *adapter)
 	v_budget = min_t(int, v_budget, num_online_cpus());
 	v_budget += NON_Q_VECTORS;

-	adapter->msix_entries = kcalloc(v_budget,
-					sizeof(struct msix_entry), GFP_KERNEL);
+	adapter->msix_entries = kzalloc_objs(struct msix_entry, v_budget,
+					     GFP_KERNEL);
 	if (!adapter->msix_entries)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/intel/libie/fwlog.c b/drivers/net/ethernet/intel/libie/fwlog.c
index f39cc11cb7c5..5b69a26ef2bd 100644
--- a/drivers/net/ethernet/intel/libie/fwlog.c
+++ b/drivers/net/ethernet/intel/libie/fwlog.c
@@ -153,7 +153,7 @@ static void libie_fwlog_realloc_rings(struct libie_fwlog *fwlog, int index)
 	 * old rings and buffers. that way if we don't have enough
 	 * memory then we at least have what we had before
 	 */
-	ring.rings = kcalloc(ring_size, sizeof(*ring.rings), GFP_KERNEL);
+	ring.rings = kzalloc_objs(*ring.rings, ring_size, GFP_KERNEL);
 	if (!ring.rings)
 		return;

@@ -208,7 +208,7 @@ libie_aq_fwlog_set(struct libie_fwlog *fwlog,
 	int status;
 	int i;

-	fw_modules = kcalloc(num_entries, sizeof(*fw_modules), GFP_KERNEL);
+	fw_modules = kzalloc_objs(*fw_modules, num_entries, GFP_KERNEL);
 	if (!fw_modules)
 		return -ENOMEM;

@@ -838,8 +838,8 @@ static void libie_debugfs_fwlog_init(struct libie_fwlog *fwlog,
 	/* allocate space for this first because if it fails then we don't
 	 * need to unwind
 	 */
-	fw_modules = kcalloc(LIBIE_NR_FW_LOG_MODULES, sizeof(*fw_modules),
-			     GFP_KERNEL);
+	fw_modules = kzalloc_objs(*fw_modules, LIBIE_NR_FW_LOG_MODULES,
+				  GFP_KERNEL);
 	if (!fw_modules)
 		return;

@@ -978,7 +978,7 @@ static void libie_fwlog_set_supported(struct libie_fwlog *fwlog)

 	fwlog->supported = false;

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return;

@@ -1013,9 +1013,9 @@ int libie_fwlog_init(struct libie_fwlog *fwlog, struct libie_fwlog_api *api)
 		if (status)
 			return status;

-		fwlog->ring.rings = kcalloc(LIBIE_FWLOG_RING_SIZE_DFLT,
-					    sizeof(*fwlog->ring.rings),
-					    GFP_KERNEL);
+		fwlog->ring.rings = kzalloc_objs(*fwlog->ring.rings,
+						 LIBIE_FWLOG_RING_SIZE_DFLT,
+						 GFP_KERNEL);
 		if (!fwlog->ring.rings) {
 			dev_warn(&fwlog->pdev->dev, "Unable to allocate memory for FW log rings\n");
 			return -ENOMEM;
diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c
index d8be0e4dcb07..25ec5f757c68 100644
--- a/drivers/net/ethernet/jme.c
+++ b/drivers/net/ethernet/jme.c
@@ -576,9 +576,9 @@ jme_setup_tx_resources(struct jme_adapter *jme)
 	atomic_set(&txring->next_to_clean, 0);
 	atomic_set(&txring->nr_free, jme->tx_ring_size);

-	txring->bufinf		= kcalloc(jme->tx_ring_size,
-						sizeof(struct jme_buffer_info),
-						GFP_ATOMIC);
+	txring->bufinf		= kzalloc_objs(struct jme_buffer_info,
+						     jme->tx_ring_size,
+						     GFP_ATOMIC);
 	if (unlikely(!(txring->bufinf)))
 		goto err_free_txring;

@@ -819,9 +819,9 @@ jme_setup_rx_resources(struct jme_adapter *jme)
 	rxring->next_to_use	= 0;
 	atomic_set(&rxring->next_to_clean, 0);

-	rxring->bufinf		= kcalloc(jme->rx_ring_size,
-						sizeof(struct jme_buffer_info),
-						GFP_ATOMIC);
+	rxring->bufinf		= kzalloc_objs(struct jme_buffer_info,
+						     jme->rx_ring_size,
+						     GFP_ATOMIC);
 	if (unlikely(!(rxring->bufinf)))
 		goto err_free_rxring;

diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
index 0ab52c57c648..1bc31e0b443d 100644
--- a/drivers/net/ethernet/marvell/mv643xx_eth.c
+++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
@@ -1967,8 +1967,7 @@ static int rxq_init(struct mv643xx_eth_private *mp, int index)
 	memset(rxq->rx_desc_area, 0, size);

 	rxq->rx_desc_area_size = size;
-	rxq->rx_skb = kcalloc(rxq->rx_ring_size, sizeof(*rxq->rx_skb),
-				    GFP_KERNEL);
+	rxq->rx_skb = kzalloc_objs(*rxq->rx_skb, rxq->rx_ring_size, GFP_KERNEL);
 	if (rxq->rx_skb == NULL)
 		goto out_free;

diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index 7af44f858fa3..c058df3bb85f 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -3554,7 +3554,7 @@ static int mvneta_txq_sw_init(struct mvneta_port *pp,

 	txq->last_desc = txq->size - 1;

-	txq->buf = kmalloc_array(txq->size, sizeof(*txq->buf), GFP_KERNEL);
+	txq->buf = kmalloc_objs(*txq->buf, txq->size, GFP_KERNEL);
 	if (!txq->buf)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
index c116da7d7f18..83ba45f54180 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c
@@ -1367,7 +1367,7 @@ int mvpp2_ethtool_cls_rule_ins(struct mvpp2_port *port,
 	if (info->fs.location >= MVPP2_N_RFS_ENTRIES_PER_FLOW)
 		return -EINVAL;

-	efs = kzalloc(sizeof(*efs), GFP_KERNEL);
+	efs = kzalloc_obj(*efs, GFP_KERNEL);
 	if (!efs)
 		return -ENOMEM;

@@ -1503,8 +1503,7 @@ static int mvpp22_rss_context_create(struct mvpp2_port *port, u32 *rss_ctx)
 	if (ctx == MVPP22_N_RSS_TABLES)
 		return -EINVAL;

-	priv->rss_tables[ctx] = kzalloc(sizeof(*priv->rss_tables[ctx]),
-					GFP_KERNEL);
+	priv->rss_tables[ctx] = kzalloc_obj(*priv->rss_tables[ctx], GFP_KERNEL);
 	if (!priv->rss_tables[ctx])
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_debugfs.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_debugfs.c
index 0f9bc4f8ec3b..2aef0c77f4d6 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_debugfs.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_debugfs.c
@@ -706,7 +706,7 @@ void mvpp2_dbgfs_init(struct mvpp2 *priv, const char *name)
 	mvpp2_dir = debugfs_create_dir(name, mvpp2_root);

 	priv->dbgfs_dir = mvpp2_dir;
-	priv->dbgfs_entries = kzalloc(sizeof(*priv->dbgfs_entries), GFP_KERNEL);
+	priv->dbgfs_entries = kzalloc_obj(*priv->dbgfs_entries, GFP_KERNEL);
 	if (!priv->dbgfs_entries)
 		goto err;

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index 33426fded919..58f77972c86a 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -3151,9 +3151,8 @@ static int mvpp2_txq_init(struct mvpp2_port *port,
 	for (thread = 0; thread < port->priv->nthreads; thread++) {
 		txq_pcpu = per_cpu_ptr(txq->pcpu, thread);
 		txq_pcpu->size = txq->size;
-		txq_pcpu->buffs = kmalloc_array(txq_pcpu->size,
-						sizeof(*txq_pcpu->buffs),
-						GFP_KERNEL);
+		txq_pcpu->buffs = kmalloc_objs(*txq_pcpu->buffs, txq_pcpu->size,
+					       GFP_KERNEL);
 		if (!txq_pcpu->buffs)
 			return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_main.c b/drivers/net/ethernet/marvell/octeon_ep/octep_main.c
index 57db7ea2f5be..fd9abcfeb4e0 100644
--- a/drivers/net/ethernet/marvell/octeon_ep/octep_main.c
+++ b/drivers/net/ethernet/marvell/octeon_ep/octep_main.c
@@ -115,8 +115,8 @@ static int octep_enable_msix_range(struct octep_device *oct)

 	/* Generic interrupts apart from input/output queues */
 	num_msix = oct->num_oqs + CFG_GET_NON_IOQ_MSIX(oct->conf);
-	oct->msix_entries = kcalloc(num_msix,
-				    sizeof(struct msix_entry), GFP_KERNEL);
+	oct->msix_entries = kzalloc_objs(struct msix_entry, num_msix,
+					 GFP_KERNEL);
 	if (!oct->msix_entries)
 		goto msix_alloc_err;

@@ -1293,7 +1293,7 @@ int octep_device_setup(struct octep_device *oct)
 	int i, ret;

 	/* allocate memory for oct->conf */
-	oct->conf = kzalloc(sizeof(*oct->conf), GFP_KERNEL);
+	oct->conf = kzalloc_obj(*oct->conf, GFP_KERNEL);
 	if (!oct->conf)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c b/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c
index 1d9760b4b8f4..b794b517c304 100644
--- a/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c
+++ b/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c
@@ -113,7 +113,8 @@ static int octep_vf_enable_msix_range(struct octep_vf_device *oct)
 	/* Generic interrupts apart from input/output queues */
 	//num_msix = oct->num_oqs + CFG_GET_NON_IOQ_MSIX(oct->conf);
 	num_msix = oct->num_oqs;
-	oct->msix_entries = kcalloc(num_msix, sizeof(struct msix_entry), GFP_KERNEL);
+	oct->msix_entries = kzalloc_objs(struct msix_entry, num_msix,
+					 GFP_KERNEL);
 	if (!oct->msix_entries)
 		goto msix_alloc_err;

@@ -951,7 +952,7 @@ int octep_vf_device_setup(struct octep_vf_device *oct)
 	struct pci_dev *pdev = oct->pdev;

 	/* allocate memory for oct->conf */
-	oct->conf = kzalloc(sizeof(*oct->conf), GFP_KERNEL);
+	oct->conf = kzalloc_obj(*oct->conf, GFP_KERNEL);
 	if (!oct->conf)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cgx.c b/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
index fd4792e432bf..dc4537623578 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
@@ -1725,7 +1725,7 @@ static int cgx_lmac_init(struct cgx *cgx)
 		cgx->lmac_count = cgx->max_lmac_per_mac;

 	for (i = 0; i < cgx->lmac_count; i++) {
-		lmac = kzalloc(sizeof(struct lmac), GFP_KERNEL);
+		lmac = kzalloc_obj(struct lmac, GFP_KERNEL);
 		if (!lmac)
 			return -ENOMEM;
 		lmac->name = kcalloc(1, sizeof("cgx_fwi_xxx_yyy"), GFP_KERNEL);
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/mbox.c b/drivers/net/ethernet/marvell/octeontx2/af/mbox.c
index 75872d257eca..ad62be730bbc 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/mbox.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/mbox.c
@@ -133,7 +133,7 @@ int cn20k_mbox_setup(struct otx2_mbox *mbox, struct pci_dev *pdev,
 	mbox->reg_base = reg_base;
 	mbox->pdev = pdev;

-	mbox->dev = kcalloc(ndevs, sizeof(struct otx2_mbox_dev), GFP_KERNEL);
+	mbox->dev = kzalloc_objs(struct otx2_mbox_dev, ndevs, GFP_KERNEL);
 	if (!mbox->dev) {
 		otx2_mbox_destroy(mbox);
 		return -ENOMEM;
@@ -211,7 +211,7 @@ static int otx2_mbox_setup(struct otx2_mbox *mbox, struct pci_dev *pdev,
 	mbox->reg_base = reg_base;
 	mbox->pdev = pdev;

-	mbox->dev = kcalloc(ndevs, sizeof(struct otx2_mbox_dev), GFP_KERNEL);
+	mbox->dev = kzalloc_objs(struct otx2_mbox_dev, ndevs, GFP_KERNEL);
 	if (!mbox->dev) {
 		otx2_mbox_destroy(mbox);
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c b/drivers/net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c
index a80c8e7c94f2..d98b49f47970 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c
@@ -105,7 +105,7 @@ int mcs_add_intr_wq_entry(struct mcs *mcs, struct mcs_intr_event *event)
 	if (!(pfvf->intr_mask && event->intr_mask))
 		return 0;

-	qentry = kmalloc(sizeof(*qentry), GFP_ATOMIC);
+	qentry = kmalloc_obj(*qentry, GFP_ATOMIC);
 	if (!qentry)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/ptp.c b/drivers/net/ethernet/marvell/octeontx2/af/ptp.c
index 66749b3649c1..f38b5addd4d8 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/ptp.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/ptp.c
@@ -520,7 +520,7 @@ static int ptp_probe(struct pci_dev *pdev,
 	struct ptp *ptp;
 	int err;

-	ptp = kzalloc(sizeof(*ptp), GFP_KERNEL);
+	ptp = kzalloc_obj(*ptp, GFP_KERNEL);
 	if (!ptp) {
 		err = -ENOMEM;
 		goto error;
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu.c
index 8530df8b3fda..2e3b3345a362 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu.c
@@ -2516,7 +2516,7 @@ static int rvu_mbox_init(struct rvu *rvu, struct mbox_wq_info *mw,
 	if (!pf_bmap)
 		return -ENOMEM;

-	ng_rvu_mbox = kzalloc(sizeof(*ng_rvu_mbox), GFP_KERNEL);
+	ng_rvu_mbox = kzalloc_obj(*ng_rvu_mbox, GFP_KERNEL);
 	if (!ng_rvu_mbox) {
 		err = -ENOMEM;
 		goto free_bitmap;
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
index 3d91a34f8b57..b9980253dcb0 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
@@ -184,7 +184,7 @@ static int rvu_cgx_send_link_info(int cgx_id, int lmac_id, struct rvu *rvu)
 	unsigned long flags;
 	int err;

-	qentry = kmalloc(sizeof(*qentry), GFP_KERNEL);
+	qentry = kmalloc_obj(*qentry, GFP_KERNEL);
 	if (!qentry)
 		return -ENOMEM;

@@ -215,7 +215,7 @@ static int cgx_lmac_postevent(struct cgx_link_event *event, void *data)
 	struct rvu *rvu = data;

 	/* post event to the event queue */
-	qentry = kmalloc(sizeof(*qentry), GFP_ATOMIC);
+	qentry = kmalloc_obj(*qentry, GFP_ATOMIC);
 	if (!qentry)
 		return -ENOMEM;
 	qentry->link_event = *event;
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c
index 0f9953eaf1b0..71c411d8eb83 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c
@@ -494,12 +494,12 @@ static int rvu_nix_register_reporters(struct rvu_devlink *rvu_dl)
 	struct rvu_nix_event_ctx *nix_event_context;
 	struct rvu *rvu = rvu_dl->rvu;

-	rvu_reporters = kzalloc(sizeof(*rvu_reporters), GFP_KERNEL);
+	rvu_reporters = kzalloc_obj(*rvu_reporters, GFP_KERNEL);
 	if (!rvu_reporters)
 		return -ENOMEM;

 	rvu_dl->rvu_nix_health_reporter = rvu_reporters;
-	nix_event_context = kzalloc(sizeof(*nix_event_context), GFP_KERNEL);
+	nix_event_context = kzalloc_obj(*nix_event_context, GFP_KERNEL);
 	if (!nix_event_context)
 		return -ENOMEM;

@@ -1048,12 +1048,12 @@ static int rvu_npa_register_reporters(struct rvu_devlink *rvu_dl)
 	struct rvu_npa_event_ctx *npa_event_context;
 	struct rvu *rvu = rvu_dl->rvu;

-	rvu_reporters = kzalloc(sizeof(*rvu_reporters), GFP_KERNEL);
+	rvu_reporters = kzalloc_obj(*rvu_reporters, GFP_KERNEL);
 	if (!rvu_reporters)
 		return -ENOMEM;

 	rvu_dl->rvu_npa_health_reporter = rvu_reporters;
-	npa_event_context = kzalloc(sizeof(*npa_event_context), GFP_KERNEL);
+	npa_event_context = kzalloc_obj(*npa_event_context, GFP_KERNEL);
 	if (!npa_event_context)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
index 49f7ff5eddfc..0964a85b536f 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
@@ -2455,7 +2455,7 @@ static int nix_smq_flush(struct rvu *rvu, int blkaddr,
 	}

 	/* XOFF all TL2s whose parent TL1 matches SMQ tree TL1 */
-	smq_flush_ctx = kzalloc(sizeof(*smq_flush_ctx), GFP_KERNEL);
+	smq_flush_ctx = kzalloc_obj(*smq_flush_ctx, GFP_KERNEL);
 	if (!smq_flush_ctx)
 		return -ENOMEM;
 	nix_smq_flush_fill_ctx(rvu, blkaddr, smq, smq_flush_ctx);
@@ -3373,7 +3373,7 @@ static int nix_add_mce_list_entry(struct rvu *rvu,

 	mce_list = &elem->mcast_mce_list;
 	for (i = 0; i < num_entry; i++) {
-		mce = kzalloc(sizeof(*mce), GFP_KERNEL);
+		mce = kzalloc_obj(*mce, GFP_KERNEL);
 		if (!mce)
 			goto free_mce;

@@ -3435,7 +3435,7 @@ static int nix_update_mce_list_entry(struct nix_mce_list *mce_list,
 		return 0;

 	/* Add a new one to the list, at the tail */
-	mce = kzalloc(sizeof(*mce), GFP_KERNEL);
+	mce = kzalloc_obj(*mce, GFP_KERNEL);
 	if (!mce)
 		return -ENOMEM;
 	mce->pcifunc = pcifunc;
@@ -6420,7 +6420,7 @@ int rvu_mbox_handler_nix_mcast_grp_create(struct rvu *rvu,
 		return err;

 	mcast_grp = &nix_hw->mcast_grp;
-	elem = kzalloc(sizeof(*elem), GFP_KERNEL);
+	elem = kzalloc_obj(*elem, GFP_KERNEL);
 	if (!elem)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c
index b56395ac5a74..1b7dd4e771c7 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c
@@ -1297,7 +1297,7 @@ static int npc_install_flow(struct rvu *rvu, int blkaddr, u16 target,
 find_rule:
 	rule = rvu_mcam_find_rule(mcam, entry_index);
 	if (!rule) {
-		rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+		rule = kzalloc_obj(*rule, GFP_KERNEL);
 		if (!rule)
 			return -ENOMEM;
 		new = true;
@@ -1741,7 +1741,7 @@ int npc_install_mcam_drop_rule(struct rvu *rvu, int mcam_idx, u16 *counter_idx,
 	}

 	/* Add this entry to mcam rules list */
-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.c
index 999f6d93c7fe..7ed5750435c1 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.c
@@ -796,7 +796,7 @@ static int rvu_npc_exact_add_to_list(struct rvu *rvu, enum npc_exact_opc_type op
 		return -EFAULT;
 	}

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		rvu_npc_exact_free_id(rvu, *seq_id);
 		dev_err(rvu->dev, "%s: Memory allocation failed\n", __func__);
@@ -1896,7 +1896,7 @@ int rvu_npc_exact_init(struct rvu *rvu)
 	/* Set capability to true */
 	rvu->hw->cap.npc_exact_match_enabled = true;

-	table = kzalloc(sizeof(*table), GFP_KERNEL);
+	table = kzalloc_obj(*table, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_rep.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_rep.c
index 4415d0ce9aef..901f6fd40fd4 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_rep.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_rep.c
@@ -97,7 +97,7 @@ int rvu_mbox_handler_rep_event_notify(struct rvu *rvu, struct rep_event *req,
 {
 	struct rep_evtq_ent *qentry;

-	qentry = kmalloc(sizeof(*qentry), GFP_ATOMIC);
+	qentry = kmalloc_obj(*qentry, GFP_ATOMIC);
 	if (!qentry)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c b/drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c
index 060c715ebad0..5f90f38071da 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c
@@ -914,7 +914,7 @@ static struct cn10k_mcs_txsc *cn10k_mcs_create_txsc(struct otx2_nic *pfvf)
 	struct cn10k_mcs_txsc *txsc;
 	int ret;

-	txsc = kzalloc(sizeof(*txsc), GFP_KERNEL);
+	txsc = kzalloc_obj(*txsc, GFP_KERNEL);
 	if (!txsc)
 		return ERR_PTR(-ENOMEM);

@@ -987,7 +987,7 @@ static struct cn10k_mcs_rxsc *cn10k_mcs_create_rxsc(struct otx2_nic *pfvf)
 	struct cn10k_mcs_rxsc *rxsc;
 	int ret;

-	rxsc = kzalloc(sizeof(*rxsc), GFP_KERNEL);
+	rxsc = kzalloc_obj(*rxsc, GFP_KERNEL);
 	if (!rxsc)
 		return ERR_PTR(-ENOMEM);

@@ -1772,7 +1772,7 @@ int cn10k_mcs_init(struct otx2_nic *pfvf)
 	if (!test_bit(CN10K_HW_MACSEC, &pfvf->hw.cap_flag))
 		return 0;

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
index 75ebb17419c4..768503b255fb 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
@@ -1005,7 +1005,7 @@ int otx2_sq_init(struct otx2_nic *pfvf, u16 qidx, u16 sqb_aura)
 	}

 	sq->sqe_base = sq->sqe->base;
-	sq->sg = kcalloc(qset->sqe_cnt, sizeof(struct sg_list), GFP_KERNEL);
+	sq->sg = kzalloc_objs(struct sg_list, qset->sqe_cnt, GFP_KERNEL);
 	if (!sq->sg)
 		return -ENOMEM;

@@ -1585,7 +1585,7 @@ int otx2_sq_aura_pool_init(struct otx2_nic *pfvf)

 		sq = &qset->sq[qidx];
 		sq->sqb_count = 0;
-		sq->sqb_ptrs = kcalloc(num_sqbs, sizeof(*sq->sqb_ptrs), GFP_KERNEL);
+		sq->sqb_ptrs = kzalloc_objs(*sq->sqb_ptrs, num_sqbs, GFP_KERNEL);
 		if (!sq->sqb_ptrs) {
 			err = -ENOMEM;
 			goto err_mem;
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
index 64c6d9162ef6..f61730e8d73a 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
@@ -1063,7 +1063,7 @@ static int otx2_add_flow_with_pfmac(struct otx2_nic *pfvf,
 	struct otx2_flow *pf_mac;
 	struct ethhdr *eth_hdr;

-	pf_mac = kzalloc(sizeof(*pf_mac), GFP_KERNEL);
+	pf_mac = kzalloc_obj(*pf_mac, GFP_KERNEL);
 	if (!pf_mac)
 		return -ENOMEM;

@@ -1131,7 +1131,7 @@ int otx2_add_flow(struct otx2_nic *pfvf, struct ethtool_rxnfc *nfc)

 	flow = otx2_find_flow(pfvf, fsp->location);
 	if (!flow) {
-		flow = kzalloc(sizeof(*flow), GFP_KERNEL);
+		flow = kzalloc_obj(*flow, GFP_KERNEL);
 		if (!flow)
 			return -ENOMEM;
 		flow->location = fsp->location;
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
index 444bb67494ab..333071ac7598 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
@@ -1936,7 +1936,7 @@ int otx2_alloc_queue_mem(struct otx2_nic *pf)

 	pf->qset.cq_cnt = pf->hw.rx_queues + otx2_get_total_tx_queues(pf);

-	qset->napi = kcalloc(pf->hw.cint_cnt, sizeof(*cq_poll), GFP_KERNEL);
+	qset->napi = kzalloc_objs(*cq_poll, pf->hw.cint_cnt, GFP_KERNEL);
 	if (!qset->napi)
 		return -ENOMEM;

@@ -1945,18 +1945,18 @@ int otx2_alloc_queue_mem(struct otx2_nic *pf)
 	/* CQ size of SQ */
 	qset->sqe_cnt = qset->sqe_cnt ? qset->sqe_cnt : Q_COUNT(Q_SIZE_4K);

-	qset->cq = kcalloc(pf->qset.cq_cnt,
-			   sizeof(struct otx2_cq_queue), GFP_KERNEL);
+	qset->cq = kzalloc_objs(struct otx2_cq_queue, pf->qset.cq_cnt,
+				GFP_KERNEL);
 	if (!qset->cq)
 		goto err_free_mem;

-	qset->sq = kcalloc(otx2_get_total_tx_queues(pf),
-			   sizeof(struct otx2_snd_queue), GFP_KERNEL);
+	qset->sq = kzalloc_objs(struct otx2_snd_queue,
+				otx2_get_total_tx_queues(pf), GFP_KERNEL);
 	if (!qset->sq)
 		goto err_free_mem;

-	qset->rq = kcalloc(pf->hw.rx_queues,
-			   sizeof(struct otx2_rcv_queue), GFP_KERNEL);
+	qset->rq = kzalloc_objs(struct otx2_rcv_queue, pf->hw.rx_queues,
+				GFP_KERNEL);
 	if (!qset->rq)
 		goto err_free_mem;

diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c
index dedd586ed310..de9b90e498cc 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c
@@ -408,7 +408,7 @@ int otx2_ptp_init(struct otx2_nic *pfvf)
 	}
 	mutex_unlock(&pfvf->mbox.lock);

-	ptp_ptr = kzalloc(sizeof(*ptp_ptr), GFP_KERNEL);
+	ptp_ptr = kzalloc_obj(*ptp_ptr, GFP_KERNEL);
 	if (!ptp_ptr) {
 		err = -ENOMEM;
 		goto error;
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
index 26a08d2cfbb1..9b569e0d6222 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
@@ -1271,7 +1271,7 @@ static int otx2_tc_add_flow(struct otx2_nic *nic,
 	}

 	/* allocate memory for the new flow and it's node */
-	new_node = kzalloc(sizeof(*new_node), GFP_KERNEL);
+	new_node = kzalloc_obj(*new_node, GFP_KERNEL);
 	if (!new_node)
 		return -ENOMEM;
 	spin_lock_init(&new_node->lock);
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/qos.c b/drivers/net/ethernet/marvell/octeontx2/nic/qos.c
index 5765bac119f0..435c176c2643 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/qos.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/qos.c
@@ -407,7 +407,7 @@ otx2_qos_alloc_root(struct otx2_nic *pfvf)
 {
 	struct otx2_qos_node *node;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return ERR_PTR(-ENOMEM);

@@ -463,7 +463,7 @@ static int otx2_qos_alloc_txschq_node(struct otx2_nic *pfvf,

 	parent = node;
 	for (lvl = node->level - 1; lvl >= NIX_TXSCH_LVL_MDQ; lvl--) {
-		txschq_node = kzalloc(sizeof(*txschq_node), GFP_KERNEL);
+		txschq_node = kzalloc_obj(*txschq_node, GFP_KERNEL);
 		if (!txschq_node)
 			goto err_out;

@@ -508,7 +508,7 @@ otx2_qos_sw_create_leaf_node(struct otx2_nic *pfvf,
 	struct otx2_qos_node *node;
 	int err;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return ERR_PTR(-ENOMEM);

@@ -1045,7 +1045,7 @@ static int otx2_qos_root_add(struct otx2_nic *pfvf, u16 htb_maj_id, u16 htb_defc
 	}

 	/* allocate txschq queue */
-	new_cfg = kzalloc(sizeof(*new_cfg), GFP_KERNEL);
+	new_cfg = kzalloc_obj(*new_cfg, GFP_KERNEL);
 	if (!new_cfg) {
 		NL_SET_ERR_MSG_MOD(extack, "Memory allocation error");
 		err = -ENOMEM;
@@ -1279,7 +1279,7 @@ static int otx2_qos_leaf_alloc_queue(struct otx2_nic *pfvf, u16 classid,
 	set_bit(prio, parent->prio_bmap);

 	/* read current txschq configuration */
-	old_cfg = kzalloc(sizeof(*old_cfg), GFP_KERNEL);
+	old_cfg = kzalloc_obj(*old_cfg, GFP_KERNEL);
 	if (!old_cfg) {
 		NL_SET_ERR_MSG_MOD(extack, "Memory allocation error");
 		ret = -ENOMEM;
@@ -1308,7 +1308,7 @@ static int otx2_qos_leaf_alloc_queue(struct otx2_nic *pfvf, u16 classid,
 	}

 	/* push new txschq config to hw */
-	new_cfg = kzalloc(sizeof(*new_cfg), GFP_KERNEL);
+	new_cfg = kzalloc_obj(*new_cfg, GFP_KERNEL);
 	if (!new_cfg) {
 		NL_SET_ERR_MSG_MOD(extack, "Memory allocation error");
 		ret = -ENOMEM;
@@ -1417,7 +1417,7 @@ static int otx2_qos_leaf_to_inner(struct otx2_nic *pfvf, u16 classid,
 	qid = node->qid;

 	/* read current txschq configuration */
-	old_cfg = kzalloc(sizeof(*old_cfg), GFP_KERNEL);
+	old_cfg = kzalloc_obj(*old_cfg, GFP_KERNEL);
 	if (!old_cfg) {
 		NL_SET_ERR_MSG_MOD(extack, "Memory allocation error");
 		ret = -ENOMEM;
@@ -1445,7 +1445,7 @@ static int otx2_qos_leaf_to_inner(struct otx2_nic *pfvf, u16 classid,
 	}

 	/* push new txschq config to hw */
-	new_cfg = kzalloc(sizeof(*new_cfg), GFP_KERNEL);
+	new_cfg = kzalloc_obj(*new_cfg, GFP_KERNEL);
 	if (!new_cfg) {
 		NL_SET_ERR_MSG_MOD(extack, "Memory allocation error");
 		ret = -ENOMEM;
@@ -1668,7 +1668,7 @@ static int otx2_qos_leaf_del_last(struct otx2_nic *pfvf, u16 classid, bool force
 	__set_bit(qid, pfvf->qos.qos_sq_bmap);

 	/* push new txschq config to hw */
-	new_cfg = kzalloc(sizeof(*new_cfg), GFP_KERNEL);
+	new_cfg = kzalloc_obj(*new_cfg, GFP_KERNEL);
 	if (!new_cfg) {
 		NL_SET_ERR_MSG_MOD(extack, "Memory allocation error");
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/rep.c b/drivers/net/ethernet/marvell/octeontx2/nic/rep.c
index b476733a0234..7706ec417d2b 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/rep.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/rep.c
@@ -40,7 +40,7 @@ static int rvu_rep_mcam_flow_init(struct rep_dev *rep)
 	int ent, allocated = 0;
 	int count;

-	rep->flow_cfg = kcalloc(1, sizeof(struct otx2_flow_config), GFP_KERNEL);
+	rep->flow_cfg = kzalloc_objs(struct otx2_flow_config, 1, GFP_KERNEL);

 	if (!rep->flow_cfg)
 		return -ENOMEM;
@@ -504,7 +504,7 @@ static int rvu_rep_napi_init(struct otx2_nic *priv,
 	int err = 0, qidx, vec;
 	char *irq_name;

-	qset->napi = kcalloc(hw->cint_cnt, sizeof(*cq_poll), GFP_KERNEL);
+	qset->napi = kzalloc_objs(*cq_poll, hw->cint_cnt, GFP_KERNEL);
 	if (!qset->napi)
 		return -ENOMEM;

@@ -656,7 +656,7 @@ int rvu_rep_create(struct otx2_nic *priv, struct netlink_ext_ack *extack)
 	if (err)
 		return -ENOMEM;

-	priv->reps = kcalloc(rep_cnt, sizeof(struct rep_dev *), GFP_KERNEL);
+	priv->reps = kzalloc_objs(struct rep_dev *, rep_cnt, GFP_KERNEL);
 	if (!priv->reps)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_acl.c b/drivers/net/ethernet/marvell/prestera/prestera_acl.c
index cba89fda504b..02f113f9af9f 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_acl.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_acl.c
@@ -144,7 +144,7 @@ prestera_acl_ruleset_create(struct prestera_acl *acl,
 	if (!prestera_acl_chain_is_supported(chain_index, block->ingress))
 		return ERR_PTR(-EINVAL);

-	ruleset = kzalloc(sizeof(*ruleset), GFP_KERNEL);
+	ruleset = kzalloc_obj(*ruleset, GFP_KERNEL);
 	if (!ruleset)
 		return ERR_PTR(-ENOMEM);

@@ -438,7 +438,7 @@ prestera_acl_rule_create(struct prestera_acl_ruleset *ruleset,
 {
 	struct prestera_acl_rule *rule;

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return ERR_PTR(-ENOMEM);

@@ -713,7 +713,7 @@ prestera_acl_rule_entry_create(struct prestera_acl *acl,
 	struct prestera_acl_rule_entry *e;
 	int err;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		goto err_kzalloc;

@@ -816,7 +816,7 @@ int prestera_acl_vtcam_id_get(struct prestera_acl *acl, u8 lookup, u8 dir,
 	}

 	/* vtcam not found, try to create new one */
-	vtcam = kzalloc(sizeof(*vtcam), GFP_KERNEL);
+	vtcam = kzalloc_obj(*vtcam, GFP_KERNEL);
 	if (!vtcam)
 		return -ENOMEM;

@@ -880,7 +880,7 @@ int prestera_acl_init(struct prestera_switch *sw)
 	struct prestera_acl *acl;
 	int err;

-	acl = kzalloc(sizeof(*acl), GFP_KERNEL);
+	acl = kzalloc_obj(*acl, GFP_KERNEL);
 	if (!acl)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_counter.c b/drivers/net/ethernet/marvell/prestera/prestera_counter.c
index 634f4543c1d7..c59ed115c700 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_counter.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_counter.c
@@ -147,7 +147,7 @@ prestera_counter_block_get(struct prestera_counter *counter, u32 client)
 	if (block)
 		return block;

-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (!block)
 		return ERR_PTR(-ENOMEM);

@@ -157,8 +157,8 @@ prestera_counter_block_get(struct prestera_counter *counter, u32 client)
 	if (err)
 		goto err_block;

-	block->stats = kcalloc(block->num_counters,
-			       sizeof(*block->stats), GFP_KERNEL);
+	block->stats = kzalloc_objs(*block->stats, block->num_counters,
+				    GFP_KERNEL);
 	if (!block->stats) {
 		err = -ENOMEM;
 		goto err_stats;
@@ -437,11 +437,11 @@ int prestera_counter_init(struct prestera_switch *sw)
 {
 	struct prestera_counter *counter;

-	counter = kzalloc(sizeof(*counter), GFP_KERNEL);
+	counter = kzalloc_obj(*counter, GFP_KERNEL);
 	if (!counter)
 		return -ENOMEM;

-	counter->block_list = kzalloc(sizeof(*counter->block_list), GFP_KERNEL);
+	counter->block_list = kzalloc_obj(*counter->block_list, GFP_KERNEL);
 	if (!counter->block_list) {
 		kfree(counter);
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/marvell/prestera/prestera_devlink.c b/drivers/net/ethernet/marvell/prestera/prestera_devlink.c
index e63d95c1842f..981b9e835be7 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_devlink.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_devlink.c
@@ -451,13 +451,12 @@ int prestera_devlink_traps_register(struct prestera_switch *sw)
 	struct prestera_trap *prestera_trap;
 	int err, i;

-	trap_data = kzalloc(sizeof(*trap_data), GFP_KERNEL);
+	trap_data = kzalloc_obj(*trap_data, GFP_KERNEL);
 	if (!trap_data)
 		return -ENOMEM;

-	trap_data->trap_items_arr = kcalloc(traps_count,
-					    sizeof(struct prestera_trap_item),
-					    GFP_KERNEL);
+	trap_data->trap_items_arr = kzalloc_objs(struct prestera_trap_item,
+						 traps_count, GFP_KERNEL);
 	if (!trap_data->trap_items_arr) {
 		err = -ENOMEM;
 		goto err_trap_items_alloc;
diff --git a/drivers/net/ethernet/marvell/prestera/prestera_flow.c b/drivers/net/ethernet/marvell/prestera/prestera_flow.c
index 9f4267f326b0..21c052bfa6e8 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_flow.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_flow.c
@@ -82,7 +82,7 @@ prestera_flow_block_create(struct prestera_switch *sw,
 {
 	struct prestera_flow_block *block;

-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (!block)
 		return NULL;

@@ -130,7 +130,7 @@ static int prestera_flow_block_bind(struct prestera_flow_block *block,
 	struct prestera_flow_block_binding *binding;
 	int err;

-	binding = kzalloc(sizeof(*binding), GFP_KERNEL);
+	binding = kzalloc_obj(*binding, GFP_KERNEL);
 	if (!binding)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_flower.c b/drivers/net/ethernet/marvell/prestera/prestera_flower.c
index 418101a93149..28077005efaa 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_flower.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_flower.c
@@ -495,7 +495,7 @@ int prestera_flower_tmplt_create(struct prestera_flow_block *block,
 	if (err)
 		return err;

-	template = kmalloc(sizeof(*template), GFP_KERNEL);
+	template = kmalloc_obj(*template, GFP_KERNEL);
 	if (!template) {
 		err = -ENOMEM;
 		goto err_malloc;
diff --git a/drivers/net/ethernet/marvell/prestera/prestera_hw.c b/drivers/net/ethernet/marvell/prestera/prestera_hw.c
index 197198ba61b1..e20bd0eca18d 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_hw.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_hw.c
@@ -2256,7 +2256,7 @@ int prestera_hw_event_handler_register(struct prestera_switch *sw,
 	if (eh)
 		return -EEXIST;

-	eh = kmalloc(sizeof(*eh), GFP_KERNEL);
+	eh = kmalloc_obj(*eh, GFP_KERNEL);
 	if (!eh)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_main.c b/drivers/net/ethernet/marvell/prestera/prestera_main.c
index 65e7ef033bde..0d12ed32586b 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_main.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_main.c
@@ -1014,7 +1014,7 @@ static int prestera_lag_init(struct prestera_switch *sw)
 {
 	u16 id;

-	sw->lags = kcalloc(sw->lag_max, sizeof(*sw->lags), GFP_KERNEL);
+	sw->lags = kzalloc_objs(*sw->lags, sw->lag_max, GFP_KERNEL);
 	if (!sw->lags)
 		return -ENOMEM;

@@ -1209,7 +1209,7 @@ prestera_mdb_entry_create(struct prestera_switch *sw,
 	struct prestera_flood_domain *flood_domain;
 	struct prestera_mdb_entry *mdb_entry;

-	mdb_entry = kzalloc(sizeof(*mdb_entry), GFP_KERNEL);
+	mdb_entry = kzalloc_obj(*mdb_entry, GFP_KERNEL);
 	if (!mdb_entry)
 		goto err_mdb_alloc;

@@ -1247,7 +1247,7 @@ prestera_flood_domain_create(struct prestera_switch *sw)
 {
 	struct prestera_flood_domain *domain;

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain)
 		return NULL;

@@ -1279,7 +1279,7 @@ prestera_flood_domain_port_create(struct prestera_flood_domain *flood_domain,
 	bool is_first_port_in_list = false;
 	int err;

-	flood_domain_port = kzalloc(sizeof(*flood_domain_port), GFP_KERNEL);
+	flood_domain_port = kzalloc_obj(*flood_domain_port, GFP_KERNEL);
 	if (!flood_domain_port) {
 		err = -ENOMEM;
 		goto err_port_alloc;
diff --git a/drivers/net/ethernet/marvell/prestera/prestera_router.c b/drivers/net/ethernet/marvell/prestera/prestera_router.c
index de317179a7dc..a75764610eef 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_router.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_router.c
@@ -485,7 +485,7 @@ __prestera_kern_neigh_cache_create(struct prestera_switch *sw,
 	struct prestera_kern_neigh_cache *n_cache;
 	int err;

-	n_cache = kzalloc(sizeof(*n_cache), GFP_KERNEL);
+	n_cache = kzalloc_obj(*n_cache, GFP_KERNEL);
 	if (!n_cache)
 		goto err_kzalloc;

@@ -623,7 +623,7 @@ prestera_kern_fib_cache_create(struct prestera_switch *sw,
 	struct prestera_kern_fib_cache *fib_cache;
 	int err;

-	fib_cache = kzalloc(sizeof(*fib_cache), GFP_KERNEL);
+	fib_cache = kzalloc_obj(*fib_cache, GFP_KERNEL);
 	if (!fib_cache)
 		goto err_kzalloc;

@@ -1448,7 +1448,7 @@ static int __prestera_router_fib_event(struct notifier_block *nb,
 		if (!fen_info->fi)
 			return NOTIFY_DONE;

-		fib_work = kzalloc(sizeof(*fib_work), GFP_ATOMIC);
+		fib_work = kzalloc_obj(*fib_work, GFP_ATOMIC);
 		if (WARN_ON(!fib_work))
 			return NOTIFY_BAD;

@@ -1503,7 +1503,7 @@ static int prestera_router_netevent_event(struct notifier_block *nb,
 		if (n->tbl->family != AF_INET)
 			return NOTIFY_DONE;

-		net_work = kzalloc(sizeof(*net_work), GFP_ATOMIC);
+		net_work = kzalloc_obj(*net_work, GFP_ATOMIC);
 		if (WARN_ON(!net_work))
 			return NOTIFY_BAD;

@@ -1550,7 +1550,7 @@ int prestera_router_init(struct prestera_switch *sw)
 	struct prestera_router *router;
 	int err, nhgrp_cache_bytes;

-	router = kzalloc(sizeof(*sw->router), GFP_KERNEL);
+	router = kzalloc_obj(*sw->router, GFP_KERNEL);
 	if (!router)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_router_hw.c b/drivers/net/ethernet/marvell/prestera/prestera_router_hw.c
index 02faaea2aefa..b94e28d403e7 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_router_hw.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_router_hw.c
@@ -127,7 +127,7 @@ static struct prestera_vr *__prestera_vr_create(struct prestera_switch *sw,
 	struct prestera_vr *vr;
 	int err;

-	vr = kzalloc(sizeof(*vr), GFP_KERNEL);
+	vr = kzalloc_obj(*vr, GFP_KERNEL);
 	if (!vr) {
 		err = -ENOMEM;
 		goto err_alloc_vr;
@@ -252,7 +252,7 @@ prestera_rif_entry_create(struct prestera_switch *sw,
 	struct prestera_rif_entry *e;
 	struct prestera_iface iface;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		goto err_kzalloc;

@@ -301,7 +301,7 @@ __prestera_nh_neigh_create(struct prestera_switch *sw,
 	struct prestera_nh_neigh *neigh;
 	int err;

-	neigh = kzalloc(sizeof(*neigh), GFP_KERNEL);
+	neigh = kzalloc_obj(*neigh, GFP_KERNEL);
 	if (!neigh)
 		goto err_kzalloc;

@@ -397,7 +397,7 @@ __prestera_nexthop_group_create(struct prestera_switch *sw,
 	struct prestera_nh_neigh *nh_neigh;
 	int nh_cnt, err, gid;

-	nh_grp = kzalloc(sizeof(*nh_grp), GFP_KERNEL);
+	nh_grp = kzalloc_obj(*nh_grp, GFP_KERNEL);
 	if (!nh_grp)
 		goto err_kzalloc;

@@ -628,7 +628,7 @@ prestera_fib_node_create(struct prestera_switch *sw,
 	struct prestera_vr *vr;
 	int err;

-	fib_node = kzalloc(sizeof(*fib_node), GFP_KERNEL);
+	fib_node = kzalloc_obj(*fib_node, GFP_KERNEL);
 	if (!fib_node)
 		goto err_kzalloc;

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c b/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c
index 39d9bf82c115..696625d6dcbc 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c
@@ -379,7 +379,7 @@ static int prestera_sdma_rx_init(struct prestera_sdma *sdma)
 		struct prestera_sdma_buf *head, *tail, *next, *prev;
 		struct prestera_rx_ring *ring = &sdma->rx_ring[q];

-		ring->bufs = kmalloc_array(bnum, sizeof(*head), GFP_KERNEL);
+		ring->bufs = kmalloc_objs(*head, bnum, GFP_KERNEL);
 		if (!ring->bufs)
 			return -ENOMEM;

@@ -529,7 +529,7 @@ static int prestera_sdma_tx_init(struct prestera_sdma *sdma)
 	INIT_WORK(&sdma->tx_work, prestera_sdma_tx_recycle_work_fn);
 	spin_lock_init(&sdma->tx_lock);

-	tx_ring->bufs = kmalloc_array(bnum, sizeof(*head), GFP_KERNEL);
+	tx_ring->bufs = kmalloc_objs(*head, bnum, GFP_KERNEL);
 	if (!tx_ring->bufs)
 		return -ENOMEM;

@@ -784,7 +784,7 @@ int prestera_rxtx_switch_init(struct prestera_switch *sw)
 	struct prestera_rxtx *rxtx;
 	int err;

-	rxtx = kzalloc(sizeof(*rxtx), GFP_KERNEL);
+	rxtx = kzalloc_obj(*rxtx, GFP_KERNEL);
 	if (!rxtx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_span.c b/drivers/net/ethernet/marvell/prestera/prestera_span.c
index 1005182ce3bc..dd86164e6a19 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_span.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_span.c
@@ -27,7 +27,7 @@ prestera_span_entry_create(struct prestera_port *port, u8 span_id)
 {
 	struct prestera_span_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

@@ -170,7 +170,7 @@ int prestera_span_init(struct prestera_switch *sw)
 {
 	struct prestera_span *span;

-	span = kzalloc(sizeof(*span), GFP_KERNEL);
+	span = kzalloc_obj(*span, GFP_KERNEL);
 	if (!span)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_switchdev.c b/drivers/net/ethernet/marvell/prestera/prestera_switchdev.c
index e548cd32582e..1ca197fb08a6 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_switchdev.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_switchdev.c
@@ -180,7 +180,7 @@ prestera_bridge_vlan_create(struct prestera_bridge_port *br_port, u16 vid)
 {
 	struct prestera_bridge_vlan *br_vlan;

-	br_vlan = kzalloc(sizeof(*br_vlan), GFP_KERNEL);
+	br_vlan = kzalloc_obj(*br_vlan, GFP_KERNEL);
 	if (!br_vlan)
 		return NULL;

@@ -263,7 +263,7 @@ prestera_port_vlan_create(struct prestera_port *port, u16 vid, bool untagged)
 	if (err)
 		return ERR_PTR(err);

-	port_vlan = kzalloc(sizeof(*port_vlan), GFP_KERNEL);
+	port_vlan = kzalloc_obj(*port_vlan, GFP_KERNEL);
 	if (!port_vlan) {
 		err = -ENOMEM;
 		goto err_port_vlan_alloc;
@@ -443,7 +443,7 @@ prestera_bridge_create(struct prestera_switchdev *swdev, struct net_device *dev)
 		return ERR_PTR(-EINVAL);
 	}

-	bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
+	bridge = kzalloc_obj(*bridge, GFP_KERNEL);
 	if (!bridge)
 		return ERR_PTR(-ENOMEM);

@@ -562,7 +562,7 @@ prestera_bridge_port_create(struct prestera_bridge *bridge,
 {
 	struct prestera_bridge_port *br_port;

-	br_port = kzalloc(sizeof(*br_port), GFP_KERNEL);
+	br_port = kzalloc_obj(*br_port, GFP_KERNEL);
 	if (!br_port)
 		return NULL;

@@ -1313,7 +1313,7 @@ static int prestera_switchdev_event(struct notifier_block *unused,
 	if (!netif_is_bridge_master(upper))
 		return NOTIFY_DONE;

-	swdev_work = kzalloc(sizeof(*swdev_work), GFP_ATOMIC);
+	swdev_work = kzalloc_obj(*swdev_work, GFP_ATOMIC);
 	if (!swdev_work)
 		return NOTIFY_BAD;

@@ -1498,7 +1498,7 @@ prestera_br_mdb_entry_create(struct prestera_switch *sw,
 	struct prestera_br_mdb_entry *br_mdb_entry;
 	struct prestera_mdb_entry *mdb_entry;

-	br_mdb_entry = kzalloc(sizeof(*br_mdb_entry), GFP_KERNEL);
+	br_mdb_entry = kzalloc_obj(*br_mdb_entry, GFP_KERNEL);
 	if (!br_mdb_entry)
 		return NULL;

@@ -1530,7 +1530,7 @@ static int prestera_br_mdb_port_add(struct prestera_br_mdb_entry *br_mdb,
 		if (br_mdb_port->br_port == br_port)
 			return 0;

-	br_mdb_port = kzalloc(sizeof(*br_mdb_port), GFP_KERNEL);
+	br_mdb_port = kzalloc_obj(*br_mdb_port, GFP_KERNEL);
 	if (!br_mdb_port)
 		return -ENOMEM;

@@ -1873,7 +1873,7 @@ int prestera_switchdev_init(struct prestera_switch *sw)
 	struct prestera_switchdev *swdev;
 	int err;

-	swdev = kzalloc(sizeof(*swdev), GFP_KERNEL);
+	swdev = kzalloc_obj(*swdev, GFP_KERNEL);
 	if (!swdev)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c b/drivers/net/ethernet/marvell/pxa168_eth.c
index 68f8a1e36aa6..a2f6622e6ff5 100644
--- a/drivers/net/ethernet/marvell/pxa168_eth.c
+++ b/drivers/net/ethernet/marvell/pxa168_eth.c
@@ -1024,7 +1024,7 @@ static int rxq_init(struct net_device *dev)
 	int rx_desc_num = pep->rx_ring_size;

 	/* Allocate RX skb rings */
-	pep->rx_skb = kcalloc(rx_desc_num, sizeof(*pep->rx_skb), GFP_KERNEL);
+	pep->rx_skb = kzalloc_objs(*pep->rx_skb, rx_desc_num, GFP_KERNEL);
 	if (!pep->rx_skb)
 		return -ENOMEM;

@@ -1083,7 +1083,7 @@ static int txq_init(struct net_device *dev)
 	int size = 0, i = 0;
 	int tx_desc_num = pep->tx_ring_size;

-	pep->tx_skb = kcalloc(tx_desc_num, sizeof(*pep->tx_skb), GFP_KERNEL);
+	pep->tx_skb = kzalloc_objs(*pep->tx_skb, tx_desc_num, GFP_KERNEL);
 	if (!pep->tx_skb)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c
index cf4e26d337bb..49942779418c 100644
--- a/drivers/net/ethernet/marvell/skge.c
+++ b/drivers/net/ethernet/marvell/skge.c
@@ -918,7 +918,7 @@ static int skge_ring_alloc(struct skge_ring *ring, void *vaddr, u32 base)
 	struct skge_element *e;
 	int i;

-	ring->start = kcalloc(ring->count, sizeof(*e), GFP_KERNEL);
+	ring->start = kzalloc_objs(*e, ring->count, GFP_KERNEL);
 	if (!ring->start)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
index 3831f533b9db..27af9627394a 100644
--- a/drivers/net/ethernet/marvell/sky2.c
+++ b/drivers/net/ethernet/marvell/sky2.c
@@ -1601,8 +1601,8 @@ static int sky2_alloc_buffers(struct sky2_port *sky2)
 	if (!sky2->tx_le)
 		goto nomem;

-	sky2->tx_ring = kcalloc(sky2->tx_ring_size, sizeof(struct tx_ring_info),
-				GFP_KERNEL);
+	sky2->tx_ring = kzalloc_objs(struct tx_ring_info, sky2->tx_ring_size,
+				     GFP_KERNEL);
 	if (!sky2->tx_ring)
 		goto nomem;

@@ -1611,8 +1611,8 @@ static int sky2_alloc_buffers(struct sky2_port *sky2)
 	if (!sky2->rx_le)
 		goto nomem;

-	sky2->rx_ring = kcalloc(sky2->rx_pending, sizeof(struct rx_ring_info),
-				GFP_KERNEL);
+	sky2->rx_ring = kzalloc_objs(struct rx_ring_info, sky2->rx_pending,
+				     GFP_KERNEL);
 	if (!sky2->rx_ring)
 		goto nomem;

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 35fef28ee2f9..61065fb30acb 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2647,8 +2647,7 @@ static int mtk_tx_alloc(struct mtk_eth *eth)
 	else
 		ring_size = soc->tx.dma_size;

-	ring->buf = kcalloc(ring_size, sizeof(*ring->buf),
-			       GFP_KERNEL);
+	ring->buf = kzalloc_objs(*ring->buf, ring_size, GFP_KERNEL);
 	if (!ring->buf)
 		goto no_tx_mem;

diff --git a/drivers/net/ethernet/mediatek/mtk_ppe.c b/drivers/net/ethernet/mediatek/mtk_ppe.c
index ada852adc5f7..75f7728fc796 100644
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
@@ -705,7 +705,7 @@ mtk_foe_entry_commit_subflow(struct mtk_ppe *ppe, struct mtk_flow_entry *entry,
 	u32 ib1_mask = mtk_get_ib1_pkt_type_mask(ppe->eth) | MTK_FOE_IB1_UDP;
 	int type;

-	flow_info = kzalloc(sizeof(*flow_info), GFP_ATOMIC);
+	flow_info = kzalloc_obj(*flow_info, GFP_ATOMIC);
 	if (!flow_info)
 		return;

diff --git a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
index e9bd32741983..bc53b08ff205 100644
--- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
@@ -469,7 +469,7 @@ mtk_flow_offload_replace(struct mtk_eth *eth, struct flow_cls_offload *f,
 	if (wed_index >= 0 && (err = mtk_wed_flow_add(wed_index)) < 0)
 		return err;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
index 1ed1f88dd7f8..303e3945b72c 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -656,7 +656,7 @@ mtk_wed_tx_buffer_alloc(struct mtk_wed_device *dev)
 	}
 	n_pages = dev->tx_buf_ring.size / MTK_WED_BUF_PER_PAGE;

-	page_list = kcalloc(n_pages, sizeof(*page_list), GFP_KERNEL);
+	page_list = kzalloc_objs(*page_list, n_pages, GFP_KERNEL);
 	if (!page_list)
 		return -ENOMEM;

@@ -780,7 +780,7 @@ mtk_wed_hwrro_buffer_alloc(struct mtk_wed_device *dev)
 	if (!dev->wlan.hw_rro)
 		return 0;

-	page_list = kcalloc(n_pages, sizeof(*page_list), GFP_KERNEL);
+	page_list = kzalloc_objs(*page_list, n_pages, GFP_KERNEL);
 	if (!page_list)
 		return -ENOMEM;

@@ -2718,7 +2718,7 @@ mtk_wed_setup_tc_block(struct mtk_wed_hw *hw, struct net_device *dev,
 			return 0;
 		}

-		priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+		priv = kzalloc_obj(*priv, GFP_KERNEL);
 		if (!priv)
 			return -ENOMEM;

@@ -2822,7 +2822,7 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
 	if (WARN_ON(hw_list[index]))
 		goto unlock;

-	hw = kzalloc(sizeof(*hw), GFP_KERNEL);
+	hw = kzalloc_obj(*hw, GFP_KERNEL);
 	if (!hw)
 		goto unlock;

diff --git a/drivers/net/ethernet/mellanox/mlx4/alloc.c b/drivers/net/ethernet/mellanox/mlx4/alloc.c
index 07b061a97a6e..7e4d1998fd0d 100644
--- a/drivers/net/ethernet/mellanox/mlx4/alloc.c
+++ b/drivers/net/ethernet/mellanox/mlx4/alloc.c
@@ -223,7 +223,7 @@ struct mlx4_zone_entry {

 struct mlx4_zone_allocator *mlx4_zone_allocator_create(enum mlx4_zone_alloc_flags flags)
 {
-	struct mlx4_zone_allocator *zones = kmalloc(sizeof(*zones), GFP_KERNEL);
+	struct mlx4_zone_allocator *zones = kmalloc_obj(*zones, GFP_KERNEL);

 	if (NULL == zones)
 		return NULL;
@@ -247,7 +247,7 @@ int mlx4_zone_add_one(struct mlx4_zone_allocator *zone_alloc,
 {
 	u32 mask = mlx4_bitmap_masked_value(bitmap, (u32)-1);
 	struct mlx4_zone_entry *it;
-	struct mlx4_zone_entry *zone = kmalloc(sizeof(*zone), GFP_KERNEL);
+	struct mlx4_zone_entry *zone = kmalloc_obj(*zone, GFP_KERNEL);

 	if (NULL == zone)
 		return -ENOMEM;
@@ -594,8 +594,8 @@ int mlx4_buf_alloc(struct mlx4_dev *dev, int size, int max_direct,
 		buf->nbufs      = DIV_ROUND_UP(size, PAGE_SIZE);
 		buf->npages	= buf->nbufs;
 		buf->page_shift  = PAGE_SHIFT;
-		buf->page_list   = kcalloc(buf->nbufs, sizeof(*buf->page_list),
-					   GFP_KERNEL);
+		buf->page_list   = kzalloc_objs(*buf->page_list, buf->nbufs,
+						GFP_KERNEL);
 		if (!buf->page_list)
 			return -ENOMEM;

@@ -642,7 +642,7 @@ static struct mlx4_db_pgdir *mlx4_alloc_db_pgdir(struct device *dma_device)
 {
 	struct mlx4_db_pgdir *pgdir;

-	pgdir = kzalloc(sizeof(*pgdir), GFP_KERNEL);
+	pgdir = kzalloc_obj(*pgdir, GFP_KERNEL);
 	if (!pgdir)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c
index 7f20813456e2..150ede6eb18f 100644
--- a/drivers/net/ethernet/mellanox/mlx4/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c
@@ -1674,7 +1674,7 @@ static int mlx4_master_process_vhcr(struct mlx4_dev *dev, int slave,
 	int err = 0;

 	/* Create sw representation of Virtual HCR */
-	vhcr = kzalloc(sizeof(struct mlx4_vhcr), GFP_KERNEL);
+	vhcr = kzalloc_obj(struct mlx4_vhcr, GFP_KERNEL);
 	if (!vhcr)
 		return -ENOMEM;

@@ -1873,7 +1873,7 @@ static int mlx4_master_immediate_activate_vlan_qos(struct mlx4_priv *priv,
 		 vp_admin->default_vlan, vp_admin->default_qos,
 		 vp_admin->link_state);

-	work = kzalloc(sizeof(*work), GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

@@ -2368,23 +2368,20 @@ int mlx4_multi_func_init(struct mlx4_dev *dev)
 		struct mlx4_vf_admin_state *vf_admin;

 		priv->mfunc.master.slave_state =
-			kcalloc(dev->num_slaves,
-				sizeof(struct mlx4_slave_state),
-				GFP_KERNEL);
+			kzalloc_objs(struct mlx4_slave_state, dev->num_slaves,
+				     GFP_KERNEL);
 		if (!priv->mfunc.master.slave_state)
 			goto err_comm;

 		priv->mfunc.master.vf_admin =
-			kcalloc(dev->num_slaves,
-				sizeof(struct mlx4_vf_admin_state),
-				GFP_KERNEL);
+			kzalloc_objs(struct mlx4_vf_admin_state,
+				     dev->num_slaves, GFP_KERNEL);
 		if (!priv->mfunc.master.vf_admin)
 			goto err_comm_admin;

 		priv->mfunc.master.vf_oper =
-			kcalloc(dev->num_slaves,
-				sizeof(struct mlx4_vf_oper_state),
-				GFP_KERNEL);
+			kzalloc_objs(struct mlx4_vf_oper_state, dev->num_slaves,
+				     GFP_KERNEL);
 		if (!priv->mfunc.master.vf_oper)
 			goto err_comm_oper;

@@ -2408,8 +2405,8 @@ int mlx4_multi_func_init(struct mlx4_dev *dev)
 				struct mlx4_vport_state *oper_vport;

 				s_state->vlan_filter[port] =
-					kzalloc(sizeof(struct mlx4_vlan_fltr),
-						GFP_KERNEL);
+					kzalloc_obj(struct mlx4_vlan_fltr,
+						    GFP_KERNEL);
 				if (!s_state->vlan_filter[port]) {
 					if (--port)
 						kfree(s_state->vlan_filter[port]);
@@ -2625,9 +2622,8 @@ int mlx4_cmd_use_events(struct mlx4_dev *dev)
 	int i;
 	int err = 0;

-	priv->cmd.context = kmalloc_array(priv->cmd.max_cmds,
-					  sizeof(struct mlx4_cmd_context),
-					  GFP_KERNEL);
+	priv->cmd.context = kmalloc_objs(struct mlx4_cmd_context,
+					 priv->cmd.max_cmds, GFP_KERNEL);
 	if (!priv->cmd.context)
 		return -ENOMEM;

@@ -2693,7 +2689,7 @@ struct mlx4_cmd_mailbox *mlx4_alloc_cmd_mailbox(struct mlx4_dev *dev)
 {
 	struct mlx4_cmd_mailbox *mailbox;

-	mailbox = kmalloc(sizeof(*mailbox), GFP_KERNEL);
+	mailbox = kmalloc_obj(*mailbox, GFP_KERNEL);
 	if (!mailbox)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
index ad6298456639..2e914a254a16 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
@@ -1158,7 +1158,7 @@ static int mlx4_en_set_ringparam(struct net_device *dev,
 	    tx_size == priv->tx_ring[TX][0]->size)
 		return 0;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

@@ -1452,8 +1452,8 @@ static int add_ip_rule(struct mlx4_en_priv *priv,
 	struct mlx4_spec_list *spec_l3;
 	struct ethtool_usrip4_spec *l3_mask = &cmd->fs.m_u.usr_ip4_spec;

-	spec_l3 = kzalloc(sizeof(*spec_l3), GFP_KERNEL);
-	spec_l2 = kzalloc(sizeof(*spec_l2), GFP_KERNEL);
+	spec_l3 = kzalloc_obj(*spec_l3, GFP_KERNEL);
+	spec_l2 = kzalloc_obj(*spec_l2, GFP_KERNEL);
 	if (!spec_l2 || !spec_l3) {
 		err = -ENOMEM;
 		goto free_spec;
@@ -1491,9 +1491,9 @@ static int add_tcp_udp_rule(struct mlx4_en_priv *priv,
 	struct mlx4_spec_list *spec_l4;
 	struct ethtool_tcpip4_spec *l4_mask = &cmd->fs.m_u.tcp_ip4_spec;

-	spec_l2 = kzalloc(sizeof(*spec_l2), GFP_KERNEL);
-	spec_l3 = kzalloc(sizeof(*spec_l3), GFP_KERNEL);
-	spec_l4 = kzalloc(sizeof(*spec_l4), GFP_KERNEL);
+	spec_l2 = kzalloc_obj(*spec_l2, GFP_KERNEL);
+	spec_l3 = kzalloc_obj(*spec_l3, GFP_KERNEL);
+	spec_l4 = kzalloc_obj(*spec_l4, GFP_KERNEL);
 	if (!spec_l2 || !spec_l3 || !spec_l4) {
 		err = -ENOMEM;
 		goto free_spec;
@@ -1564,7 +1564,7 @@ static int mlx4_en_ethtool_to_net_trans_rule(struct net_device *dev,

 	switch (cmd->fs.flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) {
 	case ETHER_FLOW:
-		spec_l2 = kzalloc(sizeof(*spec_l2), GFP_KERNEL);
+		spec_l2 = kzalloc_obj(*spec_l2, GFP_KERNEL);
 		if (!spec_l2)
 			return -ENOMEM;

@@ -1833,7 +1833,7 @@ static int mlx4_en_set_channels(struct net_device *dev,
 	if (!channel->tx_count || !channel->rx_count)
 		return -EINVAL;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_main.c b/drivers/net/ethernet/mellanox/mlx4/en_main.c
index d8f4d00ad26b..1374a81945b2 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_main.c
@@ -271,7 +271,7 @@ static int mlx4_en_probe(struct auxiliary_device *adev,

 	printk_once(KERN_INFO "%s", mlx4_en_version);

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev) {
 		err = -ENOMEM;
 		goto err_free_res;
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index 81bf8908b897..ee1ea70cdd34 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -99,7 +99,7 @@ int mlx4_en_alloc_tx_queue_per_tc(struct net_device *dev, u8 tc)
 	int port_up = 0;
 	int err = 0;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

@@ -295,7 +295,7 @@ mlx4_en_filter_alloc(struct mlx4_en_priv *priv, int rxq_index, __be32 src_ip,
 {
 	struct mlx4_en_filter *filter;

-	filter = kzalloc(sizeof(struct mlx4_en_filter), GFP_ATOMIC);
+	filter = kzalloc_obj(struct mlx4_en_filter, GFP_ATOMIC);
 	if (!filter)
 		return NULL;

@@ -827,7 +827,7 @@ static void mlx4_en_cache_mclist(struct net_device *dev)

 	mlx4_en_clear_list(dev);
 	netdev_for_each_mc_addr(ha, dev) {
-		tmp = kzalloc(sizeof(struct mlx4_en_mc_list), GFP_ATOMIC);
+		tmp = kzalloc_obj(struct mlx4_en_mc_list, GFP_ATOMIC);
 		if (!tmp) {
 			mlx4_en_clear_list(dev);
 			return;
@@ -1209,7 +1209,7 @@ static void mlx4_en_do_uc_filter(struct mlx4_en_priv *priv,
 		}

 		if (!found) {
-			entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+			entry = kmalloc_obj(*entry, GFP_KERNEL);
 			if (!entry) {
 				en_err(priv, "Failed adding MAC %pM on port:%d (out of memory)\n",
 				       ha->addr, priv->port);
@@ -1317,7 +1317,7 @@ static int mlx4_en_set_rss_steer_rules(struct mlx4_en_priv *priv)
 	if (err)
 		goto tunnel_err;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		err = -ENOMEM;
 		goto alloc_err;
@@ -2240,15 +2240,13 @@ static int mlx4_en_copy_priv(struct mlx4_en_priv *dst,
 		if (!dst->tx_ring_num[t])
 			continue;

-		dst->tx_ring[t] = kcalloc(MAX_TX_RINGS,
-					  sizeof(struct mlx4_en_tx_ring *),
-					  GFP_KERNEL);
+		dst->tx_ring[t] = kzalloc_objs(struct mlx4_en_tx_ring *,
+					       MAX_TX_RINGS, GFP_KERNEL);
 		if (!dst->tx_ring[t])
 			goto err_free_tx;

-		dst->tx_cq[t] = kcalloc(MAX_TX_RINGS,
-					sizeof(struct mlx4_en_cq *),
-					GFP_KERNEL);
+		dst->tx_cq[t] = kzalloc_objs(struct mlx4_en_cq *, MAX_TX_RINGS,
+					     GFP_KERNEL);
 		if (!dst->tx_cq[t]) {
 			kfree(dst->tx_ring[t]);
 			goto err_free_tx;
@@ -2754,7 +2752,7 @@ static int mlx4_xdp_set(struct net_device *dev, struct bpf_prog *prog)
 	if (!mlx4_en_check_xdp_mtu(dev, dev->mtu))
 		return -EOPNOTSUPP;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

@@ -3217,16 +3215,14 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
 		if (!priv->tx_ring_num[t])
 			continue;

-		priv->tx_ring[t] = kcalloc(MAX_TX_RINGS,
-					   sizeof(struct mlx4_en_tx_ring *),
-					   GFP_KERNEL);
+		priv->tx_ring[t] = kzalloc_objs(struct mlx4_en_tx_ring *,
+						MAX_TX_RINGS, GFP_KERNEL);
 		if (!priv->tx_ring[t]) {
 			err = -ENOMEM;
 			goto out;
 		}
-		priv->tx_cq[t] = kcalloc(MAX_TX_RINGS,
-					 sizeof(struct mlx4_en_cq *),
-					 GFP_KERNEL);
+		priv->tx_cq[t] = kzalloc_objs(struct mlx4_en_cq *, MAX_TX_RINGS,
+					      GFP_KERNEL);
 		if (!priv->tx_cq[t]) {
 			err = -ENOMEM;
 			goto out;
@@ -3525,7 +3521,7 @@ int mlx4_en_reset_config(struct net_device *dev,
 		return -EINVAL;
 	}

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
index 13666d50b90f..de45de8fa41b 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
@@ -1094,7 +1094,7 @@ static int mlx4_en_config_rss_qp(struct mlx4_en_priv *priv, int qpn,
 	struct mlx4_qp_context *context;
 	int err = 0;

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return -ENOMEM;

@@ -1208,7 +1208,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv)
 		return 0;
 	}

-	rss_map->indir_qp = kzalloc(sizeof(*rss_map->indir_qp), GFP_KERNEL);
+	rss_map->indir_qp = kzalloc_obj(*rss_map->indir_qp, GFP_KERNEL);
 	if (!rss_map->indir_qp) {
 		err = -ENOMEM;
 		goto rss_err;
diff --git a/drivers/net/ethernet/mellanox/mlx4/eq.c b/drivers/net/ethernet/mellanox/mlx4/eq.c
index 9572a45f6143..9891d33c7ecb 100644
--- a/drivers/net/ethernet/mellanox/mlx4/eq.c
+++ b/drivers/net/ethernet/mellanox/mlx4/eq.c
@@ -987,8 +987,7 @@ static int mlx4_create_eq(struct mlx4_dev *dev, int nent,
 	 */
 	npages = PAGE_ALIGN(eq->nent * dev->caps.eqe_size) / PAGE_SIZE;

-	eq->page_list = kmalloc_array(npages, sizeof(*eq->page_list),
-				      GFP_KERNEL);
+	eq->page_list = kmalloc_objs(*eq->page_list, npages, GFP_KERNEL);
 	if (!eq->page_list)
 		goto err_out;

@@ -1158,8 +1157,9 @@ int mlx4_alloc_eq_table(struct mlx4_dev *dev)
 {
 	struct mlx4_priv *priv = mlx4_priv(dev);

-	priv->eq_table.eq = kcalloc(dev->caps.num_eqs - dev->caps.reserved_eqs,
-				    sizeof(*priv->eq_table.eq), GFP_KERNEL);
+	priv->eq_table.eq = kzalloc_objs(*priv->eq_table.eq,
+					 dev->caps.num_eqs - dev->caps.reserved_eqs,
+					 GFP_KERNEL);
 	if (!priv->eq_table.eq)
 		return -ENOMEM;

@@ -1177,9 +1177,8 @@ int mlx4_init_eq_table(struct mlx4_dev *dev)
 	int err;
 	int i;

-	priv->eq_table.uar_map = kcalloc(mlx4_num_eq_uar(dev),
-					 sizeof(*priv->eq_table.uar_map),
-					 GFP_KERNEL);
+	priv->eq_table.uar_map = kzalloc_objs(*priv->eq_table.uar_map,
+					      mlx4_num_eq_uar(dev), GFP_KERNEL);
 	if (!priv->eq_table.uar_map) {
 		err = -ENOMEM;
 		goto err_out_free;
diff --git a/drivers/net/ethernet/mellanox/mlx4/icm.c b/drivers/net/ethernet/mellanox/mlx4/icm.c
index 59b8b3c73582..c076d26a0b12 100644
--- a/drivers/net/ethernet/mellanox/mlx4/icm.c
+++ b/drivers/net/ethernet/mellanox/mlx4/icm.c
@@ -145,8 +145,8 @@ struct mlx4_icm *mlx4_alloc_icm(struct mlx4_dev *dev, int npages,
 			   gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN),
 			   dev->numa_node);
 	if (!icm) {
-		icm = kmalloc(sizeof(*icm),
-			      gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN));
+		icm = kmalloc_obj(*icm,
+				  gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN));
 		if (!icm)
 			return NULL;
 	}
@@ -163,9 +163,8 @@ struct mlx4_icm *mlx4_alloc_icm(struct mlx4_dev *dev, int npages,
 							  __GFP_NOWARN),
 					     dev->numa_node);
 			if (!chunk) {
-				chunk = kzalloc(sizeof(*chunk),
-						gfp_mask & ~(__GFP_HIGHMEM |
-							     __GFP_NOWARN));
+				chunk = kzalloc_obj(*chunk,
+						    gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN));
 				if (!chunk)
 					goto fail;
 			}
@@ -427,7 +426,7 @@ int mlx4_init_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table,
 		return -EINVAL;
 	num_icm = DIV_ROUND_UP(nobj, obj_per_chunk);

-	table->icm      = kvcalloc(num_icm, sizeof(*table->icm), GFP_KERNEL);
+	table->icm      = kvzalloc_objs(*table->icm, num_icm, GFP_KERNEL);
 	if (!table->icm)
 		return -ENOMEM;
 	table->virt     = virt;
diff --git a/drivers/net/ethernet/mellanox/mlx4/intf.c b/drivers/net/ethernet/mellanox/mlx4/intf.c
index a371b970ac1e..e1db44df72f6 100644
--- a/drivers/net/ethernet/mellanox/mlx4/intf.c
+++ b/drivers/net/ethernet/mellanox/mlx4/intf.c
@@ -78,8 +78,8 @@ int mlx4_adev_init(struct mlx4_dev *dev)
 	if (priv->adev_idx < 0)
 		return priv->adev_idx;

-	priv->adev = kcalloc(ARRAY_SIZE(mlx4_adev_devices),
-			     sizeof(struct mlx4_adev *), GFP_KERNEL);
+	priv->adev = kzalloc_objs(struct mlx4_adev *,
+				  ARRAY_SIZE(mlx4_adev_devices), GFP_KERNEL);
 	if (!priv->adev) {
 		ida_free(&mlx4_adev_ida, priv->adev_idx);
 		return -ENOMEM;
@@ -115,7 +115,7 @@ static struct mlx4_adev *add_adev(struct mlx4_dev *dev, int idx)
 	struct mlx4_adev *madev;
 	int ret;

-	madev = kzalloc(sizeof(*madev), GFP_KERNEL);
+	madev = kzalloc_obj(*madev, GFP_KERNEL);
 	if (!madev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index 4293f8e33f44..2e5032658fcd 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -867,8 +867,9 @@ static int mlx4_slave_special_qp_cap(struct mlx4_dev *dev)
 	struct mlx4_caps *caps = &dev->caps;
 	int i, err = 0;

-	func_cap = kzalloc(sizeof(*func_cap), GFP_KERNEL);
-	caps->spec_qps = kcalloc(caps->num_ports, sizeof(*caps->spec_qps), GFP_KERNEL);
+	func_cap = kzalloc_obj(*func_cap, GFP_KERNEL);
+	caps->spec_qps = kzalloc_objs(*caps->spec_qps, caps->num_ports,
+				      GFP_KERNEL);

 	if (!func_cap || !caps->spec_qps) {
 		mlx4_err(dev, "Failed to allocate memory for special qps cap\n");
@@ -911,9 +912,9 @@ static int mlx4_slave_cap(struct mlx4_dev *dev)
 	struct mlx4_func_cap	   *func_cap;
 	struct mlx4_init_hca_param *hca_param;

-	hca_param = kzalloc(sizeof(*hca_param), GFP_KERNEL);
-	func_cap = kzalloc(sizeof(*func_cap), GFP_KERNEL);
-	dev_cap = kzalloc(sizeof(*dev_cap), GFP_KERNEL);
+	hca_param = kzalloc_obj(*hca_param, GFP_KERNEL);
+	func_cap = kzalloc_obj(*func_cap, GFP_KERNEL);
+	dev_cap = kzalloc_obj(*dev_cap, GFP_KERNEL);
 	if (!hca_param || !func_cap || !dev_cap) {
 		mlx4_err(dev, "Failed to allocate memory for slave_cap\n");
 		err = -ENOMEM;
@@ -1548,7 +1549,7 @@ int mlx4_queue_bond_work(struct mlx4_dev *dev, int is_bonded, u8 v2p_p1,
 {
 	struct mlx4_bond *bond;

-	bond = kzalloc(sizeof(*bond), GFP_ATOMIC);
+	bond = kzalloc_obj(*bond, GFP_ATOMIC);
 	if (!bond)
 		return -ENOMEM;

@@ -2323,8 +2324,8 @@ static int mlx4_init_hca(struct mlx4_dev *dev)
 	int err;

 	if (!mlx4_is_slave(dev)) {
-		dev_cap = kzalloc(sizeof(*dev_cap), GFP_KERNEL);
-		init_hca = kzalloc(sizeof(*init_hca), GFP_KERNEL);
+		dev_cap = kzalloc_obj(*dev_cap, GFP_KERNEL);
+		init_hca = kzalloc_obj(*init_hca, GFP_KERNEL);

 		if (!dev_cap || !init_hca) {
 			err = -ENOMEM;
@@ -2965,7 +2966,7 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
 		if (msi_x > 1)
 			nreq = min_t(int, nreq, msi_x);

-		entries = kcalloc(nreq, sizeof(*entries), GFP_KERNEL);
+		entries = kzalloc_objs(*entries, nreq, GFP_KERNEL);
 		if (!entries)
 			goto no_msi;

@@ -3173,8 +3174,7 @@ static int mlx4_init_steering(struct mlx4_dev *dev)
 	int num_entries = dev->caps.num_ports;
 	int i, j;

-	priv->steer = kcalloc(num_entries, sizeof(struct mlx4_steer),
-			      GFP_KERNEL);
+	priv->steer = kzalloc_objs(struct mlx4_steer, num_entries, GFP_KERNEL);
 	if (!priv->steer)
 		return -ENOMEM;

@@ -3279,8 +3279,8 @@ static u64 mlx4_enable_sriov(struct mlx4_dev *dev, struct pci_dev *pdev,
 					MLX4_MAX_NUM_VF);

 	if (reset_flow) {
-		dev->dev_vfs = kcalloc(total_vfs, sizeof(*dev->dev_vfs),
-				       GFP_KERNEL);
+		dev->dev_vfs = kzalloc_objs(*dev->dev_vfs, total_vfs,
+					    GFP_KERNEL);
 		if (!dev->dev_vfs)
 			goto free_mem;
 		return dev_flags;
@@ -3295,7 +3295,7 @@ static u64 mlx4_enable_sriov(struct mlx4_dev *dev, struct pci_dev *pdev,
 		}
 	}

-	dev->dev_vfs = kcalloc(total_vfs, sizeof(*dev->dev_vfs), GFP_KERNEL);
+	dev->dev_vfs = kzalloc_objs(*dev->dev_vfs, total_vfs, GFP_KERNEL);
 	if (NULL == dev->dev_vfs) {
 		mlx4_err(dev, "Failed to allocate memory for VFs\n");
 		goto disable_sriov;
@@ -3494,7 +3494,7 @@ static int mlx4_load_one(struct pci_dev *pdev, int pci_dev_data,
 	if (mlx4_is_master(dev)) {
 		/* when we hit the goto slave_start below, dev_cap already initialized */
 		if (!dev_cap) {
-			dev_cap = kzalloc(sizeof(*dev_cap), GFP_KERNEL);
+			dev_cap = kzalloc_obj(*dev_cap, GFP_KERNEL);

 			if (!dev_cap) {
 				err = -ENOMEM;
@@ -4034,7 +4034,7 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
 	priv = devlink_priv(devlink);

 	dev       = &priv->dev;
-	dev->persist = kzalloc(sizeof(*dev->persist), GFP_KERNEL);
+	dev->persist = kzalloc_obj(*dev->persist, GFP_KERNEL);
 	if (!dev->persist) {
 		ret = -ENOMEM;
 		goto err_devlink_free;
diff --git a/drivers/net/ethernet/mellanox/mlx4/mcg.c b/drivers/net/ethernet/mellanox/mlx4/mcg.c
index 24d0c7c46878..7ab766a81452 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mcg.c
+++ b/drivers/net/ethernet/mellanox/mlx4/mcg.c
@@ -162,7 +162,7 @@ static int new_steering_entry(struct mlx4_dev *dev, u8 port,
 		return -EINVAL;

 	s_steer = &mlx4_priv(dev)->steer[port - 1];
-	new_entry = kzalloc(sizeof(*new_entry), GFP_KERNEL);
+	new_entry = kzalloc_obj(*new_entry, GFP_KERNEL);
 	if (!new_entry)
 		return -ENOMEM;

@@ -175,7 +175,7 @@ static int new_steering_entry(struct mlx4_dev *dev, u8 port,
 	 */
 	pqp = get_promisc_qp(dev, port, steer, qpn);
 	if (pqp) {
-		dqp = kmalloc(sizeof(*dqp), GFP_KERNEL);
+		dqp = kmalloc_obj(*dqp, GFP_KERNEL);
 		if (!dqp) {
 			err = -ENOMEM;
 			goto out_alloc;
@@ -274,7 +274,7 @@ static int existing_steering_entry(struct mlx4_dev *dev, u8 port,
 	}

 	/* add the qp as a duplicate on this index */
-	dqp = kmalloc(sizeof(*dqp), GFP_KERNEL);
+	dqp = kmalloc_obj(*dqp, GFP_KERNEL);
 	if (!dqp)
 		return -ENOMEM;
 	dqp->qpn = qpn;
@@ -443,7 +443,7 @@ static int add_promisc_qp(struct mlx4_dev *dev, u8 port,
 		goto out_mutex;
 	}

-	pqp = kmalloc(sizeof(*pqp), GFP_KERNEL);
+	pqp = kmalloc_obj(*pqp, GFP_KERNEL);
 	if (!pqp) {
 		err = -ENOMEM;
 		goto out_mutex;
@@ -479,7 +479,7 @@ static int add_promisc_qp(struct mlx4_dev *dev, u8 port,
 					/* Entry already exists.
 					 * Add to duplicates.
 					 */
-					dqp = kmalloc(sizeof(*dqp), GFP_KERNEL);
+					dqp = kmalloc_obj(*dqp, GFP_KERNEL);
 					if (!dqp) {
 						err = -ENOMEM;
 						goto out_mailbox;
diff --git a/drivers/net/ethernet/mellanox/mlx4/pd.c b/drivers/net/ethernet/mellanox/mlx4/pd.c
index 6fc156a3918d..b29e067da2e2 100644
--- a/drivers/net/ethernet/mellanox/mlx4/pd.c
+++ b/drivers/net/ethernet/mellanox/mlx4/pd.c
@@ -189,7 +189,7 @@ int mlx4_bf_alloc(struct mlx4_dev *dev, struct mlx4_bf *bf, int node)
 		}
 		uar = kmalloc_node(sizeof(*uar), GFP_KERNEL, node);
 		if (!uar) {
-			uar = kmalloc(sizeof(*uar), GFP_KERNEL);
+			uar = kmalloc_obj(*uar, GFP_KERNEL);
 			if (!uar) {
 				err = -ENOMEM;
 				goto out;
diff --git a/drivers/net/ethernet/mellanox/mlx4/profile.c b/drivers/net/ethernet/mellanox/mlx4/profile.c
index ba361c5fbda3..828c14074f81 100644
--- a/drivers/net/ethernet/mellanox/mlx4/profile.c
+++ b/drivers/net/ethernet/mellanox/mlx4/profile.c
@@ -85,7 +85,7 @@ u64 mlx4_make_profile(struct mlx4_dev *dev,
 	struct sysinfo si;
 	int i, j;

-	profile = kcalloc(MLX4_RES_NUM, sizeof(*profile), GFP_KERNEL);
+	profile = kzalloc_objs(*profile, MLX4_RES_NUM, GFP_KERNEL);
 	if (!profile)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c
index 913ed255990f..50002356697f 100644
--- a/drivers/net/ethernet/mellanox/mlx4/qp.c
+++ b/drivers/net/ethernet/mellanox/mlx4/qp.c
@@ -564,7 +564,7 @@ static int mlx4_create_zones(struct mlx4_dev *dev,
 	if (NULL == qp_table->zones)
 		return -ENOMEM;

-	bitmap = kmalloc(sizeof(*bitmap), GFP_KERNEL);
+	bitmap = kmalloc_obj(*bitmap, GFP_KERNEL);

 	if (NULL == bitmap) {
 		err = -ENOMEM;
@@ -853,9 +853,9 @@ int mlx4_init_qp_table(struct mlx4_dev *dev)

 		/* In mfunc, calculate proxy and tunnel qp offsets for the PF here,
 		 * since the PF does not call mlx4_slave_caps */
-		dev->caps.spec_qps = kcalloc(dev->caps.num_ports,
-					     sizeof(*dev->caps.spec_qps),
-					     GFP_KERNEL);
+		dev->caps.spec_qps = kzalloc_objs(*dev->caps.spec_qps,
+						  dev->caps.num_ports,
+						  GFP_KERNEL);
 		if (!dev->caps.spec_qps) {
 			err = -ENOMEM;
 			goto err_mem;
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
index 771b92019af1..dba5709ff96f 100644
--- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
+++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
@@ -505,8 +505,7 @@ int mlx4_init_resource_tracker(struct mlx4_dev *dev)
 	int t;

 	priv->mfunc.master.res_tracker.slave_list =
-		kcalloc(dev->num_slaves, sizeof(struct slave_list),
-			GFP_KERNEL);
+		kzalloc_objs(struct slave_list, dev->num_slaves, GFP_KERNEL);
 	if (!priv->mfunc.master.res_tracker.slave_list)
 		return -ENOMEM;

@@ -525,21 +524,20 @@ int mlx4_init_resource_tracker(struct mlx4_dev *dev)
 	for (i = 0; i < MLX4_NUM_OF_RESOURCE_TYPE; i++) {
 		struct resource_allocator *res_alloc =
 			&priv->mfunc.master.res_tracker.res_alloc[i];
-		res_alloc->quota = kmalloc_array(dev->persist->num_vfs + 1,
-						 sizeof(int),
-						 GFP_KERNEL);
-		res_alloc->guaranteed = kmalloc_array(dev->persist->num_vfs + 1,
-						      sizeof(int),
-						      GFP_KERNEL);
+		res_alloc->quota = kmalloc_objs(int, dev->persist->num_vfs + 1,
+						GFP_KERNEL);
+		res_alloc->guaranteed = kmalloc_objs(int,
+						     dev->persist->num_vfs + 1,
+						     GFP_KERNEL);
 		if (i == RES_MAC || i == RES_VLAN)
 			res_alloc->allocated =
-				kcalloc(MLX4_MAX_PORTS *
-						(dev->persist->num_vfs + 1),
-					sizeof(int), GFP_KERNEL);
+				kzalloc_objs(int,
+					     MLX4_MAX_PORTS * (dev->persist->num_vfs + 1),
+					     GFP_KERNEL);
 		else
 			res_alloc->allocated =
-				kcalloc(dev->persist->num_vfs + 1,
-					sizeof(int), GFP_KERNEL);
+				kzalloc_objs(int, dev->persist->num_vfs + 1,
+					     GFP_KERNEL);
 		/* Reduce the sink counter */
 		if (i == RES_COUNTER)
 			res_alloc->res_free = dev->caps.max_counters - 1;
@@ -1051,7 +1049,7 @@ static struct res_common *alloc_qp_tr(int id)
 {
 	struct res_qp *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

@@ -1069,7 +1067,7 @@ static struct res_common *alloc_mtt_tr(int id, int order)
 {
 	struct res_mtt *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

@@ -1085,7 +1083,7 @@ static struct res_common *alloc_mpt_tr(int id, int key)
 {
 	struct res_mpt *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

@@ -1100,7 +1098,7 @@ static struct res_common *alloc_eq_tr(int id)
 {
 	struct res_eq *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

@@ -1114,7 +1112,7 @@ static struct res_common *alloc_cq_tr(int id)
 {
 	struct res_cq *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

@@ -1129,7 +1127,7 @@ static struct res_common *alloc_srq_tr(int id)
 {
 	struct res_srq *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

@@ -1144,7 +1142,7 @@ static struct res_common *alloc_counter_tr(int id, int port)
 {
 	struct res_counter *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

@@ -1159,7 +1157,7 @@ static struct res_common *alloc_xrcdn_tr(int id)
 {
 	struct res_xrcdn *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

@@ -1173,7 +1171,7 @@ static struct res_common *alloc_fs_rule_tr(u64 id, int qpn)
 {
 	struct res_fs_rule *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

@@ -1240,8 +1238,8 @@ int mlx4_calc_vf_counters(struct mlx4_dev *dev, int slave, int port,

 	memset(data, 0, sizeof(*data));

-	counters_arr = kmalloc_array(dev->caps.max_counters,
-				     sizeof(*counters_arr), GFP_KERNEL);
+	counters_arr = kmalloc_objs(*counters_arr, dev->caps.max_counters,
+				    GFP_KERNEL);
 	if (!counters_arr)
 		return -ENOMEM;

@@ -1285,7 +1283,7 @@ static int add_res_range(struct mlx4_dev *dev, int slave, u64 base, int count,
 	struct mlx4_resource_tracker *tracker = &priv->mfunc.master.res_tracker;
 	struct rb_root *root = &tracker->res_tree[type];

-	res_arr = kcalloc(count, sizeof(*res_arr), GFP_KERNEL);
+	res_arr = kzalloc_objs(*res_arr, count, GFP_KERNEL);
 	if (!res_arr)
 		return -ENOMEM;

@@ -2038,7 +2036,7 @@ static int mac_add_to_slave(struct mlx4_dev *dev, int slave, u64 mac, int port,

 	if (mlx4_grant_resource(dev, slave, RES_MAC, 1, port))
 		return -EINVAL;
-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (!res) {
 		mlx4_release_resource(dev, slave, RES_MAC, 1, port);
 		return -ENOMEM;
@@ -2145,7 +2143,7 @@ static int vlan_add_to_slave(struct mlx4_dev *dev, int slave, u16 vlan,

 	if (mlx4_grant_resource(dev, slave, RES_VLAN, 1, port))
 		return -EINVAL;
-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (!res) {
 		mlx4_release_resource(dev, slave, RES_VLAN, 1, port);
 		return -ENOMEM;
@@ -4032,7 +4030,7 @@ static int add_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp,
 	struct res_gid *res;
 	int err;

-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (!res)
 		return -ENOMEM;

@@ -5187,8 +5185,8 @@ static void rem_slave_counters(struct mlx4_dev *dev, int slave)
 		mlx4_warn(dev, "rem_slave_counters: Could not move all counters - too busy for slave %d\n",
 			  slave);

-	counters_arr = kmalloc_array(dev->caps.max_counters,
-				     sizeof(*counters_arr), GFP_KERNEL);
+	counters_arr = kmalloc_objs(*counters_arr, dev->caps.max_counters,
+				    GFP_KERNEL);
 	if (!counters_arr)
 		return;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/alloc.c b/drivers/net/ethernet/mellanox/mlx5/core/alloc.c
index 6aca004e88cd..058b7b2497ac 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/alloc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/alloc.c
@@ -79,8 +79,7 @@ int mlx5_frag_buf_alloc_node(struct mlx5_core_dev *dev, int size,
 	buf->size = size;
 	buf->npages = DIV_ROUND_UP(size, PAGE_SIZE);
 	buf->page_shift = PAGE_SHIFT;
-	buf->frags = kcalloc(buf->npages, sizeof(struct mlx5_buf_list),
-			     GFP_KERNEL);
+	buf->frags = kzalloc_objs(struct mlx5_buf_list, buf->npages, GFP_KERNEL);
 	if (!buf->frags)
 		goto err_out;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
index 5b08e5ffe0e2..6c99c7f36163 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
@@ -123,7 +123,7 @@ cmd_alloc_ent(struct mlx5_cmd *cmd, struct mlx5_cmd_msg *in,
 	gfp_t alloc_flags = cbk ? GFP_ATOMIC : GFP_KERNEL;
 	struct mlx5_cmd_work_ent *ent;

-	ent = kzalloc(sizeof(*ent), alloc_flags);
+	ent = kzalloc_obj(*ent, alloc_flags);
 	if (!ent)
 		return ERR_PTR(-ENOMEM);

@@ -1436,7 +1436,7 @@ static struct mlx5_cmd_mailbox *alloc_cmd_box(struct mlx5_core_dev *dev,
 {
 	struct mlx5_cmd_mailbox *mailbox;

-	mailbox = kmalloc(sizeof(*mailbox), flags);
+	mailbox = kmalloc_obj(*mailbox, flags);
 	if (!mailbox)
 		return ERR_PTR(-ENOMEM);

@@ -1470,7 +1470,7 @@ static struct mlx5_cmd_msg *mlx5_alloc_cmd_msg(struct mlx5_core_dev *dev,
 	int n;
 	int i;

-	msg = kzalloc(sizeof(*msg), flags);
+	msg = kzalloc_obj(*msg, flags);
 	if (!msg)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c b/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
index 1301c56e20d6..f2aa14e07e92 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
@@ -201,7 +201,7 @@ static const struct file_operations slots_fops = {
 static struct mlx5_cmd_stats *
 mlx5_cmdif_alloc_stats(struct xarray *stats_xa, int opcode)
 {
-	struct mlx5_cmd_stats *stats = kzalloc(sizeof(*stats), GFP_KERNEL);
+	struct mlx5_cmd_stats *stats = kzalloc_obj(*stats, GFP_KERNEL);
 	int err;

 	if (!stats)
@@ -509,7 +509,7 @@ static int add_res_tree(struct mlx5_core_dev *dev, enum dbg_rsc_type type,
 	char resn[32];
 	int i;

-	d = kzalloc(struct_size(d, fields, nfile), GFP_KERNEL);
+	d = kzalloc_flex(*d, fields, nfile, GFP_KERNEL);
 	if (!d)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/dev.c b/drivers/net/ethernet/mellanox/mlx5/core/dev.c
index 781e39b5aa1d..bed0b6bfba7e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/dev.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/dev.c
@@ -277,8 +277,8 @@ int mlx5_adev_init(struct mlx5_core_dev *dev)
 {
 	struct mlx5_priv *priv = &dev->priv;

-	priv->adev = kcalloc(ARRAY_SIZE(mlx5_adev_devices),
-			     sizeof(struct mlx5_adev *), GFP_KERNEL);
+	priv->adev = kzalloc_objs(struct mlx5_adev *,
+				  ARRAY_SIZE(mlx5_adev_devices), GFP_KERNEL);
 	if (!priv->adev)
 		return -ENOMEM;

@@ -310,7 +310,7 @@ static struct mlx5_adev *add_adev(struct mlx5_core_dev *dev, int idx)
 	struct mlx5_adev *madev;
 	int ret;

-	madev = kzalloc(sizeof(*madev), GFP_KERNEL);
+	madev = kzalloc_obj(*madev, GFP_KERNEL);
 	if (!madev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
index ea77fbd98396..18cfb7655805 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
@@ -294,7 +294,7 @@ static int mlx5_devlink_trap_init(struct devlink *devlink, const struct devlink_
 	struct mlx5_core_dev *dev = devlink_priv(devlink);
 	struct mlx5_devlink_trap *dl_trap;

-	dl_trap = kzalloc(sizeof(*dl_trap), GFP_KERNEL);
+	dl_trap = kzalloc_obj(*dl_trap, GFP_KERNEL);
 	if (!dl_trap)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c b/drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c
index 6b4ec457ce22..d2e2c9f0f340 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c
@@ -412,7 +412,7 @@ static struct tracer_string_format *mlx5_tracer_message_insert(struct mlx5_fw_tr
 		&tracer->hash[mlx5_tracer_message_hash(tracer_event->string_event.tmsn)];
 	struct tracer_string_format *cur_string;

-	cur_string = kzalloc(sizeof(*cur_string), GFP_KERNEL);
+	cur_string = kzalloc_obj(*cur_string, GFP_KERNEL);
 	if (!cur_string)
 		return NULL;

@@ -1023,7 +1023,7 @@ struct mlx5_fw_tracer *mlx5_fw_tracer_create(struct mlx5_core_dev *dev)
 		return NULL;
 	}

-	tracer = kvzalloc(sizeof(*tracer), GFP_KERNEL);
+	tracer = kvzalloc_obj(*tracer, GFP_KERNEL);
 	if (!tracer)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/diag/rsc_dump.c b/drivers/net/ethernet/mellanox/mlx5/core/diag/rsc_dump.c
index c5b560a8b026..9bcc2d8edc76 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/diag/rsc_dump.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/diag/rsc_dump.c
@@ -137,7 +137,7 @@ struct mlx5_rsc_dump_cmd *mlx5_rsc_dump_cmd_create(struct mlx5_core_dev *dev,
 	if (!sgmt_type && key->rsc != MLX5_SGMT_TYPE_MENU)
 		return ERR_PTR(-EOPNOTSUPP);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		mlx5_core_err(dev, "Resource dump: Failed to allocate command\n");
 		return ERR_PTR(-ENOMEM);
@@ -255,7 +255,7 @@ struct mlx5_rsc_dump *mlx5_rsc_dump_create(struct mlx5_core_dev *dev)
 		mlx5_core_dbg(dev, "Resource dump: capability not present\n");
 		return NULL;
 	}
-	rsc_dump = kzalloc(sizeof(*rsc_dump), GFP_KERNEL);
+	rsc_dump = kzalloc_obj(*rsc_dump, GFP_KERNEL);
 	if (!rsc_dump)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/dpll.c b/drivers/net/ethernet/mellanox/mlx5/core/dpll.c
index 3981dd81d4c1..abb678fe3021 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/dpll.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/dpll.c
@@ -433,7 +433,7 @@ static int mlx5_dpll_probe(struct auxiliary_device *adev,
 	if (err)
 		return err;

-	mdpll = kzalloc(sizeof(*mdpll), GFP_KERNEL);
+	mdpll = kzalloc_obj(*mdpll, GFP_KERNEL);
 	if (!mdpll)
 		return -ENOMEM;
 	mdpll->mdev = mdev;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/fs_tt_redirect.c b/drivers/net/ethernet/mellanox/mlx5/core/en/fs_tt_redirect.c
index 671adbad0a40..8b418e8538ca 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/fs_tt_redirect.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/fs_tt_redirect.c
@@ -90,7 +90,7 @@ mlx5e_fs_tt_redirect_udp_add_rule(struct mlx5e_flow_steering *fs,
 	if (type == FS_UDP_NUM_TYPES)
 		return ERR_PTR(-EINVAL);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -150,7 +150,7 @@ static int fs_udp_create_groups(struct mlx5e_flow_table *ft, enum fs_udp_type ty
 	int err;
 	u8 *mc;

-	ft->g = kcalloc(MLX5E_FS_UDP_NUM_GROUPS, sizeof(*ft->g), GFP_KERNEL);
+	ft->g = kzalloc_objs(*ft->g, MLX5E_FS_UDP_NUM_GROUPS, GFP_KERNEL);
 	in = kvzalloc(inlen, GFP_KERNEL);
 	if  (!in || !ft->g) {
 		kfree(ft->g);
@@ -325,7 +325,7 @@ int mlx5e_fs_tt_redirect_udp_create(struct mlx5e_flow_steering *fs)
 		return 0;
 	}

-	udp = kzalloc(sizeof(*udp), GFP_KERNEL);
+	udp = kzalloc_obj(*udp, GFP_KERNEL);
 	if (!udp)
 		return -ENOMEM;
 	mlx5e_fs_set_udp(fs, udp);
@@ -372,7 +372,7 @@ mlx5e_fs_tt_redirect_any_add_rule(struct mlx5e_flow_steering *fs,
 	struct mlx5_flow_spec *spec;
 	int err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -432,7 +432,7 @@ static int fs_any_create_groups(struct mlx5e_flow_table *ft)
 	int err;
 	u8 *mc;

-	ft->g = kcalloc(MLX5E_FS_UDP_NUM_GROUPS, sizeof(*ft->g), GFP_KERNEL);
+	ft->g = kzalloc_objs(*ft->g, MLX5E_FS_UDP_NUM_GROUPS, GFP_KERNEL);
 	in = kvzalloc(inlen, GFP_KERNEL);
 	if  (!in || !ft->g) {
 		kfree(ft->g);
@@ -589,7 +589,7 @@ int mlx5e_fs_tt_redirect_any_create(struct mlx5e_flow_steering *fs)
 		return 0;
 	}

-	fs_any = kzalloc(sizeof(*fs_any), GFP_KERNEL);
+	fs_any = kzalloc_obj(*fs_any, GFP_KERNEL);
 	if (!fs_any)
 		return -ENOMEM;
 	mlx5e_fs_set_any(fs, fs_any);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/htb.c b/drivers/net/ethernet/mellanox/mlx5/core/en/htb.c
index 09d441ecb9f6..c63b8022fae6 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/htb.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/htb.c
@@ -72,7 +72,7 @@ mlx5e_htb_node_create_leaf(struct mlx5e_htb *htb, u16 classid, u16 qid,
 {
 	struct mlx5e_qos_node *node;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return ERR_PTR(-ENOMEM);

@@ -93,7 +93,7 @@ static struct mlx5e_qos_node *mlx5e_htb_node_create_root(struct mlx5e_htb *htb)
 {
 	struct mlx5e_qos_node *node;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return ERR_PTR(-ENOMEM);

@@ -694,7 +694,7 @@ mlx5e_htb_node_modify(struct mlx5e_htb *htb, u16 classid, u64 rate, u64 ceil,

 struct mlx5e_htb *mlx5e_htb_alloc(void)
 {
-	return kvzalloc(sizeof(struct mlx5e_htb), GFP_KERNEL);
+	return kvzalloc_obj(struct mlx5e_htb, GFP_KERNEL);
 }

 void mlx5e_htb_free(struct mlx5e_htb *htb)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/mapping.c b/drivers/net/ethernet/mellanox/mlx5/core/en/mapping.c
index 1de18c7e96ec..b1a84a01a81c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/mapping.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/mapping.c
@@ -198,7 +198,7 @@ mapping_create(size_t data_size, u32 max_id, bool delayed_removal)
 {
 	struct mapping_ctx *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c b/drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c
index 74660e7fe674..5f4a7ca15518 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c
@@ -883,7 +883,7 @@ int mlx5e_ptp_open(struct mlx5e_priv *priv, struct mlx5e_params *params,


 	c = kvzalloc_node(sizeof(*c), GFP_KERNEL, dev_to_node(mlx5_core_dma_dev(mdev)));
-	cparams = kvzalloc(sizeof(*cparams), GFP_KERNEL);
+	cparams = kvzalloc_obj(*cparams, GFP_KERNEL);
 	if (!c || !cparams) {
 		err = -ENOMEM;
 		goto err_free;
@@ -988,7 +988,7 @@ int mlx5e_ptp_alloc_rx_fs(struct mlx5e_flow_steering *fs,
 	if (!mlx5e_profile_feature_cap(profile, PTP_RX))
 		return 0;

-	ptp_fs = kzalloc(sizeof(*ptp_fs), GFP_KERNEL);
+	ptp_fs = kzalloc_obj(*ptp_fs, GFP_KERNEL);
 	if (!ptp_fs)
 		return -ENOMEM;
 	mlx5e_fs_set_ptp(fs, ptp_fs);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/qos.c b/drivers/net/ethernet/mellanox/mlx5/core/en/qos.c
index 4e461cb03b83..cebcff010eac 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/qos.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/qos.c
@@ -87,8 +87,9 @@ int mlx5e_open_qos_sq(struct mlx5e_priv *priv, struct mlx5e_channels *chs,
 	if (!priv->htb_qos_sq_stats) {
 		struct mlx5e_sq_stats **stats_list;

-		stats_list = kvcalloc(mlx5e_qos_max_leaf_nodes(priv->mdev),
-				      sizeof(*stats_list), GFP_KERNEL);
+		stats_list = kvzalloc_objs(*stats_list,
+					   mlx5e_qos_max_leaf_nodes(priv->mdev),
+					   GFP_KERNEL);
 		if (!stats_list)
 			return -ENOMEM;

@@ -98,7 +99,7 @@ int mlx5e_open_qos_sq(struct mlx5e_priv *priv, struct mlx5e_channels *chs,
 	if (!priv->htb_qos_sq_stats[node_qid]) {
 		struct mlx5e_sq_stats *stats;

-		stats = kzalloc(sizeof(*stats), GFP_KERNEL);
+		stats = kzalloc_obj(*stats, GFP_KERNEL);
 		if (!stats)
 			return -ENOMEM;

@@ -114,7 +115,7 @@ int mlx5e_open_qos_sq(struct mlx5e_priv *priv, struct mlx5e_channels *chs,
 	c = chs->c[ix];

 	qos_sqs = mlx5e_state_dereference(priv, c->qos_sqs);
-	sq = kzalloc(sizeof(*sq), GFP_KERNEL);
+	sq = kzalloc_obj(*sq, GFP_KERNEL);

 	if (!sq)
 		return -ENOMEM;
@@ -276,7 +277,8 @@ int mlx5e_qos_alloc_queues(struct mlx5e_priv *priv, struct mlx5e_channels *chs)
 	for (i = 0; i < chs->num; i++) {
 		struct mlx5e_txqsq **sqs;

-		sqs = kvcalloc(qos_sqs_size, sizeof(struct mlx5e_txqsq *), GFP_KERNEL);
+		sqs = kvzalloc_objs(struct mlx5e_txqsq *, qos_sqs_size,
+				    GFP_KERNEL);
 		if (!sqs)
 			goto err_free;

@@ -460,7 +462,7 @@ struct mlx5e_mqprio_rl {

 struct mlx5e_mqprio_rl *mlx5e_mqprio_rl_alloc(void)
 {
-	return kvzalloc(sizeof(struct mlx5e_mqprio_rl), GFP_KERNEL);
+	return kvzalloc_obj(struct mlx5e_mqprio_rl, GFP_KERNEL);
 }

 void mlx5e_mqprio_rl_free(struct mlx5e_mqprio_rl *rl)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bond.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bond.c
index 016a61c52c45..8038deae35a7 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bond.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bond.c
@@ -92,7 +92,7 @@ int mlx5e_rep_bond_enslave(struct mlx5_eswitch *esw, struct net_device *netdev,
 	mdata = mlx5e_lookup_rep_bond_metadata(&rpriv->uplink_priv, lag_dev);
 	if (!mdata) {
 		/* First netdev becomes slave, no metadata presents the lag_dev. Create one */
-		mdata = kzalloc(sizeof(*mdata), GFP_KERNEL);
+		mdata = kzalloc_obj(*mdata, GFP_KERNEL);
 		if (!mdata)
 			return -ENOMEM;

@@ -110,7 +110,7 @@ int mlx5e_rep_bond_enslave(struct mlx5_eswitch *esw, struct net_device *netdev,
 			   mdata->metadata_reg_c_0);
 	}

-	s_entry = kzalloc(sizeof(*s_entry), GFP_KERNEL);
+	s_entry = kzalloc_obj(*s_entry, GFP_KERNEL);
 	if (!s_entry) {
 		err = -ENOMEM;
 		goto entry_alloc_err;
@@ -315,7 +315,7 @@ int mlx5e_rep_bond_init(struct mlx5e_rep_priv *rpriv)
 	if (!mlx5_esw_acl_egress_fwd2vport_supported(priv->mdev->priv.eswitch))
 		goto out;

-	uplink_priv->bond = kvzalloc(sizeof(*uplink_priv->bond), GFP_KERNEL);
+	uplink_priv->bond = kvzalloc_obj(*uplink_priv->bond, GFP_KERNEL);
 	if (!uplink_priv->bond) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c
index 87a2ad69526d..baac38bece14 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c
@@ -394,7 +394,7 @@ mlx5_esw_bridge_init_switchdev_fdb_work(struct net_device *dev, bool add,
 	struct mlx5_bridge_switchdev_fdb_work *work;
 	u8 *addr;

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/neigh.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/neigh.c
index 2e9bee4e5209..cbfb0cc32a3b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/neigh.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/neigh.c
@@ -173,7 +173,7 @@ static struct neigh_update_work *mlx5e_alloc_neigh_update_work(struct mlx5e_priv
 	struct mlx5e_neigh_hash_entry *nhe;
 	struct mlx5e_neigh m_neigh = {};

-	update_work = kzalloc(sizeof(*update_work), GFP_ATOMIC);
+	update_work = kzalloc_obj(*update_work, GFP_ATOMIC);
 	if (WARN_ON(!update_work))
 		return NULL;

@@ -376,7 +376,7 @@ int mlx5e_rep_neigh_entry_create(struct mlx5e_priv *priv,
 {
 	int err;

-	*nhe = kzalloc(sizeof(**nhe), GFP_KERNEL);
+	*nhe = kzalloc_obj(**nhe, GFP_KERNEL);
 	if (!*nhe)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c
index a55452c69f06..2dc5e139c99c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c
@@ -503,7 +503,7 @@ mlx5e_rep_indr_setup_block(struct net_device *netdev, struct Qdisc *sch,
 		if (indr_priv)
 			return -EEXIST;

-		indr_priv = kmalloc(sizeof(*indr_priv), GFP_KERNEL);
+		indr_priv = kmalloc_obj(*indr_priv, GFP_KERNEL);
 		if (!indr_priv)
 			return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rss.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rss.c
index 88b0e1050d1a..c9d141b8650b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/rss.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rss.c
@@ -93,7 +93,7 @@ void mlx5e_rss_params_indir_modify_actual_size(struct mlx5e_rss *rss, u32 num_ch
 int mlx5e_rss_params_indir_init(struct mlx5e_rss_params_indir *indir,
 				u32 actual_table_size, u32 max_table_size)
 {
-	indir->table = kvmalloc_array(max_table_size, sizeof(*indir->table), GFP_KERNEL);
+	indir->table = kvmalloc_objs(*indir->table, max_table_size, GFP_KERNEL);
 	if (!indir->table)
 		return -ENOMEM;

@@ -134,7 +134,7 @@ static struct mlx5e_rss *mlx5e_rss_init_copy(const struct mlx5e_rss *from)
 	struct mlx5e_rss *rss;
 	int err;

-	rss = kvzalloc(sizeof(*rss), GFP_KERNEL);
+	rss = kvzalloc_obj(*rss, GFP_KERNEL);
 	if (!rss)
 		return ERR_PTR(-ENOMEM);

@@ -216,7 +216,7 @@ mlx5e_rss_create_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
 	if (*tir_p)
 		return -EINVAL;

-	tir = kvzalloc(sizeof(*tir), GFP_KERNEL);
+	tir = kvzalloc_obj(*tir, GFP_KERNEL);
 	if (!tir)
 		return -ENOMEM;

@@ -372,7 +372,7 @@ mlx5e_rss_init(struct mlx5_core_dev *mdev,
 	struct mlx5e_rss *rss;
 	int err;

-	rss = kvzalloc(sizeof(*rss), GFP_KERNEL);
+	rss = kvzalloc_obj(*rss, GFP_KERNEL);
 	if (!rss)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
index 55c117b7d8c4..a9f55ffb894e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
@@ -325,7 +325,7 @@ static struct mlx5e_rx_res *mlx5e_rx_res_alloc(struct mlx5_core_dev *mdev, unsig
 {
 	struct mlx5e_rx_res *rx_res;

-	rx_res = kvzalloc(sizeof(*rx_res), GFP_KERNEL);
+	rx_res = kvzalloc_obj(*rx_res, GFP_KERNEL);
 	if (!rx_res)
 		return NULL;

@@ -359,7 +359,7 @@ static int mlx5e_rx_res_channels_init(struct mlx5e_rx_res *res)
 	if (!builder)
 		return -ENOMEM;

-	res->channels = kvcalloc(res->max_nch, sizeof(*res->channels), GFP_KERNEL);
+	res->channels = kvzalloc_objs(*res->channels, res->max_nch, GFP_KERNEL);
 	if (!res->channels) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/selq.c b/drivers/net/ethernet/mellanox/mlx5/core/en/selq.c
index f66bbc846464..4598d922385a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/selq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/selq.c
@@ -30,11 +30,11 @@ int mlx5e_selq_init(struct mlx5e_selq *selq, struct mutex *state_lock)

 	selq->state_lock = state_lock;

-	selq->standby = kvzalloc(sizeof(*selq->standby), GFP_KERNEL);
+	selq->standby = kvzalloc_obj(*selq->standby, GFP_KERNEL);
 	if (!selq->standby)
 		return -ENOMEM;

-	init_params = kvzalloc(sizeof(*selq->active), GFP_KERNEL);
+	init_params = kvzalloc_obj(*selq->active, GFP_KERNEL);
 	if (!init_params) {
 		kvfree(selq->standby);
 		selq->standby = NULL;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act_stats.c
index 7aa926e542d3..45ff384b66d4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act_stats.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act_stats.c
@@ -36,7 +36,7 @@ mlx5e_tc_act_stats_create(void)
 	struct mlx5e_tc_act_stats_handle *handle;
 	int err;

-	handle = kvzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kvzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle)
 		return ERR_PTR(-ENOMEM);

@@ -67,7 +67,7 @@ mlx5e_tc_act_stats_add(struct mlx5e_tc_act_stats_handle *handle,
 	u64 lastused;
 	int err = 0;

-	act_stats = kvzalloc(sizeof(*act_stats), GFP_KERNEL);
+	act_stats = kvzalloc_obj(*act_stats, GFP_KERNEL);
 	if (!act_stats)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_dmfs.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_dmfs.c
index 64a82aafaaca..e983da2574ec 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_dmfs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_dmfs.c
@@ -34,7 +34,7 @@ mlx5_ct_fs_dmfs_ct_rule_add(struct mlx5_ct_fs *fs, struct mlx5_flow_spec *spec,
 	struct mlx5_ct_fs_dmfs_rule *dmfs_rule;
 	int err;

-	dmfs_rule = kzalloc(sizeof(*dmfs_rule), GFP_KERNEL);
+	dmfs_rule = kzalloc_obj(*dmfs_rule, GFP_KERNEL);
 	if (!dmfs_rule)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_hmfs.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_hmfs.c
index d3db6146fcad..59aa6ee5be05 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_hmfs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_hmfs.c
@@ -203,7 +203,7 @@ mlx5_ct_fs_hmfs_ct_rule_add(struct mlx5_ct_fs *fs, struct mlx5_flow_spec *spec,
 	if (!mlx5e_tc_ct_is_valid_flow_rule(fs->netdev, flow_rule))
 		return ERR_PTR(-EOPNOTSUPP);

-	hmfs_rule = kzalloc(sizeof(*hmfs_rule), GFP_KERNEL);
+	hmfs_rule = kzalloc_obj(*hmfs_rule, GFP_KERNEL);
 	if (!hmfs_rule)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_smfs.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_smfs.c
index 4d6924b644c9..897d8f7ed7f2 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_smfs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_smfs.c
@@ -92,7 +92,7 @@ mlx5_ct_fs_smfs_matcher_create(struct mlx5_ct_fs *fs, struct mlx5dr_table *tbl,
 	struct mlx5dr_matcher *dr_matcher;
 	struct mlx5_flow_spec *spec;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -234,7 +234,7 @@ mlx5_ct_fs_smfs_ct_rule_add(struct mlx5_ct_fs *fs, struct mlx5_flow_spec *spec,
 	if (!mlx5e_tc_ct_is_valid_flow_rule(fs->netdev, flow_rule))
 		return ERR_PTR(-EOPNOTSUPP);

-	smfs_rule = kzalloc(sizeof(*smfs_rule), GFP_KERNEL);
+	smfs_rule = kzalloc_obj(*smfs_rule, GFP_KERNEL);
 	if (!smfs_rule)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/int_port.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/int_port.c
index 991f47050643..11754c8ae986 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/int_port.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/int_port.c
@@ -69,7 +69,7 @@ mlx5e_int_port_create_rx_rule(struct mlx5_eswitch *esw,
 	struct mlx5_flow_spec *spec;
 	void *misc;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -167,7 +167,7 @@ mlx5e_int_port_add(struct mlx5e_tc_int_port_priv *priv,
 		return ERR_PTR(-ENOSPC);
 	}

-	int_port = kzalloc(sizeof(*int_port), GFP_KERNEL);
+	int_port = kzalloc_obj(*int_port, GFP_KERNEL);
 	if (!int_port)
 		return ERR_PTR(-ENOMEM);

@@ -313,7 +313,7 @@ mlx5e_tc_int_port_init(struct mlx5e_priv *priv)
 	if (!mlx5e_tc_int_port_supported(esw))
 		return NULL;

-	int_port_priv = kzalloc(sizeof(*int_port_priv), GFP_KERNEL);
+	int_port_priv = kzalloc_obj(*int_port_priv, GFP_KERNEL);
 	if (!int_port_priv)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/meter.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/meter.c
index d5d9146efca6..80ddbe373f97 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/meter.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/meter.c
@@ -247,7 +247,7 @@ __mlx5e_flow_meter_alloc(struct mlx5e_flow_meters *flow_meters, bool alloc_aso)
 	int err, pos, total;
 	u32 id;

-	meter = kzalloc(sizeof(*meter), GFP_KERNEL);
+	meter = kzalloc_obj(*meter, GFP_KERNEL);
 	if (!meter)
 		return ERR_PTR(-ENOMEM);

@@ -526,7 +526,7 @@ mlx5e_flow_meters_init(struct mlx5e_priv *priv,
 		return ERR_PTR(-EOPNOTSUPP);
 	}

-	flow_meters = kzalloc(sizeof(*flow_meters), GFP_KERNEL);
+	flow_meters = kzalloc_obj(*flow_meters, GFP_KERNEL);
 	if (!flow_meters)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/post_act.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/post_act.c
index b500cc2c9689..62184531b3e6 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/post_act.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/post_act.c
@@ -42,7 +42,7 @@ mlx5e_tc_post_act_init(struct mlx5e_priv *priv, struct mlx5_fs_chains *chains,
 		goto err_check;
 	}

-	post_act = kzalloc(sizeof(*post_act), GFP_KERNEL);
+	post_act = kzalloc_obj(*post_act, GFP_KERNEL);
 	if (!post_act) {
 		err = -ENOMEM;
 		goto err_check;
@@ -86,7 +86,7 @@ mlx5e_tc_post_act_offload(struct mlx5e_post_act *post_act,
 	if (IS_ERR(post_act))
 		return PTR_ERR(post_act);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -117,7 +117,7 @@ mlx5e_tc_post_act_add(struct mlx5e_post_act *post_act, struct mlx5_flow_attr *po
 	if (IS_ERR(post_act))
 		return ERR_CAST(post_act);

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/post_meter.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/post_meter.c
index 50b60fd00946..e5467a94e9dc 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/post_meter.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/post_meter.c
@@ -156,7 +156,7 @@ mlx5e_post_meter_rate_rules_create(struct mlx5e_priv *priv,
 	struct mlx5_flow_spec *spec;
 	int err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -402,7 +402,7 @@ mlx5e_post_meter_init(struct mlx5e_priv *priv,
 	struct mlx5e_post_meter_priv *post_meter;
 	int err;

-	post_meter = kzalloc(sizeof(*post_meter), GFP_KERNEL);
+	post_meter = kzalloc_obj(*post_meter, GFP_KERNEL);
 	if (!post_meter)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/sample.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/sample.c
index 5db239cae814..938961520f6c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/sample.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/sample.c
@@ -183,7 +183,7 @@ sampler_get(struct mlx5e_tc_psample *tc_psample, u32 sample_ratio, u32 default_t
 				 sample_ratio, default_table_id))
 			goto add_ref;

-	sampler = kzalloc(sizeof(*sampler), GFP_KERNEL);
+	sampler = kzalloc_obj(*sampler, GFP_KERNEL);
 	if (!sampler) {
 		err = -ENOMEM;
 		goto err_alloc;
@@ -273,7 +273,7 @@ sample_restore_get(struct mlx5e_tc_psample *tc_psample, u32 obj_id,
 		if (restore->obj_id == obj_id)
 			goto add_ref;

-	restore = kzalloc(sizeof(*restore), GFP_KERNEL);
+	restore = kzalloc_obj(*restore, GFP_KERNEL);
 	if (!restore) {
 		err = -ENOMEM;
 		goto err_alloc;
@@ -485,7 +485,7 @@ mlx5e_tc_sample_offload(struct mlx5e_tc_psample *tc_psample,
 	if (IS_ERR_OR_NULL(tc_psample))
 		return ERR_PTR(-EOPNOTSUPP);

-	sample_flow = kzalloc(sizeof(*sample_flow), GFP_KERNEL);
+	sample_flow = kzalloc_obj(*sample_flow, GFP_KERNEL);
 	if (!sample_flow)
 		return ERR_PTR(-ENOMEM);
 	sample_attr = &attr->sample_attr;
@@ -619,7 +619,7 @@ mlx5e_tc_sample_init(struct mlx5_eswitch *esw, struct mlx5e_post_act *post_act)
 	struct mlx5e_tc_psample *tc_psample;
 	int err;

-	tc_psample = kzalloc(sizeof(*tc_psample), GFP_KERNEL);
+	tc_psample = kzalloc_obj(*tc_psample, GFP_KERNEL);
 	if (!tc_psample)
 		return ERR_PTR(-ENOMEM);
 	if (IS_ERR_OR_NULL(post_act)) {
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c
index fc0e57403d25..2d3654faabfa 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c
@@ -812,7 +812,7 @@ mlx5_tc_ct_entry_add_rule(struct mlx5_tc_ct_priv *ct_priv,

 	zone_rule->nat = nat;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -887,7 +887,7 @@ mlx5_tc_ct_entry_update_rule(struct mlx5_tc_ct_priv *ct_priv,
 	struct mlx5_flow_spec *spec;
 	int err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -1021,7 +1021,7 @@ mlx5_tc_ct_counter_create(struct mlx5_tc_ct_priv *ct_priv)
 	struct mlx5_ct_counter *counter;
 	int ret;

-	counter = kzalloc(sizeof(*counter), GFP_KERNEL);
+	counter = kzalloc_obj(*counter, GFP_KERNEL);
 	if (!counter)
 		return ERR_PTR(-ENOMEM);

@@ -1219,7 +1219,7 @@ mlx5_tc_ct_block_flow_offload_add(struct mlx5_ct_ft *ft,
 	}
 	spin_unlock_bh(&ct_priv->ht_lock);

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1620,7 +1620,7 @@ static int tc_ct_pre_ct_add_rules(struct mlx5_ct_ft *ct_ft,
 	u16 zone;
 	int err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -1856,7 +1856,7 @@ mlx5_tc_ct_add_ft_cb(struct mlx5_tc_ct_priv *ct_priv, u16 zone,
 		return ft;
 	}

-	ft = kzalloc(sizeof(*ft), GFP_KERNEL);
+	ft = kzalloc_obj(*ft, GFP_KERNEL);
 	if (!ft)
 		return ERR_PTR(-ENOMEM);

@@ -2298,7 +2298,7 @@ mlx5_tc_ct_init(struct mlx5e_priv *priv, struct mlx5_fs_chains *chains,
 	if (err)
 		goto err_support;

-	ct_priv = kzalloc(sizeof(*ct_priv), GFP_KERNEL);
+	ct_priv = kzalloc_obj(*ct_priv, GFP_KERNEL);
 	if (!ct_priv)
 		goto err_alloc;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c
index 0735d10f2bac..9a7c6df78640 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c
@@ -87,7 +87,7 @@ int mlx5e_tc_set_attr_rx_tun(struct mlx5e_tc_flow *flow,
 	void *daddr, *saddr;
 	u8 ip_version;

-	tun_attr = kvzalloc(sizeof(*tun_attr), GFP_KERNEL);
+	tun_attr = kvzalloc_obj(*tun_attr, GFP_KERNEL);
 	if (!tun_attr)
 		return -ENOMEM;

@@ -864,7 +864,7 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv,
 		goto attach_flow;
 	}

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e) {
 		err = -ENOMEM;
 		goto out_err;
@@ -976,7 +976,7 @@ int mlx5e_attach_decap(struct mlx5e_priv *priv,
 		goto found;
 	}

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		err = -ENOMEM;
 		goto out_err;
@@ -1205,7 +1205,7 @@ mlx5e_route_get_create(struct mlx5e_priv *priv,
 		return r;
 	}

-	r = kzalloc(sizeof(*r), GFP_KERNEL);
+	r = kzalloc_obj(*r, GFP_KERNEL);
 	if (!r)
 		return ERR_PTR(-ENOMEM);

@@ -1251,7 +1251,7 @@ mlx5e_tc_init_fib_work(unsigned long event, struct net_device *ul_dev, gfp_t fla
 {
 	struct mlx5e_tc_fib_event_data *fib_work;

-	fib_work = kzalloc(sizeof(*fib_work), flags);
+	fib_work = kzalloc_obj(*fib_work, flags);
 	if (WARN_ON(!fib_work))
 		return NULL;

@@ -1862,7 +1862,7 @@ struct mlx5e_tc_tun_encap *mlx5e_tc_tun_init(struct mlx5e_priv *priv)
 	struct mlx5e_tc_tun_encap *encap;
 	int err;

-	encap = kvzalloc(sizeof(*encap), GFP_KERNEL);
+	encap = kvzalloc_obj(*encap, GFP_KERNEL);
 	if (!encap)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tir.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tir.c
index 0b55e77f19c8..e02f04a7b211 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tir.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tir.c
@@ -22,7 +22,7 @@ struct mlx5e_tir_builder *mlx5e_tir_builder_alloc(bool modify)
 {
 	struct mlx5e_tir_builder *builder;

-	builder = kvzalloc(sizeof(*builder), GFP_KERNEL);
+	builder = kvzalloc_obj(*builder, GFP_KERNEL);
 	if (!builder)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/pool.c b/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/pool.c
index 5c5360a25c64..52de57d7c7dc 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/pool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/pool.c
@@ -23,8 +23,8 @@ static void mlx5e_xsk_unmap_pool(struct mlx5e_priv *priv,
 static int mlx5e_xsk_get_pools(struct mlx5e_xsk *xsk)
 {
 	if (!xsk->pools) {
-		xsk->pools = kcalloc(MLX5E_MAX_NUM_CHANNELS,
-				     sizeof(*xsk->pools), GFP_KERNEL);
+		xsk->pools = kzalloc_objs(*xsk->pools, MLX5E_MAX_NUM_CHANNELS,
+					  GFP_KERNEL);
 		if (unlikely(!xsk->pools))
 			return -ENOMEM;
 	}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c b/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
index 5981c71cae2d..bd0cf822cea9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
@@ -123,7 +123,7 @@ int mlx5e_open_xsk(struct mlx5e_priv *priv, struct mlx5e_params *params,
 	if (!mlx5e_validate_xsk_param(params, xsk, priv->mdev))
 		return -EINVAL;

-	cparam = kvzalloc(sizeof(*cparam), GFP_KERNEL);
+	cparam = kvzalloc_obj(*cparam, GFP_KERNEL);
 	if (!cparam)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c
index 1febdc5b81f9..64fe7921f380 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c
@@ -82,7 +82,7 @@ struct mlx5_flow_handle *mlx5e_accel_fs_add_sk(struct mlx5e_flow_steering *fs,
 	struct mlx5_flow_handle *flow;
 	struct mlx5_flow_spec *spec;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -186,7 +186,7 @@ static int accel_fs_tcp_create_groups(struct mlx5e_flow_table *ft,
 	int err;
 	u8 *mc;

-	ft->g = kcalloc(MLX5E_ACCEL_FS_TCP_NUM_GROUPS, sizeof(*ft->g), GFP_KERNEL);
+	ft->g = kzalloc_objs(*ft->g, MLX5E_ACCEL_FS_TCP_NUM_GROUPS, GFP_KERNEL);
 	in = kvzalloc(inlen, GFP_KERNEL);
 	if  (!in || !ft->g) {
 		kfree(ft->g);
@@ -378,7 +378,7 @@ int mlx5e_accel_fs_tcp_create(struct mlx5e_flow_steering *fs)
 	if (!MLX5_CAP_FLOWTABLE_NIC_RX(mlx5e_fs_get_mdev(fs), ft_field_support.outer_ip_version))
 		return -EOPNOTSUPP;

-	accel_tcp = kzalloc(sizeof(*accel_tcp), GFP_KERNEL);
+	accel_tcp = kzalloc_obj(*accel_tcp, GFP_KERNEL);
 	if (!accel_tcp)
 		return -ENOMEM;
 	mlx5e_fs_set_accel_tcp(fs, accel_tcp);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
index 9c7064187ed0..6ae17d24e64d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
@@ -712,21 +712,20 @@ static int mlx5_ipsec_create_work(struct mlx5e_ipsec_sa_entry *sa_entry)
 		break;
 	}

-	work = kzalloc(sizeof(*work), GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

 	switch (x->xso.type) {
 	case XFRM_DEV_OFFLOAD_CRYPTO:
-		data = kzalloc(sizeof(*sa_entry), GFP_KERNEL);
+		data = kzalloc_obj(*sa_entry, GFP_KERNEL);
 		if (!data)
 			goto free_work;

 		INIT_WORK(&work->work, mlx5e_ipsec_modify_state);
 		break;
 	case XFRM_DEV_OFFLOAD_PACKET:
-		data = kzalloc(sizeof(struct mlx5e_ipsec_netevent_data),
-			       GFP_KERNEL);
+		data = kzalloc_obj(struct mlx5e_ipsec_netevent_data, GFP_KERNEL);
 		if (!data)
 			goto free_work;

@@ -760,7 +759,7 @@ static int mlx5e_ipsec_create_dwork(struct mlx5e_ipsec_sa_entry *sa_entry)
 	    x->lft.hard_byte_limit == XFRM_INF)
 		return 0;

-	dwork = kzalloc(sizeof(*dwork), GFP_KERNEL);
+	dwork = kzalloc_obj(*dwork, GFP_KERNEL);
 	if (!dwork)
 		return -ENOMEM;

@@ -787,7 +786,7 @@ static int mlx5e_xfrm_add_state(struct net_device *dev,

 	ipsec = priv->ipsec;
 	gfp = (x->xso.flags & XFRM_DEV_OFFLOAD_FLAG_ACQ) ? GFP_ATOMIC : GFP_KERNEL;
-	sa_entry = kzalloc(sizeof(*sa_entry), gfp);
+	sa_entry = kzalloc_obj(*sa_entry, gfp);
 	if (!sa_entry)
 		return -ENOMEM;

@@ -989,7 +988,7 @@ void mlx5e_ipsec_init(struct mlx5e_priv *priv)
 		return;
 	}

-	ipsec = kzalloc(sizeof(*ipsec), GFP_KERNEL);
+	ipsec = kzalloc_obj(*ipsec, GFP_KERNEL);
 	if (!ipsec)
 		return;

@@ -1277,7 +1276,7 @@ static int mlx5e_xfrm_add_policy(struct xfrm_policy *x,
 	if (err)
 		return err;

-	pol_entry = kzalloc(sizeof(*pol_entry), GFP_KERNEL);
+	pol_entry = kzalloc_obj(*pol_entry, GFP_KERNEL);
 	if (!pol_entry)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
index feef86fff4bf..8139772387f1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
@@ -208,7 +208,7 @@ static int rx_add_rule_drop_auth_trailer(struct mlx5e_ipsec_sa_entry *sa_entry,
 	struct mlx5_flow_spec *spec;
 	int err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -287,7 +287,7 @@ static int rx_add_rule_drop_replay(struct mlx5e_ipsec_sa_entry *sa_entry, struct
 	struct mlx5_flow_spec *spec;
 	int err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -347,7 +347,7 @@ static int ipsec_rx_status_drop_all_create(struct mlx5e_ipsec *ipsec,
 	int err = 0;

 	flow_group_in = kvzalloc(inlen, GFP_KERNEL);
-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!flow_group_in || !spec) {
 		err = -ENOMEM;
 		goto err_out;
@@ -454,7 +454,7 @@ ipsec_rx_status_pass_create(struct mlx5e_ipsec *ipsec,
 	struct mlx5_flow_spec *spec;
 	int err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -554,7 +554,7 @@ static int ipsec_miss_create(struct mlx5_core_dev *mdev,
 	int err = 0;

 	flow_group_in = kvzalloc(inlen, GFP_KERNEL);
-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!flow_group_in || !spec) {
 		err = -ENOMEM;
 		goto out;
@@ -1226,7 +1226,7 @@ static int ipsec_counter_rule_tx(struct mlx5_core_dev *mdev, struct mlx5e_ipsec_
 	struct mlx5_flow_spec *spec;
 	int err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -1962,7 +1962,7 @@ static int rx_add_rule_sa_selector(struct mlx5e_ipsec_sa_entry *sa_entry,
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -2046,7 +2046,7 @@ static int rx_add_rule(struct mlx5e_ipsec_sa_entry *sa_entry)
 	if (IS_ERR(rx))
 		return PTR_ERR(rx);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		err = -ENOMEM;
 		goto err_alloc;
@@ -2176,7 +2176,7 @@ static int tx_add_rule(struct mlx5e_ipsec_sa_entry *sa_entry)
 	if (IS_ERR(tx))
 		return PTR_ERR(tx);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		err = -ENOMEM;
 		goto err_alloc;
@@ -2267,7 +2267,7 @@ static int tx_add_policy(struct mlx5e_ipsec_pol_entry *pol_entry)
 	if (IS_ERR(ft))
 		return PTR_ERR(ft);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		err = -ENOMEM;
 		goto err_alloc;
@@ -2354,7 +2354,7 @@ static int rx_add_policy(struct mlx5e_ipsec_pol_entry *pol_entry)

 	rx = ipsec_rx(pol_entry->ipsec, attrs->addrs.family, attrs->type);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		err = -ENOMEM;
 		goto err_alloc;
@@ -2434,7 +2434,7 @@ static struct mlx5e_ipsec_fc *ipsec_fs_init_single_counter(struct mlx5_core_dev
 	struct mlx5_fc *counter;
 	int err;

-	fc = kzalloc(sizeof(*fc), GFP_KERNEL);
+	fc = kzalloc_obj(*fc, GFP_KERNEL);
 	if (!fc)
 		return ERR_PTR(-ENOMEM);

@@ -2778,24 +2778,24 @@ int mlx5e_accel_ipsec_fs_init(struct mlx5e_ipsec *ipsec,
 		if (!ns_esw)
 			return -EOPNOTSUPP;

-		ipsec->tx_esw = kzalloc(sizeof(*ipsec->tx_esw), GFP_KERNEL);
+		ipsec->tx_esw = kzalloc_obj(*ipsec->tx_esw, GFP_KERNEL);
 		if (!ipsec->tx_esw)
 			return -ENOMEM;

-		ipsec->rx_esw = kzalloc(sizeof(*ipsec->rx_esw), GFP_KERNEL);
+		ipsec->rx_esw = kzalloc_obj(*ipsec->rx_esw, GFP_KERNEL);
 		if (!ipsec->rx_esw)
 			goto err_rx_esw;
 	}

-	ipsec->tx = kzalloc(sizeof(*ipsec->tx), GFP_KERNEL);
+	ipsec->tx = kzalloc_obj(*ipsec->tx, GFP_KERNEL);
 	if (!ipsec->tx)
 		goto err_tx;

-	ipsec->rx_ipv4 = kzalloc(sizeof(*ipsec->rx_ipv4), GFP_KERNEL);
+	ipsec->rx_ipv4 = kzalloc_obj(*ipsec->rx_ipv4, GFP_KERNEL);
 	if (!ipsec->rx_ipv4)
 		goto err_rx_ipv4;

-	ipsec->rx_ipv6 = kzalloc(sizeof(*ipsec->rx_ipv6), GFP_KERNEL);
+	ipsec->rx_ipv6 = kzalloc_obj(*ipsec->rx_ipv6, GFP_KERNEL);
 	if (!ipsec->rx_ipv6)
 		goto err_rx_ipv6;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_offload.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_offload.c
index ef7322d381af..14d7a63f752e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_offload.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_offload.c
@@ -503,7 +503,7 @@ static int mlx5e_ipsec_event(struct notifier_block *nb, unsigned long event,
 	if (!sa_entry)
 		return NOTIFY_DONE;

-	work = kmalloc(sizeof(*work), GFP_ATOMIC);
+	work = kmalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return NOTIFY_DONE;

@@ -522,7 +522,7 @@ int mlx5e_ipsec_aso_init(struct mlx5e_ipsec *ipsec)
 	struct device *pdev;
 	int err;

-	aso = kzalloc(sizeof(*ipsec->aso), GFP_KERNEL);
+	aso = kzalloc_obj(*ipsec->aso, GFP_KERNEL);
 	if (!aso)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.c
index 1c2cc2aad2b0..ac348aacdb0d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.c
@@ -199,7 +199,7 @@ int mlx5e_ktls_init(struct mlx5e_priv *priv)
 	if (!mlx5e_is_ktls_device(priv->mdev))
 		return 0;

-	tls = kzalloc(sizeof(*tls), GFP_KERNEL);
+	tls = kzalloc_obj(*tls, GFP_KERNEL);
 	if (!tls)
 		return -ENOMEM;
 	tls->mdev = priv->mdev;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c
index 5d8fe252799e..47de07467e0c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c
@@ -90,7 +90,7 @@ mlx5e_ktls_rx_resync_create_resp_list(void)
 {
 	struct mlx5e_ktls_resync_resp *resp_list;

-	resp_list = kvzalloc(sizeof(*resp_list), GFP_KERNEL);
+	resp_list = kvzalloc_obj(*resp_list, GFP_KERNEL);
 	if (!resp_list)
 		return ERR_PTR(-ENOMEM);

@@ -261,7 +261,7 @@ resync_post_get_progress_params(struct mlx5e_icosq *sq,
 	int err;
 	u16 pi;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (unlikely(!buf)) {
 		err = -ENOMEM;
 		goto err_out;
@@ -643,7 +643,7 @@ int mlx5e_ktls_add_rx(struct net_device *netdev, struct sock *sk,

 	tls_ctx = tls_get_ctx(sk);
 	priv = netdev_priv(netdev);
-	priv_rx = kzalloc(sizeof(*priv_rx), GFP_KERNEL);
+	priv_rx = kzalloc_obj(*priv_rx, GFP_KERNEL);
 	if (unlikely(!priv_rx))
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c
index 08f06984407b..b93f7d41a692 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c
@@ -196,7 +196,7 @@ mlx5e_tls_priv_tx_init(struct mlx5_core_dev *mdev, struct mlx5e_tls_sw_stats *sw
 	struct mlx5e_ktls_offload_context_tx *priv_tx;
 	int err;

-	priv_tx = kzalloc(sizeof(*priv_tx), GFP_KERNEL);
+	priv_tx = kzalloc_obj(*priv_tx, GFP_KERNEL);
 	if (!priv_tx)
 		return ERR_PTR(-ENOMEM);

@@ -360,7 +360,7 @@ static struct mlx5e_tls_tx_pool *mlx5e_tls_tx_pool_init(struct mlx5_core_dev *md

 	BUILD_BUG_ON(MLX5E_TLS_TX_POOL_LOW + MLX5E_TLS_TX_POOL_BULK >= MLX5E_TLS_TX_POOL_HIGH);

-	pool = kvzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kvzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c
index 90b3bc5f9166..14db0a2af406 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c
@@ -165,7 +165,7 @@ static int mlx5e_macsec_aso_reg_mr(struct mlx5_core_dev *mdev, struct mlx5e_macs
 	dma_addr_t dma_addr;
 	int err;

-	umr = kzalloc(sizeof(*umr), GFP_KERNEL);
+	umr = kzalloc_obj(*umr, GFP_KERNEL);
 	if (!umr) {
 		err = -ENOMEM;
 		return err;
@@ -530,7 +530,7 @@ static int mlx5e_macsec_add_txsa(struct macsec_context *ctx)
 		goto out;
 	}

-	tx_sa = kzalloc(sizeof(*tx_sa), GFP_KERNEL);
+	tx_sa = kzalloc_obj(*tx_sa, GFP_KERNEL);
 	if (!tx_sa) {
 		err = -ENOMEM;
 		goto out;
@@ -701,13 +701,13 @@ static int mlx5e_macsec_add_rxsc(struct macsec_context *ctx)
 		goto out;
 	}

-	rx_sc = kzalloc(sizeof(*rx_sc), GFP_KERNEL);
+	rx_sc = kzalloc_obj(*rx_sc, GFP_KERNEL);
 	if (!rx_sc) {
 		err = -ENOMEM;
 		goto out;
 	}

-	sc_xarray_element = kzalloc(sizeof(*sc_xarray_element), GFP_KERNEL);
+	sc_xarray_element = kzalloc_obj(*sc_xarray_element, GFP_KERNEL);
 	if (!sc_xarray_element) {
 		err = -ENOMEM;
 		goto destroy_rx_sc;
@@ -912,7 +912,7 @@ static int mlx5e_macsec_add_rxsa(struct macsec_context *ctx)
 		goto out;
 	}

-	rx_sa = kzalloc(sizeof(*rx_sa), GFP_KERNEL);
+	rx_sa = kzalloc_obj(*rx_sa, GFP_KERNEL);
 	if (!rx_sa) {
 		err = -ENOMEM;
 		goto out;
@@ -1093,7 +1093,7 @@ static int mlx5e_macsec_add_secy(struct macsec_context *ctx)
 		goto out;
 	}

-	macsec_device = kzalloc(sizeof(*macsec_device), GFP_KERNEL);
+	macsec_device = kzalloc_obj(*macsec_device, GFP_KERNEL);
 	if (!macsec_device) {
 		err = -ENOMEM;
 		goto out;
@@ -1565,7 +1565,7 @@ static int macsec_obj_change_event(struct notifier_block *nb, unsigned long even
 	if (obj_type != MLX5_GENERAL_OBJECT_TYPES_MACSEC)
 		return NOTIFY_DONE;

-	async_work = kzalloc(sizeof(*async_work), GFP_ATOMIC);
+	async_work = kzalloc_obj(*async_work, GFP_ATOMIC);
 	if (!async_work)
 		return NOTIFY_DONE;

@@ -1730,7 +1730,7 @@ int mlx5e_macsec_init(struct mlx5e_priv *priv)
 		return 0;
 	}

-	macsec = kzalloc(sizeof(*macsec), GFP_KERNEL);
+	macsec = kzalloc_obj(*macsec, GFP_KERNEL);
 	if (!macsec)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c
index 9a74438ce10a..ea250eecbed1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c
@@ -142,7 +142,7 @@ static int accel_psp_fs_rx_err_add_rule(struct mlx5e_psp_fs *fs,
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -344,7 +344,7 @@ static int accel_psp_fs_rx_create_ft(struct mlx5e_psp_fs *fs,
 	int err = 0;

 	flow_group_in = kvzalloc(inlen, GFP_KERNEL);
-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!flow_group_in || !spec) {
 		err = -ENOMEM;
 		goto out;
@@ -560,7 +560,7 @@ static int accel_psp_fs_init_rx(struct mlx5e_psp_fs *fs)
 	enum accel_fs_psp_type i;
 	int err;

-	accel_psp = kzalloc(sizeof(*accel_psp), GFP_KERNEL);
+	accel_psp = kzalloc_obj(*accel_psp, GFP_KERNEL);
 	if (!accel_psp)
 		return -ENOMEM;

@@ -686,7 +686,7 @@ static int accel_psp_fs_tx_create_ft_table(struct mlx5e_psp_fs *fs)
 	struct mlx5_flow_group *fg;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	in = kvzalloc(inlen, GFP_KERNEL);
 	if (!spec || !in) {
 		err = -ENOMEM;
@@ -815,7 +815,7 @@ static int accel_psp_fs_init_tx(struct mlx5e_psp_fs *fs)
 	if (!ns)
 		return -EOPNOTSUPP;

-	tx_fs = kzalloc(sizeof(*tx_fs), GFP_KERNEL);
+	tx_fs = kzalloc_obj(*tx_fs, GFP_KERNEL);
 	if (!tx_fs)
 		return -ENOMEM;

@@ -896,7 +896,7 @@ static struct mlx5e_psp_fs *mlx5e_accel_psp_fs_init(struct mlx5e_priv *priv)
 	struct mlx5e_psp_fs *fs;
 	int err = 0;

-	fs = kzalloc(sizeof(*fs), GFP_KERNEL);
+	fs = kzalloc_obj(*fs, GFP_KERNEL);
 	if (!fs)
 		return ERR_PTR(-ENOMEM);

@@ -1127,7 +1127,7 @@ int mlx5e_psp_init(struct mlx5e_priv *priv)
 		return 0;
 	}

-	psp = kzalloc(sizeof(*psp), GFP_KERNEL);
+	psp = kzalloc_obj(*psp, GFP_KERNEL);
 	if (!psp)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c
index 93cf23278d93..dbe824a62f22 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c
@@ -260,8 +260,7 @@ static int arfs_create_groups(struct mlx5e_flow_table *ft,
 	int err;
 	u8 *mc;

-	ft->g = kcalloc(MLX5E_ARFS_NUM_GROUPS,
-			sizeof(*ft->g), GFP_KERNEL);
+	ft->g = kzalloc_objs(*ft->g, MLX5E_ARFS_NUM_GROUPS, GFP_KERNEL);
 	if (!ft->g)
 		return -ENOMEM;

@@ -392,7 +391,7 @@ int mlx5e_arfs_create_tables(struct mlx5e_flow_steering *fs,
 	if (!ntuple)
 		return 0;

-	arfs = kvzalloc(sizeof(*arfs), GFP_KERNEL);
+	arfs = kvzalloc_obj(*arfs, GFP_KERNEL);
 	if (!arfs)
 		return -ENOMEM;

@@ -523,7 +522,7 @@ static struct mlx5_flow_handle *arfs_add_rule(struct mlx5e_priv *priv,
 	struct mlx5_flow_table *ft;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		priv->channel_stats[arfs_rule->rxq]->rq.arfs_err++;
 		err = -ENOMEM;
@@ -662,7 +661,7 @@ static struct arfs_rule *arfs_alloc_rule(struct mlx5e_priv *priv,
 	struct arfs_rule *rule;
 	struct arfs_tuple *tuple;

-	rule = kzalloc(sizeof(*rule), GFP_ATOMIC);
+	rule = kzalloc_obj(*rule, GFP_ATOMIC);
 	if (!rule) {
 		priv->channel_stats[rxq]->rq.arfs_err++;
 		return NULL;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_common.c b/drivers/net/ethernet/mellanox/mlx5/core/en_common.c
index 5a2ac7b6f260..5da0a13d92f1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_common.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_common.c
@@ -179,7 +179,7 @@ int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev, bool create_tises)

 	num_doorbells = min(mlx5e_get_devlink_param_num_doorbells(mdev),
 			    mlx5e_get_max_num_channels(mdev));
-	res->bfregs = kcalloc(num_doorbells, sizeof(*res->bfregs), GFP_KERNEL);
+	res->bfregs = kzalloc_objs(*res->bfregs, num_doorbells, GFP_KERNEL);
 	if (!res->bfregs) {
 		err = -ENOMEM;
 		goto err_destroy_mkey;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
index 8928d2dcd43f..1dd5f916597b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
@@ -128,7 +128,7 @@ static void mlx5e_add_l2_to_hash(struct hlist_head *hash, const u8 *addr)
 		return;
 	}

-	hn = kzalloc(sizeof(*hn), GFP_ATOMIC);
+	hn = kzalloc_obj(*hn, GFP_ATOMIC);
 	if (!hn)
 		return;

@@ -295,7 +295,7 @@ static int mlx5e_add_vlan_rule(struct mlx5e_flow_steering *fs,
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -372,7 +372,7 @@ mlx5e_add_trap_rule(struct mlx5_flow_table *ft, int trap_id, int tir_num)
 	struct mlx5_flow_handle *rule;
 	struct mlx5_flow_spec *spec;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);
 	spec->flow_context.flags |= FLOW_CONTEXT_HAS_TAG;
@@ -754,7 +754,7 @@ static int mlx5e_add_promisc_rule(struct mlx5e_flow_steering *fs)
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	dest.type = MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE;
@@ -984,7 +984,7 @@ static int mlx5e_add_l2_flow_rule(struct mlx5e_flow_steering *fs,
 	u8 *mc_dmac;
 	u8 *mv_dmac;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -1039,7 +1039,7 @@ static int mlx5e_create_l2_table_groups(struct mlx5e_l2_table *l2_table)
 	int err;
 	u8 *mc;

-	ft->g = kcalloc(MLX5E_NUM_L2_GROUPS, sizeof(*ft->g), GFP_KERNEL);
+	ft->g = kzalloc_objs(*ft->g, MLX5E_NUM_L2_GROUPS, GFP_KERNEL);
 	if (!ft->g)
 		return -ENOMEM;
 	in = kvzalloc(inlen, GFP_KERNEL);
@@ -1251,7 +1251,7 @@ static int mlx5e_fs_create_vlan_table(struct mlx5e_flow_steering *fs)
 	if (IS_ERR(ft->t))
 		return PTR_ERR(ft->t);

-	ft->g = kcalloc(MLX5E_NUM_VLAN_GROUPS, sizeof(*ft->g), GFP_KERNEL);
+	ft->g = kzalloc_objs(*ft->g, MLX5E_NUM_VLAN_GROUPS, GFP_KERNEL);
 	if (!ft->g) {
 		err = -ENOMEM;
 		goto err_destroy_vlan_table;
@@ -1394,7 +1394,7 @@ void mlx5e_destroy_flow_steering(struct mlx5e_flow_steering *fs, bool ntuple,

 static int mlx5e_fs_vlan_alloc(struct mlx5e_flow_steering *fs)
 {
-	fs->vlan = kvzalloc(sizeof(*fs->vlan), GFP_KERNEL);
+	fs->vlan = kvzalloc_obj(*fs->vlan, GFP_KERNEL);
 	if (!fs->vlan)
 		return -ENOMEM;
 	return 0;
@@ -1466,7 +1466,7 @@ struct mlx5e_flow_steering *mlx5e_fs_init(const struct mlx5e_profile *profile,
 	struct mlx5e_flow_steering *fs;
 	int err;

-	fs = kvzalloc(sizeof(*fs), GFP_KERNEL);
+	fs = kvzalloc_obj(*fs, GFP_KERNEL);
 	if (!fs)
 		goto err;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
index 63bdef5b4ba5..d01636af3d02 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
@@ -465,7 +465,7 @@ add_ethtool_flow_rule(struct mlx5e_priv *priv,
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);
 	err = set_flow_attrs(spec->match_criteria, spec->match_value,
@@ -476,7 +476,7 @@ add_ethtool_flow_rule(struct mlx5e_priv *priv,
 	if (fs->ring_cookie == RX_CLS_FLOW_DISC) {
 		flow_act.action = MLX5_FLOW_CONTEXT_ACTION_DROP;
 	} else {
-		dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+		dst = kzalloc_obj(*dst, GFP_KERNEL);
 		if (!dst) {
 			err = -ENOMEM;
 			goto free;
@@ -541,7 +541,7 @@ static struct mlx5e_ethtool_rule *get_ethtool_rule(struct mlx5e_priv *priv,
 	if (eth_rule)
 		del_ethtool_rule(priv->fs, eth_rule);

-	eth_rule = kzalloc(sizeof(*eth_rule), GFP_KERNEL);
+	eth_rule = kzalloc_obj(*eth_rule, GFP_KERNEL);
 	if (!eth_rule)
 		return ERR_PTR(-ENOMEM);

@@ -836,7 +836,7 @@ mlx5e_ethtool_get_all_flows(struct mlx5e_priv *priv,

 int mlx5e_ethtool_alloc(struct mlx5e_ethtool_steering **ethtool)
 {
-	*ethtool =  kvzalloc(sizeof(**ethtool), GFP_KERNEL);
+	*ethtool = kvzalloc_obj(**ethtool, GFP_KERNEL);
 	if (!*ethtool)
 		return -ENOMEM;
 	return 0;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 7eb691c2a1bd..41edda3d0c70 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -2791,7 +2791,7 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix,
 		return err;

 	c = kvzalloc_node(sizeof(*c), GFP_KERNEL, cpu_to_node(cpu));
-	cparam = kvzalloc(sizeof(*cparam), GFP_KERNEL);
+	cparam = kvzalloc_obj(*cparam, GFP_KERNEL);
 	if (!c || !cparam) {
 		err = -ENOMEM;
 		goto err_free;
@@ -2911,7 +2911,7 @@ int mlx5e_open_channels(struct mlx5e_priv *priv,

 	chs->num = chs->params.num_channels;

-	chs->c = kcalloc(chs->num, sizeof(struct mlx5e_channel *), GFP_KERNEL);
+	chs->c = kzalloc_objs(struct mlx5e_channel *, chs->num, GFP_KERNEL);
 	if (!chs->c)
 		goto err_out;

@@ -3415,8 +3415,8 @@ int mlx5e_safe_switch_params(struct mlx5e_priv *priv,
 	if (!reset)
 		return mlx5e_switch_priv_params(priv, params, preactivate, context);

-	old_chs = kzalloc(sizeof(*old_chs), GFP_KERNEL);
-	new_chs = kzalloc(sizeof(*new_chs), GFP_KERNEL);
+	old_chs = kzalloc_obj(*old_chs, GFP_KERNEL);
+	new_chs = kzalloc_obj(*new_chs, GFP_KERNEL);
 	if (!old_chs || !new_chs) {
 		err = -ENOMEM;
 		goto err_free_chs;
@@ -6258,8 +6258,8 @@ int mlx5e_priv_init(struct mlx5e_priv *priv,
 	if (!priv->channel_stats)
 		goto err_free_tx_rates;

-	priv->fec_ranges = kcalloc(ETHTOOL_FEC_HIST_MAX,
-				   sizeof(*priv->fec_ranges), GFP_KERNEL);
+	priv->fec_ranges = kzalloc_objs(*priv->fec_ranges, ETHTOOL_FEC_HIST_MAX,
+					GFP_KERNEL);
 	if (!priv->fec_ranges)
 		goto err_free_channel_stats;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
index 6eec88fa6d10..b0bc37669305 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
@@ -476,7 +476,7 @@ static int mlx5e_sqs2vport_add_peers_rules(struct mlx5_eswitch *esw, struct mlx5
 		struct mlx5e_rep_sq_peer *sq_peer;
 		int err;

-		sq_peer = kzalloc(sizeof(*sq_peer), GFP_KERNEL);
+		sq_peer = kzalloc_obj(*sq_peer, GFP_KERNEL);
 		if (!sq_peer)
 			return -ENOMEM;

@@ -521,7 +521,7 @@ static int mlx5e_sqs2vport_start(struct mlx5_eswitch *esw,
 		devcom_locked = true;

 	for (i = 0; i < sqns_num; i++) {
-		rep_sq = kzalloc(sizeof(*rep_sq), GFP_KERNEL);
+		rep_sq = kzalloc_obj(*rep_sq, GFP_KERNEL);
 		if (!rep_sq) {
 			err = -ENOMEM;
 			goto out_err;
@@ -1621,7 +1621,7 @@ mlx5e_vport_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
 	struct mlx5e_rep_priv *rpriv;
 	int err;

-	rpriv = kvzalloc(sizeof(*rpriv), GFP_KERNEL);
+	rpriv = kvzalloc_obj(*rpriv, GFP_KERNEL);
 	if (!rpriv)
 		return -ENOMEM;

@@ -1731,7 +1731,7 @@ static int mlx5e_vport_rep_event_pair(struct mlx5_eswitch *esw,
 			sq_peer->peer = peer_esw;
 			continue;
 		}
-		sq_peer = kzalloc(sizeof(*sq_peer), GFP_KERNEL);
+		sq_peer = kzalloc_obj(*sq_peer, GFP_KERNEL);
 		if (!sq_peer) {
 			err = -ENOMEM;
 			goto err_sq_alloc;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c b/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c
index fcad464bc4d5..4066778f702d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c
@@ -270,7 +270,7 @@ static int mlx5e_test_loopback(struct mlx5e_priv *priv)
 		return -ENODEV;
 	}

-	lbtp = kzalloc(sizeof(*lbtp), GFP_KERNEL);
+	lbtp = kzalloc_obj(*lbtp, GFP_KERNEL);
 	if (!lbtp)
 		return -ENOMEM;
 	lbtp->loopback_ok = false;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 424786f489ec..761cfd2d95f1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -153,7 +153,7 @@ struct mlx5e_tc_table *mlx5e_tc_table_alloc(void)
 {
 	struct mlx5e_tc_table *tc;

-	tc = kvzalloc(sizeof(*tc), GFP_KERNEL);
+	tc = kvzalloc_obj(*tc, GFP_KERNEL);
 	return tc ? tc : ERR_PTR(-ENOMEM);
 }

@@ -905,7 +905,7 @@ mlx5e_hairpin_create(struct mlx5e_priv *priv, struct mlx5_hairpin_params *params
 	struct mlx5_hairpin *pair;
 	int err;

-	hp = kzalloc(sizeof(*hp), GFP_KERNEL);
+	hp = kzalloc_obj(*hp, GFP_KERNEL);
 	if (!hp)
 		return ERR_PTR(-ENOMEM);

@@ -1139,7 +1139,7 @@ static int mlx5e_hairpin_flow_add(struct mlx5e_priv *priv,
 		goto attach_flow;
 	}

-	hpe = kzalloc(sizeof(*hpe), GFP_KERNEL);
+	hpe = kzalloc_obj(*hpe, GFP_KERNEL);
 	if (!hpe) {
 		mutex_unlock(&tc->hairpin_tbl_lock);
 		return -ENOMEM;
@@ -1794,7 +1794,7 @@ extra_split_attr_dests(struct mlx5e_tc_flow *flow,
 		return PTR_ERR(post_act);

 	attr2 = mlx5_alloc_flow_attr(mlx5e_get_flow_namespace(flow));
-	parse_attr2 = kvzalloc(sizeof(*parse_attr), GFP_KERNEL);
+	parse_attr2 = kvzalloc_obj(*parse_attr, GFP_KERNEL);
 	if (!attr2 || !parse_attr2) {
 		err = -ENOMEM;
 		goto err_free;
@@ -2570,7 +2570,7 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
 	} else if (tunnel) {
 		struct mlx5_flow_spec *tmp_spec;

-		tmp_spec = kvzalloc(sizeof(*tmp_spec), GFP_KERNEL);
+		tmp_spec = kvzalloc_obj(*tmp_spec, GFP_KERNEL);
 		if (!tmp_spec) {
 			NL_SET_ERR_MSG_MOD(extack, "Failed to allocate memory for tunnel tmp spec");
 			netdev_warn(priv->netdev, "Failed to allocate memory for tunnel tmp spec");
@@ -3671,7 +3671,7 @@ mlx5e_clone_flow_attr_for_post_act(struct mlx5_flow_attr *attr,
 	struct mlx5_flow_attr *attr2;

 	attr2 = mlx5_alloc_flow_attr(ns_type);
-	parse_attr = kvzalloc(sizeof(*parse_attr), GFP_KERNEL);
+	parse_attr = kvzalloc_obj(*parse_attr, GFP_KERNEL);
 	if (!attr2 || !parse_attr) {
 		kvfree(parse_attr);
 		kfree(attr2);
@@ -4448,8 +4448,8 @@ mlx5e_alloc_flow(struct mlx5e_priv *priv, int attr_size,
 	int err = -ENOMEM;
 	int out_index;

-	flow = kzalloc(sizeof(*flow), GFP_KERNEL);
-	parse_attr = kvzalloc(sizeof(*parse_attr), GFP_KERNEL);
+	flow = kzalloc_obj(*flow, GFP_KERNEL);
+	parse_attr = kvzalloc_obj(*parse_attr, GFP_KERNEL);
 	if (!parse_attr || !flow)
 		goto err_free;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
index 25499da177bc..cc679500b3dc 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
@@ -881,7 +881,7 @@ static int comp_irq_request_sf(struct mlx5_core_dev *dev, u16 vecidx)
 	if (!mlx5_irq_pool_is_sf_pool(pool))
 		return comp_irq_request_pci(dev, vecidx);

-	af_desc = kvzalloc(sizeof(*af_desc), GFP_KERNEL);
+	af_desc = kvzalloc_obj(*af_desc, GFP_KERNEL);
 	if (!af_desc)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/helper.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/helper.c
index 3ce455c2535c..a95d12860fed 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/helper.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/helper.c
@@ -58,7 +58,7 @@ int esw_egress_acl_vlan_create(struct mlx5_eswitch *esw,
 	if (vport->egress.allowed_vlan)
 		return -EEXIST;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c
index 49a637829c59..f8ca68ea685e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c
@@ -200,7 +200,7 @@ int esw_acl_ingress_lgcy_setup(struct mlx5_eswitch *esw,
 		  "vport[%d] configure ingress rules, vlan(%d) qos(%d)\n",
 		  vport->vport, vport->info.vlan, vport->info.qos);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c
index a436ce895e45..4ffaa7b4b5b1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c
@@ -29,7 +29,7 @@ static int esw_acl_ingress_prio_tag_create(struct mlx5_eswitch *esw,
 	 * required, allow
 	 * Unmatched traffic is allowed by default
 	 */
-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/bridge.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/bridge.c
index 60e10047770f..b9e9505ff76e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/bridge.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/bridge.c
@@ -586,7 +586,7 @@ mlx5_esw_bridge_ingress_flow_with_esw_create(u16 vport_num, const unsigned char
 	struct mlx5_flow_handle *handle;
 	u8 *smac_v, *smac_c;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

@@ -700,7 +700,7 @@ mlx5_esw_bridge_ingress_filter_flow_create(u16 vport_num, const unsigned char *a
 	struct mlx5_flow_handle *handle;
 	u8 *smac_v, *smac_c;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

@@ -753,7 +753,7 @@ mlx5_esw_bridge_egress_flow_create(u16 vport_num, u16 esw_owner_vhca_id, const u
 	struct mlx5_flow_handle *handle;
 	u8 *dmac_v, *dmac_c;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

@@ -821,7 +821,7 @@ mlx5_esw_bridge_egress_miss_flow_create(struct mlx5_flow_table *egress_ft,
 	struct mlx5_flow_spec *rule_spec;
 	struct mlx5_flow_handle *handle;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

@@ -844,7 +844,7 @@ static struct mlx5_esw_bridge *mlx5_esw_bridge_create(struct net_device *br_netd
 	struct mlx5_esw_bridge *bridge;
 	int err;

-	bridge = kvzalloc(sizeof(*bridge), GFP_KERNEL);
+	bridge = kvzalloc_obj(*bridge, GFP_KERNEL);
 	if (!bridge)
 		return ERR_PTR(-ENOMEM);

@@ -1179,7 +1179,7 @@ mlx5_esw_bridge_vlan_create(u16 vlan_proto, u16 vid, u16 flags, struct mlx5_esw_
 	struct mlx5_esw_bridge_vlan *vlan;
 	int err;

-	vlan = kvzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kvzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan)
 		return ERR_PTR(-ENOMEM);

@@ -1365,7 +1365,7 @@ mlx5_esw_bridge_fdb_entry_init(struct net_device *dev, u16 vport_num, u16 esw_ow
 	if (entry)
 		mlx5_esw_bridge_fdb_entry_notify_and_cleanup(entry, bridge);

-	entry = kvzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kvzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

@@ -1550,7 +1550,7 @@ static int mlx5_esw_bridge_vport_init(u16 vport_num, u16 esw_owner_vhca_id, u16
 	struct mlx5_esw_bridge_port *port;
 	int err;

-	port = kvzalloc(sizeof(*port), GFP_KERNEL);
+	port = kvzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

@@ -1924,7 +1924,7 @@ struct mlx5_esw_bridge_offloads *mlx5_esw_bridge_init(struct mlx5_eswitch *esw)

 	ASSERT_RTNL();

-	br_offloads = kvzalloc(sizeof(*br_offloads), GFP_KERNEL);
+	br_offloads = kvzalloc_obj(*br_offloads, GFP_KERNEL);
 	if (!br_offloads)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/bridge_mcast.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/bridge_mcast.c
index 22dd30cf8033..15e5a05f5dd8 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/bridge_mcast.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/bridge_mcast.c
@@ -65,11 +65,11 @@ mlx5_esw_bridge_mdb_flow_create(u16 esw_owner_vhca_id, struct mlx5_esw_bridge_md
 	u8 *dmac_v, *dmac_c;
 	unsigned long idx;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

-	dests = kvcalloc(num_dests, sizeof(*dests), GFP_KERNEL);
+	dests = kvzalloc_objs(*dests, num_dests, GFP_KERNEL);
 	if (!dests) {
 		kvfree(rule_spec);
 		return ERR_PTR(-ENOMEM);
@@ -152,7 +152,7 @@ mlx5_esw_bridge_port_mdb_entry_init(struct mlx5_esw_bridge_port *port,
 	struct mlx5_esw_bridge_mdb_entry *entry;
 	int err;

-	entry = kvzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kvzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

@@ -516,7 +516,7 @@ mlx5_esw_bridge_mcast_flow_with_esw_create(struct mlx5_esw_bridge_port *port,
 	struct mlx5_flow_spec *rule_spec;
 	struct mlx5_flow_handle *handle;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

@@ -584,7 +584,7 @@ mlx5_esw_bridge_mcast_vlan_flow_create(u16 vlan_proto, struct mlx5_esw_bridge_po
 	struct mlx5_flow_spec *rule_spec;
 	struct mlx5_flow_handle *handle;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

@@ -656,7 +656,7 @@ mlx5_esw_bridge_mcast_fwd_flow_create(struct mlx5_esw_bridge_port *port)
 	struct mlx5_flow_spec *rule_spec;
 	struct mlx5_flow_handle *handle;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

@@ -890,7 +890,7 @@ mlx5_esw_bridge_ingress_igmp_fh_create(struct mlx5_flow_table *ingress_ft,
 	struct mlx5_flow_spec *rule_spec;
 	struct mlx5_flow_handle *handle;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

@@ -922,7 +922,7 @@ mlx5_esw_bridge_ingress_mld_fh_create(u8 type, struct mlx5_flow_table *ingress_f
 	struct mlx5_flow_spec *rule_spec;
 	struct mlx5_flow_handle *handle;

-	rule_spec = kvzalloc(sizeof(*rule_spec), GFP_KERNEL);
+	rule_spec = kvzalloc_obj(*rule_spec, GFP_KERNEL);
 	if (!rule_spec)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
index cd60bc500ec5..0b8bb42af33f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
@@ -70,7 +70,7 @@ int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw,
 	if (!mlx5_esw_devlink_port_supported(esw, vport_num))
 		return 0;

-	dl_port = kzalloc(sizeof(*dl_port), GFP_KERNEL);
+	dl_port = kzalloc_obj(*dl_port, GFP_KERNEL);
 	if (!dl_port)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/indir_table.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/indir_table.c
index 9959e9fd15a1..1a135c3e48df 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/indir_table.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/indir_table.c
@@ -46,7 +46,7 @@ struct mlx5_esw_indir_table {
 struct mlx5_esw_indir_table *
 mlx5_esw_indir_table_init(void)
 {
-	struct mlx5_esw_indir_table *indir = kvzalloc(sizeof(*indir), GFP_KERNEL);
+	struct mlx5_esw_indir_table *indir = kvzalloc_obj(*indir, GFP_KERNEL);

 	if (!indir)
 		return ERR_PTR(-ENOMEM);
@@ -111,7 +111,7 @@ static int mlx5_esw_indir_table_rule_get(struct mlx5_eswitch *esw,
 		return 0;
 	}

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return -ENOMEM;

@@ -258,7 +258,7 @@ mlx5_esw_indir_table_entry_create(struct mlx5_eswitch *esw, struct mlx5_flow_att
 	if (!root_ns)
 		return ERR_PTR(-ENOENT);

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/legacy.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/legacy.c
index 929adeb50a98..0ee931bca98b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/legacy.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/legacy.c
@@ -259,7 +259,7 @@ static int _mlx5_eswitch_set_vepa_locked(struct mlx5_eswitch *esw,
 	if (err)
 		return err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
index 4278bcb04c72..2f9e59790584 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
@@ -38,7 +38,7 @@ static struct mlx5_qos_domain *esw_qos_domain_alloc(void)
 {
 	struct mlx5_qos_domain *qos_domain;

-	qos_domain = kzalloc(sizeof(*qos_domain), GFP_KERNEL);
+	qos_domain = kzalloc_obj(*qos_domain, GFP_KERNEL);
 	if (!qos_domain)
 		return NULL;

@@ -518,7 +518,7 @@ __esw_qos_alloc_node(struct mlx5_eswitch *esw, u32 tsar_ix, enum sched_node_type
 {
 	struct mlx5_esw_sched_node *node;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return NULL;

@@ -916,9 +916,8 @@ esw_qos_create_vport_tc_sched_elements(struct mlx5_vport *vport,
 	int err, num_tcs = esw_qos_num_tcs(vport_node->esw->dev);
 	u32 rate_limit_elem_ix;

-	vport->qos.sched_nodes = kcalloc(num_tcs,
-					 sizeof(struct mlx5_esw_sched_node *),
-					 GFP_KERNEL);
+	vport->qos.sched_nodes = kzalloc_objs(struct mlx5_esw_sched_node *,
+					      num_tcs, GFP_KERNEL);
 	if (!vport->qos.sched_nodes) {
 		NL_SET_ERR_MSG_MOD(extack,
 				   "Allocating the vport TC scheduling elements failed.");
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c
index 407062096a82..5628182faf57 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c
@@ -96,7 +96,7 @@ mlx5_esw_vporttbl_get(struct mlx5_eswitch *esw, struct mlx5_vport_tbl_attr *attr
 		goto out;
 	}

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e) {
 		fdb = ERR_PTR(-ENOMEM);
 		goto err_alloc;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
index 5fbfabe28bdb..d31a74ae1dd7 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
@@ -221,7 +221,7 @@ __esw_fdb_set_vport_rule(struct mlx5_eswitch *esw, u16 vport, bool rx_rule,
 	if (rx_rule)
 		match_header |= MLX5_MATCH_MISC_PARAMETERS;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return NULL;

@@ -1862,7 +1862,7 @@ int mlx5_esw_vport_alloc(struct mlx5_eswitch *esw, int index, u16 vport_num)
 	struct mlx5_vport *vport;
 	int err;

-	vport = kzalloc(sizeof(*vport), GFP_KERNEL);
+	vport = kzalloc_obj(*vport, GFP_KERNEL);
 	if (!vport)
 		return -ENOMEM;

@@ -2022,7 +2022,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
 	if (!MLX5_VPORT_MANAGER(dev) && !MLX5_ESWITCH_MANAGER(dev))
 		return 0;

-	esw = kzalloc(sizeof(*esw), GFP_KERNEL);
+	esw = kzalloc_obj(*esw, GFP_KERNEL);
 	if (!esw)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
index 1b439cef3719..1693f2dd5d6a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
@@ -680,7 +680,7 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
 	if (!esw_flow_dests_fwd_ipsec_check(esw, esw_attr))
 		return ERR_PTR(-EOPNOTSUPP);

-	dest = kcalloc(MLX5_MAX_FLOW_FWD_VPORTS + 1, sizeof(*dest), GFP_KERNEL);
+	dest = kzalloc_objs(*dest, MLX5_MAX_FLOW_FWD_VPORTS + 1, GFP_KERNEL);
 	if (!dest)
 		return ERR_PTR(-ENOMEM);

@@ -808,7 +808,7 @@ mlx5_eswitch_add_fwd_rule(struct mlx5_eswitch *esw,
 	struct mlx5_flow_handle *rule;
 	int i, err = 0;

-	dest = kcalloc(MLX5_MAX_FLOW_FWD_VPORTS + 1, sizeof(*dest), GFP_KERNEL);
+	dest = kzalloc_objs(*dest, MLX5_MAX_FLOW_FWD_VPORTS + 1, GFP_KERNEL);
 	if (!dest)
 		return ERR_PTR(-ENOMEM);

@@ -947,7 +947,7 @@ mlx5_eswitch_add_send_to_vport_rule(struct mlx5_eswitch *on_esw,
 	void *misc;
 	u16 vport;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		flow_rule = ERR_PTR(-ENOMEM);
 		goto out;
@@ -1044,7 +1044,7 @@ mlx5_eswitch_add_send_to_vport_meta_rule(struct mlx5_eswitch *esw, u16 vport_num
 	struct mlx5_flow_handle *flow_rule;
 	struct mlx5_flow_spec *spec;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -1198,13 +1198,13 @@ static int esw_add_fdb_peer_miss_rules(struct mlx5_eswitch *esw,
 	    !mlx5_core_is_ecpf_esw_manager(peer_dev))
 		return 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

 	peer_miss_rules_setup(esw, peer_dev, spec, &dest);

-	flows = kvcalloc(peer_esw->total_vports, sizeof(*flows), GFP_KERNEL);
+	flows = kvzalloc_objs(*flows, peer_esw->total_vports, GFP_KERNEL);
 	if (!flows) {
 		err = -ENOMEM;
 		goto alloc_flows_err;
@@ -1368,7 +1368,7 @@ static int esw_add_fdb_miss_rule(struct mlx5_eswitch *esw)
 	u8 *dmac_c;
 	u8 *dmac_v;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		err = -ENOMEM;
 		goto out;
@@ -1430,7 +1430,7 @@ esw_add_restore_rule(struct mlx5_eswitch *esw, u32 tag)
 	if (!mlx5_eswitch_reg_c1_loopback_supported(esw))
 		return ERR_PTR(-EOPNOTSUPP);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -2148,7 +2148,7 @@ mlx5_eswitch_create_vport_rx_rule(struct mlx5_eswitch *esw, u16 vport,
 	struct mlx5_flow_handle *flow_rule;
 	struct mlx5_flow_spec *spec;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		flow_rule = ERR_PTR(-ENOMEM);
 		goto out;
@@ -2525,7 +2525,7 @@ int mlx5_esw_offloads_rep_add(struct mlx5_eswitch *esw,
 	int rep_type;
 	int err;

-	rep = kzalloc(sizeof(*rep), GFP_KERNEL);
+	rep = kzalloc_obj(*rep, GFP_KERNEL);
 	if (!rep)
 		return -ENOMEM;

@@ -2861,7 +2861,7 @@ static int __esw_set_master_egress_rule(struct mlx5_core_dev *master,
 	int err = 0;
 	void *misc;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -3640,7 +3640,7 @@ int mlx5_esw_funcs_changed_handler(struct notifier_block *nb, unsigned long type
 	struct mlx5_host_work *host_work;
 	struct mlx5_eswitch *esw;

-	host_work = kzalloc(sizeof(*host_work), GFP_ATOMIC);
+	host_work = kzalloc_obj(*host_work, GFP_ATOMIC);
 	if (!host_work)
 		return NOTIFY_DONE;

@@ -4470,7 +4470,7 @@ int mlx5_esw_vport_vhca_id_map(struct mlx5_eswitch *esw,
 	}

 	vhca_id = vport->vhca_id;
-	vhca_map_entry = kmalloc(sizeof(*vhca_map_entry), GFP_KERNEL);
+	vhca_map_entry = kmalloc_obj(*vhca_map_entry, GFP_KERNEL);
 	if (!vhca_map_entry)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c
index 40bdc677f051..af82232d53ef 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c
@@ -132,7 +132,7 @@ mlx5_eswitch_termtbl_get_create(struct mlx5_eswitch *esw,
 	if (found)
 		goto tt_add_ref;

-	tt = kzalloc(sizeof(*tt), GFP_KERNEL);
+	tt = kzalloc_obj(*tt, GFP_KERNEL);
 	if (!tt) {
 		err = -ENOMEM;
 		goto tt_create_err;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/events.c b/drivers/net/ethernet/mellanox/mlx5/core/events.c
index 01c5f5990f9a..23ecc8e8a219 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/events.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/events.c
@@ -374,7 +374,7 @@ static int forward_event(struct notifier_block *nb, unsigned long event, void *d

 int mlx5_events_init(struct mlx5_core_dev *dev)
 {
-	struct mlx5_events *events = kzalloc(sizeof(*events), GFP_KERNEL);
+	struct mlx5_events *events = kzalloc_obj(*events, GFP_KERNEL);

 	if (!events)
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.c b/drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.c
index ccef64fb40b6..2b029dc3f0c8 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.c
@@ -531,17 +531,15 @@ static int mlx5_fpga_conn_create_qp(struct mlx5_fpga_conn *conn,
 	if (err)
 		goto out;

-	conn->qp.rq.bufs = kvcalloc(conn->qp.rq.size,
-				    sizeof(conn->qp.rq.bufs[0]),
-				    GFP_KERNEL);
+	conn->qp.rq.bufs = kvzalloc_objs(conn->qp.rq.bufs[0], conn->qp.rq.size,
+					 GFP_KERNEL);
 	if (!conn->qp.rq.bufs) {
 		err = -ENOMEM;
 		goto err_wq;
 	}

-	conn->qp.sq.bufs = kvcalloc(conn->qp.sq.size,
-				    sizeof(conn->qp.sq.bufs[0]),
-				    GFP_KERNEL);
+	conn->qp.sq.bufs = kvzalloc_objs(conn->qp.sq.bufs[0], conn->qp.sq.size,
+					 GFP_KERNEL);
 	if (!conn->qp.sq.bufs) {
 		err = -ENOMEM;
 		goto err_rq_bufs;
@@ -816,7 +814,7 @@ struct mlx5_fpga_conn *mlx5_fpga_conn_create(struct mlx5_fpga_device *fdev,
 	if (!attr->recv_cb)
 		return ERR_PTR(-EINVAL);

-	conn = kzalloc(sizeof(*conn), GFP_KERNEL);
+	conn = kzalloc_obj(*conn, GFP_KERNEL);
 	if (!conn)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c b/drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c
index 1ec61164e6b5..ae87ca14cae4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c
@@ -59,7 +59,7 @@ static struct mlx5_fpga_device *mlx5_fpga_device_alloc(void)
 {
 	struct mlx5_fpga_device *fdev;

-	fdev = kzalloc(sizeof(*fdev), GFP_KERNEL);
+	fdev = kzalloc_obj(*fdev, GFP_KERNEL);
 	if (!fdev)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
index 0a6031a64c6f..80950d84d07a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
@@ -947,7 +947,7 @@ alloc_flow_table(struct mlx5_flow_table_attr *ft_attr, u16 vport,
 	struct mlx5_flow_table *ft;
 	int ret;

-	ft  = kzalloc(sizeof(*ft), GFP_KERNEL);
+	ft = kzalloc_obj(*ft, GFP_KERNEL);
 	if (!ft)
 		return ERR_PTR(-ENOMEM);

@@ -1530,7 +1530,7 @@ static struct mlx5_flow_rule *alloc_rule(struct mlx5_flow_destination *dest)
 {
 	struct mlx5_flow_rule *rule;

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return NULL;

@@ -1548,7 +1548,7 @@ static struct mlx5_flow_handle *alloc_handle(int num_rules)
 {
 	struct mlx5_flow_handle *handle;

-	handle = kzalloc(struct_size(handle, rule, num_rules), GFP_KERNEL);
+	handle = kzalloc_flex(*handle, rule, num_rules, GFP_KERNEL);
 	if (!handle)
 		return NULL;

@@ -2096,7 +2096,7 @@ static int build_match_list(struct match_list *match_head,
 		if (unlikely(!tree_get_node(&g->node)))
 			continue;

-		curr_match = kmalloc(sizeof(*curr_match), GFP_ATOMIC);
+		curr_match = kmalloc_obj(*curr_match, GFP_ATOMIC);
 		if (!curr_match) {
 			rcu_read_unlock();
 			free_match_list(match_head, ft_locked);
@@ -2178,7 +2178,7 @@ add_rule_dup_match_fte(struct fs_fte *fte,
 	int i = 0;

 	if (!fte->dup) {
-		dup = kvzalloc(sizeof(*dup), GFP_KERNEL);
+		dup = kvzalloc_obj(*dup, GFP_KERNEL);
 		if (!dup)
 			return ERR_PTR(-ENOMEM);
 		/* dup will be freed when the fte is freed
@@ -2471,8 +2471,7 @@ mlx5_add_flow_rules(struct mlx5_flow_table *ft,
 		goto unlock;
 	}

-	gen_dest = kcalloc(num_dest + 1, sizeof(*dest),
-			   GFP_KERNEL);
+	gen_dest = kzalloc_objs(*dest, num_dest + 1, GFP_KERNEL);
 	if (!gen_dest) {
 		handle = ERR_PTR(-ENOMEM);
 		goto unlock;
@@ -2849,7 +2848,7 @@ static struct fs_prio *_fs_create_prio(struct mlx5_flow_namespace *ns,
 {
 	struct fs_prio *fs_prio;

-	fs_prio = kzalloc(sizeof(*fs_prio), GFP_KERNEL);
+	fs_prio = kzalloc_obj(*fs_prio, GFP_KERNEL);
 	if (!fs_prio)
 		return ERR_PTR(-ENOMEM);

@@ -2889,7 +2888,7 @@ static struct mlx5_flow_namespace *fs_create_namespace(struct fs_prio *prio,
 {
 	struct mlx5_flow_namespace	*ns;

-	ns = kzalloc(sizeof(*ns), GFP_KERNEL);
+	ns = kzalloc_obj(*ns, GFP_KERNEL);
 	if (!ns)
 		return ERR_PTR(-ENOMEM);

@@ -3020,7 +3019,7 @@ static struct mlx5_flow_root_namespace
 	struct mlx5_flow_namespace *ns;

 	/* Create the root namespace */
-	root_ns = kzalloc(sizeof(*root_ns), GFP_KERNEL);
+	root_ns = kzalloc_obj(*root_ns, GFP_KERNEL);
 	if (!root_ns)
 		return NULL;

@@ -3375,9 +3374,8 @@ static int init_rdma_transport_rx_root_ns(struct mlx5_flow_steering *steering)
 	total_vports = mlx5_eswitch_get_total_vports(dev) ?: 1;

 	steering->rdma_transport_rx_root_ns =
-			kcalloc(total_vports,
-				sizeof(*steering->rdma_transport_rx_root_ns),
-				GFP_KERNEL);
+			kzalloc_objs(*steering->rdma_transport_rx_root_ns,
+				     total_vports, GFP_KERNEL);
 	if (!steering->rdma_transport_rx_root_ns)
 		return -ENOMEM;

@@ -3408,9 +3406,8 @@ static int init_rdma_transport_tx_root_ns(struct mlx5_flow_steering *steering)
 	total_vports = mlx5_eswitch_get_total_vports(dev) ?: 1;

 	steering->rdma_transport_tx_root_ns =
-			kcalloc(total_vports,
-				sizeof(*steering->rdma_transport_tx_root_ns),
-				GFP_KERNEL);
+			kzalloc_objs(*steering->rdma_transport_tx_root_ns,
+				     total_vports, GFP_KERNEL);
 	if (!steering->rdma_transport_tx_root_ns)
 		return -ENOMEM;

@@ -3518,9 +3515,8 @@ static int create_fdb_fast_path(struct mlx5_flow_steering *steering)
 {
 	int err;

-	steering->fdb_sub_ns = kcalloc(FDB_NUM_CHAINS,
-				       sizeof(*steering->fdb_sub_ns),
-				       GFP_KERNEL);
+	steering->fdb_sub_ns = kzalloc_objs(*steering->fdb_sub_ns,
+					    FDB_NUM_CHAINS, GFP_KERNEL);
 	if (!steering->fdb_sub_ns)
 		return -ENOMEM;

@@ -3674,7 +3670,7 @@ mlx5_fs_add_vport_acl_root_ns(struct mlx5_flow_steering *steering,
 	if (xa_load(esw_acl_root_ns, vport_idx))
 		return -EEXIST;

-	vport_ns = kzalloc(sizeof(*vport_ns), GFP_KERNEL);
+	vport_ns = kzalloc_obj(*vport_ns, GFP_KERNEL);
 	if (!vport_ns)
 		return -ENOMEM;

@@ -3993,7 +3989,7 @@ int mlx5_fs_core_alloc(struct mlx5_core_dev *dev)
 	if (err)
 		goto err;

-	steering = kzalloc(sizeof(*steering), GFP_KERNEL);
+	steering = kzalloc_obj(*steering, GFP_KERNEL);
 	if (!steering) {
 		err = -ENOMEM;
 		goto err;
@@ -4034,7 +4030,7 @@ int mlx5_fs_add_rx_underlay_qpn(struct mlx5_core_dev *dev, u32 underlay_qpn)
 	struct mlx5_ft_underlay_qp *new_uqp;
 	int err = 0;

-	new_uqp = kzalloc(sizeof(*new_uqp), GFP_KERNEL);
+	new_uqp = kzalloc_obj(*new_uqp, GFP_KERNEL);
 	if (!new_uqp)
 		return -ENOMEM;

@@ -4137,7 +4133,7 @@ struct mlx5_modify_hdr *mlx5_modify_header_alloc(struct mlx5_core_dev *dev,
 	if (!root)
 		return ERR_PTR(-EOPNOTSUPP);

-	modify_hdr = kzalloc(sizeof(*modify_hdr), GFP_KERNEL);
+	modify_hdr = kzalloc_obj(*modify_hdr, GFP_KERNEL);
 	if (!modify_hdr)
 		return ERR_PTR(-ENOMEM);

@@ -4178,7 +4174,7 @@ struct mlx5_pkt_reformat *mlx5_packet_reformat_alloc(struct mlx5_core_dev *dev,
 	if (!root)
 		return ERR_PTR(-EOPNOTSUPP);

-	pkt_reformat = kzalloc(sizeof(*pkt_reformat), GFP_KERNEL);
+	pkt_reformat = kzalloc_obj(*pkt_reformat, GFP_KERNEL);
 	if (!pkt_reformat)
 		return ERR_PTR(-ENOMEM);

@@ -4226,7 +4222,7 @@ mlx5_create_match_definer(struct mlx5_core_dev *dev,
 	if (!root)
 		return ERR_PTR(-EOPNOTSUPP);

-	definer = kzalloc(sizeof(*definer), GFP_KERNEL);
+	definer = kzalloc_obj(*definer, GFP_KERNEL);
 	if (!definer)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_counters.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_counters.c
index fe7caa910219..b2b3a12493f4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_counters.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_counters.c
@@ -234,11 +234,11 @@ static struct mlx5_fc *mlx5_fc_single_alloc(struct mlx5_core_dev *dev)
 	struct mlx5_fc *counter;
 	int err;

-	counter = kzalloc(sizeof(*counter), GFP_KERNEL);
+	counter = kzalloc_obj(*counter, GFP_KERNEL);
 	if (!counter)
 		return ERR_PTR(-ENOMEM);

-	fc_bulk = kzalloc(sizeof(*fc_bulk), GFP_KERNEL);
+	fc_bulk = kzalloc_obj(*fc_bulk, GFP_KERNEL);
 	if (!fc_bulk) {
 		err = -ENOMEM;
 		goto free_counter;
@@ -328,7 +328,7 @@ int mlx5_init_fc_stats(struct mlx5_core_dev *dev)
 {
 	struct mlx5_fc_stats *fc_stats;

-	fc_stats = kzalloc(sizeof(*fc_stats), GFP_KERNEL);
+	fc_stats = kzalloc_obj(*fc_stats, GFP_KERNEL);
 	if (!fc_stats)
 		return -ENOMEM;
 	dev->priv.fc_stats = fc_stats;
@@ -460,7 +460,7 @@ static struct mlx5_fs_bulk *mlx5_fc_bulk_create(struct mlx5_core_dev *dev,
 	alloc_bitmask = MLX5_CAP_GEN(dev, flow_counter_bulk_alloc);
 	bulk_len = alloc_bitmask > 0 ? MLX5_FC_BULK_NUM_FCS(alloc_bitmask) : 1;

-	fc_bulk = kvzalloc(struct_size(fc_bulk, fcs, bulk_len), GFP_KERNEL);
+	fc_bulk = kvzalloc_flex(*fc_bulk, fcs, bulk_len, GFP_KERNEL);
 	if (!fc_bulk)
 		return NULL;

@@ -572,10 +572,10 @@ mlx5_fc_local_create(u32 counter_id, u32 offset, u32 bulk_size)
 	struct mlx5_fc_bulk *fc_bulk;
 	struct mlx5_fc *counter;

-	counter = kzalloc(sizeof(*counter), GFP_KERNEL);
+	counter = kzalloc_obj(*counter, GFP_KERNEL);
 	if (!counter)
 		return ERR_PTR(-ENOMEM);
-	fc_bulk = kzalloc(sizeof(*fc_bulk), GFP_KERNEL);
+	fc_bulk = kzalloc_obj(*fc_bulk, GFP_KERNEL);
 	if (!fc_bulk) {
 		kfree(counter);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_ft_pool.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_ft_pool.c
index f6abfd00d7e6..847e940d4d70 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_ft_pool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_ft_pool.c
@@ -26,7 +26,7 @@ int mlx5_ft_pool_init(struct mlx5_core_dev *dev)
 	struct mlx5_ft_pool *ft_pool;
 	int i;

-	ft_pool = kzalloc(sizeof(*ft_pool), GFP_KERNEL);
+	ft_pool = kzalloc_obj(*ft_pool, GFP_KERNEL);
 	if (!ft_pool)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
index ae10665c53f3..c0e23bc2d96a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
@@ -899,7 +899,7 @@ int mlx5_fw_reset_init(struct mlx5_core_dev *dev)
 	if (!MLX5_CAP_MCAM_REG(dev, mfrl))
 		return 0;

-	fw_reset = kzalloc(sizeof(*fw_reset), GFP_KERNEL);
+	fw_reset = kzalloc_obj(*fw_reset, GFP_KERNEL);
 	if (!fw_reset)
 		return -ENOMEM;
 	fw_reset->wq = create_singlethread_workqueue("mlx5_fw_reset_events");
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/hwmon.c b/drivers/net/ethernet/mellanox/mlx5/core/hwmon.c
index 4ba2636d7fb6..ab005d7d184b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/hwmon.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/hwmon.c
@@ -298,7 +298,7 @@ static struct mlx5_hwmon *mlx5_hwmon_alloc(struct mlx5_core_dev *mdev)
 	u32 sensors_count;
 	int err;

-	hwmon = kzalloc(sizeof(*mdev->hwmon), GFP_KERNEL);
+	hwmon = kzalloc_obj(*mdev->hwmon, GFP_KERNEL);
 	if (!hwmon)
 		return ERR_PTR(-ENOMEM);

@@ -313,8 +313,8 @@ static struct mlx5_hwmon *mlx5_hwmon_alloc(struct mlx5_core_dev *mdev)

 	hwmon->module_scount = mon_cap ? 1 : 0;
 	sensors_count = hwmon->asic_platform_scount + hwmon->module_scount;
-	hwmon->temp_channel_desc = kcalloc(sensors_count, sizeof(*hwmon->temp_channel_desc),
-					   GFP_KERNEL);
+	hwmon->temp_channel_desc = kzalloc_objs(*hwmon->temp_channel_desc,
+						sensors_count, GFP_KERNEL);
 	if (!hwmon->temp_channel_desc) {
 		err = -ENOMEM;
 		goto err_free_hwmon;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib_vlan.c b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib_vlan.c
index 04444dad3a0d..96a75b8ef779 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib_vlan.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib_vlan.c
@@ -51,7 +51,7 @@ int mlx5i_pkey_qpn_ht_init(struct net_device *netdev)
 	struct mlx5i_priv *ipriv = netdev_priv(netdev);
 	struct mlx5i_pkey_qpn_ht *qpn_htbl;

-	qpn_htbl = kzalloc(sizeof(*qpn_htbl), GFP_KERNEL);
+	qpn_htbl = kzalloc_obj(*qpn_htbl, GFP_KERNEL);
 	if (!qpn_htbl)
 		return -ENOMEM;

@@ -89,7 +89,7 @@ int mlx5i_pkey_add_qpn(struct net_device *netdev, u32 qpn)
 	u8 key = hash_32(qpn, MLX5I_MAX_LOG_PKEY_SUP);
 	struct qpn_to_netdev *new_node;

-	new_node = kzalloc(sizeof(*new_node), GFP_KERNEL);
+	new_node = kzalloc_obj(*new_node, GFP_KERNEL);
 	if (!new_node)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/irq_affinity.c b/drivers/net/ethernet/mellanox/mlx5/core/irq_affinity.c
index 14d339eceb92..0be0b614938c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/irq_affinity.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/irq_affinity.c
@@ -52,7 +52,7 @@ irq_pool_request_irq(struct mlx5_irq_pool *pool, struct irq_affinity_desc *af_de
 	u32 irq_index;
 	int err;

-	auto_desc = kvzalloc(sizeof(*auto_desc), GFP_KERNEL);
+	auto_desc = kvzalloc_obj(*auto_desc, GFP_KERNEL);
 	if (!auto_desc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c
index 9fe47c836ebd..0eed75f5ccc2 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c
@@ -272,7 +272,7 @@ static struct mlx5_lag *mlx5_lag_dev_alloc(struct mlx5_core_dev *dev)
 	struct mlx5_lag *ldev;
 	int err;

-	ldev = kzalloc(sizeof(*ldev), GFP_KERNEL);
+	ldev = kzalloc_obj(*ldev, GFP_KERNEL);
 	if (!ldev)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/mp.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/mp.c
index cdc99fe5c956..c4c2bf33ef35 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lag/mp.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/mp.c
@@ -291,7 +291,7 @@ mlx5_lag_init_fib_work(struct mlx5_lag *ldev, unsigned long event)
 {
 	struct mlx5_fib_event_work *fib_work;

-	fib_work = kzalloc(sizeof(*fib_work), GFP_ATOMIC);
+	fib_work = kzalloc_obj(*fib_work, GFP_ATOMIC);
 	if (WARN_ON(!fib_work))
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c
index 04762562d7d9..d3458adcc1e5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c
@@ -171,7 +171,7 @@ static int mlx5_lag_mpesw_queue_work(struct mlx5_core_dev *dev,
 	if (!ldev)
 		return 0;

-	work = kzalloc(sizeof(*work), GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 	if (!work)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c
index d832a12ffec0..63071fcb3a51 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c
@@ -308,7 +308,7 @@ mlx5_lag_create_definer(struct mlx5_lag *ldev, enum netdev_lag_hash hash,
 		return ERR_PTR(-EINVAL);

 	dev = ldev->pf[first_idx].dev;
-	lag_definer = kzalloc(sizeof(*lag_definer), GFP_KERNEL);
+	lag_definer = kzalloc_obj(*lag_definer, GFP_KERNEL);
 	if (!lag_definer)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/aso.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/aso.c
index 129725159a93..004077710a34 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/aso.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/aso.c
@@ -311,7 +311,7 @@ struct mlx5_aso *mlx5_aso_create(struct mlx5_core_dev *mdev, u32 pdn)
 	struct mlx5_aso *aso;
 	int err;

-	aso = kzalloc(sizeof(*aso), GFP_KERNEL);
+	aso = kzalloc_obj(*aso, GFP_KERNEL);
 	if (!aso)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
index 0ba0ef8bae42..6067d3ac3cb8 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
@@ -1082,9 +1082,8 @@ static void mlx5_init_pin_config(struct mlx5_core_dev *mdev)
 		return;

 	clock->ptp_info.pin_config =
-			kcalloc(clock->ptp_info.n_pins,
-				sizeof(*clock->ptp_info.pin_config),
-				GFP_KERNEL);
+			kzalloc_objs(*clock->ptp_info.pin_config,
+				     clock->ptp_info.n_pins, GFP_KERNEL);
 	if (!clock->ptp_info.pin_config)
 		return;
 	clock->ptp_info.enable = mlx5_ptp_enable;
@@ -1407,7 +1406,7 @@ static int mlx5_clock_alloc(struct mlx5_core_dev *mdev, bool shared)
 	struct mlx5_clock_priv *cpriv;
 	struct mlx5_clock *clock;

-	cpriv = kzalloc(sizeof(*cpriv), GFP_KERNEL);
+	cpriv = kzalloc_obj(*cpriv, GFP_KERNEL);
 	if (!cpriv)
 		return -ENOMEM;

@@ -1604,7 +1603,7 @@ int mlx5_init_clock(struct mlx5_core_dev *mdev)
 		return 0;
 	}

-	clock_state = kzalloc(sizeof(*clock_state), GFP_KERNEL);
+	clock_state = kzalloc_obj(*clock_state, GFP_KERNEL);
 	if (!clock_state)
 		return -ENOMEM;
 	clock_state->mdev = mdev;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/crypto.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/crypto.c
index 3a94b8f8031e..b47e828406f9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/crypto.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/crypto.c
@@ -293,7 +293,7 @@ mlx5_crypto_dek_bulk_create(struct mlx5_crypto_dek_pool *pool)
 	int num_deks, base_obj_id;
 	int err;

-	bulk = kzalloc(sizeof(*bulk), GFP_KERNEL);
+	bulk = kzalloc_obj(*bulk, GFP_KERNEL);
 	if (!bulk)
 		return ERR_PTR(-ENOMEM);

@@ -611,7 +611,7 @@ struct mlx5_crypto_dek *mlx5_crypto_dek_create(struct mlx5_crypto_dek_pool *dek_
 	int obj_offset;
 	int err;

-	dek = kzalloc(sizeof(*dek), GFP_KERNEL);
+	dek = kzalloc_obj(*dek, GFP_KERNEL);
 	if (!dek)
 		return ERR_PTR(-ENOMEM);

@@ -683,7 +683,7 @@ mlx5_crypto_dek_pool_create(struct mlx5_core_dev *mdev, int key_purpose)
 {
 	struct mlx5_crypto_dek_pool *pool;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(-ENOMEM);

@@ -748,7 +748,7 @@ struct mlx5_crypto_dek_priv *mlx5_crypto_dek_init(struct mlx5_core_dev *mdev)
 	if (!MLX5_CAP_CRYPTO(mdev, log_dek_max_alloc))
 		return NULL;

-	dek_priv = kzalloc(sizeof(*dek_priv), GFP_KERNEL);
+	dek_priv = kzalloc_obj(*dek_priv, GFP_KERNEL);
 	if (!dek_priv)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
index e749618229bc..d681c063be4e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
@@ -64,7 +64,7 @@ mlx5_devcom_dev_alloc(struct mlx5_core_dev *dev)
 {
 	struct mlx5_devcom_dev *devc;

-	devc = kzalloc(sizeof(*devc), GFP_KERNEL);
+	devc = kzalloc_obj(*devc, GFP_KERNEL);
 	if (!devc)
 		return NULL;

@@ -120,7 +120,7 @@ mlx5_devcom_comp_alloc(u64 id, const struct mlx5_devcom_match_attr *attr,
 {
 	struct mlx5_devcom_comp *comp;

-	comp = kzalloc(sizeof(*comp), GFP_KERNEL);
+	comp = kzalloc_obj(*comp, GFP_KERNEL);
 	if (!comp)
 		return NULL;

@@ -158,7 +158,7 @@ devcom_alloc_comp_dev(struct mlx5_devcom_dev *devc,
 {
 	struct mlx5_devcom_comp_dev *devcom;

-	devcom = kzalloc(sizeof(*devcom), GFP_KERNEL);
+	devcom = kzalloc_obj(*devcom, GFP_KERNEL);
 	if (!devcom)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/dm.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/dm.c
index 8115071c34a4..b6fc7ca4bcc0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/dm.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/dm.c
@@ -28,7 +28,7 @@ struct mlx5_dm *mlx5_dm_create(struct mlx5_core_dev *dev)
 	if (!(MLX5_CAP_GEN_64(dev, general_obj_types) & MLX5_GENERAL_OBJ_TYPES_CAP_SW_ICM))
 		return NULL;

-	dm = kzalloc(sizeof(*dm), GFP_KERNEL);
+	dm = kzalloc_obj(*dm, GFP_KERNEL);
 	if (!dm)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c
index 0a3c260af377..d8242edec30f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_chains.c
@@ -314,7 +314,7 @@ mlx5_chains_create_chain(struct mlx5_fs_chains *chains, u32 chain)
 	struct fs_chain *chain_s = NULL;
 	int err;

-	chain_s = kvzalloc(sizeof(*chain_s), GFP_KERNEL);
+	chain_s = kvzalloc_obj(*chain_s, GFP_KERNEL);
 	if (!chain_s)
 		return ERR_PTR(-ENOMEM);

@@ -481,7 +481,7 @@ mlx5_chains_create_prio(struct mlx5_fs_chains *chains,
 	if (IS_ERR(chain_s))
 		return ERR_CAST(chain_s);

-	prio_s = kvzalloc(sizeof(*prio_s), GFP_KERNEL);
+	prio_s = kvzalloc_obj(*prio_s, GFP_KERNEL);
 	flow_group_in = kvzalloc(inlen, GFP_KERNEL);
 	if (!prio_s || !flow_group_in) {
 		err = -ENOMEM;
@@ -728,7 +728,7 @@ mlx5_chains_init(struct mlx5_core_dev *dev, struct mlx5_chains_attr *attr)
 	struct mlx5_fs_chains *chains;
 	int err;

-	chains = kzalloc(sizeof(*chains), GFP_KERNEL);
+	chains = kzalloc_obj(*chains, GFP_KERNEL);
 	if (!chains)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c
index 7adad784ad46..feed745cddab 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c
@@ -359,7 +359,7 @@ mlx5_generate_ttc_rule(struct mlx5_core_dev *dev, struct mlx5_flow_table *ft,
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -536,7 +536,7 @@ static int mlx5_create_ttc_table_groups(struct mlx5_ttc_table *ttc,
 	int err;
 	u8 *mc;

-	ttc->g = kcalloc(groups->num_groups, sizeof(*ttc->g), GFP_KERNEL);
+	ttc->g = kzalloc_objs(*ttc->g, groups->num_groups, GFP_KERNEL);
 	if (!ttc->g)
 		return -ENOMEM;
 	in = kvzalloc(inlen, GFP_KERNEL);
@@ -630,7 +630,7 @@ mlx5_generate_inner_ttc_rule(struct mlx5_core_dev *dev,
 	int err = 0;
 	u8 ipv;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -713,7 +713,7 @@ static int mlx5_create_inner_ttc_table_groups(struct mlx5_ttc_table *ttc,
 	int err;
 	u8 *mc;

-	ttc->g = kcalloc(groups->num_groups, sizeof(*ttc->g), GFP_KERNEL);
+	ttc->g = kzalloc_objs(*ttc->g, groups->num_groups, GFP_KERNEL);
 	if (!ttc->g)
 		return -ENOMEM;
 	in = kvzalloc(inlen, GFP_KERNEL);
@@ -804,7 +804,7 @@ struct mlx5_ttc_table *mlx5_create_inner_ttc_table(struct mlx5_core_dev *dev,
 		return ERR_PTR(-EINVAL);
 	}

-	ttc = kvzalloc(sizeof(*ttc), GFP_KERNEL);
+	ttc = kvzalloc_obj(*ttc, GFP_KERNEL);
 	if (!ttc)
 		return ERR_PTR(-ENOMEM);

@@ -882,7 +882,7 @@ struct mlx5_ttc_table *mlx5_create_ttc_table(struct mlx5_core_dev *dev,
 		return ERR_PTR(-EINVAL);
 	}

-	ttc = kvzalloc(sizeof(*ttc), GFP_KERNEL);
+	ttc = kvzalloc_obj(*ttc, GFP_KERNEL);
 	if (!ttc)
 		return ERR_PTR(-ENOMEM);

@@ -1029,7 +1029,7 @@ mlx5_ttc_create_ipsec_outer_rule(struct mlx5_ttc_table *ttc,
 	if (err)
 		return ERR_PTR(err);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

@@ -1070,7 +1070,7 @@ mlx5_ttc_create_ipsec_inner_rule(struct mlx5_ttc_table *ttc,
 	if (err)
 		return ERR_PTR(err);

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c
index 6dc83e871cd7..7664a74cbf18 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c
@@ -134,8 +134,7 @@ void mlx5_geneve_tlv_option_del(struct mlx5_geneve *geneve)

 struct mlx5_geneve *mlx5_geneve_create(struct mlx5_core_dev *mdev)
 {
-	struct mlx5_geneve *geneve =
-		kzalloc(sizeof(*geneve), GFP_KERNEL);
+	struct mlx5_geneve *geneve = kzalloc_obj(*geneve, GFP_KERNEL);

 	if (!geneve)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/hv_vhca.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/hv_vhca.c
index 30564d9b00e9..6b3f906653bd 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/hv_vhca.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/hv_vhca.c
@@ -42,7 +42,7 @@ struct mlx5_hv_vhca *mlx5_hv_vhca_create(struct mlx5_core_dev *dev)
 {
 	struct mlx5_hv_vhca *hv_vhca;

-	hv_vhca = kzalloc(sizeof(*hv_vhca), GFP_KERNEL);
+	hv_vhca = kzalloc_obj(*hv_vhca, GFP_KERNEL);
 	if (!hv_vhca)
 		return ERR_PTR(-ENOMEM);

@@ -98,7 +98,7 @@ void mlx5_hv_vhca_invalidate(void *context, u64 block_mask)
 	struct mlx5_hv_vhca *hv_vhca = (struct mlx5_hv_vhca *)context;
 	struct mlx5_hv_vhca_work *work;

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return;

@@ -152,7 +152,7 @@ mlx5_hv_vhca_control_agent_invalidate(struct mlx5_hv_vhca_agent *agent,
 	u32 capabilities = 0;
 	int err;

-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (!block)
 		return;

@@ -273,7 +273,7 @@ mlx5_hv_vhca_agent_create(struct mlx5_hv_vhca *hv_vhca,
 	}
 	mutex_unlock(&hv_vhca->agents_lock);

-	agent = kzalloc(sizeof(*agent), GFP_KERNEL);
+	agent = kzalloc_obj(*agent, GFP_KERNEL);
 	if (!agent)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/ipsec_fs_roce.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/ipsec_fs_roce.c
index d524f0220513..ddde75bd3012 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/ipsec_fs_roce.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/ipsec_fs_roce.c
@@ -139,7 +139,7 @@ ipsec_fs_roce_rx_rule_setup(struct mlx5_core_dev *mdev,
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -242,7 +242,7 @@ static int ipsec_fs_roce_tx_mpv_rule_setup(struct mlx5_core_dev *mdev,
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -850,7 +850,7 @@ struct mlx5_ipsec_fs *mlx5_ipsec_fs_roce_init(struct mlx5_core_dev *mdev,
 		return NULL;
 	}

-	roce_ipsec = kzalloc(sizeof(*roce_ipsec), GFP_KERNEL);
+	roce_ipsec = kzalloc_obj(*roce_ipsec, GFP_KERNEL);
 	if (!roce_ipsec)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/macsec_fs.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/macsec_fs.c
index e6be2f01daf4..eafd6bcf1675 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/macsec_fs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/macsec_fs.c
@@ -267,7 +267,7 @@ static int macsec_fs_tx_create_crypto_table_groups(struct mlx5_macsec_flow_table
 	int err;
 	u8 *mc;

-	ft->g = kcalloc(TX_CRYPTO_TABLE_NUM_GROUPS, sizeof(*ft->g), GFP_KERNEL);
+	ft->g = kzalloc_objs(*ft->g, TX_CRYPTO_TABLE_NUM_GROUPS, GFP_KERNEL);
 	if (!ft->g)
 		return -ENOMEM;
 	in = kvzalloc(inlen, GFP_KERNEL);
@@ -404,7 +404,7 @@ static int macsec_fs_tx_create(struct mlx5_macsec_fs *macsec_fs)
 	if (!ns)
 		return -ENOMEM;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -713,7 +713,7 @@ static int macsec_fs_id_add(struct list_head *macsec_devices_list, u32 fs_id,
 		rcu_read_unlock();
 	}

-	fs_id_iter = kzalloc(sizeof(*fs_id_iter), GFP_KERNEL);
+	fs_id_iter = kzalloc_obj(*fs_id_iter, GFP_KERNEL);
 	if (!fs_id_iter)
 		return -ENOMEM;

@@ -725,7 +725,7 @@ static int macsec_fs_id_add(struct list_head *macsec_devices_list, u32 fs_id,
 	}

 	if (!macsec_device) { /* first time adding a SA to that device */
-		macsec_device = kzalloc(sizeof(*macsec_device), GFP_KERNEL);
+		macsec_device = kzalloc_obj(*macsec_device, GFP_KERNEL);
 		if (!macsec_device) {
 			err = -ENOMEM;
 			goto err_alloc_dev;
@@ -813,7 +813,7 @@ macsec_fs_tx_add_rule(struct mlx5_macsec_fs *macsec_fs,

 	tx_tables = &tx_fs->tables;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return NULL;

@@ -821,7 +821,7 @@ macsec_fs_tx_add_rule(struct mlx5_macsec_fs *macsec_fs,
 	if (err)
 		goto out_spec;

-	macsec_rule = kzalloc(sizeof(*macsec_rule), GFP_KERNEL);
+	macsec_rule = kzalloc_obj(*macsec_rule, GFP_KERNEL);
 	if (!macsec_rule) {
 		macsec_fs_tx_ft_put(macsec_fs);
 		goto out_spec;
@@ -931,7 +931,7 @@ static int macsec_fs_tx_init(struct mlx5_macsec_fs *macsec_fs)
 	struct mlx5_fc *flow_counter;
 	int err;

-	tx_fs = kzalloc(sizeof(*tx_fs), GFP_KERNEL);
+	tx_fs = kzalloc_obj(*tx_fs, GFP_KERNEL);
 	if (!tx_fs)
 		return -ENOMEM;

@@ -1055,7 +1055,7 @@ static int macsec_fs_rx_create_crypto_table_groups(struct mlx5_macsec_flow_table
 	int err;
 	u8 *mc;

-	ft->g = kcalloc(RX_CRYPTO_TABLE_NUM_GROUPS, sizeof(*ft->g), GFP_KERNEL);
+	ft->g = kzalloc_objs(*ft->g, RX_CRYPTO_TABLE_NUM_GROUPS, GFP_KERNEL);
 	if (!ft->g)
 		return -ENOMEM;

@@ -1327,7 +1327,7 @@ static int macsec_fs_rx_roce_jump_to_rdma_rules_create(struct mlx5_macsec_fs *ma
 	struct mlx5_flow_spec *spec;
 	int err;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -1510,7 +1510,7 @@ static int macsec_fs_rx_create(struct mlx5_macsec_fs *macsec_fs)
 	if (!ns)
 		return -ENOMEM;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -1739,7 +1739,7 @@ macsec_fs_rx_add_rule(struct mlx5_macsec_fs *macsec_fs,
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return NULL;

@@ -1747,7 +1747,7 @@ macsec_fs_rx_add_rule(struct mlx5_macsec_fs *macsec_fs,
 	if (err)
 		goto out_spec;

-	macsec_rule = kzalloc(sizeof(*macsec_rule), GFP_KERNEL);
+	macsec_rule = kzalloc_obj(*macsec_rule, GFP_KERNEL);
 	if (!macsec_rule) {
 		macsec_fs_rx_ft_put(macsec_fs);
 		goto out_spec;
@@ -1847,7 +1847,7 @@ static int macsec_fs_rx_init(struct mlx5_macsec_fs *macsec_fs)
 	struct mlx5_fc *flow_counter;
 	int err;

-	rx_fs =	kzalloc(sizeof(*rx_fs), GFP_KERNEL);
+	rx_fs = kzalloc_obj(*rx_fs, GFP_KERNEL);
 	if (!rx_fs)
 		return -ENOMEM;

@@ -2132,11 +2132,11 @@ static int mlx5_macsec_fs_add_roce_rule_rx(struct mlx5_macsec_fs *macsec_fs, u32
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

-	rx_rule = kzalloc(sizeof(*rx_rule), GFP_KERNEL);
+	rx_rule = kzalloc_obj(*rx_rule, GFP_KERNEL);
 	if (!rx_rule) {
 		err = -ENOMEM;
 		goto out;
@@ -2201,11 +2201,11 @@ static int mlx5_macsec_fs_add_roce_rule_tx(struct mlx5_macsec_fs *macsec_fs, u32
 	struct mlx5_flow_spec *spec;
 	int err = 0;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

-	tx_rule = kzalloc(sizeof(*tx_rule), GFP_KERNEL);
+	tx_rule = kzalloc_obj(*tx_rule, GFP_KERNEL);
 	if (!tx_rule) {
 		err = -ENOMEM;
 		goto out;
@@ -2361,7 +2361,7 @@ mlx5_macsec_fs_init(struct mlx5_core_dev *mdev)
 	struct mlx5_macsec_fs *macsec_fs;
 	int err;

-	macsec_fs = kzalloc(sizeof(*macsec_fs), GFP_KERNEL);
+	macsec_fs = kzalloc_obj(*macsec_fs, GFP_KERNEL);
 	if (!macsec_fs)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c
index 4a88a42ae4f7..5352f9b61415 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c
@@ -103,7 +103,7 @@ int mlx5_mpfs_init(struct mlx5_core_dev *dev)
 	if (!MLX5_ESWITCH_MANAGER(dev) || l2table_size == 1)
 		return 0;

-	mpfs = kzalloc(sizeof(*mpfs), GFP_KERNEL);
+	mpfs = kzalloc_obj(*mpfs, GFP_KERNEL);
 	if (!mpfs)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.h b/drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.h
index 9c63838ce1f3..e864e5c430e0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.h
@@ -72,7 +72,7 @@ struct l2addr_node {
 	int ix = MLX5_L2_ADDR_HASH(mac);                    \
 	type *ptr = NULL;                                   \
 							    \
-	ptr = kzalloc(sizeof(type), gfp);                   \
+	ptr = kzalloc_obj(type, gfp);                   \
 	if (ptr) {                                          \
 		ether_addr_copy(ptr->node.addr, mac);       \
 		hlist_add_head(&ptr->node.hlist, &(hash)[ix]);\
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c
index 8e17daae48af..ca99b4375b66 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c
@@ -187,7 +187,7 @@ static int sd_init(struct mlx5_core_dev *dev)
 		return 0;
 	}

-	sd = kzalloc(sizeof(*sd), GFP_KERNEL);
+	sd = kzalloc_obj(*sd, GFP_KERNEL);
 	if (!sd)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/st.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/st.c
index ef06fe6cbb51..2de8a80415f1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/st.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/st.c
@@ -59,7 +59,7 @@ struct mlx5_st *mlx5_st_create(struct mlx5_core_dev *dev)
 	if (ret)
 		return NULL;

-	st = kzalloc(sizeof(*st), GFP_KERNEL);
+	st = kzalloc_obj(*st, GFP_KERNEL);
 	if (!st)
 		goto end;

@@ -124,7 +124,7 @@ int mlx5_st_alloc_index(struct mlx5_core_dev *dev, enum tph_mem_type mem_type,
 		}
 	}

-	idx_data = kzalloc(sizeof(*idx_data), GFP_KERNEL);
+	idx_data = kzalloc_obj(*idx_data, GFP_KERNEL);
 	if (!idx_data) {
 		ret = -ENOMEM;
 		goto end;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.c
index e223e0e46433..5c2ebf74b6a5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.c
@@ -37,7 +37,7 @@ int mlx5_tout_init(struct mlx5_core_dev *dev)
 {
 	int i;

-	dev->timeouts = kmalloc(sizeof(*dev->timeouts), GFP_KERNEL);
+	dev->timeouts = kmalloc_obj(*dev->timeouts, GFP_KERNEL);
 	if (!dev->timeouts)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/vxlan.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/vxlan.c
index 304912637c35..906d1ce3879f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/vxlan.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/vxlan.c
@@ -103,7 +103,7 @@ int mlx5_vxlan_add_port(struct mlx5_vxlan *vxlan, u16 port)
 	struct mlx5_vxlan_port *vxlanp;
 	int ret;

-	vxlanp = kzalloc(sizeof(*vxlanp), GFP_KERNEL);
+	vxlanp = kzalloc_obj(*vxlanp, GFP_KERNEL);
 	if (!vxlanp)
 		return -ENOMEM;
 	vxlanp->udp_port = port;
@@ -151,7 +151,7 @@ struct mlx5_vxlan *mlx5_vxlan_create(struct mlx5_core_dev *mdev)
 	if (!MLX5_CAP_ETH(mdev, tunnel_stateless_vxlan) || !mlx5_core_is_pf(mdev))
 		return ERR_PTR(-EOPNOTSUPP);

-	vxlan = kzalloc(sizeof(*vxlan), GFP_KERNEL);
+	vxlan = kzalloc_obj(*vxlan, GFP_KERNEL);
 	if (!vxlan)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index 55b4e0cceae2..a6c838cce13c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -1792,7 +1792,7 @@ static int mlx5_hca_caps_alloc(struct mlx5_core_dev *dev)
 	int i;

 	for (i = 0; i < ARRAY_SIZE(types); i++) {
-		cap = kzalloc(sizeof(*cap), GFP_KERNEL);
+		cap = kzalloc_obj(*cap, GFP_KERNEL);
 		if (!cap)
 			goto err;
 		type = types[i];
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c b/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
index cd68c4b2c0bf..91aa78052462 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
@@ -107,7 +107,7 @@ static struct rb_root *page_root_per_function(struct mlx5_core_dev *dev, u32 fun
 	if (root)
 		return root;

-	root = kzalloc(sizeof(*root), GFP_KERNEL);
+	root = kzalloc_obj(*root, GFP_KERNEL);
 	if (!root)
 		return ERR_PTR(-ENOMEM);

@@ -148,7 +148,7 @@ static int insert_page(struct mlx5_core_dev *dev, u64 addr, struct page *page, u
 			return -EEXIST;
 	}

-	nfp = kzalloc(sizeof(*nfp), GFP_KERNEL);
+	nfp = kzalloc_obj(*nfp, GFP_KERNEL);
 	if (!nfp)
 		return -ENOMEM;

@@ -639,7 +639,7 @@ static int req_pages_handler(struct notifier_block *nb,
 		      RELEASE_ALL_PAGES_MASK;
 	mlx5_core_dbg(dev, "page request for func 0x%x, npages %d, release_all %d\n",
 		      func_id, npages, release_all);
-	req = kzalloc(sizeof(*req), GFP_ATOMIC);
+	req = kzalloc_obj(*req, GFP_ATOMIC);
 	if (!req) {
 		mlx5_core_warn(dev, "failed to allocate pages request\n");
 		return NOTIFY_DONE;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c b/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
index aa3b5878e3da..c23d2c710256 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
@@ -261,7 +261,7 @@ struct mlx5_irq *mlx5_irq_alloc(struct mlx5_irq_pool *pool, int i,
 	struct mlx5_irq *irq;
 	int err;

-	irq = kzalloc(sizeof(*irq), GFP_KERNEL);
+	irq = kzalloc_obj(*irq, GFP_KERNEL);
 	if (!irq || !zalloc_cpumask_var(&irq->mask, GFP_KERNEL)) {
 		kfree(irq);
 		return ERR_PTR(-ENOMEM);
@@ -471,7 +471,7 @@ struct mlx5_irq *mlx5_ctrl_irq_request(struct mlx5_core_dev *dev)
 	struct irq_affinity_desc *af_desc;
 	struct mlx5_irq *irq;

-	af_desc = kvzalloc(sizeof(*af_desc), GFP_KERNEL);
+	af_desc = kvzalloc_obj(*af_desc, GFP_KERNEL);
 	if (!af_desc)
 		return ERR_PTR(-ENOMEM);

@@ -556,7 +556,7 @@ struct mlx5_irq *mlx5_irq_request_vector(struct mlx5_core_dev *dev, u16 cpu,
 	struct irq_affinity_desc *af_desc;
 	struct mlx5_irq *irq;

-	af_desc = kvzalloc(sizeof(*af_desc), GFP_KERNEL);
+	af_desc = kvzalloc_obj(*af_desc, GFP_KERNEL);
 	if (!af_desc)
 		return ERR_PTR(-ENOMEM);

@@ -578,7 +578,7 @@ static struct mlx5_irq_pool *
 irq_pool_alloc(struct mlx5_core_dev *dev, int start, int size, char *name,
 	       u32 min_threshold, u32 max_threshold)
 {
-	struct mlx5_irq_pool *pool = kvzalloc(sizeof(*pool), GFP_KERNEL);
+	struct mlx5_irq_pool *pool = kvzalloc_obj(*pool, GFP_KERNEL);

 	if (!pool)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/rdma.c b/drivers/net/ethernet/mellanox/mlx5/core/rdma.c
index 5c552b71e371..aebb67a7964d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/rdma.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/rdma.c
@@ -41,7 +41,7 @@ static int mlx5_rdma_enable_roce_steering(struct mlx5_core_dev *dev)
 	flow_group_in = kvzalloc(inlen, GFP_KERNEL);
 	if (!flow_group_in)
 		return -ENOMEM;
-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec) {
 		kvfree(flow_group_in);
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/rl.c b/drivers/net/ethernet/mellanox/mlx5/core/rl.c
index 39a209b9b684..477526f04cd9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/rl.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/rl.c
@@ -247,8 +247,8 @@ static int mlx5_rl_table_get(struct mlx5_rl_table *table)
 		return 0;
 	}

-	table->rl_entry = kcalloc(table->max_size, sizeof(struct mlx5_rl_entry),
-				  GFP_KERNEL);
+	table->rl_entry = kzalloc_objs(struct mlx5_rl_entry, table->max_size,
+				       GFP_KERNEL);
 	if (!table->rl_entry)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c b/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c
index f310bde3d11f..e41da4da4c4f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c
@@ -99,7 +99,7 @@ static void mlx5_sf_dev_add(struct mlx5_core_dev *dev, u16 sf_index, u16 fn_id,
 		goto add_err;
 	}

-	sf_dev = kzalloc(sizeof(*sf_dev), GFP_KERNEL);
+	sf_dev = kzalloc_obj(*sf_dev, GFP_KERNEL);
 	if (!sf_dev) {
 		mlx5_adev_idx_free(id);
 		err = -ENOMEM;
@@ -280,7 +280,7 @@ static void mlx5_sf_dev_queue_active_works(struct work_struct *_work)
 			continue;

 		sw_func_id = MLX5_GET(query_vhca_state_out, out, vhca_state_context.sw_function_id);
-		work_ctx = kzalloc(sizeof(*work_ctx), GFP_KERNEL);
+		work_ctx = kzalloc_obj(*work_ctx, GFP_KERNEL);
 		if (!work_ctx)
 			return;

@@ -336,7 +336,7 @@ void mlx5_sf_dev_table_create(struct mlx5_core_dev *dev)
 	if (!mlx5_sf_dev_supported(dev))
 		return;

-	table = kzalloc(sizeof(*table), GFP_KERNEL);
+	table = kzalloc_obj(*table, GFP_KERNEL);
 	if (!table) {
 		err = -ENOMEM;
 		goto table_err;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c
index b82323b8449e..894567e905b4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c
@@ -70,7 +70,7 @@ mlx5_sf_alloc(struct mlx5_sf_table *table, struct mlx5_eswitch *esw,
 		goto id_err;
 	}

-	sf = kzalloc(sizeof(*sf), GFP_KERNEL);
+	sf = kzalloc_obj(*sf, GFP_KERNEL);
 	if (!sf) {
 		err = -ENOMEM;
 		goto alloc_err;
@@ -509,7 +509,7 @@ int mlx5_sf_table_init(struct mlx5_core_dev *dev)
 	if (!mlx5_sf_table_supported(dev) || !mlx5_vhca_event_supported(dev))
 		return 0;

-	table = kzalloc(sizeof(*table), GFP_KERNEL);
+	table = kzalloc_obj(*table, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sf/hw_table.c b/drivers/net/ethernet/mellanox/mlx5/core/sf/hw_table.c
index bd968f3b3855..b50a50f7d909 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/sf/hw_table.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/sf/hw_table.c
@@ -233,7 +233,7 @@ static int mlx5_sf_hw_table_hwc_init(struct mlx5_sf_hwc_table *hwc, u16 max_fn,
 	if (!max_fn)
 		return 0;

-	sfs = kcalloc(max_fn, sizeof(*sfs), GFP_KERNEL);
+	sfs = kzalloc_objs(*sfs, max_fn, GFP_KERNEL);
 	if (!sfs)
 		return -ENOMEM;

@@ -298,7 +298,7 @@ int mlx5_sf_hw_table_init(struct mlx5_core_dev *dev)
 	if (!max_fn && !max_ext_fn)
 		return 0;

-	table = kzalloc(sizeof(*table), GFP_KERNEL);
+	table = kzalloc_obj(*table, GFP_KERNEL);
 	if (!table) {
 		err = -ENOMEM;
 		goto alloc_err;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sf/vhca_event.c b/drivers/net/ethernet/mellanox/mlx5/core/sf/vhca_event.c
index b04cf6cf8956..809643870526 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/sf/vhca_event.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/sf/vhca_event.c
@@ -114,7 +114,7 @@ mlx5_vhca_state_change_notifier(struct notifier_block *nb, unsigned long type, v
 	struct mlx5_eqe *eqe = data;
 	int wq_idx;

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return NOTIFY_DONE;
 	INIT_WORK(&work->work, &mlx5_vhca_state_work_handler);
@@ -153,7 +153,7 @@ int mlx5_vhca_event_init(struct mlx5_core_dev *dev)
 	if (!mlx5_vhca_event_supported(dev))
 		return 0;

-	events = kzalloc(sizeof(*events), GFP_KERNEL);
+	events = kzalloc_obj(*events, GFP_KERNEL);
 	if (!events)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sriov.c b/drivers/net/ethernet/mellanox/mlx5/core/sriov.c
index a2fc937d5461..143278b70a64 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/sriov.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/sriov.c
@@ -47,7 +47,7 @@ static int sriov_restore_guids(struct mlx5_core_dev *dev, int vf, u16 func_id)
 	if (sriov->vfs_ctx[vf].node_guid ||
 	    sriov->vfs_ctx[vf].port_guid ||
 	    sriov->vfs_ctx[vf].policy != MLX5_POLICY_INVALID) {
-		in = kzalloc(sizeof(*in), GFP_KERNEL);
+		in = kzalloc_obj(*in, GFP_KERNEL);
 		if (!in)
 			return -ENOMEM;

@@ -305,7 +305,7 @@ int mlx5_sriov_init(struct mlx5_core_dev *dev)
 	sriov->max_vfs = mlx5_get_max_vfs(dev);
 	sriov->num_vfs = pci_num_vf(pdev);
 	sriov->max_ec_vfs = mlx5_core_ec_sriov_enabled(dev) ? pci_sriov_get_totalvfs(dev->pdev) : 0;
-	sriov->vfs_ctx = kcalloc(total_vfs, sizeof(*sriov->vfs_ctx), GFP_KERNEL);
+	sriov->vfs_ctx = kzalloc_objs(*sriov->vfs_ctx, total_vfs, GFP_KERNEL);
 	if (!sriov->vfs_ctx)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action.c
index fe56b59e24c5..d8a003119be5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action.c
@@ -92,7 +92,7 @@ static int hws_action_get_shared_stc_nic(struct mlx5hws_context *ctx,
 		return 0;
 	}

-	shared_stc = kzalloc(sizeof(*shared_stc), GFP_KERNEL);
+	shared_stc = kzalloc_obj(*shared_stc, GFP_KERNEL);
 	if (!shared_stc) {
 		ret = -ENOMEM;
 		goto unlock_and_out;
@@ -632,7 +632,7 @@ hws_action_create_generic_bulk(struct mlx5hws_context *ctx,
 	if (!hws_action_validate_hws_action(ctx, flags))
 		return NULL;

-	action = kcalloc(bulk_sz, sizeof(*action), GFP_KERNEL);
+	action = kzalloc_objs(*action, bulk_sz, GFP_KERNEL);
 	if (!action)
 		return NULL;

@@ -1383,7 +1383,7 @@ mlx5hws_action_create_dest_array(struct mlx5hws_context *ctx, size_t num_dest,
 		return NULL;
 	}

-	dest_list = kcalloc(num_dest, sizeof(*dest_list), GFP_KERNEL);
+	dest_list = kzalloc_objs(*dest_list, num_dest, GFP_KERNEL);
 	if (!dest_list)
 		return NULL;

@@ -1477,7 +1477,7 @@ mlx5hws_action_create_insert_header(struct mlx5hws_context *ctx,
 	if (!action)
 		return NULL;

-	reformat_hdrs = kcalloc(num_of_hdrs, sizeof(*reformat_hdrs), GFP_KERNEL);
+	reformat_hdrs = kzalloc_objs(*reformat_hdrs, num_of_hdrs, GFP_KERNEL);
 	if (!reformat_hdrs)
 		goto free_action;

@@ -1557,7 +1557,7 @@ hws_action_create_dest_match_range_definer(struct mlx5hws_context *ctx)
 	__be32 *tag;
 	int ret;

-	definer = kzalloc(sizeof(*definer), GFP_KERNEL);
+	definer = kzalloc_obj(*definer, GFP_KERNEL);
 	if (!definer)
 		return NULL;

@@ -1600,7 +1600,7 @@ hws_action_create_dest_match_range_table(struct mlx5hws_context *ctx,
 		return NULL;
 	}

-	table_ste = kzalloc(sizeof(*table_ste), GFP_KERNEL);
+	table_ste = kzalloc_obj(*table_ste, GFP_KERNEL);
 	if (!table_ste)
 		return NULL;

@@ -2019,7 +2019,7 @@ __must_hold(&ctx->ctrl_lock)
 		return 0;
 	}

-	default_stc = kzalloc(sizeof(*default_stc), GFP_KERNEL);
+	default_stc = kzalloc_obj(*default_stc, GFP_KERNEL);
 	if (!default_stc)
 		return -ENOMEM;

@@ -2621,7 +2621,7 @@ mlx5hws_action_template_create(enum mlx5hws_action_type action_type[])
 	u8 num_actions = 0;
 	int i;

-	at = kzalloc(sizeof(*at), GFP_KERNEL);
+	at = kzalloc_obj(*at, GFP_KERNEL);
 	if (!at)
 		return NULL;

@@ -2629,7 +2629,8 @@ mlx5hws_action_template_create(enum mlx5hws_action_type action_type[])
 		;

 	at->num_actions = num_actions - 1;
-	at->action_type_arr = kcalloc(num_actions, sizeof(*action_type), GFP_KERNEL);
+	at->action_type_arr = kzalloc_objs(*action_type, num_actions,
+					   GFP_KERNEL);
 	if (!at->action_type_arr)
 		goto free_at;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action_ste_pool.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action_ste_pool.c
index 5766a9c82f96..f5ab9f3c694b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action_ste_pool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action_ste_pool.c
@@ -141,7 +141,7 @@ hws_action_ste_table_alloc(struct mlx5hws_action_ste_pool_element *parent_elem)
 				   MLX5HWS_ACTION_STE_TABLE_INIT_LOG_SZ,
 		     MLX5HWS_ACTION_STE_TABLE_MAX_LOG_SZ);

-	action_tbl = kzalloc(sizeof(*action_tbl), GFP_KERNEL);
+	action_tbl = kzalloc_obj(*action_tbl, GFP_KERNEL);
 	if (!action_tbl)
 		return ERR_PTR(-ENOMEM);

@@ -329,7 +329,7 @@ int mlx5hws_action_ste_pool_init(struct mlx5hws_context *ctx)
 	size_t queues = ctx->queues;
 	int i, err;

-	pool = kcalloc(queues, sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_objs(*pool, queues, GFP_KERNEL);
 	if (!pool)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/buddy.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/buddy.c
index b9aef80ba094..147e176b6f9a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/buddy.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/buddy.c
@@ -54,7 +54,7 @@ struct mlx5hws_buddy_mem *mlx5hws_buddy_create(u32 max_order)
 {
 	struct mlx5hws_buddy_mem *buddy;

-	buddy = kzalloc(sizeof(*buddy), GFP_KERNEL);
+	buddy = kzalloc_obj(*buddy, GFP_KERNEL);
 	if (!buddy)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/bwc.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/bwc.c
index 6ef0c4be27e1..6f69b97a8c2b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/bwc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/bwc.c
@@ -236,7 +236,8 @@ int mlx5hws_bwc_matcher_create_simple(struct mlx5hws_bwc_matcher *bwc_matcher,
 	struct mlx5hws_matcher_attr attr = {0};
 	int i;

-	bwc_matcher->rules = kcalloc(bwc_queues, sizeof(*bwc_matcher->rules), GFP_KERNEL);
+	bwc_matcher->rules = kzalloc_objs(*bwc_matcher->rules, bwc_queues,
+					  GFP_KERNEL);
 	if (!bwc_matcher->rules)
 		goto err;

@@ -253,8 +254,9 @@ int mlx5hws_bwc_matcher_create_simple(struct mlx5hws_bwc_matcher *bwc_matcher,
 	bwc_matcher->priority = priority;

 	bwc_matcher->size_of_at_array = MLX5HWS_BWC_MATCHER_ATTACH_AT_NUM;
-	bwc_matcher->at = kcalloc(bwc_matcher->size_of_at_array,
-				  sizeof(*bwc_matcher->at), GFP_KERNEL);
+	bwc_matcher->at = kzalloc_objs(*bwc_matcher->at,
+				       bwc_matcher->size_of_at_array,
+				       GFP_KERNEL);
 	if (!bwc_matcher->at)
 		goto free_bwc_matcher_rules;

@@ -332,7 +334,7 @@ mlx5hws_bwc_matcher_create(struct mlx5hws_table *table,
 		return NULL;
 	}

-	bwc_matcher = kzalloc(sizeof(*bwc_matcher), GFP_KERNEL);
+	bwc_matcher = kzalloc_obj(*bwc_matcher, GFP_KERNEL);
 	if (!bwc_matcher)
 		return NULL;

@@ -481,11 +483,11 @@ mlx5hws_bwc_rule_alloc(struct mlx5hws_bwc_matcher *bwc_matcher)
 {
 	struct mlx5hws_bwc_rule *bwc_rule;

-	bwc_rule = kzalloc(sizeof(*bwc_rule), GFP_KERNEL);
+	bwc_rule = kzalloc_obj(*bwc_rule, GFP_KERNEL);
 	if (unlikely(!bwc_rule))
 		goto out_err;

-	bwc_rule->rule = kzalloc(sizeof(*bwc_rule->rule), GFP_KERNEL);
+	bwc_rule->rule = kzalloc_obj(*bwc_rule->rule, GFP_KERNEL);
 	if (unlikely(!bwc_rule->rule))
 		goto free_rule;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/cmd.c
index f22eaf506d28..25b8ad504acc 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/cmd.c
@@ -299,7 +299,7 @@ mlx5hws_cmd_forward_tbl_create(struct mlx5_core_dev *mdev,
 	struct mlx5hws_cmd_forward_tbl *tbl;
 	int ret;

-	tbl = kzalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kzalloc_obj(*tbl, GFP_KERNEL);
 	if (!tbl)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/context.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/context.c
index 428dae869706..6e5b2c1a8b0b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/context.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/context.c
@@ -192,7 +192,7 @@ struct mlx5hws_context *mlx5hws_context_open(struct mlx5_core_dev *mdev,
 	struct mlx5hws_context *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

@@ -201,7 +201,7 @@ struct mlx5hws_context *mlx5hws_context_open(struct mlx5_core_dev *mdev,
 	mutex_init(&ctx->ctrl_lock);
 	xa_init(&ctx->peer_ctx_xa);

-	ctx->caps = kzalloc(sizeof(*ctx->caps), GFP_KERNEL);
+	ctx->caps = kzalloc_obj(*ctx->caps, GFP_KERNEL);
 	if (!ctx->caps)
 		goto free_ctx;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/definer.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/definer.c
index 82fd122d4284..d5902cfa8146 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/definer.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/definer.c
@@ -1688,7 +1688,7 @@ hws_definer_alloc_compressed_fc(struct mlx5hws_definer_fc *fc)
 	u32 fc_sz = 0;
 	int i;

-	compressed_fc = kcalloc(definer_size, sizeof(*compressed_fc), GFP_KERNEL);
+	compressed_fc = kzalloc_objs(*compressed_fc, definer_size, GFP_KERNEL);
 	if (!compressed_fc)
 		return NULL;

@@ -1731,7 +1731,7 @@ hws_definer_alloc_fc(struct mlx5hws_context *ctx,
 	struct mlx5hws_definer_fc *fc;
 	int i;

-	fc = kcalloc(len, sizeof(*fc), GFP_KERNEL);
+	fc = kzalloc_objs(*fc, len, GFP_KERNEL);
 	if (!fc)
 		return NULL;

@@ -2139,7 +2139,7 @@ int mlx5hws_definer_init_cache(struct mlx5hws_definer_cache **cache)
 {
 	struct mlx5hws_definer_cache *new_cache;

-	new_cache = kzalloc(sizeof(*new_cache), GFP_KERNEL);
+	new_cache = kzalloc_obj(*new_cache, GFP_KERNEL);
 	if (!new_cache)
 		return -ENOMEM;

@@ -2183,7 +2183,7 @@ int mlx5hws_definer_get_obj(struct mlx5hws_context *ctx,
 	if (ret)
 		return -1;

-	cached_definer = kzalloc(sizeof(*cached_definer), GFP_KERNEL);
+	cached_definer = kzalloc_obj(*cached_definer, GFP_KERNEL);
 	if (!cached_definer)
 		goto free_definer_obj;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws.c
index 6a4c4cccd643..d684a49900a5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws.c
@@ -478,7 +478,7 @@ mlx5_fs_get_cached_hws_data(struct xarray *cache_xa, unsigned long index)
 	xa_lock(cache_xa);
 	fs_hws_data = xa_load(cache_xa, index);
 	if (!fs_hws_data) {
-		fs_hws_data = kzalloc(sizeof(*fs_hws_data), GFP_ATOMIC);
+		fs_hws_data = kzalloc_obj(*fs_hws_data, GFP_ATOMIC);
 		if (!fs_hws_data) {
 			xa_unlock(cache_xa);
 			return NULL;
@@ -759,22 +759,22 @@ static int mlx5_fs_fte_get_hws_actions(struct mlx5_flow_root_namespace *ns,
 	int num_actions = 0;
 	int err;

-	*ractions = kcalloc(MLX5_FLOW_CONTEXT_ACTION_MAX, sizeof(**ractions),
-			    GFP_KERNEL);
+	*ractions = kzalloc_objs(**ractions, MLX5_FLOW_CONTEXT_ACTION_MAX,
+				 GFP_KERNEL);
 	if (!*ractions) {
 		err = -ENOMEM;
 		goto out_err;
 	}

-	fs_actions = kcalloc(MLX5_FLOW_CONTEXT_ACTION_MAX,
-			     sizeof(*fs_actions), GFP_KERNEL);
+	fs_actions = kzalloc_objs(*fs_actions, MLX5_FLOW_CONTEXT_ACTION_MAX,
+				  GFP_KERNEL);
 	if (!fs_actions) {
 		err = -ENOMEM;
 		goto free_actions_alloc;
 	}

-	dest_actions = kcalloc(MLX5_FLOW_CONTEXT_ACTION_MAX,
-			       sizeof(*dest_actions), GFP_KERNEL);
+	dest_actions = kzalloc_objs(*dest_actions, MLX5_FLOW_CONTEXT_ACTION_MAX,
+				    GFP_KERNEL);
 	if (!dest_actions) {
 		err = -ENOMEM;
 		goto free_fs_actions_alloc;
@@ -1239,7 +1239,7 @@ mlx5_fs_get_pr_encap_pool(struct mlx5_core_dev *dev, struct xarray *pr_pools,
 	if (pr_pool)
 		return pr_pool;

-	pr_pool = kzalloc(sizeof(*pr_pool), GFP_KERNEL);
+	pr_pool = kzalloc_obj(*pr_pool, GFP_KERNEL);
 	if (!pr_pool)
 		return ERR_PTR(-ENOMEM);
 	err = mlx5_fs_hws_pr_pool_init(pr_pool, dev, size, reformat_type);
@@ -1430,7 +1430,7 @@ mlx5_fs_create_mh_pool(struct mlx5_core_dev *dev,
 	struct mlx5_fs_pool *pool;
 	int err;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(-ENOMEM);
 	err = mlx5_fs_hws_mh_pool_init(pool, dev, pattern);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c
index 5bc8e97ecf1c..d24eb6723b85 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c
@@ -117,7 +117,7 @@ mlx5_fs_hws_pr_bulk_create(struct mlx5_core_dev *dev, void *pool_ctx)
 		return NULL;
 	pr_pool_ctx = pool_ctx;
 	bulk_len = MLX5_FS_HWS_DEFAULT_BULK_LEN;
-	pr_bulk = kvzalloc(struct_size(pr_bulk, prs_data, bulk_len), GFP_KERNEL);
+	pr_bulk = kvzalloc_flex(*pr_bulk, prs_data, bulk_len, GFP_KERNEL);
 	if (!pr_bulk)
 		return NULL;

@@ -186,7 +186,7 @@ int mlx5_fs_hws_pr_pool_init(struct mlx5_fs_pool *pr_pool,
 	    reformat_type != MLX5HWS_ACTION_TYP_REFORMAT_L2_TO_TNL_L2)
 		return -EOPNOTSUPP;

-	pr_pool_ctx = kzalloc(sizeof(*pr_pool_ctx), GFP_KERNEL);
+	pr_pool_ctx = kzalloc_obj(*pr_pool_ctx, GFP_KERNEL);
 	if (!pr_pool_ctx)
 		return -ENOMEM;
 	pr_pool_ctx->reformat_type = reformat_type;
@@ -273,7 +273,7 @@ mlx5_fs_hws_mh_bulk_create(struct mlx5_core_dev *dev, void *pool_ctx)

 	pattern = pool_ctx;
 	bulk_len = MLX5_FS_HWS_DEFAULT_BULK_LEN;
-	mh_bulk = kvzalloc(struct_size(mh_bulk, mhs_data, bulk_len), GFP_KERNEL);
+	mh_bulk = kvzalloc_flex(*mh_bulk, mhs_data, bulk_len, GFP_KERNEL);
 	if (!mh_bulk)
 		return NULL;

@@ -331,7 +331,7 @@ int mlx5_fs_hws_mh_pool_init(struct mlx5_fs_pool *fs_hws_mh_pool,
 {
 	struct mlx5hws_action_mh_pattern *pool_pattern;

-	pool_pattern = kzalloc(sizeof(*pool_pattern), GFP_KERNEL);
+	pool_pattern = kzalloc_obj(*pool_pattern, GFP_KERNEL);
 	if (!pool_pattern)
 		return -ENOMEM;
 	pool_pattern->data = kmemdup(pattern->data, pattern->sz, GFP_KERNEL);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/matcher.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/matcher.c
index 32f87fdf3213..c78ae73e5411 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/matcher.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/matcher.c
@@ -912,7 +912,7 @@ hws_matcher_create_col_matcher(struct mlx5hws_matcher *matcher)
 	    !hws_matcher_requires_col_tbl(size_tx->rule.num_log))
 		return 0;

-	col_matcher = kzalloc(sizeof(*matcher), GFP_KERNEL);
+	col_matcher = kzalloc_obj(*matcher, GFP_KERNEL);
 	if (!col_matcher)
 		return -ENOMEM;

@@ -1084,14 +1084,14 @@ hws_matcher_set_templates(struct mlx5hws_matcher *matcher,
 		return -EOPNOTSUPP;
 	}

-	matcher->mt = kcalloc(num_of_mt, sizeof(*matcher->mt), GFP_KERNEL);
+	matcher->mt = kzalloc_objs(*matcher->mt, num_of_mt, GFP_KERNEL);
 	if (!matcher->mt)
 		return -ENOMEM;

 	matcher->size_of_at_array =
 		num_of_at + matcher->attr.max_num_of_at_attach;
-	matcher->at = kvcalloc(matcher->size_of_at_array, sizeof(*matcher->at),
-			       GFP_KERNEL);
+	matcher->at = kvzalloc_objs(*matcher->at, matcher->size_of_at_array,
+				    GFP_KERNEL);
 	if (!matcher->at) {
 		mlx5hws_err(ctx, "Failed to allocate action template array\n");
 		ret = -ENOMEM;
@@ -1133,7 +1133,7 @@ mlx5hws_matcher_create(struct mlx5hws_table *tbl,
 	struct mlx5hws_matcher *matcher;
 	int ret;

-	matcher = kzalloc(sizeof(*matcher), GFP_KERNEL);
+	matcher = kzalloc_obj(*matcher, GFP_KERNEL);
 	if (!matcher)
 		return NULL;

@@ -1179,7 +1179,7 @@ mlx5hws_match_template_create(struct mlx5hws_context *ctx,
 {
 	struct mlx5hws_match_template *mt;

-	mt = kzalloc(sizeof(*mt), GFP_KERNEL);
+	mt = kzalloc_obj(*mt, GFP_KERNEL);
 	if (!mt)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pat_arg.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pat_arg.c
index d56271a9e4f0..49c8f3c872d9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pat_arg.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pat_arg.c
@@ -78,7 +78,7 @@ int mlx5hws_pat_init_pattern_cache(struct mlx5hws_pattern_cache **cache)
 {
 	struct mlx5hws_pattern_cache *new_cache;

-	new_cache = kzalloc(sizeof(*new_cache), GFP_KERNEL);
+	new_cache = kzalloc_obj(*new_cache, GFP_KERNEL);
 	if (!new_cache)
 		return -ENOMEM;

@@ -168,7 +168,7 @@ mlx5hws_pat_add_pattern_to_cache(struct mlx5hws_pattern_cache *cache,
 {
 	struct mlx5hws_pattern_cache_item *cached_pattern;

-	cached_pattern = kzalloc(sizeof(*cached_pattern), GFP_KERNEL);
+	cached_pattern = kzalloc_obj(*cached_pattern, GFP_KERNEL);
 	if (!cached_pattern)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pool.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pool.c
index 7b5071c3df36..4b6642642346 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pool.c
@@ -41,7 +41,7 @@ hws_pool_create_one_resource(struct mlx5hws_pool *pool, u32 log_range,
 	u32 obj_id = 0;
 	int ret;

-	resource = kzalloc(sizeof(*resource), GFP_KERNEL);
+	resource = kzalloc_obj(*resource, GFP_KERNEL);
 	if (!resource)
 		return NULL;

@@ -347,7 +347,7 @@ mlx5hws_pool_create(struct mlx5hws_context *ctx, struct mlx5hws_pool_attr *pool_
 	enum mlx5hws_db_type res_db_type;
 	struct mlx5hws_pool *pool;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/rule.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/rule.c
index a94f094e72ba..3c966476479d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/rule.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/rule.c
@@ -136,7 +136,7 @@ hws_rule_save_resize_info(struct mlx5hws_rule *rule,

 	/* resize_info might already exist (if we're in update flow) */
 	if (likely(!rule->resize_info)) {
-		rule->resize_info = kzalloc(sizeof(*rule->resize_info), GFP_KERNEL);
+		rule->resize_info = kzalloc_obj(*rule->resize_info, GFP_KERNEL);
 		if (unlikely(!rule->resize_info)) {
 			pr_warn("HWS: resize info isn't allocated for rule\n");
 			return;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/send.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/send.c
index 7510c46e58a5..4fef376d63a2 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/send.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/send.c
@@ -701,7 +701,7 @@ static int hws_send_ring_alloc_sq(struct mlx5_core_dev *mdev,
 	wq->db = &wq->db[MLX5_SND_DBR];

 	buf_sz = queue->num_entries * MAX_WQES_PER_RULE;
-	sq->dep_wqe = kcalloc(queue->num_entries, sizeof(*sq->dep_wqe), GFP_KERNEL);
+	sq->dep_wqe = kzalloc_objs(*sq->dep_wqe, queue->num_entries, GFP_KERNEL);
 	if (!sq->dep_wqe) {
 		err = -ENOMEM;
 		goto destroy_wq_cyc;
@@ -1033,9 +1033,8 @@ static int mlx5hws_send_queue_open(struct mlx5hws_context *ctx,
 	queue->num_entries = roundup_pow_of_two(queue_size);
 	queue->used_entries = 0;

-	queue->completed.entries = kcalloc(queue->num_entries,
-					   sizeof(queue->completed.entries[0]),
-					   GFP_KERNEL);
+	queue->completed.entries = kzalloc_objs(queue->completed.entries[0],
+						queue->num_entries, GFP_KERNEL);
 	if (!queue->completed.entries)
 		return -ENOMEM;

@@ -1094,16 +1093,14 @@ static int hws_bwc_send_queues_init(struct mlx5hws_context *ctx)

 	ctx->queues += bwc_queues;

-	ctx->bwc_send_queue_locks = kcalloc(bwc_queues,
-					    sizeof(*ctx->bwc_send_queue_locks),
-					    GFP_KERNEL);
+	ctx->bwc_send_queue_locks = kzalloc_objs(*ctx->bwc_send_queue_locks,
+						 bwc_queues, GFP_KERNEL);

 	if (!ctx->bwc_send_queue_locks)
 		return -ENOMEM;

-	ctx->bwc_lock_class_keys = kcalloc(bwc_queues,
-					   sizeof(*ctx->bwc_lock_class_keys),
-					   GFP_KERNEL);
+	ctx->bwc_lock_class_keys = kzalloc_objs(*ctx->bwc_lock_class_keys,
+						bwc_queues, GFP_KERNEL);
 	if (!ctx->bwc_lock_class_keys)
 		goto err_lock_class_keys;

@@ -1135,7 +1132,8 @@ int mlx5hws_send_queues_open(struct mlx5hws_context *ctx,
 	if (err)
 		return err;

-	ctx->send_queue = kcalloc(ctx->queues, sizeof(*ctx->send_queue), GFP_KERNEL);
+	ctx->send_queue = kzalloc_objs(*ctx->send_queue, ctx->queues,
+				       GFP_KERNEL);
 	if (!ctx->send_queue) {
 		err = -ENOMEM;
 		goto free_bwc_locks;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/table.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/table.c
index 6113383ae47b..2bf42f5df285 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/table.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/table.c
@@ -238,7 +238,7 @@ struct mlx5hws_table *mlx5hws_table_create(struct mlx5hws_context *ctx,
 		return NULL;
 	}

-	tbl = kzalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kzalloc_obj(*tbl, GFP_KERNEL);
 	if (!tbl)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_action.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_action.c
index 2ebb61ef3ea9..9889149569fe 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_action.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_action.c
@@ -1194,14 +1194,14 @@ mlx5dr_action_create_mult_dest_tbl(struct mlx5dr_domain *dmn,
 		return NULL;
 	}

-	hw_dests = kcalloc(num_of_dests, sizeof(*hw_dests), GFP_KERNEL);
+	hw_dests = kzalloc_objs(*hw_dests, num_of_dests, GFP_KERNEL);
 	if (!hw_dests)
 		return NULL;

 	if (unlikely(check_mul_overflow(num_of_dests, 2u, &ref_act_cnt)))
 		goto free_hw_dests;

-	ref_actions = kcalloc(ref_act_cnt, sizeof(*ref_actions), GFP_KERNEL);
+	ref_actions = kzalloc_objs(*ref_actions, ref_act_cnt, GFP_KERNEL);
 	if (!ref_actions)
 		goto free_hw_dests;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_arg.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_arg.c
index 01ed6442095d..b276f9e966bc 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_arg.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_arg.c
@@ -68,7 +68,7 @@ static int dr_arg_pool_alloc_objs(struct dr_arg_pool *pool)
 	}

 	for (i = 0; i < num_of_objects; i++) {
-		arg_obj = kzalloc(sizeof(*arg_obj), GFP_KERNEL);
+		arg_obj = kzalloc_obj(*arg_obj, GFP_KERNEL);
 		if (!arg_obj) {
 			ret = -ENOMEM;
 			goto clean_arg_obj;
@@ -132,7 +132,7 @@ static struct dr_arg_pool *dr_arg_pool_create(struct mlx5dr_domain *dmn,
 {
 	struct dr_arg_pool *pool;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;

@@ -235,7 +235,7 @@ mlx5dr_arg_mgr_create(struct mlx5dr_domain *dmn)
 	if (!mlx5dr_domain_is_support_ptrn_arg(dmn))
 		return NULL;

-	pool_mgr = kzalloc(sizeof(*pool_mgr), GFP_KERNEL);
+	pool_mgr = kzalloc_obj(*pool_mgr, GFP_KERNEL);
 	if (!pool_mgr)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_buddy.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_buddy.c
index fe228d948b47..3af4218381a1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_buddy.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_buddy.c
@@ -16,12 +16,10 @@ int mlx5dr_buddy_init(struct mlx5dr_icm_buddy_mem *buddy,

 	INIT_LIST_HEAD(&buddy->list_node);

-	buddy->bitmap = kcalloc(buddy->max_order + 1,
-				sizeof(*buddy->bitmap),
-				GFP_KERNEL);
-	buddy->num_free = kcalloc(buddy->max_order + 1,
-				  sizeof(*buddy->num_free),
-				  GFP_KERNEL);
+	buddy->bitmap = kzalloc_objs(*buddy->bitmap, buddy->max_order + 1,
+				     GFP_KERNEL);
+	buddy->num_free = kzalloc_objs(*buddy->num_free, buddy->max_order + 1,
+				       GFP_KERNEL);

 	if (!buddy->bitmap || !buddy->num_free)
 		goto err_free_all;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_dbg.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_dbg.c
index 8803fa071c50..c8904955ec54 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_dbg.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_dbg.c
@@ -60,7 +60,7 @@ mlx5dr_dbg_dump_data_init_new_buff(struct mlx5dr_dbg_dump_data *dump_data)
 {
 	struct mlx5dr_dbg_dump_buff *new_buff;

-	new_buff = kzalloc(sizeof(*new_buff), GFP_KERNEL);
+	new_buff = kzalloc_obj(*new_buff, GFP_KERNEL);
 	if (!new_buff)
 		return NULL;

@@ -81,7 +81,7 @@ mlx5dr_dbg_create_dump_data(void)
 {
 	struct mlx5dr_dbg_dump_data *dump_data;

-	dump_data = kzalloc(sizeof(*dump_data), GFP_KERNEL);
+	dump_data = kzalloc_obj(*dump_data, GFP_KERNEL);
 	if (!dump_data)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_definer.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_definer.c
index d5ea97751945..282088205d4c 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_definer.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_definer.c
@@ -60,7 +60,7 @@ dr_definer_create_obj(struct mlx5dr_domain *dmn, u16 format_id,
 	struct dr_definer_object *definer_obj;
 	int ret = 0;

-	definer_obj = kzalloc(sizeof(*definer_obj), GFP_KERNEL);
+	definer_obj = kzalloc_obj(*definer_obj, GFP_KERNEL);
 	if (!definer_obj)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_domain.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_domain.c
index e8c67ed9f748..5c0a8dc6cff0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_domain.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_domain.c
@@ -282,7 +282,7 @@ dr_domain_add_vport_cap(struct mlx5dr_domain *dmn, u16 vport)
 	struct mlx5dr_cmd_vport_cap *vport_caps;
 	int ret;

-	vport_caps = kvzalloc(sizeof(*vport_caps), GFP_KERNEL);
+	vport_caps = kvzalloc_obj(*vport_caps, GFP_KERNEL);
 	if (!vport_caps)
 		return NULL;

@@ -467,7 +467,7 @@ mlx5dr_domain_create(struct mlx5_core_dev *mdev, enum mlx5dr_domain_type type)
 	if (type > MLX5DR_DOMAIN_TYPE_FDB)
 		return NULL;

-	dmn = kzalloc(sizeof(*dmn), GFP_KERNEL);
+	dmn = kzalloc_obj(*dmn, GFP_KERNEL);
 	if (!dmn)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_fw.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_fw.c
index f05ef0cd54ba..df34beefda11 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_fw.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_fw.c
@@ -13,7 +13,7 @@ mlx5dr_fw_create_recalc_cs_ft(struct mlx5dr_domain *dmn, u16 vport_num)
 	u64 rx_icm_addr, modify_ttl_action;
 	int ret;

-	recalc_cs_ft = kzalloc(sizeof(*recalc_cs_ft), GFP_KERNEL);
+	recalc_cs_ft = kzalloc_obj(*recalc_cs_ft, GFP_KERNEL);
 	if (!recalc_cs_ft)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_icm_pool.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_icm_pool.c
index 0b5af9f3f605..79f0adecc2aa 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_icm_pool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_icm_pool.c
@@ -116,7 +116,7 @@ dr_icm_pool_mr_create(struct mlx5dr_icm_pool *pool)
 	size_t log_align_base = 0;
 	int err;

-	icm_mr = kvzalloc(sizeof(*icm_mr), GFP_KERNEL);
+	icm_mr = kvzalloc_obj(*icm_mr, GFP_KERNEL);
 	if (!icm_mr)
 		return NULL;

@@ -227,8 +227,8 @@ static int dr_icm_buddy_init_ste_cache(struct mlx5dr_icm_buddy_mem *buddy)
 	int num_of_entries =
 		mlx5dr_icm_pool_chunk_size_to_entries(buddy->pool->max_log_chunk_sz);

-	buddy->ste_arr = kvcalloc(num_of_entries,
-				  sizeof(struct mlx5dr_ste), GFP_KERNEL);
+	buddy->ste_arr = kvzalloc_objs(struct mlx5dr_ste, num_of_entries,
+				       GFP_KERNEL);
 	if (!buddy->ste_arr)
 		return -ENOMEM;

@@ -269,7 +269,7 @@ static int dr_icm_buddy_create(struct mlx5dr_icm_pool *pool)
 	if (!icm_mr)
 		return -ENOMEM;

-	buddy = kvzalloc(sizeof(*buddy), GFP_KERNEL);
+	buddy = kvzalloc_obj(*buddy, GFP_KERNEL);
 	if (!buddy)
 		goto free_mr;

@@ -509,7 +509,7 @@ struct mlx5dr_icm_pool *mlx5dr_icm_pool_create(struct mlx5dr_domain *dmn,
 	struct mlx5dr_icm_pool *pool;
 	u32 max_hot_size = 0;

-	pool = kvzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kvzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;

@@ -548,9 +548,8 @@ struct mlx5dr_icm_pool *mlx5dr_icm_pool_create(struct mlx5dr_domain *dmn,
 	num_of_chunks = DIV_ROUND_UP(max_hot_size, entry_size) + 1;
 	pool->th = max_hot_size;

-	pool->hot_chunks_arr = kvcalloc(num_of_chunks,
-					sizeof(struct mlx5dr_icm_hot_chunk),
-					GFP_KERNEL);
+	pool->hot_chunks_arr = kvzalloc_objs(struct mlx5dr_icm_hot_chunk,
+					     num_of_chunks, GFP_KERNEL);
 	if (!pool->hot_chunks_arr)
 		goto free_pool;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_matcher.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_matcher.c
index 0726848eb3ff..b171fdb5a622 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_matcher.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_matcher.c
@@ -996,7 +996,7 @@ mlx5dr_matcher_create(struct mlx5dr_table *tbl,

 	refcount_inc(&tbl->refcount);

-	matcher = kzalloc(sizeof(*matcher), GFP_KERNEL);
+	matcher = kzalloc_obj(*matcher, GFP_KERNEL);
 	if (!matcher)
 		goto dec_ref;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_ptrn.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_ptrn.c
index 8ca534ef5d03..094a6bea9a8a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_ptrn.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_ptrn.c
@@ -94,7 +94,7 @@ dr_ptrn_alloc_pattern(struct mlx5dr_ptrn_mgr *mgr,
 		 mgr->dmn->info.caps.hdr_modify_pattern_icm_addr) /
 		DR_ACTION_CACHE_LINE_SIZE;

-	pattern = kzalloc(sizeof(*pattern), GFP_KERNEL);
+	pattern = kzalloc_obj(*pattern, GFP_KERNEL);
 	if (!pattern)
 		goto free_chunk;

@@ -201,7 +201,7 @@ struct mlx5dr_ptrn_mgr *mlx5dr_ptrn_mgr_create(struct mlx5dr_domain *dmn)
 	if (!mlx5dr_domain_is_support_ptrn_arg(dmn))
 		return NULL;

-	mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
+	mgr = kzalloc_obj(*mgr, GFP_KERNEL);
 	if (!mgr)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_rule.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_rule.c
index d1db04baa1fa..8d925c3e2b11 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_rule.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_rule.c
@@ -593,7 +593,7 @@ static int dr_rule_add_action_members(struct mlx5dr_rule *rule,
 	int i;

 	for (i = 0; i < num_actions; i++) {
-		action_mem = kvzalloc(sizeof(*action_mem), GFP_KERNEL);
+		action_mem = kvzalloc_obj(*action_mem, GFP_KERNEL);
 		if (!action_mem)
 			goto free_action_members;

@@ -1298,7 +1298,7 @@ dr_rule_create_rule(struct mlx5dr_matcher *matcher,
 	if (!dr_rule_verify(matcher, value, &param))
 		return NULL;

-	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
+	rule = kzalloc_obj(*rule, GFP_KERNEL);
 	if (!rule)
 		return NULL;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_send.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_send.c
index d034372fa047..78d7c83a98b0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_send.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_send.c
@@ -72,7 +72,7 @@ static int dr_send_info_pool_fill(struct mlx5dr_send_info_pool *pool)
 	int i;

 	for (i = 0; i < DR_SEND_INFO_POOL_SIZE; i++) {
-		pool_obj = kzalloc(sizeof(*pool_obj), GFP_KERNEL);
+		pool_obj = kzalloc_obj(*pool_obj, GFP_KERNEL);
 		if (!pool_obj)
 			goto clean_pool;

@@ -114,7 +114,7 @@ static struct mlx5dr_send_info_pool *dr_send_info_pool_create(void)
 	struct mlx5dr_send_info_pool *pool;
 	int ret;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;

@@ -258,7 +258,7 @@ static struct mlx5dr_qp *dr_create_rc_qp(struct mlx5_core_dev *mdev,
 	void *in;
 	int err;

-	dr_qp = kzalloc(sizeof(*dr_qp), GFP_KERNEL);
+	dr_qp = kzalloc_obj(*dr_qp, GFP_KERNEL);
 	if (!dr_qp)
 		return NULL;

@@ -1063,7 +1063,7 @@ static struct mlx5dr_cq *dr_create_cq(struct mlx5_core_dev *mdev,
 	__be64 *pas;
 	u32 i;

-	cq = kzalloc(sizeof(*cq), GFP_KERNEL);
+	cq = kzalloc_obj(*cq, GFP_KERNEL);
 	if (!cq)
 		return NULL;

@@ -1158,7 +1158,7 @@ static int dr_create_mkey(struct mlx5_core_dev *mdev, u32 pdn, u32 *mkey)
 static struct mlx5dr_mr *dr_reg_mr(struct mlx5_core_dev *mdev,
 				   u32 pdn, void *buf, size_t size)
 {
-	struct mlx5dr_mr *mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	struct mlx5dr_mr *mr = kzalloc_obj(*mr, GFP_KERNEL);
 	struct device *dma_device;
 	dma_addr_t dma_addr;
 	int err;
@@ -1207,7 +1207,7 @@ int mlx5dr_send_ring_alloc(struct mlx5dr_domain *dmn)
 	int size;
 	int ret;

-	dmn->send_ring = kzalloc(sizeof(*dmn->send_ring), GFP_KERNEL);
+	dmn->send_ring = kzalloc_obj(*dmn->send_ring, GFP_KERNEL);
 	if (!dmn->send_ring)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_table.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_table.c
index 69294a66fd7f..ab4c360c64e0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_table.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_table.c
@@ -255,7 +255,7 @@ struct mlx5dr_table *mlx5dr_table_create(struct mlx5dr_domain *dmn, u32 level,

 	refcount_inc(&dmn->refcount);

-	tbl = kzalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kzalloc_obj(*tbl, GFP_KERNEL);
 	if (!tbl)
 		goto dec_ref;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/fs_dr.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/fs_dr.c
index f367997ab61e..4d29c6347902 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/fs_dr.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/fs_dr.c
@@ -275,22 +275,22 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns,
 	if (mlx5_fs_cmd_is_fw_term_table(ft))
 		return mlx5_fs_cmd_get_fw_cmds()->create_fte(ns, ft, group, fte);

-	actions = kcalloc(MLX5_FLOW_CONTEXT_ACTION_MAX, sizeof(*actions),
-			  GFP_KERNEL);
+	actions = kzalloc_objs(*actions, MLX5_FLOW_CONTEXT_ACTION_MAX,
+			       GFP_KERNEL);
 	if (!actions) {
 		err = -ENOMEM;
 		goto out_err;
 	}

-	fs_dr_actions = kcalloc(MLX5_FLOW_CONTEXT_ACTION_MAX,
-				sizeof(*fs_dr_actions), GFP_KERNEL);
+	fs_dr_actions = kzalloc_objs(*fs_dr_actions,
+				     MLX5_FLOW_CONTEXT_ACTION_MAX, GFP_KERNEL);
 	if (!fs_dr_actions) {
 		err = -ENOMEM;
 		goto free_actions_alloc;
 	}

-	term_actions = kcalloc(MLX5_FLOW_CONTEXT_ACTION_MAX,
-			       sizeof(*term_actions), GFP_KERNEL);
+	term_actions = kzalloc_objs(*term_actions, MLX5_FLOW_CONTEXT_ACTION_MAX,
+				    GFP_KERNEL);
 	if (!term_actions) {
 		err = -ENOMEM;
 		goto free_fs_dr_actions_alloc;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/vport.c b/drivers/net/ethernet/mellanox/mlx5/core/vport.c
index cb098d3eb2fa..3b41a507ea05 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/vport.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/vport.c
@@ -832,7 +832,7 @@ int mlx5_query_hca_vport_system_image_guid(struct mlx5_core_dev *dev,
 	struct mlx5_hca_vport_context *rep;
 	int err;

-	rep = kvzalloc(sizeof(*rep), GFP_KERNEL);
+	rep = kvzalloc_obj(*rep, GFP_KERNEL);
 	if (!rep)
 		return -ENOMEM;

@@ -851,7 +851,7 @@ int mlx5_query_hca_vport_node_guid(struct mlx5_core_dev *dev,
 	struct mlx5_hca_vport_context *rep;
 	int err;

-	rep = kvzalloc(sizeof(*rep), GFP_KERNEL);
+	rep = kvzalloc_obj(*rep, GFP_KERNEL);
 	if (!rep)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/wc.c b/drivers/net/ethernet/mellanox/mlx5/core/wc.c
index 04d03be1bb77..aa989841f375 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/wc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/wc.c
@@ -366,7 +366,7 @@ static void mlx5_core_test_wc(struct mlx5_core_dev *mdev)
 	if (mdev->wc_state != MLX5_WC_STATE_UNINITIALIZED)
 		return;

-	sq = kzalloc(sizeof(*sq), GFP_KERNEL);
+	sq = kzalloc_obj(*sq, GFP_KERNEL);
 	if (!sq)
 		return;

diff --git a/drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.c b/drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.c
index e6f677e42007..b2335f56b481 100644
--- a/drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.c
+++ b/drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.c
@@ -267,7 +267,7 @@ struct mlxfw_mfa2_file *mlxfw_mfa2_file_init(const struct firmware *fw)
 	const void *first_tlv_ptr;
 	const void *cb_top_ptr;

-	mfa2_file = kzalloc(sizeof(*mfa2_file), GFP_KERNEL);
+	mfa2_file = kzalloc_obj(*mfa2_file, GFP_KERNEL);
 	if (!mfa2_file)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c
index 83c7cf3bbea3..6d2353324eda 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
@@ -150,8 +150,8 @@ static int mlxsw_ports_init(struct mlxsw_core *mlxsw_core, bool reload)
 	else
 		mlxsw_core->max_ports = MLXSW_PORT_MAX_PORTS_DEFAULT + 1;

-	mlxsw_core->ports = kcalloc(mlxsw_core->max_ports,
-				    sizeof(struct mlxsw_core_port), GFP_KERNEL);
+	mlxsw_core->ports = kzalloc_objs(struct mlxsw_core_port,
+					 mlxsw_core->max_ports, GFP_KERNEL);
 	if (!mlxsw_core->ports)
 		return -ENOMEM;

@@ -1793,7 +1793,7 @@ static void mlxsw_core_health_listener_func(const struct mlxsw_reg_info *reg,
 	struct mlxsw_core_health_event *event;
 	struct mlxsw_core *mlxsw_core = priv;

-	event = kmalloc(sizeof(*event), GFP_ATOMIC);
+	event = kmalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return;
 	event->mlxsw_core = mlxsw_core;
@@ -2376,7 +2376,7 @@ int mlxsw_core_rx_listener_register(struct mlxsw_core *mlxsw_core,
 	rxl_item = __find_rx_listener_item(mlxsw_core, rxl);
 	if (rxl_item)
 		return -EEXIST;
-	rxl_item = kmalloc(sizeof(*rxl_item), GFP_KERNEL);
+	rxl_item = kmalloc_obj(*rxl_item, GFP_KERNEL);
 	if (!rxl_item)
 		return -ENOMEM;
 	rxl_item->rxl = *rxl;
@@ -2475,7 +2475,7 @@ int mlxsw_core_event_listener_register(struct mlxsw_core *mlxsw_core,
 	el_item = __find_event_listener_item(mlxsw_core, el);
 	if (el_item)
 		return -EEXIST;
-	el_item = kmalloc(sizeof(*el_item), GFP_KERNEL);
+	el_item = kmalloc_obj(*el_item, GFP_KERNEL);
 	if (!el_item)
 		return -ENOMEM;
 	el_item->mlxsw_core = mlxsw_core;
@@ -2684,7 +2684,7 @@ static int mlxsw_core_reg_access_emad(struct mlxsw_core *mlxsw_core,
 	struct mlxsw_reg_trans *trans;
 	int err;

-	trans = kzalloc(sizeof(*trans), GFP_KERNEL);
+	trans = kzalloc_obj(*trans, GFP_KERNEL);
 	if (!trans)
 		return -ENOMEM;

@@ -2785,7 +2785,7 @@ int mlxsw_core_irq_event_handler_register(struct mlxsw_core *mlxsw_core,
 {
 	struct mlxsw_core_irq_event_handler_item *item;

-	item = kzalloc(sizeof(*item), GFP_KERNEL);
+	item = kzalloc_obj(*item, GFP_KERNEL);
 	if (!item)
 		return -ENOMEM;
 	item->cb = cb;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c
index 1915fa41c622..08168f95987a 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c
@@ -201,7 +201,7 @@ struct mlxsw_afa *mlxsw_afa_create(unsigned int max_acts_per_set,
 	struct mlxsw_afa *mlxsw_afa;
 	int err;

-	mlxsw_afa = kzalloc(sizeof(*mlxsw_afa), GFP_KERNEL);
+	mlxsw_afa = kzalloc_obj(*mlxsw_afa, GFP_KERNEL);
 	if (!mlxsw_afa)
 		return ERR_PTR(-ENOMEM);
 	err = rhashtable_init(&mlxsw_afa->set_ht, &mlxsw_afa_set_ht_params);
@@ -276,7 +276,7 @@ static struct mlxsw_afa_set *mlxsw_afa_set_create(bool is_first)
 {
 	struct mlxsw_afa_set *set;

-	set = kzalloc(sizeof(*set), GFP_KERNEL);
+	set = kzalloc_obj(*set, GFP_KERNEL);
 	if (!set)
 		return NULL;
 	/* Need to initialize the set to pass by default */
@@ -406,7 +406,7 @@ struct mlxsw_afa_block *mlxsw_afa_block_create(struct mlxsw_afa *mlxsw_afa)
 {
 	struct mlxsw_afa_block *block;

-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (!block)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&block->resource_list);
@@ -560,7 +560,7 @@ mlxsw_afa_fwd_entry_create(struct mlxsw_afa *mlxsw_afa, u16 local_port)
 	struct mlxsw_afa_fwd_entry *fwd_entry;
 	int err;

-	fwd_entry = kzalloc(sizeof(*fwd_entry), GFP_KERNEL);
+	fwd_entry = kzalloc_obj(*fwd_entry, GFP_KERNEL);
 	if (!fwd_entry)
 		return ERR_PTR(-ENOMEM);
 	fwd_entry->ht_key.local_port = local_port;
@@ -653,7 +653,7 @@ mlxsw_afa_fwd_entry_ref_create(struct mlxsw_afa_block *block, u16 local_port)
 	struct mlxsw_afa_fwd_entry *fwd_entry;
 	int err;

-	fwd_entry_ref = kzalloc(sizeof(*fwd_entry_ref), GFP_KERNEL);
+	fwd_entry_ref = kzalloc_obj(*fwd_entry_ref, GFP_KERNEL);
 	if (!fwd_entry_ref)
 		return ERR_PTR(-ENOMEM);
 	fwd_entry = mlxsw_afa_fwd_entry_get(block->afa, local_port);
@@ -702,7 +702,7 @@ mlxsw_afa_counter_create(struct mlxsw_afa_block *block)
 	struct mlxsw_afa_counter *counter;
 	int err;

-	counter = kzalloc(sizeof(*counter), GFP_KERNEL);
+	counter = kzalloc_obj(*counter, GFP_KERNEL);
 	if (!counter)
 		return ERR_PTR(-ENOMEM);

@@ -847,7 +847,7 @@ mlxsw_afa_cookie_ref_create(struct mlxsw_afa_block *block,
 	struct mlxsw_afa_cookie *cookie;
 	int err;

-	cookie_ref = kzalloc(sizeof(*cookie_ref), GFP_KERNEL);
+	cookie_ref = kzalloc_obj(*cookie_ref, GFP_KERNEL);
 	if (!cookie_ref)
 		return ERR_PTR(-ENOMEM);
 	cookie = mlxsw_afa_cookie_get(block->afa, fa_cookie);
@@ -873,7 +873,7 @@ mlxsw_afa_policer_create(struct mlxsw_afa *mlxsw_afa, u32 fa_index,
 	struct mlxsw_afa_policer *policer;
 	int err;

-	policer = kzalloc(sizeof(*policer), GFP_KERNEL);
+	policer = kzalloc_obj(*policer, GFP_KERNEL);
 	if (!policer)
 		return ERR_PTR(-ENOMEM);

@@ -974,7 +974,7 @@ mlxsw_afa_policer_ref_create(struct mlxsw_afa_block *block, u32 fa_index,
 	struct mlxsw_afa_policer *policer;
 	int err;

-	policer_ref = kzalloc(sizeof(*policer_ref), GFP_KERNEL);
+	policer_ref = kzalloc_obj(*policer_ref, GFP_KERNEL);
 	if (!policer_ref)
 		return ERR_PTR(-ENOMEM);

@@ -1386,7 +1386,7 @@ mlxsw_afa_mirror_create(struct mlxsw_afa_block *block, u16 local_in_port,
 	struct mlxsw_afa_mirror *mirror;
 	int err;

-	mirror = kzalloc(sizeof(*mirror), GFP_KERNEL);
+	mirror = kzalloc_obj(*mirror, GFP_KERNEL);
 	if (!mirror)
 		return ERR_PTR(-ENOMEM);

@@ -2187,7 +2187,7 @@ mlxsw_afa_sampler_create(struct mlxsw_afa_block *block, u16 local_port,
 	struct mlxsw_afa_sampler *sampler;
 	int err;

-	sampler = kzalloc(sizeof(*sampler), GFP_KERNEL);
+	sampler = kzalloc_obj(*sampler, GFP_KERNEL);
 	if (!sampler)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.c b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.c
index 7aa1a462a103..030eefcd3eda 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.c
@@ -86,7 +86,7 @@ struct mlxsw_afk *mlxsw_afk_create(unsigned int max_blocks,
 {
 	struct mlxsw_afk *mlxsw_afk;

-	mlxsw_afk = kzalloc(sizeof(*mlxsw_afk), GFP_KERNEL);
+	mlxsw_afk = kzalloc_obj(*mlxsw_afk, GFP_KERNEL);
 	if (!mlxsw_afk)
 		return NULL;
 	INIT_LIST_HEAD(&mlxsw_afk->key_info_list);
@@ -262,7 +262,7 @@ static int mlxsw_afk_picker(struct mlxsw_afk *mlxsw_afk,
 	enum mlxsw_afk_element element;
 	int err;

-	picker = kcalloc(mlxsw_afk->blocks_count, sizeof(*picker), GFP_KERNEL);
+	picker = kzalloc_objs(*picker, mlxsw_afk->blocks_count, GFP_KERNEL);
 	if (!picker)
 		return -ENOMEM;

@@ -327,8 +327,8 @@ mlxsw_afk_key_info_create(struct mlxsw_afk *mlxsw_afk,
 	struct mlxsw_afk_key_info *key_info;
 	int err;

-	key_info = kzalloc(struct_size(key_info, blocks, mlxsw_afk->max_blocks),
-			   GFP_KERNEL);
+	key_info = kzalloc_flex(*key_info, blocks, mlxsw_afk->max_blocks,
+				GFP_KERNEL);
 	if (!key_info)
 		return ERR_PTR(-ENOMEM);
 	err = mlxsw_afk_picker(mlxsw_afk, key_info, elusage);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/ethernet/mellanox/mlxsw/core_env.c
index 294e758f1067..3b6b17c48a18 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_env.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c
@@ -986,7 +986,7 @@ mlxsw_env_mtwe_listener_func(const struct mlxsw_reg_info *reg, char *mtwe_pl,
 	struct mlxsw_env_module_temp_warn_event *event;
 	struct mlxsw_env *mlxsw_env = priv;

-	event = kmalloc(sizeof(*event), GFP_ATOMIC);
+	event = kmalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return;

@@ -1080,7 +1080,7 @@ mlxsw_env_pmpe_listener_func(const struct mlxsw_reg_info *reg, char *pmpe_pl,
 	if (module_status != MLXSW_REG_PMPE_MODULE_STATUS_PLUGGED_ENABLED)
 		return;

-	event = kmalloc(sizeof(*event), GFP_ATOMIC);
+	event = kmalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return;

@@ -1243,10 +1243,10 @@ static int mlxsw_env_line_cards_alloc(struct mlxsw_env *env)
 	int i, j;

 	for (i = 0; i < env->num_of_slots; i++) {
-		env->line_cards[i] = kzalloc(struct_size(env->line_cards[i],
-							 module_info,
-							 env->max_module_count),
-							 GFP_KERNEL);
+		env->line_cards[i] = kzalloc_flex(*env->line_cards[i],
+						  module_info,
+						  env->max_module_count,
+						  GFP_KERNEL);
 		if (!env->line_cards[i])
 			goto kzalloc_err;

@@ -1453,8 +1453,7 @@ int mlxsw_env_init(struct mlxsw_core *mlxsw_core,
 			   mlxsw_reg_mgpir_max_modules_per_slot_get(mgpir_pl) :
 			   module_count;

-	env = kzalloc(struct_size(env, line_cards, num_of_slots + 1),
-		      GFP_KERNEL);
+	env = kzalloc_flex(*env, line_cards, num_of_slots + 1, GFP_KERNEL);
 	if (!env)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c
index 9c12e1feb643..e7081614f597 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c
@@ -871,8 +871,8 @@ int mlxsw_hwmon_init(struct mlxsw_core *mlxsw_core,
 	mlxsw_reg_mgpir_unpack(mgpir_pl, NULL, NULL, NULL, NULL,
 			       &num_of_slots);

-	mlxsw_hwmon = kzalloc(struct_size(mlxsw_hwmon, line_cards,
-					  num_of_slots + 1), GFP_KERNEL);
+	mlxsw_hwmon = kzalloc_flex(*mlxsw_hwmon, line_cards, num_of_slots + 1,
+				   GFP_KERNEL);
 	if (!mlxsw_hwmon)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecard_dev.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecard_dev.c
index e8d6fe35bf36..a689c79122cf 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_linecard_dev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecard_dev.c
@@ -57,7 +57,7 @@ int mlxsw_linecard_bdev_add(struct mlxsw_linecard *linecard)
 	if (id < 0)
 		return id;

-	linecard_bdev = kzalloc(sizeof(*linecard_bdev), GFP_KERNEL);
+	linecard_bdev = kzalloc_obj(*linecard_bdev, GFP_KERNEL);
 	if (!linecard_bdev) {
 		mlxsw_linecard_bdev_id_free(id);
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c
index 10f5bc4892fc..ef13fee48b1a 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_linecards.c
@@ -531,7 +531,7 @@ int mlxsw_linecards_event_ops_register(struct mlxsw_core *mlxsw_core,

 	if (!linecards)
 		return 0;
-	item = kzalloc(sizeof(*item), GFP_KERNEL);
+	item = kzalloc_obj(*item, GFP_KERNEL);
 	if (!item)
 		return -ENOMEM;
 	item->event_ops = ops;
@@ -1192,7 +1192,7 @@ mlxsw_linecard_status_listener_func(const struct mlxsw_reg_info *reg,
 	struct mlxsw_linecard_status_event *event;
 	struct mlxsw_core *mlxsw_core = priv;

-	event = kmalloc(sizeof(*event), GFP_ATOMIC);
+	event = kmalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return;
 	event->mlxsw_core = mlxsw_core;
@@ -1225,7 +1225,7 @@ mlxsw_linecard_bct_listener_func(const struct mlxsw_reg_info *reg,
 	struct mlxsw_linecard_bct_event *event;
 	struct mlxsw_core *mlxsw_core = priv;

-	event = kmalloc(sizeof(*event), GFP_ATOMIC);
+	event = kmalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return;
 	event->mlxsw_core = mlxsw_core;
@@ -1446,7 +1446,7 @@ static int mlxsw_linecard_types_init(struct mlxsw_core *mlxsw_core,
 		return 0;
 	}

-	types_info = kzalloc(sizeof(*types_info), GFP_KERNEL);
+	types_info = kzalloc_obj(*types_info, GFP_KERNEL);
 	if (!types_info) {
 		release_firmware(firmware);
 		return -ENOMEM;
@@ -1469,9 +1469,8 @@ static int mlxsw_linecard_types_init(struct mlxsw_core *mlxsw_core,
 		goto err_type_file_file_validate;
 	}

-	types_info->ini_files = kmalloc_array(types_info->count,
-					      sizeof(struct mlxsw_linecard_ini_file *),
-					      GFP_KERNEL);
+	types_info->ini_files = kmalloc_objs(struct mlxsw_linecard_ini_file *,
+					     types_info->count, GFP_KERNEL);
 	if (!types_info->ini_files) {
 		err = -ENOMEM;
 		goto err_ini_files_alloc;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
index eac9a14a6058..4c9b04ca5154 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
@@ -431,9 +431,8 @@ mlxsw_thermal_modules_init(struct device *dev, struct mlxsw_core *core,
 	if (!area->tz_module_num)
 		return 0;

-	area->tz_module_arr = kcalloc(area->tz_module_num,
-				      sizeof(*area->tz_module_arr),
-				      GFP_KERNEL);
+	area->tz_module_arr = kzalloc_objs(*area->tz_module_arr,
+					   area->tz_module_num, GFP_KERNEL);
 	if (!area->tz_module_arr)
 		return -ENOMEM;

@@ -522,9 +521,8 @@ mlxsw_thermal_gearboxes_init(struct device *dev, struct mlxsw_core *core,
 		return 0;

 	area->tz_gearbox_num = gbox_num;
-	area->tz_gearbox_arr = kcalloc(area->tz_gearbox_num,
-				       sizeof(*area->tz_gearbox_arr),
-				       GFP_KERNEL);
+	area->tz_gearbox_arr = kzalloc_objs(*area->tz_gearbox_arr,
+					    area->tz_gearbox_num, GFP_KERNEL);
 	if (!area->tz_gearbox_arr)
 		return -ENOMEM;

@@ -644,8 +642,8 @@ int mlxsw_thermal_init(struct mlxsw_core *core,
 	mlxsw_reg_mgpir_unpack(mgpir_pl, NULL, NULL, NULL, NULL,
 			       &num_of_slots);

-	thermal = kzalloc(struct_size(thermal, line_cards, num_of_slots + 1),
-			  GFP_KERNEL);
+	thermal = kzalloc_flex(*thermal, line_cards, num_of_slots + 1,
+			       GFP_KERNEL);
 	if (!thermal)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c
index 828c65036a4c..9871b9e1d094 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c
@@ -398,14 +398,12 @@ static int mlxsw_m_linecards_init(struct mlxsw_m *mlxsw_m)
 	/* Add slot for main board. */
 	mlxsw_m->num_of_slots += 1;

-	mlxsw_m->ports = kcalloc(max_ports, sizeof(*mlxsw_m->ports),
-				 GFP_KERNEL);
+	mlxsw_m->ports = kzalloc_objs(*mlxsw_m->ports, max_ports, GFP_KERNEL);
 	if (!mlxsw_m->ports)
 		return -ENOMEM;

-	mlxsw_m->line_cards = kcalloc(mlxsw_m->num_of_slots,
-				      sizeof(*mlxsw_m->line_cards),
-				      GFP_KERNEL);
+	mlxsw_m->line_cards = kzalloc_objs(*mlxsw_m->line_cards,
+					   mlxsw_m->num_of_slots, GFP_KERNEL);
 	if (!mlxsw_m->line_cards) {
 		err = -ENOMEM;
 		goto err_kcalloc;
@@ -413,10 +411,8 @@ static int mlxsw_m_linecards_init(struct mlxsw_m *mlxsw_m)

 	for (i = 0; i < mlxsw_m->num_of_slots; i++) {
 		mlxsw_m->line_cards[i] =
-			kzalloc(struct_size(mlxsw_m->line_cards[i],
-					    module_to_port,
-					    mlxsw_m->max_modules_per_slot),
-				GFP_KERNEL);
+			kzalloc_flex(*mlxsw_m->line_cards[i], module_to_port,
+				     mlxsw_m->max_modules_per_slot, GFP_KERNEL);
 		if (!mlxsw_m->line_cards[i]) {
 			err = -ENOMEM;
 			goto err_kmalloc_array;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
index 7da9ef254b72..9b378e9d084d 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
@@ -1264,7 +1264,7 @@ static int mlxsw_pci_queue_init(struct mlxsw_pci *mlxsw_pci, char *mbox,
 	if (!mem_item->buf)
 		return -ENOMEM;

-	q->elem_info = kcalloc(q->count, sizeof(*q->elem_info), GFP_KERNEL);
+	q->elem_info = kzalloc_objs(*q->elem_info, q->count, GFP_KERNEL);
 	if (!q->elem_info) {
 		err = -ENOMEM;
 		goto err_elem_info_alloc;
@@ -1316,7 +1316,7 @@ static int mlxsw_pci_queue_group_init(struct mlxsw_pci *mlxsw_pci, char *mbox,
 	int err;

 	queue_group = mlxsw_pci_queue_type_group_get(mlxsw_pci, q_ops->type);
-	queue_group->q = kcalloc(num_qs, sizeof(*queue_group->q), GFP_KERNEL);
+	queue_group->q = kzalloc_objs(*queue_group->q, num_qs, GFP_KERNEL);
 	if (!queue_group->q)
 		return -ENOMEM;

@@ -1667,8 +1667,8 @@ static int mlxsw_pci_fw_area_init(struct mlxsw_pci *mlxsw_pci, char *mbox,
 	int i;
 	int err;

-	mlxsw_pci->fw_area.items = kcalloc(num_pages, sizeof(*mem_item),
-					   GFP_KERNEL);
+	mlxsw_pci->fw_area.items = kzalloc_objs(*mem_item, num_pages,
+						GFP_KERNEL);
 	if (!mlxsw_pci->fw_area.items)
 		return -ENOMEM;
 	mlxsw_pci->fw_area.count = num_pages;
@@ -2414,7 +2414,7 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	struct mlxsw_pci *mlxsw_pci;
 	int err;

-	mlxsw_pci = kzalloc(sizeof(*mlxsw_pci), GFP_KERNEL);
+	mlxsw_pci = kzalloc_obj(*mlxsw_pci, GFP_KERNEL);
 	if (!mlxsw_pci)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index 9a2d64a0a858..dbc032ff4963 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -972,7 +972,7 @@ mlxsw_sp_port_vlan_create(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid)
 	if (err)
 		return ERR_PTR(err);

-	mlxsw_sp_port_vlan = kzalloc(sizeof(*mlxsw_sp_port_vlan), GFP_KERNEL);
+	mlxsw_sp_port_vlan = kzalloc_obj(*mlxsw_sp_port_vlan, GFP_KERNEL);
 	if (!mlxsw_sp_port_vlan) {
 		err = -ENOMEM;
 		goto err_port_vlan_alloc;
@@ -1776,7 +1776,7 @@ static int mlxsw_sp_cpu_port_create(struct mlxsw_sp *mlxsw_sp)
 	struct mlxsw_sp_port *mlxsw_sp_port;
 	int err;

-	mlxsw_sp_port = kzalloc(sizeof(*mlxsw_sp_port), GFP_KERNEL);
+	mlxsw_sp_port = kzalloc_obj(*mlxsw_sp_port, GFP_KERNEL);
 	if (!mlxsw_sp_port)
 		return -ENOMEM;

@@ -1898,7 +1898,7 @@ mlxsw_sp_port_mapping_listener_func(const struct mlxsw_reg_info *reg,
 		return;

 	events = &mlxsw_sp->port_mapping_events;
-	event = kmalloc(sizeof(*event), GFP_ATOMIC);
+	event = kmalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return;
 	memcpy(event->pmlp_pl, pmlp_pl, sizeof(event->pmlp_pl));
@@ -2019,9 +2019,8 @@ static int mlxsw_sp_port_module_info_init(struct mlxsw_sp *mlxsw_sp)
 	int i;
 	int err;

-	mlxsw_sp->port_mapping = kcalloc(max_ports,
-					 sizeof(struct mlxsw_sp_port_mapping),
-					 GFP_KERNEL);
+	mlxsw_sp->port_mapping = kzalloc_objs(struct mlxsw_sp_port_mapping,
+					      max_ports, GFP_KERNEL);
 	if (!mlxsw_sp->port_mapping)
 		return -ENOMEM;

@@ -2490,8 +2489,8 @@ static int mlxsw_sp_traps_init(struct mlxsw_sp *mlxsw_sp)
 	if (!MLXSW_CORE_RES_VALID(mlxsw_sp->core, MAX_CPU_POLICERS))
 		return -EIO;
 	max_policers = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_CPU_POLICERS);
-	trap = kzalloc(struct_size(trap, policers_usage,
-				   BITS_TO_LONGS(max_policers)), GFP_KERNEL);
+	trap = kzalloc_flex(*trap, policers_usage, BITS_TO_LONGS(max_policers),
+			    GFP_KERNEL);
 	if (!trap)
 		return -ENOMEM;
 	trap->max_policers = max_policers;
@@ -2624,8 +2623,8 @@ static int mlxsw_sp_lag_init(struct mlxsw_sp *mlxsw_sp)
 	if (err)
 		return err;

-	mlxsw_sp->lags = kcalloc(mlxsw_sp->max_lag, sizeof(struct mlxsw_sp_lag),
-				 GFP_KERNEL);
+	mlxsw_sp->lags = kzalloc_objs(struct mlxsw_sp_lag, mlxsw_sp->max_lag,
+				      GFP_KERNEL);
 	if (!mlxsw_sp->lags) {
 		err = -ENOMEM;
 		goto err_kcalloc;
@@ -2748,7 +2747,7 @@ mlxsw_sp_sample_trigger_node_init(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_sample_trigger_node *trigger_node;
 	int err;

-	trigger_node = kzalloc(sizeof(*trigger_node), GFP_KERNEL);
+	trigger_node = kzalloc_obj(*trigger_node, GFP_KERNEL);
 	if (!trigger_node)
 		return -ENOMEM;

@@ -2894,7 +2893,7 @@ mlxsw_sp_ipv6_addr_init(struct mlxsw_sp *mlxsw_sp, const struct in6_addr *addr6,
 	if (err)
 		goto err_rips_write;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node) {
 		err = -ENOMEM;
 		goto err_node_alloc;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum1_kvdl.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum1_kvdl.c
index 1e3fc989393c..6aa1252cbe49 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum1_kvdl.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum1_kvdl.c
@@ -224,8 +224,7 @@ mlxsw_sp1_kvdl_part_init(struct mlxsw_sp *mlxsw_sp,
 	}

 	nr_entries = div_u64(resource_size, info->alloc_size);
-	part = kzalloc(struct_size(part, usage, BITS_TO_LONGS(nr_entries)),
-		       GFP_KERNEL);
+	part = kzalloc_flex(*part, usage, BITS_TO_LONGS(nr_entries), GFP_KERNEL);
 	if (!part)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum1_mr_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum1_mr_tcam.c
index c8c67536917b..814b704de294 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum1_mr_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum1_mr_tcam.c
@@ -259,8 +259,8 @@ mlxsw_sp1_mr_tcam_region_init(struct mlxsw_sp *mlxsw_sp,
 	}
 	mr_tcam_region->parman = parman;

-	parman_prios = kmalloc_array(MLXSW_SP_MR_ROUTE_PRIO_MAX + 1,
-				     sizeof(*parman_prios), GFP_KERNEL);
+	parman_prios = kmalloc_objs(*parman_prios,
+				    MLXSW_SP_MR_ROUTE_PRIO_MAX + 1, GFP_KERNEL);
 	if (!parman_prios) {
 		err = -ENOMEM;
 		goto err_parman_prios_alloc;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
index 3e70cee4d2f3..aaaa586e8569 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
@@ -318,7 +318,7 @@ mlxsw_sp_acl_rulei_create(struct mlxsw_sp_acl *acl,
 	struct mlxsw_sp_acl_rule_info *rulei;
 	int err;

-	rulei = kzalloc(sizeof(*rulei), GFP_KERNEL);
+	rulei = kzalloc_obj(*rulei, GFP_KERNEL);
 	if (!rulei)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_atcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_atcam.c
index 07cb1e26ca3e..b6e1fc77f0c0 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_atcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_atcam.c
@@ -74,7 +74,7 @@ mlxsw_sp_acl_atcam_region_generic_init(struct mlxsw_sp_acl_atcam_region *aregion
 {
 	struct mlxsw_sp_acl_atcam_region_generic *region_generic;

-	region_generic = kzalloc(sizeof(*region_generic), GFP_KERNEL);
+	region_generic = kzalloc_obj(*region_generic, GFP_KERNEL);
 	if (!region_generic)
 		return -ENOMEM;

@@ -126,7 +126,7 @@ mlxsw_sp_acl_atcam_region_12kb_init(struct mlxsw_sp_acl_atcam_region *aregion)
 		return -EIO;

 	max_lkey_id = MLXSW_CORE_RES_GET(mlxsw_sp->core, ACL_MAX_LARGE_KEY_ID);
-	region_12kb = kzalloc(sizeof(*region_12kb), GFP_KERNEL);
+	region_12kb = kzalloc_obj(*region_12kb, GFP_KERNEL);
 	if (!region_12kb)
 		return -ENOMEM;

@@ -179,7 +179,7 @@ mlxsw_sp_acl_atcam_lkey_id_create(struct mlxsw_sp_acl_atcam_region *aregion,
 	else
 		return ERR_PTR(-ENOBUFS);

-	lkey_id = kzalloc(sizeof(*lkey_id), GFP_KERNEL);
+	lkey_id = kzalloc_obj(*lkey_id, GFP_KERNEL);
 	if (!lkey_id) {
 		err = -ENOMEM;
 		goto err_lkey_id_alloc;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_bloom_filter.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_bloom_filter.c
index 067f0055a55a..d6c55a80a7ce 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_bloom_filter.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_bloom_filter.c
@@ -513,8 +513,8 @@ mlxsw_sp_acl_bf_init(struct mlxsw_sp *mlxsw_sp, unsigned int num_erp_banks)
 	 * is 2^ACL_MAX_BF_LOG
 	 */
 	bf_bank_size = 1 << MLXSW_CORE_RES_GET(mlxsw_sp->core, ACL_MAX_BF_LOG);
-	bf = kzalloc(struct_size(bf, refcnt, size_mul(bf_bank_size, num_erp_banks)),
-		     GFP_KERNEL);
+	bf = kzalloc_flex(*bf, refcnt, size_mul(bf_bank_size, num_erp_banks),
+			  GFP_KERNEL);
 	if (!bf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_erp.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_erp.c
index 9eee229303cc..80307d6554a2 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_erp.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_erp.c
@@ -254,7 +254,7 @@ mlxsw_sp_acl_erp_generic_create(struct mlxsw_sp_acl_erp_table *erp_table,
 	struct mlxsw_sp_acl_erp *erp;
 	int err;

-	erp = kzalloc(sizeof(*erp), GFP_KERNEL);
+	erp = kzalloc_obj(*erp, GFP_KERNEL);
 	if (!erp)
 		return ERR_PTR(-ENOMEM);

@@ -798,7 +798,7 @@ mlxsw_sp_acl_erp_ctcam_mask_create(struct mlxsw_sp_acl_erp_table *erp_table,
 	struct mlxsw_sp_acl_erp *erp;
 	int err;

-	erp = kzalloc(sizeof(*erp), GFP_KERNEL);
+	erp = kzalloc_obj(*erp, GFP_KERNEL);
 	if (!erp)
 		return ERR_PTR(-ENOMEM);

@@ -1236,7 +1236,7 @@ static void *mlxsw_sp_acl_erp_delta_create(void *priv, void *parent_obj,
 	if (err)
 		return ERR_PTR(-EINVAL);

-	delta = kzalloc(sizeof(*delta), GFP_KERNEL);
+	delta = kzalloc_obj(*delta, GFP_KERNEL);
 	if (!delta)
 		return ERR_PTR(-ENOMEM);
 	delta->start = delta_start;
@@ -1309,7 +1309,7 @@ mlxsw_sp_acl_erp_table_create(struct mlxsw_sp_acl_atcam_region *aregion,
 	struct mlxsw_sp_acl_erp_table *erp_table;
 	int err;

-	erp_table = kzalloc(sizeof(*erp_table), GFP_KERNEL);
+	erp_table = kzalloc_obj(*erp_table, GFP_KERNEL);
 	if (!erp_table)
 		return ERR_PTR(-ENOMEM);

@@ -1563,7 +1563,7 @@ int mlxsw_sp_acl_erps_init(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_acl_erp_core *erp_core;
 	int err;

-	erp_core = kzalloc(sizeof(*erp_core), GFP_KERNEL);
+	erp_core = kzalloc_obj(*erp_core, GFP_KERNEL);
 	if (!erp_core)
 		return -ENOMEM;
 	erp_core->mlxsw_sp = mlxsw_sp;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
index 69f9da9fb305..5a282cb4b52d 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
@@ -778,7 +778,7 @@ mlxsw_sp_acl_tcam_vregion_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_acl_tcam_vregion *vregion;
 	int err;

-	vregion = kzalloc(sizeof(*vregion), GFP_KERNEL);
+	vregion = kzalloc_obj(*vregion, GFP_KERNEL);
 	if (!vregion)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&vregion->vchunk_list);
@@ -939,7 +939,7 @@ mlxsw_sp_acl_tcam_vchunk_create(struct mlxsw_sp *mlxsw_sp,
 	if (priority == MLXSW_SP_ACL_TCAM_CATCHALL_PRIO)
 		return ERR_PTR(-EINVAL);

-	vchunk = kzalloc(sizeof(*vchunk), GFP_KERNEL);
+	vchunk = kzalloc_obj(*vchunk, GFP_KERNEL);
 	if (!vchunk)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&vchunk->ventry_list);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c
index 2c0cfa79d138..fd6b36c3d475 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c
@@ -628,8 +628,7 @@ static int mlxsw_sp_sb_port_init(struct mlxsw_sp *mlxsw_sp,
 {
 	struct mlxsw_sp_sb_pm *pms;

-	pms = kcalloc(mlxsw_sp->sb_vals->pool_count, sizeof(*pms),
-		      GFP_KERNEL);
+	pms = kzalloc_objs(*pms, mlxsw_sp->sb_vals->pool_count, GFP_KERNEL);
 	if (!pms)
 		return -ENOMEM;
 	sb_port->pms = pms;
@@ -648,14 +647,12 @@ static int mlxsw_sp_sb_ports_init(struct mlxsw_sp *mlxsw_sp)
 	int i;
 	int err;

-	mlxsw_sp->sb->ports = kcalloc(max_ports,
-				      sizeof(struct mlxsw_sp_sb_port),
-				      GFP_KERNEL);
+	mlxsw_sp->sb->ports = kzalloc_objs(struct mlxsw_sp_sb_port, max_ports,
+					   GFP_KERNEL);
 	if (!mlxsw_sp->sb->ports)
 		return -ENOMEM;

-	prs = kcalloc(mlxsw_sp->sb_vals->pool_count, sizeof(*prs),
-		      GFP_KERNEL);
+	prs = kzalloc_objs(*prs, mlxsw_sp->sb_vals->pool_count, GFP_KERNEL);
 	if (!prs) {
 		err = -ENOMEM;
 		goto err_alloc_prs;
@@ -1264,7 +1261,7 @@ int mlxsw_sp_buffers_init(struct mlxsw_sp *mlxsw_sp)
 	if (!MLXSW_CORE_RES_VALID(mlxsw_sp->core, MAX_HEADROOM_SIZE))
 		return -EIO;

-	mlxsw_sp->sb = kzalloc(sizeof(*mlxsw_sp->sb), GFP_KERNEL);
+	mlxsw_sp->sb = kzalloc_obj(*mlxsw_sp->sb, GFP_KERNEL);
 	if (!mlxsw_sp->sb)
 		return -ENOMEM;
 	mlxsw_sp->sb->cell_size = MLXSW_CORE_RES_GET(mlxsw_sp->core, CELL_SIZE);
@@ -1327,7 +1324,7 @@ int mlxsw_sp_port_buffers_init(struct mlxsw_sp_port *mlxsw_sp_port)
 {
 	int err;

-	mlxsw_sp_port->hdroom = kzalloc(sizeof(*mlxsw_sp_port->hdroom), GFP_KERNEL);
+	mlxsw_sp_port->hdroom = kzalloc_obj(*mlxsw_sp_port->hdroom, GFP_KERNEL);
 	if (!mlxsw_sp_port->hdroom)
 		return -ENOMEM;
 	mlxsw_sp_port->hdroom->mtu = mlxsw_sp_port->dev->mtu;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_cnt.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_cnt.c
index b1094aaffa5f..33ef49de4e0b 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_cnt.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_cnt.c
@@ -124,8 +124,7 @@ int mlxsw_sp_counter_pool_init(struct mlxsw_sp *mlxsw_sp)
 	struct mlxsw_sp_counter_pool *pool;
 	int err;

-	pool = kzalloc(struct_size(pool, sub_pools, sub_pools_count),
-		       GFP_KERNEL);
+	pool = kzalloc_flex(*pool, sub_pools, sub_pools_count, GFP_KERNEL);
 	if (!pool)
 		return -ENOMEM;
 	mlxsw_sp->counter_pool = pool;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c
index aff6d4f35cd2..69ab4f8cf05d 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c
@@ -654,8 +654,8 @@ static const struct dcbnl_rtnl_ops mlxsw_sp_dcbnl_ops = {

 static int mlxsw_sp_port_ets_init(struct mlxsw_sp_port *mlxsw_sp_port)
 {
-	mlxsw_sp_port->dcb.ets = kzalloc(sizeof(*mlxsw_sp_port->dcb.ets),
-					 GFP_KERNEL);
+	mlxsw_sp_port->dcb.ets = kzalloc_obj(*mlxsw_sp_port->dcb.ets,
+					     GFP_KERNEL);
 	if (!mlxsw_sp_port->dcb.ets)
 		return -ENOMEM;

@@ -673,8 +673,8 @@ static int mlxsw_sp_port_maxrate_init(struct mlxsw_sp_port *mlxsw_sp_port)
 {
 	int i;

-	mlxsw_sp_port->dcb.maxrate = kmalloc(sizeof(*mlxsw_sp_port->dcb.maxrate),
-					     GFP_KERNEL);
+	mlxsw_sp_port->dcb.maxrate = kmalloc_obj(*mlxsw_sp_port->dcb.maxrate,
+						 GFP_KERNEL);
 	if (!mlxsw_sp_port->dcb.maxrate)
 		return -ENOMEM;

@@ -691,8 +691,8 @@ static void mlxsw_sp_port_maxrate_fini(struct mlxsw_sp_port *mlxsw_sp_port)

 static int mlxsw_sp_port_pfc_init(struct mlxsw_sp_port *mlxsw_sp_port)
 {
-	mlxsw_sp_port->dcb.pfc = kzalloc(sizeof(*mlxsw_sp_port->dcb.pfc),
-					 GFP_KERNEL);
+	mlxsw_sp_port->dcb.pfc = kzalloc_obj(*mlxsw_sp_port->dcb.pfc,
+					     GFP_KERNEL);
 	if (!mlxsw_sp_port->dcb.pfc)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_fid.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_fid.c
index 65562ab208b3..2e9c35f5f992 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_fid.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_fid.c
@@ -1022,7 +1022,7 @@ mlxsw_sp_fid_port_vid_list_add(struct mlxsw_sp_fid *fid, u16 local_port,
 {
 	struct mlxsw_sp_fid_port_vid *port_vid, *tmp_port_vid;

-	port_vid = kzalloc(sizeof(*port_vid), GFP_KERNEL);
+	port_vid = kzalloc_obj(*port_vid, GFP_KERNEL);
 	if (!port_vid)
 		return -ENOMEM;

@@ -2295,7 +2295,7 @@ mlxsw_sp_fids_init(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_fid_core *fid_core;
 	int err, i;

-	fid_core = kzalloc(sizeof(*mlxsw_sp->fid_core), GFP_KERNEL);
+	fid_core = kzalloc_obj(*mlxsw_sp->fid_core, GFP_KERNEL);
 	if (!fid_core)
 		return -ENOMEM;
 	mlxsw_sp->fid_core = fid_core;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flow.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flow.c
index 9e50c823a354..6e341b4a9805 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flow.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flow.c
@@ -14,7 +14,7 @@ mlxsw_sp_flow_block_create(struct mlxsw_sp *mlxsw_sp, struct net *net)
 {
 	struct mlxsw_sp_flow_block *block;

-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (!block)
 		return NULL;
 	INIT_LIST_HEAD(&block->binding_list);
@@ -75,7 +75,7 @@ static int mlxsw_sp_flow_block_bind(struct mlxsw_sp *mlxsw_sp,
 	if (err)
 		return err;

-	binding = kzalloc(sizeof(*binding), GFP_KERNEL);
+	binding = kzalloc_obj(*binding, GFP_KERNEL);
 	if (!binding) {
 		err = -ENOMEM;
 		goto err_binding_alloc;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_matchall.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_matchall.c
index 07b371cd9818..a5fdc1a7555a 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_matchall.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_matchall.c
@@ -243,7 +243,7 @@ int mlxsw_sp_mall_replace(struct mlxsw_sp *mlxsw_sp,
 		return -EOPNOTSUPP;
 	}

-	mall_entry = kzalloc(sizeof(*mall_entry), GFP_KERNEL);
+	mall_entry = kzalloc_obj(*mall_entry, GFP_KERNEL);
 	if (!mall_entry)
 		return -ENOMEM;
 	mall_entry->cookie = f->cookie;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c
index 81935f87bfcd..1ca8a15a9cb2 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c
@@ -172,7 +172,7 @@ static int mlxsw_sp_mr_route_evif_link(struct mlxsw_sp_mr_route *mr_route,
 {
 	struct mlxsw_sp_mr_route_vif_entry *rve;

-	rve = kzalloc(sizeof(*rve), GFP_KERNEL);
+	rve = kzalloc_obj(*rve, GFP_KERNEL);
 	if (!rve)
 		return -ENOMEM;
 	rve->mr_route = mr_route;
@@ -305,7 +305,7 @@ mlxsw_sp_mr_route_create(struct mlxsw_sp_mr_table *mr_table,
 	int i;

 	/* Allocate and init a new route and fill it with parameters */
-	mr_route = kzalloc(sizeof(*mr_route), GFP_KERNEL);
+	mr_route = kzalloc_obj(*mr_route, GFP_KERNEL);
 	if (!mr_route)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&mr_route->evif_list);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c
index 01d81ae3662a..f652630cbac1 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c
@@ -52,7 +52,7 @@ mlxsw_sp_mr_erif_sublist_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_mr_erif_sublist *erif_sublist;
 	int err;

-	erif_sublist = kzalloc(sizeof(*erif_sublist), GFP_KERNEL);
+	erif_sublist = kzalloc_obj(*erif_sublist, GFP_KERNEL);
 	if (!erif_sublist)
 		return ERR_PTR(-ENOMEM);
 	err = mlxsw_sp_kvdl_alloc(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_MCRIGR,
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c
index 5479a1c19d2e..8068502c8c2b 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c
@@ -216,7 +216,7 @@ mlxsw_sp_nve_mc_list_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_nve_mc_list *mc_list;
 	int err;

-	mc_list = kmalloc(sizeof(*mc_list), GFP_KERNEL);
+	mc_list = kmalloc_obj(*mc_list, GFP_KERNEL);
 	if (!mc_list)
 		return ERR_PTR(-ENOMEM);

@@ -277,8 +277,8 @@ mlxsw_sp_nve_mc_record_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_nve_mc_record *mc_record;
 	int err;

-	mc_record = kzalloc(struct_size(mc_record, entries, num_max_entries),
-			    GFP_KERNEL);
+	mc_record = kzalloc_flex(*mc_record, entries, num_max_entries,
+				 GFP_KERNEL);
 	if (!mc_record)
 		return ERR_PTR(-ENOMEM);

@@ -848,7 +848,7 @@ static int mlxsw_sp_nve_ipv6_ht_insert(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_nve *nve = mlxsw_sp->nve;
 	int err;

-	ipv6_ht_node = kzalloc(sizeof(*ipv6_ht_node), GFP_KERNEL);
+	ipv6_ht_node = kzalloc_obj(*ipv6_ht_node, GFP_KERNEL);
 	if (!ipv6_ht_node)
 		return -ENOMEM;

@@ -1119,7 +1119,7 @@ int mlxsw_sp_nve_init(struct mlxsw_sp *mlxsw_sp)
 	struct mlxsw_sp_nve *nve;
 	int err;

-	nve = kzalloc(sizeof(*mlxsw_sp->nve), GFP_KERNEL);
+	nve = kzalloc_obj(*mlxsw_sp->nve, GFP_KERNEL);
 	if (!nve)
 		return -ENOMEM;
 	mlxsw_sp->nve = nve;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_pgt.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_pgt.c
index 4ef81bac17d6..0b6269a40c5a 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_pgt.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_pgt.c
@@ -116,7 +116,7 @@ mlxsw_sp_pgt_entry_create(struct mlxsw_sp_pgt *pgt, u16 mid, u16 smpe)
 	void *ret;
 	int err;

-	pgt_entry = kzalloc(sizeof(*pgt_entry), GFP_KERNEL);
+	pgt_entry = kzalloc_obj(*pgt_entry, GFP_KERNEL);
 	if (!pgt_entry)
 		return ERR_PTR(-ENOMEM);

@@ -211,7 +211,7 @@ mlxsw_sp_pgt_entry_port_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_pgt_entry_port *pgt_entry_port;
 	int err;

-	pgt_entry_port = kzalloc(sizeof(*pgt_entry_port), GFP_KERNEL);
+	pgt_entry_port = kzalloc_obj(*pgt_entry_port, GFP_KERNEL);
 	if (!pgt_entry_port)
 		return ERR_PTR(-ENOMEM);

@@ -315,7 +315,7 @@ int mlxsw_sp_pgt_init(struct mlxsw_sp *mlxsw_sp)
 	if (!MLXSW_CORE_RES_VALID(mlxsw_sp->core, PGT_SIZE))
 		return -EIO;

-	pgt = kzalloc(sizeof(*mlxsw_sp->pgt), GFP_KERNEL);
+	pgt = kzalloc_obj(*mlxsw_sp->pgt, GFP_KERNEL);
 	if (!pgt)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_policer.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_policer.c
index 22ebb207ce4d..a6d849c7bb3d 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_policer.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_policer.c
@@ -243,7 +243,7 @@ int mlxsw_sp_policer_add(struct mlxsw_sp *mlxsw_sp,
 	if (err)
 		return err;

-	policer = kmalloc(sizeof(*policer), GFP_KERNEL);
+	policer = kmalloc_obj(*policer, GFP_KERNEL);
 	if (!policer)
 		return -ENOMEM;
 	policer->params = *params;
@@ -357,7 +357,7 @@ int mlxsw_sp_policers_init(struct mlxsw_sp *mlxsw_sp)
 	struct mlxsw_sp_policer_core *policer_core;
 	int i, err;

-	policer_core = kzalloc(sizeof(*policer_core), GFP_KERNEL);
+	policer_core = kzalloc_obj(*policer_core, GFP_KERNEL);
 	if (!policer_core)
 		return -ENOMEM;
 	mlxsw_sp->policer_core = policer_core;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_port_range.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_port_range.c
index 2d193de12be6..4afcb32e7d14 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_port_range.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_port_range.c
@@ -52,7 +52,7 @@ mlxsw_sp_port_range_reg_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_port_range_reg *prr;
 	int err;

-	prr = kzalloc(sizeof(*prr), GFP_KERNEL);
+	prr = kzalloc_obj(*prr, GFP_KERNEL);
 	if (!prr)
 		return ERR_PTR(-ENOMEM);

@@ -172,7 +172,7 @@ int mlxsw_sp_port_range_init(struct mlxsw_sp *mlxsw_sp)
 	 */
 	WARN_ON(max > BITS_PER_BYTE * sizeof(u16));

-	pr_core = kzalloc(sizeof(*mlxsw_sp->pr_core), GFP_KERNEL);
+	pr_core = kzalloc_obj(*mlxsw_sp->pr_core, GFP_KERNEL);
 	if (!pr_core)
 		return -ENOMEM;
 	mlxsw_sp->pr_core = pr_core;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c
index 5b9f0844b8f6..4025b556b39c 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c
@@ -277,7 +277,7 @@ mlxsw_sp1_ptp_clock_init(struct mlxsw_sp *mlxsw_sp, struct device *dev)
 	struct mlxsw_sp1_ptp_clock *clock;
 	int err;

-	clock = kzalloc(sizeof(*clock), GFP_KERNEL);
+	clock = kzalloc_obj(*clock, GFP_KERNEL);
 	if (!clock)
 		return ERR_PTR(-ENOMEM);

@@ -446,7 +446,7 @@ mlxsw_sp2_ptp_clock_init(struct mlxsw_sp *mlxsw_sp, struct device *dev)
 	struct mlxsw_sp_ptp_clock *clock;
 	int err;

-	clock = kzalloc(sizeof(*clock), GFP_KERNEL);
+	clock = kzalloc_obj(*clock, GFP_KERNEL);
 	if (!clock)
 		return ERR_PTR(-ENOMEM);

@@ -524,7 +524,7 @@ mlxsw_sp1_ptp_unmatched_save(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp1_ptp_unmatched *unmatched;
 	int err;

-	unmatched = kzalloc(sizeof(*unmatched), GFP_ATOMIC);
+	unmatched = kzalloc_obj(*unmatched, GFP_ATOMIC);
 	if (!unmatched)
 		return -ENOMEM;

@@ -1032,7 +1032,7 @@ struct mlxsw_sp_ptp_state *mlxsw_sp1_ptp_init(struct mlxsw_sp *mlxsw_sp)
 	if (err)
 		return ERR_PTR(err);

-	ptp_state = kzalloc(sizeof(*ptp_state), GFP_KERNEL);
+	ptp_state = kzalloc_obj(*ptp_state, GFP_KERNEL);
 	if (!ptp_state)
 		return ERR_PTR(-ENOMEM);
 	ptp_state->common.mlxsw_sp = mlxsw_sp;
@@ -1358,7 +1358,7 @@ struct mlxsw_sp_ptp_state *mlxsw_sp2_ptp_init(struct mlxsw_sp *mlxsw_sp)
 	if (!MLXSW_CORE_RES_VALID(mlxsw_sp->core, FID))
 		return ERR_PTR(-EIO);

-	ptp_state = kzalloc(sizeof(*ptp_state), GFP_KERNEL);
+	ptp_state = kzalloc_obj(*ptp_state, GFP_KERNEL);
 	if (!ptp_state)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c
index 4243d3b883ff..5e159b326100 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c
@@ -365,9 +365,9 @@ static int mlxsw_sp_qdisc_create(struct mlxsw_sp_port *mlxsw_sp_port,
 		return err;

 	if (ops->num_classes) {
-		mlxsw_sp_qdisc->qdiscs = kcalloc(ops->num_classes,
-						 sizeof(*mlxsw_sp_qdisc->qdiscs),
-						 GFP_KERNEL);
+		mlxsw_sp_qdisc->qdiscs = kzalloc_objs(*mlxsw_sp_qdisc->qdiscs,
+						      ops->num_classes,
+						      GFP_KERNEL);
 		if (!mlxsw_sp_qdisc->qdiscs)
 			return -ENOMEM;

@@ -1332,7 +1332,7 @@ __mlxsw_sp_qdisc_ets_replace(struct mlxsw_sp_port *mlxsw_sp_port,
 	int err;

 	if (!ets_data) {
-		ets_data = kzalloc(sizeof(*ets_data), GFP_KERNEL);
+		ets_data = kzalloc_obj(*ets_data, GFP_KERNEL);
 		if (!ets_data)
 			return -ENOMEM;
 		mlxsw_sp_qdisc->ets_data = ets_data;
@@ -2021,7 +2021,7 @@ static int mlxsw_sp_qevent_mall_replace(struct mlxsw_sp *mlxsw_sp,
 		return -EOPNOTSUPP;
 	}

-	mall_entry = kzalloc(sizeof(*mall_entry), GFP_KERNEL);
+	mall_entry = kzalloc_obj(*mall_entry, GFP_KERNEL);
 	if (!mall_entry)
 		return -ENOMEM;
 	mall_entry->cookie = f->cookie;
@@ -2100,7 +2100,7 @@ static struct mlxsw_sp_qevent_block *mlxsw_sp_qevent_block_create(struct mlxsw_s
 {
 	struct mlxsw_sp_qevent_block *qevent_block;

-	qevent_block = kzalloc(sizeof(*qevent_block), GFP_KERNEL);
+	qevent_block = kzalloc_obj(*qevent_block, GFP_KERNEL);
 	if (!qevent_block)
 		return NULL;

@@ -2132,7 +2132,7 @@ mlxsw_sp_qevent_binding_create(struct mlxsw_sp_port *mlxsw_sp_port, u32 handle,
 {
 	struct mlxsw_sp_qevent_binding *binding;

-	binding = kzalloc(sizeof(*binding), GFP_KERNEL);
+	binding = kzalloc_obj(*binding, GFP_KERNEL);
 	if (!binding)
 		return ERR_PTR(-ENOMEM);

@@ -2321,7 +2321,7 @@ int mlxsw_sp_tc_qdisc_init(struct mlxsw_sp_port *mlxsw_sp_port)
 {
 	struct mlxsw_sp_qdisc_state *qdisc_state;

-	qdisc_state = kzalloc(sizeof(*qdisc_state), GFP_KERNEL);
+	qdisc_state = kzalloc_obj(*qdisc_state, GFP_KERNEL);
 	if (!qdisc_state)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index 2d0e89bd2fb9..417431895268 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -538,7 +538,7 @@ static struct mlxsw_sp_fib *mlxsw_sp_fib_create(struct mlxsw_sp *mlxsw_sp,
 	int err;

 	lpm_tree = mlxsw_sp->router->lpm.proto_trees[proto];
-	fib = kzalloc(sizeof(*fib), GFP_KERNEL);
+	fib = kzalloc_obj(*fib, GFP_KERNEL);
 	if (!fib)
 		return ERR_PTR(-ENOMEM);
 	err = rhashtable_init(&fib->ht, &mlxsw_sp_fib_ht_params);
@@ -717,9 +717,9 @@ static int mlxsw_sp_lpm_init(struct mlxsw_sp *mlxsw_sp)

 	max_trees = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_LPM_TREES);
 	mlxsw_sp->router->lpm.tree_count = max_trees - MLXSW_SP_LPM_TREE_MIN;
-	mlxsw_sp->router->lpm.trees = kcalloc(mlxsw_sp->router->lpm.tree_count,
-					     sizeof(struct mlxsw_sp_lpm_tree),
-					     GFP_KERNEL);
+	mlxsw_sp->router->lpm.trees = kzalloc_objs(struct mlxsw_sp_lpm_tree,
+						   mlxsw_sp->router->lpm.tree_count,
+						   GFP_KERNEL);
 	if (!mlxsw_sp->router->lpm.trees)
 		return -ENOMEM;

@@ -1038,8 +1038,8 @@ static int mlxsw_sp_vrs_init(struct mlxsw_sp *mlxsw_sp)
 		return -EIO;

 	max_vrs = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_VRS);
-	mlxsw_sp->router->vrs = kcalloc(max_vrs, sizeof(struct mlxsw_sp_vr),
-					GFP_KERNEL);
+	mlxsw_sp->router->vrs = kzalloc_objs(struct mlxsw_sp_vr, max_vrs,
+					     GFP_KERNEL);
 	if (!mlxsw_sp->router->vrs)
 		return -ENOMEM;

@@ -1095,7 +1095,7 @@ mlxsw_sp_crif_alloc(struct net_device *dev)
 {
 	struct mlxsw_sp_crif *crif;

-	crif = kzalloc(sizeof(*crif), GFP_KERNEL);
+	crif = kzalloc_obj(*crif, GFP_KERNEL);
 	if (!crif)
 		return NULL;

@@ -1178,7 +1178,7 @@ mlxsw_sp_ipip_entry_alloc(struct mlxsw_sp *mlxsw_sp,
 	int err;

 	ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipipt];
-	ipip_entry = kzalloc(sizeof(*ipip_entry), GFP_KERNEL);
+	ipip_entry = kzalloc_obj(*ipip_entry, GFP_KERNEL);
 	if (!ipip_entry)
 		return ERR_PTR(-ENOMEM);

@@ -2261,7 +2261,7 @@ mlxsw_sp_neigh_entry_alloc(struct mlxsw_sp *mlxsw_sp, struct neighbour *n,
 {
 	struct mlxsw_sp_neigh_entry *neigh_entry;

-	neigh_entry = kzalloc(sizeof(*neigh_entry), GFP_KERNEL);
+	neigh_entry = kzalloc_obj(*neigh_entry, GFP_KERNEL);
 	if (!neigh_entry)
 		return NULL;

@@ -2856,7 +2856,7 @@ static int mlxsw_sp_router_schedule_work(struct net *net,
 	if (!net_eq(net, mlxsw_sp_net(router->mlxsw_sp)))
 		return NOTIFY_DONE;

-	net_work = kzalloc(sizeof(*net_work), GFP_ATOMIC);
+	net_work = kzalloc_obj(*net_work, GFP_ATOMIC);
 	if (!net_work)
 		return NOTIFY_BAD;

@@ -3172,7 +3172,7 @@ mlxsw_sp_nexthop_counter_alloc(struct mlxsw_sp *mlxsw_sp)
 	struct mlxsw_sp_nexthop_counter *nhct;
 	int err;

-	nhct = kzalloc(sizeof(*nhct), GFP_KERNEL);
+	nhct = kzalloc_obj(*nhct, GFP_KERNEL);
 	if (!nhct)
 		return ERR_PTR(-ENOMEM);

@@ -3404,7 +3404,7 @@ mlxsw_sp_nexthop_group_vr_entry_create(struct mlxsw_sp_nexthop_group *nh_grp,
 	struct mlxsw_sp_nexthop_group_vr_entry *vr_entry;
 	int err;

-	vr_entry = kzalloc(sizeof(*vr_entry), GFP_KERNEL);
+	vr_entry = kzalloc_obj(*vr_entry, GFP_KERNEL);
 	if (!vr_entry)
 		return -ENOMEM;

@@ -5198,7 +5198,7 @@ mlxsw_sp_nexthop_obj_group_info_init(struct mlxsw_sp *mlxsw_sp,
 		return -EINVAL;
 	}

-	nhgi = kzalloc(struct_size(nhgi, nexthops, nhs), GFP_KERNEL);
+	nhgi = kzalloc_flex(*nhgi, nexthops, nhs, GFP_KERNEL);
 	if (!nhgi)
 		return -ENOMEM;
 	nh_grp->nhgi = nhgi;
@@ -5304,7 +5304,7 @@ mlxsw_sp_nexthop_obj_group_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_nexthop_group *nh_grp;
 	int err;

-	nh_grp = kzalloc(sizeof(*nh_grp), GFP_KERNEL);
+	nh_grp = kzalloc_obj(*nh_grp, GFP_KERNEL);
 	if (!nh_grp)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&nh_grp->vr_list);
@@ -5779,7 +5779,7 @@ mlxsw_sp_nexthop4_group_info_init(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_nexthop *nh;
 	int err, i;

-	nhgi = kzalloc(struct_size(nhgi, nexthops, nhs), GFP_KERNEL);
+	nhgi = kzalloc_flex(*nhgi, nexthops, nhs, GFP_KERNEL);
 	if (!nhgi)
 		return -ENOMEM;
 	nh_grp->nhgi = nhgi;
@@ -5841,7 +5841,7 @@ mlxsw_sp_nexthop4_group_create(struct mlxsw_sp *mlxsw_sp, struct fib_info *fi)
 	struct mlxsw_sp_nexthop_group *nh_grp;
 	int err;

-	nh_grp = kzalloc(sizeof(*nh_grp), GFP_KERNEL);
+	nh_grp = kzalloc_obj(*nh_grp, GFP_KERNEL);
 	if (!nh_grp)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&nh_grp->vr_list);
@@ -6481,7 +6481,7 @@ mlxsw_sp_fib4_entry_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_fib_entry *fib_entry;
 	int err;

-	fib4_entry = kzalloc(sizeof(*fib4_entry), GFP_KERNEL);
+	fib4_entry = kzalloc_obj(*fib4_entry, GFP_KERNEL);
 	if (!fib4_entry)
 		return ERR_PTR(-ENOMEM);
 	fib_entry = &fib4_entry->common;
@@ -6601,7 +6601,7 @@ mlxsw_sp_fib_node_create(struct mlxsw_sp_fib *fib, const void *addr,
 {
 	struct mlxsw_sp_fib_node *fib_node;

-	fib_node = kzalloc(sizeof(*fib_node), GFP_KERNEL);
+	fib_node = kzalloc_obj(*fib_node, GFP_KERNEL);
 	if (!fib_node)
 		return NULL;

@@ -6906,7 +6906,7 @@ static struct mlxsw_sp_rt6 *mlxsw_sp_rt6_create(struct fib6_info *rt)
 {
 	struct mlxsw_sp_rt6 *mlxsw_sp_rt6;

-	mlxsw_sp_rt6 = kzalloc(sizeof(*mlxsw_sp_rt6), GFP_KERNEL);
+	mlxsw_sp_rt6 = kzalloc_obj(*mlxsw_sp_rt6, GFP_KERNEL);
 	if (!mlxsw_sp_rt6)
 		return ERR_PTR(-ENOMEM);

@@ -7032,8 +7032,7 @@ mlxsw_sp_nexthop6_group_info_init(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_nexthop *nh;
 	int err, i;

-	nhgi = kzalloc(struct_size(nhgi, nexthops, fib6_entry->nrt6),
-		       GFP_KERNEL);
+	nhgi = kzalloc_flex(*nhgi, nexthops, fib6_entry->nrt6, GFP_KERNEL);
 	if (!nhgi)
 		return -ENOMEM;
 	nh_grp->nhgi = nhgi;
@@ -7099,7 +7098,7 @@ mlxsw_sp_nexthop6_group_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_nexthop_group *nh_grp;
 	int err;

-	nh_grp = kzalloc(sizeof(*nh_grp), GFP_KERNEL);
+	nh_grp = kzalloc_obj(*nh_grp, GFP_KERNEL);
 	if (!nh_grp)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&nh_grp->vr_list);
@@ -7378,7 +7377,7 @@ mlxsw_sp_fib6_entry_create(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
 	int err, i;

-	fib6_entry = kzalloc(sizeof(*fib6_entry), GFP_KERNEL);
+	fib6_entry = kzalloc_obj(*fib6_entry, GFP_KERNEL);
 	if (!fib6_entry)
 		return ERR_PTR(-ENOMEM);
 	fib_entry = &fib6_entry->common;
@@ -7827,7 +7826,7 @@ mlxsw_sp_router_fib6_work_init(struct mlxsw_sp_fib6_event_work *fib6_work,

 	nrt6 = fen6_info->nsiblings + 1;

-	rt_arr = kcalloc(nrt6, sizeof(struct fib6_info *), GFP_ATOMIC);
+	rt_arr = kzalloc_objs(struct fib6_info *, nrt6, GFP_ATOMIC);
 	if (!rt_arr)
 		return -ENOMEM;

@@ -8139,7 +8138,7 @@ static int mlxsw_sp_router_fib_event(struct notifier_block *nb,
 		break;
 	}

-	fib_work = kzalloc(sizeof(*fib_work), GFP_ATOMIC);
+	fib_work = kzalloc_obj(*fib_work, GFP_ATOMIC);
 	if (!fib_work)
 		return NOTIFY_BAD;

@@ -8542,7 +8541,7 @@ mlxsw_sp_router_hwstats_notify_schedule(struct net_device *dev)
 	 * later.
 	 */

-	hws_work = kzalloc(sizeof(*hws_work), GFP_KERNEL);
+	hws_work = kzalloc_obj(*hws_work, GFP_KERNEL);
 	if (!hws_work)
 		return;

@@ -8947,7 +8946,7 @@ mlxsw_sp_rif_mac_profile_alloc(const char *mac)
 {
 	struct mlxsw_sp_rif_mac_profile *profile;

-	profile = kzalloc(sizeof(*profile), GFP_KERNEL);
+	profile = kzalloc_obj(*profile, GFP_KERNEL);
 	if (!profile)
 		return NULL;

@@ -9594,7 +9593,7 @@ static int mlxsw_sp_inet6addr_event(struct notifier_block *nb,
 	if (event == NETDEV_UP)
 		return NOTIFY_DONE;

-	inet6addr_work = kzalloc(sizeof(*inet6addr_work), GFP_ATOMIC);
+	inet6addr_work = kzalloc_obj(*inet6addr_work, GFP_ATOMIC);
 	if (!inet6addr_work)
 		return NOTIFY_BAD;

@@ -11069,9 +11068,8 @@ static int mlxsw_sp_rifs_init(struct mlxsw_sp *mlxsw_sp)
 	mlxsw_sp->router->max_rif_mac_profile =
 		MLXSW_CORE_RES_GET(core, MAX_RIF_MAC_PROFILES);

-	mlxsw_sp->router->rifs = kcalloc(max_rifs,
-					 sizeof(struct mlxsw_sp_rif *),
-					 GFP_KERNEL);
+	mlxsw_sp->router->rifs = kzalloc_objs(struct mlxsw_sp_rif *, max_rifs,
+					      GFP_KERNEL);
 	if (!mlxsw_sp->router->rifs)
 		return -ENOMEM;

@@ -11584,7 +11582,7 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
 	struct notifier_block *nb;
 	int err;

-	router = kzalloc(sizeof(*mlxsw_sp->router), GFP_KERNEL);
+	router = kzalloc_obj(*mlxsw_sp->router, GFP_KERNEL);
 	if (!router)
 		return -ENOMEM;
 	mutex_init(&router->lock);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c
index 32d2e61f2b82..79b0ed4e4c71 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c
@@ -87,7 +87,7 @@ int mlxsw_sp_span_init(struct mlxsw_sp *mlxsw_sp)
 		return -EIO;

 	entries_count = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_SPAN);
-	span = kzalloc(struct_size(span, entries, entries_count), GFP_KERNEL);
+	span = kzalloc_flex(*span, entries, entries_count, GFP_KERNEL);
 	if (!span)
 		return -ENOMEM;
 	refcount_set(&span->policer_id_base_ref_count, 0);
@@ -1120,7 +1120,7 @@ mlxsw_sp_span_analyzed_port_create(struct mlxsw_sp_span *span,
 	struct mlxsw_sp_span_analyzed_port *analyzed_port;
 	int err;

-	analyzed_port = kzalloc(sizeof(*analyzed_port), GFP_KERNEL);
+	analyzed_port = kzalloc_obj(*analyzed_port, GFP_KERNEL);
 	if (!analyzed_port)
 		return ERR_PTR(-ENOMEM);

@@ -1505,7 +1505,7 @@ mlxsw_sp_span_trigger_entry_create(struct mlxsw_sp_span *span,
 	struct mlxsw_sp_span_trigger_entry *trigger_entry;
 	int err;

-	trigger_entry = kzalloc(sizeof(*trigger_entry), GFP_KERNEL);
+	trigger_entry = kzalloc_obj(*trigger_entry, GFP_KERNEL);
 	if (!trigger_entry)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
index a48bf342084d..7c386ee2ea74 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
@@ -262,7 +262,7 @@ mlxsw_sp_bridge_device_create(struct mlxsw_sp_bridge *bridge,
 		return ERR_PTR(-EINVAL);
 	}

-	bridge_device = kzalloc(sizeof(*bridge_device), GFP_KERNEL);
+	bridge_device = kzalloc_obj(*bridge_device, GFP_KERNEL);
 	if (!bridge_device)
 		return ERR_PTR(-ENOMEM);

@@ -478,7 +478,7 @@ mlxsw_sp_bridge_port_create(struct mlxsw_sp_bridge_device *bridge_device,
 	struct mlxsw_sp_port *mlxsw_sp_port;
 	int err;

-	bridge_port = kzalloc(sizeof(*bridge_port), GFP_KERNEL);
+	bridge_port = kzalloc_obj(*bridge_port, GFP_KERNEL);
 	if (!bridge_port)
 		return ERR_PTR(-ENOMEM);

@@ -625,7 +625,7 @@ mlxsw_sp_bridge_vlan_create(struct mlxsw_sp_bridge_port *bridge_port, u16 vid)
 {
 	struct mlxsw_sp_bridge_vlan *bridge_vlan;

-	bridge_vlan = kzalloc(sizeof(*bridge_vlan), GFP_KERNEL);
+	bridge_vlan = kzalloc_obj(*bridge_vlan, GFP_KERNEL);
 	if (!bridge_vlan)
 		return NULL;

@@ -1131,7 +1131,7 @@ mlxsw_sp_mdb_entry_port_get(struct mlxsw_sp *mlxsw_sp,
 	if (err)
 		return ERR_PTR(err);

-	mdb_entry_port = kzalloc(sizeof(*mdb_entry_port), GFP_KERNEL);
+	mdb_entry_port = kzalloc_obj(*mdb_entry_port, GFP_KERNEL);
 	if (!mdb_entry_port) {
 		err = -ENOMEM;
 		goto err_mdb_entry_port_alloc;
@@ -1195,7 +1195,7 @@ mlxsw_sp_mdb_entry_mrouter_port_get(struct mlxsw_sp *mlxsw_sp,
 	if (err)
 		return ERR_PTR(err);

-	mdb_entry_port = kzalloc(sizeof(*mdb_entry_port), GFP_KERNEL);
+	mdb_entry_port = kzalloc_obj(*mdb_entry_port, GFP_KERNEL);
 	if (!mdb_entry_port) {
 		err = -ENOMEM;
 		goto err_mdb_entry_port_alloc;
@@ -2027,7 +2027,7 @@ mlxsw_sp_mc_mdb_entry_init(struct mlxsw_sp *mlxsw_sp,
 	struct mlxsw_sp_mdb_entry *mdb_entry;
 	int err;

-	mdb_entry = kzalloc(sizeof(*mdb_entry), GFP_KERNEL);
+	mdb_entry = kzalloc_obj(*mdb_entry, GFP_KERNEL);
 	if (!mdb_entry)
 		return ERR_PTR(-ENOMEM);

@@ -3784,7 +3784,7 @@ static int mlxsw_sp_switchdev_event(struct notifier_block *unused,
 	if (!mlxsw_sp_port_dev_lower_find_rcu(br_dev))
 		return NOTIFY_DONE;

-	switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+	switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 	if (!switchdev_work)
 		return NOTIFY_BAD;

@@ -4169,7 +4169,7 @@ int mlxsw_sp_switchdev_init(struct mlxsw_sp *mlxsw_sp)
 {
 	struct mlxsw_sp_bridge *bridge;

-	bridge = kzalloc(sizeof(*mlxsw_sp->bridge), GFP_KERNEL);
+	bridge = kzalloc_obj(*mlxsw_sp->bridge, GFP_KERNEL);
 	if (!bridge)
 		return -ENOMEM;
 	mlxsw_sp->bridge = bridge;
diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c
index 4aaa928bf8ab..e4e1af365460 100644
--- a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c
+++ b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c
@@ -1640,7 +1640,7 @@ static int fbnic_alloc_napi_vector(struct fbnic_dev *fbd, struct fbnic_net *fbn,
 		return -EIO;

 	/* Allocate NAPI vector and queue triads */
-	nv = kzalloc(struct_size(nv, qt, qt_count), GFP_KERNEL);
+	nv = kzalloc_flex(*nv, qt, qt_count, GFP_KERNEL);
 	if (!nv)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/micrel/ksz884x.c b/drivers/net/ethernet/micrel/ksz884x.c
index 491e9ce3d9b0..e594ea78b118 100644
--- a/drivers/net/ethernet/micrel/ksz884x.c
+++ b/drivers/net/ethernet/micrel/ksz884x.c
@@ -3991,8 +3991,8 @@ static void ksz_update_timer(struct ksz_timer_info *info)
  */
 static int ksz_alloc_soft_desc(struct ksz_desc_info *desc_info, int transmit)
 {
-	desc_info->ring = kcalloc(desc_info->alloc, sizeof(struct ksz_desc),
-				  GFP_KERNEL);
+	desc_info->ring = kzalloc_objs(struct ksz_desc, desc_info->alloc,
+				       GFP_KERNEL);
 	if (!desc_info->ring)
 		return 1;
 	hw_init_desc(desc_info, transmit);
@@ -6577,7 +6577,7 @@ static int pcidev_init(struct pci_dev *pdev, const struct pci_device_id *id)

 	result = -ENOMEM;

-	info = kzalloc(sizeof(struct platform_info), GFP_KERNEL);
+	info = kzalloc_obj(struct platform_info, GFP_KERNEL);
 	if (!info)
 		goto pcidev_init_dev_err;

@@ -6630,7 +6630,7 @@ static int pcidev_init(struct pci_dev *pdev, const struct pci_device_id *id)
 			mib_port_count = SWITCH_PORT_NUM;
 		}
 		hw->mib_port_cnt = TOTAL_PORT_NUM;
-		hw->ksz_switch = kzalloc(sizeof(struct ksz_switch), GFP_KERNEL);
+		hw->ksz_switch = kzalloc_obj(struct ksz_switch, GFP_KERNEL);
 		if (!hw->ksz_switch)
 			goto pcidev_init_alloc_err;

diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
index e4c542fc6c2b..7ab6ad877a3c 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.c
+++ b/drivers/net/ethernet/microchip/lan743x_main.c
@@ -2141,7 +2141,7 @@ static int lan743x_tx_ring_init(struct lan743x_tx *tx)
 	tx->ring_cpu_ptr = (struct lan743x_tx_descriptor *)cpu_ptr;
 	tx->ring_dma_ptr = dma_ptr;

-	cpu_ptr = kcalloc(tx->ring_size, sizeof(*tx->buffer_info), GFP_KERNEL);
+	cpu_ptr = kzalloc_objs(*tx->buffer_info, tx->ring_size, GFP_KERNEL);
 	if (!cpu_ptr) {
 		ret = -ENOMEM;
 		goto cleanup;
@@ -2686,8 +2686,7 @@ static int lan743x_rx_ring_init(struct lan743x_rx *rx)
 	rx->ring_cpu_ptr = (struct lan743x_rx_descriptor *)cpu_ptr;
 	rx->ring_dma_ptr = dma_ptr;

-	cpu_ptr = kcalloc(rx->ring_size, sizeof(*rx->buffer_info),
-			  GFP_KERNEL);
+	cpu_ptr = kzalloc_objs(*rx->buffer_info, rx->ring_size, GFP_KERNEL);
 	if (!cpu_ptr) {
 		ret = -ENOMEM;
 		goto cleanup;
diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdb.c b/drivers/net/ethernet/microchip/lan966x/lan966x_fdb.c
index 2ea263e893ee..cddd5dd35feb 100644
--- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdb.c
+++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdb.c
@@ -46,7 +46,7 @@ static void lan966x_fdb_add_entry(struct lan966x *lan966x,
 		return;
 	}

-	fdb_entry = kzalloc(sizeof(*fdb_entry), GFP_KERNEL);
+	fdb_entry = kzalloc_obj(*fdb_entry, GFP_KERNEL);
 	if (!fdb_entry)
 		return;

@@ -262,7 +262,7 @@ int lan966x_handle_fdb(struct net_device *dev,
 		    !fdb_info->added_by_user)
 			break;

-		fdb_work = kzalloc(sizeof(*fdb_work), GFP_ATOMIC);
+		fdb_work = kzalloc_obj(*fdb_work, GFP_ATOMIC);
 		if (!fdb_work)
 			return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c
index 502670718104..13e22179f57a 100644
--- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c
+++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c
@@ -200,8 +200,8 @@ static int lan966x_fdma_tx_alloc(struct lan966x_tx *tx)
 	struct fdma *fdma = &tx->fdma;
 	int err;

-	tx->dcbs_buf = kcalloc(fdma->n_dcbs, sizeof(struct lan966x_tx_dcb_buf),
-			       GFP_KERNEL);
+	tx->dcbs_buf = kzalloc_objs(struct lan966x_tx_dcb_buf, fdma->n_dcbs,
+				    GFP_KERNEL);
 	if (!tx->dcbs_buf)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_mac.c b/drivers/net/ethernet/microchip/lan966x/lan966x_mac.c
index baa3a30c039f..7a2294a0d099 100644
--- a/drivers/net/ethernet/microchip/lan966x/lan966x_mac.c
+++ b/drivers/net/ethernet/microchip/lan966x/lan966x_mac.c
@@ -206,7 +206,7 @@ static struct lan966x_mac_entry *lan966x_mac_alloc_entry(struct lan966x_port *po
 {
 	struct lan966x_mac_entry *mac_entry;

-	mac_entry = kzalloc(sizeof(*mac_entry), GFP_ATOMIC);
+	mac_entry = kzalloc_obj(*mac_entry, GFP_ATOMIC);
 	if (!mac_entry)
 		return NULL;

diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_mdb.c b/drivers/net/ethernet/microchip/lan966x/lan966x_mdb.c
index 2af55268bf4d..aef4bc288e05 100644
--- a/drivers/net/ethernet/microchip/lan966x/lan966x_mdb.c
+++ b/drivers/net/ethernet/microchip/lan966x/lan966x_mdb.c
@@ -74,7 +74,7 @@ lan966x_mdb_entry_add(struct lan966x *lan966x,
 {
 	struct lan966x_mdb_entry *mdb_entry;

-	mdb_entry = kzalloc(sizeof(*mdb_entry), GFP_KERNEL);
+	mdb_entry = kzalloc_obj(*mdb_entry, GFP_KERNEL);
 	if (!mdb_entry)
 		return ERR_PTR(-ENOMEM);

@@ -184,7 +184,7 @@ lan966x_pgid_entry_add(struct lan966x *lan966x, int index, u16 ports)
 {
 	struct lan966x_pgid_entry *pgid_entry;

-	pgid_entry = kzalloc(sizeof(*pgid_entry), GFP_KERNEL);
+	pgid_entry = kzalloc_obj(*pgid_entry, GFP_KERNEL);
 	if (!pgid_entry)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_vcap_impl.c b/drivers/net/ethernet/microchip/lan966x/lan966x_vcap_impl.c
index 2a37fc1ba4bc..cb07178f55fa 100644
--- a/drivers/net/ethernet/microchip/lan966x/lan966x_vcap_impl.c
+++ b/drivers/net/ethernet/microchip/lan966x/lan966x_vcap_impl.c
@@ -611,7 +611,7 @@ lan966x_vcap_admin_alloc(struct lan966x *lan966x, struct vcap_control *ctrl,
 {
 	struct vcap_admin *admin;

-	admin = kzalloc(sizeof(*admin), GFP_KERNEL);
+	admin = kzalloc_obj(*admin, GFP_KERNEL);
 	if (!admin)
 		return ERR_PTR(-ENOMEM);

@@ -712,7 +712,7 @@ int lan966x_vcap_init(struct lan966x *lan966x)
 	struct vcap_admin *admin;
 	struct dentry *dir;

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c b/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
index 1282f5c3ee6d..57a24cbfb398 100644
--- a/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
+++ b/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
@@ -186,9 +186,7 @@ static int lan969x_fdma_tx_alloc(struct sparx5 *sparx5)
 	struct fdma *fdma = &tx->fdma;
 	int err;

-	tx->dbs = kcalloc(fdma->n_dcbs,
-			  sizeof(struct sparx5_tx_buf),
-			  GFP_KERNEL);
+	tx->dbs = kzalloc_objs(struct sparx5_tx_buf, fdma->n_dcbs, GFP_KERNEL);
 	if (!tx->dbs)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c b/drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
index 5c46d81de530..19321de0712e 100644
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
@@ -585,7 +585,7 @@ int sparx5_config_dsm_calendar(struct sparx5 *sparx5)
 	struct sparx5_calendar_data *data;
 	int err = 0;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c
index 582145713cfd..8c7894a69e5c 100644
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c
@@ -889,8 +889,8 @@ static int mchp_sparx5_probe(struct platform_device *pdev)
 	}
 	sparx5->port_count = of_get_child_count(ports);

-	configs = kcalloc(sparx5->port_count,
-			  sizeof(struct initial_port_config), GFP_KERNEL);
+	configs = kzalloc_objs(struct initial_port_config, sparx5->port_count,
+			       GFP_KERNEL);
 	if (!configs) {
 		err = -ENOMEM;
 		goto cleanup_pnode;
diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c b/drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
index 0a71abbd3da5..6743c5ef3efd 100644
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
@@ -398,7 +398,7 @@ static int sparx5_switchdev_event(struct notifier_block *nb,
 	case SWITCHDEV_FDB_ADD_TO_DEVICE:
 		fallthrough;
 	case SWITCHDEV_FDB_DEL_TO_DEVICE:
-		switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+		switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 		if (!switchdev_work)
 			return NOTIFY_BAD;

@@ -465,7 +465,7 @@ static int sparx5_alloc_mdb_entry(struct sparx5 *sparx5,
 	u16 pgid_idx;
 	int err;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c b/drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
index 4dc1ebd5d510..57d88fe32752 100644
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
@@ -1464,7 +1464,7 @@ static int sparx5_tc_flower_template_create(struct net_device *ndev,
 		return -EBUSY;
 	}

-	ftp = kzalloc(sizeof(*ftp), GFP_KERNEL);
+	ftp = kzalloc_obj(*ftp, GFP_KERNEL);
 	if (!ftp)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c b/drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
index 6b4d1d7b9730..cd0f44a6c88e 100644
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
@@ -60,7 +60,7 @@ static int sparx5_tc_matchall_replace(struct net_device *ndev,
 	}
 	action = &tmo->rule->action.entries[0];

-	mall_entry = kzalloc(sizeof(*mall_entry), GFP_KERNEL);
+	mall_entry = kzalloc_obj(*mall_entry, GFP_KERNEL);
 	if (!mall_entry)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c b/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
index 25066ddb8d4d..4bf3be00d627 100644
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
@@ -1944,7 +1944,7 @@ sparx5_vcap_admin_alloc(struct sparx5 *sparx5, struct vcap_control *ctrl,
 {
 	struct vcap_admin *admin;

-	admin = kzalloc(sizeof(*admin), GFP_KERNEL);
+	admin = kzalloc_obj(*admin, GFP_KERNEL);
 	if (!admin)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&admin->list);
@@ -2047,7 +2047,7 @@ int sparx5_vcap_init(struct sparx5 *sparx5)
 	 *   - Initialize VCAP blocks
 	 *   - Configure port keysets
 	 */
-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/vcap/vcap_api.c b/drivers/net/ethernet/microchip/vcap/vcap_api.c
index 2687765abe52..29fe5101db4c 100644
--- a/drivers/net/ethernet/microchip/vcap/vcap_api.c
+++ b/drivers/net/ethernet/microchip/vcap/vcap_api.c
@@ -1004,7 +1004,7 @@ static struct vcap_rule_internal *vcap_dup_rule(struct vcap_rule_internal *ri,
 	struct vcap_rule_internal *duprule;

 	/* Allocate the client part */
-	duprule = kzalloc(sizeof(*duprule), GFP_KERNEL);
+	duprule = kzalloc_obj(*duprule, GFP_KERNEL);
 	if (!duprule)
 		return ERR_PTR(-ENOMEM);
 	*duprule = *ri;
@@ -1309,7 +1309,7 @@ static void vcap_rule_alloc_keyfield(struct vcap_rule_internal *ri,
 {
 	struct vcap_client_keyfield *field;

-	field = kzalloc(sizeof(*field), GFP_KERNEL);
+	field = kzalloc_obj(*field, GFP_KERNEL);
 	if (!field)
 		return;
 	INIT_LIST_HEAD(&field->ctrl.list);
@@ -1418,7 +1418,7 @@ static void vcap_rule_alloc_actionfield(struct vcap_rule_internal *ri,
 {
 	struct vcap_client_actionfield *field;

-	field = kzalloc(sizeof(*field), GFP_KERNEL);
+	field = kzalloc_obj(*field, GFP_KERNEL);
 	if (!field)
 		return;
 	INIT_LIST_HEAD(&field->ctrl.list);
@@ -2345,7 +2345,7 @@ struct vcap_rule *vcap_alloc_rule(struct vcap_control *vctrl,
 	}

 	/* Create a container for the rule and return it */
-	ri = kzalloc(sizeof(*ri), GFP_KERNEL);
+	ri = kzalloc_obj(*ri, GFP_KERNEL);
 	if (!ri) {
 		err = -ENOMEM;
 		goto out_unlock;
@@ -2689,7 +2689,7 @@ static int vcap_rule_add_key(struct vcap_rule *rule,
 		return -EINVAL;
 	}

-	field = kzalloc(sizeof(*field), GFP_KERNEL);
+	field = kzalloc_obj(*field, GFP_KERNEL);
 	if (!field)
 		return -ENOMEM;
 	memcpy(&field->data, data, sizeof(field->data));
@@ -2857,7 +2857,7 @@ static int vcap_rule_add_action(struct vcap_rule *rule,
 		return -EINVAL;
 	}

-	field = kzalloc(sizeof(*field), GFP_KERNEL);
+	field = kzalloc_obj(*field, GFP_KERNEL);
 	if (!field)
 		return -ENOMEM;
 	memcpy(&field->data, data, sizeof(field->data));
@@ -3125,7 +3125,7 @@ static int vcap_enable(struct vcap_control *vctrl, struct net_device *ndev,
 	if (!admin)
 		return -ENOENT;

-	eport = kzalloc(sizeof(*eport), GFP_KERNEL);
+	eport = kzalloc_obj(*eport, GFP_KERNEL);
 	if (!eport)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c b/drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c
index 16eb3de60eb6..c57919278783 100644
--- a/drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c
+++ b/drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c
@@ -2037,7 +2037,7 @@ static void vcap_api_filter_unsupported_keys_test(struct kunit *test)
 	/* Add all keys to the rule */
 	INIT_LIST_HEAD(&ri.data.keyfields);
 	for (idx = 0; idx < ARRAY_SIZE(keylist); idx++) {
-		ckf = kzalloc(sizeof(*ckf), GFP_KERNEL);
+		ckf = kzalloc_obj(*ckf, GFP_KERNEL);
 		if (ckf) {
 			ckf->ctrl.key = keylist[idx];
 			list_add_tail(&ckf->ctrl.list, &ri.data.keyfields);
@@ -2161,7 +2161,7 @@ static void vcap_api_filter_keylist_test(struct kunit *test)
 	/* Add all keys to the rule */
 	INIT_LIST_HEAD(&ri.data.keyfields);
 	for (idx = 0; idx < ARRAY_SIZE(keylist); idx++) {
-		ckf = kzalloc(sizeof(*ckf), GFP_KERNEL);
+		ckf = kzalloc_obj(*ckf, GFP_KERNEL);
 		if (ckf) {
 			ckf->ctrl.key = keylist[idx];
 			list_add_tail(&ckf->ctrl.list, &ri.data.keyfields);
diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c b/drivers/net/ethernet/microsoft/mana/gdma_main.c
index 0055c231acf6..dc7c29240cac 100644
--- a/drivers/net/ethernet/microsoft/mana/gdma_main.c
+++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c
@@ -634,7 +634,7 @@ static void mana_gd_process_eqe(struct gdma_queue *eq)
 			break;
 		}

-		mns_wk = kzalloc(sizeof(*mns_wk), GFP_ATOMIC);
+		mns_wk = kzalloc_obj(*mns_wk, GFP_ATOMIC);
 		if (!mns_wk) {
 			module_put(THIS_MODULE);
 			break;
@@ -923,7 +923,7 @@ int mana_gd_create_hwc_queue(struct gdma_dev *gd,
 	struct gdma_queue *queue;
 	int err;

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue)
 		return -ENOMEM;

@@ -1062,7 +1062,7 @@ int mana_gd_create_mana_eq(struct gdma_dev *gd,
 	if (spec->type != GDMA_EQ)
 		return -EINVAL;

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue)
 		return -ENOMEM;

@@ -1115,7 +1115,7 @@ int mana_gd_create_mana_wq_cq(struct gdma_dev *gd,
 	    spec->type != GDMA_RQ)
 		return -EINVAL;

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue)
 		return -ENOMEM;

@@ -1625,7 +1625,7 @@ static int mana_gd_setup_dyn_irqs(struct pci_dev *pdev, int nvec)
 	bool skip_first_cpu = false;
 	int *irqs, irq, err, i;

-	irqs = kmalloc_array(nvec, sizeof(int), GFP_KERNEL);
+	irqs = kmalloc_objs(int, nvec, GFP_KERNEL);
 	if (!irqs)
 		return -ENOMEM;

@@ -1636,7 +1636,7 @@ static int mana_gd_setup_dyn_irqs(struct pci_dev *pdev, int nvec)
 	 * further used in irq_setup()
 	 */
 	for (i = 1; i <= nvec; i++) {
-		gic = kzalloc(sizeof(*gic), GFP_KERNEL);
+		gic = kzalloc_obj(*gic, GFP_KERNEL);
 		if (!gic) {
 			err = -ENOMEM;
 			goto free_irq;
@@ -1707,14 +1707,14 @@ static int mana_gd_setup_irqs(struct pci_dev *pdev, int nvec)
 	unsigned int cpu;
 	int err, i;

-	irqs = kmalloc_array(nvec, sizeof(int), GFP_KERNEL);
+	irqs = kmalloc_objs(int, nvec, GFP_KERNEL);
 	if (!irqs)
 		return -ENOMEM;

 	start_irqs = irqs;

 	for (i = 0; i < nvec; i++) {
-		gic = kzalloc(sizeof(*gic), GFP_KERNEL);
+		gic = kzalloc_obj(*gic, GFP_KERNEL);
 		if (!gic) {
 			err = -ENOMEM;
 			goto free_irq;
@@ -2071,7 +2071,7 @@ static int mana_gd_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

 		dev_info(&pdev->dev, "Start MANA recovery mode\n");

-		dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+		dev = kzalloc_obj(*dev, GFP_KERNEL);
 		if (!dev)
 			return err;

diff --git a/drivers/net/ethernet/microsoft/mana/hw_channel.c b/drivers/net/ethernet/microsoft/mana/hw_channel.c
index aa4e2731e2ba..f2221e65a6a3 100644
--- a/drivers/net/ethernet/microsoft/mana/hw_channel.c
+++ b/drivers/net/ethernet/microsoft/mana/hw_channel.c
@@ -407,7 +407,7 @@ static int mana_hwc_create_cq(struct hw_channel_context *hwc, u16 q_depth,
 	if (cq_size < MANA_MIN_QSIZE)
 		cq_size = MANA_MIN_QSIZE;

-	hwc_cq = kzalloc(sizeof(*hwc_cq), GFP_KERNEL);
+	hwc_cq = kzalloc_obj(*hwc_cq, GFP_KERNEL);
 	if (!hwc_cq)
 		return -ENOMEM;

@@ -426,7 +426,7 @@ static int mana_hwc_create_cq(struct hw_channel_context *hwc, u16 q_depth,
 	}
 	hwc_cq->gdma_cq = cq;

-	comp_buf = kcalloc(q_depth, sizeof(*comp_buf), GFP_KERNEL);
+	comp_buf = kzalloc_objs(*comp_buf, q_depth, GFP_KERNEL);
 	if (!comp_buf) {
 		err = -ENOMEM;
 		goto out;
@@ -461,7 +461,7 @@ static int mana_hwc_alloc_dma_buf(struct hw_channel_context *hwc, u16 q_depth,
 	int err;
 	u16 i;

-	dma_buf = kzalloc(struct_size(dma_buf, reqs, q_depth), GFP_KERNEL);
+	dma_buf = kzalloc_flex(*dma_buf, reqs, q_depth, GFP_KERNEL);
 	if (!dma_buf)
 		return -ENOMEM;

@@ -539,7 +539,7 @@ static int mana_hwc_create_wq(struct hw_channel_context *hwc,
 	if (queue_size < MANA_MIN_QSIZE)
 		queue_size = MANA_MIN_QSIZE;

-	hwc_wq = kzalloc(sizeof(*hwc_wq), GFP_KERNEL);
+	hwc_wq = kzalloc_obj(*hwc_wq, GFP_KERNEL);
 	if (!hwc_wq)
 		return -ENOMEM;

@@ -644,7 +644,7 @@ static int mana_hwc_test_channel(struct hw_channel_context *hwc, u16 q_depth,
 			return err;
 	}

-	ctx = kcalloc(q_depth, sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_objs(*ctx, q_depth, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -750,7 +750,7 @@ int mana_hwc_create_channel(struct gdma_context *gc)
 	u16 q_depth_max;
 	int err;

-	hwc = kzalloc(sizeof(*hwc), GFP_KERNEL);
+	hwc = kzalloc_obj(*hwc, GFP_KERNEL);
 	if (!hwc)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c
index 9b5a72ada5c4..5c9704f2041a 100644
--- a/drivers/net/ethernet/microsoft/mana/mana_en.c
+++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
@@ -491,9 +491,8 @@ netdev_tx_t mana_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 	if (pkg.wqe_req.num_sge <= ARRAY_SIZE(pkg.sgl_array)) {
 		pkg.wqe_req.sgl = pkg.sgl_array;
 	} else {
-		pkg.sgl_ptr = kmalloc_array(pkg.wqe_req.num_sge,
-					    sizeof(struct gdma_sge),
-					    GFP_ATOMIC);
+		pkg.sgl_ptr = kmalloc_objs(struct gdma_sge, pkg.wqe_req.num_sge,
+					   GFP_ATOMIC);
 		if (!pkg.sgl_ptr)
 			goto tx_drop_count;

@@ -804,7 +803,7 @@ int mana_pre_alloc_rxbufs(struct mana_port_context *mpc, int new_mtu, int num_qu
 	if (!mpc->rxbufs_pre)
 		goto error;

-	mpc->das_pre = kmalloc_array(num_rxb, sizeof(dma_addr_t), GFP_KERNEL);
+	mpc->das_pre = kmalloc_objs(dma_addr_t, num_rxb, GFP_KERNEL);
 	if (!mpc->das_pre)
 		goto error;

@@ -996,8 +995,7 @@ static void mana_cleanup_indir_table(struct mana_port_context *apc)

 static int mana_init_port_context(struct mana_port_context *apc)
 {
-	apc->rxqs = kcalloc(apc->num_queues, sizeof(struct mana_rxq *),
-			    GFP_KERNEL);
+	apc->rxqs = kzalloc_objs(struct mana_rxq *, apc->num_queues, GFP_KERNEL);

 	return !apc->rxqs ? -ENOMEM : 0;
 }
@@ -1634,8 +1632,7 @@ static int mana_create_eq(struct mana_context *ac)
 	int err;
 	int i;

-	ac->eqs = kcalloc(gc->max_num_queues, sizeof(struct mana_eq),
-			  GFP_KERNEL);
+	ac->eqs = kzalloc_objs(struct mana_eq, gc->max_num_queues, GFP_KERNEL);
 	if (!ac->eqs)
 		return -ENOMEM;

@@ -2329,8 +2326,8 @@ static int mana_create_txq(struct mana_port_context *apc,
 	int err;
 	int i;

-	apc->tx_qp = kcalloc(apc->num_queues, sizeof(struct mana_tx_qp),
-			     GFP_KERNEL);
+	apc->tx_qp = kzalloc_objs(struct mana_tx_qp, apc->num_queues,
+				  GFP_KERNEL);
 	if (!apc->tx_qp)
 		return -ENOMEM;

@@ -2640,8 +2637,7 @@ static struct mana_rxq *mana_create_rxq(struct mana_port_context *apc,

 	gc = gd->gdma_context;

-	rxq = kzalloc(struct_size(rxq, rx_oobs, apc->rx_queue_size),
-		      GFP_KERNEL);
+	rxq = kzalloc_flex(*rxq, rx_oobs, apc->rx_queue_size, GFP_KERNEL);
 	if (!rxq)
 		return NULL;

@@ -2856,7 +2852,8 @@ static int mana_rss_table_alloc(struct mana_port_context *apc)
 	if (!apc->indir_table)
 		return -ENOMEM;

-	apc->rxobj_table = kcalloc(apc->indir_table_sz, sizeof(mana_handle_t), GFP_KERNEL);
+	apc->rxobj_table = kzalloc_objs(mana_handle_t, apc->indir_table_sz,
+					GFP_KERNEL);
 	if (!apc->rxobj_table) {
 		kfree(apc->indir_table);
 		return -ENOMEM;
@@ -3418,7 +3415,7 @@ static int add_adev(struct gdma_dev *gd, const char *name)
 	struct mana_adev *madev;
 	int ret;

-	madev = kzalloc(sizeof(*madev), GFP_KERNEL);
+	madev = kzalloc_obj(*madev, GFP_KERNEL);
 	if (!madev)
 		return -ENOMEM;

@@ -3511,7 +3508,7 @@ int mana_rdma_service_event(struct gdma_context *gc, enum gdma_service_type even
 		return 0;
 	}

-	serv_work = kzalloc(sizeof(*serv_work), GFP_ATOMIC);
+	serv_work = kzalloc_obj(*serv_work, GFP_ATOMIC);
 	if (!serv_work)
 		return -ENOMEM;

@@ -3562,7 +3559,7 @@ int mana_probe(struct gdma_dev *gd, bool resuming)
 		return err;

 	if (!resuming) {
-		ac = kzalloc(sizeof(*ac), GFP_KERNEL);
+		ac = kzalloc_obj(*ac, GFP_KERNEL);
 		if (!ac)
 			return -ENOMEM;

diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c
index c345d9b17c89..a572170506cb 100644
--- a/drivers/net/ethernet/mscc/ocelot.c
+++ b/drivers/net/ethernet/mscc/ocelot.c
@@ -576,7 +576,7 @@ static int ocelot_update_vlan_reclassify_rule(struct ocelot *ocelot, int port)
 	}

 	/* Filter doesn't exist, create it */
-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (!filter)
 		return -ENOMEM;

@@ -682,7 +682,7 @@ static int ocelot_vlan_member_add(struct ocelot *ocelot, int port, u16 vid,
 		return 0;
 	}

-	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan)
 		return -ENOMEM;

@@ -1664,7 +1664,7 @@ int ocelot_trap_add(struct ocelot *ocelot, int port,
 	trap = ocelot_vcap_block_find_filter_by_id(block_vcap_is2, cookie,
 						   false);
 	if (!trap) {
-		trap = kzalloc(sizeof(*trap), GFP_KERNEL);
+		trap = kzalloc_obj(*trap, GFP_KERNEL);
 		if (!trap)
 			return -ENOMEM;

@@ -2046,7 +2046,7 @@ static struct ocelot_pgid *ocelot_pgid_alloc(struct ocelot *ocelot, int index,
 {
 	struct ocelot_pgid *pgid;

-	pgid = kzalloc(sizeof(*pgid), GFP_KERNEL);
+	pgid = kzalloc_obj(*pgid, GFP_KERNEL);
 	if (!pgid)
 		return ERR_PTR(-ENOMEM);

@@ -2563,7 +2563,7 @@ int ocelot_lag_fdb_add(struct ocelot *ocelot, struct net_device *bond,
 	struct ocelot_lag_fdb *fdb;
 	int lag, err;

-	fdb = kzalloc(sizeof(*fdb), GFP_KERNEL);
+	fdb = kzalloc_obj(*fdb, GFP_KERNEL);
 	if (!fdb)
 		return -ENOMEM;

@@ -2894,7 +2894,7 @@ struct ocelot_mirror *ocelot_mirror_get(struct ocelot *ocelot, int to,
 		return m;
 	}

-	m = kzalloc(sizeof(*m), GFP_KERNEL);
+	m = kzalloc_obj(*m, GFP_KERNEL);
 	if (!m)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/mscc/ocelot_flower.c b/drivers/net/ethernet/mscc/ocelot_flower.c
index 986b1f150e3b..4fccc8adad56 100644
--- a/drivers/net/ethernet/mscc/ocelot_flower.c
+++ b/drivers/net/ethernet/mscc/ocelot_flower.c
@@ -833,7 +833,7 @@ static struct ocelot_vcap_filter
 {
 	struct ocelot_vcap_filter *filter;

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (!filter)
 		return NULL;

diff --git a/drivers/net/ethernet/mscc/ocelot_mrp.c b/drivers/net/ethernet/mscc/ocelot_mrp.c
index 3ccec488a304..04ae7a156f22 100644
--- a/drivers/net/ethernet/mscc/ocelot_mrp.c
+++ b/drivers/net/ethernet/mscc/ocelot_mrp.c
@@ -54,7 +54,7 @@ static int ocelot_mrp_redirect_add_vcap(struct ocelot *ocelot, int src_port,
 	struct ocelot_vcap_filter *filter;
 	int err;

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (!filter)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/mscc/ocelot_vcap.c b/drivers/net/ethernet/mscc/ocelot_vcap.c
index 5734b86aed5b..ec193ed18050 100644
--- a/drivers/net/ethernet/mscc/ocelot_vcap.c
+++ b/drivers/net/ethernet/mscc/ocelot_vcap.c
@@ -910,7 +910,7 @@ int ocelot_vcap_policer_add(struct ocelot *ocelot, u32 pol_ix,
 			return 0;
 		}

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
index d9b5d7999370..75ee09571af6 100644
--- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
@@ -3703,8 +3703,8 @@ static void myri10ge_probe_slices(struct myri10ge_priv *mgp)
 	 * slices. We give up on MSI-X if we can only get a single
 	 * vector. */

-	mgp->msix_vectors = kcalloc(mgp->num_slices, sizeof(*mgp->msix_vectors),
-				    GFP_KERNEL);
+	mgp->msix_vectors = kzalloc_objs(*mgp->msix_vectors, mgp->num_slices,
+					 GFP_KERNEL);
 	if (mgp->msix_vectors == NULL)
 		goto no_msix;
 	for (i = 0; i < mgp->num_slices; i++) {
diff --git a/drivers/net/ethernet/netronome/nfp/abm/cls.c b/drivers/net/ethernet/netronome/nfp/abm/cls.c
index 23ebddfb9532..5cb4bb03b2a5 100644
--- a/drivers/net/ethernet/netronome/nfp/abm/cls.c
+++ b/drivers/net/ethernet/netronome/nfp/abm/cls.c
@@ -203,7 +203,7 @@ nfp_abm_u32_knode_replace(struct nfp_abm_link *alink,
 	}

 	if (!match) {
-		match = kzalloc(sizeof(*match), GFP_KERNEL);
+		match = kzalloc_obj(*match, GFP_KERNEL);
 		if (!match)
 			return -ENOMEM;
 		list_add(&match->list, &alink->dscp_map);
diff --git a/drivers/net/ethernet/netronome/nfp/abm/main.c b/drivers/net/ethernet/netronome/nfp/abm/main.c
index 5d3df28c648f..b4c85bb0f787 100644
--- a/drivers/net/ethernet/netronome/nfp/abm/main.c
+++ b/drivers/net/ethernet/netronome/nfp/abm/main.c
@@ -317,7 +317,7 @@ nfp_abm_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, unsigned int id)
 	struct nfp_abm_link *alink;
 	int err;

-	alink = kzalloc(sizeof(*alink), GFP_KERNEL);
+	alink = kzalloc_obj(*alink, GFP_KERNEL);
 	if (!alink)
 		return -ENOMEM;
 	nn->app_priv = alink;
@@ -461,7 +461,7 @@ static int nfp_abm_init(struct nfp_app *app)
 		return -EINVAL;
 	}

-	abm = kzalloc(sizeof(*abm), GFP_KERNEL);
+	abm = kzalloc_obj(*abm, GFP_KERNEL);
 	if (!abm)
 		return -ENOMEM;
 	app->priv = abm;
diff --git a/drivers/net/ethernet/netronome/nfp/abm/qdisc.c b/drivers/net/ethernet/netronome/nfp/abm/qdisc.c
index 2a5cc64227e9..a030b59901c9 100644
--- a/drivers/net/ethernet/netronome/nfp/abm/qdisc.c
+++ b/drivers/net/ethernet/netronome/nfp/abm/qdisc.c
@@ -344,7 +344,7 @@ nfp_abm_qdisc_alloc(struct net_device *netdev, struct nfp_abm_link *alink,
 	struct nfp_qdisc *qdisc;
 	int err;

-	qdisc = kzalloc(sizeof(*qdisc), GFP_KERNEL);
+	qdisc = kzalloc_obj(*qdisc, GFP_KERNEL);
 	if (!qdisc)
 		return NULL;

diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c
index f469950c7265..d9591ca44a8f 100644
--- a/drivers/net/ethernet/netronome/nfp/bpf/main.c
+++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c
@@ -76,7 +76,7 @@ nfp_bpf_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, unsigned int id)
 		return -EINVAL;
 	}

-	bv = kzalloc(sizeof(*bv), GFP_KERNEL);
+	bv = kzalloc_obj(*bv, GFP_KERNEL);
 	if (!bv)
 		return -ENOMEM;
 	nn->app_priv = bv;
@@ -458,7 +458,7 @@ static int nfp_bpf_init(struct nfp_app *app)
 	struct nfp_app_bpf *bpf;
 	int err;

-	bpf = kzalloc(sizeof(*bpf), GFP_KERNEL);
+	bpf = kzalloc_obj(*bpf, GFP_KERNEL);
 	if (!bpf)
 		return -ENOMEM;
 	bpf->app = app;
diff --git a/drivers/net/ethernet/netronome/nfp/bpf/offload.c b/drivers/net/ethernet/netronome/nfp/bpf/offload.c
index c03558adda91..2b22725fb8a6 100644
--- a/drivers/net/ethernet/netronome/nfp/bpf/offload.c
+++ b/drivers/net/ethernet/netronome/nfp/bpf/offload.c
@@ -48,7 +48,7 @@ nfp_map_ptr_record(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog,
 	 */
 	bpf_map_inc(map);

-	record = kmalloc(sizeof(*record), GFP_KERNEL);
+	record = kmalloc_obj(*record, GFP_KERNEL);
 	if (!record) {
 		err = -ENOMEM;
 		goto err_map_put;
@@ -123,9 +123,8 @@ nfp_map_ptrs_record(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog,
 	if (!cnt)
 		goto out;

-	nfp_prog->map_records = kmalloc_array(cnt,
-					      sizeof(nfp_prog->map_records[0]),
-					      GFP_KERNEL);
+	nfp_prog->map_records = kmalloc_objs(nfp_prog->map_records[0], cnt,
+					     GFP_KERNEL);
 	if (!nfp_prog->map_records) {
 		err = -ENOMEM;
 		goto out;
@@ -155,7 +154,7 @@ nfp_prog_prepare(struct nfp_prog *nfp_prog, const struct bpf_insn *prog,
 	unsigned int i;

 	for (i = 0; i < cnt; i++) {
-		meta = kzalloc(sizeof(*meta), GFP_KERNEL);
+		meta = kzalloc_obj(*meta, GFP_KERNEL);
 		if (!meta)
 			return -ENOMEM;

@@ -193,7 +192,7 @@ static int nfp_bpf_verifier_prep(struct bpf_prog *prog)
 	struct nfp_prog *nfp_prog;
 	int ret;

-	nfp_prog = kzalloc(sizeof(*nfp_prog), GFP_KERNEL);
+	nfp_prog = kzalloc_obj(*nfp_prog, GFP_KERNEL);
 	if (!nfp_prog)
 		return -ENOMEM;
 	prog->aux->offload->dev_priv = nfp_prog;
diff --git a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c
index 9d235c0ce46a..de9508282841 100644
--- a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c
+++ b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c
@@ -770,8 +770,8 @@ int nfp_bpf_finalize(struct bpf_verifier_env *env)

 	nfp_prog = env->prog->aux->offload->dev_priv;
 	nfp_prog->subprog_cnt = env->subprog_cnt;
-	nfp_prog->subprog = kcalloc(nfp_prog->subprog_cnt,
-				    sizeof(nfp_prog->subprog[0]), GFP_KERNEL);
+	nfp_prog->subprog = kzalloc_objs(nfp_prog->subprog[0],
+					 nfp_prog->subprog_cnt, GFP_KERNEL);
 	if (!nfp_prog->subprog)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c
index 15180538b80a..178184a68816 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c
@@ -1355,7 +1355,7 @@ nfp_fl_ct_zone_entry *get_nfp_zone_entry(struct nfp_flower_priv *priv,
 		if (IS_ERR(zt) || zt->priv)
 			return zt;
 	} else {
-		zt = kzalloc(sizeof(*zt), GFP_KERNEL);
+		zt = kzalloc_obj(*zt, GFP_KERNEL);
 		if (!zt)
 			return ERR_PTR(-ENOMEM);
 	}
@@ -1487,7 +1487,7 @@ nfp_fl_ct_flow_entry *nfp_fl_ct_add_flow(struct nfp_fl_ct_zone_entry *zt,
 	struct flow_action_entry *act;
 	int err, i;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

@@ -1501,7 +1501,7 @@ nfp_fl_ct_flow_entry *nfp_fl_ct_add_flow(struct nfp_fl_ct_zone_entry *zt,
 	 * to do a full copy instead of just a reference.
 	 */
 	if (is_nft) {
-		nft_match = kzalloc(sizeof(*nft_match), GFP_KERNEL);
+		nft_match = kzalloc_obj(*nft_match, GFP_KERNEL);
 		if (!nft_match) {
 			err = -ENOMEM;
 			goto err_pre_ct_act;
diff --git a/drivers/net/ethernet/netronome/nfp/flower/lag_conf.c b/drivers/net/ethernet/netronome/nfp/flower/lag_conf.c
index 2c7bd6e80d99..9b78cc9600fe 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/lag_conf.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/lag_conf.c
@@ -119,7 +119,7 @@ nfp_fl_lag_group_create(struct nfp_fl_lag *lag, struct net_device *master)
 		return ERR_PTR(id);
 	}

-	group = kmalloc(sizeof(*group), GFP_KERNEL);
+	group = kmalloc_obj(*group, GFP_KERNEL);
 	if (!group) {
 		ida_free(&lag->ida_handle, id);
 		return ERR_PTR(-ENOMEM);
@@ -335,8 +335,8 @@ static void nfp_fl_lag_do_work(struct work_struct *work)
 			continue;
 		}

-		acti_netdevs = kmalloc_array(entry->slave_cnt,
-					     sizeof(*acti_netdevs), GFP_KERNEL);
+		acti_netdevs = kmalloc_objs(*acti_netdevs, entry->slave_cnt,
+					    GFP_KERNEL);
 		if (!acti_netdevs) {
 			schedule_delayed_work(&lag->work,
 					      NFP_FL_LAG_DELAY);
diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.c b/drivers/net/ethernet/netronome/nfp/flower/main.c
index 83eaa5ae3cd4..4677183322bc 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/main.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/main.c
@@ -182,7 +182,7 @@ nfp_flower_non_repr_priv_get(struct nfp_app *app, struct net_device *netdev)
 	if (entry)
 		goto inc_ref;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return NULL;

@@ -406,7 +406,7 @@ nfp_flower_spawn_vnic_reprs(struct nfp_app *app,
 			goto err_reprs_clean;
 		}

-		repr_priv = kzalloc(sizeof(*repr_priv), GFP_KERNEL);
+		repr_priv = kzalloc_obj(*repr_priv, GFP_KERNEL);
 		if (!repr_priv) {
 			err = -ENOMEM;
 			nfp_repr_free(repr);
@@ -524,7 +524,7 @@ nfp_flower_spawn_phy_reprs(struct nfp_app *app, struct nfp_flower_priv *priv)
 			goto err_reprs_clean;
 		}

-		repr_priv = kzalloc(sizeof(*repr_priv), GFP_KERNEL);
+		repr_priv = kzalloc_obj(*repr_priv, GFP_KERNEL);
 		if (!repr_priv) {
 			err = -ENOMEM;
 			nfp_repr_free(repr);
diff --git a/drivers/net/ethernet/netronome/nfp/flower/metadata.c b/drivers/net/ethernet/netronome/nfp/flower/metadata.c
index dde60c4572fa..fbb858a5324b 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/metadata.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/metadata.c
@@ -214,7 +214,7 @@ nfp_add_mask_table(struct nfp_app *app, char *mask_data, u32 mask_len)
 	if (nfp_mask_alloc(app, &mask_id))
 		return -ENOENT;

-	mask_entry = kmalloc(sizeof(*mask_entry), GFP_KERNEL);
+	mask_entry = kmalloc_obj(*mask_entry, GFP_KERNEL);
 	if (!mask_entry) {
 		nfp_release_mask_id(app, mask_id);
 		return -ENOMEM;
@@ -324,7 +324,7 @@ int nfp_compile_flow_metadata(struct nfp_app *app, u32 cookie,
 	nfp_flow->meta.host_cookie = cpu_to_be64(cookie);
 	nfp_flow->ingress_dev = netdev;

-	ctx_entry = kzalloc(sizeof(*ctx_entry), GFP_KERNEL);
+	ctx_entry = kzalloc_obj(*ctx_entry, GFP_KERNEL);
 	if (!ctx_entry) {
 		err = -ENOMEM;
 		goto err_release_stats;
@@ -557,8 +557,8 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count,

 	/* Init timestamps for mask id*/
 	priv->mask_ids.last_used =
-		kmalloc_array(NFP_FLOWER_MASK_ENTRY_RS,
-			      sizeof(*priv->mask_ids.last_used), GFP_KERNEL);
+		kmalloc_objs(*priv->mask_ids.last_used,
+			     NFP_FLOWER_MASK_ENTRY_RS, GFP_KERNEL);
 	if (!priv->mask_ids.last_used)
 		goto err_free_mask_id;

@@ -573,8 +573,7 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count,

 	stats_size = FIELD_PREP(NFP_FL_STAT_ID_STAT, host_ctx_count) |
 		     FIELD_PREP(NFP_FL_STAT_ID_MU_NUM, host_num_mems - 1);
-	priv->stats = kvmalloc_array(stats_size, sizeof(struct nfp_fl_stats),
-				     GFP_KERNEL);
+	priv->stats = kvmalloc_objs(struct nfp_fl_stats, stats_size, GFP_KERNEL);
 	if (!priv->stats)
 		goto err_free_ring_buf;

diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c
index 46ffc2c20893..b6e1e33d3f27 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/offload.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c
@@ -549,7 +549,7 @@ nfp_flower_allocate_new(struct nfp_fl_key_ls *key_layer)
 {
 	struct nfp_fl_payload *flow_pay;

-	flow_pay = kmalloc(sizeof(*flow_pay), GFP_KERNEL);
+	flow_pay = kmalloc_obj(*flow_pay, GFP_KERNEL);
 	if (!flow_pay)
 		return NULL;

@@ -979,7 +979,7 @@ static int nfp_flower_link_flows(struct nfp_fl_payload *merge_flow,
 {
 	struct nfp_fl_payload_link *link;

-	link = kmalloc(sizeof(*link), GFP_KERNEL);
+	link = kmalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;

@@ -1067,7 +1067,7 @@ int nfp_flower_merge_offloaded_flows(struct nfp_app *app,
 	if (err)
 		goto err_release_metadata;

-	merge_info = kmalloc(sizeof(*merge_info), GFP_KERNEL);
+	merge_info = kmalloc_obj(*merge_info, GFP_KERNEL);
 	if (!merge_info) {
 		err = -ENOMEM;
 		goto err_remove_rhash;
@@ -1354,7 +1354,7 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
 	if (!offload_pre_check(flow))
 		return -EOPNOTSUPP;

-	key_layer = kmalloc(sizeof(*key_layer), GFP_KERNEL);
+	key_layer = kmalloc_obj(*key_layer, GFP_KERNEL);
 	if (!key_layer)
 		return -ENOMEM;

@@ -1400,7 +1400,7 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
 		if (priv->flower_ext_feats & NFP_FL_FEATS_DECAP_V2) {
 			struct nfp_predt_entry *predt;

-			predt = kzalloc(sizeof(*predt), GFP_KERNEL);
+			predt = kzalloc_obj(*predt, GFP_KERNEL);
 			if (!predt) {
 				err = -ENOMEM;
 				goto err_remove_rhash;
@@ -1901,7 +1901,7 @@ nfp_flower_setup_indr_tc_block(struct net_device *netdev, struct Qdisc *sch, str
 					  &nfp_block_cb_list))
 			return -EBUSY;

-		cb_priv = kmalloc(sizeof(*cb_priv), GFP_KERNEL);
+		cb_priv = kmalloc_obj(*cb_priv, GFP_KERNEL);
 		if (!cb_priv)
 			return -ENOMEM;

diff --git a/drivers/net/ethernet/netronome/nfp/flower/qos_conf.c b/drivers/net/ethernet/netronome/nfp/flower/qos_conf.c
index e7180b4793c7..6a7f806b3fdf 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/qos_conf.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/qos_conf.c
@@ -579,7 +579,7 @@ nfp_flower_add_meter_entry(struct nfp_app *app, u32 meter_id)
 	if (meter_entry)
 		return meter_entry;

-	meter_entry = kzalloc(sizeof(*meter_entry), GFP_KERNEL);
+	meter_entry = kzalloc_obj(*meter_entry, GFP_KERNEL);
 	if (!meter_entry)
 		return NULL;

diff --git a/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c b/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c
index 0d7d138d6e0d..e0d32ddc80c3 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c
@@ -696,7 +696,7 @@ nfp_tun_alloc_neigh_update_work(struct nfp_app *app, struct neighbour *n)
 {
 	struct nfp_neigh_update_work *update_work;

-	update_work = kzalloc(sizeof(*update_work), GFP_ATOMIC);
+	update_work = kzalloc_obj(*update_work, GFP_ATOMIC);
 	if (!update_work)
 		return NULL;

@@ -884,7 +884,7 @@ void nfp_tunnel_add_ipv4_off(struct nfp_app *app, __be32 ipv4)
 		}
 	}

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		mutex_unlock(&priv->tun.ipv4_off_lock);
 		nfp_flower_cmsg_warn(app, "Mem error when offloading IP address.\n");
@@ -959,7 +959,7 @@ nfp_tunnel_add_ipv6_off(struct nfp_app *app, struct in6_addr *ipv6)
 			return entry;
 		}

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		mutex_unlock(&priv->tun.ipv6_off_lock);
 		nfp_flower_cmsg_warn(app, "Mem error when offloading IP address.\n");
@@ -1117,7 +1117,7 @@ nfp_tunnel_add_shared_mac(struct nfp_app *app, struct net_device *netdev,
 	}

 	if (!entry) {
-		entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+		entry = kzalloc_obj(*entry, GFP_KERNEL);
 		if (!entry) {
 			err = -ENOMEM;
 			goto err_free_ida;
diff --git a/drivers/net/ethernet/netronome/nfp/nfd3/rings.c b/drivers/net/ethernet/netronome/nfp/nfd3/rings.c
index a03190c9313c..480b644afed5 100644
--- a/drivers/net/ethernet/netronome/nfp/nfd3/rings.c
+++ b/drivers/net/ethernet/netronome/nfp/nfd3/rings.c
@@ -140,8 +140,8 @@ nfp_nfd3_tx_ring_alloc(struct nfp_net_dp *dp, struct nfp_net_tx_ring *tx_ring)
 		goto err_alloc;
 	}

-	tx_ring->txbufs = kvcalloc(tx_ring->cnt, sizeof(*tx_ring->txbufs),
-				   GFP_KERNEL);
+	tx_ring->txbufs = kvzalloc_objs(*tx_ring->txbufs, tx_ring->cnt,
+					GFP_KERNEL);
 	if (!tx_ring->txbufs)
 		goto err_alloc;

diff --git a/drivers/net/ethernet/netronome/nfp/nfdk/rings.c b/drivers/net/ethernet/netronome/nfp/nfdk/rings.c
index fdb8144a63e0..c0905469911c 100644
--- a/drivers/net/ethernet/netronome/nfp/nfdk/rings.c
+++ b/drivers/net/ethernet/netronome/nfp/nfdk/rings.c
@@ -105,8 +105,8 @@ nfp_nfdk_tx_ring_alloc(struct nfp_net_dp *dp, struct nfp_net_tx_ring *tx_ring)
 		goto err_alloc;
 	}

-	tx_ring->ktxbufs = kvcalloc(tx_ring->cnt, sizeof(*tx_ring->ktxbufs),
-				    GFP_KERNEL);
+	tx_ring->ktxbufs = kvzalloc_objs(*tx_ring->ktxbufs, tx_ring->cnt,
+					 GFP_KERNEL);
 	if (!tx_ring->ktxbufs)
 		goto err_alloc;

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_app.c b/drivers/net/ethernet/netronome/nfp/nfp_app.c
index bb3f46c74f77..f53418136c37 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_app.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_app.c
@@ -239,7 +239,7 @@ struct nfp_app *nfp_app_alloc(struct nfp_pf *pf, enum nfp_app_id id)
 	if (WARN_ON(!apps[id]->ctrl_msg_rx && apps[id]->ctrl_msg_rx_raw))
 		return ERR_PTR(-EINVAL);

-	app = kzalloc(sizeof(*app), GFP_KERNEL);
+	app = kzalloc_obj(*app, GFP_KERNEL);
 	if (!app)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index 9ef72f294117..bebf7e7c4a86 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -1554,7 +1554,7 @@ struct nfp_net_dp *nfp_net_clone_dp(struct nfp_net *nn)
 {
 	struct nfp_net_dp *new;

-	new = kmalloc(sizeof(*new), GFP_KERNEL);
+	new = kmalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;

@@ -2537,8 +2537,8 @@ nfp_net_alloc(struct pci_dev *pdev, const struct nfp_dev_info *dev_info,
 				  nn->dp.num_r_vecs, num_online_cpus());
 	nn->max_r_vecs = nn->dp.num_r_vecs;

-	nn->dp.xsk_pools = kcalloc(nn->max_r_vecs, sizeof(*nn->dp.xsk_pools),
-				   GFP_KERNEL);
+	nn->dp.xsk_pools = kzalloc_objs(*nn->dp.xsk_pools, nn->max_r_vecs,
+					GFP_KERNEL);
 	if (!nn->dp.xsk_pools) {
 		err = -ENOMEM;
 		goto err_free_nn;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_dp.c b/drivers/net/ethernet/netronome/nfp/nfp_net_dp.c
index 550df83b798c..cbb983729f22 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_dp.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_dp.c
@@ -184,8 +184,7 @@ int nfp_net_tx_rings_prepare(struct nfp_net *nn, struct nfp_net_dp *dp)
 {
 	unsigned int r;

-	dp->tx_rings = kcalloc(dp->num_tx_rings, sizeof(*dp->tx_rings),
-			       GFP_KERNEL);
+	dp->tx_rings = kzalloc_objs(*dp->tx_rings, dp->num_tx_rings, GFP_KERNEL);
 	if (!dp->tx_rings)
 		return -ENOMEM;

@@ -340,8 +339,7 @@ int nfp_net_rx_rings_prepare(struct nfp_net *nn, struct nfp_net_dp *dp)
 {
 	unsigned int r;

-	dp->rx_rings = kcalloc(dp->num_rx_rings, sizeof(*dp->rx_rings),
-			       GFP_KERNEL);
+	dp->rx_rings = kzalloc_objs(*dp->rx_rings, dp->num_rx_rings, GFP_KERNEL);
 	if (!dp->rx_rings)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
index e88b1c4732a5..16bf77708b9e 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
@@ -713,7 +713,7 @@ static int nfp_test_nsp(struct net_device *netdev)
 		goto exit_close_nsp;
 	}

-	nspi = kzalloc(sizeof(*nspi), GFP_KERNEL);
+	nspi = kzalloc_obj(*nspi, GFP_KERNEL);
 	if (!nspi) {
 		err = -ENOMEM;
 		goto exit_close_nsp;
@@ -1676,7 +1676,7 @@ static int nfp_net_fs_add(struct nfp_net *nn, struct ethtool_rxnfc *cmd)
 	if (unsupp_mask)
 		return -EOPNOTSUPP;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
index cbe4972ba104..aeaa998e2f75 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
@@ -229,8 +229,8 @@ static int nfp_net_pf_alloc_irqs(struct nfp_pf *pf)
 	wanted_irqs = 0;
 	list_for_each_entry(nn, &pf->vnics, vnic_list)
 		wanted_irqs += NFP_NET_NON_Q_VECTORS + nn->dp.num_r_vecs;
-	pf->irq_entries = kcalloc(wanted_irqs, sizeof(*pf->irq_entries),
-				  GFP_KERNEL);
+	pf->irq_entries = kzalloc_objs(*pf->irq_entries, wanted_irqs,
+				       GFP_KERNEL);
 	if (!pf->irq_entries)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
index 227e7a5d712e..bac4c61f8632 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
@@ -500,7 +500,7 @@ struct nfp_reprs *nfp_reprs_alloc(unsigned int num_reprs)
 {
 	struct nfp_reprs *reprs;

-	reprs = kzalloc(struct_size(reprs, reprs, num_reprs), GFP_KERNEL);
+	reprs = kzalloc_flex(*reprs, reprs, num_reprs, GFP_KERNEL);
 	if (!reprs)
 		return NULL;
 	reprs->num_reprs = num_reprs;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c b/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c
index e19bb0150cb5..061d1ba89760 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c
@@ -93,7 +93,7 @@ static int nfp_netvf_pci_probe(struct pci_dev *pdev,

 	dev_info = &nfp_dev_info[pci_id->driver_data];

-	vf = kzalloc(sizeof(*vf), GFP_KERNEL);
+	vf = kzalloc_obj(*vf, GFP_KERNEL);
 	if (!vf)
 		return -ENOMEM;
 	pci_set_drvdata(pdev, vf);
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_port.c b/drivers/net/ethernet/netronome/nfp/nfp_port.c
index 54640bcb70fb..1ce12ad44d2f 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_port.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_port.c
@@ -203,7 +203,7 @@ nfp_port_alloc(struct nfp_app *app, enum nfp_port_type type,
 {
 	struct nfp_port *port;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/netronome/nfp/nfp_shared_buf.c b/drivers/net/ethernet/netronome/nfp/nfp_shared_buf.c
index ea2e3f829aba..eb5f9c2bf445 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_shared_buf.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_shared_buf.c
@@ -99,8 +99,8 @@ int nfp_shared_buf_register(struct nfp_pf *pf)

 	entry_sz = nfp_cpp_area_size(sb_desc_area) / num_entries;

-	pf->shared_bufs = kmalloc_array(num_entries, sizeof(pf->shared_bufs[0]),
-					GFP_KERNEL);
+	pf->shared_bufs = kmalloc_objs(pf->shared_bufs[0], num_entries,
+				       GFP_KERNEL);
 	if (!pf->shared_bufs) {
 		err = -ENOMEM;
 		goto err_release_area;
diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c
index 7c2200b49ce4..ff16af23fc3a 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c
@@ -1320,7 +1320,7 @@ nfp_cpp_from_nfp6000_pcie(struct pci_dev *pdev, const struct nfp_dev_info *dev_i
 		 dev_info->chip_names);
 	pcie_print_link_status(pdev);

-	nfp = kzalloc(sizeof(*nfp), GFP_KERNEL);
+	nfp = kzalloc_obj(*nfp, GFP_KERNEL);
 	if (!nfp) {
 		err = -ENOMEM;
 		goto err_ret;
diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c
index 669f9f8fb507..06ebad34c00b 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c
@@ -802,7 +802,7 @@ int nfp_cpp_area_cache_add(struct nfp_cpp *cpp, size_t size)
 	if (!area)
 		return -ENOMEM;

-	cache = kzalloc(sizeof(*cache), GFP_KERNEL);
+	cache = kzalloc_obj(*cache, GFP_KERNEL);
 	if (!cache) {
 		nfp_cpp_area_free(area);
 		return -ENOMEM;
@@ -1170,7 +1170,7 @@ nfp_cpp_from_operations(const struct nfp_cpp_operations *ops,
 	u32 xpbaddr;
 	size_t tgt;

-	cpp = kzalloc(sizeof(*cpp), GFP_KERNEL);
+	cpp = kzalloc_obj(*cpp, GFP_KERNEL);
 	if (!cpp) {
 		err = -ENOMEM;
 		goto err_malloc;
diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mip.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mip.c
index 79e17943519e..93b11eaf7d9f 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mip.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mip.c
@@ -101,7 +101,7 @@ const struct nfp_mip *nfp_mip_open(struct nfp_cpp *cpp)
 	struct nfp_mip *mip;
 	int err;

-	mip = kmalloc(sizeof(*mip), GFP_KERNEL);
+	mip = kmalloc_obj(*mip, GFP_KERNEL);
 	if (!mip)
 		return NULL;

diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mutex.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mutex.c
index 7bc17b94ac60..d017b7779819 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mutex.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_mutex.c
@@ -140,7 +140,7 @@ struct nfp_cpp_mutex *nfp_cpp_mutex_alloc(struct nfp_cpp *cpp, int target,
 	if (tmp != key)
 		return NULL;

-	mutex = kzalloc(sizeof(*mutex), GFP_KERNEL);
+	mutex = kzalloc_obj(*mutex, GFP_KERNEL);
 	if (!mutex)
 		return NULL;

diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c
index e2e5fd003ad6..4ad0f7586ba1 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.c
@@ -163,7 +163,7 @@ struct nfp_nffw_info *nfp_nffw_info_open(struct nfp_cpp *cpp)
 	u32 info_ver;
 	int err;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c
index 0bd6477292a6..a874a5f233a6 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c
@@ -280,7 +280,7 @@ struct nfp_nsp *nfp_nsp_open(struct nfp_cpp *cpp)
 	if (IS_ERR(res))
 		return ERR_CAST(res);

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state) {
 		nfp_resource_release(res);
 		return ERR_PTR(-ENOMEM);
@@ -514,7 +514,7 @@ nfp_nsp_command_buf_dma_sg(struct nfp_nsp *nsp,
 	dma_size = BIT_ULL(dma_order);
 	nseg = DIV_ROUND_UP(max_size, chunk_size);

-	chunks = kcalloc(nseg, sizeof(*chunks), GFP_KERNEL);
+	chunks = kzalloc_objs(*chunks, nseg, GFP_KERNEL);
 	if (!chunks)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c
index 0997d127144f..33ff357b6fc6 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c
@@ -29,7 +29,7 @@ struct nfp_nsp_identify *__nfp_nsp_identify(struct nfp_nsp *nsp)
 	if (nfp_nsp_get_abi_ver_minor(nsp) < 15)
 		return NULL;

-	ni = kzalloc(sizeof(*ni), GFP_KERNEL);
+	ni = kzalloc_obj(*ni, GFP_KERNEL);
 	if (!ni)
 		return NULL;

@@ -40,7 +40,7 @@ struct nfp_nsp_identify *__nfp_nsp_identify(struct nfp_nsp *nsp)
 		goto exit_free;
 	}

-	nspi = kzalloc(sizeof(*nspi), GFP_KERNEL);
+	nspi = kzalloc_obj(*nspi, GFP_KERNEL);
 	if (!nspi)
 		goto exit_free;

diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c
index 5cfddc9a5d87..9a1f1849e0db 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c
@@ -319,7 +319,7 @@ __nfp_eth_read_ports(struct nfp_cpp *cpp, struct nfp_nsp *nsp)
 		goto err;
 	}

-	table = kzalloc(struct_size(table, ports, cnt), GFP_KERNEL);
+	table = kzalloc_flex(*table, ports, cnt, GFP_KERNEL);
 	if (!table)
 		goto err;

diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c
index 279ea0b56955..54089663bbd7 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c
@@ -155,7 +155,7 @@ nfp_resource_acquire(struct nfp_cpp *cpp, const char *name)
 	struct nfp_resource *res;
 	int err;

-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (!res)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/netronome/nfp/nic/main.c b/drivers/net/ethernet/netronome/nfp/nic/main.c
index 9dd5afe37f6e..82ec6d9018b0 100644
--- a/drivers/net/ethernet/netronome/nfp/nic/main.c
+++ b/drivers/net/ethernet/netronome/nfp/nic/main.c
@@ -51,7 +51,7 @@ static int nfp_nic_vnic_alloc(struct nfp_app *app, struct nfp_net *nn,
 		return err;

 	if (sizeof(*app_pri)) {
-		nn->app_priv = kzalloc(sizeof(*app_pri), GFP_KERNEL);
+		nn->app_priv = kzalloc_obj(*app_pri, GFP_KERNEL);
 		if (!nn->app_priv)
 			return -ENOMEM;
 	}
diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 19aa1f1538aa..bff27b223f5d 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -5854,8 +5854,10 @@ static int nv_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
 			goto out_unmap;
 		np->tx_ring.ex = &np->rx_ring.ex[np->rx_ring_size];
 	}
-	np->rx_skb = kcalloc(np->rx_ring_size, sizeof(struct nv_skb_map), GFP_KERNEL);
-	np->tx_skb = kcalloc(np->tx_ring_size, sizeof(struct nv_skb_map), GFP_KERNEL);
+	np->rx_skb = kzalloc_objs(struct nv_skb_map, np->rx_ring_size,
+				  GFP_KERNEL);
+	np->tx_skb = kzalloc_objs(struct nv_skb_map, np->tx_ring_size,
+				  GFP_KERNEL);
 	if (!np->rx_skb || !np->tx_skb)
 		goto out_freering;

diff --git a/drivers/net/ethernet/pasemi/pasemi_mac.c b/drivers/net/ethernet/pasemi/pasemi_mac.c
index 00909372ea61..f9a6471b36d0 100644
--- a/drivers/net/ethernet/pasemi/pasemi_mac.c
+++ b/drivers/net/ethernet/pasemi/pasemi_mac.c
@@ -381,9 +381,8 @@ static int pasemi_mac_setup_rx_resources(const struct net_device *dev)
 	spin_lock_init(&ring->lock);

 	ring->size = RX_RING_SIZE;
-	ring->ring_info = kcalloc(RX_RING_SIZE,
-				  sizeof(struct pasemi_mac_buffer),
-				  GFP_KERNEL);
+	ring->ring_info = kzalloc_objs(struct pasemi_mac_buffer, RX_RING_SIZE,
+				       GFP_KERNEL);

 	if (!ring->ring_info)
 		goto out_ring_info;
@@ -465,9 +464,8 @@ pasemi_mac_setup_tx_resources(const struct net_device *dev)
 	spin_lock_init(&ring->lock);

 	ring->size = TX_RING_SIZE;
-	ring->ring_info = kcalloc(TX_RING_SIZE,
-				  sizeof(struct pasemi_mac_buffer),
-				  GFP_KERNEL);
+	ring->ring_info = kzalloc_objs(struct pasemi_mac_buffer, TX_RING_SIZE,
+				       GFP_KERNEL);
 	if (!ring->ring_info)
 		goto out_ring_info;

diff --git a/drivers/net/ethernet/pensando/ionic/ionic_aux.c b/drivers/net/ethernet/pensando/ionic/ionic_aux.c
index a2be338eb3e5..4c9db73cef23 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_aux.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_aux.c
@@ -26,7 +26,7 @@ int ionic_auxbus_register(struct ionic_lif *lif)
 	if (!(le64_to_cpu(lif->ionic->ident.lif.capabilities) & IONIC_LIF_CAP_RDMA))
 		return 0;

-	ionic_adev = kzalloc(sizeof(*ionic_adev), GFP_KERNEL);
+	ionic_adev = kzalloc_obj(*ionic_adev, GFP_KERNEL);
 	if (!ionic_adev)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
index 0671deae9a28..104e1d35e0be 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
@@ -151,7 +151,7 @@ static int ionic_vf_alloc(struct ionic *ionic, int num_vfs)

 	down_write(&ionic->vf_op_lock);

-	ionic->vfs = kcalloc(num_vfs, sizeof(struct ionic_vf), GFP_KERNEL);
+	ionic->vfs = kzalloc_objs(struct ionic_vf, num_vfs, GFP_KERNEL);
 	if (!ionic->vfs) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_dev.c b/drivers/net/ethernet/pensando/ionic/ionic_dev.c
index ab27e9225c1e..3838c4a70766 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_dev.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_dev.c
@@ -35,7 +35,7 @@ static void ionic_watchdog_cb(struct timer_list *t)

 	if (test_bit(IONIC_LIF_F_FILTER_SYNC_NEEDED, lif->state) &&
 	    !test_bit(IONIC_LIF_F_FW_RESET, lif->state)) {
-		work = kzalloc(sizeof(*work), GFP_ATOMIC);
+		work = kzalloc_obj(*work, GFP_ATOMIC);
 		if (!work) {
 			netdev_err(lif->netdev, "rxmode change dropped\n");
 			return;
@@ -577,7 +577,7 @@ int ionic_heartbeat_check(struct ionic *ionic)
 		if (trigger) {
 			struct ionic_deferred_work *work;

-			work = kzalloc(sizeof(*work), GFP_ATOMIC);
+			work = kzalloc_obj(*work, GFP_ATOMIC);
 			if (work) {
 				work->type = IONIC_DW_TYPE_LIF_RESET;
 				work->fw_status = fw_status_ready;
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
index 058eea86e141..050dd3168f6b 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
@@ -203,7 +203,7 @@ void ionic_link_status_check_request(struct ionic_lif *lif, bool can_sleep)
 		return;

 	if (!can_sleep) {
-		work = kzalloc(sizeof(*work), GFP_ATOMIC);
+		work = kzalloc_obj(*work, GFP_ATOMIC);
 		if (!work) {
 			clear_bit(IONIC_LIF_F_LINK_CHECK_REQUESTED, lif->state);
 			return;
@@ -1427,7 +1427,7 @@ static void ionic_ndo_set_rx_mode(struct net_device *netdev)
 	/* Shove off the rest of the rxmode work to the work task
 	 * which will include syncing the filters to the firmware.
 	 */
-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work) {
 		netdev_err(lif->netdev, "rxmode change dropped\n");
 		return;
@@ -2694,7 +2694,7 @@ static int ionic_register_rxq_info(struct ionic_queue *q, unsigned int napi_id)
 	struct xdp_rxq_info *rxq_info;
 	int err;

-	rxq_info = kzalloc(sizeof(*rxq_info), GFP_KERNEL);
+	rxq_info = kzalloc_obj(*rxq_info, GFP_KERNEL);
 	if (!rxq_info)
 		return -ENOMEM;

@@ -3177,7 +3177,7 @@ static int ionic_affinity_masks_alloc(struct ionic *ionic)
 	int nintrs = ionic->nintrs;
 	int i;

-	affinity_masks = kcalloc(nintrs, sizeof(cpumask_var_t), GFP_KERNEL);
+	affinity_masks = kzalloc_objs(cpumask_var_t, nintrs, GFP_KERNEL);
 	if (!affinity_masks)
 		return -ENOMEM;

@@ -3218,7 +3218,7 @@ int ionic_lif_alloc(struct ionic *ionic)
 	int tbl_sz;
 	int err;

-	lid = kzalloc(sizeof(*lid), GFP_KERNEL);
+	lid = kzalloc_obj(*lid, GFP_KERNEL);
 	if (!lid)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/pensando/ionic/ionic_main.c b/drivers/net/ethernet/pensando/ionic/ionic_main.c
index 14dc055be3e9..3c5200e2fdb7 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_main.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_main.c
@@ -283,7 +283,7 @@ bool ionic_notifyq_service(struct ionic_cq *cq)
 		if (lif->ionic->idev.fw_status_ready &&
 		    !test_bit(IONIC_LIF_F_FW_RESET, lif->state) &&
 		    !test_and_set_bit(IONIC_LIF_F_FW_STOPPING, lif->state)) {
-			work = kzalloc(sizeof(*work), GFP_ATOMIC);
+			work = kzalloc_obj(*work, GFP_ATOMIC);
 			if (!work) {
 				netdev_err(lif->netdev, "Reset event dropped\n");
 				clear_bit(IONIC_LIF_F_FW_STOPPING, lif->state);
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c
index 89c8b2349694..fff8dc84212d 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c
@@ -634,7 +634,7 @@ static int nx_p3_nic_add_mac(struct netxen_adapter *adapter,
 		}
 	}

-	cur = kzalloc(sizeof(nx_mac_list_t), GFP_ATOMIC);
+	cur = kzalloc_obj(nx_mac_list_t, GFP_ATOMIC);
 	if (cur == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
index 51fa880eaf6c..a0466693e2d9 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
@@ -185,7 +185,7 @@ int netxen_alloc_sw_resources(struct netxen_adapter *adapter)
 	struct netxen_cmd_buffer *cmd_buf_arr;
 	struct net_device *netdev = adapter->netdev;

-	tx_ring = kzalloc(sizeof(struct nx_host_tx_ring), GFP_KERNEL);
+	tx_ring = kzalloc_obj(struct nx_host_tx_ring, GFP_KERNEL);
 	if (tx_ring == NULL)
 		return -ENOMEM;

@@ -202,8 +202,8 @@ int netxen_alloc_sw_resources(struct netxen_adapter *adapter)

 	recv_ctx = &adapter->recv_ctx;

-	rds_ring = kcalloc(adapter->max_rds_rings,
-			   sizeof(struct nx_host_rds_ring), GFP_KERNEL);
+	rds_ring = kzalloc_objs(struct nx_host_rds_ring, adapter->max_rds_rings,
+				GFP_KERNEL);
 	if (rds_ring == NULL)
 		goto err_out;

@@ -451,7 +451,7 @@ int netxen_pinit_from_rom(struct netxen_adapter *adapter)
 		return -EIO;
 	}

-	buf = kcalloc(n, sizeof(struct crb_addr_pair), GFP_KERNEL);
+	buf = kzalloc_objs(struct crb_addr_pair, n, GFP_KERNEL);
 	if (buf == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
index e8ff661fa4a5..5ee2bd9d6886 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
@@ -3198,7 +3198,7 @@ netxen_list_config_ip(struct netxen_adapter *adapter,
 				goto out;
 		}

-		cur = kzalloc(sizeof(struct nx_ip_list), GFP_ATOMIC);
+		cur = kzalloc_obj(struct nx_ip_list, GFP_ATOMIC);
 		if (cur == NULL)
 			goto out;
 		if (is_vlan_dev(dev))
diff --git a/drivers/net/ethernet/qlogic/qed/qed_cxt.c b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
index 33f4f58ee51c..ddc1f9213a95 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_cxt.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
@@ -845,8 +845,8 @@ static int qed_cxt_src_t2_alloc(struct qed_hwfn *p_hwfn)
 	p_t2->num_pages = DIV_ROUND_UP(total_size, psz);

 	/* allocate t2 */
-	p_t2->dma_mem = kcalloc(p_t2->num_pages, sizeof(struct phys_mem_desc),
-				GFP_KERNEL);
+	p_t2->dma_mem = kzalloc_objs(struct phys_mem_desc, p_t2->num_pages,
+				     GFP_KERNEL);
 	if (!p_t2->dma_mem) {
 		DP_NOTICE(p_hwfn, "Failed to allocate t2 table\n");
 		rc = -ENOMEM;
@@ -994,8 +994,8 @@ static int qed_ilt_shadow_alloc(struct qed_hwfn *p_hwfn)
 	int rc;

 	size = qed_cxt_ilt_shadow_size(clients);
-	p_mngr->ilt_shadow = kcalloc(size, sizeof(struct phys_mem_desc),
-				     GFP_KERNEL);
+	p_mngr->ilt_shadow = kzalloc_objs(struct phys_mem_desc, size,
+					  GFP_KERNEL);
 	if (!p_mngr->ilt_shadow) {
 		rc = -ENOMEM;
 		goto ilt_shadow_fail;
@@ -1114,7 +1114,7 @@ int qed_cxt_mngr_alloc(struct qed_hwfn *p_hwfn)
 	struct qed_cxt_mngr *p_mngr;
 	u32 i;

-	p_mngr = kzalloc(sizeof(*p_mngr), GFP_KERNEL);
+	p_mngr = kzalloc_obj(*p_mngr, GFP_KERNEL);
 	if (!p_mngr)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_dcbx.c b/drivers/net/ethernet/qlogic/qed/qed_dcbx.c
index dc93ddea8906..593931ec7226 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dcbx.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dcbx.c
@@ -915,7 +915,7 @@ qed_dcbx_mib_update_event(struct qed_hwfn *p_hwfn,

 int qed_dcbx_info_alloc(struct qed_hwfn *p_hwfn)
 {
-	p_hwfn->p_dcbx_info = kzalloc(sizeof(*p_hwfn->p_dcbx_info), GFP_KERNEL);
+	p_hwfn->p_dcbx_info = kzalloc_obj(*p_hwfn->p_dcbx_info, GFP_KERNEL);
 	if (!p_hwfn->p_dcbx_info)
 		return -ENOMEM;

@@ -1244,7 +1244,7 @@ int qed_dcbx_get_config_params(struct qed_hwfn *p_hwfn,
 		return 0;
 	}

-	dcbx_info = kzalloc(sizeof(*dcbx_info), GFP_KERNEL);
+	dcbx_info = kzalloc_obj(*dcbx_info, GFP_KERNEL);
 	if (!dcbx_info)
 		return -ENOMEM;

@@ -1283,7 +1283,7 @@ static struct qed_dcbx_get *qed_dcbnl_get_dcbx(struct qed_hwfn *hwfn,
 {
 	struct qed_dcbx_get *dcbx_info;

-	dcbx_info = kzalloc(sizeof(*dcbx_info), GFP_ATOMIC);
+	dcbx_info = kzalloc_obj(*dcbx_info, GFP_ATOMIC);
 	if (!dcbx_info)
 		return NULL;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c b/drivers/net/ethernet/qlogic/qed/qed_debug.c
index 1f0cea3cae92..a869a2a7e918 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_debug.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c
@@ -6821,9 +6821,8 @@ qed_mcp_trace_alloc_meta_data(struct qed_hwfn *p_hwfn,

 	/* Read number of formats and allocate memory for all formats */
 	meta->formats_num = qed_read_dword_from_buf(meta_buf_bytes, &offset);
-	meta->formats = kcalloc(meta->formats_num,
-				sizeof(struct mcp_trace_format),
-				GFP_KERNEL);
+	meta->formats = kzalloc_objs(struct mcp_trace_format, meta->formats_num,
+				     GFP_KERNEL);
 	if (!meta->formats)
 		return DBG_STATUS_VIRT_MEM_ALLOC_FAILED;

@@ -7536,8 +7535,7 @@ enum dbg_status qed_dbg_user_set_bin_ptr(struct qed_hwfn *p_hwfn,
 enum dbg_status qed_dbg_alloc_user_data(struct qed_hwfn *p_hwfn,
 					void **user_data_ptr)
 {
-	*user_data_ptr = kzalloc(sizeof(struct dbg_tools_user_data),
-				 GFP_KERNEL);
+	*user_data_ptr = kzalloc_obj(struct dbg_tools_user_data, GFP_KERNEL);
 	if (!(*user_data_ptr))
 		return DBG_STATUS_VIRT_MEM_ALLOC_FAILED;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
index f3d2b2b3bad5..4c2027972347 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
@@ -146,7 +146,7 @@ int qed_db_recovery_add(struct qed_dev *cdev,
 	p_hwfn = qed_db_rec_find_hwfn(cdev, db_addr);

 	/* Create entry */
-	db_entry = kzalloc(sizeof(*db_entry), GFP_KERNEL);
+	db_entry = kzalloc_obj(*db_entry, GFP_KERNEL);
 	if (!db_entry) {
 		DP_NOTICE(cdev, "Failed to allocate a db recovery entry\n");
 		return -ENOMEM;
@@ -383,7 +383,7 @@ static int qed_llh_alloc(struct qed_dev *cdev)
 	struct qed_llh_info *p_llh_info;
 	u32 size, i;

-	p_llh_info = kzalloc(sizeof(*p_llh_info), GFP_KERNEL);
+	p_llh_info = kzalloc_obj(*p_llh_info, GFP_KERNEL);
 	if (!p_llh_info)
 		return -ENOMEM;
 	cdev->p_llh_info = p_llh_info;
@@ -2108,27 +2108,27 @@ static int qed_alloc_qm_data(struct qed_hwfn *p_hwfn)
 	if (rc)
 		goto alloc_err;

-	qm_info->qm_pq_params = kcalloc(qed_init_qm_get_num_pqs(p_hwfn),
-					sizeof(*qm_info->qm_pq_params),
-					GFP_KERNEL);
+	qm_info->qm_pq_params = kzalloc_objs(*qm_info->qm_pq_params,
+					     qed_init_qm_get_num_pqs(p_hwfn),
+					     GFP_KERNEL);
 	if (!qm_info->qm_pq_params)
 		goto alloc_err;

-	qm_info->qm_vport_params = kcalloc(qed_init_qm_get_num_vports(p_hwfn),
-					   sizeof(*qm_info->qm_vport_params),
-					   GFP_KERNEL);
+	qm_info->qm_vport_params = kzalloc_objs(*qm_info->qm_vport_params,
+						qed_init_qm_get_num_vports(p_hwfn),
+						GFP_KERNEL);
 	if (!qm_info->qm_vport_params)
 		goto alloc_err;

-	qm_info->qm_port_params = kcalloc(p_hwfn->cdev->num_ports_in_engine,
-					  sizeof(*qm_info->qm_port_params),
-					  GFP_KERNEL);
+	qm_info->qm_port_params = kzalloc_objs(*qm_info->qm_port_params,
+					       p_hwfn->cdev->num_ports_in_engine,
+					       GFP_KERNEL);
 	if (!qm_info->qm_port_params)
 		goto alloc_err;

-	qm_info->wfq_data = kcalloc(qed_init_qm_get_num_vports(p_hwfn),
-				    sizeof(*qm_info->wfq_data),
-				    GFP_KERNEL);
+	qm_info->wfq_data = kzalloc_objs(*qm_info->wfq_data,
+					 qed_init_qm_get_num_vports(p_hwfn),
+					 GFP_KERNEL);
 	if (!qm_info->wfq_data)
 		goto alloc_err;

@@ -2155,7 +2155,7 @@ int qed_resc_alloc(struct qed_dev *cdev)
 		return rc;
 	}

-	cdev->fw_data = kzalloc(sizeof(*cdev->fw_data), GFP_KERNEL);
+	cdev->fw_data = kzalloc_obj(*cdev->fw_data, GFP_KERNEL);
 	if (!cdev->fw_data)
 		return -ENOMEM;

@@ -2345,7 +2345,7 @@ int qed_resc_alloc(struct qed_dev *cdev)
 		goto alloc_err;
 	}

-	cdev->reset_stats = kzalloc(sizeof(*cdev->reset_stats), GFP_KERNEL);
+	cdev->reset_stats = kzalloc_obj(*cdev->reset_stats, GFP_KERNEL);
 	if (!cdev->reset_stats)
 		goto alloc_no_mem;

@@ -2642,7 +2642,7 @@ static int qed_hw_init_common(struct qed_hwfn *p_hwfn,
 	u32 concrete_fid;
 	int rc = 0;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params) {
 		DP_NOTICE(p_hwfn->cdev,
 			  "Failed to allocate common init params\n");
diff --git a/drivers/net/ethernet/qlogic/qed/qed_fcoe.c b/drivers/net/ethernet/qlogic/qed/qed_fcoe.c
index 04602ac94708..9d91e4775b52 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_fcoe.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_fcoe.c
@@ -383,7 +383,7 @@ qed_fcoe_allocate_connection(struct qed_hwfn *p_hwfn,
 	}
 	spin_unlock_bh(&p_hwfn->p_fcoe_info->lock);

-	p_conn = kzalloc(sizeof(*p_conn), GFP_KERNEL);
+	p_conn = kzalloc_obj(*p_conn, GFP_KERNEL);
 	if (!p_conn)
 		return -ENOMEM;

@@ -535,7 +535,7 @@ int qed_fcoe_alloc(struct qed_hwfn *p_hwfn)
 	struct qed_fcoe_info *p_fcoe_info;

 	/* Allocate LL2's set struct */
-	p_fcoe_info = kzalloc(sizeof(*p_fcoe_info), GFP_KERNEL);
+	p_fcoe_info = kzalloc_obj(*p_fcoe_info, GFP_KERNEL);
 	if (!p_fcoe_info) {
 		DP_NOTICE(p_hwfn, "Failed to allocate qed_fcoe_info'\n");
 		return -ENOMEM;
@@ -817,8 +817,8 @@ static int qed_fcoe_start(struct qed_dev *cdev, struct qed_fcoe_tid *tasks)
 	hash_init(cdev->connections);

 	if (tasks) {
-		struct qed_tid_mem *tid_info = kzalloc(sizeof(*tid_info),
-						       GFP_ATOMIC);
+		struct qed_tid_mem *tid_info = kzalloc_obj(*tid_info,
+							   GFP_ATOMIC);

 		if (!tid_info) {
 			DP_NOTICE(cdev,
@@ -855,7 +855,7 @@ static int qed_fcoe_acquire_conn(struct qed_dev *cdev,
 	int rc;

 	/* Allocate a hashed connection */
-	hash_con = kzalloc(sizeof(*hash_con), GFP_KERNEL);
+	hash_con = kzalloc_obj(*hash_con, GFP_KERNEL);
 	if (!hash_con) {
 		DP_NOTICE(cdev, "Failed to allocate hashed connection\n");
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/qlogic/qed/qed_hw.c b/drivers/net/ethernet/qlogic/qed/qed_hw.c
index 9907973399dc..6fff9788101c 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_hw.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_hw.c
@@ -46,7 +46,7 @@ struct qed_ptt_pool {

 int qed_ptt_pool_alloc(struct qed_hwfn *p_hwfn)
 {
-	struct qed_ptt_pool *p_pool = kmalloc(sizeof(*p_pool), GFP_KERNEL);
+	struct qed_ptt_pool *p_pool = kmalloc_obj(*p_pool, GFP_KERNEL);
 	int i;

 	if (!p_pool)
diff --git a/drivers/net/ethernet/qlogic/qed/qed_init_fw_funcs.c b/drivers/net/ethernet/qlogic/qed/qed_init_fw_funcs.c
index aa20bb8caa9a..9b7b05362c68 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_init_fw_funcs.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_init_fw_funcs.c
@@ -1692,8 +1692,8 @@ struct phys_mem_desc *qed_fw_overlay_mem_alloc(struct qed_hwfn *p_hwfn,
 	if (!buf_size)
 		return NULL;

-	allocated_mem = kcalloc(NUM_STORMS, sizeof(struct phys_mem_desc),
-				GFP_KERNEL);
+	allocated_mem = kzalloc_objs(struct phys_mem_desc, NUM_STORMS,
+				     GFP_KERNEL);
 	if (!allocated_mem)
 		return NULL;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_init_ops.c b/drivers/net/ethernet/qlogic/qed/qed_init_ops.c
index b3bf9899c1a1..330c75d9ee07 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_init_ops.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_init_ops.c
@@ -210,8 +210,7 @@ int qed_init_alloc(struct qed_hwfn *p_hwfn)
 	if (IS_VF(p_hwfn->cdev))
 		return 0;

-	rt_data->b_valid = kcalloc(RUNTIME_ARRAY_SIZE, sizeof(bool),
-				   GFP_KERNEL);
+	rt_data->b_valid = kzalloc_objs(bool, RUNTIME_ARRAY_SIZE, GFP_KERNEL);
 	if (!rt_data->b_valid)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_int.c b/drivers/net/ethernet/qlogic/qed/qed_int.c
index 2661c483c67e..a65827240d00 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_int.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_int.c
@@ -1412,7 +1412,7 @@ static int qed_int_sb_attn_alloc(struct qed_hwfn *p_hwfn,
 	void *p_virt;

 	/* SB struct */
-	p_sb = kmalloc(sizeof(*p_sb), GFP_KERNEL);
+	p_sb = kmalloc_obj(*p_sb, GFP_KERNEL);
 	if (!p_sb)
 		return -ENOMEM;

@@ -1765,7 +1765,7 @@ static int qed_int_sp_sb_alloc(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 	void *p_virt;

 	/* SB struct */
-	p_sb = kmalloc(sizeof(*p_sb), GFP_KERNEL);
+	p_sb = kmalloc_obj(*p_sb, GFP_KERNEL);
 	if (!p_sb)
 		return -ENOMEM;

@@ -2188,7 +2188,7 @@ int qed_int_igu_read_cam(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 	u32 min_vf = 0, max_vf = 0;
 	u16 igu_sb_id;

-	p_hwfn->hw_info.p_igu_info = kzalloc(sizeof(*p_igu_info), GFP_KERNEL);
+	p_hwfn->hw_info.p_igu_info = kzalloc_obj(*p_igu_info, GFP_KERNEL);
 	if (!p_hwfn->hw_info.p_igu_info)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_iscsi.c b/drivers/net/ethernet/qlogic/qed/qed_iscsi.c
index 980e7289b481..758fa97be920 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_iscsi.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_iscsi.c
@@ -710,7 +710,7 @@ static int qed_iscsi_allocate_connection(struct qed_hwfn *p_hwfn,
 	/* Need to allocate a new connection */
 	p_params = &p_hwfn->pf_params.iscsi_pf_params;

-	p_conn = kzalloc(sizeof(*p_conn), GFP_KERNEL);
+	p_conn = kzalloc_obj(*p_conn, GFP_KERNEL);
 	if (!p_conn)
 		return -ENOMEM;

@@ -845,7 +845,7 @@ int qed_iscsi_alloc(struct qed_hwfn *p_hwfn)
 {
 	struct qed_iscsi_info *p_iscsi_info;

-	p_iscsi_info = kzalloc(sizeof(*p_iscsi_info), GFP_KERNEL);
+	p_iscsi_info = kzalloc_obj(*p_iscsi_info, GFP_KERNEL);
 	if (!p_iscsi_info)
 		return -ENOMEM;

@@ -1125,7 +1125,7 @@ static int qed_iscsi_start(struct qed_dev *cdev,
 	if (!tasks)
 		return 0;

-	tid_info = kzalloc(sizeof(*tid_info), GFP_KERNEL);
+	tid_info = kzalloc_obj(*tid_info, GFP_KERNEL);

 	if (!tid_info) {
 		qed_iscsi_stop(cdev);
@@ -1159,7 +1159,7 @@ static int qed_iscsi_acquire_conn(struct qed_dev *cdev,
 	int rc;

 	/* Allocate a hashed connection */
-	hash_con = kzalloc(sizeof(*hash_con), GFP_ATOMIC);
+	hash_con = kzalloc_obj(*hash_con, GFP_ATOMIC);
 	if (!hash_con)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
index 1d1d4caad680..3b1ff94a0588 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
@@ -546,7 +546,7 @@ qed_iwarp_create_ep(struct qed_hwfn *p_hwfn, struct qed_iwarp_ep **ep_out)
 	struct qed_iwarp_ep *ep;
 	int rc;

-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;

@@ -2602,7 +2602,7 @@ qed_iwarp_ll2_alloc_buffers(struct qed_hwfn *p_hwfn,
 	int i;

 	for (i = 0; i < num_rx_bufs; i++) {
-		buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+		buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 		if (!buffer) {
 			rc = -ENOMEM;
 			break;
@@ -2759,9 +2759,9 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn,
 	if (rc)
 		goto err;

-	iwarp_info->partial_fpdus = kcalloc((u16)p_hwfn->p_rdma_info->num_qps,
-					    sizeof(*iwarp_info->partial_fpdus),
-					    GFP_KERNEL);
+	iwarp_info->partial_fpdus = kzalloc_objs(*iwarp_info->partial_fpdus,
+						 (u16)p_hwfn->p_rdma_info->num_qps,
+						 GFP_KERNEL);
 	if (!iwarp_info->partial_fpdus) {
 		rc = -ENOMEM;
 		goto err;
@@ -2780,9 +2780,8 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn,
 	 * processing. We can't fail on allocation of such a struct therefore
 	 * we allocate enough to take care of all rx packets
 	 */
-	iwarp_info->mpa_bufs = kcalloc(data.input.rx_num_desc,
-				       sizeof(*iwarp_info->mpa_bufs),
-				       GFP_KERNEL);
+	iwarp_info->mpa_bufs = kzalloc_objs(*iwarp_info->mpa_bufs,
+					    data.input.rx_num_desc, GFP_KERNEL);
 	if (!iwarp_info->mpa_bufs) {
 		rc = -ENOMEM;
 		goto err;
@@ -3167,7 +3166,7 @@ qed_iwarp_create_listen(void *rdma_cxt,
 	struct qed_hwfn *p_hwfn = rdma_cxt;
 	struct qed_iwarp_listener *listener;

-	listener = kzalloc(sizeof(*listener), GFP_KERNEL);
+	listener = kzalloc_obj(*listener, GFP_KERNEL);
 	if (!listener)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_l2.c b/drivers/net/ethernet/qlogic/qed/qed_l2.c
index 970b9aabbc3d..e78f9c2ffc38 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_l2.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_l2.c
@@ -58,7 +58,7 @@ int qed_l2_alloc(struct qed_hwfn *p_hwfn)
 	if (!QED_IS_L2_PERSONALITY(p_hwfn))
 		return 0;

-	p_l2_info = kzalloc(sizeof(*p_l2_info), GFP_KERNEL);
+	p_l2_info = kzalloc_obj(*p_l2_info, GFP_KERNEL);
 	if (!p_l2_info)
 		return -ENOMEM;
 	p_hwfn->p_l2_info = p_l2_info;
diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
index ab5ef254a748..904bb1cd9bdb 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
@@ -1195,8 +1195,7 @@ qed_ll2_acquire_connection_rx(struct qed_hwfn *p_hwfn,
 	}

 	capacity = qed_chain_get_capacity(&p_ll2_info->rx_queue.rxq_chain);
-	p_descq = kcalloc(capacity, sizeof(struct qed_ll2_rx_packet),
-			  GFP_KERNEL);
+	p_descq = kzalloc_objs(struct qed_ll2_rx_packet, capacity, GFP_KERNEL);
 	if (!p_descq) {
 		rc = -ENOMEM;
 		DP_NOTICE(p_hwfn, "Failed to allocate ll2 Rx desc\n");
@@ -1291,7 +1290,7 @@ qed_ll2_acquire_connection_ooo(struct qed_hwfn *p_hwfn,

 	for (buf_idx = 0; buf_idx < p_ll2_info->input.rx_num_ooo_buffers;
 	     buf_idx++) {
-		p_buf = kzalloc(sizeof(*p_buf), GFP_KERNEL);
+		p_buf = kzalloc_obj(*p_buf, GFP_KERNEL);
 		if (!p_buf) {
 			rc = -ENOMEM;
 			goto out;
@@ -2200,8 +2199,9 @@ int qed_ll2_alloc(struct qed_hwfn *p_hwfn)
 	u8 i;

 	/* Allocate LL2's set struct */
-	p_ll2_connections = kcalloc(QED_MAX_NUM_OF_LL2_CONNECTIONS,
-				    sizeof(struct qed_ll2_info), GFP_KERNEL);
+	p_ll2_connections = kzalloc_objs(struct qed_ll2_info,
+					 QED_MAX_NUM_OF_LL2_CONNECTIONS,
+					 GFP_KERNEL);
 	if (!p_ll2_connections) {
 		DP_NOTICE(p_hwfn, "Failed to allocate `struct qed_ll2'\n");
 		return -ENOMEM;
@@ -2603,7 +2603,7 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
 	DP_INFO(cdev, "Allocating %d LL2 buffers of size %08x bytes\n",
 		rx_num_desc, cdev->ll2->rx_size);
 	for (i = 0; i < rx_num_desc; i++) {
-		buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+		buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 		if (!buffer) {
 			DP_INFO(cdev, "Failed to allocate LL2 buffers\n");
 			rc = -ENOMEM;
@@ -2811,7 +2811,7 @@ const struct qed_ll2_ops qed_ll2_ops_pass = {

 int qed_ll2_alloc_if(struct qed_dev *cdev)
 {
-	cdev->ll2 = kzalloc(sizeof(*cdev->ll2), GFP_KERNEL);
+	cdev->ll2 = kzalloc_obj(*cdev->ll2, GFP_KERNEL);
 	return cdev->ll2 ? 0 : -ENOMEM;
 }

diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index d4685ad4b169..544d790efdea 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -461,7 +461,7 @@ static struct qed_dev *qed_alloc_cdev(struct pci_dev *pdev)
 {
 	struct qed_dev *cdev;

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		return cdev;

@@ -612,7 +612,7 @@ static int qed_set_int_mode(struct qed_dev *cdev, bool force_mode)
 	case QED_INT_MODE_MSIX:
 		/* Allocate MSIX table */
 		cnt = int_params->in.num_vectors;
-		int_params->msix_table = kcalloc(cnt, sizeof(*tbl), GFP_KERNEL);
+		int_params->msix_table = kzalloc_objs(*tbl, cnt, GFP_KERNEL);
 		if (!int_params->msix_table) {
 			rc = -ENOMEM;
 			goto out;
@@ -1050,7 +1050,7 @@ static int qed_alloc_stream_mem(struct qed_dev *cdev)
 	for_each_hwfn(cdev, i) {
 		struct qed_hwfn *p_hwfn = &cdev->hwfns[i];

-		p_hwfn->stream = kzalloc(sizeof(*p_hwfn->stream), GFP_KERNEL);
+		p_hwfn->stream = kzalloc_obj(*p_hwfn->stream, GFP_KERNEL);
 		if (!p_hwfn->stream)
 			return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
index c7f497c36f66..22802c793d68 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
@@ -104,7 +104,7 @@ qed_mcp_cmd_add_elem(struct qed_hwfn *p_hwfn,
 {
 	struct qed_mcp_cmd_elem *p_cmd_elem = NULL;

-	p_cmd_elem = kzalloc(sizeof(*p_cmd_elem), GFP_ATOMIC);
+	p_cmd_elem = kzalloc_obj(*p_cmd_elem, GFP_ATOMIC);
 	if (!p_cmd_elem)
 		goto out;

@@ -241,7 +241,7 @@ int qed_mcp_cmd_init(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 	u32 size;

 	/* Allocate mcp_info structure */
-	p_hwfn->mcp_info = kzalloc(sizeof(*p_hwfn->mcp_info), GFP_KERNEL);
+	p_hwfn->mcp_info = kzalloc_obj(*p_hwfn->mcp_info, GFP_KERNEL);
 	if (!p_hwfn->mcp_info)
 		goto err;
 	p_info = p_hwfn->mcp_info;
@@ -3365,9 +3365,8 @@ int qed_mcp_nvm_info_populate(struct qed_hwfn *p_hwfn)
 		goto err0;
 	}

-	nvm_info.image_att = kmalloc_array(nvm_info.num_images,
-					   sizeof(struct bist_nvm_image_att),
-					   GFP_KERNEL);
+	nvm_info.image_att = kmalloc_objs(struct bist_nvm_image_att,
+					  nvm_info.num_images, GFP_KERNEL);
 	if (!nvm_info.image_att) {
 		rc = -ENOMEM;
 		goto err0;
diff --git a/drivers/net/ethernet/qlogic/qed/qed_nvmetcp.c b/drivers/net/ethernet/qlogic/qed/qed_nvmetcp.c
index f19128c8d9cc..81823f4197f6 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_nvmetcp.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_nvmetcp.c
@@ -218,7 +218,7 @@ static int qed_nvmetcp_start(struct qed_dev *cdev,
 	if (!tasks)
 		return 0;

-	tid_info = kzalloc(sizeof(*tid_info), GFP_KERNEL);
+	tid_info = kzalloc_obj(*tid_info, GFP_KERNEL);
 	if (!tid_info) {
 		qed_nvmetcp_stop(cdev);

@@ -477,7 +477,7 @@ static int qed_nvmetcp_allocate_connection(struct qed_hwfn *p_hwfn,

 	/* Need to allocate a new connection */
 	p_params = &p_hwfn->pf_params.nvmetcp_pf_params;
-	p_conn = kzalloc(sizeof(*p_conn), GFP_KERNEL);
+	p_conn = kzalloc_obj(*p_conn, GFP_KERNEL);
 	if (!p_conn)
 		return -ENOMEM;

@@ -568,7 +568,7 @@ int qed_nvmetcp_alloc(struct qed_hwfn *p_hwfn)
 {
 	struct qed_nvmetcp_info *p_nvmetcp_info;

-	p_nvmetcp_info = kzalloc(sizeof(*p_nvmetcp_info), GFP_KERNEL);
+	p_nvmetcp_info = kzalloc_obj(*p_nvmetcp_info, GFP_KERNEL);
 	if (!p_nvmetcp_info)
 		return -ENOMEM;

@@ -611,7 +611,7 @@ static int qed_nvmetcp_acquire_conn(struct qed_dev *cdev,
 	int rc;

 	/* Allocate a hashed connection */
-	hash_con = kzalloc(sizeof(*hash_con), GFP_ATOMIC);
+	hash_con = kzalloc_obj(*hash_con, GFP_ATOMIC);
 	if (!hash_con)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_ooo.c b/drivers/net/ethernet/qlogic/qed/qed_ooo.c
index 8be567a6ad44..23631e18858e 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_ooo.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_ooo.c
@@ -107,7 +107,7 @@ int qed_ooo_alloc(struct qed_hwfn *p_hwfn)
 		return -EINVAL;
 	}

-	p_ooo_info = kzalloc(sizeof(*p_ooo_info), GFP_KERNEL);
+	p_ooo_info = kzalloc_obj(*p_ooo_info, GFP_KERNEL);
 	if (!p_ooo_info)
 		return -ENOMEM;

@@ -118,9 +118,8 @@ int qed_ooo_alloc(struct qed_hwfn *p_hwfn)
 	INIT_LIST_HEAD(&p_ooo_info->ready_buffers_list);
 	INIT_LIST_HEAD(&p_ooo_info->free_isles_list);

-	p_ooo_info->p_isles_mem = kcalloc(max_num_isles,
-					  sizeof(struct qed_ooo_isle),
-					  GFP_KERNEL);
+	p_ooo_info->p_isles_mem = kzalloc_objs(struct qed_ooo_isle,
+					       max_num_isles, GFP_KERNEL);
 	if (!p_ooo_info->p_isles_mem)
 		goto no_isles_mem;

@@ -131,9 +130,8 @@ int qed_ooo_alloc(struct qed_hwfn *p_hwfn)
 	}

 	p_ooo_info->p_archipelagos_mem =
-				kcalloc(max_num_archipelagos,
-					sizeof(struct qed_ooo_archipelago),
-					GFP_KERNEL);
+				kzalloc_objs(struct qed_ooo_archipelago,
+					     max_num_archipelagos, GFP_KERNEL);
 	if (!p_ooo_info->p_archipelagos_mem)
 		goto no_archipelagos_mem;

@@ -141,9 +139,9 @@ int qed_ooo_alloc(struct qed_hwfn *p_hwfn)
 		INIT_LIST_HEAD(&p_ooo_info->p_archipelagos_mem[i].isles_list);

 	p_ooo_info->ooo_history.p_cqes =
-				kcalloc(QED_MAX_NUM_OOO_HISTORY_ENTRIES,
-					sizeof(struct ooo_opaque),
-					GFP_KERNEL);
+				kzalloc_objs(struct ooo_opaque,
+					     QED_MAX_NUM_OOO_HISTORY_ENTRIES,
+					     GFP_KERNEL);
 	if (!p_ooo_info->ooo_history.p_cqes)
 		goto no_history_mem;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_rdma.c b/drivers/net/ethernet/qlogic/qed/qed_rdma.c
index 9a1660a12c57..8872c9ebcd26 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_rdma.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_rdma.c
@@ -119,7 +119,7 @@ int qed_rdma_info_alloc(struct qed_hwfn *p_hwfn)
 {
 	struct qed_rdma_info *p_rdma_info;

-	p_rdma_info = kzalloc(sizeof(*p_rdma_info), GFP_KERNEL);
+	p_rdma_info = kzalloc_obj(*p_rdma_info, GFP_KERNEL);
 	if (!p_rdma_info)
 		return -ENOMEM;

@@ -168,12 +168,12 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn)
 	p_rdma_info->max_queue_zones = (u16)RESC_NUM(p_hwfn, QED_L2_QUEUE);

 	/* Allocate a struct with device params and fill it */
-	p_rdma_info->dev = kzalloc(sizeof(*p_rdma_info->dev), GFP_KERNEL);
+	p_rdma_info->dev = kzalloc_obj(*p_rdma_info->dev, GFP_KERNEL);
 	if (!p_rdma_info->dev)
 		return rc;

 	/* Allocate a struct with port params and fill it */
-	p_rdma_info->port = kzalloc(sizeof(*p_rdma_info->port), GFP_KERNEL);
+	p_rdma_info->port = kzalloc_obj(*p_rdma_info->port, GFP_KERNEL);
 	if (!p_rdma_info->port)
 		goto free_rdma_dev;

@@ -1293,7 +1293,7 @@ qed_rdma_create_qp(void *rdma_cxt,
 		}
 	}

-	qp = kzalloc(sizeof(*qp), GFP_KERNEL);
+	qp = kzalloc_obj(*qp, GFP_KERNEL);
 	if (!qp)
 		return NULL;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_spq.c b/drivers/net/ethernet/qlogic/qed/qed_spq.c
index d01b9245f811..d0ef2782f5ba 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_spq.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_spq.c
@@ -407,7 +407,7 @@ int qed_eq_alloc(struct qed_hwfn *p_hwfn, u16 num_elem)
 	int ret;

 	/* Allocate EQ struct */
-	p_eq = kzalloc(sizeof(*p_eq), GFP_KERNEL);
+	p_eq = kzalloc_obj(*p_eq, GFP_KERNEL);
 	if (!p_eq)
 		return -ENOMEM;

@@ -562,7 +562,7 @@ int qed_spq_alloc(struct qed_hwfn *p_hwfn)
 	int ret;

 	/* SPQ struct */
-	p_spq = kzalloc(sizeof(*p_spq), GFP_KERNEL);
+	p_spq = kzalloc_obj(*p_spq, GFP_KERNEL);
 	if (!p_spq)
 		return -ENOMEM;

@@ -633,7 +633,7 @@ int qed_spq_get_entry(struct qed_hwfn *p_hwfn, struct qed_spq_entry **pp_ent)
 	spin_lock_bh(&p_spq->lock);

 	if (list_empty(&p_spq->free_pool)) {
-		p_ent = kzalloc(sizeof(*p_ent), GFP_ATOMIC);
+		p_ent = kzalloc_obj(*p_ent, GFP_ATOMIC);
 		if (!p_ent) {
 			DP_NOTICE(p_hwfn,
 				  "Failed to allocate an SPQ entry for a pending ramrod\n");
@@ -1013,7 +1013,7 @@ int qed_consq_alloc(struct qed_hwfn *p_hwfn)
 	int ret;

 	/* Allocate ConsQ struct */
-	p_consq = kzalloc(sizeof(*p_consq), GFP_KERNEL);
+	p_consq = kzalloc_obj(*p_consq, GFP_KERNEL);
 	if (!p_consq)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_sriov.c b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
index 5222a035fd19..cc9087abbacc 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_sriov.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
@@ -543,7 +543,7 @@ int qed_iov_alloc(struct qed_hwfn *p_hwfn)
 		return 0;
 	}

-	p_sriov = kzalloc(sizeof(*p_sriov), GFP_KERNEL);
+	p_sriov = kzalloc_obj(*p_sriov, GFP_KERNEL);
 	if (!p_sriov)
 		return -ENOMEM;

@@ -600,7 +600,7 @@ int qed_iov_hw_info(struct qed_hwfn *p_hwfn)
 	}

 	/* Allocate a new struct for IOV information */
-	cdev->p_iov_info = kzalloc(sizeof(*cdev->p_iov_info), GFP_KERNEL);
+	cdev->p_iov_info = kzalloc_obj(*cdev->p_iov_info, GFP_KERNEL);
 	if (!cdev->p_iov_info)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qed/qed_vf.c b/drivers/net/ethernet/qlogic/qed/qed_vf.c
index 0e265ed1f501..b9ebf91e6b6a 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_vf.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_vf.c
@@ -454,7 +454,7 @@ int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn)
 	p_hwfn->hw_info.concrete_fid = REG_RD(p_hwfn, reg);

 	/* Allocate vf sriov info */
-	p_iov = kzalloc(sizeof(*p_iov), GFP_KERNEL);
+	p_iov = kzalloc_obj(*p_iov, GFP_KERNEL);
 	if (!p_iov)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c b/drivers/net/ethernet/qlogic/qede/qede_filter.c
index 7e341e026489..32bb653c50f7 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_filter.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c
@@ -413,7 +413,7 @@ qede_alloc_filter(struct qede_dev *edev, int min_hlen)
 	if (bit_id >= QEDE_RFS_MAX_FLTR)
 		return NULL;

-	n = kzalloc(sizeof(*n), GFP_ATOMIC);
+	n = kzalloc_obj(*n, GFP_ATOMIC);
 	if (!n)
 		return NULL;

@@ -682,7 +682,7 @@ int qede_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)

 	DP_VERBOSE(edev, NETIF_MSG_IFUP, "Adding vlan 0x%04x\n", vid);

-	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan) {
 		DP_INFO(edev, "Failed to allocate struct for vlan\n");
 		return -ENOMEM;
@@ -1916,7 +1916,7 @@ int qede_add_tc_flower_fltr(struct qede_dev *edev, __be16 proto,
 		goto unlock;
 	}

-	n = kzalloc(sizeof(*n), GFP_KERNEL);
+	n = kzalloc_obj(*n, GFP_KERNEL);
 	if (!n) {
 		rc = -ENOMEM;
 		goto unlock;
@@ -2059,7 +2059,7 @@ int qede_add_cls_rule(struct qede_dev *edev, struct ethtool_rxnfc *info)
 		goto unlock;
 	}

-	n = kzalloc(sizeof(*n), GFP_KERNEL);
+	n = kzalloc_obj(*n, GFP_KERNEL);
 	if (!n) {
 		rc = -ENOMEM;
 		goto unlock;
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index 66ab1b9d65a1..dfa221b30e9e 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -963,17 +963,17 @@ static int qede_alloc_fp_array(struct qede_dev *edev)
 	struct qede_fastpath *fp;
 	int i;

-	edev->fp_array = kcalloc(QEDE_QUEUE_CNT(edev),
-				 sizeof(*edev->fp_array), GFP_KERNEL);
+	edev->fp_array = kzalloc_objs(*edev->fp_array, QEDE_QUEUE_CNT(edev),
+				      GFP_KERNEL);
 	if (!edev->fp_array) {
 		DP_NOTICE(edev, "fp array allocation failed\n");
 		goto err;
 	}

 	if (!edev->coal_entry) {
-		edev->coal_entry = kcalloc(QEDE_MAX_RSS_CNT(edev),
-					   sizeof(*edev->coal_entry),
-					   GFP_KERNEL);
+		edev->coal_entry = kzalloc_objs(*edev->coal_entry,
+						QEDE_MAX_RSS_CNT(edev),
+						GFP_KERNEL);
 		if (!edev->coal_entry) {
 			DP_ERR(edev, "coalesce entry allocation failed\n");
 			goto err;
@@ -990,7 +990,7 @@ static int qede_alloc_fp_array(struct qede_dev *edev)
 	for_each_queue(i) {
 		fp = &edev->fp_array[i];

-		fp->sb_info = kzalloc(sizeof(*fp->sb_info), GFP_KERNEL);
+		fp->sb_info = kzalloc_obj(*fp->sb_info, GFP_KERNEL);
 		if (!fp->sb_info) {
 			DP_NOTICE(edev, "sb info struct allocation failed\n");
 			goto err;
@@ -1007,20 +1007,20 @@ static int qede_alloc_fp_array(struct qede_dev *edev)
 		}

 		if (fp->type & QEDE_FASTPATH_TX) {
-			fp->txq = kcalloc(edev->dev_info.num_tc,
-					  sizeof(*fp->txq), GFP_KERNEL);
+			fp->txq = kzalloc_objs(*fp->txq, edev->dev_info.num_tc,
+					       GFP_KERNEL);
 			if (!fp->txq)
 				goto err;
 		}

 		if (fp->type & QEDE_FASTPATH_RX) {
-			fp->rxq = kzalloc(sizeof(*fp->rxq), GFP_KERNEL);
+			fp->rxq = kzalloc_obj(*fp->rxq, GFP_KERNEL);
 			if (!fp->rxq)
 				goto err;

 			if (edev->xdp_prog) {
-				fp->xdp_tx = kzalloc(sizeof(*fp->xdp_tx),
-						     GFP_KERNEL);
+				fp->xdp_tx = kzalloc_obj(*fp->xdp_tx,
+							 GFP_KERNEL);
 				if (!fp->xdp_tx)
 					goto err;
 				fp->type |= QEDE_FASTPATH_XDP;
diff --git a/drivers/net/ethernet/qlogic/qede/qede_ptp.c b/drivers/net/ethernet/qlogic/qede/qede_ptp.c
index d351be5fbda1..774f77f9a55e 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_ptp.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_ptp.c
@@ -446,7 +446,7 @@ int qede_ptp_enable(struct qede_dev *edev)
 	struct qede_ptp *ptp;
 	int rc;

-	ptp = kzalloc(sizeof(*ptp), GFP_KERNEL);
+	ptp = kzalloc_obj(*ptp, GFP_KERNEL);
 	if (!ptp) {
 		DP_INFO(edev, "Failed to allocate struct for PTP\n");
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/qlogic/qede/qede_rdma.c b/drivers/net/ethernet/qlogic/qede/qede_rdma.c
index 6304514a6f2c..d0fff415871e 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_rdma.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_rdma.c
@@ -258,7 +258,7 @@ qede_rdma_get_free_event_node(struct qede_dev *edev)
 	}

 	if (!found) {
-		event_node = kzalloc(sizeof(*event_node), GFP_ATOMIC);
+		event_node = kzalloc_obj(*event_node, GFP_ATOMIC);
 		if (!event_node) {
 			DP_NOTICE(edev,
 				  "qedr: Could not allocate memory for rdma work\n");
diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c
index fca94a69c777..b75b4708c300 100644
--- a/drivers/net/ethernet/qlogic/qla3xxx.c
+++ b/drivers/net/ethernet/qlogic/qla3xxx.c
@@ -2578,9 +2578,8 @@ static int ql_alloc_buffer_queues(struct ql3_adapter *qdev)
 	else
 		qdev->lrg_buf_q_alloc_size = qdev->lrg_buf_q_size * 2;

-	qdev->lrg_buf = kmalloc_array(qdev->num_large_buffers,
-				      sizeof(struct ql_rcv_buf_cb),
-				      GFP_KERNEL);
+	qdev->lrg_buf = kmalloc_objs(struct ql_rcv_buf_cb,
+				     qdev->num_large_buffers, GFP_KERNEL);
 	if (qdev->lrg_buf == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index 91e7b38143ea..bae848bd5e26 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -1732,7 +1732,7 @@ int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *adapter, u32 mode)
 	if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED)
 		return -EIO;

-	cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
+	cmd = kzalloc_obj(*cmd, GFP_ATOMIC);
 	if (!cmd)
 		return -ENOMEM;

@@ -2103,7 +2103,7 @@ int qlcnic_83xx_sre_macaddr_change(struct qlcnic_adapter *adapter, u8 *addr,
 	if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED)
 		return -EIO;

-	cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
+	cmd = kzalloc_obj(*cmd, GFP_ATOMIC);
 	if (!cmd)
 		return -ENOMEM;

@@ -4164,7 +4164,7 @@ int qlcnic_83xx_init_mailbox_work(struct qlcnic_adapter *adapter)
 	struct qlcnic_hardware_context *ahw = adapter->ahw;
 	struct qlcnic_mailbox *mbx;

-	ahw->mailbox = kzalloc(sizeof(*mbx), GFP_KERNEL);
+	ahw->mailbox = kzalloc_obj(*mbx, GFP_KERNEL);
 	if (!ahw->mailbox)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
index 6145252d8ff8..42c8e5490ee7 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -2388,7 +2388,7 @@ static int qlcnic_83xx_get_fw_info(struct qlcnic_adapter *adapter)
 	struct qlc_83xx_fw_info *fw_info;
 	int err = 0;

-	ahw->fw_info = kzalloc(sizeof(*fw_info), GFP_KERNEL);
+	ahw->fw_info = kzalloc_obj(*fw_info, GFP_KERNEL);
 	if (!ahw->fw_info) {
 		err = -ENOMEM;
 	} else {
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c
index 4d638f60f237..576340315e0d 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c
@@ -259,7 +259,7 @@ int qlcnic_register_dcb(struct qlcnic_adapter *adapter)
 	if (qlcnic_sriov_vf_check(adapter))
 		return 0;

-	dcb = kzalloc(sizeof(struct qlcnic_dcb), GFP_ATOMIC);
+	dcb = kzalloc_obj(struct qlcnic_dcb, GFP_ATOMIC);
 	if (!dcb)
 		return -ENOMEM;

@@ -317,13 +317,13 @@ static int __qlcnic_dcb_attach(struct qlcnic_dcb *dcb)
 		return -1;
 	}

-	dcb->cfg = kzalloc(sizeof(struct qlcnic_dcb_cfg), GFP_ATOMIC);
+	dcb->cfg = kzalloc_obj(struct qlcnic_dcb_cfg, GFP_ATOMIC);
 	if (!dcb->cfg) {
 		err = -ENOMEM;
 		goto out_free_wq;
 	}

-	dcb->param = kzalloc(sizeof(struct qlcnic_dcb_mbx_params), GFP_ATOMIC);
+	dcb->param = kzalloc_obj(struct qlcnic_dcb_mbx_params, GFP_ATOMIC);
 	if (!dcb->param) {
 		err = -ENOMEM;
 		goto out_free_cfg;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
index ae4ee0326ee1..e58176badc1f 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
@@ -489,7 +489,7 @@ int qlcnic_nic_add_mac(struct qlcnic_adapter *adapter, const u8 *addr, u16 vlan,
 			return 0;
 	}

-	cur = kzalloc(sizeof(*cur), GFP_ATOMIC);
+	cur = kzalloc_obj(*cur, GFP_ATOMIC);
 	if (cur == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c
index 09f20c794754..e56ef10b6a2d 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c
@@ -189,8 +189,8 @@ int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter)

 	recv_ctx = adapter->recv_ctx;

-	rds_ring = kcalloc(adapter->max_rds_rings,
-			   sizeof(struct qlcnic_host_rds_ring), GFP_KERNEL);
+	rds_ring = kzalloc_objs(struct qlcnic_host_rds_ring,
+				adapter->max_rds_rings, GFP_KERNEL);
 	if (rds_ring == NULL)
 		goto err_out;

@@ -454,7 +454,7 @@ int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter)
 		return -EIO;
 	}

-	buf = kcalloc(n, sizeof(struct crb_addr_pair), GFP_KERNEL);
+	buf = kzalloc_objs(struct crb_addr_pair, n, GFP_KERNEL);
 	if (buf == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
index b9dc0071c5de..537fd26da904 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
@@ -220,7 +220,7 @@ static void qlcnic_add_lb_filter(struct qlcnic_adapter *adapter,
 			return;
 		}

-		fil = kzalloc(sizeof(struct qlcnic_filter), GFP_ATOMIC);
+		fil = kzalloc_obj(struct qlcnic_filter, GFP_ATOMIC);
 		if (!fil)
 			return;

@@ -346,7 +346,7 @@ static void qlcnic_send_filter(struct qlcnic_adapter *adapter,
 		return;
 	}

-	fil = kzalloc(sizeof(struct qlcnic_filter), GFP_ATOMIC);
+	fil = kzalloc_obj(struct qlcnic_filter, GFP_ATOMIC);
 	if (!fil)
 		return;

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index e051d8c7a28d..00eab09c1710 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -679,9 +679,8 @@ int qlcnic_setup_tss_rss_intr(struct qlcnic_adapter *adapter)
 		num_msix += 1;

 	if (!adapter->msix_entries) {
-		adapter->msix_entries = kcalloc(num_msix,
-						sizeof(struct msix_entry),
-						GFP_KERNEL);
+		adapter->msix_entries = kzalloc_objs(struct msix_entry,
+						     num_msix, GFP_KERNEL);
 		if (!adapter->msix_entries)
 			return -ENOMEM;
 	}
@@ -734,9 +733,8 @@ int qlcnic_enable_msix(struct qlcnic_adapter *adapter, u32 num_msix)
 	int err, vector;

 	if (!adapter->msix_entries) {
-		adapter->msix_entries = kcalloc(num_msix,
-						sizeof(struct msix_entry),
-						GFP_KERNEL);
+		adapter->msix_entries = kzalloc_objs(struct msix_entry,
+						     num_msix, GFP_KERNEL);
 		if (!adapter->msix_entries)
 			return -ENOMEM;
 	}
@@ -952,7 +950,7 @@ static int qlcnic_get_act_pci_func(struct qlcnic_adapter *adapter)
 	if (ahw->op_mode == QLCNIC_MGMT_FUNC)
 		return 0;

-	pci_info = kcalloc(ahw->max_vnic_func, sizeof(*pci_info), GFP_KERNEL);
+	pci_info = kzalloc_objs(*pci_info, ahw->max_vnic_func, GFP_KERNEL);
 	if (!pci_info)
 		return -ENOMEM;

@@ -986,7 +984,7 @@ int qlcnic_init_pci_info(struct qlcnic_adapter *adapter)
 	u16 act_pci_func;
 	u8 pfn;

-	pci_info = kcalloc(ahw->max_vnic_func, sizeof(*pci_info), GFP_KERNEL);
+	pci_info = kzalloc_objs(*pci_info, ahw->max_vnic_func, GFP_KERNEL);
 	if (!pci_info)
 		return -ENOMEM;

@@ -996,17 +994,15 @@ int qlcnic_init_pci_info(struct qlcnic_adapter *adapter)

 	act_pci_func = ahw->total_nic_func;

-	adapter->npars = kcalloc(act_pci_func,
-				 sizeof(struct qlcnic_npar_info),
-				 GFP_KERNEL);
+	adapter->npars = kzalloc_objs(struct qlcnic_npar_info, act_pci_func,
+				      GFP_KERNEL);
 	if (!adapter->npars) {
 		ret = -ENOMEM;
 		goto err_pci_info;
 	}

-	adapter->eswitch = kcalloc(QLCNIC_NIU_MAX_XG_PORTS,
-				   sizeof(struct qlcnic_eswitch),
-				   GFP_KERNEL);
+	adapter->eswitch = kzalloc_objs(struct qlcnic_eswitch,
+					QLCNIC_NIU_MAX_XG_PORTS, GFP_KERNEL);
 	if (!adapter->eswitch) {
 		ret = -ENOMEM;
 		goto err_npars;
@@ -2059,8 +2055,7 @@ static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter)
 	struct qlcnic_hardware_context *ahw = adapter->ahw;
 	int err = 0;

-	adapter->recv_ctx = kzalloc(sizeof(struct qlcnic_recv_context),
-				GFP_KERNEL);
+	adapter->recv_ctx = kzalloc_obj(struct qlcnic_recv_context, GFP_KERNEL);
 	if (!adapter->recv_ctx) {
 		err = -ENOMEM;
 		goto err_out;
@@ -2356,8 +2351,8 @@ int qlcnic_alloc_tx_rings(struct qlcnic_adapter *adapter,
 	struct qlcnic_host_tx_ring *tx_ring;
 	struct qlcnic_cmd_buffer *cmd_buf_arr;

-	tx_ring = kcalloc(adapter->drv_tx_rings,
-			  sizeof(struct qlcnic_host_tx_ring), GFP_KERNEL);
+	tx_ring = kzalloc_objs(struct qlcnic_host_tx_ring,
+			       adapter->drv_tx_rings, GFP_KERNEL);
 	if (tx_ring == NULL)
 		return -ENOMEM;

@@ -2444,7 +2439,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

 	pci_set_master(pdev);

-	ahw = kzalloc(sizeof(struct qlcnic_hardware_context), GFP_KERNEL);
+	ahw = kzalloc_obj(struct qlcnic_hardware_context, GFP_KERNEL);
 	if (!ahw) {
 		err = -ENOMEM;
 		goto err_out_free_res;
@@ -2851,8 +2846,8 @@ void qlcnic_alloc_lb_filters_mem(struct qlcnic_adapter *adapter)
 		adapter->fhash.fbucket_size = QLC_83XX_LB_BUCKET_SIZE;
 	}

-	head = kcalloc(adapter->fhash.fbucket_size,
-		       sizeof(struct hlist_head), GFP_ATOMIC);
+	head = kzalloc_objs(struct hlist_head, adapter->fhash.fbucket_size,
+		            GFP_ATOMIC);

 	if (!head)
 		return;
@@ -2868,8 +2863,8 @@ void qlcnic_alloc_lb_filters_mem(struct qlcnic_adapter *adapter)

 	adapter->rx_fhash.fbucket_size = adapter->fhash.fbucket_size;

-	head = kcalloc(adapter->rx_fhash.fbucket_size,
-		       sizeof(struct hlist_head), GFP_ATOMIC);
+	head = kzalloc_objs(struct hlist_head, adapter->rx_fhash.fbucket_size,
+		            GFP_ATOMIC);

 	if (!head)
 		return;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c
index 7ecb3dfe30bd..c2bf5455092c 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c
@@ -792,8 +792,7 @@ static u32 qlcnic_read_memory_pexdma(struct qlcnic_adapter *adapter,
 	}

 	/* Create DMA descriptor */
-	dma_descr = kzalloc(sizeof(struct qlcnic_pex_dma_descriptor),
-			    GFP_KERNEL);
+	dma_descr = kzalloc_obj(struct qlcnic_pex_dma_descriptor, GFP_KERNEL);
 	if (!dma_descr) {
 		*ret = -ENOMEM;
 		return 0;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
index d57b976b9040..c6af69e5a700 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
@@ -149,15 +149,15 @@ int qlcnic_sriov_init(struct qlcnic_adapter *adapter, int num_vfs)
 	if (!qlcnic_sriov_enable_check(adapter))
 		return -EIO;

-	sriov  = kzalloc(sizeof(struct qlcnic_sriov), GFP_KERNEL);
+	sriov  = kzalloc_obj(struct qlcnic_sriov, GFP_KERNEL);
 	if (!sriov)
 		return -ENOMEM;

 	adapter->ahw->sriov = sriov;
 	sriov->num_vfs = num_vfs;
 	bc = &sriov->bc;
-	sriov->vf_info = kcalloc(num_vfs, sizeof(struct qlcnic_vf_info),
-				 GFP_KERNEL);
+	sriov->vf_info = kzalloc_objs(struct qlcnic_vf_info, num_vfs,
+				      GFP_KERNEL);
 	if (!sriov->vf_info) {
 		err = -ENOMEM;
 		goto qlcnic_free_sriov;
@@ -201,7 +201,7 @@ int qlcnic_sriov_init(struct qlcnic_adapter *adapter, int num_vfs)
 		INIT_WORK(&vf->trans_work, qlcnic_sriov_process_bc_cmd);

 		if (qlcnic_sriov_pf_check(adapter)) {
-			vp = kzalloc(sizeof(struct qlcnic_vport), GFP_KERNEL);
+			vp = kzalloc_obj(struct qlcnic_vport, GFP_KERNEL);
 			if (!vp) {
 				err = -ENOMEM;
 				goto qlcnic_destroy_async_wq;
@@ -699,7 +699,7 @@ int qlcnic_sriov_func_to_index(struct qlcnic_adapter *adapter, u8 pci_func)

 static inline int qlcnic_sriov_alloc_bc_trans(struct qlcnic_bc_trans **trans)
 {
-	*trans = kzalloc(sizeof(struct qlcnic_bc_trans), GFP_ATOMIC);
+	*trans = kzalloc_obj(struct qlcnic_bc_trans, GFP_ATOMIC);
 	if (!*trans)
 		return -ENOMEM;

@@ -710,7 +710,7 @@ static inline int qlcnic_sriov_alloc_bc_trans(struct qlcnic_bc_trans **trans)
 static inline int qlcnic_sriov_alloc_bc_msg(struct qlcnic_bc_hdr **hdr,
 					    u32 size)
 {
-	*hdr = kcalloc(size, sizeof(struct qlcnic_bc_hdr), GFP_ATOMIC);
+	*hdr = kzalloc_objs(struct qlcnic_bc_hdr, size, GFP_ATOMIC);
 	if (!*hdr)
 		return -ENOMEM;

@@ -1634,7 +1634,7 @@ qlcnic_sriov_alloc_async_cmd(struct qlcnic_back_channel *bc,
 {
 	struct qlcnic_async_cmd *entry = NULL;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return NULL;

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
index 8dd7aa08ecfb..7052d34aad45 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
@@ -799,7 +799,7 @@ static int qlcnic_sriov_cfg_vf_def_mac(struct qlcnic_adapter *adapter,

 	vp = vf->vp;

-	cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
+	cmd = kzalloc_obj(*cmd, GFP_ATOMIC);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
index 5296d9a6ee83..406101671602 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
@@ -909,7 +909,7 @@ static ssize_t qlcnic_sysfs_read_pci_config(struct file *file,
 	int i, ret;
 	u32 count;

-	pci_info = kcalloc(size, sizeof(*pci_info), GFP_KERNEL);
+	pci_info = kzalloc_objs(*pci_info, size, GFP_KERNEL);
 	if (!pci_info)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
index ba8763cac9d9..723ddbb1a70a 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
@@ -68,7 +68,7 @@ static int rmnet_register_real_device(struct net_device *real_dev,
 		return 0;
 	}

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

@@ -143,7 +143,7 @@ static int rmnet_newlink(struct net_device *dev,
 		return -ENODEV;
 	}

-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/realtek/r8169_leds.c b/drivers/net/ethernet/realtek/r8169_leds.c
index e10bee706bc6..5da64cea5eb4 100644
--- a/drivers/net/ethernet/realtek/r8169_leds.c
+++ b/drivers/net/ethernet/realtek/r8169_leds.c
@@ -154,7 +154,7 @@ struct r8169_led_classdev *rtl8168_init_leds(struct net_device *ndev)
 	struct r8169_led_classdev *leds;
 	int i;

-	leds = kcalloc(RTL8168_NUM_LEDS + 1, sizeof(*leds), GFP_KERNEL);
+	leds = kzalloc_objs(*leds, RTL8168_NUM_LEDS + 1, GFP_KERNEL);
 	if (!leds)
 		return NULL;

@@ -253,7 +253,7 @@ struct r8169_led_classdev *rtl8125_init_leds(struct net_device *ndev)
 	struct r8169_led_classdev *leds;
 	int i;

-	leds = kcalloc(RTL8125_NUM_LEDS + 1, sizeof(*leds), GFP_KERNEL);
+	leds = kzalloc_objs(*leds, RTL8125_NUM_LEDS + 1, GFP_KERNEL);
 	if (!leds)
 		return NULL;

diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 2f7d9809c373..ad0e07e2a09d 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -2683,7 +2683,7 @@ static void rtl_request_firmware(struct rtl8169_private *tp)
 	if (tp->rtl_fw || !tp->fw_name)
 		return;

-	rtl_fw = kzalloc(sizeof(*rtl_fw), GFP_KERNEL);
+	rtl_fw = kzalloc_obj(*rtl_fw, GFP_KERNEL);
 	if (!rtl_fw)
 		return;

diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 57b0db314fb5..85f2e23f2638 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -436,14 +436,14 @@ static int ravb_ring_init(struct net_device *ndev, int q)
 		goto error;

 	/* Allocate RX buffers */
-	priv->rx_buffers[q] = kcalloc(priv->num_rx_ring[q],
-				      sizeof(*priv->rx_buffers[q]), GFP_KERNEL);
+	priv->rx_buffers[q] = kzalloc_objs(*priv->rx_buffers[q],
+					   priv->num_rx_ring[q], GFP_KERNEL);
 	if (!priv->rx_buffers[q])
 		goto error;

 	/* Allocate TX skb rings */
-	priv->tx_skb[q] = kcalloc(priv->num_tx_ring[q],
-				  sizeof(*priv->tx_skb[q]), GFP_KERNEL);
+	priv->tx_skb[q] = kzalloc_objs(*priv->tx_skb[q], priv->num_tx_ring[q],
+				       GFP_KERNEL);
 	if (!priv->tx_skb[q])
 		goto error;

@@ -2199,7 +2199,7 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 	/* TX timestamp required */
 	if (info->gptp || info->ccc_gac) {
 		if (q == RAVB_NC) {
-			ts_skb = kmalloc(sizeof(*ts_skb), GFP_ATOMIC);
+			ts_skb = kmalloc_obj(*ts_skb, GFP_ATOMIC);
 			if (!ts_skb) {
 				if (num_tx_desc > 1) {
 					desc--;
diff --git a/drivers/net/ethernet/renesas/rswitch_main.c b/drivers/net/ethernet/renesas/rswitch_main.c
index 433eb2b00d10..421677d4b1d7 100644
--- a/drivers/net/ethernet/renesas/rswitch_main.c
+++ b/drivers/net/ethernet/renesas/rswitch_main.c
@@ -346,7 +346,8 @@ static int rswitch_gwca_queue_alloc(struct net_device *ndev,
 	gq->ndev = ndev;

 	if (!dir_tx) {
-		gq->rx_bufs = kcalloc(gq->ring_size, sizeof(*gq->rx_bufs), GFP_KERNEL);
+		gq->rx_bufs = kzalloc_objs(*gq->rx_bufs, gq->ring_size,
+					   GFP_KERNEL);
 		if (!gq->rx_bufs)
 			return -ENOMEM;
 		if (rswitch_gwca_queue_alloc_rx_buf(gq, 0, gq->ring_size) < 0)
@@ -356,10 +357,11 @@ static int rswitch_gwca_queue_alloc(struct net_device *ndev,
 						 sizeof(struct rswitch_ext_ts_desc) *
 						 (gq->ring_size + 1), &gq->ring_dma, GFP_KERNEL);
 	} else {
-		gq->skbs = kcalloc(gq->ring_size, sizeof(*gq->skbs), GFP_KERNEL);
+		gq->skbs = kzalloc_objs(*gq->skbs, gq->ring_size, GFP_KERNEL);
 		if (!gq->skbs)
 			return -ENOMEM;
-		gq->unmap_addrs = kcalloc(gq->ring_size, sizeof(*gq->unmap_addrs), GFP_KERNEL);
+		gq->unmap_addrs = kzalloc_objs(*gq->unmap_addrs, gq->ring_size,
+					       GFP_KERNEL);
 		if (!gq->unmap_addrs)
 			goto out;
 		gq->tx_ring = dma_alloc_coherent(ndev->dev.parent,
diff --git a/drivers/net/ethernet/renesas/rtsn.c b/drivers/net/ethernet/renesas/rtsn.c
index 85052b47afb9..2850e76d7f6f 100644
--- a/drivers/net/ethernet/renesas/rtsn.c
+++ b/drivers/net/ethernet/renesas/rtsn.c
@@ -349,8 +349,8 @@ static int rtsn_chain_init(struct rtsn_private *priv, int tx_size, int rx_size)
 	priv->num_tx_ring = tx_size;
 	priv->num_rx_ring = rx_size;

-	priv->tx_skb = kcalloc(tx_size, sizeof(*priv->tx_skb), GFP_KERNEL);
-	priv->rx_skb = kcalloc(rx_size, sizeof(*priv->rx_skb), GFP_KERNEL);
+	priv->tx_skb = kzalloc_objs(*priv->tx_skb, tx_size, GFP_KERNEL);
+	priv->rx_skb = kzalloc_objs(*priv->rx_skb, rx_size, GFP_KERNEL);

 	if (!priv->rx_skb || !priv->tx_skb)
 		goto error;
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index 6fb0ffc1c844..019828d3713f 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -1410,13 +1410,13 @@ static int sh_eth_ring_init(struct net_device *ndev)
 		mdp->rx_buf_sz += NET_IP_ALIGN;

 	/* Allocate RX and TX skb rings */
-	mdp->rx_skbuff = kcalloc(mdp->num_rx_ring, sizeof(*mdp->rx_skbuff),
-				 GFP_KERNEL);
+	mdp->rx_skbuff = kzalloc_objs(*mdp->rx_skbuff, mdp->num_rx_ring,
+				      GFP_KERNEL);
 	if (!mdp->rx_skbuff)
 		return -ENOMEM;

-	mdp->tx_skbuff = kcalloc(mdp->num_tx_ring, sizeof(*mdp->tx_skbuff),
-				 GFP_KERNEL);
+	mdp->tx_skbuff = kzalloc_objs(*mdp->tx_skbuff, mdp->num_tx_ring,
+				      GFP_KERNEL);
 	if (!mdp->tx_skbuff)
 		goto ring_free;

diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c
index 2794f75df8fc..503a9869e1db 100644
--- a/drivers/net/ethernet/rocker/rocker_main.c
+++ b/drivers/net/ethernet/rocker/rocker_main.c
@@ -66,7 +66,7 @@ static struct rocker_wait *rocker_wait_create(void)
 {
 	struct rocker_wait *wait;

-	wait = kzalloc(sizeof(*wait), GFP_KERNEL);
+	wait = kzalloc_obj(*wait, GFP_KERNEL);
 	if (!wait)
 		return NULL;
 	return wait;
@@ -435,8 +435,7 @@ static int rocker_dma_ring_create(const struct rocker *rocker,
 	info->type = type;
 	info->head = 0;
 	info->tail = 0;
-	info->desc_info = kcalloc(info->size, sizeof(*info->desc_info),
-				  GFP_KERNEL);
+	info->desc_info = kzalloc_objs(*info->desc_info, info->size, GFP_KERNEL);
 	if (!info->desc_info)
 		return -ENOMEM;

@@ -2155,7 +2154,7 @@ static int rocker_router_fib_event(struct notifier_block *nb,
 	if (info->family != AF_INET)
 		return NOTIFY_DONE;

-	fib_work = kzalloc(sizeof(*fib_work), GFP_ATOMIC);
+	fib_work = kzalloc_obj(*fib_work, GFP_ATOMIC);
 	if (WARN_ON(!fib_work))
 		return NOTIFY_BAD;

@@ -2648,9 +2647,8 @@ static int rocker_msix_init(struct rocker *rocker)
 	if (msix_entries != ROCKER_MSIX_VEC_COUNT(rocker->port_count))
 		return -EINVAL;

-	rocker->msix_entries = kmalloc_array(msix_entries,
-					     sizeof(struct msix_entry),
-					     GFP_KERNEL);
+	rocker->msix_entries = kmalloc_objs(struct msix_entry, msix_entries,
+					    GFP_KERNEL);
 	if (!rocker->msix_entries)
 		return -ENOMEM;

@@ -2764,7 +2762,7 @@ static int rocker_switchdev_event(struct notifier_block *unused,
 		return rocker_switchdev_port_attr_set_event(dev, ptr);

 	rocker_port = netdev_priv(dev);
-	switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+	switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 	if (WARN_ON(!switchdev_work))
 		return NOTIFY_BAD;

@@ -2850,7 +2848,7 @@ static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	struct rocker *rocker;
 	int err;

-	rocker = kzalloc(sizeof(*rocker), GFP_KERNEL);
+	rocker = kzalloc_obj(*rocker, GFP_KERNEL);
 	if (!rocker)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/rocker/rocker_ofdpa.c b/drivers/net/ethernet/rocker/rocker_ofdpa.c
index 61e50517c05b..a9795b79d1d4 100644
--- a/drivers/net/ethernet/rocker/rocker_ofdpa.c
+++ b/drivers/net/ethernet/rocker/rocker_ofdpa.c
@@ -838,7 +838,7 @@ static int ofdpa_flow_tbl_ig_port(struct ofdpa_port *ofdpa_port, int flags,
 {
 	struct ofdpa_flow_tbl_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -860,7 +860,7 @@ static int ofdpa_flow_tbl_vlan(struct ofdpa_port *ofdpa_port,
 {
 	struct ofdpa_flow_tbl_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -886,7 +886,7 @@ static int ofdpa_flow_tbl_term_mac(struct ofdpa_port *ofdpa_port,
 {
 	struct ofdpa_flow_tbl_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -926,7 +926,7 @@ static int ofdpa_flow_tbl_bridge(struct ofdpa_port *ofdpa_port,
 	bool dflt = !eth_dst || eth_dst_mask;
 	bool wild = false;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return -ENOMEM;

@@ -976,7 +976,7 @@ static int ofdpa_flow_tbl_ucast4_routing(struct ofdpa_port *ofdpa_port,
 {
 	struct ofdpa_flow_tbl_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1006,7 +1006,7 @@ static int ofdpa_flow_tbl_acl(struct ofdpa_port *ofdpa_port, int flags,
 	u32 priority;
 	struct ofdpa_flow_tbl_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1150,7 +1150,7 @@ static int ofdpa_group_l2_interface(struct ofdpa_port *ofdpa_port,
 {
 	struct ofdpa_group_tbl_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1166,7 +1166,7 @@ static int ofdpa_group_l2_fan_out(struct ofdpa_port *ofdpa_port,
 {
 	struct ofdpa_group_tbl_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1199,7 +1199,7 @@ static int ofdpa_group_l3_unicast(struct ofdpa_port *ofdpa_port, int flags,
 {
 	struct ofdpa_group_tbl_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1273,7 +1273,7 @@ static int ofdpa_port_ipv4_neigh(struct ofdpa_port *ofdpa_port,
 	bool removing;
 	int err = 0;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return -ENOMEM;

@@ -1386,7 +1386,7 @@ static int ofdpa_port_ipv4_nh(struct ofdpa_port *ofdpa_port,
 	bool resolved = true;
 	int err = 0;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1866,7 +1866,7 @@ static int ofdpa_port_fdb_learn(struct ofdpa_port *ofdpa_port,
 	if (!(flags & OFDPA_OP_FLAG_LEARNED))
 		return 0;

-	lw = kzalloc(sizeof(*lw), GFP_ATOMIC);
+	lw = kzalloc_obj(*lw, GFP_ATOMIC);
 	if (!lw)
 		return -ENOMEM;

@@ -1904,7 +1904,7 @@ static int ofdpa_port_fdb(struct ofdpa_port *ofdpa_port,
 	bool removing = (flags & OFDPA_OP_FLAG_REMOVE);
 	unsigned long lock_flags;

-	fdb = kzalloc(sizeof(*fdb), GFP_KERNEL);
+	fdb = kzalloc_obj(*fdb, GFP_KERNEL);
 	if (!fdb)
 		return -ENOMEM;

@@ -2232,7 +2232,7 @@ static __be16 ofdpa_port_internal_vlan_id_get(struct ofdpa_port *ofdpa_port,
 	unsigned long lock_flags;
 	int i;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return 0;

diff --git a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
index 849c5a6c2af1..437bcf8ad0c8 100644
--- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
+++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
@@ -489,15 +489,14 @@ static int init_rx_ring(struct net_device *dev, u8 queue_no,
 		return -ENOMEM;

 	/* allocate memory for RX skbuff array */
-	rx_ring->rx_skbuff_dma = kmalloc_array(rx_rsize,
-					       sizeof(dma_addr_t), GFP_KERNEL);
+	rx_ring->rx_skbuff_dma = kmalloc_objs(dma_addr_t, rx_rsize, GFP_KERNEL);
 	if (!rx_ring->rx_skbuff_dma) {
 		ret = -ENOMEM;
 		goto err_free_dma_rx;
 	}

-	rx_ring->rx_skbuff = kmalloc_array(rx_rsize,
-					   sizeof(struct sk_buff *), GFP_KERNEL);
+	rx_ring->rx_skbuff = kmalloc_objs(struct sk_buff *, rx_rsize,
+					  GFP_KERNEL);
 	if (!rx_ring->rx_skbuff) {
 		ret = -ENOMEM;
 		goto err_free_skbuff_dma;
@@ -2007,7 +2006,7 @@ static int sxgbe_hw_init(struct sxgbe_priv_data * const priv)
 {
 	u32 ctrl_ids;

-	priv->hw = kmalloc(sizeof(*priv->hw), GFP_KERNEL);
+	priv->hw = kmalloc_obj(*priv->hw, GFP_KERNEL);
 	if(!priv->hw)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef10.c
index fcec81f862ec..58d3a381271d 100644
--- a/drivers/net/ethernet/sfc/ef10.c
+++ b/drivers/net/ethernet/sfc/ef10.c
@@ -431,7 +431,7 @@ static int efx_ef10_add_vlan(struct efx_nic *efx, u16 vid)
 	}

 	rc = -ENOMEM;
-	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan)
 		goto fail_alloc;

@@ -527,7 +527,7 @@ static int efx_ef10_probe(struct efx_nic *efx)
 	struct efx_ef10_nic_data *nic_data;
 	int i, rc;

-	nic_data = kzalloc(sizeof(*nic_data), GFP_KERNEL);
+	nic_data = kzalloc_obj(*nic_data, GFP_KERNEL);
 	if (!nic_data)
 		return -ENOMEM;
 	efx->nic_data = nic_data;
@@ -3591,7 +3591,7 @@ static int efx_ef10_mtd_probe(struct efx_nic *efx)
 	    MCDI_VAR_ARRAY_LEN(outlen, NVRAM_PARTITIONS_OUT_TYPE_ID))
 		return -EIO;

-	parts = kcalloc(n_parts_total, sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, n_parts_total, GFP_KERNEL);
 	if (!parts)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sfc/ef100.c b/drivers/net/ethernet/sfc/ef100.c
index 6334992b0af4..d2f64e049be1 100644
--- a/drivers/net/ethernet/sfc/ef100.c
+++ b/drivers/net/ethernet/sfc/ef100.c
@@ -453,7 +453,7 @@ static int ef100_pci_probe(struct pci_dev *pci_dev,
 	int rc;

 	/* Allocate probe data and struct efx_nic */
-	probe_data = kzalloc(sizeof(*probe_data), GFP_KERNEL);
+	probe_data = kzalloc_obj(*probe_data, GFP_KERNEL);
 	if (!probe_data)
 		return -ENOMEM;
 	probe_data->pci_dev = pci_dev;
diff --git a/drivers/net/ethernet/sfc/ef100_nic.c b/drivers/net/ethernet/sfc/ef100_nic.c
index 3ad95a4c8af2..da433a94a994 100644
--- a/drivers/net/ethernet/sfc/ef100_nic.c
+++ b/drivers/net/ethernet/sfc/ef100_nic.c
@@ -351,7 +351,7 @@ int ef100_phy_probe(struct efx_nic *efx)
 	int rc;

 	/* Probe for the PHY */
-	efx->phy_data = kzalloc(sizeof(struct efx_mcdi_phy_data), GFP_KERNEL);
+	efx->phy_data = kzalloc_obj(struct efx_mcdi_phy_data, GFP_KERNEL);
 	if (!efx->phy_data)
 		return -ENOMEM;

@@ -1020,7 +1020,7 @@ static int ef100_probe_main(struct efx_nic *efx)
 	if (WARN_ON(bar_size == 0))
 		return -EIO;

-	nic_data = kzalloc(sizeof(*nic_data), GFP_KERNEL);
+	nic_data = kzalloc_obj(*nic_data, GFP_KERNEL);
 	if (!nic_data)
 		return -ENOMEM;
 	efx->nic_data = nic_data;
diff --git a/drivers/net/ethernet/sfc/ef10_sriov.c b/drivers/net/ethernet/sfc/ef10_sriov.c
index 9aae0d8b713f..5b3377ca7220 100644
--- a/drivers/net/ethernet/sfc/ef10_sriov.c
+++ b/drivers/net/ethernet/sfc/ef10_sriov.c
@@ -189,8 +189,7 @@ static int efx_ef10_sriov_alloc_vf_vswitching(struct efx_nic *efx)
 	unsigned int i;
 	int rc;

-	nic_data->vf = kcalloc(efx->vf_count, sizeof(struct ef10_vf),
-			       GFP_KERNEL);
+	nic_data->vf = kzalloc_objs(struct ef10_vf, efx->vf_count, GFP_KERNEL);
 	if (!nic_data->vf)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
index 112e55b98ed3..133a23a9dd5a 100644
--- a/drivers/net/ethernet/sfc/efx.c
+++ b/drivers/net/ethernet/sfc/efx.c
@@ -1155,7 +1155,7 @@ static int efx_pci_probe(struct pci_dev *pci_dev,
 	int rc;

 	/* Allocate probe data and struct efx_nic */
-	probe_data = kzalloc(sizeof(*probe_data), GFP_KERNEL);
+	probe_data = kzalloc_obj(*probe_data, GFP_KERNEL);
 	if (!probe_data)
 		return -ENOMEM;
 	probe_data->pci_dev = pci_dev;
diff --git a/drivers/net/ethernet/sfc/efx_channels.c b/drivers/net/ethernet/sfc/efx_channels.c
index ed3a96ebc7f3..84beb79f1969 100644
--- a/drivers/net/ethernet/sfc/efx_channels.c
+++ b/drivers/net/ethernet/sfc/efx_channels.c
@@ -534,7 +534,7 @@ static struct efx_channel *efx_alloc_channel(struct efx_nic *efx, int i)
 	struct efx_channel *channel;
 	int j;

-	channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kzalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return NULL;

@@ -604,7 +604,7 @@ struct efx_channel *efx_copy_channel(const struct efx_channel *old_channel)
 	struct efx_channel *channel;
 	int j;

-	channel = kmalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kmalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return NULL;

@@ -934,9 +934,9 @@ int efx_set_channels(struct efx_nic *efx)
 		EFX_WARN_ON_PARANOID(efx->xdp_tx_queues);

 		/* Allocate array for XDP TX queue lookup. */
-		efx->xdp_tx_queues = kcalloc(efx->xdp_tx_queue_count,
-					     sizeof(*efx->xdp_tx_queues),
-					     GFP_KERNEL);
+		efx->xdp_tx_queues = kzalloc_objs(*efx->xdp_tx_queues,
+						  efx->xdp_tx_queue_count,
+						  GFP_KERNEL);
 		if (!efx->xdp_tx_queues)
 			return -ENOMEM;
 	}
diff --git a/drivers/net/ethernet/sfc/efx_common.c b/drivers/net/ethernet/sfc/efx_common.c
index e8fdbb62d872..a41a840b3710 100644
--- a/drivers/net/ethernet/sfc/efx_common.c
+++ b/drivers/net/ethernet/sfc/efx_common.c
@@ -996,8 +996,8 @@ int efx_init_struct(struct efx_nic *efx, struct pci_dev *pci_dev)
 	mutex_init(&efx->rps_mutex);
 	spin_lock_init(&efx->rps_hash_lock);
 	/* Failure to allocate is not fatal, but may degrade ARFS performance */
-	efx->rps_hash_table = kcalloc(EFX_ARFS_HASH_TABLE_SIZE,
-				      sizeof(*efx->rps_hash_table), GFP_KERNEL);
+	efx->rps_hash_table = kzalloc_objs(*efx->rps_hash_table,
+					   EFX_ARFS_HASH_TABLE_SIZE, GFP_KERNEL);
 #endif
 	spin_lock_init(&efx->vf_reps_lock);
 	INIT_LIST_HEAD(&efx->vf_reps);
diff --git a/drivers/net/ethernet/sfc/ethtool_common.c b/drivers/net/ethernet/sfc/ethtool_common.c
index 2fc42b1a2bfb..6b762153c8a4 100644
--- a/drivers/net/ethernet/sfc/ethtool_common.c
+++ b/drivers/net/ethernet/sfc/ethtool_common.c
@@ -133,7 +133,7 @@ void efx_ethtool_self_test(struct net_device *net_dev,
 	bool already_up;
 	int rc = -ENOMEM;

-	efx_tests = kzalloc(sizeof(*efx_tests), GFP_KERNEL);
+	efx_tests = kzalloc_obj(*efx_tests, GFP_KERNEL);
 	if (!efx_tests)
 		goto fail;

diff --git a/drivers/net/ethernet/sfc/falcon/efx.c b/drivers/net/ethernet/sfc/falcon/efx.c
index 6ea41f6c9ef5..2852868c1003 100644
--- a/drivers/net/ethernet/sfc/falcon/efx.c
+++ b/drivers/net/ethernet/sfc/falcon/efx.c
@@ -423,7 +423,7 @@ ef4_alloc_channel(struct ef4_nic *efx, int i, struct ef4_channel *old_channel)
 	struct ef4_tx_queue *tx_queue;
 	int j;

-	channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kzalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return NULL;

@@ -456,7 +456,7 @@ ef4_copy_channel(const struct ef4_channel *old_channel)
 	struct ef4_tx_queue *tx_queue;
 	int j;

-	channel = kmalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kmalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return NULL;

diff --git a/drivers/net/ethernet/sfc/falcon/ethtool.c b/drivers/net/ethernet/sfc/falcon/ethtool.c
index 049364031545..069269884396 100644
--- a/drivers/net/ethernet/sfc/falcon/ethtool.c
+++ b/drivers/net/ethernet/sfc/falcon/ethtool.c
@@ -493,7 +493,7 @@ static void ef4_ethtool_self_test(struct net_device *net_dev,
 	bool already_up;
 	int rc = -ENOMEM;

-	ef4_tests = kzalloc(sizeof(*ef4_tests), GFP_KERNEL);
+	ef4_tests = kzalloc_obj(*ef4_tests, GFP_KERNEL);
 	if (!ef4_tests)
 		goto fail;

diff --git a/drivers/net/ethernet/sfc/falcon/falcon.c b/drivers/net/ethernet/sfc/falcon/falcon.c
index c44df8e4dd30..1603c5267654 100644
--- a/drivers/net/ethernet/sfc/falcon/falcon.c
+++ b/drivers/net/ethernet/sfc/falcon/falcon.c
@@ -929,7 +929,7 @@ static int falcon_mtd_probe(struct ef4_nic *efx)
 	ASSERT_RTNL();

 	/* Allocate space for maximum number of partitions */
-	parts = kcalloc(2, sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, 2, GFP_KERNEL);
 	if (!parts)
 		return -ENOMEM;
 	n_parts = 0;
@@ -2180,7 +2180,7 @@ static int falcon_probe_nvconfig(struct ef4_nic *efx)
 	struct falcon_nvconfig *nvconfig;
 	int rc;

-	nvconfig = kmalloc(sizeof(*nvconfig), GFP_KERNEL);
+	nvconfig = kmalloc_obj(*nvconfig, GFP_KERNEL);
 	if (!nvconfig)
 		return -ENOMEM;

@@ -2289,7 +2289,7 @@ static int falcon_probe_nic(struct ef4_nic *efx)
 	efx->primary = efx; /* only one usable function per controller */

 	/* Allocate storage for hardware specific data */
-	nic_data = kzalloc(sizeof(*nic_data), GFP_KERNEL);
+	nic_data = kzalloc_obj(*nic_data, GFP_KERNEL);
 	if (!nic_data)
 		return -ENOMEM;
 	efx->nic_data = nic_data;
diff --git a/drivers/net/ethernet/sfc/falcon/farch.c b/drivers/net/ethernet/sfc/falcon/farch.c
index 01017c41338e..67b62c3a9839 100644
--- a/drivers/net/ethernet/sfc/falcon/farch.c
+++ b/drivers/net/ethernet/sfc/falcon/farch.c
@@ -2701,7 +2701,7 @@ int ef4_farch_filter_table_probe(struct ef4_nic *efx)
 	struct ef4_farch_filter_table *table;
 	unsigned table_id;

-	state = kzalloc(sizeof(struct ef4_farch_filter_state), GFP_KERNEL);
+	state = kzalloc_obj(struct ef4_farch_filter_state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;
 	efx->filter_state = state;
diff --git a/drivers/net/ethernet/sfc/falcon/qt202x_phy.c b/drivers/net/ethernet/sfc/falcon/qt202x_phy.c
index 21af67e42296..dc6383ceb656 100644
--- a/drivers/net/ethernet/sfc/falcon/qt202x_phy.c
+++ b/drivers/net/ethernet/sfc/falcon/qt202x_phy.c
@@ -340,7 +340,7 @@ static int qt202x_phy_probe(struct ef4_nic *efx)
 {
 	struct qt202x_phy_data *phy_data;

-	phy_data = kzalloc(sizeof(struct qt202x_phy_data), GFP_KERNEL);
+	phy_data = kzalloc_obj(struct qt202x_phy_data, GFP_KERNEL);
 	if (!phy_data)
 		return -ENOMEM;
 	efx->phy_data = phy_data;
diff --git a/drivers/net/ethernet/sfc/falcon/rx.c b/drivers/net/ethernet/sfc/falcon/rx.c
index f69fcf6caca8..d32bab1b5783 100644
--- a/drivers/net/ethernet/sfc/falcon/rx.c
+++ b/drivers/net/ethernet/sfc/falcon/rx.c
@@ -701,8 +701,7 @@ int ef4_probe_rx_queue(struct ef4_rx_queue *rx_queue)
 		  rx_queue->ptr_mask);

 	/* Allocate RX buffers */
-	rx_queue->buffer = kcalloc(entries, sizeof(*rx_queue->buffer),
-				   GFP_KERNEL);
+	rx_queue->buffer = kzalloc_objs(*rx_queue->buffer, entries, GFP_KERNEL);
 	if (!rx_queue->buffer)
 		return -ENOMEM;

@@ -734,8 +733,8 @@ static void ef4_init_rx_recycle_ring(struct ef4_nic *efx,

 	page_ring_size = roundup_pow_of_two(bufs_in_recycle_ring /
 					    efx->rx_bufs_per_page);
-	rx_queue->page_ring = kcalloc(page_ring_size,
-				      sizeof(*rx_queue->page_ring), GFP_KERNEL);
+	rx_queue->page_ring = kzalloc_objs(*rx_queue->page_ring, page_ring_size,
+				           GFP_KERNEL);
 	if (!rx_queue->page_ring)
 		rx_queue->page_ptr_mask = 0;
 	else
diff --git a/drivers/net/ethernet/sfc/falcon/selftest.c b/drivers/net/ethernet/sfc/falcon/selftest.c
index c3dc88e6c26c..8205a08132ae 100644
--- a/drivers/net/ethernet/sfc/falcon/selftest.c
+++ b/drivers/net/ethernet/sfc/falcon/selftest.c
@@ -545,8 +545,8 @@ ef4_test_loopback(struct ef4_tx_queue *tx_queue,
 		/* Determine how many packets to send */
 		state->packet_count = efx->txq_entries / 3;
 		state->packet_count = min(1 << (i << 2), state->packet_count);
-		state->skbs = kcalloc(state->packet_count,
-				      sizeof(state->skbs[0]), GFP_KERNEL);
+		state->skbs = kzalloc_objs(state->skbs[0], state->packet_count,
+					   GFP_KERNEL);
 		if (!state->skbs)
 			return -ENOMEM;
 		state->flush = false;
@@ -635,7 +635,7 @@ static int ef4_test_loopbacks(struct ef4_nic *efx, struct ef4_self_tests *tests,
 	/* Set the port loopback_selftest member. From this point on
 	 * all received packets will be dropped. Mark the state as
 	 * "flushing" so all inflight packets are dropped */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return -ENOMEM;
 	BUG_ON(efx->loopback_selftest);
diff --git a/drivers/net/ethernet/sfc/falcon/tenxpress.c b/drivers/net/ethernet/sfc/falcon/tenxpress.c
index e27824ef121f..4a5e24b4d174 100644
--- a/drivers/net/ethernet/sfc/falcon/tenxpress.c
+++ b/drivers/net/ethernet/sfc/falcon/tenxpress.c
@@ -165,7 +165,7 @@ static int tenxpress_phy_probe(struct ef4_nic *efx)
 	struct tenxpress_phy_data *phy_data;

 	/* Allocate phy private storage */
-	phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL);
+	phy_data = kzalloc_obj(*phy_data, GFP_KERNEL);
 	if (!phy_data)
 		return -ENOMEM;
 	efx->phy_data = phy_data;
diff --git a/drivers/net/ethernet/sfc/falcon/tx.c b/drivers/net/ethernet/sfc/falcon/tx.c
index e6e80b039ca2..a295b40342a4 100644
--- a/drivers/net/ethernet/sfc/falcon/tx.c
+++ b/drivers/net/ethernet/sfc/falcon/tx.c
@@ -544,13 +544,13 @@ int ef4_probe_tx_queue(struct ef4_tx_queue *tx_queue)
 		  tx_queue->queue, efx->txq_entries, tx_queue->ptr_mask);

 	/* Allocate software ring */
-	tx_queue->buffer = kcalloc(entries, sizeof(*tx_queue->buffer),
-				   GFP_KERNEL);
+	tx_queue->buffer = kzalloc_objs(*tx_queue->buffer, entries, GFP_KERNEL);
 	if (!tx_queue->buffer)
 		return -ENOMEM;

-	tx_queue->cb_page = kcalloc(ef4_tx_cb_page_count(tx_queue),
-				    sizeof(tx_queue->cb_page[0]), GFP_KERNEL);
+	tx_queue->cb_page = kzalloc_objs(tx_queue->cb_page[0],
+					 ef4_tx_cb_page_count(tx_queue),
+					 GFP_KERNEL);
 	if (!tx_queue->cb_page) {
 		rc = -ENOMEM;
 		goto fail1;
diff --git a/drivers/net/ethernet/sfc/falcon/txc43128_phy.c b/drivers/net/ethernet/sfc/falcon/txc43128_phy.c
index f3503965c52c..0025baff6efe 100644
--- a/drivers/net/ethernet/sfc/falcon/txc43128_phy.c
+++ b/drivers/net/ethernet/sfc/falcon/txc43128_phy.c
@@ -323,7 +323,7 @@ static int txc43128_phy_probe(struct ef4_nic *efx)
 	struct txc43128_data *phy_data;

 	/* Allocate phy private storage */
-	phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL);
+	phy_data = kzalloc_obj(*phy_data, GFP_KERNEL);
 	if (!phy_data)
 		return -ENOMEM;
 	efx->phy_data = phy_data;
diff --git a/drivers/net/ethernet/sfc/mae.c b/drivers/net/ethernet/sfc/mae.c
index 7cfd9000f79d..6e8e90254792 100644
--- a/drivers/net/ethernet/sfc/mae.c
+++ b/drivers/net/ethernet/sfc/mae.c
@@ -255,14 +255,12 @@ static int efx_mae_table_get_desc(struct efx_nic *efx,
 		if (desc->scheme)
 			goto fail;
 		rc = -ENOMEM;
-		desc->keys = kcalloc(desc->n_keys,
-				     sizeof(struct efx_tc_table_field_fmt),
-				     GFP_KERNEL);
+		desc->keys = kzalloc_objs(struct efx_tc_table_field_fmt,
+					  desc->n_keys, GFP_KERNEL);
 		if (!desc->keys)
 			goto fail;
-		desc->resps = kcalloc(desc->n_resps,
-				      sizeof(struct efx_tc_table_field_fmt),
-				      GFP_KERNEL);
+		desc->resps = kzalloc_objs(struct efx_tc_table_field_fmt,
+					   desc->n_resps, GFP_KERNEL);
 		if (!desc->resps)
 			goto fail;
 	}
@@ -1160,7 +1158,7 @@ int efx_mae_enumerate_mports(struct efx_nic *efx)
 		for (i = 0; i < count; i++) {
 			struct mae_mport_desc *d;

-			d = kzalloc(sizeof(*d), GFP_KERNEL);
+			d = kzalloc_obj(*d, GFP_KERNEL);
 			if (!d) {
 				rc = -ENOMEM;
 				goto fail;
@@ -2315,7 +2313,7 @@ int efx_init_mae(struct efx_nic *efx)
 	if (!nic_data->have_mport)
 		return -EINVAL;

-	mae = kmalloc(sizeof(*mae), GFP_KERNEL);
+	mae = kmalloc_obj(*mae, GFP_KERNEL);
 	if (!mae)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sfc/mcdi.c b/drivers/net/ethernet/sfc/mcdi.c
index 5e9b8def5e42..7a19bba484cd 100644
--- a/drivers/net/ethernet/sfc/mcdi.c
+++ b/drivers/net/ethernet/sfc/mcdi.c
@@ -63,7 +63,7 @@ int efx_mcdi_init(struct efx_nic *efx)
 	bool already_attached;
 	int rc = -ENOMEM;

-	efx->mcdi = kzalloc(sizeof(*efx->mcdi), GFP_KERNEL);
+	efx->mcdi = kzalloc_obj(*efx->mcdi, GFP_KERNEL);
 	if (!efx->mcdi)
 		goto fail;

diff --git a/drivers/net/ethernet/sfc/mcdi_filters.c b/drivers/net/ethernet/sfc/mcdi_filters.c
index 3db589b90b68..80d53614e4fc 100644
--- a/drivers/net/ethernet/sfc/mcdi_filters.c
+++ b/drivers/net/ethernet/sfc/mcdi_filters.c
@@ -459,7 +459,7 @@ static s32 efx_mcdi_filter_insert_locked(struct efx_nic *efx,
 		replacing = true;
 		priv_flags = efx_mcdi_filter_entry_flags(table, ins_index);
 	} else {
-		saved_spec = kmalloc(sizeof(*spec), GFP_ATOMIC);
+		saved_spec = kmalloc_obj(*spec, GFP_ATOMIC);
 		if (!saved_spec) {
 			rc = -ENOMEM;
 			goto out_unlock;
@@ -1310,7 +1310,7 @@ int efx_mcdi_filter_table_probe(struct efx_nic *efx, bool multicast_chaining)
 	if (efx->filter_state) /* already probed */
 		return 0;

-	table = kzalloc(sizeof(*table), GFP_KERNEL);
+	table = kzalloc_obj(*table, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -1586,7 +1586,7 @@ int efx_mcdi_filter_add_vlan(struct efx_nic *efx, u16 vid)
 		return -EALREADY;
 	}

-	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sfc/mcdi_mon.c b/drivers/net/ethernet/sfc/mcdi_mon.c
index f5128db7c7e7..2d6472ec4a02 100644
--- a/drivers/net/ethernet/sfc/mcdi_mon.c
+++ b/drivers/net/ethernet/sfc/mcdi_mon.c
@@ -350,13 +350,13 @@ int efx_mcdi_mon_probe(struct efx_nic *efx)
 	 * value, min, max, crit, alarm and label for each sensor.
 	 */
 	n_attrs = 6 * n_sensors;
-	hwmon->attrs = kcalloc(n_attrs, sizeof(*hwmon->attrs), GFP_KERNEL);
+	hwmon->attrs = kzalloc_objs(*hwmon->attrs, n_attrs, GFP_KERNEL);
 	if (!hwmon->attrs) {
 		rc = -ENOMEM;
 		goto fail;
 	}
-	hwmon->group.attrs = kcalloc(n_attrs + 1, sizeof(struct attribute *),
-				     GFP_KERNEL);
+	hwmon->group.attrs = kzalloc_objs(struct attribute *, n_attrs + 1,
+					  GFP_KERNEL);
 	if (!hwmon->group.attrs) {
 		rc = -ENOMEM;
 		goto fail;
diff --git a/drivers/net/ethernet/sfc/mcdi_port_common.c b/drivers/net/ethernet/sfc/mcdi_port_common.c
index dae684194ac8..ba9e29ca9874 100644
--- a/drivers/net/ethernet/sfc/mcdi_port_common.c
+++ b/drivers/net/ethernet/sfc/mcdi_port_common.c
@@ -429,7 +429,7 @@ int efx_mcdi_phy_probe(struct efx_nic *efx)
 	int rc;

 	/* Initialise and populate phy_data */
-	phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL);
+	phy_data = kzalloc_obj(*phy_data, GFP_KERNEL);
 	if (phy_data == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sfc/ptp.c b/drivers/net/ethernet/sfc/ptp.c
index 4c7222bf26be..7268f049cf3d 100644
--- a/drivers/net/ethernet/sfc/ptp.c
+++ b/drivers/net/ethernet/sfc/ptp.c
@@ -1263,7 +1263,7 @@ static int efx_ptp_insert_filter(struct efx_nic *efx,
 		return 0;
 	}

-	rxfilter = kzalloc(sizeof(*rxfilter), GFP_KERNEL);
+	rxfilter = kzalloc_obj(*rxfilter, GFP_KERNEL);
 	if (!rxfilter)
 		return -ENOMEM;

@@ -1565,7 +1565,7 @@ int efx_ptp_probe(struct efx_nic *efx, struct efx_channel *channel)
 		return 0;
 	}

-	ptp = kzalloc(sizeof(struct efx_ptp_data), GFP_KERNEL);
+	ptp = kzalloc_obj(struct efx_ptp_data, GFP_KERNEL);
 	efx->ptp_data = ptp;
 	if (!efx->ptp_data)
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/sfc/rx_common.c b/drivers/net/ethernet/sfc/rx_common.c
index 5306f4c44be4..809faeead09b 100644
--- a/drivers/net/ethernet/sfc/rx_common.c
+++ b/drivers/net/ethernet/sfc/rx_common.c
@@ -138,8 +138,8 @@ static void efx_init_rx_recycle_ring(struct efx_rx_queue *rx_queue)
 	bufs_in_recycle_ring = efx_rx_recycle_ring_size(efx);
 	page_ring_size = roundup_pow_of_two(bufs_in_recycle_ring /
 					    efx->rx_bufs_per_page);
-	rx_queue->page_ring = kcalloc(page_ring_size,
-				      sizeof(*rx_queue->page_ring), GFP_KERNEL);
+	rx_queue->page_ring = kzalloc_objs(*rx_queue->page_ring, page_ring_size,
+				           GFP_KERNEL);
 	if (!rx_queue->page_ring)
 		rx_queue->page_ptr_mask = 0;
 	else
@@ -204,8 +204,7 @@ int efx_probe_rx_queue(struct efx_rx_queue *rx_queue)
 		  rx_queue->ptr_mask);

 	/* Allocate RX buffers */
-	rx_queue->buffer = kcalloc(entries, sizeof(*rx_queue->buffer),
-				   GFP_KERNEL);
+	rx_queue->buffer = kzalloc_objs(*rx_queue->buffer, entries, GFP_KERNEL);
 	if (!rx_queue->buffer)
 		return -ENOMEM;

@@ -709,7 +708,7 @@ struct efx_arfs_rule *efx_rps_hash_add(struct efx_nic *efx,
 			return rule;
 		}
 	}
-	rule = kmalloc(sizeof(*rule), GFP_ATOMIC);
+	rule = kmalloc_obj(*rule, GFP_ATOMIC);
 	*new = true;
 	if (rule) {
 		memcpy(&rule->spec, spec, sizeof(rule->spec));
diff --git a/drivers/net/ethernet/sfc/selftest.c b/drivers/net/ethernet/sfc/selftest.c
index 894fad0bb5ea..ef37de056a19 100644
--- a/drivers/net/ethernet/sfc/selftest.c
+++ b/drivers/net/ethernet/sfc/selftest.c
@@ -542,8 +542,8 @@ efx_test_loopback(struct efx_tx_queue *tx_queue,
 		/* Determine how many packets to send */
 		state->packet_count = efx->txq_entries / 3;
 		state->packet_count = min(1 << (i << 2), state->packet_count);
-		state->skbs = kcalloc(state->packet_count,
-				      sizeof(state->skbs[0]), GFP_KERNEL);
+		state->skbs = kzalloc_objs(state->skbs[0], state->packet_count,
+					   GFP_KERNEL);
 		if (!state->skbs)
 			return -ENOMEM;
 		state->flush = false;
@@ -628,7 +628,7 @@ static int efx_test_loopbacks(struct efx_nic *efx, struct efx_self_tests *tests,
 	/* Set the port loopback_selftest member. From this point on
 	 * all received packets will be dropped. Mark the state as
 	 * "flushing" so all inflight packets are dropped */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return -ENOMEM;
 	BUG_ON(efx->loopback_selftest);
diff --git a/drivers/net/ethernet/sfc/siena/efx_channels.c b/drivers/net/ethernet/sfc/siena/efx_channels.c
index fc075ab6b7b5..f2ed3c8b1f5d 100644
--- a/drivers/net/ethernet/sfc/siena/efx_channels.c
+++ b/drivers/net/ethernet/sfc/siena/efx_channels.c
@@ -536,7 +536,7 @@ static struct efx_channel *efx_alloc_channel(struct efx_nic *efx, int i)
 	struct efx_channel *channel;
 	int j;

-	channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kzalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return NULL;

@@ -607,7 +607,7 @@ struct efx_channel *efx_copy_channel(const struct efx_channel *old_channel)
 	struct efx_channel *channel;
 	int j;

-	channel = kmalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kmalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return NULL;

@@ -966,9 +966,9 @@ int efx_siena_set_channels(struct efx_nic *efx)
 		EFX_WARN_ON_PARANOID(efx->xdp_tx_queues);

 		/* Allocate array for XDP TX queue lookup. */
-		efx->xdp_tx_queues = kcalloc(efx->xdp_tx_queue_count,
-					     sizeof(*efx->xdp_tx_queues),
-					     GFP_KERNEL);
+		efx->xdp_tx_queues = kzalloc_objs(*efx->xdp_tx_queues,
+						  efx->xdp_tx_queue_count,
+						  GFP_KERNEL);
 		if (!efx->xdp_tx_queues)
 			return -ENOMEM;
 	}
diff --git a/drivers/net/ethernet/sfc/siena/efx_common.c b/drivers/net/ethernet/sfc/siena/efx_common.c
index 35036cc902fe..07e650f2d13e 100644
--- a/drivers/net/ethernet/sfc/siena/efx_common.c
+++ b/drivers/net/ethernet/sfc/siena/efx_common.c
@@ -1023,8 +1023,8 @@ int efx_siena_init_struct(struct efx_nic *efx,
 	mutex_init(&efx->rps_mutex);
 	spin_lock_init(&efx->rps_hash_lock);
 	/* Failure to allocate is not fatal, but may degrade ARFS performance */
-	efx->rps_hash_table = kcalloc(EFX_ARFS_HASH_TABLE_SIZE,
-				      sizeof(*efx->rps_hash_table), GFP_KERNEL);
+	efx->rps_hash_table = kzalloc_objs(*efx->rps_hash_table,
+					   EFX_ARFS_HASH_TABLE_SIZE, GFP_KERNEL);
 #endif
 	efx->mdio.dev = net_dev;
 	INIT_WORK(&efx->mac_work, efx_mac_work);
diff --git a/drivers/net/ethernet/sfc/siena/ethtool_common.c b/drivers/net/ethernet/sfc/siena/ethtool_common.c
index c56e0b54d854..cb19af6aafd9 100644
--- a/drivers/net/ethernet/sfc/siena/ethtool_common.c
+++ b/drivers/net/ethernet/sfc/siena/ethtool_common.c
@@ -355,7 +355,7 @@ void efx_siena_ethtool_self_test(struct net_device *net_dev,
 	bool already_up;
 	int rc = -ENOMEM;

-	efx_tests = kzalloc(sizeof(*efx_tests), GFP_KERNEL);
+	efx_tests = kzalloc_obj(*efx_tests, GFP_KERNEL);
 	if (!efx_tests)
 		goto fail;

diff --git a/drivers/net/ethernet/sfc/siena/farch.c b/drivers/net/ethernet/sfc/siena/farch.c
index 562a038e38a7..ab2e36520fb9 100644
--- a/drivers/net/ethernet/sfc/siena/farch.c
+++ b/drivers/net/ethernet/sfc/siena/farch.c
@@ -2790,7 +2790,7 @@ int efx_farch_filter_table_probe(struct efx_nic *efx)
 	struct efx_farch_filter_table *table;
 	unsigned table_id;

-	state = kzalloc(sizeof(struct efx_farch_filter_state), GFP_KERNEL);
+	state = kzalloc_obj(struct efx_farch_filter_state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;
 	efx->filter_state = state;
diff --git a/drivers/net/ethernet/sfc/siena/mcdi.c b/drivers/net/ethernet/sfc/siena/mcdi.c
index c8f0fb43e285..3bee5c0e6edc 100644
--- a/drivers/net/ethernet/sfc/siena/mcdi.c
+++ b/drivers/net/ethernet/sfc/siena/mcdi.c
@@ -65,7 +65,7 @@ int efx_siena_mcdi_init(struct efx_nic *efx)
 	bool already_attached;
 	int rc = -ENOMEM;

-	efx->mcdi = kzalloc(sizeof(*efx->mcdi), GFP_KERNEL);
+	efx->mcdi = kzalloc_obj(*efx->mcdi, GFP_KERNEL);
 	if (!efx->mcdi)
 		goto fail;

diff --git a/drivers/net/ethernet/sfc/siena/mcdi_mon.c b/drivers/net/ethernet/sfc/siena/mcdi_mon.c
index 56a9c56ed9e3..ddf7d712fb21 100644
--- a/drivers/net/ethernet/sfc/siena/mcdi_mon.c
+++ b/drivers/net/ethernet/sfc/siena/mcdi_mon.c
@@ -350,13 +350,13 @@ int efx_siena_mcdi_mon_probe(struct efx_nic *efx)
 	 * value, min, max, crit, alarm and label for each sensor.
 	 */
 	n_attrs = 6 * n_sensors;
-	hwmon->attrs = kcalloc(n_attrs, sizeof(*hwmon->attrs), GFP_KERNEL);
+	hwmon->attrs = kzalloc_objs(*hwmon->attrs, n_attrs, GFP_KERNEL);
 	if (!hwmon->attrs) {
 		rc = -ENOMEM;
 		goto fail;
 	}
-	hwmon->group.attrs = kcalloc(n_attrs + 1, sizeof(struct attribute *),
-				     GFP_KERNEL);
+	hwmon->group.attrs = kzalloc_objs(struct attribute *, n_attrs + 1,
+					  GFP_KERNEL);
 	if (!hwmon->group.attrs) {
 		rc = -ENOMEM;
 		goto fail;
diff --git a/drivers/net/ethernet/sfc/siena/mcdi_port_common.c b/drivers/net/ethernet/sfc/siena/mcdi_port_common.c
index 067fe0f4393a..6154d09f9dde 100644
--- a/drivers/net/ethernet/sfc/siena/mcdi_port_common.c
+++ b/drivers/net/ethernet/sfc/siena/mcdi_port_common.c
@@ -430,7 +430,7 @@ int efx_siena_mcdi_phy_probe(struct efx_nic *efx)
 	int rc;

 	/* Initialise and populate phy_data */
-	phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL);
+	phy_data = kzalloc_obj(*phy_data, GFP_KERNEL);
 	if (phy_data == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sfc/siena/ptp.c b/drivers/net/ethernet/sfc/siena/ptp.c
index 062c77c92077..2cb1d0fc9daa 100644
--- a/drivers/net/ethernet/sfc/siena/ptp.c
+++ b/drivers/net/ethernet/sfc/siena/ptp.c
@@ -1443,7 +1443,7 @@ static int efx_ptp_probe(struct efx_nic *efx, struct efx_channel *channel)
 	int rc = 0;
 	unsigned int pos;

-	ptp = kzalloc(sizeof(struct efx_ptp_data), GFP_KERNEL);
+	ptp = kzalloc_obj(struct efx_ptp_data, GFP_KERNEL);
 	efx->ptp_data = ptp;
 	if (!efx->ptp_data)
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/sfc/siena/rx_common.c b/drivers/net/ethernet/sfc/siena/rx_common.c
index 4ae09505e417..71549c21ebc1 100644
--- a/drivers/net/ethernet/sfc/siena/rx_common.c
+++ b/drivers/net/ethernet/sfc/siena/rx_common.c
@@ -141,8 +141,8 @@ static void efx_init_rx_recycle_ring(struct efx_rx_queue *rx_queue)
 	bufs_in_recycle_ring = efx_rx_recycle_ring_size(efx);
 	page_ring_size = roundup_pow_of_two(bufs_in_recycle_ring /
 					    efx->rx_bufs_per_page);
-	rx_queue->page_ring = kcalloc(page_ring_size,
-				      sizeof(*rx_queue->page_ring), GFP_KERNEL);
+	rx_queue->page_ring = kzalloc_objs(*rx_queue->page_ring, page_ring_size,
+				           GFP_KERNEL);
 	if (!rx_queue->page_ring)
 		rx_queue->page_ptr_mask = 0;
 	else
@@ -207,8 +207,7 @@ int efx_siena_probe_rx_queue(struct efx_rx_queue *rx_queue)
 		  rx_queue->ptr_mask);

 	/* Allocate RX buffers */
-	rx_queue->buffer = kcalloc(entries, sizeof(*rx_queue->buffer),
-				   GFP_KERNEL);
+	rx_queue->buffer = kzalloc_objs(*rx_queue->buffer, entries, GFP_KERNEL);
 	if (!rx_queue->buffer)
 		return -ENOMEM;

@@ -696,7 +695,7 @@ static struct efx_arfs_rule *efx_rps_hash_add(struct efx_nic *efx,
 			return rule;
 		}
 	}
-	rule = kmalloc(sizeof(*rule), GFP_ATOMIC);
+	rule = kmalloc_obj(*rule, GFP_ATOMIC);
 	*new = true;
 	if (rule) {
 		memcpy(&rule->spec, spec, sizeof(rule->spec));
diff --git a/drivers/net/ethernet/sfc/siena/selftest.c b/drivers/net/ethernet/sfc/siena/selftest.c
index 526da43d4b61..668e6771b8bf 100644
--- a/drivers/net/ethernet/sfc/siena/selftest.c
+++ b/drivers/net/ethernet/sfc/siena/selftest.c
@@ -543,8 +543,8 @@ efx_test_loopback(struct efx_tx_queue *tx_queue,
 		/* Determine how many packets to send */
 		state->packet_count = efx->txq_entries / 3;
 		state->packet_count = min(1 << (i << 2), state->packet_count);
-		state->skbs = kcalloc(state->packet_count,
-				      sizeof(state->skbs[0]), GFP_KERNEL);
+		state->skbs = kzalloc_objs(state->skbs[0], state->packet_count,
+					   GFP_KERNEL);
 		if (!state->skbs)
 			return -ENOMEM;
 		state->flush = false;
@@ -633,7 +633,7 @@ static int efx_test_loopbacks(struct efx_nic *efx, struct efx_self_tests *tests,
 	/* Set the port loopback_selftest member. From this point on
 	 * all received packets will be dropped. Mark the state as
 	 * "flushing" so all inflight packets are dropped */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return -ENOMEM;
 	BUG_ON(efx->loopback_selftest);
diff --git a/drivers/net/ethernet/sfc/siena/siena.c b/drivers/net/ethernet/sfc/siena/siena.c
index 49f0c8a1a90a..4718a31b4d94 100644
--- a/drivers/net/ethernet/sfc/siena/siena.c
+++ b/drivers/net/ethernet/sfc/siena/siena.c
@@ -266,7 +266,7 @@ static int siena_probe_nic(struct efx_nic *efx)
 	int rc;

 	/* Allocate storage for hardware specific data */
-	nic_data = kzalloc(sizeof(struct siena_nic_data), GFP_KERNEL);
+	nic_data = kzalloc_obj(struct siena_nic_data, GFP_KERNEL);
 	if (!nic_data)
 		return -ENOMEM;
 	nic_data->efx = efx;
@@ -923,7 +923,7 @@ static int siena_mtd_probe(struct efx_nic *efx)
 	if (rc)
 		return rc;

-	parts = kcalloc(hweight32(nvram_types), sizeof(*parts), GFP_KERNEL);
+	parts = kzalloc_objs(*parts, hweight32(nvram_types), GFP_KERNEL);
 	if (!parts)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sfc/siena/siena_sriov.c b/drivers/net/ethernet/sfc/siena/siena_sriov.c
index 8353c15dc233..bcab299f7204 100644
--- a/drivers/net/ethernet/sfc/siena/siena_sriov.c
+++ b/drivers/net/ethernet/sfc/siena/siena_sriov.c
@@ -1123,7 +1123,7 @@ static void efx_siena_sriov_peer_work(struct work_struct *data)
 		++peer_count;
 		if (--peer_space == 0) {
 			if (list_empty(&pages)) {
-				epp = kmalloc(sizeof(*epp), GFP_KERNEL);
+				epp = kmalloc_obj(*epp, GFP_KERNEL);
 				if (!epp)
 					break;
 				epp->ptr = dma_alloc_coherent(
@@ -1197,8 +1197,7 @@ static int efx_siena_sriov_vf_alloc(struct efx_nic *efx)
 	struct siena_vf *vf;
 	struct siena_nic_data *nic_data = efx->nic_data;

-	nic_data->vf = kcalloc(efx->vf_count, sizeof(*nic_data->vf),
-			       GFP_KERNEL);
+	nic_data->vf = kzalloc_objs(*nic_data->vf, efx->vf_count, GFP_KERNEL);
 	if (!nic_data->vf)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sfc/siena/tx_common.c b/drivers/net/ethernet/sfc/siena/tx_common.c
index 71f9b5ec5ae4..ca7f910a4847 100644
--- a/drivers/net/ethernet/sfc/siena/tx_common.c
+++ b/drivers/net/ethernet/sfc/siena/tx_common.c
@@ -36,13 +36,13 @@ int efx_siena_probe_tx_queue(struct efx_tx_queue *tx_queue)
 		  tx_queue->queue, efx->txq_entries, tx_queue->ptr_mask);

 	/* Allocate software ring */
-	tx_queue->buffer = kcalloc(entries, sizeof(*tx_queue->buffer),
-				   GFP_KERNEL);
+	tx_queue->buffer = kzalloc_objs(*tx_queue->buffer, entries, GFP_KERNEL);
 	if (!tx_queue->buffer)
 		return -ENOMEM;

-	tx_queue->cb_page = kcalloc(efx_tx_cb_page_count(tx_queue),
-				    sizeof(tx_queue->cb_page[0]), GFP_KERNEL);
+	tx_queue->cb_page = kzalloc_objs(tx_queue->cb_page[0],
+					 efx_tx_cb_page_count(tx_queue),
+					 GFP_KERNEL);
 	if (!tx_queue->cb_page) {
 		rc = -ENOMEM;
 		goto fail1;
diff --git a/drivers/net/ethernet/sfc/tc.c b/drivers/net/ethernet/sfc/tc.c
index fa94aa3cd5fe..bf39fb5e4bb6 100644
--- a/drivers/net/ethernet/sfc/tc.c
+++ b/drivers/net/ethernet/sfc/tc.c
@@ -126,7 +126,7 @@ static struct efx_tc_mac_pedit_action *efx_tc_flower_get_mac(struct efx_nic *efx
 	struct efx_tc_mac_pedit_action *ped, *old;
 	int rc;

-	ped = kzalloc(sizeof(*ped), GFP_USER);
+	ped = kzalloc_obj(*ped, GFP_USER);
 	if (!ped)
 		return ERR_PTR(-ENOMEM);
 	memcpy(ped->h_addr, h_addr, ETH_ALEN);
@@ -571,7 +571,7 @@ static int efx_tc_flower_record_encap_match(struct efx_nic *efx,
 	if (rc)
 		goto fail_pseudo;

-	encap = kzalloc(sizeof(*encap), GFP_USER);
+	encap = kzalloc_obj(*encap, GFP_USER);
 	if (!encap) {
 		rc = -ENOMEM;
 		goto fail_pseudo;
@@ -694,7 +694,7 @@ static struct efx_tc_recirc_id *efx_tc_get_recirc_id(struct efx_nic *efx,
 	struct efx_tc_recirc_id *rid, *old;
 	int rc;

-	rid = kzalloc(sizeof(*rid), GFP_USER);
+	rid = kzalloc_obj(*rid, GFP_USER);
 	if (!rid)
 		return ERR_PTR(-ENOMEM);
 	rid->chain_index = chain_index;
@@ -1505,7 +1505,7 @@ static int efx_tc_flower_replace_foreign_lhs_ar(struct efx_nic *efx,
 	if (rc)
 		goto release_encap_match;

-	rule = kzalloc(sizeof(*rule), GFP_USER);
+	rule = kzalloc_obj(*rule, GFP_USER);
 	if (!rule) {
 		rc = -ENOMEM;
 		goto release_encap_match;
@@ -1618,7 +1618,7 @@ static int efx_tc_flower_replace_foreign_lhs(struct efx_nic *efx,
 	if (rc)
 		goto release_encap_match;

-	rule = kzalloc(sizeof(*rule), GFP_USER);
+	rule = kzalloc_obj(*rule, GFP_USER);
 	if (!rule) {
 		rc = -ENOMEM;
 		goto release_encap_match;
@@ -1794,7 +1794,7 @@ static int efx_tc_flower_replace_foreign(struct efx_nic *efx,
 		goto release;
 	}

-	rule = kzalloc(sizeof(*rule), GFP_USER);
+	rule = kzalloc_obj(*rule, GFP_USER);
 	if (!rule) {
 		rc = -ENOMEM;
 		goto release;
@@ -1815,7 +1815,7 @@ static int efx_tc_flower_replace_foreign(struct efx_nic *efx,
 		goto release;
 	}

-	act = kzalloc(sizeof(*act), GFP_USER);
+	act = kzalloc_obj(*act, GFP_USER);
 	if (!act) {
 		rc = -ENOMEM;
 		goto release;
@@ -1901,7 +1901,7 @@ static int efx_tc_flower_replace_foreign(struct efx_nic *efx,
 			if (fa->id == FLOW_ACTION_REDIRECT)
 				break; /* end of the line */
 			/* Mirror, so continue on with saved act */
-			act = kzalloc(sizeof(*act), GFP_USER);
+			act = kzalloc_obj(*act, GFP_USER);
 			if (!act) {
 				rc = -ENOMEM;
 				goto release;
@@ -2016,7 +2016,7 @@ static int efx_tc_flower_replace_lhs(struct efx_nic *efx,
 	if (rc)
 		return rc;

-	rule = kzalloc(sizeof(*rule), GFP_USER);
+	rule = kzalloc_obj(*rule, GFP_USER);
 	if (!rule)
 		return -ENOMEM;
 	rule->cookie = tc->cookie;
@@ -2177,7 +2177,7 @@ static int efx_tc_flower_replace(struct efx_nic *efx,
 	if (rc)
 		goto release;

-	rule = kzalloc(sizeof(*rule), GFP_USER);
+	rule = kzalloc_obj(*rule, GFP_USER);
 	if (!rule) {
 		rc = -ENOMEM;
 		goto release;
@@ -2199,7 +2199,7 @@ static int efx_tc_flower_replace(struct efx_nic *efx,
 	}

 	/* Parse actions */
-	act = kzalloc(sizeof(*act), GFP_USER);
+	act = kzalloc_obj(*act, GFP_USER);
 	if (!act) {
 		rc = -ENOMEM;
 		goto release;
@@ -2340,7 +2340,7 @@ static int efx_tc_flower_replace(struct efx_nic *efx,
 					break; /* end of the line */
 				/* Mirror, so continue on with saved act */
 				save.count = NULL;
-				act = kzalloc(sizeof(*act), GFP_USER);
+				act = kzalloc_obj(*act, GFP_USER);
 				if (!act) {
 					rc = -ENOMEM;
 					goto release;
@@ -2380,7 +2380,7 @@ static int efx_tc_flower_replace(struct efx_nic *efx,
 				break; /* end of the line */
 			/* Mirror, so continue on with saved act */
 			save.count = NULL;
-			act = kzalloc(sizeof(*act), GFP_USER);
+			act = kzalloc_obj(*act, GFP_USER);
 			if (!act) {
 				rc = -ENOMEM;
 				goto release;
@@ -2672,7 +2672,7 @@ static int efx_tc_configure_default_rule(struct efx_nic *efx, u32 ing_port,

 	match->value.ingress_port = ing_port;
 	match->mask.ingress_port = ~0;
-	act = kzalloc(sizeof(*act), GFP_KERNEL);
+	act = kzalloc_obj(*act, GFP_KERNEL);
 	if (!act)
 		return -ENOMEM;
 	act->deliver = 1;
@@ -2745,7 +2745,7 @@ static int efx_tc_configure_fallback_acts(struct efx_nic *efx, u32 eg_port,
 	struct efx_tc_action_set *act;
 	int rc;

-	act = kzalloc(sizeof(*act), GFP_KERNEL);
+	act = kzalloc_obj(*act, GFP_KERNEL);
 	if (!act)
 		return -ENOMEM;
 	act->deliver = 1;
@@ -2988,10 +2988,10 @@ int efx_init_struct_tc(struct efx_nic *efx)
 	if (efx->type->is_vf)
 		return 0;

-	efx->tc = kzalloc(sizeof(*efx->tc), GFP_KERNEL);
+	efx->tc = kzalloc_obj(*efx->tc, GFP_KERNEL);
 	if (!efx->tc)
 		return -ENOMEM;
-	efx->tc->caps = kzalloc(sizeof(struct mae_caps), GFP_KERNEL);
+	efx->tc->caps = kzalloc_obj(struct mae_caps, GFP_KERNEL);
 	if (!efx->tc->caps) {
 		rc = -ENOMEM;
 		goto fail_alloc_caps;
diff --git a/drivers/net/ethernet/sfc/tc_bindings.c b/drivers/net/ethernet/sfc/tc_bindings.c
index 1b79c535c54e..c4b187b51a69 100644
--- a/drivers/net/ethernet/sfc/tc_bindings.c
+++ b/drivers/net/ethernet/sfc/tc_bindings.c
@@ -59,7 +59,7 @@ static struct efx_tc_block_binding *efx_tc_create_binding(
 			struct efx_nic *efx, struct efx_rep *efv,
 			struct net_device *otherdev, struct flow_block *block)
 {
-	struct efx_tc_block_binding *binding = kmalloc(sizeof(*binding), GFP_KERNEL);
+	struct efx_tc_block_binding *binding = kmalloc_obj(*binding, GFP_KERNEL);

 	if (!binding)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/net/ethernet/sfc/tc_conntrack.c b/drivers/net/ethernet/sfc/tc_conntrack.c
index c0603f54cec3..77ce2eca43f2 100644
--- a/drivers/net/ethernet/sfc/tc_conntrack.c
+++ b/drivers/net/ethernet/sfc/tc_conntrack.c
@@ -365,7 +365,7 @@ static int efx_tc_ct_replace(struct efx_tc_ct_zone *ct_zone,
 	if (WARN_ON(!efx->tc->up))
 		return -ENETDOWN;

-	conn = kzalloc(sizeof(*conn), GFP_USER);
+	conn = kzalloc_obj(*conn, GFP_USER);
 	if (!conn)
 		return -ENOMEM;
 	conn->cookie = tc->cookie;
@@ -562,7 +562,7 @@ struct efx_tc_ct_zone *efx_tc_ct_register_zone(struct efx_nic *efx, u16 zone,
 	struct efx_tc_ct_zone *ct_zone, *old;
 	int rc;

-	ct_zone = kzalloc(sizeof(*ct_zone), GFP_USER);
+	ct_zone = kzalloc_obj(*ct_zone, GFP_USER);
 	if (!ct_zone)
 		return ERR_PTR(-ENOMEM);
 	ct_zone->zone = zone;
diff --git a/drivers/net/ethernet/sfc/tc_counters.c b/drivers/net/ethernet/sfc/tc_counters.c
index a421b0123506..d168282f30bf 100644
--- a/drivers/net/ethernet/sfc/tc_counters.c
+++ b/drivers/net/ethernet/sfc/tc_counters.c
@@ -135,7 +135,7 @@ struct efx_tc_counter *efx_tc_flower_allocate_counter(struct efx_nic *efx,
 	struct efx_tc_counter *cnt;
 	int rc, rc2;

-	cnt = kzalloc(sizeof(*cnt), GFP_USER);
+	cnt = kzalloc_obj(*cnt, GFP_USER);
 	if (!cnt)
 		return ERR_PTR(-ENOMEM);

@@ -226,7 +226,7 @@ struct efx_tc_counter_index *efx_tc_flower_get_counter_index(
 	struct efx_tc_counter_index *ctr, *old;
 	struct efx_tc_counter *cnt;

-	ctr = kzalloc(sizeof(*ctr), GFP_USER);
+	ctr = kzalloc_obj(*ctr, GFP_USER);
 	if (!ctr)
 		return ERR_PTR(-ENOMEM);
 	ctr->cookie = cookie;
diff --git a/drivers/net/ethernet/sfc/tc_encap_actions.c b/drivers/net/ethernet/sfc/tc_encap_actions.c
index eef06e48185d..da35705cc5e1 100644
--- a/drivers/net/ethernet/sfc/tc_encap_actions.c
+++ b/drivers/net/ethernet/sfc/tc_encap_actions.c
@@ -120,7 +120,7 @@ static int efx_bind_neigh(struct efx_nic *efx,
 		return -EOPNOTSUPP;
 	}

-	neigh = kzalloc(sizeof(*neigh), GFP_KERNEL_ACCOUNT);
+	neigh = kzalloc_obj(*neigh, GFP_KERNEL_ACCOUNT);
 	if (!neigh)
 		return -ENOMEM;
 	neigh->net = get_net_track(net, &neigh->ns_tracker, GFP_KERNEL_ACCOUNT);
@@ -632,7 +632,7 @@ struct efx_tc_encap_action *efx_tc_flower_create_encap_md(
 				       info->mode);
 		return ERR_PTR(-EOPNOTSUPP);
 	}
-	encap = kzalloc(sizeof(*encap), GFP_KERNEL_ACCOUNT);
+	encap = kzalloc_obj(*encap, GFP_KERNEL_ACCOUNT);
 	if (!encap)
 		return ERR_PTR(-ENOMEM);
 	encap->type = type;
diff --git a/drivers/net/ethernet/sfc/tx_common.c b/drivers/net/ethernet/sfc/tx_common.c
index a22a0d634ffc..4437e2c424f7 100644
--- a/drivers/net/ethernet/sfc/tx_common.c
+++ b/drivers/net/ethernet/sfc/tx_common.c
@@ -36,13 +36,13 @@ int efx_probe_tx_queue(struct efx_tx_queue *tx_queue)
 		  tx_queue->queue, efx->txq_entries, tx_queue->ptr_mask);

 	/* Allocate software ring */
-	tx_queue->buffer = kcalloc(entries, sizeof(*tx_queue->buffer),
-				   GFP_KERNEL);
+	tx_queue->buffer = kzalloc_objs(*tx_queue->buffer, entries, GFP_KERNEL);
 	if (!tx_queue->buffer)
 		return -ENOMEM;

-	tx_queue->cb_page = kcalloc(efx_tx_cb_page_count(tx_queue),
-				    sizeof(tx_queue->cb_page[0]), GFP_KERNEL);
+	tx_queue->cb_page = kzalloc_objs(tx_queue->cb_page[0],
+					 efx_tx_cb_page_count(tx_queue),
+					 GFP_KERNEL);
 	if (!tx_queue->cb_page) {
 		rc = -ENOMEM;
 		goto fail1;
diff --git a/drivers/net/ethernet/sis/sis190.c b/drivers/net/ethernet/sis/sis190.c
index 15e46e6ac262..c06387ed3bf1 100644
--- a/drivers/net/ethernet/sis/sis190.c
+++ b/drivers/net/ethernet/sis/sis190.c
@@ -1407,7 +1407,7 @@ static int sis190_mii_probe(struct net_device *dev)
 		if (status == 0xffff || status == 0x0000)
 			continue;

-		phy = kmalloc(sizeof(*phy), GFP_KERNEL);
+		phy = kmalloc_obj(*phy, GFP_KERNEL);
 		if (!phy) {
 			sis190_free_phy(&tp->first_phy);
 			rc = -ENOMEM;
diff --git a/drivers/net/ethernet/sis/sis900.c b/drivers/net/ethernet/sis/sis900.c
index d85ac8cbeb00..b756eea09513 100644
--- a/drivers/net/ethernet/sis/sis900.c
+++ b/drivers/net/ethernet/sis/sis900.c
@@ -619,7 +619,7 @@ static int sis900_mii_probe(struct net_device *net_dev)
 			continue;
 		}

-		if ((mii_phy = kmalloc(sizeof(struct mii_phy), GFP_KERNEL)) == NULL) {
+		if ((mii_phy = kmalloc_obj(struct mii_phy, GFP_KERNEL)) == NULL) {
 			mii_phy = sis_priv->first_mii;
 			while (mii_phy) {
 				struct mii_phy *phy;
diff --git a/drivers/net/ethernet/smsc/smsc9420.c b/drivers/net/ethernet/smsc/smsc9420.c
index f30d4b17c7fb..02482de18b56 100644
--- a/drivers/net/ethernet/smsc/smsc9420.c
+++ b/drivers/net/ethernet/smsc/smsc9420.c
@@ -1179,9 +1179,8 @@ static int smsc9420_alloc_tx_ring(struct smsc9420_pdata *pd)

 	BUG_ON(!pd->tx_ring);

-	pd->tx_buffers = kmalloc_array(TX_RING_SIZE,
-				       sizeof(struct smsc9420_ring_info),
-				       GFP_KERNEL);
+	pd->tx_buffers = kmalloc_objs(struct smsc9420_ring_info, TX_RING_SIZE,
+				      GFP_KERNEL);
 	if (!pd->tx_buffers)
 		return -ENOMEM;

@@ -1212,9 +1211,8 @@ static int smsc9420_alloc_rx_ring(struct smsc9420_pdata *pd)

 	BUG_ON(!pd->rx_ring);

-	pd->rx_buffers = kmalloc_array(RX_RING_SIZE,
-				       sizeof(struct smsc9420_ring_info),
-				       GFP_KERNEL);
+	pd->rx_buffers = kmalloc_objs(struct smsc9420_ring_info, RX_RING_SIZE,
+				      GFP_KERNEL);
 	if (pd->rx_buffers == NULL)
 		goto out;

diff --git a/drivers/net/ethernet/socionext/netsec.c b/drivers/net/ethernet/socionext/netsec.c
index ee890de69ffe..3b6008cad3a5 100644
--- a/drivers/net/ethernet/socionext/netsec.c
+++ b/drivers/net/ethernet/socionext/netsec.c
@@ -1263,7 +1263,7 @@ static int netsec_alloc_dring(struct netsec_priv *priv, enum ring_id id)
 	if (!dring->vaddr)
 		goto err;

-	dring->desc = kcalloc(DESC_NUM, sizeof(*dring->desc), GFP_KERNEL);
+	dring->desc = kzalloc_objs(*dring->desc, DESC_NUM, GFP_KERNEL);
 	if (!dring->desc)
 		goto err;

diff --git a/drivers/net/ethernet/socionext/sni_ave.c b/drivers/net/ethernet/socionext/sni_ave.c
index 4700998c4837..3c581d71c00e 100644
--- a/drivers/net/ethernet/socionext/sni_ave.c
+++ b/drivers/net/ethernet/socionext/sni_ave.c
@@ -1273,15 +1273,13 @@ static int ave_open(struct net_device *ndev)
 	if (ret)
 		return ret;

-	priv->tx.desc = kcalloc(priv->tx.ndesc, sizeof(*priv->tx.desc),
-				GFP_KERNEL);
+	priv->tx.desc = kzalloc_objs(*priv->tx.desc, priv->tx.ndesc, GFP_KERNEL);
 	if (!priv->tx.desc) {
 		ret = -ENOMEM;
 		goto out_free_irq;
 	}

-	priv->rx.desc = kcalloc(priv->rx.ndesc, sizeof(*priv->rx.desc),
-				GFP_KERNEL);
+	priv->rx.desc = kzalloc_objs(*priv->rx.desc, priv->rx.ndesc, GFP_KERNEL);
 	if (!priv->rx.desc) {
 		kfree(priv->tx.desc);
 		ret = -ENOMEM;
diff --git a/drivers/net/ethernet/spacemit/k1_emac.c b/drivers/net/ethernet/spacemit/k1_emac.c
index dab0772c5b9d..870ab19395d6 100644
--- a/drivers/net/ethernet/spacemit/k1_emac.c
+++ b/drivers/net/ethernet/spacemit/k1_emac.c
@@ -391,9 +391,8 @@ static int emac_alloc_tx_resources(struct emac_priv *priv)
 	struct emac_desc_ring *tx_ring = &priv->tx_ring;
 	struct platform_device *pdev = priv->pdev;

-	tx_ring->tx_desc_buf = kcalloc(tx_ring->total_cnt,
-				       sizeof(*tx_ring->tx_desc_buf),
-				       GFP_KERNEL);
+	tx_ring->tx_desc_buf = kzalloc_objs(*tx_ring->tx_desc_buf,
+					    tx_ring->total_cnt, GFP_KERNEL);

 	if (!tx_ring->tx_desc_buf)
 		return -ENOMEM;
@@ -420,9 +419,8 @@ static int emac_alloc_rx_resources(struct emac_priv *priv)
 	struct emac_desc_ring *rx_ring = &priv->rx_ring;
 	struct platform_device *pdev = priv->pdev;

-	rx_ring->rx_desc_buf = kcalloc(rx_ring->total_cnt,
-				       sizeof(*rx_ring->rx_desc_buf),
-				       GFP_KERNEL);
+	rx_ring->rx_desc_buf = kzalloc_objs(*rx_ring->rx_desc_buf,
+					    rx_ring->total_cnt, GFP_KERNEL);
 	if (!rx_ring->rx_desc_buf)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 82375d34ad57..ebda64cd1bf2 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -2212,9 +2212,8 @@ static int __alloc_dma_rx_desc_resources(struct stmmac_priv *priv,
 		return ret;
 	}

-	rx_q->buf_pool = kcalloc(dma_conf->dma_rx_size,
-				 sizeof(*rx_q->buf_pool),
-				 GFP_KERNEL);
+	rx_q->buf_pool = kzalloc_objs(*rx_q->buf_pool, dma_conf->dma_rx_size,
+				      GFP_KERNEL);
 	if (!rx_q->buf_pool)
 		return -ENOMEM;

@@ -2297,15 +2296,13 @@ static int __alloc_dma_tx_desc_resources(struct stmmac_priv *priv,
 	tx_q->queue_index = queue;
 	tx_q->priv_data = priv;

-	tx_q->tx_skbuff_dma = kcalloc(dma_conf->dma_tx_size,
-				      sizeof(*tx_q->tx_skbuff_dma),
-				      GFP_KERNEL);
+	tx_q->tx_skbuff_dma = kzalloc_objs(*tx_q->tx_skbuff_dma,
+					   dma_conf->dma_tx_size, GFP_KERNEL);
 	if (!tx_q->tx_skbuff_dma)
 		return -ENOMEM;

-	tx_q->tx_skbuff = kcalloc(dma_conf->dma_tx_size,
-				  sizeof(struct sk_buff *),
-				  GFP_KERNEL);
+	tx_q->tx_skbuff = kzalloc_objs(struct sk_buff *, dma_conf->dma_tx_size,
+				       GFP_KERNEL);
 	if (!tx_q->tx_skbuff)
 		return -ENOMEM;

@@ -4016,7 +4013,7 @@ stmmac_setup_dma_desc(struct stmmac_priv *priv, unsigned int mtu)
 	struct stmmac_dma_conf *dma_conf;
 	int chan, bfsize, ret;

-	dma_conf = kzalloc(sizeof(*dma_conf), GFP_KERNEL);
+	dma_conf = kzalloc_obj(*dma_conf, GFP_KERNEL);
 	if (!dma_conf) {
 		netdev_err(priv->dev, "%s: DMA conf allocation failed\n",
 			   __func__);
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
index 08b60b7d5fd6..8f18a2eab33e 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
@@ -324,7 +324,7 @@ static int __stmmac_test_loopback(struct stmmac_priv *priv,
 	struct sk_buff *skb = NULL;
 	int ret = 0;

-	tpriv = kzalloc(sizeof(*tpriv), GFP_KERNEL);
+	tpriv = kzalloc_obj(*tpriv, GFP_KERNEL);
 	if (!tpriv)
 		return -ENOMEM;

@@ -434,11 +434,11 @@ static int stmmac_test_eee(struct stmmac_priv *priv)
 	if (!priv->dma_cap.eee || !priv->eee_active)
 		return -EOPNOTSUPP;

-	initial = kzalloc(sizeof(*initial), GFP_KERNEL);
+	initial = kzalloc_obj(*initial, GFP_KERNEL);
 	if (!initial)
 		return -ENOMEM;

-	final = kzalloc(sizeof(*final), GFP_KERNEL);
+	final = kzalloc_obj(*final, GFP_KERNEL);
 	if (!final) {
 		ret = -ENOMEM;
 		goto out_free_initial;
@@ -744,7 +744,7 @@ static int stmmac_test_flowctrl(struct stmmac_priv *priv)
 	if (!phydev || (!phydev->pause && !phydev->asym_pause))
 		return -EOPNOTSUPP;

-	tpriv = kzalloc(sizeof(*tpriv), GFP_KERNEL);
+	tpriv = kzalloc_obj(*tpriv, GFP_KERNEL);
 	if (!tpriv)
 		return -ENOMEM;

@@ -898,7 +898,7 @@ static int __stmmac_test_vlanfilt(struct stmmac_priv *priv)
 	struct sk_buff *skb = NULL;
 	int ret = 0, i;

-	tpriv = kzalloc(sizeof(*tpriv), GFP_KERNEL);
+	tpriv = kzalloc_obj(*tpriv, GFP_KERNEL);
 	if (!tpriv)
 		return -ENOMEM;

@@ -991,7 +991,7 @@ static int __stmmac_test_dvlanfilt(struct stmmac_priv *priv)
 	struct sk_buff *skb = NULL;
 	int ret = 0, i;

-	tpriv = kzalloc(sizeof(*tpriv), GFP_KERNEL);
+	tpriv = kzalloc_obj(*tpriv, GFP_KERNEL);
 	if (!tpriv)
 		return -ENOMEM;

@@ -1095,23 +1095,23 @@ static int stmmac_test_rxp(struct stmmac_priv *priv)
 	if (!priv->dma_cap.frpsel)
 		return -EOPNOTSUPP;

-	sel = kzalloc(struct_size(sel, keys, nk), GFP_KERNEL);
+	sel = kzalloc_flex(*sel, keys, nk, GFP_KERNEL);
 	if (!sel)
 		return -ENOMEM;

-	exts = kzalloc(sizeof(*exts), GFP_KERNEL);
+	exts = kzalloc_obj(*exts, GFP_KERNEL);
 	if (!exts) {
 		ret = -ENOMEM;
 		goto cleanup_sel;
 	}

-	actions = kcalloc(nk, sizeof(*actions), GFP_KERNEL);
+	actions = kzalloc_objs(*actions, nk, GFP_KERNEL);
 	if (!actions) {
 		ret = -ENOMEM;
 		goto cleanup_exts;
 	}

-	gact = kcalloc(nk, sizeof(*gact), GFP_KERNEL);
+	gact = kzalloc_objs(*gact, nk, GFP_KERNEL);
 	if (!gact) {
 		ret = -ENOMEM;
 		goto cleanup_actions;
@@ -1266,7 +1266,7 @@ static int stmmac_test_vlanoff_common(struct stmmac_priv *priv, bool svlan)
 	if (!priv->dma_cap.vlins)
 		return -EOPNOTSUPP;

-	tpriv = kzalloc(sizeof(*tpriv), GFP_KERNEL);
+	tpriv = kzalloc_obj(*tpriv, GFP_KERNEL);
 	if (!tpriv)
 		return -ENOMEM;

@@ -1349,7 +1349,7 @@ static int __stmmac_test_l3filt(struct stmmac_priv *priv, u32 dst, u32 src,
 				     priv->plat->rx_queues_to_use);
 	}

-	dissector = kzalloc(sizeof(*dissector), GFP_KERNEL);
+	dissector = kzalloc_obj(*dissector, GFP_KERNEL);
 	if (!dissector) {
 		ret = -ENOMEM;
 		goto cleanup_rss;
@@ -1358,7 +1358,7 @@ static int __stmmac_test_l3filt(struct stmmac_priv *priv, u32 dst, u32 src,
 	dissector->used_keys |= (1ULL << FLOW_DISSECTOR_KEY_IPV4_ADDRS);
 	dissector->offset[FLOW_DISSECTOR_KEY_IPV4_ADDRS] = 0;

-	cls = kzalloc(sizeof(*cls), GFP_KERNEL);
+	cls = kzalloc_obj(*cls, GFP_KERNEL);
 	if (!cls) {
 		ret = -ENOMEM;
 		goto cleanup_dissector;
@@ -1368,7 +1368,7 @@ static int __stmmac_test_l3filt(struct stmmac_priv *priv, u32 dst, u32 src,
 	cls->command = FLOW_CLS_REPLACE;
 	cls->cookie = dummy_cookie;

-	rule = kzalloc(struct_size(rule, action.entries, 1), GFP_KERNEL);
+	rule = kzalloc_flex(*rule, action.entries, 1, GFP_KERNEL);
 	if (!rule) {
 		ret = -ENOMEM;
 		goto cleanup_cls;
@@ -1475,7 +1475,7 @@ static int __stmmac_test_l4filt(struct stmmac_priv *priv, u32 dst, u32 src,
 				     priv->plat->rx_queues_to_use);
 	}

-	dissector = kzalloc(sizeof(*dissector), GFP_KERNEL);
+	dissector = kzalloc_obj(*dissector, GFP_KERNEL);
 	if (!dissector) {
 		ret = -ENOMEM;
 		goto cleanup_rss;
@@ -1486,7 +1486,7 @@ static int __stmmac_test_l4filt(struct stmmac_priv *priv, u32 dst, u32 src,
 	dissector->offset[FLOW_DISSECTOR_KEY_BASIC] = 0;
 	dissector->offset[FLOW_DISSECTOR_KEY_PORTS] = offsetof(typeof(keys), key);

-	cls = kzalloc(sizeof(*cls), GFP_KERNEL);
+	cls = kzalloc_obj(*cls, GFP_KERNEL);
 	if (!cls) {
 		ret = -ENOMEM;
 		goto cleanup_dissector;
@@ -1496,7 +1496,7 @@ static int __stmmac_test_l4filt(struct stmmac_priv *priv, u32 dst, u32 src,
 	cls->command = FLOW_CLS_REPLACE;
 	cls->cookie = dummy_cookie;

-	rule = kzalloc(struct_size(rule, action.entries, 1), GFP_KERNEL);
+	rule = kzalloc_flex(*rule, action.entries, 1, GFP_KERNEL);
 	if (!rule) {
 		ret = -ENOMEM;
 		goto cleanup_cls;
@@ -1628,7 +1628,7 @@ static int stmmac_test_arpoffload(struct stmmac_priv *priv)
 	if (!priv->dma_cap.arpoffsel)
 		return -EOPNOTSUPP;

-	tpriv = kzalloc(sizeof(*tpriv), GFP_KERNEL);
+	tpriv = kzalloc_obj(*tpriv, GFP_KERNEL);
 	if (!tpriv)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/sun/cassini.c b/drivers/net/ethernet/sun/cassini.c
index acfb523214b9..fe00e7dd3fe4 100644
--- a/drivers/net/ethernet/sun/cassini.c
+++ b/drivers/net/ethernet/sun/cassini.c
@@ -465,7 +465,7 @@ static cas_page_t *cas_page_alloc(struct cas *cp, const gfp_t flags)
 {
 	cas_page_t *page;

-	page = kmalloc(sizeof(cas_page_t), flags);
+	page = kmalloc_obj(cas_page_t, flags);
 	if (!page)
 		return NULL;

diff --git a/drivers/net/ethernet/sun/ldmvsw.c b/drivers/net/ethernet/sun/ldmvsw.c
index 6fc37ab27f7b..c1102acbb1e0 100644
--- a/drivers/net/ethernet/sun/ldmvsw.c
+++ b/drivers/net/ethernet/sun/ldmvsw.c
@@ -202,7 +202,7 @@ static struct vnet *vsw_get_vnet(struct mdesc_handle *hp,
 	}

 	if (!vp) {
-		vp = kzalloc(sizeof(*vp), GFP_KERNEL);
+		vp = kzalloc_obj(*vp, GFP_KERNEL);
 		if (unlikely(!vp)) {
 			mutex_unlock(&vnet_list_mutex);
 			return ERR_PTR(-ENOMEM);
diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
index f035e3bbbef8..2d31e6112ca6 100644
--- a/drivers/net/ethernet/sun/niu.c
+++ b/drivers/net/ethernet/sun/niu.c
@@ -4341,8 +4341,7 @@ static int niu_alloc_rx_ring_info(struct niu *np,
 {
 	BUILD_BUG_ON(sizeof(struct rxdma_mailbox) != 64);

-	rp->rxhash = kcalloc(MAX_RBR_RING_SIZE, sizeof(struct page *),
-			     GFP_KERNEL);
+	rp->rxhash = kzalloc_objs(struct page *, MAX_RBR_RING_SIZE, GFP_KERNEL);
 	if (!rp->rxhash)
 		return -ENOMEM;

@@ -4485,8 +4484,7 @@ static int niu_alloc_channels(struct niu *np)
 	num_rx_rings = parent->rxchan_per_port[port];
 	num_tx_rings = parent->txchan_per_port[port];

-	rx_rings = kcalloc(num_rx_rings, sizeof(struct rx_ring_info),
-			   GFP_KERNEL);
+	rx_rings = kzalloc_objs(struct rx_ring_info, num_rx_rings, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!rx_rings)
 		goto out_err;
@@ -4525,8 +4523,7 @@ static int niu_alloc_channels(struct niu *np)
 			goto out_err;
 	}

-	tx_rings = kcalloc(num_tx_rings, sizeof(struct tx_ring_info),
-			   GFP_KERNEL);
+	tx_rings = kzalloc_objs(struct tx_ring_info, num_tx_rings, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!tx_rings)
 		goto out_err;
@@ -9514,7 +9511,7 @@ static struct niu_parent *niu_new_parent(struct niu *np,
 			goto fail_unregister;
 	}

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		goto fail_unregister;

diff --git a/drivers/net/ethernet/sun/sunhme.c b/drivers/net/ethernet/sun/sunhme.c
index 666998082998..1984a6de65ee 100644
--- a/drivers/net/ethernet/sun/sunhme.c
+++ b/drivers/net/ethernet/sun/sunhme.c
@@ -2248,7 +2248,7 @@ static struct quattro *quattro_sbus_find(struct platform_device *child)
 	if (qp)
 		return qp;

-	qp = kzalloc(sizeof(*qp), GFP_KERNEL);
+	qp = kzalloc_obj(*qp, GFP_KERNEL);
 	if (!qp)
 		return NULL;

@@ -2278,7 +2278,7 @@ static struct quattro *quattro_pci_find(struct pci_dev *pdev)
 			return qp;
 	}

-	qp = kmalloc(sizeof(struct quattro), GFP_KERNEL);
+	qp = kmalloc_obj(struct quattro, GFP_KERNEL);
 	if (!qp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ethernet/sun/sunqe.c b/drivers/net/ethernet/sun/sunqe.c
index 2920341b14a0..36187e85b7e6 100644
--- a/drivers/net/ethernet/sun/sunqe.c
+++ b/drivers/net/ethernet/sun/sunqe.c
@@ -771,7 +771,7 @@ static struct sunqec *get_qec(struct platform_device *child)

 	qecp = platform_get_drvdata(op);
 	if (!qecp) {
-		qecp = kzalloc(sizeof(struct sunqec), GFP_KERNEL);
+		qecp = kzalloc_obj(struct sunqec, GFP_KERNEL);
 		if (qecp) {
 			u32 ctrl;

diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c
index a2a3e94da4b8..7c756e07eb55 100644
--- a/drivers/net/ethernet/sun/sunvnet.c
+++ b/drivers/net/ethernet/sun/sunvnet.c
@@ -436,7 +436,7 @@ static int vnet_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
 		goto err_out_put_mdesc;
 	}

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!port)
 		goto err_out_put_mdesc;
diff --git a/drivers/net/ethernet/sun/sunvnet_common.c b/drivers/net/ethernet/sun/sunvnet_common.c
index 0212853c9430..5cca95869052 100644
--- a/drivers/net/ethernet/sun/sunvnet_common.c
+++ b/drivers/net/ethernet/sun/sunvnet_common.c
@@ -1571,7 +1571,7 @@ static void __update_mc_list(struct vnet *vp, struct net_device *dev)
 		}

 		if (!m) {
-			m = kzalloc(sizeof(*m), GFP_ATOMIC);
+			m = kzalloc_obj(*m, GFP_ATOMIC);
 			if (!m)
 				continue;
 			memcpy(m->addr, ha->addr, ETH_ALEN);
diff --git a/drivers/net/ethernet/sunplus/spl2sw_desc.c b/drivers/net/ethernet/sunplus/spl2sw_desc.c
index 3f0d9f78b37d..f6b42cda693a 100644
--- a/drivers/net/ethernet/sunplus/spl2sw_desc.c
+++ b/drivers/net/ethernet/sunplus/spl2sw_desc.c
@@ -129,8 +129,9 @@ int spl2sw_rx_descs_init(struct spl2sw_common *comm)
 	u32 i, j;

 	for (i = 0; i < RX_DESC_QUEUE_NUM; i++) {
-		comm->rx_skb_info[i] = kcalloc(comm->rx_desc_num[i], sizeof(*rx_skbinfo),
-					       GFP_KERNEL | GFP_DMA);
+		comm->rx_skb_info[i] = kzalloc_objs(*rx_skbinfo,
+						    comm->rx_desc_num[i],
+						    GFP_KERNEL | GFP_DMA);
 		if (!comm->rx_skb_info[i])
 			goto mem_alloc_fail;

diff --git a/drivers/net/ethernet/synopsys/dwc-xlgmac-desc.c b/drivers/net/ethernet/synopsys/dwc-xlgmac-desc.c
index 589797bad1f9..cda6ee474400 100644
--- a/drivers/net/ethernet/synopsys/dwc-xlgmac-desc.c
+++ b/drivers/net/ethernet/synopsys/dwc-xlgmac-desc.c
@@ -140,9 +140,8 @@ static int xlgmac_init_ring(struct xlgmac_pdata *pdata,
 		return -ENOMEM;

 	/* Array of descriptor data */
-	ring->desc_data_head = kcalloc(dma_desc_count,
-					sizeof(struct xlgmac_desc_data),
-					GFP_KERNEL);
+	ring->desc_data_head = kzalloc_objs(struct xlgmac_desc_data,
+					    dma_desc_count, GFP_KERNEL);
 	if (!ring->desc_data_head)
 		return -ENOMEM;

@@ -234,21 +233,21 @@ static int xlgmac_alloc_channels(struct xlgmac_pdata *pdata)
 	int ret = -ENOMEM;
 	unsigned int i;

-	channel_head = kcalloc(pdata->channel_count,
-			       sizeof(struct xlgmac_channel), GFP_KERNEL);
+	channel_head = kzalloc_objs(struct xlgmac_channel, pdata->channel_count,
+				    GFP_KERNEL);
 	if (!channel_head)
 		return ret;

 	netif_dbg(pdata, drv, pdata->netdev,
 		  "channel_head=%p\n", channel_head);

-	tx_ring = kcalloc(pdata->tx_ring_count, sizeof(struct xlgmac_ring),
-			  GFP_KERNEL);
+	tx_ring = kzalloc_objs(struct xlgmac_ring, pdata->tx_ring_count,
+			       GFP_KERNEL);
 	if (!tx_ring)
 		goto err_tx_ring;

-	rx_ring = kcalloc(pdata->rx_ring_count, sizeof(struct xlgmac_ring),
-			  GFP_KERNEL);
+	rx_ring = kzalloc_objs(struct xlgmac_ring, pdata->rx_ring_count,
+			       GFP_KERNEL);
 	if (!rx_ring)
 		goto err_rx_ring;

diff --git a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c
index d4c56da98a6a..53cdac272b58 100644
--- a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c
@@ -435,7 +435,7 @@ static int am65_cpsw_switchdev_event(struct notifier_block *unused,
 	if (!am65_cpsw_port_dev_check(ndev))
 		return NOTIFY_DONE;

-	switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+	switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 	if (WARN_ON(!switchdev_work))
 		return NOTIFY_BAD;

diff --git a/drivers/net/ethernet/ti/cpsw_switchdev.c b/drivers/net/ethernet/ti/cpsw_switchdev.c
index ce85f7610273..7e06aac388a6 100644
--- a/drivers/net/ethernet/ti/cpsw_switchdev.c
+++ b/drivers/net/ethernet/ti/cpsw_switchdev.c
@@ -445,7 +445,7 @@ static int cpsw_switchdev_event(struct notifier_block *unused,
 	if (!cpsw_port_dev_check(ndev))
 		return NOTIFY_DONE;

-	switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+	switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 	if (WARN_ON(!switchdev_work))
 		return NOTIFY_BAD;

diff --git a/drivers/net/ethernet/ti/icssg/icssg_switchdev.c b/drivers/net/ethernet/ti/icssg/icssg_switchdev.c
index 67e2927e176d..26a57be04665 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_switchdev.c
+++ b/drivers/net/ethernet/ti/icssg/icssg_switchdev.c
@@ -193,7 +193,7 @@ static int prueth_switchdev_event(struct notifier_block *unused,
 		return notifier_from_errno(err);
 	}

-	switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+	switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 	if (WARN_ON(!switchdev_work))
 		return NOTIFY_BAD;

diff --git a/drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c b/drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
index 07c08564386e..fa9959ad966d 100644
--- a/drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
+++ b/drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
@@ -748,7 +748,7 @@ int icssm_prueth_sw_init_fdb_table(struct prueth *prueth)
 	if (prueth->emac_configured)
 		return 0;

-	prueth->fdb_tbl = kmalloc(sizeof(*prueth->fdb_tbl), GFP_KERNEL);
+	prueth->fdb_tbl = kmalloc_obj(*prueth->fdb_tbl, GFP_KERNEL);
 	if (!prueth->fdb_tbl)
 		return -ENOMEM;

@@ -816,7 +816,7 @@ int icssm_prueth_sw_learn_fdb(struct prueth_emac *emac, u8 *src_mac)
 {
 	struct icssm_prueth_sw_fdb_work *fdb_work;

-	fdb_work = kzalloc(sizeof(*fdb_work), GFP_ATOMIC);
+	fdb_work = kzalloc_obj(*fdb_work, GFP_ATOMIC);
 	if (WARN_ON(!fdb_work))
 		return -ENOMEM;

@@ -835,7 +835,7 @@ int icssm_prueth_sw_purge_fdb(struct prueth_emac *emac)
 {
 	struct icssm_prueth_sw_fdb_work *fdb_work;

-	fdb_work = kzalloc(sizeof(*fdb_work), GFP_ATOMIC);
+	fdb_work = kzalloc_obj(*fdb_work, GFP_ATOMIC);
 	if (WARN_ON(!fdb_work))
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/ti/icssm/icssm_switchdev.c b/drivers/net/ethernet/ti/icssm/icssm_switchdev.c
index 414ec9fc02a0..1c48023031dc 100644
--- a/drivers/net/ethernet/ti/icssm/icssm_switchdev.c
+++ b/drivers/net/ethernet/ti/icssm/icssm_switchdev.c
@@ -167,7 +167,7 @@ static int icssm_prueth_sw_switchdev_event(struct notifier_block *unused,
 		return notifier_from_errno(err);
 	}

-	switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+	switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 	if (WARN_ON(!switchdev_work))
 		return NOTIFY_BAD;

diff --git a/drivers/net/ethernet/ti/k3-cppi-desc-pool.c b/drivers/net/ethernet/ti/k3-cppi-desc-pool.c
index 739bae8e11ee..58bb394fecdf 100644
--- a/drivers/net/ethernet/ti/k3-cppi-desc-pool.c
+++ b/drivers/net/ethernet/ti/k3-cppi-desc-pool.c
@@ -55,7 +55,7 @@ k3_cppi_desc_pool_create_name(struct device *dev, size_t size,
 	const char *pool_name = NULL;
 	int ret = -ENOMEM;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(ret);

@@ -77,8 +77,8 @@ k3_cppi_desc_pool_create_name(struct device *dev, size_t size,

 	pool->gen_pool->name = pool_name;

-	pool->desc_infos = kcalloc(pool->num_desc,
-				   sizeof(*pool->desc_infos), GFP_KERNEL);
+	pool->desc_infos = kzalloc_objs(*pool->desc_infos, pool->num_desc,
+					GFP_KERNEL);
 	if (!pool->desc_infos)
 		goto gen_pool_desc_infos_alloc_fail;

diff --git a/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c b/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c
index 4fbe4b7cd12a..67d96efcb8bc 100644
--- a/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c
+++ b/drivers/net/ethernet/toshiba/ps3_gelic_wireless.c
@@ -209,7 +209,7 @@ static struct gelic_eurus_cmd *gelic_eurus_sync_cmd(struct gelic_wl_info *wl,
 	struct gelic_eurus_cmd *cmd;

 	/* allocate cmd */
-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return NULL;

@@ -2305,9 +2305,8 @@ static struct net_device *gelic_wl_alloc(struct gelic_card *card)
 	pr_debug("%s: wl=%p port=%p\n", __func__, wl, port);

 	/* allocate scan list */
-	wl->networks = kcalloc(GELIC_WL_BSS_MAX_ENT,
-			       sizeof(struct gelic_wl_scan_info),
-			       GFP_KERNEL);
+	wl->networks = kzalloc_objs(struct gelic_wl_scan_info,
+				    GELIC_WL_BSS_MAX_ENT, GFP_KERNEL);

 	if (!wl->networks)
 		goto fail_bss;
diff --git a/drivers/net/ethernet/via/via-velocity.c b/drivers/net/ethernet/via/via-velocity.c
index 5aa93144a4f5..f761975aeda8 100644
--- a/drivers/net/ethernet/via/via-velocity.c
+++ b/drivers/net/ethernet/via/via-velocity.c
@@ -1631,8 +1631,8 @@ static int velocity_init_rd_ring(struct velocity_info *vptr)
 {
 	int ret = -ENOMEM;

-	vptr->rx.info = kcalloc(vptr->options.numrx,
-				sizeof(struct velocity_rd_info), GFP_KERNEL);
+	vptr->rx.info = kzalloc_objs(struct velocity_rd_info,
+				     vptr->options.numrx, GFP_KERNEL);
 	if (!vptr->rx.info)
 		goto out;

@@ -1664,9 +1664,9 @@ static int velocity_init_td_ring(struct velocity_info *vptr)
 	/* Init the TD ring entries */
 	for (j = 0; j < vptr->tx.numq; j++) {

-		vptr->tx.infos[j] = kcalloc(vptr->options.numtx,
-					    sizeof(struct velocity_td_info),
-					    GFP_KERNEL);
+		vptr->tx.infos[j] = kzalloc_objs(struct velocity_td_info,
+						 vptr->options.numtx,
+						 GFP_KERNEL);
 		if (!vptr->tx.infos[j])	{
 			while (--j >= 0)
 				kfree(vptr->tx.infos[j]);
@@ -2304,7 +2304,7 @@ static int velocity_change_mtu(struct net_device *dev, int new_mtu)
 		struct rx_info rx;
 		struct tx_info tx;

-		tmp_vptr = kzalloc(sizeof(*tmp_vptr), GFP_KERNEL);
+		tmp_vptr = kzalloc_obj(*tmp_vptr, GFP_KERNEL);
 		if (!tmp_vptr) {
 			ret = -ENOMEM;
 			goto out_0;
diff --git a/drivers/net/ethernet/wangxun/libwx/wx_hw.c b/drivers/net/ethernet/wangxun/libwx/wx_hw.c
index 58b8300e3d2c..c78e0775aeb5 100644
--- a/drivers/net/ethernet/wangxun/libwx/wx_hw.c
+++ b/drivers/net/ethernet/wangxun/libwx/wx_hw.c
@@ -2505,9 +2505,8 @@ int wx_sw_init(struct wx *wx)
 	wx->rss_flags = WX_RSS_FIELD_IPV4 | WX_RSS_FIELD_IPV4_TCP |
 			WX_RSS_FIELD_IPV6 | WX_RSS_FIELD_IPV6_TCP;

-	wx->mac_table = kcalloc(wx->mac.num_rar_entries,
-				sizeof(struct wx_mac_addr),
-				GFP_KERNEL);
+	wx->mac_table = kzalloc_objs(struct wx_mac_addr,
+				     wx->mac.num_rar_entries, GFP_KERNEL);
 	if (!wx->mac_table) {
 		wx_err(wx, "mac_table allocation failed\n");
 		kfree(wx->rss_key);
diff --git a/drivers/net/ethernet/wangxun/libwx/wx_lib.c b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
index b31b48d26575..00c23bebdc72 100644
--- a/drivers/net/ethernet/wangxun/libwx/wx_lib.c
+++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
@@ -1905,16 +1905,14 @@ static int wx_acquire_msix_vectors(struct wx *wx)
 	nvecs = min_t(int, nvecs, num_online_cpus());
 	nvecs = min_t(int, nvecs, wx->mac.max_msix_vectors);

-	wx->msix_q_entries = kcalloc(nvecs, sizeof(struct msix_entry),
-				     GFP_KERNEL);
+	wx->msix_q_entries = kzalloc_objs(struct msix_entry, nvecs, GFP_KERNEL);
 	if (!wx->msix_q_entries)
 		return -ENOMEM;

 	/* One for non-queue interrupts */
 	nvecs += 1;

-	wx->msix_entry = kcalloc(1, sizeof(struct msix_entry),
-				 GFP_KERNEL);
+	wx->msix_entry = kzalloc_objs(struct msix_entry, 1, GFP_KERNEL);
 	if (!wx->msix_entry) {
 		kfree(wx->msix_q_entries);
 		wx->msix_q_entries = NULL;
@@ -2097,8 +2095,7 @@ static int wx_alloc_q_vector(struct wx *wx,
 	/* note this will allocate space for the ring structure as well! */
 	ring_count = txr_count + rxr_count;

-	q_vector = kzalloc(struct_size(q_vector, ring, ring_count),
-			   GFP_KERNEL);
+	q_vector = kzalloc_flex(*q_vector, ring, ring_count, GFP_KERNEL);
 	if (!q_vector)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/wangxun/libwx/wx_mbx.c b/drivers/net/ethernet/wangxun/libwx/wx_mbx.c
index 2aa03eadf064..d237814cbae5 100644
--- a/drivers/net/ethernet/wangxun/libwx/wx_mbx.c
+++ b/drivers/net/ethernet/wangxun/libwx/wx_mbx.c
@@ -403,8 +403,7 @@ int wx_read_mbx_vf(struct wx *wx, u32 *msg, u16 size)

 int wx_init_mbx_params_vf(struct wx *wx)
 {
-	wx->vfinfo = kzalloc(sizeof(struct vf_data_storage),
-			     GFP_KERNEL);
+	wx->vfinfo = kzalloc_obj(struct vf_data_storage, GFP_KERNEL);
 	if (!wx->vfinfo)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/wangxun/libwx/wx_sriov.c b/drivers/net/ethernet/wangxun/libwx/wx_sriov.c
index 493da5fffdb6..70a5b00eb353 100644
--- a/drivers/net/ethernet/wangxun/libwx/wx_sriov.c
+++ b/drivers/net/ethernet/wangxun/libwx/wx_sriov.c
@@ -32,8 +32,7 @@ static int wx_alloc_vf_macvlans(struct wx *wx, u8 num_vfs)
 	if (!num_vf_macvlans)
 		return -EINVAL;

-	mv_list = kcalloc(num_vf_macvlans, sizeof(struct vf_macvlans),
-			  GFP_KERNEL);
+	mv_list = kzalloc_objs(struct vf_macvlans, num_vf_macvlans, GFP_KERNEL);
 	if (!mv_list)
 		return -ENOMEM;

@@ -88,8 +87,7 @@ static int __wx_enable_sriov(struct wx *wx, u8 num_vfs)
 		wx->ring_feature[RING_F_VMDQ].limit = 1;
 	wx->ring_feature[RING_F_VMDQ].offset = num_vfs;

-	wx->vfinfo = kcalloc(num_vfs, sizeof(struct vf_data_storage),
-			     GFP_KERNEL);
+	wx->vfinfo = kzalloc_objs(struct vf_data_storage, num_vfs, GFP_KERNEL);
 	if (!wx->vfinfo)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/wangxun/ngbe/ngbe_ethtool.c b/drivers/net/ethernet/wangxun/ngbe/ngbe_ethtool.c
index 662f28bdde8a..d42fd6d8d9c8 100644
--- a/drivers/net/ethernet/wangxun/ngbe/ngbe_ethtool.c
+++ b/drivers/net/ethernet/wangxun/ngbe/ngbe_ethtool.c
@@ -81,7 +81,7 @@ static int ngbe_set_ringparam(struct net_device *netdev,

 	/* allocate temporary buffer to store rings in */
 	i = max_t(int, wx->num_tx_queues, wx->num_rx_queues);
-	temp_ring = kvmalloc_array(i, sizeof(struct wx_ring), GFP_KERNEL);
+	temp_ring = kvmalloc_objs(struct wx_ring, i, GFP_KERNEL);
 	if (!temp_ring) {
 		err = -ENOMEM;
 		goto clear_reset;
diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_ethtool.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_ethtool.c
index 59d758acccf0..cc0ebc3d030a 100644
--- a/drivers/net/ethernet/wangxun/txgbe/txgbe_ethtool.c
+++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_ethtool.c
@@ -73,7 +73,7 @@ static int txgbe_set_ringparam(struct net_device *netdev,

 	/* allocate temporary buffer to store rings in */
 	i = max_t(int, wx->num_tx_queues, wx->num_rx_queues);
-	temp_ring = kvmalloc_array(i, sizeof(struct wx_ring), GFP_KERNEL);
+	temp_ring = kvmalloc_objs(struct wx_ring, i, GFP_KERNEL);
 	if (!temp_ring) {
 		err = -ENOMEM;
 		goto clear_reset;
@@ -390,7 +390,7 @@ static int txgbe_add_ethtool_fdir_entry(struct txgbe *txgbe,
 		return -EINVAL;
 	}

-	input = kzalloc(sizeof(*input), GFP_ATOMIC);
+	input = kzalloc_obj(*input, GFP_ATOMIC);
 	if (!input)
 		return -ENOMEM;

diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
index 998bacd508b8..8980c965b5fd 100644
--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
+++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
@@ -1542,14 +1542,14 @@ static int axienet_init_dmaengine(struct net_device *ndev)
 	lp->tx_ring_head = 0;
 	lp->rx_ring_tail = 0;
 	lp->rx_ring_head = 0;
-	lp->tx_skb_ring = kcalloc(TX_BD_NUM_MAX, sizeof(*lp->tx_skb_ring),
-				  GFP_KERNEL);
+	lp->tx_skb_ring = kzalloc_objs(*lp->tx_skb_ring, TX_BD_NUM_MAX,
+				       GFP_KERNEL);
 	if (!lp->tx_skb_ring) {
 		ret = -ENOMEM;
 		goto err_dma_release_rx;
 	}
 	for (i = 0; i < TX_BD_NUM_MAX; i++) {
-		skbuf_dma = kzalloc(sizeof(*skbuf_dma), GFP_KERNEL);
+		skbuf_dma = kzalloc_obj(*skbuf_dma, GFP_KERNEL);
 		if (!skbuf_dma) {
 			ret = -ENOMEM;
 			goto err_free_tx_skb_ring;
@@ -1557,14 +1557,14 @@ static int axienet_init_dmaengine(struct net_device *ndev)
 		lp->tx_skb_ring[i] = skbuf_dma;
 	}

-	lp->rx_skb_ring = kcalloc(RX_BUF_NUM_DEFAULT, sizeof(*lp->rx_skb_ring),
-				  GFP_KERNEL);
+	lp->rx_skb_ring = kzalloc_objs(*lp->rx_skb_ring, RX_BUF_NUM_DEFAULT,
+				       GFP_KERNEL);
 	if (!lp->rx_skb_ring) {
 		ret = -ENOMEM;
 		goto err_free_tx_skb_ring;
 	}
 	for (i = 0; i < RX_BUF_NUM_DEFAULT; i++) {
-		skbuf_dma = kzalloc(sizeof(*skbuf_dma), GFP_KERNEL);
+		skbuf_dma = kzalloc_obj(*skbuf_dma, GFP_KERNEL);
 		if (!skbuf_dma) {
 			ret = -ENOMEM;
 			goto err_free_rx_skb_ring;
diff --git a/drivers/net/fjes/fjes_hw.c b/drivers/net/fjes/fjes_hw.c
index 5ad2673f213d..db40667413b4 100644
--- a/drivers/net/fjes/fjes_hw.c
+++ b/drivers/net/fjes/fjes_hw.c
@@ -212,8 +212,7 @@ static int fjes_hw_setup(struct fjes_hw *hw)
 	hw->hw_info.max_epid = &hw->max_epid;
 	hw->hw_info.my_epid = &hw->my_epid;

-	buf = kcalloc(hw->max_epid, sizeof(struct ep_share_mem_info),
-		      GFP_KERNEL);
+	buf = kzalloc_objs(struct ep_share_mem_info, hw->max_epid, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index 0949d4579171..d482e5512fa8 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -980,7 +980,7 @@ static struct geneve_sock *geneve_socket_create(struct net *net, __be16 port,
 	struct udp_tunnel_sock_cfg tunnel_cfg;
 	int h;

-	gs = kzalloc(sizeof(*gs), GFP_KERNEL);
+	gs = kzalloc_obj(*gs, GFP_KERNEL);
 	if (!gs)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index 4213c3b2d532..e8949f556209 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -1623,13 +1623,13 @@ static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize)
 {
 	int i;

-	gtp->addr_hash = kmalloc_array(hsize, sizeof(struct hlist_head),
-				       GFP_KERNEL | __GFP_NOWARN);
+	gtp->addr_hash = kmalloc_objs(struct hlist_head, hsize,
+				      GFP_KERNEL | __GFP_NOWARN);
 	if (gtp->addr_hash == NULL)
 		return -ENOMEM;

-	gtp->tid_hash = kmalloc_array(hsize, sizeof(struct hlist_head),
-				      GFP_KERNEL | __GFP_NOWARN);
+	gtp->tid_hash = kmalloc_objs(struct hlist_head, hsize,
+				     GFP_KERNEL | __GFP_NOWARN);
 	if (gtp->tid_hash == NULL)
 		goto err1;

@@ -1917,7 +1917,7 @@ static struct pdp_ctx *gtp_pdp_add(struct gtp_dev *gtp, struct sock *sk,

 	}

-	pctx = kmalloc(sizeof(*pctx), GFP_ATOMIC);
+	pctx = kmalloc_obj(*pctx, GFP_ATOMIC);
 	if (pctx == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c
index f29997b20fd7..16220b740b8e 100644
--- a/drivers/net/hamradio/yam.c
+++ b/drivers/net/hamradio/yam.c
@@ -386,7 +386,7 @@ static unsigned char *add_mcs(unsigned char *bits, int bitrate,
 	}

 	/* Allocate a new mcs */
-	if ((p = kmalloc(sizeof(struct yam_mcs), GFP_KERNEL)) == NULL) {
+	if ((p = kmalloc_obj(struct yam_mcs, GFP_KERNEL)) == NULL) {
 		release_firmware(fw);
 		return NULL;
 	}
diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 60a4629fe6ba..d9fa2fc4c43c 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -129,7 +129,7 @@ static struct netvsc_device *alloc_net_device(void)
 {
 	struct netvsc_device *net_device;

-	net_device = kzalloc(sizeof(struct netvsc_device), GFP_KERNEL);
+	net_device = kzalloc_obj(struct netvsc_device, GFP_KERNEL);
 	if (!net_device)
 		return NULL;

@@ -1025,9 +1025,8 @@ static int netvsc_dma_map(struct hv_device *hv_dev,
 	if (!hv_is_isolation_supported())
 		return 0;

-	packet->dma_range = kcalloc(page_count,
-				    sizeof(*packet->dma_range),
-				    GFP_ATOMIC);
+	packet->dma_range = kzalloc_objs(*packet->dma_range, page_count,
+					 GFP_ATOMIC);
 	if (!packet->dma_range)
 		return -ENOMEM;

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index cbd52cb79268..1a3f2a35519f 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -712,7 +712,7 @@ void netvsc_linkstatus_callback(struct net_device *net,
 	if (net->reg_state != NETREG_REGISTERED)
 		return;

-	event = kzalloc(sizeof(*event), GFP_ATOMIC);
+	event = kzalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return;
 	event->event = indicate->status;
@@ -931,7 +931,7 @@ struct netvsc_device_info *netvsc_devinfo_get(struct netvsc_device *nvdev)
 	struct netvsc_device_info *dev_info;
 	struct bpf_prog *prog;

-	dev_info = kzalloc(sizeof(*dev_info), GFP_ATOMIC);
+	dev_info = kzalloc_obj(*dev_info, GFP_ATOMIC);

 	if (!dev_info)
 		return NULL;
@@ -1524,9 +1524,8 @@ static void netvsc_get_ethtool_stats(struct net_device *dev,
 		data[i++] = xdp_tx;
 	}

-	pcpu_sum = kvmalloc_array(nr_cpu_ids,
-				  sizeof(struct netvsc_ethtool_pcpu_stats),
-				  GFP_KERNEL);
+	pcpu_sum = kvmalloc_objs(struct netvsc_ethtool_pcpu_stats, nr_cpu_ids,
+				 GFP_KERNEL);
 	if (!pcpu_sum)
 		return;

diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index c35f9685b6bf..2fa77dc21d7e 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -64,7 +64,7 @@ static struct rndis_device *get_rndis_device(void)
 {
 	struct rndis_device *device;

-	device = kzalloc(sizeof(struct rndis_device), GFP_KERNEL);
+	device = kzalloc_obj(struct rndis_device, GFP_KERNEL);
 	if (!device)
 		return NULL;

@@ -87,7 +87,7 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev,
 	struct rndis_set_request *set;
 	unsigned long flags;

-	request = kzalloc(sizeof(struct rndis_request), GFP_KERNEL);
+	request = kzalloc_obj(struct rndis_request, GFP_KERNEL);
 	if (!request)
 		return NULL;

diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c
index fd91f8a45bce..6156cf379916 100644
--- a/drivers/net/ieee802154/at86rf230.c
+++ b/drivers/net/ieee802154/at86rf230.c
@@ -788,7 +788,7 @@ static irqreturn_t at86rf230_isr(int irq, void *data)

 	disable_irq_nosync(irq);

-	ctx = kzalloc(sizeof(*ctx), GFP_ATOMIC);
+	ctx = kzalloc_obj(*ctx, GFP_ATOMIC);
 	if (!ctx) {
 		enable_irq(irq);
 		return IRQ_NONE;
diff --git a/drivers/net/ieee802154/ca8210.c b/drivers/net/ieee802154/ca8210.c
index ebc4f1b18e7b..bb3ff9ce06b2 100644
--- a/drivers/net/ieee802154/ca8210.c
+++ b/drivers/net/ieee802154/ca8210.c
@@ -720,8 +720,8 @@ static void ca8210_rx_done(struct cas_control *cas_ctl)
 				&priv->spi->dev,
 				"Resetting MAC...\n");

-			mlme_reset_wpc = kmalloc(sizeof(*mlme_reset_wpc),
-						 GFP_KERNEL);
+			mlme_reset_wpc = kmalloc_obj(*mlme_reset_wpc,
+						     GFP_KERNEL);
 			if (!mlme_reset_wpc)
 				goto finish;
 			INIT_WORK(
@@ -884,7 +884,7 @@ static int ca8210_spi_transfer(

 	dev_dbg(&spi->dev, "%s called\n", __func__);

-	cas_ctl = kzalloc(sizeof(*cas_ctl), GFP_ATOMIC);
+	cas_ctl = kzalloc_obj(*cas_ctl, GFP_ATOMIC);
 	if (!cas_ctl)
 		return -ENOMEM;

@@ -3067,7 +3067,7 @@ static int ca8210_probe(struct spi_device *spi_device)
 	ca8210_hw_setup(hw);
 	ieee802154_random_extended_addr(&hw->phy->perm_extended_addr);

-	pdata = kmalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kmalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata) {
 		ret = -ENOMEM;
 		goto error;
diff --git a/drivers/net/ieee802154/mac802154_hwsim.c b/drivers/net/ieee802154/mac802154_hwsim.c
index 1cab20b5a885..e449afd8e71f 100644
--- a/drivers/net/ieee802154/mac802154_hwsim.c
+++ b/drivers/net/ieee802154/mac802154_hwsim.c
@@ -98,7 +98,7 @@ static int hwsim_update_pib(struct ieee802154_hw *hw, u8 page, u8 channel,
 	struct hwsim_phy *phy = hw->priv;
 	struct hwsim_pib *pib, *pib_old;

-	pib = kzalloc(sizeof(*pib), GFP_ATOMIC);
+	pib = kzalloc_obj(*pib, GFP_ATOMIC);
 	if (!pib)
 		return -ENOMEM;

@@ -545,11 +545,11 @@ static struct hwsim_edge *hwsim_alloc_edge(struct hwsim_phy *endpoint, u8 lqi)
 	struct hwsim_edge_info *einfo;
 	struct hwsim_edge *e;

-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e)
 		return NULL;

-	einfo = kzalloc(sizeof(*einfo), GFP_KERNEL);
+	einfo = kzalloc_obj(*einfo, GFP_KERNEL);
 	if (!einfo) {
 		kfree(e);
 		return NULL;
@@ -713,7 +713,7 @@ static int hwsim_set_edge_lqi(struct sk_buff *msg, struct genl_info *info)
 		return -ENOENT;
 	}

-	einfo = kzalloc(sizeof(*einfo), GFP_KERNEL);
+	einfo = kzalloc_obj(*einfo, GFP_KERNEL);
 	if (!einfo) {
 		mutex_unlock(&hwsim_phys_lock);
 		return -ENOMEM;
@@ -946,7 +946,7 @@ static int hwsim_add_one(struct genl_info *info, struct device *dev,

 	/* hwsim phy channel 13 as default */
 	hw->phy->current_channel = 13;
-	pib = kzalloc(sizeof(*pib), GFP_KERNEL);
+	pib = kzalloc_obj(*pib, GFP_KERNEL);
 	if (!pib) {
 		err = -ENOMEM;
 		goto err_pib;
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
index 6da801748189..4ad90264433a 100644
--- a/drivers/net/ifb.c
+++ b/drivers/net/ifb.c
@@ -187,7 +187,7 @@ static int ifb_dev_init(struct net_device *dev)
 	struct ifb_q_private *txp;
 	int i;

-	txp = kcalloc(dev->num_tx_queues, sizeof(*txp), GFP_KERNEL);
+	txp = kzalloc_objs(*txp, dev->num_tx_queues, GFP_KERNEL);
 	if (!txp)
 		return -ENOMEM;
 	dp->tx_private = txp;
diff --git a/drivers/net/ipa/gsi_trans.c b/drivers/net/ipa/gsi_trans.c
index 19531883864a..f82484de39dd 100644
--- a/drivers/net/ipa/gsi_trans.c
+++ b/drivers/net/ipa/gsi_trans.c
@@ -730,8 +730,8 @@ int gsi_channel_trans_init(struct gsi *gsi, u32 channel_id)
 	 * modulo that number to determine the next one that's free.
 	 * Transactions are allocated one at a time.
 	 */
-	trans_info->trans = kcalloc(tre_count, sizeof(*trans_info->trans),
-				    GFP_KERNEL);
+	trans_info->trans = kzalloc_objs(*trans_info->trans, tre_count,
+					 GFP_KERNEL);
 	if (!trans_info->trans)
 		return -ENOMEM;
 	trans_info->free_id = 0;	/* all modulo channel->tre_count */
@@ -746,8 +746,7 @@ int gsi_channel_trans_init(struct gsi *gsi, u32 channel_id)
 	 * Each entry in this map records the transaction associated
 	 * with a corresponding completed TRE.
 	 */
-	trans_info->map = kcalloc(tre_count, sizeof(*trans_info->map),
-				  GFP_KERNEL);
+	trans_info->map = kzalloc_objs(*trans_info->map, tre_count, GFP_KERNEL);
 	if (!trans_info->map) {
 		ret = -ENOMEM;
 		goto err_trans_free;
diff --git a/drivers/net/ipa/ipa_interrupt.c b/drivers/net/ipa/ipa_interrupt.c
index 8336596b1247..9e8d75a98f05 100644
--- a/drivers/net/ipa/ipa_interrupt.c
+++ b/drivers/net/ipa/ipa_interrupt.c
@@ -329,7 +329,7 @@ struct ipa_interrupt *ipa_interrupt_init(struct platform_device *pdev)
 	if (irq <= 0)
 		return ERR_PTR(irq ? : -EINVAL);

-	interrupt = kzalloc(sizeof(*interrupt), GFP_KERNEL);
+	interrupt = kzalloc_obj(*interrupt, GFP_KERNEL);
 	if (!interrupt)
 		return ERR_PTR(-ENOMEM);
 	interrupt->irq = irq;
diff --git a/drivers/net/ipa/ipa_main.c b/drivers/net/ipa/ipa_main.c
index 95a61bae3124..d09b4723f26c 100644
--- a/drivers/net/ipa/ipa_main.c
+++ b/drivers/net/ipa/ipa_main.c
@@ -830,7 +830,7 @@ static int ipa_probe(struct platform_device *pdev)
 	}

 	/* No more EPROBE_DEFER.  Allocate and initialize the IPA structure */
-	ipa = kzalloc(sizeof(*ipa), GFP_KERNEL);
+	ipa = kzalloc_obj(*ipa, GFP_KERNEL);
 	if (!ipa) {
 		ret = -ENOMEM;
 		goto err_power_exit;
diff --git a/drivers/net/ipa/ipa_smp2p.c b/drivers/net/ipa/ipa_smp2p.c
index 420098796eec..e96bdd9b68a8 100644
--- a/drivers/net/ipa/ipa_smp2p.c
+++ b/drivers/net/ipa/ipa_smp2p.c
@@ -242,7 +242,7 @@ ipa_smp2p_init(struct ipa *ipa, struct platform_device *pdev, bool modem_init)
 	if (enabled_bit >= 32)		/* BITS_PER_U32 */
 		return -EINVAL;

-	smp2p = kzalloc(sizeof(*smp2p), GFP_KERNEL);
+	smp2p = kzalloc_obj(*smp2p, GFP_KERNEL);
 	if (!smp2p)
 		return -ENOMEM;

diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index baccdad695fd..6f4ea2234ccb 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -64,7 +64,7 @@ static int ipvlan_port_create(struct net_device *dev)
 	struct ipvl_port *port;
 	int err, idx;

-	port = kzalloc(sizeof(struct ipvl_port), GFP_KERNEL);
+	port = kzalloc_obj(struct ipvl_port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

@@ -820,7 +820,7 @@ static int ipvlan_add_addr(struct ipvl_dev *ipvlan, void *iaddr, bool is_v6)

 	assert_spin_locked(&ipvlan->port->addrs_lock);

-	addr = kzalloc(sizeof(struct ipvl_addr), GFP_ATOMIC);
+	addr = kzalloc_obj(struct ipvl_addr, GFP_ATOMIC);
 	if (!addr)
 		return -ENOMEM;

diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index c2cb2d20976b..1b523a56e7da 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -1465,7 +1465,7 @@ static struct macsec_rx_sc *create_rx_sc(struct net_device *dev, sci_t sci,
 			return ERR_PTR(-EEXIST);
 	}

-	rx_sc = kzalloc(sizeof(*rx_sc), GFP_KERNEL);
+	rx_sc = kzalloc_obj(*rx_sc, GFP_KERNEL);
 	if (!rx_sc)
 		return ERR_PTR(-ENOMEM);

@@ -1797,7 +1797,7 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info)
 		return -EBUSY;
 	}

-	rx_sa = kmalloc(sizeof(*rx_sa), GFP_KERNEL);
+	rx_sa = kmalloc_obj(*rx_sa, GFP_KERNEL);
 	if (!rx_sa) {
 		rtnl_unlock();
 		return -ENOMEM;
@@ -2005,7 +2005,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info)
 		return -EBUSY;
 	}

-	tx_sa = kmalloc(sizeof(*tx_sa), GFP_KERNEL);
+	tx_sa = kmalloc_obj(*tx_sa, GFP_KERNEL);
 	if (!tx_sa) {
 		rtnl_unlock();
 		return -ENOMEM;
@@ -4013,7 +4013,7 @@ static int register_macsec_dev(struct net_device *real_dev,
 	if (!rxd) {
 		int err;

-		rxd = kmalloc(sizeof(*rxd), GFP_KERNEL);
+		rxd = kmalloc_obj(*rxd, GFP_KERNEL);
 		if (!rxd)
 			return -ENOMEM;

diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 4433b8e95b6a..1b4e327e26e1 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -163,7 +163,7 @@ static int macvlan_hash_add_source(struct macvlan_dev *vlan,
 	if (entry)
 		return 0;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -1131,7 +1131,7 @@ static int macvlan_dev_netpoll_setup(struct net_device *dev)
 	struct netpoll *netpoll;
 	int err;

-	netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
+	netpoll = kzalloc_obj(*netpoll, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!netpoll)
 		goto out;
@@ -1249,7 +1249,7 @@ static int macvlan_port_create(struct net_device *dev)
 	if (netdev_is_rx_handler_busy(dev))
 		return -EBUSY;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (port == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/mctp/mctp-i2c.c b/drivers/net/mctp/mctp-i2c.c
index 8043b57bdf25..03f51a66933c 100644
--- a/drivers/net/mctp/mctp-i2c.c
+++ b/drivers/net/mctp/mctp-i2c.c
@@ -154,7 +154,7 @@ static struct mctp_i2c_client *mctp_i2c_new_client(struct i2c_client *client)
 		goto err;
 	}

-	mcli = kzalloc(sizeof(*mcli), GFP_KERNEL);
+	mcli = kzalloc_obj(*mcli, GFP_KERNEL);
 	if (!mcli) {
 		rc = -ENOMEM;
 		goto err;
diff --git a/drivers/net/mctp/mctp-i3c.c b/drivers/net/mctp/mctp-i3c.c
index 36c2405677c2..0814b65c2843 100644
--- a/drivers/net/mctp/mctp-i3c.c
+++ b/drivers/net/mctp/mctp-i3c.c
@@ -259,7 +259,7 @@ __must_hold(&busdevs_lock)
 	struct mctp_i3c_device *mi = NULL;
 	int rc;

-	mi = kzalloc(sizeof(*mi), GFP_KERNEL);
+	mi = kzalloc_obj(*mi, GFP_KERNEL);
 	if (!mi) {
 		rc = -ENOMEM;
 		goto err;
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index d144787b2947..73604c019b25 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -348,7 +348,7 @@ static struct netconsole_target *alloc_and_init(void)
 {
 	struct netconsole_target *nt;

-	nt = kzalloc(sizeof(*nt), GFP_KERNEL);
+	nt = kzalloc_obj(*nt, GFP_KERNEL);
 	if (!nt)
 		return nt;

@@ -1270,7 +1270,7 @@ static struct config_item *userdatum_make_item(struct config_group *group,
 	if (count_userdata_entries(nt) >= MAX_USERDATA_ITEMS)
 		return ERR_PTR(-ENOSPC);

-	udm = kzalloc(sizeof(*udm), GFP_KERNEL);
+	udm = kzalloc_obj(*udm, GFP_KERNEL);
 	if (!udm)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/netdevsim/bpf.c b/drivers/net/netdevsim/bpf.c
index 5f17f68f3c08..badf08add94f 100644
--- a/drivers/net/netdevsim/bpf.c
+++ b/drivers/net/netdevsim/bpf.c
@@ -222,7 +222,7 @@ static int nsim_bpf_create_prog(struct nsim_dev *nsim_dev,
 	char name[16];
 	int ret;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

@@ -501,7 +501,7 @@ nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap)
 	if (offmap->map.map_flags)
 		return -EINVAL;

-	nmap = kzalloc(sizeof(*nmap), GFP_KERNEL_ACCOUNT);
+	nmap = kzalloc_obj(*nmap, GFP_KERNEL_ACCOUNT);
 	if (!nmap)
 		return -ENOMEM;

diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c
index d16b95304aa7..8de96fe6c02a 100644
--- a/drivers/net/netdevsim/bus.c
+++ b/drivers/net/netdevsim/bus.c
@@ -451,7 +451,7 @@ nsim_bus_dev_new(unsigned int id, unsigned int port_count, unsigned int num_queu
 	struct nsim_bus_dev *nsim_bus_dev;
 	int err;

-	nsim_bus_dev = kzalloc(sizeof(*nsim_bus_dev), GFP_KERNEL);
+	nsim_bus_dev = kzalloc_obj(*nsim_bus_dev, GFP_KERNEL);
 	if (!nsim_bus_dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index f7b32446d3b8..a227c0b9fe4c 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -267,8 +267,8 @@ static ssize_t nsim_bus_dev_max_vfs_write(struct file *file,
 	if (val > NSIM_DEV_VF_PORT_INDEX_MAX - NSIM_DEV_VF_PORT_INDEX_BASE)
 		return -ERANGE;

-	vfconfigs = kcalloc(val, sizeof(struct nsim_vf_config),
-			    GFP_KERNEL | __GFP_NOWARN);
+	vfconfigs = kzalloc_objs(struct nsim_vf_config, val,
+				 GFP_KERNEL | __GFP_NOWARN);
 	if (!vfconfigs)
 		return -ENOMEM;

@@ -935,13 +935,13 @@ static int nsim_dev_traps_init(struct devlink *devlink)
 	struct nsim_trap_data *nsim_trap_data;
 	int err;

-	nsim_trap_data = kzalloc(sizeof(*nsim_trap_data), GFP_KERNEL);
+	nsim_trap_data = kzalloc_obj(*nsim_trap_data, GFP_KERNEL);
 	if (!nsim_trap_data)
 		return -ENOMEM;

-	nsim_trap_data->trap_items_arr = kcalloc(ARRAY_SIZE(nsim_traps_arr),
-						 sizeof(struct nsim_trap_item),
-						 GFP_KERNEL);
+	nsim_trap_data->trap_items_arr = kzalloc_objs(struct nsim_trap_item,
+						      ARRAY_SIZE(nsim_traps_arr),
+						      GFP_KERNEL);
 	if (!nsim_trap_data->trap_items_arr) {
 		err = -ENOMEM;
 		goto err_trap_data_free;
@@ -1348,7 +1348,7 @@ static int nsim_rate_node_new(struct devlink_rate *node, void **priv,
 		return -EOPNOTSUPP;
 	}

-	nsim_node = kzalloc(sizeof(*nsim_node), GFP_KERNEL);
+	nsim_node = kzalloc_obj(*nsim_node, GFP_KERNEL);
 	if (!nsim_node)
 		return -ENOMEM;

@@ -1464,7 +1464,7 @@ static int __nsim_dev_port_add(struct nsim_dev *nsim_dev, enum nsim_dev_port_typ
 	if (type == NSIM_DEV_PORT_TYPE_VF && !nsim_dev_get_vfs(nsim_dev))
 		return -EINVAL;

-	nsim_dev_port = kzalloc(sizeof(*nsim_dev_port), GFP_KERNEL);
+	nsim_dev_port = kzalloc_obj(*nsim_dev_port, GFP_KERNEL);
 	if (!nsim_dev_port)
 		return -ENOMEM;
 	nsim_dev_port->port_index = nsim_dev_port_index(type, port_index);
@@ -1652,9 +1652,9 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)

 	dev_set_drvdata(&nsim_bus_dev->dev, nsim_dev);

-	nsim_dev->vfconfigs = kcalloc(nsim_bus_dev->max_vfs,
-				      sizeof(struct nsim_vf_config),
-				      GFP_KERNEL | __GFP_NOWARN);
+	nsim_dev->vfconfigs = kzalloc_objs(struct nsim_vf_config,
+					   nsim_bus_dev->max_vfs,
+					   GFP_KERNEL | __GFP_NOWARN);
 	if (!nsim_dev->vfconfigs) {
 		err = -ENOMEM;
 		goto err_devlink_unlock;
diff --git a/drivers/net/netdevsim/fib.c b/drivers/net/netdevsim/fib.c
index 16c382c42227..b1292a8c0ef1 100644
--- a/drivers/net/netdevsim/fib.c
+++ b/drivers/net/netdevsim/fib.c
@@ -277,7 +277,7 @@ nsim_fib4_rt_create(struct nsim_fib_data *data,
 {
 	struct nsim_fib4_rt *fib4_rt;

-	fib4_rt = kzalloc(sizeof(*fib4_rt), GFP_KERNEL);
+	fib4_rt = kzalloc_obj(*fib4_rt, GFP_KERNEL);
 	if (!fib4_rt)
 		return NULL;

@@ -497,7 +497,7 @@ static int nsim_fib6_rt_nh_add(struct nsim_fib6_rt *fib6_rt,
 {
 	struct nsim_fib6_rt_nh *fib6_rt_nh;

-	fib6_rt_nh = kzalloc(sizeof(*fib6_rt_nh), GFP_KERNEL);
+	fib6_rt_nh = kzalloc_obj(*fib6_rt_nh, GFP_KERNEL);
 	if (!fib6_rt_nh)
 		return -ENOMEM;

@@ -544,7 +544,7 @@ nsim_fib6_rt_create(struct nsim_fib_data *data,
 	int i = 0;
 	int err;

-	fib6_rt = kzalloc(sizeof(*fib6_rt), GFP_KERNEL);
+	fib6_rt = kzalloc_obj(*fib6_rt, GFP_KERNEL);
 	if (!fib6_rt)
 		return ERR_PTR(-ENOMEM);

@@ -807,7 +807,7 @@ static int nsim_fib6_event_init(struct nsim_fib6_event *fib6_event,

 	nrt6 = fen6_info->nsiblings + 1;

-	rt_arr = kcalloc(nrt6, sizeof(struct fib6_info *), GFP_ATOMIC);
+	rt_arr = kzalloc_objs(struct fib6_info *, nrt6, GFP_ATOMIC);
 	if (!rt_arr)
 		return -ENOMEM;

@@ -987,7 +987,7 @@ static int nsim_fib_event_schedule_work(struct nsim_fib_data *data,
 		 */
 		return NOTIFY_DONE;

-	fib_event = kzalloc(sizeof(*fib_event), GFP_ATOMIC);
+	fib_event = kzalloc_obj(*fib_event, GFP_ATOMIC);
 	if (!fib_event)
 		goto err_fib_event_alloc;

@@ -1116,7 +1116,7 @@ static struct nsim_nexthop *nsim_nexthop_create(struct nsim_fib_data *data,
 	u64 occ = 0;
 	int i;

-	nexthop = kzalloc(sizeof(*nexthop), GFP_KERNEL);
+	nexthop = kzalloc_obj(*nexthop, GFP_KERNEL);
 	if (!nexthop)
 		return ERR_PTR(-ENOMEM);

@@ -1556,7 +1556,7 @@ struct nsim_fib_data *nsim_fib_create(struct devlink *devlink,
 	struct nsim_dev *nsim_dev;
 	int err;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return ERR_PTR(-ENOMEM);
 	data->devlink = devlink;
diff --git a/drivers/net/netdevsim/hwstats.c b/drivers/net/netdevsim/hwstats.c
index 1abe48e35ca3..57b782aa1046 100644
--- a/drivers/net/netdevsim/hwstats.c
+++ b/drivers/net/netdevsim/hwstats.c
@@ -238,7 +238,7 @@ nsim_dev_hwstats_enable_ifindex(struct nsim_dev_hwstats *hwstats,
 		goto out_unlock_list;
 	}

-	hwsdev = kzalloc(sizeof(*hwsdev), GFP_KERNEL);
+	hwsdev = kzalloc_obj(*hwsdev, GFP_KERNEL);
 	if (!hwsdev) {
 		err = -ENOMEM;
 		goto out_put_netdev;
diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c
index 6285fbefe38a..5ec028a00c62 100644
--- a/drivers/net/netdevsim/netdev.c
+++ b/drivers/net/netdevsim/netdev.c
@@ -723,7 +723,7 @@ static struct nsim_rq *nsim_queue_alloc(void)
 {
 	struct nsim_rq *rq;

-	rq = kzalloc(sizeof(*rq), GFP_KERNEL_ACCOUNT);
+	rq = kzalloc_obj(*rq, GFP_KERNEL_ACCOUNT);
 	if (!rq)
 		return NULL;

@@ -997,8 +997,7 @@ static int nsim_queue_init(struct netdevsim *ns)
 	struct net_device *dev = ns->netdev;
 	int i;

-	ns->rq = kcalloc(dev->num_rx_queues, sizeof(*ns->rq),
-			 GFP_KERNEL_ACCOUNT);
+	ns->rq = kzalloc_objs(*ns->rq, dev->num_rx_queues, GFP_KERNEL_ACCOUNT);
 	if (!ns->rq)
 		return -ENOMEM;

diff --git a/drivers/net/netdevsim/psample.c b/drivers/net/netdevsim/psample.c
index f0c6477dd0ae..39250b9d201f 100644
--- a/drivers/net/netdevsim/psample.c
+++ b/drivers/net/netdevsim/psample.c
@@ -200,7 +200,7 @@ int nsim_dev_psample_init(struct nsim_dev *nsim_dev)
 	struct nsim_dev_psample *psample;
 	int err;

-	psample = kzalloc(sizeof(*psample), GFP_KERNEL);
+	psample = kzalloc_obj(*psample, GFP_KERNEL);
 	if (!psample)
 		return -ENOMEM;
 	nsim_dev->psample = psample;
diff --git a/drivers/net/netkit.c b/drivers/net/netkit.c
index 0a2fef7caccb..5c0e01396e06 100644
--- a/drivers/net/netkit.c
+++ b/drivers/net/netkit.c
@@ -796,7 +796,7 @@ int netkit_link_attach(const union bpf_attr *attr, struct bpf_prog *prog)
 		ret = PTR_ERR(dev);
 		goto out;
 	}
-	nkl = kzalloc(sizeof(*nkl), GFP_KERNEL_ACCOUNT);
+	nkl = kzalloc_obj(*nkl, GFP_KERNEL_ACCOUNT);
 	if (!nkl) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/ovpn/bind.c b/drivers/net/ovpn/bind.c
index 24d2788a277e..e42b60cd04a9 100644
--- a/drivers/net/ovpn/bind.c
+++ b/drivers/net/ovpn/bind.c
@@ -32,7 +32,7 @@ struct ovpn_bind *ovpn_bind_from_sockaddr(const struct sockaddr_storage *ss)
 	else
 		return ERR_PTR(-EAFNOSUPPORT);

-	bind = kzalloc(sizeof(*bind), GFP_ATOMIC);
+	bind = kzalloc_obj(*bind, GFP_ATOMIC);
 	if (unlikely(!bind))
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ovpn/crypto_aead.c b/drivers/net/ovpn/crypto_aead.c
index 2cca759feffa..de335ab81948 100644
--- a/drivers/net/ovpn/crypto_aead.c
+++ b/drivers/net/ovpn/crypto_aead.c
@@ -328,7 +328,7 @@ ovpn_aead_crypto_key_slot_new(const struct ovpn_key_config *kc)
 		return ERR_PTR(-EINVAL);

 	/* build the key slot */
-	ks = kmalloc(sizeof(*ks), GFP_KERNEL);
+	ks = kmalloc_obj(*ks, GFP_KERNEL);
 	if (!ks)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ovpn/main.c b/drivers/net/ovpn/main.c
index 1bb1afe766a4..4554b0f8a409 100644
--- a/drivers/net/ovpn/main.c
+++ b/drivers/net/ovpn/main.c
@@ -57,7 +57,7 @@ static int ovpn_mp_alloc(struct ovpn_priv *ovpn)
 	/* the peer container is fairly large, therefore we allocate it only in
 	 * MP mode
 	 */
-	ovpn->peers = kzalloc(sizeof(*ovpn->peers), GFP_KERNEL);
+	ovpn->peers = kzalloc_obj(*ovpn->peers, GFP_KERNEL);
 	if (!ovpn->peers)
 		return -ENOMEM;

diff --git a/drivers/net/ovpn/peer.c b/drivers/net/ovpn/peer.c
index 0463b5b0542f..bac34068f0fc 100644
--- a/drivers/net/ovpn/peer.c
+++ b/drivers/net/ovpn/peer.c
@@ -95,7 +95,7 @@ struct ovpn_peer *ovpn_peer_new(struct ovpn_priv *ovpn, u32 id)
 	int ret;

 	/* alloc and init peer object */
-	peer = kzalloc(sizeof(*peer), GFP_KERNEL);
+	peer = kzalloc_obj(*peer, GFP_KERNEL);
 	if (!peer)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ovpn/socket.c b/drivers/net/ovpn/socket.c
index 448cee3b3f9f..7be493f78440 100644
--- a/drivers/net/ovpn/socket.c
+++ b/drivers/net/ovpn/socket.c
@@ -191,7 +191,7 @@ struct ovpn_socket *ovpn_socket_new(struct socket *sock, struct ovpn_peer *peer)

 	/* socket is not owned: attach to this ovpn instance */

-	ovpn_sock = kzalloc(sizeof(*ovpn_sock), GFP_KERNEL);
+	ovpn_sock = kzalloc_obj(*ovpn_sock, GFP_KERNEL);
 	if (!ovpn_sock) {
 		ovpn_sock = ERR_PTR(-ENOMEM);
 		goto sock_release;
diff --git a/drivers/net/pcs/pcs-lynx.c b/drivers/net/pcs/pcs-lynx.c
index 73e1364ad1ed..abf521f063cf 100644
--- a/drivers/net/pcs/pcs-lynx.c
+++ b/drivers/net/pcs/pcs-lynx.c
@@ -288,7 +288,7 @@ static struct phylink_pcs *lynx_pcs_create(struct mdio_device *mdio)
 	struct lynx_pcs *lynx;
 	int i;

-	lynx = kzalloc(sizeof(*lynx), GFP_KERNEL);
+	lynx = kzalloc_obj(*lynx, GFP_KERNEL);
 	if (!lynx)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/pcs/pcs-mtk-lynxi.c b/drivers/net/pcs/pcs-mtk-lynxi.c
index 44006bb6ac0b..5587d572dcbc 100644
--- a/drivers/net/pcs/pcs-mtk-lynxi.c
+++ b/drivers/net/pcs/pcs-mtk-lynxi.c
@@ -334,7 +334,7 @@ struct phylink_pcs *mtk_pcs_lynxi_create(struct device *dev,
 	dev_dbg(dev, "MediaTek LynxI SGMII PCS (id 0x%08x, ver 0x%04x)\n", id,
 		ver);

-	mpcs = kzalloc(sizeof(*mpcs), GFP_KERNEL);
+	mpcs = kzalloc_obj(*mpcs, GFP_KERNEL);
 	if (!mpcs)
 		return NULL;

diff --git a/drivers/net/pcs/pcs-rzn1-miic.c b/drivers/net/pcs/pcs-rzn1-miic.c
index 8d7f82c1df2f..4de8c426787e 100644
--- a/drivers/net/pcs/pcs-rzn1-miic.c
+++ b/drivers/net/pcs/pcs-rzn1-miic.c
@@ -487,7 +487,7 @@ struct phylink_pcs *miic_create(struct device *dev, struct device_node *np)
 		return ERR_PTR(-EINVAL);
 	}

-	miic_port = kzalloc(sizeof(*miic_port), GFP_KERNEL);
+	miic_port = kzalloc_obj(*miic_port, GFP_KERNEL);
 	if (!miic_port) {
 		put_device(&pdev->dev);
 		return ERR_PTR(-ENOMEM);
@@ -679,8 +679,8 @@ static int miic_parse_dt(struct miic *miic, u32 *mode_cfg)
 	s8 *dt_val;
 	u32 conf;

-	dt_val = kmalloc_array(miic->of_data->conf_conv_count,
-			       sizeof(*dt_val), GFP_KERNEL);
+	dt_val = kmalloc_objs(*dt_val, miic->of_data->conf_conv_count,
+			      GFP_KERNEL);
 	if (!dt_val)
 		return -ENOMEM;

diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
index 9679f2b35a44..8566e6ad64e9 100644
--- a/drivers/net/pcs/pcs-xpcs.c
+++ b/drivers/net/pcs/pcs-xpcs.c
@@ -1528,7 +1528,7 @@ static struct dw_xpcs *xpcs_create_data(struct mdio_device *mdiodev)
 {
 	struct dw_xpcs *xpcs;

-	xpcs = kzalloc(sizeof(*xpcs), GFP_KERNEL);
+	xpcs = kzalloc_obj(*xpcs, GFP_KERNEL);
 	if (!xpcs)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/phy/as21xxx.c b/drivers/net/phy/as21xxx.c
index 005277360656..d3954ea6b1dd 100644
--- a/drivers/net/phy/as21xxx.c
+++ b/drivers/net/phy/as21xxx.c
@@ -907,7 +907,7 @@ static int as21xxx_match_phy_device(struct phy_device *phydev,
 		return phy_id == phydrv->phy_id;

 	/* Allocate temp priv and load the firmware */
-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index b950acc9c49b..a56f4302840f 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -1027,13 +1027,12 @@ static struct dp83640_clock *dp83640_clock_get_bus(struct mii_bus *bus)
 	if (clock)
 		goto out;

-	clock = kzalloc(sizeof(struct dp83640_clock), GFP_KERNEL);
+	clock = kzalloc_obj(struct dp83640_clock, GFP_KERNEL);
 	if (!clock)
 		goto out;

-	clock->caps.pin_config = kcalloc(DP83640_N_PINS,
-					 sizeof(struct ptp_pin_desc),
-					 GFP_KERNEL);
+	clock->caps.pin_config = kzalloc_objs(struct ptp_pin_desc,
+					      DP83640_N_PINS, GFP_KERNEL);
 	if (!clock->caps.pin_config) {
 		kfree(clock);
 		clock = NULL;
@@ -1412,7 +1411,7 @@ static int dp83640_probe(struct phy_device *phydev)
 	if (!clock)
 		goto no_clock;

-	dp83640 = kzalloc(sizeof(struct dp83640_private), GFP_KERNEL);
+	dp83640 = kzalloc_obj(struct dp83640_private, GFP_KERNEL);
 	if (!dp83640)
 		goto no_memory;

diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c
index 65636070a222..172fbfcb215c 100644
--- a/drivers/net/phy/mdio_device.c
+++ b/drivers/net/phy/mdio_device.c
@@ -41,7 +41,7 @@ struct mdio_device *mdio_device_create(struct mii_bus *bus, int addr)
 	struct mdio_device *mdiodev;

 	/* We allocate the device, and initialize the default values */
-	mdiodev = kzalloc(sizeof(*mdiodev), GFP_KERNEL);
+	mdiodev = kzalloc_obj(*mdiodev, GFP_KERNEL);
 	if (!mdiodev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index 663dcdc92204..5ef9248c6b49 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -4114,7 +4114,7 @@ static void lan8814_get_rx_ts(struct kszphy_ptp_priv *ptp_priv)
 	u32 reg;

 	do {
-		rx_ts = kzalloc(sizeof(*rx_ts), GFP_KERNEL);
+		rx_ts = kzalloc_obj(*rx_ts, GFP_KERNEL);
 		if (!rx_ts)
 			return;

diff --git a/drivers/net/phy/microchip_rds_ptp.c b/drivers/net/phy/microchip_rds_ptp.c
index f5f2928e705f..9307df6f6d11 100644
--- a/drivers/net/phy/microchip_rds_ptp.c
+++ b/drivers/net/phy/microchip_rds_ptp.c
@@ -999,7 +999,7 @@ static struct mchp_rds_ptp_rx_ts
 	if (rc < 0)
 		goto error;

-	rx_ts = kmalloc(sizeof(*rx_ts), GFP_KERNEL);
+	rx_ts = kmalloc_obj(*rx_ts, GFP_KERNEL);
 	if (!rx_ts)
 		return NULL;

diff --git a/drivers/net/phy/mii_timestamper.c b/drivers/net/phy/mii_timestamper.c
index 51ae0593a04f..259ed30897c7 100644
--- a/drivers/net/phy/mii_timestamper.c
+++ b/drivers/net/phy/mii_timestamper.c
@@ -28,7 +28,7 @@ int register_mii_tstamp_controller(struct device *device,
 {
 	struct mii_timestamping_desc *desc;

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return -ENOMEM;

diff --git a/drivers/net/phy/mscc/mscc_macsec.c b/drivers/net/phy/mscc/mscc_macsec.c
index 9a38a29cf397..ed0d445ce1e1 100644
--- a/drivers/net/phy/mscc/mscc_macsec.c
+++ b/drivers/net/phy/mscc/mscc_macsec.c
@@ -610,7 +610,7 @@ static struct macsec_flow *vsc8584_macsec_alloc_flow(struct vsc8531_private *pri
 	if (index == MSCC_MS_MAX_FLOWS)
 		return ERR_PTR(-ENOMEM);

-	flow = kzalloc(sizeof(*flow), GFP_KERNEL);
+	flow = kzalloc_obj(*flow, GFP_KERNEL);
 	if (!flow)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/phy/nxp-c45-tja11xx-macsec.c b/drivers/net/phy/nxp-c45-tja11xx-macsec.c
index fc897ba79b03..21519a2d9f85 100644
--- a/drivers/net/phy/nxp-c45-tja11xx-macsec.c
+++ b/drivers/net/phy/nxp-c45-tja11xx-macsec.c
@@ -431,7 +431,7 @@ static struct nxp_c45_sa *nxp_c45_sa_alloc(struct list_head *sa_list, void *sa,
 			return ERR_PTR(-ENOSPC);
 	}

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return ERR_PTR(-ENOMEM);

@@ -991,7 +991,7 @@ static int nxp_c45_mdo_add_secy(struct macsec_context *ctx)
 	if (idx == TX_SC_MAX)
 		return -ENOSPC;

-	phy_secy = kzalloc(sizeof(*phy_secy), GFP_KERNEL);
+	phy_secy = kzalloc_obj(*phy_secy, GFP_KERNEL);
 	if (!phy_secy)
 		return -ENOMEM;

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 13dd1691886d..376bfa923349 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -736,7 +736,7 @@ int phy_ethtool_set_plca_cfg(struct phy_device *phydev,
 		goto out;
 	}

-	curr_plca_cfg = kmalloc(sizeof(*curr_plca_cfg), GFP_KERNEL);
+	curr_plca_cfg = kmalloc_obj(*curr_plca_cfg, GFP_KERNEL);
 	if (!curr_plca_cfg) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 9b8eaac63b90..52c2ff7fc6ae 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -438,7 +438,7 @@ static SIMPLE_DEV_PM_OPS(mdio_bus_phy_pm_ops, mdio_bus_phy_suspend,
 static int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
 			      int (*run)(struct phy_device *))
 {
-	struct phy_fixup *fixup = kzalloc(sizeof(*fixup), GFP_KERNEL);
+	struct phy_fixup *fixup = kzalloc_obj(*fixup, GFP_KERNEL);

 	if (!fixup)
 		return -ENOMEM;
@@ -754,7 +754,7 @@ struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
 	int ret = 0;

 	/* We allocate the device, and initialize the default values */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/phy/phy_led_triggers.c b/drivers/net/phy/phy_led_triggers.c
index 60893691d4c3..7821fe19934c 100644
--- a/drivers/net/phy/phy_led_triggers.c
+++ b/drivers/net/phy/phy_led_triggers.c
@@ -93,8 +93,7 @@ int phy_led_triggers_register(struct phy_device *phy)
 	if (!phy->phy_num_led_triggers)
 		return 0;

-	phy->led_link_trigger = kzalloc(sizeof(*phy->led_link_trigger),
-					GFP_KERNEL);
+	phy->led_link_trigger = kzalloc_obj(*phy->led_link_trigger, GFP_KERNEL);
 	if (!phy->led_link_trigger) {
 		err = -ENOMEM;
 		goto out_clear;
@@ -104,9 +103,9 @@ int phy_led_triggers_register(struct phy_device *phy)
 	if (err)
 		goto out_free_link;

-	phy->phy_led_triggers = kcalloc(phy->phy_num_led_triggers,
-					sizeof(struct phy_led_trigger),
-					GFP_KERNEL);
+	phy->phy_led_triggers = kzalloc_objs(struct phy_led_trigger,
+					     phy->phy_num_led_triggers,
+					     GFP_KERNEL);
 	if (!phy->phy_led_triggers) {
 		err = -ENOMEM;
 		goto out_unreg_link;
diff --git a/drivers/net/phy/phy_link_topology.c b/drivers/net/phy/phy_link_topology.c
index 0e9e987f37dd..ed15599dd38d 100644
--- a/drivers/net/phy/phy_link_topology.c
+++ b/drivers/net/phy/phy_link_topology.c
@@ -15,7 +15,7 @@ static int netdev_alloc_phy_link_topology(struct net_device *dev)
 {
 	struct phy_link_topology *topo;

-	topo = kzalloc(sizeof(*topo), GFP_KERNEL);
+	topo = kzalloc_obj(*topo, GFP_KERNEL);
 	if (!topo)
 		return -ENOMEM;

@@ -43,7 +43,7 @@ int phy_link_topo_add_phy(struct net_device *dev,
 		topo = dev->link_topo;
 	}

-	pdn = kzalloc(sizeof(*pdn), GFP_KERNEL);
+	pdn = kzalloc_obj(*pdn, GFP_KERNEL);
 	if (!pdn)
 		return -ENOMEM;

diff --git a/drivers/net/phy/phy_package.c b/drivers/net/phy/phy_package.c
index 3024da0bbf7b..3137a8fecf21 100644
--- a/drivers/net/phy/phy_package.c
+++ b/drivers/net/phy/phy_package.c
@@ -219,7 +219,7 @@ int phy_package_join(struct phy_device *phydev, int base_addr, size_t priv_size)
 	shared = bus->shared[base_addr];
 	if (!shared) {
 		ret = -ENOMEM;
-		shared = kzalloc(sizeof(*shared), GFP_KERNEL);
+		shared = kzalloc_obj(*shared, GFP_KERNEL);
 		if (!shared)
 			goto err_unlock;
 		if (priv_size) {
diff --git a/drivers/net/phy/phy_port.c b/drivers/net/phy/phy_port.c
index 63d1bb154dc7..cae133a25fb0 100644
--- a/drivers/net/phy/phy_port.c
+++ b/drivers/net/phy/phy_port.c
@@ -19,7 +19,7 @@ struct phy_port *phy_port_alloc(void)
 {
 	struct phy_port *port;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return NULL;

diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index e1f01d7fc4da..f21a69e34d1c 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -1853,7 +1853,7 @@ struct phylink *phylink_create(struct phylink_config *config,
 		return ERR_PTR(-EINVAL);
 	}

-	pl = kzalloc(sizeof(*pl), GFP_KERNEL);
+	pl = kzalloc_obj(*pl, GFP_KERNEL);
 	if (!pl)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c
index b945d75966d5..07175bf3ef60 100644
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
@@ -388,7 +388,7 @@ static struct sfp_bus *sfp_bus_get(const struct fwnode_handle *fwnode)
 {
 	struct sfp_bus *sfp, *new, *found = NULL;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);

 	mutex_lock(&sfp_mutex);

diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c
index 43aefdd8b70f..42a9c93f03b3 100644
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
@@ -3029,7 +3029,7 @@ static struct sfp *sfp_alloc(struct device *dev)
 {
 	struct sfp *sfp;

-	sfp = kzalloc(sizeof(*sfp), GFP_KERNEL);
+	sfp = kzalloc_obj(*sfp, GFP_KERNEL);
 	if (!sfp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/ppp/bsd_comp.c b/drivers/net/ppp/bsd_comp.c
index f385b759d5cf..26bfa0feb7f5 100644
--- a/drivers/net/ppp/bsd_comp.c
+++ b/drivers/net/ppp/bsd_comp.c
@@ -395,8 +395,7 @@ static void *bsd_alloc (unsigned char *options, int opt_len, int decomp)
  * Allocate the main control structure for this instance.
  */
     maxmaxcode = MAXCODE(bits);
-    db         = kzalloc(sizeof (struct bsd_db),
-					    GFP_KERNEL);
+    db         = kzalloc_obj(struct bsd_db, GFP_KERNEL);
     if (!db)
       {
 	return NULL;
diff --git a/drivers/net/ppp/ppp_async.c b/drivers/net/ppp/ppp_async.c
index c97406c6004d..ead937d95cd8 100644
--- a/drivers/net/ppp/ppp_async.c
+++ b/drivers/net/ppp/ppp_async.c
@@ -163,7 +163,7 @@ ppp_asynctty_open(struct tty_struct *tty)
 		return -EOPNOTSUPP;

 	err = -ENOMEM;
-	ap = kzalloc(sizeof(*ap), GFP_KERNEL);
+	ap = kzalloc_obj(*ap, GFP_KERNEL);
 	if (!ap)
 		goto out;

diff --git a/drivers/net/ppp/ppp_deflate.c b/drivers/net/ppp/ppp_deflate.c
index d93aeacc0dba..1d8370d2f098 100644
--- a/drivers/net/ppp/ppp_deflate.c
+++ b/drivers/net/ppp/ppp_deflate.c
@@ -97,8 +97,7 @@ static void *z_comp_alloc(unsigned char *options, int opt_len)
 	if (w_size < DEFLATE_MIN_SIZE || w_size > DEFLATE_MAX_SIZE)
 		return NULL;

-	state = kzalloc(sizeof(*state),
-						     GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

@@ -313,7 +312,7 @@ static void *z_decomp_alloc(unsigned char *options, int opt_len)
 	if (w_size < DEFLATE_MIN_SIZE || w_size > DEFLATE_MAX_SIZE)
 		return NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
index f8814d7be6f1..fdf96999ba18 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
@@ -2926,7 +2926,7 @@ int ppp_register_net_channel(struct net *net, struct ppp_channel *chan)
 	struct channel *pch;
 	struct ppp_net *pn;

-	pch = kzalloc(sizeof(struct channel), GFP_KERNEL);
+	pch = kzalloc_obj(struct channel, GFP_KERNEL);
 	if (!pch)
 		return -ENOMEM;

@@ -3277,7 +3277,7 @@ ppp_register_compressor(struct compressor *cp)
 	if (find_comp_entry(cp->compress_proto))
 		goto out;
 	ret = -ENOMEM;
-	ce = kmalloc(sizeof(struct compressor_entry), GFP_ATOMIC);
+	ce = kmalloc_obj(struct compressor_entry, GFP_ATOMIC);
 	if (!ce)
 		goto out;
 	ret = 0;
diff --git a/drivers/net/ppp/ppp_mppe.c b/drivers/net/ppp/ppp_mppe.c
index 630cbf71c147..eacfe50b6955 100644
--- a/drivers/net/ppp/ppp_mppe.c
+++ b/drivers/net/ppp/ppp_mppe.c
@@ -158,7 +158,7 @@ static void *mppe_alloc(unsigned char *options, int optlen)
 	    fips_enabled)
 		return NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (state == NULL)
 		return NULL;

diff --git a/drivers/net/ppp/ppp_synctty.c b/drivers/net/ppp/ppp_synctty.c
index 9c4932198931..f49e60985171 100644
--- a/drivers/net/ppp/ppp_synctty.c
+++ b/drivers/net/ppp/ppp_synctty.c
@@ -162,7 +162,7 @@ ppp_sync_open(struct tty_struct *tty)
 	if (tty->ops->write == NULL)
 		return -EOPNOTSUPP;

-	ap = kzalloc(sizeof(*ap), GFP_KERNEL);
+	ap = kzalloc_obj(*ap, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!ap)
 		goto out;
diff --git a/drivers/net/pse-pd/pd692x0.c b/drivers/net/pse-pd/pd692x0.c
index 134435e90073..ef130eb75212 100644
--- a/drivers/net/pse-pd/pd692x0.c
+++ b/drivers/net/pse-pd/pd692x0.c
@@ -646,9 +646,9 @@ pd692x0_pi_get_pw_limit_ranges(struct pse_controller_dev *pcdev, int id,
 	int i;

 	pw_table = pd692x0_class_pw_table;
-	c33_pw_limit_ranges = kcalloc(PD692X0_CLASS_PW_TABLE_SIZE,
-				      sizeof(*c33_pw_limit_ranges),
-				      GFP_KERNEL);
+	c33_pw_limit_ranges = kzalloc_objs(*c33_pw_limit_ranges,
+					   PD692X0_CLASS_PW_TABLE_SIZE,
+					   GFP_KERNEL);
 	if (!c33_pw_limit_ranges)
 		return -ENOMEM;

@@ -1259,7 +1259,7 @@ static int pd692x0_setup_pi_matrix(struct pse_controller_dev *pcdev)
 	struct pd692x0_manager *manager;
 	int ret;

-	manager = kcalloc(PD692X0_MAX_MANAGERS, sizeof(*manager), GFP_KERNEL);
+	manager = kzalloc_objs(*manager, PD692X0_MAX_MANAGERS, GFP_KERNEL);
 	if (!manager)
 		return -ENOMEM;

diff --git a/drivers/net/pse-pd/pse_core.c b/drivers/net/pse-pd/pse_core.c
index 23eb3c9d0bcd..ccbcda0cc4a2 100644
--- a/drivers/net/pse-pd/pse_core.c
+++ b/drivers/net/pse-pd/pse_core.c
@@ -162,7 +162,7 @@ static int of_load_pse_pis(struct pse_controller_dev *pcdev)
 	if (!np)
 		return -ENODEV;

-	pcdev->pi = kcalloc(pcdev->nr_lines, sizeof(*pcdev->pi), GFP_KERNEL);
+	pcdev->pi = kzalloc_objs(*pcdev->pi, pcdev->nr_lines, GFP_KERNEL);
 	if (!pcdev->pi)
 		return -ENOMEM;

@@ -1408,7 +1408,7 @@ pse_control_get_internal(struct pse_controller_dev *pcdev, unsigned int index,
 		}
 	}

-	psec = kzalloc(sizeof(*psec), GFP_KERNEL);
+	psec = kzalloc_obj(*psec, GFP_KERNEL);
 	if (!psec)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/pse-pd/tps23881.c b/drivers/net/pse-pd/tps23881.c
index 76ec1555d60d..465b6cfa6253 100644
--- a/drivers/net/pse-pd/tps23881.c
+++ b/drivers/net/pse-pd/tps23881.c
@@ -523,8 +523,7 @@ tps23881_pi_get_pw_limit_ranges(struct pse_controller_dev *pcdev, int id,
 {
 	struct ethtool_c33_pse_pw_limit_range *c33_pw_limit_ranges;

-	c33_pw_limit_ranges = kzalloc(sizeof(*c33_pw_limit_ranges),
-				      GFP_KERNEL);
+	c33_pw_limit_ranges = kzalloc_obj(*c33_pw_limit_ranges, GFP_KERNEL);
 	if (!c33_pw_limit_ranges)
 		return -ENOMEM;

diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
index 318a0ef1af50..09fbb4ce8e38 100644
--- a/drivers/net/rionet.c
+++ b/drivers/net/rionet.c
@@ -603,7 +603,7 @@ static int rionet_add_dev(struct device *dev, struct subsys_interface *sif)

 		rnet = netdev_priv(nets[netid].ndev);

-		peer = kzalloc(sizeof(*peer), GFP_KERNEL);
+		peer = kzalloc_obj(*peer, GFP_KERNEL);
 		if (!peer) {
 			rc = -ENOMEM;
 			goto out;
diff --git a/drivers/net/slip/slhc.c b/drivers/net/slip/slhc.c
index ee9fd3a94b96..98c4d5925694 100644
--- a/drivers/net/slip/slhc.c
+++ b/drivers/net/slip/slhc.c
@@ -98,7 +98,7 @@ slhc_init(int rslots, int tslots)
 	if (rslots < 0 || rslots > 255 || tslots < 0 || tslots > 255)
 		return ERR_PTR(-EINVAL);

-	comp = kzalloc(sizeof(struct slcompress), GFP_KERNEL);
+	comp = kzalloc_obj(struct slcompress, GFP_KERNEL);
 	if (! comp)
 		goto out_fail;

diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c
index c889fb374703..4019c6b4dafc 100644
--- a/drivers/net/slip/slip.c
+++ b/drivers/net/slip/slip.c
@@ -1297,8 +1297,7 @@ static int __init slip_init(void)
 	printk(KERN_INFO "SLIP linefill/keepalive option.\n");
 #endif

-	slip_devs = kcalloc(slip_maxdev, sizeof(struct net_device *),
-								GFP_KERNEL);
+	slip_devs = kzalloc_objs(struct net_device *, slip_maxdev, GFP_KERNEL);
 	if (!slip_devs)
 		return -ENOMEM;

diff --git a/drivers/net/tap.c b/drivers/net/tap.c
index 1197f245e873..aee69767342e 100644
--- a/drivers/net/tap.c
+++ b/drivers/net/tap.c
@@ -1197,7 +1197,7 @@ int tap_queue_resize(struct tap_dev *tap)
 	int n = tap->numqueues;
 	int ret, i = 0;

-	rings = kmalloc_array(n, sizeof(*rings), GFP_KERNEL);
+	rings = kmalloc_objs(*rings, n, GFP_KERNEL);
 	if (!rings)
 		return -ENOMEM;

@@ -1217,7 +1217,7 @@ static int tap_list_add(dev_t major, const char *device_name)
 {
 	struct major_info *tap_major;

-	tap_major = kzalloc(sizeof(*tap_major), GFP_ATOMIC);
+	tap_major = kzalloc_obj(*tap_major, GFP_ATOMIC);
 	if (!tap_major)
 		return -ENOMEM;

diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c
index c08a5c1bd6e4..28c09ffd34b8 100644
--- a/drivers/net/team/team_core.c
+++ b/drivers/net/team/team_core.c
@@ -157,7 +157,7 @@ static int __team_option_inst_add(struct team *team, struct team_option *option,
 		array_size = 1; /* No array but still need one instance */

 	for (i = 0; i < array_size; i++) {
-		opt_inst = kmalloc(sizeof(*opt_inst), GFP_KERNEL);
+		opt_inst = kmalloc_obj(*opt_inst, GFP_KERNEL);
 		if (!opt_inst)
 			return -ENOMEM;
 		opt_inst->option = option;
@@ -256,8 +256,7 @@ static int __team_options_register(struct team *team,
 	struct team_option **dst_opts;
 	int err;

-	dst_opts = kcalloc(option_count, sizeof(struct team_option *),
-			   GFP_KERNEL);
+	dst_opts = kzalloc_objs(struct team_option *, option_count, GFP_KERNEL);
 	if (!dst_opts)
 		return -ENOMEM;
 	for (i = 0; i < option_count; i++, option++) {
@@ -434,7 +433,7 @@ int team_mode_register(const struct team_mode *mode)
 	    mode->priv_size > TEAM_MODE_PRIV_SIZE)
 		return -EINVAL;

-	mitem = kmalloc(sizeof(*mitem), GFP_KERNEL);
+	mitem = kmalloc_obj(*mitem, GFP_KERNEL);
 	if (!mitem)
 		return -ENOMEM;

@@ -780,8 +779,7 @@ static int team_queue_override_init(struct team *team)

 	if (!queue_cnt)
 		return 0;
-	listarr = kmalloc_array(queue_cnt, sizeof(struct list_head),
-				GFP_KERNEL);
+	listarr = kmalloc_objs(struct list_head, queue_cnt, GFP_KERNEL);
 	if (!listarr)
 		return -ENOMEM;
 	team->qom_lists = listarr;
@@ -1017,7 +1015,7 @@ static int __team_port_enable_netpoll(struct team_port *port)
 	struct netpoll *np;
 	int err;

-	np = kzalloc(sizeof(*np), GFP_KERNEL);
+	np = kzalloc_obj(*np, GFP_KERNEL);
 	if (!np)
 		return -ENOMEM;

diff --git a/drivers/net/team/team_mode_loadbalance.c b/drivers/net/team/team_mode_loadbalance.c
index b14538bde2f8..b50c479f06ce 100644
--- a/drivers/net/team/team_mode_loadbalance.c
+++ b/drivers/net/team/team_mode_loadbalance.c
@@ -259,7 +259,7 @@ static int __fprog_create(struct sock_fprog_kern **pfprog, u32 data_len,

 	if (data_len % sizeof(struct sock_filter))
 		return -EINVAL;
-	fprog = kmalloc(sizeof(*fprog), GFP_KERNEL);
+	fprog = kmalloc_obj(*fprog, GFP_KERNEL);
 	if (!fprog)
 		return -ENOMEM;
 	fprog->filter = kmemdup(filter, data_len, GFP_KERNEL);
@@ -594,7 +594,7 @@ static int lb_init(struct team *team)
 	BUG_ON(!func);
 	rcu_assign_pointer(lb_priv->select_tx_port_func, func);

-	lb_priv->ex = kzalloc(sizeof(*lb_priv->ex), GFP_KERNEL);
+	lb_priv->ex = kzalloc_obj(*lb_priv->ex, GFP_KERNEL);
 	if (!lb_priv->ex)
 		return -ENOMEM;
 	lb_priv->ex->team = team;
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 8192740357a0..fcddbeb6d36a 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -318,7 +318,7 @@ static struct tun_flow_entry *tun_flow_create(struct tun_struct *tun,
 					      struct hlist_head *head,
 					      u32 rxhash, u16 queue_index)
 {
-	struct tun_flow_entry *e = kmalloc(sizeof(*e), GFP_ATOMIC);
+	struct tun_flow_entry *e = kmalloc_obj(*e, GFP_ATOMIC);

 	if (e) {
 		netif_info(tun, tx_queued, tun->dev,
@@ -2228,7 +2228,7 @@ static int __tun_set_ebpf(struct tun_struct *tun,
 	struct tun_prog *old, *new = NULL;

 	if (prog) {
-		new = kmalloc(sizeof(*new), GFP_KERNEL);
+		new = kmalloc_obj(*new, GFP_KERNEL);
 		if (!new)
 			return -ENOMEM;
 		new->prog = prog;
@@ -3605,7 +3605,7 @@ static int tun_queue_resize(struct tun_struct *tun)
 	int n = tun->numqueues + tun->numdisabled;
 	int ret, i;

-	rings = kmalloc_array(n, sizeof(*rings), GFP_KERNEL);
+	rings = kmalloc_objs(*rings, n, GFP_KERNEL);
 	if (!rings)
 		return -ENOMEM;

diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c
index 0722050dbe32..5ab60f7c90dd 100644
--- a/drivers/net/usb/aqc111.c
+++ b/drivers/net/usb/aqc111.c
@@ -703,7 +703,7 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf)
 		return ret;
 	}

-	aqc111_data = kzalloc(sizeof(*aqc111_data), GFP_KERNEL);
+	aqc111_data = kzalloc_obj(*aqc111_data, GFP_KERNEL);
 	if (!aqc111_data)
 		return -ENOMEM;

diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c
index 7eb6e86adb16..ca8a9d04a16b 100644
--- a/drivers/net/usb/asix_devices.c
+++ b/drivers/net/usb/asix_devices.c
@@ -1314,7 +1314,7 @@ static int ax88178_bind(struct usbnet *dev, struct usb_interface *intf)
 		dev->rx_urb_size = 2048;
 	}

-	dev->driver_priv = kzalloc(sizeof(struct asix_common_private), GFP_KERNEL);
+	dev->driver_priv = kzalloc_obj(struct asix_common_private, GFP_KERNEL);
 	if (!dev->driver_priv)
 			return -ENOMEM;

diff --git a/drivers/net/usb/ax88172a.c b/drivers/net/usb/ax88172a.c
index 3100fbe153c0..54c0ba627b50 100644
--- a/drivers/net/usb/ax88172a.c
+++ b/drivers/net/usb/ax88172a.c
@@ -165,7 +165,7 @@ static int ax88172a_bind(struct usbnet *dev, struct usb_interface *intf)
 	if (ret)
 		return ret;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
index 0e9ae89b840e..46e6c4dcda47 100644
--- a/drivers/net/usb/ax88179_178a.c
+++ b/drivers/net/usb/ax88179_178a.c
@@ -1287,7 +1287,7 @@ static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf)
 	if (ret < 0)
 		return ret;

-	ax179_data = kzalloc(sizeof(*ax179_data), GFP_KERNEL);
+	ax179_data = kzalloc_obj(*ax179_data, GFP_KERNEL);
 	if (!ax179_data)
 		return -ENOMEM;

diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index 5d123df0a866..39e8063b1f5b 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -827,7 +827,7 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
 	u8 iface_no;
 	struct usb_cdc_parsed_header hdr;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/drivers/net/usb/cx82310_eth.c b/drivers/net/usb/cx82310_eth.c
index 79a47e2fd437..54199fde1c64 100644
--- a/drivers/net/usb/cx82310_eth.c
+++ b/drivers/net/usb/cx82310_eth.c
@@ -173,7 +173,7 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
 	if (!dev->partial_data)
 		return -ENOMEM;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		ret = -ENOMEM;
 		goto err_partial;
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index 1aeb36119d3f..1da216248896 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -2313,7 +2313,7 @@ static struct hso_device *hso_create_device(struct usb_interface *intf,
 {
 	struct hso_device *hso_dev;

-	hso_dev = kzalloc(sizeof(*hso_dev), GFP_KERNEL);
+	hso_dev = kzalloc_obj(*hso_dev, GFP_KERNEL);
 	if (!hso_dev)
 		return NULL;

@@ -2617,7 +2617,7 @@ static struct hso_device *hso_create_bulk_serial_device(
 	if (!hso_dev)
 		return NULL;

-	serial = kzalloc(sizeof(*serial), GFP_KERNEL);
+	serial = kzalloc_obj(*serial, GFP_KERNEL);
 	if (!serial)
 		goto exit;

@@ -2626,13 +2626,12 @@ static struct hso_device *hso_create_bulk_serial_device(

 	if ((port & HSO_PORT_MASK) == HSO_PORT_MODEM) {
 		num_urbs = 2;
-		serial->tiocmget = kzalloc(sizeof(struct hso_tiocmget),
-					   GFP_KERNEL);
+		serial->tiocmget = kzalloc_obj(struct hso_tiocmget, GFP_KERNEL);
 		if (!serial->tiocmget)
 			goto exit;
 		serial->tiocmget->serial_state_notification
-			= kzalloc(sizeof(struct hso_serial_state_notification),
-					   GFP_KERNEL);
+			= kzalloc_obj(struct hso_serial_state_notification,
+				      GFP_KERNEL);
 		if (!serial->tiocmget->serial_state_notification)
 			goto exit;
 		tiocmget = serial->tiocmget;
@@ -2711,7 +2710,7 @@ struct hso_device *hso_create_mux_serial_device(struct usb_interface *interface,
 	if (!hso_dev)
 		return NULL;

-	serial = kzalloc(sizeof(*serial), GFP_KERNEL);
+	serial = kzalloc_obj(*serial, GFP_KERNEL);
 	if (!serial)
 		goto err_free_dev;

@@ -2755,7 +2754,7 @@ static void hso_free_shared_int(struct hso_shared_int *mux)
 static
 struct hso_shared_int *hso_create_shared_int(struct usb_interface *interface)
 {
-	struct hso_shared_int *mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	struct hso_shared_int *mux = kzalloc_obj(*mux, GFP_KERNEL);

 	if (!mux)
 		return NULL;
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index 00397a807393..92ec3e73edff 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -682,7 +682,7 @@ static int lan78xx_read_stats(struct lan78xx_net *dev,
 	u32 *src;
 	u32 *dst;

-	stats = kmalloc(sizeof(*stats), GFP_KERNEL);
+	stats = kmalloc_obj(*stats, GFP_KERNEL);
 	if (!stats)
 		return -ENOMEM;

@@ -3728,7 +3728,7 @@ static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
 	int ret;
 	int i;

-	dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL);
+	dev->data[0] = (unsigned long) kzalloc_obj(*pdata, GFP_KERNEL);

 	pdata = (struct lan78xx_priv *)(dev->data[0]);
 	if (!pdata) {
diff --git a/drivers/net/usb/lg-vl600.c b/drivers/net/usb/lg-vl600.c
index b2495fa80171..21f6a4795295 100644
--- a/drivers/net/usb/lg-vl600.c
+++ b/drivers/net/usb/lg-vl600.c
@@ -56,7 +56,7 @@ struct vl600_state {
 static int vl600_bind(struct usbnet *dev, struct usb_interface *intf)
 {
 	int ret;
-	struct vl600_state *s = kzalloc(sizeof(struct vl600_state), GFP_KERNEL);
+	struct vl600_state *s = kzalloc_obj(struct vl600_state, GFP_KERNEL);

 	if (!s)
 		return -ENOMEM;
diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c
index 7b6d6eb60709..4f539b5d509a 100644
--- a/drivers/net/usb/pegasus.c
+++ b/drivers/net/usb/pegasus.c
@@ -140,7 +140,7 @@ static int update_eth_regs_async(pegasus_t *pegasus)
 	struct urb *async_urb;
 	struct usb_ctrlrequest *req;

-	req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC);
+	req = kmalloc_obj(struct usb_ctrlrequest, GFP_ATOMIC);
 	if (req == NULL)
 		return ret;

diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 8d36162f36df..c224d2ee107c 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -9647,7 +9647,7 @@ static u8 __rtl_get_hw_ver(struct usb_device *udev)
 	int ret;
 	int i;

-	tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kmalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return 0;

diff --git a/drivers/net/usb/rtl8150.c b/drivers/net/usb/rtl8150.c
index 2f1f134b5b48..4cda0643afb6 100644
--- a/drivers/net/usb/rtl8150.c
+++ b/drivers/net/usb/rtl8150.c
@@ -187,7 +187,7 @@ static int async_set_registers(rtl8150_t *dev, u16 indx, u16 size, u16 reg)
 	struct urb *async_urb;
 	struct async_req *req;

-	req = kmalloc(sizeof(struct async_req), GFP_ATOMIC);
+	req = kmalloc_obj(struct async_req, GFP_ATOMIC);
 	if (req == NULL)
 		return res;
 	async_urb = usb_alloc_urb(0, GFP_ATOMIC);
diff --git a/drivers/net/usb/sierra_net.c b/drivers/net/usb/sierra_net.c
index 3ca60ebdd468..87a10f5ab557 100644
--- a/drivers/net/usb/sierra_net.c
+++ b/drivers/net/usb/sierra_net.c
@@ -683,7 +683,7 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf)
 		return -ENODEV;
 	}
 	/* Initialize sierra private data */
-	priv = kzalloc(sizeof *priv, GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
index 1a61a8bcf5d3..8fb6bb58b589 100644
--- a/drivers/net/usb/smsc75xx.c
+++ b/drivers/net/usb/smsc75xx.c
@@ -1450,8 +1450,8 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf)
 		return ret;
 	}

-	dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc75xx_priv),
-					      GFP_KERNEL);
+	dev->data[0] = (unsigned long) kzalloc_obj(struct smsc75xx_priv,
+						   GFP_KERNEL);

 	pdata = (struct smsc75xx_priv *)(dev->data[0]);
 	if (!pdata)
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 7ecf98d97493..df2c4c1f8c0b 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -1157,7 +1157,7 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
 		return ret;
 	}

-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return -ENOMEM;

diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 8e44feaf7ff1..ed86ba87ca4e 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1377,8 +1377,7 @@ static int build_dma_sg(const struct sk_buff *skb, struct urb *urb)
 		return 0;

 	/* reserve one for zero packet */
-	urb->sg = kmalloc_array(num_sgs + 1, sizeof(struct scatterlist),
-				GFP_ATOMIC);
+	urb->sg = kmalloc_objs(struct scatterlist, num_sgs + 1, GFP_ATOMIC);
 	if (!urb->sg)
 		return -ENOMEM;

@@ -2234,7 +2233,7 @@ int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype,
 		}
 	}

-	req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC);
+	req = kmalloc_obj(struct usb_ctrlrequest, GFP_ATOMIC);
 	if (!req)
 		goto fail_free_buf;

diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 9982412fd7f2..e35df717e65e 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -1434,8 +1434,8 @@ static int veth_alloc_queues(struct net_device *dev)
 	struct veth_priv *priv = netdev_priv(dev);
 	int i;

-	priv->rq = kvcalloc(dev->num_rx_queues, sizeof(*priv->rq),
-			    GFP_KERNEL_ACCOUNT | __GFP_RETRY_MAYFAIL);
+	priv->rq = kvzalloc_objs(*priv->rq, dev->num_rx_queues,
+				 GFP_KERNEL_ACCOUNT | __GFP_RETRY_MAYFAIL);
 	if (!priv->rq)
 		return -ENOMEM;

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index db88dcaefb20..31ed78712e43 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -3732,7 +3732,7 @@ static int virtnet_set_queues(struct virtnet_info *vi, u16 queue_pairs)
 		goto succ;
 	}

-	mq = kzalloc(sizeof(*mq), GFP_KERNEL);
+	mq = kzalloc_obj(*mq, GFP_KERNEL);
 	if (!mq)
 		return -ENOMEM;

@@ -3799,7 +3799,7 @@ static void virtnet_rx_mode_work(struct work_struct *work)
 	if (!virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_RX))
 		return;

-	promisc_allmulti = kzalloc(sizeof(*promisc_allmulti), GFP_KERNEL);
+	promisc_allmulti = kzalloc_obj(*promisc_allmulti, GFP_KERNEL);
 	if (!promisc_allmulti) {
 		dev_warn(&dev->dev, "Failed to set RX mode, no memory.\n");
 		return;
@@ -3885,7 +3885,7 @@ static int virtnet_vlan_rx_add_vid(struct net_device *dev,
 	__virtio16 *_vid __free(kfree) = NULL;
 	struct scatterlist sg;

-	_vid = kzalloc(sizeof(*_vid), GFP_KERNEL);
+	_vid = kzalloc_obj(*_vid, GFP_KERNEL);
 	if (!_vid)
 		return -ENOMEM;

@@ -3905,7 +3905,7 @@ static int virtnet_vlan_rx_kill_vid(struct net_device *dev,
 	__virtio16 *_vid __free(kfree) = NULL;
 	struct scatterlist sg;

-	_vid = kzalloc(sizeof(*_vid), GFP_KERNEL);
+	_vid = kzalloc_obj(*_vid, GFP_KERNEL);
 	if (!_vid)
 		return -ENOMEM;

@@ -4028,7 +4028,7 @@ static int virtnet_send_ctrl_coal_vq_cmd(struct virtnet_info *vi,
 	struct virtio_net_ctrl_coal_vq *coal_vq __free(kfree) = NULL;
 	struct scatterlist sgs;

-	coal_vq = kzalloc(sizeof(*coal_vq), GFP_KERNEL);
+	coal_vq = kzalloc_obj(*coal_vq, GFP_KERNEL);
 	if (!coal_vq)
 		return -ENOMEM;

@@ -4987,7 +4987,7 @@ static int virtnet_get_hw_stats(struct virtnet_info *vi,
 		qnum += 1;
 	}

-	req = kcalloc(qnum, sizeof(*req), GFP_KERNEL);
+	req = kzalloc_objs(*req, qnum, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -5127,7 +5127,7 @@ static int virtnet_send_tx_notf_coal_cmds(struct virtnet_info *vi,
 	struct scatterlist sgs_tx;
 	int i;

-	coal_tx = kzalloc(sizeof(*coal_tx), GFP_KERNEL);
+	coal_tx = kzalloc_obj(*coal_tx, GFP_KERNEL);
 	if (!coal_tx)
 		return -ENOMEM;

@@ -5175,7 +5175,7 @@ static int virtnet_send_rx_notf_coal_cmds(struct virtnet_info *vi,
 		return 0;
 	}

-	coal_rx = kzalloc(sizeof(*coal_rx), GFP_KERNEL);
+	coal_rx = kzalloc_obj(*coal_rx, GFP_KERNEL);
 	if (!coal_rx)
 		return -ENOMEM;

@@ -5738,7 +5738,7 @@ static int virtnet_set_guest_offloads(struct virtnet_info *vi, u64 offloads)
 	__virtio64 *_offloads __free(kfree) = NULL;
 	struct scatterlist sg;

-	_offloads = kzalloc(sizeof(*_offloads), GFP_KERNEL);
+	_offloads = kzalloc_obj(*_offloads, GFP_KERNEL);
 	if (!_offloads)
 		return -ENOMEM;

@@ -5882,7 +5882,7 @@ static int virtnet_xsk_pool_enable(struct net_device *dev,

 	size = virtqueue_get_vring_size(rq->vq);

-	rq->xsk_buffs = kvcalloc(size, sizeof(*rq->xsk_buffs), GFP_KERNEL);
+	rq->xsk_buffs = kvzalloc_objs(*rq->xsk_buffs, size, GFP_KERNEL);
 	if (!rq->xsk_buffs)
 		return -ENOMEM;

@@ -6395,14 +6395,14 @@ static int virtnet_find_vqs(struct virtnet_info *vi)
 		    virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ);

 	/* Allocate space for find_vqs parameters */
-	vqs = kcalloc(total_vqs, sizeof(*vqs), GFP_KERNEL);
+	vqs = kzalloc_objs(*vqs, total_vqs, GFP_KERNEL);
 	if (!vqs)
 		goto err_vq;
-	vqs_info = kcalloc(total_vqs, sizeof(*vqs_info), GFP_KERNEL);
+	vqs_info = kzalloc_objs(*vqs_info, total_vqs, GFP_KERNEL);
 	if (!vqs_info)
 		goto err_vqs_info;
 	if (!vi->big_packets || vi->mergeable_rx_bufs) {
-		ctx = kcalloc(total_vqs, sizeof(*ctx), GFP_KERNEL);
+		ctx = kzalloc_objs(*ctx, total_vqs, GFP_KERNEL);
 		if (!ctx)
 			goto err_ctx;
 	} else {
@@ -6460,16 +6460,16 @@ static int virtnet_alloc_queues(struct virtnet_info *vi)
 	int i;

 	if (vi->has_cvq) {
-		vi->ctrl = kzalloc(sizeof(*vi->ctrl), GFP_KERNEL);
+		vi->ctrl = kzalloc_obj(*vi->ctrl, GFP_KERNEL);
 		if (!vi->ctrl)
 			goto err_ctrl;
 	} else {
 		vi->ctrl = NULL;
 	}
-	vi->sq = kcalloc(vi->max_queue_pairs, sizeof(*vi->sq), GFP_KERNEL);
+	vi->sq = kzalloc_objs(*vi->sq, vi->max_queue_pairs, GFP_KERNEL);
 	if (!vi->sq)
 		goto err_sq;
-	vi->rq = kcalloc(vi->max_queue_pairs, sizeof(*vi->rq), GFP_KERNEL);
+	vi->rq = kzalloc_objs(*vi->rq, vi->max_queue_pairs, GFP_KERNEL);
 	if (!vi->rq)
 		goto err_rq;

@@ -7016,7 +7016,7 @@ static int virtnet_probe(struct virtio_device *vdev)
 		struct scatterlist sg;
 		__le64 v;

-		stats_cap = kzalloc(sizeof(*stats_cap), GFP_KERNEL);
+		stats_cap = kzalloc_obj(*stats_cap, GFP_KERNEL);
 		if (!stats_cap) {
 			rtnl_unlock();
 			err = -ENOMEM;
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index 571847a7f86d..8c009bcaa8e7 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -158,7 +158,7 @@ static struct vrf_map_elem *vrf_map_elem_alloc(gfp_t flags)
 {
 	struct vrf_map_elem *me;

-	me = kmalloc(sizeof(*me), flags);
+	me = kmalloc_obj(*me, flags);
 	if (!me)
 		return NULL;

diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c
index 7bd0ae0a6a33..c1cf3eff4c1b 100644
--- a/drivers/net/vxlan/vxlan_core.c
+++ b/drivers/net/vxlan/vxlan_core.c
@@ -580,7 +580,7 @@ static int vxlan_fdb_append(struct vxlan_fdb *f,
 	if (rd)
 		return 0;

-	rd = kmalloc(sizeof(*rd), GFP_ATOMIC);
+	rd = kmalloc_obj(*rd, GFP_ATOMIC);
 	if (rd == NULL)
 		return -ENOMEM;

@@ -774,7 +774,7 @@ static struct vxlan_fdb *vxlan_fdb_alloc(struct vxlan_dev *vxlan, const u8 *mac,
 {
 	struct vxlan_fdb *f;

-	f = kmalloc(sizeof(*f), GFP_ATOMIC);
+	f = kmalloc_obj(*f, GFP_ATOMIC);
 	if (!f)
 		return NULL;
 	memset(&f->key, 0, sizeof(f->key));
@@ -3578,7 +3578,7 @@ static struct vxlan_sock *vxlan_socket_create(struct net *net, bool ipv6,

 	ASSERT_RTNL();

-	vs = kzalloc(sizeof(*vs), GFP_KERNEL);
+	vs = kzalloc_obj(*vs, GFP_KERNEL);
 	if (!vs)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/vxlan/vxlan_mdb.c b/drivers/net/vxlan/vxlan_mdb.c
index 816ab1aa0526..8f53ae776613 100644
--- a/drivers/net/vxlan/vxlan_mdb.c
+++ b/drivers/net/vxlan/vxlan_mdb.c
@@ -430,7 +430,7 @@ static int vxlan_mdb_config_src_entry_init(struct vxlan_mdb_config *cfg,
 				       extack))
 		return -EINVAL;

-	src = kzalloc(sizeof(*src), GFP_KERNEL);
+	src = kzalloc_obj(*src, GFP_KERNEL);
 	if (!src)
 		return -ENOMEM;

@@ -697,7 +697,7 @@ static int vxlan_mdb_remote_rdst_init(const struct vxlan_mdb_config *cfg,
 	struct vxlan_rdst *rd;
 	int err;

-	rd = kzalloc(sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_obj(*rd, GFP_KERNEL);
 	if (!rd)
 		return -ENOMEM;

@@ -767,7 +767,7 @@ vxlan_mdb_remote_src_entry_add(struct vxlan_mdb_remote *remote,
 {
 	struct vxlan_mdb_src_entry *ent;

-	ent = kzalloc(sizeof(*ent), GFP_KERNEL);
+	ent = kzalloc_obj(*ent, GFP_KERNEL);
 	if (!ent)
 		return NULL;

@@ -1139,7 +1139,7 @@ static int vxlan_mdb_remote_add(const struct vxlan_mdb_config *cfg,
 		return -ENOENT;
 	}

-	remote = kzalloc(sizeof(*remote), GFP_KERNEL);
+	remote = kzalloc_obj(*remote, GFP_KERNEL);
 	if (!remote)
 		return -ENOMEM;

@@ -1187,7 +1187,7 @@ vxlan_mdb_entry_get(struct vxlan_dev *vxlan,
 	if (mdb_entry)
 		return mdb_entry;

-	mdb_entry = kzalloc(sizeof(*mdb_entry), GFP_KERNEL);
+	mdb_entry = kzalloc_obj(*mdb_entry, GFP_KERNEL);
 	if (!mdb_entry)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/vxlan/vxlan_vnifilter.c b/drivers/net/vxlan/vxlan_vnifilter.c
index cde897d92f24..726a34d16fa2 100644
--- a/drivers/net/vxlan/vxlan_vnifilter.c
+++ b/drivers/net/vxlan/vxlan_vnifilter.c
@@ -697,7 +697,7 @@ static struct vxlan_vni_node *vxlan_vni_alloc(struct vxlan_dev *vxlan,
 {
 	struct vxlan_vni_node *vninode;

-	vninode = kzalloc(sizeof(*vninode), GFP_KERNEL);
+	vninode = kzalloc_obj(*vninode, GFP_KERNEL);
 	if (!vninode)
 		return NULL;
 	vninode->stats = netdev_alloc_pcpu_stats(struct vxlan_vni_stats_pcpu);
@@ -925,7 +925,7 @@ int vxlan_vnigroup_init(struct vxlan_dev *vxlan)
 	struct vxlan_vni_group *vg;
 	int ret;

-	vg = kzalloc(sizeof(*vg), GFP_KERNEL);
+	vg = kzalloc_obj(*vg, GFP_KERNEL);
 	if (!vg)
 		return -ENOMEM;
 	ret = rhashtable_init(&vg->vni_hash, &vxlan_vni_rht_params);
diff --git a/drivers/net/wan/c101.c b/drivers/net/wan/c101.c
index 8dd14d916c3a..82ba8dfa979b 100644
--- a/drivers/net/wan/c101.c
+++ b/drivers/net/wan/c101.c
@@ -313,7 +313,7 @@ static int __init c101_run(unsigned long irq, unsigned long winbase)
 		return -ENODEV;
 	}

-	card = kzalloc(sizeof(card_t), GFP_KERNEL);
+	card = kzalloc_obj(card_t, GFP_KERNEL);
 	if (!card)
 		return -ENOBUFS;

diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c
index 5b01642ca44e..9f989b2ff558 100644
--- a/drivers/net/wan/farsync.c
+++ b/drivers/net/wan/farsync.c
@@ -2359,7 +2359,7 @@ fst_add_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	}

 	/* Allocate driver private data */
-	card = kzalloc(sizeof(struct fst_card_info), GFP_KERNEL);
+	card = kzalloc_obj(struct fst_card_info, GFP_KERNEL);
 	if (!card)
 		return -ENOMEM;

diff --git a/drivers/net/wan/framer/framer-core.c b/drivers/net/wan/framer/framer-core.c
index bf7ac7dd2804..66ed38e97336 100644
--- a/drivers/net/wan/framer/framer-core.c
+++ b/drivers/net/wan/framer/framer-core.c
@@ -615,7 +615,7 @@ struct framer *framer_create(struct device *dev, struct device_node *node,
 	if (WARN_ON((ops->flags & FRAMER_FLAG_POLL_STATUS) && !ops->get_status))
 		return ERR_PTR(-EINVAL);

-	framer = kzalloc(sizeof(*framer), GFP_KERNEL);
+	framer = kzalloc_obj(*framer, GFP_KERNEL);
 	if (!framer)
 		return ERR_PTR(-ENOMEM);

@@ -771,7 +771,7 @@ __framer_provider_of_register(struct device *dev, struct module *owner,
 {
 	struct framer_provider *framer_provider;

-	framer_provider = kzalloc(sizeof(*framer_provider), GFP_KERNEL);
+	framer_provider = kzalloc_obj(*framer_provider, GFP_KERNEL);
 	if (!framer_provider)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/wan/framer/pef2256/pef2256.c b/drivers/net/wan/framer/pef2256/pef2256.c
index c058cc79137d..f7ed6b3dd2d7 100644
--- a/drivers/net/wan/framer/pef2256/pef2256.c
+++ b/drivers/net/wan/framer/pef2256/pef2256.c
@@ -638,7 +638,7 @@ static int pef2256_add_audio_devices(struct pef2256 *pef2256)
 	if (!count)
 		return 0;

-	audio_devs = kcalloc(count, sizeof(*audio_devs), GFP_KERNEL);
+	audio_devs = kzalloc_objs(*audio_devs, count, GFP_KERNEL);
 	if (!audio_devs)
 		return -ENOMEM;

diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
index dff84731343c..5e93e204da0c 100644
--- a/drivers/net/wan/fsl_ucc_hdlc.c
+++ b/drivers/net/wan/fsl_ucc_hdlc.c
@@ -203,17 +203,15 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
 		goto free_tx_bd;
 	}

-	priv->rx_skbuff = kcalloc(priv->rx_ring_size,
-				  sizeof(*priv->rx_skbuff),
-				  GFP_KERNEL);
+	priv->rx_skbuff = kzalloc_objs(*priv->rx_skbuff, priv->rx_ring_size,
+				       GFP_KERNEL);
 	if (!priv->rx_skbuff) {
 		ret = -ENOMEM;
 		goto free_ucc_pram;
 	}

-	priv->tx_skbuff = kcalloc(priv->tx_ring_size,
-				  sizeof(*priv->tx_skbuff),
-				  GFP_KERNEL);
+	priv->tx_skbuff = kzalloc_objs(*priv->tx_skbuff, priv->tx_ring_size,
+				       GFP_KERNEL);
 	if (!priv->tx_skbuff) {
 		ret = -ENOMEM;
 		goto free_rx_skbuff;
@@ -900,8 +898,7 @@ static int uhdlc_suspend(struct device *dev)
 	priv->gumr = ioread32be(&uf_regs->gumr);
 	priv->guemr = ioread8(&uf_regs->guemr);

-	priv->ucc_pram_bak = kmalloc(sizeof(*priv->ucc_pram_bak),
-					GFP_KERNEL);
+	priv->ucc_pram_bak = kmalloc_obj(*priv->ucc_pram_bak, GFP_KERNEL);
 	if (!priv->ucc_pram_bak)
 		return -ENOMEM;

@@ -1173,7 +1170,7 @@ static int ucc_hdlc_probe(struct platform_device *pdev)
 	ut_info->uf_info.regs = res.start;
 	ut_info->uf_info.irq = irq_of_parse_and_map(np, 0);

-	uhdlc_priv = kzalloc(sizeof(*uhdlc_priv), GFP_KERNEL);
+	uhdlc_priv = kzalloc_obj(*uhdlc_priv, GFP_KERNEL);
 	if (!uhdlc_priv)
 		return -ENOMEM;

@@ -1186,7 +1183,7 @@ static int ucc_hdlc_probe(struct platform_device *pdev)
 	uhdlc_priv->hdlc_bus = of_property_read_bool(np, "fsl,hdlc-bus");

 	if (uhdlc_priv->tsa == 1) {
-		utdm = kzalloc(sizeof(*utdm), GFP_KERNEL);
+		utdm = kzalloc_obj(*utdm, GFP_KERNEL);
 		if (!utdm) {
 			ret = -ENOMEM;
 			dev_err(&pdev->dev, "No mem to alloc ucc tdm data\n");
diff --git a/drivers/net/wan/hdlc_fr.c b/drivers/net/wan/hdlc_fr.c
index 08a0ba5ca471..5f0e54ed1ee1 100644
--- a/drivers/net/wan/hdlc_fr.c
+++ b/drivers/net/wan/hdlc_fr.c
@@ -192,7 +192,7 @@ static struct pvc_device *add_pvc(struct net_device *dev, u16 dlci)
 		pvc_p = &(*pvc_p)->next;
 	}

-	pvc = kzalloc(sizeof(*pvc), GFP_ATOMIC);
+	pvc = kzalloc_obj(*pvc, GFP_ATOMIC);
 #ifdef DEBUG_PVC
 	printk(KERN_DEBUG "add_pvc: allocated pvc %p, frad %p\n", pvc, dev);
 #endif
diff --git a/drivers/net/wan/n2.c b/drivers/net/wan/n2.c
index f3e80722ba1d..1892ee67bf20 100644
--- a/drivers/net/wan/n2.c
+++ b/drivers/net/wan/n2.c
@@ -340,7 +340,7 @@ static int __init n2_run(unsigned long io, unsigned long irq,
 		return -ENODEV;
 	}

-	card = kzalloc(sizeof(card_t), GFP_KERNEL);
+	card = kzalloc_obj(card_t, GFP_KERNEL);
 	if (!card)
 		return -ENOBUFS;

diff --git a/drivers/net/wan/pc300too.c b/drivers/net/wan/pc300too.c
index 4766446f0fa0..82ae9e1db51d 100644
--- a/drivers/net/wan/pc300too.c
+++ b/drivers/net/wan/pc300too.c
@@ -300,7 +300,7 @@ static int pc300_pci_init_one(struct pci_dev *pdev,
 		return i;
 	}

-	card = kzalloc(sizeof(card_t), GFP_KERNEL);
+	card = kzalloc_obj(card_t, GFP_KERNEL);
 	if (!card) {
 		pci_release_regions(pdev);
 		pci_disable_device(pdev);
diff --git a/drivers/net/wan/pci200syn.c b/drivers/net/wan/pci200syn.c
index ea86c7035653..33f562919923 100644
--- a/drivers/net/wan/pci200syn.c
+++ b/drivers/net/wan/pci200syn.c
@@ -281,7 +281,7 @@ static int pci200_pci_init_one(struct pci_dev *pdev,
 		return i;
 	}

-	card = kzalloc(sizeof(card_t), GFP_KERNEL);
+	card = kzalloc_obj(card_t, GFP_KERNEL);
 	if (!card) {
 		pci_release_regions(pdev);
 		pci_disable_device(pdev);
diff --git a/drivers/net/wan/wanxl.c b/drivers/net/wan/wanxl.c
index 5a9e262188ef..d24443390932 100644
--- a/drivers/net/wan/wanxl.c
+++ b/drivers/net/wan/wanxl.c
@@ -598,7 +598,7 @@ static int wanxl_pci_init_one(struct pci_dev *pdev,
 		ports = 4;
 	}

-	card = kzalloc(struct_size(card, ports, ports), GFP_KERNEL);
+	card = kzalloc_flex(*card, ports, ports, GFP_KERNEL);
 	if (!card) {
 		pci_release_regions(pdev);
 		pci_disable_device(pdev);
diff --git a/drivers/net/wireguard/noise.c b/drivers/net/wireguard/noise.c
index 1fe8468f0bef..994b7c6f0613 100644
--- a/drivers/net/wireguard/noise.c
+++ b/drivers/net/wireguard/noise.c
@@ -97,7 +97,7 @@ void wg_noise_handshake_clear(struct noise_handshake *handshake)

 static struct noise_keypair *keypair_create(struct wg_peer *peer)
 {
-	struct noise_keypair *keypair = kzalloc(sizeof(*keypair), GFP_KERNEL);
+	struct noise_keypair *keypair = kzalloc_obj(*keypair, GFP_KERNEL);

 	if (unlikely(!keypair))
 		return NULL;
diff --git a/drivers/net/wireguard/peerlookup.c b/drivers/net/wireguard/peerlookup.c
index f2783aa7a88f..5ae4e6c5e7c9 100644
--- a/drivers/net/wireguard/peerlookup.c
+++ b/drivers/net/wireguard/peerlookup.c
@@ -21,7 +21,7 @@ static struct hlist_head *pubkey_bucket(struct pubkey_hashtable *table,

 struct pubkey_hashtable *wg_pubkey_hashtable_alloc(void)
 {
-	struct pubkey_hashtable *table = kvmalloc(sizeof(*table), GFP_KERNEL);
+	struct pubkey_hashtable *table = kvmalloc_obj(*table, GFP_KERNEL);

 	if (!table)
 		return NULL;
@@ -82,7 +82,7 @@ static struct hlist_head *index_bucket(struct index_hashtable *table,

 struct index_hashtable *wg_index_hashtable_alloc(void)
 {
-	struct index_hashtable *table = kvmalloc(sizeof(*table), GFP_KERNEL);
+	struct index_hashtable *table = kvmalloc_obj(*table, GFP_KERNEL);

 	if (!table)
 		return NULL;
diff --git a/drivers/net/wireguard/ratelimiter.c b/drivers/net/wireguard/ratelimiter.c
index dd55e5c26f46..13d532a44294 100644
--- a/drivers/net/wireguard/ratelimiter.c
+++ b/drivers/net/wireguard/ratelimiter.c
@@ -176,12 +176,12 @@ int wg_ratelimiter_init(void)
 			(1U << 14) / sizeof(struct hlist_head)));
 	max_entries = table_size * 8;

-	table_v4 = kvcalloc(table_size, sizeof(*table_v4), GFP_KERNEL);
+	table_v4 = kvzalloc_objs(*table_v4, table_size, GFP_KERNEL);
 	if (unlikely(!table_v4))
 		goto err_kmemcache;

 #if IS_ENABLED(CONFIG_IPV6)
-	table_v6 = kvcalloc(table_size, sizeof(*table_v6), GFP_KERNEL);
+	table_v6 = kvzalloc_objs(*table_v6, table_size, GFP_KERNEL);
 	if (unlikely(!table_v6)) {
 		kvfree(table_v4);
 		goto err_kmemcache;
diff --git a/drivers/net/wireguard/selftest/allowedips.c b/drivers/net/wireguard/selftest/allowedips.c
index 41837efa70cb..6c7c79e39ad4 100644
--- a/drivers/net/wireguard/selftest/allowedips.c
+++ b/drivers/net/wireguard/selftest/allowedips.c
@@ -181,7 +181,7 @@ static __init int
 horrible_allowedips_insert_v4(struct horrible_allowedips *table,
 			      struct in_addr *ip, u8 cidr, void *value)
 {
-	struct horrible_allowedips_node *node = kzalloc(sizeof(*node), GFP_KERNEL);
+	struct horrible_allowedips_node *node = kzalloc_obj(*node, GFP_KERNEL);

 	if (unlikely(!node))
 		return -ENOMEM;
@@ -198,7 +198,7 @@ static __init int
 horrible_allowedips_insert_v6(struct horrible_allowedips *table,
 			      struct in6_addr *ip, u8 cidr, void *value)
 {
-	struct horrible_allowedips_node *node = kzalloc(sizeof(*node), GFP_KERNEL);
+	struct horrible_allowedips_node *node = kzalloc_obj(*node, GFP_KERNEL);

 	if (unlikely(!node))
 		return -ENOMEM;
@@ -266,13 +266,13 @@ static __init bool randomized_test(void)
 	wg_allowedips_init(&t);
 	horrible_allowedips_init(&h);

-	peers = kcalloc(NUM_PEERS, sizeof(*peers), GFP_KERNEL);
+	peers = kzalloc_objs(*peers, NUM_PEERS, GFP_KERNEL);
 	if (unlikely(!peers)) {
 		pr_err("allowedips random self-test malloc: FAIL\n");
 		goto free;
 	}
 	for (i = 0; i < NUM_PEERS; ++i) {
-		peers[i] = kzalloc(sizeof(*peers[i]), GFP_KERNEL);
+		peers[i] = kzalloc_obj(*peers[i], GFP_KERNEL);
 		if (unlikely(!peers[i])) {
 			pr_err("allowedips random self-test malloc: FAIL\n");
 			goto free;
@@ -447,7 +447,7 @@ static __init inline struct in6_addr *ip6(u32 a, u32 b, u32 c, u32 d)

 static __init struct wg_peer *init_peer(void)
 {
-	struct wg_peer *peer = kzalloc(sizeof(*peer), GFP_KERNEL);
+	struct wg_peer *peer = kzalloc_obj(*peer, GFP_KERNEL);

 	if (!peer)
 		return NULL;
diff --git a/drivers/net/wireguard/selftest/counter.c b/drivers/net/wireguard/selftest/counter.c
index ec3c156bf91b..13c5535a1fd6 100644
--- a/drivers/net/wireguard/selftest/counter.c
+++ b/drivers/net/wireguard/selftest/counter.c
@@ -10,7 +10,7 @@ bool __init wg_packet_counter_selftest(void)
 	unsigned int test_num = 0, i;
 	bool success = true;

-	counter = kmalloc(sizeof(*counter), GFP_KERNEL);
+	counter = kmalloc_obj(*counter, GFP_KERNEL);
 	if (unlikely(!counter)) {
 		pr_err("nonce counter self-test malloc: FAIL\n");
 		return false;
diff --git a/drivers/net/wireless/ath/ar5523/ar5523.c b/drivers/net/wireless/ath/ar5523/ar5523.c
index 1230e6278f23..f1567365ac04 100644
--- a/drivers/net/wireless/ath/ar5523/ar5523.c
+++ b/drivers/net/wireless/ath/ar5523/ar5523.c
@@ -1512,11 +1512,11 @@ static int ar5523_load_firmware(struct usb_device *dev)
 		return -ENOENT;
 	}

-	txblock = kzalloc(sizeof(*txblock), GFP_KERNEL);
+	txblock = kzalloc_obj(*txblock, GFP_KERNEL);
 	if (!txblock)
 		goto out;

-	rxblock = kmalloc(sizeof(*rxblock), GFP_KERNEL);
+	rxblock = kmalloc_obj(*rxblock, GFP_KERNEL);
 	if (!rxblock)
 		goto out_free_txblock;

diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c
index 82f120ee1c66..23e5163acc9a 100644
--- a/drivers/net/wireless/ath/ath10k/ce.c
+++ b/drivers/net/wireless/ath/ath10k/ce.c
@@ -1461,8 +1461,8 @@ ath10k_ce_alloc_src_ring(struct ath10k *ar, unsigned int ce_id,

 	nentries = roundup_pow_of_two(nentries);

-	src_ring = kzalloc(struct_size(src_ring, per_transfer_context,
-				       nentries), GFP_KERNEL);
+	src_ring = kzalloc_flex(*src_ring, per_transfer_context, nentries,
+				GFP_KERNEL);
 	if (src_ring == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -1519,8 +1519,8 @@ ath10k_ce_alloc_src_ring_64(struct ath10k *ar, unsigned int ce_id,

 	nentries = roundup_pow_of_two(nentries);

-	src_ring = kzalloc(struct_size(src_ring, per_transfer_context,
-				       nentries), GFP_KERNEL);
+	src_ring = kzalloc_flex(*src_ring, per_transfer_context, nentries,
+				GFP_KERNEL);
 	if (!src_ring)
 		return ERR_PTR(-ENOMEM);

@@ -1575,8 +1575,8 @@ ath10k_ce_alloc_dest_ring(struct ath10k *ar, unsigned int ce_id,

 	nentries = roundup_pow_of_two(attr->dest_nentries);

-	dest_ring = kzalloc(struct_size(dest_ring, per_transfer_context,
-					nentries), GFP_KERNEL);
+	dest_ring = kzalloc_flex(*dest_ring, per_transfer_context, nentries,
+				 GFP_KERNEL);
 	if (dest_ring == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -1619,8 +1619,8 @@ ath10k_ce_alloc_dest_ring_64(struct ath10k *ar, unsigned int ce_id,

 	nentries = roundup_pow_of_two(attr->dest_nentries);

-	dest_ring = kzalloc(struct_size(dest_ring, per_transfer_context,
-					nentries), GFP_KERNEL);
+	dest_ring = kzalloc_flex(*dest_ring, per_transfer_context, nentries,
+				 GFP_KERNEL);
 	if (!dest_ring)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
index d7e429041065..bea2cd4e5ee4 100644
--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
@@ -807,8 +807,7 @@ int ath10k_htt_rx_alloc(struct ath10k_htt *htt)
 	}

 	htt->rx_ring.netbufs_ring =
-		kcalloc(htt->rx_ring.size, sizeof(struct sk_buff *),
-			GFP_KERNEL);
+		kzalloc_objs(struct sk_buff *, htt->rx_ring.size, GFP_KERNEL);
 	if (!htt->rx_ring.netbufs_ring)
 		goto err_netbuf;

diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index da6f7957a0ae..ef595a939bde 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -6431,7 +6431,7 @@ static int ath10k_hw_scan(struct ieee80211_hw *hw,
 	if (ret)
 		goto exit;

-	arg = kzalloc(sizeof(*arg), GFP_KERNEL);
+	arg = kzalloc_obj(*arg, GFP_KERNEL);
 	if (!arg) {
 		ret = -ENOMEM;
 		goto exit;
@@ -7559,8 +7559,8 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
 		}

 		if (ath10k_debug_is_extd_tx_stats_enabled(ar)) {
-			arsta->tx_stats = kzalloc(sizeof(*arsta->tx_stats),
-						  GFP_KERNEL);
+			arsta->tx_stats = kzalloc_obj(*arsta->tx_stats,
+						      GFP_KERNEL);
 			if (!arsta->tx_stats) {
 				ath10k_mac_dec_num_stations(arvif, sta);
 				ret = -ENOMEM;
@@ -7972,7 +7972,7 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw,

 	scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;

-	arg = kzalloc(sizeof(*arg), GFP_KERNEL);
+	arg = kzalloc_obj(*arg, GFP_KERNEL);
 	if (!arg) {
 		ret = -ENOMEM;
 		goto exit;
@@ -8954,8 +8954,7 @@ ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw,
 		if (arg.n_vifs == 0)
 			goto radar;

-		arg.vifs = kcalloc(arg.n_vifs, sizeof(arg.vifs[0]),
-				   GFP_KERNEL);
+		arg.vifs = kzalloc_objs(arg.vifs[0], arg.n_vifs, GFP_KERNEL);
 		if (!arg.vifs)
 			goto radar;

diff --git a/drivers/net/wireless/ath/ath10k/qmi.c b/drivers/net/wireless/ath/ath10k/qmi.c
index 8275345631a0..62c9ef500ee7 100644
--- a/drivers/net/wireless/ath/ath10k/qmi.c
+++ b/drivers/net/wireless/ath/ath10k/qmi.c
@@ -245,7 +245,7 @@ static int ath10k_qmi_bdf_dnld_send_sync(struct ath10k_qmi *qmi)
 	const u8 *temp;
 	int ret;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -437,7 +437,7 @@ ath10k_qmi_cfg_send_sync_msg(struct ath10k *ar,
 	int ret;
 	u32 i;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -578,7 +578,7 @@ static int ath10k_qmi_cap_send_sync_msg(struct ath10k_qmi *qmi)
 	struct qmi_txn txn;
 	int ret;

-	resp = kzalloc(sizeof(*resp), GFP_KERNEL);
+	resp = kzalloc_obj(*resp, GFP_KERNEL);
 	if (!resp)
 		return -ENOMEM;

@@ -877,7 +877,7 @@ ath10k_qmi_driver_event_post(struct ath10k_qmi *qmi,
 {
 	struct ath10k_qmi_driver_event *event;

-	event = kzalloc(sizeof(*event), GFP_ATOMIC);
+	event = kzalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return -ENOMEM;

@@ -1075,7 +1075,7 @@ int ath10k_qmi_init(struct ath10k *ar, u32 msa_size)
 	struct ath10k_qmi *qmi;
 	int ret;

-	qmi = kzalloc(sizeof(*qmi), GFP_KERNEL);
+	qmi = kzalloc_obj(*qmi, GFP_KERNEL);
 	if (!qmi)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath10k/sdio.c b/drivers/net/wireless/ath/ath10k/sdio.c
index 00d0556dafef..ff046cff7399 100644
--- a/drivers/net/wireless/ath/ath10k/sdio.c
+++ b/drivers/net/wireless/ath/ath10k/sdio.c
@@ -246,7 +246,7 @@ static int ath10k_sdio_writesb32(struct ath10k *ar, u32 addr, u32 val)
 	__le32 *buf;
 	int ret;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

@@ -1766,7 +1766,7 @@ static int ath10k_sdio_diag_read32(struct ath10k *ar, u32 address,
 	__le32 *val;
 	int ret;

-	val = kzalloc(sizeof(*val), GFP_KERNEL);
+	val = kzalloc_obj(*val, GFP_KERNEL);
 	if (!val)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath10k/txrx.c b/drivers/net/wireless/ath/ath10k/txrx.c
index 493bfb410aff..50a3498a0bfd 100644
--- a/drivers/net/wireless/ath/ath10k/txrx.c
+++ b/drivers/net/wireless/ath/ath10k/txrx.c
@@ -230,7 +230,7 @@ void ath10k_peer_map_event(struct ath10k_htt *htt,
 	spin_lock_bh(&ar->data_lock);
 	peer = ath10k_peer_find(ar, ev->vdev_id, ev->addr);
 	if (!peer) {
-		peer = kzalloc(sizeof(*peer), GFP_ATOMIC);
+		peer = kzalloc_obj(*peer, GFP_ATOMIC);
 		if (!peer)
 			goto exit;

diff --git a/drivers/net/wireless/ath/ath10k/usb.c b/drivers/net/wireless/ath/ath10k/usb.c
index 1732a4f98418..59969db56048 100644
--- a/drivers/net/wireless/ath/ath10k/usb.c
+++ b/drivers/net/wireless/ath/ath10k/usb.c
@@ -799,7 +799,7 @@ static int ath10k_usb_alloc_pipe_resources(struct ath10k *ar,
 	init_usb_anchor(&pipe->urb_submitted);

 	for (i = 0; i < urb_cnt; i++) {
-		urb_context = kzalloc(sizeof(*urb_context), GFP_KERNEL);
+		urb_context = kzalloc_obj(*urb_context, GFP_KERNEL);
 		if (!urb_context)
 			return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index 16d07d619b4d..ec8e91707f84 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -145,7 +145,7 @@ ath10k_wmi_tlv_parse_alloc(struct ath10k *ar, const void *ptr,
 	const void **tb;
 	int ret;

-	tb = kcalloc(WMI_TLV_TAG_MAX, sizeof(*tb), gfp);
+	tb = kzalloc_objs(*tb, WMI_TLV_TAG_MAX, gfp);
 	if (!tb)
 		return ERR_PTR(-ENOMEM);

@@ -1546,7 +1546,7 @@ static int ath10k_wmi_tlv_op_pull_fw_stats(struct ath10k *ar,
 		data += sizeof(*src);
 		data_len -= sizeof(*src);

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -1569,7 +1569,7 @@ static int ath10k_wmi_tlv_op_pull_fw_stats(struct ath10k *ar,
 		data += sizeof(*src);
 		data_len -= sizeof(*src);

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -1590,7 +1590,7 @@ static int ath10k_wmi_tlv_op_pull_fw_stats(struct ath10k *ar,
 		data += sizeof(*src);
 		data_len -= sizeof(*src);

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3063,7 +3063,7 @@ ath10k_wmi_mgmt_tx_alloc_msdu_id(struct ath10k *ar, struct sk_buff *skb,
 	struct ath10k_mgmt_tx_pkt_addr *pkt_addr;
 	int ret;

-	pkt_addr = kmalloc(sizeof(*pkt_addr), GFP_ATOMIC);
+	pkt_addr = kmalloc_obj(*pkt_addr, GFP_ATOMIC);
 	if (!pkt_addr)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index ce22141e5efd..0bdb38edd915 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -3046,7 +3046,7 @@ static int ath10k_wmi_main_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, sizeof(*src)))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3067,7 +3067,7 @@ static int ath10k_wmi_main_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, sizeof(*src)))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3100,7 +3100,7 @@ static int ath10k_wmi_10x_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, sizeof(*src)))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3122,7 +3122,7 @@ static int ath10k_wmi_10x_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, sizeof(*src)))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3161,7 +3161,7 @@ static int ath10k_wmi_10_2_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, sizeof(*src)))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3198,7 +3198,7 @@ static int ath10k_wmi_10_2_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, sizeof(*src)))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3238,7 +3238,7 @@ static int ath10k_wmi_10_2_4_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, sizeof(*src)))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3281,7 +3281,7 @@ static int ath10k_wmi_10_2_4_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, stats_len))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3330,7 +3330,7 @@ static int ath10k_wmi_10_4_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, sizeof(*src)))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3376,7 +3376,7 @@ static int ath10k_wmi_10_4_op_pull_fw_stats(struct ath10k *ar,
 		if (!skb_pull(skb, sizeof(*src)))
 			return -EPROTO;

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -3409,7 +3409,7 @@ static int ath10k_wmi_10_4_op_pull_fw_stats(struct ath10k *ar,
 			if (!skb_pull(skb, sizeof(*src)))
 				return -EPROTO;

-			dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+			dst = kzalloc_obj(*dst, GFP_ATOMIC);
 			if (!dst)
 				continue;

@@ -3429,7 +3429,7 @@ static int ath10k_wmi_10_4_op_pull_fw_stats(struct ath10k *ar,
 			if (!skb_pull(skb, sizeof(*src)))
 				return -EPROTO;

-			dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+			dst = kzalloc_obj(*dst, GFP_ATOMIC);
 			if (!dst)
 				continue;
 			ath10k_wmi_10_4_pull_vdev_stats(src, dst);
@@ -4912,7 +4912,7 @@ void ath10k_wmi_event_pdev_tpc_config(struct ath10k *ar, struct sk_buff *skb)
 		rate_max = WMI_TPC_RATE_MAX;
 	}

-	tpc_stats = kzalloc(sizeof(*tpc_stats), GFP_ATOMIC);
+	tpc_stats = kzalloc_obj(*tpc_stats, GFP_ATOMIC);
 	if (!tpc_stats)
 		return;

@@ -5168,7 +5168,7 @@ void ath10k_wmi_event_tpc_final_table(struct ath10k *ar, struct sk_buff *skb)
 		rate_max = WMI_TPC_FINAL_RATE_MAX;
 	}

-	tpc_stats = kzalloc(sizeof(*tpc_stats), GFP_ATOMIC);
+	tpc_stats = kzalloc_obj(*tpc_stats, GFP_ATOMIC);
 	if (!tpc_stats)
 		return;

diff --git a/drivers/net/wireless/ath/ath10k/wow.c b/drivers/net/wireless/ath/ath10k/wow.c
index aa7b2e703f3d..8b7f608b5265 100644
--- a/drivers/net/wireless/ath/ath10k/wow.c
+++ b/drivers/net/wireless/ath/ath10k/wow.c
@@ -301,7 +301,7 @@ static int ath10k_vif_wow_set_wakeups(struct ath10k_vif *arvif,
 			struct wmi_pno_scan_req *pno;
 			int ret;

-			pno = kzalloc(sizeof(*pno), GFP_KERNEL);
+			pno = kzalloc_obj(*pno, GFP_KERNEL);
 			if (!pno)
 				return -ENOMEM;

@@ -413,7 +413,7 @@ static int ath10k_vif_wow_clean_nlo(struct ath10k_vif *arvif)
 		if (ar->nlo_enabled) {
 			struct wmi_pno_scan_req *pno;

-			pno = kzalloc(sizeof(*pno), GFP_KERNEL);
+			pno = kzalloc_obj(*pno, GFP_KERNEL);
 			if (!pno)
 				return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath11k/ce.c b/drivers/net/wireless/ath/ath11k/ce.c
index a7a163621b21..b91f8bb9a81c 100644
--- a/drivers/net/wireless/ath/ath11k/ce.c
+++ b/drivers/net/wireless/ath/ath11k/ce.c
@@ -615,7 +615,7 @@ ath11k_ce_alloc_ring(struct ath11k_base *ab, int nentries, int desc_sz)
 	struct ath11k_ce_ring *ce_ring;
 	dma_addr_t base_addr;

-	ce_ring = kzalloc(struct_size(ce_ring, skb, nentries), GFP_KERNEL);
+	ce_ring = kzalloc_flex(*ce_ring, skb, nentries, GFP_KERNEL);
 	if (ce_ring == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/wireless/ath/ath11k/cfr.c b/drivers/net/wireless/ath/ath11k/cfr.c
index 61bf1c0884f7..61ac656ece07 100644
--- a/drivers/net/wireless/ath/ath11k/cfr.c
+++ b/drivers/net/wireless/ath/ath11k/cfr.c
@@ -975,8 +975,7 @@ int ath11k_cfr_init(struct ath11k_base *ab)
 		spin_lock_init(&cfr->lut_lock);

 		num_lut_entries = min_t(u32, CFR_MAX_LUT_ENTRIES, db_cap.min_elem);
-		cfr->lut = kcalloc(num_lut_entries, sizeof(*cfr->lut),
-				   GFP_KERNEL);
+		cfr->lut = kzalloc_objs(*cfr->lut, num_lut_entries, GFP_KERNEL);
 		if (!cfr->lut) {
 			ret = -ENOMEM;
 			goto err;
diff --git a/drivers/net/wireless/ath/ath11k/dbring.c b/drivers/net/wireless/ath/ath11k/dbring.c
index d6994ce6ebff..6ac18f8a1e5f 100644
--- a/drivers/net/wireless/ath/ath11k/dbring.c
+++ b/drivers/net/wireless/ath/ath11k/dbring.c
@@ -127,7 +127,7 @@ static int ath11k_dbring_fill_bufs(struct ath11k *ar,
 	size = ring->buf_sz + align - 1;

 	while (num_remain > 0) {
-		buff = kzalloc(sizeof(*buff), GFP_ATOMIC);
+		buff = kzalloc_obj(*buff, GFP_ATOMIC);
 		if (!buff)
 			break;

diff --git a/drivers/net/wireless/ath/ath11k/debugfs.c b/drivers/net/wireless/ath/ath11k/debugfs.c
index 50f344803e8f..9b8660e56a1a 100644
--- a/drivers/net/wireless/ath/ath11k/debugfs.c
+++ b/drivers/net/wireless/ath/ath11k/debugfs.c
@@ -1193,8 +1193,7 @@ static int ath11k_debugfs_dbr_dbg_init(struct ath11k *ar, int dbr_id)
 	if (ar->debug.dbr_debug[dbr_id])
 		return 0;

-	ar->debug.dbr_debug[dbr_id] = kzalloc(sizeof(*dbr_debug),
-					      GFP_KERNEL);
+	ar->debug.dbr_debug[dbr_id] = kzalloc_obj(*dbr_debug, GFP_KERNEL);

 	if (!ar->debug.dbr_debug[dbr_id])
 		return -ENOMEM;
@@ -1216,9 +1215,9 @@ static int ath11k_debugfs_dbr_dbg_init(struct ath11k *ar, int dbr_id)
 	dbr_debug->dbr_debug_enabled = true;
 	dbr_dbg_data->num_ring_debug_entries = ATH11K_DEBUG_DBR_ENTRIES_MAX;
 	dbr_dbg_data->dbr_debug_idx = 0;
-	dbr_dbg_data->entries = kcalloc(ATH11K_DEBUG_DBR_ENTRIES_MAX,
-					sizeof(struct ath11k_dbg_dbr_entry),
-					GFP_KERNEL);
+	dbr_dbg_data->entries = kzalloc_objs(struct ath11k_dbg_dbr_entry,
+					     ATH11K_DEBUG_DBR_ENTRIES_MAX,
+					     GFP_KERNEL);
 	if (!dbr_dbg_data->entries)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c
index b9e976ddcbbf..49d959b2e148 100644
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
@@ -772,7 +772,7 @@ static void ath11k_dp_rx_tid_del_func(struct ath11k_dp *dp, void *ctx,
 		return;
 	}

-	elem = kzalloc(sizeof(*elem), GFP_ATOMIC);
+	elem = kzalloc_obj(*elem, GFP_ATOMIC);
 	if (!elem)
 		goto free_desc;

@@ -1542,7 +1542,7 @@ struct htt_ppdu_stats_info *ath11k_dp_htt_get_ppdu_desc(struct ath11k *ar,
 		}
 	}

-	ppdu_info = kzalloc(sizeof(*ppdu_info), GFP_ATOMIC);
+	ppdu_info = kzalloc_obj(*ppdu_info, GFP_ATOMIC);
 	if (!ppdu_info)
 		return NULL;

@@ -5485,7 +5485,7 @@ static int ath11k_dp_rx_full_mon_prepare_mpdu(struct ath11k_dp *dp,
 					      struct sk_buff *head,
 					      struct sk_buff *tail)
 {
-	mon_mpdu = kzalloc(sizeof(*mon_mpdu), GFP_ATOMIC);
+	mon_mpdu = kzalloc_obj(*mon_mpdu, GFP_ATOMIC);
 	if (!mon_mpdu)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath11k/dp_tx.c b/drivers/net/wireless/ath/ath11k/dp_tx.c
index 86e1e6c27b36..9c2310665713 100644
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
@@ -796,7 +796,7 @@ int ath11k_dp_tx_send_reo_cmd(struct ath11k_base *ab, struct dp_rx_tid *rx_tid,
 	 * for tid delete command to free up the resource on the command status
 	 * indication?
 	 */
-	dp_cmd = kzalloc(sizeof(*dp_cmd), GFP_ATOMIC);
+	dp_cmd = kzalloc_obj(*dp_cmd, GFP_ATOMIC);

 	if (!dp_cmd)
 		return -ENOMEM;
diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index 4dfd08b58416..7ec87ea7620f 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -4221,7 +4221,7 @@ static int ath11k_mac_op_hw_scan(struct ieee80211_hw *hw,
 	if (ret)
 		goto exit;

-	arg = kzalloc(sizeof(*arg), GFP_KERNEL);
+	arg = kzalloc_obj(*arg, GFP_KERNEL);

 	if (!arg) {
 		ret = -ENOMEM;
@@ -7876,7 +7876,7 @@ ath11k_mac_update_active_vif_chan(struct ath11k *ar,
 	if (arg.n_vifs == 0)
 		return;

-	arg.vifs = kcalloc(arg.n_vifs, sizeof(arg.vifs[0]), GFP_KERNEL);
+	arg.vifs = kzalloc_objs(arg.vifs[0], arg.n_vifs, GFP_KERNEL);
 	if (!arg.vifs)
 		return;

@@ -9729,7 +9729,7 @@ static int ath11k_mac_op_remain_on_channel(struct ieee80211_hw *hw,

 	scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;

-	arg = kzalloc(sizeof(*arg), GFP_KERNEL);
+	arg = kzalloc_obj(*arg, GFP_KERNEL);
 	if (!arg) {
 		ret = -ENOMEM;
 		goto exit;
@@ -9823,7 +9823,7 @@ static int ath11k_mac_station_add(struct ath11k *ar,
 		arvif->reinstall_group_keys = false;
 	}

-	arsta->rx_stats = kzalloc(sizeof(*arsta->rx_stats), GFP_KERNEL);
+	arsta->rx_stats = kzalloc_obj(*arsta->rx_stats, GFP_KERNEL);
 	if (!arsta->rx_stats) {
 		ret = -ENOMEM;
 		goto dec_num_station;
@@ -9844,7 +9844,7 @@ static int ath11k_mac_station_add(struct ath11k *ar,
 		   sta->addr, arvif->vdev_id);

 	if (ath11k_debugfs_is_extd_tx_stats_enabled(ar)) {
-		arsta->tx_stats = kzalloc(sizeof(*arsta->tx_stats), GFP_KERNEL);
+		arsta->tx_stats = kzalloc_obj(*arsta->tx_stats, GFP_KERNEL);
 		if (!arsta->tx_stats) {
 			ret = -ENOMEM;
 			goto free_peer;
@@ -10278,7 +10278,7 @@ static void ath11k_mac_setup_mac_address_list(struct ath11k *ar)
 		return;

 	n_addresses = ar->ab->hw_params.num_vdevs;
-	addresses = kcalloc(n_addresses, sizeof(*addresses), GFP_KERNEL);
+	addresses = kzalloc_objs(*addresses, n_addresses, GFP_KERNEL);
 	if (!addresses)
 		return;

@@ -10310,7 +10310,7 @@ static int ath11k_mac_setup_iface_combinations(struct ath11k *ar)
 	else
 		n_combos = 1;

-	combinations = kcalloc(n_combos, sizeof(*combinations), GFP_KERNEL);
+	combinations = kzalloc_objs(*combinations, n_combos, GFP_KERNEL);
 	if (!combinations)
 		return -ENOMEM;

@@ -10319,7 +10319,7 @@ static int ath11k_mac_setup_iface_combinations(struct ath11k *ar)
 	else
 		n_limits = 2;

-	limits = kcalloc(n_limits, sizeof(*limits), GFP_KERNEL);
+	limits = kzalloc_objs(*limits, n_limits, GFP_KERNEL);
 	if (!limits) {
 		kfree(combinations);
 		return -ENOMEM;
diff --git a/drivers/net/wireless/ath/ath11k/mhi.c b/drivers/net/wireless/ath/ath11k/mhi.c
index d2c44f7f9b62..7cb91d23362f 100644
--- a/drivers/net/wireless/ath/ath11k/mhi.c
+++ b/drivers/net/wireless/ath/ath11k/mhi.c
@@ -207,7 +207,7 @@ static int ath11k_mhi_get_msi(struct ath11k_pci *ab_pci)
 	ath11k_dbg(ab, ATH11K_DBG_PCI, "num_vectors %d base_vector %d\n",
 		   num_vectors, base_vector);

-	irq = kcalloc(num_vectors, sizeof(int), GFP_KERNEL);
+	irq = kzalloc_objs(int, num_vectors, GFP_KERNEL);
 	if (!irq)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath11k/peer.c b/drivers/net/wireless/ath/ath11k/peer.c
index 6d0126c39301..027cc7aa58c8 100644
--- a/drivers/net/wireless/ath/ath11k/peer.c
+++ b/drivers/net/wireless/ath/ath11k/peer.c
@@ -125,7 +125,7 @@ void ath11k_peer_map_event(struct ath11k_base *ab, u8 vdev_id, u16 peer_id,
 	spin_lock_bh(&ab->base_lock);
 	peer = ath11k_peer_find(ab, vdev_id, mac_addr);
 	if (!peer) {
-		peer = kzalloc(sizeof(*peer), GFP_ATOMIC);
+		peer = kzalloc_obj(*peer, GFP_ATOMIC);
 		if (!peer)
 			goto exit;

diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c
index ff6a97e328b8..ea6f560abd98 100644
--- a/drivers/net/wireless/ath/ath11k/qmi.c
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
@@ -1799,11 +1799,11 @@ static int ath11k_qmi_fw_ind_register_send(struct ath11k_base *ab)
 	struct qmi_txn txn;
 	int ret;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

-	resp = kzalloc(sizeof(*resp), GFP_KERNEL);
+	resp = kzalloc_obj(*resp, GFP_KERNEL);
 	if (!resp) {
 		ret = -ENOMEM;
 		goto resp_out;
@@ -1878,7 +1878,7 @@ static int ath11k_qmi_respond_fw_mem_request(struct ath11k_base *ab)
 	int ret = 0, i;
 	bool delayed;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -2306,7 +2306,7 @@ static int ath11k_qmi_load_file_target_mem(struct ath11k_base *ab,
 	int ret = 0;
 	u32 remaining = len;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -2705,7 +2705,7 @@ static int ath11k_qmi_wlanfw_wlan_cfg_send(struct ath11k_base *ab)
 	ce_cfg	= (struct ce_pipe_config *)ab->qmi.ce_cfg.tgt_ce;
 	svc_cfg	= (struct service_to_pipe *)ab->qmi.ce_cfg.svc_to_ce_map;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -2929,7 +2929,7 @@ ath11k_qmi_driver_event_post(struct ath11k_qmi *qmi,
 {
 	struct ath11k_qmi_driver_event *event;

-	event = kzalloc(sizeof(*event), GFP_ATOMIC);
+	event = kzalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath11k/reg.c b/drivers/net/wireless/ath/ath11k/reg.c
index 49b79648752c..0cf830d97dbd 100644
--- a/drivers/net/wireless/ath/ath11k/reg.c
+++ b/drivers/net/wireless/ath/ath11k/reg.c
@@ -146,8 +146,7 @@ int ath11k_reg_update_chan_list(struct ath11k *ar, bool wait)
 	if (WARN_ON(!num_channels))
 		return -EINVAL;

-	params = kzalloc(struct_size(params, ch_param, num_channels),
-			 GFP_KERNEL);
+	params = kzalloc_flex(*params, ch_param, num_channels, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
index 451cc4c719ae..40747fba3b0c 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -249,7 +249,7 @@ const void **ath11k_wmi_tlv_parse_alloc(struct ath11k_base *ab,
 	const void **tb;
 	int ret;

-	tb = kcalloc(WMI_TAG_MAX, sizeof(*tb), gfp);
+	tb = kzalloc_objs(*tb, WMI_TAG_MAX, gfp);
 	if (!tb)
 		return ERR_PTR(-ENOMEM);

@@ -4918,9 +4918,8 @@ static int ath11k_wmi_tlv_ext_soc_hal_reg_caps_parse(struct ath11k_base *soc,
 	}

 	if (!soc->reg_info_store) {
-		soc->reg_info_store = kcalloc(soc->num_radios,
-					      sizeof(*soc->reg_info_store),
-					      GFP_ATOMIC);
+		soc->reg_info_store = kzalloc_objs(*soc->reg_info_store,
+						   soc->num_radios, GFP_ATOMIC);
 		if (!soc->reg_info_store)
 			return -ENOMEM;
 	}
@@ -5238,8 +5237,7 @@ static struct cur_reg_rule
 	struct cur_reg_rule *reg_rule_ptr;
 	u32 count;

-	reg_rule_ptr = kcalloc(num_reg_rules, sizeof(*reg_rule_ptr),
-			       GFP_ATOMIC);
+	reg_rule_ptr = kzalloc_objs(*reg_rule_ptr, num_reg_rules, GFP_ATOMIC);

 	if (!reg_rule_ptr)
 		return NULL;
@@ -5388,7 +5386,7 @@ static struct cur_reg_rule
 	struct cur_reg_rule *reg_rule_ptr;
 	u32 count;

-	reg_rule_ptr =  kcalloc(num_reg_rules, sizeof(*reg_rule_ptr), GFP_ATOMIC);
+	reg_rule_ptr =  kzalloc_objs(*reg_rule_ptr, num_reg_rules, GFP_ATOMIC);

 	if (!reg_rule_ptr)
 		return NULL;
@@ -6694,7 +6692,7 @@ static int ath11k_wmi_tlv_fw_stats_data_parse(struct ath11k_base *ab,
 		data += sizeof(*src);
 		len -= sizeof(*src);

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -6737,7 +6735,7 @@ static int ath11k_wmi_tlv_fw_stats_data_parse(struct ath11k_base *ab,
 		data += sizeof(*src);
 		len -= sizeof(*src);

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -6760,7 +6758,7 @@ static int ath11k_wmi_tlv_fw_stats_data_parse(struct ath11k_base *ab,
 		data += sizeof(*src);
 		len -= sizeof(*src);

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -7247,7 +7245,7 @@ static int ath11k_reg_chan_list_event(struct ath11k_base *ab, struct sk_buff *sk
 	struct cur_regulatory_info *reg_info;
 	int ret;

-	reg_info = kzalloc(sizeof(*reg_info), GFP_ATOMIC);
+	reg_info = kzalloc_obj(*reg_info, GFP_ATOMIC);
 	if (!reg_info)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath11k/wow.c b/drivers/net/wireless/ath/ath11k/wow.c
index b6f08755129f..7b696d1dd0e8 100644
--- a/drivers/net/wireless/ath/ath11k/wow.c
+++ b/drivers/net/wireless/ath/ath11k/wow.c
@@ -381,7 +381,7 @@ static int ath11k_vif_wow_set_wakeups(struct ath11k_vif *arvif,
 			struct wmi_pno_scan_req *pno;
 			int ret;

-			pno = kzalloc(sizeof(*pno), GFP_KERNEL);
+			pno = kzalloc_obj(*pno, GFP_KERNEL);
 			if (!pno)
 				return -ENOMEM;

@@ -495,7 +495,7 @@ static int ath11k_vif_wow_clean_nlo(struct ath11k_vif *arvif)
 		if (ar->nlo_enabled) {
 			struct wmi_pno_scan_req *pno;

-			pno = kzalloc(sizeof(*pno), GFP_KERNEL);
+			pno = kzalloc_obj(*pno, GFP_KERNEL);
 			if (!pno)
 				return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath12k/ce.c b/drivers/net/wireless/ath/ath12k/ce.c
index f13b260c5c96..1106671dc844 100644
--- a/drivers/net/wireless/ath/ath12k/ce.c
+++ b/drivers/net/wireless/ath/ath12k/ce.c
@@ -332,7 +332,7 @@ ath12k_ce_alloc_ring(struct ath12k_base *ab, int nentries, int desc_sz)
 	struct ath12k_ce_ring *ce_ring;
 	dma_addr_t base_addr;

-	ce_ring = kzalloc(struct_size(ce_ring, skb, nentries), GFP_KERNEL);
+	ce_ring = kzalloc_flex(*ce_ring, skb, nentries, GFP_KERNEL);
 	if (!ce_ring)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c
index 9d6c50a94e64..d9b41fc90dcd 100644
--- a/drivers/net/wireless/ath/ath12k/core.c
+++ b/drivers/net/wireless/ath/ath12k/core.c
@@ -1805,7 +1805,7 @@ static struct ath12k_hw_group *ath12k_core_hw_group_alloc(struct ath12k_base *ab
 	list_for_each_entry(ag, &ath12k_hw_group_list, list)
 		count++;

-	ag = kzalloc(sizeof(*ag), GFP_KERNEL);
+	ag = kzalloc_obj(*ag, GFP_KERNEL);
 	if (!ag)
 		return NULL;

diff --git a/drivers/net/wireless/ath/ath12k/dp.c b/drivers/net/wireless/ath/ath12k/dp.c
index ab54c8a84d3e..43f8ef03b1cf 100644
--- a/drivers/net/wireless/ath/ath12k/dp.c
+++ b/drivers/net/wireless/ath/ath12k/dp.c
@@ -407,9 +407,8 @@ static int ath12k_dp_init_bank_profiles(struct ath12k_base *ab)
 	int i;

 	dp->num_bank_profiles = num_tcl_banks;
-	dp->bank_profiles = kmalloc_array(num_tcl_banks,
-					  sizeof(struct ath12k_dp_tx_bank_profile),
-					  GFP_KERNEL);
+	dp->bank_profiles = kmalloc_objs(struct ath12k_dp_tx_bank_profile,
+					 num_tcl_banks, GFP_KERNEL);
 	if (!dp->bank_profiles)
 		return -ENOMEM;

@@ -1215,8 +1214,8 @@ static int ath12k_dp_cc_desc_init(struct ath12k_base *ab)

 	spin_lock_bh(&dp->rx_desc_lock);

-	dp->rxbaddr = kcalloc(num_rx_spt_pages,
-			      sizeof(struct ath12k_rx_desc_info *), GFP_ATOMIC);
+	dp->rxbaddr = kzalloc_objs(struct ath12k_rx_desc_info *,
+				   num_rx_spt_pages, GFP_ATOMIC);

 	if (!dp->rxbaddr) {
 		spin_unlock_bh(&dp->rx_desc_lock);
@@ -1227,8 +1226,8 @@ static int ath12k_dp_cc_desc_init(struct ath12k_base *ab)
 	 * RX
 	 */
 	for (i = 0; i < num_rx_spt_pages; i++) {
-		rx_descs = kcalloc(ATH12K_MAX_SPT_ENTRIES, sizeof(*rx_descs),
-				   GFP_ATOMIC);
+		rx_descs = kzalloc_objs(*rx_descs, ATH12K_MAX_SPT_ENTRIES,
+					GFP_ATOMIC);

 		if (!rx_descs) {
 			spin_unlock_bh(&dp->rx_desc_lock);
@@ -1253,8 +1252,8 @@ static int ath12k_dp_cc_desc_init(struct ath12k_base *ab)

 	spin_unlock_bh(&dp->rx_desc_lock);

-	dp->txbaddr = kcalloc(ATH12K_NUM_TX_SPT_PAGES(ab),
-			      sizeof(struct ath12k_tx_desc_info *), GFP_ATOMIC);
+	dp->txbaddr = kzalloc_objs(struct ath12k_tx_desc_info *,
+				   ATH12K_NUM_TX_SPT_PAGES(ab), GFP_ATOMIC);

 	if (!dp->txbaddr)
 		return -ENOMEM;
@@ -1262,8 +1261,9 @@ static int ath12k_dp_cc_desc_init(struct ath12k_base *ab)
 	for (pool_id = 0; pool_id < ATH12K_HW_MAX_QUEUES; pool_id++) {
 		spin_lock_bh(&dp->tx_desc_lock[pool_id]);
 		for (i = 0; i < ATH12K_TX_SPT_PAGES_PER_POOL(ab); i++) {
-			tx_descs = kcalloc(ATH12K_MAX_SPT_ENTRIES, sizeof(*tx_descs),
-					   GFP_ATOMIC);
+			tx_descs = kzalloc_objs(*tx_descs,
+						ATH12K_MAX_SPT_ENTRIES,
+						GFP_ATOMIC);

 			if (!tx_descs) {
 				spin_unlock_bh(&dp->tx_desc_lock[pool_id]);
@@ -1362,8 +1362,8 @@ static int ath12k_dp_cc_init(struct ath12k_base *ab)
 	if (dp->num_spt_pages > ATH12K_MAX_PPT_ENTRIES)
 		dp->num_spt_pages = ATH12K_MAX_PPT_ENTRIES;

-	dp->spt_info = kcalloc(dp->num_spt_pages, sizeof(struct ath12k_spt_info),
-			       GFP_KERNEL);
+	dp->spt_info = kzalloc_objs(struct ath12k_spt_info, dp->num_spt_pages,
+				    GFP_KERNEL);

 	if (!dp->spt_info) {
 		ath12k_warn(ab, "SPT page allocation failure");
diff --git a/drivers/net/wireless/ath/ath12k/dp_htt.c b/drivers/net/wireless/ath/ath12k/dp_htt.c
index cc71c5c5de5a..e71bb71a6020 100644
--- a/drivers/net/wireless/ath/ath12k/dp_htt.c
+++ b/drivers/net/wireless/ath/ath12k/dp_htt.c
@@ -386,7 +386,7 @@ struct htt_ppdu_stats_info *ath12k_dp_htt_get_ppdu_desc(struct ath12k_pdev_dp *d
 		}
 	}

-	ppdu_info = kzalloc(sizeof(*ppdu_info), GFP_ATOMIC);
+	ppdu_info = kzalloc_obj(*ppdu_info, GFP_ATOMIC);
 	if (!ppdu_info)
 		return NULL;

diff --git a/drivers/net/wireless/ath/ath12k/dp_peer.c b/drivers/net/wireless/ath/ath12k/dp_peer.c
index 2e66872b5572..95b5a4af4b2e 100644
--- a/drivers/net/wireless/ath/ath12k/dp_peer.c
+++ b/drivers/net/wireless/ath/ath12k/dp_peer.c
@@ -165,7 +165,7 @@ void ath12k_dp_link_peer_map_event(struct ath12k_base *ab, u8 vdev_id, u16 peer_
 	spin_lock_bh(&dp->dp_lock);
 	peer = ath12k_dp_link_peer_find_by_vdev_and_addr(dp, vdev_id, mac_addr);
 	if (!peer) {
-		peer = kzalloc(sizeof(*peer), GFP_ATOMIC);
+		peer = kzalloc_obj(*peer, GFP_ATOMIC);
 		if (!peer)
 			goto exit;

@@ -179,8 +179,8 @@ void ath12k_dp_link_peer_map_event(struct ath12k_base *ab, u8 vdev_id, u16 peer_
 		ar = ath12k_mac_get_ar_by_vdev_id(ab, vdev_id);
 		if (ar && ath12k_debugfs_is_extd_rx_stats_enabled(ar) &&
 		    !peer->peer_stats.rx_stats) {
-			peer->peer_stats.rx_stats =
-				kzalloc(sizeof(*peer->peer_stats.rx_stats), GFP_ATOMIC);
+			peer->peer_stats.rx_stats = kzalloc_obj(*peer->peer_stats.rx_stats,
+								GFP_ATOMIC);
 		}
 		rcu_read_unlock();

@@ -233,7 +233,7 @@ static int ath12k_dp_link_peer_rhash_addr_tbl_init(struct ath12k_dp *dp)

 	lockdep_assert_held(&dp->link_peer_rhash_tbl_lock);

-	rhash_addr_tbl = kzalloc(sizeof(*dp->rhead_peer_addr), GFP_KERNEL);
+	rhash_addr_tbl = kzalloc_obj(*dp->rhead_peer_addr, GFP_KERNEL);
 	if (!rhash_addr_tbl)
 		return -ENOMEM;

@@ -463,7 +463,7 @@ int ath12k_dp_peer_create(struct ath12k_dp_hw *dp_hw, u8 *addr,
 	}
 	spin_unlock_bh(&dp_hw->peer_lock);

-	dp_peer = kzalloc(sizeof(*dp_peer), GFP_ATOMIC);
+	dp_peer = kzalloc_obj(*dp_peer, GFP_ATOMIC);
 	if (!dp_peer)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index a32ee9f8061a..5a82ede65dd3 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -464,7 +464,7 @@ void ath12k_dp_rx_tid_del_func(struct ath12k_dp *dp, void *ctx,
 	ath12k_dp_rx_process_reo_cmd_update_rx_queue_list(dp);
 	spin_unlock_bh(&dp->dp_lock);

-	elem = kzalloc(sizeof(*elem), GFP_ATOMIC);
+	elem = kzalloc_obj(*elem, GFP_ATOMIC);
 	if (!elem)
 		goto free_desc;

@@ -565,7 +565,7 @@ static int ath12k_dp_prepare_reo_update_elem(struct ath12k_dp *dp,

 	lockdep_assert_held(&dp->dp_lock);

-	elem = kzalloc(sizeof(*elem), GFP_ATOMIC);
+	elem = kzalloc_obj(*elem, GFP_ATOMIC);
 	if (!elem)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
index 68431a0e128e..007c91dbb269 100644
--- a/drivers/net/wireless/ath/ath12k/mac.c
+++ b/drivers/net/wireless/ath/ath12k/mac.c
@@ -3838,7 +3838,7 @@ static void ath12k_bss_assoc(struct ath12k *ar,
 	lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);

 	struct ath12k_wmi_peer_assoc_arg *peer_arg __free(kfree) =
-					kzalloc(sizeof(*peer_arg), GFP_KERNEL);
+					kzalloc_obj(*peer_arg, GFP_KERNEL);
 	if (!peer_arg)
 		return;

@@ -4217,7 +4217,7 @@ static struct ath12k_link_vif *ath12k_mac_assign_link_vif(struct ath12k_hw *ah,
 		if (vif->type == NL80211_IFTYPE_STATION)
 			arvif->is_sta_assoc_link = true;
 	} else {
-		arvif = kzalloc(sizeof(*arvif), GFP_KERNEL);
+		arvif = kzalloc_obj(*arvif, GFP_KERNEL);
 		if (!arvif)
 			return NULL;
 	}
@@ -5024,7 +5024,8 @@ static struct ath12k_vif_cache *ath12k_ahvif_get_link_cache(struct ath12k_vif *a
 							    u8 link_id)
 {
 	if (!ahvif->cache[link_id]) {
-		ahvif->cache[link_id] = kzalloc(sizeof(*ahvif->cache[0]), GFP_KERNEL);
+		ahvif->cache[link_id] = kzalloc_obj(*ahvif->cache[0],
+						    GFP_KERNEL);
 		if (ahvif->cache[link_id])
 			INIT_LIST_HEAD(&ahvif->cache[link_id]->key_conf.list);
 	}
@@ -5602,7 +5603,7 @@ static int ath12k_mac_initiate_hw_scan(struct ieee80211_hw *hw,
 	if (ret)
 		goto exit;

-	arg = kzalloc(sizeof(*arg), GFP_KERNEL);
+	arg = kzalloc_obj(*arg, GFP_KERNEL);
 	if (!arg) {
 		ret = -ENOMEM;
 		goto exit;
@@ -5692,7 +5693,7 @@ int ath12k_mac_op_hw_scan(struct ieee80211_hw *hw,

 	lockdep_assert_wiphy(hw->wiphy);

-	chan_list = kcalloc(hw_req->req.n_channels, sizeof(*chan_list), GFP_KERNEL);
+	chan_list = kzalloc_objs(*chan_list, hw_req->req.n_channels, GFP_KERNEL);
 	if (!chan_list)
 		return -ENOMEM;

@@ -6122,7 +6123,7 @@ static int ath12k_mac_update_key_cache(struct ath12k_vif_cache *cache,
 	}

 	if (cmd == SET_KEY) {
-		key_conf = kzalloc(sizeof(*key_conf), GFP_KERNEL);
+		key_conf = kzalloc_obj(*key_conf, GFP_KERNEL);

 		if (!key_conf)
 			return -ENOMEM;
@@ -6456,7 +6457,7 @@ static int ath12k_mac_station_assoc(struct ath12k *ar,
 	mask = &arvif->bitrate_mask;

 	struct ath12k_wmi_peer_assoc_arg *peer_arg __free(kfree) =
-		kzalloc(sizeof(*peer_arg), GFP_KERNEL);
+		kzalloc_obj(*peer_arg, GFP_KERNEL);
 	if (!peer_arg)
 		return -ENOMEM;

@@ -6619,7 +6620,7 @@ static void ath12k_sta_rc_update_wk(struct wiphy *wiphy, struct wiphy_work *wk)
 	nss = min(nss, mac_nss);

 	struct ath12k_wmi_peer_assoc_arg *peer_arg __free(kfree) =
-					kzalloc(sizeof(*peer_arg), GFP_KERNEL);
+					kzalloc_obj(*peer_arg, GFP_KERNEL);
 	if (!peer_arg)
 		return;

@@ -7974,7 +7975,7 @@ static struct ath12k_link_sta *ath12k_mac_alloc_assign_link_sta(struct ath12k_hw
 	if (arsta)
 		return NULL;

-	arsta = kmalloc(sizeof(*arsta), GFP_KERNEL);
+	arsta = kmalloc_obj(*arsta, GFP_KERNEL);
 	if (!arsta)
 		return NULL;

@@ -11549,7 +11550,7 @@ ath12k_mac_update_active_vif_chan(struct ath12k *ar,
 	if (arg.n_vifs == 0)
 		return;

-	arg.vifs = kcalloc(arg.n_vifs, sizeof(arg.vifs[0]), GFP_KERNEL);
+	arg.vifs = kzalloc_objs(arg.vifs[0], arg.n_vifs, GFP_KERNEL);
 	if (!arg.vifs)
 		return;

@@ -13714,7 +13715,7 @@ int ath12k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
 	scan_time_msec = hw->wiphy->max_remain_on_channel_duration * 2;

 	struct ath12k_wmi_scan_req_arg *arg __free(kfree) =
-					kzalloc(sizeof(*arg), GFP_KERNEL);
+					kzalloc_obj(*arg, GFP_KERNEL);
 	if (!arg)
 		return -ENOMEM;

@@ -14122,7 +14123,7 @@ ath12k_mac_setup_radio_iface_comb(struct ath12k *ar,
 		max_interfaces = 1;
 	}

-	limits = kcalloc(n_limits, sizeof(*limits), GFP_KERNEL);
+	limits = kzalloc_objs(*limits, n_limits, GFP_KERNEL);
 	if (!limits)
 		return -ENOMEM;

@@ -14186,7 +14187,7 @@ ath12k_mac_setup_global_iface_comb(struct ath12k_hw *ah,
 	else
 		n_limits = 1;

-	limits = kcalloc(n_limits, sizeof(*limits), GFP_KERNEL);
+	limits = kzalloc_objs(*limits, n_limits, GFP_KERNEL);
 	if (!limits)
 		return -ENOMEM;

@@ -14249,8 +14250,8 @@ static int ath12k_mac_setup_iface_combinations(struct ath12k_hw *ah)
 		if (ar->ab->hw_params->single_pdev_only)
 			n_combinations = 2;

-		combinations = kcalloc(n_combinations, sizeof(*combinations),
-				       GFP_KERNEL);
+		combinations = kzalloc_objs(*combinations, n_combinations,
+					    GFP_KERNEL);
 		if (!combinations)
 			return -ENOMEM;

@@ -14271,20 +14272,20 @@ static int ath12k_mac_setup_iface_combinations(struct ath12k_hw *ah)
 		goto out;
 	}

-	combinations = kcalloc(n_combinations, sizeof(*combinations), GFP_KERNEL);
+	combinations = kzalloc_objs(*combinations, n_combinations, GFP_KERNEL);
 	if (!combinations)
 		return -ENOMEM;

 	/* there are multiple radios */

-	radio = kcalloc(ah->num_radio, sizeof(*radio), GFP_KERNEL);
+	radio = kzalloc_objs(*radio, ah->num_radio, GFP_KERNEL);
 	if (!radio) {
 		ret = -ENOMEM;
 		goto err_free_combinations;
 	}

 	for_each_ar(ah, ar, i) {
-		comb = kzalloc(sizeof(*comb), GFP_KERNEL);
+		comb = kzalloc_obj(*comb, GFP_KERNEL);
 		if (!comb) {
 			ret = -ENOMEM;
 			goto err_free_radios;
diff --git a/drivers/net/wireless/ath/ath12k/mhi.c b/drivers/net/wireless/ath/ath12k/mhi.c
index 45c0f66dcc5e..8f07c00c51a2 100644
--- a/drivers/net/wireless/ath/ath12k/mhi.c
+++ b/drivers/net/wireless/ath/ath12k/mhi.c
@@ -80,7 +80,7 @@ static int ath12k_mhi_get_msi(struct ath12k_pci *ab_pci)
 	ath12k_dbg(ab, ATH12K_DBG_PCI, "Number of assigned MSI for MHI is %d, base vector is %d\n",
 		   num_vectors, base_vector);

-	irq = kcalloc(num_vectors, sizeof(*irq), GFP_KERNEL);
+	irq = kzalloc_objs(*irq, num_vectors, GFP_KERNEL);
 	if (!irq)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath12k/peer.c b/drivers/net/wireless/ath/ath12k/peer.c
index 5f3bd3b9a3e9..ad571a4cf974 100644
--- a/drivers/net/wireless/ath/ath12k/peer.c
+++ b/drivers/net/wireless/ath/ath12k/peer.c
@@ -413,7 +413,7 @@ int ath12k_link_sta_rhash_tbl_init(struct ath12k_base *ab)
 	struct rhashtable *rhash_addr_tbl;
 	int ret;

-	rhash_addr_tbl = kzalloc(sizeof(*ab->rhead_sta_addr), GFP_KERNEL);
+	rhash_addr_tbl = kzalloc_obj(*ab->rhead_sta_addr, GFP_KERNEL);
 	if (!rhash_addr_tbl)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath12k/qmi.c b/drivers/net/wireless/ath/ath12k/qmi.c
index cfde4147c8fc..631041bf1dc1 100644
--- a/drivers/net/wireless/ath/ath12k/qmi.c
+++ b/drivers/net/wireless/ath/ath12k/qmi.c
@@ -2344,11 +2344,11 @@ static int ath12k_qmi_fw_ind_register_send(struct ath12k_base *ab)
 	struct qmi_txn txn;
 	int ret;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

-	resp = kzalloc(sizeof(*resp), GFP_KERNEL);
+	resp = kzalloc_obj(*resp, GFP_KERNEL);
 	if (!resp) {
 		ret = -ENOMEM;
 		goto resp_out;
@@ -2416,7 +2416,7 @@ int ath12k_qmi_respond_fw_mem_request(struct ath12k_base *ab)
 	int ret = 0, i;
 	bool delayed;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -2968,7 +2968,7 @@ static int ath12k_qmi_load_file_target_mem(struct ath12k_base *ab,
 	int ret = 0;
 	u32 remaining = len;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -3465,7 +3465,7 @@ static int ath12k_qmi_wlanfw_wlan_cfg_send(struct ath12k_base *ab)
 	ce_cfg	= (struct ce_pipe_config *)ab->qmi.ce_cfg.tgt_ce;
 	svc_cfg	= (struct service_to_pipe *)ab->qmi.ce_cfg.svc_to_ce_map;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -3636,7 +3636,7 @@ ath12k_qmi_driver_event_post(struct ath12k_qmi *qmi,
 {
 	struct ath12k_qmi_driver_event *event;

-	event = kzalloc(sizeof(*event), GFP_ATOMIC);
+	event = kzalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath12k/reg.c b/drivers/net/wireless/ath/ath12k/reg.c
index 7898f6981e5a..cd9ed489369e 100644
--- a/drivers/net/wireless/ath/ath12k/reg.c
+++ b/drivers/net/wireless/ath/ath12k/reg.c
@@ -170,7 +170,7 @@ int ath12k_reg_update_chan_list(struct ath12k *ar, bool wait)
 		return -EINVAL;
 	}

-	arg = kzalloc(struct_size(arg, channel, num_channels), GFP_KERNEL);
+	arg = kzalloc_flex(*arg, channel, num_channels, GFP_KERNEL);

 	if (!arg)
 		return -ENOMEM;
diff --git a/drivers/net/wireless/ath/ath12k/wifi7/dp.c b/drivers/net/wireless/ath/ath12k/wifi7/dp.c
index 2b194879ee80..8e0b83801346 100644
--- a/drivers/net/wireless/ath/ath12k/wifi7/dp.c
+++ b/drivers/net/wireless/ath/ath12k/wifi7/dp.c
@@ -161,7 +161,7 @@ struct ath12k_dp *ath12k_wifi7_dp_device_alloc(struct ath12k_base *ab)
 	struct ath12k_dp *dp;

 	/* TODO: align dp later if cache alignment becomes a bottleneck */
-	dp = kzalloc(sizeof(*dp), GFP_KERNEL);
+	dp = kzalloc_obj(*dp, GFP_KERNEL);
 	if (!dp)
 		return NULL;

diff --git a/drivers/net/wireless/ath/ath12k/wifi7/dp_mon.c b/drivers/net/wireless/ath/ath12k/wifi7/dp_mon.c
index bd741532b7dc..c9cea597a92e 100644
--- a/drivers/net/wireless/ath/ath12k/wifi7/dp_mon.c
+++ b/drivers/net/wireless/ath/ath12k/wifi7/dp_mon.c
@@ -1800,7 +1800,7 @@ ath12k_wifi7_dp_mon_parse_rx_dest_tlv(struct ath12k_pdev_dp *dp_pdev,
 		if (WARN_ON_ONCE(pmon->mon_mpdu))
 			break;

-		pmon->mon_mpdu = kzalloc(sizeof(*pmon->mon_mpdu), GFP_ATOMIC);
+		pmon->mon_mpdu = kzalloc_obj(*pmon->mon_mpdu, GFP_ATOMIC);
 		if (!pmon->mon_mpdu)
 			return -ENOMEM;
 		break;
@@ -1849,7 +1849,7 @@ ath12k_wifi7_dp_mon_tx_get_ppdu_info(struct ath12k_mon_data *pmon,
 	}

 	/* allocate new tx_ppdu_info */
-	tx_ppdu_info = kzalloc(sizeof(*tx_ppdu_info), GFP_ATOMIC);
+	tx_ppdu_info = kzalloc_obj(*tx_ppdu_info, GFP_ATOMIC);
 	if (!tx_ppdu_info)
 		return NULL;

@@ -2383,7 +2383,7 @@ ath12k_wifi7_dp_mon_tx_parse_status_tlv(struct ath12k_base *ab,
 	case HAL_TX_MPDU_START: {
 		struct dp_mon_mpdu *mon_mpdu = tx_ppdu_info->tx_mon_mpdu;

-		mon_mpdu = kzalloc(sizeof(*mon_mpdu), GFP_ATOMIC);
+		mon_mpdu = kzalloc_obj(*mon_mpdu, GFP_ATOMIC);
 		if (!mon_mpdu)
 			return DP_MON_TX_STATUS_PPDU_NOT_DONE;
 		status = DP_MON_TX_MPDU_START;
@@ -2853,7 +2853,7 @@ ath12k_wifi7_dp_rx_mon_dest_process(struct ath12k *ar, int mac_id,
 		}

 		if (head_msdu && tail_msdu) {
-			tmp_mpdu = kzalloc(sizeof(*tmp_mpdu), GFP_ATOMIC);
+			tmp_mpdu = kzalloc_obj(*tmp_mpdu, GFP_ATOMIC);
 			if (!tmp_mpdu)
 				break;

diff --git a/drivers/net/wireless/ath/ath12k/wifi7/dp_rx.c b/drivers/net/wireless/ath/ath12k/wifi7/dp_rx.c
index 7450938adf65..038e339e8fb1 100644
--- a/drivers/net/wireless/ath/ath12k/wifi7/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/wifi7/dp_rx.c
@@ -165,7 +165,7 @@ int ath12k_wifi7_dp_reo_cmd_send(struct ath12k_base *ab,
 	 * for tid delete command to free up the resource on the command status
 	 * indication?
 	 */
-	dp_cmd = kzalloc(sizeof(*dp_cmd), GFP_ATOMIC);
+	dp_cmd = kzalloc_obj(*dp_cmd, GFP_ATOMIC);

 	if (!dp_cmd)
 		return -ENOMEM;
diff --git a/drivers/net/wireless/ath/ath12k/wmi.c b/drivers/net/wireless/ath/ath12k/wmi.c
index 7617fc3a2479..eb7615a289f7 100644
--- a/drivers/net/wireless/ath/ath12k/wmi.c
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
@@ -303,7 +303,7 @@ ath12k_wmi_tlv_parse_alloc(struct ath12k_base *ab,
 	const void **tb;
 	int ret;

-	tb = kcalloc(WMI_TAG_MAX, sizeof(*tb), gfp);
+	tb = kzalloc_objs(*tb, WMI_TAG_MAX, gfp);
 	if (!tb)
 		return ERR_PTR(-ENOMEM);

@@ -6867,7 +6867,7 @@ static int ath12k_reg_chan_list_event(struct ath12k_base *ab, struct sk_buff *sk
 	u8 pdev_idx = 255;
 	int ret;

-	reg_info = kzalloc(sizeof(*reg_info), GFP_ATOMIC);
+	reg_info = kzalloc_obj(*reg_info, GFP_ATOMIC);
 	if (!reg_info) {
 		ret = -ENOMEM;
 		goto fallback;
@@ -8297,7 +8297,7 @@ static int ath12k_wmi_tlv_fw_stats_data_parse(struct ath12k_base *ab,

 		data += sizeof(*src);
 		len -= sizeof(*src);
-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;
 		ath12k_wmi_pull_vdev_stats(src, dst);
@@ -8316,7 +8316,7 @@ static int ath12k_wmi_tlv_fw_stats_data_parse(struct ath12k_base *ab,

 		data += sizeof(*src);
 		len -= sizeof(*src);
-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;
 		ath12k_wmi_pull_bcn_stats(src, dst);
@@ -8338,7 +8338,7 @@ static int ath12k_wmi_tlv_fw_stats_data_parse(struct ath12k_base *ab,
 		data += sizeof(*src);
 		len -= sizeof(*src);

-		dst = kzalloc(sizeof(*dst), GFP_ATOMIC);
+		dst = kzalloc_obj(*dst, GFP_ATOMIC);
 		if (!dst)
 			continue;

@@ -9559,8 +9559,7 @@ static void ath12k_wmi_process_tpc_stats(struct ath12k_base *ab,
 			goto unlock;
 		}
 		ar->debug.tpc_stats =
-			kzalloc(sizeof(struct wmi_tpc_stats_arg),
-				GFP_ATOMIC);
+			kzalloc_obj(struct wmi_tpc_stats_arg, GFP_ATOMIC);
 		if (!ar->debug.tpc_stats) {
 			ath12k_warn(ab,
 				    "Failed to allocate memory for tpc stats\n");
diff --git a/drivers/net/wireless/ath/ath12k/wow.c b/drivers/net/wireless/ath/ath12k/wow.c
index bb08e1740582..bdac483c58cf 100644
--- a/drivers/net/wireless/ath/ath12k/wow.c
+++ b/drivers/net/wireless/ath/ath12k/wow.c
@@ -395,7 +395,7 @@ static int ath12k_wow_vif_set_wakeups(struct ath12k_link_vif *arvif,
 			struct wmi_pno_scan_req_arg *pno;
 			int ret;

-			pno = kzalloc(sizeof(*pno), GFP_KERNEL);
+			pno = kzalloc_obj(*pno, GFP_KERNEL);
 			if (!pno)
 				return -ENOMEM;

@@ -507,7 +507,7 @@ static int ath12k_wow_vdev_clean_nlo(struct ath12k *ar, u32 vdev_id)
 	if (!ar->nlo_enabled)
 		return 0;

-	pno = kzalloc(sizeof(*pno), GFP_KERNEL);
+	pno = kzalloc_obj(*pno, GFP_KERNEL);
 	if (!pno)
 		return -ENOMEM;

@@ -748,7 +748,7 @@ static int ath12k_wow_arp_ns_offload(struct ath12k *ar, bool enable)

 	lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);

-	offload = kmalloc(sizeof(*offload), GFP_KERNEL);
+	offload = kmalloc_obj(*offload, GFP_KERNEL);
 	if (!offload)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 4d88b02ffa79..7b945a010ea1 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -919,8 +919,8 @@ ath5k_desc_alloc(struct ath5k_hw *ah)
 	ATH5K_DBG(ah, ATH5K_DEBUG_ANY, "DMA map: %p (%zu) -> %llx\n",
 		ds, ah->desc_len, (unsigned long long)ah->desc_daddr);

-	bf = kcalloc(1 + ATH_TXBUF + ATH_RXBUF + ATH_BCBUF,
-			sizeof(struct ath5k_buf), GFP_KERNEL);
+	bf = kzalloc_objs(struct ath5k_buf,
+			  1 + ATH_TXBUF + ATH_RXBUF + ATH_BCBUF, GFP_KERNEL);
 	if (bf == NULL) {
 		ATH5K_ERR(ah, "can't allocate bufptr\n");
 		ret = -ENOMEM;
diff --git a/drivers/net/wireless/ath/ath5k/debug.c b/drivers/net/wireless/ath/ath5k/debug.c
index ec130510aeb2..5e30316f4543 100644
--- a/drivers/net/wireless/ath/ath5k/debug.c
+++ b/drivers/net/wireless/ath/ath5k/debug.c
@@ -928,7 +928,7 @@ static int open_file_eeprom(struct inode *inode, struct file *file)

 	/* Create private struct and assign to file */

-	ep = kmalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kmalloc_obj(*ep, GFP_KERNEL);
 	if (!ep) {
 		ret = -ENOMEM;
 		goto freebuf;
diff --git a/drivers/net/wireless/ath/ath5k/eeprom.c b/drivers/net/wireless/ath/ath5k/eeprom.c
index 58d3e86f6256..a8b9c346c74b 100644
--- a/drivers/net/wireless/ath/ath5k/eeprom.c
+++ b/drivers/net/wireless/ath/ath5k/eeprom.c
@@ -727,9 +727,8 @@ ath5k_eeprom_convert_pcal_info_5111(struct ath5k_hw *ah, int mode,

 		/* Allocate pd_curves for this cal pier */
 		chinfo[pier].pd_curves =
-			kcalloc(AR5K_EEPROM_N_PD_CURVES,
-				sizeof(struct ath5k_pdgain_info),
-				GFP_KERNEL);
+			kzalloc_objs(struct ath5k_pdgain_info,
+				     AR5K_EEPROM_N_PD_CURVES, GFP_KERNEL);

 		if (!chinfo[pier].pd_curves)
 			goto err_out;
@@ -761,8 +760,8 @@ ath5k_eeprom_convert_pcal_info_5111(struct ath5k_hw *ah, int mode,
 		if (!pd->pd_step)
 			goto err_out;

-		pd->pd_pwr = kcalloc(AR5K_EEPROM_N_PWR_POINTS_5111,
-					sizeof(s16), GFP_KERNEL);
+		pd->pd_pwr = kzalloc_objs(s16, AR5K_EEPROM_N_PWR_POINTS_5111,
+					  GFP_KERNEL);
 		if (!pd->pd_pwr)
 			goto err_out;

@@ -917,9 +916,9 @@ ath5k_eeprom_convert_pcal_info_5112(struct ath5k_hw *ah, int mode,

 		/* Allocate pd_curves for this cal pier */
 		chinfo[pier].pd_curves =
-				kcalloc(AR5K_EEPROM_N_PD_CURVES,
-					sizeof(struct ath5k_pdgain_info),
-					GFP_KERNEL);
+				kzalloc_objs(struct ath5k_pdgain_info,
+					     AR5K_EEPROM_N_PD_CURVES,
+					     GFP_KERNEL);

 		if (!chinfo[pier].pd_curves)
 			goto err_out;
@@ -943,8 +942,8 @@ ath5k_eeprom_convert_pcal_info_5112(struct ath5k_hw *ah, int mode,
 				if (!pd->pd_step)
 					goto err_out;

-				pd->pd_pwr = kcalloc(pd->pd_points,
-						sizeof(s16), GFP_KERNEL);
+				pd->pd_pwr = kzalloc_objs(s16, pd->pd_points,
+							  GFP_KERNEL);

 				if (!pd->pd_pwr)
 					goto err_out;
@@ -981,8 +980,8 @@ ath5k_eeprom_convert_pcal_info_5112(struct ath5k_hw *ah, int mode,
 				if (!pd->pd_step)
 					goto err_out;

-				pd->pd_pwr = kcalloc(pd->pd_points,
-						sizeof(s16), GFP_KERNEL);
+				pd->pd_pwr = kzalloc_objs(s16, pd->pd_points,
+							  GFP_KERNEL);

 				if (!pd->pd_pwr)
 					goto err_out;
@@ -1209,9 +1208,9 @@ ath5k_eeprom_convert_pcal_info_2413(struct ath5k_hw *ah, int mode,

 		/* Allocate pd_curves for this cal pier */
 		chinfo[pier].pd_curves =
-				kcalloc(AR5K_EEPROM_N_PD_CURVES,
-					sizeof(struct ath5k_pdgain_info),
-					GFP_KERNEL);
+				kzalloc_objs(struct ath5k_pdgain_info,
+					     AR5K_EEPROM_N_PD_CURVES,
+					     GFP_KERNEL);

 		if (!chinfo[pier].pd_curves)
 			goto err_out;
@@ -1237,8 +1236,8 @@ ath5k_eeprom_convert_pcal_info_2413(struct ath5k_hw *ah, int mode,
 			if (!pd->pd_step)
 				goto err_out;

-			pd->pd_pwr = kcalloc(pd->pd_points,
-					sizeof(s16), GFP_KERNEL);
+			pd->pd_pwr = kzalloc_objs(s16, pd->pd_points,
+						  GFP_KERNEL);

 			if (!pd->pd_pwr)
 				goto err_out;
diff --git a/drivers/net/wireless/ath/ath6kl/core.c b/drivers/net/wireless/ath/ath6kl/core.c
index 830350bda531..8be852e832f3 100644
--- a/drivers/net/wireless/ath/ath6kl/core.c
+++ b/drivers/net/wireless/ath/ath6kl/core.c
@@ -311,7 +311,7 @@ struct ath6kl *ath6kl_core_create(struct device *dev)
 		ar->sta_list[ctr].mgmt_psq_len = 0;
 		INIT_LIST_HEAD(&ar->sta_list[ctr].mgmt_psq);
 		ar->sta_list[ctr].aggr_conn =
-			kzalloc(sizeof(struct aggr_info_conn), GFP_KERNEL);
+			kzalloc_obj(struct aggr_info_conn, GFP_KERNEL);
 		if (!ar->sta_list[ctr].aggr_conn) {
 			ath6kl_err("Failed to allocate memory for sta aggregation information\n");
 			ath6kl_core_destroy(ar);
diff --git a/drivers/net/wireless/ath/ath6kl/htc_mbox.c b/drivers/net/wireless/ath/ath6kl/htc_mbox.c
index 122e07ef3965..19dfeb012c04 100644
--- a/drivers/net/wireless/ath/ath6kl/htc_mbox.c
+++ b/drivers/net/wireless/ath/ath6kl/htc_mbox.c
@@ -2792,7 +2792,7 @@ static int ath6kl_htc_reset(struct htc_target *target)
 		      (HTC_MAX_CTRL_MSG_LEN + HTC_HDR_LENGTH);

 	for (i = 0; i < NUM_CONTROL_BUFFERS; i++) {
-		packet = kzalloc(sizeof(*packet), GFP_KERNEL);
+		packet = kzalloc_obj(*packet, GFP_KERNEL);
 		if (!packet)
 			return -ENOMEM;

@@ -2842,13 +2842,13 @@ static void *ath6kl_htc_mbox_create(struct ath6kl *ar)
 	struct htc_target *target = NULL;
 	int status = 0;

-	target = kzalloc(sizeof(*target), GFP_KERNEL);
+	target = kzalloc_obj(*target, GFP_KERNEL);
 	if (!target) {
 		ath6kl_err("unable to allocate memory\n");
 		return NULL;
 	}

-	target->dev = kzalloc(sizeof(*target->dev), GFP_KERNEL);
+	target->dev = kzalloc_obj(*target->dev, GFP_KERNEL);
 	if (!target->dev) {
 		ath6kl_err("unable to allocate memory\n");
 		kfree(target);
diff --git a/drivers/net/wireless/ath/ath6kl/htc_pipe.c b/drivers/net/wireless/ath/ath6kl/htc_pipe.c
index 7b823be9d846..ba8a701087c3 100644
--- a/drivers/net/wireless/ath/ath6kl/htc_pipe.c
+++ b/drivers/net/wireless/ath/ath6kl/htc_pipe.c
@@ -510,7 +510,7 @@ static struct htc_packet *build_htc_txctrl_packet(void)
 	struct htc_packet *packet = NULL;
 	struct sk_buff *skb;

-	packet = kzalloc(sizeof(struct htc_packet), GFP_KERNEL);
+	packet = kzalloc_obj(struct htc_packet, GFP_KERNEL);
 	if (packet == NULL)
 		return NULL;

@@ -1409,7 +1409,7 @@ static void *ath6kl_htc_pipe_create(struct ath6kl *ar)
 	struct htc_packet *packet;
 	int i;

-	target = kzalloc(sizeof(struct htc_target), GFP_KERNEL);
+	target = kzalloc_obj(struct htc_target, GFP_KERNEL);
 	if (target == NULL) {
 		ath6kl_err("htc create unable to allocate memory\n");
 		status = -ENOMEM;
@@ -1423,13 +1423,13 @@ static void *ath6kl_htc_pipe_create(struct ath6kl *ar)
 	reset_endpoint_states(target);

 	for (i = 0; i < HTC_PACKET_CONTAINER_ALLOCATION; i++) {
-		packet = kzalloc(sizeof(struct htc_packet), GFP_KERNEL);
+		packet = kzalloc_obj(struct htc_packet, GFP_KERNEL);

 		if (packet != NULL)
 			free_htc_packet_container(target, packet);
 	}

-	target->dev = kzalloc(sizeof(*target->dev), GFP_KERNEL);
+	target->dev = kzalloc_obj(*target->dev, GFP_KERNEL);
 	if (!target->dev) {
 		ath6kl_err("unable to allocate memory\n");
 		status = -ENOMEM;
diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c
index 59068ea3879b..908cb87842f7 100644
--- a/drivers/net/wireless/ath/ath6kl/main.c
+++ b/drivers/net/wireless/ath/ath6kl/main.c
@@ -485,7 +485,7 @@ void ath6kl_connect_ap_mode_sta(struct ath6kl_vif *vif, u16 aid, u8 *mac_addr,
 			   keymgmt, ucipher, auth, apsd_info);

 	/* send event to application */
-	sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
+	sinfo = kzalloc_obj(*sinfo, GFP_KERNEL);
 	if (!sinfo)
 		return;

@@ -1249,8 +1249,8 @@ static void ath6kl_set_multicast_list(struct net_device *ndev)
 		}

 		if (!found) {
-			mc_filter = kzalloc(sizeof(struct ath6kl_mc_filter),
-					    GFP_ATOMIC);
+			mc_filter = kzalloc_obj(struct ath6kl_mc_filter,
+						GFP_ATOMIC);
 			if (!mc_filter) {
 				WARN_ON(1);
 				goto out;
diff --git a/drivers/net/wireless/ath/ath6kl/sdio.c b/drivers/net/wireless/ath/ath6kl/sdio.c
index 83de40bc4445..c0a895ae882f 100644
--- a/drivers/net/wireless/ath/ath6kl/sdio.c
+++ b/drivers/net/wireless/ath/ath6kl/sdio.c
@@ -1316,7 +1316,7 @@ static int ath6kl_sdio_probe(struct sdio_func *func,
 		   func->num, func->vendor, func->device,
 		   func->max_blksize, func->cur_blksize);

-	ar_sdio = kzalloc(sizeof(struct ath6kl_sdio), GFP_KERNEL);
+	ar_sdio = kzalloc_obj(struct ath6kl_sdio, GFP_KERNEL);
 	if (!ar_sdio)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath6kl/txrx.c b/drivers/net/wireless/ath/ath6kl/txrx.c
index c3b06b515c4f..623d134c4be7 100644
--- a/drivers/net/wireless/ath/ath6kl/txrx.c
+++ b/drivers/net/wireless/ath/ath6kl/txrx.c
@@ -1770,13 +1770,13 @@ struct aggr_info *aggr_init(struct ath6kl_vif *vif)
 {
 	struct aggr_info *p_aggr = NULL;

-	p_aggr = kzalloc(sizeof(struct aggr_info), GFP_KERNEL);
+	p_aggr = kzalloc_obj(struct aggr_info, GFP_KERNEL);
 	if (!p_aggr) {
 		ath6kl_err("failed to alloc memory for aggr_node\n");
 		return NULL;
 	}

-	p_aggr->aggr_conn = kzalloc(sizeof(struct aggr_info_conn), GFP_KERNEL);
+	p_aggr->aggr_conn = kzalloc_obj(struct aggr_info_conn, GFP_KERNEL);
 	if (!p_aggr->aggr_conn) {
 		ath6kl_err("failed to alloc memory for connection specific aggr info\n");
 		kfree(p_aggr);
diff --git a/drivers/net/wireless/ath/ath6kl/usb.c b/drivers/net/wireless/ath/ath6kl/usb.c
index 38bb501fc553..9362ab82cc30 100644
--- a/drivers/net/wireless/ath/ath6kl/usb.c
+++ b/drivers/net/wireless/ath/ath6kl/usb.c
@@ -190,8 +190,7 @@ static int ath6kl_usb_alloc_pipe_resources(struct ath6kl_usb_pipe *pipe,
 	init_usb_anchor(&pipe->urb_submitted);

 	for (i = 0; i < urb_cnt; i++) {
-		urb_context = kzalloc(sizeof(struct ath6kl_urb_context),
-				      GFP_KERNEL);
+		urb_context = kzalloc_obj(struct ath6kl_urb_context, GFP_KERNEL);
 		if (urb_context == NULL) {
 			status = -ENOMEM;
 			goto fail_alloc_pipe_resources;
@@ -634,7 +633,7 @@ static struct ath6kl_usb *ath6kl_usb_create(struct usb_interface *interface)
 	int i;

 	/* ath6kl_usb_destroy() needs ar_usb != NULL && ar_usb->wq != NULL. */
-	ar_usb = kzalloc(sizeof(struct ath6kl_usb), GFP_KERNEL);
+	ar_usb = kzalloc_obj(struct ath6kl_usb, GFP_KERNEL);
 	if (ar_usb == NULL)
 		return NULL;
 	ar_usb->wq = alloc_workqueue("ath6kl_wq", 0, 0);
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
index 08a154bce139..c043ba9a2afa 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.c
+++ b/drivers/net/wireless/ath/ath6kl/wmi.c
@@ -4135,7 +4135,7 @@ void *ath6kl_wmi_init(struct ath6kl *dev)
 {
 	struct wmi *wmi;

-	wmi = kzalloc(sizeof(struct wmi), GFP_KERNEL);
+	wmi = kzalloc_obj(struct wmi, GFP_KERNEL);
 	if (!wmi)
 		return NULL;

diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
index fe9abe8cd268..c7e063482f55 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
@@ -107,7 +107,7 @@ static int hif_usb_send_regout(struct hif_device_usb *hif_dev,
 	if (urb == NULL)
 		return -ENOMEM;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL) {
 		usb_free_urb(urb);
 		return -ENOMEM;
@@ -190,7 +190,7 @@ static int hif_usb_send_mgmt(struct hif_device_usb *hif_dev,
 	if (urb == NULL)
 		return -ENOMEM;

-	cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
+	cmd = kzalloc_obj(*cmd, GFP_ATOMIC);
 	if (cmd == NULL) {
 		usb_free_urb(urb);
 		return -ENOMEM;
@@ -849,7 +849,7 @@ static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev)
 	init_usb_anchor(&hif_dev->mgmt_submitted);

 	for (i = 0; i < MAX_TX_URB_NUM; i++) {
-		tx_buf = kzalloc(sizeof(*tx_buf), GFP_KERNEL);
+		tx_buf = kzalloc_obj(*tx_buf, GFP_KERNEL);
 		if (!tx_buf)
 			goto err;

@@ -897,7 +897,7 @@ static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)

 	for (i = 0; i < MAX_RX_URB_NUM; i++) {

-		rx_buf = kzalloc(sizeof(*rx_buf), GFP_KERNEL);
+		rx_buf = kzalloc_obj(*rx_buf, GFP_KERNEL);
 		if (!rx_buf) {
 			ret = -ENOMEM;
 			goto err_rxb;
@@ -972,7 +972,7 @@ static int ath9k_hif_usb_alloc_reg_in_urbs(struct hif_device_usb *hif_dev)

 	for (i = 0; i < MAX_REG_IN_URB_NUM; i++) {

-		rx_buf = kzalloc(sizeof(*rx_buf), GFP_KERNEL);
+		rx_buf = kzalloc_obj(*rx_buf, GFP_KERNEL);
 		if (!rx_buf) {
 			ret = -ENOMEM;
 			goto err_rxb;
@@ -1376,7 +1376,7 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
 	if (id->driver_info == STORAGE_DEVICE)
 		return send_eject_command(interface);

-	hif_dev = kzalloc(sizeof(struct hif_device_usb), GFP_KERNEL);
+	hif_dev = kzalloc_obj(struct hif_device_usb, GFP_KERNEL);
 	if (!hif_dev) {
 		ret = -ENOMEM;
 		goto err_alloc;
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index 3633f9eb2c55..a57b1ca76891 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -611,7 +611,7 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv,
 	struct ath_common *common;
 	int i, ret = 0, csz = 0;

-	ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
+	ah = kzalloc_obj(struct ath_hw, GFP_KERNEL);
 	if (!ah)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
index ee5945cfc10e..20e1f9b72b16 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
@@ -664,8 +664,8 @@ void ath9k_htc_txstatus(struct ath9k_htc_priv *priv, void *wmi_event)
 			 * Store this event, so that the TX cleanup
 			 * routine can check later for the needed packet.
 			 */
-			tx_pend = kzalloc(sizeof(struct ath9k_htc_tx_event),
-					  GFP_ATOMIC);
+			tx_pend = kzalloc_obj(struct ath9k_htc_tx_event,
+					      GFP_ATOMIC);
 			if (!tx_pend)
 				continue;

@@ -1193,7 +1193,7 @@ int ath9k_rx_init(struct ath9k_htc_priv *priv)

 	for (i = 0; i < ATH9K_HTC_RXBUF; i++) {
 		struct ath9k_htc_rxbuf *rxbuf =
-			kzalloc(sizeof(struct ath9k_htc_rxbuf), GFP_KERNEL);
+			kzalloc_obj(struct ath9k_htc_rxbuf, GFP_KERNEL);
 		if (rxbuf == NULL)
 			goto err;

diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
index b5257b2b4aa5..a2fe131d8c00 100644
--- a/drivers/net/wireless/ath/ath9k/htc_hst.c
+++ b/drivers/net/wireless/ath/ath9k/htc_hst.c
@@ -499,7 +499,7 @@ struct htc_target *ath9k_htc_hw_alloc(void *hif_handle,
 	struct htc_endpoint *endpoint;
 	struct htc_target *target;

-	target = kzalloc(sizeof(struct htc_target), GFP_KERNEL);
+	target = kzalloc_obj(struct htc_target, GFP_KERNEL);
 	if (!target)
 		return NULL;

diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 14de62c1a32b..e7bf63d257b2 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -3128,7 +3128,7 @@ struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
 	    !AR_SREV_9300_20_OR_LATER(ah))
 		return NULL;

-	timer = kzalloc(sizeof(struct ath_gen_timer), GFP_KERNEL);
+	timer = kzalloc_obj(struct ath_gen_timer, GFP_KERNEL);
 	if (timer == NULL)
 		return NULL;

diff --git a/drivers/net/wireless/ath/ath9k/mci.c b/drivers/net/wireless/ath/ath9k/mci.c
index a0845002d6fe..f82bb2349928 100644
--- a/drivers/net/wireless/ath/ath9k/mci.c
+++ b/drivers/net/wireless/ath/ath9k/mci.c
@@ -53,7 +53,7 @@ static bool ath_mci_add_profile(struct ath_common *common,
 	    (info->type != MCI_GPM_COEX_PROFILE_VOICE))
 		return false;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return false;

diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c
index 805ad31edba2..2f56b9cc0ab8 100644
--- a/drivers/net/wireless/ath/ath9k/wmi.c
+++ b/drivers/net/wireless/ath/ath9k/wmi.c
@@ -92,7 +92,7 @@ struct wmi *ath9k_init_wmi(struct ath9k_htc_priv *priv)
 {
 	struct wmi *wmi;

-	wmi = kzalloc(sizeof(struct wmi), GFP_KERNEL);
+	wmi = kzalloc_obj(struct wmi, GFP_KERNEL);
 	if (!wmi)
 		return NULL;

diff --git a/drivers/net/wireless/ath/carl9170/cmd.c b/drivers/net/wireless/ath/carl9170/cmd.c
index b8ed193c0195..402fd0633e09 100644
--- a/drivers/net/wireless/ath/carl9170/cmd.c
+++ b/drivers/net/wireless/ath/carl9170/cmd.c
@@ -120,7 +120,7 @@ struct carl9170_cmd *carl9170_cmd_buf(struct ar9170 *ar,
 {
 	struct carl9170_cmd *tmp;

-	tmp = kzalloc(sizeof(*tmp), GFP_ATOMIC);
+	tmp = kzalloc_obj(*tmp, GFP_ATOMIC);
 	if (tmp) {
 		tmp->hdr.cmd = cmd;
 		tmp->hdr.len = len;
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c
index a7a9345f3483..3262a279746f 100644
--- a/drivers/net/wireless/ath/carl9170/main.c
+++ b/drivers/net/wireless/ath/carl9170/main.c
@@ -1412,8 +1412,7 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
 		if (!sta_info->ht_sta)
 			return -EOPNOTSUPP;

-		tid_info = kzalloc(sizeof(struct carl9170_sta_tid),
-				   GFP_KERNEL);
+		tid_info = kzalloc_obj(struct carl9170_sta_tid, GFP_KERNEL);
 		if (!tid_info)
 			return -ENOMEM;

diff --git a/drivers/net/wireless/ath/carl9170/tx.c b/drivers/net/wireless/ath/carl9170/tx.c
index b7717f9e1e9b..59caf1e4b158 100644
--- a/drivers/net/wireless/ath/carl9170/tx.c
+++ b/drivers/net/wireless/ath/carl9170/tx.c
@@ -1328,7 +1328,7 @@ static void carl9170_bar_check(struct ar9170 *ar, struct sk_buff *skb)
 		struct carl9170_bar_list_entry *entry;
 		unsigned int queue = skb_get_queue_mapping(skb);

-		entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+		entry = kmalloc_obj(*entry, GFP_ATOMIC);
 		if (!WARN_ON_ONCE(!entry)) {
 			entry->skb = skb;
 			spin_lock_bh(&ar->bar_list_lock[queue]);
diff --git a/drivers/net/wireless/ath/dfs_pattern_detector.c b/drivers/net/wireless/ath/dfs_pattern_detector.c
index 700da9f4531e..a798ff11183d 100644
--- a/drivers/net/wireless/ath/dfs_pattern_detector.c
+++ b/drivers/net/wireless/ath/dfs_pattern_detector.c
@@ -199,7 +199,7 @@ channel_detector_create(struct dfs_pattern_detector *dpd, u16 freq)
 	u32 i;
 	struct channel_detector *cd;

-	cd = kzalloc(struct_size(cd, detectors, dpd->num_radar_types), GFP_ATOMIC);
+	cd = kzalloc_flex(*cd, detectors, dpd->num_radar_types, GFP_ATOMIC);
 	if (cd == NULL)
 		goto fail;

@@ -354,7 +354,7 @@ dfs_pattern_detector_init(struct ath_common *common,
 	if (!IS_ENABLED(CONFIG_CFG80211_CERTIFICATION_ONUS))
 		return NULL;

-	dpd = kmalloc(sizeof(*dpd), GFP_KERNEL);
+	dpd = kmalloc_obj(*dpd, GFP_KERNEL);
 	if (dpd == NULL)
 		return NULL;

diff --git a/drivers/net/wireless/ath/dfs_pri_detector.c b/drivers/net/wireless/ath/dfs_pri_detector.c
index d07c454c9c00..388f9d1913bd 100644
--- a/drivers/net/wireless/ath/dfs_pri_detector.c
+++ b/drivers/net/wireless/ath/dfs_pri_detector.c
@@ -202,7 +202,7 @@ static bool pulse_queue_enqueue(struct pri_detector *pde, u64 ts)
 {
 	struct pulse_elem *p = pool_get_pulse_elem();
 	if (p == NULL) {
-		p = kmalloc(sizeof(*p), GFP_ATOMIC);
+		p = kmalloc_obj(*p, GFP_ATOMIC);
 		if (p == NULL) {
 			DFS_POOL_STAT_INC(pulse_alloc_error);
 			return false;
@@ -284,7 +284,7 @@ static bool pseq_handler_create_sequences(struct pri_detector *pde,
 		ps.deadline_ts = ps.first_ts + ps.dur;
 		new_ps = pool_get_pseq_elem();
 		if (new_ps == NULL) {
-			new_ps = kmalloc(sizeof(*new_ps), GFP_ATOMIC);
+			new_ps = kmalloc_obj(*new_ps, GFP_ATOMIC);
 			if (new_ps == NULL) {
 				DFS_POOL_STAT_INC(pseq_alloc_error);
 				return false;
@@ -418,7 +418,7 @@ struct pri_detector *pri_detector_init(const struct radar_detector_specs *rs)
 {
 	struct pri_detector *de;

-	de = kzalloc(sizeof(*de), GFP_ATOMIC);
+	de = kzalloc_obj(*de, GFP_ATOMIC);
 	if (de == NULL)
 		return NULL;
 	de->exit = pri_detector_exit;
diff --git a/drivers/net/wireless/ath/wcn36xx/dxe.c b/drivers/net/wireless/ath/wcn36xx/dxe.c
index 0f4df5585fd9..c6ec7a296240 100644
--- a/drivers/net/wireless/ath/wcn36xx/dxe.c
+++ b/drivers/net/wireless/ath/wcn36xx/dxe.c
@@ -74,7 +74,7 @@ static int wcn36xx_dxe_allocate_ctl_block(struct wcn36xx_dxe_ch *ch)

 	spin_lock_init(&ch->lock);
 	for (i = 0; i < ch->desc_num; i++) {
-		cur_ctl = kzalloc(sizeof(*cur_ctl), GFP_KERNEL);
+		cur_ctl = kzalloc_obj(*cur_ctl, GFP_KERNEL);
 		if (!cur_ctl)
 			goto out_fail;

diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index 02a525645bfa..c3f0860873de 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -462,7 +462,7 @@ static u64 wcn36xx_prepare_multicast(struct ieee80211_hw *hw,
 	struct netdev_hw_addr *ha;

 	wcn36xx_dbg(WCN36XX_DBG_MAC, "mac prepare multicast list\n");
-	fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
+	fp = kzalloc_obj(*fp, GFP_ATOMIC);
 	if (!fp) {
 		wcn36xx_err("Out of memory setting filters.\n");
 		return 0;
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index 136acc414714..f9ebe13d0245 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -847,7 +847,7 @@ int wcn36xx_smd_start_hw_scan(struct wcn36xx *wcn, struct ieee80211_vif *vif,
 		return -EINVAL;

 	mutex_lock(&wcn->hal_mutex);
-	msg_body = kzalloc(sizeof(*msg_body), GFP_KERNEL);
+	msg_body = kzalloc_obj(*msg_body, GFP_KERNEL);
 	if (!msg_body) {
 		ret = -ENOMEM;
 		goto out;
@@ -942,7 +942,7 @@ int wcn36xx_smd_update_channel_list(struct wcn36xx *wcn, struct cfg80211_scan_re
 	struct wcn36xx_hal_update_channel_list_req_msg *msg_body;
 	int ret, i;

-	msg_body = kzalloc(sizeof(*msg_body), GFP_KERNEL);
+	msg_body = kzalloc_obj(*msg_body, GFP_KERNEL);
 	if (!msg_body)
 		return -ENOMEM;

@@ -1624,7 +1624,7 @@ static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn,
 	struct cfg80211_chan_def *chandef;
 	int ret;

-	msg_body = kzalloc(sizeof(*msg_body), GFP_KERNEL);
+	msg_body = kzalloc_obj(*msg_body, GFP_KERNEL);
 	if (!msg_body)
 		return -ENOMEM;

@@ -1744,7 +1744,7 @@ static int wcn36xx_smd_config_bss_v0(struct wcn36xx *wcn,
 	struct wcn36xx_hal_config_sta_params *sta_params;
 	int ret;

-	msg = kzalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kzalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

@@ -3306,7 +3306,7 @@ int wcn36xx_smd_rsp_process(struct rpmsg_device *rpdev,
 	case WCN36XX_HAL_DELETE_STA_CONTEXT_IND:
 	case WCN36XX_HAL_PRINT_REG_INFO_IND:
 	case WCN36XX_HAL_SCAN_OFFLOAD_IND:
-		msg_ind = kmalloc(struct_size(msg_ind, msg, len), GFP_ATOMIC);
+		msg_ind = kmalloc_flex(*msg_ind, msg, len, GFP_ATOMIC);
 		if (!msg_ind) {
 			wcn36xx_err("Run out of memory while handling SMD_EVENT (%d)\n",
 				    msg_header->msg_type);
diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index 7218fe70f3bc..e0f39ef9ac78 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -691,7 +691,7 @@ wil_cfg80211_add_iface(struct wiphy *wiphy, const char *name,
 			return ERR_PTR(-EINVAL);
 		}

-		p2p_wdev = kzalloc(sizeof(*p2p_wdev), GFP_KERNEL);
+		p2p_wdev = kzalloc_obj(*p2p_wdev, GFP_KERNEL);
 		if (!p2p_wdev)
 			return ERR_PTR(-ENOMEM);

@@ -2394,7 +2394,7 @@ static int wil_cfg80211_probe_client(struct wiphy *wiphy,
 	if (cid < 0)
 		return -ENOLINK;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/wil6210/debugfs.c b/drivers/net/wireless/ath/wil6210/debugfs.c
index c021ebcddee7..2e5c24245e6a 100644
--- a/drivers/net/wireless/ath/wil6210/debugfs.c
+++ b/drivers/net/wireless/ath/wil6210/debugfs.c
@@ -1392,7 +1392,7 @@ static int link_show(struct seq_file *s, void *data)
 	struct station_info *sinfo;
 	int i, rc = 0;

-	sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
+	sinfo = kzalloc_obj(*sinfo, GFP_KERNEL);
 	if (!sinfo)
 		return -ENOMEM;

@@ -2441,9 +2441,8 @@ int wil6210_debugfs_init(struct wil6210_priv *wil)
 	if (IS_ERR_OR_NULL(dbg))
 		return -ENODEV;

-	wil->dbg_data.data_arr = kcalloc(dbg_off_count,
-					 sizeof(struct wil_debugfs_iomem_data),
-					 GFP_KERNEL);
+	wil->dbg_data.data_arr = kzalloc_objs(struct wil_debugfs_iomem_data,
+					      dbg_off_count, GFP_KERNEL);
 	if (!wil->dbg_data.data_arr) {
 		debugfs_remove_recursive(dbg);
 		wil->debug = NULL;
diff --git a/drivers/net/wireless/ath/wil6210/fw_inc.c b/drivers/net/wireless/ath/wil6210/fw_inc.c
index c3c0b289dcf3..bc172f5a70c9 100644
--- a/drivers/net/wireless/ath/wil6210/fw_inc.c
+++ b/drivers/net/wireless/ath/wil6210/fw_inc.c
@@ -160,8 +160,8 @@ fw_handle_brd_file(struct wil6210_priv *wil, const void *data,
 		return -EINVAL;
 	}

-	wil->brd_info = kcalloc(max_num_ent, sizeof(struct wil_brd_info),
-				GFP_KERNEL);
+	wil->brd_info = kzalloc_objs(struct wil_brd_info, max_num_ent,
+				     GFP_KERNEL);
 	if (!wil->brd_info)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ath/wil6210/pmc.c b/drivers/net/wireless/ath/wil6210/pmc.c
index a2f7b4c1da48..8d368c901122 100644
--- a/drivers/net/wireless/ath/wil6210/pmc.c
+++ b/drivers/net/wireless/ath/wil6210/pmc.c
@@ -85,9 +85,8 @@ void wil_pmc_alloc(struct wil6210_priv *wil,
 		     num_descriptors, descriptor_size);

 	/* allocate descriptors info list in pmc context*/
-	pmc->descriptors = kcalloc(num_descriptors,
-				  sizeof(struct desc_alloc_info),
-				  GFP_KERNEL);
+	pmc->descriptors = kzalloc_objs(struct desc_alloc_info, num_descriptors,
+					GFP_KERNEL);
 	if (!pmc->descriptors) {
 		wil_err(wil, "ERROR allocating pmc skb list\n");
 		goto no_release_err;
diff --git a/drivers/net/wireless/ath/wil6210/rx_reorder.c b/drivers/net/wireless/ath/wil6210/rx_reorder.c
index d385bc03033a..75bf9dbbf23a 100644
--- a/drivers/net/wireless/ath/wil6210/rx_reorder.c
+++ b/drivers/net/wireless/ath/wil6210/rx_reorder.c
@@ -241,13 +241,13 @@ void wil_rx_bar(struct wil6210_priv *wil, struct wil6210_vif *vif,
 struct wil_tid_ampdu_rx *wil_tid_ampdu_rx_alloc(struct wil6210_priv *wil,
 						int size, u16 ssn)
 {
-	struct wil_tid_ampdu_rx *r = kzalloc(sizeof(*r), GFP_KERNEL);
+	struct wil_tid_ampdu_rx *r = kzalloc_obj(*r, GFP_KERNEL);

 	if (!r)
 		return NULL;

 	r->reorder_buf =
-		kcalloc(size, sizeof(struct sk_buff *), GFP_KERNEL);
+		kzalloc_objs(struct sk_buff *, size, GFP_KERNEL);
 	if (!r->reorder_buf) {
 		kfree(r);
 		return NULL;
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
index 19702b6f09c3..e11f30a7bb48 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.c
+++ b/drivers/net/wireless/ath/wil6210/txrx.c
@@ -119,7 +119,7 @@ static int wil_vring_alloc(struct wil6210_priv *wil, struct wil_ring *vring)

 	vring->swhead = 0;
 	vring->swtail = 0;
-	vring->ctx = kcalloc(vring->size, sizeof(vring->ctx[0]), GFP_KERNEL);
+	vring->ctx = kzalloc_objs(vring->ctx[0], vring->size, GFP_KERNEL);
 	if (!vring->ctx) {
 		vring->va = NULL;
 		return -ENOMEM;
diff --git a/drivers/net/wireless/ath/wil6210/txrx_edma.c b/drivers/net/wireless/ath/wil6210/txrx_edma.c
index 1ba1f21ebea2..e391951346c2 100644
--- a/drivers/net/wireless/ath/wil6210/txrx_edma.c
+++ b/drivers/net/wireless/ath/wil6210/txrx_edma.c
@@ -314,9 +314,8 @@ static int wil_init_rx_buff_arr(struct wil6210_priv *wil,
 	struct list_head *free = &wil->rx_buff_mgmt.free;
 	int i;

-	wil->rx_buff_mgmt.buff_arr = kcalloc(size + 1,
-					     sizeof(struct wil_rx_buff),
-					     GFP_KERNEL);
+	wil->rx_buff_mgmt.buff_arr = kzalloc_objs(struct wil_rx_buff, size + 1,
+						  GFP_KERNEL);
 	if (!wil->rx_buff_mgmt.buff_arr)
 		return -ENOMEM;

@@ -382,7 +381,7 @@ static int wil_ring_alloc_desc_ring(struct wil6210_priv *wil,

 	ring->swhead = 0;
 	ring->swtail = 0;
-	ring->ctx = kcalloc(ring->size, sizeof(ring->ctx[0]), GFP_KERNEL);
+	ring->ctx = kzalloc_objs(ring->ctx[0], ring->size, GFP_KERNEL);
 	if (!ring->ctx)
 		goto err;

diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
index 6d376f85fbde..69f9fb19f01b 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.c
+++ b/drivers/net/wireless/ath/wil6210/wmi.c
@@ -1080,7 +1080,7 @@ static void wmi_evt_connect(struct wil6210_vif *vif, int id, void *d, int len)
 			goto out;
 		}

-		sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
+		sinfo = kzalloc_obj(*sinfo, GFP_KERNEL);
 		if (!sinfo) {
 			rc = -ENOMEM;
 			goto out;
diff --git a/drivers/net/wireless/atmel/at76c50x-usb.c b/drivers/net/wireless/atmel/at76c50x-usb.c
index aa683eacaf38..11554306a5f3 100644
--- a/drivers/net/wireless/atmel/at76c50x-usb.c
+++ b/drivers/net/wireless/atmel/at76c50x-usb.c
@@ -378,7 +378,7 @@ static int at76_usbdfu_download(struct usb_device *udev, u8 *buf, u32 size,
 		return -EINVAL;
 	}

-	dfu_stat_buf = kmalloc(sizeof(*dfu_stat_buf), GFP_KERNEL);
+	dfu_stat_buf = kmalloc_obj(*dfu_stat_buf, GFP_KERNEL);
 	if (!dfu_stat_buf) {
 		ret = -ENOMEM;
 		goto exit;
@@ -607,7 +607,7 @@ static inline int at76_get_hw_cfg_intersil(struct usb_device *udev,
 static int at76_get_hw_config(struct at76_priv *priv)
 {
 	int ret;
-	union at76_hwcfg *hwcfg = kmalloc(sizeof(*hwcfg), GFP_KERNEL);
+	union at76_hwcfg *hwcfg = kmalloc_obj(*hwcfg, GFP_KERNEL);

 	if (!hwcfg)
 		return -ENOMEM;
@@ -931,7 +931,7 @@ static void at76_dump_mib_mac_addr(struct at76_priv *priv)
 {
 	int i;
 	int ret;
-	struct mib_mac_addr *m = kmalloc(sizeof(*m), GFP_KERNEL);
+	struct mib_mac_addr *m = kmalloc_obj(*m, GFP_KERNEL);

 	if (!m)
 		return;
@@ -959,7 +959,7 @@ static void at76_dump_mib_mac_wep(struct at76_priv *priv)
 	int i;
 	int ret;
 	int key_len;
-	struct mib_mac_wep *m = kmalloc(sizeof(*m), GFP_KERNEL);
+	struct mib_mac_wep *m = kmalloc_obj(*m, GFP_KERNEL);

 	if (!m)
 		return;
@@ -994,7 +994,7 @@ static void at76_dump_mib_mac_wep(struct at76_priv *priv)
 static void at76_dump_mib_mac_mgmt(struct at76_priv *priv)
 {
 	int ret;
-	struct mib_mac_mgmt *m = kmalloc(sizeof(*m), GFP_KERNEL);
+	struct mib_mac_mgmt *m = kmalloc_obj(*m, GFP_KERNEL);

 	if (!m)
 		return;
@@ -1030,7 +1030,7 @@ static void at76_dump_mib_mac_mgmt(struct at76_priv *priv)
 static void at76_dump_mib_mac(struct at76_priv *priv)
 {
 	int ret;
-	struct mib_mac *m = kmalloc(sizeof(*m), GFP_KERNEL);
+	struct mib_mac *m = kmalloc_obj(*m, GFP_KERNEL);

 	if (!m)
 		return;
@@ -1067,7 +1067,7 @@ static void at76_dump_mib_mac(struct at76_priv *priv)
 static void at76_dump_mib_phy(struct at76_priv *priv)
 {
 	int ret;
-	struct mib_phy *m = kmalloc(sizeof(*m), GFP_KERNEL);
+	struct mib_phy *m = kmalloc_obj(*m, GFP_KERNEL);

 	if (!m)
 		return;
@@ -1100,7 +1100,7 @@ static void at76_dump_mib_phy(struct at76_priv *priv)
 static void at76_dump_mib_local(struct at76_priv *priv)
 {
 	int ret;
-	struct mib_local *m = kmalloc(sizeof(*m), GFP_KERNEL);
+	struct mib_local *m = kmalloc_obj(*m, GFP_KERNEL);

 	if (!m)
 		return;
@@ -1125,7 +1125,7 @@ static void at76_dump_mib_local(struct at76_priv *priv)
 static void at76_dump_mib_mdomain(struct at76_priv *priv)
 {
 	int ret;
-	struct mib_mdomain *m = kmalloc(sizeof(*m), GFP_KERNEL);
+	struct mib_mdomain *m = kmalloc_obj(*m, GFP_KERNEL);

 	if (!m)
 		return;
@@ -2442,7 +2442,7 @@ static int at76_probe(struct usb_interface *interface,

 	udev = usb_get_dev(interface_to_usbdev(interface));

-	fwv = kmalloc(sizeof(*fwv), GFP_KERNEL);
+	fwv = kmalloc_obj(*fwv, GFP_KERNEL);
 	if (!fwv) {
 		ret = -ENOMEM;
 		goto exit;
diff --git a/drivers/net/wireless/broadcom/b43/bus.c b/drivers/net/wireless/broadcom/b43/bus.c
index fdb1c82892d6..b6c8697f782b 100644
--- a/drivers/net/wireless/broadcom/b43/bus.c
+++ b/drivers/net/wireless/broadcom/b43/bus.c
@@ -74,7 +74,7 @@ void b43_bus_bcma_block_write(struct b43_bus_dev *dev, const void *buffer,

 struct b43_bus_dev *b43_bus_dev_bcma_init(struct bcma_device *core)
 {
-	struct b43_bus_dev *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	struct b43_bus_dev *dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

@@ -179,7 +179,7 @@ struct b43_bus_dev *b43_bus_dev_ssb_init(struct ssb_device *sdev)
 {
 	struct b43_bus_dev *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/drivers/net/wireless/broadcom/b43/debugfs.c b/drivers/net/wireless/broadcom/b43/debugfs.c
index 5a49970afc8c..aa6768a66b03 100644
--- a/drivers/net/wireless/broadcom/b43/debugfs.c
+++ b/drivers/net/wireless/broadcom/b43/debugfs.c
@@ -670,15 +670,15 @@ void b43_debugfs_add_device(struct b43_wldev *dev)
 	char devdir[16];

 	B43_WARN_ON(!dev);
-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e) {
 		b43err(dev->wl, "debugfs: add device OOM\n");
 		return;
 	}
 	e->dev = dev;
 	log = &e->txstatlog;
-	log->log = kcalloc(B43_NR_LOGGED_TXSTATUS,
-			   sizeof(struct b43_txstatus), GFP_KERNEL);
+	log->log = kzalloc_objs(struct b43_txstatus, B43_NR_LOGGED_TXSTATUS,
+				GFP_KERNEL);
 	if (!log->log) {
 		b43err(dev->wl, "debugfs: add device txstatus OOM\n");
 		kfree(e);
diff --git a/drivers/net/wireless/broadcom/b43/dma.c b/drivers/net/wireless/broadcom/b43/dma.c
index 6ac7dcebfff9..eca39555718f 100644
--- a/drivers/net/wireless/broadcom/b43/dma.c
+++ b/drivers/net/wireless/broadcom/b43/dma.c
@@ -838,7 +838,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
 	int i, err;
 	dma_addr_t dma_test;

-	ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kzalloc_obj(*ring, GFP_KERNEL);
 	if (!ring)
 		goto out;

@@ -846,8 +846,8 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
 	if (for_tx)
 		ring->nr_slots = B43_TXRING_SLOTS;

-	ring->meta = kcalloc(ring->nr_slots, sizeof(struct b43_dmadesc_meta),
-			     GFP_KERNEL);
+	ring->meta = kzalloc_objs(struct b43_dmadesc_meta, ring->nr_slots,
+				  GFP_KERNEL);
 	if (!ring->meta)
 		goto err_kfree_ring;
 	for (i = 0; i < ring->nr_slots; i++)
diff --git a/drivers/net/wireless/broadcom/b43/lo.c b/drivers/net/wireless/broadcom/b43/lo.c
index 338b6545a1e7..6fcd7205bda3 100644
--- a/drivers/net/wireless/broadcom/b43/lo.c
+++ b/drivers/net/wireless/broadcom/b43/lo.c
@@ -766,7 +766,7 @@ struct b43_lo_calib *b43_calibrate_lo_setting(struct b43_wldev *dev,
 		       loctl.i, loctl.q);
 	}

-	cal = kmalloc(sizeof(*cal), GFP_KERNEL);
+	cal = kmalloc_obj(*cal, GFP_KERNEL);
 	if (!cal) {
 		b43warn(dev->wl, "LO calib: out of memory\n");
 		return NULL;
diff --git a/drivers/net/wireless/broadcom/b43/main.c b/drivers/net/wireless/broadcom/b43/main.c
index f1a77c4c445f..97e222e9e613 100644
--- a/drivers/net/wireless/broadcom/b43/main.c
+++ b/drivers/net/wireless/broadcom/b43/main.c
@@ -2555,7 +2555,7 @@ static void b43_request_firmware(struct work_struct *work)
 	int err;
 	const char *errmsg;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return;
 	ctx->dev = dev;
@@ -5494,7 +5494,7 @@ static int b43_one_core_attach(struct b43_bus_dev *dev, struct b43_wl *wl)
 	struct b43_wldev *wldev;
 	int err = -ENOMEM;

-	wldev = kzalloc(sizeof(*wldev), GFP_KERNEL);
+	wldev = kzalloc_obj(*wldev, GFP_KERNEL);
 	if (!wldev)
 		goto out;

diff --git a/drivers/net/wireless/broadcom/b43/phy_ac.c b/drivers/net/wireless/broadcom/b43/phy_ac.c
index 756cd44a8104..85af2d791d91 100644
--- a/drivers/net/wireless/broadcom/b43/phy_ac.c
+++ b/drivers/net/wireless/broadcom/b43/phy_ac.c
@@ -17,7 +17,7 @@ static int b43_phy_ac_op_allocate(struct b43_wldev *dev)
 {
 	struct b43_phy_ac *phy_ac;

-	phy_ac = kzalloc(sizeof(*phy_ac), GFP_KERNEL);
+	phy_ac = kzalloc_obj(*phy_ac, GFP_KERNEL);
 	if (!phy_ac)
 		return -ENOMEM;
 	dev->phy.ac = phy_ac;
diff --git a/drivers/net/wireless/broadcom/b43/phy_g.c b/drivers/net/wireless/broadcom/b43/phy_g.c
index ac72ca39e409..94038d427b39 100644
--- a/drivers/net/wireless/broadcom/b43/phy_g.c
+++ b/drivers/net/wireless/broadcom/b43/phy_g.c
@@ -2422,14 +2422,14 @@ static int b43_gphy_op_allocate(struct b43_wldev *dev)
 	struct b43_txpower_lo_control *lo;
 	int err;

-	gphy = kzalloc(sizeof(*gphy), GFP_KERNEL);
+	gphy = kzalloc_obj(*gphy, GFP_KERNEL);
 	if (!gphy) {
 		err = -ENOMEM;
 		goto error;
 	}
 	dev->phy.g = gphy;

-	lo = kzalloc(sizeof(*lo), GFP_KERNEL);
+	lo = kzalloc_obj(*lo, GFP_KERNEL);
 	if (!lo) {
 		err = -ENOMEM;
 		goto err_free_gphy;
diff --git a/drivers/net/wireless/broadcom/b43/phy_ht.c b/drivers/net/wireless/broadcom/b43/phy_ht.c
index 26a226126bc4..a1a5e699caf1 100644
--- a/drivers/net/wireless/broadcom/b43/phy_ht.c
+++ b/drivers/net/wireless/broadcom/b43/phy_ht.c
@@ -842,7 +842,7 @@ static int b43_phy_ht_op_allocate(struct b43_wldev *dev)
 {
 	struct b43_phy_ht *phy_ht;

-	phy_ht = kzalloc(sizeof(*phy_ht), GFP_KERNEL);
+	phy_ht = kzalloc_obj(*phy_ht, GFP_KERNEL);
 	if (!phy_ht)
 		return -ENOMEM;
 	dev->phy.ht = phy_ht;
diff --git a/drivers/net/wireless/broadcom/b43/phy_lcn.c b/drivers/net/wireless/broadcom/b43/phy_lcn.c
index 63bd29f070f7..67b61a915aa2 100644
--- a/drivers/net/wireless/broadcom/b43/phy_lcn.c
+++ b/drivers/net/wireless/broadcom/b43/phy_lcn.c
@@ -669,7 +669,7 @@ static int b43_phy_lcn_op_allocate(struct b43_wldev *dev)
 {
 	struct b43_phy_lcn *phy_lcn;

-	phy_lcn = kzalloc(sizeof(*phy_lcn), GFP_KERNEL);
+	phy_lcn = kzalloc_obj(*phy_lcn, GFP_KERNEL);
 	if (!phy_lcn)
 		return -ENOMEM;
 	dev->phy.lcn = phy_lcn;
diff --git a/drivers/net/wireless/broadcom/b43/phy_lp.c b/drivers/net/wireless/broadcom/b43/phy_lp.c
index 0e5c076e7544..622d4fe3b613 100644
--- a/drivers/net/wireless/broadcom/b43/phy_lp.c
+++ b/drivers/net/wireless/broadcom/b43/phy_lp.c
@@ -43,7 +43,7 @@ static int b43_lpphy_op_allocate(struct b43_wldev *dev)
 {
 	struct b43_phy_lp *lpphy;

-	lpphy = kzalloc(sizeof(*lpphy), GFP_KERNEL);
+	lpphy = kzalloc_obj(*lpphy, GFP_KERNEL);
 	if (!lpphy)
 		return -ENOMEM;
 	dev->phy.lp = lpphy;
diff --git a/drivers/net/wireless/broadcom/b43/phy_n.c b/drivers/net/wireless/broadcom/b43/phy_n.c
index 4bb005b93f2c..768d9576be41 100644
--- a/drivers/net/wireless/broadcom/b43/phy_n.c
+++ b/drivers/net/wireless/broadcom/b43/phy_n.c
@@ -1549,7 +1549,7 @@ static u16 b43_nphy_gen_load_samples(struct b43_wldev *dev, u32 freq, u16 max,
 		len = bw << 1;
 	}

-	samples = kcalloc(len, sizeof(struct cordic_iq), GFP_KERNEL);
+	samples = kzalloc_objs(struct cordic_iq, len, GFP_KERNEL);
 	if (!samples) {
 		b43err(dev->wl, "allocation for samples generation failed\n");
 		return 0;
@@ -6417,7 +6417,7 @@ static int b43_nphy_op_allocate(struct b43_wldev *dev)
 {
 	struct b43_phy_n *nphy;

-	nphy = kzalloc(sizeof(*nphy), GFP_KERNEL);
+	nphy = kzalloc_obj(*nphy, GFP_KERNEL);
 	if (!nphy)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/broadcom/b43/pio.c b/drivers/net/wireless/broadcom/b43/pio.c
index e41f2f5b4c26..135091bec6c4 100644
--- a/drivers/net/wireless/broadcom/b43/pio.c
+++ b/drivers/net/wireless/broadcom/b43/pio.c
@@ -127,7 +127,7 @@ static struct b43_pio_txqueue *b43_setup_pioqueue_tx(struct b43_wldev *dev,
 	struct b43_pio_txpacket *p;
 	unsigned int i;

-	q = kzalloc(sizeof(*q), GFP_KERNEL);
+	q = kzalloc_obj(*q, GFP_KERNEL);
 	if (!q)
 		return NULL;
 	q->dev = dev;
@@ -161,7 +161,7 @@ static struct b43_pio_rxqueue *b43_setup_pioqueue_rx(struct b43_wldev *dev,
 {
 	struct b43_pio_rxqueue *q;

-	q = kzalloc(sizeof(*q), GFP_KERNEL);
+	q = kzalloc_obj(*q, GFP_KERNEL);
 	if (!q)
 		return NULL;
 	q->dev = dev;
diff --git a/drivers/net/wireless/broadcom/b43/sdio.c b/drivers/net/wireless/broadcom/b43/sdio.c
index 02b0cfd535ab..8d19fe48831f 100644
--- a/drivers/net/wireless/broadcom/b43/sdio.c
+++ b/drivers/net/wireless/broadcom/b43/sdio.c
@@ -139,7 +139,7 @@ static int b43_sdio_probe(struct sdio_func *func,
 	}
 	sdio_release_host(func);

-	sdio = kzalloc(sizeof(*sdio), GFP_KERNEL);
+	sdio = kzalloc_obj(*sdio, GFP_KERNEL);
 	if (!sdio) {
 		error = -ENOMEM;
 		dev_err(&func->dev, "failed to allocate ssb bus\n");
diff --git a/drivers/net/wireless/broadcom/b43legacy/debugfs.c b/drivers/net/wireless/broadcom/b43legacy/debugfs.c
index 5d04bcc216e5..ec1f67f6d328 100644
--- a/drivers/net/wireless/broadcom/b43legacy/debugfs.c
+++ b/drivers/net/wireless/broadcom/b43legacy/debugfs.c
@@ -358,15 +358,15 @@ void b43legacy_debugfs_add_device(struct b43legacy_wldev *dev)
 	char devdir[16];

 	B43legacy_WARN_ON(!dev);
-	e = kzalloc(sizeof(*e), GFP_KERNEL);
+	e = kzalloc_obj(*e, GFP_KERNEL);
 	if (!e) {
 		b43legacyerr(dev->wl, "debugfs: add device OOM\n");
 		return;
 	}
 	e->dev = dev;
 	log = &e->txstatlog;
-	log->log = kcalloc(B43legacy_NR_LOGGED_TXSTATUS,
-			   sizeof(struct b43legacy_txstatus), GFP_KERNEL);
+	log->log = kzalloc_objs(struct b43legacy_txstatus,
+				B43legacy_NR_LOGGED_TXSTATUS, GFP_KERNEL);
 	if (!log->log) {
 		b43legacyerr(dev->wl, "debugfs: add device txstatus OOM\n");
 		kfree(e);
diff --git a/drivers/net/wireless/broadcom/b43legacy/dma.c b/drivers/net/wireless/broadcom/b43legacy/dma.c
index 60e41de72f29..aff7e9161ffc 100644
--- a/drivers/net/wireless/broadcom/b43legacy/dma.c
+++ b/drivers/net/wireless/broadcom/b43legacy/dma.c
@@ -610,7 +610,7 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(struct b43legacy_wldev *dev,
 	int nr_slots;
 	dma_addr_t dma_test;

-	ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kzalloc_obj(*ring, GFP_KERNEL);
 	if (!ring)
 		goto out;
 	ring->type = type;
@@ -620,8 +620,8 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(struct b43legacy_wldev *dev,
 	if (for_tx)
 		nr_slots = B43legacy_TXRING_SLOTS;

-	ring->meta = kcalloc(nr_slots, sizeof(struct b43legacy_dmadesc_meta),
-			     GFP_KERNEL);
+	ring->meta = kzalloc_objs(struct b43legacy_dmadesc_meta, nr_slots,
+				  GFP_KERNEL);
 	if (!ring->meta)
 		goto err_kfree_ring;
 	if (for_tx) {
diff --git a/drivers/net/wireless/broadcom/b43legacy/main.c b/drivers/net/wireless/broadcom/b43legacy/main.c
index aada342e0b80..0873014a9299 100644
--- a/drivers/net/wireless/broadcom/b43legacy/main.c
+++ b/drivers/net/wireless/broadcom/b43legacy/main.c
@@ -3269,9 +3269,8 @@ static int b43legacy_wireless_core_init(struct b43legacy_wldev *dev)

 	if ((phy->type == B43legacy_PHYTYPE_B) ||
 	    (phy->type == B43legacy_PHYTYPE_G)) {
-		phy->_lo_pairs = kcalloc(B43legacy_LO_COUNT,
-					 sizeof(struct b43legacy_lopair),
-					 GFP_KERNEL);
+		phy->_lo_pairs = kzalloc_objs(struct b43legacy_lopair,
+					      B43legacy_LO_COUNT, GFP_KERNEL);
 		if (!phy->_lo_pairs)
 			return -ENOMEM;
 	}
@@ -3739,7 +3738,7 @@ static int b43legacy_one_core_attach(struct ssb_device *dev,
 	struct b43legacy_wldev *wldev;
 	int err = -ENOMEM;

-	wldev = kzalloc(sizeof(*wldev), GFP_KERNEL);
+	wldev = kzalloc_obj(*wldev, GFP_KERNEL);
 	if (!wldev)
 		goto out;

diff --git a/drivers/net/wireless/broadcom/b43legacy/pio.c b/drivers/net/wireless/broadcom/b43legacy/pio.c
index aac413d0f629..fd9b79710350 100644
--- a/drivers/net/wireless/broadcom/b43legacy/pio.c
+++ b/drivers/net/wireless/broadcom/b43legacy/pio.c
@@ -320,7 +320,7 @@ struct b43legacy_pioqueue *b43legacy_setup_pioqueue(struct b43legacy_wldev *dev,
 	u32 value;
 	u16 qsize;

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue)
 		goto out;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
index f471c962104a..1a6cb3450d58 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
@@ -23,8 +23,7 @@ static int brcmf_bca_alloc_fweh_info(struct brcmf_pub *drvr)
 {
 	struct brcmf_fweh_info *fweh;

-	fweh = kzalloc(struct_size(fweh, evt_handler, BRCMF_BCA_E_LAST),
-		       GFP_KERNEL);
+	fweh = kzalloc_flex(*fweh, evt_handler, BRCMF_BCA_E_LAST, GFP_KERNEL);
 	if (!fweh)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
index 9ec0c60b6da1..1817adc29cd8 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
@@ -444,7 +444,7 @@ int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
 {
 	struct brcmf_bcdc *bcdc;

-	bcdc = kzalloc(sizeof(*bcdc), GFP_ATOMIC);
+	bcdc = kzalloc_obj(*bcdc, GFP_ATOMIC);
 	if (!bcdc)
 		goto fail;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
index 6a3f187320fc..cf5cf1dce28d 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
@@ -794,7 +794,7 @@ static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev)
 	if (!IS_ENABLED(CONFIG_PM_SLEEP))
 		return 0;

-	sdiodev->freezer = kzalloc(sizeof(*sdiodev->freezer), GFP_KERNEL);
+	sdiodev->freezer = kzalloc_obj(*sdiodev->freezer, GFP_KERNEL);
 	if (!sdiodev->freezer)
 		return -ENOMEM;
 	atomic_set(&sdiodev->freezer->thread_count, 0);
@@ -1067,10 +1067,10 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
 	if (func->num != 2)
 		return -ENODEV;

-	bus_if = kzalloc(sizeof(*bus_if), GFP_KERNEL);
+	bus_if = kzalloc_obj(*bus_if, GFP_KERNEL);
 	if (!bus_if)
 		return -ENOMEM;
-	sdiodev = kzalloc(sizeof(*sdiodev), GFP_KERNEL);
+	sdiodev = kzalloc_obj(*sdiodev, GFP_KERNEL);
 	if (!sdiodev) {
 		kfree(bus_if);
 		return -ENOMEM;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
index 67c0c5a92f99..5aa1dd33bf85 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
@@ -362,7 +362,7 @@ int brcmf_btcoex_attach(struct brcmf_cfg80211_info *cfg)
 	struct brcmf_btcoex_info *btci;
 	brcmf_dbg(TRACE, "enter\n");

-	btci = kmalloc(sizeof(*btci), GFP_KERNEL);
+	btci = kmalloc_obj(*btci, GFP_KERNEL);
 	if (!btci)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 61f7e620cab3..a442c74423a6 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -2527,7 +2527,7 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
 		offsetof(struct brcmf_assoc_params_le, chanspec_list);
 	if (cfg->channel)
 		join_params_size += sizeof(u16);
-	ext_join_params = kzalloc(sizeof(*ext_join_params), GFP_KERNEL);
+	ext_join_params = kzalloc_obj(*ext_join_params, GFP_KERNEL);
 	if (ext_join_params == NULL) {
 		err = -ENOMEM;
 		goto done;
@@ -4330,7 +4330,7 @@ brcmf_pmksa_v3_op(struct brcmf_if *ifp, struct cfg80211_pmksa *pmksa,
 	int length = offsetof(struct brcmf_pmk_op_v3_le, pmk);
 	int ret;

-	pmk_op = kzalloc(sizeof(*pmk_op), GFP_KERNEL);
+	pmk_op = kzalloc_obj(*pmk_op, GFP_KERNEL);
 	if (!pmk_op)
 		return -ENOMEM;

@@ -5588,7 +5588,7 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
 			err = -EINVAL;
 			goto exit;
 		}
-		af_params = kzalloc(sizeof(*af_params), GFP_KERNEL);
+		af_params = kzalloc_obj(*af_params, GFP_KERNEL);
 		if (af_params == NULL) {
 			bphy_err(drvr, "unable to allocate frame\n");
 			err = -ENOMEM;
@@ -6050,7 +6050,7 @@ struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,

 	brcmf_dbg(TRACE, "allocating virtual interface (size=%zu)\n",
 		  sizeof(*vif));
-	vif = kzalloc(sizeof(*vif), GFP_KERNEL);
+	vif = kzalloc_obj(*vif, GFP_KERNEL);
 	if (!vif)
 		return ERR_PTR(-ENOMEM);

@@ -6540,7 +6540,7 @@ brcmf_notify_connect_status_ap(struct brcmf_cfg80211_info *cfg,
 			return -EINVAL;
 		}

-		sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
+		sinfo = kzalloc_obj(*sinfo, GFP_KERNEL);
 		if (!sinfo)
 			return -ENOMEM;

@@ -6828,7 +6828,7 @@ static void brcmf_deinit_priv_mem(struct brcmf_cfg80211_info *cfg)

 static s32 brcmf_init_priv_mem(struct brcmf_cfg80211_info *cfg)
 {
-	cfg->conf = kzalloc(sizeof(*cfg->conf), GFP_KERNEL);
+	cfg->conf = kzalloc_obj(*cfg->conf, GFP_KERNEL);
 	if (!cfg->conf)
 		goto init_priv_mem_out;
 	cfg->extra_buf = kzalloc(WL_EXTRA_BUF_MAX, GFP_KERNEL);
@@ -7486,7 +7486,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
 	mchan = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MCHAN);

 	n_combos = 1 + !!(p2p && !rsdb) + !!mbss;
-	combo = kcalloc(n_combos, sizeof(*combo), GFP_KERNEL);
+	combo = kzalloc_objs(*combo, n_combos, GFP_KERNEL);
 	if (!combo)
 		goto err;

@@ -7503,7 +7503,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
 	c = 0;
 	i = 0;
 	n_limits = 1 + mon_flag + (p2p ? 2 : 0) + (rsdb || !p2p);
-	c0_limits = kcalloc(n_limits, sizeof(*c0_limits), GFP_KERNEL);
+	c0_limits = kzalloc_objs(*c0_limits, n_limits, GFP_KERNEL);
 	if (!c0_limits)
 		goto err;

@@ -7542,7 +7542,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
 	if (p2p && !rsdb) {
 		c++;
 		i = 0;
-		p2p_limits = kcalloc(4, sizeof(*p2p_limits), GFP_KERNEL);
+		p2p_limits = kzalloc_objs(*p2p_limits, 4, GFP_KERNEL);
 		if (!p2p_limits)
 			goto err;
 		p2p_limits[i].max = 1;
@@ -7563,8 +7563,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
 		c++;
 		i = 0;
 		n_limits = 1 + mon_flag;
-		mbss_limits = kcalloc(n_limits, sizeof(*mbss_limits),
-				      GFP_KERNEL);
+		mbss_limits = kzalloc_objs(*mbss_limits, n_limits, GFP_KERNEL);
 		if (!mbss_limits)
 			goto err;
 		mbss_limits[i].max = 4;
@@ -8322,7 +8321,7 @@ struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
 		return NULL;
 	}

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg) {
 		bphy_err(drvr, "Could not allocate wiphy device\n");
 		return NULL;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
index 4239f2b21e54..a3bbbb76dd97 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
@@ -507,7 +507,7 @@ static struct brcmf_core *brcmf_chip_add_core(struct brcmf_chip_priv *ci,
 {
 	struct brcmf_core_priv *core;

-	core = kzalloc(sizeof(*core), GFP_KERNEL);
+	core = kzalloc_obj(*core, GFP_KERNEL);
 	if (!core)
 		return ERR_PTR(-ENOMEM);

@@ -1137,7 +1137,7 @@ struct brcmf_chip *brcmf_chip_attach(void *ctx, u16 devid,
 	if (err < 0)
 		return ERR_PTR(-EINVAL);

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (!chip)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
index 688f16c51319..cdc9dc733f5b 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
@@ -132,8 +132,7 @@ static int brcmf_c_download_blob(struct brcmf_if *ifp,

 	brcmf_dbg(TRACE, "Enter\n");

-	chunk_buf = kzalloc(struct_size(chunk_buf, data, MAX_CHUNK_LEN),
-			    GFP_KERNEL);
+	chunk_buf = kzalloc_flex(*chunk_buf, data, MAX_CHUNK_LEN, GFP_KERNEL);
 	if (!chunk_buf) {
 		err = -ENOMEM;
 		return -ENOMEM;
@@ -521,7 +520,7 @@ struct brcmf_mp_device *brcmf_get_module_param(struct device *dev,

 	brcmf_dbg(INFO, "Enter, bus=%d, chip=%d, rev=%d\n", bus_type, chip,
 		  chiprev);
-	settings = kzalloc(sizeof(*settings), GFP_ATOMIC);
+	settings = kzalloc_obj(*settings, GFP_ATOMIC);
 	if (!settings)
 		return NULL;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index 616885d6db3f..99d5fd453cf1 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -879,7 +879,7 @@ struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx,
 	if (!drvr->settings->p2p_enable && is_p2pdev) {
 		/* this is P2P_DEVICE interface */
 		brcmf_dbg(INFO, "allocate non-netdev interface\n");
-		ifp = kzalloc(sizeof(*ifp), GFP_KERNEL);
+		ifp = kzalloc_obj(*ifp, GFP_KERNEL);
 		if (!ifp)
 			return ERR_PTR(-ENOMEM);
 	} else {
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
index 4f0ea4347840..abd38ac8c51e 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
@@ -66,8 +66,7 @@ static int brcmf_cyw_alloc_fweh_info(struct brcmf_pub *drvr)
 {
 	struct brcmf_fweh_info *fweh;

-	fweh = kzalloc(struct_size(fweh, evt_handler, BRCMF_CYW_E_LAST),
-		       GFP_KERNEL);
+	fweh = kzalloc_flex(*fweh, evt_handler, BRCMF_CYW_E_LAST, GFP_KERNEL);
 	if (!fweh)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
index ef79924fd8f4..7b3b0bd1acaf 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
@@ -765,7 +765,7 @@ int brcmf_fw_get_firmwares(struct device *dev, struct brcmf_fw_request *req,
 	if (!brcmf_fw_request_is_valid(req))
 		return -EINVAL;

-	fwctx = kzalloc(sizeof(*fwctx), GFP_KERNEL);
+	fwctx = kzalloc_obj(*fwctx, GFP_KERNEL);
 	if (!fwctx)
 		return -ENOMEM;

@@ -825,7 +825,7 @@ brcmf_fw_alloc_request(u32 chip, u32 chiprev,
 		return NULL;
 	}

-	fwreq = kzalloc(struct_size(fwreq, items, n_fwnames), GFP_KERNEL);
+	fwreq = kzalloc_flex(*fwreq, items, n_fwnames, GFP_KERNEL);
 	if (!fwreq)
 		return NULL;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c
index e1127d7e086d..9184022600d6 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c
@@ -145,7 +145,7 @@ u32 brcmf_flowring_create(struct brcmf_flowring *flow, u8 da[ETH_ALEN],
 		if (i == flow->nrofrings)
 			return -ENOMEM;

-		ring = kzalloc(sizeof(*ring), GFP_ATOMIC);
+		ring = kzalloc_obj(*ring, GFP_ATOMIC);
 		if (!ring)
 			return -ENOMEM;

@@ -360,7 +360,7 @@ struct brcmf_flowring *brcmf_flowring_attach(struct device *dev, u16 nrofrings)
 	struct brcmf_flowring *flow;
 	u32 i;

-	flow = kzalloc(sizeof(*flow), GFP_KERNEL);
+	flow = kzalloc_obj(*flow, GFP_KERNEL);
 	if (flow) {
 		flow->dev = dev;
 		flow->nrofrings = nrofrings;
@@ -369,8 +369,7 @@ struct brcmf_flowring *brcmf_flowring_attach(struct device *dev, u16 nrofrings)
 			flow->addr_mode[i] = ADDR_INDIRECT;
 		for (i = 0; i < ARRAY_SIZE(flow->hash); i++)
 			flow->hash[i].ifidx = BRCMF_FLOWRING_INVALID_IFIDX;
-		flow->rings = kcalloc(nrofrings, sizeof(*flow->rings),
-				      GFP_KERNEL);
+		flow->rings = kzalloc_objs(*flow->rings, nrofrings, GFP_KERNEL);
 		if (!flow->rings) {
 			kfree(flow);
 			flow = NULL;
@@ -480,7 +479,7 @@ void brcmf_flowring_add_tdls_peer(struct brcmf_flowring *flow, int ifidx,
 	struct brcmf_flowring_tdls_entry *tdls_entry;
 	struct brcmf_flowring_tdls_entry *search;

-	tdls_entry = kzalloc(sizeof(*tdls_entry), GFP_ATOMIC);
+	tdls_entry = kzalloc_obj(*tdls_entry, GFP_ATOMIC);
 	if (tdls_entry == NULL)
 		return;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
index c2d98ee6652f..984886481f4e 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
@@ -497,7 +497,7 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr,
 	    datalen + sizeof(*event_packet) > packet_len)
 		return;

-	event = kzalloc(struct_size(event, data, datalen), gfp);
+	event = kzalloc_flex(*event, data, datalen, gfp);
 	if (!event)
 		return;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
index b70d20128f98..b6fab5eb6002 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
@@ -1712,8 +1712,7 @@ void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *pkt)
 		/* allocate space for flow reorder info */
 		brcmf_dbg(INFO, "flow-%d: start, maxidx %d\n",
 			  flow_id, max_idx);
-		rfi = kzalloc(struct_size(rfi, pktslots, max_idx + 1),
-			      GFP_ATOMIC);
+		rfi = kzalloc_flex(*rfi, pktslots, max_idx + 1, GFP_ATOMIC);
 		if (rfi == NULL) {
 			bphy_err(drvr, "failed to alloc buffer\n");
 			brcmf_netif_rx(ifp, pkt);
@@ -2343,7 +2342,7 @@ struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr)
 	int rc;
 	u32 mode;

-	fws = kzalloc(sizeof(*fws), GFP_KERNEL);
+	fws = kzalloc_obj(*fws, GFP_KERNEL);
 	if (!fws) {
 		rc = -ENOMEM;
 		goto fail;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
index 45fbcbdc7d9e..7252cdb6d87a 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
@@ -299,11 +299,11 @@ brcmf_msgbuf_init_pktids(u32 nr_array_entries,
 	struct brcmf_msgbuf_pktid *array;
 	struct brcmf_msgbuf_pktids *pktids;

-	array = kcalloc(nr_array_entries, sizeof(*array), GFP_KERNEL);
+	array = kzalloc_objs(*array, nr_array_entries, GFP_KERNEL);
 	if (!array)
 		return NULL;

-	pktids = kzalloc(sizeof(*pktids), GFP_KERNEL);
+	pktids = kzalloc_obj(*pktids, GFP_KERNEL);
 	if (!pktids) {
 		kfree(array);
 		return NULL;
@@ -670,7 +670,7 @@ static u32 brcmf_msgbuf_flowring_create(struct brcmf_msgbuf *msgbuf, int ifidx,
 	u32 flowid;
 	ulong flags;

-	create = kzalloc(sizeof(*create), GFP_ATOMIC);
+	create = kzalloc_obj(*create, GFP_ATOMIC);
 	if (create == NULL)
 		return BRCMF_FLOWRING_INVALID_ID;

@@ -1539,7 +1539,7 @@ int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
 		if_msgbuf->max_flowrings = BRCMF_FLOWRING_HASHSIZE - 1;
 	}

-	msgbuf = kzalloc(sizeof(*msgbuf), GFP_KERNEL);
+	msgbuf = kzalloc_obj(*msgbuf, GFP_KERNEL);
 	if (!msgbuf)
 		goto fail;

@@ -1588,8 +1588,8 @@ int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
 	msgbuf->flowrings = (struct brcmf_commonring **)if_msgbuf->flowrings;
 	msgbuf->max_flowrings = if_msgbuf->max_flowrings;
 	msgbuf->flowring_dma_handle =
-		kcalloc(msgbuf->max_flowrings,
-			sizeof(*msgbuf->flowring_dma_handle), GFP_KERNEL);
+		kzalloc_objs(*msgbuf->flowring_dma_handle,
+			     msgbuf->max_flowrings, GFP_KERNEL);
 	if (!msgbuf->flowring_dma_handle)
 		goto fail;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
index 6327f4eca500..d15b98273cd3 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
@@ -1155,7 +1155,7 @@ brcmf_pcie_alloc_dma_and_ring(struct brcmf_pciedev_info *devinfo, u32 ring_id,
 	addr = tcm_ring_phys_addr + BRCMF_RING_LEN_ITEMS_OFFSET;
 	brcmf_pcie_write_tcm16(devinfo, addr, ring_itemsize_array[ring_id]);

-	ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kzalloc_obj(*ring, GFP_KERNEL);
 	if (!ring) {
 		dma_free_coherent(&devinfo->pdev->dev, size, dma_buf,
 				  dma_handle);
@@ -1347,7 +1347,7 @@ static int brcmf_pcie_init_ringbuffers(struct brcmf_pciedev_info *devinfo)
 	devinfo->shared.max_flowrings = max_flowrings;
 	devinfo->shared.max_submissionrings = max_submissionrings;
 	devinfo->shared.max_completionrings = max_completionrings;
-	rings = kcalloc(max_flowrings, sizeof(*ring), GFP_KERNEL);
+	rings = kzalloc_objs(*ring, max_flowrings, GFP_KERNEL);
 	if (!rings)
 		goto fail;

@@ -2199,8 +2199,8 @@ static void brcmf_pcie_setup(struct device *dev, int ret,
 		bus->msgbuf->commonrings[i] =
 				&devinfo->shared.commonrings[i]->commonring;

-	flowrings = kcalloc(devinfo->shared.max_flowrings, sizeof(*flowrings),
-			    GFP_KERNEL);
+	flowrings = kzalloc_objs(*flowrings, devinfo->shared.max_flowrings,
+				 GFP_KERNEL);
 	if (!flowrings)
 		goto fail;

@@ -2457,7 +2457,7 @@ brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	brcmf_dbg(PCIE, "Enter %x:%x\n", pdev->vendor, pdev->device);

 	ret = -ENOMEM;
-	devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL);
+	devinfo = kzalloc_obj(*devinfo, GFP_KERNEL);
 	if (devinfo == NULL)
 		return ret;

@@ -2477,7 +2477,7 @@ brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	else
 		devinfo->reginfo = &brcmf_reginfo_default;

-	pcie_bus_dev = kzalloc(sizeof(*pcie_bus_dev), GFP_KERNEL);
+	pcie_bus_dev = kzalloc_obj(*pcie_bus_dev, GFP_KERNEL);
 	if (pcie_bus_dev == NULL) {
 		ret = -ENOMEM;
 		goto fail;
@@ -2495,12 +2495,12 @@ brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	if (ret < 0)
 		goto fail;

-	bus = kzalloc(sizeof(*bus), GFP_KERNEL);
+	bus = kzalloc_obj(*bus, GFP_KERNEL);
 	if (!bus) {
 		ret = -ENOMEM;
 		goto fail;
 	}
-	bus->msgbuf = kzalloc(sizeof(*bus->msgbuf), GFP_KERNEL);
+	bus->msgbuf = kzalloc_obj(*bus->msgbuf, GFP_KERNEL);
 	if (!bus->msgbuf) {
 		ret = -ENOMEM;
 		kfree(bus);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
index 05f66ab13bed..34179e69d77d 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
@@ -321,7 +321,7 @@ static int brcmf_pno_prep_fwconfig(struct brcmf_pno_info *pi,
 	}

 	*buckets = NULL;
-	fw_buckets = kcalloc(pi->n_reqs, sizeof(*fw_buckets), GFP_KERNEL);
+	fw_buckets = kzalloc_objs(*fw_buckets, pi->n_reqs, GFP_KERNEL);
 	if (!fw_buckets)
 		return -ENOMEM;

@@ -517,7 +517,7 @@ int brcmf_pno_attach(struct brcmf_cfg80211_info *cfg)
 	struct brcmf_pno_info *pi;

 	brcmf_dbg(TRACE, "enter\n");
-	pi = kzalloc(sizeof(*pi), GFP_KERNEL);
+	pi = kzalloc_obj(*pi, GFP_KERNEL);
 	if (!pi)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
index 2e911d4874af..7fc441859f52 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
@@ -23,7 +23,7 @@ int brcmf_proto_attach(struct brcmf_pub *drvr)

 	brcmf_dbg(TRACE, "Enter\n");

-	proto = kzalloc(sizeof(*proto), GFP_ATOMIC);
+	proto = kzalloc_obj(*proto, GFP_ATOMIC);
 	if (!proto)
 		goto fail;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 8cf9d7e7c3f7..30c19591c018 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -4455,7 +4455,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
 	brcmf_dbg(TRACE, "Enter\n");

 	/* Allocate private bus interface state */
-	bus = kzalloc(sizeof(*bus), GFP_ATOMIC);
+	bus = kzalloc_obj(*bus, GFP_ATOMIC);
 	if (!bus) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
index f0129d10d2b9..0b52f968b907 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
@@ -428,7 +428,7 @@ brcmf_usbdev_qinit(struct list_head *q, int qsize)
 	int i;
 	struct brcmf_usbreq *req, *reqs;

-	reqs = kcalloc(qsize, sizeof(struct brcmf_usbreq), GFP_ATOMIC);
+	reqs = kzalloc_objs(struct brcmf_usbreq, qsize, GFP_ATOMIC);
 	if (reqs == NULL)
 		return NULL;

@@ -1255,7 +1255,7 @@ static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo,
 	if (!bus_pub)
 		return -ENODEV;

-	bus = kzalloc(sizeof(*bus), GFP_ATOMIC);
+	bus = kzalloc_obj(*bus, GFP_ATOMIC);
 	if (!bus) {
 		ret = -ENOMEM;
 		goto fail;
@@ -1359,7 +1359,7 @@ brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)

 	brcmf_dbg(USB, "Enter 0x%04x:0x%04x\n", id->idVendor, id->idProduct);

-	devinfo = kzalloc(sizeof(*devinfo), GFP_ATOMIC);
+	devinfo = kzalloc_obj(*devinfo, GFP_ATOMIC);
 	if (devinfo == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
index 05d7c2a4fba5..9a8351537938 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
@@ -24,8 +24,7 @@ static int brcmf_wcc_alloc_fweh_info(struct brcmf_pub *drvr)
 {
 	struct brcmf_fweh_info *fweh;

-	fweh = kzalloc(struct_size(fweh, evt_handler, BRCMF_WCC_E_LAST),
-		       GFP_KERNEL);
+	fweh = kzalloc_flex(*fweh, evt_handler, BRCMF_WCC_E_LAST, GFP_KERNEL);
 	if (!fweh)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/aiutils.c
index 0cb64fc56783..6a67db07833e 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/aiutils.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/aiutils.c
@@ -512,7 +512,7 @@ ai_attach(struct bcma_bus *pbus)
 	struct si_info *sii;

 	/* alloc struct si_info */
-	sii = kzalloc(sizeof(*sii), GFP_ATOMIC);
+	sii = kzalloc_obj(*sii, GFP_ATOMIC);
 	if (sii == NULL)
 		return NULL;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/ampdu.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/ampdu.c
index e1d707a7c964..fc7a5dd2e5d8 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/ampdu.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/ampdu.c
@@ -219,7 +219,7 @@ struct ampdu_info *brcms_c_ampdu_attach(struct brcms_c_info *wlc)
 	struct ampdu_info *ampdu;
 	int i;

-	ampdu = kzalloc(sizeof(*ampdu), GFP_ATOMIC);
+	ampdu = kzalloc_obj(*ampdu, GFP_ATOMIC);
 	if (!ampdu)
 		return NULL;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/antsel.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/antsel.c
index f411bc6d795d..9a3e40528ff7 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/antsel.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/antsel.c
@@ -111,7 +111,7 @@ struct antsel_info *brcms_c_antsel_attach(struct brcms_c_info *wlc)
 	struct antsel_info *asi;
 	struct ssb_sprom *sprom = &wlc->hw->d11core->bus->sprom;

-	asi = kzalloc(sizeof(*asi), GFP_ATOMIC);
+	asi = kzalloc_obj(*asi, GFP_ATOMIC);
 	if (!asi)
 		return NULL;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/channel.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/channel.c
index 3878c4124e25..cdfe8635c012 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/channel.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/channel.c
@@ -331,7 +331,7 @@ struct brcms_cm_info *brcms_c_channel_mgr_attach(struct brcms_c_info *wlc)
 	const char *ccode = sprom->alpha2;
 	int ccode_len = sizeof(sprom->alpha2);

-	wlc_cm = kzalloc(sizeof(*wlc_cm), GFP_ATOMIC);
+	wlc_cm = kzalloc_obj(*wlc_cm, GFP_ATOMIC);
 	if (wlc_cm == NULL)
 		return NULL;
 	wlc_cm->pub = pub;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c
index c739bf7463b3..9f6ef7ce1b58 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c
@@ -558,7 +558,7 @@ struct dma_pub *dma_attach(char *name, struct brcms_c_info *wlc,
 	struct si_info *sii = container_of(sih, struct si_info, pub);

 	/* allocate private info structure */
-	di = kzalloc(sizeof(*di), GFP_ATOMIC);
+	di = kzalloc_obj(*di, GFP_ATOMIC);
 	if (di == NULL)
 		return NULL;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
index aadcff1e2b5d..6255d673d2d3 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
@@ -1499,7 +1499,7 @@ struct brcms_timer *brcms_init_timer(struct brcms_info *wl,
 {
 	struct brcms_timer *t;

-	t = kzalloc(sizeof(*t), GFP_ATOMIC);
+	t = kzalloc_obj(*t, GFP_ATOMIC);
 	if (!t)
 		return NULL;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.c
index c1a9c1e442ee..c7eaf160e1fa 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.c
@@ -457,11 +457,11 @@ static struct brcms_bss_cfg *brcms_c_bsscfg_malloc(uint unit)
 {
 	struct brcms_bss_cfg *cfg;

-	cfg = kzalloc(sizeof(*cfg), GFP_ATOMIC);
+	cfg = kzalloc_obj(*cfg, GFP_ATOMIC);
 	if (cfg == NULL)
 		goto fail;

-	cfg->current_bss = kzalloc(sizeof(*cfg->current_bss), GFP_ATOMIC);
+	cfg->current_bss = kzalloc_obj(*cfg->current_bss, GFP_ATOMIC);
 	if (cfg->current_bss == NULL)
 		goto fail;

@@ -477,14 +477,14 @@ brcms_c_attach_malloc(uint unit, uint *err, uint devid)
 {
 	struct brcms_c_info *wlc;

-	wlc = kzalloc(sizeof(*wlc), GFP_ATOMIC);
+	wlc = kzalloc_obj(*wlc, GFP_ATOMIC);
 	if (wlc == NULL) {
 		*err = 1002;
 		goto fail;
 	}

 	/* allocate struct brcms_c_pub state structure */
-	wlc->pub = kzalloc(sizeof(*wlc->pub), GFP_ATOMIC);
+	wlc->pub = kzalloc_obj(*wlc->pub, GFP_ATOMIC);
 	if (wlc->pub == NULL) {
 		*err = 1003;
 		goto fail;
@@ -493,7 +493,7 @@ brcms_c_attach_malloc(uint unit, uint *err, uint devid)

 	/* allocate struct brcms_hardware state structure */

-	wlc->hw = kzalloc(sizeof(*wlc->hw), GFP_ATOMIC);
+	wlc->hw = kzalloc_obj(*wlc->hw, GFP_ATOMIC);
 	if (wlc->hw == NULL) {
 		*err = 1005;
 		goto fail;
@@ -501,7 +501,7 @@ brcms_c_attach_malloc(uint unit, uint *err, uint devid)
 	wlc->hw->wlc = wlc;

 	wlc->hw->bandstate[0] =
-		kcalloc(MAXBANDS, sizeof(struct brcms_hw_band), GFP_ATOMIC);
+		kzalloc_objs(struct brcms_hw_band, MAXBANDS, GFP_ATOMIC);
 	if (wlc->hw->bandstate[0] == NULL) {
 		*err = 1006;
 		goto fail;
@@ -515,14 +515,13 @@ brcms_c_attach_malloc(uint unit, uint *err, uint devid)
 	}

 	wlc->modulecb =
-		kcalloc(BRCMS_MAXMODULES, sizeof(struct modulecb),
-			GFP_ATOMIC);
+		kzalloc_objs(struct modulecb, BRCMS_MAXMODULES, GFP_ATOMIC);
 	if (wlc->modulecb == NULL) {
 		*err = 1009;
 		goto fail;
 	}

-	wlc->default_bss = kzalloc(sizeof(*wlc->default_bss), GFP_ATOMIC);
+	wlc->default_bss = kzalloc_obj(*wlc->default_bss, GFP_ATOMIC);
 	if (wlc->default_bss == NULL) {
 		*err = 1010;
 		goto fail;
@@ -534,20 +533,20 @@ brcms_c_attach_malloc(uint unit, uint *err, uint devid)
 		goto fail;
 	}

-	wlc->protection = kzalloc(sizeof(*wlc->protection), GFP_ATOMIC);
+	wlc->protection = kzalloc_obj(*wlc->protection, GFP_ATOMIC);
 	if (wlc->protection == NULL) {
 		*err = 1016;
 		goto fail;
 	}

-	wlc->stf = kzalloc(sizeof(*wlc->stf), GFP_ATOMIC);
+	wlc->stf = kzalloc_obj(*wlc->stf, GFP_ATOMIC);
 	if (wlc->stf == NULL) {
 		*err = 1017;
 		goto fail;
 	}

 	wlc->bandstate[0] =
-		kcalloc(MAXBANDS, sizeof(*wlc->bandstate[0]), GFP_ATOMIC);
+		kzalloc_objs(*wlc->bandstate[0], MAXBANDS, GFP_ATOMIC);
 	if (wlc->bandstate[0] == NULL) {
 		*err = 1025;
 		goto fail;
@@ -560,14 +559,14 @@ brcms_c_attach_malloc(uint unit, uint *err, uint devid)
 				+ (sizeof(struct brcms_band)*i));
 	}

-	wlc->corestate = kzalloc(sizeof(*wlc->corestate), GFP_ATOMIC);
+	wlc->corestate = kzalloc_obj(*wlc->corestate, GFP_ATOMIC);
 	if (wlc->corestate == NULL) {
 		*err = 1026;
 		goto fail;
 	}

-	wlc->corestate->macstat_snapshot =
-		kzalloc(sizeof(*wlc->corestate->macstat_snapshot), GFP_ATOMIC);
+	wlc->corestate->macstat_snapshot = kzalloc_obj(*wlc->corestate->macstat_snapshot,
+						       GFP_ATOMIC);
 	if (wlc->corestate->macstat_snapshot == NULL) {
 		*err = 1027;
 		goto fail;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
index ce6ce2dea39c..7eae73ef7e94 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
@@ -333,7 +333,7 @@ struct shared_phy *wlc_phy_shared_attach(struct shared_phy_params *shp)
 {
 	struct shared_phy *sh;

-	sh = kzalloc(sizeof(*sh), GFP_ATOMIC);
+	sh = kzalloc_obj(*sh, GFP_ATOMIC);
 	if (sh == NULL)
 		return NULL;

@@ -420,7 +420,7 @@ wlc_phy_attach(struct shared_phy *sh, struct bcma_device *d11core,
 		return &pi->pubpi_ro;
 	}

-	pi = kzalloc(sizeof(*pi), GFP_ATOMIC);
+	pi = kzalloc_obj(*pi, GFP_ATOMIC);
 	if (pi == NULL)
 		return NULL;
 	pi->wiphy = wiphy;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c
index 5258681218ea..8cec5ad79fda 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c
@@ -1319,7 +1319,7 @@ wlc_lcnphy_rx_iq_cal(struct brcms_phy *pi,
 	s16 *ptr;
 	struct brcms_phy_lcnphy *pi_lcn = pi->u.pi_lcnphy;

-	ptr = kmalloc_array(131, sizeof(s16), GFP_ATOMIC);
+	ptr = kmalloc_objs(s16, 131, GFP_ATOMIC);
 	if (NULL == ptr)
 		return false;
 	if (module == 2) {
@@ -3605,7 +3605,7 @@ wlc_lcnphy_a1(struct brcms_phy *pi, int cal_type, int num_levels,
 	u16 *phy_c32;
 	phy_c21 = 0;
 	phy_c10 = phy_c13 = phy_c14 = phy_c8 = 0;
-	ptr = kmalloc_array(131, sizeof(s16), GFP_ATOMIC);
+	ptr = kmalloc_objs(s16, 131, GFP_ATOMIC);
 	if (NULL == ptr)
 		return;

@@ -4966,7 +4966,7 @@ bool wlc_phy_attach_lcnphy(struct brcms_phy *pi)
 {
 	struct brcms_phy_lcnphy *pi_lcn;

-	pi_lcn = kzalloc(sizeof(*pi_lcn), GFP_ATOMIC);
+	pi_lcn = kzalloc_obj(*pi_lcn, GFP_ATOMIC);
 	if (!pi_lcn)
 		return false;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
index b03d5a1f1a93..86cfa3e87a04 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
@@ -23049,8 +23049,7 @@ wlc_phy_gen_load_samples_nphy(struct brcms_phy *pi, u32 f_kHz, u16 max_val,
 		tbl_len = (phy_bw << 1);
 	}

-	tone_buf = kmalloc_array(tbl_len, sizeof(struct cordic_iq),
-				 GFP_ATOMIC);
+	tone_buf = kmalloc_objs(struct cordic_iq, tbl_len, GFP_ATOMIC);
 	if (tone_buf == NULL)
 		return 0;

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
index 8b852581c4e4..20cf6379e838 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
@@ -40,7 +40,7 @@ struct phy_shim_info *wlc_phy_shim_attach(struct brcms_hardware *wlc_hw,
 					  struct brcms_c_info *wlc) {
 	struct phy_shim_info *physhim;

-	physhim = kzalloc(sizeof(*physhim), GFP_ATOMIC);
+	physhim = kzalloc_obj(*physhim, GFP_ATOMIC);
 	if (!physhim)
 		return NULL;

diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2100.c b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
index c7c5bc0f1650..029459df3343 100644
--- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
@@ -1885,9 +1885,8 @@ static int ipw2100_wdev_init(struct net_device *dev)

 		bg_band->band = NL80211_BAND_2GHZ;
 		bg_band->n_channels = geo->bg_channels;
-		bg_band->channels = kcalloc(geo->bg_channels,
-					    sizeof(struct ieee80211_channel),
-					    GFP_KERNEL);
+		bg_band->channels = kzalloc_objs(struct ieee80211_channel,
+						 geo->bg_channels, GFP_KERNEL);
 		if (!bg_band->channels) {
 			ipw2100_down(priv);
 			return -ENOMEM;
@@ -3413,9 +3412,8 @@ static int ipw2100_msg_allocate(struct ipw2100_priv *priv)
 	dma_addr_t p;

 	priv->msg_buffers =
-	    kmalloc_array(IPW_COMMAND_POOL_SIZE,
-			  sizeof(struct ipw2100_tx_packet),
-			  GFP_KERNEL);
+	    kmalloc_objs(struct ipw2100_tx_packet, IPW_COMMAND_POOL_SIZE,
+			 GFP_KERNEL);
 	if (!priv->msg_buffers)
 		return -ENOMEM;

@@ -4410,9 +4408,8 @@ static int ipw2100_tx_allocate(struct ipw2100_priv *priv)
 		return err;
 	}

-	priv->tx_buffers = kmalloc_array(TX_PENDED_QUEUE_LENGTH,
-					 sizeof(struct ipw2100_tx_packet),
-					 GFP_KERNEL);
+	priv->tx_buffers = kmalloc_objs(struct ipw2100_tx_packet,
+					TX_PENDED_QUEUE_LENGTH, GFP_KERNEL);
 	if (!priv->tx_buffers) {
 		bd_queue_free(priv, &priv->tx_queue);
 		return -ENOMEM;
@@ -4555,9 +4552,8 @@ static int ipw2100_rx_allocate(struct ipw2100_priv *priv)
 	/*
 	 * allocate packets
 	 */
-	priv->rx_buffers = kmalloc_array(RX_QUEUE_LENGTH,
-					 sizeof(struct ipw2100_rx_packet),
-					 GFP_KERNEL);
+	priv->rx_buffers = kmalloc_objs(struct ipw2100_rx_packet,
+					RX_QUEUE_LENGTH, GFP_KERNEL);
 	if (!priv->rx_buffers) {
 		IPW_DEBUG_INFO("can't allocate rx packet buffer table\n");

diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2200.c b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
index b0e769da9415..a39985e4a977 100644
--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
@@ -3153,8 +3153,7 @@ static int ipw_load_firmware(struct ipw_priv *priv, u8 * data, size_t len)
 	if (!virts)
 		return -ENOMEM;

-	phys = kmalloc_array(CB_NUMBER_OF_ELEMENTS_SMALL, sizeof(dma_addr_t),
-			     GFP_KERNEL);
+	phys = kmalloc_objs(dma_addr_t, CB_NUMBER_OF_ELEMENTS_SMALL, GFP_KERNEL);
 	if (!phys) {
 		kfree(virts);
 		return -ENOMEM;
@@ -3723,7 +3722,7 @@ static int ipw_queue_tx_init(struct ipw_priv *priv,
 {
 	struct pci_dev *dev = priv->pci_dev;

-	q->txb = kmalloc_array(count, sizeof(q->txb[0]), GFP_KERNEL);
+	q->txb = kmalloc_objs(q->txb[0], count, GFP_KERNEL);
 	if (!q->txb)
 		return -ENOMEM;

@@ -5201,7 +5200,7 @@ static struct ipw_rx_queue *ipw_rx_queue_alloc(struct ipw_priv *priv)
 	struct ipw_rx_queue *rxq;
 	int i;

-	rxq = kzalloc(sizeof(*rxq), GFP_KERNEL);
+	rxq = kzalloc_obj(*rxq, GFP_KERNEL);
 	if (unlikely(!rxq)) {
 		IPW_ERROR("memory allocation failed\n");
 		return NULL;
@@ -8103,7 +8102,7 @@ static  int is_duplicate_packet(struct ipw_priv *priv,
 					break;
 			}
 			if (p == &priv->ibss_mac_hash[index]) {
-				entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+				entry = kmalloc_obj(*entry, GFP_ATOMIC);
 				if (!entry) {
 					IPW_ERROR
 					    ("Cannot malloc new mac entry\n");
@@ -11119,8 +11118,7 @@ static int ipw_up(struct ipw_priv *priv)
 		return -EIO;

 	if (cmdlog && !priv->cmdlog) {
-		priv->cmdlog = kcalloc(cmdlog, sizeof(*priv->cmdlog),
-				       GFP_KERNEL);
+		priv->cmdlog = kzalloc_objs(*priv->cmdlog, cmdlog, GFP_KERNEL);
 		if (priv->cmdlog == NULL) {
 			IPW_ERROR("Error allocating %d command log entries.\n",
 				  cmdlog);
@@ -11279,9 +11277,8 @@ static int ipw_wdev_init(struct net_device *dev)

 		bg_band->band = NL80211_BAND_2GHZ;
 		bg_band->n_channels = geo->bg_channels;
-		bg_band->channels = kcalloc(geo->bg_channels,
-					    sizeof(struct ieee80211_channel),
-					    GFP_KERNEL);
+		bg_band->channels = kzalloc_objs(struct ieee80211_channel,
+						 geo->bg_channels, GFP_KERNEL);
 		if (!bg_band->channels) {
 			rc = -ENOMEM;
 			goto out;
@@ -11318,9 +11315,8 @@ static int ipw_wdev_init(struct net_device *dev)

 		a_band->band = NL80211_BAND_5GHZ;
 		a_band->n_channels = geo->a_channels;
-		a_band->channels = kcalloc(geo->a_channels,
-					   sizeof(struct ieee80211_channel),
-					   GFP_KERNEL);
+		a_band->channels = kzalloc_objs(struct ieee80211_channel,
+						geo->a_channels, GFP_KERNEL);
 		if (!a_band->channels) {
 			rc = -ENOMEM;
 			goto out;
diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_crypto.c b/drivers/net/wireless/intel/ipw2x00/libipw_crypto.c
index 243d0c5928a2..e39b95f68dd4 100644
--- a/drivers/net/wireless/intel/ipw2x00/libipw_crypto.c
+++ b/drivers/net/wireless/intel/ipw2x00/libipw_crypto.c
@@ -159,7 +159,7 @@ int libipw_register_crypto_ops(const struct libipw_crypto_ops *ops)
 	unsigned long flags;
 	struct libipw_crypto_alg *alg;

-	alg = kzalloc(sizeof(*alg), GFP_KERNEL);
+	alg = kzalloc_obj(*alg, GFP_KERNEL);
 	if (alg == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_crypto_ccmp.c b/drivers/net/wireless/intel/ipw2x00/libipw_crypto_ccmp.c
index bf900d8c8ad3..631a4dd86cab 100644
--- a/drivers/net/wireless/intel/ipw2x00/libipw_crypto_ccmp.c
+++ b/drivers/net/wireless/intel/ipw2x00/libipw_crypto_ccmp.c
@@ -53,7 +53,7 @@ static void *libipw_ccmp_init(int key_idx)
 {
 	struct libipw_ccmp_data *priv;

-	priv = kzalloc(sizeof(*priv), GFP_ATOMIC);
+	priv = kzalloc_obj(*priv, GFP_ATOMIC);
 	if (priv == NULL)
 		goto fail;
 	priv->key_idx = key_idx;
diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_crypto_tkip.c b/drivers/net/wireless/intel/ipw2x00/libipw_crypto_tkip.c
index 32288697da4f..c6b0de8d91ae 100644
--- a/drivers/net/wireless/intel/ipw2x00/libipw_crypto_tkip.c
+++ b/drivers/net/wireless/intel/ipw2x00/libipw_crypto_tkip.c
@@ -87,7 +87,7 @@ static void *libipw_tkip_init(int key_idx)
 	if (fips_enabled)
 		return NULL;

-	priv = kzalloc(sizeof(*priv), GFP_ATOMIC);
+	priv = kzalloc_obj(*priv, GFP_ATOMIC);
 	if (priv == NULL)
 		goto fail;

diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_crypto_wep.c b/drivers/net/wireless/intel/ipw2x00/libipw_crypto_wep.c
index c3a4ccb9de17..96109e123a1a 100644
--- a/drivers/net/wireless/intel/ipw2x00/libipw_crypto_wep.c
+++ b/drivers/net/wireless/intel/ipw2x00/libipw_crypto_wep.c
@@ -37,7 +37,7 @@ static void *libipw_wep_init(int keyidx)
 	if (fips_enabled)
 		return NULL;

-	priv = kzalloc(sizeof(*priv), GFP_ATOMIC);
+	priv = kzalloc_obj(*priv, GFP_ATOMIC);
 	if (priv == NULL)
 		return NULL;
 	priv->key_idx = keyidx;
diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_module.c b/drivers/net/wireless/intel/ipw2x00/libipw_module.c
index 2ad085b1f492..cc771ee9bac3 100644
--- a/drivers/net/wireless/intel/ipw2x00/libipw_module.c
+++ b/drivers/net/wireless/intel/ipw2x00/libipw_module.c
@@ -57,8 +57,8 @@ static int libipw_networks_allocate(struct libipw_device *ieee)
 	int i, j;

 	for (i = 0; i < MAX_NETWORK_COUNT; i++) {
-		ieee->networks[i] = kzalloc(sizeof(struct libipw_network),
-					    GFP_KERNEL);
+		ieee->networks[i] = kzalloc_obj(struct libipw_network,
+						GFP_KERNEL);
 		if (!ieee->networks[i]) {
 			LIBIPW_ERROR("Out of memory allocating beacons\n");
 			for (j = 0; j < i; j++)
diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_tx.c b/drivers/net/wireless/intel/ipw2x00/libipw_tx.c
index 80edaa3dea9c..6e16060834b8 100644
--- a/drivers/net/wireless/intel/ipw2x00/libipw_tx.c
+++ b/drivers/net/wireless/intel/ipw2x00/libipw_tx.c
@@ -180,7 +180,7 @@ static struct libipw_txb *libipw_alloc_txb(int nr_frags, int txb_size,
 	struct libipw_txb *txb;
 	int i;

-	txb = kzalloc(struct_size(txb, fragments, nr_frags), gfp_mask);
+	txb = kzalloc_flex(*txb, fragments, nr_frags, gfp_mask);
 	if (!txb)
 		return NULL;

diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_wx.c b/drivers/net/wireless/intel/ipw2x00/libipw_wx.c
index db71d81b0d4f..3db31b740a0e 100644
--- a/drivers/net/wireless/intel/ipw2x00/libipw_wx.c
+++ b/drivers/net/wireless/intel/ipw2x00/libipw_wx.c
@@ -365,8 +365,7 @@ int libipw_wx_set_encode(struct libipw_device *ieee,
 		struct libipw_crypt_data *new_crypt;

 		/* take WEP into use */
-		new_crypt = kzalloc(sizeof(struct libipw_crypt_data),
-				    GFP_KERNEL);
+		new_crypt = kzalloc_obj(struct libipw_crypt_data, GFP_KERNEL);
 		if (new_crypt == NULL)
 			return -ENOMEM;
 		new_crypt->ops = libipw_get_crypto_ops("WEP");
@@ -598,7 +597,7 @@ int libipw_wx_set_encodeext(struct libipw_device *ieee,

 		libipw_crypt_delayed_deinit(&ieee->crypt_info, crypt);

-		new_crypt = kzalloc(sizeof(*new_crypt), GFP_KERNEL);
+		new_crypt = kzalloc_obj(*new_crypt, GFP_KERNEL);
 		if (new_crypt == NULL) {
 			ret = -ENOMEM;
 			goto done;
diff --git a/drivers/net/wireless/intel/iwlegacy/3945-mac.c b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
index 54991f31c52c..c87579e4c7f9 100644
--- a/drivers/net/wireless/intel/iwlegacy/3945-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
@@ -269,7 +269,7 @@ il3945_get_free_frame(struct il_priv *il)
 	struct il3945_frame *frame;
 	struct list_head *element;
 	if (list_empty(&il->free_frames)) {
-		frame = kzalloc(sizeof(*frame), GFP_KERNEL);
+		frame = kzalloc_obj(*frame, GFP_KERNEL);
 		if (!frame) {
 			IL_ERR("Could not allocate frame!\n");
 			return NULL;
diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
index 57fa866efd9f..8429b6f5768b 100644
--- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
@@ -3027,7 +3027,7 @@ il4965_sta_alloc_lq(struct il_priv *il, u8 sta_id)
 	u32 rate_flags = 0;
 	__le32 rate_n_flags;

-	link_cmd = kzalloc(sizeof(struct il_link_quality_cmd), GFP_KERNEL);
+	link_cmd = kzalloc_obj(struct il_link_quality_cmd, GFP_KERNEL);
 	if (!link_cmd) {
 		IL_ERR("Unable to allocate memory for LQ cmd.\n");
 		return NULL;
@@ -3709,7 +3709,7 @@ il4965_get_free_frame(struct il_priv *il)
 	struct il_frame *frame;
 	struct list_head *element;
 	if (list_empty(&il->free_frames)) {
-		frame = kzalloc(sizeof(*frame), GFP_KERNEL);
+		frame = kzalloc_obj(*frame, GFP_KERNEL);
 		if (!frame) {
 			IL_ERR("Could not allocate frame!\n");
 			return NULL;
diff --git a/drivers/net/wireless/intel/iwlegacy/common.c b/drivers/net/wireless/intel/iwlegacy/common.c
index b7bd3ec4cc50..4a12703e9b46 100644
--- a/drivers/net/wireless/intel/iwlegacy/common.c
+++ b/drivers/net/wireless/intel/iwlegacy/common.c
@@ -907,8 +907,7 @@ il_init_channel_map(struct il_priv *il)
 	D_EEPROM("Parsing data for %d channels.\n", il->channel_count);

 	il->channel_info =
-	    kcalloc(il->channel_count, sizeof(struct il_channel_info),
-		    GFP_KERNEL);
+	    kzalloc_objs(struct il_channel_info, il->channel_count, GFP_KERNEL);
 	if (!il->channel_info) {
 		IL_ERR("Could not allocate channel_info\n");
 		il->channel_count = 0;
@@ -2969,9 +2968,8 @@ il_tx_queue_alloc(struct il_priv *il, struct il_tx_queue *txq, u32 id)
 	/* Driver ilate data, only for Tx (not command) queues,
 	 * not shared with device. */
 	if (id != il->cmd_queue) {
-		txq->skbs = kcalloc(TFD_QUEUE_SIZE_MAX,
-				    sizeof(struct sk_buff *),
-				    GFP_KERNEL);
+		txq->skbs = kzalloc_objs(struct sk_buff *, TFD_QUEUE_SIZE_MAX,
+					 GFP_KERNEL);
 		if (!txq->skbs) {
 			IL_ERR("Fail to alloc skbs\n");
 			goto error;
@@ -3024,9 +3022,9 @@ il_tx_queue_init(struct il_priv *il, u32 txq_id)
 	}

 	txq->meta =
-	    kcalloc(actual_slots, sizeof(struct il_cmd_meta), GFP_KERNEL);
+	    kzalloc_objs(struct il_cmd_meta, actual_slots, GFP_KERNEL);
 	txq->cmd =
-	    kcalloc(actual_slots, sizeof(struct il_device_cmd *), GFP_KERNEL);
+	    kzalloc_objs(struct il_device_cmd *, actual_slots, GFP_KERNEL);

 	if (!txq->meta || !txq->cmd)
 		goto out_free_arrays;
@@ -3444,12 +3442,12 @@ il_init_geos(struct il_priv *il)
 	}

 	channels =
-	    kcalloc(il->channel_count, sizeof(struct ieee80211_channel),
-		    GFP_KERNEL);
+	    kzalloc_objs(struct ieee80211_channel, il->channel_count,
+			 GFP_KERNEL);
 	if (!channels)
 		return -ENOMEM;

-	rates = kcalloc(RATE_COUNT_LEGACY, sizeof(*rates), GFP_KERNEL);
+	rates = kzalloc_objs(*rates, RATE_COUNT_LEGACY, GFP_KERNEL);
 	if (!rates) {
 		kfree(channels);
 		return -ENOMEM;
@@ -4611,9 +4609,8 @@ il_alloc_txq_mem(struct il_priv *il)
 {
 	if (!il->txq)
 		il->txq =
-		    kcalloc(il->cfg->num_of_queues,
-			    sizeof(struct il_tx_queue),
-			    GFP_KERNEL);
+		    kzalloc_objs(struct il_tx_queue, il->cfg->num_of_queues,
+				 GFP_KERNEL);
 	if (!il->txq) {
 		IL_ERR("Not enough memory for txq\n");
 		return -ENOMEM;
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/calib.c b/drivers/net/wireless/intel/iwlwifi/dvm/calib.c
index f488620d2844..94c5d40cdf41 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/calib.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/calib.c
@@ -63,7 +63,7 @@ int iwl_calib_set(struct iwl_priv *priv,
 	if (check_sub_overflow(len, sizeof(*cmd), &len))
 		return -ENOMEM;

-	res = kmalloc(struct_size(res, cmd.data, len), GFP_ATOMIC);
+	res = kmalloc_flex(*res, cmd.data, len, GFP_ATOMIC);
 	if (!res)
 		return -ENOMEM;
 	res->cmd = *cmd;
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/devices.c b/drivers/net/wireless/intel/iwlwifi/dvm/devices.c
index be7e61e2b291..5c8665b5a1b7 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/devices.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/devices.c
@@ -567,7 +567,7 @@ static int iwl6000_hw_channel_switch(struct iwl_priv *priv,
 	};
 	int err;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/eeprom.c b/drivers/net/wireless/intel/iwlwifi/dvm/eeprom.c
index d337ab543eb0..f723884e2a62 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/eeprom.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/eeprom.c
@@ -1067,8 +1067,7 @@ iwl_parse_eeprom_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg,
 	if (WARN_ON(!cfg || !cfg->eeprom_params))
 		return NULL;

-	data = kzalloc(struct_size(data, channels, IWL_NUM_CHANNELS),
-		       GFP_KERNEL);
+	data = kzalloc_flex(*data, channels, IWL_NUM_CHANNELS, GFP_KERNEL);
 	if (!data)
 		return NULL;

diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/lib.c b/drivers/net/wireless/intel/iwlwifi/dvm/lib.c
index 48711dbcfa5a..bc14ed3060dd 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/lib.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/lib.c
@@ -1056,7 +1056,7 @@ int iwlagn_suspend(struct iwl_priv *priv, struct cfg80211_wowlan *wowlan)
 	int ret, i;
 	u16 seq;

-	key_data.rsc_tsc = kzalloc(sizeof(*key_data.rsc_tsc), GFP_KERNEL);
+	key_data.rsc_tsc = kzalloc_obj(*key_data.rsc_tsc, GFP_KERNEL);
 	if (!key_data.rsc_tsc)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/main.c b/drivers/net/wireless/intel/iwlwifi/dvm/main.c
index 2b4dbebc71c2..ec30b5f3870b 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/main.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/main.c
@@ -205,7 +205,7 @@ int iwlagn_send_beacon_cmd(struct iwl_priv *priv)

 	/* Allocate beacon command */
 	if (!priv->beacon_cmd)
-		priv->beacon_cmd = kzalloc(sizeof(*tx_beacon_cmd), GFP_KERNEL);
+		priv->beacon_cmd = kzalloc_obj(*tx_beacon_cmd, GFP_KERNEL);
 	tx_beacon_cmd = priv->beacon_cmd;
 	if (!tx_beacon_cmd)
 		return -ENOMEM;
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/rx.c b/drivers/net/wireless/intel/iwlwifi/dvm/rx.c
index b34ee68f3dce..088302a238de 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/rx.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/rx.c
@@ -915,7 +915,7 @@ static void iwlagn_rx_noa_notification(struct iwl_priv *priv,
 		len += 1 + 2;
 		copylen += 1 + 2;

-		new_data = kmalloc(struct_size(new_data, data, len), GFP_ATOMIC);
+		new_data = kmalloc_flex(*new_data, data, len, GFP_ATOMIC);
 		if (new_data) {
 			new_data->length = len;
 			new_data->data[0] = WLAN_EID_VENDOR_SPECIFIC;
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c
index 8b01ab986cb1..b29859f9d7c0 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c
@@ -864,7 +864,7 @@ iwl_sta_alloc_lq(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
 {
 	struct iwl_link_quality_cmd *link_cmd;

-	link_cmd = kzalloc(sizeof(struct iwl_link_quality_cmd), GFP_KERNEL);
+	link_cmd = kzalloc_obj(struct iwl_link_quality_cmd, GFP_KERNEL);
 	if (!link_cmd) {
 		IWL_ERR(priv, "Unable to allocate memory for LQ cmd.\n");
 		return NULL;
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/tt.c b/drivers/net/wireless/intel/iwlwifi/dvm/tt.c
index 96831ce8da6f..9bfdf033463b 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/tt.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/tt.c
@@ -595,13 +595,11 @@ void iwl_tt_initialize(struct iwl_priv *priv)

 	if (priv->lib->adv_thermal_throttle) {
 		IWL_DEBUG_TEMP(priv, "Advanced Thermal Throttling\n");
-		tt->restriction = kcalloc(IWL_TI_STATE_MAX,
-					  sizeof(struct iwl_tt_restriction),
-					  GFP_KERNEL);
-		tt->transaction = kcalloc(IWL_TI_STATE_MAX *
-					  (IWL_TI_STATE_MAX - 1),
-					  sizeof(struct iwl_tt_trans),
-					  GFP_KERNEL);
+		tt->restriction = kzalloc_objs(struct iwl_tt_restriction,
+					       IWL_TI_STATE_MAX, GFP_KERNEL);
+		tt->transaction = kzalloc_objs(struct iwl_tt_trans,
+					       IWL_TI_STATE_MAX * (IWL_TI_STATE_MAX - 1),
+					       GFP_KERNEL);
 		if (!tt->restriction || !tt->transaction) {
 			IWL_ERR(priv, "Fallback to Legacy Throttling\n");
 			priv->thermal_throttle.advanced_tt = false;
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
index 2ce55859641c..a070593e085f 100644
--- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
+++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
@@ -595,7 +595,7 @@ static struct scatterlist *alloc_sgtable(ssize_t size)
 			nents -= n_fill;
 		}

-		new = kcalloc(n_alloc, sizeof(*new), GFP_KERNEL);
+		new = kzalloc_objs(*new, n_alloc, GFP_KERNEL);
 		if (!new) {
 			if (result)
 				_devcd_free_sgtable(result);
@@ -2958,8 +2958,8 @@ int iwl_fw_dbg_error_collect(struct iwl_fw_runtime *fwrt,
 		struct iwl_fw_dump_desc *iwl_dump_error_desc;
 		int ret;

-		iwl_dump_error_desc =
-			kmalloc(sizeof(*iwl_dump_error_desc), GFP_KERNEL);
+		iwl_dump_error_desc = kmalloc_obj(*iwl_dump_error_desc,
+						  GFP_KERNEL);

 		if (!iwl_dump_error_desc)
 			return -ENOMEM;
@@ -3011,7 +3011,7 @@ int iwl_fw_dbg_collect(struct iwl_fw_runtime *fwrt,
 		delay = le32_to_cpu(trigger->stop_delay) * USEC_PER_MSEC;
 	}

-	desc = kzalloc(struct_size(desc, trig_desc.data, len), GFP_ATOMIC);
+	desc = kzalloc_flex(*desc, trig_desc.data, len, GFP_ATOMIC);
 	if (!desc)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/intel/iwlwifi/fw/debugfs.c b/drivers/net/wireless/intel/iwlwifi/fw/debugfs.c
index 3c4bee85b825..21d889344796 100644
--- a/drivers/net/wireless/intel/iwlwifi/fw/debugfs.c
+++ b/drivers/net/wireless/intel/iwlwifi/fw/debugfs.c
@@ -360,7 +360,7 @@ static void *iwl_dbgfs_fw_info_seq_start(struct seq_file *seq, loff_t *pos)
 	if (*pos >= fw->ucode_capa.n_cmd_versions)
 		return NULL;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;
 	state->pos = *pos;
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c b/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c
index f297e82d63d2..a45c3a9c223e 100644
--- a/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c
+++ b/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c
@@ -379,7 +379,7 @@ iwl_pnvm_load_pnvm_to_trans(struct iwl_trans *trans,
 		return;
 	}

-	pnvm_data = kzalloc(sizeof(*pnvm_data), GFP_KERNEL);
+	pnvm_data = kzalloc_obj(*pnvm_data, GFP_KERNEL);
 	if (!pnvm_data)
 		goto free;

@@ -425,7 +425,7 @@ iwl_pnvm_load_reduce_power_to_trans(struct iwl_trans *trans,
 		return;
 	}

-	pnvm_data = kzalloc(sizeof(*pnvm_data), GFP_KERNEL);
+	pnvm_data = kzalloc_obj(*pnvm_data, GFP_KERNEL);
 	if (!pnvm_data)
 		goto free;

diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c b/drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c
index 5240dacf1360..a6733224428a 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c
@@ -71,7 +71,7 @@ static struct iwl_ucode_tlv *iwl_dbg_tlv_add(const struct iwl_ucode_tlv *tlv,
 	u32 len = le32_to_cpu(tlv->length);
 	struct iwl_dbg_tlv_node *node;

-	node = kzalloc(struct_size(node, tlv.data, len), GFP_KERNEL);
+	node = kzalloc_flex(*node, tlv.data, len, GFP_KERNEL);
 	if (!node)
 		return NULL;

@@ -618,7 +618,7 @@ static int iwl_dbg_tlv_alloc_fragments(struct iwl_fw_runtime *fwrt,
 	num_frags = min_t(u32, num_frags, remain_pages);
 	frag_pages = DIV_ROUND_UP(remain_pages, num_frags);

-	fw_mon->frags = kcalloc(num_frags, sizeof(*fw_mon->frags), GFP_KERNEL);
+	fw_mon->frags = kzalloc_objs(*fw_mon->frags, num_frags, GFP_KERNEL);
 	if (!fw_mon->frags)
 		return -ENOMEM;

@@ -1001,7 +1001,7 @@ static void iwl_dbg_tlv_set_periodic_trigs(struct iwl_fw_runtime *fwrt)

 		collect_interval = le32_to_cpu(trig->data[0]);

-		timer_node = kzalloc(sizeof(*timer_node), GFP_KERNEL);
+		timer_node = kzalloc_obj(*timer_node, GFP_KERNEL);
 		if (!timer_node) {
 			IWL_ERR(fwrt,
 				"WRT: Failed to allocate periodic trigger\n");
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
index f8fc6f30fbe5..39e362df0233 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
@@ -1459,7 +1459,7 @@ static int iwl_alloc_ucode_mem(struct fw_img *out, struct fw_img_parsing *img)
 {
 	struct fw_desc *sec;

-	sec = kcalloc(img->sec_counter, sizeof(*sec), GFP_KERNEL);
+	sec = kzalloc_objs(*sec, img->sec_counter, GFP_KERNEL);
 	if (!sec)
 		return -ENOMEM;

@@ -1622,7 +1622,7 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
 	/* dump all fw memory areas by default */
 	fw->dbg.dump_mask = 0xffffffff;

-	pieces = kzalloc(sizeof(*pieces), GFP_KERNEL);
+	pieces = kzalloc_obj(*pieces, GFP_KERNEL);
 	if (!pieces)
 		goto out_free_fw;

@@ -1915,7 +1915,7 @@ struct iwl_drv *iwl_drv_start(struct iwl_trans *trans)
 	struct iwl_drv *drv;
 	int ret;

-	drv = kzalloc(sizeof(*drv), GFP_KERNEL);
+	drv = kzalloc_obj(*drv, GFP_KERNEL);
 	if (!drv) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
index e021fc57d85d..75d1db91314b 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
@@ -1377,13 +1377,11 @@ iwl_parse_mei_nvm_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg,
 	u8 tx_chains = fw->valid_rx_ant;

 	if (cfg->uhb_supported)
-		data = kzalloc(struct_size(data, channels,
-					   IWL_NVM_NUM_CHANNELS_UHB),
-					   GFP_KERNEL);
+		data = kzalloc_flex(*data, channels, IWL_NVM_NUM_CHANNELS_UHB,
+				    GFP_KERNEL);
 	else
-		data = kzalloc(struct_size(data, channels,
-					   IWL_NVM_NUM_CHANNELS_EXT),
-					   GFP_KERNEL);
+		data = kzalloc_flex(*data, channels, IWL_NVM_NUM_CHANNELS_EXT,
+				    GFP_KERNEL);
 	if (!data)
 		return NULL;

@@ -1446,17 +1444,14 @@ iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg,
 	const __le16 *ch_section;

 	if (cfg->uhb_supported)
-		data = kzalloc(struct_size(data, channels,
-					   IWL_NVM_NUM_CHANNELS_UHB),
-					   GFP_KERNEL);
+		data = kzalloc_flex(*data, channels, IWL_NVM_NUM_CHANNELS_UHB,
+				    GFP_KERNEL);
 	else if (cfg->nvm_type != IWL_NVM_EXT)
-		data = kzalloc(struct_size(data, channels,
-					   IWL_NVM_NUM_CHANNELS),
-					   GFP_KERNEL);
+		data = kzalloc_flex(*data, channels, IWL_NVM_NUM_CHANNELS,
+				    GFP_KERNEL);
 	else
-		data = kzalloc(struct_size(data, channels,
-					   IWL_NVM_NUM_CHANNELS_EXT),
-					   GFP_KERNEL);
+		data = kzalloc_flex(*data, channels, IWL_NVM_NUM_CHANNELS_EXT,
+				    GFP_KERNEL);
 	if (!data)
 		return NULL;

@@ -1692,7 +1687,7 @@ iwl_parse_nvm_mcc_info(struct iwl_trans *trans,
 		      num_of_ch);

 	/* build a regdomain rule for every valid channel */
-	regd = kzalloc(struct_size(regd, reg_rules, num_of_ch), GFP_KERNEL);
+	regd = kzalloc_flex(*regd, reg_rules, num_of_ch, GFP_KERNEL);
 	if (!regd)
 		return ERR_PTR(-ENOMEM);

@@ -2041,7 +2036,7 @@ struct iwl_nvm_data *iwl_get_nvm(struct iwl_trans *trans,
 	if (empty_otp)
 		IWL_INFO(trans, "OTP is empty\n");

-	nvm = kzalloc(struct_size(nvm, channels, IWL_NUM_CHANNELS), GFP_KERNEL);
+	nvm = kzalloc_flex(*nvm, channels, IWL_NUM_CHANNELS, GFP_KERNEL);
 	if (!nvm) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-phy-db.c b/drivers/net/wireless/intel/iwlwifi/iwl-phy-db.c
index 0a93ac769f66..a5e287daf440 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-phy-db.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-phy-db.c
@@ -59,8 +59,7 @@ struct iwl_phy_db_chg_txp {

 struct iwl_phy_db *iwl_phy_db_init(struct iwl_trans *trans)
 {
-	struct iwl_phy_db *phy_db = kzalloc(sizeof(struct iwl_phy_db),
-					    GFP_KERNEL);
+	struct iwl_phy_db *phy_db = kzalloc_obj(struct iwl_phy_db, GFP_KERNEL);

 	if (!phy_db)
 		return phy_db;
@@ -172,9 +171,9 @@ int iwl_phy_db_set_section(struct iwl_phy_db *phy_db,
 			 * Firmware sends the largest index first, so we can use
 			 * it to know how much we should allocate.
 			 */
-			phy_db->calib_ch_group_papd = kcalloc(chg_id + 1,
-							      sizeof(struct iwl_phy_db_entry),
-							      GFP_ATOMIC);
+			phy_db->calib_ch_group_papd = kzalloc_objs(struct iwl_phy_db_entry,
+								   chg_id + 1,
+								   GFP_ATOMIC);
 			if (!phy_db->calib_ch_group_papd)
 				return -ENOMEM;
 			phy_db->n_group_papd = chg_id + 1;
@@ -186,9 +185,9 @@ int iwl_phy_db_set_section(struct iwl_phy_db *phy_db,
 			 * Firmware sends the largest index first, so we can use
 			 * it to know how much we should allocate.
 			 */
-			phy_db->calib_ch_group_txp = kcalloc(chg_id + 1,
-							     sizeof(struct iwl_phy_db_entry),
-							     GFP_ATOMIC);
+			phy_db->calib_ch_group_txp = kzalloc_objs(struct iwl_phy_db_entry,
+								  chg_id + 1,
+								  GFP_ATOMIC);
 			if (!phy_db->calib_ch_group_txp)
 				return -ENOMEM;
 			phy_db->n_group_txp = chg_id + 1;
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.c b/drivers/net/wireless/intel/iwlwifi/iwl-trans.c
index fa1442246662..eebec9b8c169 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.c
@@ -46,7 +46,7 @@ iwl_trans_get_restart_data(struct device *dev)
 	if (data)
 		return data;

-	data = kzalloc(struct_size(data, name, strlen(name) + 1), GFP_ATOMIC);
+	data = kzalloc_flex(*data, name, strlen(name) + 1, GFP_ATOMIC);
 	if (!data)
 		return NULL;

@@ -113,7 +113,7 @@ static void iwl_trans_schedule_reprobe(struct iwl_trans *trans,
 		return;
 	}

-	reprobe = kzalloc(sizeof(*reprobe), GFP_KERNEL);
+	reprobe = kzalloc_obj(*reprobe, GFP_KERNEL);
 	if (!reprobe) {
 		module_put(THIS_MODULE);
 		return;
diff --git a/drivers/net/wireless/intel/iwlwifi/mei/main.c b/drivers/net/wireless/intel/iwlwifi/mei/main.c
index dce0b7cf7b26..f9358cb01103 100644
--- a/drivers/net/wireless/intel/iwlwifi/mei/main.c
+++ b/drivers/net/wireless/intel/iwlwifi/mei/main.c
@@ -702,7 +702,7 @@ static void iwl_mei_handle_csme_filters(struct mei_cl_device *cldev,
 		rcu_dereference_protected(mei->filters,
 					  lockdep_is_held(&iwl_mei_mutex));

-	new_filters = kzalloc(sizeof(*new_filters), GFP_KERNEL);
+	new_filters = kzalloc_obj(*new_filters, GFP_KERNEL);
 	if (!new_filters)
 		return;

@@ -886,7 +886,7 @@ static void iwl_mei_handle_nvm(struct mei_cl_device *cldev,
 	int i;

 	kfree(mei->nvm);
-	mei->nvm = kzalloc(sizeof(*mei_nvm), GFP_KERNEL);
+	mei->nvm = kzalloc_obj(*mei_nvm, GFP_KERNEL);
 	if (!mei->nvm)
 		return;

diff --git a/drivers/net/wireless/intel/iwlwifi/mld/d3.c b/drivers/net/wireless/intel/iwlwifi/mld/d3.c
index 6595542e95cf..e7849183dff1 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/d3.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/d3.c
@@ -609,10 +609,9 @@ iwl_mld_handle_wowlan_info_notif(struct iwl_mld *mld,
 							5))
 			return true;

-		converted_notif = kzalloc(struct_size(converted_notif,
-						      mlo_gtks,
-						      notif_v5->num_mlo_link_keys),
-					  GFP_ATOMIC);
+		converted_notif = kzalloc_flex(*converted_notif, mlo_gtks,
+					       notif_v5->num_mlo_link_keys,
+					       GFP_ATOMIC);
 		if (!converted_notif) {
 			IWL_ERR(mld,
 				"Failed to allocate memory for converted wowlan_info_notif\n");
@@ -1173,8 +1172,7 @@ iwl_mld_set_netdetect_info(struct iwl_mld *mld,
 		for (int k = 0; k < SCAN_OFFLOAD_MATCHING_CHANNELS_LEN; k++)
 			n_channels +=
 				hweight8(matches[i].matching_channels[k]);
-		match = kzalloc(struct_size(match, channels, n_channels),
-				GFP_KERNEL);
+		match = kzalloc_flex(*match, channels, n_channels, GFP_KERNEL);
 		if (!match)
 			return;

@@ -1251,8 +1249,8 @@ iwl_mld_process_netdetect_res(struct iwl_mld *mld,
 		goto out;
 	}
 	n_matches = hweight_long(matched_profiles);
-	netdetect_info = kzalloc(struct_size(netdetect_info, matches,
-					     n_matches), GFP_KERNEL);
+	netdetect_info = kzalloc_flex(*netdetect_info, matches, n_matches,
+				      GFP_KERNEL);
 	if (netdetect_info)
 		iwl_mld_set_netdetect_info(mld, netdetect_cfg, netdetect_info,
 					   resume_data->netdetect_res,
@@ -1656,7 +1654,7 @@ iwl_mld_suspend_send_security_cmds(struct iwl_mld *mld,
 	struct iwl_mld_suspend_key_iter_data data = {};
 	int ret;

-	data.rsc = kzalloc(sizeof(*data.rsc), GFP_KERNEL);
+	data.rsc = kzalloc_obj(*data.rsc, GFP_KERNEL);
 	if (!data.rsc)
 		return -ENOMEM;

@@ -2002,8 +2000,8 @@ int iwl_mld_wowlan_resume(struct iwl_mld *mld)

 	iwl_fw_dbg_read_d3_debug_data(&mld->fwrt);

-	resume_data.wowlan_status = kzalloc(sizeof(*resume_data.wowlan_status),
-					    GFP_KERNEL);
+	resume_data.wowlan_status = kzalloc_obj(*resume_data.wowlan_status,
+						GFP_KERNEL);
 	if (!resume_data.wowlan_status)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.c b/drivers/net/wireless/intel/iwlwifi/mld/iface.c
index 743e44ff19cf..b418cbeb30aa 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/iface.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.c
@@ -542,7 +542,7 @@ void iwl_mld_handle_probe_resp_data_notif(struct iwl_mld *mld,
 			 notif->noa_attr.len_low))
 		return;

-	new_data = kzalloc(sizeof(*new_data), GFP_KERNEL);
+	new_data = kzalloc_obj(*new_data, GFP_KERNEL);
 	if (!new_data)
 		return;

diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.c b/drivers/net/wireless/intel/iwlwifi/mld/link.c
index d89840a1152b..5640de4662d7 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/link.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/link.c
@@ -468,7 +468,7 @@ int iwl_mld_add_link(struct iwl_mld *mld,
 		if (is_deflink) {
 			link = &mld_vif->deflink;
 		} else {
-			link = kzalloc(sizeof(*link), GFP_KERNEL);
+			link = kzalloc_obj(*link, GFP_KERNEL);
 			if (!link)
 				return -ENOMEM;
 		}
diff --git a/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c b/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c
index 23362867b400..fb63c8ba800a 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/low_latency.c
@@ -131,8 +131,8 @@ int iwl_mld_low_latency_init(struct iwl_mld *mld)
 	struct iwl_mld_low_latency *ll = &mld->low_latency;
 	unsigned long ts = jiffies;

-	ll->pkts_counters = kcalloc(mld->trans->info.num_rxqs,
-				    sizeof(*ll->pkts_counters), GFP_KERNEL);
+	ll->pkts_counters = kzalloc_objs(*ll->pkts_counters,
+					 mld->trans->info.num_rxqs, GFP_KERNEL);
 	if (!ll->pkts_counters)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c
index 3414b04a6953..54e128fd0141 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c
@@ -2092,8 +2092,7 @@ static int iwl_mld_alloc_ptk_pn(struct iwl_mld *mld,
 		return -EINVAL;

 	WARN_ON(rcu_access_pointer(mld_sta->ptk_pn[keyidx]));
-	*ptk_pn = kzalloc(struct_size(*ptk_pn, q, num_rx_queues),
-			  GFP_KERNEL);
+	*ptk_pn = kzalloc_flex(**ptk_pn, q, num_rx_queues, GFP_KERNEL);
 	if (!*ptk_pn)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/intel/iwlwifi/mld/notif.c b/drivers/net/wireless/intel/iwlwifi/mld/notif.c
index 35356b244c0a..240526d8b632 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/notif.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/notif.c
@@ -557,7 +557,7 @@ static void iwl_mld_rx_notif(struct iwl_mld *mld,
 			break;
 		}

-		entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+		entry = kzalloc_obj(*entry, GFP_ATOMIC);
 		/* we can't do much... */
 		if (!entry)
 			return;
diff --git a/drivers/net/wireless/intel/iwlwifi/mld/scan.c b/drivers/net/wireless/intel/iwlwifi/mld/scan.c
index 16f48087a888..6679be028a6b 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/scan.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/scan.c
@@ -2083,9 +2083,9 @@ void iwl_mld_handle_channel_survey_notif(struct iwl_mld *mld,
 			n_channels += mld->wiphy->bands[band]->n_channels;
 		}

-		mld->channel_survey = kzalloc(struct_size(mld->channel_survey,
-							  channels, n_channels),
-							  GFP_KERNEL);
+		mld->channel_survey = kzalloc_flex(*mld->channel_survey,
+						   channels, n_channels,
+						   GFP_KERNEL);

 		if (!mld->channel_survey)
 			return;
diff --git a/drivers/net/wireless/intel/iwlwifi/mld/sta.c b/drivers/net/wireless/intel/iwlwifi/mld/sta.c
index 6056a306f7cb..0869f2ee7cee 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/sta.c
@@ -539,7 +539,7 @@ iwl_mld_add_link_sta(struct iwl_mld *mld, struct ieee80211_link_sta *link_sta)
 	if (link_sta == &link_sta->sta->deflink) {
 		mld_link_sta = &mld_sta->deflink;
 	} else {
-		mld_link_sta = kzalloc(sizeof(*mld_link_sta), GFP_KERNEL);
+		mld_link_sta = kzalloc_obj(*mld_link_sta, GFP_KERNEL);
 		if (!mld_link_sta)
 			return -ENOMEM;
 	}
@@ -660,8 +660,8 @@ iwl_mld_alloc_dup_data(struct iwl_mld *mld, struct iwl_mld_sta *mld_sta)
 	if (mld->fw_status.in_hw_restart)
 		return 0;

-	dup_data = kcalloc(mld->trans->info.num_rxqs, sizeof(*dup_data),
-			   GFP_KERNEL);
+	dup_data = kzalloc_objs(*dup_data, mld->trans->info.num_rxqs,
+				GFP_KERNEL);
 	if (!dup_data)
 		return -ENOMEM;

@@ -695,9 +695,9 @@ static void iwl_mld_alloc_mpdu_counters(struct iwl_mld *mld,
 	    sta->tdls || !ieee80211_vif_is_mld(vif))
 		return;

-	mld_sta->mpdu_counters = kcalloc(mld->trans->info.num_rxqs,
-					 sizeof(*mld_sta->mpdu_counters),
-					 GFP_KERNEL);
+	mld_sta->mpdu_counters = kzalloc_objs(*mld_sta->mpdu_counters,
+				              mld->trans->info.num_rxqs,
+				              GFP_KERNEL);
 	if (!mld_sta->mpdu_counters)
 		return;

diff --git a/drivers/net/wireless/intel/iwlwifi/mld/time_sync.c b/drivers/net/wireless/intel/iwlwifi/mld/time_sync.c
index 50799f9bfccb..ad6f5c40f23d 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/time_sync.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/time_sync.c
@@ -12,8 +12,8 @@
 static int iwl_mld_init_time_sync(struct iwl_mld *mld, u32 protocols,
 				  const u8 *addr)
 {
-	struct iwl_mld_time_sync_data *time_sync = kzalloc(sizeof(*time_sync),
-							   GFP_KERNEL);
+	struct iwl_mld_time_sync_data *time_sync = kzalloc_obj(*time_sync,
+							       GFP_KERNEL);

 	if (!time_sync)
 		return -ENOMEM;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
index 6c225861db61..8df70323d426 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
@@ -460,7 +460,7 @@ static int iwl_mvm_wowlan_config_rsc_tsc(struct iwl_mvm *mvm,
 		struct wowlan_key_rsc_v5_data data = {};
 		int i;

-		data.rsc = kzalloc(sizeof(*data.rsc), GFP_KERNEL);
+		data.rsc = kzalloc_obj(*data.rsc, GFP_KERNEL);
 		if (!data.rsc)
 			return -ENOMEM;

@@ -483,7 +483,7 @@ static int iwl_mvm_wowlan_config_rsc_tsc(struct iwl_mvm *mvm,
 	} else if (ver == 2 || ver == IWL_FW_CMD_VER_UNKNOWN) {
 		struct wowlan_key_rsc_tsc_data data = {};

-		data.rsc_tsc = kzalloc(sizeof(*data.rsc_tsc), GFP_KERNEL);
+		data.rsc_tsc = kzalloc_obj(*data.rsc_tsc, GFP_KERNEL);
 		if (!data.rsc_tsc)
 			return -ENOMEM;

@@ -2605,8 +2605,7 @@ static void iwl_mvm_query_netdetect_reasons(struct iwl_mvm *mvm,
 		n_matches = 0;
 	}

-	net_detect = kzalloc(struct_size(net_detect, matches, n_matches),
-			     GFP_KERNEL);
+	net_detect = kzalloc_flex(*net_detect, matches, n_matches, GFP_KERNEL);
 	if (!net_detect || !n_matches)
 		goto out_report_nd;
 	net_detect->n_matches = n_matches;
@@ -2620,8 +2619,7 @@ static void iwl_mvm_query_netdetect_reasons(struct iwl_mvm *mvm,
 							   d3_data->nd_results,
 							   i);

-		match = kzalloc(struct_size(match, channels, n_channels),
-				GFP_KERNEL);
+		match = kzalloc_flex(*match, channels, n_channels, GFP_KERNEL);
 		if (!match)
 			goto out_report_nd;
 		match->n_channels = n_channels;
@@ -3093,7 +3091,7 @@ static int __iwl_mvm_resume(struct iwl_mvm *mvm)
 	}

 	if (resume_notif_based) {
-		d3_data.status = kzalloc(sizeof(*d3_data.status), GFP_KERNEL);
+		d3_data.status = kzalloc_obj(*d3_data.status, GFP_KERNEL);
 		if (!d3_data.status) {
 			IWL_ERR(mvm, "Failed to allocate wowlan status\n");
 			ret = -ENOMEM;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c b/drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c
index a493ef6bedc3..0a21670a9207 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c
@@ -1124,7 +1124,7 @@ static void iwl_mvm_ftm_rtt_smoothing(struct iwl_mvm *mvm,
 	}

 	if (!resp) {
-		resp = kzalloc(sizeof(*resp), GFP_KERNEL);
+		resp = kzalloc_obj(*resp, GFP_KERNEL);
 		if (!resp)
 			return;

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
index 0e5820c13523..a633f0d9c821 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
@@ -1764,7 +1764,7 @@ void iwl_mvm_probe_resp_data_notif(struct iwl_mvm *mvm,
 			 notif->noa_attr.len_low))
 		return;

-	new_data = kzalloc(sizeof(*new_data), GFP_KERNEL);
+	new_data = kzalloc_obj(*new_data, GFP_KERNEL);
 	if (!new_data)
 		return;

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index 169c87588938..aeaa1d4b312d 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -4348,9 +4348,9 @@ static int __iwl_mvm_mac_set_key(struct ieee80211_hw *hw,
 			int tid, q;

 			WARN_ON(rcu_access_pointer(mvmsta->ptk_pn[keyidx]));
-			ptk_pn = kzalloc(struct_size(ptk_pn, q,
-						     mvm->trans->info.num_rxqs),
-					 GFP_KERNEL);
+			ptk_pn = kzalloc_flex(*ptk_pn, q,
+					      mvm->trans->info.num_rxqs,
+					      GFP_KERNEL);
 			if (!ptk_pn) {
 				ret = -ENOMEM;
 				break;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c
index 075ff09e93cc..00ba47d5f499 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c
@@ -905,7 +905,7 @@ iwl_mvm_mld_change_vif_links(struct ieee80211_hw *hw,

 		if (!(added & BIT(i)))
 			continue;
-		new_link[i] = kzalloc(sizeof(*new_link[i]), GFP_KERNEL);
+		new_link[i] = kzalloc_obj(*new_link[i], GFP_KERNEL);
 		if (!new_link[i]) {
 			err = -ENOMEM;
 			goto free;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
index 1100d763ceb6..8417b76e8fdb 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
@@ -547,7 +547,7 @@ static int iwl_mvm_mld_alloc_sta_link(struct iwl_mvm *mvm,
 	if (rcu_access_pointer(sta->link[link_id]) == &sta->deflink) {
 		link = &mvm_sta->deflink;
 	} else {
-		link = kzalloc(sizeof(*link), GFP_KERNEL);
+		link = kzalloc_obj(*link, GFP_KERNEL);
 		if (!link)
 			return -ENOMEM;
 	}
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
index 5ebd046371f5..be328607e6f8 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
@@ -1097,7 +1097,7 @@ static void iwl_mvm_me_conn_status(void *priv, const struct iwl_mei_conn_info *c
 	 */
 	prev_conn_info = rcu_dereference_protected(mvm->csme_conn_info, true);

-	curr_conn_info = kzalloc(sizeof(*curr_conn_info), GFP_KERNEL);
+	curr_conn_info = kzalloc_obj(*curr_conn_info, GFP_KERNEL);
 	if (!curr_conn_info)
 		return;

@@ -1747,7 +1747,7 @@ static void iwl_mvm_rx_common(struct iwl_mvm *mvm,
 			return;
 		}

-		entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+		entry = kzalloc_obj(*entry, GFP_ATOMIC);
 		/* we can't do much... */
 		if (!entry)
 			return;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
index 9c51953d255d..3e39c243ddca 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
@@ -547,7 +547,7 @@ iwl_mvm_config_sched_scan_profiles(struct iwl_mvm *mvm,
 	else
 		blocklist_len = IWL_SCAN_MAX_BLACKLIST_LEN;

-	blocklist = kcalloc(blocklist_len, sizeof(*blocklist), GFP_KERNEL);
+	blocklist = kzalloc_objs(*blocklist, blocklist_len, GFP_KERNEL);
 	if (!blocklist)
 		return -ENOMEM;

@@ -3603,9 +3603,8 @@ void iwl_mvm_rx_channel_survey_notif(struct iwl_mvm *mvm,
 			n_channels += mvm->hw->wiphy->bands[band]->n_channels;
 		}

-		mvm->acs_survey = kzalloc(struct_size(mvm->acs_survey,
-						      channels, n_channels),
-					  GFP_KERNEL);
+		mvm->acs_survey = kzalloc_flex(*mvm->acs_survey, channels,
+					       n_channels, GFP_KERNEL);

 		if (!mvm->acs_survey)
 			return;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
index 363232bb74fa..5f37ee7b9ab1 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
@@ -1798,8 +1798,8 @@ int iwl_mvm_sta_init(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
 	if (iwl_mvm_has_new_rx_api(mvm)) {
 		int q;

-		dup_data = kcalloc(mvm->trans->info.num_rxqs,
-				   sizeof(*dup_data), GFP_KERNEL);
+		dup_data = kzalloc_objs(*dup_data, mvm->trans->info.num_rxqs,
+					GFP_KERNEL);
 		if (!dup_data)
 			return -ENOMEM;
 		/*
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c
index 0957223c776d..65b54f1e6347 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c
@@ -99,10 +99,10 @@ int iwl_pcie_init_fw_sec(struct iwl_trans *trans,
 	/* add 2 due to separators */
 	paging_cnt = iwl_pcie_get_num_sections(fw, lmac_cnt + umac_cnt + 2);

-	dram->fw = kcalloc(umac_cnt + lmac_cnt, sizeof(*dram->fw), GFP_KERNEL);
+	dram->fw = kzalloc_objs(*dram->fw, umac_cnt + lmac_cnt, GFP_KERNEL);
 	if (!dram->fw)
 		return -ENOMEM;
-	dram->paging = kcalloc(paging_cnt, sizeof(*dram->paging), GFP_KERNEL);
+	dram->paging = kzalloc_objs(*dram->paging, paging_cnt, GFP_KERNEL);
 	if (!dram->paging)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/rx.c
index 619a9505e6d9..4e23b292e4df 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/rx.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/rx.c
@@ -773,15 +773,14 @@ static int iwl_pcie_rx_alloc(struct iwl_trans *trans)
 	if (WARN_ON(trans_pcie->rxq))
 		return -EINVAL;

-	trans_pcie->rxq = kcalloc(trans->info.num_rxqs, sizeof(struct iwl_rxq),
-				  GFP_KERNEL);
-	trans_pcie->rx_pool = kcalloc(RX_POOL_SIZE(trans_pcie->num_rx_bufs),
-				      sizeof(trans_pcie->rx_pool[0]),
-				      GFP_KERNEL);
+	trans_pcie->rxq = kzalloc_objs(struct iwl_rxq, trans->info.num_rxqs,
+				       GFP_KERNEL);
+	trans_pcie->rx_pool = kzalloc_objs(trans_pcie->rx_pool[0],
+					   RX_POOL_SIZE(trans_pcie->num_rx_bufs),
+					   GFP_KERNEL);
 	trans_pcie->global_table =
-		kcalloc(RX_POOL_SIZE(trans_pcie->num_rx_bufs),
-			sizeof(trans_pcie->global_table[0]),
-			GFP_KERNEL);
+		kzalloc_objs(trans_pcie->global_table[0],
+			     RX_POOL_SIZE(trans_pcie->num_rx_bufs), GFP_KERNEL);
 	if (!trans_pcie->rxq || !trans_pcie->rx_pool ||
 	    !trans_pcie->global_table) {
 		ret = -ENOMEM;
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/trans.c
index 415a19ea9f06..ec88aefb0913 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/trans.c
@@ -2303,7 +2303,7 @@ void iwl_trans_pcie_reset(struct iwl_trans *trans, enum iwl_reset_mode mode)
 		return;
 	}

-	removal = kzalloc(sizeof(*removal), GFP_ATOMIC);
+	removal = kzalloc_obj(*removal, GFP_ATOMIC);
 	if (!removal) {
 		module_put(THIS_MODULE);
 		return;
@@ -2748,7 +2748,7 @@ static void *iwl_dbgfs_tx_queue_seq_start(struct seq_file *seq, loff_t *pos)
 	if (*pos >= priv->trans->mac_cfg->base->num_of_queues)
 		return NULL;

-	state = kmalloc(sizeof(*state), GFP_KERNEL);
+	state = kmalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return NULL;
 	state->pos = *pos;
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/tx-gen2.c b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/tx-gen2.c
index df0545f09da9..f2752ab4c402 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/tx-gen2.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/tx-gen2.c
@@ -928,7 +928,7 @@ iwl_txq_dyn_alloc_dma(struct iwl_trans *trans, int size, unsigned int timeout)
 	if (WARN_ON(size > bc_tbl_entries))
 		return ERR_PTR(-EINVAL);

-	txq = kzalloc(sizeof(*txq), GFP_KERNEL);
+	txq = kzalloc_obj(*txq, GFP_KERNEL);
 	if (!txq)
 		return ERR_PTR(-ENOMEM);

@@ -1152,7 +1152,7 @@ int iwl_txq_gen2_init(struct iwl_trans *trans, int txq_id, int queue_size)

 	/* alloc and init the tx queue */
 	if (!trans_pcie->txqs.txq[txq_id]) {
-		queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+		queue = kzalloc_obj(*queue, GFP_KERNEL);
 		if (!queue) {
 			IWL_ERR(trans, "Not enough memory for tx queue\n");
 			return -ENOMEM;
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/tx.c b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/tx.c
index 6e85aa519e1b..0b817e5c5679 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/tx.c
@@ -741,9 +741,8 @@ int iwl_pcie_txq_alloc(struct iwl_trans *trans, struct iwl_txq *txq,

 	txq->n_window = slots_num;

-	txq->entries = kcalloc(slots_num,
-			       sizeof(struct iwl_pcie_txq_entry),
-			       GFP_KERNEL);
+	txq->entries = kzalloc_objs(struct iwl_pcie_txq_entry, slots_num,
+				    GFP_KERNEL);

 	if (!txq->entries)
 		goto error;
@@ -751,8 +750,7 @@ int iwl_pcie_txq_alloc(struct iwl_trans *trans, struct iwl_txq *txq,
 	if (cmd_queue)
 		for (i = 0; i < slots_num; i++) {
 			txq->entries[i].cmd =
-				kmalloc(sizeof(struct iwl_device_cmd),
-					GFP_KERNEL);
+				kmalloc_obj(struct iwl_device_cmd, GFP_KERNEL);
 			if (!txq->entries[i].cmd)
 				goto error;
 		}
@@ -838,8 +836,8 @@ static int iwl_pcie_tx_alloc(struct iwl_trans *trans)
 	}

 	trans_pcie->txq_memory =
-		kcalloc(trans->mac_cfg->base->num_of_queues,
-			sizeof(struct iwl_txq), GFP_KERNEL);
+		kzalloc_objs(struct iwl_txq,
+			     trans->mac_cfg->base->num_of_queues, GFP_KERNEL);
 	if (!trans_pcie->txq_memory) {
 		IWL_ERR(trans, "Not enough memory for txq\n");
 		ret = -ENOMEM;
diff --git a/drivers/net/wireless/intersil/p54/eeprom.c b/drivers/net/wireless/intersil/p54/eeprom.c
index 5bd35c147e19..c338a7a7fc41 100644
--- a/drivers/net/wireless/intersil/p54/eeprom.c
+++ b/drivers/net/wireless/intersil/p54/eeprom.c
@@ -154,13 +154,12 @@ static int p54_generate_band(struct ieee80211_hw *dev,
 	if ((!list->entries) || (!list->band_channel_num[band]))
 		return -EINVAL;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		goto err_out;

-	tmp->channels = kcalloc(list->band_channel_num[band],
-				sizeof(struct ieee80211_channel),
-				GFP_KERNEL);
+	tmp->channels = kzalloc_objs(struct ieee80211_channel,
+				     list->band_channel_num[band], GFP_KERNEL);
 	if (!tmp->channels)
 		goto err_out;

@@ -336,23 +335,22 @@ static int p54_generate_channel_lists(struct ieee80211_hw *dev)
 	max_channel_num = max_t(unsigned int, max_channel_num,
 				priv->curve_data->entries);

-	list = kzalloc(sizeof(*list), GFP_KERNEL);
+	list = kzalloc_obj(*list, GFP_KERNEL);
 	if (!list) {
 		ret = -ENOMEM;
 		goto free;
 	}
 	priv->chan_num = max_channel_num;
-	priv->survey = kcalloc(max_channel_num, sizeof(struct survey_info),
-			       GFP_KERNEL);
+	priv->survey = kzalloc_objs(struct survey_info, max_channel_num,
+				    GFP_KERNEL);
 	if (!priv->survey) {
 		ret = -ENOMEM;
 		goto free;
 	}

 	list->max_entries = max_channel_num;
-	list->channels = kcalloc(max_channel_num,
-				 sizeof(struct p54_channel_entry),
-				 GFP_KERNEL);
+	list->channels = kzalloc_objs(struct p54_channel_entry, max_channel_num,
+				      GFP_KERNEL);
 	if (!list->channels) {
 		ret = -ENOMEM;
 		goto free;
diff --git a/drivers/net/wireless/intersil/p54/p54usb.c b/drivers/net/wireless/intersil/p54/p54usb.c
index cae47663b17b..c0d3b5329f4e 100644
--- a/drivers/net/wireless/intersil/p54/p54usb.c
+++ b/drivers/net/wireless/intersil/p54/p54usb.c
@@ -328,7 +328,7 @@ static void p54u_tx_net2280(struct ieee80211_hw *dev, struct sk_buff *skb)
 	struct net2280_reg_write *reg = NULL;
 	int err = -ENOMEM;

-	reg = kmalloc(sizeof(*reg), GFP_ATOMIC);
+	reg = kmalloc_obj(*reg, GFP_ATOMIC);
 	if (!reg)
 		goto out;

diff --git a/drivers/net/wireless/marvell/libertas/cfg.c b/drivers/net/wireless/marvell/libertas/cfg.c
index caba7491cd5a..331b0b69ce62 100644
--- a/drivers/net/wireless/marvell/libertas/cfg.c
+++ b/drivers/net/wireless/marvell/libertas/cfg.c
@@ -2094,7 +2094,7 @@ struct wireless_dev *lbs_cfg_alloc(struct device *dev)
 	int ret = 0;
 	struct wireless_dev *wdev;

-	wdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
+	wdev = kzalloc_obj(struct wireless_dev, GFP_KERNEL);
 	if (!wdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/wireless/marvell/libertas/debugfs.c b/drivers/net/wireless/marvell/libertas/debugfs.c
index c604613ab506..d2dc9128dae2 100644
--- a/drivers/net/wireless/marvell/libertas/debugfs.c
+++ b/drivers/net/wireless/marvell/libertas/debugfs.c
@@ -232,7 +232,7 @@ static ssize_t lbs_threshold_read(uint16_t tlv_type, uint16_t event_mask,
 	if (!buf)
 		return -ENOMEM;

-	subscribed = kzalloc(sizeof(*subscribed), GFP_KERNEL);
+	subscribed = kzalloc_obj(*subscribed, GFP_KERNEL);
 	if (!subscribed) {
 		ret = -ENOMEM;
 		goto out_page;
@@ -288,7 +288,7 @@ static ssize_t lbs_threshold_write(uint16_t tlv_type, uint16_t event_mask,
 		ret = -EINVAL;
 		goto out_page;
 	}
-	events = kzalloc(sizeof(*events), GFP_KERNEL);
+	events = kzalloc_obj(*events, GFP_KERNEL);
 	if (!events) {
 		ret = -ENOMEM;
 		goto out_page;
diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c b/drivers/net/wireless/marvell/libertas/if_sdio.c
index fc5318035822..b814cf9032ad 100644
--- a/drivers/net/wireless/marvell/libertas/if_sdio.c
+++ b/drivers/net/wireless/marvell/libertas/if_sdio.c
@@ -1158,7 +1158,7 @@ static int if_sdio_probe(struct sdio_func *func,
 		return -ENODEV;
 	}

-	card = kzalloc(sizeof(struct if_sdio_card), GFP_KERNEL);
+	card = kzalloc_obj(struct if_sdio_card, GFP_KERNEL);
 	if (!card)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/marvell/libertas/if_spi.c b/drivers/net/wireless/marvell/libertas/if_spi.c
index 8a2504a62840..a21f7bba13c5 100644
--- a/drivers/net/wireless/marvell/libertas/if_spi.c
+++ b/drivers/net/wireless/marvell/libertas/if_spi.c
@@ -1113,7 +1113,7 @@ static int if_spi_probe(struct spi_device *spi)
 	}

 	/* Allocate card structure to represent this specific device */
-	card = kzalloc(sizeof(struct if_spi_card), GFP_KERNEL);
+	card = kzalloc_obj(struct if_spi_card, GFP_KERNEL);
 	if (!card) {
 		err = -ENOMEM;
 		goto teardown;
diff --git a/drivers/net/wireless/marvell/libertas/if_usb.c b/drivers/net/wireless/marvell/libertas/if_usb.c
index 924ab93b7b67..e02756d7e87a 100644
--- a/drivers/net/wireless/marvell/libertas/if_usb.c
+++ b/drivers/net/wireless/marvell/libertas/if_usb.c
@@ -203,7 +203,7 @@ static int if_usb_probe(struct usb_interface *intf,

 	udev = interface_to_usbdev(intf);

-	cardp = kzalloc(sizeof(struct if_usb_card), GFP_KERNEL);
+	cardp = kzalloc_obj(struct if_usb_card, GFP_KERNEL);
 	if (!cardp)
 		goto error;

diff --git a/drivers/net/wireless/marvell/libertas/mesh.c b/drivers/net/wireless/marvell/libertas/mesh.c
index 2dd635935448..aa94b777da13 100644
--- a/drivers/net/wireless/marvell/libertas/mesh.c
+++ b/drivers/net/wireless/marvell/libertas/mesh.c
@@ -983,7 +983,7 @@ static int lbs_add_mesh(struct lbs_private *priv)
 	int ret = 0;

 	/* Allocate a virtual mesh device */
-	mesh_wdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
+	mesh_wdev = kzalloc_obj(struct wireless_dev, GFP_KERNEL);
 	if (!mesh_wdev) {
 		lbs_deb_mesh("init mshX wireless device failed\n");
 		ret = -ENOMEM;
diff --git a/drivers/net/wireless/marvell/libertas_tf/if_usb.c b/drivers/net/wireless/marvell/libertas_tf/if_usb.c
index 5662a244f82a..44c609205422 100644
--- a/drivers/net/wireless/marvell/libertas_tf/if_usb.c
+++ b/drivers/net/wireless/marvell/libertas_tf/if_usb.c
@@ -154,7 +154,7 @@ static int if_usb_probe(struct usb_interface *intf,
 	lbtf_deb_enter(LBTF_DEB_USB);
 	udev = interface_to_usbdev(intf);

-	cardp = kzalloc(sizeof(struct if_usb_card), GFP_KERNEL);
+	cardp = kzalloc_obj(struct if_usb_card, GFP_KERNEL);
 	if (!cardp)
 		goto error;

diff --git a/drivers/net/wireless/marvell/mwifiex/11n.c b/drivers/net/wireless/marvell/mwifiex/11n.c
index 66f0f5377ac1..cef8a55427dd 100644
--- a/drivers/net/wireless/marvell/mwifiex/11n.c
+++ b/drivers/net/wireless/marvell/mwifiex/11n.c
@@ -547,8 +547,8 @@ void mwifiex_create_ba_tbl(struct mwifiex_private *priv, u8 *ra, int tid,
 	int tid_down;

 	if (!mwifiex_get_ba_tbl(priv, tid, ra)) {
-		new_node = kzalloc(sizeof(struct mwifiex_tx_ba_stream_tbl),
-				   GFP_ATOMIC);
+		new_node = kzalloc_obj(struct mwifiex_tx_ba_stream_tbl,
+				       GFP_ATOMIC);
 		if (!new_node)
 			return;

diff --git a/drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c b/drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c
index f3397dc6c422..c00b385c0f58 100644
--- a/drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c
+++ b/drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c
@@ -344,7 +344,7 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
 		return;
 	}
 	/* if !tbl then create one */
-	new_node = kzalloc(sizeof(struct mwifiex_rx_reorder_tbl), GFP_KERNEL);
+	new_node = kzalloc_obj(struct mwifiex_rx_reorder_tbl, GFP_KERNEL);
 	if (!new_node)
 		return;

diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index a66d18e380fc..f387b26b086b 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -756,7 +756,7 @@ mwifiex_cfg80211_set_wiphy_params(struct wiphy *wiphy, int radio_idx,
 			return -EINVAL;
 		}

-		bss_cfg = kzalloc(sizeof(*bss_cfg), GFP_KERNEL);
+		bss_cfg = kzalloc_obj(*bss_cfg, GFP_KERNEL);
 		if (!bss_cfg)
 			return -ENOMEM;

@@ -2073,7 +2073,7 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy,
 	if (GET_BSS_ROLE(priv) != MWIFIEX_BSS_ROLE_UAP)
 		return -1;

-	bss_cfg = kzalloc(sizeof(struct mwifiex_uap_bss_param), GFP_KERNEL);
+	bss_cfg = kzalloc_obj(struct mwifiex_uap_bss_param, GFP_KERNEL);
 	if (!bss_cfg)
 		return -ENOMEM;

@@ -2683,7 +2683,7 @@ mwifiex_cfg80211_scan(struct wiphy *wiphy,
 	if (!mwifiex_stop_bg_scan(priv))
 		cfg80211_sched_scan_stopped_locked(priv->wdev.wiphy, 0);

-	user_scan_cfg = kzalloc(sizeof(*user_scan_cfg), GFP_KERNEL);
+	user_scan_cfg = kzalloc_obj(*user_scan_cfg, GFP_KERNEL);
 	if (!user_scan_cfg)
 		return -ENOMEM;

@@ -2787,7 +2787,7 @@ mwifiex_cfg80211_sched_scan_start(struct wiphy *wiphy,
 		   request->n_channels, request->scan_plans->interval,
 		   (int)request->ie_len);

-	bgscan_cfg = kzalloc(sizeof(*bgscan_cfg), GFP_KERNEL);
+	bgscan_cfg = kzalloc_obj(*bgscan_cfg, GFP_KERNEL);
 	if (!bgscan_cfg)
 		return -ENOMEM;

@@ -3452,7 +3452,7 @@ static int mwifiex_set_mef_filter(struct mwifiex_private *priv,
 	if (wowlan->n_patterns || wowlan->magic_pkt)
 		num_entries++;

-	mef_entry = kcalloc(num_entries, sizeof(*mef_entry), GFP_KERNEL);
+	mef_entry = kzalloc_objs(*mef_entry, num_entries, GFP_KERNEL);
 	if (!mef_entry)
 		return -ENOMEM;

@@ -3989,7 +3989,7 @@ mwifiex_cfg80211_uap_add_station(struct mwifiex_private *priv, const u8 *mac,
 	if (!ret) {
 		struct station_info *sinfo;

-		sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
+		sinfo = kzalloc_obj(*sinfo, GFP_KERNEL);
 		if (!sinfo)
 			return -ENOMEM;

@@ -4161,7 +4161,7 @@ static int mwifiex_tm_cmd(struct wiphy *wiphy, struct wireless_dev *wdev,
 		if (!tb[MWIFIEX_TM_ATTR_DATA])
 			return -EINVAL;

-		hostcmd = kzalloc(sizeof(*hostcmd), GFP_KERNEL);
+		hostcmd = kzalloc_obj(*hostcmd, GFP_KERNEL);
 		if (!hostcmd)
 			return -ENOMEM;

@@ -4677,9 +4677,9 @@ int mwifiex_init_channel_scan_gap(struct mwifiex_adapter *adapter)
 	 * additional active scan request for hidden SSIDs on passive channels.
 	 */
 	adapter->num_in_chan_stats = 2 * (n_channels_bg + n_channels_a);
-	adapter->chan_stats = kcalloc(adapter->num_in_chan_stats,
-				      sizeof(*adapter->chan_stats),
-				      GFP_KERNEL);
+	adapter->chan_stats = kzalloc_objs(*adapter->chan_stats,
+					   adapter->num_in_chan_stats,
+					   GFP_KERNEL);

 	if (!adapter->chan_stats)
 		return -ENOMEM;
diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
index 0f466c31337f..1bb30fbab12b 100644
--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
@@ -389,8 +389,8 @@ int mwifiex_alloc_cmd_buffer(struct mwifiex_adapter *adapter)
 	u32 i;

 	/* Allocate and initialize struct cmd_ctrl_node */
-	cmd_array = kcalloc(MWIFIEX_NUM_OF_CMD_BUFFER,
-			    sizeof(struct cmd_ctrl_node), GFP_KERNEL);
+	cmd_array = kzalloc_objs(struct cmd_ctrl_node,
+				 MWIFIEX_NUM_OF_CMD_BUFFER, GFP_KERNEL);
 	if (!cmd_array)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/marvell/mwifiex/ie.c b/drivers/net/wireless/marvell/mwifiex/ie.c
index 26694cee15d3..55af5e9b5bee 100644
--- a/drivers/net/wireless/marvell/mwifiex/ie.c
+++ b/drivers/net/wireless/marvell/mwifiex/ie.c
@@ -149,7 +149,7 @@ mwifiex_update_uap_custom_ie(struct mwifiex_private *priv,
 	u16 len;
 	int ret;

-	ap_custom_ie = kzalloc(sizeof(*ap_custom_ie), GFP_KERNEL);
+	ap_custom_ie = kzalloc_obj(*ap_custom_ie, GFP_KERNEL);
 	if (!ap_custom_ie)
 		return -ENOMEM;

@@ -221,8 +221,7 @@ static int mwifiex_update_vs_ie(const u8 *ies, int ies_len,
 	vendor_ie = cfg80211_find_vendor_ie(oui, oui_type, ies, ies_len);
 	if (vendor_ie) {
 		if (!*ie_ptr) {
-			*ie_ptr = kzalloc(sizeof(struct mwifiex_ie),
-					  GFP_KERNEL);
+			*ie_ptr = kzalloc_obj(struct mwifiex_ie, GFP_KERNEL);
 			if (!*ie_ptr)
 				return -ENOMEM;
 			ie = *ie_ptr;
@@ -326,7 +325,7 @@ static int mwifiex_uap_parse_tail_ies(struct mwifiex_private *priv,
 	if (!info->tail || !info->tail_len)
 		return 0;

-	gen_ie = kzalloc(sizeof(*gen_ie), GFP_KERNEL);
+	gen_ie = kzalloc_obj(*gen_ie, GFP_KERNEL);
 	if (!gen_ie)
 		return -ENOMEM;

@@ -439,7 +438,7 @@ int mwifiex_del_mgmt_ies(struct mwifiex_private *priv)
 	int ret = 0;

 	if (priv->gen_idx != MWIFIEX_AUTO_IDX_MASK) {
-		gen_ie = kmalloc(sizeof(*gen_ie), GFP_KERNEL);
+		gen_ie = kmalloc_obj(*gen_ie, GFP_KERNEL);
 		if (!gen_ie)
 			return -ENOMEM;

@@ -457,7 +456,7 @@ int mwifiex_del_mgmt_ies(struct mwifiex_private *priv)
 	}

 	if (priv->beacon_idx != MWIFIEX_AUTO_IDX_MASK) {
-		beacon_ie = kmalloc(sizeof(struct mwifiex_ie), GFP_KERNEL);
+		beacon_ie = kmalloc_obj(struct mwifiex_ie, GFP_KERNEL);
 		if (!beacon_ie) {
 			ret = -ENOMEM;
 			goto done;
@@ -467,7 +466,7 @@ int mwifiex_del_mgmt_ies(struct mwifiex_private *priv)
 		beacon_ie->ie_length = 0;
 	}
 	if (priv->proberesp_idx != MWIFIEX_AUTO_IDX_MASK) {
-		pr_ie = kmalloc(sizeof(struct mwifiex_ie), GFP_KERNEL);
+		pr_ie = kmalloc_obj(struct mwifiex_ie, GFP_KERNEL);
 		if (!pr_ie) {
 			ret = -ENOMEM;
 			goto done;
@@ -477,7 +476,7 @@ int mwifiex_del_mgmt_ies(struct mwifiex_private *priv)
 		pr_ie->ie_length = 0;
 	}
 	if (priv->assocresp_idx != MWIFIEX_AUTO_IDX_MASK) {
-		ar_ie = kmalloc(sizeof(struct mwifiex_ie), GFP_KERNEL);
+		ar_ie = kmalloc_obj(struct mwifiex_ie, GFP_KERNEL);
 		if (!ar_ie) {
 			ret = -ENOMEM;
 			goto done;
diff --git a/drivers/net/wireless/marvell/mwifiex/init.c b/drivers/net/wireless/marvell/mwifiex/init.c
index 4820010a86f6..28ffcc780eab 100644
--- a/drivers/net/wireless/marvell/mwifiex/init.c
+++ b/drivers/net/wireless/marvell/mwifiex/init.c
@@ -25,7 +25,7 @@ static int mwifiex_add_bss_prio_tbl(struct mwifiex_private *priv)
 	struct mwifiex_bss_prio_node *bss_prio;
 	struct mwifiex_bss_prio_tbl *tbl = adapter->bss_prio_tbl;

-	bss_prio = kzalloc(sizeof(struct mwifiex_bss_prio_node), GFP_KERNEL);
+	bss_prio = kzalloc_obj(struct mwifiex_bss_prio_node, GFP_KERNEL);
 	if (!bss_prio)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
index ff177b06f42d..d4c62fad8099 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -60,7 +60,7 @@ static int mwifiex_register(void *card, struct device *dev,
 	struct mwifiex_adapter *adapter;
 	int i;

-	adapter = kzalloc(sizeof(struct mwifiex_adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(struct mwifiex_adapter, GFP_KERNEL);
 	if (!adapter)
 		return -ENOMEM;

@@ -82,7 +82,7 @@ static int mwifiex_register(void *card, struct device *dev,
 	for (i = 0; i < MWIFIEX_MAX_BSS_NUM; i++) {
 		/* Allocate memory for private structure */
 		adapter->priv[i] =
-			kzalloc(sizeof(struct mwifiex_private), GFP_KERNEL);
+			kzalloc_obj(struct mwifiex_private, GFP_KERNEL);
 		if (!adapter->priv[i])
 			goto error;

@@ -1180,7 +1180,7 @@ void mwifiex_drv_info_dump(struct mwifiex_adapter *adapter)
 			p += adapter->if_ops.reg_dump(adapter, p);
 	}
 	p += sprintf(p, "\n=== more debug information\n");
-	debug_info = kzalloc(sizeof(*debug_info), GFP_KERNEL);
+	debug_info = kzalloc_obj(*debug_info, GFP_KERNEL);
 	if (debug_info) {
 		for (i = 0; i < adapter->priv_num; i++) {
 			if (!adapter->priv[i]->netdev)
@@ -1346,7 +1346,7 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,

 	if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_STA ||
 	    GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_UAP) {
-		priv->hist_data = kmalloc(sizeof(*priv->hist_data), GFP_KERNEL);
+		priv->hist_data = kmalloc_obj(*priv->hist_data, GFP_KERNEL);
 		if (priv->hist_data)
 			mwifiex_hist_data_reset(priv);
 	}
diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c
index cab889af4c4a..b4858c0002e0 100644
--- a/drivers/net/wireless/marvell/mwifiex/scan.c
+++ b/drivers/net/wireless/marvell/mwifiex/scan.c
@@ -1503,16 +1503,15 @@ int mwifiex_scan_networks(struct mwifiex_private *priv,
 	adapter->scan_processing = true;
 	spin_unlock_bh(&adapter->mwifiex_cmd_lock);

-	scan_cfg_out = kzalloc(sizeof(union mwifiex_scan_cmd_config_tlv),
-			       GFP_KERNEL);
+	scan_cfg_out = kzalloc_obj(union mwifiex_scan_cmd_config_tlv,
+				   GFP_KERNEL);
 	if (!scan_cfg_out) {
 		ret = -ENOMEM;
 		goto done;
 	}

-	scan_chan_list = kcalloc(MWIFIEX_USER_SCAN_CHAN_MAX,
-				 sizeof(struct mwifiex_chan_scan_param_set),
-				 GFP_KERNEL);
+	scan_chan_list = kzalloc_objs(struct mwifiex_chan_scan_param_set,
+				      MWIFIEX_USER_SCAN_CHAN_MAX, GFP_KERNEL);
 	if (!scan_chan_list) {
 		kfree(scan_cfg_out);
 		ret = -ENOMEM;
@@ -1650,7 +1649,7 @@ static int mwifiex_save_hidden_ssid_channels(struct mwifiex_private *priv,
 	int chid;

 	/* Allocate and fill new bss descriptor */
-	bss_desc = kzalloc(sizeof(*bss_desc), GFP_KERNEL);
+	bss_desc = kzalloc_obj(*bss_desc, GFP_KERNEL);
 	if (!bss_desc)
 		return -ENOMEM;

@@ -1693,7 +1692,7 @@ static int mwifiex_update_curr_bss_params(struct mwifiex_private *priv,
 	int ret;

 	/* Allocate and fill new bss descriptor */
-	bss_desc = kzalloc(sizeof(struct mwifiex_bssdescriptor), GFP_KERNEL);
+	bss_desc = kzalloc_obj(struct mwifiex_bssdescriptor, GFP_KERNEL);
 	if (!bss_desc)
 		return -ENOMEM;

@@ -1932,7 +1931,7 @@ mwifiex_active_scan_req_for_passive_chan(struct mwifiex_private *priv)
 		mwifiex_dbg(adapter, INFO, "No BSS with hidden SSID found on DFS channels\n");
 		return 0;
 	}
-	user_scan_cfg = kzalloc(sizeof(*user_scan_cfg), GFP_KERNEL);
+	user_scan_cfg = kzalloc_obj(*user_scan_cfg, GFP_KERNEL);

 	if (!user_scan_cfg)
 		return -ENOMEM;
@@ -2174,9 +2173,8 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,

 	if (nd_config) {
 		adapter->nd_info =
-			kzalloc(struct_size(adapter->nd_info, matches,
-					    scan_rsp->number_of_sets),
-				GFP_ATOMIC);
+			kzalloc_flex(*adapter->nd_info, matches,
+				     scan_rsp->number_of_sets, GFP_ATOMIC);

 		if (adapter->nd_info)
 			adapter->nd_info->n_matches = scan_rsp->number_of_sets;
@@ -2452,7 +2450,7 @@ int mwifiex_stop_bg_scan(struct mwifiex_private *priv)
 		return 0;
 	}

-	bgscan_cfg = kzalloc(sizeof(*bgscan_cfg), GFP_KERNEL);
+	bgscan_cfg = kzalloc_obj(*bgscan_cfg, GFP_KERNEL);
 	if (!bgscan_cfg)
 		return -ENOMEM;

@@ -2779,7 +2777,7 @@ static int mwifiex_scan_specific_ssid(struct mwifiex_private *priv,
 		return -EBUSY;
 	}

-	scan_cfg = kzalloc(sizeof(struct mwifiex_user_scan_cfg), GFP_KERNEL);
+	scan_cfg = kzalloc_obj(struct mwifiex_user_scan_cfg, GFP_KERNEL);
 	if (!scan_cfg)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
index dcca71158fc6..b457ed6f18f5 100644
--- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
@@ -1516,7 +1516,7 @@ int mwifiex_send_rgpower_table(struct mwifiex_private *priv, const u8 *data,
 	struct mwifiex_adapter *adapter = priv->adapter;
 	struct mwifiex_ds_misc_cmd *hostcmd __free(kfree) = NULL;

-	hostcmd = kzalloc(sizeof(*hostcmd), GFP_KERNEL);
+	hostcmd = kzalloc_obj(*hostcmd, GFP_KERNEL);
 	if (!hostcmd)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
index 9c53825f222d..f8f84fc670f3 100644
--- a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
+++ b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
@@ -1052,7 +1052,7 @@ mwifiex_create_custom_regdomain(struct mwifiex_private *priv,
 	if (WARN_ON_ONCE(num_chan > NL80211_MAX_SUPP_REG_RULES))
 		return ERR_PTR(-EINVAL);

-	regd = kzalloc(struct_size(regd, reg_rules, num_chan), GFP_KERNEL);
+	regd = kzalloc_flex(*regd, reg_rules, num_chan, GFP_KERNEL);
 	if (!regd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
index ef6722ffdc74..46476cb752dd 100644
--- a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
+++ b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
@@ -330,8 +330,7 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
 			return -EINVAL;

 		/* Allocate and fill new bss descriptor */
-		bss_desc = kzalloc(sizeof(struct mwifiex_bssdescriptor),
-				   GFP_KERNEL);
+		bss_desc = kzalloc_obj(struct mwifiex_bssdescriptor, GFP_KERNEL);
 		if (!bss_desc)
 			return -ENOMEM;

diff --git a/drivers/net/wireless/marvell/mwifiex/tdls.c b/drivers/net/wireless/marvell/mwifiex/tdls.c
index 77a9a6de636d..a4cf323e704b 100644
--- a/drivers/net/wireless/marvell/mwifiex/tdls.c
+++ b/drivers/net/wireless/marvell/mwifiex/tdls.c
@@ -1356,7 +1356,7 @@ void mwifiex_add_auto_tdls_peer(struct mwifiex_private *priv, const u8 *mac)
 	}

 	/* create new TDLS peer */
-	tdls_peer = kzalloc(sizeof(*tdls_peer), GFP_ATOMIC);
+	tdls_peer = kzalloc_obj(*tdls_peer, GFP_ATOMIC);
 	if (tdls_peer) {
 		ether_addr_copy(tdls_peer->mac_addr, mac);
 		tdls_peer->tdls_status = TDLS_SETUP_INPROGRESS;
diff --git a/drivers/net/wireless/marvell/mwifiex/uap_event.c b/drivers/net/wireless/marvell/mwifiex/uap_event.c
index 245cb99a3daa..9abd011aa295 100644
--- a/drivers/net/wireless/marvell/mwifiex/uap_event.c
+++ b/drivers/net/wireless/marvell/mwifiex/uap_event.c
@@ -105,7 +105,7 @@ int mwifiex_process_uap_event(struct mwifiex_private *priv)

 	switch (eventcause) {
 	case EVENT_UAP_STA_ASSOC:
-		sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
+		sinfo = kzalloc_obj(*sinfo, GFP_KERNEL);
 		if (!sinfo)
 			return -ENOMEM;

diff --git a/drivers/net/wireless/marvell/mwifiex/util.c b/drivers/net/wireless/marvell/mwifiex/util.c
index 6882e90e90b2..7d3631d21223 100644
--- a/drivers/net/wireless/marvell/mwifiex/util.c
+++ b/drivers/net/wireless/marvell/mwifiex/util.c
@@ -694,7 +694,7 @@ mwifiex_add_sta_entry(struct mwifiex_private *priv, const u8 *mac)
 	if (node)
 		goto done;

-	node = kzalloc(sizeof(*node), GFP_ATOMIC);
+	node = kzalloc_obj(*node, GFP_ATOMIC);
 	if (!node)
 		goto done;

diff --git a/drivers/net/wireless/marvell/mwifiex/wmm.c b/drivers/net/wireless/marvell/mwifiex/wmm.c
index 1b1222c73728..841505e83c7f 100644
--- a/drivers/net/wireless/marvell/mwifiex/wmm.c
+++ b/drivers/net/wireless/marvell/mwifiex/wmm.c
@@ -99,7 +99,7 @@ mwifiex_wmm_allocate_ralist_node(struct mwifiex_adapter *adapter, const u8 *ra)
 {
 	struct mwifiex_ra_list_tbl *ra_list;

-	ra_list = kzalloc(sizeof(struct mwifiex_ra_list_tbl), GFP_ATOMIC);
+	ra_list = kzalloc_obj(struct mwifiex_ra_list_tbl, GFP_ATOMIC);
 	if (!ra_list)
 		return NULL;

diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c
index 54d6d00ecdf1..c505c83f8abc 100644
--- a/drivers/net/wireless/marvell/mwl8k.c
+++ b/drivers/net/wireless/marvell/mwl8k.c
@@ -1182,7 +1182,7 @@ static int mwl8k_rxq_init(struct ieee80211_hw *hw, int index)
 		return -ENOMEM;
 	}

-	rxq->buf = kcalloc(MWL8K_RX_DESCS, sizeof(*rxq->buf), GFP_KERNEL);
+	rxq->buf = kzalloc_objs(*rxq->buf, MWL8K_RX_DESCS, GFP_KERNEL);
 	if (rxq->buf == NULL) {
 		dma_free_coherent(&priv->pdev->dev, size, rxq->rxd,
 				  rxq->rxd_dma);
@@ -1478,7 +1478,7 @@ static int mwl8k_txq_init(struct ieee80211_hw *hw, int index)
 		return -ENOMEM;
 	}

-	txq->skb = kcalloc(MWL8K_TX_DESCS, sizeof(*txq->skb), GFP_KERNEL);
+	txq->skb = kzalloc_objs(*txq->skb, MWL8K_TX_DESCS, GFP_KERNEL);
 	if (txq->skb == NULL) {
 		dma_free_coherent(&priv->pdev->dev, size, txq->txd,
 				  txq->txd_dma);
@@ -2472,7 +2472,7 @@ static int mwl8k_cmd_get_hw_spec_sta(struct ieee80211_hw *hw)
 	int rc;
 	int i;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -2537,7 +2537,7 @@ static int mwl8k_cmd_get_hw_spec_ap(struct ieee80211_hw *hw)
 	int rc, i;
 	u32 api_version;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -2639,7 +2639,7 @@ static int mwl8k_cmd_set_hw_spec(struct ieee80211_hw *hw)
 	int rc;
 	int i;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -2753,7 +2753,7 @@ static int mwl8k_cmd_get_stat(struct ieee80211_hw *hw,
 	struct mwl8k_cmd_get_stat *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -2796,7 +2796,7 @@ mwl8k_cmd_radio_control(struct ieee80211_hw *hw, bool enable, bool force)
 	if (enable == priv->radio_on && !force)
 		return 0;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -2854,7 +2854,7 @@ static int mwl8k_cmd_rf_tx_power(struct ieee80211_hw *hw, int dBm)
 	struct mwl8k_cmd_rf_tx_power *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -2895,7 +2895,7 @@ static int mwl8k_cmd_tx_power(struct ieee80211_hw *hw,
 	int rc;
 	int i;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -2948,7 +2948,7 @@ mwl8k_cmd_rf_antenna(struct ieee80211_hw *hw, int antenna, int mask)
 	struct mwl8k_cmd_rf_antenna *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3066,7 +3066,7 @@ static int mwl8k_cmd_set_pre_scan(struct ieee80211_hw *hw)
 	struct mwl8k_cmd_set_pre_scan *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3099,7 +3099,7 @@ mwl8k_cmd_bbp_reg_access(struct ieee80211_hw *hw,
 	struct mwl8k_cmd_bbp_reg_access *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3135,7 +3135,7 @@ mwl8k_cmd_set_post_scan(struct ieee80211_hw *hw, const __u8 *mac)
 	struct mwl8k_cmd_set_post_scan *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3228,7 +3228,7 @@ static int mwl8k_cmd_set_rf_channel(struct ieee80211_hw *hw,
 	struct mwl8k_priv *priv = hw->priv;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3314,7 +3314,7 @@ mwl8k_cmd_set_aid(struct ieee80211_hw *hw,
 	u16 prot_mode;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3368,7 +3368,7 @@ mwl8k_cmd_set_rate(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 	struct mwl8k_cmd_set_rate *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3402,7 +3402,7 @@ static int mwl8k_cmd_finalize_join(struct ieee80211_hw *hw, void *frame,
 	int payload_len;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3440,7 +3440,7 @@ mwl8k_cmd_set_rts_threshold(struct ieee80211_hw *hw, int radio_idx,
 	struct mwl8k_cmd_set_rts_threshold *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3469,7 +3469,7 @@ static int mwl8k_cmd_set_slot(struct ieee80211_hw *hw, bool short_slot_time)
 	struct mwl8k_cmd_set_slot *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3543,7 +3543,7 @@ mwl8k_cmd_set_edca_params(struct ieee80211_hw *hw, __u8 qnum,
 	struct mwl8k_cmd_set_edca_params *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3583,7 +3583,7 @@ static int mwl8k_cmd_set_wmm_mode(struct ieee80211_hw *hw, bool enable)
 	struct mwl8k_cmd_set_wmm_mode *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3615,7 +3615,7 @@ static int mwl8k_cmd_mimo_config(struct ieee80211_hw *hw, __u8 rx, __u8 tx)
 	struct mwl8k_cmd_mimo_config *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3658,7 +3658,7 @@ static int mwl8k_cmd_use_fixed_rate_sta(struct ieee80211_hw *hw)
 	struct mwl8k_cmd_use_fixed_rate_sta *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3698,7 +3698,7 @@ mwl8k_cmd_use_fixed_rate_ap(struct ieee80211_hw *hw, int mcast, int mgmt)
 	struct mwl8k_cmd_use_fixed_rate_ap *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3727,7 +3727,7 @@ static int mwl8k_cmd_enable_sniffer(struct ieee80211_hw *hw, bool enable)
 	struct mwl8k_cmd_enable_sniffer *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3782,7 +3782,7 @@ static int mwl8k_cmd_update_mac_addr(struct ieee80211_hw *hw,
 			mac_type = MWL8K_MAC_TYPE_SECONDARY_AP;
 	}

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3837,7 +3837,7 @@ static int mwl8k_cmd_set_rateadapt_mode(struct ieee80211_hw *hw, __u16 mode)
 	struct mwl8k_cmd_set_rate_adapt_mode *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3865,7 +3865,7 @@ static int mwl8k_cmd_get_watchdog_bitmap(struct ieee80211_hw *hw, u8 *bitmap)
 	struct mwl8k_cmd_get_watchdog_bitmap *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -3954,7 +3954,7 @@ static int mwl8k_cmd_bss_start(struct ieee80211_hw *hw,
 	if (!enable && !(priv->running_bsses & (1 << mwl8k_vif->macid)))
 		return 0;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4046,7 +4046,7 @@ mwl8k_check_ba(struct ieee80211_hw *hw, struct mwl8k_ampdu_stream *stream,
 	struct mwl8k_cmd_bastream *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4078,7 +4078,7 @@ mwl8k_create_ba(struct ieee80211_hw *hw, struct mwl8k_ampdu_stream *stream,
 	struct mwl8k_cmd_bastream *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4121,7 +4121,7 @@ static void mwl8k_destroy_ba(struct ieee80211_hw *hw,
 {
 	struct mwl8k_cmd_bastream *cmd;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return;

@@ -4173,7 +4173,7 @@ static int mwl8k_cmd_set_new_stn_add(struct ieee80211_hw *hw,
 	u32 rates;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4211,7 +4211,7 @@ static int mwl8k_cmd_set_new_stn_add_self(struct ieee80211_hw *hw,
 	struct mwl8k_cmd_set_new_stn *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4254,7 +4254,7 @@ static int mwl8k_cmd_set_new_stn_del(struct ieee80211_hw *hw,

 	spin_unlock(&priv->stream_lock);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4341,7 +4341,7 @@ static int mwl8k_cmd_update_encryption_enable(struct ieee80211_hw *hw,
 	struct mwl8k_cmd_update_encryption *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4410,7 +4410,7 @@ static int mwl8k_cmd_encryption_set_key(struct ieee80211_hw *hw,
 	u8 idx;
 	struct mwl8k_vif *mwl8k_vif = MWL8K_VIF(vif);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4467,7 +4467,7 @@ static int mwl8k_cmd_encryption_remove_key(struct ieee80211_hw *hw,
 	int rc;
 	struct mwl8k_vif *mwl8k_vif = MWL8K_VIF(vif);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4604,7 +4604,7 @@ static int mwl8k_cmd_update_stadb_add(struct ieee80211_hw *hw,
 	u32 rates;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

@@ -4643,7 +4643,7 @@ static int mwl8k_cmd_update_stadb_del(struct ieee80211_hw *hw,
 	struct mwl8k_cmd_update_stadb *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/mediatek/mt76/agg-rx.c b/drivers/net/wireless/mediatek/mt76/agg-rx.c
index 3d34caf7e4f7..144c336e13a2 100644
--- a/drivers/net/wireless/mediatek/mt76/agg-rx.c
+++ b/drivers/net/wireless/mediatek/mt76/agg-rx.c
@@ -248,7 +248,7 @@ int mt76_rx_aggr_start(struct mt76_dev *dev, struct mt76_wcid *wcid, u8 tidno,

 	mt76_rx_aggr_stop(dev, wcid, tidno);

-	tid = kzalloc(struct_size(tid, reorder_buf, size), GFP_KERNEL);
+	tid = kzalloc_flex(*tid, reorder_buf, size, GFP_KERNEL);
 	if (!tid)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
index bd56cdb022a2..45992fdcec60 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
@@ -1055,7 +1055,7 @@ mt7615_mac_queue_rate_update(struct mt7615_phy *phy, struct mt7615_sta *sta,
 	if (work_pending(&dev->rate_work))
 		return -EBUSY;

-	wrd = kzalloc(sizeof(*wrd), GFP_ATOMIC);
+	wrd = kzalloc_obj(*wrd, GFP_ATOMIC);
 	if (!wrd)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/main.c b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
index beed795edb24..fee1f5ae0496 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
@@ -966,7 +966,7 @@ mt7996_mac_sta_init_link(struct mt7996_dev *dev,
 			mtxq->wcid = idx;
 		}
 	} else {
-		msta_link = kzalloc(sizeof(*msta_link), GFP_KERNEL);
+		msta_link = kzalloc_obj(*msta_link, GFP_KERNEL);
 		if (!msta_link)
 			return -ENOMEM;

diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
index 14a88ef79b6c..c0c042de477b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
@@ -726,7 +726,7 @@ mt7996_mcu_wed_rro_event(struct mt7996_dev *dev, struct sk_buff *skb)
 			struct mt7996_wed_rro_session_id *session;

 			e = (void *)skb->data;
-			session = kzalloc(sizeof(*session), GFP_ATOMIC);
+			session = kzalloc_obj(*session, GFP_ATOMIC);
 			if (!session)
 				break;

diff --git a/drivers/net/wireless/microchip/wilc1000/cfg80211.c b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
index c39e7f313ea1..edd4e570fe9f 100644
--- a/drivers/net/wireless/microchip/wilc1000/cfg80211.c
+++ b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
@@ -484,15 +484,15 @@ static int disconnect(struct wiphy *wiphy, struct net_device *dev,
 static int wilc_wfi_cfg_allocate_wpa_entry(struct wilc_priv *priv, u8 idx)
 {
 	if (!priv->wilc_gtk[idx]) {
-		priv->wilc_gtk[idx] = kzalloc(sizeof(*priv->wilc_gtk[idx]),
-					      GFP_KERNEL);
+		priv->wilc_gtk[idx] = kzalloc_obj(*priv->wilc_gtk[idx],
+						  GFP_KERNEL);
 		if (!priv->wilc_gtk[idx])
 			return -ENOMEM;
 	}

 	if (!priv->wilc_ptk[idx]) {
-		priv->wilc_ptk[idx] = kzalloc(sizeof(*priv->wilc_ptk[idx]),
-					      GFP_KERNEL);
+		priv->wilc_ptk[idx] = kzalloc_obj(*priv->wilc_ptk[idx],
+						  GFP_KERNEL);
 		if (!priv->wilc_ptk[idx])
 			return -ENOMEM;
 	}
@@ -504,8 +504,8 @@ static int wilc_wfi_cfg_allocate_wpa_igtk_entry(struct wilc_priv *priv, u8 idx)
 {
 	idx -= 4;
 	if (!priv->wilc_igtk[idx]) {
-		priv->wilc_igtk[idx] = kzalloc(sizeof(*priv->wilc_igtk[idx]),
-					       GFP_KERNEL);
+		priv->wilc_igtk[idx] = kzalloc_obj(*priv->wilc_igtk[idx],
+						   GFP_KERNEL);
 		if (!priv->wilc_igtk[idx])
 			return -ENOMEM;
 	}
@@ -1178,7 +1178,7 @@ static int mgmt_tx(struct wiphy *wiphy,
 	if (!ieee80211_is_mgmt(mgmt->frame_control))
 		goto out;

-	mgmt_tx = kmalloc(sizeof(*mgmt_tx), GFP_KERNEL);
+	mgmt_tx = kmalloc_obj(*mgmt_tx, GFP_KERNEL);
 	if (!mgmt_tx) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/wireless/microchip/wilc1000/hif.c b/drivers/net/wireless/microchip/wilc1000/hif.c
index a229c6cab332..bbd1794acb27 100644
--- a/drivers/net/wireless/microchip/wilc1000/hif.c
+++ b/drivers/net/wireless/microchip/wilc1000/hif.c
@@ -60,7 +60,7 @@ wilc_alloc_work(struct wilc_vif *vif, void (*work_fun)(struct work_struct *),
 	if (!work_fun)
 		return ERR_PTR(-EINVAL);

-	msg = kzalloc(sizeof(*msg), GFP_ATOMIC);
+	msg = kzalloc_obj(*msg, GFP_ATOMIC);
 	if (!msg)
 		return ERR_PTR(-ENOMEM);
 	msg->fn = work_fun;
@@ -387,7 +387,7 @@ wilc_parse_join_bss_param(struct cfg80211_bss *bss,
 	u64 ies_tsf;
 	int ret;

-	param = kzalloc(sizeof(*param), GFP_KERNEL);
+	param = kzalloc_obj(*param, GFP_KERNEL);
 	if (!param)
 		return NULL;

@@ -1039,7 +1039,7 @@ int wilc_set_external_auth_param(struct wilc_vif *vif,
 	wid.id = WID_EXTERNAL_AUTH_PARAM;
 	wid.type = WID_BIN_DATA;
 	wid.size = sizeof(*param);
-	param = kzalloc(sizeof(*param), GFP_KERNEL);
+	param = kzalloc_obj(*param, GFP_KERNEL);
 	if (!param)
 		return -EINVAL;

@@ -1516,7 +1516,7 @@ int wilc_init(struct net_device *dev, struct host_if_drv **hif_drv_handler)
 	struct host_if_drv *hif_drv;
 	struct wilc_vif *vif = netdev_priv(dev);

-	hif_drv  = kzalloc(sizeof(*hif_drv), GFP_KERNEL);
+	hif_drv = kzalloc_obj(*hif_drv, GFP_KERNEL);
 	if (!hif_drv)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/microchip/wilc1000/mon.c b/drivers/net/wireless/microchip/wilc1000/mon.c
index c3d27aaec297..b5cf6fa7a851 100644
--- a/drivers/net/wireless/microchip/wilc1000/mon.c
+++ b/drivers/net/wireless/microchip/wilc1000/mon.c
@@ -120,7 +120,7 @@ static int mon_mgmt_tx(struct net_device *dev, const u8 *buf, size_t len)
 		return -EFAULT;

 	netif_stop_queue(dev);
-	mgmt_tx = kmalloc(sizeof(*mgmt_tx), GFP_ATOMIC);
+	mgmt_tx = kmalloc_obj(*mgmt_tx, GFP_ATOMIC);
 	if (!mgmt_tx)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/microchip/wilc1000/netdev.c b/drivers/net/wireless/microchip/wilc1000/netdev.c
index af298021e050..956cb578bf37 100644
--- a/drivers/net/wireless/microchip/wilc1000/netdev.c
+++ b/drivers/net/wireless/microchip/wilc1000/netdev.c
@@ -752,7 +752,7 @@ netdev_tx_t wilc_mac_xmit(struct sk_buff *skb, struct net_device *ndev)
 		return NETDEV_TX_OK;
 	}

-	tx_data = kmalloc(sizeof(*tx_data), GFP_ATOMIC);
+	tx_data = kmalloc_obj(*tx_data, GFP_ATOMIC);
 	if (!tx_data) {
 		dev_kfree_skb(skb);
 		netif_wake_queue(ndev);
diff --git a/drivers/net/wireless/microchip/wilc1000/sdio.c b/drivers/net/wireless/microchip/wilc1000/sdio.c
index af970f999111..64b1490b793d 100644
--- a/drivers/net/wireless/microchip/wilc1000/sdio.c
+++ b/drivers/net/wireless/microchip/wilc1000/sdio.c
@@ -145,7 +145,7 @@ static int wilc_sdio_probe(struct sdio_func *func,
 	int ret;


-	sdio_priv = kzalloc(sizeof(*sdio_priv), GFP_KERNEL);
+	sdio_priv = kzalloc_obj(*sdio_priv, GFP_KERNEL);
 	if (!sdio_priv)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/microchip/wilc1000/spi.c b/drivers/net/wireless/microchip/wilc1000/spi.c
index 5bcabb7decea..cad1fcf2e14f 100644
--- a/drivers/net/wireless/microchip/wilc1000/spi.c
+++ b/drivers/net/wireless/microchip/wilc1000/spi.c
@@ -211,7 +211,7 @@ static int wilc_bus_probe(struct spi_device *spi)
 	struct wilc *wilc;
 	int ret;

-	spi_priv = kzalloc(sizeof(*spi_priv), GFP_KERNEL);
+	spi_priv = kzalloc_obj(*spi_priv, GFP_KERNEL);
 	if (!spi_priv)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/microchip/wilc1000/wlan.c b/drivers/net/wireless/microchip/wilc1000/wlan.c
index fedc7d59216a..15a2221892cd 100644
--- a/drivers/net/wireless/microchip/wilc1000/wlan.c
+++ b/drivers/net/wireless/microchip/wilc1000/wlan.c
@@ -244,7 +244,7 @@ static int wilc_wlan_txq_add_cfg_pkt(struct wilc_vif *vif, u8 *buffer,
 		return 0;
 	}

-	tqe = kmalloc(sizeof(*tqe), GFP_ATOMIC);
+	tqe = kmalloc_obj(*tqe, GFP_ATOMIC);
 	if (!tqe) {
 		complete(&wilc->cfg_event);
 		return 0;
@@ -413,7 +413,7 @@ int wilc_wlan_txq_add_net_pkt(struct net_device *dev,
 		return 0;
 	}

-	tqe = kmalloc(sizeof(*tqe), GFP_ATOMIC);
+	tqe = kmalloc_obj(*tqe, GFP_ATOMIC);

 	if (!tqe) {
 		tx_complete_fn(tx_data, 0);
@@ -466,7 +466,7 @@ int wilc_wlan_txq_add_mgmt_pkt(struct net_device *dev, void *priv, u8 *buffer,
 		tx_complete_fn(priv, 0);
 		return 0;
 	}
-	tqe = kmalloc(sizeof(*tqe), GFP_ATOMIC);
+	tqe = kmalloc_obj(*tqe, GFP_ATOMIC);

 	if (!tqe) {
 		tx_complete_fn(priv, 0);
@@ -1209,7 +1209,7 @@ static void wilc_wlan_handle_isr_ext(struct wilc *wilc, u32 int_status)

 	offset += size;
 	wilc->rx_buffer_offset = offset;
-	rqe = kmalloc(sizeof(*rqe), GFP_KERNEL);
+	rqe = kmalloc_obj(*rqe, GFP_KERNEL);
 	if (!rqe)
 		return;

diff --git a/drivers/net/wireless/microchip/wilc1000/wlan_cfg.c b/drivers/net/wireless/microchip/wilc1000/wlan_cfg.c
index cfabd5aebb54..0163f0b17497 100644
--- a/drivers/net/wireless/microchip/wilc1000/wlan_cfg.c
+++ b/drivers/net/wireless/microchip/wilc1000/wlan_cfg.c
@@ -390,7 +390,7 @@ int wilc_wlan_cfg_init(struct wilc *wl)
 	if (!wl->cfg.s)
 		goto out_w;

-	str_vals = kzalloc(sizeof(*str_vals), GFP_KERNEL);
+	str_vals = kzalloc_obj(*str_vals, GFP_KERNEL);
 	if (!str_vals)
 		goto out_s;

diff --git a/drivers/net/wireless/purelifi/plfxlc/usb.c b/drivers/net/wireless/purelifi/plfxlc/usb.c
index 711902a809db..09303aa6c1d7 100644
--- a/drivers/net/wireless/purelifi/plfxlc/usb.c
+++ b/drivers/net/wireless/purelifi/plfxlc/usb.c
@@ -204,7 +204,7 @@ static int __lf_x_usb_enable_rx(struct plfxlc_usb *usb)
 	int i, r;

 	r = -ENOMEM;
-	urbs = kcalloc(RX_URBS_COUNT, sizeof(struct urb *), GFP_KERNEL);
+	urbs = kzalloc_objs(struct urb *, RX_URBS_COUNT, GFP_KERNEL);
 	if (!urbs)
 		goto error;

diff --git a/drivers/net/wireless/quantenna/qtnfmac/commands.c b/drivers/net/wireless/quantenna/qtnfmac/commands.c
index 956c5763662f..b1908fa90cfa 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/commands.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/commands.c
@@ -981,7 +981,7 @@ qtnf_parse_wowlan_info(struct qtnf_wmac *mac,
 	const struct qlink_wowlan_support *data1;
 	struct wiphy_wowlan_support *supp;

-	supp = kzalloc(sizeof(*supp), GFP_KERNEL);
+	supp = kzalloc_obj(*supp, GFP_KERNEL);
 	if (!supp)
 		return;

@@ -1031,8 +1031,8 @@ qtnf_parse_variable_mac_info(struct qtnf_wmac *mac,
 	if (WARN_ON(resp->n_reg_rules > NL80211_MAX_SUPP_REG_RULES))
 		return -E2BIG;

-	mac->rd = kzalloc(struct_size(mac->rd, reg_rules, resp->n_reg_rules),
-			  GFP_KERNEL);
+	mac->rd = kzalloc_flex(*mac->rd, reg_rules, resp->n_reg_rules,
+			       GFP_KERNEL);
 	if (!mac->rd)
 		return -ENOMEM;

@@ -1084,8 +1084,8 @@ qtnf_parse_variable_mac_info(struct qtnf_wmac *mac,
 				return -EINVAL;
 			}

-			limits = kcalloc(rec->n_limits, sizeof(*limits),
-					 GFP_KERNEL);
+			limits = kzalloc_objs(*limits, rec->n_limits,
+					      GFP_KERNEL);
 			if (!limits)
 				return -ENOMEM;

@@ -1254,9 +1254,8 @@ qtnf_cmd_resp_proc_mac_info(struct qtnf_wmac *mac,
 	       sizeof(mac_info->vht_cap_mod_mask));

 	mac_info->n_if_comb = resp_info->n_iface_combinations;
-	mac_info->if_comb = kcalloc(mac->macinfo.n_if_comb,
-				    sizeof(*mac->macinfo.if_comb),
-				    GFP_KERNEL);
+	mac_info->if_comb = kzalloc_objs(*mac->macinfo.if_comb,
+					 mac->macinfo.n_if_comb, GFP_KERNEL);

 	if (!mac->macinfo.if_comb)
 		return -ENOMEM;
@@ -1341,8 +1340,8 @@ static int qtnf_cmd_band_fill_iftype(const u8 *data,
 	if (band->n_iftype_data == 0)
 		return 0;

-	iftype_data = kcalloc(band->n_iftype_data, sizeof(*iftype_data),
-			      GFP_KERNEL);
+	iftype_data = kzalloc_objs(*iftype_data, band->n_iftype_data,
+				   GFP_KERNEL);
 	if (!iftype_data) {
 		band->n_iftype_data = 0;
 		return -ENOMEM;
@@ -1389,8 +1388,8 @@ qtnf_cmd_resp_fill_band_info(struct ieee80211_supported_band *band,
 		return 0;

 	if (!band->channels)
-		band->channels = kcalloc(band->n_channels, sizeof(*chan),
-					 GFP_KERNEL);
+		band->channels = kzalloc_objs(*chan, band->n_channels,
+					      GFP_KERNEL);
 	if (!band->channels) {
 		band->n_channels = 0;
 		return -ENOMEM;
diff --git a/drivers/net/wireless/quantenna/qtnfmac/core.c b/drivers/net/wireless/quantenna/qtnfmac/core.c
index 38af6cdc2843..4cab8dee332b 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/core.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/core.c
@@ -212,7 +212,7 @@ static int qtnf_mac_init_single_band(struct wiphy *wiphy,
 {
 	int ret;

-	wiphy->bands[band] = kzalloc(sizeof(*wiphy->bands[band]), GFP_KERNEL);
+	wiphy->bands[band] = kzalloc_obj(*wiphy->bands[band], GFP_KERNEL);
 	if (!wiphy->bands[band])
 		return -ENOMEM;

diff --git a/drivers/net/wireless/quantenna/qtnfmac/event.c b/drivers/net/wireless/quantenna/qtnfmac/event.c
index 71840f41b73c..c16cd1e5286a 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/event.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/event.c
@@ -41,7 +41,7 @@ qtnf_event_handle_sta_assoc(struct qtnf_wmac *mac, struct qtnf_vif *vif,
 		return -EPROTO;
 	}

-	sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
+	sinfo = kzalloc_obj(*sinfo, GFP_KERNEL);
 	if (!sinfo)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/quantenna/qtnfmac/util.c b/drivers/net/wireless/quantenna/qtnfmac/util.c
index cda6f5f3f38a..5c1a5a8f87a6 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/util.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/util.c
@@ -59,7 +59,7 @@ struct qtnf_sta_node *qtnf_sta_list_add(struct qtnf_vif *vif,
 	if (node)
 		goto done;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (unlikely(!node))
 		goto done;

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
index 42e21e9f303b..f2b55db0b27b 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
@@ -1589,7 +1589,7 @@ static int rt2400pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
 	/*
 	 * Create channel information array
 	 */
-	info = kcalloc(spec->num_channels, sizeof(*info), GFP_KERNEL);
+	info = kzalloc_objs(*info, spec->num_channels, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
index 36ddc5a69fa4..a6b26c5ef4cf 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
@@ -1907,7 +1907,7 @@ static int rt2500pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
 	/*
 	 * Create channel information array
 	 */
-	info = kcalloc(spec->num_channels, sizeof(*info), GFP_KERNEL);
+	info = kzalloc_objs(*info, spec->num_channels, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
index 09923765e2db..50f1eeddf913 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
@@ -1720,7 +1720,7 @@ static int rt2500usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
 	/*
 	 * Create channel information array
 	 */
-	info = kcalloc(spec->num_channels, sizeof(*info), GFP_KERNEL);
+	info = kzalloc_objs(*info, spec->num_channels, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
index 65d0f805459c..6041f029857b 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
@@ -11907,13 +11907,13 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
 	/*
 	 * Create channel information and survey arrays
 	 */
-	info = kcalloc(spec->num_channels, sizeof(*info), GFP_KERNEL);
+	info = kzalloc_objs(*info, spec->num_channels, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

 	rt2x00dev->chan_survey =
-		kcalloc(spec->num_channels, sizeof(struct rt2x00_chan_survey),
-			GFP_KERNEL);
+		kzalloc_objs(struct rt2x00_chan_survey, spec->num_channels,
+			     GFP_KERNEL);
 	if (!rt2x00dev->chan_survey) {
 		kfree(info);
 		return -ENOMEM;
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
index b51a23300ba2..d1d94b0b0f31 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
@@ -179,7 +179,7 @@ static int rt2800usb_autorun_detect(struct rt2x00_dev *rt2x00dev)
 	u32 fw_mode;
 	int ret;

-	reg = kmalloc(sizeof(*reg), GFP_KERNEL);
+	reg = kmalloc_obj(*reg, GFP_KERNEL);
 	if (reg == NULL)
 		return -ENOMEM;
 	/* cannot use rt2x00usb_register_read here as it uses different
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c b/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
index f2395309ec00..edececd89572 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00debug.c
@@ -639,7 +639,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)
 	struct dentry *queue_folder;
 	struct dentry *register_folder;

-	intf = kzalloc(sizeof(struct rt2x00debug_intf), GFP_KERNEL);
+	intf = kzalloc_obj(struct rt2x00debug_intf, GFP_KERNEL);
 	if (!intf) {
 		rt2x00_err(rt2x00dev, "Failed to allocate debug handler\n");
 		return;
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
index 778a478ab53a..dee01472747f 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
@@ -1020,11 +1020,11 @@ static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev,
 	if (spec->supported_rates & SUPPORT_RATE_OFDM)
 		num_rates += 8;

-	channels = kcalloc(spec->num_channels, sizeof(*channels), GFP_KERNEL);
+	channels = kzalloc_objs(*channels, spec->num_channels, GFP_KERNEL);
 	if (!channels)
 		return -ENOMEM;

-	rates = kcalloc(num_rates, sizeof(*rates), GFP_KERNEL);
+	rates = kzalloc_objs(*rates, num_rates, GFP_KERNEL);
 	if (!rates)
 		goto exit_free_channels;

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
index 13e48b1e7356..8fb336834ced 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
@@ -564,7 +564,7 @@ static void rt2x00queue_bar_check(struct queue_entry *entry)
 	if (likely(!ieee80211_is_back_req(bar->frame_control)))
 		return;

-	bar_entry = kmalloc(sizeof(*bar_entry), GFP_ATOMIC);
+	bar_entry = kmalloc_obj(*bar_entry, GFP_ATOMIC);

 	/*
 	 * If the alloc fails we still send the BAR out but just don't track
@@ -1244,7 +1244,7 @@ int rt2x00queue_allocate(struct rt2x00_dev *rt2x00dev)
 	 */
 	rt2x00dev->data_queues = 2 + rt2x00dev->ops->tx_queues + req_atim;

-	queue = kcalloc(rt2x00dev->data_queues, sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_objs(*queue, rt2x00dev->data_queues, GFP_KERNEL);
 	if (!queue)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
index a6d50149e0c3..54599cad78f9 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
@@ -196,7 +196,7 @@ void rt2x00usb_register_read_async(struct rt2x00_dev *rt2x00dev,
 	struct urb *urb;
 	struct rt2x00_async_read_data *rd;

-	rd = kmalloc(sizeof(*rd), GFP_ATOMIC);
+	rd = kmalloc_obj(*rd, GFP_ATOMIC);
 	if (!rd)
 		return;

diff --git a/drivers/net/wireless/ralink/rt2x00/rt61pci.c b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
index d1cd5694e3c7..aea74b6b28e4 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
@@ -2712,7 +2712,7 @@ static int rt61pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
 	/*
 	 * Create channel information array
 	 */
-	info = kcalloc(spec->num_channels, sizeof(*info), GFP_KERNEL);
+	info = kzalloc_objs(*info, spec->num_channels, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ralink/rt2x00/rt73usb.c b/drivers/net/wireless/ralink/rt2x00/rt73usb.c
index b79dda952a33..c47f4689ffdd 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt73usb.c
@@ -2136,7 +2136,7 @@ static int rt73usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
 	/*
 	 * Create channel information array
 	 */
-	info = kcalloc(spec->num_channels, sizeof(*info), GFP_KERNEL);
+	info = kzalloc_objs(*info, spec->num_channels, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c b/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c
index 7aa2da0cd63c..7a2a31af9a79 100644
--- a/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c
+++ b/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c
@@ -129,7 +129,7 @@ static void rtl8187_iowrite_async(struct rtl8187_priv *priv, __le16 addr,
 	} *buf;
 	int rc;

-	buf = kmalloc(sizeof(*buf), GFP_ATOMIC);
+	buf = kmalloc_obj(*buf, GFP_ATOMIC);
 	if (!buf)
 		return;

@@ -1463,7 +1463,7 @@ static int rtl8187_probe(struct usb_interface *intf,
 	priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B);

 	/* allocate "DMA aware" buffer for register accesses */
-	priv->io_dmabuf = kmalloc(sizeof(*priv->io_dmabuf), GFP_KERNEL);
+	priv->io_dmabuf = kmalloc_obj(*priv->io_dmabuf, GFP_KERNEL);
 	if (!priv->io_dmabuf) {
 		err = -ENOMEM;
 		goto err_free_dev;
diff --git a/drivers/net/wireless/realtek/rtl8xxxu/core.c b/drivers/net/wireless/realtek/rtl8xxxu/core.c
index f9a527f6a175..721c95f13ec9 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/core.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/core.c
@@ -7323,7 +7323,7 @@ static void rtl8xxxu_collect_sta_iter(void *data, struct ieee80211_sta *sta)
 	struct rtl8xxxu_iter_stas_data *iter_stas = data;
 	struct rtl8xxxu_stas_entry *stas_entry;

-	stas_entry = kmalloc(sizeof(*stas_entry), GFP_ATOMIC);
+	stas_entry = kmalloc_obj(*stas_entry, GFP_ATOMIC);
 	if (!stas_entry)
 		return;

@@ -7381,7 +7381,7 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw)
 	}

 	for (i = 0; i < RTL8XXXU_TX_URBS; i++) {
-		tx_urb = kmalloc(sizeof(struct rtl8xxxu_tx_urb), GFP_KERNEL);
+		tx_urb = kmalloc_obj(struct rtl8xxxu_tx_urb, GFP_KERNEL);
 		if (!tx_urb) {
 			if (!i)
 				ret = -ENOMEM;
@@ -7402,7 +7402,7 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw)
 	spin_unlock_irqrestore(&priv->rx_urb_lock, flags);

 	for (i = 0; i < RTL8XXXU_RX_URBS; i++) {
-		rx_urb = kmalloc(sizeof(struct rtl8xxxu_rx_urb), GFP_KERNEL);
+		rx_urb = kmalloc_obj(struct rtl8xxxu_rx_urb, GFP_KERNEL);
 		if (!rx_urb) {
 			if (!i)
 				ret = -ENOMEM;
diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c
index 09e5a16d7252..0ac9cf0937aa 100644
--- a/drivers/net/wireless/realtek/rtlwifi/base.c
+++ b/drivers/net/wireless/realtek/rtlwifi/base.c
@@ -2011,7 +2011,7 @@ void rtl_collect_scan_list(struct ieee80211_hw *hw, struct sk_buff *skb)
 	}

 	if (!entry) {
-		entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+		entry = kmalloc_obj(*entry, GFP_ATOMIC);

 		if (!entry)
 			goto label_err;
diff --git a/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c b/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c
index e88d92d3ae7a..332f90e4d83f 100644
--- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c
+++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c
@@ -132,10 +132,10 @@ static void rtl_btc_alloc_variable(struct rtl_priv *rtlpriv, bool wifi_only)
 {
 	if (wifi_only)
 		rtlpriv->btcoexist.wifi_only_context =
-			kzalloc(sizeof(struct wifi_only_cfg), GFP_KERNEL);
+			kzalloc_obj(struct wifi_only_cfg, GFP_KERNEL);
 	else
 		rtlpriv->btcoexist.btc_context =
-			kzalloc(sizeof(struct btc_coexist), GFP_KERNEL);
+			kzalloc_obj(struct btc_coexist, GFP_KERNEL);
 }

 static void rtl_btc_free_variable(struct rtl_priv *rtlpriv)
diff --git a/drivers/net/wireless/realtek/rtlwifi/rc.c b/drivers/net/wireless/realtek/rtlwifi/rc.c
index a164364109ba..dcfaa98198b6 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rc.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rc.c
@@ -278,7 +278,7 @@ static void *rtl_rate_alloc_sta(void *ppriv,
 	struct rtl_priv *rtlpriv = ppriv;
 	struct rtl_rate_priv *rate_priv;

-	rate_priv = kzalloc(sizeof(*rate_priv), gfp);
+	rate_priv = kzalloc_obj(*rate_priv, gfp);
 	if (!rate_priv)
 		return NULL;

diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/sw.c
index cc699efa9c79..1f927dd9e152 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/sw.c
@@ -70,10 +70,10 @@ static int rtl92du_init_shared_data(struct ieee80211_hw *hw)
 	rtlpriv->curveindex_5g = kcalloc(TARGET_CHNL_NUM_5G,
 					 sizeof(*rtlpriv->curveindex_5g),
 					 GFP_KERNEL);
-	rtlpriv->mutex_for_power_on_off =
-		kzalloc(sizeof(*rtlpriv->mutex_for_power_on_off), GFP_KERNEL);
-	rtlpriv->mutex_for_hw_init =
-		kzalloc(sizeof(*rtlpriv->mutex_for_hw_init), GFP_KERNEL);
+	rtlpriv->mutex_for_power_on_off = kzalloc_obj(*rtlpriv->mutex_for_power_on_off,
+						      GFP_KERNEL);
+	rtlpriv->mutex_for_hw_init = kzalloc_obj(*rtlpriv->mutex_for_hw_init,
+						 GFP_KERNEL);

 	if (!rtlpriv->curveindex_2g || !rtlpriv->curveindex_5g ||
 	    !rtlpriv->mutex_for_power_on_off || !rtlpriv->mutex_for_hw_init) {
diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c
index c68a9fff6808..a3e5b0963cb7 100644
--- a/drivers/net/wireless/realtek/rtw88/fw.c
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
@@ -1331,7 +1331,7 @@ static struct rtw_rsvd_page *rtw_alloc_rsvd_page(struct rtw_dev *rtwdev,
 {
 	struct rtw_rsvd_page *rsvd_pkt = NULL;

-	rsvd_pkt = kzalloc(sizeof(*rsvd_pkt), GFP_KERNEL);
+	rsvd_pkt = kzalloc_obj(*rsvd_pkt, GFP_KERNEL);

 	if (!rsvd_pkt)
 		return NULL;
diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c
index 138e9e348c6c..b42840271051 100644
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
@@ -1290,8 +1290,8 @@ static int rtw_sdio_init_tx(struct rtw_dev *rtwdev)

 	for (i = 0; i < RTK_MAX_TX_QUEUE_NUM; i++)
 		skb_queue_head_init(&rtwsdio->tx_queue[i]);
-	rtwsdio->tx_handler_data = kmalloc(sizeof(*rtwsdio->tx_handler_data),
-					   GFP_KERNEL);
+	rtwsdio->tx_handler_data = kmalloc_obj(*rtwsdio->tx_handler_data,
+					       GFP_KERNEL);
 	if (!rtwsdio->tx_handler_data)
 		goto err_destroy_wq;

diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
index db60e142268d..433b06c8d8a6 100644
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -403,7 +403,7 @@ static bool rtw_usb_tx_agg_skb(struct rtw_usb *rtwusb, struct sk_buff_head *list
 	if (skb_queue_empty(list))
 		return false;

-	txcb = kmalloc(sizeof(*txcb), GFP_ATOMIC);
+	txcb = kmalloc_obj(*txcb, GFP_ATOMIC);
 	if (!txcb)
 		return false;

diff --git a/drivers/net/wireless/realtek/rtw88/util.c b/drivers/net/wireless/realtek/rtw88/util.c
index 66819f694405..fcd6eb1ab32a 100644
--- a/drivers/net/wireless/realtek/rtw88/util.c
+++ b/drivers/net/wireless/realtek/rtw88/util.c
@@ -122,7 +122,7 @@ static void rtw_collect_sta_iter(void *data, struct ieee80211_sta *sta)
 	struct rtw_iter_stas_data *iter_stas = data;
 	struct rtw_stas_entry *stas_entry;

-	stas_entry = kmalloc(sizeof(*stas_entry), GFP_ATOMIC);
+	stas_entry = kmalloc_obj(*stas_entry, GFP_ATOMIC);
 	if (!stas_entry)
 		return;

@@ -172,7 +172,7 @@ static void rtw_collect_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
 	struct rtw_iter_vifs_data *iter_stas = data;
 	struct rtw_vifs_entry *vifs_entry;

-	vifs_entry = kmalloc(sizeof(*vifs_entry), GFP_ATOMIC);
+	vifs_entry = kmalloc_obj(*vifs_entry, GFP_ATOMIC);
 	if (!vifs_entry)
 		return;

diff --git a/drivers/net/wireless/realtek/rtw89/acpi.c b/drivers/net/wireless/realtek/rtw89/acpi.c
index f1e758a5f32b..0853b2e49675 100644
--- a/drivers/net/wireless/realtek/rtw89/acpi.c
+++ b/drivers/net/wireless/realtek/rtw89/acpi.c
@@ -115,7 +115,7 @@ rtw89_acpi_evaluate_method(struct rtw89_dev *rtwdev, const char *method)
 		goto out;
 	}

-	data = kzalloc(struct_size(data, buf, len), GFP_KERNEL);
+	data = kzalloc_flex(*data, buf, len, GFP_KERNEL);
 	if (!data)
 		goto out;

diff --git a/drivers/net/wireless/realtek/rtw89/cam.c b/drivers/net/wireless/realtek/rtw89/cam.c
index 9f63d67777fa..949f304216e2 100644
--- a/drivers/net/wireless/realtek/rtw89/cam.c
+++ b/drivers/net/wireless/realtek/rtw89/cam.c
@@ -420,7 +420,7 @@ static int rtw89_cam_sec_key_install(struct rtw89_dev *rtwdev,
 		return ret;
 	}

-	sec_cam = kzalloc(sizeof(*sec_cam), GFP_KERNEL);
+	sec_cam = kzalloc_obj(*sec_cam, GFP_KERNEL);
 	if (!sec_cam) {
 		ret = -ENOMEM;
 		goto err_release_cam;
diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c
index 6e77522bcd8f..3295f76a0f1c 100644
--- a/drivers/net/wireless/realtek/rtw89/core.c
+++ b/drivers/net/wireless/realtek/rtw89/core.c
@@ -4220,7 +4220,7 @@ int rtw89_core_send_nullfunc(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rt
 	if (vif->type != NL80211_IFTYPE_STATION || !vif->cfg.assoc)
 		return 0;

-	wait = kzalloc(sizeof(*wait), GFP_KERNEL);
+	wait = kzalloc_obj(*wait, GFP_KERNEL);
 	if (!wait)
 		return -ENOMEM;

@@ -5657,7 +5657,7 @@ rtw89_wait_for_cond_prep(struct rtw89_wait_info *wait, unsigned int cond)
 	if (cur != RTW89_WAIT_COND_IDLE)
 		return ERR_PTR(-EPERM);

-	prep = kzalloc(sizeof(*prep), GFP_KERNEL);
+	prep = kzalloc_obj(*prep, GFP_KERNEL);
 	if (!prep)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/wireless/realtek/rtw89/debug.c b/drivers/net/wireless/realtek/rtw89/debug.c
index 06a9504d2bad..fb89660ba70c 100644
--- a/drivers/net/wireless/realtek/rtw89/debug.c
+++ b/drivers/net/wireless/realtek/rtw89/debug.c
@@ -3524,7 +3524,7 @@ rtw89_debug_priv_early_h2c_set(struct rtw89_dev *rtwdev,
 		goto out;
 	}

-	early_h2c = kmalloc(sizeof(*early_h2c), GFP_KERNEL);
+	early_h2c = kmalloc_obj(*early_h2c, GFP_KERNEL);
 	if (!early_h2c) {
 		kfree(h2c);
 		return -EFAULT;
diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index f84726f04669..97c58a2fa399 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -1099,12 +1099,12 @@ int rtw89_build_phy_tbl_from_elm(struct rtw89_dev *rtwdev,
 	else if (*pp)
 		return 1; /* ignore if an element is existing */

-	tbl = kzalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kzalloc_obj(*tbl, GFP_KERNEL);
 	if (!tbl)
 		return -ENOMEM;

 	n_regs = le32_to_cpu(elm->size) / sizeof(tbl->regs[0]);
-	regs = kcalloc(n_regs, sizeof(*regs), GFP_KERNEL);
+	regs = kzalloc_objs(*regs, n_regs, GFP_KERNEL);
 	if (!regs)
 		goto out;

@@ -1141,7 +1141,7 @@ int rtw89_fw_recognize_txpwr_from_elm(struct rtw89_dev *rtwdev,
 	struct rtw89_txpwr_conf *conf;

 	if (!rtwdev->rfe_data) {
-		rtwdev->rfe_data = kzalloc(sizeof(*rtwdev->rfe_data), GFP_KERNEL);
+		rtwdev->rfe_data = kzalloc_obj(*rtwdev->rfe_data, GFP_KERNEL);
 		if (!rtwdev->rfe_data)
 			return -ENOMEM;
 	}
@@ -1201,7 +1201,7 @@ int rtw89_build_txpwr_trk_tbl_from_elm(struct rtw89_dev *rtwdev,
 		return -ENOENT;
 	}

-	elm_info->txpwr_trk = kzalloc(sizeof(*elm_info->txpwr_trk), GFP_KERNEL);
+	elm_info->txpwr_trk = kzalloc_obj(*elm_info->txpwr_trk, GFP_KERNEL);
 	if (!elm_info->txpwr_trk)
 		return -ENOMEM;

@@ -1250,7 +1250,7 @@ int rtw89_build_rfk_log_fmt_from_elm(struct rtw89_dev *rtwdev,
 	if (elm_info->rfk_log_fmt)
 		goto allocated;

-	elm_info->rfk_log_fmt = kzalloc(sizeof(*elm_info->rfk_log_fmt), GFP_KERNEL);
+	elm_info->rfk_log_fmt = kzalloc_obj(*elm_info->rfk_log_fmt, GFP_KERNEL);
 	if (!elm_info->rfk_log_fmt)
 		return 1; /* this is an optional element, so just ignore this */

@@ -2944,7 +2944,7 @@ static int rtw89_fw_h2c_add_general_pkt(struct rtw89_dev *rtwdev,
 	struct sk_buff *skb;
 	int ret;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -8138,7 +8138,7 @@ static int rtw89_append_probe_req_ie(struct rtw89_dev *rtwdev,
 		skb_put_data(new, ies->ies[band], ies->len[band]);
 		skb_put_data(new, ies->common_ies, ies->common_ie_len);

-		info = kzalloc(sizeof(*info), GFP_KERNEL);
+		info = kzalloc_obj(*info, GFP_KERNEL);
 		if (!info) {
 			ret = -ENOMEM;
 			kfree_skb(new);
@@ -8234,7 +8234,7 @@ static int rtw89_update_6ghz_rnr_chan_ax(struct rtw89_dev *rtwdev,
 		hdr = (struct ieee80211_hdr *)skb->data;
 		ether_addr_copy(hdr->addr3, params->bssid);

-		info = kzalloc(sizeof(*info), GFP_KERNEL);
+		info = kzalloc_obj(*info, GFP_KERNEL);
 		if (!info) {
 			ret = -ENOMEM;
 			kfree_skb(skb);
@@ -8527,7 +8527,7 @@ int rtw89_pno_scan_add_chan_list_ax(struct rtw89_dev *rtwdev,
 	     idx < nd_config->n_channels && list_len < RTW89_SCAN_LIST_LIMIT_AX;
 	     idx++, list_len++) {
 		channel = nd_config->channels[idx];
-		ch_info = kzalloc(sizeof(*ch_info), GFP_KERNEL);
+		ch_info = kzalloc_obj(*ch_info, GFP_KERNEL);
 		if (!ch_info) {
 			ret = -ENOMEM;
 			goto out;
@@ -8567,7 +8567,7 @@ static int rtw89_hw_scan_add_op_types_ax(struct rtw89_dev *rtwdev,
 {
 	struct rtw89_mac_chinfo_ax *tmp;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

@@ -8613,7 +8613,7 @@ int rtw89_hw_scan_prep_chan_list_ax(struct rtw89_dev *rtwdev,

 	for (idx = 0; idx < req->n_channels; idx++) {
 		channel = req->channels[idx];
-		ch_info = kzalloc(sizeof(*ch_info), GFP_KERNEL);
+		ch_info = kzalloc_obj(*ch_info, GFP_KERNEL);
 		if (!ch_info) {
 			ret = -ENOMEM;
 			goto out;
@@ -8745,7 +8745,7 @@ int rtw89_pno_scan_add_chan_list_be(struct rtw89_dev *rtwdev,
 	     idx < nd_config->n_channels && list_len < RTW89_SCAN_LIST_LIMIT_BE;
 	     idx++, list_len++) {
 		channel = nd_config->channels[idx];
-		ch_info = kzalloc(sizeof(*ch_info), GFP_KERNEL);
+		ch_info = kzalloc_obj(*ch_info, GFP_KERNEL);
 		if (!ch_info) {
 			ret = -ENOMEM;
 			goto out;
@@ -8807,7 +8807,7 @@ int rtw89_hw_scan_prep_chan_list_be(struct rtw89_dev *rtwdev,
 		    !cfg80211_channel_is_psc(channel) && chan_by_rnr)
 			continue;

-		ch_info = kzalloc(sizeof(*ch_info), GFP_KERNEL);
+		ch_info = kzalloc_obj(*ch_info, GFP_KERNEL);
 		if (!ch_info) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/drivers/net/wireless/realtek/rtw89/mac80211.c b/drivers/net/wireless/realtek/rtw89/mac80211.c
index 315bb0d0759f..594af3b7201b 100644
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
@@ -1666,7 +1666,7 @@ int rtw89_ops_change_vif_links(struct ieee80211_hw *hw,
 		return -EOPNOTSUPP;

 	if (removing_links) {
-		snap = kzalloc(sizeof(*snap), GFP_KERNEL);
+		snap = kzalloc_obj(*snap, GFP_KERNEL);
 		if (!snap)
 			return -ENOMEM;

diff --git a/drivers/net/wireless/realtek/rtw89/phy.c b/drivers/net/wireless/realtek/rtw89/phy.c
index 6c6d5f1da867..eb2e2191408a 100644
--- a/drivers/net/wireless/realtek/rtw89/phy.c
+++ b/drivers/net/wireless/realtek/rtw89/phy.c
@@ -1975,7 +1975,7 @@ void rtw89_phy_init_rf_reg(struct rtw89_dev *rtwdev, bool noio)
 	struct rtw89_fw_h2c_rf_reg_info *rf_reg_info;
 	u8 path;

-	rf_reg_info = kzalloc(sizeof(*rf_reg_info), GFP_KERNEL);
+	rf_reg_info = kzalloc_obj(*rf_reg_info, GFP_KERNEL);
 	if (!rf_reg_info)
 		return;

diff --git a/drivers/net/wireless/realtek/rtw89/sar.c b/drivers/net/wireless/realtek/rtw89/sar.c
index ef7feccccd5e..994ebbd8d267 100644
--- a/drivers/net/wireless/realtek/rtw89/sar.c
+++ b/drivers/net/wireless/realtek/rtw89/sar.c
@@ -501,7 +501,7 @@ static void rtw89_set_sar_from_acpi(struct rtw89_dev *rtwdev)
 	struct rtw89_sar_cfg_acpi *cfg;
 	int ret;

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return;

diff --git a/drivers/net/wireless/realtek/rtw89/ser.c b/drivers/net/wireless/realtek/rtw89/ser.c
index 7fdc69578da3..f91e66133b30 100644
--- a/drivers/net/wireless/realtek/rtw89/ser.c
+++ b/drivers/net/wireless/realtek/rtw89/ser.c
@@ -210,7 +210,7 @@ static int ser_send_msg(struct rtw89_ser *ser, u8 event)
 	if (test_bit(RTW89_SER_DRV_STOP_RUN, ser->flags))
 		return -EIO;

-	msg = kmalloc(sizeof(*msg), GFP_ATOMIC);
+	msg = kmalloc_obj(*msg, GFP_ATOMIC);
 	if (!msg)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/realtek/rtw89/usb.c b/drivers/net/wireless/realtek/rtw89/usb.c
index e77561a4d971..95b5c1cfdce4 100644
--- a/drivers/net/wireless/realtek/rtw89/usb.c
+++ b/drivers/net/wireless/realtek/rtw89/usb.c
@@ -294,7 +294,7 @@ static void rtw89_usb_ops_tx_kick_off(struct rtw89_dev *rtwdev, u8 txch)
 		if (!skb)
 			break;

-		txcb = kmalloc(sizeof(*txcb), GFP_ATOMIC);
+		txcb = kmalloc_obj(*txcb, GFP_ATOMIC);
 		if (!txcb) {
 			rtw89_usb_tx_free_skb(rtwdev, txch, skb);
 			continue;
@@ -931,8 +931,8 @@ static int rtw89_usb_intf_init(struct rtw89_dev *rtwdev,
 	if (ret)
 		return ret;

-	rtwusb->vendor_req_buf = kmalloc(sizeof(*rtwusb->vendor_req_buf),
-					 GFP_KERNEL);
+	rtwusb->vendor_req_buf = kmalloc_obj(*rtwusb->vendor_req_buf,
+					     GFP_KERNEL);
 	if (!rtwusb->vendor_req_buf)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/realtek/rtw89/wow.c b/drivers/net/wireless/realtek/rtw89/wow.c
index b67ceda59e92..6954ca8f0b35 100644
--- a/drivers/net/wireless/realtek/rtw89/wow.c
+++ b/drivers/net/wireless/realtek/rtw89/wow.c
@@ -1490,7 +1490,7 @@ static int rtw89_pno_scan_update_probe_req(struct rtw89_dev *rtwdev,
 		skb_put_data(skb, basic_rate_ie, sizeof(basic_rate_ie));
 		skb_put_data(skb, nd_config->ie, nd_config->ie_len);

-		info = kzalloc(sizeof(*info), GFP_KERNEL);
+		info = kzalloc_obj(*info, GFP_KERNEL);
 		if (!info) {
 			kfree_skb(skb);
 			rtw89_fw_release_pno_pkt_list(rtwdev, rtwvif_link);
diff --git a/drivers/net/wireless/rsi/rsi_91x_coex.c b/drivers/net/wireless/rsi/rsi_91x_coex.c
index 372eaaa2b9ef..5bc8c30f2721 100644
--- a/drivers/net/wireless/rsi/rsi_91x_coex.c
+++ b/drivers/net/wireless/rsi/rsi_91x_coex.c
@@ -140,7 +140,7 @@ int rsi_coex_attach(struct rsi_common *common)
 	struct rsi_coex_ctrl_block *coex_cb;
 	int cnt;

-	coex_cb = kzalloc(sizeof(*coex_cb), GFP_KERNEL);
+	coex_cb = kzalloc_obj(*coex_cb, GFP_KERNEL);
 	if (!coex_cb)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/rsi/rsi_91x_debugfs.c b/drivers/net/wireless/rsi/rsi_91x_debugfs.c
index c528e6ca2c8d..ea1766b967ee 100644
--- a/drivers/net/wireless/rsi/rsi_91x_debugfs.c
+++ b/drivers/net/wireless/rsi/rsi_91x_debugfs.c
@@ -285,7 +285,7 @@ int rsi_init_dbgfs(struct rsi_hw *adapter)
 	int ii;
 	const struct rsi_dbg_files *files;

-	dev_dbgfs = kzalloc(sizeof(*dev_dbgfs), GFP_KERNEL);
+	dev_dbgfs = kzalloc_obj(*dev_dbgfs, GFP_KERNEL);
 	if (!dev_dbgfs)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/rsi/rsi_91x_hal.c b/drivers/net/wireless/rsi/rsi_91x_hal.c
index 7d26314a3e76..9e65db2f6460 100644
--- a/drivers/net/wireless/rsi/rsi_91x_hal.c
+++ b/drivers/net/wireless/rsi/rsi_91x_hal.c
@@ -647,7 +647,7 @@ static int bl_write_header(struct rsi_hw *adapter, u8 *flash_content,
 	u32 write_addr, write_len;
 	int status;

-	bl_hdr = kzalloc(sizeof(*bl_hdr), GFP_KERNEL);
+	bl_hdr = kzalloc_obj(*bl_hdr, GFP_KERNEL);
 	if (!bl_hdr)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/rsi/rsi_91x_main.c b/drivers/net/wireless/rsi/rsi_91x_main.c
index a9bb37d5d581..c936e40ac871 100644
--- a/drivers/net/wireless/rsi/rsi_91x_main.c
+++ b/drivers/net/wireless/rsi/rsi_91x_main.c
@@ -304,11 +304,11 @@ struct rsi_hw *rsi_91x_init(u16 oper_mode)
 	struct rsi_common *common = NULL;
 	u8 ii = 0;

-	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(*adapter, GFP_KERNEL);
 	if (!adapter)
 		return NULL;

-	adapter->priv = kzalloc(sizeof(*common), GFP_KERNEL);
+	adapter->priv = kzalloc_obj(*common, GFP_KERNEL);
 	if (adapter->priv == NULL) {
 		rsi_dbg(ERR_ZONE, "%s: Failed in allocation of memory\n",
 			__func__);
diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c b/drivers/net/wireless/rsi/rsi_91x_sdio.c
index ee7ad81c858d..51932a434d89 100644
--- a/drivers/net/wireless/rsi/rsi_91x_sdio.c
+++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c
@@ -828,7 +828,7 @@ static int rsi_init_sdio_interface(struct rsi_hw *adapter,
 	struct rsi_91x_sdiodev *rsi_91x_dev;
 	int status;

-	rsi_91x_dev = kzalloc(sizeof(*rsi_91x_dev), GFP_KERNEL);
+	rsi_91x_dev = kzalloc_obj(*rsi_91x_dev, GFP_KERNEL);
 	if (!rsi_91x_dev)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/rsi/rsi_91x_usb.c b/drivers/net/wireless/rsi/rsi_91x_usb.c
index dccc139cabb2..b0238103c13b 100644
--- a/drivers/net/wireless/rsi/rsi_91x_usb.c
+++ b/drivers/net/wireless/rsi/rsi_91x_usb.c
@@ -620,7 +620,7 @@ static int rsi_init_usb_interface(struct rsi_hw *adapter,
 	struct rsi_91x_usbdev *rsi_dev;
 	int status;

-	rsi_dev = kzalloc(sizeof(*rsi_dev), GFP_KERNEL);
+	rsi_dev = kzalloc_obj(*rsi_dev, GFP_KERNEL);
 	if (!rsi_dev)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/silabs/wfx/debug.c b/drivers/net/wireless/silabs/wfx/debug.c
index e8265208f9a5..6475a4a42afc 100644
--- a/drivers/net/wireless/silabs/wfx/debug.c
+++ b/drivers/net/wireless/silabs/wfx/debug.c
@@ -291,7 +291,7 @@ static ssize_t wfx_send_hif_msg_read(struct file *file, char __user *user_buf,

 static int wfx_send_hif_msg_open(struct inode *inode, struct file *file)
 {
-	struct dbgfs_hif_msg *context = kzalloc(sizeof(*context), GFP_KERNEL);
+	struct dbgfs_hif_msg *context = kzalloc_obj(*context, GFP_KERNEL);

 	if (!context)
 		return -ENOMEM;
diff --git a/drivers/net/wireless/st/cw1200/cw1200_sdio.c b/drivers/net/wireless/st/cw1200/cw1200_sdio.c
index 00c4731d8f8e..b503112d3a3e 100644
--- a/drivers/net/wireless/st/cw1200/cw1200_sdio.c
+++ b/drivers/net/wireless/st/cw1200/cw1200_sdio.c
@@ -287,7 +287,7 @@ static int cw1200_sdio_probe(struct sdio_func *func,
 	if (func->num != 0x01)
 		return -ENODEV;

-	self = kzalloc(sizeof(*self), GFP_KERNEL);
+	self = kzalloc_obj(*self, GFP_KERNEL);
 	if (!self) {
 		pr_err("Can't allocate SDIO hwbus_priv.\n");
 		return -ENOMEM;
diff --git a/drivers/net/wireless/st/cw1200/debug.c b/drivers/net/wireless/st/cw1200/debug.c
index 8686929c70df..6af080d0f21b 100644
--- a/drivers/net/wireless/st/cw1200/debug.c
+++ b/drivers/net/wireless/st/cw1200/debug.c
@@ -360,8 +360,8 @@ static const struct file_operations fops_wsm_dumps = {
 int cw1200_debug_init(struct cw1200_common *priv)
 {
 	int ret = -ENOMEM;
-	struct cw1200_debug_priv *d = kzalloc(sizeof(struct cw1200_debug_priv),
-			GFP_KERNEL);
+	struct cw1200_debug_priv *d = kzalloc_obj(struct cw1200_debug_priv,
+						  GFP_KERNEL);
 	priv->debug = d;
 	if (!d)
 		return ret;
diff --git a/drivers/net/wireless/st/cw1200/pm.c b/drivers/net/wireless/st/cw1200/pm.c
index 2002e3f9fe45..ed2650b2a40b 100644
--- a/drivers/net/wireless/st/cw1200/pm.c
+++ b/drivers/net/wireless/st/cw1200/pm.c
@@ -207,7 +207,7 @@ int cw1200_wow_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
 	wsm_set_ether_type_filter(priv, &cw1200_ether_type_filter_on.hdr);

 	/* Allocate state */
-	state = kzalloc(sizeof(struct cw1200_suspend_state), GFP_KERNEL);
+	state = kzalloc_obj(struct cw1200_suspend_state, GFP_KERNEL);
 	if (!state)
 		goto revert3;

diff --git a/drivers/net/wireless/st/cw1200/queue.c b/drivers/net/wireless/st/cw1200/queue.c
index a933e2c7dc2c..717da9c2cad9 100644
--- a/drivers/net/wireless/st/cw1200/queue.c
+++ b/drivers/net/wireless/st/cw1200/queue.c
@@ -153,8 +153,7 @@ int cw1200_queue_stats_init(struct cw1200_queue_stats *stats,
 	spin_lock_init(&stats->lock);
 	init_waitqueue_head(&stats->wait_link_id_empty);

-	stats->link_map_cache = kcalloc(map_capacity, sizeof(int),
-					GFP_KERNEL);
+	stats->link_map_cache = kzalloc_objs(int, map_capacity, GFP_KERNEL);
 	if (!stats->link_map_cache)
 		return -ENOMEM;

@@ -180,13 +179,13 @@ int cw1200_queue_init(struct cw1200_queue *queue,
 	spin_lock_init(&queue->lock);
 	timer_setup(&queue->gc, cw1200_queue_gc, 0);

-	queue->pool = kcalloc(capacity, sizeof(struct cw1200_queue_item),
-			      GFP_KERNEL);
+	queue->pool = kzalloc_objs(struct cw1200_queue_item, capacity,
+				   GFP_KERNEL);
 	if (!queue->pool)
 		return -ENOMEM;

-	queue->link_map_cache = kcalloc(stats->map_capacity, sizeof(int),
-					GFP_KERNEL);
+	queue->link_map_cache = kzalloc_objs(int, stats->map_capacity,
+					     GFP_KERNEL);
 	if (!queue->link_map_cache) {
 		kfree(queue->pool);
 		queue->pool = NULL;
diff --git a/drivers/net/wireless/st/cw1200/scan.c b/drivers/net/wireless/st/cw1200/scan.c
index 1f856fbbc0ea..f0b902d2ecc1 100644
--- a/drivers/net/wireless/st/cw1200/scan.c
+++ b/drivers/net/wireless/st/cw1200/scan.c
@@ -225,9 +225,8 @@ void cw1200_scan_work(struct work_struct *work)
 			scan.type = WSM_SCAN_TYPE_BACKGROUND;
 			scan.flags = WSM_SCAN_FLAG_FORCE_BACKGROUND;
 		}
-		scan.ch = kcalloc(it - priv->scan.curr,
-				  sizeof(struct wsm_scan_ch),
-				  GFP_KERNEL);
+		scan.ch = kzalloc_objs(struct wsm_scan_ch, it - priv->scan.curr,
+				       GFP_KERNEL);
 		if (!scan.ch) {
 			priv->scan.status = -ENOMEM;
 			goto fail;
diff --git a/drivers/net/wireless/st/cw1200/wsm.c b/drivers/net/wireless/st/cw1200/wsm.c
index 4a9e4b5d3547..0b669b2f3ef4 100644
--- a/drivers/net/wireless/st/cw1200/wsm.c
+++ b/drivers/net/wireless/st/cw1200/wsm.c
@@ -922,7 +922,7 @@ static int wsm_event_indication(struct cw1200_common *priv, struct wsm_buf *buf)
 		return 0;
 	}

-	event = kzalloc(sizeof(struct cw1200_wsm_event), GFP_KERNEL);
+	event = kzalloc_obj(struct cw1200_wsm_event, GFP_KERNEL);
 	if (!event)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ti/wl1251/acx.c b/drivers/net/wireless/ti/wl1251/acx.c
index 166efac812fe..b53ac17172c4 100644
--- a/drivers/net/wireless/ti/wl1251/acx.c
+++ b/drivers/net/wireless/ti/wl1251/acx.c
@@ -18,7 +18,7 @@ int wl1251_acx_frame_rates(struct wl1251 *wl, u8 ctrl_rate, u8 ctrl_mod,

 	wl1251_debug(DEBUG_ACX, "acx frame rates");

-	rates = kzalloc(sizeof(*rates), GFP_KERNEL);
+	rates = kzalloc_obj(*rates, GFP_KERNEL);
 	if (!rates)
 		return -ENOMEM;

@@ -47,7 +47,7 @@ int wl1251_acx_station_id(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx dot11_station_id");

-	mac = kzalloc(sizeof(*mac), GFP_KERNEL);
+	mac = kzalloc_obj(*mac, GFP_KERNEL);
 	if (!mac)
 		return -ENOMEM;

@@ -67,7 +67,7 @@ int wl1251_acx_default_key(struct wl1251 *wl, u8 key_id)

 	wl1251_debug(DEBUG_ACX, "acx dot11_default_key (%d)", key_id);

-	default_key = kzalloc(sizeof(*default_key), GFP_KERNEL);
+	default_key = kzalloc_obj(*default_key, GFP_KERNEL);
 	if (!default_key)
 		return -ENOMEM;

@@ -95,7 +95,7 @@ int wl1251_acx_wake_up_conditions(struct wl1251 *wl, u8 wake_up_event,

 	wl1251_debug(DEBUG_ACX, "acx wake up conditions");

-	wake_up = kzalloc(sizeof(*wake_up), GFP_KERNEL);
+	wake_up = kzalloc_obj(*wake_up, GFP_KERNEL);
 	if (!wake_up)
 		return -ENOMEM;

@@ -121,7 +121,7 @@ int wl1251_acx_sleep_auth(struct wl1251 *wl, u8 sleep_auth)

 	wl1251_debug(DEBUG_ACX, "acx sleep auth");

-	auth = kzalloc(sizeof(*auth), GFP_KERNEL);
+	auth = kzalloc_obj(*auth, GFP_KERNEL);
 	if (!auth)
 		return -ENOMEM;

@@ -140,7 +140,7 @@ int wl1251_acx_fw_version(struct wl1251 *wl, char *buf, size_t len)

 	wl1251_debug(DEBUG_ACX, "acx fw rev");

-	rev = kzalloc(sizeof(*rev), GFP_KERNEL);
+	rev = kzalloc_obj(*rev, GFP_KERNEL);
 	if (!rev)
 		return -ENOMEM;

@@ -167,7 +167,7 @@ int wl1251_acx_tx_power(struct wl1251 *wl, int power)
 	if (power < 0 || power > 25)
 		return -EINVAL;

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -191,7 +191,7 @@ int wl1251_acx_feature_cfg(struct wl1251 *wl, u32 data_flow_options)

 	wl1251_debug(DEBUG_ACX, "acx feature cfg");

-	feature = kzalloc(sizeof(*feature), GFP_KERNEL);
+	feature = kzalloc_obj(*feature, GFP_KERNEL);
 	if (!feature)
 		return -ENOMEM;

@@ -233,7 +233,7 @@ int wl1251_acx_data_path_params(struct wl1251 *wl,

 	wl1251_debug(DEBUG_ACX, "acx data path params");

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -279,7 +279,7 @@ int wl1251_acx_rx_msdu_life_time(struct wl1251 *wl, u32 life_time)

 	wl1251_debug(DEBUG_ACX, "acx rx msdu life time");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -303,7 +303,7 @@ int wl1251_acx_rx_config(struct wl1251 *wl, u32 config, u32 filter)

 	wl1251_debug(DEBUG_ACX, "acx rx config");

-	rx_config = kzalloc(sizeof(*rx_config), GFP_KERNEL);
+	rx_config = kzalloc_obj(*rx_config, GFP_KERNEL);
 	if (!rx_config)
 		return -ENOMEM;

@@ -329,7 +329,7 @@ int wl1251_acx_pd_threshold(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx data pd threshold");

-	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+	pd = kzalloc_obj(*pd, GFP_KERNEL);
 	if (!pd)
 		return -ENOMEM;

@@ -353,7 +353,7 @@ int wl1251_acx_slot(struct wl1251 *wl, enum acx_slot_type slot_time)

 	wl1251_debug(DEBUG_ACX, "acx slot");

-	slot = kzalloc(sizeof(*slot), GFP_KERNEL);
+	slot = kzalloc_obj(*slot, GFP_KERNEL);
 	if (!slot)
 		return -ENOMEM;

@@ -379,7 +379,7 @@ int wl1251_acx_group_address_tbl(struct wl1251 *wl, bool enable,

 	wl1251_debug(DEBUG_ACX, "acx group address tbl");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -405,7 +405,7 @@ int wl1251_acx_service_period_timeout(struct wl1251 *wl)
 	struct acx_rx_timeout *rx_timeout;
 	int ret;

-	rx_timeout = kzalloc(sizeof(*rx_timeout), GFP_KERNEL);
+	rx_timeout = kzalloc_obj(*rx_timeout, GFP_KERNEL);
 	if (!rx_timeout)
 		return -ENOMEM;

@@ -434,7 +434,7 @@ int wl1251_acx_rts_threshold(struct wl1251 *wl, u16 rts_threshold)

 	wl1251_debug(DEBUG_ACX, "acx rts threshold");

-	rts = kzalloc(sizeof(*rts), GFP_KERNEL);
+	rts = kzalloc_obj(*rts, GFP_KERNEL);
 	if (!rts)
 		return -ENOMEM;

@@ -458,7 +458,7 @@ int wl1251_acx_beacon_filter_opt(struct wl1251 *wl, bool enable_filter)

 	wl1251_debug(DEBUG_ACX, "acx beacon filter opt");

-	beacon_filter = kzalloc(sizeof(*beacon_filter), GFP_KERNEL);
+	beacon_filter = kzalloc_obj(*beacon_filter, GFP_KERNEL);
 	if (!beacon_filter)
 		return -ENOMEM;

@@ -485,7 +485,7 @@ int wl1251_acx_beacon_filter_table(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx beacon filter table");

-	ie_table = kzalloc(sizeof(*ie_table), GFP_KERNEL);
+	ie_table = kzalloc_obj(*ie_table, GFP_KERNEL);
 	if (!ie_table)
 		return -ENOMEM;

@@ -513,7 +513,7 @@ int wl1251_acx_conn_monit_params(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx connection monitor parameters");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -540,7 +540,7 @@ int wl1251_acx_sg_enable(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx sg enable");

-	pta = kzalloc(sizeof(*pta), GFP_KERNEL);
+	pta = kzalloc_obj(*pta, GFP_KERNEL);
 	if (!pta)
 		return -ENOMEM;

@@ -564,7 +564,7 @@ int wl1251_acx_sg_cfg(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx sg cfg");

-	param = kzalloc(sizeof(*param), GFP_KERNEL);
+	param = kzalloc_obj(*param, GFP_KERNEL);
 	if (!param)
 		return -ENOMEM;

@@ -616,7 +616,7 @@ int wl1251_acx_cca_threshold(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx cca threshold");

-	detection = kzalloc(sizeof(*detection), GFP_KERNEL);
+	detection = kzalloc_obj(*detection, GFP_KERNEL);
 	if (!detection)
 		return -ENOMEM;

@@ -639,7 +639,7 @@ int wl1251_acx_bcn_dtim_options(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx bcn dtim options");

-	bb = kzalloc(sizeof(*bb), GFP_KERNEL);
+	bb = kzalloc_obj(*bb, GFP_KERNEL);
 	if (!bb)
 		return -ENOMEM;

@@ -666,7 +666,7 @@ int wl1251_acx_aid(struct wl1251 *wl, u16 aid)

 	wl1251_debug(DEBUG_ACX, "acx aid");

-	acx_aid = kzalloc(sizeof(*acx_aid), GFP_KERNEL);
+	acx_aid = kzalloc_obj(*acx_aid, GFP_KERNEL);
 	if (!acx_aid)
 		return -ENOMEM;

@@ -690,7 +690,7 @@ int wl1251_acx_event_mbox_mask(struct wl1251 *wl, u32 event_mask)

 	wl1251_debug(DEBUG_ACX, "acx event mbox mask");

-	mask = kzalloc(sizeof(*mask), GFP_KERNEL);
+	mask = kzalloc_obj(*mask, GFP_KERNEL);
 	if (!mask)
 		return -ENOMEM;

@@ -719,7 +719,7 @@ int wl1251_acx_low_rssi(struct wl1251 *wl, s8 threshold, u8 weight,

 	wl1251_debug(DEBUG_ACX, "acx low rssi");

-	rssi = kzalloc(sizeof(*rssi), GFP_KERNEL);
+	rssi = kzalloc_obj(*rssi, GFP_KERNEL);
 	if (!rssi)
 		return -ENOMEM;

@@ -743,7 +743,7 @@ int wl1251_acx_set_preamble(struct wl1251 *wl, enum acx_preamble_type preamble)

 	wl1251_debug(DEBUG_ACX, "acx_set_preamble");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -768,7 +768,7 @@ int wl1251_acx_cts_protect(struct wl1251 *wl,

 	wl1251_debug(DEBUG_ACX, "acx_set_ctsprotect");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -790,7 +790,7 @@ int wl1251_acx_tsf_info(struct wl1251 *wl, u64 *mactime)
 	struct acx_tsf_info *tsf_info;
 	int ret;

-	tsf_info = kzalloc(sizeof(*tsf_info), GFP_KERNEL);
+	tsf_info = kzalloc_obj(*tsf_info, GFP_KERNEL);
 	if (!tsf_info)
 		return -ENOMEM;

@@ -832,7 +832,7 @@ int wl1251_acx_mem_cfg(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx mem cfg");

-	mem_conf = kzalloc(sizeof(*mem_conf), GFP_KERNEL);
+	mem_conf = kzalloc_obj(*mem_conf, GFP_KERNEL);
 	if (!mem_conf)
 		return -ENOMEM;

@@ -877,7 +877,7 @@ int wl1251_acx_wr_tbtt_and_dtim(struct wl1251 *wl, u16 tbtt, u8 dtim)

 	wl1251_debug(DEBUG_ACX, "acx tbtt and dtim");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -904,7 +904,7 @@ int wl1251_acx_bet_enable(struct wl1251 *wl, enum wl1251_acx_bet_mode mode,

 	wl1251_debug(DEBUG_ACX, "acx bet enable");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -929,7 +929,7 @@ int wl1251_acx_arp_ip_filter(struct wl1251 *wl, bool enable, __be32 address)

 	wl1251_debug(DEBUG_ACX, "acx arp ip filter, enable: %d", enable);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -957,7 +957,7 @@ int wl1251_acx_ac_cfg(struct wl1251 *wl, u8 ac, u8 cw_min, u16 cw_max,
 	wl1251_debug(DEBUG_ACX, "acx ac cfg %d cw_ming %d cw_max %d "
 		     "aifs %d txop %d", ac, cw_min, cw_max, aifs, txop);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -990,7 +990,7 @@ int wl1251_acx_tid_cfg(struct wl1251 *wl, u8 queue,
 		     "ps_scheme %d ack_policy %d", queue, type, tsid,
 		     ps_scheme, ack_policy);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ti/wl1251/cmd.c b/drivers/net/wireless/ti/wl1251/cmd.c
index c33ee0d4d323..19eb8806651f 100644
--- a/drivers/net/wireless/ti/wl1251/cmd.c
+++ b/drivers/net/wireless/ti/wl1251/cmd.c
@@ -133,7 +133,7 @@ int wl1251_cmd_vbm(struct wl1251 *wl, u8 identity,

 	wl1251_debug(DEBUG_CMD, "cmd vbm");

-	vbm = kzalloc(sizeof(*vbm), GFP_KERNEL);
+	vbm = kzalloc_obj(*vbm, GFP_KERNEL);
 	if (!vbm)
 		return -ENOMEM;

@@ -169,7 +169,7 @@ int wl1251_cmd_data_path_rx(struct wl1251 *wl, u8 channel, bool enable)

 	wl1251_debug(DEBUG_CMD, "cmd data path");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -203,7 +203,7 @@ int wl1251_cmd_data_path_tx(struct wl1251 *wl, u8 channel, bool enable)

 	wl1251_debug(DEBUG_CMD, "cmd data path");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -233,7 +233,7 @@ int wl1251_cmd_join(struct wl1251 *wl, u8 bss_type, u8 channel,
 	int ret, i;
 	u8 *bssid;

-	join = kzalloc(sizeof(*join), GFP_KERNEL);
+	join = kzalloc_obj(*join, GFP_KERNEL);
 	if (!join)
 		return -ENOMEM;

@@ -276,7 +276,7 @@ int wl1251_cmd_ps_mode(struct wl1251 *wl, u8 ps_mode)

 	wl1251_debug(DEBUG_CMD, "cmd set ps mode");

-	ps_params = kzalloc(sizeof(*ps_params), GFP_KERNEL);
+	ps_params = kzalloc_obj(*ps_params, GFP_KERNEL);
 	if (!ps_params)
 		return -ENOMEM;

@@ -342,7 +342,7 @@ int wl1251_cmd_scan(struct wl1251 *wl, u8 *ssid, size_t ssid_len,

 	WARN_ON(n_channels > SCAN_MAX_NUM_OF_CHANNELS);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -409,7 +409,7 @@ int wl1251_cmd_trigger_scan_to(struct wl1251 *wl, u32 timeout)

 	wl1251_debug(DEBUG_CMD, "cmd trigger scan to");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ti/wl1251/debugfs.c b/drivers/net/wireless/ti/wl1251/debugfs.c
index a1b778a0fda0..a68d57555318 100644
--- a/drivers/net/wireless/ti/wl1251/debugfs.c
+++ b/drivers/net/wireless/ti/wl1251/debugfs.c
@@ -444,7 +444,7 @@ void wl1251_debugfs_reset(struct wl1251 *wl)

 int wl1251_debugfs_init(struct wl1251 *wl)
 {
-	wl->stats.fw_stats = kzalloc(sizeof(*wl->stats.fw_stats), GFP_KERNEL);
+	wl->stats.fw_stats = kzalloc_obj(*wl->stats.fw_stats, GFP_KERNEL);
 	if (!wl->stats.fw_stats)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ti/wl1251/event.c b/drivers/net/wireless/ti/wl1251/event.c
index e945aafd88ee..6135d7c6d109 100644
--- a/drivers/net/wireless/ti/wl1251/event.c
+++ b/drivers/net/wireless/ti/wl1251/event.c
@@ -208,7 +208,7 @@ int wl1251_event_handle(struct wl1251 *wl, u8 mbox_num)
 	if (mbox_num > 1)
 		return -EINVAL;

-	mbox = kmalloc(sizeof(*mbox), GFP_KERNEL);
+	mbox = kmalloc_obj(*mbox, GFP_KERNEL);
 	if (!mbox) {
 		wl1251_error("can not allocate mbox buffer");
 		return -ENOMEM;
diff --git a/drivers/net/wireless/ti/wl1251/init.c b/drivers/net/wireless/ti/wl1251/init.c
index 5663f197ea69..0d7f08f0a41a 100644
--- a/drivers/net/wireless/ti/wl1251/init.c
+++ b/drivers/net/wireless/ti/wl1251/init.c
@@ -194,8 +194,7 @@ int wl1251_hw_init_mem_config(struct wl1251 *wl)
 	if (ret < 0)
 		return ret;

-	wl->target_mem_map = kzalloc(sizeof(struct wl1251_acx_mem_map),
-					  GFP_KERNEL);
+	wl->target_mem_map = kzalloc_obj(struct wl1251_acx_mem_map, GFP_KERNEL);
 	if (!wl->target_mem_map) {
 		wl1251_error("couldn't allocate target memory map");
 		return -ENOMEM;
@@ -261,7 +260,7 @@ static int wl1251_hw_init_tx_queue_config(struct wl1251 *wl)

 	wl1251_debug(DEBUG_ACX, "acx tx queue config");

-	config = kzalloc(sizeof(*config), GFP_KERNEL);
+	config = kzalloc_obj(*config, GFP_KERNEL);
 	if (!config) {
 		ret = -ENOMEM;
 		goto out;
@@ -294,8 +293,8 @@ static int wl1251_hw_init_data_path_config(struct wl1251 *wl)
 	int ret;

 	/* asking for the data path parameters */
-	wl->data_path = kzalloc(sizeof(struct acx_data_path_params_resp),
-				GFP_KERNEL);
+	wl->data_path = kzalloc_obj(struct acx_data_path_params_resp,
+				    GFP_KERNEL);
 	if (!wl->data_path)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ti/wl1251/io.c b/drivers/net/wireless/ti/wl1251/io.c
index e8d567af74b4..84d497ebc7f2 100644
--- a/drivers/net/wireless/ti/wl1251/io.c
+++ b/drivers/net/wireless/ti/wl1251/io.c
@@ -123,7 +123,7 @@ void wl1251_set_partition(struct wl1251 *wl,
 {
 	struct wl1251_partition_set *partition;

-	partition = kmalloc(sizeof(*partition), GFP_KERNEL);
+	partition = kmalloc_obj(*partition, GFP_KERNEL);
 	if (!partition) {
 		wl1251_error("can not allocate partition buffer");
 		return;
diff --git a/drivers/net/wireless/ti/wl1251/main.c b/drivers/net/wireless/ti/wl1251/main.c
index 69fc51f183ad..0a5ec19f8abc 100644
--- a/drivers/net/wireless/ti/wl1251/main.c
+++ b/drivers/net/wireless/ti/wl1251/main.c
@@ -725,7 +725,7 @@ static u64 wl1251_op_prepare_multicast(struct ieee80211_hw *hw,
 	if (unlikely(wl->state == WL1251_STATE_OFF))
 		return 0;

-	fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
+	fp = kzalloc_obj(*fp, GFP_ATOMIC);
 	if (!fp) {
 		wl1251_error("Out of memory setting filters.");
 		return 0;
@@ -878,7 +878,7 @@ static int wl1251_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,

 	wl1251_debug(DEBUG_MAC80211, "mac80211 set key");

-	wl_cmd = kzalloc(sizeof(*wl_cmd), GFP_KERNEL);
+	wl_cmd = kzalloc_obj(*wl_cmd, GFP_KERNEL);
 	if (!wl_cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1640,7 +1640,7 @@ struct ieee80211_hw *wl1251_alloc_hw(void)
 	wl->tx_mgmt_frm_rate = DEFAULT_HW_GEN_TX_RATE;
 	wl->tx_mgmt_frm_mod = DEFAULT_HW_GEN_MODULATION_TYPE;

-	wl->rx_descriptor = kmalloc(sizeof(*wl->rx_descriptor), GFP_KERNEL);
+	wl->rx_descriptor = kmalloc_obj(*wl->rx_descriptor, GFP_KERNEL);
 	if (!wl->rx_descriptor) {
 		wl1251_error("could not allocate memory for rx descriptor");
 		ieee80211_free_hw(hw);
diff --git a/drivers/net/wireless/ti/wl1251/sdio.c b/drivers/net/wireless/ti/wl1251/sdio.c
index b45050243129..1ba35c9fb34b 100644
--- a/drivers/net/wireless/ti/wl1251/sdio.c
+++ b/drivers/net/wireless/ti/wl1251/sdio.c
@@ -204,7 +204,7 @@ static int wl1251_sdio_probe(struct sdio_func *func,

 	wl = hw->priv;

-	wl_sdio = kzalloc(sizeof(*wl_sdio), GFP_KERNEL);
+	wl_sdio = kzalloc_obj(*wl_sdio, GFP_KERNEL);
 	if (wl_sdio == NULL) {
 		ret = -ENOMEM;
 		goto out_free_hw;
diff --git a/drivers/net/wireless/ti/wl1251/tx.c b/drivers/net/wireless/ti/wl1251/tx.c
index adb4840b0489..acd4834d8a54 100644
--- a/drivers/net/wireless/ti/wl1251/tx.c
+++ b/drivers/net/wireless/ti/wl1251/tx.c
@@ -451,7 +451,7 @@ void wl1251_tx_complete(struct wl1251 *wl)
 	if (unlikely(wl->state != WL1251_STATE_ON))
 		return;

-	result = kmalloc_array(FW_TX_CMPLT_BLOCK_SIZE, sizeof(*result), GFP_KERNEL);
+	result = kmalloc_objs(*result, FW_TX_CMPLT_BLOCK_SIZE, GFP_KERNEL);
 	if (!result) {
 		wl1251_error("can not allocate result buffer");
 		return;
diff --git a/drivers/net/wireless/ti/wl12xx/acx.c b/drivers/net/wireless/ti/wl12xx/acx.c
index fb830d01b8ff..74e16f8c8b22 100644
--- a/drivers/net/wireless/ti/wl12xx/acx.c
+++ b/drivers/net/wireless/ti/wl12xx/acx.c
@@ -17,7 +17,7 @@ int wl1271_acx_host_if_cfg_bitmap(struct wl1271 *wl, u32 host_cfg_bitmap)
 	struct wl1271_acx_host_config_bitmap *bitmap_conf;
 	int ret;

-	bitmap_conf = kzalloc(sizeof(*bitmap_conf), GFP_KERNEL);
+	bitmap_conf = kzalloc_obj(*bitmap_conf, GFP_KERNEL);
 	if (!bitmap_conf) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/wireless/ti/wl12xx/cmd.c b/drivers/net/wireless/ti/wl12xx/cmd.c
index 17434b3bb10b..d57f420baa60 100644
--- a/drivers/net/wireless/ti/wl12xx/cmd.c
+++ b/drivers/net/wireless/ti/wl12xx/cmd.c
@@ -22,7 +22,7 @@ int wl1271_cmd_ext_radio_parms(struct wl1271 *wl)
 	if (!wl->nvs)
 		return -ENODEV;

-	ext_radio_parms = kzalloc(sizeof(*ext_radio_parms), GFP_KERNEL);
+	ext_radio_parms = kzalloc_obj(*ext_radio_parms, GFP_KERNEL);
 	if (!ext_radio_parms)
 		return -ENOMEM;

@@ -63,7 +63,7 @@ int wl1271_cmd_general_parms(struct wl1271 *wl)
 		return -EINVAL;
 	}

-	gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL);
+	gen_parms = kzalloc_obj(*gen_parms, GFP_KERNEL);
 	if (!gen_parms)
 		return -ENOMEM;

@@ -130,7 +130,7 @@ int wl128x_cmd_general_parms(struct wl1271 *wl)
 		return -EINVAL;
 	}

-	gen_parms = kzalloc(sizeof(*gen_parms), GFP_KERNEL);
+	gen_parms = kzalloc_obj(*gen_parms, GFP_KERNEL);
 	if (!gen_parms)
 		return -ENOMEM;

@@ -191,7 +191,7 @@ int wl1271_cmd_radio_parms(struct wl1271 *wl)
 	if (!wl->nvs)
 		return -ENODEV;

-	radio_parms = kzalloc(sizeof(*radio_parms), GFP_KERNEL);
+	radio_parms = kzalloc_obj(*radio_parms, GFP_KERNEL);
 	if (!radio_parms)
 		return -ENOMEM;

@@ -235,7 +235,7 @@ int wl128x_cmd_radio_parms(struct wl1271 *wl)
 	if (!wl->nvs)
 		return -ENODEV;

-	radio_parms = kzalloc(sizeof(*radio_parms), GFP_KERNEL);
+	radio_parms = kzalloc_obj(*radio_parms, GFP_KERNEL);
 	if (!radio_parms)
 		return -ENOMEM;

@@ -280,7 +280,7 @@ int wl12xx_cmd_channel_switch(struct wl1271 *wl,

 	wl1271_debug(DEBUG_ACX, "cmd channel switch");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
index ffbf54776330..f766845e2451 100644
--- a/drivers/net/wireless/ti/wl12xx/main.c
+++ b/drivers/net/wireless/ti/wl12xx/main.c
@@ -1882,7 +1882,7 @@ static int wl12xx_setup(struct wl1271 *wl)
 			wl1271_error("Invalid tcxo parameter %s", tcxo_param);
 	}

-	priv->rx_mem_addr = kmalloc(sizeof(*priv->rx_mem_addr), GFP_KERNEL);
+	priv->rx_mem_addr = kmalloc_obj(*priv->rx_mem_addr, GFP_KERNEL);
 	if (!priv->rx_mem_addr)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ti/wl12xx/scan.c b/drivers/net/wireless/ti/wl12xx/scan.c
index 6c18e8552e4a..021c547bbab8 100644
--- a/drivers/net/wireless/ti/wl12xx/scan.c
+++ b/drivers/net/wireless/ti/wl12xx/scan.c
@@ -91,8 +91,8 @@ static int wl1271_scan_send(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	if (!passive && wl->scan.req->n_ssids == 0)
 		return WL1271_NOTHING_TO_SCAN;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
-	trigger = kzalloc(sizeof(*trigger), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
+	trigger = kzalloc_obj(*trigger, GFP_KERNEL);
 	if (!cmd || !trigger) {
 		ret = -ENOMEM;
 		goto out;
@@ -184,7 +184,7 @@ int wl12xx_scan_stop(struct wl1271 *wl, struct wl12xx_vif *wlvif)

 	wl1271_debug(DEBUG_CMD, "cmd scan stop");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -317,7 +317,7 @@ int wl1271_scan_sched_scan_config(struct wl1271 *wl,

 	wl1271_debug(DEBUG_CMD, "cmd sched_scan scan config");

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return -ENOMEM;

@@ -348,7 +348,7 @@ int wl1271_scan_sched_scan_config(struct wl1271 *wl,

 	wl1271_debug(DEBUG_SCAN, "filter_type = %d", cfg->filter_type);

-	cfg_channels = kzalloc(sizeof(*cfg_channels), GFP_KERNEL);
+	cfg_channels = kzalloc_obj(*cfg_channels, GFP_KERNEL);
 	if (!cfg_channels) {
 		ret = -ENOMEM;
 		goto out;
@@ -425,7 +425,7 @@ int wl1271_scan_sched_scan_start(struct wl1271 *wl, struct wl12xx_vif *wlvif)
 	    test_bit(WLVIF_FLAG_IN_USE, &wlvif->flags))
 		return -EBUSY;

-	start = kzalloc(sizeof(*start), GFP_KERNEL);
+	start = kzalloc_obj(*start, GFP_KERNEL);
 	if (!start)
 		return -ENOMEM;

@@ -465,7 +465,7 @@ void wl12xx_scan_sched_scan_stop(struct wl1271 *wl,  struct wl12xx_vif *wlvif)
 	wl1271_debug(DEBUG_CMD, "cmd periodic scan stop");

 	/* FIXME: what to do if alloc'ing to stop fails? */
-	stop = kzalloc(sizeof(*stop), GFP_KERNEL);
+	stop = kzalloc_obj(*stop, GFP_KERNEL);
 	if (!stop) {
 		wl1271_error("failed to alloc memory to send sched scan stop");
 		return;
diff --git a/drivers/net/wireless/ti/wl18xx/acx.c b/drivers/net/wireless/ti/wl18xx/acx.c
index d1deef02f43e..f29dd27814f5 100644
--- a/drivers/net/wireless/ti/wl18xx/acx.c
+++ b/drivers/net/wireless/ti/wl18xx/acx.c
@@ -23,7 +23,7 @@ int wl18xx_acx_host_if_cfg_bitmap(struct wl1271 *wl, u32 host_cfg_bitmap,
 		     host_cfg_bitmap, sdio_blk_size, extra_mem_blks,
 		     len_field_size);

-	bitmap_conf = kzalloc(sizeof(*bitmap_conf), GFP_KERNEL);
+	bitmap_conf = kzalloc_obj(*bitmap_conf, GFP_KERNEL);
 	if (!bitmap_conf) {
 		ret = -ENOMEM;
 		goto out;
@@ -54,7 +54,7 @@ int wl18xx_acx_set_checksum_state(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx checksum state");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -80,7 +80,7 @@ int wl18xx_acx_clear_statistics(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx clear statistics");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -105,7 +105,7 @@ int wl18xx_acx_peer_ht_operation_mode(struct wl1271 *wl, u8 hlid, bool wide)
 	wl1271_debug(DEBUG_ACX, "acx peer ht operation mode hlid %d bw %d",
 		     hlid, wide);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -146,7 +146,7 @@ int wl18xx_acx_set_peer_cap(struct wl1271 *wl,
 		     "acx set cap ht_supp: %d ht_cap: %d rates: 0x%x",
 		     ht_cap->ht_supported, ht_cap->cap, rate_set);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -192,7 +192,7 @@ int wl18xx_acx_interrupt_notify_config(struct wl1271 *wl,
 	struct wl18xx_acx_interrupt_notify *acx;
 	int ret = 0;

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -219,7 +219,7 @@ int wl18xx_acx_rx_ba_filter(struct wl1271 *wl, bool action)
 	struct wl18xx_acx_rx_ba_filter *acx;
 	int ret = 0;

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -247,7 +247,7 @@ int wl18xx_acx_ap_sleep(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx config ap sleep");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -277,7 +277,7 @@ int wl18xx_acx_dynamic_fw_traces(struct wl1271 *wl)
 	wl1271_debug(DEBUG_ACX, "acx dynamic fw traces config %d",
 		     wl->dynamic_fw_traces);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -305,7 +305,7 @@ int wl18xx_acx_time_sync_cfg(struct wl1271 *wl)
 		     wl->conf.sg.params[WL18XX_CONF_SG_TIME_SYNC],
 		     wl->zone_master_mac_addr);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/wireless/ti/wl18xx/cmd.c b/drivers/net/wireless/ti/wl18xx/cmd.c
index 5f8620d90052..5a1dc648fd57 100644
--- a/drivers/net/wireless/ti/wl18xx/cmd.c
+++ b/drivers/net/wireless/ti/wl18xx/cmd.c
@@ -22,7 +22,7 @@ int wl18xx_cmd_channel_switch(struct wl1271 *wl,
 	wl1271_debug(DEBUG_ACX, "cmd channel switch (count=%d)",
 		     ch_switch->count);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -78,7 +78,7 @@ int wl18xx_cmd_smart_config_start(struct wl1271 *wl, u32 group_bitmap)
 	wl1271_debug(DEBUG_CMD, "cmd smart config start group_bitmap=0x%x",
 		     group_bitmap);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -105,7 +105,7 @@ int wl18xx_cmd_smart_config_stop(struct wl1271 *wl)

 	wl1271_debug(DEBUG_CMD, "cmd smart config stop");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -137,7 +137,7 @@ int wl18xx_cmd_smart_config_set_group_key(struct wl1271 *wl, u16 group_id,
 		return -E2BIG;
 	}

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -167,7 +167,7 @@ int wl18xx_cmd_set_cac(struct wl1271 *wl, struct wl12xx_vif *wlvif, bool start)
 	wl1271_debug(DEBUG_CMD, "cmd cac (channel %d) %s",
 		     wlvif->channel, start ? "start" : "stop");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -198,7 +198,7 @@ int wl18xx_cmd_radar_detection_debug(struct wl1271 *wl, u8 channel)
 	wl1271_debug(DEBUG_CMD, "cmd radar detection debug (chan %d)",
 		     channel);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -224,7 +224,7 @@ int wl18xx_cmd_dfs_master_restart(struct wl1271 *wl, struct wl12xx_vif *wlvif)
 	wl1271_debug(DEBUG_CMD, "cmd dfs master restart (role %d)",
 		     wlvif->role_id);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ti/wl18xx/scan.c b/drivers/net/wireless/ti/wl18xx/scan.c
index d9f4b715abf6..7e61403aa374 100644
--- a/drivers/net/wireless/ti/wl18xx/scan.c
+++ b/drivers/net/wireless/ti/wl18xx/scan.c
@@ -31,7 +31,7 @@ static int wl18xx_scan_send(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	struct wlcore_scan_channels *cmd_channels = NULL;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -67,7 +67,7 @@ static int wl18xx_scan_send(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	/* configure channels */
 	WARN_ON(req->n_ssids > 1);

-	cmd_channels = kzalloc(sizeof(*cmd_channels), GFP_KERNEL);
+	cmd_channels = kzalloc_obj(*cmd_channels, GFP_KERNEL);
 	if (!cmd_channels) {
 		ret = -ENOMEM;
 		goto out;
@@ -169,7 +169,7 @@ int wl18xx_scan_sched_scan_config(struct wl1271 *wl,
 	if (filter_type < 0)
 		return filter_type;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -201,7 +201,7 @@ int wl18xx_scan_sched_scan_config(struct wl1271 *wl,
 	/* don't stop scanning automatically when something is found */
 	cmd->terminate_after = 0;

-	cmd_channels = kzalloc(sizeof(*cmd_channels), GFP_KERNEL);
+	cmd_channels = kzalloc_obj(*cmd_channels, GFP_KERNEL);
 	if (!cmd_channels) {
 		ret = -ENOMEM;
 		goto out;
@@ -301,7 +301,7 @@ static int __wl18xx_scan_stop(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_CMD, "cmd periodic scan stop");

-	stop = kzalloc(sizeof(*stop), GFP_KERNEL);
+	stop = kzalloc_obj(*stop, GFP_KERNEL);
 	if (!stop) {
 		wl1271_error("failed to alloc memory to send sched scan stop");
 		return -ENOMEM;
diff --git a/drivers/net/wireless/ti/wlcore/acx.c b/drivers/net/wireless/ti/wlcore/acx.c
index e820fe694121..65d1df37828d 100644
--- a/drivers/net/wireless/ti/wlcore/acx.c
+++ b/drivers/net/wireless/ti/wlcore/acx.c
@@ -28,7 +28,7 @@ int wl1271_acx_wake_up_conditions(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	wl1271_debug(DEBUG_ACX, "acx wake up conditions (wake_up_event %d listen_interval %d)",
 		     wake_up_event, listen_interval);

-	wake_up = kzalloc(sizeof(*wake_up), GFP_KERNEL);
+	wake_up = kzalloc_obj(*wake_up, GFP_KERNEL);
 	if (!wake_up) {
 		ret = -ENOMEM;
 		goto out;
@@ -57,7 +57,7 @@ int wl1271_acx_sleep_auth(struct wl1271 *wl, u8 sleep_auth)

 	wl1271_debug(DEBUG_ACX, "acx sleep auth %d", sleep_auth);

-	auth = kzalloc(sizeof(*auth), GFP_KERNEL);
+	auth = kzalloc_obj(*auth, GFP_KERNEL);
 	if (!auth) {
 		ret = -ENOMEM;
 		goto out;
@@ -90,7 +90,7 @@ int wl1271_acx_tx_power(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	if (power < 0 || power > 25)
 		return -EINVAL;

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -117,7 +117,7 @@ int wl1271_acx_feature_cfg(struct wl1271 *wl, struct wl12xx_vif *wlvif)

 	wl1271_debug(DEBUG_ACX, "acx feature cfg");

-	feature = kzalloc(sizeof(*feature), GFP_KERNEL);
+	feature = kzalloc_obj(*feature, GFP_KERNEL);
 	if (!feature) {
 		ret = -ENOMEM;
 		goto out;
@@ -162,7 +162,7 @@ int wl1271_acx_rx_msdu_life_time(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx rx msdu life time");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -189,7 +189,7 @@ int wl1271_acx_slot(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx slot");

-	slot = kzalloc(sizeof(*slot), GFP_KERNEL);
+	slot = kzalloc_obj(*slot, GFP_KERNEL);
 	if (!slot) {
 		ret = -ENOMEM;
 		goto out;
@@ -218,7 +218,7 @@ int wl1271_acx_group_address_tbl(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx group address tbl");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -248,7 +248,7 @@ int wl1271_acx_service_period_timeout(struct wl1271 *wl,
 	struct acx_rx_timeout *rx_timeout;
 	int ret;

-	rx_timeout = kzalloc(sizeof(*rx_timeout), GFP_KERNEL);
+	rx_timeout = kzalloc_obj(*rx_timeout, GFP_KERNEL);
 	if (!rx_timeout) {
 		ret = -ENOMEM;
 		goto out;
@@ -288,7 +288,7 @@ int wl1271_acx_rts_threshold(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx rts threshold: %d", rts_threshold);

-	rts = kzalloc(sizeof(*rts), GFP_KERNEL);
+	rts = kzalloc_obj(*rts, GFP_KERNEL);
 	if (!rts) {
 		ret = -ENOMEM;
 		goto out;
@@ -316,7 +316,7 @@ int wl1271_acx_dco_itrim_params(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx dco itrim parameters");

-	dco = kzalloc(sizeof(*dco), GFP_KERNEL);
+	dco = kzalloc_obj(*dco, GFP_KERNEL);
 	if (!dco) {
 		ret = -ENOMEM;
 		goto out;
@@ -350,7 +350,7 @@ int wl1271_acx_beacon_filter_opt(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	    wl->conf.conn.bcn_filt_mode == CONF_BCN_FILT_MODE_DISABLED)
 		goto out;

-	beacon_filter = kzalloc(sizeof(*beacon_filter), GFP_KERNEL);
+	beacon_filter = kzalloc_obj(*beacon_filter, GFP_KERNEL);
 	if (!beacon_filter) {
 		ret = -ENOMEM;
 		goto out;
@@ -387,7 +387,7 @@ int wl1271_acx_beacon_filter_table(struct wl1271 *wl,

 	wl1271_debug(DEBUG_ACX, "acx beacon filter table");

-	ie_table = kzalloc(sizeof(*ie_table), GFP_KERNEL);
+	ie_table = kzalloc_obj(*ie_table, GFP_KERNEL);
 	if (!ie_table) {
 		ret = -ENOMEM;
 		goto out;
@@ -446,7 +446,7 @@ int wl1271_acx_conn_monit_params(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	wl1271_debug(DEBUG_ACX, "acx connection monitor parameters: %s",
 		     enable ? "enabled" : "disabled");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -482,7 +482,7 @@ int wl1271_acx_sg_enable(struct wl1271 *wl, bool enable)

 	wl1271_debug(DEBUG_ACX, "acx sg enable");

-	pta = kzalloc(sizeof(*pta), GFP_KERNEL);
+	pta = kzalloc_obj(*pta, GFP_KERNEL);
 	if (!pta) {
 		ret = -ENOMEM;
 		goto out;
@@ -512,7 +512,7 @@ int wl12xx_acx_sg_cfg(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx sg cfg");

-	param = kzalloc(sizeof(*param), GFP_KERNEL);
+	param = kzalloc_obj(*param, GFP_KERNEL);
 	if (!param) {
 		ret = -ENOMEM;
 		goto out;
@@ -541,7 +541,7 @@ int wl1271_acx_cca_threshold(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx cca threshold");

-	detection = kzalloc(sizeof(*detection), GFP_KERNEL);
+	detection = kzalloc_obj(*detection, GFP_KERNEL);
 	if (!detection) {
 		ret = -ENOMEM;
 		goto out;
@@ -567,7 +567,7 @@ int wl1271_acx_bcn_dtim_options(struct wl1271 *wl, struct wl12xx_vif *wlvif)

 	wl1271_debug(DEBUG_ACX, "acx bcn dtim options");

-	bb = kzalloc(sizeof(*bb), GFP_KERNEL);
+	bb = kzalloc_obj(*bb, GFP_KERNEL);
 	if (!bb) {
 		ret = -ENOMEM;
 		goto out;
@@ -597,7 +597,7 @@ int wl1271_acx_aid(struct wl1271 *wl, struct wl12xx_vif *wlvif, u16 aid)

 	wl1271_debug(DEBUG_ACX, "acx aid");

-	acx_aid = kzalloc(sizeof(*acx_aid), GFP_KERNEL);
+	acx_aid = kzalloc_obj(*acx_aid, GFP_KERNEL);
 	if (!acx_aid) {
 		ret = -ENOMEM;
 		goto out;
@@ -624,7 +624,7 @@ int wl1271_acx_event_mbox_mask(struct wl1271 *wl, u32 event_mask)

 	wl1271_debug(DEBUG_ACX, "acx event mbox mask");

-	mask = kzalloc(sizeof(*mask), GFP_KERNEL);
+	mask = kzalloc_obj(*mask, GFP_KERNEL);
 	if (!mask) {
 		ret = -ENOMEM;
 		goto out;
@@ -654,7 +654,7 @@ int wl1271_acx_set_preamble(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx_set_preamble");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -682,7 +682,7 @@ int wl1271_acx_cts_protect(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx_set_ctsprotect");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -727,7 +727,7 @@ int wl1271_acx_sta_rate_policies(struct wl1271 *wl, struct wl12xx_vif *wlvif)

 	wl1271_debug(DEBUG_ACX, "acx rate policies");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);

 	if (!acx) {
 		ret = -ENOMEM;
@@ -798,7 +798,7 @@ int wl1271_acx_ap_rate_policy(struct wl1271 *wl, struct conf_tx_rate_class *c,
 	wl1271_debug(DEBUG_ACX, "acx ap rate policy %d rates 0x%x",
 		     idx, c->enabled_rates);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -831,7 +831,7 @@ int wl1271_acx_ac_cfg(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	wl1271_debug(DEBUG_ACX, "acx ac cfg %d cw_ming %d cw_max %d "
 		     "aifs %d txop %d", ac, cw_min, cw_max, aifsn, txop);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);

 	if (!acx) {
 		ret = -ENOMEM;
@@ -866,7 +866,7 @@ int wl1271_acx_tid_cfg(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx tid config");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);

 	if (!acx) {
 		ret = -ENOMEM;
@@ -907,7 +907,7 @@ int wl1271_acx_frag_threshold(struct wl1271 *wl, u32 frag_threshold)

 	wl1271_debug(DEBUG_ACX, "acx frag threshold: %d", frag_threshold);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);

 	if (!acx) {
 		ret = -ENOMEM;
@@ -933,7 +933,7 @@ int wl1271_acx_tx_config_options(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx tx config options");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);

 	if (!acx) {
 		ret = -ENOMEM;
@@ -961,7 +961,7 @@ int wl12xx_acx_mem_cfg(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "wl1271 mem cfg");

-	mem_conf = kzalloc(sizeof(*mem_conf), GFP_KERNEL);
+	mem_conf = kzalloc_obj(*mem_conf, GFP_KERNEL);
 	if (!mem_conf) {
 		ret = -ENOMEM;
 		goto out;
@@ -998,8 +998,7 @@ int wl1271_acx_init_mem_config(struct wl1271 *wl)
 {
 	int ret;

-	wl->target_mem_map = kzalloc(sizeof(struct wl1271_acx_mem_map),
-				     GFP_KERNEL);
+	wl->target_mem_map = kzalloc_obj(struct wl1271_acx_mem_map, GFP_KERNEL);
 	if (!wl->target_mem_map) {
 		wl1271_error("couldn't allocate target memory map");
 		return -ENOMEM;
@@ -1032,7 +1031,7 @@ int wl1271_acx_init_rx_interrupt(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "wl1271 rx interrupt config");

-	rx_conf = kzalloc(sizeof(*rx_conf), GFP_KERNEL);
+	rx_conf = kzalloc_obj(*rx_conf, GFP_KERNEL);
 	if (!rx_conf) {
 		ret = -ENOMEM;
 		goto out;
@@ -1066,7 +1065,7 @@ int wl1271_acx_bet_enable(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	if (enable && wl->conf.conn.bet_enable == CONF_BET_MODE_DISABLE)
 		goto out;

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1095,7 +1094,7 @@ int wl1271_acx_arp_ip_filter(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx arp ip filter, enable: %d", enable);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1128,7 +1127,7 @@ int wl1271_acx_pm_config(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx pm config");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1157,7 +1156,7 @@ int wl1271_acx_keep_alive_mode(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx keep alive mode: %d", enable);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1185,7 +1184,7 @@ int wl1271_acx_keep_alive_config(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx keep alive config");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1217,7 +1216,7 @@ int wl1271_acx_rssi_snr_trigger(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx rssi snr trigger");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1259,7 +1258,7 @@ int wl1271_acx_rssi_snr_avg_weights(struct wl1271 *wl,

 	wl1271_debug(DEBUG_ACX, "acx rssi snr avg weights");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1294,7 +1293,7 @@ int wl1271_acx_set_ht_capabilities(struct wl1271 *wl,
 		     "sta supp: %d sta cap: %d", ht_cap->ht_supported,
 		     ht_cap->cap);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1340,7 +1339,7 @@ int wl1271_acx_set_ht_information(struct wl1271 *wl,

 	wl1271_debug(DEBUG_ACX, "acx ht information setting");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1376,7 +1375,7 @@ int wl12xx_acx_set_ba_initiator_policy(struct wl1271 *wl,

 	wl1271_debug(DEBUG_ACX, "acx ba initiator policy");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1412,7 +1411,7 @@ int wl12xx_acx_set_ba_receiver_session(struct wl1271 *wl, u8 tid_index,

 	wl1271_debug(DEBUG_ACX, "acx ba receiver session setting");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1451,7 +1450,7 @@ int wl12xx_acx_tsf_info(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	struct wl12xx_acx_fw_tsf_information *tsf_info;
 	int ret;

-	tsf_info = kzalloc(sizeof(*tsf_info), GFP_KERNEL);
+	tsf_info = kzalloc_obj(*tsf_info, GFP_KERNEL);
 	if (!tsf_info) {
 		ret = -ENOMEM;
 		goto out;
@@ -1483,7 +1482,7 @@ int wl1271_acx_ps_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx ps rx streaming");

-	rx_streaming = kzalloc(sizeof(*rx_streaming), GFP_KERNEL);
+	rx_streaming = kzalloc_obj(*rx_streaming, GFP_KERNEL);
 	if (!rx_streaming) {
 		ret = -ENOMEM;
 		goto out;
@@ -1530,7 +1529,7 @@ int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl, struct wl12xx_vif *wlvif)

 	wl1271_debug(DEBUG_ACX, "acx ap max tx retry");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -1555,7 +1554,7 @@ int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif)

 	wl1271_debug(DEBUG_ACX, "acx config ps");

-	config_ps = kzalloc(sizeof(*config_ps), GFP_KERNEL);
+	config_ps = kzalloc_obj(*config_ps, GFP_KERNEL);
 	if (!config_ps) {
 		ret = -ENOMEM;
 		goto out;
@@ -1586,7 +1585,7 @@ int wl1271_acx_set_inconnection_sta(struct wl1271 *wl,

 	wl1271_debug(DEBUG_ACX, "acx set inconnaction sta %pM", addr);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -1612,7 +1611,7 @@ int wl1271_acx_fm_coex(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx fm coex setting");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1653,7 +1652,7 @@ int wl12xx_acx_set_rate_mgmt_params(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx set rate mgmt params");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

@@ -1695,7 +1694,7 @@ int wl12xx_acx_config_hangover(struct wl1271 *wl)

 	wl1271_debug(DEBUG_ACX, "acx config hangover");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1735,7 +1734,7 @@ int wlcore_acx_average_rssi(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_ACX, "acx roaming statistics");

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx) {
 		ret = -ENOMEM;
 		goto out;
@@ -1767,7 +1766,7 @@ int wl1271_acx_default_rx_filter_enable(struct wl1271 *wl, bool enable,
 	wl1271_debug(DEBUG_ACX, "acx default rx filter en: %d act: %d",
 		     enable, action);

-	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
+	acx = kzalloc_obj(*acx, GFP_KERNEL);
 	if (!acx)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
index 9d73ba933a16..ded64bf9c5a6 100644
--- a/drivers/net/wireless/ti/wlcore/cmd.c
+++ b/drivers/net/wireless/ti/wlcore/cmd.c
@@ -172,7 +172,7 @@ int wlcore_cmd_wait_for_event_or_timeout(struct wl1271 *wl,

 	*timeout = false;

-	events_vector = kmalloc(sizeof(*events_vector), GFP_KERNEL | GFP_DMA);
+	events_vector = kmalloc_obj(*events_vector, GFP_KERNEL | GFP_DMA);
 	if (!events_vector)
 		return -ENOMEM;

@@ -231,7 +231,7 @@ int wl12xx_cmd_role_enable(struct wl1271 *wl, u8 *addr, u8 role_type,
 	if (WARN_ON(*role_id != WL12XX_INVALID_ROLE_ID))
 		return -EBUSY;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -273,7 +273,7 @@ int wl12xx_cmd_role_disable(struct wl1271 *wl, u8 *role_id)
 	if (WARN_ON(*role_id == WL12XX_INVALID_ROLE_ID))
 		return -ENOENT;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -431,7 +431,7 @@ static int wl12xx_cmd_role_start_dev(struct wl1271 *wl,
 	struct wl12xx_cmd_role_start *cmd;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -483,7 +483,7 @@ static int wl12xx_cmd_role_stop_dev(struct wl1271 *wl,
 	if (WARN_ON(wlvif->dev_hlid == WL12XX_INVALID_LINK_ID))
 		return -EINVAL;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -517,7 +517,7 @@ int wl12xx_cmd_role_start_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif)
 	u32 supported_rates;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -594,7 +594,7 @@ int wl12xx_cmd_role_stop_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif)
 	if (WARN_ON(wlvif->sta.hlid == WL12XX_INVALID_LINK_ID))
 		return -EINVAL;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -641,7 +641,7 @@ int wl12xx_cmd_role_start_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif)
 		}
 	}

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -736,7 +736,7 @@ int wl12xx_cmd_role_stop_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif)
 	struct wl12xx_cmd_role_stop *cmd;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -769,7 +769,7 @@ int wl12xx_cmd_role_start_ibss(struct wl1271 *wl, struct wl12xx_vif *wlvif)
 	struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -942,7 +942,7 @@ int wl1271_cmd_data_path(struct wl1271 *wl, bool enable)

 	wl1271_debug(DEBUG_CMD, "cmd data path");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -993,7 +993,7 @@ int wl1271_cmd_ps_mode(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_CMD, "cmd set ps mode");

-	ps_params = kzalloc(sizeof(*ps_params), GFP_KERNEL);
+	ps_params = kzalloc_obj(*ps_params, GFP_KERNEL);
 	if (!ps_params) {
 		ret = -ENOMEM;
 		goto out;
@@ -1028,7 +1028,7 @@ int wl1271_cmd_template_set(struct wl1271 *wl, u8 role_id,
 	WARN_ON(buf_len > WL1271_CMD_TEMPL_MAX_SIZE);
 	buf_len = min_t(size_t, buf_len, WL1271_CMD_TEMPL_MAX_SIZE);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1340,7 +1340,7 @@ int wl12xx_cmd_set_default_wep_key(struct wl1271 *wl, u8 id, u8 hlid)

 	wl1271_debug(DEBUG_CMD, "cmd set_default_wep_key %d", id);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1376,7 +1376,7 @@ int wl1271_cmd_set_sta_key(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	if (wlvif->sta.hlid == WL12XX_INVALID_LINK_ID)
 		return 0;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1442,7 +1442,7 @@ int wl1271_cmd_set_ap_key(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	int ret = 0;
 	u8 lid_type;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -1505,7 +1505,7 @@ int wl12xx_cmd_set_peer_state(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_CMD, "cmd set peer state (hlid=%d)", hlid);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1540,7 +1540,7 @@ int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_CMD, "cmd add peer %d", (int)hlid);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1599,7 +1599,7 @@ int wl12xx_cmd_remove_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,

 	wl1271_debug(DEBUG_CMD, "cmd remove peer %d", (int)hlid);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1733,7 +1733,7 @@ int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl)
 	if (!memcmp(tmp_ch_bitmap, wl->reg_ch_conf_last, sizeof(tmp_ch_bitmap)))
 		goto out;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1778,7 +1778,7 @@ int wl12xx_cmd_config_fwlog(struct wl1271 *wl)

 	wl1271_debug(DEBUG_CMD, "cmd config firmware logger");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1810,7 +1810,7 @@ int wl12xx_cmd_stop_fwlog(struct wl1271 *wl)

 	wl1271_debug(DEBUG_CMD, "cmd stop firmware logger");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1840,7 +1840,7 @@ static int wl12xx_cmd_roc(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	if (WARN_ON(role_id == WL12XX_INVALID_ROLE_ID))
 		return -EINVAL;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1882,7 +1882,7 @@ static int wl12xx_cmd_croc(struct wl1271 *wl, u8 role_id)

 	wl1271_debug(DEBUG_CMD, "cmd croc (%d)", role_id);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -1951,7 +1951,7 @@ int wl12xx_cmd_stop_channel_switch(struct wl1271 *wl, struct wl12xx_vif *wlvif)

 	wl1271_debug(DEBUG_ACX, "cmd stop channel switch");

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
@@ -2055,7 +2055,7 @@ int wlcore_cmd_generic_cfg(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 		     "cmd generic cfg (role %d feature %d enable %d value %d)",
 		     wlvif->role_id, feature, enable, value);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/ti/wlcore/init.c b/drivers/net/wireless/ti/wlcore/init.c
index 03b49baa9d89..3f544a900f67 100644
--- a/drivers/net/wireless/ti/wlcore/init.c
+++ b/drivers/net/wireless/ti/wlcore/init.c
@@ -148,7 +148,7 @@ static int wl1271_ap_init_deauth_template(struct wl1271 *wl,
 	int ret;
 	u32 rate;

-	tmpl = kzalloc(sizeof(*tmpl), GFP_KERNEL);
+	tmpl = kzalloc_obj(*tmpl, GFP_KERNEL);
 	if (!tmpl) {
 		ret = -ENOMEM;
 		goto out;
@@ -175,7 +175,7 @@ static int wl1271_ap_init_null_template(struct wl1271 *wl,
 	int ret;
 	u32 rate;

-	nullfunc = kzalloc(sizeof(*nullfunc), GFP_KERNEL);
+	nullfunc = kzalloc_obj(*nullfunc, GFP_KERNEL);
 	if (!nullfunc) {
 		ret = -ENOMEM;
 		goto out;
@@ -208,7 +208,7 @@ static int wl1271_ap_init_qos_null_template(struct wl1271 *wl,
 	int ret;
 	u32 rate;

-	qosnull = kzalloc(sizeof(*qosnull), GFP_KERNEL);
+	qosnull = kzalloc_obj(*qosnull, GFP_KERNEL);
 	if (!qosnull) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index dce79bce2e3f..82e035aea874 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -1070,11 +1070,11 @@ static int wl1271_setup(struct wl1271 *wl)
 	if (!wl->raw_fw_status)
 		goto err;

-	wl->fw_status = kzalloc(sizeof(*wl->fw_status), GFP_KERNEL);
+	wl->fw_status = kzalloc_obj(*wl->fw_status, GFP_KERNEL);
 	if (!wl->fw_status)
 		goto err;

-	wl->tx_res_if = kzalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
+	wl->tx_res_if = kzalloc_obj(*wl->tx_res_if, GFP_KERNEL);
 	if (!wl->tx_res_if)
 		goto err;

@@ -1477,7 +1477,7 @@ wl1271_validate_wowlan_pattern(struct cfg80211_pkt_pattern *p)

 struct wl12xx_rx_filter *wl1271_rx_filter_alloc(void)
 {
-	return kzalloc(sizeof(struct wl12xx_rx_filter), GFP_KERNEL);
+	return kzalloc_obj(struct wl12xx_rx_filter, GFP_KERNEL);
 }

 void wl1271_rx_filter_free(struct wl12xx_rx_filter *filter)
@@ -3215,7 +3215,7 @@ static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
 	struct wl1271_filter_params *fp;
 	struct netdev_hw_addr *ha;

-	fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
+	fp = kzalloc_obj(*fp, GFP_ATOMIC);
 	if (!fp) {
 		wl1271_error("Out of memory setting filters.");
 		return 0;
@@ -3346,7 +3346,7 @@ static int wl1271_record_ap_key(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 	if (i == MAX_NUM_KEYS)
 		return -EBUSY;

-	ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
+	ap_key = kzalloc_obj(*ap_key, GFP_KERNEL);
 	if (!ap_key)
 		return -ENOMEM;

@@ -6459,7 +6459,7 @@ struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size, u32 aggr_buf_size,
 		goto err_fwlog;
 	}

-	wl->buffer_32 = kmalloc(sizeof(*wl->buffer_32), GFP_KERNEL);
+	wl->buffer_32 = kmalloc_obj(*wl->buffer_32, GFP_KERNEL);
 	if (!wl->buffer_32) {
 		ret = -ENOMEM;
 		goto err_mbox;
diff --git a/drivers/net/wireless/ti/wlcore/scan.c b/drivers/net/wireless/ti/wlcore/scan.c
index f6dc54c1dbad..7cd58bb0efb6 100644
--- a/drivers/net/wireless/ti/wlcore/scan.c
+++ b/drivers/net/wireless/ti/wlcore/scan.c
@@ -389,7 +389,7 @@ wlcore_scan_sched_scan_ssid_list(struct wl1271 *wl,
 		goto out;
 	}

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/net/wireless/ti/wlcore/testmode.c b/drivers/net/wireless/ti/wlcore/testmode.c
index 7c0cb1b7fef0..caca2786d07c 100644
--- a/drivers/net/wireless/ti/wlcore/testmode.c
+++ b/drivers/net/wireless/ti/wlcore/testmode.c
@@ -159,7 +159,7 @@ static int wl1271_tm_cmd_interrogate(struct wl1271 *wl, struct nlattr *tb[])
 	if (ret < 0)
 		goto out;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		ret = -ENOMEM;
 		goto out_sleep;
diff --git a/drivers/net/wireless/virtual/mac80211_hwsim.c b/drivers/net/wireless/virtual/mac80211_hwsim.c
index 4d9f5f87e814..f4f37f71285e 100644
--- a/drivers/net/wireless/virtual/mac80211_hwsim.c
+++ b/drivers/net/wireless/virtual/mac80211_hwsim.c
@@ -6489,7 +6489,7 @@ static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
 	if (info->attrs[HWSIM_ATTR_PMSR_SUPPORT]) {
 		struct cfg80211_pmsr_capabilities *pmsr_capa;

-		pmsr_capa = kmalloc(sizeof(*pmsr_capa), GFP_KERNEL);
+		pmsr_capa = kmalloc_obj(*pmsr_capa, GFP_KERNEL);
 		if (!pmsr_capa) {
 			ret = -ENOMEM;
 			goto out_free;
diff --git a/drivers/net/wireless/virtual/virt_wifi.c b/drivers/net/wireless/virtual/virt_wifi.c
index 4eae89376feb..eac81ebf9551 100644
--- a/drivers/net/wireless/virtual/virt_wifi.c
+++ b/drivers/net/wireless/virtual/virt_wifi.c
@@ -558,7 +558,7 @@ static int virt_wifi_newlink(struct net_device *dev,
 	netif_stacked_transfer_operstate(priv->lowerdev, dev);

 	SET_NETDEV_DEV(dev, &priv->lowerdev->dev);
-	dev->ieee80211_ptr = kzalloc(sizeof(*dev->ieee80211_ptr), GFP_KERNEL);
+	dev->ieee80211_ptr = kzalloc_obj(*dev->ieee80211_ptr, GFP_KERNEL);

 	if (!dev->ieee80211_ptr) {
 		err = -ENOMEM;
diff --git a/drivers/net/wireless/zydas/zd1211rw/zd_mac.c b/drivers/net/wireless/zydas/zd1211rw/zd_mac.c
index 0f6271d7259b..f5063efc8e42 100644
--- a/drivers/net/wireless/zydas/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zydas/zd1211rw/zd_mac.c
@@ -722,8 +722,7 @@ static int zd_mac_config_beacon(struct ieee80211_hw *hw, struct sk_buff *beacon,

 	/* Alloc memory for full beacon write at once. */
 	num_cmds = 1 + zd_chip_is_zd1211b(&mac->chip) + full_len;
-	ioreqs = kmalloc_array(num_cmds, sizeof(struct zd_ioreq32),
-			       GFP_KERNEL);
+	ioreqs = kmalloc_objs(struct zd_ioreq32, num_cmds, GFP_KERNEL);
 	if (!ioreqs) {
 		r = -ENOMEM;
 		goto out_nofree;
diff --git a/drivers/net/wireless/zydas/zd1211rw/zd_rf_uw2453.c b/drivers/net/wireless/zydas/zd1211rw/zd_rf_uw2453.c
index a4e7f187d82d..d15d95ff5aad 100644
--- a/drivers/net/wireless/zydas/zd1211rw/zd_rf_uw2453.c
+++ b/drivers/net/wireless/zydas/zd1211rw/zd_rf_uw2453.c
@@ -518,7 +518,7 @@ int zd_rf_init_uw2453(struct zd_rf *rf)
 	/* we have our own TX integration code */
 	rf->update_channel_int = 0;

-	rf->priv = kmalloc(sizeof(struct uw2453_priv), GFP_KERNEL);
+	rf->priv = kmalloc_obj(struct uw2453_priv, GFP_KERNEL);
 	if (rf->priv == NULL)
 		return -ENOMEM;

diff --git a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
index 8ee15a15f4ca..e5c3be14ae4e 100644
--- a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
@@ -752,7 +752,7 @@ static int __zd_usb_enable_rx(struct zd_usb *usb)
 	dev_dbg_f(zd_usb_dev(usb), "\n");

 	r = -ENOMEM;
-	urbs = kcalloc(RX_URBS_COUNT, sizeof(struct urb *), GFP_KERNEL);
+	urbs = kzalloc_objs(struct urb *, RX_URBS_COUNT, GFP_KERNEL);
 	if (!urbs)
 		goto error;
 	for (i = 0; i < RX_URBS_COUNT; i++) {
diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem.c b/drivers/net/wwan/iosm/iosm_ipc_imem.c
index 530a3ea47a1a..f354e4514565 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_imem.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_imem.c
@@ -1334,7 +1334,7 @@ static int ipc_imem_config(struct iosm_imem *ipc_imem)
 struct iosm_imem *ipc_imem_init(struct iosm_pcie *pcie, unsigned int device_id,
 				void __iomem *mmio, struct device *dev)
 {
-	struct iosm_imem *ipc_imem = kzalloc(sizeof(*pcie->imem), GFP_KERNEL);
+	struct iosm_imem *ipc_imem = kzalloc_obj(*pcie->imem, GFP_KERNEL);
 	enum ipc_mem_exec_stage stage;

 	if (!ipc_imem)
@@ -1359,8 +1359,7 @@ struct iosm_imem *ipc_imem_init(struct iosm_pcie *pcie, unsigned int device_id,
 		goto mmio_init_fail;
 	}

-	ipc_imem->ipc_task = kzalloc(sizeof(*ipc_imem->ipc_task),
-				     GFP_KERNEL);
+	ipc_imem->ipc_task = kzalloc_obj(*ipc_imem->ipc_task, GFP_KERNEL);

 	/* Create tasklet for event handling*/
 	if (!ipc_imem->ipc_task)
diff --git a/drivers/net/wwan/iosm/iosm_ipc_mmio.c b/drivers/net/wwan/iosm/iosm_ipc_mmio.c
index 6764c13530b9..3319d7423101 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_mmio.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_mmio.c
@@ -82,7 +82,7 @@ void ipc_mmio_update_cp_capability(struct iosm_mmio *ipc_mmio)

 struct iosm_mmio *ipc_mmio_init(void __iomem *mmio, struct device *dev)
 {
-	struct iosm_mmio *ipc_mmio = kzalloc(sizeof(*ipc_mmio), GFP_KERNEL);
+	struct iosm_mmio *ipc_mmio = kzalloc_obj(*ipc_mmio, GFP_KERNEL);
 	int retries = IPC_MMIO_EXEC_STAGE_TIMEOUT;
 	enum ipc_mem_exec_stage stage;

diff --git a/drivers/net/wwan/iosm/iosm_ipc_mux.c b/drivers/net/wwan/iosm/iosm_ipc_mux.c
index b846889fcb09..d370c7b7810a 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_mux.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_mux.c
@@ -278,7 +278,7 @@ static int ipc_mux_schedule(struct iosm_mux *ipc_mux, union mux_msg *msg)
 struct iosm_mux *ipc_mux_init(struct ipc_mux_config *mux_cfg,
 			      struct iosm_imem *imem)
 {
-	struct iosm_mux *ipc_mux = kzalloc(sizeof(*ipc_mux), GFP_KERNEL);
+	struct iosm_mux *ipc_mux = kzalloc_obj(*ipc_mux, GFP_KERNEL);
 	int i, j, ul_tds, ul_td_size;
 	struct sk_buff_head *free_list;
 	struct sk_buff *skb;
diff --git a/drivers/net/wwan/iosm/iosm_ipc_pcie.c b/drivers/net/wwan/iosm/iosm_ipc_pcie.c
index 08ff0d6ccfab..f7f693c2296a 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_pcie.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_pcie.c
@@ -260,7 +260,7 @@ static enum ipc_pcie_sleep_state ipc_pcie_read_bios_cfg(struct device *dev)
 static int ipc_pcie_probe(struct pci_dev *pci,
 			  const struct pci_device_id *pci_id)
 {
-	struct iosm_pcie *ipc_pcie = kzalloc(sizeof(*ipc_pcie), GFP_KERNEL);
+	struct iosm_pcie *ipc_pcie = kzalloc_obj(*ipc_pcie, GFP_KERNEL);
 	int ret;

 	pr_debug("Probing device 0x%X from the vendor 0x%X", pci_id->device,
diff --git a/drivers/net/wwan/iosm/iosm_ipc_port.c b/drivers/net/wwan/iosm/iosm_ipc_port.c
index 5d5b4183e14a..bf75d8b94682 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_port.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_port.c
@@ -48,7 +48,7 @@ static const struct wwan_port_ops ipc_wwan_ctrl_ops = {
 struct iosm_cdev *ipc_port_init(struct iosm_imem *ipc_imem,
 				struct ipc_chnl_cfg ipc_port_cfg)
 {
-	struct iosm_cdev *ipc_port = kzalloc(sizeof(*ipc_port), GFP_KERNEL);
+	struct iosm_cdev *ipc_port = kzalloc_obj(*ipc_port, GFP_KERNEL);
 	enum wwan_port_type port_type = ipc_port_cfg.wwan_port_type;
 	enum ipc_channel_id chl_id = ipc_port_cfg.id;

diff --git a/drivers/net/wwan/iosm/iosm_ipc_protocol.c b/drivers/net/wwan/iosm/iosm_ipc_protocol.c
index 63fc7012f09f..851a24641c35 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_protocol.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_protocol.c
@@ -222,8 +222,8 @@ bool ipc_protocol_resume(struct iosm_protocol *ipc_protocol)

 struct iosm_protocol *ipc_protocol_init(struct iosm_imem *ipc_imem)
 {
-	struct iosm_protocol *ipc_protocol =
-		kzalloc(sizeof(*ipc_protocol), GFP_KERNEL);
+	struct iosm_protocol *ipc_protocol = kzalloc_obj(*ipc_protocol,
+							 GFP_KERNEL);
 	struct ipc_protocol_context_info *p_ci;
 	u64 addr;

diff --git a/drivers/net/wwan/iosm/iosm_ipc_protocol_ops.c b/drivers/net/wwan/iosm/iosm_ipc_protocol_ops.c
index 4627847c6daa..f2f86f41fd10 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_protocol_ops.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_protocol_ops.c
@@ -69,7 +69,7 @@ static int ipc_protocol_msg_prepipe_open(struct iosm_protocol *ipc_protocol,
 	 * SKB ring is internal memory allocation for driver. No need to
 	 * re-calculate the start and end addresses.
 	 */
-	skbr = kcalloc(pipe->nr_of_entries, sizeof(*skbr), GFP_ATOMIC);
+	skbr = kzalloc_objs(*skbr, pipe->nr_of_entries, GFP_ATOMIC);
 	if (!skbr)
 		return -ENOMEM;

diff --git a/drivers/net/wwan/iosm/iosm_ipc_task_queue.c b/drivers/net/wwan/iosm/iosm_ipc_task_queue.c
index 852a99166144..f9c1837781e5 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_task_queue.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_task_queue.c
@@ -174,8 +174,7 @@ int ipc_task_init(struct ipc_task *ipc_task)
 {
 	struct ipc_task_queue *ipc_queue = &ipc_task->ipc_queue;

-	ipc_task->ipc_tasklet = kzalloc(sizeof(*ipc_task->ipc_tasklet),
-					GFP_KERNEL);
+	ipc_task->ipc_tasklet = kzalloc_obj(*ipc_task->ipc_tasklet, GFP_KERNEL);

 	if (!ipc_task->ipc_tasklet)
 		return -ENOMEM;
diff --git a/drivers/net/wwan/iosm/iosm_ipc_trace.c b/drivers/net/wwan/iosm/iosm_ipc_trace.c
index 9656254c1c6c..c6368131d786 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_trace.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_trace.c
@@ -140,7 +140,7 @@ struct iosm_trace *ipc_trace_init(struct iosm_imem *ipc_imem)
 	ipc_imem_channel_init(ipc_imem, IPC_CTYPE_CTRL, chnl_cfg,
 			      IRQ_MOD_OFF);

-	ipc_trace = kzalloc(sizeof(*ipc_trace), GFP_KERNEL);
+	ipc_trace = kzalloc_obj(*ipc_trace, GFP_KERNEL);
 	if (!ipc_trace)
 		return NULL;

diff --git a/drivers/net/wwan/iosm/iosm_ipc_uevent.c b/drivers/net/wwan/iosm/iosm_ipc_uevent.c
index d12188ffed7e..4073b70e2457 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_uevent.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_uevent.c
@@ -27,7 +27,7 @@ static void ipc_uevent_work(struct work_struct *data)

 void ipc_uevent_send(struct device *dev, char *uevent)
 {
-	struct ipc_uevent_info *info = kzalloc(sizeof(*info), GFP_ATOMIC);
+	struct ipc_uevent_info *info = kzalloc_obj(*info, GFP_ATOMIC);

 	if (!info)
 		return;
diff --git a/drivers/net/wwan/iosm/iosm_ipc_wwan.c b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
index ff747fc79aaf..7a299b6b41c9 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_wwan.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
@@ -290,7 +290,7 @@ struct iosm_wwan *ipc_wwan_init(struct iosm_imem *ipc_imem, struct device *dev)
 {
 	struct iosm_wwan *ipc_wwan;

-	ipc_wwan = kzalloc(sizeof(*ipc_wwan), GFP_KERNEL);
+	ipc_wwan = kzalloc_obj(*ipc_wwan, GFP_KERNEL);
 	if (!ipc_wwan)
 		return NULL;

diff --git a/drivers/net/wwan/mhi_wwan_ctrl.c b/drivers/net/wwan/mhi_wwan_ctrl.c
index e13c0b078175..33e0dd11abde 100644
--- a/drivers/net/wwan/mhi_wwan_ctrl.c
+++ b/drivers/net/wwan/mhi_wwan_ctrl.c
@@ -218,7 +218,7 @@ static int mhi_wwan_ctrl_probe(struct mhi_device *mhi_dev,
 	struct mhi_wwan_dev *mhiwwan;
 	struct wwan_port *port;

-	mhiwwan = kzalloc(sizeof(*mhiwwan), GFP_KERNEL);
+	mhiwwan = kzalloc_obj(*mhiwwan, GFP_KERNEL);
 	if (!mhiwwan)
 		return -ENOMEM;

diff --git a/drivers/net/wwan/t7xx/t7xx_hif_cldma.c b/drivers/net/wwan/t7xx/t7xx_hif_cldma.c
index 43ac1c3f1ad0..a32378dcc392 100644
--- a/drivers/net/wwan/t7xx/t7xx_hif_cldma.c
+++ b/drivers/net/wwan/t7xx/t7xx_hif_cldma.c
@@ -391,7 +391,7 @@ static struct cldma_request *t7xx_alloc_rx_request(struct cldma_ctrl *md_ctrl, s
 	struct cldma_request *req;
 	int val;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return NULL;

@@ -451,7 +451,7 @@ static struct cldma_request *t7xx_alloc_tx_request(struct cldma_ctrl *md_ctrl)
 {
 	struct cldma_request *req;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return NULL;

@@ -1206,7 +1206,7 @@ static int t7xx_cldma_suspend(struct t7xx_pci_dev *t7xx_dev, void *entity_param)

 static int t7xx_cldma_pm_init(struct cldma_ctrl *md_ctrl)
 {
-	md_ctrl->pm_entity = kzalloc(sizeof(*md_ctrl->pm_entity), GFP_KERNEL);
+	md_ctrl->pm_entity = kzalloc_obj(*md_ctrl->pm_entity, GFP_KERNEL);
 	if (!md_ctrl->pm_entity)
 		return -ENOMEM;

diff --git a/drivers/net/wwan/t7xx/t7xx_state_monitor.c b/drivers/net/wwan/t7xx/t7xx_state_monitor.c
index cbdbb91e8381..091d7cabd630 100644
--- a/drivers/net/wwan/t7xx/t7xx_state_monitor.c
+++ b/drivers/net/wwan/t7xx/t7xx_state_monitor.c
@@ -486,7 +486,8 @@ int t7xx_fsm_append_cmd(struct t7xx_fsm_ctl *ctl, enum t7xx_fsm_cmd_state cmd_id
 	unsigned long flags;
 	int ret;

-	cmd = kzalloc(sizeof(*cmd), flag & FSM_CMD_FLAG_IN_INTERRUPT ? GFP_ATOMIC : GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd,
+			  flag & FSM_CMD_FLAG_IN_INTERRUPT ? GFP_ATOMIC : GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -532,8 +533,8 @@ int t7xx_fsm_append_event(struct t7xx_fsm_ctl *ctl, enum t7xx_fsm_event_state ev
 		return -EINVAL;
 	}

-	event = kmalloc(struct_size(event, data, length),
-			in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
+	event = kmalloc_flex(*event, data, length,
+			     in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
 	if (!event)
 		return -ENOMEM;

diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c
index 015213b3d687..ffa222b6dce8 100644
--- a/drivers/net/wwan/wwan_core.c
+++ b/drivers/net/wwan/wwan_core.c
@@ -250,7 +250,7 @@ static struct wwan_device *wwan_create_dev(struct device *parent)
 		goto done_unlock;
 	}

-	wwandev = kzalloc(sizeof(*wwandev), GFP_KERNEL);
+	wwandev = kzalloc_obj(*wwandev, GFP_KERNEL);
 	if (!wwandev) {
 		wwandev = ERR_PTR(-ENOMEM);
 		ida_free(&wwan_dev_ids, id);
@@ -639,7 +639,7 @@ struct wwan_port *wwan_create_port(struct device *parent,
 	if (IS_ERR(wwandev))
 		return ERR_CAST(wwandev);

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port) {
 		err = -ENOMEM;
 		goto error_wwandev_remove;
diff --git a/drivers/net/wwan/wwan_hwsim.c b/drivers/net/wwan/wwan_hwsim.c
index 8541bd58e831..55d3b2bb4061 100644
--- a/drivers/net/wwan/wwan_hwsim.c
+++ b/drivers/net/wwan/wwan_hwsim.c
@@ -317,7 +317,7 @@ static struct wwan_hwsim_port *wwan_hwsim_port_new(struct wwan_hwsim_dev *dev,
 	else
 		return ERR_PTR(-EINVAL);

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return ERR_PTR(-ENOMEM);

@@ -390,7 +390,7 @@ static struct wwan_hwsim_dev *wwan_hwsim_dev_new(void)
 	struct wwan_hwsim_dev *dev;
 	int err;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/net/xen-netback/hash.c b/drivers/net/xen-netback/hash.c
index c6b2eba3511b..20c2c6c5bda1 100644
--- a/drivers/net/xen-netback/hash.c
+++ b/drivers/net/xen-netback/hash.c
@@ -39,7 +39,7 @@ static void xenvif_add_hash(struct xenvif *vif, const u8 *tag,
 	unsigned long flags;
 	bool found;

-	new = kmalloc(sizeof(*entry), GFP_ATOMIC);
+	new = kmalloc_obj(*entry, GFP_ATOMIC);
 	if (!new)
 		return;

diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index c759ebc56457..3cdb7fd659db 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -855,7 +855,7 @@ static int xenvif_mcast_add(struct xenvif *vif, const u8 *addr)
 		return -ENOSPC;
 	}

-	mcast = kzalloc(sizeof(*mcast), GFP_ATOMIC);
+	mcast = kzalloc_obj(*mcast, GFP_ATOMIC);
 	if (!mcast)
 		return -ENOMEM;

diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c
index 61b547aab286..adb3967f00ee 100644
--- a/drivers/net/xen-netback/xenbus.c
+++ b/drivers/net/xen-netback/xenbus.c
@@ -1007,7 +1007,7 @@ static int netback_probe(struct xenbus_device *dev,
 	int err;
 	int sg;
 	const char *script;
-	struct backend_info *be = kzalloc(sizeof(*be), GFP_KERNEL);
+	struct backend_info *be = kzalloc_obj(*be, GFP_KERNEL);

 	if (!be) {
 		xenbus_dev_fatal(dev, -ENOMEM,
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index 0969d5c9f6b7..c4e75cc53f64 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -2212,8 +2212,8 @@ static int xennet_create_queues(struct netfront_info *info,
 	unsigned int i;
 	int ret;

-	info->queues = kcalloc(*num_queues, sizeof(struct netfront_queue),
-			       GFP_KERNEL);
+	info->queues = kzalloc_objs(struct netfront_queue, *num_queues,
+				    GFP_KERNEL);
 	if (!info->queues)
 		return -ENOMEM;

diff --git a/drivers/nfc/mei_phy.c b/drivers/nfc/mei_phy.c
index f9cca885beec..5f8c9c2c7c06 100644
--- a/drivers/nfc/mei_phy.c
+++ b/drivers/nfc/mei_phy.c
@@ -373,7 +373,7 @@ struct nfc_mei_phy *nfc_mei_phy_alloc(struct mei_cl_device *cldev)
 {
 	struct nfc_mei_phy *phy;

-	phy = kzalloc(sizeof(struct nfc_mei_phy), GFP_KERNEL);
+	phy = kzalloc_obj(struct nfc_mei_phy, GFP_KERNEL);
 	if (!phy)
 		return NULL;

diff --git a/drivers/nfc/microread/microread.c b/drivers/nfc/microread/microread.c
index bb4d029bb888..60cdf4d09577 100644
--- a/drivers/nfc/microread/microread.c
+++ b/drivers/nfc/microread/microread.c
@@ -473,7 +473,7 @@ static void microread_target_discovered(struct nfc_hci_dev *hdev, u8 gate,

 	pr_info("target discovered to gate 0x%x\n", gate);

-	targets = kzalloc(sizeof(struct nfc_target), GFP_KERNEL);
+	targets = kzalloc_obj(struct nfc_target, GFP_KERNEL);
 	if (targets == NULL) {
 		r = -ENOMEM;
 		goto exit;
@@ -650,7 +650,7 @@ int microread_probe(void *phy_id, const struct nfc_phy_ops *phy_ops,
 	struct nfc_hci_init_data init_data;
 	int r;

-	info = kzalloc(sizeof(struct microread_info), GFP_KERNEL);
+	info = kzalloc_obj(struct microread_info, GFP_KERNEL);
 	if (!info) {
 		r = -ENOMEM;
 		goto err_info_alloc;
diff --git a/drivers/nfc/nfcmrvl/main.c b/drivers/nfc/nfcmrvl/main.c
index 141bc4b66dcb..2065befd3793 100644
--- a/drivers/nfc/nfcmrvl/main.c
+++ b/drivers/nfc/nfcmrvl/main.c
@@ -101,7 +101,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy,
 	int tailroom;
 	u32 protocols;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/nfc/nfcsim.c b/drivers/nfc/nfcsim.c
index a55381f80cd6..6b2939e6a7cd 100644
--- a/drivers/nfc/nfcsim.c
+++ b/drivers/nfc/nfcsim.c
@@ -66,7 +66,7 @@ static struct nfcsim_link *nfcsim_link_new(void)
 {
 	struct nfcsim_link *link;

-	link = kzalloc(sizeof(struct nfcsim_link), GFP_KERNEL);
+	link = kzalloc_obj(struct nfcsim_link, GFP_KERNEL);
 	if (!link)
 		return NULL;

@@ -373,7 +373,7 @@ static struct nfcsim *nfcsim_device_new(struct nfcsim_link *link_in,
 	struct nfcsim *dev;
 	int rc;

-	dev = kzalloc(sizeof(struct nfcsim), GFP_KERNEL);
+	dev = kzalloc_obj(struct nfcsim, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/nfc/pn533/pn533.c b/drivers/nfc/pn533/pn533.c
index 2b043a9f9533..8d62084c3e92 100644
--- a/drivers/nfc/pn533/pn533.c
+++ b/drivers/nfc/pn533/pn533.c
@@ -444,7 +444,7 @@ static int __pn533_send_async(struct pn533 *dev, u8 cmd_code,

 	dev_dbg(dev->dev, "Sending command 0x%x\n", cmd_code);

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -518,7 +518,7 @@ static int pn533_send_cmd_direct_async(struct pn533 *dev, u8 cmd_code,
 	struct pn533_cmd *cmd;
 	int rc;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -2019,7 +2019,7 @@ static int pn533_dep_link_up(struct nfc_dev *nfc_dev, struct nfc_target *target,
 		*next = 0;
 	}

-	arg = kmalloc(sizeof(*arg), GFP_KERNEL);
+	arg = kmalloc_obj(*arg, GFP_KERNEL);
 	if (!arg) {
 		dev_kfree_skb(skb);
 		return -ENOMEM;
@@ -2266,7 +2266,7 @@ static int pn533_transceive(struct nfc_dev *nfc_dev,
 		goto error;
 	}

-	arg = kmalloc(sizeof(*arg), GFP_KERNEL);
+	arg = kmalloc_obj(*arg, GFP_KERNEL);
 	if (!arg) {
 		rc = -ENOMEM;
 		goto error;
@@ -2744,7 +2744,7 @@ struct pn533 *pn53x_common_init(u32 device_type,
 {
 	struct pn533 *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/nfc/pn533/uart.c b/drivers/nfc/pn533/uart.c
index a081bce61c29..3355736e5e26 100644
--- a/drivers/nfc/pn533/uart.c
+++ b/drivers/nfc/pn533/uart.c
@@ -242,7 +242,7 @@ static int pn532_uart_probe(struct serdev_device *serdev)
 	int err;

 	err = -ENOMEM;
-	pn532 = kzalloc(sizeof(*pn532), GFP_KERNEL);
+	pn532 = kzalloc_obj(*pn532, GFP_KERNEL);
 	if (!pn532)
 		goto err_exit;

diff --git a/drivers/nfc/pn544/pn544.c b/drivers/nfc/pn544/pn544.c
index 32a61a185142..87803f125f5e 100644
--- a/drivers/nfc/pn544/pn544.c
+++ b/drivers/nfc/pn544/pn544.c
@@ -910,7 +910,7 @@ int pn544_hci_probe(void *phy_id, const struct nfc_phy_ops *phy_ops,
 	struct nfc_hci_init_data init_data;
 	int r;

-	info = kzalloc(sizeof(struct pn544_hci_info), GFP_KERNEL);
+	info = kzalloc_obj(struct pn544_hci_info, GFP_KERNEL);
 	if (!info) {
 		r = -ENOMEM;
 		goto err_info_alloc;
diff --git a/drivers/nfc/port100.c b/drivers/nfc/port100.c
index 00d8ea6dcb5d..3dcd13878535 100644
--- a/drivers/nfc/port100.c
+++ b/drivers/nfc/port100.c
@@ -859,7 +859,7 @@ static int port100_send_cmd_async(struct port100 *dev, u8 cmd_code,
 	if (!resp)
 		return -ENOMEM;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		dev_kfree_skb(resp);
 		return -ENOMEM;
@@ -1211,7 +1211,7 @@ static int port100_in_send_cmd(struct nfc_digital_dev *ddev,
 	struct port100_cb_arg *cb_arg;
 	__le16 timeout;

-	cb_arg = kzalloc(sizeof(struct port100_cb_arg), GFP_KERNEL);
+	cb_arg = kzalloc_obj(struct port100_cb_arg, GFP_KERNEL);
 	if (!cb_arg)
 		return -ENOMEM;

@@ -1377,7 +1377,7 @@ static int port100_tg_send_cmd(struct nfc_digital_dev *ddev,
 	struct port100_tg_comm_rf_cmd *hdr;
 	struct port100_cb_arg *cb_arg;

-	cb_arg = kzalloc(sizeof(struct port100_cb_arg), GFP_KERNEL);
+	cb_arg = kzalloc_obj(struct port100_cb_arg, GFP_KERNEL);
 	if (!cb_arg)
 		return -ENOMEM;

@@ -1418,7 +1418,7 @@ static int port100_listen_mdaa(struct nfc_digital_dev *ddev,
 	if (rc)
 		return rc;

-	cb_arg = kzalloc(sizeof(struct port100_cb_arg), GFP_KERNEL);
+	cb_arg = kzalloc_obj(struct port100_cb_arg, GFP_KERNEL);
 	if (!cb_arg)
 		return -ENOMEM;

diff --git a/drivers/nfc/st21nfca/core.c b/drivers/nfc/st21nfca/core.c
index bec6f607c32c..31f6e7c9930f 100644
--- a/drivers/nfc/st21nfca/core.c
+++ b/drivers/nfc/st21nfca/core.c
@@ -946,7 +946,7 @@ int st21nfca_hci_probe(void *phy_id, const struct nfc_phy_ops *phy_ops,
 	struct nfc_hci_init_data init_data;
 	unsigned long quirks = 0;

-	info = kzalloc(sizeof(struct st21nfca_hci_info), GFP_KERNEL);
+	info = kzalloc_obj(struct st21nfca_hci_info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/nfc/virtual_ncidev.c b/drivers/nfc/virtual_ncidev.c
index b957fce83b7c..81cc2e046ee6 100644
--- a/drivers/nfc/virtual_ncidev.c
+++ b/drivers/nfc/virtual_ncidev.c
@@ -135,7 +135,7 @@ static int virtual_ncidev_open(struct inode *inode, struct file *file)
 	int ret = 0;
 	struct virtual_nci_dev *vdev;

-	vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
+	vdev = kzalloc_obj(*vdev, GFP_KERNEL);
 	if (!vdev)
 		return -ENOMEM;
 	vdev->ndev = nci_allocate_device(&virtual_nci_ops,
diff --git a/drivers/ntb/test/ntb_msi_test.c b/drivers/ntb/test/ntb_msi_test.c
index 4e18e08776c9..f52d409ba6d2 100644
--- a/drivers/ntb/test/ntb_msi_test.c
+++ b/drivers/ntb/test/ntb_msi_test.c
@@ -164,7 +164,7 @@ static void ntb_msit_db_event(void *ctx, int vec)
 		if (irq_count == -1)
 			continue;

-		desc = kcalloc(irq_count, sizeof(*desc), GFP_ATOMIC);
+		desc = kzalloc_objs(*desc, irq_count, GFP_ATOMIC);
 		if (!desc)
 			continue;

diff --git a/drivers/nubus/nubus.c b/drivers/nubus/nubus.c
index 197c8c0de199..559dce302d06 100644
--- a/drivers/nubus/nubus.c
+++ b/drivers/nubus/nubus.c
@@ -510,7 +510,7 @@ nubus_get_functional_resource(struct nubus_board *board, int slot,
 	dir.procdir = nubus_proc_add_rsrc_dir(board->procdir, parent, board);

 	/* Actually we should probably panic if this fails */
-	fres = kzalloc(sizeof(*fres), GFP_ATOMIC);
+	fres = kzalloc_obj(*fres, GFP_ATOMIC);
 	if (!fres)
 		return NULL;
 	fres->resid = parent->type;
@@ -739,7 +739,7 @@ static void __init nubus_add_board(int slot, int bytelanes)
 	nubus_rewind(&rp, FORMAT_BLOCK_SIZE, bytelanes);

 	/* Actually we should probably panic if this fails */
-	if ((board = kzalloc(sizeof(*board), GFP_ATOMIC)) == NULL)
+	if ((board = kzalloc_obj(*board, GFP_ATOMIC)) == NULL)
 		return;
 	board->fblock = rp;

diff --git a/drivers/nubus/proc.c b/drivers/nubus/proc.c
index e7a347db708c..4d6773ef484e 100644
--- a/drivers/nubus/proc.c
+++ b/drivers/nubus/proc.c
@@ -96,7 +96,7 @@ nubus_proc_alloc_pde_data(unsigned char *ptr, unsigned int size)
 {
 	struct nubus_proc_pde_data *pded;

-	pded = kmalloc(sizeof(*pded), GFP_KERNEL);
+	pded = kmalloc_obj(*pded, GFP_KERNEL);
 	if (!pded)
 		return NULL;

diff --git a/drivers/nvdimm/badrange.c b/drivers/nvdimm/badrange.c
index 36c626db459a..7d2422f72e66 100644
--- a/drivers/nvdimm/badrange.c
+++ b/drivers/nvdimm/badrange.c
@@ -37,7 +37,7 @@ static int alloc_and_append_badrange_entry(struct badrange *badrange,
 {
 	struct badrange_entry *bre;

-	bre = kzalloc(sizeof(*bre), flags);
+	bre = kzalloc_obj(*bre, flags);
 	if (!bre)
 		return -ENOMEM;

@@ -50,7 +50,7 @@ static int add_badrange(struct badrange *badrange, u64 addr, u64 length)
 	struct badrange_entry *bre, *bre_new;

 	spin_unlock(&badrange->lock);
-	bre_new = kzalloc(sizeof(*bre_new), GFP_KERNEL);
+	bre_new = kzalloc_obj(*bre_new, GFP_KERNEL);
 	spin_lock(&badrange->lock);

 	if (list_empty(&badrange->list)) {
diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c
index 237edfa1c624..c47785274d3a 100644
--- a/drivers/nvdimm/btt.c
+++ b/drivers/nvdimm/btt.c
@@ -539,8 +539,8 @@ static int btt_freelist_init(struct arena_info *arena)
 	struct log_entry log_new;
 	u32 i, map_entry, log_oldmap, log_newmap;

-	arena->freelist = kcalloc(arena->nfree, sizeof(struct free_entry),
-					GFP_KERNEL);
+	arena->freelist = kzalloc_objs(struct free_entry, arena->nfree,
+				       GFP_KERNEL);
 	if (!arena->freelist)
 		return -ENOMEM;

@@ -733,8 +733,8 @@ static int btt_maplocks_init(struct arena_info *arena)
 {
 	u32 i;

-	arena->map_locks = kcalloc(arena->nfree, sizeof(struct aligned_lock),
-				GFP_KERNEL);
+	arena->map_locks = kzalloc_objs(struct aligned_lock, arena->nfree,
+					GFP_KERNEL);
 	if (!arena->map_locks)
 		return -ENOMEM;

@@ -751,7 +751,7 @@ static struct arena_info *alloc_arena(struct btt *btt, size_t size,
 	u64 logsize, mapsize, datasize;
 	u64 available = size;

-	arena = kzalloc(sizeof(*arena), GFP_KERNEL);
+	arena = kzalloc_obj(*arena, GFP_KERNEL);
 	if (!arena)
 		return NULL;
 	arena->nd_btt = btt->nd_btt;
@@ -854,7 +854,7 @@ static int discover_arenas(struct btt *btt)
 	size_t cur_off = 0;
 	int num_arenas = 0;

-	struct btt_sb *super __free(kfree) = kzalloc(sizeof(*super), GFP_KERNEL);
+	struct btt_sb *super __free(kfree) = kzalloc_obj(*super, GFP_KERNEL);
 	if (!super)
 		return -ENOMEM;

@@ -978,7 +978,7 @@ static int btt_arena_write_layout(struct arena_info *arena)
 	if (ret)
 		return ret;

-	super = kzalloc(sizeof(*super), GFP_NOIO);
+	super = kzalloc_obj(*super, GFP_NOIO);
 	if (!super)
 		return -ENOMEM;

diff --git a/drivers/nvdimm/btt_devs.c b/drivers/nvdimm/btt_devs.c
index b3279b86bbfd..ab9d0ad53724 100644
--- a/drivers/nvdimm/btt_devs.c
+++ b/drivers/nvdimm/btt_devs.c
@@ -180,7 +180,7 @@ static struct device *__nd_btt_create(struct nd_region *nd_region,
 	struct nd_btt *nd_btt;
 	struct device *dev;

-	nd_btt = kzalloc(sizeof(*nd_btt), GFP_KERNEL);
+	nd_btt = kzalloc_obj(*nd_btt, GFP_KERNEL);
 	if (!nd_btt)
 		return NULL;

diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
index 87178a53ff9c..767a4f1e27e5 100644
--- a/drivers/nvdimm/bus.c
+++ b/drivers/nvdimm/bus.c
@@ -336,7 +336,7 @@ struct nvdimm_bus *nvdimm_bus_register(struct device *parent,
 	struct nvdimm_bus *nvdimm_bus;
 	int rc;

-	nvdimm_bus = kzalloc(sizeof(*nvdimm_bus), GFP_KERNEL);
+	nvdimm_bus = kzalloc_obj(*nvdimm_bus, GFP_KERNEL);
 	if (!nvdimm_bus)
 		return NULL;
 	INIT_LIST_HEAD(&nvdimm_bus->list);
@@ -736,7 +736,7 @@ int nvdimm_bus_create_ndctl(struct nvdimm_bus *nvdimm_bus)
 	struct device *dev;
 	int rc;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	device_initialize(dev);
diff --git a/drivers/nvdimm/core.c b/drivers/nvdimm/core.c
index 5ba204113fe1..5c2e4160e6ae 100644
--- a/drivers/nvdimm/core.c
+++ b/drivers/nvdimm/core.c
@@ -80,7 +80,7 @@ static struct nvdimm_map *alloc_nvdimm_map(struct device *dev,
 	struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
 	struct nvdimm_map *nvdimm_map;

-	nvdimm_map = kzalloc(sizeof(*nvdimm_map), GFP_KERNEL);
+	nvdimm_map = kzalloc_obj(*nvdimm_map, GFP_KERNEL);
 	if (!nvdimm_map)
 		return NULL;

diff --git a/drivers/nvdimm/dax_devs.c b/drivers/nvdimm/dax_devs.c
index ba4c409ede65..6d25a7fbf751 100644
--- a/drivers/nvdimm/dax_devs.c
+++ b/drivers/nvdimm/dax_devs.c
@@ -50,7 +50,7 @@ static struct nd_dax *nd_dax_alloc(struct nd_region *nd_region)
 	struct nd_dax *nd_dax;
 	struct device *dev;

-	nd_dax = kzalloc(sizeof(*nd_dax), GFP_KERNEL);
+	nd_dax = kzalloc_obj(*nd_dax, GFP_KERNEL);
 	if (!nd_dax)
 		return NULL;

diff --git a/drivers/nvdimm/dimm.c b/drivers/nvdimm/dimm.c
index 2f6c26cc6a3e..f7c7ecee80a7 100644
--- a/drivers/nvdimm/dimm.c
+++ b/drivers/nvdimm/dimm.c
@@ -39,7 +39,7 @@ static int nvdimm_probe(struct device *dev)
 	 */
 	nvdimm_clear_locked(dev);

-	ndd = kzalloc(sizeof(*ndd), GFP_KERNEL);
+	ndd = kzalloc_obj(*ndd, GFP_KERNEL);
 	if (!ndd)
 		return -ENOMEM;

diff --git a/drivers/nvdimm/dimm_devs.c b/drivers/nvdimm/dimm_devs.c
index e1349ef5f8fd..c0366fd5d6a0 100644
--- a/drivers/nvdimm/dimm_devs.c
+++ b/drivers/nvdimm/dimm_devs.c
@@ -575,7 +575,7 @@ struct nvdimm *__nvdimm_create(struct nvdimm_bus *nvdimm_bus,
 		const struct nvdimm_security_ops *sec_ops,
 		const struct nvdimm_fw_ops *fw_ops)
 {
-	struct nvdimm *nvdimm = kzalloc(sizeof(*nvdimm), GFP_KERNEL);
+	struct nvdimm *nvdimm = kzalloc_obj(*nvdimm, GFP_KERNEL);
 	struct device *dev;

 	if (!nvdimm)
diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
index 04f4a049599a..e370eaf17099 100644
--- a/drivers/nvdimm/label.c
+++ b/drivers/nvdimm/label.c
@@ -982,7 +982,7 @@ static int init_labels(struct nd_mapping *nd_mapping, int num_labels)
 	 * they can be garbage collected after writing the new labels.
 	 */
 	for (i = old_num_labels; i < num_labels; i++) {
-		label_ent = kzalloc(sizeof(*label_ent), GFP_KERNEL);
+		label_ent = kzalloc_obj(*label_ent, GFP_KERNEL);
 		if (!label_ent)
 			return -ENOMEM;
 		mutex_lock(&nd_mapping->lock);
diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
index a5edcacfe46d..6f2cd7d32467 100644
--- a/drivers/nvdimm/namespace_devs.c
+++ b/drivers/nvdimm/namespace_devs.c
@@ -1530,11 +1530,11 @@ static struct device **create_namespace_io(struct nd_region *nd_region)
 	struct device *dev, **devs;
 	struct resource *res;

-	nsio = kzalloc(sizeof(*nsio), GFP_KERNEL);
+	nsio = kzalloc_obj(*nsio, GFP_KERNEL);
 	if (!nsio)
 		return NULL;

-	devs = kcalloc(2, sizeof(struct device *), GFP_KERNEL);
+	devs = kzalloc_objs(struct device *, 2, GFP_KERNEL);
 	if (!devs) {
 		kfree(nsio);
 		return NULL;
@@ -1693,7 +1693,7 @@ static struct device *create_namespace_pmem(struct nd_region *nd_region,
 			nsl_uuid_raw(ndd, nd_label));
 	}

-	nspm = kzalloc(sizeof(*nspm), GFP_KERNEL);
+	nspm = kzalloc_obj(*nspm, GFP_KERNEL);
 	if (!nspm)
 		return ERR_PTR(-ENOMEM);

@@ -1797,7 +1797,7 @@ static struct device *nd_namespace_pmem_create(struct nd_region *nd_region)
 	if (!is_memory(&nd_region->dev))
 		return NULL;

-	nspm = kzalloc(sizeof(*nspm), GFP_KERNEL);
+	nspm = kzalloc_obj(*nspm, GFP_KERNEL);
 	if (!nspm)
 		return NULL;

@@ -1931,7 +1931,7 @@ static struct device **scan_labels(struct nd_region *nd_region)
 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
 	resource_size_t map_end = nd_mapping->start + nd_mapping->size - 1;

-	devs = kcalloc(2, sizeof(dev), GFP_KERNEL);
+	devs = kzalloc_objs(dev, 2, GFP_KERNEL);
 	if (!devs)
 		return NULL;

@@ -1954,7 +1954,7 @@ static struct device **scan_labels(struct nd_region *nd_region)
 		if (i < count)
 			continue;
 		if (count) {
-			__devs = kcalloc(count + 2, sizeof(dev), GFP_KERNEL);
+			__devs = kzalloc_objs(dev, count + 2, GFP_KERNEL);
 			if (!__devs)
 				goto err;
 			memcpy(__devs, devs, sizeof(dev) * count);
@@ -1984,7 +1984,7 @@ static struct device **scan_labels(struct nd_region *nd_region)

 		/* Publish a zero-sized namespace for userspace to configure. */
 		nd_mapping_free_labels(nd_mapping);
-		nspm = kzalloc(sizeof(*nspm), GFP_KERNEL);
+		nspm = kzalloc_obj(*nspm, GFP_KERNEL);
 		if (!nspm)
 			goto err;
 		dev = &nspm->nsio.common.dev;
@@ -2118,7 +2118,7 @@ static int init_active_labels(struct nd_region *nd_region)
 		for (j = 0; j < count; j++) {
 			struct nd_namespace_label *label;

-			label_ent = kzalloc(sizeof(*label_ent), GFP_KERNEL);
+			label_ent = kzalloc_obj(*label_ent, GFP_KERNEL);
 			if (!label_ent)
 				break;
 			label = nd_label_active(ndd, j);
diff --git a/drivers/nvdimm/nd_perf.c b/drivers/nvdimm/nd_perf.c
index 2b6dc80d8fb5..5338a440890b 100644
--- a/drivers/nvdimm/nd_perf.c
+++ b/drivers/nvdimm/nd_perf.c
@@ -184,7 +184,7 @@ static int create_cpumask_attr_group(struct nvdimm_pmu *nd_pmu)
 	struct attribute **attrs_group;
 	struct attribute_group *nvdimm_pmu_cpumask_group;

-	pmu_events_attr = kzalloc(sizeof(*pmu_events_attr), GFP_KERNEL);
+	pmu_events_attr = kzalloc_obj(*pmu_events_attr, GFP_KERNEL);
 	if (!pmu_events_attr)
 		return -ENOMEM;

@@ -195,7 +195,8 @@ static int create_cpumask_attr_group(struct nvdimm_pmu *nd_pmu)
 	}

 	/* Allocate memory for cpumask attribute group */
-	nvdimm_pmu_cpumask_group = kzalloc(sizeof(*nvdimm_pmu_cpumask_group), GFP_KERNEL);
+	nvdimm_pmu_cpumask_group = kzalloc_obj(*nvdimm_pmu_cpumask_group,
+					       GFP_KERNEL);
 	if (!nvdimm_pmu_cpumask_group) {
 		kfree(pmu_events_attr);
 		kfree(attrs_group);
diff --git a/drivers/nvdimm/nd_virtio.c b/drivers/nvdimm/nd_virtio.c
index af82385be7c6..e70aee4ef7a9 100644
--- a/drivers/nvdimm/nd_virtio.c
+++ b/drivers/nvdimm/nd_virtio.c
@@ -55,7 +55,7 @@ static int virtio_pmem_flush(struct nd_region *nd_region)
 		return -EIO;
 	}

-	req_data = kmalloc(sizeof(*req_data), GFP_KERNEL);
+	req_data = kmalloc_obj(*req_data, GFP_KERNEL);
 	if (!req_data)
 		return -ENOMEM;

diff --git a/drivers/nvdimm/of_pmem.c b/drivers/nvdimm/of_pmem.c
index 68bddab3fb46..f78aede2aab5 100644
--- a/drivers/nvdimm/of_pmem.c
+++ b/drivers/nvdimm/of_pmem.c
@@ -26,7 +26,7 @@ static int of_pmem_region_probe(struct platform_device *pdev)
 	if (!np)
 		return -ENXIO;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
index 42b172fc5576..5d1e1c214847 100644
--- a/drivers/nvdimm/pfn_devs.c
+++ b/drivers/nvdimm/pfn_devs.c
@@ -311,7 +311,7 @@ static struct nd_pfn *nd_pfn_alloc(struct nd_region *nd_region)
 	struct nd_pfn *nd_pfn;
 	struct device *dev;

-	nd_pfn = kzalloc(sizeof(*nd_pfn), GFP_KERNEL);
+	nd_pfn = kzalloc_obj(*nd_pfn, GFP_KERNEL);
 	if (!nd_pfn)
 		return NULL;

diff --git a/drivers/nvdimm/ramdax.c b/drivers/nvdimm/ramdax.c
index 954cb7919807..8d6cfffbb56c 100644
--- a/drivers/nvdimm/ramdax.c
+++ b/drivers/nvdimm/ramdax.c
@@ -40,7 +40,7 @@ static int ramdax_register_region(struct resource *res,
 	struct nd_interleave_set *nd_set;
 	int nid = phys_to_target_node(res->start);

-	nd_set = kzalloc(sizeof(*nd_set), GFP_KERNEL);
+	nd_set = kzalloc_obj(*nd_set, GFP_KERNEL);
 	if (!nd_set)
 		return -ENOMEM;

@@ -80,7 +80,7 @@ static int ramdax_register_dimm(struct resource *res, void *data)
 	struct ramdax_dimm *dimm;
 	int err;

-	dimm = kzalloc(sizeof(*dimm), GFP_KERNEL);
+	dimm = kzalloc_obj(*dimm, GFP_KERNEL);
 	if (!dimm)
 		return -ENOMEM;

diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
index 1220530a23b6..c1eebff582d9 100644
--- a/drivers/nvdimm/region_devs.c
+++ b/drivers/nvdimm/region_devs.c
@@ -1005,8 +1005,8 @@ static struct nd_region *nd_region_create(struct nvdimm_bus *nvdimm_bus,
 	}

 	nd_region =
-		kzalloc(struct_size(nd_region, mapping, ndr_desc->num_mappings),
-			GFP_KERNEL);
+		kzalloc_flex(*nd_region, mapping, ndr_desc->num_mappings,
+			     GFP_KERNEL);

 	if (!nd_region)
 		return NULL;
diff --git a/drivers/nvme/host/auth.c b/drivers/nvme/host/auth.c
index 8f3ccb317e4d..20a7347fa258 100644
--- a/drivers/nvme/host/auth.c
+++ b/drivers/nvme/host/auth.c
@@ -1083,8 +1083,8 @@ int nvme_auth_init_ctrl(struct nvme_ctrl *ctrl)
 	if (!ctrl->opts->dhchap_secret && !ctrl->opts->dhchap_ctrl_secret)
 		return 0;

-	ctrl->dhchap_ctxs = kvcalloc(ctrl_max_dhchaps(ctrl),
-				sizeof(*chap), GFP_KERNEL);
+	ctrl->dhchap_ctxs = kvzalloc_objs(*chap, ctrl_max_dhchaps(ctrl),
+					  GFP_KERNEL);
 	if (!ctrl->dhchap_ctxs) {
 		ret = -ENOMEM;
 		goto err_free_dhchap_ctrl_secret;
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 19b67cf5d550..fe05fb76afe6 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1469,7 +1469,7 @@ static int nvme_identify_ctrl(struct nvme_ctrl *dev, struct nvme_id_ctrl **id)
 	c.identify.opcode = nvme_admin_identify;
 	c.identify.cns = NVME_ID_CNS_CTRL;

-	*id = kmalloc(sizeof(struct nvme_id_ctrl), GFP_KERNEL);
+	*id = kmalloc_obj(struct nvme_id_ctrl, GFP_KERNEL);
 	if (!*id)
 		return -ENOMEM;

@@ -1599,7 +1599,7 @@ int nvme_identify_ns(struct nvme_ctrl *ctrl, unsigned nsid,
 	c.identify.nsid = cpu_to_le32(nsid);
 	c.identify.cns = NVME_ID_CNS_NS;

-	*id = kmalloc(sizeof(**id), GFP_KERNEL);
+	*id = kmalloc_obj(**id, GFP_KERNEL);
 	if (!*id)
 		return -ENOMEM;

@@ -1663,7 +1663,7 @@ static int nvme_ns_info_from_id_cs_indep(struct nvme_ctrl *ctrl,
 	};
 	int ret;

-	id = kmalloc(sizeof(*id), GFP_KERNEL);
+	id = kmalloc_obj(*id, GFP_KERNEL);
 	if (!id)
 		return -ENOMEM;

@@ -1923,7 +1923,7 @@ static int nvme_identify_ns_nvm(struct nvme_ctrl *ctrl, unsigned int nsid,
 	struct nvme_id_ns_nvm *nvm;
 	int ret;

-	nvm = kzalloc(sizeof(*nvm), GFP_KERNEL);
+	nvm = kzalloc_obj(*nvm, GFP_KERNEL);
 	if (!nvm)
 		return -ENOMEM;

@@ -2784,7 +2784,7 @@ static int nvme_configure_host_options(struct nvme_ctrl *ctrl)
 	if (!acre && !lbafee)
 		return 0;

-	host = kzalloc(sizeof(*host), GFP_KERNEL);
+	host = kzalloc_obj(*host, GFP_KERNEL);
 	if (!host)
 		return 0;

@@ -2873,7 +2873,7 @@ static int nvme_configure_apst(struct nvme_ctrl *ctrl)
 		return 0;
 	}

-	table = kzalloc(sizeof(*table), GFP_KERNEL);
+	table = kzalloc_obj(*table, GFP_KERNEL);
 	if (!table)
 		return 0;

@@ -3208,7 +3208,7 @@ static int nvme_init_subsystem(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
 	struct nvme_subsystem *subsys, *found;
 	int ret;

-	subsys = kzalloc(sizeof(*subsys), GFP_KERNEL);
+	subsys = kzalloc_obj(*subsys, GFP_KERNEL);
 	if (!subsys)
 		return -ENOMEM;

@@ -3326,7 +3326,7 @@ static int nvme_get_effects_log(struct nvme_ctrl *ctrl, u8 csi,
 	if (cel)
 		goto out;

-	cel = kzalloc(sizeof(*cel), GFP_KERNEL);
+	cel = kzalloc_obj(*cel, GFP_KERNEL);
 	if (!cel)
 		return -ENOMEM;

@@ -3379,7 +3379,7 @@ static int nvme_init_non_mdts_limits(struct nvme_ctrl *ctrl)
 	    test_bit(NVME_CTRL_SKIP_ID_CNS_CS, &ctrl->flags))
 		return 0;

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id)
 		return -ENOMEM;

@@ -3408,7 +3408,7 @@ static int nvme_init_effects_log(struct nvme_ctrl *ctrl,
 {
 	struct nvme_effects_log *effects, *old;

-	effects = kzalloc(sizeof(*effects), GFP_KERNEL);
+	effects = kzalloc_obj(*effects, GFP_KERNEL);
 	if (!effects)
 		return -ENOMEM;

@@ -4688,7 +4688,7 @@ static void nvme_get_fw_slot_info(struct nvme_ctrl *ctrl)
 	struct nvme_fw_slot_info_log *log;
 	u8 next_fw_slot, cur_fw_slot;

-	log = kmalloc(sizeof(*log), GFP_KERNEL);
+	log = kmalloc_obj(*log, GFP_KERNEL);
 	if (!log)
 		return;

diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c
index 55a8afd2efd5..b4e4bdea1db0 100644
--- a/drivers/nvme/host/fabrics.c
+++ b/drivers/nvme/host/fabrics.c
@@ -26,7 +26,7 @@ static struct nvmf_host *nvmf_host_alloc(const char *hostnqn, uuid_t *id)
 {
 	struct nvmf_host *host;

-	host = kmalloc(sizeof(*host), GFP_KERNEL);
+	host = kmalloc_obj(*host, GFP_KERNEL);
 	if (!host)
 		return NULL;

@@ -396,7 +396,7 @@ static struct nvmf_connect_data *nvmf_connect_data_prep(struct nvme_ctrl *ctrl,
 {
 	struct nvmf_connect_data *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;

@@ -1312,7 +1312,7 @@ nvmf_create_ctrl(struct device *dev, const char *buf)
 	struct nvme_ctrl *ctrl;
 	int ret;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
index 6948de3f438a..0b65d1bab4c1 100644
--- a/drivers/nvme/host/fc.c
+++ b/drivers/nvme/host/fc.c
@@ -1724,15 +1724,15 @@ nvme_fc_rcv_ls_req(struct nvme_fc_remote_port *portptr,
 		goto out_put;
 	}

-	lsop = kzalloc(sizeof(*lsop), GFP_KERNEL);
+	lsop = kzalloc_obj(*lsop, GFP_KERNEL);
 	if (!lsop) {
 		nvme_fc_rcv_ls_req_err_msg(lport, w0);
 		ret = -ENOMEM;
 		goto out_put;
 	}

-	lsop->rqstbuf = kzalloc(sizeof(*lsop->rqstbuf), GFP_KERNEL);
-	lsop->rspbuf = kzalloc(sizeof(*lsop->rspbuf), GFP_KERNEL);
+	lsop->rqstbuf = kzalloc_obj(*lsop->rqstbuf, GFP_KERNEL);
+	lsop->rspbuf = kzalloc_obj(*lsop->rspbuf, GFP_KERNEL);
 	if (!lsop->rqstbuf || !lsop->rspbuf) {
 		nvme_fc_rcv_ls_req_err_msg(lport, w0);
 		ret = -ENOMEM;
@@ -3443,7 +3443,7 @@ nvme_fc_alloc_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
 		goto out_fail;
 	}

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl) {
 		ret = -ENOMEM;
 		goto out_fail;
@@ -3497,8 +3497,8 @@ nvme_fc_alloc_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
 	ctrl->ctrl.cntlid = 0xffff;

 	ret = -ENOMEM;
-	ctrl->queues = kcalloc(ctrl->ctrl.queue_count,
-				sizeof(struct nvme_fc_queue), GFP_KERNEL);
+	ctrl->queues = kzalloc_objs(struct nvme_fc_queue,
+				    ctrl->ctrl.queue_count, GFP_KERNEL);
 	if (!ctrl->queues)
 		goto out_free_ida;

diff --git a/drivers/nvme/host/hwmon.c b/drivers/nvme/host/hwmon.c
index 89a1a1043d63..c60bd960f03a 100644
--- a/drivers/nvme/host/hwmon.c
+++ b/drivers/nvme/host/hwmon.c
@@ -230,11 +230,11 @@ int nvme_hwmon_init(struct nvme_ctrl *ctrl)
 	struct device *hwmon;
 	int err;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

-	data->log = kzalloc(sizeof(*data->log), GFP_KERNEL);
+	data->log = kzalloc_obj(*data->log, GFP_KERNEL);
 	if (!data->log) {
 		err = -ENOMEM;
 		goto err_free_data;
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 80df992d1ae8..89b5095d1b2e 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -2447,7 +2447,7 @@ static int nvme_alloc_host_mem_multi(struct nvme_dev *dev, u64 preferred,
 	if (!descs)
 		goto out;

-	bufs = kcalloc(max_entries, sizeof(*bufs), GFP_KERNEL);
+	bufs = kzalloc_objs(*bufs, max_entries, GFP_KERNEL);
 	if (!bufs)
 		goto out_free_descs;

diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index 35c0822edb2d..718bbc9b87c1 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -215,7 +215,7 @@ static struct nvme_rdma_qe *nvme_rdma_alloc_ring(struct ib_device *ibdev,
 	struct nvme_rdma_qe *ring;
 	int i;

-	ring = kcalloc(ib_queue_size, sizeof(struct nvme_rdma_qe), GFP_KERNEL);
+	ring = kzalloc_objs(struct nvme_rdma_qe, ib_queue_size, GFP_KERNEL);
 	if (!ring)
 		return NULL;

@@ -300,7 +300,7 @@ static int nvme_rdma_init_request(struct blk_mq_tag_set *set,
 	struct nvme_rdma_queue *queue = &ctrl->queues[queue_idx];

 	nvme_req(rq)->ctrl = &ctrl->ctrl;
-	req->sqe.data = kzalloc(sizeof(struct nvme_command), GFP_KERNEL);
+	req->sqe.data = kzalloc_obj(struct nvme_command, GFP_KERNEL);
 	if (!req->sqe.data)
 		return -ENOMEM;

@@ -375,7 +375,7 @@ nvme_rdma_find_get_device(struct rdma_cm_id *cm_id)
 			goto out_unlock;
 	}

-	ndev = kzalloc(sizeof(*ndev), GFP_KERNEL);
+	ndev = kzalloc_obj(*ndev, GFP_KERNEL);
 	if (!ndev)
 		goto out_err;

@@ -2240,7 +2240,7 @@ static struct nvme_rdma_ctrl *nvme_rdma_alloc_ctrl(struct device *dev,
 	struct nvme_rdma_ctrl *ctrl;
 	int ret;

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		return ERR_PTR(-ENOMEM);
 	ctrl->ctrl.opts = opts;
@@ -2290,8 +2290,8 @@ static struct nvme_rdma_ctrl *nvme_rdma_alloc_ctrl(struct device *dev,
 	ctrl->ctrl.kato = opts->kato;

 	ret = -ENOMEM;
-	ctrl->queues = kcalloc(ctrl->ctrl.queue_count, sizeof(*ctrl->queues),
-				GFP_KERNEL);
+	ctrl->queues = kzalloc_objs(*ctrl->queues, ctrl->ctrl.queue_count,
+				    GFP_KERNEL);
 	if (!ctrl->queues)
 		goto out_free_ctrl;

diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
index 69cb04406b47..489102bdd057 100644
--- a/drivers/nvme/host/tcp.c
+++ b/drivers/nvme/host/tcp.c
@@ -1467,11 +1467,11 @@ static int nvme_tcp_init_connection(struct nvme_tcp_queue *queue)
 	u32 maxh2cdata;
 	int ret;

-	icreq = kzalloc(sizeof(*icreq), GFP_KERNEL);
+	icreq = kzalloc_obj(*icreq, GFP_KERNEL);
 	if (!icreq)
 		return -ENOMEM;

-	icresp = kzalloc(sizeof(*icresp), GFP_KERNEL);
+	icresp = kzalloc_obj(*icresp, GFP_KERNEL);
 	if (!icresp) {
 		ret = -ENOMEM;
 		goto free_icreq;
@@ -2891,7 +2891,7 @@ static struct nvme_tcp_ctrl *nvme_tcp_alloc_ctrl(struct device *dev,
 	struct nvme_tcp_ctrl *ctrl;
 	int ret;

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		return ERR_PTR(-ENOMEM);

@@ -2949,8 +2949,8 @@ static struct nvme_tcp_ctrl *nvme_tcp_alloc_ctrl(struct device *dev,
 		goto out_free_ctrl;
 	}

-	ctrl->queues = kcalloc(ctrl->ctrl.queue_count, sizeof(*ctrl->queues),
-				GFP_KERNEL);
+	ctrl->queues = kzalloc_objs(*ctrl->queues, ctrl->ctrl.queue_count,
+				    GFP_KERNEL);
 	if (!ctrl->queues) {
 		ret = -ENOMEM;
 		goto out_free_ctrl;
diff --git a/drivers/nvme/host/zns.c b/drivers/nvme/host/zns.c
index deea2dbef5b8..68dbe78c90c4 100644
--- a/drivers/nvme/host/zns.c
+++ b/drivers/nvme/host/zns.c
@@ -13,7 +13,7 @@ static int nvme_set_max_append(struct nvme_ctrl *ctrl)
 	struct nvme_id_ctrl_zns *id;
 	int status;

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id)
 		return -ENOMEM;

@@ -64,7 +64,7 @@ int nvme_query_zone_info(struct nvme_ns *ns, unsigned lbaf,
 			return status;
 	}

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id)
 		return -ENOMEM;

diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c
index 5e366502fb75..431702ff21fb 100644
--- a/drivers/nvme/target/admin-cmd.c
+++ b/drivers/nvme/target/admin-cmd.c
@@ -203,7 +203,7 @@ static void nvmet_execute_get_supported_log_pages(struct nvmet_req *req)
 	struct nvme_supported_log *logs;
 	u16 status;

-	logs = kzalloc(sizeof(*logs), GFP_KERNEL);
+	logs = kzalloc_obj(*logs, GFP_KERNEL);
 	if (!logs) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -308,7 +308,7 @@ static void nvmet_execute_get_log_page_rmi(struct nvmet_req *req)
 		goto out;
 	}

-	log = kzalloc(sizeof(*log), GFP_KERNEL);
+	log = kzalloc_obj(*log, GFP_KERNEL);
 	if (!log)
 		goto out;

@@ -334,7 +334,7 @@ static void nvmet_execute_get_log_page_smart(struct nvmet_req *req)
 	if (req->transfer_len != sizeof(*log))
 		goto out;

-	log = kzalloc(sizeof(*log), GFP_KERNEL);
+	log = kzalloc_obj(*log, GFP_KERNEL);
 	if (!log)
 		goto out;

@@ -409,7 +409,7 @@ static void nvmet_execute_get_log_cmd_effects_ns(struct nvmet_req *req)
 	struct nvme_effects_log *log;
 	u16 status = NVME_SC_SUCCESS;

-	log = kzalloc(sizeof(*log), GFP_KERNEL);
+	log = kzalloc_obj(*log, GFP_KERNEL);
 	if (!log) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -504,7 +504,7 @@ static void nvmet_execute_get_log_page_endgrp(struct nvmet_req *req)
 	if (status)
 		goto out;

-	log = kzalloc(sizeof(*log), GFP_KERNEL);
+	log = kzalloc_obj(*log, GFP_KERNEL);
 	if (!log) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -542,8 +542,7 @@ static void nvmet_execute_get_log_page_ana(struct nvmet_req *req)
 	u16 status;

 	status = NVME_SC_INTERNAL;
-	desc = kmalloc(struct_size(desc, nsids, NVMET_MAX_NAMESPACES),
-		       GFP_KERNEL);
+	desc = kmalloc_flex(*desc, nsids, NVMET_MAX_NAMESPACES, GFP_KERNEL);
 	if (!desc)
 		goto out;

@@ -581,7 +580,7 @@ static void nvmet_execute_get_log_page_features(struct nvmet_req *req)
 	struct nvme_supported_features_log *features;
 	u16 status;

-	features = kzalloc(sizeof(*features), GFP_KERNEL);
+	features = kzalloc_obj(*features, GFP_KERNEL);
 	if (!features) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -660,7 +659,7 @@ static void nvmet_execute_identify_ctrl(struct nvmet_req *req)
 		mutex_unlock(&subsys->lock);
 	}

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -809,7 +808,7 @@ static void nvmet_execute_identify_ns(struct nvmet_req *req)
 		goto out;
 	}

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -1053,7 +1052,7 @@ static void nvme_execute_identify_ns_nvm(struct nvmet_req *req)
 	if (status)
 		goto out;

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -1073,7 +1072,7 @@ static void nvmet_execute_id_cs_indep(struct nvmet_req *req)
 	if (status)
 		goto out;

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id) {
 		status = NVME_SC_INTERNAL;
 		goto out;
diff --git a/drivers/nvme/target/configfs.c b/drivers/nvme/target/configfs.c
index 127dae51fec1..6df2844dcec1 100644
--- a/drivers/nvme/target/configfs.c
+++ b/drivers/nvme/target/configfs.c
@@ -1040,7 +1040,7 @@ static int nvmet_port_subsys_allow_link(struct config_item *parent,
 		return -EINVAL;
 	}
 	subsys = to_subsys(target);
-	link = kmalloc(sizeof(*link), GFP_KERNEL);
+	link = kmalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;
 	link->subsys = subsys;
@@ -1120,7 +1120,7 @@ static int nvmet_allowed_hosts_allow_link(struct config_item *parent,
 	}

 	host = to_host(target);
-	link = kmalloc(sizeof(*link), GFP_KERNEL);
+	link = kmalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;
 	link->host = host;
@@ -1825,7 +1825,7 @@ static struct config_group *nvmet_referral_make(
 {
 	struct nvmet_port *port;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return ERR_PTR(-ENOMEM);

@@ -1943,7 +1943,7 @@ static struct config_group *nvmet_ana_groups_make_group(
 		goto out;

 	ret = -ENOMEM;
-	grp = kzalloc(sizeof(*grp), GFP_KERNEL);
+	grp = kzalloc_obj(*grp, GFP_KERNEL);
 	if (!grp)
 		goto out;
 	grp->port = port;
@@ -2022,12 +2022,12 @@ static struct config_group *nvmet_ports_make(struct config_group *group,
 	if (kstrtou16(name, 0, &portid))
 		return ERR_PTR(-EINVAL);

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return ERR_PTR(-ENOMEM);

-	port->ana_state = kcalloc(NVMET_MAX_ANAGRPS + 1,
-			sizeof(*port->ana_state), GFP_KERNEL);
+	port->ana_state = kzalloc_objs(*port->ana_state, NVMET_MAX_ANAGRPS + 1,
+				       GFP_KERNEL);
 	if (!port->ana_state) {
 		kfree(port);
 		return ERR_PTR(-ENOMEM);
@@ -2257,7 +2257,7 @@ static struct config_group *nvmet_hosts_make_group(struct config_group *group,
 {
 	struct nvmet_host *host;

-	host = kzalloc(sizeof(*host), GFP_KERNEL);
+	host = kzalloc_obj(*host, GFP_KERNEL);
 	if (!host)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
index eab3e4fc0f74..255a6c9b2548 100644
--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -194,7 +194,7 @@ void nvmet_add_async_event(struct nvmet_ctrl *ctrl, u8 event_type,
 {
 	struct nvmet_async_event *aen;

-	aen = kmalloc(sizeof(*aen), GFP_KERNEL);
+	aen = kmalloc_obj(*aen, GFP_KERNEL);
 	if (!aen)
 		return;

@@ -693,7 +693,7 @@ struct nvmet_ns *nvmet_ns_alloc(struct nvmet_subsys *subsys, u32 nsid)
 	if (subsys->nr_namespaces == NVMET_MAX_NAMESPACES)
 		goto out_unlock;

-	ns = kzalloc(sizeof(*ns), GFP_KERNEL);
+	ns = kzalloc_obj(*ns, GFP_KERNEL);
 	if (!ns)
 		goto out_unlock;

@@ -1609,7 +1609,7 @@ struct nvmet_ctrl *nvmet_alloc_ctrl(struct nvmet_alloc_ctrl_args *args)
 	up_read(&nvmet_config_sem);

 	args->status = NVME_SC_INTERNAL;
-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		goto out_put_subsystem;
 	mutex_init(&ctrl->lock);
@@ -1642,14 +1642,13 @@ struct nvmet_ctrl *nvmet_alloc_ctrl(struct nvmet_alloc_ctrl_args *args)
 	if (!ctrl->changed_ns_list)
 		goto out_free_ctrl;

-	ctrl->sqs = kcalloc(subsys->max_qid + 1,
-			sizeof(struct nvmet_sq *),
-			GFP_KERNEL);
+	ctrl->sqs = kzalloc_objs(struct nvmet_sq *, subsys->max_qid + 1,
+				 GFP_KERNEL);
 	if (!ctrl->sqs)
 		goto out_free_changed_ns_list;

-	ctrl->cqs = kcalloc(subsys->max_qid + 1, sizeof(struct nvmet_cq *),
-			   GFP_KERNEL);
+	ctrl->cqs = kzalloc_objs(struct nvmet_cq *, subsys->max_qid + 1,
+				 GFP_KERNEL);
 	if (!ctrl->cqs)
 		goto out_free_sqs;

@@ -1829,7 +1828,7 @@ struct nvmet_subsys *nvmet_subsys_alloc(const char *subsysnqn,
 	char serial[NVMET_SN_MAX_SIZE / 2];
 	int ret;

-	subsys = kzalloc(sizeof(*subsys), GFP_KERNEL);
+	subsys = kzalloc_obj(*subsys, GFP_KERNEL);
 	if (!subsys)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/nvme/target/discovery.c b/drivers/nvme/target/discovery.c
index c06f3e04296c..8a4a33f82177 100644
--- a/drivers/nvme/target/discovery.c
+++ b/drivers/nvme/target/discovery.c
@@ -263,7 +263,7 @@ static void nvmet_execute_disc_identify(struct nvmet_req *req)
 		goto out;
 	}

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id) {
 		status = NVME_SC_INTERNAL;
 		goto out;
diff --git a/drivers/nvme/target/fabrics-cmd.c b/drivers/nvme/target/fabrics-cmd.c
index 7b8d8b397802..5c0a1a3dd5b6 100644
--- a/drivers/nvme/target/fabrics-cmd.c
+++ b/drivers/nvme/target/fabrics-cmd.c
@@ -280,7 +280,7 @@ static void nvmet_execute_admin_connect(struct nvmet_req *req)
 	if (!nvmet_check_transfer_len(req, sizeof(struct nvmf_connect_data)))
 		return;

-	d = kmalloc(sizeof(*d), GFP_KERNEL);
+	d = kmalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		args.status = NVME_SC_INTERNAL;
 		goto complete;
@@ -344,7 +344,7 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)
 	if (!nvmet_check_transfer_len(req, sizeof(struct nvmf_connect_data)))
 		return;

-	d = kmalloc(sizeof(*d), GFP_KERNEL);
+	d = kmalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		status = NVME_SC_INTERNAL;
 		goto complete;
diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c
index 0d9784004c9b..69ab0830313d 100644
--- a/drivers/nvme/target/fc.c
+++ b/drivers/nvme/target/fc.c
@@ -528,8 +528,8 @@ nvmet_fc_alloc_ls_iodlist(struct nvmet_fc_tgtport *tgtport)
 	struct nvmet_fc_ls_iod *iod;
 	int i;

-	iod = kcalloc(NVMET_LS_CTX_COUNT, sizeof(struct nvmet_fc_ls_iod),
-			GFP_KERNEL);
+	iod = kzalloc_objs(struct nvmet_fc_ls_iod, NVMET_LS_CTX_COUNT,
+			   GFP_KERNEL);
 	if (!iod)
 		return -ENOMEM;

@@ -789,7 +789,7 @@ nvmet_fc_alloc_target_queue(struct nvmet_fc_tgt_assoc *assoc,
 	if (qid > NVMET_NR_QUEUES)
 		return NULL;

-	queue = kzalloc(struct_size(queue, fod, sqsize), GFP_KERNEL);
+	queue = kzalloc_flex(*queue, fod, sqsize, GFP_KERNEL);
 	if (!queue)
 		return NULL;

@@ -1034,7 +1034,7 @@ nvmet_fc_alloc_hostport(struct nvmet_fc_tgtport *tgtport, void *hosthandle)
 	if (match)
 		return match;

-	newhost = kzalloc(sizeof(*newhost), GFP_KERNEL);
+	newhost = kzalloc_obj(*newhost, GFP_KERNEL);
 	if (!newhost)
 		return ERR_PTR(-ENOMEM);

@@ -1116,7 +1116,7 @@ nvmet_fc_alloc_target_assoc(struct nvmet_fc_tgtport *tgtport, void *hosthandle)
 	if (!tgtport->pe)
 		return NULL;

-	assoc = kzalloc(sizeof(*assoc), GFP_KERNEL);
+	assoc = kzalloc_obj(*assoc, GFP_KERNEL);
 	if (!assoc)
 		return NULL;

@@ -2717,7 +2717,7 @@ nvmet_fc_rcv_fcp_req(struct nvmet_fc_target_port *target_port,
 		spin_unlock_irqrestore(&queue->qlock, flags);

 		/* Now we need to dynamically allocate one */
-		deferfcp = kmalloc(sizeof(*deferfcp), GFP_KERNEL);
+		deferfcp = kmalloc_obj(*deferfcp, GFP_KERNEL);
 		if (!deferfcp) {
 			/* release the queue lookup reference */
 			nvmet_fc_tgt_q_put(queue);
@@ -2882,7 +2882,7 @@ nvmet_fc_add_port(struct nvmet_port *port)
 	if (ret)
 		return ret;

-	pe = kzalloc(sizeof(*pe), GFP_KERNEL);
+	pe = kzalloc_obj(*pe, GFP_KERNEL);
 	if (!pe)
 		return -ENOMEM;

diff --git a/drivers/nvme/target/fcloop.c b/drivers/nvme/target/fcloop.c
index c30e9a3e014f..8473e41e5856 100644
--- a/drivers/nvme/target/fcloop.c
+++ b/drivers/nvme/target/fcloop.c
@@ -559,7 +559,7 @@ fcloop_tgt_discovery_evt(struct nvmet_fc_target_port *tgtport)
 {
 	struct fcloop_rscn *tgt_rscn;

-	tgt_rscn = kzalloc(sizeof(*tgt_rscn), GFP_KERNEL);
+	tgt_rscn = kzalloc_obj(*tgt_rscn, GFP_KERNEL);
 	if (!tgt_rscn)
 		return;

@@ -766,7 +766,7 @@ fcloop_fcp_req(struct nvme_fc_local_port *localport,
 	if (!rport->targetport)
 		return -ECONNREFUSED;

-	tfcp_req = kzalloc(sizeof(*tfcp_req), GFP_ATOMIC);
+	tfcp_req = kzalloc_obj(*tfcp_req, GFP_ATOMIC);
 	if (!tfcp_req)
 		return -ENOMEM;

@@ -1194,11 +1194,11 @@ fcloop_create_local_port(struct device *dev, struct device_attribute *attr,
 	unsigned long flags;
 	int ret = -ENOMEM;

-	lport = kzalloc(sizeof(*lport), GFP_KERNEL);
+	lport = kzalloc_obj(*lport, GFP_KERNEL);
 	if (!lport)
 		return -ENOMEM;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		goto out_free_lport;

@@ -1345,7 +1345,7 @@ fcloop_alloc_nport(const char *buf, size_t count, bool remoteport)
 	u32 opts_mask = (remoteport) ? RPORT_OPTS : TGTPORT_OPTS;
 	int ret;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return NULL;

@@ -1357,7 +1357,7 @@ fcloop_alloc_nport(const char *buf, size_t count, bool remoteport)
 	if ((opts->mask & opts_mask) != opts_mask)
 		goto out_free_opts;

-	newnport = kzalloc(sizeof(*newnport), GFP_KERNEL);
+	newnport = kzalloc_obj(*newnport, GFP_KERNEL);
 	if (!newnport)
 		goto out_free_opts;

diff --git a/drivers/nvme/target/io-cmd-file.c b/drivers/nvme/target/io-cmd-file.c
index 2d068439b129..6e810a91e6c5 100644
--- a/drivers/nvme/target/io-cmd-file.c
+++ b/drivers/nvme/target/io-cmd-file.c
@@ -228,8 +228,7 @@ static void nvmet_file_execute_rw(struct nvmet_req *req)
 	}

 	if (nr_bvec > NVMET_MAX_INLINE_BIOVEC)
-		req->f.bvec = kmalloc_array(nr_bvec, sizeof(struct bio_vec),
-				GFP_KERNEL);
+		req->f.bvec = kmalloc_objs(struct bio_vec, nr_bvec, GFP_KERNEL);
 	else
 		req->f.bvec = req->inline_bvec;

diff --git a/drivers/nvme/target/loop.c b/drivers/nvme/target/loop.c
index fc8e7c9ad858..575c5c31ea29 100644
--- a/drivers/nvme/target/loop.c
+++ b/drivers/nvme/target/loop.c
@@ -565,7 +565,7 @@ static struct nvme_ctrl *nvme_loop_create_ctrl(struct device *dev,
 	struct nvme_loop_ctrl *ctrl;
 	int ret;

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		return ERR_PTR(-ENOMEM);
 	ctrl->ctrl.opts = opts;
@@ -592,8 +592,8 @@ static struct nvme_ctrl *nvme_loop_create_ctrl(struct device *dev,
 	ctrl->ctrl.kato = opts->kato;
 	ctrl->port = nvme_loop_find_port(&ctrl->ctrl);

-	ctrl->queues = kcalloc(opts->nr_io_queues + 1, sizeof(*ctrl->queues),
-			GFP_KERNEL);
+	ctrl->queues = kzalloc_objs(*ctrl->queues, opts->nr_io_queues + 1,
+				    GFP_KERNEL);
 	if (!ctrl->queues)
 		goto out_uninit_ctrl;

diff --git a/drivers/nvme/target/passthru.c b/drivers/nvme/target/passthru.c
index 5d541c2a46a5..bac8b8f864ce 100644
--- a/drivers/nvme/target/passthru.c
+++ b/drivers/nvme/target/passthru.c
@@ -86,7 +86,7 @@ static u16 nvmet_passthru_override_id_ctrl(struct nvmet_req *req)
 	unsigned int max_hw_sectors;
 	int page_shift;

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id)
 		return NVME_SC_INTERNAL;

@@ -178,7 +178,7 @@ static u16 nvmet_passthru_override_id_ns(struct nvmet_req *req)
 	struct nvme_id_ns *id;
 	int i;

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id)
 		return NVME_SC_INTERNAL;

diff --git a/drivers/nvme/target/pci-epf.c b/drivers/nvme/target/pci-epf.c
index f858a6c9d7cb..f51a7de9f16a 100644
--- a/drivers/nvme/target/pci-epf.c
+++ b/drivers/nvme/target/pci-epf.c
@@ -502,9 +502,8 @@ static inline int nvmet_pci_epf_transfer(struct nvmet_pci_epf_ctrl *ctrl,

 static int nvmet_pci_epf_alloc_irq_vectors(struct nvmet_pci_epf_ctrl *ctrl)
 {
-	ctrl->irq_vectors = kcalloc(ctrl->nr_queues,
-				    sizeof(struct nvmet_pci_epf_irq_vector),
-				    GFP_KERNEL);
+	ctrl->irq_vectors = kzalloc_objs(struct nvmet_pci_epf_irq_vector,
+					 ctrl->nr_queues, GFP_KERNEL);
 	if (!ctrl->irq_vectors)
 		return -ENOMEM;

@@ -1563,13 +1562,13 @@ static int nvmet_pci_epf_alloc_queues(struct nvmet_pci_epf_ctrl *ctrl)
 {
 	unsigned int qid;

-	ctrl->sq = kcalloc(ctrl->nr_queues,
-			   sizeof(struct nvmet_pci_epf_queue), GFP_KERNEL);
+	ctrl->sq = kzalloc_objs(struct nvmet_pci_epf_queue, ctrl->nr_queues,
+				GFP_KERNEL);
 	if (!ctrl->sq)
 		return -ENOMEM;

-	ctrl->cq = kcalloc(ctrl->nr_queues,
-			   sizeof(struct nvmet_pci_epf_queue), GFP_KERNEL);
+	ctrl->cq = kzalloc_objs(struct nvmet_pci_epf_queue, ctrl->nr_queues,
+				GFP_KERNEL);
 	if (!ctrl->cq) {
 		kfree(ctrl->sq);
 		ctrl->sq = NULL;
diff --git a/drivers/nvme/target/pr.c b/drivers/nvme/target/pr.c
index cd22d8333314..254960a844ac 100644
--- a/drivers/nvme/target/pr.c
+++ b/drivers/nvme/target/pr.c
@@ -230,7 +230,7 @@ static u16 nvmet_pr_register(struct nvmet_req *req,
 	u16 status = NVME_SC_SUCCESS;
 	u64 nrkey = le64_to_cpu(d->nrkey);

-	new = kmalloc(sizeof(*new), GFP_KERNEL);
+	new = kmalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NVME_SC_INTERNAL;

@@ -331,7 +331,7 @@ static u16 nvmet_pr_update_reg_attr(struct nvmet_pr *pr,
 		return NVME_SC_SUCCESS;
 	}

-	new = kmalloc(sizeof(*new), GFP_ATOMIC);
+	new = kmalloc_obj(*new, GFP_ATOMIC);
 	if (!new)
 		return NVME_SC_INTERNAL;

@@ -380,7 +380,7 @@ static void nvmet_execute_pr_register(struct nvmet_req *req)
 	u8 reg_act = cdw10 & 0x07; /* Reservation Register Action, bit 02:00 */
 	u16 status;

-	d = kmalloc(sizeof(*d), GFP_KERNEL);
+	d = kmalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -662,7 +662,7 @@ static void nvmet_execute_pr_acquire(struct nvmet_req *req)
 		goto out;
 	}

-	d = kmalloc(sizeof(*d), GFP_KERNEL);
+	d = kmalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -773,7 +773,7 @@ static void nvmet_execute_pr_release(struct nvmet_req *req)
 		goto out;
 	}

-	d = kmalloc(sizeof(*d), GFP_KERNEL);
+	d = kmalloc_obj(*d, GFP_KERNEL);
 	if (!d) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -1013,7 +1013,7 @@ static int nvmet_pr_alloc_and_insert_pc_ref(struct nvmet_ns *ns,
 	struct nvmet_pr_per_ctrl_ref *pc_ref;
 	int ret;

-	pc_ref = kmalloc(sizeof(*pc_ref), GFP_ATOMIC);
+	pc_ref = kmalloc_obj(*pc_ref, GFP_ATOMIC);
 	if (!pc_ref)
 		return  -ENOMEM;

diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
index 9c12b2361a6d..ae2e27d9cc07 100644
--- a/drivers/nvme/target/rdma.c
+++ b/drivers/nvme/target/rdma.c
@@ -222,7 +222,7 @@ nvmet_rdma_get_rsp(struct nvmet_rdma_queue *queue)
 	if (unlikely(!rsp)) {
 		int ret;

-		rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
+		rsp = kzalloc_obj(*rsp, GFP_KERNEL);
 		if (unlikely(!rsp))
 			return NULL;
 		ret = nvmet_rdma_alloc_rsp(queue->dev, rsp,
@@ -317,7 +317,7 @@ static int nvmet_rdma_alloc_cmd(struct nvmet_rdma_device *ndev,
 			struct nvmet_rdma_cmd *c, bool admin)
 {
 	/* NVMe command / RDMA RECV */
-	c->nvme_cmd = kmalloc(sizeof(*c->nvme_cmd), GFP_KERNEL);
+	c->nvme_cmd = kmalloc_obj(*c->nvme_cmd, GFP_KERNEL);
 	if (!c->nvme_cmd)
 		goto out;

@@ -367,7 +367,7 @@ nvmet_rdma_alloc_cmds(struct nvmet_rdma_device *ndev,
 	struct nvmet_rdma_cmd *cmds;
 	int ret = -EINVAL, i;

-	cmds = kvcalloc(nr_cmds, sizeof(struct nvmet_rdma_cmd), GFP_KERNEL);
+	cmds = kvzalloc_objs(struct nvmet_rdma_cmd, nr_cmds, GFP_KERNEL);
 	if (!cmds)
 		goto out;

@@ -401,7 +401,7 @@ static int nvmet_rdma_alloc_rsp(struct nvmet_rdma_device *ndev,
 		struct nvmet_rdma_rsp *r, int tag)
 {
 	/* NVMe CQE / RDMA SEND */
-	r->req.cqe = kmalloc(sizeof(*r->req.cqe), GFP_KERNEL);
+	r->req.cqe = kmalloc_obj(*r->req.cqe, GFP_KERNEL);
 	if (!r->req.cqe)
 		goto out;

@@ -455,8 +455,7 @@ nvmet_rdma_alloc_rsps(struct nvmet_rdma_queue *queue)
 			NUMA_NO_NODE, false, true))
 		goto out;

-	queue->rsps = kvcalloc(nr_rsps, sizeof(struct nvmet_rdma_rsp),
-			GFP_KERNEL);
+	queue->rsps = kvzalloc_objs(struct nvmet_rdma_rsp, nr_rsps, GFP_KERNEL);
 	if (!queue->rsps)
 		goto out_free_sbitmap;

@@ -1096,7 +1095,7 @@ nvmet_rdma_init_srq(struct nvmet_rdma_device *ndev)
 	struct ib_srq *srq;
 	int ret, i;

-	nsrq = kzalloc(sizeof(*nsrq), GFP_KERNEL);
+	nsrq = kzalloc_obj(*nsrq, GFP_KERNEL);
 	if (!nsrq)
 		return ERR_PTR(-ENOMEM);

@@ -1155,7 +1154,7 @@ static int nvmet_rdma_init_srqs(struct nvmet_rdma_device *ndev)
 	ndev->srq_count = min(ndev->device->num_comp_vectors,
 			      ndev->device->attrs.max_srq);

-	ndev->srqs = kcalloc(ndev->srq_count, sizeof(*ndev->srqs), GFP_KERNEL);
+	ndev->srqs = kzalloc_objs(*ndev->srqs, ndev->srq_count, GFP_KERNEL);
 	if (!ndev->srqs)
 		return -ENOMEM;

@@ -1208,7 +1207,7 @@ nvmet_rdma_find_get_device(struct rdma_cm_id *cm_id)
 			goto out_unlock;
 	}

-	ndev = kzalloc(sizeof(*ndev), GFP_KERNEL);
+	ndev = kzalloc_obj(*ndev, GFP_KERNEL);
 	if (!ndev)
 		goto out_err;

@@ -1430,7 +1429,7 @@ nvmet_rdma_alloc_queue(struct nvmet_rdma_device *ndev,
 	struct nvmet_rdma_queue *queue;
 	int ret;

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue) {
 		ret = NVME_RDMA_CM_NO_RSC;
 		goto out_reject;
@@ -1924,7 +1923,7 @@ static int nvmet_rdma_add_port(struct nvmet_port *nport)
 	__kernel_sa_family_t af;
 	int ret;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
index bda816d66846..ac0a44bfa386 100644
--- a/drivers/nvme/target/tcp.c
+++ b/drivers/nvme/target/tcp.c
@@ -439,8 +439,7 @@ static int nvmet_tcp_map_data(struct nvmet_tcp_cmd *cmd)
 	cmd->cur_sg = cmd->req.sg;

 	if (nvmet_tcp_has_data_in(cmd)) {
-		cmd->iov = kmalloc_array(cmd->req.sg_cnt,
-				sizeof(*cmd->iov), GFP_KERNEL);
+		cmd->iov = kmalloc_objs(*cmd->iov, cmd->req.sg_cnt, GFP_KERNEL);
 		if (!cmd->iov)
 			goto err;
 	}
@@ -1513,7 +1512,7 @@ static int nvmet_tcp_alloc_cmds(struct nvmet_tcp_queue *queue)
 	struct nvmet_tcp_cmd *cmds;
 	int i, ret = -EINVAL, nr_cmds = queue->nr_cmds;

-	cmds = kvcalloc(nr_cmds, sizeof(struct nvmet_tcp_cmd), GFP_KERNEL);
+	cmds = kvzalloc_objs(struct nvmet_tcp_cmd, nr_cmds, GFP_KERNEL);
 	if (!cmds)
 		goto out;

@@ -1901,7 +1900,7 @@ static void nvmet_tcp_alloc_queue(struct nvmet_tcp_port *port,
 	struct file *sock_file = NULL;
 	int ret;

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue) {
 		ret = -ENOMEM;
 		goto out_release;
@@ -2037,7 +2036,7 @@ static int nvmet_tcp_add_port(struct nvmet_port *nport)
 	__kernel_sa_family_t af;
 	int ret;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/drivers/nvme/target/zns.c b/drivers/nvme/target/zns.c
index 15a579cf528c..e895f6b3a308 100644
--- a/drivers/nvme/target/zns.c
+++ b/drivers/nvme/target/zns.c
@@ -73,7 +73,7 @@ void nvmet_execute_identify_ctrl_zns(struct nvmet_req *req)
 	struct nvme_id_ctrl_zns *id;
 	u16 status;

-	id = kzalloc(sizeof(*id), GFP_KERNEL);
+	id = kzalloc_obj(*id, GFP_KERNEL);
 	if (!id) {
 		status = NVME_SC_INTERNAL;
 		goto out;
@@ -104,7 +104,7 @@ void nvmet_execute_identify_ns_zns(struct nvmet_req *req)
 		goto out;
 	}

-	id_zns = kzalloc(sizeof(*id_zns), GFP_KERNEL);
+	id_zns = kzalloc_obj(*id_zns, GFP_KERNEL);
 	if (!id_zns) {
 		status = NVME_SC_INTERNAL;
 		goto out;
diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index c6180cf1dd91..2c838c0b2b7d 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -650,7 +650,7 @@ int nvmem_add_one_cell(struct nvmem_device *nvmem,
 	struct nvmem_cell_entry *cell;
 	int rval;

-	cell = kzalloc(sizeof(*cell), GFP_KERNEL);
+	cell = kzalloc_obj(*cell, GFP_KERNEL);
 	if (!cell)
 		return -ENOMEM;

@@ -908,7 +908,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
 	if (!config->reg_read && !config->reg_write)
 		return ERR_PTR(-EINVAL);

-	nvmem = kzalloc(sizeof(*nvmem), GFP_KERNEL);
+	nvmem = kzalloc_obj(*nvmem, GFP_KERNEL);
 	if (!nvmem)
 		return ERR_PTR(-ENOMEM);

@@ -1295,7 +1295,7 @@ static struct nvmem_cell *nvmem_create_cell(struct nvmem_cell_entry *entry,
 	struct nvmem_cell *cell;
 	const char *name = NULL;

-	cell = kzalloc(sizeof(*cell), GFP_KERNEL);
+	cell = kzalloc_obj(*cell, GFP_KERNEL);
 	if (!cell)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/nvmem/layouts.c b/drivers/nvmem/layouts.c
index 7ebe53249035..13d5b9941059 100644
--- a/drivers/nvmem/layouts.c
+++ b/drivers/nvmem/layouts.c
@@ -96,7 +96,7 @@ static int nvmem_layout_create_device(struct nvmem_device *nvmem,
 	struct device *dev;
 	int ret;

-	layout = kzalloc(sizeof(*layout), GFP_KERNEL);
+	layout = kzalloc_obj(*layout, GFP_KERNEL);
 	if (!layout)
 		return -ENOMEM;

diff --git a/drivers/of/address.c b/drivers/of/address.c
index 4034d798c55a..590d2db007d2 100644
--- a/drivers/of/address.c
+++ b/drivers/of/address.c
@@ -929,7 +929,7 @@ int of_dma_get_range(struct device_node *np, const struct bus_dma_region **map)
 	if (!num_ranges)
 		return -EINVAL;

-	r = kcalloc(num_ranges + 1, sizeof(*r), GFP_KERNEL);
+	r = kzalloc_objs(*r, num_ranges + 1, GFP_KERNEL);
 	if (!r)
 		return -ENOMEM;

diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c
index 2eaaddcb0ec4..1b3cc351a895 100644
--- a/drivers/of/dynamic.c
+++ b/drivers/of/dynamic.c
@@ -411,7 +411,7 @@ struct property *__of_prop_dup(const struct property *prop, gfp_t allocflags)
 {
 	struct property *new;

-	new = kzalloc(sizeof(*new), allocflags);
+	new = kzalloc_obj(*new, allocflags);
 	if (!new)
 		return NULL;

@@ -454,7 +454,7 @@ struct device_node *__of_node_dup(const struct device_node *np,
 {
 	struct device_node *node;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return NULL;
 	node->full_name = kstrdup(full_name, GFP_KERNEL);
@@ -908,7 +908,7 @@ int of_changeset_action(struct of_changeset *ocs, unsigned long action,
 	if (WARN_ON(action >= ARRAY_SIZE(action_names)))
 		return -EINVAL;

-	ce = kzalloc(sizeof(*ce), GFP_KERNEL);
+	ce = kzalloc_obj(*ce, GFP_KERNEL);
 	if (!ce)
 		return -ENOMEM;

diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index f374d8b212b8..55c2de65a13a 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -669,7 +669,7 @@ void __init of_irq_init(const struct of_device_id *matches)
 		 * Here, we allocate and populate an of_intc_desc with the node
 		 * pointer, interrupt-parent device_node etc.
 		 */
-		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+		desc = kzalloc_obj(*desc, GFP_KERNEL);
 		if (!desc) {
 			of_node_put(np);
 			goto err;
diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c
index 31c5bc751d0d..0344c55300b6 100644
--- a/drivers/of/of_reserved_mem.c
+++ b/drivers/of/of_reserved_mem.c
@@ -646,7 +646,7 @@ int of_reserved_mem_device_init_by_idx(struct device *dev,
 	if (!rmem || !rmem->ops || !rmem->ops->device_init)
 		return -EINVAL;

-	rd = kmalloc(sizeof(struct rmem_assigned_device), GFP_KERNEL);
+	rd = kmalloc_obj(struct rmem_assigned_device, GFP_KERNEL);
 	if (!rd)
 		return -ENOMEM;

diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
index 5b4f42230e6c..87faec65c865 100644
--- a/drivers/of/overlay.c
+++ b/drivers/of/overlay.c
@@ -248,7 +248,7 @@ static struct property *dup_and_fixup_symbol_prop(
 		return NULL;
 	target_path_len = strlen(target_path);

-	new_prop = kzalloc(sizeof(*new_prop), GFP_KERNEL);
+	new_prop = kzalloc_obj(*new_prop, GFP_KERNEL);
 	if (!new_prop)
 		goto err_free_target_path;

@@ -784,7 +784,7 @@ static int init_overlay_changeset(struct overlay_changeset *ovcs,
 		of_node_put(node);
 	}

-	fragments = kcalloc(cnt, sizeof(*fragments), GFP_KERNEL);
+	fragments = kzalloc_objs(*fragments, cnt, GFP_KERNEL);
 	if (!fragments) {
 		ret = -ENOMEM;
 		goto err_out;
@@ -1009,7 +1009,7 @@ int of_overlay_fdt_apply(const void *overlay_fdt, u32 overlay_fdt_size,
 	if (overlay_fdt_size < size)
 		return -EINVAL;

-	ovcs = kzalloc(sizeof(*ovcs), GFP_KERNEL);
+	ovcs = kzalloc_obj(*ovcs, GFP_KERNEL);
 	if (!ovcs)
 		return -ENOMEM;

diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index d90b1677d84e..d9a717c47ad6 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -111,7 +111,7 @@ struct platform_device *of_device_alloc(struct device_node *np,

 	/* Populate the resource table */
 	if (num_reg) {
-		res = kcalloc(num_reg, sizeof(*res), GFP_KERNEL);
+		res = kzalloc_objs(*res, num_reg, GFP_KERNEL);
 		if (!res) {
 			platform_device_put(dev);
 			return NULL;
diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c
index a9cc2c990562..a8b70b49e780 100644
--- a/drivers/of/unittest.c
+++ b/drivers/of/unittest.c
@@ -197,7 +197,7 @@ static void __init of_unittest_dynamic(void)
 	}

 	/* Array of 4 properties for the purpose of testing */
-	prop = kcalloc(4, sizeof(*prop), GFP_KERNEL);
+	prop = kzalloc_objs(*prop, 4, GFP_KERNEL);
 	if (!prop) {
 		unittest(0, "kzalloc() failed\n");
 		return;
@@ -379,7 +379,7 @@ static void __init of_unittest_check_phandles(void)
 			}
 		}

-		nh = kzalloc(sizeof(*nh), GFP_KERNEL);
+		nh = kzalloc_obj(*nh, GFP_KERNEL);
 		if (!nh)
 			return;

@@ -1136,7 +1136,7 @@ static void __init of_unittest_dma_ranges_one(const char *path,
 		dma_addr_t	dma_addr;
 		struct device	*dev_bogus;

-		dev_bogus = kzalloc(sizeof(struct device), GFP_KERNEL);
+		dev_bogus = kzalloc_obj(struct device, GFP_KERNEL);
 		if (!dev_bogus) {
 			unittest(0, "kzalloc() failed\n");
 			kfree(map);
@@ -2275,7 +2275,7 @@ static int unittest_gpio_probe(struct platform_device *pdev)

 	unittest_gpio_probe_count++;

-	devptr = kzalloc(sizeof(*devptr), GFP_KERNEL);
+	devptr = kzalloc_obj(*devptr, GFP_KERNEL);
 	if (!devptr)
 		return -ENOMEM;

diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index ae43c656f108..a109d4dd5316 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -1532,7 +1532,7 @@ static struct opp_table *_allocate_opp_table(struct device *dev, int index)
 	 * Allocate a new OPP table. In the infrequent case where a new
 	 * device is needed to be added, we pay this penalty.
 	 */
-	opp_table = kzalloc(sizeof(*opp_table), GFP_KERNEL);
+	opp_table = kzalloc_obj(*opp_table, GFP_KERNEL);
 	if (!opp_table)
 		return ERR_PTR(-ENOMEM);

@@ -2260,9 +2260,8 @@ static int _opp_set_regulators(struct opp_table *opp_table, struct device *dev,
 	if (opp_table->regulators)
 		return 0;

-	opp_table->regulators = kmalloc_array(count,
-					      sizeof(*opp_table->regulators),
-					      GFP_KERNEL);
+	opp_table->regulators = kmalloc_objs(*opp_table->regulators, count,
+					     GFP_KERNEL);
 	if (!opp_table->regulators)
 		return -ENOMEM;

@@ -2364,8 +2363,7 @@ static int _opp_set_clknames(struct opp_table *opp_table, struct device *dev,
 	if (opp_table->clks)
 		return 0;

-	opp_table->clks = kmalloc_array(count, sizeof(*opp_table->clks),
-					GFP_KERNEL);
+	opp_table->clks = kmalloc_objs(*opp_table->clks, count, GFP_KERNEL);
 	if (!opp_table->clks)
 		return -ENOMEM;

@@ -2550,7 +2548,7 @@ int dev_pm_opp_set_config(struct device *dev, struct dev_pm_opp_config *config)
 	unsigned int id;
 	int ret;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/opp/cpu.c b/drivers/opp/cpu.c
index a6da7ee3ec76..9ea7c323a8b9 100644
--- a/drivers/opp/cpu.c
+++ b/drivers/opp/cpu.c
@@ -51,7 +51,7 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev,
 	if (max_opps <= 0)
 		return max_opps ? max_opps : -ENODATA;

-	freq_table = kcalloc((max_opps + 1), sizeof(*freq_table), GFP_KERNEL);
+	freq_table = kzalloc_objs(*freq_table, (max_opps + 1), GFP_KERNEL);
 	if (!freq_table)
 		return -ENOMEM;

diff --git a/drivers/opp/of.c b/drivers/opp/of.c
index a268c2b250c0..a6e16f406289 100644
--- a/drivers/opp/of.c
+++ b/drivers/opp/of.c
@@ -303,7 +303,8 @@ static int _of_opp_alloc_required_opps(struct opp_table *opp_table,
 	if (!count)
 		return 0;

-	opp->required_opps = kcalloc(count, sizeof(*opp->required_opps), GFP_KERNEL);
+	opp->required_opps = kzalloc_objs(*opp->required_opps, count,
+					  GFP_KERNEL);
 	if (!opp->required_opps)
 		return -ENOMEM;

@@ -469,7 +470,7 @@ int dev_pm_opp_of_find_icc_paths(struct device *dev,
 	}

 	num_paths = count / 2;
-	paths = kcalloc(num_paths, sizeof(*paths), GFP_KERNEL);
+	paths = kzalloc_objs(*paths, num_paths, GFP_KERNEL);
 	if (!paths)
 		return -ENOMEM;

diff --git a/drivers/opp/ti-opp-supply.c b/drivers/opp/ti-opp-supply.c
index 5f0fb3ea385b..b4281f85415b 100644
--- a/drivers/opp/ti-opp-supply.c
+++ b/drivers/opp/ti-opp-supply.c
@@ -127,8 +127,7 @@ static int _store_optimized_voltages(struct device *dev,
 		goto out;
 	}

-	table = kcalloc(data->num_vdd_table, sizeof(*data->vdd_table),
-			GFP_KERNEL);
+	table = kzalloc_objs(*data->vdd_table, data->num_vdd_table, GFP_KERNEL);
 	if (!table) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
index 4e7071714356..78bee83bcadd 100644
--- a/drivers/parisc/ccio-dma.c
+++ b/drivers/parisc/ccio-dma.c
@@ -1520,7 +1520,7 @@ static int __init ccio_probe(struct parisc_device *dev)
 	struct ioc *ioc, **ioc_p = &ioc_list;
 	struct pci_hba_data *hba;

-	ioc = kzalloc(sizeof(struct ioc), GFP_KERNEL);
+	ioc = kzalloc_obj(struct ioc, GFP_KERNEL);
 	if (ioc == NULL) {
 		printk(KERN_ERR MODULE_NAME ": memory allocation failure\n");
 		return -ENOMEM;
@@ -1550,7 +1550,7 @@ static int __init ccio_probe(struct parisc_device *dev)
 	}
 	hppa_dma_ops = &ccio_ops;

-	hba = kzalloc(sizeof(*hba), GFP_KERNEL);
+	hba = kzalloc_obj(*hba, GFP_KERNEL);
 	/* if this fails, no I/O cards will work, so may as well bug */
 	BUG_ON(hba == NULL);

diff --git a/drivers/parisc/dino.c b/drivers/parisc/dino.c
index 01a50a051296..58c1f5433cbb 100644
--- a/drivers/parisc/dino.c
+++ b/drivers/parisc/dino.c
@@ -990,7 +990,7 @@ static int __init dino_probe(struct parisc_device *dev)
 */
 	}

-	dino_dev = kzalloc(sizeof(struct dino_device), GFP_KERNEL);
+	dino_dev = kzalloc_obj(struct dino_device, GFP_KERNEL);
 	if (!dino_dev) {
 		printk("dino_init_chip - couldn't alloc dino_device\n");
 		return 1;
diff --git a/drivers/parisc/eisa_enumerator.c b/drivers/parisc/eisa_enumerator.c
index f0cb31198a8f..88cca5035c67 100644
--- a/drivers/parisc/eisa_enumerator.c
+++ b/drivers/parisc/eisa_enumerator.c
@@ -86,7 +86,7 @@ static int configure_memory(const unsigned char *buf,
 	for (i=0;i<HPEE_MEMORY_MAX_ENT;i++) {
 		c = get_8(buf+len);

-		if (NULL != (res = kzalloc(sizeof(struct resource), GFP_KERNEL))) {
+		if (NULL != (res = kzalloc_obj(struct resource, GFP_KERNEL))) {
 			int result;

 			res->name = name;
@@ -178,7 +178,7 @@ static int configure_port(const unsigned char *buf, struct resource *io_parent,
 	for (i=0;i<HPEE_PORT_MAX_ENT;i++) {
 		c = get_8(buf+len);

-		if (NULL != (res = kzalloc(sizeof(struct resource), GFP_KERNEL))) {
+		if (NULL != (res = kzalloc_obj(struct resource, GFP_KERNEL))) {
 			res->name = board;
 			res->start = get_16(buf+len+1);
 			res->end = get_16(buf+len+1)+(c&HPEE_PORT_SIZE_MASK)+1;
diff --git a/drivers/parisc/hppb.c b/drivers/parisc/hppb.c
index 0f9d80384e3d..72f9e7762cc5 100644
--- a/drivers/parisc/hppb.c
+++ b/drivers/parisc/hppb.c
@@ -54,7 +54,7 @@ static int __init hppb_probe(struct parisc_device *dev)
 	}

 	if(card->hpa) {
-		card->next = kzalloc(sizeof(struct hppb_card), GFP_KERNEL);
+		card->next = kzalloc_obj(struct hppb_card, GFP_KERNEL);
 		if(!card->next) {
 			printk(KERN_ERR "HP-PB: Unable to allocate memory.\n");
 			return 1;
diff --git a/drivers/parisc/iosapic.c b/drivers/parisc/iosapic.c
index a42552608fe4..e8a60a1bfd43 100644
--- a/drivers/parisc/iosapic.c
+++ b/drivers/parisc/iosapic.c
@@ -221,7 +221,7 @@ static size_t irt_num_entry;

 static struct irt_entry *iosapic_alloc_irt(int num_entries)
 {
-	return kcalloc(num_entries, sizeof(struct irt_entry), GFP_KERNEL);
+	return kzalloc_objs(struct irt_entry, num_entries, GFP_KERNEL);
 }

 /**
@@ -915,7 +915,7 @@ void *iosapic_register(unsigned long hpa, void __iomem *vaddr)
 		return NULL;
 	}

-	isi = kzalloc(sizeof(struct iosapic_info), GFP_KERNEL);
+	isi = kzalloc_obj(struct iosapic_info, GFP_KERNEL);
 	if (!isi) {
 		BUG();
 		return NULL;
@@ -927,8 +927,8 @@ void *iosapic_register(unsigned long hpa, void __iomem *vaddr)
 	isi->isi_num_vectors = IOSAPIC_IRDT_MAX_ENTRY(isi->isi_version) + 1;
 	DBG_IRT("iosapic_register: num vectors = %d\n", isi->isi_num_vectors);

-	vip = isi->isi_vector = kcalloc(isi->isi_num_vectors,
-					sizeof(struct vector_info), GFP_KERNEL);
+	vip = isi->isi_vector = kzalloc_objs(struct vector_info,
+					     isi->isi_num_vectors, GFP_KERNEL);
 	if (vip == NULL) {
 		kfree(isi);
 		return NULL;
diff --git a/drivers/parisc/lasi.c b/drivers/parisc/lasi.c
index 73c93e9cfa51..f9cb9bb3af77 100644
--- a/drivers/parisc/lasi.c
+++ b/drivers/parisc/lasi.c
@@ -162,7 +162,7 @@ static int __init lasi_init_chip(struct parisc_device *dev)
 	struct gsc_asic *lasi;
 	int ret;

-	lasi = kzalloc(sizeof(*lasi), GFP_KERNEL);
+	lasi = kzalloc_obj(*lasi, GFP_KERNEL);
 	if (!lasi)
 		return -ENOMEM;

diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c
index 1d29fa13650b..c608854c2f0d 100644
--- a/drivers/parisc/lba_pci.c
+++ b/drivers/parisc/lba_pci.c
@@ -1025,11 +1025,11 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
 	pdc_pat_cell_mod_maddr_block_t *io_pdc_cell;	/* IO_VIEW */
 	int i;

-	pa_pdc_cell = kzalloc(sizeof(pdc_pat_cell_mod_maddr_block_t), GFP_KERNEL);
+	pa_pdc_cell = kzalloc_obj(pdc_pat_cell_mod_maddr_block_t, GFP_KERNEL);
 	if (!pa_pdc_cell)
 		return;

-	io_pdc_cell = kzalloc(sizeof(pdc_pat_cell_mod_maddr_block_t), GFP_KERNEL);
+	io_pdc_cell = kzalloc_obj(pdc_pat_cell_mod_maddr_block_t, GFP_KERNEL);
 	if (!io_pdc_cell) {
 		kfree(pa_pdc_cell);
 		return;
@@ -1546,7 +1546,7 @@ lba_driver_probe(struct parisc_device *dev)
 	**	have an IRT entry will get NULL back from iosapic code.
 	*/

-	lba_dev = kzalloc(sizeof(struct lba_device), GFP_KERNEL);
+	lba_dev = kzalloc_obj(struct lba_device, GFP_KERNEL);
 	if (!lba_dev) {
 		printk(KERN_ERR "lba_init_chip - couldn't alloc lba_device\n");
 		return(1);
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
index eefb2bac8443..9eadbfd70663 100644
--- a/drivers/parisc/sba_iommu.c
+++ b/drivers/parisc/sba_iommu.c
@@ -1939,7 +1939,7 @@ static int __init sba_driver_callback(struct parisc_device *dev)
 	printk(KERN_INFO "%s found %s at 0x%llx\n",
 		MODULE_NAME, version, (unsigned long long)dev->hpa.start);

-	sba_dev = kzalloc(sizeof(struct sba_device), GFP_KERNEL);
+	sba_dev = kzalloc_obj(struct sba_device, GFP_KERNEL);
 	if (!sba_dev) {
 		printk(KERN_ERR MODULE_NAME " - couldn't alloc sba_device\n");
 		return -ENOMEM;
diff --git a/drivers/parisc/wax.c b/drivers/parisc/wax.c
index 834dbe9a767b..94947be33bd0 100644
--- a/drivers/parisc/wax.c
+++ b/drivers/parisc/wax.c
@@ -70,7 +70,7 @@ static int __init wax_init_chip(struct parisc_device *dev)
 	struct parisc_device *parent;
 	int ret;

-	wax = kzalloc(sizeof(*wax), GFP_KERNEL);
+	wax = kzalloc_obj(*wax, GFP_KERNEL);
 	if (!wax)
 		return -ENOMEM;

diff --git a/drivers/parport/daisy.c b/drivers/parport/daisy.c
index 2231dbfd870d..2e3b95ae2718 100644
--- a/drivers/parport/daisy.c
+++ b/drivers/parport/daisy.c
@@ -51,7 +51,7 @@ static int assign_addrs(struct parport *port);
 static void add_dev(int devnum, struct parport *port, int daisy)
 {
 	struct daisydev *newdev, **p;
-	newdev = kmalloc(sizeof(struct daisydev), GFP_KERNEL);
+	newdev = kmalloc_obj(struct daisydev, GFP_KERNEL);
 	if (newdev) {
 		newdev->port = port;
 		newdev->daisy = daisy;
diff --git a/drivers/parport/parport_cs.c b/drivers/parport/parport_cs.c
index 8e7e3ac4bb87..f8318db9a75f 100644
--- a/drivers/parport/parport_cs.c
+++ b/drivers/parport/parport_cs.c
@@ -87,7 +87,7 @@ static int parport_probe(struct pcmcia_device *link)
     dev_dbg(&link->dev, "parport_attach()\n");

     /* Create new parport device */
-    info = kzalloc(sizeof(*info), GFP_KERNEL);
+    info = kzalloc_obj(*info, GFP_KERNEL);
     if (!info) return -ENOMEM;
     link->priv = info;
     info->p_dev = link;
diff --git a/drivers/parport/parport_gsc.c b/drivers/parport/parport_gsc.c
index c7e18382dc01..f442c1fb0d7a 100644
--- a/drivers/parport/parport_gsc.c
+++ b/drivers/parport/parport_gsc.c
@@ -234,7 +234,7 @@ static struct parport *parport_gsc_probe_port(unsigned long base,
 	struct parport tmp;
 	struct parport *p = &tmp;

-	priv = kzalloc (sizeof (struct parport_gsc_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct parport_gsc_private, GFP_KERNEL);
 	if (!priv) {
 		printk(KERN_DEBUG "parport (0x%lx): no memory!\n", base);
 		return NULL;
diff --git a/drivers/parport/parport_ip32.c b/drivers/parport/parport_ip32.c
index 0919ed99ba94..84c4bba2756e 100644
--- a/drivers/parport/parport_ip32.c
+++ b/drivers/parport/parport_ip32.c
@@ -2031,8 +2031,8 @@ static __init struct parport *parport_ip32_probe_port(void)
 	parport_ip32_make_isa_registers(&regs, &mace->isa.parallel,
 					&mace->isa.ecp1284, 8 /* regshift */);

-	ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL);
-	priv = kmalloc(sizeof(struct parport_ip32_private), GFP_KERNEL);
+	ops = kmalloc_obj(struct parport_operations, GFP_KERNEL);
+	priv = kmalloc_obj(struct parport_ip32_private, GFP_KERNEL);
 	p = parport_register_port(0, PARPORT_IRQ_NONE, PARPORT_DMA_NONE, ops);
 	if (ops == NULL || priv == NULL || p == NULL) {
 		err = -ENOMEM;
diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
index f33b5d1ddfc1..99d44864b9ff 100644
--- a/drivers/parport/parport_pc.c
+++ b/drivers/parport/parport_pc.c
@@ -2056,11 +2056,11 @@ static struct parport *__parport_pc_probe_port(unsigned long int base,
 		}
 	}

-	ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL);
+	ops = kmalloc_obj(struct parport_operations, GFP_KERNEL);
 	if (!ops)
 		goto out1;

-	priv = kmalloc(sizeof(struct parport_pc_private), GFP_KERNEL);
+	priv = kmalloc_obj(struct parport_pc_private, GFP_KERNEL);
 	if (!priv)
 		goto out2;

@@ -2880,7 +2880,7 @@ static int parport_pc_pci_probe(struct pci_dev *dev,
 	if (err)
 		return err;

-	data = kmalloc(sizeof(struct pci_parport_data), GFP_KERNEL);
+	data = kmalloc_obj(struct pci_parport_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/parport/share.c b/drivers/parport/share.c
index 427abdf3c4c4..44e5d37afbf8 100644
--- a/drivers/parport/share.c
+++ b/drivers/parport/share.c
@@ -430,7 +430,7 @@ struct parport *parport_register_port(unsigned long base, int irq, int dma,
 	int device;
 	int ret;

-	tmp = kzalloc(sizeof(struct parport), GFP_KERNEL);
+	tmp = kzalloc_obj(struct parport, GFP_KERNEL);
 	if (!tmp)
 		return NULL;

@@ -709,11 +709,11 @@ parport_register_dev_model(struct parport *port, const char *name,

 	parport_get_port(port);

-	par_dev = kzalloc(sizeof(*par_dev), GFP_KERNEL);
+	par_dev = kzalloc_obj(*par_dev, GFP_KERNEL);
 	if (!par_dev)
 		goto err_put_port;

-	par_dev->state = kzalloc(sizeof(*par_dev->state), GFP_KERNEL);
+	par_dev->state = kzalloc_obj(*par_dev->state, GFP_KERNEL);
 	if (!par_dev->state)
 		goto err_put_par_dev;

diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
index 51af9e6c541c..e71aeecba11d 100644
--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -65,7 +65,7 @@ void pci_bus_add_resource(struct pci_bus *bus, struct resource *res)
 {
 	struct pci_bus_resource *bus_res;

-	bus_res = kzalloc(sizeof(struct pci_bus_resource), GFP_KERNEL);
+	bus_res = kzalloc_obj(struct pci_bus_resource, GFP_KERNEL);
 	if (!bus_res) {
 		dev_err(&bus->dev, "can't add %pR resource\n", res);
 		return;
diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c
index 7fcba05cec30..3f106bd9fe7e 100644
--- a/drivers/pci/controller/pci-hyperv.c
+++ b/drivers/pci/controller/pci-hyperv.c
@@ -945,7 +945,7 @@ static int hv_pci_irqchip_init(void)
 	struct irq_domain *irq_domain_parent = NULL;
 	int ret = -ENOMEM;

-	chip_data = kzalloc(sizeof(*chip_data), GFP_KERNEL);
+	chip_data = kzalloc_obj(*chip_data, GFP_KERNEL);
 	if (!chip_data)
 		return ret;

@@ -1932,7 +1932,7 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
 		hv_int_desc_free(hpdev, int_desc);
 	}

-	int_desc = kzalloc(sizeof(*int_desc), GFP_ATOMIC);
+	int_desc = kzalloc_obj(*int_desc, GFP_ATOMIC);
 	if (!int_desc)
 		goto drop_reference;

@@ -2592,7 +2592,7 @@ static struct hv_pci_dev *new_pcichild_device(struct hv_pcibus_device *hbus,
 	unsigned long flags;
 	int ret;

-	hpdev = kzalloc(sizeof(*hpdev), GFP_KERNEL);
+	hpdev = kzalloc_obj(*hpdev, GFP_KERNEL);
 	if (!hpdev)
 		return NULL;

@@ -2831,7 +2831,7 @@ static int hv_pci_start_relations_work(struct hv_pcibus_device *hbus,
 		return -ENOENT;
 	}

-	dr_wrk = kzalloc(sizeof(*dr_wrk), GFP_NOWAIT);
+	dr_wrk = kzalloc_obj(*dr_wrk, GFP_NOWAIT);
 	if (!dr_wrk)
 		return -ENOMEM;

@@ -2871,8 +2871,7 @@ static void hv_pci_devices_present(struct hv_pcibus_device *hbus,
 	struct hv_dr_state *dr;
 	int i;

-	dr = kzalloc(struct_size(dr, func, relations->device_count),
-		     GFP_NOWAIT);
+	dr = kzalloc_flex(*dr, func, relations->device_count, GFP_NOWAIT);
 	if (!dr)
 		return;

@@ -2906,8 +2905,7 @@ static void hv_pci_devices_present2(struct hv_pcibus_device *hbus,
 	struct hv_dr_state *dr;
 	int i;

-	dr = kzalloc(struct_size(dr, func, relations->device_count),
-		     GFP_NOWAIT);
+	dr = kzalloc_flex(*dr, func, relations->device_count, GFP_NOWAIT);
 	if (!dr)
 		return;

@@ -3715,7 +3713,7 @@ static int hv_pci_probe(struct hv_device *hdev,
 	if (!bridge)
 		return -ENOMEM;

-	hbus = kzalloc(sizeof(*hbus), GFP_KERNEL);
+	hbus = kzalloc_obj(*hbus, GFP_KERNEL);
 	if (!hbus)
 		return -ENOMEM;

diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
index ec6afc38e898..44bfe301b557 100644
--- a/drivers/pci/controller/vmd.c
+++ b/drivers/pci/controller/vmd.c
@@ -270,7 +270,7 @@ static int vmd_msi_alloc(struct irq_domain *domain, unsigned int virq,
 	struct vmd_irq *vmdirq;

 	for (int i = 0; i < nr_irqs; ++i) {
-		vmdirq = kzalloc(sizeof(*vmdirq), GFP_KERNEL);
+		vmdirq = kzalloc_obj(*vmdirq, GFP_KERNEL);
 		if (!vmdirq) {
 			vmd_msi_free(domain, virq, i);
 			return -ENOMEM;
diff --git a/drivers/pci/doe.c b/drivers/pci/doe.c
index 62be9c8dbc52..811276ae9b13 100644
--- a/drivers/pci/doe.c
+++ b/drivers/pci/doe.c
@@ -167,7 +167,7 @@ static int pci_doe_sysfs_feature_populate(struct pci_dev *pdev,
 	xa_for_each(&doe_mb->feats, i, entry)
 		num_features++;

-	attrs = kcalloc(num_features, sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_objs(*attrs, num_features, GFP_KERNEL);
 	if (!attrs) {
 		pci_warn(pdev, "Failed allocating the device_attribute array\n");
 		return -ENOMEM;
@@ -641,7 +641,7 @@ static struct pci_doe_mb *pci_doe_create_mb(struct pci_dev *pdev,
 	struct pci_doe_mb *doe_mb;
 	int rc;

-	doe_mb = kzalloc(sizeof(*doe_mb), GFP_KERNEL);
+	doe_mb = kzalloc_obj(*doe_mb, GFP_KERNEL);
 	if (!doe_mb)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/pci/ecam.c b/drivers/pci/ecam.c
index 260b7de2dbd5..8c7559e73bb6 100644
--- a/drivers/pci/ecam.c
+++ b/drivers/pci/ecam.c
@@ -37,7 +37,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev,
 	if (busr->start > busr->end)
 		return ERR_PTR(-EINVAL);

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return ERR_PTR(-ENOMEM);

@@ -75,7 +75,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev,
 	}

 	if (per_bus_mapping) {
-		cfg->winp = kcalloc(bus_range, sizeof(*cfg->winp), GFP_KERNEL);
+		cfg->winp = kzalloc_objs(*cfg->winp, bus_range, GFP_KERNEL);
 		if (!cfg->winp)
 			goto err_exit_malloc;
 	} else {
diff --git a/drivers/pci/endpoint/functions/pci-epf-mhi.c b/drivers/pci/endpoint/functions/pci-epf-mhi.c
index 27de533f0571..ccee5c6b6ad7 100644
--- a/drivers/pci/endpoint/functions/pci-epf-mhi.c
+++ b/drivers/pci/endpoint/functions/pci-epf-mhi.c
@@ -525,7 +525,7 @@ static int pci_epf_mhi_edma_read_async(struct mhi_ep_cntrl *mhi_cntrl,
 		goto err_unmap;
 	}

-	transfer = kzalloc(sizeof(*transfer), GFP_KERNEL);
+	transfer = kzalloc_obj(*transfer, GFP_KERNEL);
 	if (!transfer) {
 		ret = -ENOMEM;
 		goto err_unmap;
@@ -604,7 +604,7 @@ static int pci_epf_mhi_edma_write_async(struct mhi_ep_cntrl *mhi_cntrl,
 		goto err_unmap;
 	}

-	transfer = kzalloc(sizeof(*transfer), GFP_KERNEL);
+	transfer = kzalloc_obj(*transfer, GFP_KERNEL);
 	if (!transfer) {
 		ret = -ENOMEM;
 		goto err_unmap;
diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c
index 0cb7af0919dc..69f6ac37cdd0 100644
--- a/drivers/pci/endpoint/functions/pci-epf-test.c
+++ b/drivers/pci/endpoint/functions/pci-epf-test.c
@@ -872,7 +872,7 @@ static void pci_epf_test_bar_subrange_setup(struct pci_epf_test *epf_test,

 	sub_size = bar->size / nsub;

-	submap = kcalloc(nsub, sizeof(*submap), GFP_KERNEL);
+	submap = kzalloc_objs(*submap, nsub, GFP_KERNEL);
 	if (!submap)
 		goto err;

diff --git a/drivers/pci/endpoint/pci-ep-cfs.c b/drivers/pci/endpoint/pci-ep-cfs.c
index 8b392a8363bb..6c14cf85d336 100644
--- a/drivers/pci/endpoint/pci-ep-cfs.c
+++ b/drivers/pci/endpoint/pci-ep-cfs.c
@@ -274,7 +274,7 @@ struct config_group *pci_ep_cfs_add_epc_group(const char *name)
 	struct config_group *group;
 	struct pci_epc_group *epc_group;

-	epc_group = kzalloc(sizeof(*epc_group), GFP_KERNEL);
+	epc_group = kzalloc_obj(*epc_group, GFP_KERNEL);
 	if (!epc_group) {
 		ret = -ENOMEM;
 		goto err;
@@ -599,7 +599,7 @@ static struct config_group *pci_epf_make(struct config_group *group,
 	char *epf_name;
 	int index, err;

-	epf_group = kzalloc(sizeof(*epf_group), GFP_KERNEL);
+	epf_group = kzalloc_obj(*epf_group, GFP_KERNEL);
 	if (!epf_group)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-ep-msi.c
index 1b58357b905f..4625dc9827bc 100644
--- a/drivers/pci/endpoint/pci-ep-msi.c
+++ b/drivers/pci/endpoint/pci-ep-msi.c
@@ -67,7 +67,7 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db)

 	dev_set_msi_domain(epc->dev.parent, domain);

-	msg = kcalloc(num_db, sizeof(struct pci_epf_doorbell_msg), GFP_KERNEL);
+	msg = kzalloc_objs(struct pci_epf_doorbell_msg, num_db, GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c
index 068155819c57..d6998e637d3c 100644
--- a/drivers/pci/endpoint/pci-epc-core.c
+++ b/drivers/pci/endpoint/pci-epc-core.c
@@ -982,7 +982,7 @@ __pci_epc_create(struct device *dev, const struct pci_epc_ops *ops,
 		goto err_ret;
 	}

-	epc = kzalloc(sizeof(*epc), GFP_KERNEL);
+	epc = kzalloc_obj(*epc, GFP_KERNEL);
 	if (!epc) {
 		ret = -ENOMEM;
 		goto err_ret;
diff --git a/drivers/pci/endpoint/pci-epc-mem.c b/drivers/pci/endpoint/pci-epc-mem.c
index 218a60e945db..a3b5f8d1767c 100644
--- a/drivers/pci/endpoint/pci-epc-mem.c
+++ b/drivers/pci/endpoint/pci-epc-mem.c
@@ -62,7 +62,7 @@ int pci_epc_multi_mem_init(struct pci_epc *epc,
 	if (!windows || !num_windows)
 		return -EINVAL;

-	epc->windows = kcalloc(num_windows, sizeof(*epc->windows), GFP_KERNEL);
+	epc->windows = kzalloc_objs(*epc->windows, num_windows, GFP_KERNEL);
 	if (!epc->windows)
 		return -ENOMEM;

@@ -74,7 +74,7 @@ int pci_epc_multi_mem_init(struct pci_epc *epc,
 		pages = windows[i].size >> page_shift;
 		bitmap_size = BITS_TO_LONGS(pages) * sizeof(long);

-		mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+		mem = kzalloc_obj(*mem, GFP_KERNEL);
 		if (!mem) {
 			ret = -ENOMEM;
 			i--;
diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c
index 9a505c796370..c44f4ddfd60b 100644
--- a/drivers/pci/endpoint/pci-epf-core.c
+++ b/drivers/pci/endpoint/pci-epf-core.c
@@ -535,7 +535,7 @@ struct pci_epf *pci_epf_create(const char *name)
 	struct device *dev;
 	int len;

-	epf = kzalloc(sizeof(*epf), GFP_KERNEL);
+	epf = kzalloc_obj(*epf, GFP_KERNEL);
 	if (!epf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/pci/hotplug/acpiphp_core.c b/drivers/pci/hotplug/acpiphp_core.c
index 9dad14e80bcf..051af60f999a 100644
--- a/drivers/pci/hotplug/acpiphp_core.c
+++ b/drivers/pci/hotplug/acpiphp_core.c
@@ -260,7 +260,7 @@ int acpiphp_register_hotplug_slot(struct acpiphp_slot *acpiphp_slot,
 	int retval = -ENOMEM;
 	char name[SLOT_NAME_SIZE];

-	slot = kzalloc(sizeof(*slot), GFP_KERNEL);
+	slot = kzalloc_obj(*slot, GFP_KERNEL);
 	if (!slot)
 		goto error;

diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index 5b1f271c6034..55620e29b457 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -60,7 +60,7 @@ static struct acpiphp_context *acpiphp_init_context(struct acpi_device *adev)
 {
 	struct acpiphp_context *context;

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return NULL;

@@ -279,7 +279,7 @@ static acpi_status acpiphp_add_context(acpi_handle handle, u32 lvl, void *data,
 		if (slot->device == device)
 			goto slot_found;

-	slot = kzalloc(sizeof(struct acpiphp_slot), GFP_KERNEL);
+	slot = kzalloc_obj(struct acpiphp_slot, GFP_KERNEL);
 	if (!slot) {
 		acpi_lock_hp_context();
 		acpiphp_put_context(context);
@@ -869,7 +869,7 @@ void acpiphp_enumerate_slots(struct pci_bus *bus)
 		return;

 	handle = adev->handle;
-	bridge = kzalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL);
+	bridge = kzalloc_obj(struct acpiphp_bridge, GFP_KERNEL);
 	if (!bridge)
 		return;

@@ -889,7 +889,7 @@ void acpiphp_enumerate_slots(struct pci_bus *bus)
 	if (pci_is_root_bus(bridge->pci_bus)) {
 		struct acpiphp_root_context *root_context;

-		root_context = kzalloc(sizeof(*root_context), GFP_KERNEL);
+		root_context = kzalloc_obj(*root_context, GFP_KERNEL);
 		if (!root_context)
 			goto err;

diff --git a/drivers/pci/hotplug/acpiphp_ibm.c b/drivers/pci/hotplug/acpiphp_ibm.c
index 18e01cd55a8e..f86e39e9dd68 100644
--- a/drivers/pci/hotplug/acpiphp_ibm.c
+++ b/drivers/pci/hotplug/acpiphp_ibm.c
@@ -141,7 +141,7 @@ static union apci_descriptor *ibm_slot_from_id(int id)

 ibm_slot_done:
 	if (ret) {
-		ret = kmalloc(sizeof(union apci_descriptor), GFP_KERNEL);
+		ret = kmalloc_obj(union apci_descriptor, GFP_KERNEL);
 		if (ret)
 			memcpy(ret, des, sizeof(union apci_descriptor));
 	}
diff --git a/drivers/pci/hotplug/cpci_hotplug_core.c b/drivers/pci/hotplug/cpci_hotplug_core.c
index dd93e53ea7c2..50793ca10526 100644
--- a/drivers/pci/hotplug/cpci_hotplug_core.c
+++ b/drivers/pci/hotplug/cpci_hotplug_core.c
@@ -189,7 +189,7 @@ cpci_hp_register_bus(struct pci_bus *bus, u8 first, u8 last)
 	 * with the pci_hotplug subsystem.
 	 */
 	for (i = first; i <= last; ++i) {
-		slot = kzalloc(sizeof(struct slot), GFP_KERNEL);
+		slot = kzalloc_obj(struct slot, GFP_KERNEL);
 		if (!slot) {
 			status = -ENOMEM;
 			goto error;
diff --git a/drivers/pci/hotplug/cpqphp_core.c b/drivers/pci/hotplug/cpqphp_core.c
index 47a3ed16159a..158859352185 100644
--- a/drivers/pci/hotplug/cpqphp_core.c
+++ b/drivers/pci/hotplug/cpqphp_core.c
@@ -593,7 +593,7 @@ static int ctrl_slot_setup(struct controller *ctrl,
 	slot_number = ctrl->first_slot;

 	while (number_of_slots) {
-		slot = kzalloc(sizeof(*slot), GFP_KERNEL);
+		slot = kzalloc_obj(*slot, GFP_KERNEL);
 		if (!slot) {
 			result = -ENOMEM;
 			goto error;
@@ -822,7 +822,7 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		goto err_disable_device;
 	}

-	ctrl = kzalloc(sizeof(struct controller), GFP_KERNEL);
+	ctrl = kzalloc_obj(struct controller, GFP_KERNEL);
 	if (!ctrl) {
 		rc = -ENOMEM;
 		goto err_disable_device;
diff --git a/drivers/pci/hotplug/cpqphp_ctrl.c b/drivers/pci/hotplug/cpqphp_ctrl.c
index 760a5dec0431..2c63bdc61306 100644
--- a/drivers/pci/hotplug/cpqphp_ctrl.c
+++ b/drivers/pci/hotplug/cpqphp_ctrl.c
@@ -428,7 +428,7 @@ static struct pci_resource *do_pre_bridge_resource_split(struct pci_resource **h
 		/* this one isn't an aligned length, so we'll make a new entry
 		 * and split it up.
 		 */
-		split_node = kmalloc(sizeof(*split_node), GFP_KERNEL);
+		split_node = kmalloc_obj(*split_node, GFP_KERNEL);

 		if (!split_node)
 			return NULL;
@@ -553,7 +553,7 @@ static struct pci_resource *get_io_resource(struct pci_resource **head, u32 size
 			if ((node->length - (temp_dword - node->base)) < size)
 				continue;

-			split_node = kmalloc(sizeof(*split_node), GFP_KERNEL);
+			split_node = kmalloc_obj(*split_node, GFP_KERNEL);

 			if (!split_node)
 				return NULL;
@@ -573,7 +573,7 @@ static struct pci_resource *get_io_resource(struct pci_resource **head, u32 size
 			/* this one is longer than we need
 			 * so we'll make a new entry and split it up
 			 */
-			split_node = kmalloc(sizeof(*split_node), GFP_KERNEL);
+			split_node = kmalloc_obj(*split_node, GFP_KERNEL);

 			if (!split_node)
 				return NULL;
@@ -650,7 +650,7 @@ static struct pci_resource *get_max_resource(struct pci_resource **head, u32 siz
 			if ((max->length - (temp_dword - max->base)) < size)
 				continue;

-			split_node = kmalloc(sizeof(*split_node), GFP_KERNEL);
+			split_node = kmalloc_obj(*split_node, GFP_KERNEL);

 			if (!split_node)
 				return NULL;
@@ -668,7 +668,7 @@ static struct pci_resource *get_max_resource(struct pci_resource **head, u32 siz
 			/* this one isn't end aligned properly at the top
 			 * so we'll make a new entry and split it up
 			 */
-			split_node = kmalloc(sizeof(*split_node), GFP_KERNEL);
+			split_node = kmalloc_obj(*split_node, GFP_KERNEL);

 			if (!split_node)
 				return NULL;
@@ -747,7 +747,7 @@ static struct pci_resource *get_resource(struct pci_resource **head, u32 size)
 			if ((node->length - (temp_dword - node->base)) < size)
 				continue;

-			split_node = kmalloc(sizeof(*split_node), GFP_KERNEL);
+			split_node = kmalloc_obj(*split_node, GFP_KERNEL);

 			if (!split_node)
 				return NULL;
@@ -767,7 +767,7 @@ static struct pci_resource *get_resource(struct pci_resource **head, u32 size)
 			/* this one is longer than we need
 			 * so we'll make a new entry and split it up
 			 */
-			split_node = kmalloc(sizeof(*split_node), GFP_KERNEL);
+			split_node = kmalloc_obj(*split_node, GFP_KERNEL);

 			if (!split_node)
 				return NULL;
@@ -955,7 +955,7 @@ struct pci_func *cpqhp_slot_create(u8 busnumber)
 	struct pci_func *new_slot;
 	struct pci_func *next;

-	new_slot = kzalloc(sizeof(*new_slot), GFP_KERNEL);
+	new_slot = kzalloc_obj(*new_slot, GFP_KERNEL);
 	if (new_slot == NULL)
 		return new_slot;

@@ -2435,10 +2435,10 @@ static int configure_new_function(struct controller *ctrl, struct pci_func *func
 		/* Make copies of the nodes we are going to pass down so that
 		 * if there is a problem,we can just use these to free resources
 		 */
-		hold_bus_node = kmalloc(sizeof(*hold_bus_node), GFP_KERNEL);
-		hold_IO_node = kmalloc(sizeof(*hold_IO_node), GFP_KERNEL);
-		hold_mem_node = kmalloc(sizeof(*hold_mem_node), GFP_KERNEL);
-		hold_p_mem_node = kmalloc(sizeof(*hold_p_mem_node), GFP_KERNEL);
+		hold_bus_node = kmalloc_obj(*hold_bus_node, GFP_KERNEL);
+		hold_IO_node = kmalloc_obj(*hold_IO_node, GFP_KERNEL);
+		hold_mem_node = kmalloc_obj(*hold_mem_node, GFP_KERNEL);
+		hold_p_mem_node = kmalloc_obj(*hold_p_mem_node, GFP_KERNEL);

 		if (!hold_bus_node || !hold_IO_node || !hold_mem_node || !hold_p_mem_node) {
 			kfree(hold_bus_node);
diff --git a/drivers/pci/hotplug/cpqphp_nvram.c b/drivers/pci/hotplug/cpqphp_nvram.c
index 7a65d427ac11..83c97f72ca3b 100644
--- a/drivers/pci/hotplug/cpqphp_nvram.c
+++ b/drivers/pci/hotplug/cpqphp_nvram.c
@@ -504,7 +504,7 @@ int compaq_nvram_load(void __iomem *rom_start, struct controller *ctrl)
 			return 2;

 		while (nummem--) {
-			mem_node = kmalloc(sizeof(struct pci_resource), GFP_KERNEL);
+			mem_node = kmalloc_obj(struct pci_resource, GFP_KERNEL);

 			if (!mem_node)
 				break;
@@ -532,7 +532,8 @@ int compaq_nvram_load(void __iomem *rom_start, struct controller *ctrl)
 		}

 		while (numpmem--) {
-			p_mem_node = kmalloc(sizeof(struct pci_resource), GFP_KERNEL);
+			p_mem_node = kmalloc_obj(struct pci_resource,
+						 GFP_KERNEL);

 			if (!p_mem_node)
 				break;
@@ -560,7 +561,7 @@ int compaq_nvram_load(void __iomem *rom_start, struct controller *ctrl)
 		}

 		while (numio--) {
-			io_node = kmalloc(sizeof(struct pci_resource), GFP_KERNEL);
+			io_node = kmalloc_obj(struct pci_resource, GFP_KERNEL);

 			if (!io_node)
 				break;
@@ -588,7 +589,7 @@ int compaq_nvram_load(void __iomem *rom_start, struct controller *ctrl)
 		}

 		while (numbus--) {
-			bus_node = kmalloc(sizeof(struct pci_resource), GFP_KERNEL);
+			bus_node = kmalloc_obj(struct pci_resource, GFP_KERNEL);

 			if (!bus_node)
 				break;
diff --git a/drivers/pci/hotplug/cpqphp_pci.c b/drivers/pci/hotplug/cpqphp_pci.c
index 88929360fe77..03e2391f6786 100644
--- a/drivers/pci/hotplug/cpqphp_pci.c
+++ b/drivers/pci/hotplug/cpqphp_pci.c
@@ -151,8 +151,8 @@ int cpqhp_set_irq(u8 bus_num, u8 dev_num, u8 int_pin, u8 irq_num)
 		struct pci_bus *fakebus;
 		u16 temp_word;

-		fakedev = kmalloc(sizeof(*fakedev), GFP_KERNEL);
-		fakebus = kmalloc(sizeof(*fakebus), GFP_KERNEL);
+		fakedev = kmalloc_obj(*fakedev, GFP_KERNEL);
+		fakebus = kmalloc_obj(*fakebus, GFP_KERNEL);
 		if (!fakedev || !fakebus) {
 			kfree(fakedev);
 			kfree(fakebus);
@@ -721,7 +721,7 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 			pci_bus_read_config_byte(pci_bus, devfn, PCI_SECONDARY_BUS, &secondary_bus);
 			pci_bus_read_config_byte(pci_bus, devfn, PCI_SUBORDINATE_BUS, &temp_byte);

-			bus_node = kmalloc(sizeof(*bus_node), GFP_KERNEL);
+			bus_node = kmalloc_obj(*bus_node, GFP_KERNEL);
 			if (!bus_node)
 				return -ENOMEM;

@@ -736,7 +736,7 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 			pci_bus_read_config_byte(pci_bus, devfn, PCI_IO_LIMIT, &b_length);

 			if ((b_base <= b_length) && (save_command & 0x01)) {
-				io_node = kmalloc(sizeof(*io_node), GFP_KERNEL);
+				io_node = kmalloc_obj(*io_node, GFP_KERNEL);
 				if (!io_node)
 					return -ENOMEM;

@@ -752,7 +752,7 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 			pci_bus_read_config_word(pci_bus, devfn, PCI_MEMORY_LIMIT, &w_length);

 			if ((w_base <= w_length) && (save_command & 0x02)) {
-				mem_node = kmalloc(sizeof(*mem_node), GFP_KERNEL);
+				mem_node = kmalloc_obj(*mem_node, GFP_KERNEL);
 				if (!mem_node)
 					return -ENOMEM;

@@ -768,7 +768,8 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 			pci_bus_read_config_word(pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, &w_length);

 			if ((w_base <= w_length) && (save_command & 0x02)) {
-				p_mem_node = kmalloc(sizeof(*p_mem_node), GFP_KERNEL);
+				p_mem_node = kmalloc_obj(*p_mem_node,
+							 GFP_KERNEL);
 				if (!p_mem_node)
 					return -ENOMEM;

@@ -799,8 +800,8 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 						temp_register = base & 0xFFFFFFFE;
 						temp_register = (~temp_register) + 1;

-						io_node = kmalloc(sizeof(*io_node),
-								GFP_KERNEL);
+						io_node = kmalloc_obj(*io_node,
+								      GFP_KERNEL);
 						if (!io_node)
 							return -ENOMEM;

@@ -817,8 +818,8 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 						temp_register = base & 0xFFFFFFF0;
 						temp_register = (~temp_register) + 1;

-						p_mem_node = kmalloc(sizeof(*p_mem_node),
-								GFP_KERNEL);
+						p_mem_node = kmalloc_obj(*p_mem_node,
+									 GFP_KERNEL);
 						if (!p_mem_node)
 							return -ENOMEM;

@@ -834,8 +835,8 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 						temp_register = base & 0xFFFFFFF0;
 						temp_register = (~temp_register) + 1;

-						mem_node = kmalloc(sizeof(*mem_node),
-								GFP_KERNEL);
+						mem_node = kmalloc_obj(*mem_node,
+								       GFP_KERNEL);
 						if (!mem_node)
 							return -ENOMEM;

@@ -871,8 +872,8 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 						temp_register = base & 0xFFFFFFFE;
 						temp_register = (~temp_register) + 1;

-						io_node = kmalloc(sizeof(*io_node),
-								GFP_KERNEL);
+						io_node = kmalloc_obj(*io_node,
+								      GFP_KERNEL);
 						if (!io_node)
 							return -ENOMEM;

@@ -888,8 +889,8 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 						temp_register = base & 0xFFFFFFF0;
 						temp_register = (~temp_register) + 1;

-						p_mem_node = kmalloc(sizeof(*p_mem_node),
-								GFP_KERNEL);
+						p_mem_node = kmalloc_obj(*p_mem_node,
+									 GFP_KERNEL);
 						if (!p_mem_node)
 							return -ENOMEM;

@@ -905,8 +906,8 @@ int cpqhp_save_used_resources(struct controller *ctrl, struct pci_func *func)
 						temp_register = base & 0xFFFFFFF0;
 						temp_register = (~temp_register) + 1;

-						mem_node = kmalloc(sizeof(*mem_node),
-								GFP_KERNEL);
+						mem_node = kmalloc_obj(*mem_node,
+								       GFP_KERNEL);
 						if (!mem_node)
 							return -ENOMEM;

@@ -1293,7 +1294,7 @@ int cpqhp_find_available_resources(struct controller *ctrl, void __iomem *rom_st
 		temp_dword = io_base + io_length;

 		if ((io_base) && (temp_dword < 0x10000)) {
-			io_node = kmalloc(sizeof(*io_node), GFP_KERNEL);
+			io_node = kmalloc_obj(*io_node, GFP_KERNEL);
 			if (!io_node)
 				return -ENOMEM;

@@ -1315,7 +1316,7 @@ int cpqhp_find_available_resources(struct controller *ctrl, void __iomem *rom_st
 		/* If we've got a valid memory base, use it */
 		temp_dword = mem_base + mem_length;
 		if ((mem_base) && (temp_dword < 0x10000)) {
-			mem_node = kmalloc(sizeof(*mem_node), GFP_KERNEL);
+			mem_node = kmalloc_obj(*mem_node, GFP_KERNEL);
 			if (!mem_node)
 				return -ENOMEM;

@@ -1340,7 +1341,7 @@ int cpqhp_find_available_resources(struct controller *ctrl, void __iomem *rom_st
 		 */
 		temp_dword = pre_mem_base + pre_mem_length;
 		if ((pre_mem_base) && (temp_dword < 0x10000)) {
-			p_mem_node = kmalloc(sizeof(*p_mem_node), GFP_KERNEL);
+			p_mem_node = kmalloc_obj(*p_mem_node, GFP_KERNEL);
 			if (!p_mem_node)
 				return -ENOMEM;

@@ -1365,7 +1366,7 @@ int cpqhp_find_available_resources(struct controller *ctrl, void __iomem *rom_st
 		 * populated slots that don't have PCI-PCI bridges
 		 */
 		if (secondary_bus && (secondary_bus != primary_bus)) {
-			bus_node = kmalloc(sizeof(*bus_node), GFP_KERNEL);
+			bus_node = kmalloc_obj(*bus_node, GFP_KERNEL);
 			if (!bus_node)
 				return -ENOMEM;

diff --git a/drivers/pci/hotplug/cpqphp_sysfs.c b/drivers/pci/hotplug/cpqphp_sysfs.c
index 6143ebf71f21..055fff069ce3 100644
--- a/drivers/pci/hotplug/cpqphp_sysfs.c
+++ b/drivers/pci/hotplug/cpqphp_sysfs.c
@@ -134,7 +134,7 @@ static int open(struct inode *inode, struct file *file)
 	int retval = -ENOMEM;

 	mutex_lock(&cpqphp_mutex);
-	dbg = kmalloc(sizeof(*dbg), GFP_KERNEL);
+	dbg = kmalloc_obj(*dbg, GFP_KERNEL);
 	if (!dbg)
 		goto exit;
 	dbg->data = kmalloc(MAX_OUTPUT, GFP_KERNEL);
diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c
index 197997e264a2..af4e8b032093 100644
--- a/drivers/pci/hotplug/ibmphp_core.c
+++ b/drivers/pci/hotplug/ibmphp_core.c
@@ -624,11 +624,11 @@ static u8 bus_structure_fixup(u8 busno)
 	if (pci_find_bus(0, busno) || !(ibmphp_find_same_bus_num(busno)))
 		return 1;

-	bus = kmalloc(sizeof(*bus), GFP_KERNEL);
+	bus = kmalloc_obj(*bus, GFP_KERNEL);
 	if (!bus)
 		return 1;

-	dev = kmalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kmalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		kfree(bus);
 		return 1;
@@ -986,7 +986,7 @@ static int enable_slot(struct hotplug_slot *hs)
 		goto error_power;
 	}

-	slot_cur->func = kzalloc(sizeof(struct pci_func), GFP_KERNEL);
+	slot_cur->func = kzalloc_obj(struct pci_func, GFP_KERNEL);
 	if (!slot_cur->func) {
 		/* do update_slot_info here? */
 		rc = -ENOMEM;
@@ -1093,7 +1093,7 @@ int ibmphp_do_disable_slot(struct slot *slot_cur)

 	if (slot_cur->func == NULL) {
 		/* We need this for functions that were there on bootup */
-		slot_cur->func = kzalloc(sizeof(struct pci_func), GFP_KERNEL);
+		slot_cur->func = kzalloc_obj(struct pci_func, GFP_KERNEL);
 		if (!slot_cur->func) {
 			rc = -ENOMEM;
 			goto error;
@@ -1187,7 +1187,7 @@ static int __init ibmphp_init(void)

 	info(DRIVER_DESC " version: " DRIVER_VERSION "\n");

-	ibmphp_pci_bus = kmalloc(sizeof(*ibmphp_pci_bus), GFP_KERNEL);
+	ibmphp_pci_bus = kmalloc_obj(*ibmphp_pci_bus, GFP_KERNEL);
 	if (!ibmphp_pci_bus) {
 		rc = -ENOMEM;
 		goto exit;
diff --git a/drivers/pci/hotplug/ibmphp_ebda.c b/drivers/pci/hotplug/ibmphp_ebda.c
index 7fb75401ad8a..bfd9f11c2d39 100644
--- a/drivers/pci/hotplug/ibmphp_ebda.c
+++ b/drivers/pci/hotplug/ibmphp_ebda.c
@@ -57,7 +57,7 @@ static int ebda_rio_table(void);

 static struct ebda_hpc_list * __init alloc_ebda_hpc_list(void)
 {
-	return kzalloc(sizeof(struct ebda_hpc_list), GFP_KERNEL);
+	return kzalloc_obj(struct ebda_hpc_list, GFP_KERNEL);
 }

 static struct controller *alloc_ebda_hpc(u32 slot_count, u32 bus_count)
@@ -66,16 +66,16 @@ static struct controller *alloc_ebda_hpc(u32 slot_count, u32 bus_count)
 	struct ebda_hpc_slot *slots;
 	struct ebda_hpc_bus *buses;

-	controller = kzalloc(sizeof(struct controller), GFP_KERNEL);
+	controller = kzalloc_obj(struct controller, GFP_KERNEL);
 	if (!controller)
 		goto error;

-	slots = kcalloc(slot_count, sizeof(struct ebda_hpc_slot), GFP_KERNEL);
+	slots = kzalloc_objs(struct ebda_hpc_slot, slot_count, GFP_KERNEL);
 	if (!slots)
 		goto error_contr;
 	controller->slots = slots;

-	buses = kcalloc(bus_count, sizeof(struct ebda_hpc_bus), GFP_KERNEL);
+	buses = kzalloc_objs(struct ebda_hpc_bus, bus_count, GFP_KERNEL);
 	if (!buses)
 		goto error_slots;
 	controller->buses = buses;
@@ -98,12 +98,12 @@ static void free_ebda_hpc(struct controller *controller)

 static struct ebda_rsrc_list * __init alloc_ebda_rsrc_list(void)
 {
-	return kzalloc(sizeof(struct ebda_rsrc_list), GFP_KERNEL);
+	return kzalloc_obj(struct ebda_rsrc_list, GFP_KERNEL);
 }

 static struct ebda_pci_rsrc *alloc_ebda_pci_rsrc(void)
 {
-	return kzalloc(sizeof(struct ebda_pci_rsrc), GFP_KERNEL);
+	return kzalloc_obj(struct ebda_pci_rsrc, GFP_KERNEL);
 }

 static void __init print_bus_info(void)
@@ -352,7 +352,8 @@ int __init ibmphp_access_ebda(void)
 			debug("now enter io table ---\n");
 			debug("rio blk id: %x\n", blk_id);

-			rio_table_ptr = kzalloc(sizeof(struct rio_table_hdr), GFP_KERNEL);
+			rio_table_ptr = kzalloc_obj(struct rio_table_hdr,
+						    GFP_KERNEL);
 			if (!rio_table_ptr) {
 				rc = -ENOMEM;
 				goto out;
@@ -408,7 +409,7 @@ static int __init ebda_rio_table(void)

 	// we do concern about rio details
 	for (i = 0; i < rio_table_ptr->riodev_count; i++) {
-		rio_detail_ptr = kzalloc(sizeof(struct rio_detail), GFP_KERNEL);
+		rio_detail_ptr = kzalloc_obj(struct rio_detail, GFP_KERNEL);
 		if (!rio_detail_ptr)
 			return -ENOMEM;
 		rio_detail_ptr->rio_node_id = readb(io_mem + offset);
@@ -461,7 +462,7 @@ static int __init combine_wpg_for_chassis(void)
 	list_for_each_entry(rio_detail_ptr, &rio_vg_head, rio_detail_list) {
 		opt_rio_ptr = search_opt_vg(rio_detail_ptr->chassis_num);
 		if (!opt_rio_ptr) {
-			opt_rio_ptr = kzalloc(sizeof(struct opt_rio), GFP_KERNEL);
+			opt_rio_ptr = kzalloc_obj(struct opt_rio, GFP_KERNEL);
 			if (!opt_rio_ptr)
 				return -ENOMEM;
 			opt_rio_ptr->rio_type = rio_detail_ptr->rio_type;
@@ -499,7 +500,8 @@ static int combine_wpg_for_expansion(void)
 	list_for_each_entry(rio_detail_ptr, &rio_lo_head, rio_detail_list) {
 		opt_rio_lo_ptr = search_opt_lo(rio_detail_ptr->chassis_num);
 		if (!opt_rio_lo_ptr) {
-			opt_rio_lo_ptr = kzalloc(sizeof(struct opt_rio_lo), GFP_KERNEL);
+			opt_rio_lo_ptr = kzalloc_obj(struct opt_rio_lo,
+						     GFP_KERNEL);
 			if (!opt_rio_lo_ptr)
 				return -ENOMEM;
 			opt_rio_lo_ptr->rio_type = rio_detail_ptr->rio_type;
@@ -738,7 +740,8 @@ static int __init ebda_rsrc_controller(void)

 			bus_info_ptr2 = ibmphp_find_same_bus_num(slot_ptr->slot_bus_num);
 			if (!bus_info_ptr2) {
-				bus_info_ptr1 = kzalloc(sizeof(struct bus_info), GFP_KERNEL);
+				bus_info_ptr1 = kzalloc_obj(struct bus_info,
+							    GFP_KERNEL);
 				if (!bus_info_ptr1) {
 					rc = -ENOMEM;
 					goto error_no_slot;
@@ -840,7 +843,7 @@ static int __init ebda_rsrc_controller(void)

 		// register slots with hpc core as well as create linked list of ibm slot
 		for (index = 0; index < hpc_ptr->slot_count; index++) {
-			tmp_slot = kzalloc(sizeof(*tmp_slot), GFP_KERNEL);
+			tmp_slot = kzalloc_obj(*tmp_slot, GFP_KERNEL);
 			if (!tmp_slot) {
 				rc = -ENOMEM;
 				goto error_no_slot;
diff --git a/drivers/pci/hotplug/ibmphp_pci.c b/drivers/pci/hotplug/ibmphp_pci.c
index eeb412cbd9fe..f1ec9ada9faa 100644
--- a/drivers/pci/hotplug/ibmphp_pci.c
+++ b/drivers/pci/hotplug/ibmphp_pci.c
@@ -152,7 +152,8 @@ int ibmphp_configure_card(struct pci_func *func, u8 slotno)
 						cleanup_count = 6;
 						goto error;
 					}
-					newfunc = kzalloc(sizeof(*newfunc), GFP_KERNEL);
+					newfunc = kzalloc_obj(*newfunc,
+							      GFP_KERNEL);
 					if (!newfunc)
 						return -ENOMEM;

@@ -189,7 +190,8 @@ int ibmphp_configure_card(struct pci_func *func, u8 slotno)
 					flag = 0;
 					for (i = 0; i < 32; i++) {
 						if (func->devices[i]) {
-							newfunc = kzalloc(sizeof(*newfunc), GFP_KERNEL);
+							newfunc = kzalloc_obj(*newfunc,
+									      GFP_KERNEL);
 							if (!newfunc)
 								return -ENOMEM;

@@ -216,7 +218,8 @@ int ibmphp_configure_card(struct pci_func *func, u8 slotno)
 						}
 					}

-					newfunc = kzalloc(sizeof(*newfunc), GFP_KERNEL);
+					newfunc = kzalloc_obj(*newfunc,
+							      GFP_KERNEL);
 					if (!newfunc)
 						return -ENOMEM;

@@ -261,7 +264,8 @@ int ibmphp_configure_card(struct pci_func *func, u8 slotno)
 					for (i = 0; i < 32; i++) {
 						if (func->devices[i]) {
 							debug("inside for loop, device is %x\n", i);
-							newfunc = kzalloc(sizeof(*newfunc), GFP_KERNEL);
+							newfunc = kzalloc_obj(*newfunc,
+									      GFP_KERNEL);
 							if (!newfunc)
 								return -ENOMEM;

@@ -384,7 +388,8 @@ static int configure_device(struct pci_func *func)

 			debug("len[count] in IO %x, count %d\n", len[count], count);

-			io[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+			io[count] = kzalloc_obj(struct resource_node,
+						GFP_KERNEL);

 			if (!io[count])
 				return -ENOMEM;
@@ -421,7 +426,8 @@ static int configure_device(struct pci_func *func)

 				debug("len[count] in PFMEM %x, count %d\n", len[count], count);

-				pfmem[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+				pfmem[count] = kzalloc_obj(struct resource_node,
+							   GFP_KERNEL);
 				if (!pfmem[count])
 					return -ENOMEM;

@@ -435,7 +441,8 @@ static int configure_device(struct pci_func *func)
 					ibmphp_add_resource(pfmem[count]);
 					func->pfmem[count] = pfmem[count];
 				} else {
-					mem_tmp = kzalloc(sizeof(*mem_tmp), GFP_KERNEL);
+					mem_tmp = kzalloc_obj(*mem_tmp,
+							      GFP_KERNEL);
 					if (!mem_tmp) {
 						kfree(pfmem[count]);
 						return -ENOMEM;
@@ -485,7 +492,8 @@ static int configure_device(struct pci_func *func)

 				debug("len[count] in Mem %x, count %d\n", len[count], count);

-				mem[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+				mem[count] = kzalloc_obj(struct resource_node,
+							 GFP_KERNEL);
 				if (!mem[count])
 					return -ENOMEM;

@@ -648,7 +656,8 @@ static int configure_bridge(struct pci_func **func_passed, u8 slotno)

 			debug("len[count] in IO = %x\n", len[count]);

-			bus_io[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+			bus_io[count] = kzalloc_obj(struct resource_node,
+						    GFP_KERNEL);

 			if (!bus_io[count]) {
 				retval = -ENOMEM;
@@ -680,7 +689,8 @@ static int configure_bridge(struct pci_func **func_passed, u8 slotno)

 				debug("len[count] in PFMEM = %x\n", len[count]);

-				bus_pfmem[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+				bus_pfmem[count] = kzalloc_obj(struct resource_node,
+							       GFP_KERNEL);
 				if (!bus_pfmem[count]) {
 					retval = -ENOMEM;
 					goto error;
@@ -695,7 +705,8 @@ static int configure_bridge(struct pci_func **func_passed, u8 slotno)
 					ibmphp_add_resource(bus_pfmem[count]);
 					func->pfmem[count] = bus_pfmem[count];
 				} else {
-					mem_tmp = kzalloc(sizeof(*mem_tmp), GFP_KERNEL);
+					mem_tmp = kzalloc_obj(*mem_tmp,
+							      GFP_KERNEL);
 					if (!mem_tmp) {
 						retval = -ENOMEM;
 						goto error;
@@ -735,7 +746,8 @@ static int configure_bridge(struct pci_func **func_passed, u8 slotno)

 				debug("len[count] in Memory is %x\n", len[count]);

-				bus_mem[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+				bus_mem[count] = kzalloc_obj(struct resource_node,
+							     GFP_KERNEL);
 				if (!bus_mem[count]) {
 					retval = -ENOMEM;
 					goto error;
@@ -804,7 +816,7 @@ static int configure_bridge(struct pci_func **func_passed, u8 slotno)
 		flag_io = 1;
 	} else {
 		debug("it wants %x IO behind the bridge\n", amount_needed->io);
-		io = kzalloc(sizeof(*io), GFP_KERNEL);
+		io = kzalloc_obj(*io, GFP_KERNEL);

 		if (!io) {
 			retval = -ENOMEM;
@@ -826,7 +838,7 @@ static int configure_bridge(struct pci_func **func_passed, u8 slotno)
 		flag_mem = 1;
 	} else {
 		debug("it wants %x memory behind the bridge\n", amount_needed->mem);
-		mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+		mem = kzalloc_obj(*mem, GFP_KERNEL);
 		if (!mem) {
 			retval = -ENOMEM;
 			goto error;
@@ -847,7 +859,7 @@ static int configure_bridge(struct pci_func **func_passed, u8 slotno)
 		flag_pfmem = 1;
 	} else {
 		debug("it wants %x pfmemory behind the bridge\n", amount_needed->pfmem);
-		pfmem = kzalloc(sizeof(*pfmem), GFP_KERNEL);
+		pfmem = kzalloc_obj(*pfmem, GFP_KERNEL);
 		if (!pfmem) {
 			retval = -ENOMEM;
 			goto error;
@@ -861,7 +873,7 @@ static int configure_bridge(struct pci_func **func_passed, u8 slotno)
 			ibmphp_add_resource(pfmem);
 			flag_pfmem = 1;
 		} else {
-			mem_tmp = kzalloc(sizeof(*mem_tmp), GFP_KERNEL);
+			mem_tmp = kzalloc_obj(*mem_tmp, GFP_KERNEL);
 			if (!mem_tmp) {
 				retval = -ENOMEM;
 				goto error;
@@ -891,7 +903,7 @@ static int configure_bridge(struct pci_func **func_passed, u8 slotno)
 		 */
 		bus = ibmphp_find_res_bus(sec_number);
 		if (!bus) {
-			bus = kzalloc(sizeof(*bus), GFP_KERNEL);
+			bus = kzalloc_obj(*bus, GFP_KERNEL);
 			if (!bus) {
 				retval = -ENOMEM;
 				goto error;
@@ -1064,7 +1076,7 @@ static struct res_needed *scan_behind_bridge(struct pci_func *func, u8 busno)
 	};
 	struct res_needed *amount;

-	amount = kzalloc(sizeof(*amount), GFP_KERNEL);
+	amount = kzalloc_obj(*amount, GFP_KERNEL);
 	if (amount == NULL)
 		return NULL;

@@ -1618,7 +1630,7 @@ static int add_new_bus(struct bus_node *bus, struct resource_node *io, struct re
 		list_add(&bus->bus_list, &cur_bus->bus_list);
 	}
 	if (io) {
-		io_range = kzalloc(sizeof(*io_range), GFP_KERNEL);
+		io_range = kzalloc_obj(*io_range, GFP_KERNEL);
 		if (!io_range)
 			return -ENOMEM;

@@ -1629,7 +1641,7 @@ static int add_new_bus(struct bus_node *bus, struct resource_node *io, struct re
 		bus->rangeIO = io_range;
 	}
 	if (mem) {
-		mem_range = kzalloc(sizeof(*mem_range), GFP_KERNEL);
+		mem_range = kzalloc_obj(*mem_range, GFP_KERNEL);
 		if (!mem_range)
 			return -ENOMEM;

@@ -1640,7 +1652,7 @@ static int add_new_bus(struct bus_node *bus, struct resource_node *io, struct re
 		bus->rangeMem = mem_range;
 	}
 	if (pfmem) {
-		pfmem_range = kzalloc(sizeof(*pfmem_range), GFP_KERNEL);
+		pfmem_range = kzalloc_obj(*pfmem_range, GFP_KERNEL);
 		if (!pfmem_range)
 			return -ENOMEM;

diff --git a/drivers/pci/hotplug/ibmphp_res.c b/drivers/pci/hotplug/ibmphp_res.c
index 4a72ade2cddb..c05a2c05e302 100644
--- a/drivers/pci/hotplug/ibmphp_res.c
+++ b/drivers/pci/hotplug/ibmphp_res.c
@@ -41,7 +41,7 @@ static struct bus_node * __init alloc_error_bus(struct ebda_pci_rsrc *curr, u8 b
 		return NULL;
 	}

-	newbus = kzalloc(sizeof(struct bus_node), GFP_KERNEL);
+	newbus = kzalloc_obj(struct bus_node, GFP_KERNEL);
 	if (!newbus)
 		return NULL;

@@ -62,7 +62,7 @@ static struct resource_node * __init alloc_resources(struct ebda_pci_rsrc *curr)
 		return NULL;
 	}

-	rs = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+	rs = kzalloc_obj(struct resource_node, GFP_KERNEL);
 	if (!rs)
 		return NULL;

@@ -81,7 +81,7 @@ static int __init alloc_bus_range(struct bus_node **new_bus, struct range_node *
 	u8 num_ranges = 0;

 	if (first_bus) {
-		newbus = kzalloc(sizeof(struct bus_node), GFP_KERNEL);
+		newbus = kzalloc_obj(struct bus_node, GFP_KERNEL);
 		if (!newbus)
 			return -ENOMEM;

@@ -101,7 +101,7 @@ static int __init alloc_bus_range(struct bus_node **new_bus, struct range_node *
 		}
 	}

-	newrange = kzalloc(sizeof(struct range_node), GFP_KERNEL);
+	newrange = kzalloc_obj(struct range_node, GFP_KERNEL);
 	if (!newrange) {
 		if (first_bus)
 			kfree(newbus);
@@ -1687,7 +1687,8 @@ static int __init once_over(void)

 				bus_cur->firstPFMemFromMem = pfmem_cur;

-				mem = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+				mem = kzalloc_obj(struct resource_node,
+						  GFP_KERNEL);
 				if (!mem)
 					return -ENOMEM;

@@ -1969,7 +1970,8 @@ static int __init update_bridge_ranges(struct bus_node **bus)
 						end_address |= (upper_io_end << 16);

 						if ((start_address) && (start_address <= end_address)) {
-							range = kzalloc(sizeof(struct range_node), GFP_KERNEL);
+							range = kzalloc_obj(struct range_node,
+									    GFP_KERNEL);
 							if (!range)
 								return -ENOMEM;

@@ -1993,7 +1995,8 @@ static int __init update_bridge_ranges(struct bus_node **bus)
 							fix_resources(bus_sec);

 							if (ibmphp_find_resource(bus_cur, start_address, &io, IO)) {
-								io = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+								io = kzalloc_obj(struct resource_node,
+										 GFP_KERNEL);
 								if (!io) {
 									kfree(range);
 									return -ENOMEM;
@@ -2016,7 +2019,8 @@ static int __init update_bridge_ranges(struct bus_node **bus)

 						if ((start_address) && (start_address <= end_address)) {

-							range = kzalloc(sizeof(struct range_node), GFP_KERNEL);
+							range = kzalloc_obj(struct range_node,
+									    GFP_KERNEL);
 							if (!range)
 								return -ENOMEM;

@@ -2041,7 +2045,8 @@ static int __init update_bridge_ranges(struct bus_node **bus)
 							fix_resources(bus_sec);

 							if (ibmphp_find_resource(bus_cur, start_address, &mem, MEM)) {
-								mem = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+								mem = kzalloc_obj(struct resource_node,
+										  GFP_KERNEL);
 								if (!mem) {
 									kfree(range);
 									return -ENOMEM;
@@ -2068,7 +2073,8 @@ static int __init update_bridge_ranges(struct bus_node **bus)

 						if ((start_address) && (start_address <= end_address)) {

-							range = kzalloc(sizeof(struct range_node), GFP_KERNEL);
+							range = kzalloc_obj(struct range_node,
+									    GFP_KERNEL);
 							if (!range)
 								return -ENOMEM;

@@ -2092,7 +2098,8 @@ static int __init update_bridge_ranges(struct bus_node **bus)

 							fix_resources(bus_sec);
 							if (ibmphp_find_resource(bus_cur, start_address, &pfmem, PFMEM)) {
-								pfmem = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
+								pfmem = kzalloc_obj(struct resource_node,
+										    GFP_KERNEL);
 								if (!pfmem) {
 									kfree(range);
 									return -ENOMEM;
diff --git a/drivers/pci/hotplug/octep_hp.c b/drivers/pci/hotplug/octep_hp.c
index 2bce7296c050..109513822589 100644
--- a/drivers/pci/hotplug/octep_hp.c
+++ b/drivers/pci/hotplug/octep_hp.c
@@ -136,7 +136,7 @@ octep_hp_register_slot(struct octep_hp_controller *hp_ctrl,
 	struct octep_hp_slot *hp_slot;
 	int ret;

-	hp_slot = kzalloc(sizeof(*hp_slot), GFP_KERNEL);
+	hp_slot = kzalloc_obj(*hp_slot, GFP_KERNEL);
 	if (!hp_slot)
 		return ERR_PTR(-ENOMEM);

@@ -271,7 +271,7 @@ static irqreturn_t octep_hp_intr_handler(int irq, void *data)
 	intr_val = readq(hp_ctrl->base + OCTEP_HP_INTR_OFFSET(type));
 	writeq(intr_val, hp_ctrl->base + OCTEP_HP_INTR_OFFSET(type));

-	hp_cmd = kzalloc(sizeof(*hp_cmd), GFP_ATOMIC);
+	hp_cmd = kzalloc_obj(*hp_cmd, GFP_ATOMIC);
 	if (!hp_cmd)
 		return IRQ_HANDLED;

diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c
index f59baa912970..b344ccb3cbc1 100644
--- a/drivers/pci/hotplug/pciehp_core.c
+++ b/drivers/pci/hotplug/pciehp_core.c
@@ -55,7 +55,7 @@ static int init_slot(struct controller *ctrl)
 	int retval;

 	/* Setup hotplug slot ops */
-	ops = kzalloc(sizeof(*ops), GFP_KERNEL);
+	ops = kzalloc_obj(*ops, GFP_KERNEL);
 	if (!ops)
 		return -ENOMEM;

diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
index ad5f28f6a8b1..33396ad0331c 100644
--- a/drivers/pci/hotplug/pciehp_hpc.c
+++ b/drivers/pci/hotplug/pciehp_hpc.c
@@ -1011,7 +1011,7 @@ struct controller *pcie_init(struct pcie_device *dev)
 	struct pci_dev *pdev = dev->port;
 	struct pci_bus *subordinate = pdev->subordinate;

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		return NULL;

diff --git a/drivers/pci/hotplug/pnv_php.c b/drivers/pci/hotplug/pnv_php.c
index 35f1758126c6..4364f068fb72 100644
--- a/drivers/pci/hotplug/pnv_php.c
+++ b/drivers/pci/hotplug/pnv_php.c
@@ -791,7 +791,7 @@ static struct pnv_php_slot *pnv_php_alloc_slot(struct device_node *dn)
 	if (!bus)
 		return NULL;

-	php_slot = kzalloc(sizeof(*php_slot), GFP_KERNEL);
+	php_slot = kzalloc_obj(*php_slot, GFP_KERNEL);
 	if (!php_slot)
 		return NULL;

@@ -1028,7 +1028,7 @@ static irqreturn_t pnv_php_interrupt(int irq, void *data)
 	 * The PE is left in frozen state if the event is missed. It's
 	 * fine as the PCI devices (PE) aren't functional any more.
 	 */
-	event = kzalloc(sizeof(*event), GFP_ATOMIC);
+	event = kzalloc_obj(*event, GFP_ATOMIC);
 	if (!event) {
 		SLOT_WARN(php_slot,
 			  "PCI slot [%s] missed hotplug event 0x%04x\n",
diff --git a/drivers/pci/hotplug/rpaphp_slot.c b/drivers/pci/hotplug/rpaphp_slot.c
index 779eab12e981..730a3d6c12ba 100644
--- a/drivers/pci/hotplug/rpaphp_slot.c
+++ b/drivers/pci/hotplug/rpaphp_slot.c
@@ -32,7 +32,7 @@ struct slot *alloc_slot_struct(struct device_node *dn,
 {
 	struct slot *slot;

-	slot = kzalloc(sizeof(struct slot), GFP_KERNEL);
+	slot = kzalloc_obj(struct slot, GFP_KERNEL);
 	if (!slot)
 		goto error_nomem;
 	slot->name = kstrdup(drc_name, GFP_KERNEL);
diff --git a/drivers/pci/hotplug/shpchp_core.c b/drivers/pci/hotplug/shpchp_core.c
index 56308515ecba..13687b666f7a 100644
--- a/drivers/pci/hotplug/shpchp_core.c
+++ b/drivers/pci/hotplug/shpchp_core.c
@@ -66,7 +66,7 @@ static int init_slots(struct controller *ctrl)
 	int i;

 	for (i = 0; i < ctrl->num_slots; i++) {
-		slot = kzalloc(sizeof(*slot), GFP_KERNEL);
+		slot = kzalloc_obj(*slot, GFP_KERNEL);
 		if (!slot) {
 			retval = -ENOMEM;
 			goto error;
@@ -259,7 +259,7 @@ static int shpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	if (acpi_get_hp_hw_control_from_firmware(pdev))
 		return -ENODEV;

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		goto err_out_none;

diff --git a/drivers/pci/hotplug/shpchp_ctrl.c b/drivers/pci/hotplug/shpchp_ctrl.c
index e6c6f23bae27..20526c1fa441 100644
--- a/drivers/pci/hotplug/shpchp_ctrl.c
+++ b/drivers/pci/hotplug/shpchp_ctrl.c
@@ -29,7 +29,7 @@ static int queue_interrupt_event(struct slot *p_slot, u32 event_type)
 {
 	struct event_info *info;

-	info = kmalloc(sizeof(*info), GFP_ATOMIC);
+	info = kmalloc_obj(*info, GFP_ATOMIC);
 	if (!info)
 		return -ENOMEM;

@@ -418,7 +418,7 @@ void shpchp_queue_pushbutton_work(struct work_struct *work)
 	struct slot *p_slot = container_of(work, struct slot, work.work);
 	struct pushbutton_work_info *info;

-	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	info = kmalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		ctrl_err(p_slot->ctrl, "%s: Cannot allocate memory\n",
 			 __func__);
diff --git a/drivers/pci/ide.c b/drivers/pci/ide.c
index 23f554490539..94c20f35f86f 100644
--- a/drivers/pci/ide.c
+++ b/drivers/pci/ide.c
@@ -258,7 +258,7 @@ struct pci_ide *pci_ide_stream_alloc(struct pci_dev *pdev)
 	if (!pdev->ide_cap)
 		return NULL;

-	struct pci_ide *ide __free(kfree) = kzalloc(sizeof(*ide), GFP_KERNEL);
+	struct pci_ide *ide __free(kfree) = kzalloc_obj(*ide, GFP_KERNEL);
 	if (!ide)
 		return NULL;

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 4a659c34935e..99b939f233be 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -837,7 +837,7 @@ static int sriov_init(struct pci_dev *dev, int pos)
 	pgsz &= ~(pgsz - 1);
 	pci_write_config_dword(dev, pos + PCI_SRIOV_SYS_PGSIZE, pgsz);

-	iov = kzalloc(sizeof(*iov), GFP_KERNEL);
+	iov = kzalloc_obj(*iov, GFP_KERNEL);
 	if (!iov)
 		return -ENOMEM;

diff --git a/drivers/pci/npem.c b/drivers/pci/npem.c
index 97507e0df769..f900438570bf 100644
--- a/drivers/pci/npem.c
+++ b/drivers/pci/npem.c
@@ -524,7 +524,7 @@ static int pci_npem_init(struct pci_dev *dev, const struct npem_ops *ops,
 	int led_idx = 0;
 	int ret;

-	npem = kzalloc(struct_size(npem, leds, supported_cnt), GFP_KERNEL);
+	npem = kzalloc_flex(*npem, leds, supported_cnt, GFP_KERNEL);
 	if (!npem)
 		return -ENOMEM;

diff --git a/drivers/pci/of.c b/drivers/pci/of.c
index 9bb5f258759b..492ec76da821 100644
--- a/drivers/pci/of.c
+++ b/drivers/pci/of.c
@@ -696,7 +696,7 @@ void of_pci_make_dev_node(struct pci_dev *pdev)
 	if (!name)
 		return;

-	cset = kmalloc(sizeof(*cset), GFP_KERNEL);
+	cset = kmalloc_obj(*cset, GFP_KERNEL);
 	if (!cset)
 		goto out_free_name;
 	of_changeset_init(cset);
@@ -784,7 +784,7 @@ void of_pci_make_host_bridge_node(struct pci_host_bridge *bridge)
 	if (!name)
 		return;

-	cset = kmalloc(sizeof(*cset), GFP_KERNEL);
+	cset = kmalloc_obj(*cset, GFP_KERNEL);
 	if (!cset)
 		goto out_free_name;
 	of_changeset_init(cset);
diff --git a/drivers/pci/of_property.c b/drivers/pci/of_property.c
index 7aae46f333d9..9011f890ebf3 100644
--- a/drivers/pci/of_property.c
+++ b/drivers/pci/of_property.c
@@ -119,7 +119,7 @@ static int of_pci_prop_ranges(struct pci_dev *pdev, struct of_changeset *ocs,
 		res = &pdev->resource[PCI_STD_RESOURCES];
 	}

-	rp = kcalloc(num, sizeof(*rp), GFP_KERNEL);
+	rp = kzalloc_objs(*rp, num, GFP_KERNEL);
 	if (!rp)
 		return -ENOMEM;

diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c
index 79a414fd6623..4ab9800c22cc 100644
--- a/drivers/pci/p2pdma.c
+++ b/drivers/pci/p2pdma.c
@@ -1006,7 +1006,7 @@ struct scatterlist *pci_p2pmem_alloc_sgl(struct pci_dev *pdev,
 	struct scatterlist *sg;
 	void *addr;

-	sg = kmalloc(sizeof(*sg), GFP_KERNEL);
+	sg = kmalloc_obj(*sg, GFP_KERNEL);
 	if (!sg)
 		return NULL;

diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 218e1fc1c1e2..854597fe4eab 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -1663,11 +1663,11 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
 	struct acpi_pci_root_ops *root_ops;
 	struct pci_host_bridge *host;

-	ri = kzalloc(sizeof(*ri), GFP_KERNEL);
+	ri = kzalloc_obj(*ri, GFP_KERNEL);
 	if (!ri)
 		return NULL;

-	root_ops = kzalloc(sizeof(*root_ops), GFP_KERNEL);
+	root_ops = kzalloc_obj(*root_ops, GFP_KERNEL);
 	if (!root_ops) {
 		kfree(ri);
 		return NULL;
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 47887d55994a..206d30324dfd 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -58,7 +58,7 @@ int pci_add_dynid(struct pci_driver *drv,
 {
 	struct pci_dynid *dynid;

-	dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
+	dynid = kzalloc_obj(*dynid, GFP_KERNEL);
 	if (!dynid)
 		return -ENOMEM;

@@ -203,7 +203,7 @@ static ssize_t new_id_store(struct device_driver *driver, const char *buf,
 		return -EINVAL;

 	if (fields != 7) {
-		struct pci_dev *pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
+		struct pci_dev *pdev = kzalloc_obj(*pdev, GFP_KERNEL);
 		if (!pdev)
 			return -ENOMEM;

diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 363187ba4f56..16eaaf749ba9 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -1037,8 +1037,7 @@ void pci_create_legacy_files(struct pci_bus *b)
 	if (!sysfs_initialized)
 		return;

-	b->legacy_io = kcalloc(2, sizeof(struct bin_attribute),
-			       GFP_ATOMIC);
+	b->legacy_io = kzalloc_objs(struct bin_attribute, 2, GFP_ATOMIC);
 	if (!b->legacy_io)
 		goto kzalloc_err;

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index f3244630bfd0..4aa21fe3b13e 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -2462,8 +2462,7 @@ void pci_pme_active(struct pci_dev *dev, bool enable)
 	if (dev->pme_poll) {
 		struct pci_pme_device *pme_dev;
 		if (enable) {
-			pme_dev = kmalloc(sizeof(struct pci_pme_device),
-					  GFP_KERNEL);
+			pme_dev = kmalloc_obj(struct pci_pme_device, GFP_KERNEL);
 			if (!pme_dev) {
 				pci_warn(dev, "can't enable PME#\n");
 				return;
@@ -3980,7 +3979,7 @@ int pci_register_io_range(const struct fwnode_handle *fwnode, phys_addr_t addr,
 	if (!size || addr + size < addr)
 		return -EINVAL;

-	range = kzalloc(sizeof(*range), GFP_ATOMIC);
+	range = kzalloc_obj(*range, GFP_ATOMIC);
 	if (!range)
 		return -ENOMEM;

diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
index 8dfbb0fe6cf6..068594aa6878 100644
--- a/drivers/pci/pcie/aer.c
+++ b/drivers/pci/pcie/aer.c
@@ -390,7 +390,7 @@ void pci_aer_init(struct pci_dev *dev)
 	if (!dev->aer_cap)
 		return;

-	dev->aer_info = kzalloc(sizeof(*dev->aer_info), GFP_KERNEL);
+	dev->aer_info = kzalloc_obj(*dev->aer_info, GFP_KERNEL);
 	if (!dev->aer_info) {
 		dev->aer_cap = 0;
 		return;
diff --git a/drivers/pci/pcie/aer_inject.c b/drivers/pci/pcie/aer_inject.c
index 91acc7b17f68..9c8b2dc496b9 100644
--- a/drivers/pci/pcie/aer_inject.c
+++ b/drivers/pci/pcie/aer_inject.c
@@ -300,7 +300,7 @@ static int pci_bus_set_aer_ops(struct pci_bus *bus)
 	struct pci_bus_ops *bus_ops;
 	unsigned long flags;

-	bus_ops = kmalloc(sizeof(*bus_ops), GFP_KERNEL);
+	bus_ops = kmalloc_obj(*bus_ops, GFP_KERNEL);
 	if (!bus_ops)
 		return -ENOMEM;
 	ops = pci_bus_set_ops(bus, &aer_inj_pci_ops);
@@ -360,12 +360,12 @@ static int aer_inject(struct aer_error_inj *einj)
 		goto out_put;
 	}

-	err_alloc =  kzalloc(sizeof(struct aer_error), GFP_KERNEL);
+	err_alloc =  kzalloc_obj(struct aer_error, GFP_KERNEL);
 	if (!err_alloc) {
 		ret = -ENOMEM;
 		goto out_put;
 	}
-	rperr_alloc =  kzalloc(sizeof(struct aer_error), GFP_KERNEL);
+	rperr_alloc =  kzalloc_obj(struct aer_error, GFP_KERNEL);
 	if (!rperr_alloc) {
 		ret = -ENOMEM;
 		goto out_put;
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index cedea47a3547..83ea061f2eba 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -1063,7 +1063,7 @@ static struct pcie_link_state *alloc_pcie_link_state(struct pci_dev *pdev)
 {
 	struct pcie_link_state *link;

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return NULL;

diff --git a/drivers/pci/pcie/pme.c b/drivers/pci/pcie/pme.c
index a2daebd9806c..050d814f6eac 100644
--- a/drivers/pci/pcie/pme.c
+++ b/drivers/pci/pcie/pme.c
@@ -335,7 +335,7 @@ static int pcie_pme_probe(struct pcie_device *srv)
 	    type != PCI_EXP_TYPE_ROOT_PORT)
 		return -ENODEV;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/pci/pcie/portdrv.c b/drivers/pci/pcie/portdrv.c
index 88af0dacf351..f033acbd71a4 100644
--- a/drivers/pci/pcie/portdrv.c
+++ b/drivers/pci/pcie/portdrv.c
@@ -293,7 +293,7 @@ static int pcie_device_init(struct pci_dev *pdev, int service, int irq)
 	struct pcie_device *pcie;
 	struct device *device;

-	pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
+	pcie = kzalloc_obj(*pcie, GFP_KERNEL);
 	if (!pcie)
 		return -ENOMEM;
 	pcie->port = pdev;
diff --git a/drivers/pci/pcie/ptm.c b/drivers/pci/pcie/ptm.c
index c7c61869bc9c..d8727369e6a5 100644
--- a/drivers/pci/pcie/ptm.c
+++ b/drivers/pci/pcie/ptm.c
@@ -537,7 +537,7 @@ struct pci_ptm_debugfs *pcie_ptm_create_debugfs(struct device *dev, void *pdata,
 		return NULL;
 	}

-	ptm_debugfs = kzalloc(sizeof(*ptm_debugfs), GFP_KERNEL);
+	ptm_debugfs = kzalloc_obj(*ptm_debugfs, GFP_KERNEL);
 	if (!ptm_debugfs)
 		return NULL;

diff --git a/drivers/pci/pcie/rcec.c b/drivers/pci/pcie/rcec.c
index d0bcd141ac9c..531cde54d747 100644
--- a/drivers/pci/pcie/rcec.c
+++ b/drivers/pci/pcie/rcec.c
@@ -160,7 +160,7 @@ void pci_rcec_init(struct pci_dev *dev)
 	if (!rcec)
 		return;

-	rcec_ea = kzalloc(sizeof(*rcec_ea), GFP_KERNEL);
+	rcec_ea = kzalloc_obj(*rcec_ea, GFP_KERNEL);
 	if (!rcec_ea)
 		return;

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 2975974f35e8..013334b53bfb 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -53,7 +53,7 @@ static struct resource *get_pci_domain_busn_res(int domain_nr)
 		if (r->domain_nr == domain_nr)
 			return &r->res;

-	r = kzalloc(sizeof(*r), GFP_KERNEL);
+	r = kzalloc_obj(*r, GFP_KERNEL);
 	if (!r)
 		return NULL;

@@ -620,7 +620,7 @@ static struct pci_bus *pci_alloc_bus(struct pci_bus *parent)
 {
 	struct pci_bus *b;

-	b = kzalloc(sizeof(*b), GFP_KERNEL);
+	b = kzalloc_obj(*b, GFP_KERNEL);
 	if (!b)
 		return NULL;

@@ -2502,7 +2502,7 @@ struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
 {
 	struct pci_dev *dev;

-	dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct pci_dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
index 9348a0fb8084..53104f5c6378 100644
--- a/drivers/pci/proc.c
+++ b/drivers/pci/proc.c
@@ -297,7 +297,7 @@ static int proc_bus_pci_mmap(struct file *file, struct vm_area_struct *vma)

 static int proc_bus_pci_open(struct inode *inode, struct file *file)
 {
-	struct pci_filp_private *fpriv = kmalloc(sizeof(*fpriv), GFP_KERNEL);
+	struct pci_filp_private *fpriv = kmalloc_obj(*fpriv, GFP_KERNEL);

 	if (!fpriv)
 		return -ENOMEM;
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index bd66ac47b3b9..b641f60a2aa5 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -73,7 +73,7 @@ int pci_dev_res_add_to_list(struct list_head *head, struct pci_dev *dev,
 {
 	struct pci_dev_resource *tmp;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

@@ -350,7 +350,7 @@ static void pdev_sort_resources(struct pci_dev *dev, struct list_head *head)
 			continue;
 		}

-		tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+		tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 		if (!tmp)
 			panic("%s: kzalloc() failed!\n", __func__);
 		tmp->res = r;
diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c
index 50fb3eb595fe..15e98de7bdbe 100644
--- a/drivers/pci/slot.c
+++ b/drivers/pci/slot.c
@@ -256,7 +256,7 @@ struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr,
 	}

 placeholder:
-	slot = kzalloc(sizeof(*slot), GFP_KERNEL);
+	slot = kzalloc_obj(*slot, GFP_KERNEL);
 	if (!slot) {
 		err = -ENOMEM;
 		goto err;
diff --git a/drivers/pci/switch/switchtec.c b/drivers/pci/switch/switchtec.c
index 5ff84fb8fb0f..c6e97d1af1a0 100644
--- a/drivers/pci/switch/switchtec.c
+++ b/drivers/pci/switch/switchtec.c
@@ -86,7 +86,7 @@ static struct switchtec_user *stuser_create(struct switchtec_dev *stdev)
 {
 	struct switchtec_user *stuser;

-	stuser = kzalloc(sizeof(*stuser), GFP_KERNEL);
+	stuser = kzalloc_obj(*stuser, GFP_KERNEL);
 	if (!stuser)
 		return ERR_PTR(-ENOMEM);

@@ -895,7 +895,7 @@ static int ioctl_event_summary(struct switchtec_dev *stdev,
 	u32 reg;
 	int ret = 0;

-	s = kzalloc(sizeof(*s), GFP_KERNEL);
+	s = kzalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

diff --git a/drivers/pci/vgaarb.c b/drivers/pci/vgaarb.c
index 87143e235033..21204da24e73 100644
--- a/drivers/pci/vgaarb.c
+++ b/drivers/pci/vgaarb.c
@@ -735,7 +735,7 @@ static bool vga_arbiter_add_pci_device(struct pci_dev *pdev)
 	u16 cmd;

 	/* Allocate structure */
-	vgadev = kzalloc(sizeof(struct vga_device), GFP_KERNEL);
+	vgadev = kzalloc_obj(struct vga_device, GFP_KERNEL);
 	if (vgadev == NULL) {
 		vgaarb_err(&pdev->dev, "failed to allocate VGA arbiter data\n");
 		/*
@@ -1385,7 +1385,7 @@ static int vga_arb_open(struct inode *inode, struct file *file)

 	pr_debug("%s\n", __func__);

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (priv == NULL)
 		return -ENOMEM;
 	spin_lock_init(&priv->lock);
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index 11636634ae51..bbb43539a2b0 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -462,8 +462,8 @@ static int pcifront_scan_root(struct pcifront_device *pdev,
 	dev_info(&pdev->xdev->dev, "Creating PCI Frontend Bus %04x:%02x\n",
 		 domain, bus);

-	bus_entry = kzalloc(sizeof(*bus_entry), GFP_KERNEL);
-	sd = kzalloc(sizeof(*sd), GFP_KERNEL);
+	bus_entry = kzalloc_obj(*bus_entry, GFP_KERNEL);
+	sd = kzalloc_obj(*sd, GFP_KERNEL);
 	if (!bus_entry || !sd) {
 		err = -ENOMEM;
 		goto err_out;
@@ -687,7 +687,7 @@ static struct pcifront_device *alloc_pdev(struct xenbus_device *xdev)
 {
 	struct pcifront_device *pdev;

-	pdev = kzalloc(sizeof(struct pcifront_device), GFP_KERNEL);
+	pdev = kzalloc_obj(struct pcifront_device, GFP_KERNEL);
 	if (pdev == NULL)
 		goto out;

diff --git a/drivers/pcmcia/bcm63xx_pcmcia.c b/drivers/pcmcia/bcm63xx_pcmcia.c
index d3baed444646..cfb2a3724252 100644
--- a/drivers/pcmcia/bcm63xx_pcmcia.c
+++ b/drivers/pcmcia/bcm63xx_pcmcia.c
@@ -333,7 +333,7 @@ static int bcm63xx_drv_pcmcia_probe(struct platform_device *pdev)
 	int ret;
 	int irq;

-	skt = kzalloc(sizeof(*skt), GFP_KERNEL);
+	skt = kzalloc_obj(*skt, GFP_KERNEL);
 	if (!skt)
 		return -ENOMEM;
 	spin_lock_init(&skt->lock);
diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c
index 05b67fd93de6..e22ebce496d5 100644
--- a/drivers/pcmcia/cistpl.c
+++ b/drivers/pcmcia/cistpl.c
@@ -1393,12 +1393,12 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info)
 	destroy_cis_cache(s);
 	mutex_unlock(&s->ops_mutex);

-	tuple = kmalloc(sizeof(*tuple), GFP_KERNEL);
+	tuple = kmalloc_obj(*tuple, GFP_KERNEL);
 	if (tuple == NULL) {
 		dev_warn(&s->dev, "no memory to validate CIS\n");
 		return -ENOMEM;
 	}
-	p = kmalloc(sizeof(*p), GFP_KERNEL);
+	p = kmalloc_obj(*p, GFP_KERNEL);
 	if (p == NULL) {
 		kfree(tuple);
 		dev_warn(&s->dev, "no memory to validate CIS\n");
@@ -1480,11 +1480,11 @@ static ssize_t pccard_extract_cis(struct pcmcia_socket *s, char *buf,
 	u_char *tuplebuffer;
 	u_char *tempbuffer;

-	tuplebuffer = kmalloc_array(256, sizeof(u_char), GFP_KERNEL);
+	tuplebuffer = kmalloc_objs(u_char, 256, GFP_KERNEL);
 	if (!tuplebuffer)
 		return -ENOMEM;

-	tempbuffer = kmalloc_array(258, sizeof(u_char), GFP_KERNEL);
+	tempbuffer = kmalloc_objs(u_char, 258, GFP_KERNEL);
 	if (!tempbuffer) {
 		ret = -ENOMEM;
 		goto free_tuple;
diff --git a/drivers/pcmcia/db1xxx_ss.c b/drivers/pcmcia/db1xxx_ss.c
index 85d2616061dd..5f80ad72566b 100644
--- a/drivers/pcmcia/db1xxx_ss.c
+++ b/drivers/pcmcia/db1xxx_ss.c
@@ -427,7 +427,7 @@ static int db1x_pcmcia_socket_probe(struct platform_device *pdev)
 	struct resource *r;
 	int ret, bid;

-	sock = kzalloc(sizeof(struct db1x_pcmcia_sock), GFP_KERNEL);
+	sock = kzalloc_obj(struct db1x_pcmcia_sock, GFP_KERNEL);
 	if (!sock)
 		return -ENOMEM;

diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
index 18f4eef28dbc..9c26aeb39dcf 100644
--- a/drivers/pcmcia/ds.c
+++ b/drivers/pcmcia/ds.c
@@ -108,7 +108,7 @@ new_id_store(struct device_driver *driver, const char *buf, size_t count)
 	if (fields < 6)
 		return -EINVAL;

-	dynid = kzalloc(sizeof(struct pcmcia_dynid), GFP_KERNEL);
+	dynid = kzalloc_obj(struct pcmcia_dynid, GFP_KERNEL);
 	if (!dynid)
 		return -ENOMEM;

@@ -402,7 +402,7 @@ static int pcmcia_device_query(struct pcmcia_device *p_dev)
 	cistpl_vers_1_t	*vers1;
 	unsigned int i;

-	vers1 = kmalloc(sizeof(*vers1), GFP_KERNEL);
+	vers1 = kmalloc_obj(*vers1, GFP_KERNEL);
 	if (!vers1)
 		return -ENOMEM;

@@ -428,7 +428,7 @@ static int pcmcia_device_query(struct pcmcia_device *p_dev)
 		 * probably memory cards (from pcmcia-cs) */
 		cistpl_device_geo_t *devgeo;

-		devgeo = kmalloc(sizeof(*devgeo), GFP_KERNEL);
+		devgeo = kmalloc_obj(*devgeo, GFP_KERNEL);
 		if (!devgeo) {
 			kfree(vers1);
 			return -ENOMEM;
@@ -488,7 +488,7 @@ static struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s,

 	pr_debug("adding device to %d, function %d\n", s->sock, function);

-	p_dev = kzalloc(sizeof(struct pcmcia_device), GFP_KERNEL);
+	p_dev = kzalloc_obj(struct pcmcia_device, GFP_KERNEL);
 	if (!p_dev)
 		goto err_put;

@@ -542,7 +542,7 @@ static struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s,
 	if (!p_dev->function_config) {
 		config_t *c;
 		dev_dbg(&p_dev->dev, "creating config_t\n");
-		c = kzalloc(sizeof(struct config_t), GFP_KERNEL);
+		c = kzalloc_obj(struct config_t, GFP_KERNEL);
 		if (!c) {
 			mutex_unlock(&s->ops_mutex);
 			goto err_unreg;
diff --git a/drivers/pcmcia/electra_cf.c b/drivers/pcmcia/electra_cf.c
index 2530079d38f4..05d78262e408 100644
--- a/drivers/pcmcia/electra_cf.c
+++ b/drivers/pcmcia/electra_cf.c
@@ -190,7 +190,7 @@ static int electra_cf_probe(struct platform_device *ofdev)
 	if (err)
 		return -EINVAL;

-	cf = kzalloc(sizeof(*cf), GFP_KERNEL);
+	cf = kzalloc_obj(*cf, GFP_KERNEL);
 	if (!cf)
 		return -ENOMEM;

diff --git a/drivers/pcmcia/omap_cf.c b/drivers/pcmcia/omap_cf.c
index d6f24c7d1562..c43f15557906 100644
--- a/drivers/pcmcia/omap_cf.c
+++ b/drivers/pcmcia/omap_cf.c
@@ -218,7 +218,7 @@ static int __init omap_cf_probe(struct platform_device *pdev)
 	if (!res)
 		return -EINVAL;

-	cf = kzalloc(sizeof *cf, GFP_KERNEL);
+	cf = kzalloc_obj(*cf, GFP_KERNEL);
 	if (!cf)
 		return -ENOMEM;
 	timer_setup(&cf->timer, omap_cf_timer, 0);
diff --git a/drivers/pcmcia/pcmcia_cis.c b/drivers/pcmcia/pcmcia_cis.c
index 6bc0bc24d357..f84ca5cde76b 100644
--- a/drivers/pcmcia/pcmcia_cis.c
+++ b/drivers/pcmcia/pcmcia_cis.c
@@ -264,7 +264,7 @@ int pcmcia_loop_config(struct pcmcia_device *p_dev,
 	struct pcmcia_cfg_mem *cfg_mem;
 	int ret;

-	cfg_mem = kzalloc(sizeof(struct pcmcia_cfg_mem), GFP_KERNEL);
+	cfg_mem = kzalloc_obj(struct pcmcia_cfg_mem, GFP_KERNEL);
 	if (cfg_mem == NULL)
 		return -ENOMEM;

diff --git a/drivers/pcmcia/pd6729.c b/drivers/pcmcia/pd6729.c
index 6868b60fd325..3f4fc34d1b54 100644
--- a/drivers/pcmcia/pd6729.c
+++ b/drivers/pcmcia/pd6729.c
@@ -629,8 +629,7 @@ static int pd6729_pci_probe(struct pci_dev *dev,
 	char configbyte;
 	struct pd6729_socket *socket;

-	socket = kcalloc(MAX_SOCKETS, sizeof(struct pd6729_socket),
-			 GFP_KERNEL);
+	socket = kzalloc_objs(struct pd6729_socket, MAX_SOCKETS, GFP_KERNEL);
 	if (!socket) {
 		dev_warn(&dev->dev, "failed to kzalloc socket.\n");
 		return -ENOMEM;
diff --git a/drivers/pcmcia/rsrc_mgr.c b/drivers/pcmcia/rsrc_mgr.c
index 3a1d2baa466f..f6606b772eff 100644
--- a/drivers/pcmcia/rsrc_mgr.c
+++ b/drivers/pcmcia/rsrc_mgr.c
@@ -31,7 +31,7 @@ struct resource *pcmcia_make_resource(resource_size_t start,
 					resource_size_t end,
 					unsigned long flags, const char *name)
 {
-	struct resource *res = kzalloc(sizeof(*res), GFP_KERNEL);
+	struct resource *res = kzalloc_obj(*res, GFP_KERNEL);

 	if (res) {
 		res->name = name;
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c
index da494fe451ba..3531d98e5bb1 100644
--- a/drivers/pcmcia/rsrc_nonstatic.c
+++ b/drivers/pcmcia/rsrc_nonstatic.c
@@ -117,7 +117,7 @@ static int add_interval(struct resource_map *map, u_long base, u_long num)
 		if ((p->next == map) || (p->next->base > base+num-1))
 			break;
 	}
-	q = kmalloc(sizeof(struct resource_map), GFP_KERNEL);
+	q = kmalloc_obj(struct resource_map, GFP_KERNEL);
 	if (!q) {
 		printk(KERN_WARNING "out of memory to update resources\n");
 		return -ENOMEM;
@@ -155,8 +155,7 @@ static int sub_interval(struct resource_map *map, u_long base, u_long num)
 				q->num = base - q->base;
 			} else {
 				/* Split the block into two pieces */
-				p = kmalloc(sizeof(struct resource_map),
-					GFP_KERNEL);
+				p = kmalloc_obj(struct resource_map, GFP_KERNEL);
 				if (!p) {
 					printk(KERN_WARNING "out of memory to update resources\n");
 					return -ENOMEM;
@@ -1023,7 +1022,7 @@ static int nonstatic_init(struct pcmcia_socket *s)
 {
 	struct socket_data *data;

-	data = kzalloc(sizeof(struct socket_data), GFP_KERNEL);
+	data = kzalloc_obj(struct socket_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/pcmcia/sa1111_generic.c b/drivers/pcmcia/sa1111_generic.c
index 2a67e33fb5f0..b0c08d8a43a8 100644
--- a/drivers/pcmcia/sa1111_generic.c
+++ b/drivers/pcmcia/sa1111_generic.c
@@ -153,7 +153,7 @@ int sa1111_pcmcia_add(struct sa1111_dev *dev, struct pcmcia_low_level *ops,
 	ops->socket_state = sa1111_pcmcia_socket_state;

 	for (i = 0; i < ops->nr; i++) {
-		s = kzalloc(sizeof(*s), GFP_KERNEL);
+		s = kzalloc_obj(*s, GFP_KERNEL);
 		if (!s)
 			return -ENOMEM;

diff --git a/drivers/pcmcia/xxs1500_ss.c b/drivers/pcmcia/xxs1500_ss.c
index f84dd5914a6b..2d7e674d86d6 100644
--- a/drivers/pcmcia/xxs1500_ss.c
+++ b/drivers/pcmcia/xxs1500_ss.c
@@ -212,7 +212,7 @@ static int xxs1500_pcmcia_probe(struct platform_device *pdev)
 	struct resource *r;
 	int ret, irq;

-	sock = kzalloc(sizeof(struct xxs1500_pcmcia_sock), GFP_KERNEL);
+	sock = kzalloc_obj(struct xxs1500_pcmcia_sock, GFP_KERNEL);
 	if (!sock)
 		return -ENOMEM;

diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c
index 34c4eaee7dfc..ddff589bebc8 100644
--- a/drivers/pcmcia/yenta_socket.c
+++ b/drivers/pcmcia/yenta_socket.c
@@ -1171,7 +1171,7 @@ static int yenta_probe(struct pci_dev *dev, const struct pci_device_id *id)
 		return -ENODEV;
 	}

-	socket = kzalloc(sizeof(struct yenta_socket), GFP_KERNEL);
+	socket = kzalloc_obj(struct yenta_socket, GFP_KERNEL);
 	if (!socket)
 		return -ENOMEM;

diff --git a/drivers/peci/core.c b/drivers/peci/core.c
index 936c1fadefe5..f54341959769 100644
--- a/drivers/peci/core.c
+++ b/drivers/peci/core.c
@@ -52,7 +52,7 @@ static struct peci_controller *peci_controller_alloc(struct device *dev,
 	if (!ops->xfer)
 		return ERR_PTR(-EINVAL);

-	controller = kzalloc(sizeof(*controller), GFP_KERNEL);
+	controller = kzalloc_obj(*controller, GFP_KERNEL);
 	if (!controller)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/peci/cpu.c b/drivers/peci/cpu.c
index fbccc1d1b637..050612e2d3ca 100644
--- a/drivers/peci/cpu.c
+++ b/drivers/peci/cpu.c
@@ -199,7 +199,7 @@ static struct auxiliary_device *adev_alloc(struct peci_cpu *priv, int idx)
 	const char *name;
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/peci/device.c b/drivers/peci/device.c
index 416635029f55..ed4177b72f0e 100644
--- a/drivers/peci/device.c
+++ b/drivers/peci/device.c
@@ -170,7 +170,7 @@ int peci_device_create(struct peci_controller *controller, u8 addr)
 		return ret;
 	}

-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		return -ENOMEM;

diff --git a/drivers/peci/request.c b/drivers/peci/request.c
index e6327af45fc7..437a59146dff 100644
--- a/drivers/peci/request.c
+++ b/drivers/peci/request.c
@@ -203,7 +203,7 @@ struct peci_request *peci_request_alloc(struct peci_device *device, u8 tx_len, u
 	 * should be converted to DMA API once support for controllers that do
 	 * allow it is added to avoid an extra copy.
 	 */
-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return NULL;

diff --git a/drivers/perf/alibaba_uncore_drw_pmu.c b/drivers/perf/alibaba_uncore_drw_pmu.c
index 99a0ef9817e0..3c5ec82f0454 100644
--- a/drivers/perf/alibaba_uncore_drw_pmu.c
+++ b/drivers/perf/alibaba_uncore_drw_pmu.c
@@ -431,7 +431,7 @@ static struct ali_drw_pmu_irq *__ali_drw_pmu_init_irq(struct platform_device
 			return irq;
 	}

-	irq = kzalloc(sizeof(*irq), GFP_KERNEL);
+	irq = kzalloc_obj(*irq, GFP_KERNEL);
 	if (!irq)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/perf/arm-cmn.c b/drivers/perf/arm-cmn.c
index 4fbafc4b7984..dd87d29c395a 100644
--- a/drivers/perf/arm-cmn.c
+++ b/drivers/perf/arm-cmn.c
@@ -1700,7 +1700,7 @@ static int arm_cmn_validate_group(struct arm_cmn *cmn, struct perf_event *event)
 	if (event->pmu != leader->pmu && !is_software_event(leader))
 		return -EINVAL;

-	val = kzalloc(sizeof(*val), GFP_KERNEL);
+	val = kzalloc_obj(*val, GFP_KERNEL);
 	if (!val)
 		return -ENOMEM;

diff --git a/drivers/perf/arm_dmc620_pmu.c b/drivers/perf/arm_dmc620_pmu.c
index 619cf937602f..3354ef908a56 100644
--- a/drivers/perf/arm_dmc620_pmu.c
+++ b/drivers/perf/arm_dmc620_pmu.c
@@ -432,7 +432,7 @@ static struct dmc620_pmu_irq *__dmc620_pmu_get_irq(int irq_num)
 		if (irq->irq_num == irq_num && refcount_inc_not_zero(&irq->refcount))
 			return irq;

-	irq = kzalloc(sizeof(*irq), GFP_KERNEL);
+	irq = kzalloc_obj(*irq, GFP_KERNEL);
 	if (!irq)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c
index 973a027d9063..5e7da5286d2c 100644
--- a/drivers/perf/arm_pmu.c
+++ b/drivers/perf/arm_pmu.c
@@ -864,7 +864,7 @@ struct arm_pmu *armpmu_alloc(void)
 	struct arm_pmu *pmu;
 	int cpu;

-	pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
+	pmu = kzalloc_obj(*pmu, GFP_KERNEL);
 	if (!pmu)
 		goto out;

diff --git a/drivers/perf/arm_spe_pmu.c b/drivers/perf/arm_spe_pmu.c
index 5410fb7428d0..eca2955693dc 100644
--- a/drivers/perf/arm_spe_pmu.c
+++ b/drivers/perf/arm_spe_pmu.c
@@ -1020,7 +1020,7 @@ static void *arm_spe_pmu_setup_aux(struct perf_event *event, void **pages,
 	if (!buf)
 		return NULL;

-	pglist = kcalloc(nr_pages, sizeof(*pglist), GFP_KERNEL);
+	pglist = kzalloc_objs(*pglist, nr_pages, GFP_KERNEL);
 	if (!pglist)
 		goto out_free_buf;

diff --git a/drivers/perf/dwc_pcie_pmu.c b/drivers/perf/dwc_pcie_pmu.c
index 22f73ac894e9..ceb039306bb6 100644
--- a/drivers/perf/dwc_pcie_pmu.c
+++ b/drivers/perf/dwc_pcie_pmu.c
@@ -649,7 +649,7 @@ static int dwc_pcie_register_dev(struct pci_dev *pdev)
 	if (IS_ERR(plat_dev))
 		return PTR_ERR(plat_dev);

-	dev_info = kzalloc(sizeof(*dev_info), GFP_KERNEL);
+	dev_info = kzalloc_obj(*dev_info, GFP_KERNEL);
 	if (!dev_info) {
 		platform_device_unregister(plat_dev);
 		return -ENOMEM;
diff --git a/drivers/perf/riscv_pmu.c b/drivers/perf/riscv_pmu.c
index 7644147d50b4..e5e43899ea74 100644
--- a/drivers/perf/riscv_pmu.c
+++ b/drivers/perf/riscv_pmu.c
@@ -389,7 +389,7 @@ struct riscv_pmu *riscv_pmu_alloc(void)
 	int cpuid, i;
 	struct cpu_hw_events *cpuc;

-	pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
+	pmu = kzalloc_obj(*pmu, GFP_KERNEL);
 	if (!pmu)
 		goto out;

diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c
index 9dcc22fd48ef..09acac7ae073 100644
--- a/drivers/perf/riscv_pmu_sbi.c
+++ b/drivers/perf/riscv_pmu_sbi.c
@@ -309,7 +309,8 @@ static int pmu_sbi_check_event_info(void)
 	int i, j, k, result = 0, count = 0;
 	struct sbiret ret;

-	event_info_shmem = kcalloc(num_events, sizeof(*event_info_shmem), GFP_KERNEL);
+	event_info_shmem = kzalloc_objs(*event_info_shmem, num_events,
+					GFP_KERNEL);
 	if (!event_info_shmem)
 		return -ENOMEM;

@@ -872,7 +873,7 @@ static int pmu_sbi_get_ctrinfo(int nctr, unsigned long *mask)
 	int i, num_hw_ctr = 0, num_fw_ctr = 0;
 	union sbi_pmu_ctr_info cinfo;

-	pmu_ctr_list = kcalloc(nctr, sizeof(*pmu_ctr_list), GFP_KERNEL);
+	pmu_ctr_list = kzalloc_objs(*pmu_ctr_list, nctr, GFP_KERNEL);
 	if (!pmu_ctr_list)
 		return -ENOMEM;

diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 4ad396214d0c..b1b5ddd9e05e 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -75,7 +75,7 @@ int phy_create_lookup(struct phy *phy, const char *con_id, const char *dev_id)
 	if (!phy || !dev_id || !con_id)
 		return -EINVAL;

-	pl = kzalloc(sizeof(*pl), GFP_KERNEL);
+	pl = kzalloc_obj(*pl, GFP_KERNEL);
 	if (!pl)
 		return -ENOMEM;

@@ -1004,7 +1004,7 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
 	if (WARN_ON(!dev))
 		return ERR_PTR(-EINVAL);

-	phy = kzalloc(sizeof(*phy), GFP_KERNEL);
+	phy = kzalloc_obj(*phy, GFP_KERNEL);
 	if (!phy)
 		return ERR_PTR(-ENOMEM);

@@ -1174,7 +1174,7 @@ struct phy_provider *__of_phy_provider_register(struct device *dev,
 		children = dev->of_node;
 	}

-	phy_provider = kzalloc(sizeof(*phy_provider), GFP_KERNEL);
+	phy_provider = kzalloc_obj(*phy_provider, GFP_KERNEL);
 	if (!phy_provider)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/phy/tegra/xusb-tegra124.c b/drivers/phy/tegra/xusb-tegra124.c
index f4f75ea033b8..f180ef8a8829 100644
--- a/drivers/phy/tegra/xusb-tegra124.c
+++ b/drivers/phy/tegra/xusb-tegra124.c
@@ -430,7 +430,7 @@ tegra124_usb2_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_usb2_lane *usb2;
 	int err;

-	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
+	usb2 = kzalloc_obj(*usb2, GFP_KERNEL);
 	if (!usb2)
 		return ERR_PTR(-ENOMEM);

@@ -614,7 +614,7 @@ tegra124_usb2_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
+	usb2 = kzalloc_obj(*usb2, GFP_KERNEL);
 	if (!usb2)
 		return ERR_PTR(-ENOMEM);

@@ -679,7 +679,7 @@ tegra124_ulpi_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_ulpi_lane *ulpi;
 	int err;

-	ulpi = kzalloc(sizeof(*ulpi), GFP_KERNEL);
+	ulpi = kzalloc_obj(*ulpi, GFP_KERNEL);
 	if (!ulpi)
 		return ERR_PTR(-ENOMEM);

@@ -751,7 +751,7 @@ tegra124_ulpi_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	ulpi = kzalloc(sizeof(*ulpi), GFP_KERNEL);
+	ulpi = kzalloc_obj(*ulpi, GFP_KERNEL);
 	if (!ulpi)
 		return ERR_PTR(-ENOMEM);

@@ -815,7 +815,7 @@ tegra124_hsic_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_hsic_lane *hsic;
 	int err;

-	hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
+	hsic = kzalloc_obj(*hsic, GFP_KERNEL);
 	if (!hsic)
 		return ERR_PTR(-ENOMEM);

@@ -967,7 +967,7 @@ tegra124_hsic_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
+	hsic = kzalloc_obj(*hsic, GFP_KERNEL);
 	if (!hsic)
 		return ERR_PTR(-ENOMEM);

@@ -1035,7 +1035,7 @@ tegra124_pcie_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_pcie_lane *pcie;
 	int err;

-	pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
+	pcie = kzalloc_obj(*pcie, GFP_KERNEL);
 	if (!pcie)
 		return ERR_PTR(-ENOMEM);

@@ -1155,7 +1155,7 @@ tegra124_pcie_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
+	pcie = kzalloc_obj(*pcie, GFP_KERNEL);
 	if (!pcie)
 		return ERR_PTR(-ENOMEM);

@@ -1213,7 +1213,7 @@ tegra124_sata_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_sata_lane *sata;
 	int err;

-	sata = kzalloc(sizeof(*sata), GFP_KERNEL);
+	sata = kzalloc_obj(*sata, GFP_KERNEL);
 	if (!sata)
 		return ERR_PTR(-ENOMEM);

@@ -1351,7 +1351,7 @@ tegra124_sata_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	sata = kzalloc(sizeof(*sata), GFP_KERNEL);
+	sata = kzalloc_obj(*sata, GFP_KERNEL);
 	if (!sata)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/phy/tegra/xusb-tegra186.c b/drivers/phy/tegra/xusb-tegra186.c
index bec9616c4a2e..eb643af34d68 100644
--- a/drivers/phy/tegra/xusb-tegra186.c
+++ b/drivers/phy/tegra/xusb-tegra186.c
@@ -302,7 +302,7 @@ tegra186_usb2_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_usb2_lane *usb2;
 	int err;

-	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
+	usb2 = kzalloc_obj(*usb2, GFP_KERNEL);
 	if (!usb2)
 		return ERR_PTR(-ENOMEM);

@@ -1031,7 +1031,7 @@ tegra186_usb2_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
+	usb2 = kzalloc_obj(*usb2, GFP_KERNEL);
 	if (!usb2)
 		return ERR_PTR(-ENOMEM);

@@ -1113,7 +1113,7 @@ tegra186_usb3_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_usb3_lane *usb3;
 	int err;

-	usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
+	usb3 = kzalloc_obj(*usb3, GFP_KERNEL);
 	if (!usb3)
 		return ERR_PTR(-ENOMEM);

@@ -1417,7 +1417,7 @@ tegra186_usb3_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
+	usb3 = kzalloc_obj(*usb3, GFP_KERNEL);
 	if (!usb3)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/phy/tegra/xusb-tegra210.c b/drivers/phy/tegra/xusb-tegra210.c
index 3409924498e9..872ae93e0722 100644
--- a/drivers/phy/tegra/xusb-tegra210.c
+++ b/drivers/phy/tegra/xusb-tegra210.c
@@ -1759,7 +1759,7 @@ tegra210_usb2_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_usb2_lane *usb2;
 	int err;

-	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
+	usb2 = kzalloc_obj(*usb2, GFP_KERNEL);
 	if (!usb2)
 		return ERR_PTR(-ENOMEM);

@@ -2185,7 +2185,7 @@ tegra210_usb2_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
+	usb2 = kzalloc_obj(*usb2, GFP_KERNEL);
 	if (!usb2)
 		return ERR_PTR(-ENOMEM);

@@ -2255,7 +2255,7 @@ tegra210_hsic_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_hsic_lane *hsic;
 	int err;

-	hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
+	hsic = kzalloc_obj(*hsic, GFP_KERNEL);
 	if (!hsic)
 		return ERR_PTR(-ENOMEM);

@@ -2439,7 +2439,7 @@ tegra210_hsic_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
+	hsic = kzalloc_obj(*hsic, GFP_KERNEL);
 	if (!hsic)
 		return ERR_PTR(-ENOMEM);

@@ -2688,7 +2688,7 @@ tegra210_pcie_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_pcie_lane *pcie;
 	int err;

-	pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
+	pcie = kzalloc_obj(*pcie, GFP_KERNEL);
 	if (!pcie)
 		return ERR_PTR(-ENOMEM);

@@ -2786,7 +2786,7 @@ tegra210_pcie_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
+	pcie = kzalloc_obj(*pcie, GFP_KERNEL);
 	if (!pcie)
 		return ERR_PTR(-ENOMEM);

@@ -2858,7 +2858,7 @@ tegra210_sata_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 	struct tegra_xusb_sata_lane *sata;
 	int err;

-	sata = kzalloc(sizeof(*sata), GFP_KERNEL);
+	sata = kzalloc_obj(*sata, GFP_KERNEL);
 	if (!sata)
 		return ERR_PTR(-ENOMEM);

@@ -2955,7 +2955,7 @@ tegra210_sata_pad_probe(struct tegra_xusb_padctl *padctl,
 	struct tegra_xusb_pad *pad;
 	int err;

-	sata = kzalloc(sizeof(*sata), GFP_KERNEL);
+	sata = kzalloc_obj(*sata, GFP_KERNEL);
 	if (!sata)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/phy/tegra/xusb.c b/drivers/phy/tegra/xusb.c
index c89df95aa6ca..6667ac08754d 100644
--- a/drivers/phy/tegra/xusb.c
+++ b/drivers/phy/tegra/xusb.c
@@ -796,7 +796,7 @@ static int tegra_xusb_add_usb2_port(struct tegra_xusb_padctl *padctl,
 	if (!np || !of_device_is_available(np))
 		goto out;

-	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
+	usb2 = kzalloc_obj(*usb2, GFP_KERNEL);
 	if (!usb2) {
 		err = -ENOMEM;
 		goto out;
@@ -863,7 +863,7 @@ static int tegra_xusb_add_ulpi_port(struct tegra_xusb_padctl *padctl,
 	if (!np || !of_device_is_available(np))
 		goto out;

-	ulpi = kzalloc(sizeof(*ulpi), GFP_KERNEL);
+	ulpi = kzalloc_obj(*ulpi, GFP_KERNEL);
 	if (!ulpi) {
 		err = -ENOMEM;
 		goto out;
@@ -919,7 +919,7 @@ static int tegra_xusb_add_hsic_port(struct tegra_xusb_padctl *padctl,
 	if (!np || !of_device_is_available(np))
 		goto out;

-	hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
+	hsic = kzalloc_obj(*hsic, GFP_KERNEL);
 	if (!hsic) {
 		err = -ENOMEM;
 		goto out;
@@ -1004,7 +1004,7 @@ static int tegra_xusb_add_usb3_port(struct tegra_xusb_padctl *padctl,
 	if (!np || !of_device_is_available(np))
 		goto out;

-	usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
+	usb3 = kzalloc_obj(*usb3, GFP_KERNEL);
 	if (!usb3) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
index c165674c5b4d..8383c14035ef 100644
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
@@ -803,7 +803,7 @@ static int bcm2835_pctl_dt_node_to_map_pull(struct bcm2835_pinctrl *pc,
 		return -EINVAL;
 	}

-	configs = kzalloc(sizeof(*configs), GFP_KERNEL);
+	configs = kzalloc_obj(*configs, GFP_KERNEL);
 	if (!configs)
 		return -ENOMEM;
 	configs[0] = pinconf_to_config_packed(BCM2835_PINCONF_PARAM_PULL, pull);
@@ -873,8 +873,8 @@ static int bcm2835_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
 		maps_per_pin++;
 	if (num_pulls)
 		maps_per_pin++;
-	cur_map = maps = kcalloc(num_pins * maps_per_pin, sizeof(*maps),
-				 GFP_KERNEL);
+	cur_map = maps = kzalloc_objs(*maps, num_pins * maps_per_pin,
+				      GFP_KERNEL);
 	if (!maps)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/berlin/berlin.c b/drivers/pinctrl/berlin/berlin.c
index 8afcfa4e5694..f58cb046e9ea 100644
--- a/drivers/pinctrl/berlin/berlin.c
+++ b/drivers/pinctrl/berlin/berlin.c
@@ -215,7 +215,8 @@ static int berlin_pinctrl_build_state(struct platform_device *pdev)
 	}

 	/* we will reallocate later */
-	pctrl->functions = kcalloc(max_functions, sizeof(*pctrl->functions), GFP_KERNEL);
+	pctrl->functions = kzalloc_objs(*pctrl->functions, max_functions,
+					GFP_KERNEL);
 	if (!pctrl->functions)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index 342bda2a1bd6..3d728ed310f4 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -215,7 +215,7 @@ static int pinctrl_register_one_pin(struct pinctrl_dev *pctldev,
 		return -EINVAL;
 	}

-	pindesc = kzalloc(sizeof(*pindesc), GFP_KERNEL);
+	pindesc = kzalloc_obj(*pindesc, GFP_KERNEL);
 	if (!pindesc)
 		return -ENOMEM;

@@ -955,7 +955,7 @@ static struct pinctrl_state *create_state(struct pinctrl *p,
 {
 	struct pinctrl_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return ERR_PTR(-ENOMEM);

@@ -983,7 +983,7 @@ static int add_setting(struct pinctrl *p, struct pinctrl_dev *pctldev,
 	if (map->type == PIN_MAP_TYPE_DUMMY_STATE)
 		return 0;

-	setting = kzalloc(sizeof(*setting), GFP_KERNEL);
+	setting = kzalloc_obj(*setting, GFP_KERNEL);
 	if (!setting)
 		return -ENOMEM;

@@ -1063,7 +1063,7 @@ static struct pinctrl *create_pinctrl(struct device *dev,
 	 * mapping, this is what consumers will get when requesting
 	 * a pin control handle with pinctrl_get()
 	 */
-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return ERR_PTR(-ENOMEM);
 	p->dev = dev;
@@ -1483,7 +1483,7 @@ int pinctrl_register_mappings(const struct pinctrl_map *maps,
 		}
 	}

-	maps_node = kzalloc(sizeof(*maps_node), GFP_KERNEL);
+	maps_node = kzalloc_obj(*maps_node, GFP_KERNEL);
 	if (!maps_node)
 		return -ENOMEM;

@@ -2076,7 +2076,7 @@ pinctrl_init_controller(const struct pinctrl_desc *pctldesc, struct device *dev,
 	if (!pctldesc->name)
 		return ERR_PTR(-EINVAL);

-	pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL);
+	pctldev = kzalloc_obj(*pctldev, GFP_KERNEL);
 	if (!pctldev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c
index 0b7f74beb6a6..ed3671f94463 100644
--- a/drivers/pinctrl/devicetree.c
+++ b/drivers/pinctrl/devicetree.c
@@ -84,7 +84,7 @@ static int dt_remember_or_free_map(struct pinctrl *p, const char *statename,
 	}

 	/* Remember the converted mapping table entries */
-	dt_map = kzalloc(sizeof(*dt_map), GFP_KERNEL);
+	dt_map = kzalloc_obj(*dt_map, GFP_KERNEL);
 	if (!dt_map)
 		goto err_free_map;

@@ -187,7 +187,7 @@ static int dt_remember_dummy_state(struct pinctrl *p, const char *statename)
 {
 	struct pinctrl_map *map;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/freescale/pinctrl-imx-scmi.c b/drivers/pinctrl/freescale/pinctrl-imx-scmi.c
index dab2fabdf456..9e3f29e8d993 100644
--- a/drivers/pinctrl/freescale/pinctrl-imx-scmi.c
+++ b/drivers/pinctrl/freescale/pinctrl-imx-scmi.c
@@ -99,8 +99,7 @@ static int pinctrl_scmi_imx_dt_node_to_map(struct pinctrl_dev *pctldev,
 	num_pins = size / pin_size;
 	map_num = num_pins;

-	new_map = kmalloc_array(map_num, sizeof(struct pinctrl_map),
-				GFP_KERNEL);
+	new_map = kmalloc_objs(struct pinctrl_map, map_num, GFP_KERNEL);
 	if (!new_map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c
index 731c58ad43ee..1d892cbb59a6 100644
--- a/drivers/pinctrl/freescale/pinctrl-imx.c
+++ b/drivers/pinctrl/freescale/pinctrl-imx.c
@@ -88,8 +88,7 @@ static int imx_dt_node_to_map(struct pinctrl_dev *pctldev,
 		}
 	}

-	new_map = kmalloc_array(map_num, sizeof(struct pinctrl_map),
-				GFP_KERNEL);
+	new_map = kmalloc_objs(struct pinctrl_map, map_num, GFP_KERNEL);
 	if (!new_map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/freescale/pinctrl-imx1-core.c b/drivers/pinctrl/freescale/pinctrl-imx1-core.c
index af1ccfc90bff..abffe09bdb83 100644
--- a/drivers/pinctrl/freescale/pinctrl-imx1-core.c
+++ b/drivers/pinctrl/freescale/pinctrl-imx1-core.c
@@ -244,8 +244,7 @@ static int imx1_dt_node_to_map(struct pinctrl_dev *pctldev,
 	for (i = 0; i < grp->npins; i++)
 		map_num++;

-	new_map = kmalloc_array(map_num, sizeof(struct pinctrl_map),
-				GFP_KERNEL);
+	new_map = kmalloc_objs(struct pinctrl_map, map_num, GFP_KERNEL);
 	if (!new_map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/freescale/pinctrl-mxs.c b/drivers/pinctrl/freescale/pinctrl-mxs.c
index edb242d30609..e11697efeb47 100644
--- a/drivers/pinctrl/freescale/pinctrl-mxs.c
+++ b/drivers/pinctrl/freescale/pinctrl-mxs.c
@@ -92,7 +92,7 @@ static int mxs_dt_node_to_map(struct pinctrl_dev *pctldev,
 	if (!purecfg && config)
 		new_num = 2;

-	new_map = kcalloc(new_num, sizeof(*new_map), GFP_KERNEL);
+	new_map = kzalloc_objs(*new_map, new_num, GFP_KERNEL);
 	if (!new_map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/mvebu/pinctrl-mvebu.c b/drivers/pinctrl/mvebu/pinctrl-mvebu.c
index 84a119718f86..59fede73c31d 100644
--- a/drivers/pinctrl/mvebu/pinctrl-mvebu.c
+++ b/drivers/pinctrl/mvebu/pinctrl-mvebu.c
@@ -430,7 +430,7 @@ static int mvebu_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
 		return 0;
 	}

-	*map = kmalloc_array(nmaps, sizeof(**map), GFP_KERNEL);
+	*map = kmalloc_objs(**map, nmaps, GFP_KERNEL);
 	if (!*map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/nuvoton/pinctrl-ma35.c b/drivers/pinctrl/nuvoton/pinctrl-ma35.c
index 8d71dc53cc1d..9bbf73de5747 100644
--- a/drivers/pinctrl/nuvoton/pinctrl-ma35.c
+++ b/drivers/pinctrl/nuvoton/pinctrl-ma35.c
@@ -202,7 +202,7 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
 	}

 	map_num += grp->grp.npins;
-	new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
+	new_map = kzalloc_objs(*new_map, map_num, GFP_KERNEL);
 	if (!new_map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/nxp/pinctrl-s32cc.c b/drivers/pinctrl/nxp/pinctrl-s32cc.c
index 35511f83d056..e811803b7cc5 100644
--- a/drivers/pinctrl/nxp/pinctrl-s32cc.c
+++ b/drivers/pinctrl/nxp/pinctrl-s32cc.c
@@ -386,7 +386,7 @@ static int s32_pmx_gpio_request_enable(struct pinctrl_dev *pctldev,
 		return ret;

 	/* Save current configuration */
-	gpio_pin = kmalloc(sizeof(*gpio_pin), GFP_KERNEL);
+	gpio_pin = kmalloc_obj(*gpio_pin, GFP_KERNEL);
 	if (!gpio_pin)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/pinctrl-apple-gpio.c b/drivers/pinctrl/pinctrl-apple-gpio.c
index 2bd5013b19ac..c0ae52880b2e 100644
--- a/drivers/pinctrl/pinctrl-apple-gpio.c
+++ b/drivers/pinctrl/pinctrl-apple-gpio.c
@@ -400,8 +400,8 @@ static int apple_gpio_register(struct apple_gpio_pinctrl *pctl)
 		girq->parents = kmalloc_array(girq->num_parents,
 					      sizeof(*girq->parents),
 					      GFP_KERNEL);
-		irq_data = kmalloc_array(girq->num_parents, sizeof(*irq_data),
-					 GFP_KERNEL);
+		irq_data = kmalloc_objs(*irq_data, girq->num_parents,
+					GFP_KERNEL);
 		if (!girq->parents || !irq_data) {
 			ret = -ENOMEM;
 			goto out_free_irq_data;
diff --git a/drivers/pinctrl/pinctrl-k230.c b/drivers/pinctrl/pinctrl-k230.c
index 20f7c0f70eb7..8aeb540390c8 100644
--- a/drivers/pinctrl/pinctrl-k230.c
+++ b/drivers/pinctrl/pinctrl-k230.c
@@ -211,7 +211,7 @@ static int k230_dt_node_to_map(struct pinctrl_dev *pctldev,
 		map_num += info->groups[grp_id].num_pins + 1;
 	}

-	new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
+	new_map = kzalloc_objs(*new_map, map_num, GFP_KERNEL);
 	if (!new_map)
 		return -ENOMEM;
 	*map = new_map;
diff --git a/drivers/pinctrl/pinctrl-ocelot.c b/drivers/pinctrl/pinctrl-ocelot.c
index 6ea9544ddd06..0fe0527863b8 100644
--- a/drivers/pinctrl/pinctrl-ocelot.c
+++ b/drivers/pinctrl/pinctrl-ocelot.c
@@ -2262,7 +2262,7 @@ static void ocelot_irq_unmask_level(struct irq_data *data)
 	if (active) {
 		struct ocelot_irq_work *work;

-		work = kmalloc(sizeof(*work), GFP_ATOMIC);
+		work = kmalloc_obj(*work, GFP_ATOMIC);
 		if (!work)
 			return;

diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index 816823403e97..7e838a230cfe 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -415,7 +415,7 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,

 	map_num += grp->npins;

-	new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
+	new_map = kzalloc_objs(*new_map, map_num, GFP_KERNEL);
 	if (!new_map)
 		return -ENOMEM;

@@ -3604,7 +3604,7 @@ static int rockchip_pinconf_defer_pin(struct rockchip_pin_bank *bank,
 {
 	struct rockchip_pin_deferred *cfg;

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/pinctrl-rp1.c b/drivers/pinctrl/pinctrl-rp1.c
index ffc2f0b460a6..15ac2a6625c6 100644
--- a/drivers/pinctrl/pinctrl-rp1.c
+++ b/drivers/pinctrl/pinctrl-rp1.c
@@ -1158,7 +1158,7 @@ static int rp1_pctl_legacy_map_pull(struct rp1_pinctrl *pc,
 		return -EINVAL;
 	}

-	configs = kzalloc(sizeof(*configs), GFP_KERNEL);
+	configs = kzalloc_obj(*configs, GFP_KERNEL);
 	if (!configs)
 		return -ENOMEM;

@@ -1233,7 +1233,7 @@ static int rp1_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
 	if (num_configs || num_pulls)
 		maps_per_pin++;
 	reserved_maps = num_pins * maps_per_pin;
-	maps = kcalloc(reserved_maps, sizeof(*maps), GFP_KERNEL);
+	maps = kzalloc_objs(*maps, reserved_maps, GFP_KERNEL);
 	if (!maps)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c
index d5fb8649cd9a..51434aa4d99f 100644
--- a/drivers/pinctrl/pinctrl-scmi.c
+++ b/drivers/pinctrl/pinctrl-scmi.c
@@ -319,7 +319,7 @@ pinctrl_scmi_alloc_configs(struct pinctrl_dev *pctldev, u32 num_configs,
 	if (!*p_config_value)
 		return -ENOMEM;

-	*p_config_type = kcalloc(num_configs, sizeof(**p_config_type), GFP_KERNEL);
+	*p_config_type = kzalloc_objs(**p_config_type, num_configs, GFP_KERNEL);
 	if (!*p_config_type) {
 		kfree(*p_config_value);
 		return -ENOMEM;
diff --git a/drivers/pinctrl/pinctrl-th1520.c b/drivers/pinctrl/pinctrl-th1520.c
index 83e9c9f77370..3539c8b4d107 100644
--- a/drivers/pinctrl/pinctrl-th1520.c
+++ b/drivers/pinctrl/pinctrl-th1520.c
@@ -447,7 +447,7 @@ static int th1520_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
 			nmaps += npins;
 	}

-	map = kcalloc(nmaps, sizeof(*map), GFP_KERNEL);
+	map = kzalloc_objs(*map, nmaps, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/renesas/core.c b/drivers/pinctrl/renesas/core.c
index 96d6040a8871..ec74bc54286b 100644
--- a/drivers/pinctrl/renesas/core.c
+++ b/drivers/pinctrl/renesas/core.c
@@ -1273,8 +1273,7 @@ static void __init sh_pfc_check_driver(const struct platform_driver *pdrv)
 	    !of_find_matching_node(NULL, pdrv->driver.of_match_table))
 		return;

-	sh_pfc_regs = kcalloc(SH_PFC_MAX_REGS, sizeof(*sh_pfc_regs),
-			      GFP_KERNEL);
+	sh_pfc_regs = kzalloc_objs(*sh_pfc_regs, SH_PFC_MAX_REGS, GFP_KERNEL);
 	if (!sh_pfc_regs)
 		return;

diff --git a/drivers/pinctrl/renesas/pinctrl-rza1.c b/drivers/pinctrl/renesas/pinctrl-rza1.c
index 3cfa4c8be80e..3be4ee9d1419 100644
--- a/drivers/pinctrl/renesas/pinctrl-rza1.c
+++ b/drivers/pinctrl/renesas/pinctrl-rza1.c
@@ -1062,7 +1062,7 @@ static int rza1_dt_node_to_map(struct pinctrl_dev *pctldev,

 	/* Create map where to retrieve function and mux settings from */
 	*num_maps = 0;
-	*map = kzalloc(sizeof(**map), GFP_KERNEL);
+	*map = kzalloc_obj(**map, GFP_KERNEL);
 	if (!*map) {
 		ret = -ENOMEM;
 		goto remove_function;
diff --git a/drivers/pinctrl/renesas/pinctrl-rza2.c b/drivers/pinctrl/renesas/pinctrl-rza2.c
index 29a9db197599..1d43abc14df7 100644
--- a/drivers/pinctrl/renesas/pinctrl-rza2.c
+++ b/drivers/pinctrl/renesas/pinctrl-rza2.c
@@ -395,7 +395,7 @@ static int rza2_dt_node_to_map(struct pinctrl_dev *pctldev,

 	/* Create map where to retrieve function and mux settings from */
 	*num_maps = 0;
-	*map = kzalloc(sizeof(**map), GFP_KERNEL);
+	*map = kzalloc_obj(**map, GFP_KERNEL);
 	if (!*map) {
 		ret = -ENOMEM;
 		goto remove_function;
diff --git a/drivers/pinctrl/sophgo/pinctrl-sophgo-common.c b/drivers/pinctrl/sophgo/pinctrl-sophgo-common.c
index 7f1fd68db19e..5aef2a1082b5 100644
--- a/drivers/pinctrl/sophgo/pinctrl-sophgo-common.c
+++ b/drivers/pinctrl/sophgo/pinctrl-sophgo-common.c
@@ -94,7 +94,7 @@ int sophgo_pctrl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node
 	if (!grpnames)
 		return -ENOMEM;

-	map = kcalloc(ngroups * 2, sizeof(*map), GFP_KERNEL);
+	map = kzalloc_objs(*map, ngroups * 2, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/spacemit/pinctrl-k1.c b/drivers/pinctrl/spacemit/pinctrl-k1.c
index 71390402aaa6..1b29313ab36d 100644
--- a/drivers/pinctrl/spacemit/pinctrl-k1.c
+++ b/drivers/pinctrl/spacemit/pinctrl-k1.c
@@ -499,7 +499,7 @@ static int spacemit_pctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
 	if (!grpnames)
 		return -ENOMEM;

-	map = kcalloc(ngroups * 2, sizeof(*map), GFP_KERNEL);
+	map = kzalloc_objs(*map, ngroups * 2, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/spear/pinctrl-spear.c b/drivers/pinctrl/spear/pinctrl-spear.c
index a8c5fe973cd4..5af70ec62a76 100644
--- a/drivers/pinctrl/spear/pinctrl-spear.c
+++ b/drivers/pinctrl/spear/pinctrl-spear.c
@@ -173,7 +173,7 @@ static int spear_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
 		return -ENODEV;
 	}

-	*map = kcalloc(count, sizeof(**map), GFP_KERNEL);
+	*map = kzalloc_objs(**map, count, GFP_KERNEL);
 	if (!*map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c b/drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c
index 7fa13f282b85..a58c7e1362a9 100644
--- a/drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c
+++ b/drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c
@@ -517,7 +517,7 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
 	if (!pgnames)
 		return -ENOMEM;

-	map = kcalloc(nmaps, sizeof(*map), GFP_KERNEL);
+	map = kzalloc_objs(*map, nmaps, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c b/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c
index eb5cf8c067d1..6822a077d36f 100644
--- a/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c
+++ b/drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c
@@ -143,7 +143,7 @@ static int jh7110_dt_node_to_map(struct pinctrl_dev *pctldev,
 	if (!pgnames)
 		return -ENOMEM;

-	map = kcalloc(nmaps, sizeof(*map), GFP_KERNEL);
+	map = kzalloc_objs(*map, nmaps, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/sunplus/sppctl.c b/drivers/pinctrl/sunplus/sppctl.c
index fabe7efaa837..66575987f34b 100644
--- a/drivers/pinctrl/sunplus/sppctl.c
+++ b/drivers/pinctrl/sunplus/sppctl.c
@@ -865,7 +865,7 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node
 	if (nmG <= 0)
 		nmG = 0;

-	*map = kcalloc(*num_maps + nmG, sizeof(**map), GFP_KERNEL);
+	*map = kzalloc_objs(**map, *num_maps + nmG, GFP_KERNEL);
 	if (!(*map))
 		return -ENOMEM;

@@ -882,7 +882,7 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node
 			(*map)[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
 			(*map)[i].data.configs.num_configs = 1;
 			(*map)[i].data.configs.group_or_pin = pin_get_name(pctldev, pin_num);
-			configs = kmalloc(sizeof(*configs), GFP_KERNEL);
+			configs = kmalloc_obj(*configs, GFP_KERNEL);
 			if (!configs)
 				goto sppctl_map_err;
 			*configs = FIELD_GET(GENMASK(7, 0), dt_pin);
@@ -897,7 +897,7 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node
 			(*map)[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
 			(*map)[i].data.configs.num_configs = 1;
 			(*map)[i].data.configs.group_or_pin = pin_get_name(pctldev, pin_num);
-			configs = kmalloc(sizeof(*configs), GFP_KERNEL);
+			configs = kmalloc_obj(*configs, GFP_KERNEL);
 			if (!configs)
 				goto sppctl_map_err;
 			*configs = SPPCTL_IOP_CONFIGS;
diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.c b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
index 0fb057a07dcc..c41b91a5371f 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
@@ -435,7 +435,7 @@ static int sunxi_pctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
 	 * any configuration.
 	 */
 	nmaps = npins * 2;
-	*map = kmalloc_array(nmaps, sizeof(struct pinctrl_map), GFP_KERNEL);
+	*map = kmalloc_objs(struct pinctrl_map, nmaps, GFP_KERNEL);
 	if (!*map)
 		return -ENOMEM;

@@ -1328,9 +1328,8 @@ static int sunxi_pinctrl_build_state(struct platform_device *pdev)
 	 * special functions per pin, plus one entry for the sentinel.
 	 * We'll reallocate that later anyway.
 	 */
-	pctl->functions = kcalloc(7 * pctl->ngroups + 4,
-				  sizeof(*pctl->functions),
-				  GFP_KERNEL);
+	pctl->functions = kzalloc_objs(*pctl->functions, 7 * pctl->ngroups + 4,
+				       GFP_KERNEL);
 	if (!pctl->functions)
 		return -ENOMEM;

diff --git a/drivers/pinctrl/vt8500/pinctrl-wmt.c b/drivers/pinctrl/vt8500/pinctrl-wmt.c
index 7213a8d4bf09..f67a675acd24 100644
--- a/drivers/pinctrl/vt8500/pinctrl-wmt.c
+++ b/drivers/pinctrl/vt8500/pinctrl-wmt.c
@@ -251,7 +251,7 @@ static int wmt_pctl_dt_node_to_map_pull(struct wmt_pinctrl_data *data,
 		return group;
 	}

-	configs = kzalloc(sizeof(*configs), GFP_KERNEL);
+	configs = kzalloc_obj(*configs, GFP_KERNEL);
 	if (!configs)
 		return -ENOMEM;

@@ -344,8 +344,8 @@ static int wmt_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
 	if (num_pulls)
 		maps_per_pin++;

-	cur_map = maps = kcalloc(num_pins * maps_per_pin, sizeof(*maps),
-				 GFP_KERNEL);
+	cur_map = maps = kzalloc_objs(*maps, num_pins * maps_per_pin,
+				      GFP_KERNEL);
 	if (!maps)
 		return -ENOMEM;

diff --git a/drivers/platform/arm64/huawei-gaokun-ec.c b/drivers/platform/arm64/huawei-gaokun-ec.c
index 7170f8eb76f7..23a727bb230c 100644
--- a/drivers/platform/arm64/huawei-gaokun-ec.c
+++ b/drivers/platform/arm64/huawei-gaokun-ec.c
@@ -680,7 +680,7 @@ static int gaokun_aux_init(struct device *parent, const char *name,
 	struct auxiliary_device *adev;
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return -ENOMEM;

diff --git a/drivers/platform/chrome/chromeos_laptop.c b/drivers/platform/chrome/chromeos_laptop.c
index 0b92047265de..7a019827afa5 100644
--- a/drivers/platform/chrome/chromeos_laptop.c
+++ b/drivers/platform/chrome/chromeos_laptop.c
@@ -807,9 +807,8 @@ chromeos_laptop_prepare_acpi_peripherals(struct chromeos_laptop *cros_laptop,
 	if (!n_peripherals)
 		return 0;

-	acpi_peripherals = kcalloc(n_peripherals,
-				   sizeof(*src->acpi_peripherals),
-				   GFP_KERNEL);
+	acpi_peripherals = kzalloc_objs(*src->acpi_peripherals, n_peripherals,
+					GFP_KERNEL);
 	if (!acpi_peripherals)
 		return -ENOMEM;

@@ -881,7 +880,7 @@ chromeos_laptop_prepare(const struct chromeos_laptop *src)
 	struct chromeos_laptop *cros_laptop;
 	int error;

-	cros_laptop = kzalloc(sizeof(*cros_laptop), GFP_KERNEL);
+	cros_laptop = kzalloc_obj(*cros_laptop, GFP_KERNEL);
 	if (!cros_laptop)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/platform/chrome/cros_ec_chardev.c b/drivers/platform/chrome/cros_ec_chardev.c
index c9d80ad5b57e..a2c919caa220 100644
--- a/drivers/platform/chrome/cros_ec_chardev.c
+++ b/drivers/platform/chrome/cros_ec_chardev.c
@@ -162,7 +162,7 @@ static int cros_ec_chardev_open(struct inode *inode, struct file *filp)
 	struct chardev_priv *priv;
 	int ret;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/platform/chrome/wilco_ec/event.c b/drivers/platform/chrome/wilco_ec/event.c
index 196e46a1d489..e7f85d6f29f1 100644
--- a/drivers/platform/chrome/wilco_ec/event.c
+++ b/drivers/platform/chrome/wilco_ec/event.c
@@ -106,7 +106,7 @@ static struct ec_event_queue *event_queue_new(int capacity)
 {
 	struct ec_event_queue *q;

-	q = kzalloc(struct_size(q, entries, capacity), GFP_KERNEL);
+	q = kzalloc_flex(*q, entries, capacity, GFP_KERNEL);
 	if (!q)
 		return NULL;

@@ -457,7 +457,7 @@ static int event_device_add(struct acpi_device *adev)
 		return error;
 	}

-	dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
+	dev_data = kzalloc_obj(*dev_data, GFP_KERNEL);
 	if (!dev_data) {
 		error = -ENOMEM;
 		goto free_minor;
diff --git a/drivers/platform/chrome/wilco_ec/telemetry.c b/drivers/platform/chrome/wilco_ec/telemetry.c
index b18043e31ae4..6375bbb6d6ce 100644
--- a/drivers/platform/chrome/wilco_ec/telemetry.c
+++ b/drivers/platform/chrome/wilco_ec/telemetry.c
@@ -248,7 +248,7 @@ static int telem_open(struct inode *inode, struct file *filp)

 	get_device(&dev_data->dev);

-	sess_data = kzalloc(sizeof(*sess_data), GFP_KERNEL);
+	sess_data = kzalloc_obj(*sess_data, GFP_KERNEL);
 	if (!sess_data) {
 		atomic_set(&dev_data->available, 1);
 		return -ENOMEM;
@@ -370,7 +370,7 @@ static int telem_device_probe(struct platform_device *pdev)
 		return error;
 	}

-	dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
+	dev_data = kzalloc_obj(*dev_data, GFP_KERNEL);
 	if (!dev_data) {
 		ida_free(&telem_ida, minor);
 		return -ENOMEM;
diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c
index abc31971fe6a..370259ef3bfe 100644
--- a/drivers/platform/goldfish/goldfish_pipe.c
+++ b/drivers/platform/goldfish/goldfish_pipe.c
@@ -660,7 +660,7 @@ static int get_free_pipe_id_locked(struct goldfish_pipe_dev *dev)
 		 */
 		u32 new_capacity = 2 * dev->pipes_capacity;
 		struct goldfish_pipe **pipes =
-			kcalloc(new_capacity, sizeof(*pipes), GFP_ATOMIC);
+			kzalloc_objs(*pipes, new_capacity, GFP_ATOMIC);
 		if (!pipes)
 			return -ENOMEM;
 		memcpy(pipes, dev->pipes, sizeof(*pipes) * dev->pipes_capacity);
@@ -699,7 +699,7 @@ static int goldfish_pipe_open(struct inode *inode, struct file *file)
 	int status;

 	/* Allocate new pipe kernel object */
-	struct goldfish_pipe *pipe = kzalloc(sizeof(*pipe), GFP_KERNEL);
+	struct goldfish_pipe *pipe = kzalloc_obj(*pipe, GFP_KERNEL);

 	if (!pipe)
 		return -ENOMEM;
@@ -826,8 +826,7 @@ static int goldfish_pipe_device_init(struct platform_device *pdev,
 	dev->pdev_dev = &pdev->dev;
 	dev->first_signalled_pipe = NULL;
 	dev->pipes_capacity = INITIAL_PIPES_CAPACITY;
-	dev->pipes = kcalloc(dev->pipes_capacity, sizeof(*dev->pipes),
-			     GFP_KERNEL);
+	dev->pipes = kzalloc_objs(*dev->pipes, dev->pipes_capacity, GFP_KERNEL);
 	if (!dev->pipes) {
 		misc_deregister(&dev->miscdev);
 		return -ENOMEM;
diff --git a/drivers/platform/mellanox/mlxbf-tmfifo.c b/drivers/platform/mellanox/mlxbf-tmfifo.c
index 14aa87b39be5..7fea80d3220c 100644
--- a/drivers/platform/mellanox/mlxbf-tmfifo.c
+++ b/drivers/platform/mellanox/mlxbf-tmfifo.c
@@ -1203,7 +1203,7 @@ static int mlxbf_tmfifo_create_vdev(struct device *dev,
 		goto fail;
 	}

-	tm_vdev = kzalloc(sizeof(*tm_vdev), GFP_KERNEL);
+	tm_vdev = kzalloc_obj(*tm_vdev, GFP_KERNEL);
 	if (!tm_vdev) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/platform/olpc/olpc-ec.c b/drivers/platform/olpc/olpc-ec.c
index 48e9861bb571..6a6f94ee93f4 100644
--- a/drivers/platform/olpc/olpc-ec.c
+++ b/drivers/platform/olpc/olpc-ec.c
@@ -408,7 +408,7 @@ static int olpc_ec_probe(struct platform_device *pdev)
 	if (!ec_driver)
 		return -ENODEV;

-	ec = kzalloc(sizeof(*ec), GFP_KERNEL);
+	ec = kzalloc_obj(*ec, GFP_KERNEL);
 	if (!ec)
 		return -ENOMEM;

diff --git a/drivers/platform/raspberrypi/vchiq-interface/vchiq_arm.c b/drivers/platform/raspberrypi/vchiq-interface/vchiq_arm.c
index 6a7b96d3dae6..1e72dc819e2a 100644
--- a/drivers/platform/raspberrypi/vchiq-interface/vchiq_arm.c
+++ b/drivers/platform/raspberrypi/vchiq-interface/vchiq_arm.c
@@ -358,7 +358,7 @@ int vchiq_initialise(struct vchiq_state *state, struct vchiq_instance **instance
 			 __func__, i);
 	}

-	instance = kzalloc(sizeof(*instance), GFP_KERNEL);
+	instance = kzalloc_obj(*instance, GFP_KERNEL);
 	if (!instance) {
 		ret = -ENOMEM;
 		goto failed;
@@ -618,7 +618,7 @@ vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handl
 			}
 		}
 	} else {
-		waiter = kzalloc(sizeof(*waiter), GFP_KERNEL);
+		waiter = kzalloc_obj(*waiter, GFP_KERNEL);
 		if (!waiter)
 			return -ENOMEM;
 	}
@@ -1249,8 +1249,7 @@ vchiq_dump_service_use_state(struct vchiq_state *state)
 	if (!arm_state)
 		return;

-	service_data = kmalloc_array(MAX_SERVICES, sizeof(*service_data),
-				     GFP_KERNEL);
+	service_data = kmalloc_objs(*service_data, MAX_SERVICES, GFP_KERNEL);
 	if (!service_data)
 		return;

diff --git a/drivers/platform/raspberrypi/vchiq-interface/vchiq_bus.c b/drivers/platform/raspberrypi/vchiq-interface/vchiq_bus.c
index f50e637d505c..616e05a36918 100644
--- a/drivers/platform/raspberrypi/vchiq-interface/vchiq_bus.c
+++ b/drivers/platform/raspberrypi/vchiq-interface/vchiq_bus.c
@@ -68,7 +68,7 @@ vchiq_device_register(struct device *parent, const char *name)
 	struct vchiq_device *device;
 	int ret;

-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		return NULL;

diff --git a/drivers/platform/raspberrypi/vchiq-interface/vchiq_core.c b/drivers/platform/raspberrypi/vchiq-interface/vchiq_core.c
index 83de27cfd469..1dac7d1ffaa2 100644
--- a/drivers/platform/raspberrypi/vchiq-interface/vchiq_core.c
+++ b/drivers/platform/raspberrypi/vchiq-interface/vchiq_core.c
@@ -2723,7 +2723,7 @@ vchiq_add_service_internal(struct vchiq_state *state,
 	if (ret)
 		return NULL;

-	service = kzalloc(sizeof(*service), GFP_KERNEL);
+	service = kzalloc_obj(*service, GFP_KERNEL);
 	if (!service)
 		return service;

diff --git a/drivers/platform/raspberrypi/vchiq-interface/vchiq_dev.c b/drivers/platform/raspberrypi/vchiq-interface/vchiq_dev.c
index 0f3dde2657d6..18bcb8c133d1 100644
--- a/drivers/platform/raspberrypi/vchiq-interface/vchiq_dev.c
+++ b/drivers/platform/raspberrypi/vchiq-interface/vchiq_dev.c
@@ -149,7 +149,7 @@ static int vchiq_ioc_create_service(struct vchiq_instance *instance,
 	if (args->is_open && !instance->connected)
 		return -ENOTCONN;

-	user_service = kmalloc(sizeof(*user_service), GFP_KERNEL);
+	user_service = kmalloc_obj(*user_service, GFP_KERNEL);
 	if (!user_service)
 		return -ENOMEM;

@@ -298,7 +298,7 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance *instance,
 		return -EINVAL;

 	if (args->mode == VCHIQ_BULK_MODE_BLOCKING) {
-		waiter = kzalloc(sizeof(*waiter), GFP_KERNEL);
+		waiter = kzalloc_obj(*waiter, GFP_KERNEL);
 		if (!waiter) {
 			ret = -ENOMEM;
 			goto out;
@@ -1185,7 +1185,7 @@ static int vchiq_open(struct inode *inode, struct file *file)
 		return -ENOTCONN;
 	}

-	instance = kzalloc(sizeof(*instance), GFP_KERNEL);
+	instance = kzalloc_obj(*instance, GFP_KERNEL);
 	if (!instance)
 		return -ENOMEM;

diff --git a/drivers/platform/raspberrypi/vchiq-mmal/mmal-vchiq.c b/drivers/platform/raspberrypi/vchiq-mmal/mmal-vchiq.c
index cd073ed3ea2d..79790867c45c 100644
--- a/drivers/platform/raspberrypi/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/platform/raspberrypi/vchiq-mmal/mmal-vchiq.c
@@ -190,7 +190,7 @@ get_msg_context(struct vchiq_mmal_instance *instance)
 	int handle;

 	/* todo: should this be allocated from a pool to avoid kzalloc */
-	msg_context = kzalloc(sizeof(*msg_context), GFP_KERNEL);
+	msg_context = kzalloc_obj(*msg_context, GFP_KERNEL);

 	if (!msg_context)
 		return ERR_PTR(-ENOMEM);
@@ -1898,7 +1898,7 @@ int vchiq_mmal_init(struct device *dev, struct vchiq_mmal_instance **out_instanc
 		goto err_shutdown_vchiq;
 	}

-	instance = kzalloc(sizeof(*instance), GFP_KERNEL);
+	instance = kzalloc_obj(*instance, GFP_KERNEL);

 	if (!instance) {
 		err = -ENOMEM;
diff --git a/drivers/platform/surface/aggregator/bus.c b/drivers/platform/surface/aggregator/bus.c
index d68d231e716e..dba8ca379385 100644
--- a/drivers/platform/surface/aggregator/bus.c
+++ b/drivers/platform/surface/aggregator/bus.c
@@ -83,7 +83,7 @@ struct ssam_device *ssam_device_alloc(struct ssam_controller *ctrl,
 {
 	struct ssam_device *sdev;

-	sdev = kzalloc(sizeof(*sdev), GFP_KERNEL);
+	sdev = kzalloc_obj(*sdev, GFP_KERNEL);
 	if (!sdev)
 		return NULL;

diff --git a/drivers/platform/surface/aggregator/controller.c b/drivers/platform/surface/aggregator/controller.c
index a265e667538c..5f1940a186a1 100644
--- a/drivers/platform/surface/aggregator/controller.c
+++ b/drivers/platform/surface/aggregator/controller.c
@@ -344,7 +344,7 @@ ssam_nf_refcount_inc(struct ssam_nf *nf, struct ssam_event_registry reg,
 		}
 	}

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

@@ -623,7 +623,7 @@ static struct ssam_event_item *ssam_event_item_alloc(size_t len, gfp_t flags)

 		item->ops.free = __ssam_event_item_free_cached;
 	} else {
-		item = kzalloc(struct_size(item, event.data, len), flags);
+		item = kzalloc_flex(*item, event.data, len, flags);
 		if (!item)
 			return NULL;

diff --git a/drivers/platform/surface/aggregator/core.c b/drivers/platform/surface/aggregator/core.c
index 82e531023911..9349a1b14ab7 100644
--- a/drivers/platform/surface/aggregator/core.c
+++ b/drivers/platform/surface/aggregator/core.c
@@ -652,7 +652,7 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
 	}

 	/* Allocate controller. */
-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		return -ENOMEM;

diff --git a/drivers/platform/surface/surface3_power.c b/drivers/platform/surface/surface3_power.c
index 1ee5239269ae..b00f52687fa4 100644
--- a/drivers/platform/surface/surface3_power.c
+++ b/drivers/platform/surface/surface3_power.c
@@ -454,8 +454,7 @@ static int mshw0011_install_space_handler(struct i2c_client *client)
 	if (!adev)
 		return -ENODEV;

-	data = kzalloc(sizeof(struct mshw0011_handler_data),
-			    GFP_KERNEL);
+	data = kzalloc_obj(struct mshw0011_handler_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/platform/surface/surface_aggregator_cdev.c b/drivers/platform/surface/surface_aggregator_cdev.c
index bfaa09d1648b..2e4746c700c8 100644
--- a/drivers/platform/surface/surface_aggregator_cdev.c
+++ b/drivers/platform/surface/surface_aggregator_cdev.c
@@ -154,7 +154,7 @@ static int ssam_cdev_notifier_register(struct ssam_cdev_client *client, u8 tc, i
 	}

 	/* Allocate new notifier. */
-	nf = kzalloc(sizeof(*nf), GFP_KERNEL);
+	nf = kzalloc_obj(*nf, GFP_KERNEL);
 	if (!nf) {
 		mutex_unlock(&client->notifier_lock);
 		return -ENOMEM;
@@ -685,7 +685,7 @@ static int ssam_dbg_device_probe(struct platform_device *pdev)
 	if (IS_ERR(ctrl))
 		return PTR_ERR(ctrl) == -ENODEV ? -EPROBE_DEFER : PTR_ERR(ctrl);

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		return -ENOMEM;

diff --git a/drivers/platform/surface/surface_dtx.c b/drivers/platform/surface/surface_dtx.c
index 97ae010069e4..43a8c23b2bf0 100644
--- a/drivers/platform/surface/surface_dtx.c
+++ b/drivers/platform/surface/surface_dtx.c
@@ -403,7 +403,7 @@ static int surface_dtx_open(struct inode *inode, struct file *file)
 	struct sdtx_client *client;

 	/* Initialize client. */
-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

@@ -1044,7 +1044,7 @@ static struct sdtx_device *sdtx_device_create(struct device *dev, struct ssam_co
 	struct sdtx_device *ddev;
 	int status;

-	ddev = kzalloc(sizeof(*ddev), GFP_KERNEL);
+	ddev = kzalloc_obj(*ddev, GFP_KERNEL);
 	if (!ddev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/platform/surface/surfacepro3_button.c b/drivers/platform/surface/surfacepro3_button.c
index e652c85c9161..28386780177c 100644
--- a/drivers/platform/surface/surfacepro3_button.c
+++ b/drivers/platform/surface/surfacepro3_button.c
@@ -199,7 +199,7 @@ static int surface_button_add(struct acpi_device *device)
 	if (!surface_button_check_MSHW0040(device))
 		return -ENODEV;

-	button = kzalloc(sizeof(struct surface_button), GFP_KERNEL);
+	button = kzalloc_obj(struct surface_button, GFP_KERNEL);
 	if (!button)
 		return -ENOMEM;

diff --git a/drivers/platform/wmi/core.c b/drivers/platform/wmi/core.c
index 1601bf9fe135..de11edb40b04 100644
--- a/drivers/platform/wmi/core.c
+++ b/drivers/platform/wmi/core.c
@@ -1296,7 +1296,7 @@ static int parse_wdg(struct device *wmi_bus_dev, struct platform_device *pdev)
 			continue;
 		}

-		wblock = kzalloc(sizeof(*wblock), GFP_KERNEL);
+		wblock = kzalloc_obj(*wblock, GFP_KERNEL);
 		if (!wblock)
 			continue;

diff --git a/drivers/platform/x86/amd/pmc/mp1_stb.c b/drivers/platform/x86/amd/pmc/mp1_stb.c
index 3b9b9f30faa3..73c668b840c7 100644
--- a/drivers/platform/x86/amd/pmc/mp1_stb.c
+++ b/drivers/platform/x86/amd/pmc/mp1_stb.c
@@ -141,7 +141,7 @@ static int amd_stb_handle_efr(struct file *filp)
 	u32 fsize;

 	fsize = dev->dram_size - S2D_RSVD_RAM_SPACE;
-	stb_data_arr = kmalloc(struct_size(stb_data_arr, data, fsize), GFP_KERNEL);
+	stb_data_arr = kmalloc_flex(*stb_data_arr, data, fsize, GFP_KERNEL);
 	if (!stb_data_arr)
 		return -ENOMEM;

@@ -189,7 +189,7 @@ static int amd_stb_debugfs_open_v2(struct inode *inode, struct file *filp)
 	}

 	fsize = min(num_samples, S2D_TELEMETRY_BYTES_MAX);
-	stb_data_arr = kmalloc(struct_size(stb_data_arr, data, fsize), GFP_KERNEL);
+	stb_data_arr = kmalloc_flex(*stb_data_arr, data, fsize, GFP_KERNEL);
 	if (!stb_data_arr)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/amd/wbrf.c b/drivers/platform/x86/amd/wbrf.c
index dc10d12bc80d..b7556663223a 100644
--- a/drivers/platform/x86/amd/wbrf.c
+++ b/drivers/platform/x86/amd/wbrf.c
@@ -72,7 +72,9 @@ static int wbrf_record(struct acpi_device *adev, uint8_t action, struct wbrf_ran
 	 */
 	num_of_elements = 2 * num_of_ranges + 2;

-	union acpi_object *tmp __free(kfree) = kcalloc(num_of_elements, sizeof(*tmp), GFP_KERNEL);
+	union acpi_object *tmp __free(kfree) = kzalloc_objs(*tmp,
+							    num_of_elements,
+							    GFP_KERNEL);
 	if (!tmp)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c
index 1417e230edbd..83f4e96ecbc7 100644
--- a/drivers/platform/x86/apple-gmux.c
+++ b/drivers/platform/x86/apple-gmux.c
@@ -799,7 +799,7 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
 		return -ENODEV;
 	}

-	gmux_data = kzalloc(sizeof(*gmux_data), GFP_KERNEL);
+	gmux_data = kzalloc_obj(*gmux_data, GFP_KERNEL);
 	if (!gmux_data)
 		return -ENOMEM;
 	pnp_set_drvdata(pnp, gmux_data);
diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asus-armoury.c
index 9c1a9ad42bc4..9222e645756f 100644
--- a/drivers/platform/x86/asus-armoury.c
+++ b/drivers/platform/x86/asus-armoury.c
@@ -1005,8 +1005,8 @@ static void init_rog_tunables(void)
 	/* Initialize AC power tunables */
 	ac_limits = power_data->ac_data;
 	if (ac_limits) {
-		ac_rog_tunables = kzalloc(sizeof(*asus_armoury.rog_tunables[ASUS_ROG_TUNABLE_AC]),
-				GFP_KERNEL);
+		ac_rog_tunables = kzalloc_obj(*asus_armoury.rog_tunables[ASUS_ROG_TUNABLE_AC],
+					      GFP_KERNEL);
 		if (!ac_rog_tunables)
 			goto err_nomem;

@@ -1053,8 +1053,8 @@ static void init_rog_tunables(void)
 	/* Initialize DC power tunables */
 	dc_limits = power_data->dc_data;
 	if (dc_limits) {
-		dc_rog_tunables = kzalloc(sizeof(*asus_armoury.rog_tunables[ASUS_ROG_TUNABLE_DC]),
-					  GFP_KERNEL);
+		dc_rog_tunables = kzalloc_obj(*asus_armoury.rog_tunables[ASUS_ROG_TUNABLE_DC],
+					      GFP_KERNEL);
 		if (!dc_rog_tunables) {
 			kfree(ac_rog_tunables);
 			goto err_nomem;
diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c
index a0a411b4f2d6..2b85315b7bd5 100644
--- a/drivers/platform/x86/asus-laptop.c
+++ b/drivers/platform/x86/asus-laptop.c
@@ -1831,7 +1831,7 @@ static int asus_acpi_add(struct acpi_device *device)

 	pr_notice("Asus Laptop Support version %s\n",
 		  ASUS_LAPTOP_VERSION);
-	asus = kzalloc(sizeof(struct asus_laptop), GFP_KERNEL);
+	asus = kzalloc_obj(struct asus_laptop, GFP_KERNEL);
 	if (!asus)
 		return -ENOMEM;
 	asus->handle = device->handle;
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 275b56d6a09f..93905860fe07 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -5014,7 +5014,7 @@ static int asus_wmi_add(struct platform_device *pdev)
 	int err;
 	u32 result;

-	asus = kzalloc(sizeof(struct asus_wmi), GFP_KERNEL);
+	asus = kzalloc_obj(struct asus_wmi, GFP_KERNEL);
 	if (!asus)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/classmate-laptop.c b/drivers/platform/x86/classmate-laptop.c
index 74d3eb83f56a..bc9e26b94c84 100644
--- a/drivers/platform/x86/classmate-laptop.c
+++ b/drivers/platform/x86/classmate-laptop.c
@@ -400,7 +400,7 @@ static int cmpc_accel_add_v4(struct acpi_device *acpi)
 	struct input_dev *inputdev;
 	struct cmpc_accel *accel;

-	accel = kmalloc(sizeof(*accel), GFP_KERNEL);
+	accel = kmalloc_obj(*accel, GFP_KERNEL);
 	if (!accel)
 		return -ENOMEM;

@@ -650,7 +650,7 @@ static int cmpc_accel_add(struct acpi_device *acpi)
 	struct input_dev *inputdev;
 	struct cmpc_accel *accel;

-	accel = kmalloc(sizeof(*accel), GFP_KERNEL);
+	accel = kmalloc_obj(*accel, GFP_KERNEL);
 	if (!accel)
 		return -ENOMEM;

@@ -964,7 +964,7 @@ static int cmpc_ipml_add(struct acpi_device *acpi)
 	struct ipml200_dev *ipml;
 	struct backlight_properties props;

-	ipml = kmalloc(sizeof(*ipml), GFP_KERNEL);
+	ipml = kmalloc_obj(*ipml, GFP_KERNEL);
 	if (ipml == NULL)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/dell/dell-smbios-base.c b/drivers/platform/x86/dell/dell-smbios-base.c
index 444786102f02..dd011e252713 100644
--- a/drivers/platform/x86/dell/dell-smbios-base.c
+++ b/drivers/platform/x86/dell/dell-smbios-base.c
@@ -495,12 +495,13 @@ static int build_tokens_sysfs(struct platform_device *dev)
 	int ret;
 	int i, j;

-	token_entries = kcalloc(da_num_tokens, sizeof(*token_entries), GFP_KERNEL);
+	token_entries = kzalloc_objs(*token_entries, da_num_tokens, GFP_KERNEL);
 	if (!token_entries)
 		return -ENOMEM;

 	/* need to store both location and value + terminator*/
-	token_attrs = kcalloc((2 * da_num_tokens) + 1, sizeof(*token_attrs), GFP_KERNEL);
+	token_attrs = kzalloc_objs(*token_attrs, (2 * da_num_tokens) + 1,
+				   GFP_KERNEL);
 	if (!token_attrs)
 		goto out_allocate_attrs;

diff --git a/drivers/platform/x86/dell/dell-wmi-base.c b/drivers/platform/x86/dell/dell-wmi-base.c
index 28076929d6af..f2e63be75fb3 100644
--- a/drivers/platform/x86/dell/dell-wmi-base.c
+++ b/drivers/platform/x86/dell/dell-wmi-base.c
@@ -586,7 +586,7 @@ static void handle_dmi_entry(const struct dmi_header *dm, void *opaque)
 		return;
 	}

-	keymap = kcalloc(hotkey_num, sizeof(struct key_entry), GFP_KERNEL);
+	keymap = kzalloc_objs(struct key_entry, hotkey_num, GFP_KERNEL);
 	if (!keymap) {
 		results->err = -ENOMEM;
 		return;
@@ -656,13 +656,9 @@ static int dell_wmi_input_setup(struct wmi_device *wdev)
 		goto err_free_dev;
 	}

-	keymap = kcalloc(dmi_results.keymap_size +
-			 ARRAY_SIZE(dell_wmi_keymap_type_0000) +
-			 ARRAY_SIZE(dell_wmi_keymap_type_0010) +
-			 ARRAY_SIZE(dell_wmi_keymap_type_0011) +
-			 ARRAY_SIZE(dell_wmi_keymap_type_0012) +
-			 1,
-			 sizeof(struct key_entry), GFP_KERNEL);
+	keymap = kzalloc_objs(struct key_entry,
+			      dmi_results.keymap_size + ARRAY_SIZE(dell_wmi_keymap_type_0000) + ARRAY_SIZE(dell_wmi_keymap_type_0010) + ARRAY_SIZE(dell_wmi_keymap_type_0011) + ARRAY_SIZE(dell_wmi_keymap_type_0012) + 1,
+			      GFP_KERNEL);
 	if (!keymap) {
 		kfree(dmi_results.keymap);
 		err = -ENOMEM;
@@ -773,7 +769,7 @@ static int dell_wmi_events_set_enabled(bool enable)
 	struct calling_interface_buffer *buffer;
 	int ret;

-	buffer = kzalloc(sizeof(struct calling_interface_buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(struct calling_interface_buffer, GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;
 	buffer->cmd_class = CLASS_INFO;
diff --git a/drivers/platform/x86/dell/dell-wmi-privacy.c b/drivers/platform/x86/dell/dell-wmi-privacy.c
index 4b65e1655d42..40fe2c4adedb 100644
--- a/drivers/platform/x86/dell/dell-wmi-privacy.c
+++ b/drivers/platform/x86/dell/dell-wmi-privacy.c
@@ -314,8 +314,8 @@ static int dell_privacy_wmi_probe(struct wmi_device *wdev, const void *context)
 		return -ENOMEM;

 	/* remap the wmi keymap event to new keymap */
-	keymap = kcalloc(ARRAY_SIZE(dell_wmi_keymap_type_0012),
-			sizeof(struct key_entry), GFP_KERNEL);
+	keymap = kzalloc_objs(struct key_entry,
+			      ARRAY_SIZE(dell_wmi_keymap_type_0012), GFP_KERNEL);
 	if (!keymap)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c b/drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c
index fc2f58b4cbc6..c7c55f8fe0a0 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c
@@ -119,8 +119,9 @@ int alloc_enum_data(void)

 	wmi_priv.enumeration_instances_count =
 		get_instance_count(DELL_WMI_BIOS_ENUMERATION_ATTRIBUTE_GUID);
-	wmi_priv.enumeration_data = kcalloc(wmi_priv.enumeration_instances_count,
-					sizeof(struct enumeration_data), GFP_KERNEL);
+	wmi_priv.enumeration_data = kzalloc_objs(struct enumeration_data,
+						 wmi_priv.enumeration_instances_count,
+						 GFP_KERNEL);
 	if (!wmi_priv.enumeration_data) {
 		wmi_priv.enumeration_instances_count = 0;
 		ret = -ENOMEM;
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c b/drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c
index 735248064239..f00a1cbac2f9 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c
@@ -123,8 +123,9 @@ int alloc_int_data(void)
 	int ret = 0;

 	wmi_priv.integer_instances_count = get_instance_count(DELL_WMI_BIOS_INTEGER_ATTRIBUTE_GUID);
-	wmi_priv.integer_data = kcalloc(wmi_priv.integer_instances_count,
-					sizeof(struct integer_data), GFP_KERNEL);
+	wmi_priv.integer_data = kzalloc_objs(struct integer_data,
+					     wmi_priv.integer_instances_count,
+					     GFP_KERNEL);
 	if (!wmi_priv.integer_data) {
 		wmi_priv.integer_instances_count = 0;
 		ret = -ENOMEM;
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c b/drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c
index 3167e06d416e..44ecdcb82d84 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c
@@ -143,7 +143,8 @@ int alloc_po_data(void)
 	int ret = 0;

 	wmi_priv.po_instances_count = get_instance_count(DELL_WMI_BIOS_PASSOBJ_ATTRIBUTE_GUID);
-	wmi_priv.po_data = kcalloc(wmi_priv.po_instances_count, sizeof(struct po_data), GFP_KERNEL);
+	wmi_priv.po_data = kzalloc_objs(struct po_data,
+					wmi_priv.po_instances_count, GFP_KERNEL);
 	if (!wmi_priv.po_data) {
 		wmi_priv.po_instances_count = 0;
 		ret = -ENOMEM;
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c b/drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c
index 0d2c74f8d1aa..9e11c00ad859 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c
@@ -108,8 +108,9 @@ int alloc_str_data(void)
 	int ret = 0;

 	wmi_priv.str_instances_count = get_instance_count(DELL_WMI_BIOS_STRING_ATTRIBUTE_GUID);
-	wmi_priv.str_data = kcalloc(wmi_priv.str_instances_count,
-					sizeof(struct str_data), GFP_KERNEL);
+	wmi_priv.str_data = kzalloc_objs(struct str_data,
+					 wmi_priv.str_instances_count,
+					 GFP_KERNEL);
 	if (!wmi_priv.str_data) {
 		wmi_priv.str_instances_count = 0;
 		ret = -ENOMEM;
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c b/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c
index f5402b714657..577949ee2e23 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c
@@ -460,7 +460,7 @@ static int init_bios_attributes(int attr_type, const char *guid)
 		}

 		/* build attribute */
-		attr_name_kobj = kzalloc(sizeof(*attr_name_kobj), GFP_KERNEL);
+		attr_name_kobj = kzalloc_obj(*attr_name_kobj, GFP_KERNEL);
 		if (!attr_name_kobj) {
 			retval = -ENOMEM;
 			goto err_attr_init;
diff --git a/drivers/platform/x86/dell/dell_rbu.c b/drivers/platform/x86/dell/dell_rbu.c
index 403df9bd9522..daf5df8cbafc 100644
--- a/drivers/platform/x86/dell/dell_rbu.c
+++ b/drivers/platform/x86/dell/dell_rbu.c
@@ -111,7 +111,7 @@ static int create_packet(void *data, size_t length) __must_hold(&rbu_data.lock)

 	spin_unlock(&rbu_data.lock);

-	newpacket = kzalloc(sizeof (struct packet_data), GFP_KERNEL);
+	newpacket = kzalloc_obj(struct packet_data, GFP_KERNEL);

 	if (!newpacket) {
 		pr_warn("failed to allocate new packet\n");
diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c
index d1908815f5a2..e42045494b2c 100644
--- a/drivers/platform/x86/eeepc-laptop.c
+++ b/drivers/platform/x86/eeepc-laptop.c
@@ -1366,7 +1366,7 @@ static int eeepc_acpi_add(struct acpi_device *device)
 	int result;

 	pr_notice(EEEPC_LAPTOP_NAME "\n");
-	eeepc = kzalloc(sizeof(struct eeepc_laptop), GFP_KERNEL);
+	eeepc = kzalloc_obj(struct eeepc_laptop, GFP_KERNEL);
 	if (!eeepc)
 		return -ENOMEM;
 	eeepc->handle = device->handle;
diff --git a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c
index 51e8977d3eb4..bf3d409e5974 100644
--- a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c
+++ b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c
@@ -588,7 +588,7 @@ static int hp_add_other_attributes(int attr_type)
 	int ret;
 	char *attr_name;

-	attr_name_kobj = kzalloc(sizeof(*attr_name_kobj), GFP_KERNEL);
+	attr_name_kobj = kzalloc_obj(*attr_name_kobj, GFP_KERNEL);
 	if (!attr_name_kobj)
 		return -ENOMEM;

@@ -711,7 +711,7 @@ static int hp_init_bios_package_attribute(enum hp_wmi_data_type attr_type,
 	}

 	/* build attribute */
-	attr_name_kobj = kzalloc(sizeof(*attr_name_kobj), GFP_KERNEL);
+	attr_name_kobj = kzalloc_obj(*attr_name_kobj, GFP_KERNEL);
 	if (!attr_name_kobj) {
 		ret = -ENOMEM;
 		goto pack_attr_exit;
@@ -810,7 +810,7 @@ static int hp_init_bios_buffer_attribute(enum hp_wmi_data_type attr_type,
 	}

 	/* build attribute */
-	attr_name_kobj = kzalloc(sizeof(*attr_name_kobj), GFP_KERNEL);
+	attr_name_kobj = kzalloc_obj(*attr_name_kobj, GFP_KERNEL);
 	if (!attr_name_kobj) {
 		ret = -ENOMEM;
 		goto buff_attr_exit;
diff --git a/drivers/platform/x86/hp/hp-bioscfg/enum-attributes.c b/drivers/platform/x86/hp/hp-bioscfg/enum-attributes.c
index f346aad8e9d8..4a09fd32ebc6 100644
--- a/drivers/platform/x86/hp/hp-bioscfg/enum-attributes.c
+++ b/drivers/platform/x86/hp/hp-bioscfg/enum-attributes.c
@@ -94,8 +94,9 @@ int hp_alloc_enumeration_data(void)
 	bioscfg_drv.enumeration_instances_count =
 		hp_get_instance_count(HP_WMI_BIOS_ENUMERATION_GUID);

-	bioscfg_drv.enumeration_data = kcalloc(bioscfg_drv.enumeration_instances_count,
-					       sizeof(*bioscfg_drv.enumeration_data), GFP_KERNEL);
+	bioscfg_drv.enumeration_data = kzalloc_objs(*bioscfg_drv.enumeration_data,
+						    bioscfg_drv.enumeration_instances_count,
+						    GFP_KERNEL);
 	if (!bioscfg_drv.enumeration_data) {
 		bioscfg_drv.enumeration_instances_count = 0;
 		return -ENOMEM;
diff --git a/drivers/platform/x86/hp/hp-bioscfg/int-attributes.c b/drivers/platform/x86/hp/hp-bioscfg/int-attributes.c
index 63b1fda2be4e..84d522f2b491 100644
--- a/drivers/platform/x86/hp/hp-bioscfg/int-attributes.c
+++ b/drivers/platform/x86/hp/hp-bioscfg/int-attributes.c
@@ -109,8 +109,9 @@ static const struct attribute_group integer_attr_group = {
 int hp_alloc_integer_data(void)
 {
 	bioscfg_drv.integer_instances_count = hp_get_instance_count(HP_WMI_BIOS_INTEGER_GUID);
-	bioscfg_drv.integer_data = kcalloc(bioscfg_drv.integer_instances_count,
-					   sizeof(*bioscfg_drv.integer_data), GFP_KERNEL);
+	bioscfg_drv.integer_data = kzalloc_objs(*bioscfg_drv.integer_data,
+						bioscfg_drv.integer_instances_count,
+						GFP_KERNEL);

 	if (!bioscfg_drv.integer_data) {
 		bioscfg_drv.integer_instances_count = 0;
diff --git a/drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c b/drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c
index 6a31f47ce3f5..592328280a81 100644
--- a/drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c
+++ b/drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c
@@ -98,9 +98,9 @@ int hp_alloc_ordered_list_data(void)
 {
 	bioscfg_drv.ordered_list_instances_count =
 		hp_get_instance_count(HP_WMI_BIOS_ORDERED_LIST_GUID);
-	bioscfg_drv.ordered_list_data = kcalloc(bioscfg_drv.ordered_list_instances_count,
-						sizeof(*bioscfg_drv.ordered_list_data),
-						GFP_KERNEL);
+	bioscfg_drv.ordered_list_data = kzalloc_objs(*bioscfg_drv.ordered_list_data,
+						     bioscfg_drv.ordered_list_instances_count,
+						     GFP_KERNEL);
 	if (!bioscfg_drv.ordered_list_data) {
 		bioscfg_drv.ordered_list_instances_count = 0;
 		return -ENOMEM;
diff --git a/drivers/platform/x86/hp/hp-bioscfg/passwdobj-attributes.c b/drivers/platform/x86/hp/hp-bioscfg/passwdobj-attributes.c
index ec79d9d50377..dc7107ff010b 100644
--- a/drivers/platform/x86/hp/hp-bioscfg/passwdobj-attributes.c
+++ b/drivers/platform/x86/hp/hp-bioscfg/passwdobj-attributes.c
@@ -185,8 +185,9 @@ static const struct attribute_group password_attr_group = {
 int hp_alloc_password_data(void)
 {
 	bioscfg_drv.password_instances_count = hp_get_instance_count(HP_WMI_BIOS_PASSWORD_GUID);
-	bioscfg_drv.password_data = kcalloc(bioscfg_drv.password_instances_count,
-					    sizeof(*bioscfg_drv.password_data), GFP_KERNEL);
+	bioscfg_drv.password_data = kzalloc_objs(*bioscfg_drv.password_data,
+						 bioscfg_drv.password_instances_count,
+						 GFP_KERNEL);
 	if (!bioscfg_drv.password_data) {
 		bioscfg_drv.password_instances_count = 0;
 		return -ENOMEM;
diff --git a/drivers/platform/x86/hp/hp-bioscfg/string-attributes.c b/drivers/platform/x86/hp/hp-bioscfg/string-attributes.c
index 7b885d25650c..f0ce4f3e7f20 100644
--- a/drivers/platform/x86/hp/hp-bioscfg/string-attributes.c
+++ b/drivers/platform/x86/hp/hp-bioscfg/string-attributes.c
@@ -101,8 +101,9 @@ static const struct attribute_group string_attr_group = {
 int hp_alloc_string_data(void)
 {
 	bioscfg_drv.string_instances_count = hp_get_instance_count(HP_WMI_BIOS_STRING_GUID);
-	bioscfg_drv.string_data = kcalloc(bioscfg_drv.string_instances_count,
-					  sizeof(*bioscfg_drv.string_data), GFP_KERNEL);
+	bioscfg_drv.string_data = kzalloc_objs(*bioscfg_drv.string_data,
+					       bioscfg_drv.string_instances_count,
+					       GFP_KERNEL);
 	if (!bioscfg_drv.string_data) {
 		bioscfg_drv.string_instances_count = 0;
 		return -ENOMEM;
diff --git a/drivers/platform/x86/huawei-wmi.c b/drivers/platform/x86/huawei-wmi.c
index 8a4c54089ace..64c5543f795d 100644
--- a/drivers/platform/x86/huawei-wmi.c
+++ b/drivers/platform/x86/huawei-wmi.c
@@ -854,7 +854,7 @@ static __init int huawei_wmi_init(void)
 	struct platform_device *pdev;
 	int err;

-	huawei_wmi = kzalloc(sizeof(struct huawei_wmi), GFP_KERNEL);
+	huawei_wmi = kzalloc_obj(struct huawei_wmi, GFP_KERNEL);
 	if (!huawei_wmi)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/intel/ifs/core.c b/drivers/platform/x86/intel/ifs/core.c
index b73e582128c9..1f4f84217d5e 100644
--- a/drivers/platform/x86/intel/ifs/core.c
+++ b/drivers/platform/x86/intel/ifs/core.c
@@ -125,7 +125,7 @@ static int __init ifs_init(void)
 	if (rdmsrq_safe(MSR_INTEGRITY_CAPS, &msrval))
 		return -ENODEV;

-	ifs_pkg_auth = kmalloc_array(topology_max_packages(), sizeof(bool), GFP_KERNEL);
+	ifs_pkg_auth = kmalloc_objs(bool, topology_max_packages(), GFP_KERNEL);
 	if (!ifs_pkg_auth)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/intel/int1092/intel_sar.c b/drivers/platform/x86/intel/int1092/intel_sar.c
index e526841aff60..568a2722477b 100644
--- a/drivers/platform/x86/intel/int1092/intel_sar.c
+++ b/drivers/platform/x86/intel/int1092/intel_sar.c
@@ -91,8 +91,8 @@ static acpi_status parse_package(struct wwan_sar_context *context, union acpi_ob
 	    item->package.count <= data->total_dev_mode)
 		return AE_ERROR;

-	data->device_mode_info = kmalloc_array(data->total_dev_mode,
-					       sizeof(struct wwan_device_mode_info), GFP_KERNEL);
+	data->device_mode_info = kmalloc_objs(struct wwan_device_mode_info,
+					      data->total_dev_mode, GFP_KERNEL);
 	if (!data->device_mode_info)
 		return AE_ERROR;

@@ -248,7 +248,7 @@ static int sar_probe(struct platform_device *device)
 	int reg;
 	int result;

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/intel/int3472/discrete.c b/drivers/platform/x86/intel/int3472/discrete.c
index 1505fc3ef7a8..ec0994bfa9fc 100644
--- a/drivers/platform/x86/intel/int3472/discrete.c
+++ b/drivers/platform/x86/intel/int3472/discrete.c
@@ -107,7 +107,7 @@ skl_int3472_gpiod_get_from_temp_lookup(struct int3472_discrete_device *int3472,
 	int ret;

 	struct gpiod_lookup_table *lookup __free(kfree) =
-			kzalloc(struct_size(lookup, table, 2), GFP_KERNEL);
+			kzalloc_flex(*lookup, table, 2, GFP_KERNEL);
 	if (!lookup)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/platform/x86/intel/int3472/tps68470.c b/drivers/platform/x86/intel/int3472/tps68470.c
index 0133405697dc..fdbb8b0005f2 100644
--- a/drivers/platform/x86/intel/int3472/tps68470.c
+++ b/drivers/platform/x86/intel/int3472/tps68470.c
@@ -180,7 +180,8 @@ static int skl_int3472_tps68470_probe(struct i2c_client *client)
 		if (!board_data)
 			return dev_err_probe(&client->dev, -ENODEV, "No board-data found for this model\n");

-		cells = kcalloc(TPS68470_WIN_MFD_CELL_COUNT, sizeof(*cells), GFP_KERNEL);
+		cells = kzalloc_objs(*cells, TPS68470_WIN_MFD_CELL_COUNT,
+				     GFP_KERNEL);
 		if (!cells)
 			return -ENOMEM;

diff --git a/drivers/platform/x86/intel/pmc/pltdrv.c b/drivers/platform/x86/intel/pmc/pltdrv.c
index 3141d6cbc41b..6fcf0f85a8d7 100644
--- a/drivers/platform/x86/intel/pmc/pltdrv.c
+++ b/drivers/platform/x86/intel/pmc/pltdrv.c
@@ -65,7 +65,7 @@ static int __init pmc_core_platform_init(void)
 	if (!x86_match_cpu(intel_pmc_core_platform_ids))
 		return -ENODEV;

-	pmc_core_device = kzalloc(sizeof(*pmc_core_device), GFP_KERNEL);
+	pmc_core_device = kzalloc_obj(*pmc_core_device, GFP_KERNEL);
 	if (!pmc_core_device)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/intel/pmt/telemetry.c b/drivers/platform/x86/intel/pmt/telemetry.c
index a4dfca6cac19..2eee7389dcf9 100644
--- a/drivers/platform/x86/intel/pmt/telemetry.c
+++ b/drivers/platform/x86/intel/pmt/telemetry.c
@@ -107,7 +107,7 @@ static int pmt_telem_add_endpoint(struct intel_vsec_device *ivdev,
 	struct telem_endpoint *ep;

 	/* Endpoint lifetimes are managed by kref, not devres */
-	entry->ep = kzalloc(sizeof(*(entry->ep)), GFP_KERNEL);
+	entry->ep = kzalloc_obj(*(entry->ep), GFP_KERNEL);
 	if (!entry->ep)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/intel/speed_select_if/isst_if_common.c b/drivers/platform/x86/intel/speed_select_if/isst_if_common.c
index 7449873c3d40..33abff1dbe84 100644
--- a/drivers/platform/x86/intel/speed_select_if/isst_if_common.c
+++ b/drivers/platform/x86/intel/speed_select_if/isst_if_common.c
@@ -89,7 +89,7 @@ static int isst_store_new_cmd(int cmd, u32 cpu, int mbox_cmd_type, u32 param,
 {
 	struct isst_cmd *sst_cmd;

-	sst_cmd = kmalloc(sizeof(*sst_cmd), GFP_KERNEL);
+	sst_cmd = kmalloc_obj(*sst_cmd, GFP_KERNEL);
 	if (!sst_cmd)
 		return -ENOMEM;

@@ -425,15 +425,13 @@ static int isst_if_cpu_info_init(void)
 {
 	int ret;

-	isst_cpu_info = kcalloc(num_possible_cpus(),
-				sizeof(*isst_cpu_info),
-				GFP_KERNEL);
+	isst_cpu_info = kzalloc_objs(*isst_cpu_info, num_possible_cpus(),
+				     GFP_KERNEL);
 	if (!isst_cpu_info)
 		return -ENOMEM;

-	isst_pkg_info = kcalloc(topology_max_packages(),
-				sizeof(*isst_pkg_info),
-				GFP_KERNEL);
+	isst_pkg_info = kzalloc_objs(*isst_pkg_info, topology_max_packages(),
+				     GFP_KERNEL);
 	if (!isst_pkg_info) {
 		kfree(isst_cpu_info);
 		return -ENOMEM;
diff --git a/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c b/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
index 9c078c8acb50..9242e29aac59 100644
--- a/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
+++ b/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
@@ -1603,7 +1603,7 @@ int tpmi_sst_dev_add(struct auxiliary_device *auxdev)
 		 * devm_* allocation here as each partition is a
 		 * different device, which can be unbound.
 		 */
-		tpmi_sst = kzalloc(sizeof(*tpmi_sst), GFP_KERNEL);
+		tpmi_sst = kzalloc_obj(*tpmi_sst, GFP_KERNEL);
 		if (!tpmi_sst) {
 			ret = -ENOMEM;
 			goto unlock_exit;
@@ -1819,9 +1819,8 @@ int tpmi_sst_init(void)
 		goto init_done;
 	}

-	isst_common.sst_inst = kcalloc(topology_max_packages(),
-				       sizeof(*isst_common.sst_inst),
-				       GFP_KERNEL);
+	isst_common.sst_inst = kzalloc_objs(*isst_common.sst_inst,
+					    topology_max_packages(), GFP_KERNEL);
 	if (!isst_common.sst_inst) {
 		ret = -ENOMEM;
 		goto init_done;
diff --git a/drivers/platform/x86/intel/tpmi_power_domains.c b/drivers/platform/x86/intel/tpmi_power_domains.c
index 7d93119a4c30..57c8856fc468 100644
--- a/drivers/platform/x86/intel/tpmi_power_domains.c
+++ b/drivers/platform/x86/intel/tpmi_power_domains.c
@@ -221,8 +221,9 @@ static int __init tpmi_init(void)
 	if (ret)
 		return ret;

-	tpmi_power_domain_mask = kcalloc(size_mul(topology_max_packages(), MAX_POWER_DOMAINS),
-					 sizeof(*tpmi_power_domain_mask), GFP_KERNEL);
+	tpmi_power_domain_mask = kzalloc_objs(*tpmi_power_domain_mask,
+					      size_mul(topology_max_packages(), MAX_POWER_DOMAINS),
+					      GFP_KERNEL);
 	if (!tpmi_power_domain_mask)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency.c b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency.c
index 0dfc552b2802..89a90bd90c44 100644
--- a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency.c
+++ b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency.c
@@ -278,8 +278,8 @@ static int __init intel_uncore_init(void)

 	uncore_max_entries = topology_max_packages() *
 					topology_max_dies_per_package();
-	uncore_instances = kcalloc(uncore_max_entries,
-				   sizeof(*uncore_instances), GFP_KERNEL);
+	uncore_instances = kzalloc_objs(*uncore_instances, uncore_max_entries,
+					GFP_KERNEL);
 	if (!uncore_instances)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/intel/vsec.c b/drivers/platform/x86/intel/vsec.c
index 012d87878afd..b21a9cfabad4 100644
--- a/drivers/platform/x86/intel/vsec.c
+++ b/drivers/platform/x86/intel/vsec.c
@@ -299,11 +299,11 @@ static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he
 		return -EINVAL;
 	}

-	intel_vsec_dev = kzalloc(sizeof(*intel_vsec_dev), GFP_KERNEL);
+	intel_vsec_dev = kzalloc_obj(*intel_vsec_dev, GFP_KERNEL);
 	if (!intel_vsec_dev)
 		return -ENOMEM;

-	res = kcalloc(header->num_entries, sizeof(*res), GFP_KERNEL);
+	res = kzalloc_objs(*res, header->num_entries, GFP_KERNEL);
 	if (!res)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/intel/vsec_tpmi.c b/drivers/platform/x86/intel/vsec_tpmi.c
index 7748b5557a18..9614fb8584f2 100644
--- a/drivers/platform/x86/intel/vsec_tpmi.c
+++ b/drivers/platform/x86/intel/vsec_tpmi.c
@@ -622,11 +622,11 @@ static int tpmi_create_device(struct intel_tpmi_info *tpmi_info,
 	if (!name)
 		return -EOPNOTSUPP;

-	res = kcalloc(pfs->pfs_header.num_entries, sizeof(*res), GFP_KERNEL);
+	res = kzalloc_objs(*res, pfs->pfs_header.num_entries, GFP_KERNEL);
 	if (!res)
 		return -ENOMEM;

-	feature_vsec_dev = kzalloc(sizeof(*feature_vsec_dev), GFP_KERNEL);
+	feature_vsec_dev = kzalloc_obj(*feature_vsec_dev, GFP_KERNEL);
 	if (!feature_vsec_dev) {
 		kfree(res);
 		return -ENOMEM;
diff --git a/drivers/platform/x86/intel_scu_ipc.c b/drivers/platform/x86/intel_scu_ipc.c
index 3acf6149a9ec..4412e7c2bce0 100644
--- a/drivers/platform/x86/intel_scu_ipc.c
+++ b/drivers/platform/x86/intel_scu_ipc.c
@@ -573,7 +573,7 @@ __intel_scu_ipc_register(struct device *parent,
 	if (ipcdev)
 		return ERR_PTR(-EBUSY);

-	scu = kzalloc(sizeof(*scu), GFP_KERNEL);
+	scu = kzalloc_obj(*scu, GFP_KERNEL);
 	if (!scu)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c
index 06ac002a1ebc..59703574e8ce 100644
--- a/drivers/platform/x86/lenovo/ideapad-laptop.c
+++ b/drivers/platform/x86/lenovo/ideapad-laptop.c
@@ -1172,7 +1172,7 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
 		return -ENODEV;
 	}

-	priv->dytc = kzalloc(sizeof(*priv->dytc), GFP_KERNEL);
+	priv->dytc = kzalloc_obj(*priv->dytc, GFP_KERNEL);
 	if (!priv->dytc)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/lenovo/think-lmi.c b/drivers/platform/x86/lenovo/think-lmi.c
index c45f0206b4ab..a89f9436a795 100644
--- a/drivers/platform/x86/lenovo/think-lmi.c
+++ b/drivers/platform/x86/lenovo/think-lmi.c
@@ -1593,7 +1593,7 @@ static struct tlmi_pwd_setting *tlmi_create_auth(const char *pwd_type,
 {
 	struct tlmi_pwd_setting *new_pwd;

-	new_pwd = kzalloc(sizeof(struct tlmi_pwd_setting), GFP_KERNEL);
+	new_pwd = kzalloc_obj(struct tlmi_pwd_setting, GFP_KERNEL);
 	if (!new_pwd)
 		return NULL;

@@ -1668,7 +1668,7 @@ static int tlmi_analyze(struct wmi_device *wdev)
 		strreplace(item, ',', '\0');

 		/* Create a setting entry */
-		setting = kzalloc(sizeof(*setting), GFP_KERNEL);
+		setting = kzalloc_obj(*setting, GFP_KERNEL);
 		if (!setting) {
 			ret = -ENOMEM;
 			kfree(item);
diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c
index 6b0e4b4c485e..9a5b1d793cb9 100644
--- a/drivers/platform/x86/lenovo/thinkpad_acpi.c
+++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c
@@ -873,7 +873,7 @@ static int __init register_tpacpi_subdriver(struct ibm_struct *ibm)

 	BUG_ON(!ibm->acpi);

-	ibm->acpi->driver = kzalloc(sizeof(struct acpi_driver), GFP_KERNEL);
+	ibm->acpi->driver = kzalloc_obj(struct acpi_driver, GFP_KERNEL);
 	if (!ibm->acpi->driver) {
 		pr_err("failed to allocate memory for ibm->acpi->driver\n");
 		return -ENOMEM;
@@ -1197,7 +1197,7 @@ static int __init tpacpi_new_rfkill(const enum tpacpi_rfk_id id,

 	BUG_ON(id >= TPACPI_RFK_SW_MAX || tpacpi_rfkill_switches[id]);

-	atp_rfk = kzalloc(sizeof(struct tpacpi_rfk), GFP_KERNEL);
+	atp_rfk = kzalloc_obj(struct tpacpi_rfk, GFP_KERNEL);
 	if (atp_rfk)
 		atp_rfk->rfkill = rfkill_alloc(name,
 						&tpacpi_pdev->dev,
@@ -5817,8 +5817,7 @@ static int __init led_init(struct ibm_init_struct *iibm)
 	if (led_supported == TPACPI_LED_NONE)
 		return -ENODEV;

-	tpacpi_leds = kcalloc(TPACPI_LED_NUMLEDS, sizeof(*tpacpi_leds),
-			      GFP_KERNEL);
+	tpacpi_leds = kzalloc_objs(*tpacpi_leds, TPACPI_LED_NUMLEDS, GFP_KERNEL);
 	if (!tpacpi_leds) {
 		pr_err("Out of memory for LED data\n");
 		return -ENOMEM;
diff --git a/drivers/platform/x86/panasonic-laptop.c b/drivers/platform/x86/panasonic-laptop.c
index 937f1a5b78ed..9990f6b920c5 100644
--- a/drivers/platform/x86/panasonic-laptop.c
+++ b/drivers/platform/x86/panasonic-laptop.c
@@ -1017,7 +1017,7 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device)
 	 */
 	num_sifr++;

-	pcc = kzalloc(sizeof(struct pcc_acpi), GFP_KERNEL);
+	pcc = kzalloc_obj(struct pcc_acpi, GFP_KERNEL);
 	if (!pcc) {
 		pr_err("Couldn't allocate mem for pcc");
 		return -ENOMEM;
diff --git a/drivers/platform/x86/pmc_atom.c b/drivers/platform/x86/pmc_atom.c
index 0aa7076bc9cc..3b6edd709543 100644
--- a/drivers/platform/x86/pmc_atom.c
+++ b/drivers/platform/x86/pmc_atom.c
@@ -428,7 +428,7 @@ static int pmc_setup_clks(struct pci_dev *pdev, void __iomem *pmc_regmap,
 	struct platform_device *clkdev;
 	struct pmc_clk_data *clk_data;

-	clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
+	clk_data = kzalloc_obj(*clk_data, GFP_KERNEL);
 	if (!clk_data)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
index 9d43a12db73c..50e337a85135 100644
--- a/drivers/platform/x86/samsung-laptop.c
+++ b/drivers/platform/x86/samsung-laptop.c
@@ -1671,7 +1671,7 @@ static int __init samsung_init(void)
 	if (!force && !dmi_check_system(samsung_dmi_table))
 		return -ENODEV;

-	samsung = kzalloc(sizeof(*samsung), GFP_KERNEL);
+	samsung = kzalloc_obj(*samsung, GFP_KERNEL);
 	if (!samsung)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
index 56beebc38850..a670473b20ab 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -829,7 +829,7 @@ static int sony_nc_handles_setup(struct platform_device *pd)
 {
 	int i, r, result, arg;

-	handles = kzalloc(sizeof(*handles), GFP_KERNEL);
+	handles = kzalloc_obj(*handles, GFP_KERNEL);
 	if (!handles)
 		return -ENOMEM;

@@ -1902,7 +1902,7 @@ static int sony_nc_kbd_backlight_setup(struct platform_device *pd,
 		}
 	}

-	kbdbl_ctl = kzalloc(sizeof(*kbdbl_ctl), GFP_KERNEL);
+	kbdbl_ctl = kzalloc_obj(*kbdbl_ctl, GFP_KERNEL);
 	if (!kbdbl_ctl)
 		return -ENOMEM;

@@ -2070,7 +2070,7 @@ static int sony_nc_battery_care_setup(struct platform_device *pd,
 {
 	int ret = 0;

-	bcare_ctl = kzalloc(sizeof(struct battery_care_control), GFP_KERNEL);
+	bcare_ctl = kzalloc_obj(struct battery_care_control, GFP_KERNEL);
 	if (!bcare_ctl)
 		return -ENOMEM;

@@ -2222,7 +2222,7 @@ static ssize_t sony_nc_thermal_mode_show(struct device *dev,
 static int sony_nc_thermal_setup(struct platform_device *pd)
 {
 	int ret = 0;
-	th_handle = kzalloc(sizeof(struct snc_thermal_ctrl), GFP_KERNEL);
+	th_handle = kzalloc_obj(struct snc_thermal_ctrl, GFP_KERNEL);
 	if (!th_handle)
 		return -ENOMEM;

@@ -2370,7 +2370,7 @@ static int sony_nc_lid_resume_setup(struct platform_device *pd,
 	if (sony_call_snc_handle(handle, 0x0000, &result))
 		return -EIO;

-	lid_ctl = kzalloc(sizeof(struct snc_lid_resume_control), GFP_KERNEL);
+	lid_ctl = kzalloc_obj(struct snc_lid_resume_control, GFP_KERNEL);
 	if (!lid_ctl)
 		return -ENOMEM;

@@ -2497,7 +2497,7 @@ static int sony_nc_gfx_switch_setup(struct platform_device *pd,
 {
 	unsigned int result;

-	gfxs_ctl = kzalloc(sizeof(struct snc_gfx_switch_control), GFP_KERNEL);
+	gfxs_ctl = kzalloc_obj(struct snc_gfx_switch_control, GFP_KERNEL);
 	if (!gfxs_ctl)
 		return -ENOMEM;

@@ -2576,7 +2576,7 @@ static int sony_nc_highspeed_charging_setup(struct platform_device *pd)
 		return 0;
 	}

-	hsc_handle = kzalloc(sizeof(struct device_attribute), GFP_KERNEL);
+	hsc_handle = kzalloc_obj(struct device_attribute, GFP_KERNEL);
 	if (!hsc_handle)
 		return -ENOMEM;

@@ -2642,7 +2642,7 @@ static int sony_nc_lowbatt_setup(struct platform_device *pd)
 {
 	unsigned int result;

-	lowbatt_handle = kzalloc(sizeof(struct device_attribute), GFP_KERNEL);
+	lowbatt_handle = kzalloc_obj(struct device_attribute, GFP_KERNEL);
 	if (!lowbatt_handle)
 		return -ENOMEM;

@@ -2719,11 +2719,11 @@ static int sony_nc_fanspeed_setup(struct platform_device *pd)
 {
 	unsigned int result;

-	fan_handle = kzalloc(sizeof(struct device_attribute), GFP_KERNEL);
+	fan_handle = kzalloc_obj(struct device_attribute, GFP_KERNEL);
 	if (!fan_handle)
 		return -ENOMEM;

-	hsf_handle = kzalloc(sizeof(struct device_attribute), GFP_KERNEL);
+	hsf_handle = kzalloc_obj(struct device_attribute, GFP_KERNEL);
 	if (!hsf_handle) {
 		result = -ENOMEM;
 		goto out_hsf_handle_alloc;
@@ -2823,7 +2823,7 @@ static int sony_nc_usb_charge_setup(struct platform_device *pd)
 		return 0;
 	}

-	uc_handle = kzalloc(sizeof(struct device_attribute), GFP_KERNEL);
+	uc_handle = kzalloc_obj(struct device_attribute, GFP_KERNEL);
 	if (!uc_handle)
 		return -ENOMEM;

@@ -2870,7 +2870,7 @@ static int sony_nc_panelid_setup(struct platform_device *pd)
 {
 	unsigned int result;

-	panel_handle = kzalloc(sizeof(struct device_attribute), GFP_KERNEL);
+	panel_handle = kzalloc_obj(struct device_attribute, GFP_KERNEL);
 	if (!panel_handle)
 		return -ENOMEM;

@@ -2925,7 +2925,7 @@ static int sony_nc_smart_conn_setup(struct platform_device *pd)
 {
 	unsigned int result;

-	sc_handle = kzalloc(sizeof(struct device_attribute), GFP_KERNEL);
+	sc_handle = kzalloc_obj(struct device_attribute, GFP_KERNEL);
 	if (!sc_handle)
 		return -ENOMEM;

@@ -2999,7 +2999,7 @@ static int sony_nc_touchpad_setup(struct platform_device *pd,
 {
 	int ret = 0;

-	tp_ctl = kzalloc(sizeof(struct touchpad_control), GFP_KERNEL);
+	tp_ctl = kzalloc_obj(struct touchpad_control, GFP_KERNEL);
 	if (!tp_ctl)
 		return -ENOMEM;

@@ -4161,7 +4161,8 @@ sony_pic_read_possible_resource(struct acpi_resource *resource, void *context)
 	case ACPI_RESOURCE_TYPE_START_DEPENDENT:
 		{
 			/* start IO enumeration */
-			struct sony_pic_ioport *ioport = kzalloc(sizeof(*ioport), GFP_KERNEL);
+			struct sony_pic_ioport *ioport = kzalloc_obj(*ioport,
+								     GFP_KERNEL);
 			if (!ioport)
 				return AE_ERROR;

@@ -4191,8 +4192,7 @@ sony_pic_read_possible_resource(struct acpi_resource *resource, void *context)
 						p->interrupts[i]);
 					continue;
 				}
-				interrupt = kzalloc(sizeof(*interrupt),
-						GFP_KERNEL);
+				interrupt = kzalloc_obj(*interrupt, GFP_KERNEL);
 				if (!interrupt)
 					return AE_ERROR;

diff --git a/drivers/platform/x86/topstar-laptop.c b/drivers/platform/x86/topstar-laptop.c
index 53fc2b364552..955021a0ffa4 100644
--- a/drivers/platform/x86/topstar-laptop.c
+++ b/drivers/platform/x86/topstar-laptop.c
@@ -292,7 +292,7 @@ static int topstar_acpi_add(struct acpi_device *device)

 	dmi_check_system(topstar_dmi_ids);

-	topstar = kzalloc(sizeof(struct topstar_laptop), GFP_KERNEL);
+	topstar = kzalloc_obj(struct topstar_laptop, GFP_KERNEL);
 	if (!topstar)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
index 5ad3a7183d33..8e1773f44f64 100644
--- a/drivers/platform/x86/toshiba_acpi.c
+++ b/drivers/platform/x86/toshiba_acpi.c
@@ -3321,7 +3321,7 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev)
 		return -ENODEV;
 	}

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	dev->acpi_dev = acpi_dev;
diff --git a/drivers/platform/x86/toshiba_bluetooth.c b/drivers/platform/x86/toshiba_bluetooth.c
index dad2c3e55904..6e71de0abca2 100644
--- a/drivers/platform/x86/toshiba_bluetooth.c
+++ b/drivers/platform/x86/toshiba_bluetooth.c
@@ -242,7 +242,7 @@ static int toshiba_bt_rfkill_add(struct acpi_device *device)

 	pr_info("Toshiba ACPI Bluetooth device driver\n");

-	bt_dev = kzalloc(sizeof(*bt_dev), GFP_KERNEL);
+	bt_dev = kzalloc_obj(*bt_dev, GFP_KERNEL);
 	if (!bt_dev)
 		return -ENOMEM;
 	bt_dev->acpi_dev = device;
diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c
index 3c9af441d133..bad9c030295f 100644
--- a/drivers/platform/x86/uniwill/uniwill-acpi.c
+++ b/drivers/platform/x86/uniwill/uniwill-acpi.c
@@ -1293,7 +1293,7 @@ static int uniwill_add_battery(struct power_supply *battery, struct acpi_battery
 	struct uniwill_battery_entry *entry;
 	int ret;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/uv_sysfs.c b/drivers/platform/x86/uv_sysfs.c
index f6a0627f36db..fa2e31151923 100644
--- a/drivers/platform/x86/uv_sysfs.c
+++ b/drivers/platform/x86/uv_sysfs.c
@@ -216,7 +216,7 @@ static int uv_hubs_init(void)
 	u64 sz;
 	int i, ret;

-	prev_obj_to_cnode = kmalloc_array(uv_bios_obj_cnt, sizeof(*prev_obj_to_cnode),
+	prev_obj_to_cnode = kmalloc_objs(*prev_obj_to_cnode, uv_bios_obj_cnt,
 					 GFP_KERNEL);
 	if (!prev_obj_to_cnode)
 		return -ENOMEM;
@@ -242,14 +242,14 @@ static int uv_hubs_init(void)
 		goto err_enum_objs;
 	}

-	uv_hubs = kcalloc(uv_bios_obj_cnt, sizeof(*uv_hubs), GFP_KERNEL);
+	uv_hubs = kzalloc_objs(*uv_hubs, uv_bios_obj_cnt, GFP_KERNEL);
 	if (!uv_hubs) {
 		ret = -ENOMEM;
 		goto err_enum_objs;
 	}

 	for (i = 0; i < uv_bios_obj_cnt; i++) {
-		uv_hubs[i] = kzalloc(sizeof(*uv_hubs[i]), GFP_KERNEL);
+		uv_hubs[i] = kzalloc_obj(*uv_hubs[i], GFP_KERNEL);
 		if (!uv_hubs[i]) {
 			i--;
 			ret = -ENOMEM;
@@ -368,7 +368,7 @@ static int uv_ports_init(void)
 	s64 biosr;
 	int j = 0, k = 0, ret, sz;

-	port_buf = kcalloc(uv_bios_obj_cnt, sizeof(*port_buf), GFP_KERNEL);
+	port_buf = kzalloc_objs(*port_buf, uv_bios_obj_cnt, GFP_KERNEL);
 	if (!port_buf)
 		return -ENOMEM;

@@ -388,8 +388,8 @@ static int uv_ports_init(void)
 		}
 	}
 	for (j = 0; j < uv_bios_obj_cnt; j++) {
-		uv_hubs[j]->ports = kcalloc(hub_buf[j].ports,
-					   sizeof(*uv_hubs[j]->ports), GFP_KERNEL);
+		uv_hubs[j]->ports = kzalloc_objs(*uv_hubs[j]->ports,
+						 hub_buf[j].ports, GFP_KERNEL);
 		if (!uv_hubs[j]->ports) {
 			ret = -ENOMEM;
 			j--;
@@ -398,7 +398,8 @@ static int uv_ports_init(void)
 	}
 	for (j = 0; j < uv_bios_obj_cnt; j++) {
 		for (k = 0; k < hub_buf[j].ports; k++) {
-			uv_hubs[j]->ports[k] = kzalloc(sizeof(*uv_hubs[j]->ports[k]), GFP_KERNEL);
+			uv_hubs[j]->ports[k] = kzalloc_obj(*uv_hubs[j]->ports[k],
+							   GFP_KERNEL);
 			if (!uv_hubs[j]->ports[k]) {
 				ret = -ENOMEM;
 				k--;
@@ -674,8 +675,8 @@ static int pci_topology_init(void)
 			}
 			num_pci_lines = l;

-			uv_pci_objs = kcalloc(num_pci_lines,
-					     sizeof(*uv_pci_objs), GFP_KERNEL);
+			uv_pci_objs = kzalloc_objs(*uv_pci_objs, num_pci_lines,
+						   GFP_KERNEL);
 			if (!uv_pci_objs) {
 				kfree(pci_top_str);
 				ret = -ENOMEM;
@@ -683,7 +684,8 @@ static int pci_topology_init(void)
 			}
 			start = pci_top_str;
 			while ((found = strsep(&start, "\n")) != NULL) {
-				uv_pci_objs[k] = kzalloc(sizeof(*uv_pci_objs[k]), GFP_KERNEL);
+				uv_pci_objs[k] = kzalloc_obj(*uv_pci_objs[k],
+							     GFP_KERNEL);
 				if (!uv_pci_objs[k]) {
 					ret = -ENOMEM;
 					goto err_pci_obj;
diff --git a/drivers/platform/x86/wireless-hotkey.c b/drivers/platform/x86/wireless-hotkey.c
index a220fe4f9ef8..bba55c634e2c 100644
--- a/drivers/platform/x86/wireless-hotkey.c
+++ b/drivers/platform/x86/wireless-hotkey.c
@@ -91,7 +91,7 @@ static int wl_add(struct acpi_device *device)
 	struct wl_button *button;
 	int err;

-	button = kzalloc(sizeof(struct wl_button), GFP_KERNEL);
+	button = kzalloc_obj(struct wl_button, GFP_KERNEL);
 	if (!button)
 		return -ENOMEM;

diff --git a/drivers/platform/x86/x86-android-tablets/core.c b/drivers/platform/x86/x86-android-tablets/core.c
index 6588fae30356..15a50ced6867 100644
--- a/drivers/platform/x86/x86-android-tablets/core.c
+++ b/drivers/platform/x86/x86-android-tablets/core.c
@@ -49,7 +49,7 @@ int x86_android_tablet_get_gpiod(const char *chip, int pin, const char *con_id,
 	struct gpiod_lookup_table *lookup;
 	struct gpio_desc *gpiod;

-	lookup = kzalloc(struct_size(lookup, table, 2), GFP_KERNEL);
+	lookup = kzalloc_flex(*lookup, table, 2, GFP_KERNEL);
 	if (!lookup)
 		return -ENOMEM;

@@ -447,7 +447,8 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev)
 		exit_handler = dev_info->exit;
 	}

-	i2c_clients = kcalloc(dev_info->i2c_client_count, sizeof(*i2c_clients), GFP_KERNEL);
+	i2c_clients = kzalloc_objs(*i2c_clients, dev_info->i2c_client_count,
+				   GFP_KERNEL);
 	if (!i2c_clients) {
 		x86_android_tablet_remove(pdev);
 		return -ENOMEM;
@@ -462,7 +463,7 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev)
 		}
 	}

-	spi_devs = kcalloc(dev_info->spi_dev_count, sizeof(*spi_devs), GFP_KERNEL);
+	spi_devs = kzalloc_objs(*spi_devs, dev_info->spi_dev_count, GFP_KERNEL);
 	if (!spi_devs) {
 		x86_android_tablet_remove(pdev);
 		return -ENOMEM;
@@ -478,7 +479,7 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev)
 	}

 	/* + 1 to make space for the (optional) gpio_keys_button platform device */
-	pdevs = kcalloc(dev_info->pdev_count + 1, sizeof(*pdevs), GFP_KERNEL);
+	pdevs = kzalloc_objs(*pdevs, dev_info->pdev_count + 1, GFP_KERNEL);
 	if (!pdevs) {
 		x86_android_tablet_remove(pdev);
 		return -ENOMEM;
@@ -494,7 +495,7 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev)
 		}
 	}

-	serdevs = kcalloc(dev_info->serdev_count, sizeof(*serdevs), GFP_KERNEL);
+	serdevs = kzalloc_objs(*serdevs, dev_info->serdev_count, GFP_KERNEL);
 	if (!serdevs) {
 		x86_android_tablet_remove(pdev);
 		return -ENOMEM;
diff --git a/drivers/platform/x86/xo15-ebook.c b/drivers/platform/x86/xo15-ebook.c
index cb02222c978c..6bc5cd2abfab 100644
--- a/drivers/platform/x86/xo15-ebook.c
+++ b/drivers/platform/x86/xo15-ebook.c
@@ -86,7 +86,7 @@ static int ebook_switch_add(struct acpi_device *device)
 	struct input_dev *input;
 	int error;

-	button = kzalloc(sizeof(struct ebook_switch), GFP_KERNEL);
+	button = kzalloc_obj(struct ebook_switch, GFP_KERNEL);
 	if (!button)
 		return -ENOMEM;

diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
index bf82775f6a67..a324740b248b 100644
--- a/drivers/pmdomain/core.c
+++ b/drivers/pmdomain/core.c
@@ -1811,7 +1811,7 @@ static struct generic_pm_domain_data *genpd_alloc_dev_data(struct device *dev,
 	if (ret)
 		return ERR_PTR(ret);

-	gpd_data = kzalloc(sizeof(*gpd_data), GFP_KERNEL);
+	gpd_data = kzalloc_obj(*gpd_data, GFP_KERNEL);
 	if (!gpd_data) {
 		ret = -ENOMEM;
 		goto err_put;
@@ -1822,7 +1822,7 @@ static struct generic_pm_domain_data *genpd_alloc_dev_data(struct device *dev,

 	/* Allocate data used by a governor. */
 	if (has_governor) {
-		td = kzalloc(sizeof(*td), GFP_KERNEL);
+		td = kzalloc_obj(*td, GFP_KERNEL);
 		if (!td) {
 			ret = -ENOMEM;
 			goto err_free;
@@ -2161,7 +2161,7 @@ static int genpd_add_subdomain(struct generic_pm_domain *genpd,
 		return -EINVAL;
 	}

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;

@@ -2269,7 +2269,7 @@ static int genpd_set_default_power_state(struct generic_pm_domain *genpd)
 {
 	struct genpd_power_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

@@ -2295,7 +2295,7 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd)
 		return -ENOMEM;

 	if (genpd->gov) {
-		gd = kzalloc(sizeof(*gd), GFP_KERNEL);
+		gd = kzalloc_obj(*gd, GFP_KERNEL);
 		if (!gd) {
 			ret = -ENOMEM;
 			goto free;
@@ -2623,7 +2623,7 @@ static int genpd_add_provider(struct device_node *np, genpd_xlate_t xlate,
 {
 	struct of_genpd_provider *cp;

-	cp = kzalloc(sizeof(*cp), GFP_KERNEL);
+	cp = kzalloc_obj(*cp, GFP_KERNEL);
 	if (!cp)
 		return -ENOMEM;

@@ -3316,7 +3316,7 @@ struct device *genpd_dev_pm_attach_by_id(struct device *dev,
 		return ERR_PTR(-ENODEV);

 	/* Allocate and register device on the genpd bus. */
-	virt_dev = kzalloc(sizeof(*virt_dev), GFP_KERNEL);
+	virt_dev = kzalloc_obj(*virt_dev, GFP_KERNEL);
 	if (!virt_dev)
 		return ERR_PTR(-ENOMEM);

@@ -3474,7 +3474,7 @@ int of_genpd_parse_idle_states(struct device_node *dn,
 		return 0;
 	}

-	st = kcalloc(ret, sizeof(*st), GFP_KERNEL);
+	st = kzalloc_objs(*st, ret, GFP_KERNEL);
 	if (!st)
 		return -ENOMEM;

diff --git a/drivers/pmdomain/renesas/rcar-gen4-sysc.c b/drivers/pmdomain/renesas/rcar-gen4-sysc.c
index 7434bf42d215..a62937a9a045 100644
--- a/drivers/pmdomain/renesas/rcar-gen4-sysc.c
+++ b/drivers/pmdomain/renesas/rcar-gen4-sysc.c
@@ -324,7 +324,7 @@ static int __init rcar_gen4_sysc_pd_init(void)

 	rcar_gen4_sysc_base = base;

-	domains = kzalloc(sizeof(*domains), GFP_KERNEL);
+	domains = kzalloc_obj(*domains, GFP_KERNEL);
 	if (!domains) {
 		error = -ENOMEM;
 		goto out_put;
diff --git a/drivers/pmdomain/renesas/rcar-sysc.c b/drivers/pmdomain/renesas/rcar-sysc.c
index d8a8ffcde38d..aa5485876e0a 100644
--- a/drivers/pmdomain/renesas/rcar-sysc.c
+++ b/drivers/pmdomain/renesas/rcar-sysc.c
@@ -383,7 +383,7 @@ static int __init rcar_sysc_pd_init(void)
 	rcar_sysc_extmask_offs = info->extmask_offs;
 	rcar_sysc_extmask_val = info->extmask_val;

-	domains = kzalloc(sizeof(*domains), GFP_KERNEL);
+	domains = kzalloc_obj(*domains, GFP_KERNEL);
 	if (!domains) {
 		error = -ENOMEM;
 		goto out_put;
diff --git a/drivers/pmdomain/renesas/rmobile-sysc.c b/drivers/pmdomain/renesas/rmobile-sysc.c
index a6bf7295e909..541f5739c13a 100644
--- a/drivers/pmdomain/renesas/rmobile-sysc.c
+++ b/drivers/pmdomain/renesas/rmobile-sysc.c
@@ -277,7 +277,7 @@ static int __init rmobile_add_pm_domains(void __iomem *base,
 			/* always-on domain */
 		}

-		pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+		pd = kzalloc_obj(*pd, GFP_KERNEL);
 		if (!pd)
 			return -ENOMEM;

diff --git a/drivers/pmdomain/st/ste-ux500-pm-domain.c b/drivers/pmdomain/st/ste-ux500-pm-domain.c
index 3d4f111ed156..45ea76b9c7f8 100644
--- a/drivers/pmdomain/st/ste-ux500-pm-domain.c
+++ b/drivers/pmdomain/st/ste-ux500-pm-domain.c
@@ -65,7 +65,7 @@ static int ux500_pm_domains_probe(struct platform_device *pdev)
 	if (!np)
 		return -ENODEV;

-	genpd_data = kzalloc(sizeof(*genpd_data), GFP_KERNEL);
+	genpd_data = kzalloc_obj(*genpd_data, GFP_KERNEL);
 	if (!genpd_data)
 		return -ENOMEM;

diff --git a/drivers/pmdomain/tegra/powergate-bpmp.c b/drivers/pmdomain/tegra/powergate-bpmp.c
index 9f4366250bfd..43a46edd1ebc 100644
--- a/drivers/pmdomain/tegra/powergate-bpmp.c
+++ b/drivers/pmdomain/tegra/powergate-bpmp.c
@@ -226,7 +226,7 @@ tegra_bpmp_probe_powergates(struct tegra_bpmp *bpmp,

 	dev_dbg(bpmp->dev, "maximum powergate ID: %u\n", max_id);

-	powergates = kcalloc(max_id + 1, sizeof(*powergates), GFP_KERNEL);
+	powergates = kzalloc_objs(*powergates, max_id + 1, GFP_KERNEL);
 	if (!powergates)
 		return -ENOMEM;

@@ -260,7 +260,7 @@ static int tegra_bpmp_add_powergates(struct tegra_bpmp *bpmp,
 	unsigned int i;
 	int err;

-	domains = kcalloc(count, sizeof(*domains), GFP_KERNEL);
+	domains = kzalloc_objs(*domains, count, GFP_KERNEL);
 	if (!domains)
 		return -ENOMEM;

diff --git a/drivers/pnp/card.c b/drivers/pnp/card.c
index c7596dc24fbd..226a81cdb664 100644
--- a/drivers/pnp/card.c
+++ b/drivers/pnp/card.c
@@ -80,7 +80,7 @@ static int card_probe(struct pnp_card *card, struct pnp_card_driver *drv)
 	if (!id)
 		return 0;

-	clink = kzalloc(sizeof(*clink), GFP_KERNEL);
+	clink = kzalloc_obj(*clink, GFP_KERNEL);
 	if (!clink)
 		return 0;
 	clink->card = card;
@@ -108,7 +108,7 @@ static struct pnp_id *pnp_add_card_id(struct pnp_card *card, char *id)
 {
 	struct pnp_id *dev_id, *ptr;

-	dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
+	dev_id = kzalloc_obj(struct pnp_id, GFP_KERNEL);
 	if (!dev_id)
 		return NULL;

@@ -159,7 +159,7 @@ struct pnp_card *pnp_alloc_card(struct pnp_protocol *protocol, int id, char *pnp
 	struct pnp_card *card;
 	struct pnp_id *dev_id;

-	card = kzalloc(sizeof(struct pnp_card), GFP_KERNEL);
+	card = kzalloc_obj(struct pnp_card, GFP_KERNEL);
 	if (!card)
 		return NULL;

diff --git a/drivers/pnp/core.c b/drivers/pnp/core.c
index ac48db6dcfe3..768388ddaeca 100644
--- a/drivers/pnp/core.c
+++ b/drivers/pnp/core.c
@@ -122,7 +122,7 @@ struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *protocol, int id,
 	struct pnp_dev *dev;
 	struct pnp_id *dev_id;

-	dev = kzalloc(sizeof(struct pnp_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct pnp_dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
index 05e9840bc3d4..731a37002811 100644
--- a/drivers/pnp/driver.c
+++ b/drivers/pnp/driver.c
@@ -315,7 +315,7 @@ struct pnp_id *pnp_add_id(struct pnp_dev *dev, const char *id)
 {
 	struct pnp_id *dev_id, *ptr;

-	dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
+	dev_id = kzalloc_obj(struct pnp_id, GFP_KERNEL);
 	if (!dev_id)
 		return NULL;

diff --git a/drivers/pnp/interface.c b/drivers/pnp/interface.c
index 44efcdb87e6f..108f7c63ddc5 100644
--- a/drivers/pnp/interface.c
+++ b/drivers/pnp/interface.c
@@ -214,7 +214,7 @@ static ssize_t options_show(struct device *dmdev, struct device_attribute *attr,
 	int ret, dep = 0, set = 0;
 	char *indent;

-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;

@@ -257,7 +257,7 @@ static ssize_t resources_show(struct device *dmdev,
 	if (!dev)
 		return -EINVAL;

-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;

diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c
index 6e1d4bfd28ac..2afa17c39628 100644
--- a/drivers/pnp/quirks.c
+++ b/drivers/pnp/quirks.c
@@ -29,7 +29,7 @@ static void quirk_awe32_add_ports(struct pnp_dev *dev,
 {
 	struct pnp_option *new_option;

-	new_option = kmalloc(sizeof(struct pnp_option), GFP_KERNEL);
+	new_option = kmalloc_obj(struct pnp_option, GFP_KERNEL);
 	if (!new_option) {
 		dev_err(&dev->dev, "couldn't add ioport region to option set "
 			"%d\n", pnp_option_set(option));
@@ -155,8 +155,7 @@ static struct pnp_option *pnp_clone_dependent_set(struct pnp_dev *dev,
 	list_for_each_entry(option, &dev->options, list) {
 		if (pnp_option_is_dependent(option) &&
 		    pnp_option_set(option) == set) {
-			new_option = kmalloc(sizeof(struct pnp_option),
-					     GFP_KERNEL);
+			new_option = kmalloc_obj(struct pnp_option, GFP_KERNEL);
 			if (!new_option) {
 				dev_err(&dev->dev, "couldn't clone dependent "
 					"set %d\n", set);
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c
index 8f7695624c8c..f62544ec5a1f 100644
--- a/drivers/pnp/resource.c
+++ b/drivers/pnp/resource.c
@@ -38,7 +38,7 @@ static struct pnp_option *pnp_build_option(struct pnp_dev *dev, unsigned long ty
 {
 	struct pnp_option *option;

-	option = kzalloc(sizeof(struct pnp_option), GFP_KERNEL);
+	option = kzalloc_obj(struct pnp_option, GFP_KERNEL);
 	if (!option)
 		return NULL;

@@ -499,7 +499,7 @@ static struct pnp_resource *pnp_new_resource(struct pnp_dev *dev)
 {
 	struct pnp_resource *pnp_res;

-	pnp_res = kzalloc(sizeof(struct pnp_resource), GFP_KERNEL);
+	pnp_res = kzalloc_obj(struct pnp_resource, GFP_KERNEL);
 	if (!pnp_res)
 		return NULL;

diff --git a/drivers/power/sequencing/core.c b/drivers/power/sequencing/core.c
index 1fcf0af7cc0b..666bcfd3c655 100644
--- a/drivers/power/sequencing/core.c
+++ b/drivers/power/sequencing/core.c
@@ -90,7 +90,7 @@ static struct pwrseq_unit *pwrseq_unit_new(const struct pwrseq_unit_data *data)
 {
 	struct pwrseq_unit *unit;

-	unit = kzalloc(sizeof(*unit), GFP_KERNEL);
+	unit = kzalloc_obj(*unit, GFP_KERNEL);
 	if (!unit)
 		return NULL;

@@ -138,7 +138,7 @@ static struct pwrseq_unit_dep *pwrseq_unit_dep_new(struct pwrseq_unit *unit)
 {
 	struct pwrseq_unit_dep *dep;

-	dep = kzalloc(sizeof(*dep), GFP_KERNEL);
+	dep = kzalloc_obj(*dep, GFP_KERNEL);
 	if (!dep)
 		return NULL;

@@ -195,7 +195,7 @@ pwrseq_target_new(const struct pwrseq_target_data *data)
 {
 	struct pwrseq_target *target;

-	target = kzalloc(sizeof(*target), GFP_KERNEL);
+	target = kzalloc_obj(*target, GFP_KERNEL);
 	if (!target)
 		return NULL;

@@ -669,8 +669,7 @@ struct pwrseq_desc *pwrseq_get(struct device *dev, const char *target)
 	struct pwrseq_match_data match_data;
 	int ret;

-	struct pwrseq_desc *desc __free(kfree) = kzalloc(sizeof(*desc),
-							 GFP_KERNEL);
+	struct pwrseq_desc *desc __free(kfree) = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/power/sequencing/pwrseq-thead-gpu.c b/drivers/power/sequencing/pwrseq-thead-gpu.c
index 7c82a10ca9f6..ce32201f5a21 100644
--- a/drivers/power/sequencing/pwrseq-thead-gpu.c
+++ b/drivers/power/sequencing/pwrseq-thead-gpu.c
@@ -145,7 +145,7 @@ static int pwrseq_thead_gpu_match(struct pwrseq_device *pwrseq,
 				PWRSEQ_MATCH_OK : PWRSEQ_NO_MATCH;

 	ctx->num_clks = ARRAY_SIZE(clk_names);
-	ctx->clks = kcalloc(ctx->num_clks, sizeof(*ctx->clks), GFP_KERNEL);
+	ctx->clks = kzalloc_objs(*ctx->clks, ctx->num_clks, GFP_KERNEL);
 	if (!ctx->clks)
 		return -ENOMEM;

diff --git a/drivers/power/supply/cros_peripheral_charger.c b/drivers/power/supply/cros_peripheral_charger.c
index 962a6fd29832..7d48ab4a60b2 100644
--- a/drivers/power/supply/cros_peripheral_charger.c
+++ b/drivers/power/supply/cros_peripheral_charger.c
@@ -64,7 +64,7 @@ static int cros_pchg_ec_command(const struct charger_data *charger,
 	struct cros_ec_command *msg;
 	int ret;

-	msg = kzalloc(struct_size(msg, data, max(outsize, insize)), GFP_KERNEL);
+	msg = kzalloc_flex(*msg, data, max(outsize, insize), GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

diff --git a/drivers/power/supply/cros_usbpd-charger.c b/drivers/power/supply/cros_usbpd-charger.c
index 47d3f58aa15c..6b525ed74197 100644
--- a/drivers/power/supply/cros_usbpd-charger.c
+++ b/drivers/power/supply/cros_usbpd-charger.c
@@ -94,7 +94,7 @@ static int cros_usbpd_charger_ec_command(struct charger_data *charger,
 	struct cros_ec_command *msg;
 	int ret;

-	msg = kzalloc(struct_size(msg, data, max(outsize, insize)), GFP_KERNEL);
+	msg = kzalloc_flex(*msg, data, max(outsize, insize), GFP_KERNEL);
 	if (!msg)
 		return -ENOMEM;

diff --git a/drivers/power/supply/pmu_battery.c b/drivers/power/supply/pmu_battery.c
index ed83c5e05ca3..054f75d904a8 100644
--- a/drivers/power/supply/pmu_battery.c
+++ b/drivers/power/supply/pmu_battery.c
@@ -160,8 +160,7 @@ static int __init pmu_bat_init(void)

 	for (i = 0; i < pmu_battery_count; i++) {
 		struct power_supply_config psy_cfg = {};
-		struct pmu_battery_dev *pbat = kzalloc(sizeof(*pbat),
-						       GFP_KERNEL);
+		struct pmu_battery_dev *pbat = kzalloc_obj(*pbat, GFP_KERNEL);
 		if (!pbat)
 			break;

diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index 9a28381e2607..91e8b18e09ff 100644
--- a/drivers/power/supply/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
@@ -1426,7 +1426,7 @@ int power_supply_register_extension(struct power_supply *psy, const struct power
 		if (power_supply_has_property(psy, ext->properties[i]))
 			return -EEXIST;

-	reg = kmalloc(sizeof(*reg), GFP_KERNEL);
+	reg = kmalloc_obj(*reg, GFP_KERNEL);
 	if (!reg)
 		return -ENOMEM;

diff --git a/drivers/power/supply/power_supply_leds.c b/drivers/power/supply/power_supply_leds.c
index f4a7e566bea1..af32dc2e0210 100644
--- a/drivers/power/supply/power_supply_leds.c
+++ b/drivers/power/supply/power_supply_leds.c
@@ -48,7 +48,7 @@ static int power_supply_register_led_trigger(struct power_supply *psy,
 	if (err && *err)
 		return *err;

-	psy_trig = kzalloc(sizeof(*psy_trig), GFP_KERNEL);
+	psy_trig = kzalloc_obj(*psy_trig, GFP_KERNEL);
 	if (!psy_trig)
 		goto err_free_trigger;

diff --git a/drivers/powercap/arm_scmi_powercap.c b/drivers/powercap/arm_scmi_powercap.c
index a081f177e702..798c43e482ae 100644
--- a/drivers/powercap/arm_scmi_powercap.c
+++ b/drivers/powercap/arm_scmi_powercap.c
@@ -370,7 +370,7 @@ static int scmi_zones_register(struct device *dev,
 	unsigned int sp = 0, reg_zones = 0;
 	struct scmi_powercap_zone *spz, **zones_stack;

-	zones_stack = kcalloc(pr->num_zones, sizeof(spz), GFP_KERNEL);
+	zones_stack = kzalloc_objs(spz, pr->num_zones, GFP_KERNEL);
 	if (!zones_stack)
 		return -ENOMEM;

diff --git a/drivers/powercap/dtpm.c b/drivers/powercap/dtpm.c
index 129d55bc705c..afdeecef69ef 100644
--- a/drivers/powercap/dtpm.c
+++ b/drivers/powercap/dtpm.c
@@ -418,7 +418,7 @@ static struct dtpm *dtpm_setup_virtual(const struct dtpm_node *hierarchy,
 	struct dtpm *dtpm;
 	int ret;

-	dtpm = kzalloc(sizeof(*dtpm), GFP_KERNEL);
+	dtpm = kzalloc_obj(*dtpm, GFP_KERNEL);
 	if (!dtpm)
 		return ERR_PTR(-ENOMEM);
 	dtpm_init(dtpm, NULL);
diff --git a/drivers/powercap/dtpm_cpu.c b/drivers/powercap/dtpm_cpu.c
index 99390ec1481f..25489b3b03be 100644
--- a/drivers/powercap/dtpm_cpu.c
+++ b/drivers/powercap/dtpm_cpu.c
@@ -212,7 +212,7 @@ static int __dtpm_cpu_setup(int cpu, struct dtpm *parent)
 		goto release_policy;
 	}

-	dtpm_cpu = kzalloc(sizeof(*dtpm_cpu), GFP_KERNEL);
+	dtpm_cpu = kzalloc_obj(*dtpm_cpu, GFP_KERNEL);
 	if (!dtpm_cpu) {
 		ret = -ENOMEM;
 		goto release_policy;
diff --git a/drivers/powercap/dtpm_devfreq.c b/drivers/powercap/dtpm_devfreq.c
index d1dff6ccab12..e941bb241986 100644
--- a/drivers/powercap/dtpm_devfreq.c
+++ b/drivers/powercap/dtpm_devfreq.c
@@ -160,7 +160,7 @@ static int __dtpm_devfreq_setup(struct devfreq *devfreq, struct dtpm *parent)
 		}
 	}

-	dtpm_devfreq = kzalloc(sizeof(*dtpm_devfreq), GFP_KERNEL);
+	dtpm_devfreq = kzalloc_obj(*dtpm_devfreq, GFP_KERNEL);
 	if (!dtpm_devfreq)
 		return -ENOMEM;

diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_rapl_common.c
index 539625531709..e7f538ebab2f 100644
--- a/drivers/powercap/intel_rapl_common.c
+++ b/drivers/powercap/intel_rapl_common.c
@@ -1520,8 +1520,8 @@ static int rapl_detect_domains(struct rapl_package *rp)
 	}
 	pr_debug("found %d domains on %s\n", rp->nr_domains, rp->name);

-	rp->domains = kcalloc(rp->nr_domains, sizeof(struct rapl_domain),
-			      GFP_KERNEL);
+	rp->domains = kzalloc_objs(struct rapl_domain, rp->nr_domains,
+				   GFP_KERNEL);
 	if (!rp->domains)
 		return -ENOMEM;

@@ -2216,7 +2216,7 @@ struct rapl_package *rapl_add_package_cpuslocked(int id, struct rapl_if_priv *pr
 	struct rapl_package *rp;
 	int ret;

-	rp = kzalloc(sizeof(struct rapl_package), GFP_KERNEL);
+	rp = kzalloc_obj(struct rapl_package, GFP_KERNEL);
 	if (!rp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/powercap/intel_rapl_tpmi.c b/drivers/powercap/intel_rapl_tpmi.c
index 0f8abdc592bc..f68784c7e718 100644
--- a/drivers/powercap/intel_rapl_tpmi.c
+++ b/drivers/powercap/intel_rapl_tpmi.c
@@ -102,7 +102,7 @@ static struct tpmi_rapl_package *trp_alloc(int pkg_id)
 		}
 	}

-	trp = kzalloc(sizeof(*trp), GFP_KERNEL);
+	trp = kzalloc_obj(*trp, GFP_KERNEL);
 	if (!trp) {
 		ret = -ENOMEM;
 		goto err_del_powercap;
diff --git a/drivers/powercap/powercap_sys.c b/drivers/powercap/powercap_sys.c
index f3b2ae635305..b32ac11a6c49 100644
--- a/drivers/powercap/powercap_sys.c
+++ b/drivers/powercap/powercap_sys.c
@@ -501,7 +501,7 @@ struct powercap_zone *powercap_register_zone(
 			return ERR_PTR(-EINVAL);
 		memset(power_zone, 0, sizeof(*power_zone));
 	} else {
-		power_zone = kzalloc(sizeof(*power_zone), GFP_KERNEL);
+		power_zone = kzalloc_obj(*power_zone, GFP_KERNEL);
 		if (!power_zone)
 			return ERR_PTR(-ENOMEM);
 		power_zone->allocated = true;
@@ -529,9 +529,8 @@ struct powercap_zone *powercap_register_zone(
 	power_zone->name = kstrdup(name, GFP_KERNEL);
 	if (!power_zone->name)
 		goto err_name_alloc;
-	power_zone->constraints = kcalloc(nr_constraints,
-					  sizeof(*power_zone->constraints),
-					  GFP_KERNEL);
+	power_zone->constraints = kzalloc_objs(*power_zone->constraints,
+					       nr_constraints, GFP_KERNEL);
 	if (!power_zone->constraints)
 		goto err_const_alloc;

@@ -614,7 +613,7 @@ struct powercap_control_type *powercap_register_control_type(
 			return ERR_PTR(-EINVAL);
 		memset(control_type, 0, sizeof(*control_type));
 	} else {
-		control_type = kzalloc(sizeof(*control_type), GFP_KERNEL);
+		control_type = kzalloc_obj(*control_type, GFP_KERNEL);
 		if (!control_type)
 			return ERR_PTR(-ENOMEM);
 		control_type->allocated = true;
diff --git a/drivers/pps/clients/pps_parport.c b/drivers/pps/clients/pps_parport.c
index 24db06750297..975d984b0fd5 100644
--- a/drivers/pps/clients/pps_parport.c
+++ b/drivers/pps/clients/pps_parport.c
@@ -142,7 +142,7 @@ static void parport_attach(struct parport *port)
 		return;
 	}

-	device = kzalloc(sizeof(struct pps_client_pp), GFP_KERNEL);
+	device = kzalloc_obj(struct pps_client_pp, GFP_KERNEL);
 	if (!device) {
 		pr_err("memory allocation failed, not attaching\n");
 		return;
diff --git a/drivers/pps/generators/pps_gen.c b/drivers/pps/generators/pps_gen.c
index 5b8bb454913c..a91f6871f98a 100644
--- a/drivers/pps/generators/pps_gen.c
+++ b/drivers/pps/generators/pps_gen.c
@@ -230,7 +230,7 @@ struct pps_gen_device *pps_gen_register_source(const struct pps_gen_source_info
 	struct pps_gen_device *pps_gen;
 	int err;

-	pps_gen = kzalloc(sizeof(struct pps_gen_device), GFP_KERNEL);
+	pps_gen = kzalloc_obj(struct pps_gen_device, GFP_KERNEL);
 	if (pps_gen == NULL) {
 		err = -ENOMEM;
 		goto pps_gen_register_source_exit;
diff --git a/drivers/pps/kapi.c b/drivers/pps/kapi.c
index 6985c34de2ce..de2ce4faf262 100644
--- a/drivers/pps/kapi.c
+++ b/drivers/pps/kapi.c
@@ -83,7 +83,7 @@ struct pps_device *pps_register_source(struct pps_source_info *info,
 	}

 	/* Allocate memory for the new PPS source struct */
-	pps = kzalloc(sizeof(struct pps_device), GFP_KERNEL);
+	pps = kzalloc_obj(struct pps_device, GFP_KERNEL);
 	if (pps == NULL) {
 		err = -ENOMEM;
 		goto pps_register_source_exit;
diff --git a/drivers/ps3/ps3-lpm.c b/drivers/ps3/ps3-lpm.c
index 188ae2572674..8f1ee4c748bf 100644
--- a/drivers/ps3/ps3-lpm.c
+++ b/drivers/ps3/ps3-lpm.c
@@ -1181,7 +1181,7 @@ static int ps3_lpm_probe(struct ps3_system_bus_device *dev)
 		return -EBUSY;
 	}

-	lpm_priv = kzalloc(sizeof(*lpm_priv), GFP_KERNEL);
+	lpm_priv = kzalloc_obj(*lpm_priv, GFP_KERNEL);

 	if (!lpm_priv)
 		return -ENOMEM;
diff --git a/drivers/ps3/ps3-vuart.c b/drivers/ps3/ps3-vuart.c
index 5cb92535a4a1..3493a9ef05ce 100644
--- a/drivers/ps3/ps3-vuart.c
+++ b/drivers/ps3/ps3-vuart.c
@@ -914,7 +914,7 @@ static int ps3_vuart_bus_interrupt_get(void)

 	BUG_ON(vuart_bus_priv.bmp);

-	vuart_bus_priv.bmp = kzalloc(sizeof(struct ports_bmp), GFP_KERNEL);
+	vuart_bus_priv.bmp = kzalloc_obj(struct ports_bmp, GFP_KERNEL);

 	if (!vuart_bus_priv.bmp) {
 		result = -ENOMEM;
@@ -1015,8 +1015,7 @@ static int ps3_vuart_probe(struct ps3_system_bus_device *dev)

 	/* Setup dev->driver_priv. */

-	dev->driver_priv = kzalloc(sizeof(struct ps3_vuart_port_priv),
-		GFP_KERNEL);
+	dev->driver_priv = kzalloc_obj(struct ps3_vuart_port_priv, GFP_KERNEL);

 	if (!dev->driver_priv) {
 		result = -ENOMEM;
diff --git a/drivers/ps3/ps3av.c b/drivers/ps3/ps3av.c
index f6c9e56bdba7..19f2c5b4f8f3 100644
--- a/drivers/ps3/ps3av.c
+++ b/drivers/ps3/ps3av.c
@@ -934,7 +934,7 @@ static int ps3av_probe(struct ps3_system_bus_device *dev)
 		return -EBUSY;
 	}

-	ps3av = kzalloc(sizeof(*ps3av), GFP_KERNEL);
+	ps3av = kzalloc_obj(*ps3av, GFP_KERNEL);
 	if (!ps3av)
 		return -ENOMEM;

diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
index b0e167c0b3eb..dc6d9afdd5c6 100644
--- a/drivers/ptp/ptp_clock.c
+++ b/drivers/ptp/ptp_clock.c
@@ -328,7 +328,7 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
 		return ERR_PTR(-EINVAL);

 	/* Initialize a clock structure. */
-	ptp = kzalloc(sizeof(struct ptp_clock), GFP_KERNEL);
+	ptp = kzalloc_obj(struct ptp_clock, GFP_KERNEL);
 	if (!ptp) {
 		err = -ENOMEM;
 		goto no_memory;
@@ -344,7 +344,7 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
 	ptp->devid = MKDEV(major, index);
 	ptp->index = index;
 	INIT_LIST_HEAD(&ptp->tsevqs);
-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue) {
 		err = -ENOMEM;
 		goto no_memory_queue;
diff --git a/drivers/ptp/ptp_ines.c b/drivers/ptp/ptp_ines.c
index 790eb42b78db..67eda6fb22d1 100644
--- a/drivers/ptp/ptp_ines.c
+++ b/drivers/ptp/ptp_ines.c
@@ -760,7 +760,7 @@ static int ines_ptp_ctrl_probe(struct platform_device *pld)
 		err = PTR_ERR(addr);
 		goto out;
 	}
-	clock = kzalloc(sizeof(*clock), GFP_KERNEL);
+	clock = kzalloc_obj(*clock, GFP_KERNEL);
 	if (!clock) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/ptp/ptp_mock.c b/drivers/ptp/ptp_mock.c
index bbd14ce24b34..267168e9d0ca 100644
--- a/drivers/ptp/ptp_mock.c
+++ b/drivers/ptp/ptp_mock.c
@@ -120,7 +120,7 @@ struct mock_phc *mock_phc_create(struct device *dev)
 	struct mock_phc *phc;
 	int err;

-	phc = kzalloc(sizeof(*phc), GFP_KERNEL);
+	phc = kzalloc_obj(*phc, GFP_KERNEL);
 	if (!phc) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/ptp/ptp_ocp.c b/drivers/ptp/ptp_ocp.c
index 1b16a9c3d7fd..1ed492c12e1d 100644
--- a/drivers/ptp/ptp_ocp.c
+++ b/drivers/ptp/ptp_ocp.c
@@ -2241,7 +2241,7 @@ ptp_ocp_register_ext(struct ptp_ocp *bp, struct ocp_resource *r)
 	struct ptp_ocp_ext_src *ext;
 	int err;

-	ext = kzalloc(sizeof(*ext), GFP_KERNEL);
+	ext = kzalloc_obj(*ext, GFP_KERNEL);
 	if (!ext)
 		return -ENOMEM;

@@ -2378,8 +2378,7 @@ ptp_ocp_attr_group_add(struct ptp_ocp *bp,
 		if (attr_tbl[i].cap & bp->fw_cap)
 			count++;

-	bp->attr_group = kcalloc(count + 1, sizeof(*bp->attr_group),
-				 GFP_KERNEL);
+	bp->attr_group = kzalloc_objs(*bp->attr_group, count + 1, GFP_KERNEL);
 	if (!bp->attr_group)
 		return -ENOMEM;

@@ -2646,7 +2645,7 @@ ptp_ocp_set_pins(struct ptp_ocp *bp)
 	struct ptp_pin_desc *config;
 	int i;

-	config = kcalloc(4, sizeof(*config), GFP_KERNEL);
+	config = kzalloc_objs(*config, 4, GFP_KERNEL);
 	if (!config)
 		return -ENOMEM;

diff --git a/drivers/ptp/ptp_qoriq.c b/drivers/ptp/ptp_qoriq.c
index 8da995e36aeb..71f4de4e8fc3 100644
--- a/drivers/ptp/ptp_qoriq.c
+++ b/drivers/ptp/ptp_qoriq.c
@@ -613,7 +613,7 @@ static int ptp_qoriq_probe(struct platform_device *dev)
 	int err = -ENOMEM;
 	void __iomem *base;

-	ptp_qoriq = kzalloc(sizeof(*ptp_qoriq), GFP_KERNEL);
+	ptp_qoriq = kzalloc_obj(*ptp_qoriq, GFP_KERNEL);
 	if (!ptp_qoriq)
 		goto no_memory;

diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c
index 200eaf500696..f398eac4a263 100644
--- a/drivers/ptp/ptp_sysfs.c
+++ b/drivers/ptp/ptp_sysfs.c
@@ -443,12 +443,11 @@ int ptp_populate_pin_groups(struct ptp_clock *ptp)
 	if (!n_pins)
 		return 0;

-	ptp->pin_dev_attr = kcalloc(n_pins, sizeof(*ptp->pin_dev_attr),
-				    GFP_KERNEL);
+	ptp->pin_dev_attr = kzalloc_objs(*ptp->pin_dev_attr, n_pins, GFP_KERNEL);
 	if (!ptp->pin_dev_attr)
 		goto no_dev_attr;

-	ptp->pin_attr = kcalloc(1 + n_pins, sizeof(*ptp->pin_attr), GFP_KERNEL);
+	ptp->pin_attr = kzalloc_objs(*ptp->pin_attr, 1 + n_pins, GFP_KERNEL);
 	if (!ptp->pin_attr)
 		goto no_pin_attr;

diff --git a/drivers/ptp/ptp_vclock.c b/drivers/ptp/ptp_vclock.c
index 64c950456517..b27b25715e1e 100644
--- a/drivers/ptp/ptp_vclock.c
+++ b/drivers/ptp/ptp_vclock.c
@@ -191,7 +191,7 @@ struct ptp_vclock *ptp_vclock_register(struct ptp_clock *pclock)
 {
 	struct ptp_vclock *vclock;

-	vclock = kzalloc(sizeof(*vclock), GFP_KERNEL);
+	vclock = kzalloc_obj(*vclock, GFP_KERNEL);
 	if (!vclock)
 		return NULL;

diff --git a/drivers/ptp/ptp_vmclock.c b/drivers/ptp/ptp_vmclock.c
index c7c75e19f4dd..431510435376 100644
--- a/drivers/ptp/ptp_vmclock.c
+++ b/drivers/ptp/ptp_vmclock.c
@@ -460,7 +460,7 @@ static int vmclock_miscdev_open(struct inode *inode, struct file *fp)
 {
 	struct vmclock_state *st = container_of(fp->private_data,
 						struct vmclock_state, miscdev);
-	struct vmclock_file_state *fst = kzalloc(sizeof(*fst), GFP_KERNEL);
+	struct vmclock_file_state *fst = kzalloc_obj(*fst, GFP_KERNEL);

 	if (!fst)
 		return -ENOMEM;
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index 8da78b4b21b9..7f54abd61c02 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -1333,7 +1333,7 @@ static int pwm_export_child(struct device *pwmchip_dev, struct pwm_device *pwm)
 	if (test_and_set_bit(PWMF_EXPORTED, &pwm->flags))
 		return -EBUSY;

-	export = kzalloc(sizeof(*export), GFP_KERNEL);
+	export = kzalloc_obj(*export, GFP_KERNEL);
 	if (!export) {
 		clear_bit(PWMF_EXPORTED, &pwm->flags);
 		return -ENOMEM;
@@ -2138,7 +2138,7 @@ static int pwm_cdev_open(struct inode *inode, struct file *file)
 	if (!chip->operational)
 		return -ENXIO;

-	cdata = kzalloc(struct_size(cdata, pwm, chip->npwm), GFP_KERNEL);
+	cdata = kzalloc_flex(*cdata, pwm, chip->npwm, GFP_KERNEL);
 	if (!cdata)
 		return -ENOMEM;

diff --git a/drivers/rapidio/devices/rio_mport_cdev.c b/drivers/rapidio/devices/rio_mport_cdev.c
index 995cfeca972b..10277dff206e 100644
--- a/drivers/rapidio/devices/rio_mport_cdev.c
+++ b/drivers/rapidio/devices/rio_mport_cdev.c
@@ -348,7 +348,7 @@ rio_mport_create_outbound_mapping(struct mport_dev *md, struct file *filp,

 	rmcd_debug(OBW, "did=%d ra=0x%llx sz=0x%x", rioid, raddr, size);

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (map == NULL)
 		return -ENOMEM;

@@ -800,7 +800,7 @@ rio_dma_transfer(struct file *filp, u32 transfer_mode,

 	if (xfer->length == 0)
 		return -EINVAL;
-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -835,8 +835,7 @@ rio_dma_transfer(struct file *filp, u32 transfer_mode,
 		offset = lower_32_bits(offset_in_page(xfer->loc_addr));
 		nr_pages = PAGE_ALIGN(xfer->length + offset) >> PAGE_SHIFT;

-		page_list = kmalloc_array(nr_pages,
-					  sizeof(*page_list), GFP_KERNEL);
+		page_list = kmalloc_objs(*page_list, nr_pages, GFP_KERNEL);
 		if (page_list == NULL) {
 			ret = -ENOMEM;
 			goto err_req;
@@ -1070,7 +1069,7 @@ static int rio_mport_create_dma_mapping(struct mport_dev *md, struct file *filp,
 {
 	struct rio_mport_mapping *map;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (map == NULL)
 		return -ENOMEM;

@@ -1190,7 +1189,7 @@ rio_mport_create_inbound_mapping(struct mport_dev *md, struct file *filp,
 	if (size > 0xffffffff)
 		return -EINVAL;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (map == NULL)
 		return -ENOMEM;

@@ -1432,7 +1431,7 @@ static int rio_mport_add_db_filter(struct mport_cdev_priv *priv,
 		return ret;
 	}

-	db_filter = kzalloc(sizeof(*db_filter), GFP_KERNEL);
+	db_filter = kzalloc_obj(*db_filter, GFP_KERNEL);
 	if (db_filter == NULL) {
 		rio_release_inb_dbell(md->mport, filter.low, filter.high);
 		return -ENOMEM;
@@ -1540,7 +1539,7 @@ static int rio_mport_add_pw_filter(struct mport_cdev_priv *priv,
 	if (copy_from_user(&filter, arg, sizeof(filter)))
 		return -EFAULT;

-	pw_filter = kzalloc(sizeof(*pw_filter), GFP_KERNEL);
+	pw_filter = kzalloc_obj(*pw_filter, GFP_KERNEL);
 	if (pw_filter == NULL)
 		return -ENOMEM;

@@ -1879,7 +1878,7 @@ static int mport_cdev_open(struct inode *inode, struct file *filp)

 	get_device(&chdev->dev);

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		put_device(&chdev->dev);
 		return -ENOMEM;
@@ -2349,7 +2348,7 @@ static struct mport_dev *mport_cdev_add(struct rio_mport *mport)
 	struct mport_dev *md;
 	struct rio_mport_attr attr;

-	md = kzalloc(sizeof(*md), GFP_KERNEL);
+	md = kzalloc_obj(*md, GFP_KERNEL);
 	if (!md) {
 		rmcd_error("Unable allocate a device object");
 		return NULL;
diff --git a/drivers/rapidio/devices/tsi721.c b/drivers/rapidio/devices/tsi721.c
index 4b84270a8906..9d3f2577bccb 100644
--- a/drivers/rapidio/devices/tsi721.c
+++ b/drivers/rapidio/devices/tsi721.c
@@ -1145,7 +1145,7 @@ static int tsi721_rio_map_inb_mem(struct rio_mport *mport, dma_addr_t lstart,

 		loc_start = ibw_start;

-		map = kzalloc(sizeof(struct tsi721_ib_win_mapping), GFP_ATOMIC);
+		map = kzalloc_obj(struct tsi721_ib_win_mapping, GFP_ATOMIC);
 		if (map == NULL)
 			return -ENOMEM;

@@ -2774,7 +2774,7 @@ static int tsi721_probe(struct pci_dev *pdev,
 	struct tsi721_device *priv;
 	int err;

-	priv = kzalloc(sizeof(struct tsi721_device), GFP_KERNEL);
+	priv = kzalloc_obj(struct tsi721_device, GFP_KERNEL);
 	if (!priv) {
 		err = -ENOMEM;
 		goto err_exit;
diff --git a/drivers/rapidio/devices/tsi721_dma.c b/drivers/rapidio/devices/tsi721_dma.c
index f77f75172bdc..52749f1d2a11 100644
--- a/drivers/rapidio/devices/tsi721_dma.c
+++ b/drivers/rapidio/devices/tsi721_dma.c
@@ -739,8 +739,7 @@ static int tsi721_alloc_chan_resources(struct dma_chan *dchan)
 	}

 	/* Allocate queue of transaction descriptors */
-	desc = kcalloc(dma_txqueue_sz, sizeof(struct tsi721_tx_desc),
-			GFP_ATOMIC);
+	desc = kzalloc_objs(struct tsi721_tx_desc, dma_txqueue_sz, GFP_ATOMIC);
 	if (!desc) {
 		tsi721_bdma_ch_free(bdma_chan);
 		return -ENOMEM;
diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c
index 46daf32ea13b..c811cc3ebc5d 100644
--- a/drivers/rapidio/rio.c
+++ b/drivers/rapidio/rio.c
@@ -107,7 +107,7 @@ EXPORT_SYMBOL(rio_query_mport);
  */
 struct rio_net *rio_alloc_net(struct rio_mport *mport)
 {
-	struct rio_net *net = kzalloc(sizeof(*net), GFP_KERNEL);
+	struct rio_net *net = kzalloc_obj(*net, GFP_KERNEL);

 	if (net) {
 		INIT_LIST_HEAD(&net->node);
@@ -242,7 +242,7 @@ int rio_request_inb_mbox(struct rio_mport *mport,
 	if (!mport->ops->open_inb_mbox)
 		goto out;

-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (res) {
 		rio_init_mbox_res(res, mbox, mbox);

@@ -326,7 +326,7 @@ int rio_request_outb_mbox(struct rio_mport *mport,
 	if (!mport->ops->open_outb_mbox)
 		goto out;

-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (res) {
 		rio_init_mbox_res(res, mbox, mbox);

@@ -403,7 +403,7 @@ rio_setup_inb_dbell(struct rio_mport *mport, void *dev_id, struct resource *res,
 		    void (*dinb) (struct rio_mport * mport, void *dev_id, u16 src, u16 dst,
 				  u16 info))
 {
-	struct rio_dbell *dbell = kmalloc(sizeof(*dbell), GFP_KERNEL);
+	struct rio_dbell *dbell = kmalloc_obj(*dbell, GFP_KERNEL);

 	if (!dbell)
 		return -ENOMEM;
@@ -438,7 +438,7 @@ int rio_request_inb_dbell(struct rio_mport *mport,
 					u16 dst, u16 info))
 {
 	int rc;
-	struct resource *res = kzalloc(sizeof(*res), GFP_KERNEL);
+	struct resource *res = kzalloc_obj(*res, GFP_KERNEL);

 	if (res) {
 		rio_init_dbell_res(res, start, end);
@@ -515,7 +515,7 @@ EXPORT_SYMBOL_GPL(rio_release_inb_dbell);
 struct resource *rio_request_outb_dbell(struct rio_dev *rdev, u16 start,
 					u16 end)
 {
-	struct resource *res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+	struct resource *res = kzalloc_obj(struct resource, GFP_KERNEL);

 	if (res) {
 		rio_init_dbell_res(res, start, end);
@@ -563,7 +563,7 @@ int rio_add_mport_pw_handler(struct rio_mport *mport, void *context,
 			     int (*pwcback)(struct rio_mport *mport,
 			     void *context, union rio_pw_msg *msg, int step))
 {
-	struct rio_pwrite *pwrite = kzalloc(sizeof(*pwrite), GFP_KERNEL);
+	struct rio_pwrite *pwrite = kzalloc_obj(*pwrite, GFP_KERNEL);

 	if (!pwrite)
 		return -ENOMEM;
@@ -1865,7 +1865,7 @@ int rio_register_scan(int mport_id, struct rio_scan *scan_ops)
 	/*
 	 * Allocate and initialize new scan registration node.
 	 */
-	scan = kzalloc(sizeof(*scan), GFP_KERNEL);
+	scan = kzalloc_obj(*scan, GFP_KERNEL);
 	if (!scan) {
 		rc = -ENOMEM;
 		goto err_out;
@@ -2000,7 +2000,7 @@ int rio_init_mports(void)
 		goto no_disc;
 	}

-	work = kcalloc(n, sizeof *work, GFP_KERNEL);
+	work = kzalloc_objs(*work, n, GFP_KERNEL);
 	if (!work) {
 		destroy_workqueue(rio_wq);
 		goto no_disc;
diff --git a/drivers/rapidio/rio_cm.c b/drivers/rapidio/rio_cm.c
index 66464674223f..d01c749de5fd 100644
--- a/drivers/rapidio/rio_cm.c
+++ b/drivers/rapidio/rio_cm.c
@@ -389,7 +389,7 @@ static int riocm_req_handler(struct cm_dev *cm, void *req_data)
 		return -EINVAL;
 	}

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req) {
 		riocm_put_channel(ch);
 		return -ENOMEM;
@@ -702,7 +702,7 @@ static int riocm_queue_req(struct cm_dev *cm, struct rio_dev *rdev,
 	unsigned long flags;
 	struct tx_req *treq;

-	treq = kzalloc(sizeof(*treq), GFP_KERNEL);
+	treq = kzalloc_obj(*treq, GFP_KERNEL);
 	if (treq == NULL)
 		return -ENOMEM;

@@ -965,7 +965,7 @@ static int riocm_ch_connect(u16 loc_ch, struct cm_dev *cm,
 	 * Send connect request to the remote RapidIO device
 	 */

-	hdr = kzalloc(sizeof(*hdr), GFP_KERNEL);
+	hdr = kzalloc_obj(*hdr, GFP_KERNEL);
 	if (hdr == NULL) {
 		ret = -ENOMEM;
 		goto conn_done;
@@ -1022,7 +1022,7 @@ static int riocm_send_ack(struct rio_channel *ch)
 	struct rio_ch_chan_hdr *hdr;
 	int ret;

-	hdr = kzalloc(sizeof(*hdr), GFP_KERNEL);
+	hdr = kzalloc_obj(*hdr, GFP_KERNEL);
 	if (hdr == NULL)
 		return -ENOMEM;

@@ -1283,7 +1283,7 @@ static struct rio_channel *riocm_ch_alloc(u16 ch_num)
 	int start, end;
 	struct rio_channel *ch;

-	ch = kzalloc(sizeof(*ch), GFP_KERNEL);
+	ch = kzalloc_obj(*ch, GFP_KERNEL);
 	if (!ch)
 		return ERR_PTR(-ENOMEM);

@@ -1396,7 +1396,7 @@ static int riocm_send_close(struct rio_channel *ch)
 	 * Send CH_CLOSE notification to the remote RapidIO device
 	 */

-	hdr = kzalloc(sizeof(*hdr), GFP_KERNEL);
+	hdr = kzalloc_obj(*hdr, GFP_KERNEL);
 	if (hdr == NULL)
 		return -ENOMEM;

@@ -1952,7 +1952,7 @@ static int riocm_add_dev(struct device *dev, struct subsys_interface *sif)

 	riocm_debug(RDEV, "(%s)", rio_name(rdev));

-	peer = kmalloc(sizeof(*peer), GFP_KERNEL);
+	peer = kmalloc_obj(*peer, GFP_KERNEL);
 	if (!peer)
 		return -ENOMEM;

@@ -2099,7 +2099,7 @@ static int riocm_add_mport(struct device *dev)

 	riocm_debug(MPORT, "add mport %s", mport->name);

-	cm = kzalloc(sizeof(*cm), GFP_KERNEL);
+	cm = kzalloc_obj(*cm, GFP_KERNEL);
 	if (!cm)
 		return -ENOMEM;

diff --git a/drivers/ras/amd/fmpm.c b/drivers/ras/amd/fmpm.c
index 8877c6ff64c4..c84e26cca724 100644
--- a/drivers/ras/amd/fmpm.c
+++ b/drivers/ras/amd/fmpm.c
@@ -819,7 +819,7 @@ static int allocate_records(void)
 {
 	int i, ret = 0;

-	fru_records = kcalloc(max_nr_fru, sizeof(struct fru_rec *), GFP_KERNEL);
+	fru_records = kzalloc_objs(struct fru_rec *, max_nr_fru, GFP_KERNEL);
 	if (!fru_records) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 80bb95750a20..386304bc200c 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1740,7 +1740,7 @@ static int regulator_event_forward_notifier(struct notifier_block *nb,
 		return NOTIFY_DONE;
 	}

-	rew = kmalloc(sizeof(*rew), GFP_ATOMIC);
+	rew = kmalloc_obj(*rew, GFP_ATOMIC);
 	if (!rew)
 		return NOTIFY_DONE;

@@ -1855,7 +1855,7 @@ static int set_consumer_device_supply(struct regulator_dev *rdev,
 	else
 		has_dev = 0;

-	new_node = kzalloc(sizeof(struct regulator_map), GFP_KERNEL);
+	new_node = kzalloc_obj(struct regulator_map, GFP_KERNEL);
 	if (new_node == NULL)
 		return -ENOMEM;

@@ -2021,7 +2021,7 @@ static struct regulator *create_regulator(struct regulator_dev *rdev,
 			return NULL;
 	}

-	regulator = kzalloc(sizeof(*regulator), GFP_KERNEL);
+	regulator = kzalloc_obj(*regulator, GFP_KERNEL);
 	if (regulator == NULL) {
 		kfree_const(supply_name);
 		return NULL;
@@ -2701,7 +2701,7 @@ int regulator_register_supply_alias(struct device *dev, const char *id,
 	struct regulator_supply_alias *map;
 	struct regulator_supply_alias *new_map;

-	new_map = kzalloc(sizeof(struct regulator_supply_alias), GFP_KERNEL);
+	new_map = kzalloc_obj(struct regulator_supply_alias, GFP_KERNEL);
 	if (!new_map)
 		return -ENOMEM;

@@ -2825,7 +2825,7 @@ static int regulator_ena_gpio_request(struct regulator_dev *rdev,
 	struct gpio_desc *gpiod;

 	gpiod = config->ena_gpiod;
-	new_pin = kzalloc(sizeof(*new_pin), GFP_KERNEL);
+	new_pin = kzalloc_obj(*new_pin, GFP_KERNEL);

 	mutex_lock(&regulator_list_mutex);

@@ -5913,7 +5913,7 @@ static int regulator_init_coupling(struct regulator_dev *rdev)
 	else
 		n_phandles = of_get_n_coupled(rdev);

-	coupled = kcalloc(n_phandles + 1, sizeof(*coupled), GFP_KERNEL);
+	coupled = kzalloc_objs(*coupled, n_phandles + 1, GFP_KERNEL);
 	if (!coupled)
 		return -ENOMEM;

@@ -6034,7 +6034,7 @@ regulator_register(struct device *dev,
 		goto rinse;
 	}

-	rdev = kzalloc(sizeof(struct regulator_dev), GFP_KERNEL);
+	rdev = kzalloc_obj(struct regulator_dev, GFP_KERNEL);
 	if (rdev == NULL) {
 		ret = -ENOMEM;
 		goto rinse;
@@ -6117,8 +6117,7 @@ regulator_register(struct device *dev,
 					    sizeof(*rdev->constraints),
 					    GFP_KERNEL);
 	else
-		rdev->constraints = kzalloc(sizeof(*rdev->constraints),
-					    GFP_KERNEL);
+		rdev->constraints = kzalloc_obj(*rdev->constraints, GFP_KERNEL);
 	if (!rdev->constraints) {
 		ret = -ENOMEM;
 		goto wash;
diff --git a/drivers/regulator/fixed-helper.c b/drivers/regulator/fixed-helper.c
index b6cb0aaac3b1..186a05b00733 100644
--- a/drivers/regulator/fixed-helper.c
+++ b/drivers/regulator/fixed-helper.c
@@ -34,7 +34,7 @@ struct platform_device *regulator_register_always_on(int id, const char *name,
 {
 	struct fixed_regulator_data *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;

diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c
index 33463926a2a6..93fab4fb2adf 100644
--- a/drivers/regulator/of_regulator.c
+++ b/drivers/regulator/of_regulator.c
@@ -973,9 +973,8 @@ int of_regulator_bulk_get_all(struct device *dev, struct device_node *np,
 	}
 	if (num_consumers == 0)
 		return 0;
-	_consumers = kmalloc_array(num_consumers,
-				   sizeof(struct regulator_bulk_data),
-				   GFP_KERNEL);
+	_consumers = kmalloc_objs(struct regulator_bulk_data, num_consumers,
+				  GFP_KERNEL);
 	if (!_consumers)
 		return -ENOMEM;
 	goto restart;
diff --git a/drivers/remoteproc/qcom_common.c b/drivers/remoteproc/qcom_common.c
index 8c8688f99f0a..bb6038bf8bd4 100644
--- a/drivers/remoteproc/qcom_common.c
+++ b/drivers/remoteproc/qcom_common.c
@@ -370,7 +370,7 @@ static struct qcom_ssr_subsystem *qcom_ssr_get_subsys(const char *name)
 		if (!strcmp(info->name, name))
 			goto out;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		info = ERR_PTR(-ENOMEM);
 		goto out;
@@ -534,7 +534,7 @@ static int pdm_notify_prepare(struct rproc_subdev *subdev)
 	struct auxiliary_device *adev;
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return -ENOMEM;

diff --git a/drivers/remoteproc/qcom_sysmon.c b/drivers/remoteproc/qcom_sysmon.c
index 660ac6fc4082..bbbe732fe767 100644
--- a/drivers/remoteproc/qcom_sysmon.c
+++ b/drivers/remoteproc/qcom_sysmon.c
@@ -628,7 +628,7 @@ struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc,
 	struct qcom_sysmon *sysmon;
 	int ret;

-	sysmon = kzalloc(sizeof(*sysmon), GFP_KERNEL);
+	sysmon = kzalloc_obj(*sysmon, GFP_KERNEL);
 	if (!sysmon)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/remoteproc/qcom_wcnss_iris.c b/drivers/remoteproc/qcom_wcnss_iris.c
index 2b52b403eb3f..78cb8150f64b 100644
--- a/drivers/remoteproc/qcom_wcnss_iris.c
+++ b/drivers/remoteproc/qcom_wcnss_iris.c
@@ -125,7 +125,7 @@ struct qcom_iris *qcom_iris_probe(struct device *parent, bool *use_48mhz_xo)
 		return ERR_PTR(-EINVAL);
 	}

-	iris = kzalloc(sizeof(*iris), GFP_KERNEL);
+	iris = kzalloc_obj(*iris, GFP_KERNEL);
 	if (!iris) {
 		of_node_put(of_node);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index aada2780b343..bb5887a9d2ac 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -557,7 +557,7 @@ static int rproc_handle_trace(struct rproc *rproc, void *ptr,
 		return -EINVAL;
 	}

-	trace = kzalloc(sizeof(*trace), GFP_KERNEL);
+	trace = kzalloc_obj(*trace, GFP_KERNEL);
 	if (!trace)
 		return -ENOMEM;

@@ -635,7 +635,7 @@ static int rproc_handle_devmem(struct rproc *rproc, void *ptr,
 		return -EINVAL;
 	}

-	mapping = kzalloc(sizeof(*mapping), GFP_KERNEL);
+	mapping = kzalloc_obj(*mapping, GFP_KERNEL);
 	if (!mapping)
 		return -ENOMEM;

@@ -727,7 +727,7 @@ static int rproc_alloc_carveout(struct rproc *rproc,
 	 * physical address in this case.
 	 */
 	if (mem->da != FW_RSC_ADDR_ANY && rproc->domain) {
-		mapping = kzalloc(sizeof(*mapping), GFP_KERNEL);
+		mapping = kzalloc_obj(*mapping, GFP_KERNEL);
 		if (!mapping) {
 			ret = -ENOMEM;
 			goto dma_free;
@@ -917,7 +917,7 @@ rproc_mem_entry_init(struct device *dev,
 	struct rproc_mem_entry *mem;
 	va_list args;

-	mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+	mem = kzalloc_obj(*mem, GFP_KERNEL);
 	if (!mem)
 		return mem;

@@ -960,7 +960,7 @@ rproc_of_resm_mem_entry_init(struct device *dev, u32 of_resm_idx, size_t len,
 	struct rproc_mem_entry *mem;
 	va_list args;

-	mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+	mem = kzalloc_obj(*mem, GFP_KERNEL);
 	if (!mem)
 		return mem;

diff --git a/drivers/remoteproc/remoteproc_coredump.c b/drivers/remoteproc/remoteproc_coredump.c
index 6ede8c0c93ad..f925c8e775a5 100644
--- a/drivers/remoteproc/remoteproc_coredump.c
+++ b/drivers/remoteproc/remoteproc_coredump.c
@@ -49,7 +49,7 @@ int rproc_coredump_add_segment(struct rproc *rproc, dma_addr_t da, size_t size)
 {
 	struct rproc_dump_segment *segment;

-	segment = kzalloc(sizeof(*segment), GFP_KERNEL);
+	segment = kzalloc_obj(*segment, GFP_KERNEL);
 	if (!segment)
 		return -ENOMEM;

@@ -86,7 +86,7 @@ int rproc_coredump_add_custom_segment(struct rproc *rproc,
 {
 	struct rproc_dump_segment *segment;

-	segment = kzalloc(sizeof(*segment), GFP_KERNEL);
+	segment = kzalloc_obj(*segment, GFP_KERNEL);
 	if (!segment)
 		return -ENOMEM;

diff --git a/drivers/remoteproc/remoteproc_virtio.c b/drivers/remoteproc/remoteproc_virtio.c
index c5d46a878149..92c7c0b0ad65 100644
--- a/drivers/remoteproc/remoteproc_virtio.c
+++ b/drivers/remoteproc/remoteproc_virtio.c
@@ -430,7 +430,7 @@ static int rproc_add_virtio_dev(struct rproc_vdev *rvdev, int id)
 	}

 	/* Allocate virtio device */
-	vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
+	vdev = kzalloc_obj(*vdev, GFP_KERNEL);
 	if (!vdev) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/remoteproc/stm32_rproc.c b/drivers/remoteproc/stm32_rproc.c
index c28679d3b43c..6185343a6d3f 100644
--- a/drivers/remoteproc/stm32_rproc.c
+++ b/drivers/remoteproc/stm32_rproc.c
@@ -164,7 +164,7 @@ static int stm32_rproc_of_memory_translations(struct platform_device *pdev,
 	p_mems = devm_kcalloc(dev, cnt, sizeof(*p_mems), GFP_KERNEL);
 	if (!p_mems)
 		return -ENOMEM;
-	mem_range = kcalloc(cnt, sizeof(*mem_range), GFP_KERNEL);
+	mem_range = kzalloc_objs(*mem_range, cnt, GFP_KERNEL);
 	if (!mem_range)
 		return -ENOMEM;

diff --git a/drivers/remoteproc/xlnx_r5_remoteproc.c b/drivers/remoteproc/xlnx_r5_remoteproc.c
index bd619a6c42aa..a8b13fb50992 100644
--- a/drivers/remoteproc/xlnx_r5_remoteproc.c
+++ b/drivers/remoteproc/xlnx_r5_remoteproc.c
@@ -265,7 +265,7 @@ static struct mbox_info *zynqmp_r5_setup_mbox(struct device *cdev)
 	struct mbox_client *mbox_cl;
 	struct mbox_info *ipi;

-	ipi = kzalloc(sizeof(*ipi), GFP_KERNEL);
+	ipi = kzalloc_obj(*ipi, GFP_KERNEL);
 	if (!ipi)
 		return NULL;

@@ -1337,12 +1337,11 @@ static int zynqmp_r5_cluster_init(struct zynqmp_r5_cluster *cluster)
 		core_count = 1;
 	}

-	child_devs = kcalloc(core_count, sizeof(struct device *), GFP_KERNEL);
+	child_devs = kzalloc_objs(struct device *, core_count, GFP_KERNEL);
 	if (!child_devs)
 		return -ENOMEM;

-	r5_cores = kcalloc(core_count,
-			   sizeof(struct zynqmp_r5_core *), GFP_KERNEL);
+	r5_cores = kzalloc_objs(struct zynqmp_r5_core *, core_count, GFP_KERNEL);
 	if (!r5_cores) {
 		kfree(child_devs);
 		return -ENOMEM;
@@ -1503,7 +1502,7 @@ static int zynqmp_r5_remoteproc_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	int ret;

-	cluster = kzalloc(sizeof(*cluster), GFP_KERNEL);
+	cluster = kzalloc_obj(*cluster, GFP_KERNEL);
 	if (!cluster)
 		return -ENOMEM;

diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
index b495d5291868..323dba59fce8 100644
--- a/drivers/resctrl/mpam_devices.c
+++ b/drivers/resctrl/mpam_devices.c
@@ -295,7 +295,7 @@ mpam_class_alloc(u8 level_idx, enum mpam_class_types type)

 	lockdep_assert_held(&mpam_list_lock);

-	class = kzalloc(sizeof(*class), GFP_KERNEL);
+	class = kzalloc_obj(*class, GFP_KERNEL);
 	if (!class)
 		return ERR_PTR(-ENOMEM);
 	init_garbage(&class->garbage);
@@ -343,7 +343,7 @@ mpam_component_alloc(struct mpam_class *class, int id)

 	lockdep_assert_held(&mpam_list_lock);

-	comp = kzalloc(sizeof(*comp), GFP_KERNEL);
+	comp = kzalloc_obj(*comp, GFP_KERNEL);
 	if (!comp)
 		return ERR_PTR(-ENOMEM);
 	init_garbage(&comp->garbage);
@@ -398,7 +398,7 @@ mpam_vmsc_alloc(struct mpam_component *comp, struct mpam_msc *msc)

 	lockdep_assert_held(&mpam_list_lock);

-	vmsc = kzalloc(sizeof(*vmsc), GFP_KERNEL);
+	vmsc = kzalloc_obj(*vmsc, GFP_KERNEL);
 	if (!vmsc)
 		return ERR_PTR(-ENOMEM);
 	init_garbage(&vmsc->garbage);
@@ -2419,7 +2419,7 @@ static int __allocate_component_cfg(struct mpam_component *comp)
 	if (comp->cfg)
 		return 0;

-	comp->cfg = kcalloc(mpam_partid_max + 1, sizeof(*comp->cfg), GFP_KERNEL);
+	comp->cfg = kzalloc_objs(*comp->cfg, mpam_partid_max + 1, GFP_KERNEL);
 	if (!comp->cfg)
 		return -ENOMEM;

@@ -2444,9 +2444,9 @@ static int __allocate_component_cfg(struct mpam_component *comp)
 			if (!ris->props.num_mbwu_mon)
 				continue;

-			mbwu_state = kcalloc(ris->props.num_mbwu_mon,
-					     sizeof(*ris->mbwu_state),
-					     GFP_KERNEL);
+			mbwu_state = kzalloc_objs(*ris->mbwu_state,
+						  ris->props.num_mbwu_mon,
+						  GFP_KERNEL);
 			if (!mbwu_state) {
 				__destroy_component_cfg(comp);
 				return -ENOMEM;
diff --git a/drivers/reset/core.c b/drivers/reset/core.c
index 0666dfc41ca9..c224e42e0f6c 100644
--- a/drivers/reset/core.c
+++ b/drivers/reset/core.c
@@ -778,7 +778,7 @@ __reset_control_get_internal(struct reset_controller_dev *rcdev,
 		}
 	}

-	rstc = kzalloc(sizeof(*rstc), GFP_KERNEL);
+	rstc = kzalloc_obj(*rstc, GFP_KERNEL);
 	if (!rstc)
 		return ERR_PTR(-ENOMEM);

@@ -836,7 +836,7 @@ static int reset_add_gpio_aux_device(struct device *parent,
 	struct auxiliary_device *adev;
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return -ENOMEM;

@@ -931,7 +931,7 @@ static int __reset_add_reset_gpio_device(const struct of_phandle_args *args)
 		return id;

 	/* Not freed on success, because it is persisent subsystem data. */
-	rgpio_dev = kzalloc(sizeof(*rgpio_dev), GFP_KERNEL);
+	rgpio_dev = kzalloc_obj(*rgpio_dev, GFP_KERNEL);
 	if (!rgpio_dev) {
 		ret = -ENOMEM;
 		goto err_ida_free;
@@ -1360,7 +1360,7 @@ of_reset_control_array_get(struct device_node *np, enum reset_control_flags flag
 	if (num < 0)
 		return optional ? NULL : ERR_PTR(num);

-	resets = kzalloc(struct_size(resets, rstc, num), GFP_KERNEL);
+	resets = kzalloc_flex(*resets, rstc, num, GFP_KERNEL);
 	if (!resets)
 		return ERR_PTR(-ENOMEM);
 	resets->num_rstcs = num;
diff --git a/drivers/reset/reset-npcm.c b/drivers/reset/reset-npcm.c
index e5b6127783a7..c28cb4632883 100644
--- a/drivers/reset/reset-npcm.c
+++ b/drivers/reset/reset-npcm.c
@@ -399,7 +399,7 @@ static struct auxiliary_device *npcm_clock_adev_alloc(struct npcm_rc_data *rst_d
 	struct auxiliary_device *adev;
 	int ret;

-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (!rdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/reset/reset-socfpga.c b/drivers/reset/reset-socfpga.c
index 8c6492e5693c..a18cc81e0efa 100644
--- a/drivers/reset/reset-socfpga.c
+++ b/drivers/reset/reset-socfpga.c
@@ -27,7 +27,7 @@ static int a10_reset_init(struct device_node *np)
 	int ret;
 	u32 reg_offset = 0x10;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/reset/reset-sunxi.c b/drivers/reset/reset-sunxi.c
index e752594b6971..b88d1d001ec3 100644
--- a/drivers/reset/reset-sunxi.c
+++ b/drivers/reset/reset-sunxi.c
@@ -27,7 +27,7 @@ static int sunxi_reset_init(struct device_node *np)
 	resource_size_t size;
 	int ret;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/rpmsg/mtk_rpmsg.c b/drivers/rpmsg/mtk_rpmsg.c
index d1213c33da20..bbeac30cbc8e 100644
--- a/drivers/rpmsg/mtk_rpmsg.c
+++ b/drivers/rpmsg/mtk_rpmsg.c
@@ -91,7 +91,7 @@ __mtk_create_ept(struct mtk_rpmsg_rproc_subdev *mtk_subdev,
 	struct platform_device *pdev = mtk_subdev->pdev;
 	int ret;

-	mept = kzalloc(sizeof(*mept), GFP_KERNEL);
+	mept = kzalloc_obj(*mept, GFP_KERNEL);
 	if (!mept)
 		return NULL;
 	mept->mtk_subdev = mtk_subdev;
@@ -201,7 +201,7 @@ static int mtk_rpmsg_register_device(struct mtk_rpmsg_rproc_subdev *mtk_subdev,
 	struct mtk_rpmsg_device *mdev;
 	struct platform_device *pdev = mtk_subdev->pdev;

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return -ENOMEM;

@@ -252,7 +252,7 @@ static int mtk_rpmsg_create_device(struct mtk_rpmsg_rproc_subdev *mtk_subdev,
 {
 	struct mtk_rpmsg_channel_info *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -380,7 +380,7 @@ mtk_rpmsg_create_rproc_subdev(struct platform_device *pdev,
 {
 	struct mtk_rpmsg_rproc_subdev *mtk_subdev;

-	mtk_subdev = kzalloc(sizeof(*mtk_subdev), GFP_KERNEL);
+	mtk_subdev = kzalloc_obj(*mtk_subdev, GFP_KERNEL);
 	if (!mtk_subdev)
 		return NULL;

diff --git a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/qcom_glink_native.c
index 5ea096acc858..dd775f955bfe 100644
--- a/drivers/rpmsg/qcom_glink_native.c
+++ b/drivers/rpmsg/qcom_glink_native.c
@@ -227,7 +227,7 @@ static struct glink_channel *qcom_glink_alloc_channel(struct qcom_glink *glink,
 {
 	struct glink_channel *channel;

-	channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kzalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return ERR_PTR(-ENOMEM);

@@ -754,7 +754,7 @@ qcom_glink_alloc_intent(struct qcom_glink *glink,
 	int ret;
 	unsigned long flags;

-	intent = kzalloc(sizeof(*intent), GFP_KERNEL);
+	intent = kzalloc_obj(*intent, GFP_KERNEL);
 	if (!intent)
 		return NULL;

@@ -875,7 +875,7 @@ static int qcom_glink_rx_defer(struct qcom_glink *glink, size_t extra)
 		return -ENXIO;
 	}

-	dcmd = kzalloc(struct_size(dcmd, data, extra), GFP_ATOMIC);
+	dcmd = kzalloc_flex(*dcmd, data, extra, GFP_ATOMIC);
 	if (!dcmd)
 		return -ENOMEM;

@@ -945,7 +945,7 @@ static int qcom_glink_rx_data(struct qcom_glink *glink, size_t avail)
 	if (glink->intentless) {
 		/* Might have an ongoing, fragmented, message to append */
 		if (!channel->buf) {
-			intent = kzalloc(sizeof(*intent), GFP_ATOMIC);
+			intent = kzalloc_obj(*intent, GFP_ATOMIC);
 			if (!intent)
 				return -ENOMEM;

@@ -1070,7 +1070,7 @@ static void qcom_glink_handle_intent(struct qcom_glink *glink,
 				       count > 0 ? msg->intents[0].iid : 0);

 	for (i = 0; i < count; ++i) {
-		intent = kzalloc(sizeof(*intent), GFP_ATOMIC);
+		intent = kzalloc_obj(*intent, GFP_ATOMIC);
 		if (!intent)
 			break;

@@ -1669,7 +1669,7 @@ static int qcom_glink_rx_open(struct qcom_glink *glink, unsigned int rcid,
 	complete_all(&channel->open_req);

 	if (create_device) {
-		rpdev = kzalloc(sizeof(*rpdev), GFP_KERNEL);
+		rpdev = kzalloc_obj(*rpdev, GFP_KERNEL);
 		if (!rpdev) {
 			ret = -ENOMEM;
 			goto rcid_remove;
@@ -1868,7 +1868,7 @@ static int qcom_glink_create_chrdev(struct qcom_glink *glink)
 	struct rpmsg_device *rpdev;
 	struct glink_channel *channel;

-	rpdev = kzalloc(sizeof(*rpdev), GFP_KERNEL);
+	rpdev = kzalloc_obj(*rpdev, GFP_KERNEL);
 	if (!rpdev)
 		return -ENOMEM;

diff --git a/drivers/rpmsg/qcom_glink_smem.c b/drivers/rpmsg/qcom_glink_smem.c
index 7a982c60a8dd..26727cbb7ce4 100644
--- a/drivers/rpmsg/qcom_glink_smem.c
+++ b/drivers/rpmsg/qcom_glink_smem.c
@@ -230,7 +230,7 @@ struct qcom_glink_smem *qcom_glink_smem_register(struct device *parent,
 	size_t size;
 	int ret;

-	smem = kzalloc(sizeof(*smem), GFP_KERNEL);
+	smem = kzalloc_obj(*smem, GFP_KERNEL);
 	if (!smem)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c
index 42594f5ee438..7faed3530888 100644
--- a/drivers/rpmsg/qcom_smd.c
+++ b/drivers/rpmsg/qcom_smd.c
@@ -922,7 +922,7 @@ static struct rpmsg_endpoint *qcom_smd_create_ept(struct rpmsg_device *rpdev,
 		return NULL;
 	}

-	qsept = kzalloc(sizeof(*qsept), GFP_KERNEL);
+	qsept = kzalloc_obj(*qsept, GFP_KERNEL);
 	if (!qsept)
 		return NULL;

@@ -1077,7 +1077,7 @@ static int qcom_smd_create_device(struct qcom_smd_channel *channel)

 	dev_dbg(&edge->dev, "registering '%s'\n", channel->name);

-	qsdev = kzalloc(sizeof(*qsdev), GFP_KERNEL);
+	qsdev = kzalloc_obj(*qsdev, GFP_KERNEL);
 	if (!qsdev)
 		return -ENOMEM;

@@ -1104,7 +1104,7 @@ static int qcom_smd_create_chrdev(struct qcom_smd_edge *edge)
 {
 	struct qcom_smd_device *qsdev;

-	qsdev = kzalloc(sizeof(*qsdev), GFP_KERNEL);
+	qsdev = kzalloc_obj(*qsdev, GFP_KERNEL);
 	if (!qsdev)
 		return -ENOMEM;

@@ -1132,7 +1132,7 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed
 	void *info;
 	int ret;

-	channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+	channel = kzalloc_obj(*channel, GFP_KERNEL);
 	if (!channel)
 		return ERR_PTR(-ENOMEM);

@@ -1484,7 +1484,7 @@ struct qcom_smd_edge *qcom_smd_register_edge(struct device *parent,
 	if (!qcom_smem_is_available())
 		return ERR_PTR(-EPROBE_DEFER);

-	edge = kzalloc(sizeof(*edge), GFP_KERNEL);
+	edge = kzalloc_obj(*edge, GFP_KERNEL);
 	if (!edge)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c
index 96fcdd2d7093..a368698113eb 100644
--- a/drivers/rpmsg/rpmsg_char.c
+++ b/drivers/rpmsg/rpmsg_char.c
@@ -410,7 +410,7 @@ static struct rpmsg_eptdev *rpmsg_chrdev_eptdev_alloc(struct rpmsg_device *rpdev
 	struct rpmsg_eptdev *eptdev;
 	struct device *dev;

-	eptdev = kzalloc(sizeof(*eptdev), GFP_KERNEL);
+	eptdev = kzalloc_obj(*eptdev, GFP_KERNEL);
 	if (!eptdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/rpmsg/rpmsg_ctrl.c b/drivers/rpmsg/rpmsg_ctrl.c
index 28f57945ccd9..95f8be640dfc 100644
--- a/drivers/rpmsg/rpmsg_ctrl.c
+++ b/drivers/rpmsg/rpmsg_ctrl.c
@@ -141,7 +141,7 @@ static int rpmsg_ctrldev_probe(struct rpmsg_device *rpdev)
 	struct device *dev;
 	int ret;

-	ctrldev = kzalloc(sizeof(*ctrldev), GFP_KERNEL);
+	ctrldev = kzalloc_obj(*ctrldev, GFP_KERNEL);
 	if (!ctrldev)
 		return -ENOMEM;

diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c
index 79d983055b4d..20ba05917841 100644
--- a/drivers/rpmsg/virtio_rpmsg_bus.c
+++ b/drivers/rpmsg/virtio_rpmsg_bus.c
@@ -210,7 +210,7 @@ static struct rpmsg_endpoint *__rpmsg_create_ept(struct virtproc_info *vrp,
 	struct rpmsg_endpoint *ept;
 	struct device *dev = rpdev ? &rpdev->dev : &vrp->vdev->dev;

-	ept = kzalloc(sizeof(*ept), GFP_KERNEL);
+	ept = kzalloc_obj(*ept, GFP_KERNEL);
 	if (!ept)
 		return NULL;

@@ -400,7 +400,7 @@ static struct rpmsg_device *__rpmsg_create_channel(struct virtproc_info *vrp,
 		return NULL;
 	}

-	vch = kzalloc(sizeof(*vch), GFP_KERNEL);
+	vch = kzalloc_obj(*vch, GFP_KERNEL);
 	if (!vch)
 		return NULL;

@@ -779,7 +779,7 @@ static struct rpmsg_device *rpmsg_virtio_add_ctrl_dev(struct virtio_device *vdev
 	struct rpmsg_device *rpdev_ctrl;
 	int err = 0;

-	vch = kzalloc(sizeof(*vch), GFP_KERNEL);
+	vch = kzalloc_obj(*vch, GFP_KERNEL);
 	if (!vch)
 		return ERR_PTR(-ENOMEM);

@@ -825,7 +825,7 @@ static int rpmsg_probe(struct virtio_device *vdev)
 	size_t total_buf_space;
 	bool notify;

-	vrp = kzalloc(sizeof(*vrp), GFP_KERNEL);
+	vrp = kzalloc_obj(*vrp, GFP_KERNEL);
 	if (!vrp)
 		return -ENOMEM;

@@ -898,7 +898,7 @@ static int rpmsg_probe(struct virtio_device *vdev)

 	/* if supported by the remote processor, enable the name service */
 	if (virtio_has_feature(vdev, VIRTIO_RPMSG_F_NS)) {
-		vch = kzalloc(sizeof(*vch), GFP_KERNEL);
+		vch = kzalloc_obj(*vch, GFP_KERNEL);
 		if (!vch) {
 			err = -ENOMEM;
 			goto free_ctrldev;
diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c
index b1a2be1f9e3b..eda2d5d46798 100644
--- a/drivers/rtc/class.c
+++ b/drivers/rtc/class.c
@@ -208,7 +208,7 @@ static struct rtc_device *rtc_allocate_device(void)
 {
 	struct rtc_device *rtc;

-	rtc = kzalloc(sizeof(*rtc), GFP_KERNEL);
+	rtc = kzalloc_obj(*rtc, GFP_KERNEL);
 	if (!rtc)
 		return NULL;

diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c
index e5e6013d080e..2bc86e8a8a86 100644
--- a/drivers/rtc/rtc-sun6i.c
+++ b/drivers/rtc/rtc-sun6i.c
@@ -233,12 +233,12 @@ static void __init sun6i_rtc_clk_init(struct device_node *node,
 	const char *parents[2];
 	u32 reg;

-	rtc = kzalloc(sizeof(*rtc), GFP_KERNEL);
+	rtc = kzalloc_obj(*rtc, GFP_KERNEL);
 	if (!rtc)
 		return;

 	rtc->data = data;
-	clk_data = kzalloc(struct_size(clk_data, hws, 3), GFP_KERNEL);
+	clk_data = kzalloc_flex(*clk_data, hws, 3, GFP_KERNEL);
 	if (!clk_data) {
 		kfree(rtc);
 		return;
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 35031357ac4d..cc86a2b76a0a 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -86,7 +86,7 @@ struct dasd_device *dasd_alloc_device(void)
 {
 	struct dasd_device *device;

-	device = kzalloc(sizeof(struct dasd_device), GFP_ATOMIC);
+	device = kzalloc_obj(struct dasd_device, GFP_ATOMIC);
 	if (!device)
 		return ERR_PTR(-ENOMEM);

@@ -150,7 +150,7 @@ struct dasd_block *dasd_alloc_block(void)
 {
 	struct dasd_block *block;

-	block = kzalloc(sizeof(*block), GFP_ATOMIC);
+	block = kzalloc_obj(*block, GFP_ATOMIC);
 	if (!block)
 		return ERR_PTR(-ENOMEM);
 	/* open_count = 0 means device online but not in use */
@@ -868,7 +868,7 @@ int dasd_profile_on(struct dasd_profile *profile)
 {
 	struct dasd_profile_info *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 	spin_lock_bh(&profile->lock);
@@ -3180,7 +3180,7 @@ enum blk_eh_timer_return dasd_times_out(struct request *req)
 static int dasd_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
 			  unsigned int idx)
 {
-	struct dasd_queue *dq = kzalloc(sizeof(*dq), GFP_KERNEL);
+	struct dasd_queue *dq = kzalloc_obj(*dq, GFP_KERNEL);

 	if (!dq)
 		return -ENOMEM;
diff --git a/drivers/s390/block/dasd_alias.c b/drivers/s390/block/dasd_alias.c
index f7e768d8ca76..f5f3b6da2d4b 100644
--- a/drivers/s390/block/dasd_alias.c
+++ b/drivers/s390/block/dasd_alias.c
@@ -98,7 +98,7 @@ static struct alias_server *_allocate_server(struct dasd_uid *uid)
 {
 	struct alias_server *server;

-	server = kzalloc(sizeof(*server), GFP_KERNEL);
+	server = kzalloc_obj(*server, GFP_KERNEL);
 	if (!server)
 		return ERR_PTR(-ENOMEM);
 	memcpy(server->uid.vendor, uid->vendor, sizeof(uid->vendor));
@@ -117,17 +117,16 @@ static struct alias_lcu *_allocate_lcu(struct dasd_uid *uid)
 {
 	struct alias_lcu *lcu;

-	lcu = kzalloc(sizeof(*lcu), GFP_KERNEL);
+	lcu = kzalloc_obj(*lcu, GFP_KERNEL);
 	if (!lcu)
 		return ERR_PTR(-ENOMEM);
-	lcu->uac = kzalloc(sizeof(*(lcu->uac)), GFP_KERNEL | GFP_DMA);
+	lcu->uac = kzalloc_obj(*(lcu->uac), GFP_KERNEL | GFP_DMA);
 	if (!lcu->uac)
 		goto out_err1;
-	lcu->rsu_cqr = kzalloc(sizeof(*lcu->rsu_cqr), GFP_KERNEL | GFP_DMA);
+	lcu->rsu_cqr = kzalloc_obj(*lcu->rsu_cqr, GFP_KERNEL | GFP_DMA);
 	if (!lcu->rsu_cqr)
 		goto out_err2;
-	lcu->rsu_cqr->cpaddr = kzalloc(sizeof(struct ccw1),
-				       GFP_KERNEL | GFP_DMA);
+	lcu->rsu_cqr->cpaddr = kzalloc_obj(struct ccw1, GFP_KERNEL | GFP_DMA);
 	if (!lcu->rsu_cqr->cpaddr)
 		goto out_err3;
 	lcu->rsu_cqr->data = kzalloc(16, GFP_KERNEL | GFP_DMA);
@@ -323,7 +322,7 @@ static int _add_device_to_lcu(struct alias_lcu *lcu,
 	}
 	group = _find_group(lcu, &uid);
 	if (!group) {
-		group = kzalloc(sizeof(*group), GFP_ATOMIC);
+		group = kzalloc_obj(*group, GFP_ATOMIC);
 		if (!group)
 			return -ENOMEM;
 		memcpy(group->uid.vendor, uid.vendor, sizeof(uid.vendor));
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c
index 73972900fc55..d46274ef2f3e 100644
--- a/drivers/s390/block/dasd_devmap.c
+++ b/drivers/s390/block/dasd_devmap.c
@@ -412,7 +412,7 @@ dasd_add_busid(const char *bus_id, int features)
 	struct dasd_devmap *devmap, *new, *tmp;
 	int hash;

-	new = kzalloc(sizeof(struct dasd_devmap), GFP_KERNEL);
+	new = kzalloc_obj(struct dasd_devmap, GFP_KERNEL);
 	if (!new)
 		return ERR_PTR(-ENOMEM);
 	spin_lock(&dasd_devmap_lock);
@@ -605,7 +605,7 @@ static int dasd_devmap_get_pprc_status(struct dasd_device *device,
 		dev_warn(&device->cdev->dev, "Unable to query copy relation status\n");
 		return -EOPNOTSUPP;
 	}
-	temp = kzalloc(sizeof(*temp), GFP_KERNEL);
+	temp = kzalloc_obj(*temp, GFP_KERNEL);
 	if (!temp)
 		return -ENOMEM;

@@ -2274,7 +2274,7 @@ static ssize_t dasd_copy_pair_store(struct device *dev,
 	} else if (sec_devmap->copy) {
 		copy = sec_devmap->copy;
 	} else {
-		copy = kzalloc(sizeof(*copy), GFP_KERNEL);
+		copy = kzalloc_obj(*copy, GFP_KERNEL);
 		if (!copy)
 			return -ENOMEM;
 	}
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c
index 56f1af8a7ddd..ac15322a1d06 100644
--- a/drivers/s390/block/dasd_diag.c
+++ b/drivers/s390/block/dasd_diag.c
@@ -325,7 +325,7 @@ dasd_diag_check_device(struct dasd_device *device)
 	int rc;

 	if (private == NULL) {
-		private = kzalloc(sizeof(*private), GFP_KERNEL);
+		private = kzalloc_obj(*private, GFP_KERNEL);
 		if (private == NULL) {
 			DBF_DEV_EVENT(DBF_WARNING, device, "%s",
 				"Allocating memory for private DASD data "
@@ -395,7 +395,7 @@ dasd_diag_check_device(struct dasd_device *device)
 		rc = -ENOMEM;
 		goto out;
 	}
-	bio = kzalloc(sizeof(*bio), GFP_KERNEL);
+	bio = kzalloc_obj(*bio, GFP_KERNEL);
 	if (bio == NULL)  {
 		DBF_DEV_EVENT(DBF_WARNING, device, "%s",
 			      "No memory to allocate initialization bio");
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index b08e900687f3..47ffc255e9b4 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -1468,7 +1468,7 @@ static int dasd_eckd_pe_handler(struct dasd_device *device,
 {
 	struct pe_handler_work_data *data;

-	data = kzalloc(sizeof(*data), GFP_ATOMIC | GFP_DMA);
+	data = kzalloc_obj(*data, GFP_ATOMIC | GFP_DMA);
 	if (!data) {
 		if (mutex_trylock(&dasd_pe_handler_mutex)) {
 			data = pe_handler_worker;
@@ -1720,7 +1720,7 @@ static int dasd_eckd_ext_pool_exhaust(struct dasd_device *device,
 {
 	struct ext_pool_exhaust_work_data *data;

-	data = kzalloc(sizeof(*data), GFP_ATOMIC);
+	data = kzalloc_obj(*data, GFP_ATOMIC);
 	if (!data)
 		return -ENOMEM;
 	INIT_WORK(&data->worker, dasd_eckd_ext_pool_exhaust_work);
@@ -2070,7 +2070,7 @@ dasd_eckd_check_characteristics(struct dasd_device *device)
 			 "The DASD is not operating in multipath mode\n");
 	}
 	if (!private) {
-		private = kzalloc(sizeof(*private), GFP_KERNEL | GFP_DMA);
+		private = kzalloc_obj(*private, GFP_KERNEL | GFP_DMA);
 		if (!private) {
 			dev_warn(&device->cdev->dev,
 				 "Allocating memory for private DASD data "
@@ -3729,7 +3729,7 @@ static int dasd_in_copy_relation(struct dasd_device *device)
 	if (!dasd_eckd_pprc_enabled(device))
 		return 0;

-	temp = kzalloc(sizeof(*temp), GFP_KERNEL);
+	temp = kzalloc_obj(*temp, GFP_KERNEL);
 	if (!temp)
 		return -ENOMEM;

@@ -5951,7 +5951,7 @@ static int dasd_eckd_query_host_access(struct dasd_device *device,
 				"Could not allocate read message buffer request");
 		return PTR_ERR(cqr);
 	}
-	host_access = kzalloc(sizeof(*host_access), GFP_KERNEL | GFP_DMA);
+	host_access = kzalloc_obj(*host_access, GFP_KERNEL | GFP_DMA);
 	if (!host_access) {
 		dasd_sfree_request(cqr, device);
 		DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s",
@@ -6017,7 +6017,7 @@ static int dasd_eckd_host_access_count(struct dasd_device *device)
 	int count = 0;
 	int rc, i;

-	access = kzalloc(sizeof(*access), GFP_NOIO);
+	access = kzalloc_obj(*access, GFP_NOIO);
 	if (!access) {
 		DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s",
 				"Could not allocate access buffer");
@@ -6053,7 +6053,7 @@ static int dasd_hosts_print(struct dasd_device *device, struct seq_file *m)
 	char sysplex[9] = "";
 	int rc, i;

-	access = kzalloc(sizeof(*access), GFP_NOIO);
+	access = kzalloc_obj(*access, GFP_NOIO);
 	if (!access) {
 		DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s",
 				"Could not allocate access buffer");
@@ -6721,7 +6721,7 @@ static void dasd_eckd_check_attention_work(struct work_struct *work)

 	data = container_of(work, struct check_attention_work_data, worker);
 	device = data->device;
-	messages = kzalloc(sizeof(*messages), GFP_KERNEL);
+	messages = kzalloc_obj(*messages, GFP_KERNEL);
 	if (!messages) {
 		DBF_DEV_EVENT(DBF_WARNING, device, "%s",
 			      "Could not allocate attention message buffer");
@@ -6748,7 +6748,7 @@ static int dasd_eckd_check_attention(struct dasd_device *device, __u8 lpum)
 {
 	struct check_attention_work_data *data;

-	data = kzalloc(sizeof(*data), GFP_ATOMIC);
+	data = kzalloc_obj(*data, GFP_ATOMIC);
 	if (!data)
 		return -ENOMEM;
 	INIT_WORK(&data->worker, dasd_eckd_check_attention_work);
@@ -6912,18 +6912,17 @@ dasd_eckd_init(void)
 	int ret;

 	ASCEBC(dasd_eckd_discipline.ebcname, 4);
-	dasd_reserve_req = kmalloc(sizeof(*dasd_reserve_req),
-				   GFP_KERNEL | GFP_DMA);
+	dasd_reserve_req = kmalloc_obj(*dasd_reserve_req, GFP_KERNEL | GFP_DMA);
 	if (!dasd_reserve_req)
 		return -ENOMEM;
-	dasd_vol_info_req = kmalloc(sizeof(*dasd_vol_info_req),
-				    GFP_KERNEL | GFP_DMA);
+	dasd_vol_info_req = kmalloc_obj(*dasd_vol_info_req,
+					GFP_KERNEL | GFP_DMA);
 	if (!dasd_vol_info_req) {
 		kfree(dasd_reserve_req);
 		return -ENOMEM;
 	}
-	pe_handler_worker = kmalloc(sizeof(*pe_handler_worker),
-				    GFP_KERNEL | GFP_DMA);
+	pe_handler_worker = kmalloc_obj(*pe_handler_worker,
+					GFP_KERNEL | GFP_DMA);
 	if (!pe_handler_worker) {
 		kfree(dasd_reserve_req);
 		kfree(dasd_vol_info_req);
diff --git a/drivers/s390/block/dasd_eer.c b/drivers/s390/block/dasd_eer.c
index b177b7952f2e..648ab74ae60f 100644
--- a/drivers/s390/block/dasd_eer.c
+++ b/drivers/s390/block/dasd_eer.c
@@ -544,7 +544,7 @@ static int dasd_eer_open(struct inode *inp, struct file *filp)
 	struct eerbuffer *eerb;
 	unsigned long flags;

-	eerb = kzalloc(sizeof(struct eerbuffer), GFP_KERNEL);
+	eerb = kzalloc_obj(struct eerbuffer, GFP_KERNEL);
 	if (!eerb)
 		return -ENOMEM;
 	eerb->buffer_page_count = eer_pages;
@@ -689,7 +689,7 @@ int __init dasd_eer_init(void)
 {
 	int rc;

-	dasd_eer_dev = kzalloc(sizeof(*dasd_eer_dev), GFP_KERNEL);
+	dasd_eer_dev = kzalloc_obj(*dasd_eer_dev, GFP_KERNEL);
 	if (!dasd_eer_dev)
 		return -ENOMEM;

diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c
index c2a87201c153..029acb83ecab 100644
--- a/drivers/s390/block/dasd_fba.c
+++ b/drivers/s390/block/dasd_fba.c
@@ -119,7 +119,7 @@ dasd_fba_check_characteristics(struct dasd_device *device)
 	int readonly, rc;

 	if (!private) {
-		private = kzalloc(sizeof(*private), GFP_KERNEL | GFP_DMA);
+		private = kzalloc_obj(*private, GFP_KERNEL | GFP_DMA);
 		if (!private) {
 			dev_warn(&device->cdev->dev,
 				 "Allocating memory for private DASD "
diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c
index f883990be626..d5534ce25558 100644
--- a/drivers/s390/block/dasd_ioctl.c
+++ b/drivers/s390/block/dasd_ioctl.c
@@ -442,7 +442,7 @@ static int dasd_ioctl_read_profile(struct dasd_block *block, void __user *argp)
 	struct dasd_profile_info_t *data;
 	int rc = 0;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -560,7 +560,7 @@ static int dasd_ioctl_information(struct dasd_block *block, void __user *argp,
 	struct dasd_information2_t *dasd_info;
 	int error;

-	dasd_info = kzalloc(sizeof(*dasd_info), GFP_KERNEL);
+	dasd_info = kzalloc_obj(*dasd_info, GFP_KERNEL);
 	if (!dasd_info)
 		return -ENOMEM;

diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c
index 38e1df8f8a82..5d7229f39480 100644
--- a/drivers/s390/block/dcssblk.c
+++ b/drivers/s390/block/dcssblk.c
@@ -240,9 +240,8 @@ dcssblk_is_continuous(struct dcssblk_dev_info *dev_info)
 	if (dev_info->num_of_segments <= 1)
 		return 0;

-	sort_list = kcalloc(dev_info->num_of_segments,
-			    sizeof(struct segment_info),
-			    GFP_KERNEL);
+	sort_list = kzalloc_objs(struct segment_info, dev_info->num_of_segments,
+				 GFP_KERNEL);
 	if (sort_list == NULL)
 		return -ENOMEM;
 	i = 0;
@@ -310,7 +309,7 @@ dcssblk_load_segment(char *name, struct segment_info **seg_info)
 		return -EEXIST;

 	/* get a struct segment_info */
-	*seg_info = kzalloc(sizeof(struct segment_info), GFP_KERNEL);
+	*seg_info = kzalloc_obj(struct segment_info, GFP_KERNEL);
 	if (*seg_info == NULL)
 		return -ENOMEM;

@@ -606,8 +605,8 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char
 		 * get a struct dcssblk_dev_info
 		 */
 		if (num_of_segments == 0) {
-			dev_info = kzalloc(sizeof(struct dcssblk_dev_info),
-					GFP_KERNEL);
+			dev_info = kzalloc_obj(struct dcssblk_dev_info,
+					       GFP_KERNEL);
 			if (dev_info == NULL) {
 				rc = -ENOMEM;
 				goto out;
diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c
index 04e84f45dcc9..0781c7e9d913 100644
--- a/drivers/s390/block/scm_blk.c
+++ b/drivers/s390/block/scm_blk.c
@@ -77,8 +77,8 @@ static int __scm_alloc_rq(void)
 	if (!scmrq->aob)
 		goto free;

-	scmrq->request = kcalloc(nr_requests_per_io, sizeof(scmrq->request[0]),
-				 GFP_KERNEL);
+	scmrq->request = kzalloc_objs(scmrq->request[0], nr_requests_per_io,
+				      GFP_KERNEL);
 	if (!scmrq->request)
 		goto free;

@@ -331,7 +331,7 @@ static blk_status_t scm_blk_request(struct blk_mq_hw_ctx *hctx,
 static int scm_blk_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
 			     unsigned int idx)
 {
-	struct scm_queue *qd = kzalloc(sizeof(*qd), GFP_KERNEL);
+	struct scm_queue *qd = kzalloc_obj(*qd, GFP_KERNEL);

 	if (!qd)
 		return -ENOMEM;
diff --git a/drivers/s390/block/scm_drv.c b/drivers/s390/block/scm_drv.c
index 6cffbbe83f89..81b32b44b03c 100644
--- a/drivers/s390/block/scm_drv.c
+++ b/drivers/s390/block/scm_drv.c
@@ -43,7 +43,7 @@ static int scm_probe(struct scm_device *scmdev)
 	if (scmdev->attrs.oper_state != OP_STATE_GOOD)
 		return -EINVAL;

-	bdev = kzalloc(sizeof(*bdev), GFP_KERNEL);
+	bdev = kzalloc_obj(*bdev, GFP_KERNEL);
 	if (!bdev)
 		return -ENOMEM;

diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
index 56e43d43c713..46265f4fbfd8 100644
--- a/drivers/s390/char/con3215.c
+++ b/drivers/s390/char/con3215.c
@@ -670,7 +670,7 @@ static struct raw3215_info *raw3215_alloc_info(void)
 {
 	struct raw3215_info *info;

-	info = kzalloc(sizeof(struct raw3215_info), GFP_KERNEL | GFP_DMA);
+	info = kzalloc_obj(struct raw3215_info, GFP_KERNEL | GFP_DMA);
 	if (!info)
 		return NULL;

@@ -916,7 +916,7 @@ static int __init con3215_init(void)
 	/* allocate 3215 request structures */
 	raw3215_freelist = NULL;
 	for (i = 0; i < NR_3215_REQ; i++) {
-		req = kzalloc(sizeof(struct raw3215_req), GFP_KERNEL | GFP_DMA);
+		req = kzalloc_obj(struct raw3215_req, GFP_KERNEL | GFP_DMA);
 		if (!req)
 			return -ENOMEM;
 		req->next = raw3215_freelist;
diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c
index 4a7c084e68a6..1dcf0198d8a7 100644
--- a/drivers/s390/char/con3270.c
+++ b/drivers/s390/char/con3270.c
@@ -829,7 +829,7 @@ static struct tty3270 *tty3270_alloc_view(void)
 {
 	struct tty3270 *tp;

-	tp = kzalloc(sizeof(*tp), GFP_KERNEL);
+	tp = kzalloc_obj(*tp, GFP_KERNEL);
 	if (!tp)
 		goto out_err;

@@ -895,11 +895,12 @@ static struct tty3270_line *tty3270_alloc_screen(struct tty3270 *tp, unsigned in
 	int allocated, lines;

 	allocated = __roundup_pow_of_two(rows) * TTY3270_SCREEN_PAGES;
-	screen = kcalloc(allocated, sizeof(struct tty3270_line), GFP_KERNEL);
+	screen = kzalloc_objs(struct tty3270_line, allocated, GFP_KERNEL);
 	if (!screen)
 		goto out_err;
 	for (lines = 0; lines < allocated; lines++) {
-		screen[lines].cells = kcalloc(cols, sizeof(struct tty3270_cell), GFP_KERNEL);
+		screen[lines].cells = kzalloc_objs(struct tty3270_cell, cols,
+						   GFP_KERNEL);
 		if (!screen[lines].cells)
 			goto out_screen;
 	}
diff --git a/drivers/s390/char/fs3270.c b/drivers/s390/char/fs3270.c
index 73555dbe30d0..c601134eee04 100644
--- a/drivers/s390/char/fs3270.c
+++ b/drivers/s390/char/fs3270.c
@@ -367,7 +367,7 @@ static struct fs3270 *fs3270_alloc_view(void)
 {
 	struct fs3270 *fp;

-	fp = kzalloc(sizeof(*fp), GFP_KERNEL);
+	fp = kzalloc_obj(*fp, GFP_KERNEL);
 	if (!fp)
 		return ERR_PTR(-ENOMEM);
 	fp->init = raw3270_request_alloc(0);
diff --git a/drivers/s390/char/keyboard.c b/drivers/s390/char/keyboard.c
index a45f07a2cc8f..006c381e2417 100644
--- a/drivers/s390/char/keyboard.c
+++ b/drivers/s390/char/keyboard.c
@@ -78,7 +78,7 @@ kbd_alloc(void) {
 	struct kbd_data *kbd;
 	int i;

-	kbd = kzalloc(sizeof(struct kbd_data), GFP_KERNEL);
+	kbd = kzalloc_obj(struct kbd_data, GFP_KERNEL);
 	if (!kbd)
 		goto out;
 	kbd->key_maps = kzalloc(sizeof(ebc_key_maps), GFP_KERNEL);
@@ -105,7 +105,7 @@ kbd_alloc(void) {
 		}
 	}
 	kbd->fn_handler =
-		kcalloc(NR_FN_HANDLER, sizeof(fn_handler_fn *), GFP_KERNEL);
+		kzalloc_objs(fn_handler_fn *, NR_FN_HANDLER, GFP_KERNEL);
 	if (!kbd->fn_handler)
 		goto out_func;
 	kbd->accent_table = kmemdup(ebc_accent_table,
diff --git a/drivers/s390/char/monreader.c b/drivers/s390/char/monreader.c
index 3d84f84b4cbd..9c1bcc4f35c5 100644
--- a/drivers/s390/char/monreader.c
+++ b/drivers/s390/char/monreader.c
@@ -181,12 +181,11 @@ static struct mon_private *mon_alloc_mem(void)
 	int i;
 	struct mon_private *monpriv;

-	monpriv = kzalloc(sizeof(struct mon_private), GFP_KERNEL);
+	monpriv = kzalloc_obj(struct mon_private, GFP_KERNEL);
 	if (!monpriv)
 		return NULL;
 	for (i = 0; i < MON_MSGLIM; i++) {
-		monpriv->msg_array[i] = kzalloc(sizeof(struct mon_msg),
-						    GFP_KERNEL);
+		monpriv->msg_array[i] = kzalloc_obj(struct mon_msg, GFP_KERNEL);
 		if (!monpriv->msg_array[i]) {
 			mon_free_mem(monpriv);
 			return NULL;
diff --git a/drivers/s390/char/monwriter.c b/drivers/s390/char/monwriter.c
index cf2e51061422..d7ef93351a2e 100644
--- a/drivers/s390/char/monwriter.c
+++ b/drivers/s390/char/monwriter.c
@@ -58,8 +58,8 @@ static int monwrite_diag(struct monwrite_hdr *myhdr, char *buffer, int fcn)
 	struct appldata_product_id *id;
 	int rc;

-	id = kmalloc(sizeof(*id), GFP_KERNEL);
-	parm_list = kmalloc(sizeof(*parm_list), GFP_KERNEL);
+	id = kmalloc_obj(*id, GFP_KERNEL);
+	parm_list = kmalloc_obj(*parm_list, GFP_KERNEL);
 	rc = -ENOMEM;
 	if (!id || !parm_list)
 		goto out;
@@ -126,7 +126,7 @@ static int monwrite_new_hdr(struct mon_private *monpriv)
 	} else if (monhdr->mon_function != MONWRITE_STOP_INTERVAL) {
 		if (mon_buf_count >= mon_max_bufs)
 			return -ENOSPC;
-		monbuf = kzalloc(sizeof(struct mon_buf), GFP_KERNEL);
+		monbuf = kzalloc_obj(struct mon_buf, GFP_KERNEL);
 		if (!monbuf)
 			return -ENOMEM;
 		monbuf->data = kzalloc(monhdr->datalen,
@@ -188,7 +188,7 @@ static int monwrite_open(struct inode *inode, struct file *filp)
 {
 	struct mon_private *monpriv;

-	monpriv = kzalloc(sizeof(struct mon_private), GFP_KERNEL);
+	monpriv = kzalloc_obj(struct mon_private, GFP_KERNEL);
 	if (!monpriv)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&monpriv->list);
diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c
index 55850b5a7f51..aa9c4d81225c 100644
--- a/drivers/s390/char/raw3270.c
+++ b/drivers/s390/char/raw3270.c
@@ -146,7 +146,7 @@ struct raw3270_request *raw3270_request_alloc(size_t size)
 	struct raw3270_request *rq;

 	/* Allocate request structure */
-	rq = kzalloc(sizeof(*rq), GFP_KERNEL | GFP_DMA);
+	rq = kzalloc_obj(*rq, GFP_KERNEL | GFP_DMA);
 	if (!rq)
 		return ERR_PTR(-ENOMEM);

@@ -813,7 +813,7 @@ struct raw3270 __init *raw3270_setup_console(void)
 	if (IS_ERR(cdev))
 		return ERR_CAST(cdev);

-	rp = kzalloc(sizeof(*rp), GFP_KERNEL | GFP_DMA);
+	rp = kzalloc_obj(*rp, GFP_KERNEL | GFP_DMA);
 	ascebc = kzalloc(256, GFP_KERNEL);
 	rc = raw3270_setup_device(cdev, rp, ascebc);
 	if (rc)
@@ -858,7 +858,7 @@ static struct raw3270 *raw3270_create_device(struct ccw_device *cdev)
 	char *ascebc;
 	int rc;

-	rp = kzalloc(sizeof(*rp), GFP_KERNEL | GFP_DMA);
+	rp = kzalloc_obj(*rp, GFP_KERNEL | GFP_DMA);
 	if (!rp)
 		return ERR_PTR(-ENOMEM);
 	ascebc = kmalloc(256, GFP_KERNEL);
diff --git a/drivers/s390/char/sclp_cmd.c b/drivers/s390/char/sclp_cmd.c
index be4730936f5c..c4a79cf6db86 100644
--- a/drivers/s390/char/sclp_cmd.c
+++ b/drivers/s390/char/sclp_cmd.c
@@ -66,7 +66,7 @@ int sclp_sync_request_timeout(sclp_cmdw_t cmd, void *sccb, int timeout)
 	struct sclp_req *request;
 	int rc;

-	request = kzalloc(sizeof(*request), GFP_KERNEL);
+	request = kzalloc_obj(*request, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;
 	if (timeout)
@@ -134,7 +134,7 @@ static int do_core_configure(sclp_cmdw_t cmd)
 	 * Use kmalloc to have a minimum alignment of 8 bytes and ensure sccb
 	 * is not going to cross a page boundary.
 	 */
-	sccb = kzalloc(sizeof(*sccb), GFP_KERNEL | GFP_DMA);
+	sccb = kzalloc_obj(*sccb, GFP_KERNEL | GFP_DMA);
 	if (!sccb)
 		return -ENOMEM;
 	sccb->header.length = sizeof(*sccb);
diff --git a/drivers/s390/char/sclp_cpi_sys.c b/drivers/s390/char/sclp_cpi_sys.c
index 8e1636bcf8b5..ea3ee83bac85 100644
--- a/drivers/s390/char/sclp_cpi_sys.c
+++ b/drivers/s390/char/sclp_cpi_sys.c
@@ -81,7 +81,7 @@ static struct sclp_req *cpi_prepare_req(void)
 	struct cpi_sccb *sccb;
 	struct cpi_evbuf *evb;

-	req = kzalloc(sizeof(struct sclp_req), GFP_KERNEL);
+	req = kzalloc_obj(struct sclp_req, GFP_KERNEL);
 	if (!req)
 		return ERR_PTR(-ENOMEM);
 	sccb = (struct cpi_sccb *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
diff --git a/drivers/s390/char/sclp_ftp.c b/drivers/s390/char/sclp_ftp.c
index 2a1c4b2cafc8..f9c15f6f8078 100644
--- a/drivers/s390/char/sclp_ftp.c
+++ b/drivers/s390/char/sclp_ftp.c
@@ -92,7 +92,7 @@ static int sclp_ftp_et7(const struct hmcdrv_ftp_cmdspec *ftp)
 	ssize_t len;
 	int rc;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	sccb = (void *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
 	if (!req || !sccb) {
 		rc = -ENOMEM;
diff --git a/drivers/s390/char/sclp_mem.c b/drivers/s390/char/sclp_mem.c
index 27f0d2f12a8b..9417857ce401 100644
--- a/drivers/s390/char/sclp_mem.c
+++ b/drivers/s390/char/sclp_mem.c
@@ -431,7 +431,7 @@ static int __init sclp_init_mem(void)

 	max_sclp_mems = roundup(sclp.rnmax * sclp.rzm, block_size) / block_size;
 	/* Allocate memory for all blocks ahead of time. */
-	sclp_mems = kcalloc(max_sclp_mems, sizeof(struct sclp_mem), GFP_KERNEL);
+	sclp_mems = kzalloc_objs(struct sclp_mem, max_sclp_mems, GFP_KERNEL);
 	if (!sclp_mems)
 		return -ENOMEM;
 	kset = kset_create_and_add("memory", NULL, firmware_kobj);
@@ -453,7 +453,7 @@ static void __init insert_increment(u16 rn, int standby, int assigned)
 	struct list_head *prev;
 	u16 last_rn;

-	new_incr = kzalloc(sizeof(*new_incr), GFP_KERNEL);
+	new_incr = kzalloc_obj(*new_incr, GFP_KERNEL);
 	if (!new_incr)
 		return;
 	new_incr->rn = rn;
diff --git a/drivers/s390/char/sclp_sd.c b/drivers/s390/char/sclp_sd.c
index e4a90a14028a..ee09803db422 100644
--- a/drivers/s390/char/sclp_sd.c
+++ b/drivers/s390/char/sclp_sd.c
@@ -518,7 +518,7 @@ static __init struct sclp_sd_file *sclp_sd_file_create(const char *name, u8 di)
 	struct sclp_sd_file *sd_file;
 	int rc;

-	sd_file = kzalloc(sizeof(*sd_file), GFP_KERNEL);
+	sd_file = kzalloc_obj(*sd_file, GFP_KERNEL);
 	if (!sd_file)
 		return NULL;
 	sd_file->di = di;
diff --git a/drivers/s390/char/tape_3490.c b/drivers/s390/char/tape_3490.c
index 7302f1121553..ac70055fd8ba 100644
--- a/drivers/s390/char/tape_3490.c
+++ b/drivers/s390/char/tape_3490.c
@@ -140,7 +140,7 @@ tape_3490_schedule_work(struct tape_device *device, enum tape_op op)
 {
 	struct tape_3490_work *p;

-	if ((p = kzalloc(sizeof(*p), GFP_ATOMIC)) == NULL)
+	if ((p = kzalloc_obj(*p, GFP_ATOMIC)) == NULL)
 		return -ENOMEM;

 	INIT_WORK(&p->work, tape_3490_work_handler);
diff --git a/drivers/s390/char/tape_class.c b/drivers/s390/char/tape_class.c
index 1ae9ad219c08..b211324b801f 100644
--- a/drivers/s390/char/tape_class.c
+++ b/drivers/s390/char/tape_class.c
@@ -45,7 +45,7 @@ struct tape_class_device *register_tape_dev(
 	int		rc;
 	char *		s;

-	tcd = kzalloc(sizeof(struct tape_class_device), GFP_KERNEL);
+	tcd = kzalloc_obj(struct tape_class_device, GFP_KERNEL);
 	if (!tcd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c
index a62b650ea3c2..f3270f22a1ef 100644
--- a/drivers/s390/char/tape_core.c
+++ b/drivers/s390/char/tape_core.c
@@ -249,7 +249,7 @@ tape_med_state_work(struct tape_device *device, enum tape_medium_state state)
 {
 	struct tape_med_state_work_data *p;

-	p = kzalloc(sizeof(*p), GFP_ATOMIC);
+	p = kzalloc_obj(*p, GFP_ATOMIC);
 	if (p) {
 		INIT_WORK(&p->work, tape_med_state_work_handler);
 		p->device = tape_get_device(device);
@@ -477,7 +477,7 @@ tape_alloc_device(void)
 {
 	struct tape_device *device;

-	device = kzalloc(sizeof(struct tape_device), GFP_KERNEL);
+	device = kzalloc_obj(struct tape_device, GFP_KERNEL);
 	if (device == NULL) {
 		DBF_EXCEPTION(2, "ti:no mem\n");
 		return ERR_PTR(-ENOMEM);
@@ -678,15 +678,15 @@ tape_alloc_request(int cplength, int datasize)

 	DBF_LH(6, "tape_alloc_request(%d, %d)\n", cplength, datasize);

-	request = kzalloc(sizeof(struct tape_request), GFP_KERNEL);
+	request = kzalloc_obj(struct tape_request, GFP_KERNEL);
 	if (request == NULL) {
 		DBF_EXCEPTION(1, "cqra nomem\n");
 		return ERR_PTR(-ENOMEM);
 	}
 	/* allocate channel program */
 	if (cplength > 0) {
-		request->cpaddr = kcalloc(cplength, sizeof(struct ccw1),
-					  GFP_ATOMIC | GFP_DMA);
+		request->cpaddr = kzalloc_objs(struct ccw1, cplength,
+					       GFP_ATOMIC | GFP_DMA);
 		if (request->cpaddr == NULL) {
 			DBF_EXCEPTION(1, "cqra nomem\n");
 			kfree(request);
diff --git a/drivers/s390/char/uvdevice.c b/drivers/s390/char/uvdevice.c
index 2b83fb6dc1d7..83ed0a26e884 100644
--- a/drivers/s390/char/uvdevice.c
+++ b/drivers/s390/char/uvdevice.c
@@ -196,7 +196,7 @@ static int uvio_attestation(struct uvio_ioctl_cb *uv_ioctl)
 		goto out;

 	ret = -ENOMEM;
-	uvio_attest = kzalloc(sizeof(*uvio_attest), GFP_KERNEL);
+	uvio_attest = kzalloc_obj(*uvio_attest, GFP_KERNEL);
 	if (!uvio_attest)
 		goto out;

@@ -216,7 +216,7 @@ static int uvio_attestation(struct uvio_ioctl_cb *uv_ioctl)
 			goto out;
 	}

-	uvcb_attest = kzalloc(sizeof(*uvcb_attest), GFP_KERNEL);
+	uvcb_attest = kzalloc_obj(*uvcb_attest, GFP_KERNEL);
 	if (!uvcb_attest)
 		goto out;

diff --git a/drivers/s390/char/vmcp.c b/drivers/s390/char/vmcp.c
index bde6c9e59166..4cf82f83c175 100644
--- a/drivers/s390/char/vmcp.c
+++ b/drivers/s390/char/vmcp.c
@@ -104,7 +104,7 @@ static int vmcp_open(struct inode *inode, struct file *file)
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;

-	session = kmalloc(sizeof(*session), GFP_KERNEL);
+	session = kmalloc_obj(*session, GFP_KERNEL);
 	if (!session)
 		return -ENOMEM;

diff --git a/drivers/s390/char/vmur.c b/drivers/s390/char/vmur.c
index a226ff208eda..f855774687b2 100644
--- a/drivers/s390/char/vmur.c
+++ b/drivers/s390/char/vmur.c
@@ -107,7 +107,7 @@ static struct urdev *urdev_alloc(struct ccw_device *cdev)
 {
 	struct urdev *urd;

-	urd = kzalloc(sizeof(struct urdev), GFP_KERNEL);
+	urd = kzalloc_obj(struct urdev, GFP_KERNEL);
 	if (!urd)
 		return NULL;
 	urd->reclen = cdev->id.driver_info;
@@ -225,8 +225,7 @@ static struct ccw1 *alloc_chan_prog(const char __user *ubuf, int rec_count,
 	 * That means we allocate room for CCWs to cover count/reclen
 	 * records plus a NOP.
 	 */
-	cpa = kcalloc(rec_count + 1, sizeof(struct ccw1),
-		      GFP_KERNEL | GFP_DMA);
+	cpa = kzalloc_objs(struct ccw1, rec_count + 1, GFP_KERNEL | GFP_DMA);
 	if (!cpa)
 		return ERR_PTR(-ENOMEM);

@@ -397,7 +396,7 @@ static struct urfile *urfile_alloc(struct urdev *urd)
 {
 	struct urfile *urf;

-	urf = kzalloc(sizeof(struct urfile), GFP_KERNEL);
+	urf = kzalloc_obj(struct urfile, GFP_KERNEL);
 	if (!urf)
 		return NULL;
 	urf->urd = urd;
@@ -606,7 +605,7 @@ static int verify_uri_device(struct urdev *urd)
 	char *buf;
 	int rc;

-	fcb = kmalloc(sizeof(*fcb), GFP_KERNEL | GFP_DMA);
+	fcb = kmalloc_obj(*fcb, GFP_KERNEL | GFP_DMA);
 	if (!fcb)
 		return -ENOMEM;

@@ -665,7 +664,7 @@ static int get_uri_file_reclen(struct urdev *urd)
 	struct file_control_block *fcb;
 	int rc;

-	fcb = kmalloc(sizeof(*fcb), GFP_KERNEL | GFP_DMA);
+	fcb = kmalloc_obj(*fcb, GFP_KERNEL | GFP_DMA);
 	if (!fcb)
 		return -ENOMEM;
 	rc = diag_read_next_file_info(fcb, 0);
diff --git a/drivers/s390/cio/airq.c b/drivers/s390/cio/airq.c
index f5c59abba221..ecccd5f24a4e 100644
--- a/drivers/s390/cio/airq.c
+++ b/drivers/s390/cio/airq.c
@@ -130,7 +130,7 @@ struct airq_iv *airq_iv_create(unsigned long bits, unsigned long flags,
 	struct airq_iv *iv;
 	unsigned long size;

-	iv = kzalloc(sizeof(*iv), GFP_KERNEL);
+	iv = kzalloc_obj(*iv, GFP_KERNEL);
 	if (!iv)
 		goto out;
 	iv->bits = bits;
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c
index 185c99c5d4cc..c7d86cab984b 100644
--- a/drivers/s390/cio/ccwgroup.c
+++ b/drivers/s390/cio/ccwgroup.c
@@ -322,7 +322,7 @@ int ccwgroup_create_dev(struct device *parent, struct ccwgroup_driver *gdrv,
 	if (num_devices < 1)
 		return -EINVAL;

-	gdev = kzalloc(struct_size(gdev, cdev, num_devices), GFP_KERNEL);
+	gdev = kzalloc_flex(*gdev, cdev, num_devices, GFP_KERNEL);
 	if (!gdev)
 		return -ENOMEM;

diff --git a/drivers/s390/cio/chp.c b/drivers/s390/cio/chp.c
index c10e2444507e..de07d03f1ed4 100644
--- a/drivers/s390/cio/chp.c
+++ b/drivers/s390/cio/chp.c
@@ -530,7 +530,7 @@ int chp_new(struct chp_id chpid)
 	if (chp_is_registered(chpid))
 		goto out;

-	chp = kzalloc(sizeof(struct channel_path), GFP_KERNEL);
+	chp = kzalloc_obj(struct channel_path, GFP_KERNEL);
 	if (!chp) {
 		ret = -ENOMEM;
 		goto out;
@@ -593,7 +593,7 @@ struct channel_path_desc_fmt0 *chp_get_chp_desc(struct chp_id chpid)
 	chp = chpid_to_chp(chpid);
 	if (!chp)
 		return NULL;
-	desc = kmalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kmalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return NULL;

diff --git a/drivers/s390/cio/chsc_sch.c b/drivers/s390/cio/chsc_sch.c
index ce992b2107cb..fcbb2906117f 100644
--- a/drivers/s390/cio/chsc_sch.c
+++ b/drivers/s390/cio/chsc_sch.c
@@ -81,7 +81,7 @@ static int chsc_subchannel_probe(struct subchannel *sch)
 	CHSC_MSG(6, "Detected chsc subchannel 0.%x.%04x\n",
 		 sch->schid.ssid, sch->schid.sch_no);
 	sch->isc = CHSC_SCH_ISC;
-	private = kzalloc(sizeof(*private), GFP_KERNEL);
+	private = kzalloc_obj(*private, GFP_KERNEL);
 	if (!private)
 		return -ENOMEM;
 	dev_set_drvdata(&sch->dev, private);
@@ -295,7 +295,7 @@ static int chsc_ioctl_start(void __user *user_area)
 	chsc_area = (void *)get_zeroed_page(GFP_KERNEL);
 	if (!chsc_area)
 		return -ENOMEM;
-	request = kzalloc(sizeof(*request), GFP_KERNEL);
+	request = kzalloc_obj(*request, GFP_KERNEL);
 	if (!request) {
 		ret = -ENOMEM;
 		goto out_free;
@@ -335,7 +335,7 @@ static int chsc_ioctl_on_close_set(void __user *user_area)
 		ret = -EBUSY;
 		goto out_unlock;
 	}
-	on_close_request = kzalloc(sizeof(*on_close_request), GFP_KERNEL);
+	on_close_request = kzalloc_obj(*on_close_request, GFP_KERNEL);
 	if (!on_close_request) {
 		ret = -ENOMEM;
 		goto out_unlock;
@@ -441,7 +441,7 @@ static int chsc_ioctl_info_channel_path(void __user *user_cd)
 	scpcd_area = (void *)get_zeroed_page(GFP_KERNEL);
 	if (!scpcd_area)
 		return -ENOMEM;
-	cd = kzalloc(sizeof(*cd), GFP_KERNEL);
+	cd = kzalloc_obj(*cd, GFP_KERNEL);
 	if (!cd) {
 		ret = -ENOMEM;
 		goto out_free;
@@ -503,7 +503,7 @@ static int chsc_ioctl_info_cu(void __user *user_cd)
 	scucd_area = (void *)get_zeroed_page(GFP_KERNEL);
 	if (!scucd_area)
 		return -ENOMEM;
-	cd = kzalloc(sizeof(*cd), GFP_KERNEL);
+	cd = kzalloc_obj(*cd, GFP_KERNEL);
 	if (!cd) {
 		ret = -ENOMEM;
 		goto out_free;
@@ -566,7 +566,7 @@ static int chsc_ioctl_info_sch_cu(void __user *user_cud)
 	sscud_area = (void *)get_zeroed_page(GFP_KERNEL);
 	if (!sscud_area)
 		return -ENOMEM;
-	cud = kzalloc(sizeof(*cud), GFP_KERNEL);
+	cud = kzalloc_obj(*cud, GFP_KERNEL);
 	if (!cud) {
 		ret = -ENOMEM;
 		goto out_free;
@@ -628,7 +628,7 @@ static int chsc_ioctl_conf_info(void __user *user_ci)
 	sci_area = (void *)get_zeroed_page(GFP_KERNEL);
 	if (!sci_area)
 		return -ENOMEM;
-	ci = kzalloc(sizeof(*ci), GFP_KERNEL);
+	ci = kzalloc_obj(*ci, GFP_KERNEL);
 	if (!ci) {
 		ret = -ENOMEM;
 		goto out_free;
@@ -699,7 +699,7 @@ static int chsc_ioctl_conf_comp_list(void __user *user_ccl)
 	sccl_area = (void *)get_zeroed_page(GFP_KERNEL);
 	if (!sccl_area)
 		return -ENOMEM;
-	ccl = kzalloc(sizeof(*ccl), GFP_KERNEL);
+	ccl = kzalloc_obj(*ccl, GFP_KERNEL);
 	if (!ccl) {
 		ret = -ENOMEM;
 		goto out_free;
@@ -755,7 +755,7 @@ static int chsc_ioctl_chpd(void __user *user_chpd)
 	struct chsc_cpd_info *chpd;
 	int ret;

-	chpd = kzalloc(sizeof(*chpd), GFP_KERNEL);
+	chpd = kzalloc_obj(*chpd, GFP_KERNEL);
 	scpd_area = (void *)get_zeroed_page(GFP_KERNEL);
 	if (!scpd_area || !chpd) {
 		ret = -ENOMEM;
@@ -799,7 +799,7 @@ static int chsc_ioctl_dcal(void __user *user_dcal)
 	sdcal_area = (void *)get_zeroed_page(GFP_KERNEL);
 	if (!sdcal_area)
 		return -ENOMEM;
-	dcal = kzalloc(sizeof(*dcal), GFP_KERNEL);
+	dcal = kzalloc_obj(*dcal, GFP_KERNEL);
 	if (!dcal) {
 		ret = -ENOMEM;
 		goto out_free;
diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c
index 7d035e4937ce..cbc0efe0d870 100644
--- a/drivers/s390/cio/cmf.c
+++ b/drivers/s390/cio/cmf.c
@@ -483,11 +483,11 @@ static int alloc_cmb(struct ccw_device *cdev)
 	struct cmb_data *cmb_data;

 	/* Allocate private cmb_data. */
-	cmb_data = kzalloc(sizeof(struct cmb_data), GFP_KERNEL);
+	cmb_data = kzalloc_obj(struct cmb_data, GFP_KERNEL);
 	if (!cmb_data)
 		return -ENOMEM;

-	cmb_data->last_block = kzalloc(sizeof(struct cmb), GFP_KERNEL);
+	cmb_data->last_block = kzalloc_obj(struct cmb, GFP_KERNEL);
 	if (!cmb_data->last_block) {
 		kfree(cmb_data);
 		return -ENOMEM;
@@ -766,11 +766,11 @@ static int alloc_cmbe(struct ccw_device *cdev)
 	if (!cmbe)
 		return ret;

-	cmb_data = kzalloc(sizeof(*cmb_data), GFP_KERNEL);
+	cmb_data = kzalloc_obj(*cmb_data, GFP_KERNEL);
 	if (!cmb_data)
 		goto out_free;

-	cmb_data->last_block = kzalloc(sizeof(struct cmbe), GFP_KERNEL);
+	cmb_data->last_block = kzalloc_obj(struct cmbe, GFP_KERNEL);
 	if (!cmb_data->last_block)
 		goto out_free;

diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index ac24e019020e..b6f943d6e30c 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -203,7 +203,7 @@ struct subchannel *css_alloc_subchannel(struct subchannel_id schid,
 	if (ret < 0)
 		return ERR_PTR(ret);

-	sch = kzalloc(sizeof(*sch), GFP_KERNEL | GFP_DMA);
+	sch = kzalloc_obj(*sch, GFP_KERNEL | GFP_DMA);
 	if (!sch)
 		return ERR_PTR(-ENOMEM);

@@ -971,7 +971,7 @@ static int __init setup_css(int nr)
 	struct channel_subsystem *css;
 	int ret;

-	css = kzalloc(sizeof(*css), GFP_KERNEL);
+	css = kzalloc_obj(*css, GFP_KERNEL);
 	if (!css)
 		return -ENOMEM;

@@ -1005,8 +1005,8 @@ static int __init setup_css(int nr)
 		goto out_err;
 	}

-	css->pseudo_subchannel = kzalloc(sizeof(*css->pseudo_subchannel),
-					 GFP_KERNEL);
+	css->pseudo_subchannel = kzalloc_obj(*css->pseudo_subchannel,
+					     GFP_KERNEL);
 	if (!css->pseudo_subchannel) {
 		device_unregister(&css->device);
 		ret = -ENOMEM;
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
index 602f36102c7c..4e6efdcf5617 100644
--- a/drivers/s390/cio/device.c
+++ b/drivers/s390/cio/device.c
@@ -686,13 +686,13 @@ static struct ccw_device * io_subchannel_allocate_dev(struct subchannel *sch)
 	struct gen_pool *dma_pool;
 	int ret;

-	cdev  = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev) {
 		ret = -ENOMEM;
 		goto err_cdev;
 	}
-	cdev->private = kzalloc(sizeof(struct ccw_device_private),
-				GFP_KERNEL | GFP_DMA);
+	cdev->private = kzalloc_obj(struct ccw_device_private,
+				    GFP_KERNEL | GFP_DMA);
 	if (!cdev->private) {
 		ret = -ENOMEM;
 		goto err_priv;
@@ -1060,7 +1060,7 @@ static int io_subchannel_probe(struct subchannel *sch)
 	if (rc)
 		goto out_schedule;
 	/* Allocate I/O subchannel private data. */
-	io_priv = kzalloc(sizeof(*io_priv), GFP_KERNEL | GFP_DMA);
+	io_priv = kzalloc_obj(*io_priv, GFP_KERNEL | GFP_DMA);
 	if (!io_priv)
 		goto out_schedule;

@@ -1644,7 +1644,7 @@ struct ccw_device * __init ccw_device_create_console(struct ccw_driver *drv)
 	if (IS_ERR(sch))
 		return ERR_CAST(sch);

-	io_priv = kzalloc(sizeof(*io_priv), GFP_KERNEL | GFP_DMA);
+	io_priv = kzalloc_obj(*io_priv, GFP_KERNEL | GFP_DMA);
 	if (!io_priv)
 		goto err_priv;
 	io_priv->dma_area = dma_alloc_coherent(&sch->dev,
diff --git a/drivers/s390/cio/eadm_sch.c b/drivers/s390/cio/eadm_sch.c
index d60f7d80863a..7ce374313730 100644
--- a/drivers/s390/cio/eadm_sch.c
+++ b/drivers/s390/cio/eadm_sch.c
@@ -215,7 +215,7 @@ static int eadm_subchannel_probe(struct subchannel *sch)
 	struct eadm_private *private;
 	int ret;

-	private = kzalloc(sizeof(*private), GFP_KERNEL | GFP_DMA);
+	private = kzalloc_obj(*private, GFP_KERNEL | GFP_DMA);
 	if (!private)
 		return -ENOMEM;

diff --git a/drivers/s390/cio/qdio_debug.c b/drivers/s390/cio/qdio_debug.c
index 4fb900f2d3d9..bbbf89a65445 100644
--- a/drivers/s390/cio/qdio_debug.c
+++ b/drivers/s390/cio/qdio_debug.c
@@ -81,7 +81,7 @@ int qdio_allocate_dbf(struct qdio_irq *irq_ptr)
 		}
 		debug_set_level(irq_ptr->debug_area, DBF_WARN);
 		DBF_DEV_EVENT(DBF_ERR, irq_ptr, "dbf created");
-		new_entry = kzalloc(sizeof(struct qdio_dbf_entry), GFP_KERNEL);
+		new_entry = kzalloc_obj(struct qdio_dbf_entry, GFP_KERNEL);
 		if (!new_entry) {
 			debug_unregister(irq_ptr->debug_area);
 			return -ENOMEM;
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index 7dd967165025..7e594a800525 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -965,7 +965,7 @@ int qdio_allocate(struct ccw_device *cdev, unsigned int no_input_qs,
 	if (!irq_ptr)
 		return -ENOMEM;

-	irq_ptr->ccw = kmalloc(sizeof(*irq_ptr->ccw), GFP_KERNEL | GFP_DMA);
+	irq_ptr->ccw = kmalloc_obj(*irq_ptr->ccw, GFP_KERNEL | GFP_DMA);
 	if (!irq_ptr->ccw)
 		goto err_ccw;

diff --git a/drivers/s390/cio/qdio_thinint.c b/drivers/s390/cio/qdio_thinint.c
index f931954910c5..d3e263fedbca 100644
--- a/drivers/s390/cio/qdio_thinint.c
+++ b/drivers/s390/cio/qdio_thinint.c
@@ -204,8 +204,8 @@ int __init qdio_thinint_init(void)
 {
 	int rc;

-	q_indicators = kcalloc(TIQDIO_NR_INDICATORS, sizeof(struct indicator_t),
-			       GFP_KERNEL);
+	q_indicators = kzalloc_objs(struct indicator_t, TIQDIO_NR_INDICATORS,
+				    GFP_KERNEL);
 	if (!q_indicators)
 		return -ENOMEM;

diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c
index 9b4da237a0ed..22da5887e0ab 100644
--- a/drivers/s390/cio/scm.c
+++ b/drivers/s390/cio/scm.c
@@ -207,7 +207,7 @@ static int scm_add(struct chsc_scm_info *scm_info, size_t num)
 			put_device(&scmdev->dev);
 			continue;
 		}
-		scmdev = kzalloc(sizeof(*scmdev), GFP_KERNEL);
+		scmdev = kzalloc_obj(*scmdev, GFP_KERNEL);
 		if (!scmdev)
 			return -ENODEV;
 		scmdev_setup(scmdev, sale, scm_info->is, scm_info->mbc);
diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c
index 5f6e10225627..62c9c005b542 100644
--- a/drivers/s390/cio/vfio_ccw_cp.c
+++ b/drivers/s390/cio/vfio_ccw_cp.c
@@ -65,11 +65,11 @@ static int page_array_alloc(struct page_array *pa, unsigned int len)

 	pa->pa_nr = len;

-	pa->pa_iova = kcalloc(len, sizeof(*pa->pa_iova), GFP_KERNEL);
+	pa->pa_iova = kzalloc_objs(*pa->pa_iova, len, GFP_KERNEL);
 	if (!pa->pa_iova)
 		return -ENOMEM;

-	pa->pa_page = kcalloc(len, sizeof(*pa->pa_page), GFP_KERNEL);
+	pa->pa_page = kzalloc_objs(*pa->pa_page, len, GFP_KERNEL);
 	if (!pa->pa_page) {
 		kfree(pa->pa_iova);
 		return -ENOMEM;
@@ -319,15 +319,15 @@ static struct ccwchain *ccwchain_alloc(struct channel_program *cp, int len)
 {
 	struct ccwchain *chain;

-	chain = kzalloc(sizeof(*chain), GFP_KERNEL);
+	chain = kzalloc_obj(*chain, GFP_KERNEL);
 	if (!chain)
 		return NULL;

-	chain->ch_ccw = kcalloc(len, sizeof(*chain->ch_ccw), GFP_DMA | GFP_KERNEL);
+	chain->ch_ccw = kzalloc_objs(*chain->ch_ccw, len, GFP_DMA | GFP_KERNEL);
 	if (!chain->ch_ccw)
 		goto out_err;

-	chain->ch_pa = kcalloc(len, sizeof(*chain->ch_pa), GFP_KERNEL);
+	chain->ch_pa = kzalloc_objs(*chain->ch_pa, len, GFP_KERNEL);
 	if (!chain->ch_pa)
 		goto out_err;

@@ -516,7 +516,7 @@ static dma64_t *get_guest_idal(struct ccw1 *ccw, struct channel_program *cp, int
 	int idaw_mask = ~(idaw_size - 1);
 	int i, ret;

-	idaws = kcalloc(idaw_nr, sizeof(*idaws), GFP_DMA | GFP_KERNEL);
+	idaws = kzalloc_objs(*idaws, idaw_nr, GFP_DMA | GFP_KERNEL);
 	if (!idaws)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/s390/cio/vfio_ccw_drv.c b/drivers/s390/cio/vfio_ccw_drv.c
index 6ff5c9cfb7ed..db0bed2db4eb 100644
--- a/drivers/s390/cio/vfio_ccw_drv.c
+++ b/drivers/s390/cio/vfio_ccw_drv.c
@@ -171,7 +171,7 @@ static int vfio_ccw_sch_probe(struct subchannel *sch)
 		return -ENODEV;
 	}

-	parent = kzalloc(sizeof(*parent), GFP_KERNEL);
+	parent = kzalloc_obj(*parent, GFP_KERNEL);
 	if (!parent)
 		return -ENOMEM;

@@ -281,7 +281,7 @@ static void vfio_ccw_queue_crw(struct vfio_ccw_private *private,
 	 * carry on.  The guest will either see a later one or
 	 * learn when it issues its own store subchannel.
 	 */
-	crw = kzalloc(sizeof(*crw), GFP_ATOMIC);
+	crw = kzalloc_obj(*crw, GFP_ATOMIC);
 	if (!crw)
 		return;

diff --git a/drivers/s390/cio/vfio_ccw_ops.c b/drivers/s390/cio/vfio_ccw_ops.c
index a596f6013019..ef7becf744da 100644
--- a/drivers/s390/cio/vfio_ccw_ops.c
+++ b/drivers/s390/cio/vfio_ccw_ops.c
@@ -55,8 +55,8 @@ static int vfio_ccw_mdev_init_dev(struct vfio_device *vdev)
 	INIT_WORK(&private->io_work, vfio_ccw_sch_io_todo);
 	INIT_WORK(&private->crw_work, vfio_ccw_crw_todo);

-	private->cp.guest_cp = kcalloc(CCWCHAIN_LEN_MAX, sizeof(struct ccw1),
-				       GFP_KERNEL);
+	private->cp.guest_cp = kzalloc_objs(struct ccw1, CCWCHAIN_LEN_MAX,
+					    GFP_KERNEL);
 	if (!private->cp.guest_cp)
 		goto out_free_private;

diff --git a/drivers/s390/crypto/ap_card.c b/drivers/s390/crypto/ap_card.c
index 8b0ad6f582ec..bf6ae6e099e9 100644
--- a/drivers/s390/crypto/ap_card.c
+++ b/drivers/s390/crypto/ap_card.c
@@ -233,7 +233,7 @@ struct ap_card *ap_card_create(int id, struct ap_tapq_hwinfo hwinfo,
 {
 	struct ap_card *ac;

-	ac = kzalloc(sizeof(*ac), GFP_KERNEL);
+	ac = kzalloc_obj(*ac, GFP_KERNEL);
 	if (!ac)
 		return NULL;
 	ac->ap_dev.device.release = ap_card_device_release;
diff --git a/drivers/s390/crypto/ap_queue.c b/drivers/s390/crypto/ap_queue.c
index a80ab87cad62..cf349627a19c 100644
--- a/drivers/s390/crypto/ap_queue.c
+++ b/drivers/s390/crypto/ap_queue.c
@@ -1183,7 +1183,7 @@ struct ap_queue *ap_queue_create(ap_qid_t qid, struct ap_card *ac)
 {
 	struct ap_queue *aq;

-	aq = kzalloc(sizeof(*aq), GFP_KERNEL);
+	aq = kzalloc_obj(*aq, GFP_KERNEL);
 	if (!aq)
 		return NULL;
 	aq->card = ac;
diff --git a/drivers/s390/crypto/pkey_api.c b/drivers/s390/crypto/pkey_api.c
index ad1cd699f53b..0f0938cd96d2 100644
--- a/drivers/s390/crypto/pkey_api.c
+++ b/drivers/s390/crypto/pkey_api.c
@@ -223,7 +223,7 @@ static int pkey_ioctl_findcard(struct pkey_findcard __user *ufc)
 		return -EFAULT;

 	nr_apqns = MAXAPQNSINLIST;
-	apqns = kmalloc_array(nr_apqns, sizeof(struct pkey_apqn), GFP_KERNEL);
+	apqns = kmalloc_objs(struct pkey_apqn, nr_apqns, GFP_KERNEL);
 	if (!apqns)
 		return -ENOMEM;

@@ -569,9 +569,7 @@ static int pkey_ioctl_apqns4k(struct pkey_apqns4key __user *uak)
 		return -EFAULT;
 	nr_apqns = kak.apqn_entries;
 	if (nr_apqns) {
-		apqns = kmalloc_array(nr_apqns,
-				      sizeof(struct pkey_apqn),
-				      GFP_KERNEL);
+		apqns = kmalloc_objs(struct pkey_apqn, nr_apqns, GFP_KERNEL);
 		if (!apqns)
 			return -ENOMEM;
 	}
@@ -620,9 +618,7 @@ static int pkey_ioctl_apqns4kt(struct pkey_apqns4keytype __user *uat)
 		return -EFAULT;
 	nr_apqns = kat.apqn_entries;
 	if (nr_apqns) {
-		apqns = kmalloc_array(nr_apqns,
-				      sizeof(struct pkey_apqn),
-				      GFP_KERNEL);
+		apqns = kmalloc_objs(struct pkey_apqn, nr_apqns, GFP_KERNEL);
 		if (!apqns)
 			return -ENOMEM;
 	}
diff --git a/drivers/s390/crypto/pkey_uv.c b/drivers/s390/crypto/pkey_uv.c
index 6cd3c49384b5..a21594c64be6 100644
--- a/drivers/s390/crypto/pkey_uv.c
+++ b/drivers/s390/crypto/pkey_uv.c
@@ -291,7 +291,7 @@ static int __init pkey_uv_init(void)
 	if (!test_bit_inv(BIT_UVC_CMD_RETR_SECRET, uv_info.inst_calls_list))
 		return -ENODEV;

-	uv_list = kmalloc(sizeof(*uv_list), GFP_KERNEL);
+	uv_list = kmalloc_obj(*uv_list, GFP_KERNEL);
 	if (!uv_list)
 		return -ENOMEM;

diff --git a/drivers/s390/crypto/vfio_ap_drv.c b/drivers/s390/crypto/vfio_ap_drv.c
index 67a807e2e75b..5146a3db53fd 100644
--- a/drivers/s390/crypto/vfio_ap_drv.c
+++ b/drivers/s390/crypto/vfio_ap_drv.c
@@ -96,7 +96,7 @@ static int vfio_ap_matrix_dev_create(void)
 	if (ret)
 		goto bus_register_err;

-	matrix_dev = kzalloc(sizeof(*matrix_dev), GFP_KERNEL);
+	matrix_dev = kzalloc_obj(*matrix_dev, GFP_KERNEL);
 	if (!matrix_dev) {
 		ret = -ENOMEM;
 		goto matrix_alloc_err;
diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c
index 48da32ad0493..b19068ffcdc8 100644
--- a/drivers/s390/crypto/vfio_ap_ops.c
+++ b/drivers/s390/crypto/vfio_ap_ops.c
@@ -2424,7 +2424,7 @@ int vfio_ap_mdev_probe_queue(struct ap_device *apdev)
 	if (ret)
 		return ret;

-	q = kzalloc(sizeof(*q), GFP_KERNEL);
+	q = kzalloc_obj(*q, GFP_KERNEL);
 	if (!q) {
 		ret = -ENOMEM;
 		goto err_remove_group;
diff --git a/drivers/s390/crypto/zcrypt_api.c b/drivers/s390/crypto/zcrypt_api.c
index c796773fbce8..75e1d69346ae 100644
--- a/drivers/s390/crypto/zcrypt_api.c
+++ b/drivers/s390/crypto/zcrypt_api.c
@@ -397,7 +397,7 @@ static int zcdn_create(const char *name)
 	}

 	/* alloc and prepare a new zcdn device */
-	zcdndev = kzalloc(sizeof(*zcdndev), GFP_KERNEL);
+	zcdndev = kzalloc_obj(*zcdndev, GFP_KERNEL);
 	if (!zcdndev) {
 		rc = -ENOMEM;
 		goto unlockout;
@@ -1065,7 +1065,7 @@ static long _zcrypt_send_ep11_cprb(u32 xflags, struct ap_perms *perms,
 	rc = -ENOMEM;
 	if (target_num != 0) {
 		if (userspace) {
-			targets = kcalloc(target_num, sizeof(*targets), GFP_KERNEL);
+			targets = kzalloc_objs(*targets, target_num, GFP_KERNEL);
 			if (!targets)
 				goto out;
 			if (copy_from_user(targets, xcrb->targets,
@@ -1627,9 +1627,8 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
 		size_t total_size = MAX_ZDEV_ENTRIES_EXT
 			* sizeof(struct zcrypt_device_status_ext);

-		device_status = kvcalloc(MAX_ZDEV_ENTRIES_EXT,
-					 sizeof(struct zcrypt_device_status_ext),
-					 GFP_KERNEL);
+		device_status = kvzalloc_objs(struct zcrypt_device_status_ext,
+					      MAX_ZDEV_ENTRIES_EXT, GFP_KERNEL);
 		if (!device_status)
 			return -ENOMEM;
 		zcrypt_device_status_mask_ext(device_status,
diff --git a/drivers/s390/crypto/zcrypt_card.c b/drivers/s390/crypto/zcrypt_card.c
index 6dea702a5cac..f905132ebad4 100644
--- a/drivers/s390/crypto/zcrypt_card.c
+++ b/drivers/s390/crypto/zcrypt_card.c
@@ -90,7 +90,7 @@ static ssize_t online_store(struct device *dev,
 	list_for_each_entry(zq, &zc->zqueues, list)
 		maxzqs++;
 	if (maxzqs > 0)
-		zq_uelist = kcalloc(maxzqs + 1, sizeof(*zq_uelist), GFP_ATOMIC);
+		zq_uelist = kzalloc_objs(*zq_uelist, maxzqs + 1, GFP_ATOMIC);
 	list_for_each_entry(zq, &zc->zqueues, list)
 		if (zcrypt_queue_force_online(zq, online))
 			if (zq_uelist) {
@@ -138,7 +138,7 @@ struct zcrypt_card *zcrypt_card_alloc(void)
 {
 	struct zcrypt_card *zc;

-	zc = kzalloc(sizeof(*zc), GFP_KERNEL);
+	zc = kzalloc_obj(*zc, GFP_KERNEL);
 	if (!zc)
 		return NULL;
 	INIT_LIST_HEAD(&zc->list);
diff --git a/drivers/s390/crypto/zcrypt_queue.c b/drivers/s390/crypto/zcrypt_queue.c
index a173d32eb6e8..73a5987499c9 100644
--- a/drivers/s390/crypto/zcrypt_queue.c
+++ b/drivers/s390/crypto/zcrypt_queue.c
@@ -115,7 +115,7 @@ struct zcrypt_queue *zcrypt_queue_alloc(size_t reply_buf_size)
 {
 	struct zcrypt_queue *zq;

-	zq = kzalloc(sizeof(*zq), GFP_KERNEL);
+	zq = kzalloc_obj(*zq, GFP_KERNEL);
 	if (!zq)
 		return NULL;
 	zq->reply.msg = kmalloc(reply_buf_size, GFP_KERNEL);
diff --git a/drivers/s390/net/ctcm_main.c b/drivers/s390/net/ctcm_main.c
index 3d7ccf2366a0..22fbe94e5a7e 100644
--- a/drivers/s390/net/ctcm_main.c
+++ b/drivers/s390/net/ctcm_main.c
@@ -1268,7 +1268,7 @@ static int ctcm_probe_device(struct ccwgroup_device *cgdev)
 	if (!get_device(&cgdev->dev))
 		return -ENODEV;

-	priv = kzalloc(sizeof(struct ctcm_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct ctcm_priv, GFP_KERNEL);
 	if (!priv) {
 		CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR,
 			"%s: memory allocation failure",
@@ -1307,7 +1307,7 @@ static int add_channel(struct ccw_device *cdev, enum ctcm_channel_types type,
 		"%s(%s), type %d, proto %d",
 			__func__, dev_name(&cdev->dev),	type, priv->protocol);

-	ch = kzalloc(sizeof(struct channel), GFP_KERNEL);
+	ch = kzalloc_obj(struct channel, GFP_KERNEL);
 	if (ch == NULL)
 		return -ENOMEM;

@@ -1327,7 +1327,7 @@ static int add_channel(struct ccw_device *cdev, enum ctcm_channel_types type,
 	} else
 		ccw_num = 8;

-	ch->ccw = kcalloc(ccw_num, sizeof(struct ccw1), GFP_KERNEL | GFP_DMA);
+	ch->ccw = kzalloc_objs(struct ccw1, ccw_num, GFP_KERNEL | GFP_DMA);
 	if (ch->ccw == NULL)
 					goto nomem_return;

@@ -1408,7 +1408,7 @@ static int add_channel(struct ccw_device *cdev, enum ctcm_channel_types type,

 	fsm_newstate(ch->fsm, CTC_STATE_IDLE);

-	ch->irb = kzalloc(sizeof(struct irb), GFP_KERNEL);
+	ch->irb = kzalloc_obj(struct irb, GFP_KERNEL);
 	if (ch->irb == NULL)
 				goto nomem_return;

diff --git a/drivers/s390/net/ctcm_mpc.c b/drivers/s390/net/ctcm_mpc.c
index 0f329fb514ee..35662bd25c3c 100644
--- a/drivers/s390/net/ctcm_mpc.c
+++ b/drivers/s390/net/ctcm_mpc.c
@@ -1163,7 +1163,7 @@ static void ctcmpc_unpack_skb(struct channel *ch, struct sk_buff *pskb)
 			skb_pull(pskb, new_len); /* point to next PDU */
 		}
 	} else {
-		mpcginfo = kmalloc(sizeof(struct mpcg_info), GFP_ATOMIC);
+		mpcginfo = kmalloc_obj(struct mpcg_info, GFP_ATOMIC);
 		if (mpcginfo == NULL)
 					goto done;

@@ -1259,7 +1259,7 @@ struct mpc_group *ctcmpc_init_mpc_group(struct ctcm_priv *priv)
 	CTCM_DBF_TEXT_(MPC_SETUP, CTC_DBF_INFO,
 			"Enter %s(%p)", CTCM_FUNTAIL, priv);

-	grp = kzalloc(sizeof(struct mpc_group), GFP_KERNEL);
+	grp = kzalloc_obj(struct mpc_group, GFP_KERNEL);
 	if (grp == NULL)
 		return NULL;

diff --git a/drivers/s390/net/fsm.c b/drivers/s390/net/fsm.c
index 58f8e2fb6d54..9b8622aef807 100644
--- a/drivers/s390/net/fsm.c
+++ b/drivers/s390/net/fsm.c
@@ -23,7 +23,7 @@ init_fsm(char *name, const char **state_names, const char **event_names, int nr_
 	fsm_function_t *m;
 	fsm *f;

-	this = kzalloc(sizeof(fsm_instance), order);
+	this = kzalloc_obj(fsm_instance, order);
 	if (this == NULL) {
 		printk(KERN_WARNING
 			"fsm(%s): init_fsm: Couldn't alloc instance\n", name);
@@ -32,7 +32,7 @@ init_fsm(char *name, const char **state_names, const char **event_names, int nr_
 	strscpy(this->name, name, sizeof(this->name));
 	init_waitqueue_head(&this->wait_q);

-	f = kzalloc(sizeof(fsm), order);
+	f = kzalloc_obj(fsm, order);
 	if (f == NULL) {
 		printk(KERN_WARNING
 			"fsm(%s): init_fsm: Couldn't alloc fsm\n", name);
@@ -45,7 +45,7 @@ init_fsm(char *name, const char **state_names, const char **event_names, int nr_
 	f->state_names = state_names;
 	this->f = f;

-	m = kcalloc(nr_states*nr_events, sizeof(fsm_function_t), order);
+	m = kzalloc_objs(fsm_function_t, nr_states * nr_events, order);
 	if (m == NULL) {
 		printk(KERN_WARNING
 			"fsm(%s): init_fsm: Couldn't alloc jumptable\n", name);
diff --git a/drivers/s390/net/ism_drv.c b/drivers/s390/net/ism_drv.c
index 8b8e4f06be0f..c9808772d621 100644
--- a/drivers/s390/net/ism_drv.c
+++ b/drivers/s390/net/ism_drv.c
@@ -598,7 +598,7 @@ static int ism_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	struct ism_dev *ism;
 	int ret;

-	ism = kzalloc(sizeof(*ism), GFP_KERNEL);
+	ism = kzalloc_obj(*ism, GFP_KERNEL);
 	if (!ism)
 		return -ENOMEM;

diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index 1c80e8ca67b5..41041abd3d1b 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -225,7 +225,7 @@ static struct qeth_buffer_pool_entry *qeth_alloc_pool_entry(unsigned int pages)
 	struct qeth_buffer_pool_entry *entry;
 	unsigned int i;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return NULL;

@@ -324,7 +324,7 @@ static void qeth_free_qdio_queue(struct qeth_qdio_q *q)

 static struct qeth_qdio_q *qeth_alloc_qdio_queue(void)
 {
-	struct qeth_qdio_q *q = kzalloc(sizeof(*q), GFP_KERNEL);
+	struct qeth_qdio_q *q = kzalloc_obj(*q, GFP_KERNEL);
 	int i;

 	if (!q)
@@ -559,7 +559,7 @@ static void qeth_add_local_addrs4(struct qeth_card *card,
 		if (duplicate)
 			continue;

-		addr = kmalloc(sizeof(*addr), GFP_ATOMIC);
+		addr = kmalloc_obj(*addr, GFP_ATOMIC);
 		if (!addr) {
 			dev_err(&card->gdev->dev,
 				"Failed to allocate local addr object. Traffic to %pI4 might suffer.\n",
@@ -602,7 +602,7 @@ static void qeth_add_local_addrs6(struct qeth_card *card,
 		if (duplicate)
 			continue;

-		addr = kmalloc(sizeof(*addr), GFP_ATOMIC);
+		addr = kmalloc_obj(*addr, GFP_ATOMIC);
 		if (!addr) {
 			dev_err(&card->gdev->dev,
 				"Failed to allocate local addr object. Traffic to %pI6c might suffer.\n",
@@ -930,7 +930,7 @@ static struct qeth_cmd_buffer *qeth_alloc_cmd(struct qeth_channel *channel,
 	if (length > QETH_BUFSIZE)
 		return NULL;

-	iob = kzalloc(sizeof(*iob), GFP_KERNEL);
+	iob = kzalloc_obj(*iob, GFP_KERNEL);
 	if (!iob)
 		return NULL;

@@ -1626,7 +1626,7 @@ static struct qeth_card *qeth_alloc_card(struct ccwgroup_device *gdev)
 	struct qeth_card *card;

 	QETH_DBF_TEXT(SETUP, 2, "alloccrd");
-	card = kzalloc(sizeof(*card), GFP_KERNEL);
+	card = kzalloc_obj(*card, GFP_KERNEL);
 	if (!card)
 		goto out;
 	QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
@@ -1837,8 +1837,8 @@ static enum qeth_discipline_id qeth_vm_detect_layer(struct qeth_card *card)
 	if (rc)
 		goto out;

-	request = kzalloc(sizeof(*request), GFP_KERNEL | GFP_DMA);
-	response = kzalloc(sizeof(*response), GFP_KERNEL | GFP_DMA);
+	request = kzalloc_obj(*request, GFP_KERNEL | GFP_DMA);
+	response = kzalloc_obj(*response, GFP_KERNEL | GFP_DMA);
 	if (!request || !response) {
 		rc = -ENOMEM;
 		goto out;
@@ -2591,7 +2591,7 @@ static void qeth_free_output_queue(struct qeth_qdio_out_q *q)

 static struct qeth_qdio_out_q *qeth_alloc_output_queue(void)
 {
-	struct qeth_qdio_out_q *q = kzalloc(sizeof(*q), GFP_KERNEL);
+	struct qeth_qdio_out_q *q = kzalloc_obj(*q, GFP_KERNEL);
 	unsigned int i;

 	if (!q)
@@ -4953,8 +4953,8 @@ int qeth_vm_request_mac(struct qeth_card *card)

 	QETH_CARD_TEXT(card, 2, "vmreqmac");

-	request = kzalloc(sizeof(*request), GFP_KERNEL | GFP_DMA);
-	response = kzalloc(sizeof(*response), GFP_KERNEL | GFP_DMA);
+	request = kzalloc_obj(*request, GFP_KERNEL | GFP_DMA);
+	response = kzalloc_obj(*response, GFP_KERNEL | GFP_DMA);
 	if (!request || !response) {
 		rc = -ENOMEM;
 		goto out;
@@ -6249,7 +6249,7 @@ static int qeth_add_dbf_entry(struct qeth_card *card, char *name)
 	}
 	if (debug_register_view(card->debug, &debug_hex_ascii_view))
 		goto err_dbg;
-	new_entry = kzalloc(sizeof(struct qeth_dbf_entry), GFP_KERNEL);
+	new_entry = kzalloc_obj(struct qeth_dbf_entry, GFP_KERNEL);
 	if (!new_entry)
 		goto err_dbg;
 	strscpy(new_entry->dbf_name, name, sizeof(new_entry->dbf_name));
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index 7498a83b1f06..a9e7d1d637a2 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -442,7 +442,7 @@ static void qeth_l2_add_mac(struct qeth_card *card, struct netdev_hw_addr *ha)
 		}
 	}

-	mac = kzalloc(sizeof(struct qeth_mac), GFP_ATOMIC);
+	mac = kzalloc_obj(struct qeth_mac, GFP_ATOMIC);
 	if (!mac)
 		return;

@@ -827,7 +827,7 @@ static int qeth_l2_br2dev_queue_work(struct net_device *brdev,
 	struct qeth_l2_br2dev_event_work *worker_data;
 	struct qeth_card *card;

-	worker_data = kzalloc(sizeof(*worker_data), GFP_ATOMIC);
+	worker_data = kzalloc_obj(*worker_data, GFP_ATOMIC);
 	if (!worker_data)
 		return -ENOMEM;
 	INIT_WORK(&worker_data->work, qeth_l2_br2dev_worker);
@@ -1348,7 +1348,7 @@ static void qeth_bridge_state_change(struct qeth_card *card,
 		return;
 	}

-	data = kzalloc(sizeof(*data), GFP_ATOMIC);
+	data = kzalloc_obj(*data, GFP_ATOMIC);
 	if (!data) {
 		QETH_CARD_TEXT(card, 2, "BPSalloc");
 		return;
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
index 027bc346232f..1542bfc9f561 100644
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -2163,7 +2163,7 @@ static int qeth_l3_ip6_event(struct notifier_block *this,
 	if (!qeth_is_supported(card, IPA_IPV6))
 		return NOTIFY_DONE;

-	ip_work = kmalloc(sizeof(*ip_work), GFP_ATOMIC);
+	ip_work = kmalloc_obj(*ip_work, GFP_ATOMIC);
 	if (!ip_work)
 		return NOTIFY_DONE;

diff --git a/drivers/s390/net/qeth_l3_sys.c b/drivers/s390/net/qeth_l3_sys.c
index a6b64228ead2..db0985fe35b3 100644
--- a/drivers/s390/net/qeth_l3_sys.c
+++ b/drivers/s390/net/qeth_l3_sys.c
@@ -431,7 +431,7 @@ static ssize_t qeth_l3_dev_ipato_add_store(const char *buf, size_t count,
 	if (rc)
 		return rc;

-	ipatoe = kzalloc(sizeof(struct qeth_ipato_entry), GFP_KERNEL);
+	ipatoe = kzalloc_obj(struct qeth_ipato_entry, GFP_KERNEL);
 	if (!ipatoe)
 		return -ENOMEM;

diff --git a/drivers/s390/net/smsgiucv.c b/drivers/s390/net/smsgiucv.c
index 3dadaacc42a6..645d7edcbf2d 100644
--- a/drivers/s390/net/smsgiucv.c
+++ b/drivers/s390/net/smsgiucv.c
@@ -92,7 +92,7 @@ int smsg_register_callback(const char *prefix,
 {
 	struct smsg_callback *cb;

-	cb = kmalloc(sizeof(struct smsg_callback), GFP_KERNEL);
+	cb = kmalloc_obj(struct smsg_callback, GFP_KERNEL);
 	if (!cb)
 		return -ENOMEM;
 	cb->prefix = prefix;
diff --git a/drivers/s390/net/smsgiucv_app.c b/drivers/s390/net/smsgiucv_app.c
index 1bd0370460cd..c53305b4cb25 100644
--- a/drivers/s390/net/smsgiucv_app.c
+++ b/drivers/s390/net/smsgiucv_app.c
@@ -69,7 +69,7 @@ static struct smsg_app_event *smsg_app_event_alloc(const char *from,
 {
 	struct smsg_app_event *ev;

-	ev = kzalloc(sizeof(*ev), GFP_ATOMIC);
+	ev = kzalloc_obj(*ev, GFP_ATOMIC);
 	if (!ev)
 		return NULL;

diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
index 01f927ae61b5..f8435ea9a967 100644
--- a/drivers/s390/scsi/zfcp_aux.c
+++ b/drivers/s390/scsi/zfcp_aux.c
@@ -344,7 +344,7 @@ struct zfcp_adapter *zfcp_adapter_enqueue(struct ccw_device *ccw_device)
 	if (!get_device(&ccw_device->dev))
 		return ERR_PTR(-ENODEV);

-	adapter = kzalloc(sizeof(struct zfcp_adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(struct zfcp_adapter, GFP_KERNEL);
 	if (!adapter) {
 		put_device(&ccw_device->dev);
 		return ERR_PTR(-ENOMEM);
@@ -518,7 +518,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
 		goto err_put;
 	}

-	port = kzalloc(sizeof(struct zfcp_port), GFP_KERNEL);
+	port = kzalloc_obj(struct zfcp_port, GFP_KERNEL);
 	if (!port)
 		goto err_put;

diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c
index 6b5561c54e2f..37938e6903ef 100644
--- a/drivers/s390/scsi/zfcp_dbf.c
+++ b/drivers/s390/scsi/zfcp_dbf.c
@@ -816,7 +816,7 @@ int zfcp_dbf_adapter_register(struct zfcp_adapter *adapter)
 	char name[DEBUG_MAX_NAME_LEN];
 	struct zfcp_dbf *dbf;

-	dbf = kzalloc(sizeof(struct zfcp_dbf), GFP_KERNEL);
+	dbf = kzalloc_obj(struct zfcp_dbf, GFP_KERNEL);
 	if (!dbf)
 		return -ENOMEM;

diff --git a/drivers/s390/scsi/zfcp_diag.c b/drivers/s390/scsi/zfcp_diag.c
index 4d2d89d9c15a..e8c9077b4e96 100644
--- a/drivers/s390/scsi/zfcp_diag.c
+++ b/drivers/s390/scsi/zfcp_diag.c
@@ -36,7 +36,7 @@ int zfcp_diag_adapter_setup(struct zfcp_adapter *const adapter)
 	struct zfcp_diag_adapter *diag;
 	struct zfcp_diag_header *hdr;

-	diag = kzalloc(sizeof(*diag), GFP_KERNEL);
+	diag = kzalloc_obj(*diag, GFP_KERNEL);
 	if (diag == NULL)
 		return -ENOMEM;

diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c
index 78ca394e1195..c212ca0924f8 100644
--- a/drivers/s390/scsi/zfcp_fc.c
+++ b/drivers/s390/scsi/zfcp_fc.c
@@ -128,7 +128,7 @@ void zfcp_fc_enqueue_event(struct zfcp_adapter *adapter,
 {
 	struct zfcp_fc_event *event;

-	event = kmalloc(sizeof(struct zfcp_fc_event), GFP_ATOMIC);
+	event = kmalloc_obj(struct zfcp_fc_event, GFP_ATOMIC);
 	if (!event)
 		return;

@@ -1116,7 +1116,7 @@ int zfcp_fc_gs_setup(struct zfcp_adapter *adapter)
 {
 	struct zfcp_fc_wka_ports *wka_ports;

-	wka_ports = kzalloc(sizeof(struct zfcp_fc_wka_ports), GFP_KERNEL);
+	wka_ports = kzalloc_obj(struct zfcp_fc_wka_ports, GFP_KERNEL);
 	if (!wka_ports)
 		return -ENOMEM;

diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index 9418086368c3..d407f16e77ef 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -806,7 +806,7 @@ static struct zfcp_fsf_req *zfcp_fsf_alloc(mempool_t *pool)
 	if (likely(pool))
 		req = mempool_alloc(pool, GFP_ATOMIC);
 	else
-		req = kmalloc(sizeof(*req), GFP_ATOMIC);
+		req = kmalloc_obj(*req, GFP_ATOMIC);

 	if (unlikely(!req))
 		return NULL;
diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c
index e15a1eabe42d..3febefc80ccf 100644
--- a/drivers/s390/scsi/zfcp_qdio.c
+++ b/drivers/s390/scsi/zfcp_qdio.c
@@ -549,7 +549,7 @@ int zfcp_qdio_setup(struct zfcp_adapter *adapter)
 {
 	struct zfcp_qdio *qdio;

-	qdio = kzalloc(sizeof(struct zfcp_qdio), GFP_KERNEL);
+	qdio = kzalloc_obj(struct zfcp_qdio, GFP_KERNEL);
 	if (!qdio)
 		return -ENOMEM;

diff --git a/drivers/s390/scsi/zfcp_reqlist.h b/drivers/s390/scsi/zfcp_reqlist.h
index 59fbb1b128cb..2037424f9981 100644
--- a/drivers/s390/scsi/zfcp_reqlist.h
+++ b/drivers/s390/scsi/zfcp_reqlist.h
@@ -42,7 +42,7 @@ static inline struct zfcp_reqlist *zfcp_reqlist_alloc(void)
 	size_t i;
 	struct zfcp_reqlist *rl;

-	rl = kzalloc(sizeof(struct zfcp_reqlist), GFP_KERNEL);
+	rl = kzalloc_obj(struct zfcp_reqlist, GFP_KERNEL);
 	if (!rl)
 		return NULL;

diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
index 634bd8dceedd..f78df15b384a 100644
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -542,7 +542,7 @@ zfcp_scsi_init_fc_host_stats(struct zfcp_adapter *adapter)
 	struct fc_host_statistics *fc_stats;

 	if (!adapter->fc_stats) {
-		fc_stats = kmalloc(sizeof(*fc_stats), GFP_KERNEL);
+		fc_stats = kmalloc_obj(*fc_stats, GFP_KERNEL);
 		if (!fc_stats)
 			return NULL;
 		adapter->fc_stats = fc_stats; /* freed in adapter_release */
@@ -622,7 +622,7 @@ zfcp_scsi_get_fc_host_stats(struct Scsi_Host *host)
 	if (!fc_stats)
 		return NULL;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;

@@ -651,7 +651,7 @@ static void zfcp_scsi_reset_fc_host_stats(struct Scsi_Host *shost)
 	int ret;

 	adapter = (struct zfcp_adapter *)shost->hostdata[0];
-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return;

diff --git a/drivers/s390/scsi/zfcp_sysfs.c b/drivers/s390/scsi/zfcp_sysfs.c
index 10a3840b2b6b..33ea87286c35 100644
--- a/drivers/s390/scsi/zfcp_sysfs.c
+++ b/drivers/s390/scsi/zfcp_sysfs.c
@@ -708,7 +708,7 @@ static ssize_t zfcp_sysfs_adapter_util_show(struct device *dev,
 	if (!(adapter->adapter_features & FSF_FEATURE_MEASUREMENT_DATA))
 		return -EOPNOTSUPP;

-	qtcb_port = kzalloc(sizeof(struct fsf_qtcb_bottom_port), GFP_KERNEL);
+	qtcb_port = kzalloc_obj(struct fsf_qtcb_bottom_port, GFP_KERNEL);
 	if (!qtcb_port)
 		return -ENOMEM;

@@ -733,8 +733,7 @@ static int zfcp_sysfs_adapter_ex_config(struct device *dev,
 	if (!(adapter->adapter_features & FSF_FEATURE_MEASUREMENT_DATA))
 		return -EOPNOTSUPP;

-	qtcb_config = kzalloc(sizeof(struct fsf_qtcb_bottom_config),
-			      GFP_KERNEL);
+	qtcb_config = kzalloc_obj(struct fsf_qtcb_bottom_config, GFP_KERNEL);
 	if (!qtcb_config)
 		return -ENOMEM;

diff --git a/drivers/s390/scsi/zfcp_unit.c b/drivers/s390/scsi/zfcp_unit.c
index 4ef2a635d34f..0f47643cd5d9 100644
--- a/drivers/s390/scsi/zfcp_unit.c
+++ b/drivers/s390/scsi/zfcp_unit.c
@@ -137,7 +137,7 @@ int zfcp_unit_add(struct zfcp_port *port, u64 fcp_lun)
 		goto out;
 	}

-	unit = kzalloc(sizeof(struct zfcp_unit), GFP_KERNEL);
+	unit = kzalloc_obj(struct zfcp_unit, GFP_KERNEL);
 	if (!unit) {
 		retval = -ENOMEM;
 		goto out;
diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c
index 1653cc668dcf..ae36a1f410a5 100644
--- a/drivers/s390/virtio/virtio_ccw.c
+++ b/drivers/s390/virtio/virtio_ccw.c
@@ -277,7 +277,7 @@ static struct airq_info *new_airq_info(int index)
 	struct airq_info *info;
 	int rc;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return NULL;
 	rwlock_init(&info->lock);
@@ -566,7 +566,7 @@ static struct virtqueue *virtio_ccw_setup_vq(struct virtio_device *vdev,
 		notify = virtio_ccw_kvm_notify;

 	/* Allocate queue. */
-	info = kzalloc(sizeof(struct virtio_ccw_vq_info), GFP_KERNEL);
+	info = kzalloc_obj(struct virtio_ccw_vq_info, GFP_KERNEL);
 	if (!info) {
 		dev_warn(&vcdev->cdev->dev, "no info\n");
 		err = -ENOMEM;
@@ -1370,7 +1370,7 @@ static int virtio_ccw_online(struct ccw_device *cdev)
 	struct virtio_ccw_device *vcdev;
 	unsigned long flags;

-	vcdev = kzalloc(sizeof(*vcdev), GFP_KERNEL);
+	vcdev = kzalloc_obj(*vcdev, GFP_KERNEL);
 	if (!vcdev) {
 		dev_warn(&cdev->dev, "Could not get memory for virtio\n");
 		ret = -ENOMEM;
diff --git a/drivers/sbus/char/bbc_envctrl.c b/drivers/sbus/char/bbc_envctrl.c
index 23af4edd295b..9f9cb764d8be 100644
--- a/drivers/sbus/char/bbc_envctrl.c
+++ b/drivers/sbus/char/bbc_envctrl.c
@@ -448,7 +448,7 @@ static void attach_one_temp(struct bbc_i2c_bus *bp, struct platform_device *op,
 {
 	struct bbc_cpu_temperature *tp;

-	tp = kzalloc(sizeof(*tp), GFP_KERNEL);
+	tp = kzalloc_obj(*tp, GFP_KERNEL);
 	if (!tp)
 		return;

@@ -496,7 +496,7 @@ static void attach_one_fan(struct bbc_i2c_bus *bp, struct platform_device *op,
 {
 	struct bbc_fan_control *fp;

-	fp = kzalloc(sizeof(*fp), GFP_KERNEL);
+	fp = kzalloc_obj(*fp, GFP_KERNEL);
 	if (!fp)
 		return;

diff --git a/drivers/sbus/char/bbc_i2c.c b/drivers/sbus/char/bbc_i2c.c
index 90e71ce4bab8..3a4b36514485 100644
--- a/drivers/sbus/char/bbc_i2c.c
+++ b/drivers/sbus/char/bbc_i2c.c
@@ -92,7 +92,7 @@ struct bbc_i2c_client *bbc_i2c_attach(struct bbc_i2c_bus *bp, struct platform_de
 	struct bbc_i2c_client *client;
 	const u32 *reg;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return NULL;
 	client->bp = bp;
@@ -298,7 +298,7 @@ static struct bbc_i2c_bus * attach_one_i2c(struct platform_device *op, int index
 	struct device_node *dp;
 	int entry;

-	bp = kzalloc(sizeof(*bp), GFP_KERNEL);
+	bp = kzalloc_obj(*bp, GFP_KERNEL);
 	if (!bp)
 		return NULL;

diff --git a/drivers/sbus/char/openprom.c b/drivers/sbus/char/openprom.c
index 8643947fee8e..77de0d987d44 100644
--- a/drivers/sbus/char/openprom.c
+++ b/drivers/sbus/char/openprom.c
@@ -666,7 +666,7 @@ static int openprom_open(struct inode * inode, struct file * file)
 {
 	DATA *data;

-	data = kmalloc(sizeof(DATA), GFP_KERNEL);
+	data = kmalloc_obj(DATA, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/sbus/char/oradax.c b/drivers/sbus/char/oradax.c
index a536dd6f4f7c..ff31511a6c85 100644
--- a/drivers/sbus/char/oradax.c
+++ b/drivers/sbus/char/oradax.c
@@ -643,12 +643,11 @@ static int dax_open(struct inode *inode, struct file *f)
 	struct dax_ctx *ctx = NULL;
 	int i;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (ctx == NULL)
 		goto done;

-	ctx->ccb_buf = kcalloc(DAX_MAX_CCBS, sizeof(struct dax_ccb),
-			       GFP_KERNEL);
+	ctx->ccb_buf = kzalloc_objs(struct dax_ccb, DAX_MAX_CCBS, GFP_KERNEL);
 	if (ctx->ccb_buf == NULL)
 		goto done;

diff --git a/drivers/sbus/char/uctrl.c b/drivers/sbus/char/uctrl.c
index e3dec78f51e9..e9a28ab02ddb 100644
--- a/drivers/sbus/char/uctrl.c
+++ b/drivers/sbus/char/uctrl.c
@@ -348,7 +348,7 @@ static int uctrl_probe(struct platform_device *op)
 	struct uctrl_driver *p;
 	int err = -ENOMEM;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p) {
 		printk(KERN_ERR "uctrl: Unable to allocate device struct.\n");
 		goto out;
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index e64a9a18ec6e..35bc55f8195d 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -1184,7 +1184,7 @@ static int twa_initialize_device_extension(TW_Device_Extension *tw_dev)
 	}

 	/* Allocate event info space */
-	tw_dev->event_queue[0] = kcalloc(TW_Q_LENGTH, sizeof(TW_Event), GFP_KERNEL);
+	tw_dev->event_queue[0] = kzalloc_objs(TW_Event, TW_Q_LENGTH, GFP_KERNEL);
 	if (!tw_dev->event_queue[0]) {
 		TW_PRINTK(tw_dev->host, TW_DRIVER, 0x18, "Event info memory allocation failed");
 		goto out;
diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c
index fde12475b712..cbc3af2694cb 100644
--- a/drivers/scsi/3w-sas.c
+++ b/drivers/scsi/3w-sas.c
@@ -1052,7 +1052,7 @@ static int twl_initialize_device_extension(TW_Device_Extension *tw_dev)
 	}

 	/* Allocate event info space */
-	tw_dev->event_queue[0] = kcalloc(TW_Q_LENGTH, sizeof(TW_Event), GFP_KERNEL);
+	tw_dev->event_queue[0] = kzalloc_objs(TW_Event, TW_Q_LENGTH, GFP_KERNEL);
 	if (!tw_dev->event_queue[0]) {
 		TW_PRINTK(tw_dev->host, TW_DRIVER, 0xc, "Event info memory allocation failed");
 		goto out;
diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
index 860538c6f8cb..40d640dedfdc 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -2020,8 +2020,8 @@ NCR_700_set_offset(struct scsi_target *STp, int offset)
 STATIC int
 NCR_700_sdev_init(struct scsi_device *SDp)
 {
-	SDp->hostdata = kzalloc(sizeof(struct NCR_700_Device_Parameters),
-				GFP_KERNEL);
+	SDp->hostdata = kzalloc_obj(struct NCR_700_Device_Parameters,
+				    GFP_KERNEL);

 	if (!SDp->hostdata)
 		return -ENOMEM;
diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c
index 49929d0339fa..1152a0151545 100644
--- a/drivers/scsi/BusLogic.c
+++ b/drivers/scsi/BusLogic.c
@@ -2214,15 +2214,15 @@ static int __init blogic_init(void)
 	if (blogic_probe_options.noprobe)
 		return -ENODEV;
 	blogic_probeinfo_list =
-	    kcalloc(BLOGIC_MAX_ADAPTERS, sizeof(struct blogic_probeinfo),
-			    GFP_KERNEL);
+	    kzalloc_objs(struct blogic_probeinfo, BLOGIC_MAX_ADAPTERS,
+			 GFP_KERNEL);
 	if (blogic_probeinfo_list == NULL) {
 		blogic_err("BusLogic: Unable to allocate Probe Info List\n",
 				NULL);
 		return -ENOMEM;
 	}

-	adapter = kzalloc(sizeof(struct blogic_adapter), GFP_KERNEL);
+	adapter = kzalloc_obj(struct blogic_adapter, GFP_KERNEL);
 	if (adapter == NULL) {
 		kfree(blogic_probeinfo_list);
 		blogic_err("BusLogic: Unable to allocate Prototype Host Adapter\n", NULL);
diff --git a/drivers/scsi/a4000t.c b/drivers/scsi/a4000t.c
index 75b43047a155..cf7d1f867081 100644
--- a/drivers/scsi/a4000t.c
+++ b/drivers/scsi/a4000t.c
@@ -47,8 +47,7 @@ static int __init amiga_a4000t_scsi_probe(struct platform_device *pdev)
 				"A4000T builtin SCSI"))
 		return -EBUSY;

-	hostdata = kzalloc(sizeof(struct NCR_700_Host_Parameters),
-			   GFP_KERNEL);
+	hostdata = kzalloc_obj(struct NCR_700_Host_Parameters, GFP_KERNEL);
 	if (!hostdata) {
 		dev_err(&pdev->dev, "Failed to allocate host data\n");
 		goto out_release;
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index 0be719f38377..6df882e264f6 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -492,8 +492,8 @@ int aac_get_containers(struct aac_dev *dev)

 		fsa_dev_ptr = dev->fsa_dev;

-		dev->fsa_dev = kcalloc(maximum_num_containers,
-					sizeof(*fsa_dev_ptr), GFP_KERNEL);
+		dev->fsa_dev = kzalloc_objs(*fsa_dev_ptr,
+					    maximum_num_containers, GFP_KERNEL);

 		kfree(fsa_dev_ptr);
 		fsa_dev_ptr = NULL;
@@ -820,7 +820,7 @@ int aac_probe_container(struct aac_dev *dev, int cid)
 {
 	struct aac_cmd_priv *cmd_priv;
 	struct scsi_cmnd *scsicmd = kzalloc(sizeof(*scsicmd) + sizeof(*cmd_priv), GFP_KERNEL);
-	struct scsi_device *scsidev = kzalloc(sizeof(*scsidev), GFP_KERNEL);
+	struct scsi_device *scsidev = kzalloc_obj(*scsidev, GFP_KERNEL);
 	int status;

 	if (!scsicmd || !scsidev) {
@@ -4010,7 +4010,7 @@ static int aac_convert_sgraw2(struct aac_raw_io2 *rio2, int pages, int nseg, int
 	if (aac_convert_sgl == 0)
 		return 0;

-	sge = kmalloc_array(nseg_new, sizeof(*sge), GFP_ATOMIC);
+	sge = kmalloc_objs(*sge, nseg_new, GFP_ATOMIC);
 	if (sge == NULL)
 		return -ENOMEM;

diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c
index 68240d6f27ab..f7dca5ab3f6d 100644
--- a/drivers/scsi/aacraid/commctrl.c
+++ b/drivers/scsi/aacraid/commctrl.c
@@ -169,7 +169,7 @@ static int open_getadapter_fib(struct aac_dev * dev, void __user *arg)
 	struct aac_fib_context * fibctx;
 	int status;

-	fibctx = kmalloc(sizeof(struct aac_fib_context), GFP_KERNEL);
+	fibctx = kmalloc_obj(struct aac_fib_context, GFP_KERNEL);
 	if (fibctx == NULL) {
 		status = -ENOMEM;
 	} else {
diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c
index 726c8531b7d3..e425dee827a3 100644
--- a/drivers/scsi/aacraid/comminit.c
+++ b/drivers/scsi/aacraid/comminit.c
@@ -632,7 +632,7 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)
 	 *	Ok now init the communication subsystem
 	 */

-	dev->queues = kzalloc(sizeof(struct aac_queue_block), GFP_KERNEL);
+	dev->queues = kzalloc_obj(struct aac_queue_block, GFP_KERNEL);
 	if (dev->queues == NULL) {
 		printk(KERN_ERR "Error could not allocate comm region.\n");
 		return NULL;
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index 7d9a4dce236b..3502e5e47539 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -1907,13 +1907,13 @@ static int fillup_pools(struct aac_dev *dev, struct hw_fib **hw_fib_pool,
 	hw_fib_p = hw_fib_pool;
 	fib_p = fib_pool;
 	while (hw_fib_p < &hw_fib_pool[num]) {
-		*(hw_fib_p) = kmalloc(sizeof(struct hw_fib), GFP_KERNEL);
+		*(hw_fib_p) = kmalloc_obj(struct hw_fib, GFP_KERNEL);
 		if (!(*(hw_fib_p++))) {
 			--hw_fib_p;
 			break;
 		}

-		*(fib_p) = kmalloc(sizeof(struct fib), GFP_KERNEL);
+		*(fib_p) = kmalloc_obj(struct fib, GFP_KERNEL);
 		if (!(*(fib_p++))) {
 			kfree(*(--hw_fib_p));
 			break;
@@ -2101,12 +2101,11 @@ static void aac_process_events(struct aac_dev *dev)
 		if (!num)
 			goto free_fib;

-		hw_fib_pool = kmalloc_array(num, sizeof(struct hw_fib *),
-						GFP_KERNEL);
+		hw_fib_pool = kmalloc_objs(struct hw_fib *, num, GFP_KERNEL);
 		if (!hw_fib_pool)
 			goto free_fib;

-		fib_pool = kmalloc_array(num, sizeof(struct fib *), GFP_KERNEL);
+		fib_pool = kmalloc_objs(struct fib *, num, GFP_KERNEL);
 		if (!fib_pool)
 			goto free_hw_fib_pool;

diff --git a/drivers/scsi/aacraid/dpcsup.c b/drivers/scsi/aacraid/dpcsup.c
index fbe334c59f37..169c41d080a1 100644
--- a/drivers/scsi/aacraid/dpcsup.c
+++ b/drivers/scsi/aacraid/dpcsup.c
@@ -184,7 +184,7 @@ unsigned int aac_command_normal(struct aac_queue *q)
 		 *	a fib object in order to manage the linked lists
 		 */
 		if (dev->aif_thread)
-			if((fib = kmalloc(sizeof(struct fib), GFP_ATOMIC)) == NULL)
+			if((fib = kmalloc_obj(struct fib, GFP_ATOMIC)) == NULL)
 				fib = &fibctx;

 		memset(fib, 0, sizeof(struct fib));
@@ -284,9 +284,9 @@ unsigned int aac_intr_normal(struct aac_dev *dev, u32 index, int isAif,
 		 * manage the linked lists.
 		 */
 		if ((!dev->aif_thread)
-		 || (!(fib = kzalloc(sizeof(struct fib),GFP_ATOMIC))))
+		 || (!(fib = kzalloc_obj(struct fib, GFP_ATOMIC))))
 			return 1;
-		if (!(hw_fib = kzalloc(sizeof(struct hw_fib),GFP_ATOMIC))) {
+		if (!(hw_fib = kzalloc_obj(struct hw_fib, GFP_ATOMIC))) {
 			kfree (fib);
 			return 1;
 		}
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index ea468666159a..fe1ab38b7b6a 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -1661,9 +1661,8 @@ static int aac_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 	if (aac_reset_devices || reset_devices)
 		aac->init_reset = true;

-	aac->fibs = kcalloc(shost->can_queue + AAC_NUM_MGT_FIB,
-			    sizeof(struct fib),
-			    GFP_KERNEL);
+	aac->fibs = kzalloc_objs(struct fib, shost->can_queue + AAC_NUM_MGT_FIB,
+				 GFP_KERNEL);
 	if (!aac->fibs) {
 		error = -ENOMEM;
 		goto out_free_host;
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index 08bddac49757..f78448254f99 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -7486,8 +7486,8 @@ static int asc_build_req(struct asc_board *boardp, struct scsi_cmnd *scp,
 			return ASC_ERROR;
 		}

-		asc_sg_head = kzalloc(struct_size(asc_sg_head, sg_list, use_sg),
-				      GFP_ATOMIC);
+		asc_sg_head = kzalloc_flex(*asc_sg_head, sg_list, use_sg,
+					   GFP_ATOMIC);
 		if (!asc_sg_head) {
 			scsi_dma_unmap(scp);
 			set_host_byte(scp, DID_SOFT_ERROR);
@@ -11314,7 +11314,7 @@ static int advansys_eisa_probe(struct device *dev)
 	struct eisa_scsi_data *data;

 	err = -ENOMEM;
-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		goto fail;
 	ioport = edev->base_addr + 0xc30;
diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c
index 6b87ea004e53..3602a1fc40e4 100644
--- a/drivers/scsi/aic7xxx/aic79xx_core.c
+++ b/drivers/scsi/aic7xxx/aic79xx_core.c
@@ -3604,7 +3604,7 @@ ahd_alloc_tstate(struct ahd_softc *ahd, u_int scsi_id, char channel)
 	 && ahd->enabled_targets[scsi_id] != master_tstate)
 		panic("%s: ahd_alloc_tstate - Target already allocated",
 		      ahd_name(ahd));
-	tstate = kmalloc(sizeof(*tstate), GFP_ATOMIC);
+	tstate = kmalloc_obj(*tstate, GFP_ATOMIC);
 	if (tstate == NULL)
 		return (NULL);

@@ -6037,14 +6037,14 @@ ahd_alloc(void *platform_arg, char *name)
 {
 	struct  ahd_softc *ahd;

-	ahd = kzalloc(sizeof(*ahd), GFP_ATOMIC);
+	ahd = kzalloc_obj(*ahd, GFP_ATOMIC);
 	if (!ahd) {
 		printk("aic7xxx: cannot malloc softc!\n");
 		kfree(name);
 		return NULL;
 	}

-	ahd->seep_config = kmalloc(sizeof(*ahd->seep_config), GFP_ATOMIC);
+	ahd->seep_config = kmalloc_obj(*ahd->seep_config, GFP_ATOMIC);
 	if (ahd->seep_config == NULL) {
 		kfree(ahd);
 		kfree(name);
@@ -6777,7 +6777,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
 		hscb = &((struct hardware_scb *)hscb_map->vaddr)[offset];
 		hscb_busaddr = hscb_map->physaddr + (offset * sizeof(*hscb));
 	} else {
-		hscb_map = kmalloc(sizeof(*hscb_map), GFP_ATOMIC);
+		hscb_map = kmalloc_obj(*hscb_map, GFP_ATOMIC);

 		if (hscb_map == NULL)
 			return;
@@ -6810,7 +6810,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
 		segs = sg_map->vaddr + offset;
 		sg_busaddr = sg_map->physaddr + offset;
 	} else {
-		sg_map = kmalloc(sizeof(*sg_map), GFP_ATOMIC);
+		sg_map = kmalloc_obj(*sg_map, GFP_ATOMIC);

 		if (sg_map == NULL)
 			return;
@@ -6847,7 +6847,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
 		sense_data = sense_map->vaddr + offset;
 		sense_busaddr = sense_map->physaddr + offset;
 	} else {
-		sense_map = kmalloc(sizeof(*sense_map), GFP_ATOMIC);
+		sense_map = kmalloc_obj(*sense_map, GFP_ATOMIC);

 		if (sense_map == NULL)
 			return;
@@ -6882,11 +6882,11 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
 		struct scb_platform_data *pdata;
 		u_int col_tag;

-		next_scb = kmalloc(sizeof(*next_scb), GFP_ATOMIC);
+		next_scb = kmalloc_obj(*next_scb, GFP_ATOMIC);
 		if (next_scb == NULL)
 			break;

-		pdata = kmalloc(sizeof(*pdata), GFP_ATOMIC);
+		pdata = kmalloc_obj(*pdata, GFP_ATOMIC);
 		if (pdata == NULL) {
 			kfree(next_scb);
 			break;
@@ -10339,7 +10339,7 @@ ahd_handle_en_lun(struct ahd_softc *ahd, struct cam_sim *sim, union ccb *ccb)
 				return;
 			}
 		}
-		lstate = kzalloc(sizeof(*lstate), GFP_ATOMIC);
+		lstate = kzalloc_obj(*lstate, GFP_ATOMIC);
 		if (lstate == NULL) {
 			xpt_print_path(ccb->ccb_h.path);
 			printk("Couldn't allocate lstate\n");
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c
index c8b6dc48300a..feb1707feb7e 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.c
@@ -923,7 +923,7 @@ ahd_dma_tag_create(struct ahd_softc *ahd, bus_dma_tag_t parent,
 {
 	bus_dma_tag_t dmat;

-	dmat = kmalloc(sizeof(*dmat), GFP_ATOMIC);
+	dmat = kmalloc_obj(*dmat, GFP_ATOMIC);
 	if (dmat == NULL)
 		return (ENOMEM);

@@ -1309,7 +1309,7 @@ int
 ahd_platform_alloc(struct ahd_softc *ahd, void *platform_arg)
 {
 	ahd->platform_data =
-	    kzalloc(sizeof(struct ahd_platform_data), GFP_ATOMIC);
+	    kzalloc_obj(struct ahd_platform_data, GFP_ATOMIC);
 	if (ahd->platform_data == NULL)
 		return (ENOMEM);
 	ahd->platform_data->irq = AHD_LINUX_NOIRQ;
diff --git a/drivers/scsi/aic7xxx/aic79xx_proc.c b/drivers/scsi/aic7xxx/aic79xx_proc.c
index 746d0ca2a657..aa37838b78a6 100644
--- a/drivers/scsi/aic7xxx/aic79xx_proc.c
+++ b/drivers/scsi/aic7xxx/aic79xx_proc.c
@@ -242,8 +242,8 @@ ahd_proc_write_seeprom(struct Scsi_Host *shost, char *buffer, int length)
 		u_int start_addr;

 		if (ahd->seep_config == NULL) {
-			ahd->seep_config = kmalloc(sizeof(*ahd->seep_config),
-						   GFP_ATOMIC);
+			ahd->seep_config = kmalloc_obj(*ahd->seep_config,
+						       GFP_ATOMIC);
 			if (ahd->seep_config == NULL) {
 				printk("aic79xx: Unable to allocate serial "
 				       "eeprom buffer.  Write failing\n");
diff --git a/drivers/scsi/aic7xxx/aic7xxx_core.c b/drivers/scsi/aic7xxx/aic7xxx_core.c
index a396f048a031..b9761f9f0bbc 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_core.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_core.c
@@ -2128,7 +2128,7 @@ ahc_alloc_tstate(struct ahc_softc *ahc, u_int scsi_id, char channel)
 	 && ahc->enabled_targets[scsi_id] != master_tstate)
 		panic("%s: ahc_alloc_tstate - Target already allocated",
 		      ahc_name(ahc));
-	tstate = kmalloc(sizeof(*tstate), GFP_ATOMIC);
+	tstate = kmalloc_obj(*tstate, GFP_ATOMIC);
 	if (tstate == NULL)
 		return (NULL);

@@ -4381,14 +4381,14 @@ ahc_alloc(void *platform_arg, char *name)
 	struct  ahc_softc *ahc;
 	int	i;

-	ahc = kzalloc(sizeof(*ahc), GFP_ATOMIC);
+	ahc = kzalloc_obj(*ahc, GFP_ATOMIC);
 	if (!ahc) {
 		printk("aic7xxx: cannot malloc softc!\n");
 		kfree(name);
 		return NULL;
 	}

-	ahc->seep_config = kmalloc(sizeof(*ahc->seep_config), GFP_ATOMIC);
+	ahc->seep_config = kmalloc_obj(*ahc->seep_config, GFP_ATOMIC);
 	if (ahc->seep_config == NULL) {
 		kfree(ahc);
 		kfree(name);
@@ -4433,7 +4433,7 @@ ahc_softc_init(struct ahc_softc *ahc)
 	ahc->pause = ahc->unpause | PAUSE;
 	/* XXX The shared scb data stuff should be deprecated */
 	if (ahc->scb_data == NULL) {
-		ahc->scb_data = kzalloc(sizeof(*ahc->scb_data), GFP_ATOMIC);
+		ahc->scb_data = kzalloc_obj(*ahc->scb_data, GFP_ATOMIC);
 		if (ahc->scb_data == NULL)
 			return (ENOMEM);
 	}
@@ -4738,8 +4738,8 @@ ahc_init_scbdata(struct ahc_softc *ahc)
 	SLIST_INIT(&scb_data->sg_maps);

 	/* Allocate SCB resources */
-	scb_data->scbarray = kcalloc(AHC_SCB_MAX_ALLOC, sizeof(struct scb),
-				     GFP_ATOMIC);
+	scb_data->scbarray = kzalloc_objs(struct scb, AHC_SCB_MAX_ALLOC,
+					  GFP_ATOMIC);
 	if (scb_data->scbarray == NULL)
 		return (ENOMEM);

@@ -4943,7 +4943,7 @@ ahc_alloc_scbs(struct ahc_softc *ahc)

 	next_scb = &scb_data->scbarray[scb_data->numscbs];

-	sg_map = kmalloc(sizeof(*sg_map), GFP_ATOMIC);
+	sg_map = kmalloc_obj(*sg_map, GFP_ATOMIC);

 	if (sg_map == NULL)
 		return;
@@ -4970,7 +4970,7 @@ ahc_alloc_scbs(struct ahc_softc *ahc)
 	for (i = 0; i < newcount; i++) {
 		struct scb_platform_data *pdata;

-		pdata = kmalloc(sizeof(*pdata), GFP_ATOMIC);
+		pdata = kmalloc_obj(*pdata, GFP_ATOMIC);
 		if (pdata == NULL)
 			break;
 		next_scb->platform_data = pdata;
@@ -7488,7 +7488,7 @@ ahc_handle_en_lun(struct ahc_softc *ahc, struct cam_sim *sim, union ccb *ccb)
 				return;
 			}
 		}
-		lstate = kzalloc(sizeof(*lstate), GFP_ATOMIC);
+		lstate = kzalloc_obj(*lstate, GFP_ATOMIC);
 		if (lstate == NULL) {
 			xpt_print_path(ccb->ccb_h.path);
 			printk("Couldn't allocate lstate\n");
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c
index c71f80f8fa34..d93b522695eb 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c
@@ -823,7 +823,7 @@ ahc_dma_tag_create(struct ahc_softc *ahc, bus_dma_tag_t parent,
 {
 	bus_dma_tag_t dmat;

-	dmat = kmalloc(sizeof(*dmat), GFP_ATOMIC);
+	dmat = kmalloc_obj(*dmat, GFP_ATOMIC);
 	if (dmat == NULL)
 		return (ENOMEM);

@@ -1201,7 +1201,7 @@ ahc_platform_alloc(struct ahc_softc *ahc, void *platform_arg)
 {

 	ahc->platform_data =
-	    kzalloc(sizeof(struct ahc_platform_data), GFP_ATOMIC);
+	    kzalloc_obj(struct ahc_platform_data, GFP_ATOMIC);
 	if (ahc->platform_data == NULL)
 		return (ENOMEM);
 	ahc->platform_data->irq = AHC_LINUX_NOIRQ;
diff --git a/drivers/scsi/aic7xxx/aic7xxx_proc.c b/drivers/scsi/aic7xxx/aic7xxx_proc.c
index 4bc9e2dfccf6..3b2ba7b4d61b 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_proc.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_proc.c
@@ -255,8 +255,8 @@ ahc_proc_write_seeprom(struct Scsi_Host *shost, char *buffer, int length)
 		u_int start_addr;

 		if (ahc->seep_config == NULL) {
-			ahc->seep_config = kmalloc(sizeof(*ahc->seep_config),
-						   GFP_ATOMIC);
+			ahc->seep_config = kmalloc_obj(*ahc->seep_config,
+						       GFP_ATOMIC);
 			if (ahc->seep_config == NULL) {
 				printk("aic7xxx: Unable to allocate serial "
 				       "eeprom buffer.  Write failing\n");
diff --git a/drivers/scsi/aic94xx/aic94xx_hwi.c b/drivers/scsi/aic94xx/aic94xx_hwi.c
index e74393357025..caa9d7143894 100644
--- a/drivers/scsi/aic94xx/aic94xx_hwi.c
+++ b/drivers/scsi/aic94xx/aic94xx_hwi.c
@@ -272,8 +272,7 @@ static int asd_alloc_edbs(struct asd_ha_struct *asd_ha, gfp_t gfp_flags)
 	struct asd_seq_data *seq = &asd_ha->seq;
 	int i;

-	seq->edb_arr = kmalloc_array(seq->num_edbs, sizeof(*seq->edb_arr),
-				     gfp_flags);
+	seq->edb_arr = kmalloc_objs(*seq->edb_arr, seq->num_edbs, gfp_flags);
 	if (!seq->edb_arr)
 		return -ENOMEM;

@@ -305,8 +304,7 @@ static int asd_alloc_escbs(struct asd_ha_struct *asd_ha,
 	struct asd_ascb *escb;
 	int i, escbs;

-	seq->escb_arr = kmalloc_array(seq->num_escbs, sizeof(*seq->escb_arr),
-				      gfp_flags);
+	seq->escb_arr = kmalloc_objs(*seq->escb_arr, seq->num_escbs, gfp_flags);
 	if (!seq->escb_arr)
 		return -ENOMEM;

diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c
index 95f3620059f7..243f8d6166a5 100644
--- a/drivers/scsi/aic94xx/aic94xx_init.c
+++ b/drivers/scsi/aic94xx/aic94xx_init.c
@@ -642,9 +642,9 @@ static int asd_register_sas_ha(struct asd_ha_struct *asd_ha)
 {
 	int i;
 	struct asd_sas_phy   **sas_phys =
-		kcalloc(ASD_MAX_PHYS, sizeof(*sas_phys), GFP_KERNEL);
+		kzalloc_objs(*sas_phys, ASD_MAX_PHYS, GFP_KERNEL);
 	struct asd_sas_port  **sas_ports =
-		kcalloc(ASD_MAX_PHYS, sizeof(*sas_ports), GFP_KERNEL);
+		kzalloc_objs(*sas_ports, ASD_MAX_PHYS, GFP_KERNEL);

 	if (!sas_phys || !sas_ports) {
 		kfree(sas_phys);
@@ -710,7 +710,7 @@ static int asd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)

 	asd_dev = &asd_pcidev_data[asd_id];

-	asd_ha = kzalloc(sizeof(*asd_ha), GFP_KERNEL);
+	asd_ha = kzalloc_obj(*asd_ha, GFP_KERNEL);
 	if (!asd_ha) {
 		asd_printk("out of memory\n");
 		goto Err_put;
diff --git a/drivers/scsi/aic94xx/aic94xx_sds.c b/drivers/scsi/aic94xx/aic94xx_sds.c
index 5def83c88f13..89d1e385af69 100644
--- a/drivers/scsi/aic94xx/aic94xx_sds.c
+++ b/drivers/scsi/aic94xx/aic94xx_sds.c
@@ -207,7 +207,7 @@ static int asd_get_bios_chim(struct asd_ha_struct *asd_ha,
 		goto out;
 	}
 	err = -ENOMEM;
-	bc_struct = kmalloc(sizeof(*bc_struct), GFP_KERNEL);
+	bc_struct = kmalloc_obj(*bc_struct, GFP_KERNEL);
 	if (!bc_struct) {
 		asd_printk("no memory for bios_chim struct\n");
 		goto out;
@@ -341,7 +341,7 @@ int asd_read_ocm(struct asd_ha_struct *asd_ha)
 	if (asd_hwi_check_ocm_access(asd_ha))
 		return -1;

-	dir = kmalloc(sizeof(*dir), GFP_KERNEL);
+	dir = kmalloc_obj(*dir, GFP_KERNEL);
 	if (!dir) {
 		asd_printk("no memory for ocm dir\n");
 		return -ENOMEM;
@@ -1040,7 +1040,7 @@ int asd_read_flash(struct asd_ha_struct *asd_ha)
 	if (err)
 		return err;

-	flash_dir = kmalloc(sizeof(*flash_dir), GFP_KERNEL);
+	flash_dir = kmalloc_obj(*flash_dir, GFP_KERNEL);
 	if (!flash_dir)
 		return -ENOMEM;

diff --git a/drivers/scsi/am53c974.c b/drivers/scsi/am53c974.c
index 003e61831e33..734b5a9dcf5e 100644
--- a/drivers/scsi/am53c974.c
+++ b/drivers/scsi/am53c974.c
@@ -396,7 +396,7 @@ static int pci_esp_probe_one(struct pci_dev *pdev,
 		goto fail_disable_device;
 	}

-	pep = kzalloc(sizeof(struct pci_esp_priv), GFP_KERNEL);
+	pep = kzalloc_obj(struct pci_esp_priv, GFP_KERNEL);
 	if (!pep) {
 		dev_printk(KERN_INFO, &pdev->dev,
 			   "failed to allocate esp_priv\n");
diff --git a/drivers/scsi/arm/queue.c b/drivers/scsi/arm/queue.c
index 978df23ce188..2849f59b6015 100644
--- a/drivers/scsi/arm/queue.c
+++ b/drivers/scsi/arm/queue.c
@@ -71,7 +71,7 @@ int queue_initialise (Queue_t *queue)
 	 * need to keep free lists or allocate this
 	 * memory.
 	 */
-	queue->alloc = q = kmalloc_array(nqueues, sizeof(QE_t), GFP_KERNEL);
+	queue->alloc = q = kmalloc_objs(QE_t, nqueues, GFP_KERNEL);
 	if (q) {
 		for (; nqueues; q++, nqueues--) {
 			SET_MAGIC(q, QUEUE_MAGIC_FREE);
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index a0e794ffc980..1242ae2694c1 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -303,7 +303,7 @@ static int beiscsi_eh_device_reset(struct scsi_cmnd *sc)
 	beiscsi_conn = conn->dd_data;
 	phba = beiscsi_conn->phba;

-	inv_tbl = kzalloc(sizeof(*inv_tbl), GFP_ATOMIC);
+	inv_tbl = kzalloc_obj(*inv_tbl, GFP_ATOMIC);
 	if (!inv_tbl) {
 		spin_unlock_bh(&session->frwd_lock);
 		beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_EH,
@@ -2476,25 +2476,23 @@ static int beiscsi_alloc_mem(struct beiscsi_hba *phba)

 	/* Allocate memory for wrb_context */
 	phwi_ctrlr = phba->phwi_ctrlr;
-	phwi_ctrlr->wrb_context = kcalloc(phba->params.cxns_per_ctrl,
-					  sizeof(struct hwi_wrb_context),
-					  GFP_KERNEL);
+	phwi_ctrlr->wrb_context = kzalloc_objs(struct hwi_wrb_context,
+					       phba->params.cxns_per_ctrl,
+					       GFP_KERNEL);
 	if (!phwi_ctrlr->wrb_context) {
 		kfree(phba->phwi_ctrlr);
 		return -ENOMEM;
 	}

-	phba->init_mem = kcalloc(SE_MEM_MAX, sizeof(*mem_descr),
-				 GFP_KERNEL);
+	phba->init_mem = kzalloc_objs(*mem_descr, SE_MEM_MAX, GFP_KERNEL);
 	if (!phba->init_mem) {
 		kfree(phwi_ctrlr->wrb_context);
 		kfree(phba->phwi_ctrlr);
 		return -ENOMEM;
 	}

-	mem_arr_orig = kmalloc_array(BEISCSI_MAX_FRAGS_INIT,
-				     sizeof(*mem_arr_orig),
-				     GFP_KERNEL);
+	mem_arr_orig = kmalloc_objs(*mem_arr_orig, BEISCSI_MAX_FRAGS_INIT,
+				    GFP_KERNEL);
 	if (!mem_arr_orig) {
 		kfree(phba->init_mem);
 		kfree(phwi_ctrlr->wrb_context);
@@ -2542,8 +2540,7 @@ static int beiscsi_alloc_mem(struct beiscsi_hba *phba)
 		} while (alloc_size);
 		mem_descr->num_elements = j;
 		mem_descr->size_in_bytes = phba->mem_req[i];
-		mem_descr->mem_array = kmalloc_array(j, sizeof(*mem_arr),
-						     GFP_KERNEL);
+		mem_descr->mem_array = kmalloc_objs(*mem_arr, j, GFP_KERNEL);
 		if (!mem_descr->mem_array)
 			goto free_mem;

@@ -2629,9 +2626,9 @@ static int beiscsi_init_wrb_handle(struct beiscsi_hba *phba)

 	/* Allocate memory for WRBQ */
 	phwi_ctxt = phwi_ctrlr->phwi_ctxt;
-	phwi_ctxt->be_wrbq = kcalloc(phba->params.cxns_per_ctrl,
-				     sizeof(struct be_queue_info),
-				     GFP_KERNEL);
+	phwi_ctxt->be_wrbq = kzalloc_objs(struct be_queue_info,
+					  phba->params.cxns_per_ctrl,
+					  GFP_KERNEL);
 	if (!phwi_ctxt->be_wrbq) {
 		beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
 			    "BM_%d : WRBQ Mem Alloc Failed\n");
@@ -2641,18 +2638,18 @@ static int beiscsi_init_wrb_handle(struct beiscsi_hba *phba)
 	for (index = 0; index < phba->params.cxns_per_ctrl; index++) {
 		pwrb_context = &phwi_ctrlr->wrb_context[index];
 		pwrb_context->pwrb_handle_base =
-				kcalloc(phba->params.wrbs_per_cxn,
-					sizeof(struct wrb_handle *),
-					GFP_KERNEL);
+				kzalloc_objs(struct wrb_handle *,
+					     phba->params.wrbs_per_cxn,
+					     GFP_KERNEL);
 		if (!pwrb_context->pwrb_handle_base) {
 			beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
 				    "BM_%d : Mem Alloc Failed. Failing to load\n");
 			goto init_wrb_hndl_failed;
 		}
 		pwrb_context->pwrb_handle_basestd =
-				kcalloc(phba->params.wrbs_per_cxn,
-					sizeof(struct wrb_handle *),
-					GFP_KERNEL);
+				kzalloc_objs(struct wrb_handle *,
+					     phba->params.wrbs_per_cxn,
+					     GFP_KERNEL);
 		if (!pwrb_context->pwrb_handle_basestd) {
 			beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
 				    "BM_%d : Mem Alloc Failed. Failing to load\n");
@@ -3363,9 +3360,8 @@ beiscsi_create_wrb_rings(struct beiscsi_hba *phba,
 	idx = 0;
 	mem_descr = phba->init_mem;
 	mem_descr += HWI_MEM_WRB;
-	pwrb_arr = kmalloc_array(phba->params.cxns_per_ctrl,
-				 sizeof(*pwrb_arr),
-				 GFP_KERNEL);
+	pwrb_arr = kmalloc_objs(*pwrb_arr, phba->params.cxns_per_ctrl,
+				GFP_KERNEL);
 	if (!pwrb_arr) {
 		beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
 			    "BM_%d : Memory alloc failed in create wrb ring.\n");
@@ -3902,18 +3898,18 @@ static int beiscsi_init_sgl_handle(struct beiscsi_hba *phba)
 	mem_descr_sglh = phba->init_mem;
 	mem_descr_sglh += HWI_MEM_SGLH;
 	if (1 == mem_descr_sglh->num_elements) {
-		phba->io_sgl_hndl_base = kcalloc(phba->params.ios_per_ctrl,
-						 sizeof(struct sgl_handle *),
-						 GFP_KERNEL);
+		phba->io_sgl_hndl_base = kzalloc_objs(struct sgl_handle *,
+						      phba->params.ios_per_ctrl,
+						      GFP_KERNEL);
 		if (!phba->io_sgl_hndl_base) {
 			beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
 				    "BM_%d : Mem Alloc Failed. Failing to load\n");
 			return -ENOMEM;
 		}
 		phba->eh_sgl_hndl_base =
-			kcalloc(phba->params.icds_per_ctrl -
-					phba->params.ios_per_ctrl,
-				sizeof(struct sgl_handle *), GFP_KERNEL);
+			kzalloc_objs(struct sgl_handle *,
+				     phba->params.icds_per_ctrl - phba->params.ios_per_ctrl,
+				     GFP_KERNEL);
 		if (!phba->eh_sgl_hndl_base) {
 			kfree(phba->io_sgl_hndl_base);
 			beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
@@ -4004,8 +4000,8 @@ static int hba_setup_cid_tbls(struct beiscsi_hba *phba)

 	for (ulp_num = 0; ulp_num < BEISCSI_ULP_COUNT; ulp_num++) {
 		if (test_bit(ulp_num, (void *)&phba->fw_config.ulp_supported)) {
-			ptr_cid_info = kzalloc(sizeof(struct ulp_cid_info),
-					       GFP_KERNEL);
+			ptr_cid_info = kzalloc_obj(struct ulp_cid_info,
+						   GFP_KERNEL);

 			if (!ptr_cid_info) {
 				ret = -ENOMEM;
@@ -4031,18 +4027,16 @@ static int hba_setup_cid_tbls(struct beiscsi_hba *phba)
 			phba->cid_array_info[ulp_num] = ptr_cid_info;
 		}
 	}
-	phba->ep_array = kcalloc(phba->params.cxns_per_ctrl,
-				 sizeof(struct iscsi_endpoint *),
-				 GFP_KERNEL);
+	phba->ep_array = kzalloc_objs(struct iscsi_endpoint *,
+				      phba->params.cxns_per_ctrl, GFP_KERNEL);
 	if (!phba->ep_array) {
 		ret = -ENOMEM;

 		goto free_memory;
 	}

-	phba->conn_table = kcalloc(phba->params.cxns_per_ctrl,
-				   sizeof(struct beiscsi_conn *),
-				   GFP_KERNEL);
+	phba->conn_table = kzalloc_objs(struct beiscsi_conn *,
+					phba->params.cxns_per_ctrl, GFP_KERNEL);
 	if (!phba->conn_table) {
 		kfree(phba->ep_array);
 		phba->ep_array = NULL;
diff --git a/drivers/scsi/bfa/bfa_fcs_lport.c b/drivers/scsi/bfa/bfa_fcs_lport.c
index 9a85f417018f..9285e9922ea8 100644
--- a/drivers/scsi/bfa/bfa_fcs_lport.c
+++ b/drivers/scsi/bfa/bfa_fcs_lport.c
@@ -1863,7 +1863,7 @@ bfa_fcs_lport_fdmi_build_rhba_pyld(struct bfa_fcs_lport_fdmi_s *fdmi, u8 *pyld)
 	u8        *curr_ptr;
 	u16	templen, count;

-	fcs_hba_attr = kzalloc(sizeof(*fcs_hba_attr), GFP_KERNEL);
+	fcs_hba_attr = kzalloc_obj(*fcs_hba_attr, GFP_KERNEL);
 	if (!fcs_hba_attr)
 		return -ENOMEM;

diff --git a/drivers/scsi/bfa/bfad.c b/drivers/scsi/bfa/bfad.c
index bdfd06516671..629942abc5ca 100644
--- a/drivers/scsi/bfa/bfad.c
+++ b/drivers/scsi/bfa/bfad.c
@@ -473,7 +473,7 @@ bfa_fcb_rport_alloc(struct bfad_s *bfad, struct bfa_fcs_rport_s **rport,
 {
 	bfa_status_t	rc = BFA_STATUS_OK;

-	*rport_drv = kzalloc(sizeof(struct bfad_rport_s), GFP_ATOMIC);
+	*rport_drv = kzalloc_obj(struct bfad_rport_s, GFP_ATOMIC);
 	if (*rport_drv == NULL) {
 		rc = BFA_STATUS_ENOMEM;
 		goto ext;
@@ -496,7 +496,7 @@ bfa_fcb_pbc_vport_create(struct bfad_s *bfad, struct bfi_pbc_vport_s pbc_vport)
 	struct bfad_vport_s   *vport;
 	int rc;

-	vport = kzalloc(sizeof(struct bfad_vport_s), GFP_ATOMIC);
+	vport = kzalloc_obj(struct bfad_vport_s, GFP_ATOMIC);
 	if (!vport) {
 		bfa_trc(bfad, 0);
 		return;
@@ -640,7 +640,7 @@ bfad_vport_create(struct bfad_s *bfad, u16 vf_id,
 	unsigned long	flags;
 	struct completion fcomp;

-	vport = kzalloc(sizeof(struct bfad_vport_s), GFP_KERNEL);
+	vport = kzalloc_obj(struct bfad_vport_s, GFP_KERNEL);
 	if (!vport) {
 		rc = BFA_STATUS_ENOMEM;
 		goto ext;
@@ -1271,13 +1271,13 @@ bfad_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pid)
 		(PCI_FUNC(pdev->devfn) != 0))
 		return -ENODEV;

-	bfad = kzalloc(sizeof(struct bfad_s), GFP_KERNEL);
+	bfad = kzalloc_obj(struct bfad_s, GFP_KERNEL);
 	if (!bfad) {
 		error = -ENOMEM;
 		goto out;
 	}

-	bfad->trcmod = kzalloc(sizeof(struct bfa_trc_mod_s), GFP_KERNEL);
+	bfad->trcmod = kzalloc_obj(struct bfa_trc_mod_s, GFP_KERNEL);
 	if (!bfad->trcmod) {
 		printk(KERN_WARNING "Error alloc trace buffer!\n");
 		error = -ENOMEM;
diff --git a/drivers/scsi/bfa/bfad_attr.c b/drivers/scsi/bfa/bfad_attr.c
index 54bc1539e1e9..50f975d63c07 100644
--- a/drivers/scsi/bfa/bfad_attr.c
+++ b/drivers/scsi/bfa/bfad_attr.c
@@ -264,7 +264,7 @@ bfad_im_get_stats(struct Scsi_Host *shost)
 	bfa_status_t    rc;
 	unsigned long   flags;

-	fcstats = kzalloc(sizeof(union bfa_port_stats_u), GFP_KERNEL);
+	fcstats = kzalloc_obj(union bfa_port_stats_u, GFP_KERNEL);
 	if (fcstats == NULL)
 		return NULL;

@@ -907,8 +907,7 @@ bfad_im_num_of_discovered_ports_show(struct device *dev,
 	struct bfa_rport_qualifier_s *rports = NULL;
 	unsigned long   flags;

-	rports = kcalloc(nrports, sizeof(struct bfa_rport_qualifier_s),
-			 GFP_ATOMIC);
+	rports = kzalloc_objs(struct bfa_rport_qualifier_s, nrports, GFP_ATOMIC);
 	if (rports == NULL)
 		return sysfs_emit(buf, "Failed\n");

diff --git a/drivers/scsi/bfa/bfad_bsg.c b/drivers/scsi/bfa/bfad_bsg.c
index 54bd11e6d593..0a33657e67d5 100644
--- a/drivers/scsi/bfa/bfad_bsg.c
+++ b/drivers/scsi/bfa/bfad_bsg.c
@@ -3410,7 +3410,7 @@ bfad_im_bsg_els_ct_request(struct bsg_job *job)
 		goto out;
 	}

-	drv_fcxp = kzalloc(sizeof(struct bfad_fcxp), GFP_KERNEL);
+	drv_fcxp = kzalloc_obj(struct bfad_fcxp, GFP_KERNEL);
 	if (drv_fcxp == NULL) {
 		kfree(bsg_fcpt);
 		rc = -ENOMEM;
diff --git a/drivers/scsi/bfa/bfad_debugfs.c b/drivers/scsi/bfa/bfad_debugfs.c
index f6dd077d47c9..335f5f6a96fa 100644
--- a/drivers/scsi/bfa/bfad_debugfs.c
+++ b/drivers/scsi/bfa/bfad_debugfs.c
@@ -46,7 +46,7 @@ bfad_debugfs_open_drvtrc(struct inode *inode, struct file *file)
 	struct bfad_s *bfad = port->bfad;
 	struct bfad_debug_info *debug;

-	debug = kzalloc(sizeof(struct bfad_debug_info), GFP_KERNEL);
+	debug = kzalloc_obj(struct bfad_debug_info, GFP_KERNEL);
 	if (!debug)
 		return -ENOMEM;

@@ -67,7 +67,7 @@ bfad_debugfs_open_fwtrc(struct inode *inode, struct file *file)
 	unsigned long flags;
 	int rc;

-	fw_debug = kzalloc(sizeof(struct bfad_debug_info), GFP_KERNEL);
+	fw_debug = kzalloc_obj(struct bfad_debug_info, GFP_KERNEL);
 	if (!fw_debug)
 		return -ENOMEM;

@@ -109,7 +109,7 @@ bfad_debugfs_open_fwsave(struct inode *inode, struct file *file)
 	unsigned long flags;
 	int rc;

-	fw_debug = kzalloc(sizeof(struct bfad_debug_info), GFP_KERNEL);
+	fw_debug = kzalloc_obj(struct bfad_debug_info, GFP_KERNEL);
 	if (!fw_debug)
 		return -ENOMEM;

@@ -147,7 +147,7 @@ bfad_debugfs_open_reg(struct inode *inode, struct file *file)
 {
 	struct bfad_debug_info *reg_debug;

-	reg_debug = kzalloc(sizeof(struct bfad_debug_info), GFP_KERNEL);
+	reg_debug = kzalloc_obj(struct bfad_debug_info, GFP_KERNEL);
 	if (!reg_debug)
 		return -ENOMEM;

diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c
index 6c84982c4726..1feb2a9517c7 100644
--- a/drivers/scsi/bfa/bfad_im.c
+++ b/drivers/scsi/bfa/bfad_im.c
@@ -426,7 +426,7 @@ int
 bfa_fcb_itnim_alloc(struct bfad_s *bfad, struct bfa_fcs_itnim_s **itnim,
 		    struct bfad_itnim_s **itnim_drv)
 {
-	*itnim_drv = kzalloc(sizeof(struct bfad_itnim_s), GFP_ATOMIC);
+	*itnim_drv = kzalloc_obj(struct bfad_itnim_s, GFP_ATOMIC);
 	if (*itnim_drv == NULL)
 		return -ENOMEM;

@@ -622,7 +622,7 @@ bfad_im_port_new(struct bfad_s *bfad, struct bfad_port_s *port)
 	int             rc = BFA_STATUS_OK;
 	struct bfad_im_port_s *im_port;

-	im_port = kzalloc(sizeof(struct bfad_im_port_s), GFP_ATOMIC);
+	im_port = kzalloc_obj(struct bfad_im_port_s, GFP_ATOMIC);
 	if (im_port == NULL) {
 		rc = BFA_STATUS_ENOMEM;
 		goto ext;
@@ -698,7 +698,7 @@ bfad_im_probe(struct bfad_s *bfad)
 {
 	struct bfad_im_s      *im;

-	im = kzalloc(sizeof(struct bfad_im_s), GFP_KERNEL);
+	im = kzalloc_obj(struct bfad_im_s, GFP_KERNEL);
 	if (im == NULL)
 		return BFA_STATUS_ENOMEM;

@@ -994,7 +994,7 @@ bfad_im_supported_speeds(struct bfa_s *bfa)
 	struct bfa_ioc_attr_s *ioc_attr;
 	u32 supported_speed = 0;

-	ioc_attr = kzalloc(sizeof(struct bfa_ioc_attr_s), GFP_KERNEL);
+	ioc_attr = kzalloc_obj(struct bfa_ioc_attr_s, GFP_KERNEL);
 	if (!ioc_attr)
 		return 0;

diff --git a/drivers/scsi/bnx2fc/bnx2fc_els.c b/drivers/scsi/bnx2fc/bnx2fc_els.c
index 754f2e82d955..749e30aaf926 100644
--- a/drivers/scsi/bnx2fc/bnx2fc_els.c
+++ b/drivers/scsi/bnx2fc/bnx2fc_els.c
@@ -80,7 +80,7 @@ int bnx2fc_send_rrq(struct bnx2fc_cmd *aborted_io_req)
 		   aborted_io_req->xid);
 	memset(&rrq, 0, sizeof(rrq));

-	cb_arg = kzalloc(sizeof(struct bnx2fc_els_cb_arg), GFP_NOIO);
+	cb_arg = kzalloc_obj(struct bnx2fc_els_cb_arg, GFP_NOIO);
 	if (!cb_arg) {
 		printk(KERN_ERR PFX "Unable to allocate cb_arg for RRQ\n");
 		rc = -ENOMEM;
@@ -189,7 +189,7 @@ int bnx2fc_send_adisc(struct bnx2fc_rport *tgt, struct fc_frame *fp)
 	int rc;

 	fh = fc_frame_header_get(fp);
-	cb_arg = kzalloc(sizeof(struct bnx2fc_els_cb_arg), GFP_ATOMIC);
+	cb_arg = kzalloc_obj(struct bnx2fc_els_cb_arg, GFP_ATOMIC);
 	if (!cb_arg) {
 		printk(KERN_ERR PFX "Unable to allocate cb_arg for ADISC\n");
 		return -ENOMEM;
@@ -217,7 +217,7 @@ int bnx2fc_send_logo(struct bnx2fc_rport *tgt, struct fc_frame *fp)
 	int rc;

 	fh = fc_frame_header_get(fp);
-	cb_arg = kzalloc(sizeof(struct bnx2fc_els_cb_arg), GFP_ATOMIC);
+	cb_arg = kzalloc_obj(struct bnx2fc_els_cb_arg, GFP_ATOMIC);
 	if (!cb_arg) {
 		printk(KERN_ERR PFX "Unable to allocate cb_arg for LOGO\n");
 		return -ENOMEM;
@@ -245,7 +245,7 @@ int bnx2fc_send_rls(struct bnx2fc_rport *tgt, struct fc_frame *fp)
 	int rc;

 	fh = fc_frame_header_get(fp);
-	cb_arg = kzalloc(sizeof(struct bnx2fc_els_cb_arg), GFP_ATOMIC);
+	cb_arg = kzalloc_obj(struct bnx2fc_els_cb_arg, GFP_ATOMIC);
 	if (!cb_arg) {
 		printk(KERN_ERR PFX "Unable to allocate cb_arg for LOGO\n");
 		return -ENOMEM;
@@ -592,7 +592,7 @@ int bnx2fc_send_rec(struct bnx2fc_cmd *orig_io_req)
 	BNX2FC_IO_DBG(orig_io_req, "Sending REC\n");
 	memset(&rec, 0, sizeof(rec));

-	cb_arg = kzalloc(sizeof(struct bnx2fc_els_cb_arg), GFP_ATOMIC);
+	cb_arg = kzalloc_obj(struct bnx2fc_els_cb_arg, GFP_ATOMIC);
 	if (!cb_arg) {
 		printk(KERN_ERR PFX "Unable to allocate cb_arg for REC\n");
 		rc = -ENOMEM;
@@ -633,7 +633,7 @@ int bnx2fc_send_srr(struct bnx2fc_cmd *orig_io_req, u32 offset, u8 r_ctl)
 	BNX2FC_IO_DBG(orig_io_req, "Sending SRR\n");
 	memset(&srr, 0, sizeof(srr));

-	cb_arg = kzalloc(sizeof(struct bnx2fc_els_cb_arg), GFP_ATOMIC);
+	cb_arg = kzalloc_obj(struct bnx2fc_els_cb_arg, GFP_ATOMIC);
 	if (!cb_arg) {
 		printk(KERN_ERR PFX "Unable to allocate cb_arg for SRR\n");
 		rc = -ENOMEM;
diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
index 0f68739d380a..84f7f7ef75b3 100644
--- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
+++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
@@ -1356,7 +1356,7 @@ static struct bnx2fc_hba *bnx2fc_hba_create(struct cnic_dev *cnic)
 	struct fcoe_capabilities *fcoe_cap;
 	int rc;

-	hba = kzalloc(sizeof(*hba), GFP_KERNEL);
+	hba = kzalloc_obj(*hba, GFP_KERNEL);
 	if (!hba) {
 		printk(KERN_ERR PFX "Unable to allocate hba structure\n");
 		return NULL;
@@ -1381,8 +1381,8 @@ static struct bnx2fc_hba *bnx2fc_hba_create(struct cnic_dev *cnic)
 	hba->next_conn_id = 0;

 	hba->tgt_ofld_list =
-		kcalloc(BNX2FC_NUM_MAX_SESS, sizeof(struct bnx2fc_rport *),
-			GFP_KERNEL);
+		kzalloc_objs(struct bnx2fc_rport *, BNX2FC_NUM_MAX_SESS,
+			     GFP_KERNEL);
 	if (!hba->tgt_ofld_list) {
 		printk(KERN_ERR PFX "Unable to allocate tgt offload list\n");
 		goto tgtofld_err;
@@ -1492,7 +1492,7 @@ static struct fc_lport *bnx2fc_if_create(struct bnx2fc_interface *interface,
 	struct bnx2fc_hba	*hba = interface->hba;
 	int			rc = 0;

-	blport = kzalloc(sizeof(struct bnx2fc_lport), GFP_KERNEL);
+	blport = kzalloc_obj(struct bnx2fc_lport, GFP_KERNEL);
 	if (!blport) {
 		BNX2FC_HBA_DBG(ctlr->lp, "Unable to alloc blport\n");
 		return NULL;
@@ -2200,7 +2200,7 @@ static int __bnx2fc_enable(struct fcoe_ctlr *ctlr)
 	if (!hba->cnic->get_fc_npiv_tbl)
 		goto done;

-	npiv_tbl = kzalloc(sizeof(struct cnic_fc_npiv_tbl), GFP_KERNEL);
+	npiv_tbl = kzalloc_obj(struct cnic_fc_npiv_tbl, GFP_KERNEL);
 	if (!npiv_tbl)
 		goto done;

diff --git a/drivers/scsi/bnx2fc/bnx2fc_hwi.c b/drivers/scsi/bnx2fc/bnx2fc_hwi.c
index 090d436bcef8..a5ecb87d5b2d 100644
--- a/drivers/scsi/bnx2fc/bnx2fc_hwi.c
+++ b/drivers/scsi/bnx2fc/bnx2fc_hwi.c
@@ -561,7 +561,7 @@ void bnx2fc_process_l2_frame_compl(struct bnx2fc_rport *tgt,
 	u8 op;


-	unsol_els = kzalloc(sizeof(*unsol_els), GFP_ATOMIC);
+	unsol_els = kzalloc_obj(*unsol_els, GFP_ATOMIC);
 	if (!unsol_els) {
 		BNX2FC_TGT_DBG(tgt, "Unable to allocate unsol_work\n");
 		return;
@@ -972,7 +972,7 @@ static struct bnx2fc_work *bnx2fc_alloc_work(struct bnx2fc_rport *tgt, u16 wqe,
 					     struct fcoe_task_ctx_entry *task)
 {
 	struct bnx2fc_work *work;
-	work = kzalloc(sizeof(struct bnx2fc_work), GFP_ATOMIC);
+	work = kzalloc_obj(struct bnx2fc_work, GFP_ATOMIC);
 	if (!work)
 		return NULL;

diff --git a/drivers/scsi/bnx2fc/bnx2fc_io.c b/drivers/scsi/bnx2fc/bnx2fc_io.c
index 90b2b54c549a..ba299196dee9 100644
--- a/drivers/scsi/bnx2fc/bnx2fc_io.c
+++ b/drivers/scsi/bnx2fc/bnx2fc_io.c
@@ -241,15 +241,14 @@ struct bnx2fc_cmd_mgr *bnx2fc_cmd_mgr_alloc(struct bnx2fc_hba *hba)
 	}

 	cmgr->hba = hba;
-	cmgr->free_list = kcalloc(arr_sz, sizeof(*cmgr->free_list),
-				  GFP_KERNEL);
+	cmgr->free_list = kzalloc_objs(*cmgr->free_list, arr_sz, GFP_KERNEL);
 	if (!cmgr->free_list) {
 		printk(KERN_ERR PFX "failed to alloc free_list\n");
 		goto mem_err;
 	}

-	cmgr->free_list_lock = kcalloc(arr_sz, sizeof(*cmgr->free_list_lock),
-				       GFP_KERNEL);
+	cmgr->free_list_lock = kzalloc_objs(*cmgr->free_list_lock, arr_sz,
+					    GFP_KERNEL);
 	if (!cmgr->free_list_lock) {
 		printk(KERN_ERR PFX "failed to alloc free_list_lock\n");
 		kfree(cmgr->free_list);
@@ -272,7 +271,7 @@ struct bnx2fc_cmd_mgr *bnx2fc_cmd_mgr_alloc(struct bnx2fc_hba *hba)
 	xid = BNX2FC_MIN_XID;
 	num_pri_ios = num_ios - hba->elstm_xids;
 	for (i = 0; i < num_ios; i++) {
-		io_req = kzalloc(sizeof(*io_req), GFP_KERNEL);
+		io_req = kzalloc_obj(*io_req, GFP_KERNEL);

 		if (!io_req) {
 			printk(KERN_ERR PFX "failed to alloc io_req\n");
@@ -942,7 +941,7 @@ int bnx2fc_initiate_seq_cleanup(struct bnx2fc_cmd *orig_io_req, u32 offset,
 	port = orig_io_req->port;
 	interface = port->priv;

-	cb_arg = kzalloc(sizeof(struct bnx2fc_els_cb_arg), GFP_ATOMIC);
+	cb_arg = kzalloc_obj(struct bnx2fc_els_cb_arg, GFP_ATOMIC);
 	if (!cb_arg) {
 		printk(KERN_ERR PFX "Unable to alloc cb_arg for seq clnup\n");
 		rc = -ENOMEM;
diff --git a/drivers/scsi/bnx2i/bnx2i_hwi.c b/drivers/scsi/bnx2i/bnx2i_hwi.c
index 40db5190a222..d24cc2c795d6 100644
--- a/drivers/scsi/bnx2i/bnx2i_hwi.c
+++ b/drivers/scsi/bnx2i/bnx2i_hwi.c
@@ -1925,7 +1925,7 @@ static int bnx2i_queue_scsi_cmd_resp(struct iscsi_session *session,
 		goto err;
 	}
 	/* Alloc and copy to the cqe */
-	bnx2i_work = kzalloc(sizeof(struct bnx2i_work), GFP_ATOMIC);
+	bnx2i_work = kzalloc_obj(struct bnx2i_work, GFP_ATOMIC);
 	if (bnx2i_work) {
 		INIT_LIST_HEAD(&bnx2i_work->list);
 		bnx2i_work->session = session;
diff --git a/drivers/scsi/bvme6000_scsi.c b/drivers/scsi/bvme6000_scsi.c
index baf5f4e47937..f276f4f4eadf 100644
--- a/drivers/scsi/bvme6000_scsi.c
+++ b/drivers/scsi/bvme6000_scsi.c
@@ -44,7 +44,7 @@ bvme6000_probe(struct platform_device *dev)
 	if (!MACH_IS_BVME6000)
 		goto out;

-	hostdata = kzalloc(sizeof(struct NCR_700_Host_Parameters), GFP_KERNEL);
+	hostdata = kzalloc_obj(struct NCR_700_Host_Parameters, GFP_KERNEL);
 	if (!hostdata) {
 		printk(KERN_ERR "bvme6000-scsi: "
 				"Failed to allocate host data\n");
diff --git a/drivers/scsi/ch.c b/drivers/scsi/ch.c
index b6ca23a29ef5..3a6ab2d09ded 100644
--- a/drivers/scsi/ch.c
+++ b/drivers/scsi/ch.c
@@ -364,8 +364,7 @@ ch_readconfig(scsi_changer *ch)
 	}

 	/* look up the devices of the data transfer elements */
-	ch->dt = kcalloc(ch->counts[CHET_DT], sizeof(*ch->dt),
-			 GFP_KERNEL);
+	ch->dt = kzalloc_objs(*ch->dt, ch->counts[CHET_DT], GFP_KERNEL);

 	if (!ch->dt) {
 		kfree(buffer);
@@ -904,7 +903,7 @@ static int ch_probe(struct scsi_device *sd)
 	if (sd->type != TYPE_MEDIUM_CHANGER)
 		return -ENODEV;

-	ch = kzalloc(sizeof(*ch), GFP_KERNEL);
+	ch = kzalloc_obj(*ch, GFP_KERNEL);
 	if (NULL == ch)
 		return -ENOMEM;

diff --git a/drivers/scsi/csiostor/csio_hw.c b/drivers/scsi/csiostor/csio_hw.c
index 7aa418ebfe01..03299d5e523a 100644
--- a/drivers/scsi/csiostor/csio_hw.c
+++ b/drivers/scsi/csiostor/csio_hw.c
@@ -2429,7 +2429,7 @@ csio_hw_flash_fw(struct csio_hw *hw, int *reset)
 	/* allocate memory to read the header of the firmware on the
 	 * card
 	 */
-	card_fw = kmalloc(sizeof(*card_fw), GFP_KERNEL);
+	card_fw = kmalloc_obj(*card_fw, GFP_KERNEL);
 	if (!card_fw)
 		return -ENOMEM;

@@ -4389,7 +4389,7 @@ csio_hw_init(struct csio_hw *hw)
 	INIT_LIST_HEAD(&hw->evt_free_q);
 	for (i = 0; i < csio_evtq_sz; i++) {

-		evt_entry = kzalloc(sizeof(struct csio_evt_msg), GFP_KERNEL);
+		evt_entry = kzalloc_obj(struct csio_evt_msg, GFP_KERNEL);
 		if (!evt_entry) {
 			rv = -ENOMEM;
 			csio_err(hw, "Failed to initialize eventq");
diff --git a/drivers/scsi/csiostor/csio_init.c b/drivers/scsi/csiostor/csio_init.c
index db0c2174430a..1d2fcccb46c2 100644
--- a/drivers/scsi/csiostor/csio_init.c
+++ b/drivers/scsi/csiostor/csio_init.c
@@ -516,7 +516,7 @@ static struct csio_hw *csio_hw_alloc(struct pci_dev *pdev)
 {
 	struct csio_hw *hw;

-	hw = kzalloc(sizeof(struct csio_hw), GFP_KERNEL);
+	hw = kzalloc_obj(struct csio_hw, GFP_KERNEL);
 	if (!hw)
 		goto err;

diff --git a/drivers/scsi/csiostor/csio_lnode.c b/drivers/scsi/csiostor/csio_lnode.c
index 6cc1d53165a0..cdd61b990c64 100644
--- a/drivers/scsi/csiostor/csio_lnode.c
+++ b/drivers/scsi/csiostor/csio_lnode.c
@@ -1837,7 +1837,7 @@ csio_ln_fdmi_init(struct csio_lnode *ln)
 	struct csio_dma_buf	*dma_buf;

 	/* Allocate MGMT request required for FDMI */
-	ln->mgmt_req = kzalloc(sizeof(struct csio_ioreq), GFP_KERNEL);
+	ln->mgmt_req = kzalloc_obj(struct csio_ioreq, GFP_KERNEL);
 	if (!ln->mgmt_req) {
 		csio_ln_err(ln, "Failed to alloc ioreq for FDMI\n");
 		CSIO_INC_STATS(hw, n_err_nomem);
@@ -2002,7 +2002,7 @@ csio_ln_init(struct csio_lnode *ln)

 		/* This is the lnode used during initialization */

-		ln->fcfinfo = kzalloc(sizeof(struct csio_fcf_info), GFP_KERNEL);
+		ln->fcfinfo = kzalloc_obj(struct csio_fcf_info, GFP_KERNEL);
 		if (!ln->fcfinfo) {
 			csio_ln_err(ln, "Failed to alloc FCF record\n");
 			CSIO_INC_STATS(hw, n_err_nomem);
@@ -2029,8 +2029,8 @@ csio_ln_init(struct csio_lnode *ln)
 			ln->fcfinfo = pln->fcfinfo;
 		} else {
 			/* Another non-root physical lnode (FCF) */
-			ln->fcfinfo = kzalloc(sizeof(struct csio_fcf_info),
-								GFP_KERNEL);
+			ln->fcfinfo = kzalloc_obj(struct csio_fcf_info,
+						  GFP_KERNEL);
 			if (!ln->fcfinfo) {
 				csio_ln_err(ln, "Failed to alloc FCF info\n");
 				CSIO_INC_STATS(hw, n_err_nomem);
diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c
index 05137784f369..2c75c2663f73 100644
--- a/drivers/scsi/csiostor/csio_scsi.c
+++ b/drivers/scsi/csiostor/csio_scsi.c
@@ -2341,7 +2341,7 @@ csio_scsi_alloc_ddp_bufs(struct csio_scsim *scm, struct csio_hw *hw,
 	for (n = 0; n < num_buf; n++) {
 		/* Set unit size to request size */
 		unit_size = buf_size;
-		ddp_desc = kzalloc(sizeof(struct csio_dma_buf), GFP_KERNEL);
+		ddp_desc = kzalloc_obj(struct csio_dma_buf, GFP_KERNEL);
 		if (!ddp_desc) {
 			csio_err(hw,
 				 "Failed to allocate ddp descriptors,"
@@ -2435,7 +2435,7 @@ csio_scsim_init(struct csio_scsim *scm, struct csio_hw *hw)
 	INIT_LIST_HEAD(&scm->ioreq_freelist);
 	for (i = 0; i < csio_scsi_ioreqs; i++) {

-		ioreq = kzalloc(sizeof(struct csio_ioreq), GFP_KERNEL);
+		ioreq = kzalloc_obj(struct csio_ioreq, GFP_KERNEL);
 		if (!ioreq) {
 			csio_err(hw,
 				 "I/O request element allocation failed, "
diff --git a/drivers/scsi/csiostor/csio_wr.c b/drivers/scsi/csiostor/csio_wr.c
index 010a1df37f15..0310fa71ab07 100644
--- a/drivers/scsi/csiostor/csio_wr.c
+++ b/drivers/scsi/csiostor/csio_wr.c
@@ -278,9 +278,8 @@ csio_wr_alloc_q(struct csio_hw *hw, uint32_t qsize, uint32_t wrsize,
 			q->un.iq.flq_idx = flq_idx;

 			flq = wrm->q_arr[q->un.iq.flq_idx];
-			flq->un.fl.bufs = kcalloc(flq->credits,
-						  sizeof(struct csio_dma_buf),
-						  GFP_KERNEL);
+			flq->un.fl.bufs = kzalloc_objs(struct csio_dma_buf,
+						       flq->credits, GFP_KERNEL);
 			if (!flq->un.fl.bufs) {
 				csio_err(hw,
 					 "Failed to allocate FL queue bufs"
@@ -1651,12 +1650,12 @@ csio_wrm_init(struct csio_wrm *wrm, struct csio_hw *hw)
 		return -EINVAL;
 	}

-	wrm->q_arr = kcalloc(wrm->num_q, sizeof(struct csio_q *), GFP_KERNEL);
+	wrm->q_arr = kzalloc_objs(struct csio_q *, wrm->num_q, GFP_KERNEL);
 	if (!wrm->q_arr)
 		goto err;

 	for (i = 0; i < wrm->num_q; i++) {
-		wrm->q_arr[i] = kzalloc(sizeof(struct csio_q), GFP_KERNEL);
+		wrm->q_arr[i] = kzalloc_obj(struct csio_q, GFP_KERNEL);
 		if (!wrm->q_arr[i]) {
 			while (--i >= 0)
 				kfree(wrm->q_arr[i]);
diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c
index bf75940f2be1..ea9631bfe2e2 100644
--- a/drivers/scsi/cxgbi/libcxgbi.c
+++ b/drivers/scsi/cxgbi/libcxgbi.c
@@ -556,7 +556,7 @@ EXPORT_SYMBOL_GPL(cxgbi_sock_free_cpl_skbs);

 static struct cxgbi_sock *cxgbi_sock_create(struct cxgbi_device *cdev)
 {
-	struct cxgbi_sock *csk = kzalloc(sizeof(*csk), GFP_NOIO);
+	struct cxgbi_sock *csk = kzalloc_obj(*csk, GFP_NOIO);

 	if (!csk) {
 		pr_info("alloc csk %zu failed.\n", sizeof(*csk));
diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
index 9dc499c89d3e..6183ce05d8cf 100644
--- a/drivers/scsi/dc395x.c
+++ b/drivers/scsi/dc395x.c
@@ -2990,7 +2990,7 @@ static struct DeviceCtlBlk *device_alloc(struct AdapterCtlBlk *acb,
 	u8 period_index = eeprom->target[target].period & 0x07;
 	struct DeviceCtlBlk *dcb;

-	dcb = kmalloc(sizeof(struct DeviceCtlBlk), GFP_ATOMIC);
+	dcb = kmalloc_obj(struct DeviceCtlBlk, GFP_ATOMIC);
 	if (!dcb)
 		return NULL;
 	dcb->acb = NULL;
diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c
index 6fd89ae33059..842476f131fd 100644
--- a/drivers/scsi/device_handler/scsi_dh_alua.c
+++ b/drivers/scsi/device_handler/scsi_dh_alua.c
@@ -219,7 +219,7 @@ static struct alua_port_group *alua_alloc_pg(struct scsi_device *sdev,
 {
 	struct alua_port_group *pg, *tmp_pg;

-	pg = kzalloc(sizeof(struct alua_port_group), GFP_KERNEL);
+	pg = kzalloc_obj(struct alua_port_group, GFP_KERNEL);
 	if (!pg)
 		return ERR_PTR(-ENOMEM);

@@ -1137,7 +1137,7 @@ static int alua_activate(struct scsi_device *sdev,
 	struct alua_queue_data *qdata;
 	struct alua_port_group *pg;

-	qdata = kzalloc(sizeof(*qdata), GFP_KERNEL);
+	qdata = kzalloc_obj(*qdata, GFP_KERNEL);
 	if (!qdata) {
 		err = SCSI_DH_RES_TEMP_UNAVAIL;
 		goto out;
@@ -1239,7 +1239,7 @@ static int alua_bus_attach(struct scsi_device *sdev)
 	struct alua_dh_data *h;
 	int err;

-	h = kzalloc(sizeof(*h) , GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return SCSI_DH_NOMEM;
 	spin_lock_init(&h->pg_lock);
diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c
index 3cf88db2d5b2..5a2f6f09de07 100644
--- a/drivers/scsi/device_handler/scsi_dh_emc.c
+++ b/drivers/scsi/device_handler/scsi_dh_emc.c
@@ -478,7 +478,7 @@ static int clariion_bus_attach(struct scsi_device *sdev)
 	struct clariion_dh_data *h;
 	int err;

-	h = kzalloc(sizeof(*h) , GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return SCSI_DH_NOMEM;
 	h->lun_state = CLARIION_LUN_UNINITIALIZED;
diff --git a/drivers/scsi/device_handler/scsi_dh_hp_sw.c b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
index b6eaf49dfb00..36d877afff4b 100644
--- a/drivers/scsi/device_handler/scsi_dh_hp_sw.c
+++ b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
@@ -226,7 +226,7 @@ static int hp_sw_bus_attach(struct scsi_device *sdev)
 	struct hp_sw_dh_data *h;
 	int ret;

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return SCSI_DH_NOMEM;
 	h->path_state = HP_SW_PATH_UNINITIALIZED;
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index 6e1b252cea0e..088dc509d505 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -336,7 +336,7 @@ static struct rdac_controller *get_controller(int index, char *array_name,
 			return tmp;
 		}
 	}
-	ctlr = kmalloc(sizeof(*ctlr), GFP_ATOMIC);
+	ctlr = kmalloc_obj(*ctlr, GFP_ATOMIC);
 	if (!ctlr)
 		return NULL;

@@ -601,7 +601,7 @@ static int queue_mode_select(struct scsi_device *sdev,
 	struct rdac_queue_data *qdata;
 	struct rdac_controller *ctlr;

-	qdata = kzalloc(sizeof(*qdata), GFP_KERNEL);
+	qdata = kzalloc_obj(*qdata, GFP_KERNEL);
 	if (!qdata)
 		return SCSI_DH_RETRY;

@@ -741,7 +741,7 @@ static int rdac_bus_attach(struct scsi_device *sdev)
 	char array_name[ARRAY_LABEL_LEN];
 	char array_id[UNIQUE_ID_LEN];

-	h = kzalloc(sizeof(*h) , GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return SCSI_DH_NOMEM;
 	h->lun = UNINITIALIZED_LUN;
diff --git a/drivers/scsi/elx/efct/efct_driver.c b/drivers/scsi/elx/efct/efct_driver.c
index 528399f725d4..03c0dbee779f 100644
--- a/drivers/scsi/elx/efct/efct_driver.c
+++ b/drivers/scsi/elx/efct/efct_driver.c
@@ -93,7 +93,7 @@ efct_efclib_config(struct efct *efct, struct libefc_function_template *tt)
 	struct sli4 *sli;
 	int rc = 0;

-	efc = kzalloc(sizeof(*efc), GFP_KERNEL);
+	efc = kzalloc_obj(*efc, GFP_KERNEL);
 	if (!efc)
 		return -ENOMEM;

diff --git a/drivers/scsi/elx/efct/efct_hw.c b/drivers/scsi/elx/efct/efct_hw.c
index 5b079b8b7a08..aba82cb69459 100644
--- a/drivers/scsi/elx/efct/efct_hw.c
+++ b/drivers/scsi/elx/efct/efct_hw.c
@@ -487,14 +487,14 @@ efct_hw_setup_io(struct efct_hw *hw)
 	struct efct *efct = hw->os;

 	if (!hw->io) {
-		hw->io = kmalloc_array(hw->config.n_io, sizeof(io), GFP_KERNEL);
+		hw->io = kmalloc_objs(io, hw->config.n_io, GFP_KERNEL);
 		if (!hw->io)
 			return -ENOMEM;

 		memset(hw->io, 0, hw->config.n_io * sizeof(io));

 		for (i = 0; i < hw->config.n_io; i++) {
-			hw->io[i] = kzalloc(sizeof(*io), GFP_KERNEL);
+			hw->io[i] = kzalloc_obj(*io, GFP_KERNEL);
 			if (!hw->io[i])
 				goto error;
 		}
@@ -611,7 +611,7 @@ efct_hw_init_prereg_io(struct efct_hw *hw)
 	struct efc_dma req;
 	struct efct *efct = hw->os;

-	sgls = kmalloc_array(sgls_per_request, sizeof(*sgls), GFP_KERNEL);
+	sgls = kmalloc_objs(*sgls, sgls_per_request, GFP_KERNEL);
 	if (!sgls)
 		return -ENOMEM;

@@ -1182,7 +1182,7 @@ efct_hw_rx_buffer_alloc(struct efct_hw *hw, u32 rqindex, u32 count,
 	if (!count)
 		return NULL;

-	rq_buf = kmalloc_array(count, sizeof(*rq_buf), GFP_KERNEL);
+	rq_buf = kmalloc_objs(*rq_buf, count, GFP_KERNEL);
 	if (!rq_buf)
 		return NULL;
 	memset(rq_buf, 0, sizeof(*rq_buf) * count);
@@ -1287,8 +1287,8 @@ efct_hw_rx_post(struct efct_hw *hw)
 		for (i = 0; i < hw->hw_rq_count; i++)
 			count += hw->hw_rq[i]->entry_count;

-		hw->seq_pool = kmalloc_array(count,
-				sizeof(struct efc_hw_sequence),	GFP_KERNEL);
+		hw->seq_pool = kmalloc_objs(struct efc_hw_sequence, count,
+					    GFP_KERNEL);
 		if (!hw->seq_pool)
 			return -ENOMEM;
 	}
@@ -2064,7 +2064,7 @@ efct_hw_reqtag_pool_alloc(struct efct_hw *hw)
 	struct reqtag_pool *reqtag_pool;
 	struct hw_wq_callback *wqcb;

-	reqtag_pool = kzalloc(sizeof(*reqtag_pool), GFP_KERNEL);
+	reqtag_pool = kzalloc_obj(*reqtag_pool, GFP_KERNEL);
 	if (!reqtag_pool)
 		return NULL;

@@ -2072,7 +2072,7 @@ efct_hw_reqtag_pool_alloc(struct efct_hw *hw)
 	/* initialize reqtag pool lock */
 	spin_lock_init(&reqtag_pool->lock);
 	for (i = 0; i < U16_MAX; i++) {
-		wqcb = kmalloc(sizeof(*wqcb), GFP_KERNEL);
+		wqcb = kmalloc_obj(*wqcb, GFP_KERNEL);
 		if (!wqcb)
 			break;

@@ -3105,7 +3105,7 @@ efct_hw_get_link_stats(struct efct_hw *hw, u8 req_ext_counters,
 	struct efct_hw_link_stat_cb_arg *cb_arg;
 	u8 mbxdata[SLI4_BMBX_SIZE];

-	cb_arg = kzalloc(sizeof(*cb_arg), GFP_ATOMIC);
+	cb_arg = kzalloc_obj(*cb_arg, GFP_ATOMIC);
 	if (!cb_arg)
 		return -ENOMEM;

@@ -3189,7 +3189,7 @@ efct_hw_get_host_stats(struct efct_hw *hw, u8 cc,
 	struct efct_hw_host_stat_cb_arg *cb_arg;
 	u8 mbxdata[SLI4_BMBX_SIZE];

-	cb_arg = kmalloc(sizeof(*cb_arg), GFP_ATOMIC);
+	cb_arg = kmalloc_obj(*cb_arg, GFP_ATOMIC);
 	if (!cb_arg)
 		return -ENOMEM;

@@ -3239,7 +3239,7 @@ efct_hw_async_call(struct efct_hw *hw, efct_hw_async_cb_t callback, void *arg)
 	 * we need this to be persistent as the mbox cmd submission may be
 	 * queued and executed later execution.
 	 */
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -3307,7 +3307,7 @@ efct_hw_firmware_write(struct efct_hw *hw, struct efc_dma *dma, u32 size,
 	struct efct_hw_fw_wr_cb_arg *cb_arg;
 	int noc = 0;

-	cb_arg = kzalloc(sizeof(*cb_arg), GFP_KERNEL);
+	cb_arg = kzalloc_obj(*cb_arg, GFP_KERNEL);
 	if (!cb_arg)
 		return -ENOMEM;

diff --git a/drivers/scsi/elx/efct/efct_hw_queues.c b/drivers/scsi/elx/efct/efct_hw_queues.c
index 3a1d1a5864a3..83d8f2c37569 100644
--- a/drivers/scsi/elx/efct/efct_hw_queues.c
+++ b/drivers/scsi/elx/efct/efct_hw_queues.c
@@ -127,7 +127,7 @@ efct_hw_map_wq_cpu(struct efct_hw *hw)
 struct hw_eq *
 efct_hw_new_eq(struct efct_hw *hw, u32 entry_count)
 {
-	struct hw_eq *eq = kzalloc(sizeof(*eq), GFP_KERNEL);
+	struct hw_eq *eq = kzalloc_obj(*eq, GFP_KERNEL);

 	if (!eq)
 		return NULL;
@@ -159,7 +159,7 @@ struct hw_cq *
 efct_hw_new_cq(struct hw_eq *eq, u32 entry_count)
 {
 	struct efct_hw *hw = eq->hw;
-	struct hw_cq *cq = kzalloc(sizeof(*cq), GFP_KERNEL);
+	struct hw_cq *cq = kzalloc_obj(*cq, GFP_KERNEL);

 	if (!cq)
 		return NULL;
@@ -204,7 +204,7 @@ efct_hw_new_cq_set(struct hw_eq *eqs[], struct hw_cq *cqs[],
 		cqs[i] = NULL;

 	for (i = 0; i < num_cqs; i++) {
-		cq = kzalloc(sizeof(*cq), GFP_KERNEL);
+		cq = kzalloc_obj(*cq, GFP_KERNEL);
 		if (!cq)
 			goto error;

@@ -244,7 +244,7 @@ struct hw_mq *
 efct_hw_new_mq(struct hw_cq *cq, u32 entry_count)
 {
 	struct efct_hw *hw = cq->eq->hw;
-	struct hw_mq *mq = kzalloc(sizeof(*mq), GFP_KERNEL);
+	struct hw_mq *mq = kzalloc_obj(*mq, GFP_KERNEL);

 	if (!mq)
 		return NULL;
@@ -275,7 +275,7 @@ struct hw_wq *
 efct_hw_new_wq(struct hw_cq *cq, u32 entry_count)
 {
 	struct efct_hw *hw = cq->eq->hw;
-	struct hw_wq *wq = kzalloc(sizeof(*wq), GFP_KERNEL);
+	struct hw_wq *wq = kzalloc_obj(*wq, GFP_KERNEL);

 	if (!wq)
 		return NULL;
@@ -324,7 +324,7 @@ efct_hw_new_rq_set(struct hw_cq *cqs[], struct hw_rq *rqs[],
 	 * encapsulates 2 SLI queues (for rq pair)
 	 */
 	for (i = 0, q_count = 0; i < num_rq_pairs; i++, q_count += 2) {
-		rq = kzalloc(sizeof(*rq), GFP_KERNEL);
+		rq = kzalloc_obj(*rq, GFP_KERNEL);
 		if (!rq)
 			goto error;

diff --git a/drivers/scsi/elx/efct/efct_io.c b/drivers/scsi/elx/efct/efct_io.c
index c612f0a48839..dabbe996ab7c 100644
--- a/drivers/scsi/elx/efct/efct_io.c
+++ b/drivers/scsi/elx/efct/efct_io.c
@@ -25,7 +25,7 @@ efct_io_pool_create(struct efct *efct, u32 num_sgl)
 	struct efct_io *io;

 	/* Allocate the IO pool */
-	io_pool = kzalloc(sizeof(*io_pool), GFP_KERNEL);
+	io_pool = kzalloc_obj(*io_pool, GFP_KERNEL);
 	if (!io_pool)
 		return NULL;

@@ -35,7 +35,7 @@ efct_io_pool_create(struct efct *efct, u32 num_sgl)
 	spin_lock_init(&io_pool->lock);

 	for (i = 0; i < EFCT_NUM_SCSI_IOS; i++) {
-		io = kzalloc(sizeof(*io), GFP_KERNEL);
+		io = kzalloc_obj(*io, GFP_KERNEL);
 		if (!io)
 			break;

diff --git a/drivers/scsi/elx/efct/efct_lio.c b/drivers/scsi/elx/efct/efct_lio.c
index bd3d489e56ae..a6ad6b84fc7a 100644
--- a/drivers/scsi/elx/efct/efct_lio.c
+++ b/drivers/scsi/elx/efct/efct_lio.c
@@ -744,7 +744,7 @@ efct_lio_make_nport(struct target_fabric_configfs *tf,
 		return ERR_PTR(-ENXIO);
 	}

-	lio_nport = kzalloc(sizeof(*lio_nport), GFP_KERNEL);
+	lio_nport = kzalloc_obj(*lio_nport, GFP_KERNEL);
 	if (!lio_nport)
 		return ERR_PTR(-ENOMEM);

@@ -796,7 +796,7 @@ efct_lio_npiv_make_nport(struct target_fabric_configfs *tf,
 		return ERR_PTR(-ENXIO);
 	}

-	lio_vport = kzalloc(sizeof(*lio_vport), GFP_KERNEL);
+	lio_vport = kzalloc_obj(*lio_vport, GFP_KERNEL);
 	if (!lio_vport)
 		return ERR_PTR(-ENOMEM);

@@ -808,7 +808,7 @@ efct_lio_npiv_make_nport(struct target_fabric_configfs *tf,
 	efct_format_wwn(lio_vport->wwpn_str, sizeof(lio_vport->wwpn_str),
 			"naa.", npiv_wwpn);

-	vport_list = kzalloc(sizeof(*vport_list), GFP_KERNEL);
+	vport_list = kzalloc_obj(*vport_list, GFP_KERNEL);
 	if (!vport_list) {
 		kfree(lio_vport);
 		return ERR_PTR(-ENOMEM);
@@ -895,7 +895,7 @@ efct_lio_make_tpg(struct se_wwn *wwn, const char *name)
 	if (kstrtoul(name + 5, 10, &n) || n > USHRT_MAX)
 		return ERR_PTR(-EINVAL);

-	tpg = kzalloc(sizeof(*tpg), GFP_KERNEL);
+	tpg = kzalloc_obj(*tpg, GFP_KERNEL);
 	if (!tpg)
 		return ERR_PTR(-ENOMEM);

@@ -958,7 +958,7 @@ efct_lio_npiv_make_tpg(struct se_wwn *wwn, const char *name)
 		return ERR_PTR(-EINVAL);
 	}

-	tpg = kzalloc(sizeof(*tpg), GFP_KERNEL);
+	tpg = kzalloc_obj(*tpg, GFP_KERNEL);
 	if (!tpg)
 		return ERR_PTR(-ENOMEM);

@@ -1069,7 +1069,7 @@ static int efct_session_cb(struct se_portal_group *se_tpg,
 	struct efct_node *tgt_node;
 	struct efct *efct = node->efc->base;

-	tgt_node = kzalloc(sizeof(*tgt_node), GFP_KERNEL);
+	tgt_node = kzalloc_obj(*tgt_node, GFP_KERNEL);
 	if (!tgt_node)
 		return -ENOMEM;

@@ -1227,7 +1227,7 @@ int efct_scsi_new_initiator(struct efc *efc, struct efc_node *node)
 	 * Since LIO only supports initiator validation at thread level,
 	 * we are open minded and accept all callers.
 	 */
-	wq_data = kzalloc(sizeof(*wq_data), GFP_ATOMIC);
+	wq_data = kzalloc_obj(*wq_data, GFP_ATOMIC);
 	if (!wq_data)
 		return -ENOMEM;

@@ -1292,7 +1292,7 @@ int efct_scsi_del_initiator(struct efc *efc, struct efc_node *node, int reason)
 		return -EIO;
 	}

-	wq_data = kzalloc(sizeof(*wq_data), GFP_ATOMIC);
+	wq_data = kzalloc_obj(*wq_data, GFP_ATOMIC);
 	if (!wq_data)
 		return -ENOMEM;

diff --git a/drivers/scsi/elx/efct/efct_xport.c b/drivers/scsi/elx/efct/efct_xport.c
index dfe05fab7b42..66574b8c9f9e 100644
--- a/drivers/scsi/elx/efct/efct_xport.c
+++ b/drivers/scsi/elx/efct/efct_xport.c
@@ -28,7 +28,7 @@ efct_xport_alloc(struct efct *efct)
 {
 	struct efct_xport *xport;

-	xport = kzalloc(sizeof(*xport), GFP_KERNEL);
+	xport = kzalloc_obj(*xport, GFP_KERNEL);
 	if (!xport)
 		return xport;

diff --git a/drivers/scsi/elx/libefc/efc_domain.c b/drivers/scsi/elx/libefc/efc_domain.c
index ca9d7ff2c0d2..554a538ffd33 100644
--- a/drivers/scsi/elx/libefc/efc_domain.c
+++ b/drivers/scsi/elx/libefc/efc_domain.c
@@ -134,7 +134,7 @@ efc_domain_alloc(struct efc *efc, uint64_t fcf_wwn)
 {
 	struct efc_domain *domain;

-	domain = kzalloc(sizeof(*domain), GFP_ATOMIC);
+	domain = kzalloc_obj(*domain, GFP_ATOMIC);
 	if (!domain)
 		return NULL;

diff --git a/drivers/scsi/elx/libefc/efc_fabric.c b/drivers/scsi/elx/libefc/efc_fabric.c
index 4ed9f46ded65..12e82deb2a35 100644
--- a/drivers/scsi/elx/libefc/efc_fabric.c
+++ b/drivers/scsi/elx/libefc/efc_fabric.c
@@ -685,7 +685,7 @@ efc_process_gidpt_payload(struct efc_node *node,
 	}

 	/* Allocate a buffer for all nodes */
-	active_nodes = kcalloc(port_count, sizeof(*active_nodes), GFP_ATOMIC);
+	active_nodes = kzalloc_objs(*active_nodes, port_count, GFP_ATOMIC);
 	if (!active_nodes) {
 		node_printf(node, "efc_malloc failed\n");
 		return -EIO;
diff --git a/drivers/scsi/elx/libefc/efc_nport.c b/drivers/scsi/elx/libefc/efc_nport.c
index 1a7437f4328e..1ea26c7337eb 100644
--- a/drivers/scsi/elx/libefc/efc_nport.c
+++ b/drivers/scsi/elx/libefc/efc_nport.c
@@ -82,7 +82,7 @@ efc_nport_alloc(struct efc_domain *domain, uint64_t wwpn, uint64_t wwnn,
 		}
 	}

-	nport = kzalloc(sizeof(*nport), GFP_ATOMIC);
+	nport = kzalloc_obj(*nport, GFP_ATOMIC);
 	if (!nport)
 		return nport;

@@ -756,7 +756,7 @@ efc_vport_create_spec(struct efc *efc, uint64_t wwnn, uint64_t wwpn,
 		}
 	}

-	vport = kzalloc(sizeof(*vport), GFP_ATOMIC);
+	vport = kzalloc_obj(*vport, GFP_ATOMIC);
 	if (!vport) {
 		spin_unlock_irqrestore(&efc->vport_lock, flags);
 		return NULL;
diff --git a/drivers/scsi/esas2r/esas2r_init.c b/drivers/scsi/esas2r/esas2r_init.c
index 04a07fe57be2..fd72946ec41f 100644
--- a/drivers/scsi/esas2r/esas2r_init.c
+++ b/drivers/scsi/esas2r/esas2r_init.c
@@ -103,8 +103,8 @@ static void esas2r_initmem_free(struct esas2r_adapter *a,
 static bool alloc_vda_req(struct esas2r_adapter *a,
 			  struct esas2r_request *rq)
 {
-	struct esas2r_mem_desc *memdesc = kzalloc(
-		sizeof(struct esas2r_mem_desc), GFP_KERNEL);
+	struct esas2r_mem_desc *memdesc = kzalloc_obj(struct esas2r_mem_desc,
+						      GFP_KERNEL);

 	if (memdesc == NULL) {
 		esas2r_hdebug("could not alloc mem for vda request memdesc\n");
@@ -783,8 +783,7 @@ bool esas2r_init_adapter_struct(struct esas2r_adapter *a,

 	/* allocate requests for asynchronous events */
 	a->first_ae_req =
-		kcalloc(num_ae_requests, sizeof(struct esas2r_request),
-			GFP_KERNEL);
+		kzalloc_objs(struct esas2r_request, num_ae_requests, GFP_KERNEL);

 	if (a->first_ae_req == NULL) {
 		esas2r_log(ESAS2R_LOG_CRIT,
@@ -793,8 +792,8 @@ bool esas2r_init_adapter_struct(struct esas2r_adapter *a,
 	}

 	/* allocate the S/G list memory descriptors */
-	a->sg_list_mds = kcalloc(num_sg_lists, sizeof(struct esas2r_mem_desc),
-				 GFP_KERNEL);
+	a->sg_list_mds = kzalloc_objs(struct esas2r_mem_desc, num_sg_lists,
+				      GFP_KERNEL);

 	if (a->sg_list_mds == NULL) {
 		esas2r_log(ESAS2R_LOG_CRIT,
@@ -804,9 +803,8 @@ bool esas2r_init_adapter_struct(struct esas2r_adapter *a,

 	/* allocate the request table */
 	a->req_table =
-		kcalloc(num_requests + num_ae_requests + 1,
-			sizeof(struct esas2r_request *),
-			GFP_KERNEL);
+		kzalloc_objs(struct esas2r_request *,
+			     num_requests + num_ae_requests + 1, GFP_KERNEL);

 	if (a->req_table == NULL) {
 		esas2r_log(ESAS2R_LOG_CRIT,
diff --git a/drivers/scsi/esas2r/esas2r_main.c b/drivers/scsi/esas2r/esas2r_main.c
index fdcffc871d19..454807522250 100644
--- a/drivers/scsi/esas2r/esas2r_main.c
+++ b/drivers/scsi/esas2r/esas2r_main.c
@@ -194,8 +194,7 @@ static ssize_t write_hw(struct file *file, struct kobject *kobj,
 	int length = min(sizeof(struct atto_ioctl), count);

 	if (!a->local_atto_ioctl) {
-		a->local_atto_ioctl = kmalloc(sizeof(struct atto_ioctl),
-					      GFP_KERNEL);
+		a->local_atto_ioctl = kmalloc_obj(struct atto_ioctl, GFP_KERNEL);
 		if (a->local_atto_ioctl == NULL) {
 			esas2r_log(ESAS2R_LOG_WARN,
 				   "write_hw kzalloc failed for %zu bytes",
@@ -1831,7 +1830,7 @@ void esas2r_queue_fw_event(struct esas2r_adapter *a,
 	struct esas2r_fw_event_work *fw_event;
 	unsigned long flags;

-	fw_event = kzalloc(sizeof(struct esas2r_fw_event_work), GFP_ATOMIC);
+	fw_event = kzalloc_obj(struct esas2r_fw_event_work, GFP_ATOMIC);
 	if (!fw_event) {
 		esas2r_log(ESAS2R_LOG_WARN,
 			   "esas2r_queue_fw_event failed to alloc");
diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c
index 05647ccc3c8a..af46112b4fb0 100644
--- a/drivers/scsi/esp_scsi.c
+++ b/drivers/scsi/esp_scsi.c
@@ -881,7 +881,7 @@ static struct esp_cmd_entry *esp_get_ent(struct esp *esp)
 	struct esp_cmd_entry *ret;

 	if (list_empty(head)) {
-		ret = kzalloc(sizeof(struct esp_cmd_entry), GFP_ATOMIC);
+		ret = kzalloc_obj(struct esp_cmd_entry, GFP_ATOMIC);
 	} else {
 		ret = list_entry(head->next, struct esp_cmd_entry, list);
 		list_del(&ret->list);
@@ -2447,7 +2447,7 @@ static int esp_sdev_init(struct scsi_device *dev)
 	struct esp_target_data *tp = &esp->target[dev->id];
 	struct esp_lun_data *lp;

-	lp = kzalloc(sizeof(*lp), GFP_KERNEL);
+	lp = kzalloc_obj(*lp, GFP_KERNEL);
 	if (!lp)
 		return -ENOMEM;
 	dev->hostdata = lp;
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index c8c5dfb3ba9a..bc0064da561c 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -820,7 +820,7 @@ static void fcoe_fdmi_info(struct fc_lport *lport, struct net_device *netdev)

 	if (realdev->netdev_ops->ndo_fcoe_get_hbainfo) {
 		struct netdev_fcoe_hbainfo *fdmi;
-		fdmi = kzalloc(sizeof(*fdmi), GFP_KERNEL);
+		fdmi = kzalloc_obj(*fdmi, GFP_KERNEL);
 		if (!fdmi)
 			return;

diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
index 8e4241c295e3..a356cf072bf1 100644
--- a/drivers/scsi/fcoe/fcoe_ctlr.c
+++ b/drivers/scsi/fcoe/fcoe_ctlr.c
@@ -168,7 +168,7 @@ static int fcoe_sysfs_fcf_add(struct fcoe_fcf *new)
 	LIBFCOE_FIP_DBG(fip, "New FCF fab %16.16llx mac %pM\n",
 			new->fabric_name, new->fcf_mac);

-	temp = kzalloc(sizeof(*temp), GFP_KERNEL);
+	temp = kzalloc_obj(*temp, GFP_KERNEL);
 	if (!temp)
 		goto out;

@@ -1043,7 +1043,7 @@ static void fcoe_ctlr_recv_adv(struct fcoe_ctlr *fip, struct sk_buff *skb)
 		if (fip->fcf_count >= FCOE_CTLR_FCF_LIMIT)
 			goto out;

-		fcf = kmalloc(sizeof(*fcf), GFP_ATOMIC);
+		fcf = kmalloc_obj(*fcf, GFP_ATOMIC);
 		if (!fcf)
 			goto out;

@@ -1378,8 +1378,7 @@ static void fcoe_ctlr_recv_clr_vlink(struct fcoe_ctlr *fip,
 	 */
 	num_vlink_desc = rlen / sizeof(*vp);
 	if (num_vlink_desc)
-		vlink_desc_arr = kmalloc_array(num_vlink_desc, sizeof(vp),
-					       GFP_ATOMIC);
+		vlink_desc_arr = kmalloc_objs(vp, num_vlink_desc, GFP_ATOMIC);
 	if (!vlink_desc_arr)
 		return;
 	num_vlink_desc = 0;
diff --git a/drivers/scsi/fcoe/fcoe_sysfs.c b/drivers/scsi/fcoe/fcoe_sysfs.c
index 0609ca6b9353..afea5763a3c0 100644
--- a/drivers/scsi/fcoe/fcoe_sysfs.c
+++ b/drivers/scsi/fcoe/fcoe_sysfs.c
@@ -986,7 +986,7 @@ struct fcoe_fcf_device *fcoe_fcf_device_add(struct fcoe_ctlr_device *ctlr,
 		}
 	}

-	fcf = kzalloc(sizeof(struct fcoe_fcf_device), GFP_ATOMIC);
+	fcf = kzalloc_obj(struct fcoe_fcf_device, GFP_ATOMIC);
 	if (unlikely(!fcf))
 		goto out;

diff --git a/drivers/scsi/fcoe/fcoe_transport.c b/drivers/scsi/fcoe/fcoe_transport.c
index 2f478426f16e..e1615cc5c092 100644
--- a/drivers/scsi/fcoe/fcoe_transport.c
+++ b/drivers/scsi/fcoe/fcoe_transport.c
@@ -638,7 +638,7 @@ static int fcoe_add_netdev_mapping(struct net_device *netdev,
 {
 	struct fcoe_netdev_mapping *nm;

-	nm = kmalloc(sizeof(*nm), GFP_KERNEL);
+	nm = kmalloc_obj(*nm, GFP_KERNEL);
 	if (!nm) {
 		printk(KERN_ERR "Unable to allocate netdev_mapping");
 		return -ENOMEM;
diff --git a/drivers/scsi/fnic/fdls_disc.c b/drivers/scsi/fnic/fdls_disc.c
index ae37f85f618b..69ffc492ec9d 100644
--- a/drivers/scsi/fnic/fdls_disc.c
+++ b/drivers/scsi/fnic/fdls_disc.c
@@ -272,7 +272,7 @@ void fdls_schedule_oxid_free(struct fnic_iport_s *iport, uint16_t *active_oxid)
 	*active_oxid = FNIC_UNASSIGNED_OXID;

 	reclaim_entry = (struct reclaim_entry_s *)
-		kzalloc(sizeof(struct reclaim_entry_s), GFP_ATOMIC);
+		kzalloc_obj(struct reclaim_entry_s, GFP_ATOMIC);

 	if (!reclaim_entry) {
 		FNIC_FCS_DBG(KERN_WARNING, fnic->host, fnic->fnic_num,
@@ -316,7 +316,7 @@ void fdls_schedule_oxid_free_retry_work(struct work_struct *work)
 		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
 			"Schedule oxid free. oxid idx: %d\n", idx);

-		reclaim_entry = kzalloc(sizeof(*reclaim_entry), GFP_KERNEL);
+		reclaim_entry = kzalloc_obj(*reclaim_entry, GFP_KERNEL);
 		if (!reclaim_entry) {
 			schedule_delayed_work(&oxid_pool->schedule_oxid_free_retry,
 				msecs_to_jiffies(SCHEDULE_OXID_FREE_RETRY_TIME));
@@ -1270,7 +1270,7 @@ bool fdls_delete_tport(struct fnic_iport_s *iport, struct fnic_tport_s *tport)

 	if (tport->flags & FNIC_FDLS_SCSI_REGISTERED) {
 		tport_del_evt =
-			kzalloc(sizeof(struct fnic_tport_event_s), GFP_ATOMIC);
+			kzalloc_obj(struct fnic_tport_event_s, GFP_ATOMIC);
 		if (!tport_del_evt) {
 			FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
 				 "Failed to allocate memory for tport fcid: 0x%0x\n",
@@ -1776,7 +1776,7 @@ static struct fnic_tport_s *fdls_create_tport(struct fnic_iport_s *iport,
 	FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
 			 "FDLS create tport: fcid: 0x%x wwpn: 0x%llx", fcid, wwpn);

-	tport = kzalloc(sizeof(struct fnic_tport_s), GFP_ATOMIC);
+	tport = kzalloc_obj(struct fnic_tport_s, GFP_ATOMIC);
 	if (!tport) {
 		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
 			 "Memory allocation failure while creating tport: 0x%x\n",
@@ -2365,7 +2365,7 @@ static void fdls_send_delete_tport_msg(struct fnic_tport_s *tport)
 	struct fnic *fnic = iport->fnic;
 	struct fnic_tport_event_s *tport_del_evt;

-	tport_del_evt = kzalloc(sizeof(struct fnic_tport_event_s), GFP_ATOMIC);
+	tport_del_evt = kzalloc_obj(struct fnic_tport_event_s, GFP_ATOMIC);
 	if (!tport_del_evt) {
 		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
 			 "Failed to allocate memory for tport event fcid: 0x%x",
@@ -2852,7 +2852,7 @@ fdls_process_tgt_prli_rsp(struct fnic_iport_s *iport,
 	fdls_set_tport_state(tport, FDLS_TGT_STATE_READY);

 	/* Inform the driver about new target added */
-	tport_add_evt = kzalloc(sizeof(struct fnic_tport_event_s), GFP_ATOMIC);
+	tport_add_evt = kzalloc_obj(struct fnic_tport_event_s, GFP_ATOMIC);
 	if (!tport_add_evt) {
 		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
 				 "tport event memory allocation failure: 0x%0x\n",
diff --git a/drivers/scsi/fnic/fip.c b/drivers/scsi/fnic/fip.c
index ce62ab1180bd..5072c08e75ad 100644
--- a/drivers/scsi/fnic/fip.c
+++ b/drivers/scsi/fnic/fip.c
@@ -139,7 +139,7 @@ void fnic_fcoe_process_vlan_resp(struct fnic *fnic, struct fip_header *fiph)
 			FNIC_FIP_DBG(KERN_INFO, fnic->host,
 				     fnic->fnic_num,
 				     "process_vlan_resp: FIP VLAN %d\n", vid);
-			vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+			vlan = kzalloc_obj(*vlan, GFP_KERNEL);

 			if (!vlan) {
 				/* retry from timer */
diff --git a/drivers/scsi/fnic/fnic_debugfs.c b/drivers/scsi/fnic/fnic_debugfs.c
index 5767862ae42f..ef5298685054 100644
--- a/drivers/scsi/fnic/fnic_debugfs.c
+++ b/drivers/scsi/fnic/fnic_debugfs.c
@@ -200,7 +200,7 @@ static int fnic_trace_debugfs_open(struct inode *inode,
 	fnic_dbgfs_t *fnic_dbg_prt;
 	u8 *rdata_ptr;
 	rdata_ptr = (u8 *)inode->i_private;
-	fnic_dbg_prt = kzalloc(sizeof(fnic_dbgfs_t), GFP_KERNEL);
+	fnic_dbg_prt = kzalloc_obj(fnic_dbgfs_t, GFP_KERNEL);
 	if (!fnic_dbg_prt)
 		return -ENOMEM;

@@ -436,7 +436,7 @@ static int fnic_reset_stats_open(struct inode *inode, struct file *file)
 {
 	struct stats_debug_info *debug;

-	debug = kzalloc(sizeof(struct stats_debug_info), GFP_KERNEL);
+	debug = kzalloc_obj(struct stats_debug_info, GFP_KERNEL);
 	if (!debug)
 		return -ENOMEM;

@@ -583,7 +583,7 @@ static int fnic_stats_debugfs_open(struct inode *inode,
 	struct stats_debug_info *debug;
 	int buf_size = 2 * PAGE_SIZE;

-	debug = kzalloc(sizeof(struct stats_debug_info), GFP_KERNEL);
+	debug = kzalloc_obj(struct stats_debug_info, GFP_KERNEL);
 	if (!debug)
 		return -ENOMEM;

diff --git a/drivers/scsi/fnic/fnic_fcs.c b/drivers/scsi/fnic/fnic_fcs.c
index 103ab6f1f7cd..405b341b73d7 100644
--- a/drivers/scsi/fnic/fnic_fcs.c
+++ b/drivers/scsi/fnic/fnic_fcs.c
@@ -376,7 +376,7 @@ static inline int fnic_import_rq_eth_pkt(struct fnic *fnic, void *fp)
 	eh = (struct ethhdr *) fp;
 	if ((eh->h_proto == cpu_to_be16(ETH_P_FIP)) && (fnic->iport.usefip)) {
 		fip_fr_elem = (struct fnic_frame_list *)
-			kzalloc(sizeof(struct fnic_frame_list), GFP_ATOMIC);
+			kzalloc_obj(struct fnic_frame_list, GFP_ATOMIC);
 		if (!fip_fr_elem)
 			return 0;
 		fip_fr_elem->fp = fp;
diff --git a/drivers/scsi/fnic/fnic_main.c b/drivers/scsi/fnic/fnic_main.c
index 4cc4077ea53c..8a8c008ea2c7 100644
--- a/drivers/scsi/fnic/fnic_main.c
+++ b/drivers/scsi/fnic/fnic_main.c
@@ -715,7 +715,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	/*
 	 * Allocate fnic
 	 */
-	fnic = kzalloc(sizeof(struct fnic), GFP_KERNEL);
+	fnic = kzalloc_obj(struct fnic, GFP_KERNEL);
 	if (!fnic) {
 		err = -ENOMEM;
 		goto err_out_fnic_alloc;
diff --git a/drivers/scsi/fnic/vnic_dev.c b/drivers/scsi/fnic/vnic_dev.c
index e0b173cc9d5f..590effeb21e6 100644
--- a/drivers/scsi/fnic/vnic_dev.c
+++ b/drivers/scsi/fnic/vnic_dev.c
@@ -422,7 +422,7 @@ static int vnic_dev_init_devcmd2(struct vnic_dev *vdev)
 	if (vdev->devcmd2)
 		return 0;

-	vdev->devcmd2 = kzalloc(sizeof(*vdev->devcmd2), GFP_ATOMIC);
+	vdev->devcmd2 = kzalloc_obj(*vdev->devcmd2, GFP_ATOMIC);
 	if (!vdev->devcmd2)
 		return -ENOMEM;

@@ -911,7 +911,7 @@ struct vnic_dev *vnic_dev_register(struct vnic_dev *vdev,
 	void *priv, struct pci_dev *pdev, struct vnic_dev_bar *bar)
 {
 	if (!vdev) {
-		vdev = kzalloc(sizeof(struct vnic_dev), GFP_KERNEL);
+		vdev = kzalloc_obj(struct vnic_dev, GFP_KERNEL);
 		if (!vdev)
 			return NULL;
 	}
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index 3e235dbfb67a..ce20f8906ac7 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -1597,7 +1597,7 @@ static void hpsa_monitor_offline_device(struct ctlr_info *h,
 	spin_unlock_irqrestore(&h->offline_device_lock, flags);

 	/* Device is not on the list, add it. */
-	device = kmalloc(sizeof(*device), GFP_KERNEL);
+	device = kmalloc_obj(*device, GFP_KERNEL);
 	if (!device)
 		return;

@@ -1936,8 +1936,8 @@ static void adjust_hpsa_scsi_table(struct ctlr_info *h,
 	}
 	spin_unlock_irqrestore(&h->reset_lock, flags);

-	added = kcalloc(HPSA_MAX_DEVICES, sizeof(*added), GFP_KERNEL);
-	removed = kcalloc(HPSA_MAX_DEVICES, sizeof(*removed), GFP_KERNEL);
+	added = kzalloc_objs(*added, HPSA_MAX_DEVICES, GFP_KERNEL);
+	removed = kzalloc_objs(*removed, HPSA_MAX_DEVICES, GFP_KERNEL);

 	if (!added || !removed) {
 		dev_warn(&h->pdev->dev, "out of memory in "
@@ -2200,15 +2200,13 @@ static int hpsa_allocate_ioaccel2_sg_chain_blocks(struct ctlr_info *h)
 		return 0;

 	h->ioaccel2_cmd_sg_list =
-		kcalloc(h->nr_cmds, sizeof(*h->ioaccel2_cmd_sg_list),
-					GFP_KERNEL);
+		kzalloc_objs(*h->ioaccel2_cmd_sg_list, h->nr_cmds, GFP_KERNEL);
 	if (!h->ioaccel2_cmd_sg_list)
 		return -ENOMEM;
 	for (i = 0; i < h->nr_cmds; i++) {
 		h->ioaccel2_cmd_sg_list[i] =
-			kmalloc_array(h->maxsgentries,
-				      sizeof(*h->ioaccel2_cmd_sg_list[i]),
-				      GFP_KERNEL);
+			kmalloc_objs(*h->ioaccel2_cmd_sg_list[i],
+				     h->maxsgentries, GFP_KERNEL);
 		if (!h->ioaccel2_cmd_sg_list[i])
 			goto clean;
 	}
@@ -2240,15 +2238,13 @@ static int hpsa_alloc_sg_chain_blocks(struct ctlr_info *h)
 	if (h->chainsize <= 0)
 		return 0;

-	h->cmd_sg_list = kcalloc(h->nr_cmds, sizeof(*h->cmd_sg_list),
-				 GFP_KERNEL);
+	h->cmd_sg_list = kzalloc_objs(*h->cmd_sg_list, h->nr_cmds, GFP_KERNEL);
 	if (!h->cmd_sg_list)
 		return -ENOMEM;

 	for (i = 0; i < h->nr_cmds; i++) {
-		h->cmd_sg_list[i] = kmalloc_array(h->chainsize,
-						  sizeof(*h->cmd_sg_list[i]),
-						  GFP_KERNEL);
+		h->cmd_sg_list[i] = kmalloc_objs(*h->cmd_sg_list[i],
+						 h->chainsize, GFP_KERNEL);
 		if (!h->cmd_sg_list[i])
 			goto clean;

@@ -3469,11 +3465,11 @@ static void hpsa_get_enclosure_info(struct ctlr_info *h,
 		goto out;
 	}

-	bssbp = kzalloc(sizeof(*bssbp), GFP_KERNEL);
+	bssbp = kzalloc_obj(*bssbp, GFP_KERNEL);
 	if (!bssbp)
 		goto out;

-	id_phys = kzalloc(sizeof(*id_phys), GFP_KERNEL);
+	id_phys = kzalloc_obj(*id_phys, GFP_KERNEL);
 	if (!id_phys)
 		goto out;

@@ -3534,7 +3530,7 @@ static u64 hpsa_get_sas_address_from_report_physical(struct ctlr_info *h,
 	u64 sa = 0;
 	int i;

-	physdev = kzalloc(sizeof(*physdev), GFP_KERNEL);
+	physdev = kzalloc_obj(*physdev, GFP_KERNEL);
 	if (!physdev)
 		return 0;

@@ -3565,7 +3561,7 @@ static void hpsa_get_sas_address(struct ctlr_info *h, unsigned char *scsi3addr,
 	if (is_hba_lunid(scsi3addr)) {
 		struct bmic_sense_subsystem_info *ssi;

-		ssi = kzalloc(sizeof(*ssi), GFP_KERNEL);
+		ssi = kzalloc_obj(*ssi, GFP_KERNEL);
 		if (!ssi)
 			return;

@@ -3789,7 +3785,7 @@ static inline int hpsa_scsi_do_report_phys_luns(struct ctlr_info *h,
 		return rc;

 	/* REPORT PHYS EXTENDED is not supported */
-	lbuf = kzalloc(sizeof(*lbuf), GFP_KERNEL);
+	lbuf = kzalloc_obj(*lbuf, GFP_KERNEL);
 	if (!lbuf)
 		return -ENOMEM;

@@ -4260,7 +4256,7 @@ static bool hpsa_is_disk_spare(struct ctlr_info *h, u8 *lunaddrbytes)
 	bool is_spare = false;
 	int rc;

-	id_phys = kzalloc(sizeof(*id_phys), GFP_KERNEL);
+	id_phys = kzalloc_obj(*id_phys, GFP_KERNEL);
 	if (!id_phys)
 		return false;

@@ -4345,12 +4341,12 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h)
 	int raid_ctlr_position;
 	bool physical_device;

-	currentsd = kcalloc(HPSA_MAX_DEVICES, sizeof(*currentsd), GFP_KERNEL);
-	physdev_list = kzalloc(sizeof(*physdev_list), GFP_KERNEL);
-	logdev_list = kzalloc(sizeof(*logdev_list), GFP_KERNEL);
-	tmpdevice = kzalloc(sizeof(*tmpdevice), GFP_KERNEL);
-	id_phys = kzalloc(sizeof(*id_phys), GFP_KERNEL);
-	id_ctlr = kzalloc(sizeof(*id_ctlr), GFP_KERNEL);
+	currentsd = kzalloc_objs(*currentsd, HPSA_MAX_DEVICES, GFP_KERNEL);
+	physdev_list = kzalloc_obj(*physdev_list, GFP_KERNEL);
+	logdev_list = kzalloc_obj(*logdev_list, GFP_KERNEL);
+	tmpdevice = kzalloc_obj(*tmpdevice, GFP_KERNEL);
+	id_phys = kzalloc_obj(*id_phys, GFP_KERNEL);
+	id_ctlr = kzalloc_obj(*id_ctlr, GFP_KERNEL);

 	if (!currentsd || !physdev_list || !logdev_list ||
 		!tmpdevice || !id_phys || !id_ctlr) {
@@ -4390,7 +4386,7 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h)
 			break;
 		}

-		currentsd[i] = kzalloc(sizeof(*currentsd[i]), GFP_KERNEL);
+		currentsd[i] = kzalloc_obj(*currentsd[i], GFP_KERNEL);
 		if (!currentsd[i]) {
 			h->drv_req_rescan = 1;
 			goto out;
@@ -6504,7 +6500,7 @@ static int hpsa_big_passthru_ioctl(struct ctlr_info *h,
 		status = -ENOMEM;
 		goto cleanup1;
 	}
-	buff_size = kmalloc_array(SG_ENTRIES_IN_CMD, sizeof(int), GFP_KERNEL);
+	buff_size = kmalloc_objs(int, SG_ENTRIES_IN_CMD, GFP_KERNEL);
 	if (!buff_size) {
 		status = -ENOMEM;
 		goto cleanup1;
@@ -8494,7 +8490,7 @@ static int hpsa_luns_changed(struct ctlr_info *h)
 	if (!h->lastlogicals)
 		return rc;

-	logdev = kzalloc(sizeof(*logdev), GFP_KERNEL);
+	logdev = kzalloc_obj(*logdev, GFP_KERNEL);
 	if (!logdev)
 		return rc;

@@ -8635,7 +8631,7 @@ static struct ctlr_info *hpda_alloc_ctlr_info(void)
 {
 	struct ctlr_info *h;

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return NULL;

@@ -8856,7 +8852,7 @@ static int hpsa_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)

 	hpsa_hba_inquiry(h);

-	h->lastlogicals = kzalloc(sizeof(*(h->lastlogicals)), GFP_KERNEL);
+	h->lastlogicals = kzalloc_obj(*(h->lastlogicals), GFP_KERNEL);
 	if (!h->lastlogicals)
 		dev_info(&h->pdev->dev,
 			"Can't track change to report lun data\n");
@@ -8960,7 +8956,7 @@ static void hpsa_disable_rld_caching(struct ctlr_info *h)
 	if (unlikely(h->lockup_detected))
 		return;

-	options = kzalloc(sizeof(*options), GFP_KERNEL);
+	options = kzalloc_obj(*options, GFP_KERNEL);
 	if (!options)
 		return;

@@ -9557,7 +9553,7 @@ static struct hpsa_sas_phy *hpsa_alloc_sas_phy(
 	struct hpsa_sas_phy *hpsa_sas_phy;
 	struct sas_phy *phy;

-	hpsa_sas_phy = kzalloc(sizeof(*hpsa_sas_phy), GFP_KERNEL);
+	hpsa_sas_phy = kzalloc_obj(*hpsa_sas_phy, GFP_KERNEL);
 	if (!hpsa_sas_phy)
 		return NULL;

@@ -9642,7 +9638,7 @@ static struct hpsa_sas_port
 	struct hpsa_sas_port *hpsa_sas_port;
 	struct sas_port *port;

-	hpsa_sas_port = kzalloc(sizeof(*hpsa_sas_port), GFP_KERNEL);
+	hpsa_sas_port = kzalloc_obj(*hpsa_sas_port, GFP_KERNEL);
 	if (!hpsa_sas_port)
 		return NULL;

@@ -9690,7 +9686,7 @@ static struct hpsa_sas_node *hpsa_alloc_sas_node(struct device *parent_dev)
 {
 	struct hpsa_sas_node *hpsa_sas_node;

-	hpsa_sas_node = kzalloc(sizeof(*hpsa_sas_node), GFP_KERNEL);
+	hpsa_sas_node = kzalloc_obj(*hpsa_sas_node, GFP_KERNEL);
 	if (hpsa_sas_node) {
 		hpsa_sas_node->parent_dev = parent_dev;
 		INIT_LIST_HEAD(&hpsa_sas_node->port_list_head);
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index 1c370d11b6dd..2973395badab 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -797,7 +797,7 @@ static int ibmvfc_init_event_pool(struct ibmvfc_host *vhost,
 		return 0;

 	pool->size = queue->total_depth;
-	pool->events = kcalloc(pool->size, sizeof(*pool->events), GFP_KERNEL);
+	pool->events = kzalloc_objs(*pool->events, pool->size, GFP_KERNEL);
 	if (!pool->events)
 		return -ENOMEM;

@@ -6057,9 +6057,8 @@ static int ibmvfc_alloc_channels(struct ibmvfc_host *vhost,
 	int i, j;
 	int rc = 0;

-	channels->scrqs = kcalloc(channels->max_queues,
-				  sizeof(*channels->scrqs),
-				  GFP_KERNEL);
+	channels->scrqs = kzalloc_objs(*channels->scrqs, channels->max_queues,
+				       GFP_KERNEL);
 	if (!channels->scrqs)
 		return -ENOMEM;

@@ -6211,8 +6210,8 @@ static int ibmvfc_alloc_mem(struct ibmvfc_host *vhost)
 	if (ibmvfc_alloc_disc_buf(dev, &vhost->scsi_scrqs))
 		goto free_login_buffer;

-	vhost->trace = kcalloc(IBMVFC_NUM_TRACE_ENTRIES,
-			       sizeof(struct ibmvfc_trace_entry), GFP_KERNEL);
+	vhost->trace = kzalloc_objs(struct ibmvfc_trace_entry,
+				    IBMVFC_NUM_TRACE_ENTRIES, GFP_KERNEL);
 	atomic_set(&vhost->trace_index, -1);

 	if (!vhost->trace)
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
index 200debd6f7e8..da88b6b125d6 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -447,7 +447,7 @@ static int initialize_event_pool(struct event_pool *pool,

 	pool->size = size;
 	pool->next = 0;
-	pool->events = kcalloc(pool->size, sizeof(*pool->events), GFP_KERNEL);
+	pool->events = kzalloc_objs(*pool->events, pool->size, GFP_KERNEL);
 	if (!pool->events)
 		return -ENOMEM;

diff --git a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c
index f259746bc804..a3a6953ba1c7 100644
--- a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c
+++ b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c
@@ -2214,7 +2214,7 @@ static int ibmvscsis_make_nexus(struct ibmvscsis_tport *tport)
 		return 0;
 	}

-	nexus = kzalloc(sizeof(*nexus), GFP_KERNEL);
+	nexus = kzalloc_obj(*nexus, GFP_KERNEL);
 	if (!nexus) {
 		dev_err(&vscsi->dev, "Unable to allocate struct ibmvscsis_nexus\n");
 		return -ENOMEM;
@@ -3424,7 +3424,7 @@ static int ibmvscsis_probe(struct vio_dev *vdev,
 	int rc = 0;
 	long hrc = 0;

-	vscsi = kzalloc(sizeof(*vscsi), GFP_KERNEL);
+	vscsi = kzalloc_obj(*vscsi, GFP_KERNEL);
 	if (!vscsi) {
 		rc = -ENOMEM;
 		dev_err(&vdev->dev, "probe: allocation of adapter failed\n");
diff --git a/drivers/scsi/ibmvscsi_tgt/libsrp.c b/drivers/scsi/ibmvscsi_tgt/libsrp.c
index 0ecad398ed3d..8fd0bc7cb429 100644
--- a/drivers/scsi/ibmvscsi_tgt/libsrp.c
+++ b/drivers/scsi/ibmvscsi_tgt/libsrp.c
@@ -27,10 +27,10 @@ static int srp_iu_pool_alloc(struct srp_queue *q, size_t max,
 	struct iu_entry *iue;
 	int i;

-	q->pool = kcalloc(max, sizeof(struct iu_entry *), GFP_KERNEL);
+	q->pool = kzalloc_objs(struct iu_entry *, max, GFP_KERNEL);
 	if (!q->pool)
 		return -ENOMEM;
-	q->items = kcalloc(max, sizeof(struct iu_entry), GFP_KERNEL);
+	q->items = kzalloc_objs(struct iu_entry, max, GFP_KERNEL);
 	if (!q->items)
 		goto free_pool;

@@ -61,12 +61,12 @@ static struct srp_buf **srp_ring_alloc(struct device *dev,
 	struct srp_buf **ring;
 	int i;

-	ring = kcalloc(max, sizeof(struct srp_buf *), GFP_KERNEL);
+	ring = kzalloc_objs(struct srp_buf *, max, GFP_KERNEL);
 	if (!ring)
 		return NULL;

 	for (i = 0; i < max; i++) {
-		ring[i] = kzalloc(sizeof(*ring[i]), GFP_KERNEL);
+		ring[i] = kzalloc_obj(*ring[i], GFP_KERNEL);
 		if (!ring[i])
 			goto out;
 		ring[i]->buf = dma_alloc_coherent(dev, size, &ring[i]->dma,
diff --git a/drivers/scsi/imm.c b/drivers/scsi/imm.c
index da7aaac10a73..2ed57ea13884 100644
--- a/drivers/scsi/imm.c
+++ b/drivers/scsi/imm.c
@@ -1158,7 +1158,7 @@ static int __imm_attach(struct parport *pb)

 	init_waitqueue_head(&waiting);

-	dev = kzalloc(sizeof(imm_struct), GFP_KERNEL);
+	dev = kzalloc_obj(imm_struct, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index c0487ce38d8d..3b3f40eb32f4 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -3776,7 +3776,7 @@ static struct ipr_sglist *ipr_alloc_ucode_buffer(int buf_len)
 	order = get_order(sg_size);

 	/* Allocate a scatter/gather list for the DMA */
-	sglist = kzalloc(sizeof(struct ipr_sglist), GFP_KERNEL);
+	sglist = kzalloc_obj(struct ipr_sglist, GFP_KERNEL);
 	if (sglist == NULL) {
 		ipr_trace;
 		return NULL;
@@ -4273,7 +4273,7 @@ static int ipr_alloc_dump(struct ipr_ioa_cfg *ioa_cfg)
 	__be32 **ioa_data;
 	unsigned long lock_flags = 0;

-	dump = kzalloc(sizeof(struct ipr_dump), GFP_KERNEL);
+	dump = kzalloc_obj(struct ipr_dump, GFP_KERNEL);

 	if (!dump) {
 		ipr_err("Dump memory allocation failed\n");
@@ -8859,8 +8859,10 @@ static int ipr_alloc_cmd_blks(struct ipr_ioa_cfg *ioa_cfg)
 	if (!ioa_cfg->ipr_cmd_pool)
 		return -ENOMEM;

-	ioa_cfg->ipr_cmnd_list = kcalloc(IPR_NUM_CMD_BLKS, sizeof(struct ipr_cmnd *), GFP_KERNEL);
-	ioa_cfg->ipr_cmnd_list_dma = kcalloc(IPR_NUM_CMD_BLKS, sizeof(dma_addr_t), GFP_KERNEL);
+	ioa_cfg->ipr_cmnd_list = kzalloc_objs(struct ipr_cmnd *,
+					      IPR_NUM_CMD_BLKS, GFP_KERNEL);
+	ioa_cfg->ipr_cmnd_list_dma = kzalloc_objs(dma_addr_t, IPR_NUM_CMD_BLKS,
+						  GFP_KERNEL);

 	if (!ioa_cfg->ipr_cmnd_list || !ioa_cfg->ipr_cmnd_list_dma) {
 		ipr_free_cmd_blks(ioa_cfg);
@@ -8963,9 +8965,9 @@ static int ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg)
 	int i, rc = -ENOMEM;

 	ENTER;
-	ioa_cfg->res_entries = kcalloc(ioa_cfg->max_devs_supported,
-				       sizeof(struct ipr_resource_entry),
-				       GFP_KERNEL);
+	ioa_cfg->res_entries = kzalloc_objs(struct ipr_resource_entry,
+					    ioa_cfg->max_devs_supported,
+					    GFP_KERNEL);

 	if (!ioa_cfg->res_entries)
 		goto out;
@@ -9026,9 +9028,8 @@ static int ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg)
 		list_add_tail(&ioa_cfg->hostrcb[i]->queue, &ioa_cfg->hostrcb_free_q);
 	}

-	ioa_cfg->trace = kcalloc(IPR_NUM_TRACE_ENTRIES,
-				 sizeof(struct ipr_trace_entry),
-				 GFP_KERNEL);
+	ioa_cfg->trace = kzalloc_objs(struct ipr_trace_entry,
+				      IPR_NUM_TRACE_ENTRIES, GFP_KERNEL);

 	if (!ioa_cfg->trace)
 		goto out_free_hostrcb_dma;
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index 0089b17ed288..6bb87f02b746 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -1086,7 +1086,7 @@ static enum scsi_qc_status ips_queue_lck(struct scsi_cmnd *SC)
 		}

 		/* allocate space for the scribble */
-		scratch = kmalloc(sizeof (ips_copp_wait_item_t), GFP_ATOMIC);
+		scratch = kmalloc_obj(ips_copp_wait_item_t, GFP_ATOMIC);

 		if (!scratch) {
 			SC->result = DID_ERROR << 16;
@@ -6874,7 +6874,7 @@ ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr)
 	}

 	/* found a controller */
-	ha = kzalloc(sizeof (ips_ha_t), GFP_KERNEL);
+	ha = kzalloc_obj(ips_ha_t, GFP_KERNEL);
 	if (ha == NULL) {
 		IPS_PRINTK(KERN_WARNING, pci_dev,
 			   "Unable to allocate temporary ha struct\n");
@@ -6947,7 +6947,7 @@ ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr)
 	ha->logical_drive_info_dma_addr = dma_address;


-	ha->conf = kmalloc(sizeof (IPS_CONF), GFP_KERNEL);
+	ha->conf = kmalloc_obj(IPS_CONF, GFP_KERNEL);

 	if (!ha->conf) {
 		IPS_PRINTK(KERN_WARNING, pci_dev,
@@ -6955,7 +6955,7 @@ ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr)
 		return ips_abort_init(ha, index);
 	}

-	ha->nvram = kmalloc(sizeof (IPS_NVRAM_P5), GFP_KERNEL);
+	ha->nvram = kmalloc_obj(IPS_NVRAM_P5, GFP_KERNEL);

 	if (!ha->nvram) {
 		IPS_PRINTK(KERN_WARNING, pci_dev,
@@ -6963,7 +6963,7 @@ ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr)
 		return ips_abort_init(ha, index);
 	}

-	ha->subsys = kmalloc(sizeof (IPS_SUBSYS), GFP_KERNEL);
+	ha->subsys = kmalloc_obj(IPS_SUBSYS, GFP_KERNEL);

 	if (!ha->subsys) {
 		IPS_PRINTK(KERN_WARNING, pci_dev,
diff --git a/drivers/scsi/iscsi_boot_sysfs.c b/drivers/scsi/iscsi_boot_sysfs.c
index a64abe38db2d..09fa63fc18f5 100644
--- a/drivers/scsi/iscsi_boot_sysfs.c
+++ b/drivers/scsi/iscsi_boot_sysfs.c
@@ -344,7 +344,7 @@ iscsi_boot_create_kobj(struct iscsi_boot_kset *boot_kset,
 {
 	struct iscsi_boot_kobj *boot_kobj;

-	boot_kobj = kzalloc(sizeof(*boot_kobj), GFP_KERNEL);
+	boot_kobj = kzalloc_obj(*boot_kobj, GFP_KERNEL);
 	if (!boot_kobj)
 		return NULL;
 	INIT_LIST_HEAD(&boot_kobj->list);
@@ -497,7 +497,7 @@ struct iscsi_boot_kset *iscsi_boot_create_kset(const char *set_name)
 {
 	struct iscsi_boot_kset *boot_kset;

-	boot_kset = kzalloc(sizeof(*boot_kset), GFP_KERNEL);
+	boot_kset = kzalloc_obj(*boot_kset, GFP_KERNEL);
 	if (!boot_kset)
 		return NULL;

diff --git a/drivers/scsi/lasi700.c b/drivers/scsi/lasi700.c
index 86fe19e0468d..4663927255ba 100644
--- a/drivers/scsi/lasi700.c
+++ b/drivers/scsi/lasi700.c
@@ -88,7 +88,7 @@ lasi700_probe(struct parisc_device *dev)
 	struct NCR_700_Host_Parameters *hostdata;
 	struct Scsi_Host *host;

-	hostdata = kzalloc(sizeof(*hostdata), GFP_KERNEL);
+	hostdata = kzalloc_obj(*hostdata, GFP_KERNEL);
 	if (!hostdata) {
 		dev_printk(KERN_ERR, &dev->dev, "Failed to allocate host data\n");
 		return -ENOMEM;
diff --git a/drivers/scsi/libfc/fc_disc.c b/drivers/scsi/libfc/fc_disc.c
index 60d621ad0024..5cc10b70b772 100644
--- a/drivers/scsi/libfc/fc_disc.c
+++ b/drivers/scsi/libfc/fc_disc.c
@@ -116,7 +116,7 @@ static void fc_disc_recv_rscn_req(struct fc_disc *disc, struct fc_frame *fp)
 		case ELS_ADDR_FMT_PORT:
 			FC_DISC_DBG(disc, "Port address format for port "
 				    "(%6.6x)\n", ntoh24(pp->rscn_fid));
-			dp = kzalloc(sizeof(*dp), GFP_KERNEL);
+			dp = kzalloc_obj(*dp, GFP_KERNEL);
 			if (!dp) {
 				redisc = 1;
 				break;
diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c
index f84a7e6ae379..9183a0e9568a 100644
--- a/drivers/scsi/libfc/fc_exch.c
+++ b/drivers/scsi/libfc/fc_exch.c
@@ -2391,7 +2391,7 @@ struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *lport,
 {
 	struct fc_exch_mgr_anchor *ema;

-	ema = kmalloc(sizeof(*ema), GFP_ATOMIC);
+	ema = kmalloc_obj(*ema, GFP_ATOMIC);
 	if (!ema)
 		return ema;

@@ -2480,7 +2480,7 @@ struct fc_exch_mgr *fc_exch_mgr_alloc(struct fc_lport *lport,
 	/*
 	 * allocate memory for EM
 	 */
-	mp = kzalloc(sizeof(struct fc_exch_mgr), GFP_ATOMIC);
+	mp = kzalloc_obj(struct fc_exch_mgr, GFP_ATOMIC);
 	if (!mp)
 		return NULL;

diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
index 2f93f6c65a86..414bd2e45fec 100644
--- a/drivers/scsi/libfc/fc_fcp.c
+++ b/drivers/scsi/libfc/fc_fcp.c
@@ -2298,7 +2298,7 @@ int fc_fcp_init(struct fc_lport *lport)
 	if (!lport->tt.fcp_abort_io)
 		lport->tt.fcp_abort_io = fc_fcp_abort_io;

-	si = kzalloc(sizeof(struct fc_fcp_internal), GFP_KERNEL);
+	si = kzalloc_obj(struct fc_fcp_internal, GFP_KERNEL);
 	if (!si)
 		return -ENOMEM;
 	lport->scsi_priv = si;
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index 310fa5add5f0..67583e44ad5b 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -2049,7 +2049,7 @@ static int fc_lport_els_request(struct bsg_job *job,
 	fh->fh_df_ctl = 0;
 	fh->fh_parm_offset = 0;

-	info = kzalloc(sizeof(struct fc_bsg_info), GFP_KERNEL);
+	info = kzalloc_obj(struct fc_bsg_info, GFP_KERNEL);
 	if (!info) {
 		fc_frame_free(fp);
 		return -ENOMEM;
@@ -2109,7 +2109,7 @@ static int fc_lport_ct_request(struct bsg_job *job,
 	fh->fh_df_ctl = 0;
 	fh->fh_parm_offset = 0;

-	info = kzalloc(sizeof(struct fc_bsg_info), GFP_KERNEL);
+	info = kzalloc_obj(struct fc_bsg_info, GFP_KERNEL);
 	if (!info) {
 		fc_frame_free(fp);
 		return -ENOMEM;
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index bcecb4911da9..0d24d6cc2dd8 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -579,7 +579,7 @@ int sas_ata_init(struct domain_device *found_dev)
 	struct ata_port *ap;
 	int rc;

-	ata_host = kzalloc(sizeof(*ata_host), GFP_KERNEL);
+	ata_host = kzalloc_obj(*ata_host, GFP_KERNEL);
 	if (!ata_host)	{
 		pr_err("ata host alloc failed.\n");
 		return -ENOMEM;
diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
index d953225f6cc2..e48b5233c2e9 100644
--- a/drivers/scsi/libsas/sas_expander.c
+++ b/drivers/scsi/libsas/sas_expander.c
@@ -433,7 +433,7 @@ static int sas_expander_discover(struct domain_device *dev)
 	struct expander_device *ex = &dev->ex_dev;
 	int res;

-	ex->ex_phy = kcalloc(ex->num_phys, sizeof(*ex->ex_phy), GFP_KERNEL);
+	ex->ex_phy = kzalloc_objs(*ex->ex_phy, ex->num_phys, GFP_KERNEL);
 	if (!ex->ex_phy)
 		return -ENOMEM;

diff --git a/drivers/scsi/libsas/sas_init.c b/drivers/scsi/libsas/sas_init.c
index 6b15ad1bcada..08e641374c85 100644
--- a/drivers/scsi/libsas/sas_init.c
+++ b/drivers/scsi/libsas/sas_init.c
@@ -39,7 +39,7 @@ struct sas_task *sas_alloc_task(gfp_t flags)
 struct sas_task *sas_alloc_slow_task(gfp_t flags)
 {
 	struct sas_task *task = sas_alloc_task(flags);
-	struct sas_task_slow *slow = kmalloc(sizeof(*slow), flags);
+	struct sas_task_slow *slow = kmalloc_obj(*slow, flags);

 	if (!task || !slow) {
 		if (task)
@@ -505,7 +505,7 @@ static void phy_enable_work(struct work_struct *work)

 static int sas_phy_setup(struct sas_phy *phy)
 {
-	struct sas_phy_data *d = kzalloc(sizeof(*d), GFP_KERNEL);
+	struct sas_phy_data *d = kzalloc_obj(*d, GFP_KERNEL);

 	if (!d)
 		return -ENOMEM;
diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h
index d104c87f04f5..fafcefcf722a 100644
--- a/drivers/scsi/libsas/sas_internal.h
+++ b/drivers/scsi/libsas/sas_internal.h
@@ -192,7 +192,7 @@ static inline void sas_phy_set_target(struct asd_sas_phy *p, struct domain_devic

 static inline struct domain_device *sas_alloc_device(void)
 {
-	struct domain_device *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	struct domain_device *dev = kzalloc_obj(*dev, GFP_KERNEL);

 	if (dev) {
 		INIT_LIST_HEAD(&dev->siblings);
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index 4af5c069635a..fef3f283cfa7 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -2041,7 +2041,7 @@ lpfc_xcvr_data_show(struct device *dev, struct device_attribute *attr,
 	struct sff_trasnceiver_codes_byte7 *trasn_code_byte7;

 	/* Get transceiver information */
-	rdp_context = kmalloc(sizeof(*rdp_context), GFP_KERNEL);
+	rdp_context = kmalloc_obj(*rdp_context, GFP_KERNEL);
 	if (!rdp_context) {
 		len = scnprintf(buf, PAGE_SIZE - len,
 				"SPF info NA: alloc failure\n");
diff --git a/drivers/scsi/lpfc/lpfc_bsg.c b/drivers/scsi/lpfc/lpfc_bsg.c
index d61d979f9b77..8c2b303ff144 100644
--- a/drivers/scsi/lpfc/lpfc_bsg.c
+++ b/drivers/scsi/lpfc/lpfc_bsg.c
@@ -174,7 +174,7 @@ lpfc_alloc_bsg_buffers(struct lpfc_hba *phba, unsigned int size,
 	/* Allocate dma buffer and place in BPL passed */
 	while (bytes_left) {
 		/* Allocate dma buffer  */
-		mp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+		mp = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 		if (!mp) {
 			if (mlist)
 				lpfc_free_bsg_buffers(phba, mlist);
@@ -416,7 +416,7 @@ lpfc_bsg_send_mgmt_cmd(struct bsg_job *job)
 		return -ENODEV;

 	/* allocate our bsg tracking structure */
-	dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
+	dd_data = kmalloc_obj(struct bsg_job_data, GFP_KERNEL);
 	if (!dd_data) {
 		lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC,
 				"2733 Failed allocation of dd_data\n");
@@ -430,7 +430,7 @@ lpfc_bsg_send_mgmt_cmd(struct bsg_job *job)
 		goto free_dd;
 	}

-	bmp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	bmp = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (!bmp) {
 		rc = -ENOMEM;
 		goto free_cmdiocbq;
@@ -683,7 +683,7 @@ lpfc_bsg_rport_els(struct bsg_job *job)
 	}

 	/* allocate our bsg tracking structure */
-	dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
+	dd_data = kmalloc_obj(struct bsg_job_data, GFP_KERNEL);
 	if (!dd_data) {
 		lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC,
 				"2735 Failed allocation of dd_data\n");
@@ -843,7 +843,7 @@ lpfc_bsg_event_unref(struct lpfc_bsg_event *evt)
 static struct lpfc_bsg_event *
 lpfc_bsg_event_new(uint32_t ev_mask, int ev_reg_id, uint32_t ev_req_id)
 {
-	struct lpfc_bsg_event *evt = kzalloc(sizeof(*evt), GFP_KERNEL);
+	struct lpfc_bsg_event *evt = kzalloc_obj(*evt, GFP_KERNEL);

 	if (!evt)
 		return NULL;
@@ -939,7 +939,7 @@ lpfc_bsg_ct_unsol_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,

 		lpfc_bsg_event_ref(evt);
 		spin_unlock_irqrestore(&phba->ct_ev_lock, flags);
-		evt_dat = kzalloc(sizeof(*evt_dat), GFP_KERNEL);
+		evt_dat = kzalloc_obj(*evt_dat, GFP_KERNEL);
 		if (evt_dat == NULL) {
 			spin_lock_irqsave(&phba->ct_ev_lock, flags);
 			lpfc_bsg_event_unref(evt);
@@ -1215,7 +1215,7 @@ lpfc_bsg_hba_set_event(struct bsg_job *job)

 	if (&evt->node == &phba->ct_ev_waiters) {
 		/* no event waiting struct yet - first call */
-		dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
+		dd_data = kmalloc_obj(struct bsg_job_data, GFP_KERNEL);
 		if (dd_data == NULL) {
 			lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC,
 					"2734 Failed allocation of dd_data\n");
@@ -1477,7 +1477,7 @@ lpfc_issue_ct_rsp(struct lpfc_hba *phba, struct bsg_job *job, uint32_t tag,
 	}

 	/* allocate our bsg tracking structure */
-	dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
+	dd_data = kmalloc_obj(struct bsg_job_data, GFP_KERNEL);
 	if (!dd_data) {
 		lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC,
 				"2736 Failed allocation of dd_data\n");
@@ -1605,7 +1605,7 @@ lpfc_bsg_send_mgmt_rsp(struct bsg_job *job)
 		goto send_mgmt_rsp_exit;
 	}

-	bmp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	bmp = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (!bmp) {
 		rc = -ENOMEM;
 		goto send_mgmt_rsp_exit;
@@ -2628,7 +2628,7 @@ static int lpfcdiag_loop_get_xri(struct lpfc_hba *phba, uint16_t rpi,
 	cmdiocbq = lpfc_sli_get_iocbq(phba);
 	rspiocbq = lpfc_sli_get_iocbq(phba);

-	dmabuf = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	dmabuf = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (dmabuf) {
 		dmabuf->virt = lpfc_mbuf_alloc(phba, 0, &dmabuf->phys);
 		if (dmabuf->virt) {
@@ -2733,7 +2733,7 @@ lpfc_bsg_dma_page_alloc(struct lpfc_hba *phba)
 	struct pci_dev *pcidev = phba->pcidev;

 	/* allocate dma buffer struct */
-	dmabuf = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	dmabuf = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (!dmabuf)
 		return NULL;

@@ -2829,7 +2829,7 @@ diag_cmd_data_alloc(struct lpfc_hba *phba,
 			cnt = size;

 		/* allocate struct lpfc_dmabufext buffer header */
-		dmp = kmalloc(sizeof(struct lpfc_dmabufext), GFP_KERNEL);
+		dmp = kmalloc_obj(struct lpfc_dmabufext, GFP_KERNEL);
 		if (!dmp)
 			goto out;

@@ -2909,7 +2909,7 @@ static int lpfcdiag_sli3_loop_post_rxbufs(struct lpfc_hba *phba, uint16_t rxxri,
 	pring = lpfc_phba_elsring(phba);

 	cmdiocbq = lpfc_sli_get_iocbq(phba);
-	rxbmp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	rxbmp = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (rxbmp != NULL) {
 		rxbmp->virt = lpfc_mbuf_alloc(phba, 0, &rxbmp->phys);
 		if (rxbmp->virt) {
@@ -3160,7 +3160,7 @@ lpfc_bsg_diag_loopback_run(struct bsg_job *job)
 	cmdiocbq = lpfc_sli_get_iocbq(phba);
 	if (phba->sli_rev < LPFC_SLI_REV4)
 		rspiocbq = lpfc_sli_get_iocbq(phba);
-	txbmp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	txbmp = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);

 	if (txbmp) {
 		txbmp->virt = lpfc_mbuf_alloc(phba, 0, &txbmp->phys);
@@ -4074,7 +4074,7 @@ lpfc_bsg_sli_cfg_read_cmd_ext(struct lpfc_hba *phba, struct bsg_job *job,
 	}

 	/* bsg tracking structure */
-	dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
+	dd_data = kmalloc_obj(struct bsg_job_data, GFP_KERNEL);
 	if (!dd_data) {
 		rc = -ENOMEM;
 		goto job_error;
@@ -4275,7 +4275,7 @@ lpfc_bsg_sli_cfg_write_cmd_ext(struct lpfc_hba *phba, struct bsg_job *job,

 	if (ext_buf_cnt == 1) {
 		/* bsg tracking structure */
-		dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
+		dd_data = kmalloc_obj(struct bsg_job_data, GFP_KERNEL);
 		if (!dd_data) {
 			rc = -ENOMEM;
 			goto job_error;
@@ -4624,7 +4624,7 @@ lpfc_bsg_write_ebuf_set(struct lpfc_hba *phba, struct bsg_job *job,
 				"ebuffers received\n",
 				phba->mbox_ext_buf_ctx.numBuf);

-		dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
+		dd_data = kmalloc_obj(struct bsg_job_data, GFP_KERNEL);
 		if (!dd_data) {
 			rc = -ENOMEM;
 			goto job_error;
@@ -4896,7 +4896,7 @@ lpfc_bsg_issue_mbox(struct lpfc_hba *phba, struct bsg_job *job,
 		goto job_done; /* must be negative */

 	/* allocate our bsg tracking structure */
-	dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
+	dd_data = kmalloc_obj(struct bsg_job_data, GFP_KERNEL);
 	if (!dd_data) {
 		lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC,
 				"2727 Failed allocation of dd_data\n");
diff --git a/drivers/scsi/lpfc/lpfc_ct.c b/drivers/scsi/lpfc/lpfc_ct.c
index d3caac394291..a6ae7b7cf99c 100644
--- a/drivers/scsi/lpfc/lpfc_ct.c
+++ b/drivers/scsi/lpfc/lpfc_ct.c
@@ -165,7 +165,7 @@ lpfc_ct_reject_event(struct lpfc_nodelist *ndlp,
 	u32 tmo;

 	/* fill in BDEs for command */
-	mp = kmalloc(sizeof(*mp), GFP_KERNEL);
+	mp = kmalloc_obj(*mp, GFP_KERNEL);
 	if (!mp) {
 		rc = 1;
 		goto ct_exit;
@@ -178,7 +178,7 @@ lpfc_ct_reject_event(struct lpfc_nodelist *ndlp,
 	}

 	/* Allocate buffer for Buffer ptr list */
-	bmp = kmalloc(sizeof(*bmp), GFP_KERNEL);
+	bmp = kmalloc_obj(*bmp, GFP_KERNEL);
 	if (!bmp) {
 		rc = 3;
 		goto ct_free_mpvirt;
@@ -498,7 +498,7 @@ lpfc_alloc_ct_rsp(struct lpfc_hba *phba, __be16 cmdcode, struct ulp_bde64 *bpl,

 	while (size) {
 		/* Allocate buffer for rsp payload */
-		mp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+		mp = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 		if (!mp) {
 			if (mlist)
 				lpfc_free_ct_rsp(phba, mlist);
@@ -1924,7 +1924,7 @@ lpfc_ns_cmd(struct lpfc_vport *vport, int cmdcode,

 	/* fill in BDEs for command */
 	/* Allocate buffer for command payload */
-	mp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	mp = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (!mp) {
 		rc=2;
 		goto ns_cmd_exit;
@@ -1938,7 +1938,7 @@ lpfc_ns_cmd(struct lpfc_vport *vport, int cmdcode,
 	}

 	/* Allocate buffer for Buffer ptr list */
-	bmp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	bmp = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (!bmp) {
 		rc=4;
 		goto ns_cmd_free_mpvirt;
@@ -3220,7 +3220,7 @@ lpfc_fdmi_cmd(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,

 	/* fill in BDEs for command */
 	/* Allocate buffer for command payload */
-	rq = kmalloc(sizeof(*rq), GFP_KERNEL);
+	rq = kmalloc_obj(*rq, GFP_KERNEL);
 	if (!rq)
 		goto fdmi_cmd_exit;

@@ -3229,7 +3229,7 @@ lpfc_fdmi_cmd(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 		goto fdmi_cmd_free_rq;

 	/* Allocate buffer for Buffer ptr list */
-	rsp = kmalloc(sizeof(*rsp), GFP_KERNEL);
+	rsp = kmalloc_obj(*rsp, GFP_KERNEL);
 	if (!rsp)
 		goto fdmi_cmd_free_rqvirt;

@@ -3716,7 +3716,7 @@ lpfc_vmid_cmd(struct lpfc_vport *vport,

 	/* fill in BDEs for command */
 	/* Allocate buffer for command payload */
-	mp = kmalloc(sizeof(*mp), GFP_KERNEL);
+	mp = kmalloc_obj(*mp, GFP_KERNEL);
 	if (!mp)
 		goto vmid_free_mp_exit;

@@ -3725,7 +3725,7 @@ lpfc_vmid_cmd(struct lpfc_vport *vport,
 		goto vmid_free_mp_virt_exit;

 	/* Allocate buffer for Buffer ptr list */
-	bmp = kmalloc(sizeof(*bmp), GFP_KERNEL);
+	bmp = kmalloc_obj(*bmp, GFP_KERNEL);
 	if (!bmp)
 		goto vmid_free_bmp_exit;

diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
index 646f88c776f5..f9f46119f341 100644
--- a/drivers/scsi/lpfc/lpfc_debugfs.c
+++ b/drivers/scsi/lpfc/lpfc_debugfs.c
@@ -1951,7 +1951,7 @@ lpfc_debugfs_disc_trc_open(struct inode *inode, struct file *file)
 		goto out;
 	}

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2001,7 +2001,7 @@ lpfc_debugfs_slow_ring_trc_open(struct inode *inode, struct file *file)
 		goto out;
 	}

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2045,7 +2045,7 @@ lpfc_debugfs_hbqinfo_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2087,7 +2087,7 @@ lpfc_debugfs_multixripools_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2132,7 +2132,7 @@ lpfc_debugfs_lockstat_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2269,7 +2269,7 @@ lpfc_debugfs_ras_log_open(struct inode *inode, struct file *file)
 			       phba->cfg_ras_fwlog_buffsize, &size))
 		goto out;

-	debug = kzalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kzalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2316,7 +2316,7 @@ lpfc_debugfs_dumpHBASlim_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2358,7 +2358,7 @@ lpfc_debugfs_dumpHostSlim_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2522,7 +2522,7 @@ lpfc_debugfs_nodelist_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2688,7 +2688,7 @@ lpfc_debugfs_nvmestat_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2776,7 +2776,7 @@ lpfc_debugfs_scsistat_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2830,7 +2830,7 @@ lpfc_debugfs_ioktime_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -2957,7 +2957,7 @@ lpfc_debugfs_nvmeio_trc_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -3062,7 +3062,7 @@ lpfc_debugfs_hdwqstat_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -3226,7 +3226,7 @@ lpfc_idiag_open(struct inode *inode, struct file *file)
 {
 	struct lpfc_debug *debug;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		return -ENOMEM;

@@ -5471,7 +5471,7 @@ lpfc_cgn_buffer_open(struct inode *inode, struct file *file)
 	struct lpfc_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -5563,7 +5563,7 @@ lpfc_rx_monitor_open(struct inode *inode, struct file *file)
 	struct lpfc_rx_monitor_debug *debug;
 	int rc = -ENOMEM;

-	debug = kmalloc(sizeof(*debug), GFP_KERNEL);
+	debug = kmalloc_obj(*debug, GFP_KERNEL);
 	if (!debug)
 		goto out;

@@ -6210,10 +6210,9 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)
 				    phba->hba_debugfs_root, phba,
 				    &lpfc_debugfs_op_slow_ring_trc);
 		if (!phba->slow_ring_trc) {
-			phba->slow_ring_trc = kcalloc(
-				lpfc_debugfs_max_slow_ring_trc,
-				sizeof(struct lpfc_debugfs_trc),
-				GFP_KERNEL);
+			phba->slow_ring_trc = kzalloc_objs(struct lpfc_debugfs_trc,
+							   lpfc_debugfs_max_slow_ring_trc,
+							   GFP_KERNEL);
 			if (!phba->slow_ring_trc) {
 				lpfc_printf_vlog(vport, KERN_ERR, LOG_INIT,
 						 "0416 Cannot create debugfs "
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 32da3c23c7f4..5177f0a80670 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -216,7 +216,7 @@ lpfc_prep_els_iocb(struct lpfc_vport *vport, u8 expect_rsp,

 	/* fill in BDEs for command */
 	/* Allocate buffer for command payload */
-	pcmd = kmalloc(sizeof(*pcmd), GFP_KERNEL);
+	pcmd = kmalloc_obj(*pcmd, GFP_KERNEL);
 	if (pcmd)
 		pcmd->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &pcmd->phys);
 	if (!pcmd || !pcmd->virt)
@@ -226,7 +226,7 @@ lpfc_prep_els_iocb(struct lpfc_vport *vport, u8 expect_rsp,

 	/* Allocate buffer for response payload */
 	if (expect_rsp) {
-		prsp = kmalloc(sizeof(*prsp), GFP_KERNEL);
+		prsp = kmalloc_obj(*prsp, GFP_KERNEL);
 		if (prsp)
 			prsp->virt = lpfc_mbuf_alloc(phba, MEM_PRI,
 						     &prsp->phys);
@@ -238,7 +238,7 @@ lpfc_prep_els_iocb(struct lpfc_vport *vport, u8 expect_rsp,
 	}

 	/* Allocate buffer for Buffer ptr list */
-	pbuflist = kmalloc(sizeof(*pbuflist), GFP_KERNEL);
+	pbuflist = kmalloc_obj(*pbuflist, GFP_KERNEL);
 	if (pbuflist)
 		pbuflist->virt = lpfc_mbuf_alloc(phba, MEM_PRI,
 						 &pbuflist->phys);
@@ -7537,7 +7537,7 @@ lpfc_els_rcv_rdp(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
 	if (RDP_NPORT_ID_SIZE !=
 			be32_to_cpu(rdp_req->nport_id_desc.length))
 		goto rjt_logerr;
-	rdp_context = kzalloc(sizeof(struct lpfc_rdp_context), GFP_KERNEL);
+	rdp_context = kzalloc_obj(struct lpfc_rdp_context, GFP_KERNEL);
 	if (!rdp_context) {
 		rjt_err = LSRJT_UNABLE_TPC;
 		goto error;
@@ -7842,7 +7842,7 @@ lpfc_els_rcv_lcb(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
 		goto rjt;
 	}

-	lcb_context = kmalloc(sizeof(*lcb_context), GFP_KERNEL);
+	lcb_context = kmalloc_obj(*lcb_context, GFP_KERNEL);
 	if (!lcb_context) {
 		rjt_err = LSRJT_UNABLE_TPC;
 		goto rjt;
@@ -9965,7 +9965,7 @@ lpfc_send_els_event(struct lpfc_vport *vport,
 	struct Scsi_Host *shost = lpfc_shost_from_vport(vport);

 	if (*payload == ELS_CMD_LOGO) {
-		logo_data = kmalloc(sizeof(struct lpfc_logo_event), GFP_KERNEL);
+		logo_data = kmalloc_obj(struct lpfc_logo_event, GFP_KERNEL);
 		if (!logo_data) {
 			lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
 				"0148 Failed to allocate memory "
@@ -9974,8 +9974,7 @@ lpfc_send_els_event(struct lpfc_vport *vport,
 		}
 		els_data = &logo_data->header;
 	} else {
-		els_data = kmalloc(sizeof(struct lpfc_els_event_header),
-			GFP_KERNEL);
+		els_data = kmalloc_obj(struct lpfc_els_event_header, GFP_KERNEL);
 		if (!els_data) {
 			lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
 				"0149 Failed to allocate memory "
@@ -12325,8 +12324,8 @@ lpfc_cmpl_els_qfpa(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,

 	if (!vport->qfpa_res) {
 		max_desc = FCELSSIZE / sizeof(*vport->qfpa_res);
-		vport->qfpa_res = kcalloc(max_desc, sizeof(*vport->qfpa_res),
-					  GFP_KERNEL);
+		vport->qfpa_res = kzalloc_objs(*vport->qfpa_res, max_desc,
+					       GFP_KERNEL);
 		if (!vport->qfpa_res)
 			goto out;
 	}
@@ -12339,8 +12338,8 @@ lpfc_cmpl_els_qfpa(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
 	desc = (struct priority_range_desc *)(pcmd + 8);
 	vmid_range = vport->vmid_priority.vmid_range;
 	if (!vmid_range) {
-		vmid_range = kcalloc(MAX_PRIORITY_DESC, sizeof(*vmid_range),
-				     GFP_KERNEL);
+		vmid_range = kzalloc_objs(*vmid_range, MAX_PRIORITY_DESC,
+					  GFP_KERNEL);
 		if (!vmid_range) {
 			kfree(vport->qfpa_res);
 			goto out;
@@ -12438,7 +12437,7 @@ lpfc_vmid_uvem(struct lpfc_vport *vport,
 	if (!ndlp || ndlp->nlp_state != NLP_STE_UNMAPPED_NODE)
 		return -ENXIO;

-	vmid_context = kmalloc(sizeof(*vmid_context), GFP_KERNEL);
+	vmid_context = kmalloc_obj(*vmid_context, GFP_KERNEL);
 	if (!vmid_context)
 		return -ENOMEM;
 	elsiocb = lpfc_prep_els_iocb(vport, 1, LPFC_UVEM_SIZE, 2,
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 1aeebdc08073..0e6cc42c61c9 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -726,8 +726,7 @@ lpfc_alloc_fast_evt(struct lpfc_hba *phba) {
 	if (atomic_read(&phba->fast_event_count) > LPFC_MAX_EVT_COUNT)
 		return NULL;

-	ret = kzalloc(sizeof(struct lpfc_fast_path_event),
-			GFP_ATOMIC);
+	ret = kzalloc_obj(struct lpfc_fast_path_event, GFP_ATOMIC);
 	if (ret) {
 		atomic_inc(&phba->fast_event_count);
 		INIT_LIST_HEAD(&ret->work_evt.evt_listp);
@@ -1141,7 +1140,7 @@ lpfc_workq_post_event(struct lpfc_hba *phba, void *arg1, void *arg2,
 	 * All Mailbox completions and LPFC_ELS_RING rcv ring IOCB events will
 	 * be queued to worker thread for processing
 	 */
-	evtp = kmalloc(sizeof(struct lpfc_work_evt), GFP_ATOMIC);
+	evtp = kmalloc_obj(struct lpfc_work_evt, GFP_ATOMIC);
 	if (!evtp)
 		return 0;

@@ -3644,8 +3643,7 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
 		 * defaults.
 		 */
 		if (!test_bit(HBA_FIP_SUPPORT, &phba->hba_flag)) {
-			fcf_record = kzalloc(sizeof(struct fcf_record),
-					GFP_KERNEL);
+			fcf_record = kzalloc_obj(struct fcf_record, GFP_KERNEL);
 			if (unlikely(!fcf_record)) {
 				lpfc_printf_log(phba, KERN_ERR,
 					LOG_TRACE_EVENT,
@@ -4056,7 +4054,7 @@ lpfc_create_static_vport(struct lpfc_hba *phba)
 	memset(pmb, 0, sizeof(LPFC_MBOXQ_t));
 	mb = &pmb->u.mb;

-	vport_info = kzalloc(sizeof(struct static_vport_info), GFP_KERNEL);
+	vport_info = kzalloc_obj(struct static_vport_info, GFP_KERNEL);
 	if (!vport_info) {
 		lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 				"0543 lpfc_create_static_vport failed to"
@@ -7012,8 +7010,7 @@ lpfc_read_fcf_conn_tbl(struct lpfc_hba *phba,
 	for (i = 0; i < record_count; i++) {
 		if (!(conn_rec[i].flags & FCFCNCT_VALID))
 			continue;
-		conn_entry = kzalloc(sizeof(struct lpfc_fcf_conn_entry),
-			GFP_KERNEL);
+		conn_entry = kzalloc_obj(struct lpfc_fcf_conn_entry, GFP_KERNEL);
 		if (!conn_entry) {
 			lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 					"2566 Failed to allocate connection"
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index a116a16c4a6f..1139fb7dc0fb 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -2820,7 +2820,7 @@ lpfc_sli3_post_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, int cn

 		/* 2 buffers can be posted per command */
 		/* Allocate buffer to post */
-		mp1 = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL);
+		mp1 = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 		if (mp1)
 		    mp1->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &mp1->phys);
 		if (!mp1 || !mp1->virt) {
@@ -2833,7 +2833,7 @@ lpfc_sli3_post_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, int cn
 		INIT_LIST_HEAD(&mp1->list);
 		/* Allocate buffer to post */
 		if (cnt > 1) {
-			mp2 = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL);
+			mp2 = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 			if (mp2)
 				mp2->virt = lpfc_mbuf_alloc(phba, MEM_PRI,
 							    &mp2->phys);
@@ -3539,7 +3539,7 @@ void lpfc_create_multixri_pools(struct lpfc_hba *phba)
 	count_per_hwq = phba->sli4_hba.io_xri_cnt / hwq_count;

 	for (i = 0; i < hwq_count; i++) {
-		multixri_pool = kzalloc(sizeof(*multixri_pool), GFP_KERNEL);
+		multixri_pool = kzalloc_obj(*multixri_pool, GFP_KERNEL);

 		if (!multixri_pool) {
 			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
@@ -4064,8 +4064,7 @@ lpfc_sli4_els_sgl_update(struct lpfc_hba *phba)
 				els_xri_cnt);
 		/* allocate the additional els sgls */
 		for (i = 0; i < xri_cnt; i++) {
-			sglq_entry = kzalloc(sizeof(struct lpfc_sglq),
-					     GFP_KERNEL);
+			sglq_entry = kzalloc_obj(struct lpfc_sglq, GFP_KERNEL);
 			if (sglq_entry == NULL) {
 				lpfc_printf_log(phba, KERN_ERR,
 						LOG_TRACE_EVENT,
@@ -4184,8 +4183,7 @@ lpfc_sli4_nvmet_sgl_update(struct lpfc_hba *phba)
 				phba->sli4_hba.nvmet_xri_cnt, nvmet_xri_cnt);
 		/* allocate the additional nvmet sgls */
 		for (i = 0; i < xri_cnt; i++) {
-			sglq_entry = kzalloc(sizeof(struct lpfc_sglq),
-					     GFP_KERNEL);
+			sglq_entry = kzalloc_obj(struct lpfc_sglq, GFP_KERNEL);
 			if (sglq_entry == NULL) {
 				lpfc_printf_log(phba, KERN_ERR,
 						LOG_TRACE_EVENT,
@@ -4478,7 +4476,7 @@ lpfc_new_io_buf(struct lpfc_hba *phba, int num_to_alloc)

 	phba->sli4_hba.io_xri_cnt = 0;
 	for (bcnt = 0; bcnt < num_to_alloc; bcnt++) {
-		lpfc_ncmd = kzalloc(sizeof(*lpfc_ncmd), GFP_KERNEL);
+		lpfc_ncmd = kzalloc_obj(*lpfc_ncmd, GFP_KERNEL);
 		if (!lpfc_ncmd)
 			break;
 		/*
@@ -4637,8 +4635,8 @@ lpfc_vmid_res_alloc(struct lpfc_hba *phba, struct lpfc_vport *vport)

 	if (lpfc_is_vmid_enabled(phba)) {
 		vport->vmid =
-		    kcalloc(phba->cfg_max_vmid, sizeof(struct lpfc_vmid),
-			    GFP_KERNEL);
+		    kzalloc_objs(struct lpfc_vmid, phba->cfg_max_vmid,
+				 GFP_KERNEL);
 		if (!vport->vmid)
 			return -ENOMEM;

@@ -7773,9 +7771,9 @@ lpfc_sli_driver_resource_setup(struct lpfc_hba *phba)
 		return -ENODEV;

 	if (!phba->sli.sli3_ring)
-		phba->sli.sli3_ring = kcalloc(LPFC_SLI3_MAX_RING,
-					      sizeof(struct lpfc_sli_ring),
-					      GFP_KERNEL);
+		phba->sli.sli3_ring = kzalloc_objs(struct lpfc_sli_ring,
+						   LPFC_SLI3_MAX_RING,
+						   GFP_KERNEL);
 	if (!phba->sli.sli3_ring)
 		return -ENOMEM;

@@ -8357,9 +8355,9 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
 		goto out_remove_rpi_hdrs;
 	}

-	phba->sli4_hba.hba_eq_hdl = kcalloc(phba->cfg_irq_chann,
-					    sizeof(struct lpfc_hba_eq_hdl),
-					    GFP_KERNEL);
+	phba->sli4_hba.hba_eq_hdl = kzalloc_objs(struct lpfc_hba_eq_hdl,
+						 phba->cfg_irq_chann,
+						 GFP_KERNEL);
 	if (!phba->sli4_hba.hba_eq_hdl) {
 		lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 				"2572 Failed allocate memory for "
@@ -8368,9 +8366,9 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
 		goto out_free_fcf_rr_bmask;
 	}

-	phba->sli4_hba.cpu_map = kcalloc(phba->sli4_hba.num_possible_cpu,
-					sizeof(struct lpfc_vector_map_info),
-					GFP_KERNEL);
+	phba->sli4_hba.cpu_map = kzalloc_objs(struct lpfc_vector_map_info,
+					      phba->sli4_hba.num_possible_cpu,
+					      GFP_KERNEL);
 	if (!phba->sli4_hba.cpu_map) {
 		lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 				"3327 Failed allocate memory for msi-x "
@@ -8387,9 +8385,9 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
 		goto out_free_hba_cpu_map;
 	}

-	phba->sli4_hba.idle_stat = kcalloc(phba->sli4_hba.num_possible_cpu,
-					   sizeof(*phba->sli4_hba.idle_stat),
-					   GFP_KERNEL);
+	phba->sli4_hba.idle_stat = kzalloc_objs(*phba->sli4_hba.idle_stat,
+						phba->sli4_hba.num_possible_cpu,
+						GFP_KERNEL);
 	if (!phba->sli4_hba.idle_stat) {
 		lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 				"3390 Failed allocation for idle_stat\n");
@@ -8663,7 +8661,7 @@ lpfc_init_iocb_list(struct lpfc_hba *phba, int iocb_count)
 	/* Initialize and populate the iocb list per host.  */
 	INIT_LIST_HEAD(&phba->lpfc_iocb_list);
 	for (i = 0; i < iocb_count; i++) {
-		iocbq_entry = kzalloc(sizeof(struct lpfc_iocbq), GFP_KERNEL);
+		iocbq_entry = kzalloc_obj(struct lpfc_iocbq, GFP_KERNEL);
 		if (iocbq_entry == NULL) {
 			printk(KERN_ERR "%s: only allocated %d iocbs of "
 				"expected %d count. Unloading driver.\n",
@@ -8913,7 +8911,7 @@ lpfc_sli4_create_rpi_hdr(struct lpfc_hba *phba)
 	 * First allocate the protocol header region for the port.  The
 	 * port expects a 4KB DMA-mapped memory region that is 4K aligned.
 	 */
-	dmabuf = kzalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	dmabuf = kzalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (!dmabuf)
 		return NULL;

@@ -8931,7 +8929,7 @@ lpfc_sli4_create_rpi_hdr(struct lpfc_hba *phba)
 	}

 	/* Save the rpi header data for cleanup later. */
-	rpi_hdr = kzalloc(sizeof(struct lpfc_rpi_hdr), GFP_KERNEL);
+	rpi_hdr = kzalloc_obj(struct lpfc_rpi_hdr, GFP_KERNEL);
 	if (!rpi_hdr)
 		goto err_free_coherent;

@@ -9004,7 +9002,7 @@ lpfc_hba_alloc(struct pci_dev *pdev)
 	struct lpfc_hba *phba;

 	/* Allocate memory for HBA structure */
-	phba = kzalloc(sizeof(struct lpfc_hba), GFP_KERNEL);
+	phba = kzalloc_obj(struct lpfc_hba, GFP_KERNEL);
 	if (!phba) {
 		dev_err(&pdev->dev, "failed to allocate hba struct\n");
 		return NULL;
@@ -9722,7 +9720,7 @@ lpfc_create_bootstrap_mbox(struct lpfc_hba *phba)
 	uint32_t pa_addr;
 	uint64_t phys_addr;

-	dmabuf = kzalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	dmabuf = kzalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (!dmabuf)
 		return -ENOMEM;

@@ -10442,9 +10440,9 @@ lpfc_sli4_queue_create(struct lpfc_hba *phba)
 	phba->sli4_hba.cq_ecount = LPFC_CQE_DEF_COUNT;

 	if (!phba->sli4_hba.hdwq) {
-		phba->sli4_hba.hdwq = kcalloc(
-			phba->cfg_hdw_queue, sizeof(struct lpfc_sli4_hdw_queue),
-			GFP_KERNEL);
+		phba->sli4_hba.hdwq = kzalloc_objs(struct lpfc_sli4_hdw_queue,
+						   phba->cfg_hdw_queue,
+						   GFP_KERNEL);
 		if (!phba->sli4_hba.hdwq) {
 			lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 					"6427 Failed allocate memory for "
@@ -10473,30 +10471,27 @@ lpfc_sli4_queue_create(struct lpfc_hba *phba)

 	if (phba->cfg_enable_fc4_type & LPFC_ENABLE_NVME) {
 		if (phba->nvmet_support) {
-			phba->sli4_hba.nvmet_cqset = kcalloc(
-					phba->cfg_nvmet_mrq,
-					sizeof(struct lpfc_queue *),
-					GFP_KERNEL);
+			phba->sli4_hba.nvmet_cqset = kzalloc_objs(struct lpfc_queue *,
+								  phba->cfg_nvmet_mrq,
+								  GFP_KERNEL);
 			if (!phba->sli4_hba.nvmet_cqset) {
 				lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 					"3121 Fail allocate memory for "
 					"fast-path CQ set array\n");
 				goto out_error;
 			}
-			phba->sli4_hba.nvmet_mrq_hdr = kcalloc(
-					phba->cfg_nvmet_mrq,
-					sizeof(struct lpfc_queue *),
-					GFP_KERNEL);
+			phba->sli4_hba.nvmet_mrq_hdr = kzalloc_objs(struct lpfc_queue *,
+								    phba->cfg_nvmet_mrq,
+								    GFP_KERNEL);
 			if (!phba->sli4_hba.nvmet_mrq_hdr) {
 				lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 					"3122 Fail allocate memory for "
 					"fast-path RQ set hdr array\n");
 				goto out_error;
 			}
-			phba->sli4_hba.nvmet_mrq_data = kcalloc(
-					phba->cfg_nvmet_mrq,
-					sizeof(struct lpfc_queue *),
-					GFP_KERNEL);
+			phba->sli4_hba.nvmet_mrq_data = kzalloc_objs(struct lpfc_queue *,
+								     phba->cfg_nvmet_mrq,
+								     GFP_KERNEL);
 			if (!phba->sli4_hba.nvmet_mrq_data) {
 				lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 					"3124 Fail allocate memory for "
@@ -11381,8 +11376,9 @@ lpfc_sli4_queue_setup(struct lpfc_hba *phba)

 	if (phba->sli4_hba.cq_max) {
 		kfree(phba->sli4_hba.cq_lookup);
-		phba->sli4_hba.cq_lookup = kcalloc((phba->sli4_hba.cq_max + 1),
-			sizeof(struct lpfc_queue *), GFP_KERNEL);
+		phba->sli4_hba.cq_lookup = kzalloc_objs(struct lpfc_queue *,
+							(phba->sli4_hba.cq_max + 1),
+							GFP_KERNEL);
 		if (!phba->sli4_hba.cq_lookup) {
 			lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 					"0549 Failed setup of CQ Lookup table: "
@@ -11511,7 +11507,7 @@ lpfc_sli4_cq_event_pool_create(struct lpfc_hba *phba)
 	int i;

 	for (i = 0; i < (4 * phba->sli4_hba.cq_ecount); i++) {
-		cq_event = kmalloc(sizeof(struct lpfc_cq_event), GFP_KERNEL);
+		cq_event = kmalloc_obj(struct lpfc_cq_event, GFP_KERNEL);
 		if (!cq_event)
 			goto out_pool_create_fail;
 		list_add_tail(&cq_event->list,
@@ -14616,8 +14612,7 @@ lpfc_write_firmware(const struct firmware *fw, void *context)
 			     "New Version:%s\n",
 			     fwrev, image->revision);
 		for (i = 0; i < LPFC_MBX_WR_CONFIG_MAX_BDE; i++) {
-			dmabuf = kzalloc(sizeof(struct lpfc_dmabuf),
-					 GFP_KERNEL);
+			dmabuf = kzalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 			if (!dmabuf) {
 				rc = -ENOMEM;
 				goto release_out;
diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c
index fb6dbcb86c09..5f7249e6bda8 100644
--- a/drivers/scsi/lpfc/lpfc_mbox.c
+++ b/drivers/scsi/lpfc/lpfc_mbox.c
@@ -64,7 +64,7 @@ lpfc_mbox_rsrc_prep(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
 {
 	struct lpfc_dmabuf *mp;

-	mp = kmalloc(sizeof(*mp), GFP_KERNEL);
+	mp = kmalloc_obj(*mp, GFP_KERNEL);
 	if (!mp)
 		return -ENOMEM;

@@ -1869,8 +1869,8 @@ lpfc_sli4_config(struct lpfc_hba *phba, struct lpfcMboxq *mbox,
 	pcount = (pcount > LPFC_SLI4_MBX_SGE_MAX_PAGES) ?
 				LPFC_SLI4_MBX_SGE_MAX_PAGES : pcount;
 	/* Allocate record for keeping SGE virtual addresses */
-	mbox->sge_array = kzalloc(sizeof(struct lpfc_mbx_nembed_sge_virt),
-				  GFP_KERNEL);
+	mbox->sge_array = kzalloc_obj(struct lpfc_mbx_nembed_sge_virt,
+				      GFP_KERNEL);
 	if (!mbox->sge_array) {
 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
 				"2527 Failed to allocate non-embedded SGE "
diff --git a/drivers/scsi/lpfc/lpfc_mem.c b/drivers/scsi/lpfc/lpfc_mem.c
index 2697da3248b3..c067d6762ae3 100644
--- a/drivers/scsi/lpfc/lpfc_mem.c
+++ b/drivers/scsi/lpfc/lpfc_mem.c
@@ -118,9 +118,8 @@ lpfc_mem_alloc(struct lpfc_hba *phba, int align)
 	if (!phba->lpfc_mbuf_pool)
 		goto fail;

-	pool->elements = kmalloc_array(LPFC_MBUF_POOL_SIZE,
-				       sizeof(struct lpfc_dmabuf),
-				       GFP_KERNEL);
+	pool->elements = kmalloc_objs(struct lpfc_dmabuf, LPFC_MBUF_POOL_SIZE,
+				      GFP_KERNEL);
 	if (!pool->elements)
 		goto fail_free_lpfc_mbuf_pool;

@@ -511,7 +510,7 @@ lpfc_els_hbq_alloc(struct lpfc_hba *phba)
 {
 	struct hbq_dmabuf *hbqbp;

-	hbqbp = kzalloc(sizeof(struct hbq_dmabuf), GFP_KERNEL);
+	hbqbp = kzalloc_obj(struct hbq_dmabuf, GFP_KERNEL);
 	if (!hbqbp)
 		return NULL;

@@ -563,7 +562,7 @@ lpfc_sli4_rb_alloc(struct lpfc_hba *phba)
 {
 	struct hbq_dmabuf *dma_buf;

-	dma_buf = kzalloc(sizeof(struct hbq_dmabuf), GFP_KERNEL);
+	dma_buf = kzalloc_obj(struct hbq_dmabuf, GFP_KERNEL);
 	if (!dma_buf)
 		return NULL;

@@ -621,7 +620,7 @@ lpfc_sli4_nvmet_alloc(struct lpfc_hba *phba)
 {
 	struct rqb_dmabuf *dma_buf;

-	dma_buf = kzalloc(sizeof(*dma_buf), GFP_KERNEL);
+	dma_buf = kzalloc_obj(*dma_buf, GFP_KERNEL);
 	if (!dma_buf)
 		return NULL;

diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
index 8240d59f4120..9e61021edfe1 100644
--- a/drivers/scsi/lpfc/lpfc_nportdisc.c
+++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
@@ -564,7 +564,7 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 	if (!login_mbox)
 		goto out;

-	save_iocb = kzalloc(sizeof(*save_iocb), GFP_KERNEL);
+	save_iocb = kzalloc_obj(*save_iocb, GFP_KERNEL);
 	if (!save_iocb)
 		goto out;

@@ -764,7 +764,7 @@ lpfc_rcv_padisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 			 * registered.
 			 */
 			if (test_bit(NLP_RPI_REGISTERED, &ndlp->nlp_flag)) {
-				elsiocb = kmalloc(sizeof(*elsiocb), GFP_KERNEL);
+				elsiocb = kmalloc_obj(*elsiocb, GFP_KERNEL);
 				if (elsiocb) {
 					/* Save info from cmd IOCB used in
 					 * rsp
diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
index e6f632521cff..edddb1e9a353 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.c
+++ b/drivers/scsi/lpfc/lpfc_nvme.c
@@ -98,7 +98,7 @@ lpfc_nvme_create_queue(struct nvme_fc_local_port *pnvme_lport,
 	    test_bit(HBA_IOQ_FLUSH, &vport->phba->hba_flag))
 		return -ENODEV;

-	qhandle = kzalloc(sizeof(struct lpfc_nvme_qhandle), GFP_KERNEL);
+	qhandle = kzalloc_obj(struct lpfc_nvme_qhandle, GFP_KERNEL);
 	if (qhandle == NULL)
 		return -ENOMEM;

@@ -587,7 +587,7 @@ __lpfc_nvme_ls_req(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 	 * in the nvme-fc layer.
 	 */

-	bmp = kmalloc(sizeof(*bmp), GFP_KERNEL);
+	bmp = kmalloc_obj(*bmp, GFP_KERNEL);
 	if (!bmp) {
 		lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
 				 "6044 NVMEx LS REQ: Could not alloc LS buf "
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
index 4cfc928bcf2d..48642f01f2c9 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.c
+++ b/drivers/scsi/lpfc/lpfc_nvmet.c
@@ -1507,9 +1507,9 @@ lpfc_nvmet_setup_io_context(struct lpfc_hba *phba)
 			"6403 Allocate NVMET resources for %d XRIs\n",
 			phba->sli4_hba.nvmet_xri_cnt);

-	phba->sli4_hba.nvmet_ctx_info = kcalloc(
-		phba->sli4_hba.num_possible_cpu * phba->cfg_nvmet_mrq,
-		sizeof(struct lpfc_nvmet_ctx_info), GFP_KERNEL);
+	phba->sli4_hba.nvmet_ctx_info = kzalloc_objs(struct lpfc_nvmet_ctx_info,
+						     phba->sli4_hba.num_possible_cpu * phba->cfg_nvmet_mrq,
+						     GFP_KERNEL);
 	if (!phba->sli4_hba.nvmet_ctx_info) {
 		lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 				"6419 Failed allocate memory for "
@@ -1567,15 +1567,14 @@ lpfc_nvmet_setup_io_context(struct lpfc_hba *phba)
 	idx = 0;
 	cpu = cpumask_first(cpu_present_mask);
 	for (i = 0; i < phba->sli4_hba.nvmet_xri_cnt; i++) {
-		ctx_buf = kzalloc(sizeof(*ctx_buf), GFP_KERNEL);
+		ctx_buf = kzalloc_obj(*ctx_buf, GFP_KERNEL);
 		if (!ctx_buf) {
 			lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
 					"6404 Ran out of memory for NVMET\n");
 			return -ENOMEM;
 		}

-		ctx_buf->context = kzalloc(sizeof(*ctx_buf->context),
-					   GFP_KERNEL);
+		ctx_buf->context = kzalloc_obj(*ctx_buf->context, GFP_KERNEL);
 		if (!ctx_buf->context) {
 			kfree(ctx_buf);
 			lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index df64948e55ee..ca2bd782608d 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -265,7 +265,7 @@ lpfc_new_scsi_buf_s3(struct lpfc_vport *vport, int num_to_alloc)
 			 (int)sizeof(struct fcp_rsp), bpl_size);

 	for (bcnt = 0; bcnt < num_to_alloc; bcnt++) {
-		psb = kzalloc(sizeof(struct lpfc_io_buf), GFP_KERNEL);
+		psb = kzalloc_obj(struct lpfc_io_buf, GFP_KERNEL);
 		if (!psb)
 			break;

diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 734af3d039f8..b328fc772bd8 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -2135,8 +2135,7 @@ lpfc_sli_next_iotag(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
 					   - LPFC_IOCBQ_LOOKUP_INCREMENT)) {
 		new_len = psli->iocbq_lookup_len + LPFC_IOCBQ_LOOKUP_INCREMENT;
 		spin_unlock_irq(&phba->hbalock);
-		new_arr = kcalloc(new_len, sizeof(struct lpfc_iocbq *),
-				  GFP_KERNEL);
+		new_arr = kzalloc_objs(struct lpfc_iocbq *, new_len, GFP_KERNEL);
 		if (new_arr) {
 			spin_lock_irq(&phba->hbalock);
 			old_arr = psli->iocbq_lookup;
@@ -3240,7 +3239,7 @@ lpfc_nvme_unsol_ls_handler(struct lpfc_hba *phba, struct lpfc_iocbq *piocb)
 			(FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT))) {
 		failwhy = "Bad NVME LS F_CTL";
 	} else {
-		axchg = kzalloc(sizeof(*axchg), GFP_ATOMIC);
+		axchg = kzalloc_obj(*axchg, GFP_ATOMIC);
 		if (!axchg)
 			failwhy = "No CTX memory";
 	}
@@ -5894,7 +5893,7 @@ lpfc_sli4_read_rev(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq,
 	struct lpfc_dmabuf *dmabuf;
 	struct lpfc_mqe *mqe;

-	dmabuf = kzalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	dmabuf = kzalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (!dmabuf)
 		return -ENOMEM;

@@ -6944,8 +6943,7 @@ lpfc_sli4_ras_dma_alloc(struct lpfc_hba *phba,

 	ras_fwlog->fw_buffcount = fwlog_buff_count;
 	for (i = 0; i < ras_fwlog->fw_buffcount; i++) {
-		dmabuf = kzalloc(sizeof(struct lpfc_dmabuf),
-				 GFP_KERNEL);
+		dmabuf = kzalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 		if (!dmabuf) {
 			rc = -ENOMEM;
 			lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
@@ -8048,8 +8046,8 @@ static void lpfc_sli4_dip(struct lpfc_hba *phba)
 int lpfc_rx_monitor_create_ring(struct lpfc_rx_info_monitor *rx_monitor,
 				u32 entries)
 {
-	rx_monitor->ring = kmalloc_array(entries, sizeof(struct rx_info_entry),
-					 GFP_KERNEL);
+	rx_monitor->ring = kmalloc_objs(struct rx_info_entry, entries,
+					GFP_KERNEL);
 	if (!rx_monitor->ring)
 		return -ENOMEM;

@@ -8296,7 +8294,7 @@ lpfc_cmf_setup(struct lpfc_hba *phba)

 		/* Allocate Congestion Information Buffer */
 		if (!phba->cgn_i) {
-			mp = kmalloc(sizeof(*mp), GFP_KERNEL);
+			mp = kmalloc_obj(*mp, GFP_KERNEL);
 			if (mp)
 				mp->virt = dma_alloc_coherent
 						(&phba->pcidev->dev,
@@ -8378,8 +8376,7 @@ lpfc_cmf_setup(struct lpfc_hba *phba)

 	/* Allocate RX Monitor Buffer */
 	if (!phba->rx_monitor) {
-		phba->rx_monitor = kzalloc(sizeof(*phba->rx_monitor),
-					   GFP_KERNEL);
+		phba->rx_monitor = kzalloc_obj(*phba->rx_monitor, GFP_KERNEL);

 		if (!phba->rx_monitor) {
 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
@@ -17147,7 +17144,7 @@ lpfc_wq_create(struct lpfc_hba *phba, struct lpfc_queue *wq,
 		} else
 			wq->db_regaddr = phba->sli4_hba.WQDBregaddr;
 	}
-	wq->pring = kzalloc(sizeof(struct lpfc_sli_ring), GFP_KERNEL);
+	wq->pring = kzalloc_obj(struct lpfc_sli_ring, GFP_KERNEL);
 	if (wq->pring == NULL) {
 		status = -ENOMEM;
 		goto out;
@@ -19466,7 +19463,7 @@ lpfc_sli4_handle_mds_loopback(struct lpfc_vport *vport,
 	}

 	/* Allocate buffer for command payload */
-	pcmd = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
+	pcmd = kmalloc_obj(struct lpfc_dmabuf, GFP_KERNEL);
 	if (pcmd)
 		pcmd->virt = dma_pool_alloc(phba->lpfc_drb_pool, GFP_KERNEL,
 					    &pcmd->phys);
@@ -22297,7 +22294,7 @@ lpfc_read_object(struct lpfc_hba *phba, char *rdobject, uint32_t *datap,
 		read_object->u.request.rd_object_name[j] =
 			cpu_to_le32(rd_object_name[j]);

-	pcmd = kmalloc(sizeof(*pcmd), GFP_KERNEL);
+	pcmd = kmalloc_obj(*pcmd, GFP_KERNEL);
 	if (pcmd)
 		pcmd->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &pcmd->phys);
 	if (!pcmd || !pcmd->virt) {
diff --git a/drivers/scsi/lpfc/lpfc_vport.c b/drivers/scsi/lpfc/lpfc_vport.c
index aff6c9d5e7c2..9572f925406c 100644
--- a/drivers/scsi/lpfc/lpfc_vport.c
+++ b/drivers/scsi/lpfc/lpfc_vport.c
@@ -787,8 +787,8 @@ lpfc_create_vport_work_array(struct lpfc_hba *phba)
 	struct lpfc_vport *port_iterator;
 	struct lpfc_vport **vports;
 	int index = 0;
-	vports = kcalloc(phba->max_vports + 1, sizeof(struct lpfc_vport *),
-			 GFP_KERNEL);
+	vports = kzalloc_objs(struct lpfc_vport *, phba->max_vports + 1,
+			      GFP_KERNEL);
 	if (vports == NULL)
 		return NULL;
 	spin_lock_irq(&phba->port_list_lock);
diff --git a/drivers/scsi/mac53c94.c b/drivers/scsi/mac53c94.c
index 49f856be2e51..74b92a56099a 100644
--- a/drivers/scsi/mac53c94.c
+++ b/drivers/scsi/mac53c94.c
@@ -462,9 +462,8 @@ static int mac53c94_probe(struct macio_dev *mdev, const struct of_device_id *mat
        	 * +1 to allow for aligning.
 	 * XXX FIXME: Use DMA consistent routines
 	 */
-       	dma_cmd_space = kmalloc_array(host->sg_tablesize + 2,
-					     sizeof(struct dbdma_cmd),
-					     GFP_KERNEL);
+       	dma_cmd_space = kmalloc_objs(struct dbdma_cmd,
+					    host->sg_tablesize + 2, GFP_KERNEL);
 	if (!dma_cmd_space) {
 		printk(KERN_ERR "mac53c94: couldn't allocate dma "
 		       "command space for %pOF\n", node);
diff --git a/drivers/scsi/mac_esp.c b/drivers/scsi/mac_esp.c
index ff0253d47a0e..68923dafee42 100644
--- a/drivers/scsi/mac_esp.c
+++ b/drivers/scsi/mac_esp.c
@@ -323,7 +323,7 @@ static int esp_mac_probe(struct platform_device *dev)
 	host->this_id = esp->scsi_id;
 	esp->scsi_id_mask = 1 << esp->scsi_id;

-	mep = kzalloc(sizeof(struct mac_esp_priv), GFP_KERNEL);
+	mep = kzalloc_obj(struct mac_esp_priv, GFP_KERNEL);
 	if (!mep)
 		goto fail_free_command_block;
 	mep->esp = esp;
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 6b088bb049cc..de40a791ed3d 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -4254,8 +4254,7 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 		goto out_host_put;
 	}

-	adapter->scb_list = kmalloc_array(MAX_COMMANDS, sizeof(scb_t),
-					  GFP_KERNEL);
+	adapter->scb_list = kmalloc_objs(scb_t, MAX_COMMANDS, GFP_KERNEL);
 	if (!adapter->scb_list) {
 		dev_warn(&pdev->dev, "out of RAM\n");
 		goto out_free_cmd_buffer;
diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/megaraid_mbox.c
index b6a32bb0bd19..fa10a89d7563 100644
--- a/drivers/scsi/megaraid/megaraid_mbox.c
+++ b/drivers/scsi/megaraid/megaraid_mbox.c
@@ -429,7 +429,7 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 	pci_set_master(pdev);

 	// Allocate the per driver initialization structure
-	adapter = kzalloc(sizeof(adapter_t), GFP_KERNEL);
+	adapter = kzalloc_obj(adapter_t, GFP_KERNEL);

 	if (adapter == NULL) {
 		con_log(CL_ANN, (KERN_WARNING
@@ -713,7 +713,7 @@ megaraid_init_mbox(adapter_t *adapter)
 	 * Allocate and initialize the init data structure for mailbox
 	 * controllers
 	 */
-	raid_dev = kzalloc(sizeof(mraid_device_t), GFP_KERNEL);
+	raid_dev = kzalloc_obj(mraid_device_t, GFP_KERNEL);
 	if (raid_dev == NULL) return -1;


@@ -1017,7 +1017,7 @@ megaraid_alloc_cmd_packets(adapter_t *adapter)
 	 * since the calling routine does not yet know the number of available
 	 * commands.
 	 */
-	adapter->kscb_list = kcalloc(MBOX_MAX_SCSI_CMDS, sizeof(scb_t), GFP_KERNEL);
+	adapter->kscb_list = kzalloc_objs(scb_t, MBOX_MAX_SCSI_CMDS, GFP_KERNEL);

 	if (adapter->kscb_list == NULL) {
 		con_log(CL_ANN, (KERN_WARNING
@@ -3403,7 +3403,7 @@ megaraid_cmm_register(adapter_t *adapter)
 	int		i;

 	// Allocate memory for the base list of scb for management module.
-	adapter->uscb_list = kcalloc(MBOX_MAX_USER_CMDS, sizeof(scb_t), GFP_KERNEL);
+	adapter->uscb_list = kzalloc_objs(scb_t, MBOX_MAX_USER_CMDS, GFP_KERNEL);

 	if (adapter->uscb_list == NULL) {
 		con_log(CL_ANN, (KERN_WARNING
@@ -3763,9 +3763,9 @@ megaraid_sysfs_alloc_resources(adapter_t *adapter)
 	mraid_device_t	*raid_dev = ADAP2RAIDDEV(adapter);
 	int		rval = 0;

-	raid_dev->sysfs_uioc = kmalloc(sizeof(uioc_t), GFP_KERNEL);
+	raid_dev->sysfs_uioc = kmalloc_obj(uioc_t, GFP_KERNEL);

-	raid_dev->sysfs_mbox64 = kmalloc(sizeof(mbox64_t), GFP_KERNEL);
+	raid_dev->sysfs_mbox64 = kmalloc_obj(mbox64_t, GFP_KERNEL);

 	raid_dev->sysfs_buffer = dma_alloc_coherent(&adapter->pdev->dev,
 			PAGE_SIZE, &raid_dev->sysfs_buffer_dma, GFP_KERNEL);
diff --git a/drivers/scsi/megaraid/megaraid_mm.c b/drivers/scsi/megaraid/megaraid_mm.c
index 87184e2538b0..0b457f691b1e 100644
--- a/drivers/scsi/megaraid/megaraid_mm.c
+++ b/drivers/scsi/megaraid/megaraid_mm.c
@@ -913,7 +913,7 @@ mraid_mm_register_adp(mraid_mmadp_t *lld_adp)
 	if (lld_adp->drvr_type != DRVRTYPE_MBOX)
 		return (-EINVAL);

-	adapter = kzalloc(sizeof(mraid_mmadp_t), GFP_KERNEL);
+	adapter = kzalloc_obj(mraid_mmadp_t, GFP_KERNEL);

 	if (!adapter)
 		return -ENOMEM;
@@ -932,12 +932,10 @@ mraid_mm_register_adp(mraid_mmadp_t *lld_adp)
 	 * Allocate single blocks of memory for all required kiocs,
 	 * mailboxes and passthru structures.
 	 */
-	adapter->kioc_list	= kmalloc_array(lld_adp->max_kioc,
-						  sizeof(uioc_t),
-						  GFP_KERNEL);
-	adapter->mbox_list	= kmalloc_array(lld_adp->max_kioc,
-						  sizeof(mbox64_t),
-						  GFP_KERNEL);
+	adapter->kioc_list	= kmalloc_objs(uioc_t, lld_adp->max_kioc,
+						 GFP_KERNEL);
+	adapter->mbox_list	= kmalloc_objs(mbox64_t, lld_adp->max_kioc,
+						 GFP_KERNEL);
 	adapter->pthru_dma_pool = dma_pool_create("megaraid mm pthru pool",
 						&adapter->pdev->dev,
 						sizeof(mraid_passthru_t),
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 52894e892a92..074ace2c9790 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -2137,8 +2137,7 @@ static int megasas_sdev_init(struct scsi_device *sdev)
 	}

 scan_target:
-	mr_device_priv_data = kzalloc(sizeof(*mr_device_priv_data),
-					GFP_KERNEL);
+	mr_device_priv_data = kzalloc_obj(*mr_device_priv_data, GFP_KERNEL);
 	if (!mr_device_priv_data)
 		return -ENOMEM;

@@ -3255,7 +3254,7 @@ megasas_service_aen(struct megasas_instance *instance, struct megasas_cmd *cmd)
 		((instance->issuepend_done == 1))) {
 		struct megasas_aen_event *ev;

-		ev = kzalloc(sizeof(*ev), GFP_ATOMIC);
+		ev = kzalloc_obj(*ev, GFP_ATOMIC);
 		if (!ev) {
 			dev_err(&instance->pdev->dev, "megasas_service_aen: out of memory\n");
 		} else {
@@ -4468,7 +4467,8 @@ int megasas_alloc_cmds(struct megasas_instance *instance)
 	 * Allocate the dynamic array first and then allocate individual
 	 * commands.
 	 */
-	instance->cmd_list = kcalloc(max_cmd, sizeof(struct megasas_cmd*), GFP_KERNEL);
+	instance->cmd_list = kzalloc_objs(struct megasas_cmd *, max_cmd,
+					  GFP_KERNEL);

 	if (!instance->cmd_list) {
 		dev_printk(KERN_DEBUG, &instance->pdev->dev, "out of memory\n");
@@ -4476,8 +4476,8 @@ int megasas_alloc_cmds(struct megasas_instance *instance)
 	}

 	for (i = 0; i < max_cmd; i++) {
-		instance->cmd_list[i] = kmalloc(sizeof(struct megasas_cmd),
-						GFP_KERNEL);
+		instance->cmd_list[i] = kmalloc_obj(struct megasas_cmd,
+						    GFP_KERNEL);

 		if (!instance->cmd_list[i]) {

@@ -6377,9 +6377,8 @@ static int megasas_init_fw(struct megasas_instance *instance)
 	/* stream detection initialization */
 	if (instance->adapter_type >= VENTURA_SERIES) {
 		fusion->stream_detect_by_ld =
-			kcalloc(MAX_LOGICAL_DRIVES_EXT,
-				sizeof(struct LD_STREAM_DETECT *),
-				GFP_KERNEL);
+			kzalloc_objs(struct LD_STREAM_DETECT *,
+				     MAX_LOGICAL_DRIVES_EXT, GFP_KERNEL);
 		if (!fusion->stream_detect_by_ld) {
 			dev_err(&instance->pdev->dev,
 				"unable to allocate stream detection for pool of LDs\n");
@@ -6387,8 +6386,7 @@ static int megasas_init_fw(struct megasas_instance *instance)
 		}
 		for (i = 0; i < MAX_LOGICAL_DRIVES_EXT; ++i) {
 			fusion->stream_detect_by_ld[i] =
-				kzalloc(sizeof(struct LD_STREAM_DETECT),
-				GFP_KERNEL);
+				kzalloc_obj(struct LD_STREAM_DETECT, GFP_KERNEL);
 			if (!fusion->stream_detect_by_ld[i]) {
 				dev_err(&instance->pdev->dev,
 					"unable to allocate stream detect by LD\n");
@@ -8496,7 +8494,7 @@ megasas_compat_iocpacket_get_user(void __user *arg)
 	int err = -EFAULT;
 	int i;

-	ioc = kzalloc(sizeof(*ioc), GFP_KERNEL);
+	ioc = kzalloc_obj(*ioc, GFP_KERNEL);
 	if (!ioc)
 		return ERR_PTR(-ENOMEM);
 	size = offsetof(struct megasas_iocpacket, frame) + sizeof(ioc->frame);
diff --git a/drivers/scsi/megaraid/megaraid_sas_debugfs.c b/drivers/scsi/megaraid/megaraid_sas_debugfs.c
index c69760775efa..43bb218dea13 100644
--- a/drivers/scsi/megaraid/megaraid_sas_debugfs.c
+++ b/drivers/scsi/megaraid/megaraid_sas_debugfs.c
@@ -65,7 +65,7 @@ megasas_debugfs_raidmap_open(struct inode *inode, struct file *file)

 	fusion = instance->ctrl_context;

-	debug = kzalloc(sizeof(struct megasas_debugfs_buffer), GFP_KERNEL);
+	debug = kzalloc_obj(struct megasas_debugfs_buffer, GFP_KERNEL);
 	if (!debug)
 		return -ENOMEM;

diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index a6794f49e9fa..e3de9c95bf4f 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -598,8 +598,8 @@ megasas_alloc_cmdlist_fusion(struct megasas_instance *instance)
 	 * commands.
 	 */
 	fusion->cmd_list =
-		kcalloc(max_mpt_cmd, sizeof(struct megasas_cmd_fusion *),
-			GFP_KERNEL);
+		kzalloc_objs(struct megasas_cmd_fusion *, max_mpt_cmd,
+			     GFP_KERNEL);
 	if (!fusion->cmd_list) {
 		dev_err(&instance->pdev->dev,
 			"Failed from %s %d\n",  __func__, __LINE__);
@@ -607,8 +607,8 @@ megasas_alloc_cmdlist_fusion(struct megasas_instance *instance)
 	}

 	for (i = 0; i < max_mpt_cmd; i++) {
-		fusion->cmd_list[i] = kzalloc(sizeof(struct megasas_cmd_fusion),
-					      GFP_KERNEL);
+		fusion->cmd_list[i] = kzalloc_obj(struct megasas_cmd_fusion,
+						  GFP_KERNEL);
 		if (!fusion->cmd_list[i]) {
 			for (j = 0; j < i; j++)
 				kfree(fusion->cmd_list[j]);
@@ -1744,7 +1744,7 @@ static int megasas_alloc_ioc_init_frame(struct megasas_instance *instance)

 	fusion = instance->ctrl_context;

-	cmd = kzalloc(sizeof(struct megasas_cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(struct megasas_cmd, GFP_KERNEL);

 	if (!cmd) {
 		dev_err(&instance->pdev->dev, "Failed from func: %s line: %d\n",
@@ -5298,8 +5298,7 @@ megasas_alloc_fusion_context(struct megasas_instance *instance)
 {
 	struct fusion_context *fusion;

-	instance->ctrl_context = kzalloc(sizeof(struct fusion_context),
-					 GFP_KERNEL);
+	instance->ctrl_context = kzalloc_obj(struct fusion_context, GFP_KERNEL);
 	if (!instance->ctrl_context) {
 		dev_err(&instance->pdev->dev, "Failed from %s %d\n",
 			__func__, __LINE__);
diff --git a/drivers/scsi/mpi3mr/mpi3mr_fw.c b/drivers/scsi/mpi3mr/mpi3mr_fw.c
index df984e9b5197..b42c14f1442b 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_fw.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_fw.c
@@ -1288,7 +1288,7 @@ static void mpi3mr_fault_uevent_emit(struct mpi3mr_ioc *mrioc)
 	struct kobj_uevent_env *env;
 	int ret;

-	env = kzalloc(sizeof(*env), GFP_KERNEL);
+	env = kzalloc_obj(*env, GFP_KERNEL);
 	if (!env)
 		return;

@@ -2110,8 +2110,9 @@ static int mpi3mr_alloc_op_reply_q_segments(struct mpi3mr_ioc *mrioc, u16 qidx)
 	op_reply_q->num_segments = DIV_ROUND_UP(op_reply_q->num_replies,
 	    op_reply_q->segment_qd);

-	op_reply_q->q_segments = kcalloc(op_reply_q->num_segments,
-	    sizeof(struct segments), GFP_KERNEL);
+	op_reply_q->q_segments = kzalloc_objs(struct segments,
+					      op_reply_q->num_segments,
+					      GFP_KERNEL);
 	if (!op_reply_q->q_segments)
 		return -ENOMEM;

@@ -2168,8 +2169,8 @@ static int mpi3mr_alloc_op_req_q_segments(struct mpi3mr_ioc *mrioc, u16 qidx)
 	op_req_q->num_segments = DIV_ROUND_UP(op_req_q->num_requests,
 	    op_req_q->segment_qd);

-	op_req_q->q_segments = kcalloc(op_req_q->num_segments,
-	    sizeof(struct segments), GFP_KERNEL);
+	op_req_q->q_segments = kzalloc_objs(struct segments,
+					    op_req_q->num_segments, GFP_KERNEL);
 	if (!op_req_q->q_segments)
 		return -ENOMEM;

@@ -2463,8 +2464,8 @@ static int mpi3mr_create_op_queues(struct mpi3mr_ioc *mrioc)
 	    num_queues);

 	if (!mrioc->req_qinfo) {
-		mrioc->req_qinfo = kcalloc(num_queues,
-		    sizeof(struct op_req_qinfo), GFP_KERNEL);
+		mrioc->req_qinfo = kzalloc_objs(struct op_req_qinfo, num_queues,
+						GFP_KERNEL);
 		if (!mrioc->req_qinfo) {
 			retval = -1;
 			goto out_failed;
diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
index 8e5abf620718..5e53b200c19b 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_os.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
@@ -676,7 +676,7 @@ static struct mpi3mr_tgt_dev *mpi3mr_alloc_tgtdev(void)
 {
 	struct mpi3mr_tgt_dev *tgtdev;

-	tgtdev = kzalloc(sizeof(*tgtdev), GFP_ATOMIC);
+	tgtdev = kzalloc_obj(*tgtdev, GFP_ATOMIC);
 	if (!tgtdev)
 		return NULL;
 	kref_init(&tgtdev->ref_count);
@@ -1710,8 +1710,7 @@ static void mpi3mr_encldev_add_chg_evt_bh(struct mpi3mr_ioc *mrioc,
 		    encl_handle);
 	if (!enclosure_dev && present) {
 		enclosure_dev =
-			kzalloc(sizeof(struct mpi3mr_enclosure_node),
-			    GFP_KERNEL);
+			kzalloc_obj(struct mpi3mr_enclosure_node, GFP_KERNEL);
 		if (!enclosure_dev)
 			return;
 		list_add_tail(&enclosure_dev->list,
@@ -2535,8 +2534,7 @@ static void mpi3mr_dev_rmhs_send_tm(struct mpi3mr_ioc *mrioc, u16 handle,
 	} while (retrycount--);

 	if (cmd_idx >= MPI3MR_NUM_DEVRMCMD) {
-		delayed_dev_rmhs = kzalloc(sizeof(*delayed_dev_rmhs),
-		    GFP_ATOMIC);
+		delayed_dev_rmhs = kzalloc_obj(*delayed_dev_rmhs, GFP_ATOMIC);
 		if (!delayed_dev_rmhs)
 			return;
 		INIT_LIST_HEAD(&delayed_dev_rmhs->list);
@@ -2677,8 +2675,7 @@ static void mpi3mr_send_event_ack(struct mpi3mr_ioc *mrioc, u8 event,
 	} while (retrycount--);

 	if (cmd_idx >= MPI3MR_NUM_EVTACKCMD) {
-		delayed_evtack = kzalloc(sizeof(*delayed_evtack),
-		    GFP_ATOMIC);
+		delayed_evtack = kzalloc_obj(*delayed_evtack, GFP_ATOMIC);
 		if (!delayed_evtack)
 			return;
 		INIT_LIST_HEAD(&delayed_evtack->list);
@@ -4900,7 +4897,7 @@ static int mpi3mr_sdev_init(struct scsi_device *sdev)

 	spin_unlock_irqrestore(&mrioc->tgtdev_lock, flags);

-	scsi_dev_priv_data = kzalloc(sizeof(*scsi_dev_priv_data), GFP_KERNEL);
+	scsi_dev_priv_data = kzalloc_obj(*scsi_dev_priv_data, GFP_KERNEL);
 	if (!scsi_dev_priv_data)
 		return -ENOMEM;

@@ -4931,7 +4928,7 @@ static int mpi3mr_target_alloc(struct scsi_target *starget)
 	int retval = 0;
 	struct sas_rphy *rphy = NULL;

-	scsi_tgt_priv_data = kzalloc(sizeof(*scsi_tgt_priv_data), GFP_KERNEL);
+	scsi_tgt_priv_data = kzalloc_obj(*scsi_tgt_priv_data, GFP_KERNEL);
 	if (!scsi_tgt_priv_data)
 		return -ENOMEM;

diff --git a/drivers/scsi/mpi3mr/mpi3mr_transport.c b/drivers/scsi/mpi3mr/mpi3mr_transport.c
index 101161554ef1..c79ba5bf56de 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_transport.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_transport.c
@@ -1022,8 +1022,7 @@ mpi3mr_alloc_hba_port(struct mpi3mr_ioc *mrioc, u16 port_id)
 {
 	struct mpi3mr_hba_port *hba_port;

-	hba_port = kzalloc(sizeof(struct mpi3mr_hba_port),
-	    GFP_KERNEL);
+	hba_port = kzalloc_obj(struct mpi3mr_hba_port, GFP_KERNEL);
 	if (!hba_port)
 		return NULL;
 	hba_port->port_id = port_id;
@@ -1221,8 +1220,8 @@ void mpi3mr_sas_host_add(struct mpi3mr_ioc *mrioc)
 	mrioc->sas_hba.host_node = 1;
 	INIT_LIST_HEAD(&mrioc->sas_hba.sas_port_list);
 	mrioc->sas_hba.parent_dev = &mrioc->shost->shost_gendev;
-	mrioc->sas_hba.phy = kcalloc(num_phys,
-	    sizeof(struct mpi3mr_sas_phy), GFP_KERNEL);
+	mrioc->sas_hba.phy = kzalloc_objs(struct mpi3mr_sas_phy, num_phys,
+					  GFP_KERNEL);
 	if (!mrioc->sas_hba.phy)
 		return;

@@ -1344,7 +1343,7 @@ static struct mpi3mr_sas_port *mpi3mr_sas_port_add(struct mpi3mr_ioc *mrioc,
 		return NULL;
 	}

-	mr_sas_port = kzalloc(sizeof(struct mpi3mr_sas_port), GFP_KERNEL);
+	mr_sas_port = kzalloc_obj(struct mpi3mr_sas_port, GFP_KERNEL);
 	if (!mr_sas_port)
 		return NULL;

@@ -1721,7 +1720,7 @@ mpi3mr_refresh_sas_ports(struct mpi3mr_ioc *mrioc)
 	sas_io_unit_pg0 = kzalloc(sz, GFP_KERNEL);
 	if (!sas_io_unit_pg0)
 		return;
-	h_port = kcalloc(64, sizeof(struct host_port), GFP_KERNEL);
+	h_port = kzalloc_objs(struct host_port, 64, GFP_KERNEL);
 	if (!h_port)
 		goto out;

@@ -2098,8 +2097,7 @@ int mpi3mr_expander_add(struct mpi3mr_ioc *mrioc, u16 handle)
 	if (sas_expander)
 		return 0;

-	sas_expander = kzalloc(sizeof(struct mpi3mr_sas_node),
-	    GFP_KERNEL);
+	sas_expander = kzalloc_obj(struct mpi3mr_sas_node, GFP_KERNEL);
 	if (!sas_expander)
 		return -ENOMEM;

@@ -2118,8 +2116,8 @@ int mpi3mr_expander_add(struct mpi3mr_ioc *mrioc, u16 handle)
 		rc = -1;
 		goto out_fail;
 	}
-	sas_expander->phy = kcalloc(sas_expander->num_phys,
-	    sizeof(struct mpi3mr_sas_phy), GFP_KERNEL);
+	sas_expander->phy = kzalloc_objs(struct mpi3mr_sas_phy,
+					 sas_expander->num_phys, GFP_KERNEL);
 	if (!sas_expander->phy) {
 		rc = -1;
 		goto out_fail;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 2f2183f405c9..32e6c1f2f058 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -1497,8 +1497,7 @@ _base_async_event(struct MPT3SAS_ADAPTER *ioc, u8 msix_index, u32 reply)
 		goto out;
 	smid = mpt3sas_base_get_smid(ioc, ioc->base_cb_idx);
 	if (!smid) {
-		delayed_event_ack = kzalloc(sizeof(*delayed_event_ack),
-					GFP_ATOMIC);
+		delayed_event_ack = kzalloc_obj(*delayed_event_ack, GFP_ATOMIC);
 		if (!delayed_event_ack)
 			goto out;
 		INIT_LIST_HEAD(&delayed_event_ack->list);
@@ -3162,7 +3161,7 @@ _base_request_irq(struct MPT3SAS_ADAPTER *ioc, u8 index)
 	struct adapter_reply_queue *reply_q;
 	int r, qid;

-	reply_q =  kzalloc(sizeof(struct adapter_reply_queue), GFP_KERNEL);
+	reply_q =  kzalloc_obj(struct adapter_reply_queue, GFP_KERNEL);
 	if (!reply_q) {
 		ioc_err(ioc, "unable to allocate memory %zu!\n",
 			sizeof(struct adapter_reply_queue));
@@ -3462,8 +3461,9 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc)
 		iopoll_q_count = poll_queues;

 	if (iopoll_q_count) {
-		ioc->io_uring_poll_queues = kcalloc(iopoll_q_count,
-		    sizeof(struct io_uring_poll_queue), GFP_KERNEL);
+		ioc->io_uring_poll_queues = kzalloc_objs(struct io_uring_poll_queue,
+							 iopoll_q_count,
+							 GFP_KERNEL);
 		if (!ioc->io_uring_poll_queues)
 			iopoll_q_count = 0;
 	}
@@ -3727,9 +3727,9 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc)
 		 * each register is at offset bytes of
 		 * MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET from previous one.
 		 */
-		ioc->replyPostRegisterIndex = kcalloc(
-		     ioc->combined_reply_index_count,
-		     sizeof(resource_size_t *), GFP_KERNEL);
+		ioc->replyPostRegisterIndex = kzalloc_objs(resource_size_t *,
+							   ioc->combined_reply_index_count,
+							   GFP_KERNEL);
 		if (!ioc->replyPostRegisterIndex) {
 			ioc_err(ioc,
 			    "allocation for replyPostRegisterIndex failed!\n");
@@ -6218,8 +6218,8 @@ base_alloc_rdpq_dma_pool(struct MPT3SAS_ADAPTER *ioc, int sz)
 		sizeof(Mpi2DefaultReplyDescriptor_t);
 	int count = ioc->rdpq_array_enable ? ioc->reply_queue_count : 1;

-	ioc->reply_post = kcalloc(count, sizeof(struct reply_post_struct),
-			GFP_KERNEL);
+	ioc->reply_post = kzalloc_objs(struct reply_post_struct, count,
+				       GFP_KERNEL);
 	if (!ioc->reply_post)
 		return -ENOMEM;
 	/*
@@ -6562,8 +6562,8 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc)
 	}

 	/* initialize hi-priority queue smid's */
-	ioc->hpr_lookup = kcalloc(ioc->hi_priority_depth,
-	    sizeof(struct request_tracker), GFP_KERNEL);
+	ioc->hpr_lookup = kzalloc_objs(struct request_tracker,
+				       ioc->hi_priority_depth, GFP_KERNEL);
 	if (!ioc->hpr_lookup) {
 		ioc_err(ioc, "hpr_lookup: kcalloc failed\n");
 		goto out;
@@ -6575,8 +6575,8 @@ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc)
 			     ioc->hi_priority_depth, ioc->hi_priority_smid));

 	/* initialize internal queue smid's */
-	ioc->internal_lookup = kcalloc(ioc->internal_depth,
-	    sizeof(struct request_tracker), GFP_KERNEL);
+	ioc->internal_lookup = kzalloc_objs(struct request_tracker,
+					    ioc->internal_depth, GFP_KERNEL);
 	if (!ioc->internal_lookup) {
 		ioc_err(ioc, "internal_lookup: kcalloc failed\n");
 		goto out;
@@ -8430,8 +8430,9 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
 	}

 	if (ioc->is_warpdrive) {
-		ioc->reply_post_host_index = kcalloc(ioc->cpu_msix_table_sz,
-		    sizeof(resource_size_t *), GFP_KERNEL);
+		ioc->reply_post_host_index = kzalloc_objs(resource_size_t *,
+							  ioc->cpu_msix_table_sz,
+							  GFP_KERNEL);
 		if (!ioc->reply_post_host_index) {
 			ioc_info(ioc, "Allocation for reply_post_host_index failed!!!\n");
 			r = -ENOMEM;
@@ -8520,8 +8521,8 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc)
 	if (r)
 		goto out_free_resources;

-	ioc->pfacts = kcalloc(ioc->facts.NumberOfPorts,
-	    sizeof(struct mpt3sas_port_facts), GFP_KERNEL);
+	ioc->pfacts = kzalloc_objs(struct mpt3sas_port_facts,
+				   ioc->facts.NumberOfPorts, GFP_KERNEL);
 	if (!ioc->pfacts) {
 		r = -ENOMEM;
 		goto out_free_resources;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
index 3b951589feeb..35b78162e8c3 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c
@@ -1331,8 +1331,8 @@ _ctl_eventenable(struct MPT3SAS_ADAPTER *ioc, void __user *arg)
 	/* initialize event_log */
 	ioc->event_context = 0;
 	ioc->aen_event_read_flag = 0;
-	ioc->event_log = kcalloc(MPT3SAS_CTL_EVENT_LOG_SIZE,
-	    sizeof(struct MPT3_IOCTL_EVENTS), GFP_KERNEL);
+	ioc->event_log = kzalloc_objs(struct MPT3_IOCTL_EVENTS,
+				      MPT3SAS_CTL_EVENT_LOG_SIZE, GFP_KERNEL);
 	if (!ioc->event_log) {
 		pr_err("failure at %s:%d/%s()!\n",
 		    __FILE__, __LINE__, __func__);
@@ -3881,8 +3881,8 @@ diag_trigger_master_store(struct device *cdev,
 	rc = min(sizeof(struct SL_WH_MASTER_TRIGGER_T), count);

 	if (ioc->supports_trigger_pages) {
-		master_tg = kzalloc(sizeof(struct SL_WH_MASTER_TRIGGER_T),
-		    GFP_KERNEL);
+		master_tg = kzalloc_obj(struct SL_WH_MASTER_TRIGGER_T,
+					GFP_KERNEL);
 		if (!master_tg)
 			return -ENOMEM;

@@ -3956,8 +3956,8 @@ diag_trigger_event_store(struct device *cdev,

 	sz = min(sizeof(struct SL_WH_EVENT_TRIGGERS_T), count);
 	if (ioc->supports_trigger_pages) {
-		event_tg = kzalloc(sizeof(struct SL_WH_EVENT_TRIGGERS_T),
-		    GFP_KERNEL);
+		event_tg = kzalloc_obj(struct SL_WH_EVENT_TRIGGERS_T,
+				       GFP_KERNEL);
 		if (!event_tg)
 			return -ENOMEM;

@@ -4031,8 +4031,7 @@ diag_trigger_scsi_store(struct device *cdev,

 	sz = min(sizeof(struct SL_WH_SCSI_TRIGGERS_T), count);
 	if (ioc->supports_trigger_pages) {
-		scsi_tg = kzalloc(sizeof(struct SL_WH_SCSI_TRIGGERS_T),
-		    GFP_KERNEL);
+		scsi_tg = kzalloc_obj(struct SL_WH_SCSI_TRIGGERS_T, GFP_KERNEL);
 		if (!scsi_tg)
 			return -ENOMEM;

@@ -4105,8 +4104,7 @@ diag_trigger_mpi_store(struct device *cdev,

 	sz = min(sizeof(struct SL_WH_MPI_TRIGGERS_T), count);
 	if (ioc->supports_trigger_pages) {
-		mpi_tg = kzalloc(sizeof(struct SL_WH_MPI_TRIGGERS_T),
-		    GFP_KERNEL);
+		mpi_tg = kzalloc_obj(struct SL_WH_MPI_TRIGGERS_T, GFP_KERNEL);
 		if (!mpi_tg)
 			return -ENOMEM;

diff --git a/drivers/scsi/mpt3sas/mpt3sas_debugfs.c b/drivers/scsi/mpt3sas/mpt3sas_debugfs.c
index a6ab1db81167..d755f58ad7a0 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_debugfs.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_debugfs.c
@@ -58,7 +58,7 @@ _debugfs_iocdump_open(struct inode *inode, struct file *file)
 	struct MPT3SAS_ADAPTER *ioc = inode->i_private;
 	struct mpt3sas_debugfs_buffer *debug;

-	debug = kzalloc(sizeof(struct mpt3sas_debugfs_buffer), GFP_KERNEL);
+	debug = kzalloc_obj(struct mpt3sas_debugfs_buffer, GFP_KERNEL);
 	if (!debug)
 		return -ENOMEM;

diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 26a13b622c95..1bafd51cdcf6 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -476,7 +476,7 @@ mpt3sas_get_port_by_id(struct MPT3SAS_ADAPTER *ioc,
 	 * And add this object to port_table_list.
 	 */
 	if (!ioc->multipath_on_hba) {
-		port = kzalloc(sizeof(struct hba_port), GFP_ATOMIC);
+		port = kzalloc_obj(struct hba_port, GFP_ATOMIC);
 		if (!port)
 			return NULL;

@@ -1940,8 +1940,7 @@ scsih_target_alloc(struct scsi_target *starget)
 	unsigned long flags;
 	struct sas_rphy *rphy;

-	sas_target_priv_data = kzalloc(sizeof(*sas_target_priv_data),
-				       GFP_KERNEL);
+	sas_target_priv_data = kzalloc_obj(*sas_target_priv_data, GFP_KERNEL);
 	if (!sas_target_priv_data)
 		return -ENOMEM;

@@ -2109,8 +2108,7 @@ scsih_sdev_init(struct scsi_device *sdev)
 	struct _pcie_device *pcie_device;
 	unsigned long flags;

-	sas_device_priv_data = kzalloc(sizeof(*sas_device_priv_data),
-				       GFP_KERNEL);
+	sas_device_priv_data = kzalloc_obj(*sas_device_priv_data, GFP_KERNEL);
 	if (!sas_device_priv_data)
 		return -ENOMEM;

@@ -4470,7 +4468,7 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle)

 	smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_tr_cb_idx);
 	if (!smid) {
-		delayed_tr = kzalloc(sizeof(*delayed_tr), GFP_ATOMIC);
+		delayed_tr = kzalloc_obj(*delayed_tr, GFP_ATOMIC);
 		if (!delayed_tr)
 			goto out;
 		INIT_LIST_HEAD(&delayed_tr->list);
@@ -4568,7 +4566,7 @@ _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,

 	smid_sas_ctrl = mpt3sas_base_get_smid(ioc, ioc->tm_sas_control_cb_idx);
 	if (!smid_sas_ctrl) {
-		delayed_sc = kzalloc(sizeof(*delayed_sc), GFP_ATOMIC);
+		delayed_sc = kzalloc_obj(*delayed_sc, GFP_ATOMIC);
 		if (!delayed_sc)
 			return _scsih_check_for_pending_tm(ioc, smid);
 		INIT_LIST_HEAD(&delayed_sc->list);
@@ -4694,7 +4692,7 @@ _scsih_tm_tr_volume_send(struct MPT3SAS_ADAPTER *ioc, u16 handle)

 	smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_tr_volume_cb_idx);
 	if (!smid) {
-		delayed_tr = kzalloc(sizeof(*delayed_tr), GFP_ATOMIC);
+		delayed_tr = kzalloc_obj(*delayed_tr, GFP_ATOMIC);
 		if (!delayed_tr)
 			return;
 		INIT_LIST_HEAD(&delayed_tr->list);
@@ -5215,7 +5213,7 @@ _scsih_check_ir_config_unhide_events(struct MPT3SAS_ADAPTER *ioc,
 		if (!volume_handle)
 			_scsih_tm_tr_send(ioc, handle);
 		else if (volume_handle == a || volume_handle == b) {
-			delayed_tr = kzalloc(sizeof(*delayed_tr), GFP_ATOMIC);
+			delayed_tr = kzalloc_obj(*delayed_tr, GFP_ATOMIC);
 			BUG_ON(!delayed_tr);
 			INIT_LIST_HEAD(&delayed_tr->list);
 			delayed_tr->handle = handle;
@@ -6378,8 +6376,8 @@ _scsih_update_vphys_after_reset(struct MPT3SAS_ADAPTER *ioc)
 				port_id = sas_iounit_pg0->PhyData[i].Port;
 				mport = mpt3sas_get_port_by_id(ioc, port_id, 1);
 				if (!mport) {
-					mport = kzalloc(
-					    sizeof(struct hba_port), GFP_KERNEL);
+					mport = kzalloc_obj(struct hba_port,
+							    GFP_KERNEL);
 					if (!mport)
 						break;
 					mport->port_id = port_id;
@@ -6749,8 +6747,8 @@ _scsih_sas_port_refresh(struct MPT3SAS_ADAPTER *ioc)
 	}
 	ioc->sas_hba.num_phys = num_phys;

-	port_table = kcalloc(ioc->sas_hba.num_phys,
-	    sizeof(struct hba_port), GFP_KERNEL);
+	port_table = kzalloc_objs(struct hba_port, ioc->sas_hba.num_phys,
+				  GFP_KERNEL);
 	if (!port_table)
 		return;

@@ -6841,7 +6839,7 @@ _scsih_alloc_vphy(struct MPT3SAS_ADAPTER *ioc, u8 port_id, u8 phy_num)

 	vphy = mpt3sas_get_vphy_by_phy(ioc, port, phy_num);
 	if (!vphy) {
-		vphy = kzalloc(sizeof(struct virtual_phy), GFP_KERNEL);
+		vphy = kzalloc_obj(struct virtual_phy, GFP_KERNEL);
 		if (!vphy)
 			return NULL;

@@ -6911,7 +6909,7 @@ _scsih_sas_host_refresh(struct MPT3SAS_ADAPTER *ioc)
 			    sas_iounit_pg0->PhyData[0].ControllerDevHandle);
 		port_id = sas_iounit_pg0->PhyData[i].Port;
 		if (!(mpt3sas_get_port_by_id(ioc, port_id, 0))) {
-			port = kzalloc(sizeof(struct hba_port), GFP_KERNEL);
+			port = kzalloc_obj(struct hba_port, GFP_KERNEL);
 			if (!port)
 				goto out;

@@ -7031,8 +7029,9 @@ _scsih_sas_host_add(struct MPT3SAS_ADAPTER *ioc)

 	ioc->sas_hba.nr_phys_allocated = max_t(u8,
 	    MPT_MAX_HBA_NUM_PHYS, num_phys);
-	ioc->sas_hba.phy = kcalloc(ioc->sas_hba.nr_phys_allocated,
-	    sizeof(struct _sas_phy), GFP_KERNEL);
+	ioc->sas_hba.phy = kzalloc_objs(struct _sas_phy,
+					ioc->sas_hba.nr_phys_allocated,
+					GFP_KERNEL);
 	if (!ioc->sas_hba.phy) {
 		ioc_err(ioc, "failure at %s:%d/%s()!\n",
 			__FILE__, __LINE__, __func__);
@@ -7117,7 +7116,7 @@ _scsih_sas_host_add(struct MPT3SAS_ADAPTER *ioc)

 		port_id = sas_iounit_pg0->PhyData[i].Port;
 		if (!(mpt3sas_get_port_by_id(ioc, port_id, 0))) {
-			port = kzalloc(sizeof(struct hba_port), GFP_KERNEL);
+			port = kzalloc_obj(struct hba_port, GFP_KERNEL);
 			if (!port)
 				goto out;

@@ -7258,8 +7257,7 @@ _scsih_expander_add(struct MPT3SAS_ADAPTER *ioc, u16 handle)
 	if (sas_expander)
 		return 0;

-	sas_expander = kzalloc(sizeof(struct _sas_node),
-	    GFP_KERNEL);
+	sas_expander = kzalloc_obj(struct _sas_node, GFP_KERNEL);
 	if (!sas_expander) {
 		ioc_err(ioc, "failure at %s:%d/%s()!\n",
 			__FILE__, __LINE__, __func__);
@@ -7286,8 +7284,8 @@ _scsih_expander_add(struct MPT3SAS_ADAPTER *ioc, u16 handle)
 		rc = -1;
 		goto out_fail;
 	}
-	sas_expander->phy = kcalloc(sas_expander->num_phys,
-	    sizeof(struct _sas_phy), GFP_KERNEL);
+	sas_expander->phy = kzalloc_objs(struct _sas_phy,
+					 sas_expander->num_phys, GFP_KERNEL);
 	if (!sas_expander->phy) {
 		ioc_err(ioc, "failure at %s:%d/%s()!\n",
 			__FILE__, __LINE__, __func__);
@@ -7782,7 +7780,7 @@ _scsih_report_luns(struct MPT3SAS_ADAPTER *ioc, u16 handle, void *data,
 	int retries;

 	lun_data = NULL;
-	transfer_packet = kzalloc(sizeof(struct _scsi_io_transfer), GFP_KERNEL);
+	transfer_packet = kzalloc_obj(struct _scsi_io_transfer, GFP_KERNEL);
 	if (!transfer_packet) {

 		ioc_err(ioc, "failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__);
@@ -7869,7 +7867,7 @@ _scsih_start_unit(struct MPT3SAS_ADAPTER *ioc, u16 handle, u32 lun, u8 is_pd,
 	enum device_responsive_state rc;
 	int return_code;

-	transfer_packet = kzalloc(sizeof(struct _scsi_io_transfer), GFP_KERNEL);
+	transfer_packet = kzalloc_obj(struct _scsi_io_transfer, GFP_KERNEL);
 	if (!transfer_packet) {

 		pr_info("failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__);
@@ -7930,7 +7928,7 @@ _scsih_test_unit_ready(struct MPT3SAS_ADAPTER *ioc, u16 handle, u32 lun,
 	int return_code;
 	int sata_init_failure = 0;

-	transfer_packet = kzalloc(sizeof(struct _scsi_io_transfer), GFP_KERNEL);
+	transfer_packet = kzalloc_obj(struct _scsi_io_transfer, GFP_KERNEL);
 	if (!transfer_packet) {

 		pr_info("failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__);
@@ -8002,7 +8000,7 @@ _scsih_ata_pass_thru_idd(struct MPT3SAS_ADAPTER *ioc, u16 handle,
 	u32 data_length;

 	idd_data = NULL;
-	transfer_packet = kzalloc(sizeof(struct _scsi_io_transfer), GFP_KERNEL);
+	transfer_packet = kzalloc_obj(struct _scsi_io_transfer, GFP_KERNEL);
 	if (!transfer_packet) {

 		ioc_err(ioc, "failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__);
@@ -8133,7 +8131,7 @@ _scsih_wait_for_target_to_become_ready(struct MPT3SAS_ADAPTER *ioc, u16 handle,
 	int lun;
 	struct scsi_lun *lunp;

-	lun_data = kcalloc(MPT3_MAX_LUNS, sizeof(struct scsi_lun), GFP_KERNEL);
+	lun_data = kzalloc_objs(struct scsi_lun, MPT3_MAX_LUNS, GFP_KERNEL);
 	if (!lun_data) {

 		ioc_err(ioc, "failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__);
@@ -8482,8 +8480,7 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 retry_count,
 		}
 	}

-	sas_device = kzalloc(sizeof(struct _sas_device),
-	    GFP_KERNEL);
+	sas_device = kzalloc_obj(struct _sas_device, GFP_KERNEL);
 	if (!sas_device) {
 		ioc_err(ioc, "failure at %s:%d/%s()!\n",
 			__FILE__, __LINE__, __func__);
@@ -9386,7 +9383,7 @@ _scsih_pcie_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 retry_count)
 		}
 	}

-	pcie_device = kzalloc(sizeof(struct _pcie_device), GFP_KERNEL);
+	pcie_device = kzalloc_obj(struct _pcie_device, GFP_KERNEL);
 	if (!pcie_device) {
 		ioc_err(ioc, "failure at %s:%d/%s()!\n",
 			__FILE__, __LINE__, __func__);
@@ -9838,8 +9835,7 @@ _scsih_sas_enclosure_dev_status_change_event(struct MPT3SAS_ADAPTER *ioc,
 	case MPI2_EVENT_SAS_ENCL_RC_ADDED:
 		if (!enclosure_dev) {
 			enclosure_dev =
-				kzalloc(sizeof(struct _enclosure_node),
-					GFP_KERNEL);
+				kzalloc_obj(struct _enclosure_node, GFP_KERNEL);
 			if (!enclosure_dev) {
 				ioc_info(ioc, "failure at %s:%d/%s()!\n",
 					 __FILE__, __LINE__, __func__);
@@ -10264,7 +10260,7 @@ _scsih_sas_volume_add(struct MPT3SAS_ADAPTER *ioc,
 	if (raid_device)
 		return;

-	raid_device = kzalloc(sizeof(struct _raid_device), GFP_KERNEL);
+	raid_device = kzalloc_obj(struct _raid_device, GFP_KERNEL);
 	if (!raid_device) {
 		ioc_err(ioc, "failure at %s:%d/%s()!\n",
 			__FILE__, __LINE__, __func__);
@@ -10682,7 +10678,7 @@ _scsih_sas_ir_volume_event(struct MPT3SAS_ADAPTER *ioc,
 			break;
 		}

-		raid_device = kzalloc(sizeof(struct _raid_device), GFP_KERNEL);
+		raid_device = kzalloc_obj(struct _raid_device, GFP_KERNEL);
 		if (!raid_device) {
 			ioc_err(ioc, "failure at %s:%d/%s()!\n",
 				__FILE__, __LINE__, __func__);
@@ -11043,7 +11039,7 @@ _scsih_create_enclosure_list_after_reset(struct MPT3SAS_ADAPTER *ioc)
 	enclosure_handle = 0xFFFF;
 	do {
 		enclosure_dev =
-			kzalloc(sizeof(struct _enclosure_node), GFP_KERNEL);
+			kzalloc_obj(struct _enclosure_node, GFP_KERNEL);
 		if (!enclosure_dev) {
 			ioc_err(ioc, "failure at %s:%d/%s()!\n",
 				__FILE__, __LINE__, __func__);
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
index f3400d01cc2a..09a36e561da5 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
@@ -698,8 +698,7 @@ mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle,
 		return NULL;
 	}

-	mpt3sas_port = kzalloc(sizeof(struct _sas_port),
-	    GFP_KERNEL);
+	mpt3sas_port = kzalloc_obj(struct _sas_port, GFP_KERNEL);
 	if (!mpt3sas_port) {
 		ioc_err(ioc, "failure at %s:%d/%s()!\n",
 			__FILE__, __LINE__, __func__);
diff --git a/drivers/scsi/mvme16x_scsi.c b/drivers/scsi/mvme16x_scsi.c
index 9b19d5205e50..43c68802d40a 100644
--- a/drivers/scsi/mvme16x_scsi.c
+++ b/drivers/scsi/mvme16x_scsi.c
@@ -49,7 +49,7 @@ static int mvme16x_probe(struct platform_device *dev)
 		goto out;
 	}

-	hostdata = kzalloc(sizeof(struct NCR_700_Host_Parameters), GFP_KERNEL);
+	hostdata = kzalloc_obj(struct NCR_700_Host_Parameters, GFP_KERNEL);
 	if (hostdata == NULL) {
 		printk(KERN_ERR "mvme16x-scsi: "
 				"Failed to allocate host data\n");
diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
index 7f1ad305eee6..6f5a98572c33 100644
--- a/drivers/scsi/mvsas/mv_init.c
+++ b/drivers/scsi/mvsas/mv_init.c
@@ -401,7 +401,7 @@ static int mvs_prep_sas_ha_init(struct Scsi_Host *shost,
 	sha->sas_port = arr_port;
 	sha->shost = shost;

-	sha->lldd_ha = kzalloc(sizeof(struct mvs_prv_info), GFP_KERNEL);
+	sha->lldd_ha = kzalloc_obj(struct mvs_prv_info, GFP_KERNEL);
 	if (!sha->lldd_ha)
 		goto exit_free;

@@ -502,7 +502,7 @@ static int mvs_pci_init(struct pci_dev *pdev, const struct pci_device_id *ent)

 	chip = &mvs_chips[ent->driver_data];
 	SHOST_TO_SAS_HA(shost) =
-		kcalloc(1, sizeof(struct sas_ha_struct), GFP_KERNEL);
+		kzalloc_objs(struct sas_ha_struct, 1, GFP_KERNEL);
 	if (!SHOST_TO_SAS_HA(shost)) {
 		scsi_host_put(shost);
 		rc = -ENOMEM;
diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
index f2e7997d5b9d..359226e80eae 100644
--- a/drivers/scsi/mvsas/mv_sas.c
+++ b/drivers/scsi/mvsas/mv_sas.c
@@ -1739,7 +1739,7 @@ static int mvs_handle_event(struct mvs_info *mvi, void *data, int handler)
 	struct mvs_wq *mwq;
 	int ret = 0;

-	mwq = kmalloc(sizeof(struct mvs_wq), GFP_ATOMIC);
+	mwq = kmalloc_obj(struct mvs_wq, GFP_ATOMIC);
 	if (mwq) {
 		mwq->mvi = mvi;
 		mwq->data = data;
diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c
index cda8bd083a38..10b40c434977 100644
--- a/drivers/scsi/mvumi.c
+++ b/drivers/scsi/mvumi.c
@@ -106,7 +106,7 @@ static int mvumi_map_pci_addr(struct pci_dev *dev, void **addr_array)
 static struct mvumi_res *mvumi_alloc_mem_resource(struct mvumi_hba *mhba,
 				enum resource_type type, unsigned int size)
 {
-	struct mvumi_res *res = kzalloc(sizeof(*res), GFP_ATOMIC);
+	struct mvumi_res *res = kzalloc_obj(*res, GFP_ATOMIC);

 	if (!res) {
 		dev_err(&mhba->pdev->dev,
@@ -252,7 +252,7 @@ static struct mvumi_cmd *mvumi_create_internal_cmd(struct mvumi_hba *mhba,
 {
 	struct mvumi_cmd *cmd;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd) {
 		dev_err(&mhba->pdev->dev, "failed to create a internal cmd\n");
 		return NULL;
@@ -368,7 +368,7 @@ static int mvumi_alloc_cmds(struct mvumi_hba *mhba)
 	struct mvumi_cmd *cmd;

 	for (i = 0; i < mhba->max_io; i++) {
-		cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+		cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 		if (!cmd)
 			goto err_exit;

@@ -1572,8 +1572,8 @@ static int mvumi_probe_devices(struct mvumi_hba *mhba)
 			found = mvumi_match_devices(mhba, id, wwid);
 			if (!found) {
 				mvumi_remove_devices(mhba, id);
-				mv_dev = kzalloc(sizeof(struct mvumi_device),
-								GFP_KERNEL);
+				mv_dev = kzalloc_obj(struct mvumi_device,
+						     GFP_KERNEL);
 				if (!mv_dev) {
 					dev_err(&mhba->pdev->dev,
 						"%s alloc mv_dev failed\n",
@@ -1749,7 +1749,7 @@ static void mvumi_launch_events(struct mvumi_hba *mhba, u32 isr_status)
 			continue;
 		}

-		mu_ev = kzalloc(sizeof(*mu_ev), GFP_ATOMIC);
+		mu_ev = kzalloc_obj(*mu_ev, GFP_ATOMIC);
 		if (mu_ev) {
 			INIT_WORK(&mu_ev->work_q, mvumi_scan_events);
 			mu_ev->mhba = mhba;
@@ -2193,7 +2193,7 @@ static int mvumi_cfg_hw_reg(struct mvumi_hba *mhba)
 		mhba->mmio = mhba->base_addr[0];
 		base = mhba->mmio;
 		if (!mhba->regs) {
-			mhba->regs = kzalloc(sizeof(*regs), GFP_KERNEL);
+			mhba->regs = kzalloc_obj(*regs, GFP_KERNEL);
 			if (mhba->regs == NULL)
 				return -ENOMEM;
 		}
@@ -2245,7 +2245,7 @@ static int mvumi_cfg_hw_reg(struct mvumi_hba *mhba)
 		mhba->mmio = mhba->base_addr[2];
 		base = mhba->mmio;
 		if (!mhba->regs) {
-			mhba->regs = kzalloc(sizeof(*regs), GFP_KERNEL);
+			mhba->regs = kzalloc_obj(*regs, GFP_KERNEL);
 			if (mhba->regs == NULL)
 				return -ENOMEM;
 		}
diff --git a/drivers/scsi/myrb.c b/drivers/scsi/myrb.c
index efeacb9ffd7c..e24996921e87 100644
--- a/drivers/scsi/myrb.c
+++ b/drivers/scsi/myrb.c
@@ -1628,7 +1628,7 @@ static int myrb_ldev_sdev_init(struct scsi_device *sdev)

 	ldev_info = cb->ldev_info_buf + ldev_num;

-	sdev->hostdata = kzalloc(sizeof(*ldev_info), GFP_KERNEL);
+	sdev->hostdata = kzalloc_obj(*ldev_info, GFP_KERNEL);
 	if (!sdev->hostdata)
 		return -ENOMEM;
 	dev_dbg(&sdev->sdev_gendev,
@@ -1672,7 +1672,7 @@ static int myrb_pdev_sdev_init(struct scsi_device *sdev)
 	if (sdev->id > MYRB_MAX_TARGETS)
 		return -ENXIO;

-	pdev_info = kzalloc(sizeof(*pdev_info), GFP_KERNEL);
+	pdev_info = kzalloc_obj(*pdev_info, GFP_KERNEL);
 	if (!pdev_info)
 		return -ENOMEM;

diff --git a/drivers/scsi/myrs.c b/drivers/scsi/myrs.c
index 7e8bb533c669..77ed566d7b92 100644
--- a/drivers/scsi/myrs.c
+++ b/drivers/scsi/myrs.c
@@ -538,11 +538,11 @@ static bool myrs_enable_mmio_mbox(struct myrs_hba *cs,
 		cs->fwstat_buf = NULL;
 		goto out_free;
 	}
-	cs->ctlr_info = kzalloc(sizeof(struct myrs_ctlr_info), GFP_KERNEL);
+	cs->ctlr_info = kzalloc_obj(struct myrs_ctlr_info, GFP_KERNEL);
 	if (!cs->ctlr_info)
 		goto out_free;

-	cs->event_buf = kzalloc(sizeof(struct myrs_event), GFP_KERNEL);
+	cs->event_buf = kzalloc_obj(struct myrs_event, GFP_KERNEL);
 	if (!cs->event_buf)
 		goto out_free;

@@ -1803,7 +1803,7 @@ static int myrs_sdev_init(struct scsi_device *sdev)

 		ldev_num = myrs_translate_ldev(cs, sdev);

-		ldev_info = kzalloc(sizeof(*ldev_info), GFP_KERNEL);
+		ldev_info = kzalloc_obj(*ldev_info, GFP_KERNEL);
 		if (!ldev_info)
 			return -ENOMEM;

@@ -1865,7 +1865,7 @@ static int myrs_sdev_init(struct scsi_device *sdev)
 	} else {
 		struct myrs_pdev_info *pdev_info;

-		pdev_info = kzalloc(sizeof(*pdev_info), GFP_KERNEL);
+		pdev_info = kzalloc_obj(*pdev_info, GFP_KERNEL);
 		if (!pdev_info)
 			return -ENOMEM;

diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c
index 1b54ba51a485..ae96602a543b 100644
--- a/drivers/scsi/pcmcia/aha152x_stub.c
+++ b/drivers/scsi/pcmcia/aha152x_stub.c
@@ -96,7 +96,7 @@ static int aha152x_probe(struct pcmcia_device *link)
     dev_dbg(&link->dev, "aha152x_attach()\n");

     /* Create new SCSI device */
-    info = kzalloc(sizeof(*info), GFP_KERNEL);
+    info = kzalloc_obj(*info, GFP_KERNEL);
     if (!info) return -ENOMEM;
     info->p_dev = link;
     link->priv = info;
diff --git a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c
index fb3a1b43d8bd..50d2e4ffe037 100644
--- a/drivers/scsi/pcmcia/nsp_cs.c
+++ b/drivers/scsi/pcmcia/nsp_cs.c
@@ -1520,7 +1520,7 @@ static int nsp_cs_probe(struct pcmcia_device *link)
 	nsp_dbg(NSP_DEBUG_INIT, "in");

 	/* Create new SCSI device */
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (info == NULL) { return -ENOMEM; }
 	info->p_dev = link;
 	link->priv = info;
diff --git a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c
index 310d0b6586a6..f24223fc58b8 100644
--- a/drivers/scsi/pcmcia/qlogic_stub.c
+++ b/drivers/scsi/pcmcia/qlogic_stub.c
@@ -152,7 +152,7 @@ static int qlogic_probe(struct pcmcia_device *link)
 	dev_dbg(&link->dev, "qlogic_attach()\n");

 	/* Create new SCSI device */
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	info->p_dev = link;
diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c
index 8f56f7277dee..2accb2c538f0 100644
--- a/drivers/scsi/pcmcia/sym53c500_cs.c
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c
@@ -849,7 +849,7 @@ SYM53C500_probe(struct pcmcia_device *link)
 	dev_dbg(&link->dev, "SYM53C500_attach()\n");

 	/* Create new SCSI device */
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	info->p_dev = link;
diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c
index 8005995a317c..68b4ddcb7781 100644
--- a/drivers/scsi/pm8001/pm8001_hwi.c
+++ b/drivers/scsi/pm8001/pm8001_hwi.c
@@ -1686,7 +1686,7 @@ int pm8001_handle_event(struct pm8001_hba_info *pm8001_ha, void *data,
 	struct pm8001_work *pw;
 	int ret = 0;

-	pw = kmalloc(sizeof(struct pm8001_work), GFP_ATOMIC);
+	pw = kmalloc_obj(struct pm8001_work, GFP_ATOMIC);
 	if (pw) {
 		pw->pm8001_ha = pm8001_ha;
 		pw->data = data;
@@ -4371,7 +4371,7 @@ int pm8001_chip_get_nvmd_req(struct pm8001_hba_info *pm8001_ha,
 	struct pm8001_ioctl_payload *ioctl_payload = payload;

 	nvmd_type = ioctl_payload->minor_function;
-	fw_control_context = kzalloc(sizeof(struct fw_control_ex), GFP_KERNEL);
+	fw_control_context = kzalloc_obj(struct fw_control_ex, GFP_KERNEL);
 	if (!fw_control_context)
 		return -ENOMEM;
 	fw_control_context->usrAddr = (u8 *)ioctl_payload->func_specific;
@@ -4464,7 +4464,7 @@ int pm8001_chip_set_nvmd_req(struct pm8001_hba_info *pm8001_ha,
 	struct pm8001_ioctl_payload *ioctl_payload = payload;

 	nvmd_type = ioctl_payload->minor_function;
-	fw_control_context = kzalloc(sizeof(struct fw_control_ex), GFP_KERNEL);
+	fw_control_context = kzalloc_obj(struct fw_control_ex, GFP_KERNEL);
 	if (!fw_control_context)
 		return -ENOMEM;

@@ -4579,7 +4579,7 @@ pm8001_chip_fw_flash_update_req(struct pm8001_hba_info *pm8001_ha,
 	dma_addr_t phys_addr = pm8001_ha->memoryMap.region[FW_FLASH].phys_addr;
 	struct pm8001_ioctl_payload *ioctl_payload = payload;

-	fw_control_context = kzalloc(sizeof(struct fw_control_ex), GFP_KERNEL);
+	fw_control_context = kzalloc_obj(struct fw_control_ex, GFP_KERNEL);
 	if (!fw_control_context)
 		return -ENOMEM;
 	fw_control = (struct fw_control_info *)&ioctl_payload->func_specific;
diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
index 9acca83d6958..631b7fa47fce 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -622,7 +622,7 @@ static int pm8001_prep_sas_ha_init(struct Scsi_Host *shost,

 	sha->sas_phy = arr_phy;
 	sha->sas_port = arr_port;
-	sha->lldd_ha = kzalloc(sizeof(struct pm8001_hba_info), GFP_KERNEL);
+	sha->lldd_ha = kzalloc_obj(struct pm8001_hba_info, GFP_KERNEL);
 	if (!sha->lldd_ha)
 		goto exit_free1;

@@ -1148,7 +1148,7 @@ static int pm8001_pci_probe(struct pci_dev *pdev,
 		goto err_out_regions;
 	}
 	chip = &pm8001_chips[ent->driver_data];
-	sha = kzalloc(sizeof(struct sas_ha_struct), GFP_KERNEL);
+	sha = kzalloc_obj(struct sas_ha_struct, GFP_KERNEL);
 	if (!sha) {
 		rc = -ENOMEM;
 		goto err_out_free_host;
@@ -1264,7 +1264,7 @@ static int pm8001_init_ccb_tag(struct pm8001_hba_info *pm8001_ha)
 	/* Memory region for ccb_info*/
 	pm8001_ha->ccb_count = ccb_count;
 	pm8001_ha->ccb_info =
-		kcalloc(ccb_count, sizeof(struct pm8001_ccb_info), GFP_KERNEL);
+		kzalloc_objs(struct pm8001_ccb_info, ccb_count, GFP_KERNEL);
 	if (!pm8001_ha->ccb_info) {
 		pm8001_dbg(pm8001_ha, FAIL,
 			   "Unable to allocate memory for ccb\n");
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 31960b72c1e9..77ded22a26c7 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -1563,7 +1563,7 @@ void pm80xx_fatal_error_uevent_emit(struct pm8001_hba_info *pm8001_ha,

 	pm8001_dbg(pm8001_ha, FAIL, "emitting fatal error uevent");

-	env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL);
+	env = kzalloc_obj(struct kobj_uevent_env, GFP_KERNEL);
 	if (!env)
 		return;

diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index cf163e63054b..ff31e12aaba0 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -3468,7 +3468,7 @@ static long pmcraid_chr_ioctl(
 	void __user *argp = (void __user *)arg;
 	int retval = -ENOTTY;

-	hdr = kmalloc(sizeof(struct pmcraid_ioctl_header), GFP_KERNEL);
+	hdr = kmalloc_obj(struct pmcraid_ioctl_header, GFP_KERNEL);

 	if (!hdr) {
 		pmcraid_err("failed to allocate memory for ioctl header\n");
@@ -4385,9 +4385,8 @@ static int pmcraid_allocate_config_buffers(struct pmcraid_instance *pinstance)
 	int i;

 	pinstance->res_entries =
-			kcalloc(PMCRAID_MAX_RESOURCES,
-				sizeof(struct pmcraid_resource_entry),
-				GFP_KERNEL);
+			kzalloc_objs(struct pmcraid_resource_entry,
+				     PMCRAID_MAX_RESOURCES, GFP_KERNEL);

 	if (NULL == pinstance->res_entries) {
 		pmcraid_err("failed to allocate memory for resource table\n");
diff --git a/drivers/scsi/ppa.c b/drivers/scsi/ppa.c
index ddcef40789e5..7c8923368edd 100644
--- a/drivers/scsi/ppa.c
+++ b/drivers/scsi/ppa.c
@@ -1042,7 +1042,7 @@ static int __ppa_attach(struct parport *pb)
 	int err = -ENOMEM;
 	struct pardev_cb ppa_cb;

-	dev = kzalloc(sizeof(ppa_struct), GFP_KERNEL);
+	dev = kzalloc_obj(ppa_struct, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	dev->base = -1;
diff --git a/drivers/scsi/qedf/qedf_debugfs.c b/drivers/scsi/qedf/qedf_debugfs.c
index 96174353e389..9b2ed9cb6245 100644
--- a/drivers/scsi/qedf/qedf_debugfs.c
+++ b/drivers/scsi/qedf/qedf_debugfs.c
@@ -422,7 +422,7 @@ qedf_offload_stats_show(struct seq_file *s, void *unused)
 	struct qedf_ctx *qedf = s->private;
 	struct qed_fcoe_stats *fw_fcoe_stats;

-	fw_fcoe_stats = kmalloc(sizeof(struct qed_fcoe_stats), GFP_KERNEL);
+	fw_fcoe_stats = kmalloc_obj(struct qed_fcoe_stats, GFP_KERNEL);
 	if (!fw_fcoe_stats) {
 		QEDF_ERR(&(qedf->dbg_ctx), "Could not allocate memory for "
 		    "fw_fcoe_stats.\n");
diff --git a/drivers/scsi/qedf/qedf_els.c b/drivers/scsi/qedf/qedf_els.c
index 1ff5bc314fc0..12841516653d 100644
--- a/drivers/scsi/qedf/qedf_els.c
+++ b/drivers/scsi/qedf/qedf_els.c
@@ -297,7 +297,7 @@ int qedf_send_rrq(struct qedf_ioreq *aborted_io_req)
 		   aborted_io_req->xid);
 	memset(&rrq, 0, sizeof(rrq));

-	cb_arg = kzalloc(sizeof(struct qedf_els_cb_arg), GFP_NOIO);
+	cb_arg = kzalloc_obj(struct qedf_els_cb_arg, GFP_NOIO);
 	if (!cb_arg) {
 		QEDF_ERR(&(qedf->dbg_ctx), "Unable to allocate cb_arg for "
 			  "RRQ\n");
@@ -510,7 +510,7 @@ int qedf_send_adisc(struct qedf_rport *fcport, struct fc_frame *fp)
 	qedf = fcport->qedf;
 	fh = fc_frame_header_get(fp);

-	cb_arg = kzalloc(sizeof(struct qedf_els_cb_arg), GFP_NOIO);
+	cb_arg = kzalloc_obj(struct qedf_els_cb_arg, GFP_NOIO);
 	if (!cb_arg) {
 		QEDF_ERR(&(qedf->dbg_ctx), "Unable to allocate cb_arg for "
 			  "ADISC\n");
@@ -659,7 +659,7 @@ static int qedf_send_srr(struct qedf_ioreq *orig_io_req, u32 offset, u8 r_ctl)
 		   "orig_xid=0x%x\n", orig_io_req, orig_io_req->xid);
 	memset(&srr, 0, sizeof(srr));

-	cb_arg = kzalloc(sizeof(struct qedf_els_cb_arg), GFP_NOIO);
+	cb_arg = kzalloc_obj(struct qedf_els_cb_arg, GFP_NOIO);
 	if (!cb_arg) {
 		QEDF_ERR(&(qedf->dbg_ctx), "Unable to allocate cb_arg for "
 			  "SRR\n");
@@ -708,7 +708,7 @@ static void qedf_initiate_seq_cleanup(struct qedf_ioreq *orig_io_req,
 	    "Doing sequence cleanup for xid=0x%x offset=%u.\n",
 	    orig_io_req->xid, offset);

-	cb_arg = kzalloc(sizeof(struct qedf_els_cb_arg), GFP_NOIO);
+	cb_arg = kzalloc_obj(struct qedf_els_cb_arg, GFP_NOIO);
 	if (!cb_arg) {
 		QEDF_ERR(&(fcport->qedf->dbg_ctx), "Unable to allocate cb_arg "
 			  "for sequence cleanup\n");
@@ -1033,7 +1033,7 @@ int qedf_send_rec(struct qedf_ioreq *orig_io_req)

 	memset(&rec, 0, sizeof(rec));

-	cb_arg = kzalloc(sizeof(struct qedf_els_cb_arg), GFP_NOIO);
+	cb_arg = kzalloc_obj(struct qedf_els_cb_arg, GFP_NOIO);
 	if (!cb_arg) {
 		QEDF_ERR(&(qedf->dbg_ctx), "Unable to allocate cb_arg for "
 			  "REC\n");
diff --git a/drivers/scsi/qedf/qedf_io.c b/drivers/scsi/qedf/qedf_io.c
index d12c47be016e..73a0ce7e5180 100644
--- a/drivers/scsi/qedf/qedf_io.c
+++ b/drivers/scsi/qedf/qedf_io.c
@@ -230,8 +230,8 @@ struct qedf_cmd_mgr *qedf_cmd_mgr_alloc(struct qedf_ctx *qedf)
 		}

 		/* Allocate task parameters to pass to f/w init funcions */
-		io_req->task_params = kzalloc(sizeof(*io_req->task_params),
-					      GFP_KERNEL);
+		io_req->task_params = kzalloc_obj(*io_req->task_params,
+						  GFP_KERNEL);
 		if (!io_req->task_params) {
 			QEDF_ERR(&(qedf->dbg_ctx),
 				 "Failed to allocate task_params for xid=0x%x\n",
@@ -243,8 +243,8 @@ struct qedf_cmd_mgr *qedf_cmd_mgr_alloc(struct qedf_ctx *qedf)
 		 * Allocate scatter/gather list info to pass to f/w init
 		 * functions.
 		 */
-		io_req->sgl_task_params = kzalloc(
-		    sizeof(struct scsi_sgl_task_params), GFP_KERNEL);
+		io_req->sgl_task_params = kzalloc_obj(struct scsi_sgl_task_params,
+						      GFP_KERNEL);
 		if (!io_req->sgl_task_params) {
 			QEDF_ERR(&(qedf->dbg_ctx),
 				 "Failed to allocate sgl_task_params for xid=0x%x\n",
@@ -254,8 +254,7 @@ struct qedf_cmd_mgr *qedf_cmd_mgr_alloc(struct qedf_ctx *qedf)
 	}

 	/* Allocate pool of io_bdts - one for each qedf_ioreq */
-	cmgr->io_bdt_pool = kmalloc_array(num_ios, sizeof(struct io_bdt *),
-	    GFP_KERNEL);
+	cmgr->io_bdt_pool = kmalloc_objs(struct io_bdt *, num_ios, GFP_KERNEL);

 	if (!cmgr->io_bdt_pool) {
 		QEDF_WARN(&(qedf->dbg_ctx), "Failed to alloc io_bdt_pool.\n");
@@ -263,8 +262,7 @@ struct qedf_cmd_mgr *qedf_cmd_mgr_alloc(struct qedf_ctx *qedf)
 	}

 	for (i = 0; i < num_ios; i++) {
-		cmgr->io_bdt_pool[i] = kmalloc(sizeof(struct io_bdt),
-		    GFP_KERNEL);
+		cmgr->io_bdt_pool[i] = kmalloc_obj(struct io_bdt, GFP_KERNEL);
 		if (!cmgr->io_bdt_pool[i]) {
 			QEDF_WARN(&(qedf->dbg_ctx),
 				  "Failed to alloc io_bdt_pool[%d].\n", i);
diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
index 7792e00800ae..c712fdf86911 100644
--- a/drivers/scsi/qedf/qedf_main.c
+++ b/drivers/scsi/qedf/qedf_main.c
@@ -2082,7 +2082,7 @@ static struct fc_host_statistics *qedf_fc_get_host_stats(struct Scsi_Host
 	if (lport->vport)
 		goto out;

-	fw_fcoe_stats = kmalloc(sizeof(struct qed_fcoe_stats), GFP_KERNEL);
+	fw_fcoe_stats = kmalloc_obj(struct qed_fcoe_stats, GFP_KERNEL);
 	if (!fw_fcoe_stats) {
 		QEDF_ERR(&(qedf->dbg_ctx), "Could not allocate memory for "
 		    "fw_fcoe_stats.\n");
@@ -2674,7 +2674,7 @@ static int qedf_ll2_rx(void *cookie, struct sk_buff *skb,
 		return 0;
 	}

-	skb_work = kzalloc(sizeof(struct qedf_skb_work), GFP_ATOMIC);
+	skb_work = kzalloc_obj(struct qedf_skb_work, GFP_ATOMIC);
 	if (!skb_work) {
 		QEDF_WARN(&(qedf->dbg_ctx), "Could not allocate skb_work so "
 			   "dropping frame.\n");
@@ -2778,8 +2778,7 @@ static int qedf_prepare_sb(struct qedf_ctx *qedf)
 	int ret;

 	qedf->fp_array =
-	    kcalloc(qedf->num_queues, sizeof(struct qedf_fastpath),
-		GFP_KERNEL);
+	    kzalloc_objs(struct qedf_fastpath, qedf->num_queues, GFP_KERNEL);

 	if (!qedf->fp_array) {
 		QEDF_ERR(&(qedf->dbg_ctx), "fastpath array allocation "
@@ -2790,7 +2789,7 @@ static int qedf_prepare_sb(struct qedf_ctx *qedf)
 	for (id = 0; id < qedf->num_queues; id++) {
 		fp = &(qedf->fp_array[id]);
 		fp->sb_id = QEDF_SB_ID_NULL;
-		fp->sb_info = kcalloc(1, sizeof(*fp->sb_info), GFP_KERNEL);
+		fp->sb_info = kzalloc_objs(*fp->sb_info, 1, GFP_KERNEL);
 		if (!fp->sb_info) {
 			QEDF_ERR(&(qedf->dbg_ctx), "SB info struct "
 				  "allocation failed.\n");
@@ -3083,8 +3082,8 @@ static int qedf_alloc_global_queues(struct qedf_ctx *qedf)

 	/* Allocate a CQ and an associated PBL for each MSI-X vector */
 	for (i = 0; i < qedf->num_queues; i++) {
-		qedf->global_queues[i] = kzalloc(sizeof(struct global_queue),
-		    GFP_KERNEL);
+		qedf->global_queues[i] = kzalloc_obj(struct global_queue,
+						     GFP_KERNEL);
 		if (!qedf->global_queues[i]) {
 			QEDF_WARN(&(qedf->dbg_ctx), "Unable to allocate "
 				   "global queue %d.\n", i);
diff --git a/drivers/scsi/qedi/qedi_fw.c b/drivers/scsi/qedi/qedi_fw.c
index 6901738324da..854efa4f61d8 100644
--- a/drivers/scsi/qedi/qedi_fw.c
+++ b/drivers/scsi/qedi/qedi_fw.c
@@ -190,7 +190,7 @@ static void qedi_process_tmf_resp(struct qedi_ctx *qedi,
 	cqe_tmp_response = &cqe->cqe_common.iscsi_hdr.tmf_response;

 	qedi_cmd = task->dd_data;
-	qedi_cmd->tmf_resp_buf = kzalloc(sizeof(*resp_hdr_ptr), GFP_ATOMIC);
+	qedi_cmd->tmf_resp_buf = kzalloc_obj(*resp_hdr_ptr, GFP_ATOMIC);
 	if (!qedi_cmd->tmf_resp_buf) {
 		QEDI_ERR(&qedi->dbg_ctx,
 			 "Failed to allocate resp buf, cid=0x%x\n",
@@ -1358,7 +1358,7 @@ static void qedi_abort_work(struct work_struct *work)
 		goto clear_cleanup;
 	}

-	list_work = kzalloc(sizeof(*list_work), GFP_NOIO);
+	list_work = kzalloc_obj(*list_work, GFP_NOIO);
 	if (!list_work) {
 		QEDI_ERR(&qedi->dbg_ctx, "Memory allocation failed\n");
 		goto clear_cleanup;
diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
index 6ed8ef97642c..65fdbc07de43 100644
--- a/drivers/scsi/qedi/qedi_iscsi.c
+++ b/drivers/scsi/qedi/qedi_iscsi.c
@@ -440,7 +440,7 @@ static int qedi_iscsi_update_conn(struct qedi_ctx *qedi,

 	qedi_ep = qedi_conn->ep;

-	conn_info = kzalloc(sizeof(*conn_info), GFP_KERNEL);
+	conn_info = kzalloc_obj(*conn_info, GFP_KERNEL);
 	if (!conn_info) {
 		QEDI_ERR(&qedi->dbg_ctx, "memory alloc failed\n");
 		return -ENOMEM;
@@ -505,7 +505,7 @@ static int qedi_iscsi_offload_conn(struct qedi_endpoint *qedi_ep)
 	int rval;
 	int i;

-	conn_info = kzalloc(sizeof(*conn_info), GFP_KERNEL);
+	conn_info = kzalloc_obj(*conn_info, GFP_KERNEL);
 	if (!conn_info) {
 		QEDI_ERR(&qedi->dbg_ctx,
 			 "Failed to allocate memory ep=%p\n", qedi_ep);
diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
index 56685ee22fdf..14ec6cb44316 100644
--- a/drivers/scsi/qedi/qedi_main.c
+++ b/drivers/scsi/qedi/qedi_main.c
@@ -276,7 +276,7 @@ static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)
 		}
 	}

-	udev = kzalloc(sizeof(*udev), GFP_KERNEL);
+	udev = kzalloc_obj(*udev, GFP_KERNEL);
 	if (!udev)
 		goto err_udev;

@@ -410,16 +410,16 @@ static int qedi_alloc_fp(struct qedi_ctx *qedi)
 {
 	int ret = 0;

-	qedi->fp_array = kcalloc(MIN_NUM_CPUS_MSIX(qedi),
-				 sizeof(struct qedi_fastpath), GFP_KERNEL);
+	qedi->fp_array = kzalloc_objs(struct qedi_fastpath,
+				      MIN_NUM_CPUS_MSIX(qedi), GFP_KERNEL);
 	if (!qedi->fp_array) {
 		QEDI_ERR(&qedi->dbg_ctx,
 			 "fastpath fp array allocation failed.\n");
 		return -ENOMEM;
 	}

-	qedi->sb_array = kcalloc(MIN_NUM_CPUS_MSIX(qedi),
-				 sizeof(struct qed_sb_info), GFP_KERNEL);
+	qedi->sb_array = kzalloc_objs(struct qed_sb_info,
+				      MIN_NUM_CPUS_MSIX(qedi), GFP_KERNEL);
 	if (!qedi->sb_array) {
 		QEDI_ERR(&qedi->dbg_ctx,
 			 "fastpath sb array allocation failed.\n");
@@ -498,9 +498,9 @@ static int qedi_setup_cid_que(struct qedi_ctx *qedi)
 	if (!qedi->cid_que.cid_que_base)
 		return -ENOMEM;

-	qedi->cid_que.conn_cid_tbl = kmalloc_array(qedi->max_active_conns,
-						   sizeof(struct qedi_conn *),
-						   GFP_KERNEL);
+	qedi->cid_que.conn_cid_tbl = kmalloc_objs(struct qedi_conn *,
+						  qedi->max_active_conns,
+						  GFP_KERNEL);
 	if (!qedi->cid_que.conn_cid_tbl) {
 		kfree(qedi->cid_que.cid_que_base);
 		qedi->cid_que.cid_que_base = NULL;
@@ -706,7 +706,7 @@ static int qedi_ll2_rx(void *cookie, struct sk_buff *skb, u32 arg1, u32 arg2)
 		  "Allowed frame ethertype [0x%x] len [0x%x].\n",
 		  eh->h_proto, skb->len);

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work) {
 		QEDI_WARN(&qedi->dbg_ctx,
 			  "Could not allocate work so dropping frame.\n");
@@ -956,7 +956,7 @@ static int qedi_find_boot_info(struct qedi_ctx *qedi,
 	pri_ctrl_flags = !!(block->target[0].ctrl_flags &
 					NVM_ISCSI_CFG_TARGET_ENABLED);
 	if (pri_ctrl_flags) {
-		pri_tgt = kzalloc(sizeof(*pri_tgt), GFP_KERNEL);
+		pri_tgt = kzalloc_obj(*pri_tgt, GFP_KERNEL);
 		if (!pri_tgt)
 			return -1;
 		qedi_get_boot_tgt_info(block, pri_tgt, 0);
@@ -965,7 +965,7 @@ static int qedi_find_boot_info(struct qedi_ctx *qedi,
 	sec_ctrl_flags = !!(block->target[1].ctrl_flags &
 					NVM_ISCSI_CFG_TARGET_ENABLED);
 	if (sec_ctrl_flags) {
-		sec_tgt = kzalloc(sizeof(*sec_tgt), GFP_KERNEL);
+		sec_tgt = kzalloc_obj(*sec_tgt, GFP_KERNEL);
 		if (!sec_tgt) {
 			ret = -1;
 			goto free_tgt;
@@ -1066,7 +1066,7 @@ static void qedi_get_protocol_tlv_data(void *dev, void *data)
 	struct qedi_ctx *qedi = dev;
 	int rval = 0;

-	fw_iscsi_stats = kmalloc(sizeof(*fw_iscsi_stats), GFP_KERNEL);
+	fw_iscsi_stats = kmalloc_obj(*fw_iscsi_stats, GFP_KERNEL);
 	if (!fw_iscsi_stats) {
 		QEDI_ERR(&qedi->dbg_ctx,
 			 "Could not allocate memory for fw_iscsi_stats.\n");
@@ -1239,7 +1239,7 @@ static int qedi_queue_cqe(struct qedi_ctx *qedi, union iscsi_cqe *cqe,
 	case ISCSI_CQE_TYPE_UNSOLICITED:
 	case ISCSI_CQE_TYPE_DUMMY:
 	case ISCSI_CQE_TYPE_TASK_CLEANUP:
-		qedi_work = kzalloc(sizeof(*qedi_work), GFP_ATOMIC);
+		qedi_work = kzalloc_obj(*qedi_work, GFP_ATOMIC);
 		if (!qedi_work) {
 			rc = -1;
 			break;
@@ -1668,8 +1668,8 @@ static int qedi_alloc_global_queues(struct qedi_ctx *qedi)
 	 */
 	for (i = 0; i < qedi->num_queues; i++) {
 		qedi->global_queues[i] =
-					kzalloc(sizeof(*qedi->global_queues[0]),
-						GFP_KERNEL);
+					kzalloc_obj(*qedi->global_queues[0],
+						    GFP_KERNEL);
 		if (!qedi->global_queues[i]) {
 			QEDI_ERR(&qedi->dbg_ctx,
 				 "Unable to allocation global queue %d.\n", i);
@@ -1895,8 +1895,8 @@ struct qedi_cmd *qedi_get_cmd_from_tid(struct qedi_ctx *qedi, u32 tid)

 static int qedi_alloc_itt(struct qedi_ctx *qedi)
 {
-	qedi->itt_map = kcalloc(MAX_ISCSI_TASK_ENTRIES,
-				sizeof(struct qedi_itt_map), GFP_KERNEL);
+	qedi->itt_map = kzalloc_objs(struct qedi_itt_map,
+				     MAX_ISCSI_TASK_ENTRIES, GFP_KERNEL);
 	if (!qedi->itt_map) {
 		QEDI_ERR(&qedi->dbg_ctx,
 			 "Unable to allocate itt map array memory\n");
diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
index 2c44a379cb23..924b07f56c80 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.c
+++ b/drivers/scsi/qla2xxx/qla_bsg.c
@@ -2395,7 +2395,7 @@ qla2x00_do_dport_diagnostics(struct bsg_job *bsg_job)
 	    !IS_QLA28XX(vha->hw))
 		return -EPERM;

-	dd = kmalloc(sizeof(*dd), GFP_KERNEL);
+	dd = kmalloc_obj(*dd, GFP_KERNEL);
 	if (!dd) {
 		ql_log(ql_log_warn, vha, 0x70db,
 		    "Failed to allocate memory for dport.\n");
@@ -2441,7 +2441,7 @@ qla2x00_do_dport_diagnostics_v2(struct bsg_job *bsg_job)
 	if (!IS_DPORT_CAPABLE(vha->hw))
 		return -EPERM;

-	dd = kzalloc(sizeof(*dd), GFP_KERNEL);
+	dd = kzalloc_obj(*dd, GFP_KERNEL);
 	if (!dd)
 		return -ENOMEM;

@@ -2598,7 +2598,7 @@ qla2x00_manage_host_stats(struct bsg_job *bsg_job)
 		return -EIO;
 	}

-	req_data = kzalloc(sizeof(*req_data), GFP_KERNEL);
+	req_data = kzalloc_obj(*req_data, GFP_KERNEL);
 	if (!req_data) {
 		ql_log(ql_log_warn, vha, 0x0000, "req_data memory allocation failure.\n");
 		return -ENOMEM;
@@ -2669,7 +2669,7 @@ qla2x00_get_host_stats(struct bsg_job *bsg_job)
 		return -EIO;
 	}

-	req_data = kzalloc(sizeof(*req_data), GFP_KERNEL);
+	req_data = kzalloc_obj(*req_data, GFP_KERNEL);
 	if (!req_data) {
 		ql_log(ql_log_warn, vha, 0x0000, "req_data memory allocation failure.\n");
 		return -ENOMEM;
@@ -2776,7 +2776,7 @@ qla2x00_get_tgt_stats(struct bsg_job *bsg_job)
 		return -EIO;
 	}

-	req_data = kzalloc(sizeof(*req_data), GFP_KERNEL);
+	req_data = kzalloc_obj(*req_data, GFP_KERNEL);
 	if (!req_data) {
 		ql_log(ql_log_warn, vha, 0x0000, "req_data memory allocation failure.\n");
 		return -ENOMEM;
@@ -2859,7 +2859,7 @@ qla2x00_manage_host_port(struct bsg_job *bsg_job)
 		return -EIO;
 	}

-	req_data = kzalloc(sizeof(*req_data), GFP_KERNEL);
+	req_data = kzalloc_obj(*req_data, GFP_KERNEL);
 	if (!req_data) {
 		ql_log(ql_log_warn, vha, 0x0000, "req_data memory allocation failure.\n");
 		return -ENOMEM;
diff --git a/drivers/scsi/qla2xxx/qla_edif.c b/drivers/scsi/qla2xxx/qla_edif.c
index ccd4485087a1..a2db229d3af4 100644
--- a/drivers/scsi/qla2xxx/qla_edif.c
+++ b/drivers/scsi/qla2xxx/qla_edif.c
@@ -174,7 +174,7 @@ static int qla_edif_list_add_sa_update_index(fc_port_t *fcport,
 	 * when update is called for the first two sa_indexes
 	 * followed by a delete of the first sa_index
 	 */
-	entry = kzalloc((sizeof(struct edif_list_entry)), GFP_ATOMIC);
+	entry = kzalloc_obj(struct edif_list_entry, GFP_ATOMIC);
 	if (!entry)
 		return -ENOMEM;

@@ -1393,7 +1393,7 @@ qla_edif_add_sa_ctl(fc_port_t *fcport, struct qla_sa_update_frame *sa_frame,
 	int	index = sa_frame->fast_sa_index;
 	unsigned long flags = 0;

-	sa_ctl = kzalloc(sizeof(*sa_ctl), GFP_KERNEL);
+	sa_ctl = kzalloc_obj(*sa_ctl, GFP_KERNEL);
 	if (!sa_ctl) {
 		/* couldn't get space */
 		ql_dbg(ql_dbg_edif, fcport->vha, 0x9100,
@@ -2187,7 +2187,7 @@ qla_edb_node_alloc(scsi_qla_host_t *vha, uint32_t ntype)
 {
 	struct edb_node	*node;

-	node = kzalloc(sizeof(*node), GFP_ATOMIC);
+	node = kzalloc_obj(*node, GFP_ATOMIC);
 	if (!node) {
 		/* couldn't get space */
 		ql_dbg(ql_dbg_edif, vha, 0x9100,
@@ -3279,7 +3279,7 @@ static uint16_t qla_edif_sadb_get_sa_index(fc_port_t *fcport,
 		}

 		/* if there is no entry for this nport, add one */
-		entry = kzalloc((sizeof(struct edif_sa_index_entry)), GFP_ATOMIC);
+		entry = kzalloc_obj(struct edif_sa_index_entry, GFP_ATOMIC);
 		if (!entry)
 			return INVALID_EDIF_SA_INDEX;

@@ -3381,7 +3381,7 @@ void qla_edif_sadb_release(struct qla_hw_data *ha)
 int qla_edif_sadb_build_free_pool(struct qla_hw_data *ha)
 {
 	ha->edif_tx_sa_id_map =
-	    kcalloc(BITS_TO_LONGS(EDIF_NUM_SA_INDEX), sizeof(long), GFP_KERNEL);
+	    kzalloc_objs(long, BITS_TO_LONGS(EDIF_NUM_SA_INDEX), GFP_KERNEL);

 	if (!ha->edif_tx_sa_id_map) {
 		ql_log_pci(ql_log_fatal, ha->pdev, 0x0009,
@@ -3390,7 +3390,7 @@ int qla_edif_sadb_build_free_pool(struct qla_hw_data *ha)
 	}

 	ha->edif_rx_sa_id_map =
-	    kcalloc(BITS_TO_LONGS(EDIF_NUM_SA_INDEX), sizeof(long), GFP_KERNEL);
+	    kzalloc_objs(long, BITS_TO_LONGS(EDIF_NUM_SA_INDEX), GFP_KERNEL);
 	if (!ha->edif_rx_sa_id_map) {
 		kfree(ha->edif_tx_sa_id_map);
 		ha->edif_tx_sa_id_map = NULL;
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 689f909943b4..808acf7daf4d 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -4033,9 +4033,8 @@ qla2x00_alloc_outstanding_cmds(struct qla_hw_data *ha, struct req_que *req)
 			req->num_outstanding_cmds = ha->cur_fw_iocb_count;
 	}

-	req->outstanding_cmds = kcalloc(req->num_outstanding_cmds,
-					sizeof(srb_t *),
-					GFP_KERNEL);
+	req->outstanding_cmds = kzalloc_objs(srb_t *, req->num_outstanding_cmds,
+					     GFP_KERNEL);

 	if (!req->outstanding_cmds) {
 		/*
@@ -4043,9 +4042,9 @@ qla2x00_alloc_outstanding_cmds(struct qla_hw_data *ha, struct req_que *req)
 		 * initialization.
 		 */
 		req->num_outstanding_cmds = MIN_OUTSTANDING_COMMANDS;
-		req->outstanding_cmds = kcalloc(req->num_outstanding_cmds,
-						sizeof(srb_t *),
-						GFP_KERNEL);
+		req->outstanding_cmds = kzalloc_objs(srb_t *,
+						     req->num_outstanding_cmds,
+						     GFP_KERNEL);

 		if (!req->outstanding_cmds) {
 			ql_log(ql_log_fatal, NULL, 0x0126,
@@ -5574,7 +5573,7 @@ qla2x00_alloc_fcport(scsi_qla_host_t *vha, gfp_t flags)
 {
 	fc_port_t *fcport;

-	fcport = kzalloc(sizeof(fc_port_t), flags);
+	fcport = kzalloc_obj(fc_port_t, flags);
 	if (!fcport)
 		return NULL;

@@ -6494,8 +6493,8 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha)

 	/* Try GID_PT to get device list, else GAN. */
 	if (!ha->swl)
-		ha->swl = kcalloc(ha->max_fibre_devices, sizeof(sw_info_t),
-		    GFP_KERNEL);
+		ha->swl = kzalloc_objs(sw_info_t, ha->max_fibre_devices,
+				       GFP_KERNEL);
 	swl = ha->swl;
 	if (!swl) {
 		/*EMPTY*/
@@ -9231,7 +9230,7 @@ qla84xx_get_chip(struct scsi_qla_host *vha)
 		}
 	}

-	cs84xx = kzalloc(sizeof(*cs84xx), GFP_KERNEL);
+	cs84xx = kzalloc_obj(*cs84xx, GFP_KERNEL);
 	if (!cs84xx)
 		goto done;

@@ -9885,7 +9884,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos,
 	}

 	if (ql2xmqsupport || ql2xnvmeenable) {
-		qpair = kzalloc(sizeof(struct qla_qpair), GFP_KERNEL);
+		qpair = kzalloc_obj(struct qla_qpair, GFP_KERNEL);
 		if (qpair == NULL) {
 			ql_log(ql_log_warn, vha, 0x0182,
 			    "Failed to allocate memory for queue pair.\n");
diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h
index ef4b3cc1cd77..bb34a3a612cf 100644
--- a/drivers/scsi/qla2xxx/qla_inline.h
+++ b/drivers/scsi/qla2xxx/qla_inline.h
@@ -621,8 +621,8 @@ static inline int qla_mapq_alloc_qp_cpu_map(struct qla_hw_data *ha)
 	scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);

 	if (!ha->qp_cpu_map) {
-		ha->qp_cpu_map = kcalloc(NR_CPUS, sizeof(struct qla_qpair *),
-					 GFP_KERNEL);
+		ha->qp_cpu_map = kzalloc_objs(struct qla_qpair *, NR_CPUS,
+					      GFP_KERNEL);
 		if (!ha->qp_cpu_map) {
 			ql_log(ql_log_fatal, vha, 0x0180,
 			       "Unable to allocate memory for qp_cpu_map ptrs.\n");
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index 3224044f1775..9038f6723444 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -882,7 +882,7 @@ qla24xx_walk_and_build_sglist_no_difb(struct qla_hw_data *ha, srb_t *sp,
 			used_dsds -= avail_dsds;

 			/* allocate tracking DS */
-			dsd_ptr = kzalloc(sizeof(struct dsd_dma), GFP_ATOMIC);
+			dsd_ptr = kzalloc_obj(struct dsd_dma, GFP_ATOMIC);
 			if (!dsd_ptr)
 				return 1;

@@ -979,7 +979,7 @@ qla24xx_walk_and_build_sglist(struct qla_hw_data *ha, srb_t *sp,
 			used_dsds -= avail_dsds;

 			/* allocate tracking DS */
-			dsd_ptr = kzalloc(sizeof(struct dsd_dma), GFP_ATOMIC);
+			dsd_ptr = kzalloc_obj(struct dsd_dma, GFP_ATOMIC);
 			if (!dsd_ptr)
 				return 1;

@@ -1123,8 +1123,8 @@ qla24xx_walk_and_build_prot_sglist(struct qla_hw_data *ha, srb_t *sp,
 					 * Allocate list item to store
 					 * the DMA buffers
 					 */
-					dsd_ptr = kzalloc(sizeof(*dsd_ptr),
-					    GFP_ATOMIC);
+					dsd_ptr = kzalloc_obj(*dsd_ptr,
+							      GFP_ATOMIC);
 					if (!dsd_ptr) {
 						ql_dbg(ql_dbg_tgt, vha, 0xe024,
 						    "%s: failed alloc dsd_ptr\n",
@@ -1209,7 +1209,7 @@ qla24xx_walk_and_build_prot_sglist(struct qla_hw_data *ha, srb_t *sp,
 				used_dsds -= avail_dsds;

 				/* allocate tracking DS */
-				dsd_ptr = kzalloc(sizeof(*dsd_ptr), GFP_ATOMIC);
+				dsd_ptr = kzalloc_obj(*dsd_ptr, GFP_ATOMIC);
 				if (!dsd_ptr) {
 					ql_dbg(ql_dbg_tgt, vha, 0xe026,
 					    "%s: failed alloc dsd_ptr\n",
@@ -1275,7 +1275,7 @@ qla24xx_walk_and_build_prot_sglist(struct qla_hw_data *ha, srb_t *sp,
 				used_dsds -= avail_dsds;

 				/* allocate tracking DS */
-				dsd_ptr = kzalloc(sizeof(*dsd_ptr), GFP_ATOMIC);
+				dsd_ptr = kzalloc_obj(*dsd_ptr, GFP_ATOMIC);
 				if (!dsd_ptr) {
 					ql_dbg(ql_dbg_tgt + ql_dbg_verbose,
 					    vha, 0xe027,
@@ -3450,7 +3450,7 @@ qla82xx_start_scsi(srb_t *sp)
 			more_dsd_lists -= qpair->dsd_avail;

 		for (i = 0; i < more_dsd_lists; i++) {
-			dsd_ptr = kzalloc(sizeof(struct dsd_dma), GFP_ATOMIC);
+			dsd_ptr = kzalloc_obj(struct dsd_dma, GFP_ATOMIC);
 			if (!dsd_ptr) {
 				ql_log(ql_log_fatal, vha, 0x300e,
 				    "Failed to allocate memory for dsd_dma "
@@ -4315,7 +4315,7 @@ qla_start_scsi_type6(srb_t *sp)
 		more_dsd_lists -= qpair->dsd_avail;

 	for (i = 0; i < more_dsd_lists; i++) {
-		dsd_ptr = kzalloc(sizeof(*dsd_ptr), GFP_ATOMIC);
+		dsd_ptr = kzalloc_obj(*dsd_ptr, GFP_ATOMIC);
 		if (!dsd_ptr) {
 			ql_log(ql_log_fatal, vha, 0x3029,
 			    "Failed to allocate memory for dsd_dma for cmd=%p.\n", cmd);
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 608d2f36e7b4..6117b516a23a 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -4562,9 +4562,8 @@ qla24xx_enable_msix(struct qla_hw_data *ha, struct rsp_que *rsp)
 		}
 	}
 	vha->irq_offset = desc.pre_vectors;
-	ha->msix_entries = kcalloc(ha->msix_count,
-				   sizeof(struct qla_msix_entry),
-				   GFP_KERNEL);
+	ha->msix_entries = kzalloc_objs(struct qla_msix_entry, ha->msix_count,
+					GFP_KERNEL);
 	if (!ha->msix_entries) {
 		ql_log(ql_log_fatal, vha, 0x00c8,
 		    "Failed to allocate memory for ha->msix_entries.\n");
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index 0abc47e72e0b..34928d981677 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -707,7 +707,7 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options,
 	device_reg_t *reg;
 	uint32_t cnt;

-	req = kzalloc(sizeof(struct req_que), GFP_KERNEL);
+	req = kzalloc_obj(struct req_que, GFP_KERNEL);
 	if (req == NULL) {
 		ql_log(ql_log_fatal, base_vha, 0x00d9,
 		    "Failed to allocate memory for request queue.\n");
@@ -834,7 +834,7 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options,
 	uint16_t que_id = 0;
 	device_reg_t *reg;

-	rsp = kzalloc(sizeof(struct rsp_que), GFP_KERNEL);
+	rsp = kzalloc_obj(struct rsp_que, GFP_KERNEL);
 	if (rsp == NULL) {
 		ql_log(ql_log_warn, base_vha, 0x0066,
 		    "Failed to allocate memory for response queue.\n");
@@ -1102,7 +1102,8 @@ int qla_create_buf_pool(struct scsi_qla_host *vha, struct qla_qpair *qp)
 		return -ENOMEM;
 	}
 	sz = qp->req->length * sizeof(dma_addr_t);
-	qp->buf_pool.dma_array = kcalloc(qp->req->length, sizeof(dma_addr_t), GFP_KERNEL);
+	qp->buf_pool.dma_array = kzalloc_objs(dma_addr_t, qp->req->length,
+					      GFP_KERNEL);
 	if (!qp->buf_pool.dma_array) {
 		ql_log(ql_log_warn, vha, 0x0186,
 		    "Failed to allocate dma_array(%d).\n", sz);
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index 42eb65a62f1f..2531e71c39dc 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -1286,7 +1286,7 @@ void qla2xxx_process_purls_iocb(void **pkt, struct rsp_que **rsp)
 		goto out;
 	}

-	uctx = kzalloc(sizeof(*uctx), GFP_ATOMIC);
+	uctx = kzalloc_obj(*uctx, GFP_ATOMIC);
 	if (!uctx) {
 		ql_log(ql_log_info, vha, 0x2126, "Failed allocate memory\n");
 		a.reason = FCNVME_RJT_RC_LOGIC;
diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c
index 0cd3db8ed4ef..ec47ef3f0783 100644
--- a/drivers/scsi/qla2xxx/qla_nx.c
+++ b/drivers/scsi/qla2xxx/qla_nx.c
@@ -1183,7 +1183,7 @@ qla82xx_pinit_from_rom(scsi_qla_host_t *vha)
 	ql_log(ql_log_info, vha, 0x0072,
 	    "%d CRB init values found in ROM.\n", n);

-	buf = kmalloc_array(n, sizeof(struct crb_addr_pair), GFP_KERNEL);
+	buf = kmalloc_objs(struct crb_addr_pair, n, GFP_KERNEL);
 	if (buf == NULL) {
 		ql_log(ql_log_fatal, vha, 0x010c,
 		    "Unable to allocate memory.\n");
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index a88b460641f2..89540254b784 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -438,23 +438,23 @@ static int qla2x00_alloc_queues(struct qla_hw_data *ha, struct req_que *req,
 {
 	scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);

-	ha->req_q_map = kcalloc(ha->max_req_queues, sizeof(struct req_que *),
-				GFP_KERNEL);
+	ha->req_q_map = kzalloc_objs(struct req_que *, ha->max_req_queues,
+				     GFP_KERNEL);
 	if (!ha->req_q_map) {
 		ql_log(ql_log_fatal, vha, 0x003b,
 		    "Unable to allocate memory for request queue ptrs.\n");
 		goto fail_req_map;
 	}

-	ha->rsp_q_map = kcalloc(ha->max_rsp_queues, sizeof(struct rsp_que *),
-				GFP_KERNEL);
+	ha->rsp_q_map = kzalloc_objs(struct rsp_que *, ha->max_rsp_queues,
+				     GFP_KERNEL);
 	if (!ha->rsp_q_map) {
 		ql_log(ql_log_fatal, vha, 0x003c,
 		    "Unable to allocate memory for response queue ptrs.\n");
 		goto fail_rsp_map;
 	}

-	ha->base_qpair = kzalloc(sizeof(struct qla_qpair), GFP_KERNEL);
+	ha->base_qpair = kzalloc_obj(struct qla_qpair, GFP_KERNEL);
 	if (ha->base_qpair == NULL) {
 		ql_log(ql_log_warn, vha, 0x00e0,
 		    "Failed to allocate base queue pair memory.\n");
@@ -464,8 +464,8 @@ static int qla2x00_alloc_queues(struct qla_hw_data *ha, struct req_que *req,
 	qla_init_base_qpair(vha, req, rsp);

 	if ((ql2xmqsupport || ql2xnvmeenable) && ha->max_qpairs) {
-		ha->queue_pair_map = kcalloc(ha->max_qpairs, sizeof(struct qla_qpair *),
-			GFP_KERNEL);
+		ha->queue_pair_map = kzalloc_objs(struct qla_qpair *,
+						  ha->max_qpairs, GFP_KERNEL);
 		if (!ha->queue_pair_map) {
 			ql_log(ql_log_fatal, vha, 0x0180,
 			    "Unable to allocate memory for queue pair ptrs.\n");
@@ -2960,7 +2960,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 		ql2xallocfwdump = 0;
 	}

-	ha = kzalloc(sizeof(struct qla_hw_data), GFP_KERNEL);
+	ha = kzalloc_obj(struct qla_hw_data, GFP_KERNEL);
 	if (!ha) {
 		ql_log_pci(ql_log_fatal, pdev, 0x0009,
 		    "Unable to allocate memory for ha.\n");
@@ -4151,7 +4151,8 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
 	int rc;

 	if (QLA_TGT_MODE_ENABLED() || EDIF_CAP(ha)) {
-		ha->vp_map = kcalloc(MAX_MULTI_ID_FABRIC, sizeof(struct qla_vp_map), GFP_KERNEL);
+		ha->vp_map = kzalloc_objs(struct qla_vp_map,
+					  MAX_MULTI_ID_FABRIC, GFP_KERNEL);
 		if (!ha->vp_map)
 			goto fail;
 	}
@@ -4247,7 +4248,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
 			ha->pool.good.count = 0;
 			ha->pool.unusable.count = 0;
 			for (i = 0; i < 128; i++) {
-				dsd = kzalloc(sizeof(*dsd), GFP_ATOMIC);
+				dsd = kzalloc_obj(*dsd, GFP_ATOMIC);
 				if (!dsd) {
 					ql_dbg_pci(ql_dbg_init, ha->pdev,
 					    0xe0ee, "%s: failed alloc dsd\n",
@@ -4335,7 +4336,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
 	}

 	/* Allocate memory for request ring */
-	*req = kzalloc(sizeof(struct req_que), GFP_KERNEL);
+	*req = kzalloc_obj(struct req_que, GFP_KERNEL);
 	if (!*req) {
 		ql_log_pci(ql_log_fatal, ha->pdev, 0x0028,
 		    "Failed to allocate memory for req.\n");
@@ -4351,7 +4352,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
 		goto fail_req_ring;
 	}
 	/* Allocate memory for response ring */
-	*rsp = kzalloc(sizeof(struct rsp_que), GFP_KERNEL);
+	*rsp = kzalloc_obj(struct rsp_que, GFP_KERNEL);
 	if (!*rsp) {
 		ql_log_pci(ql_log_fatal, ha->pdev, 0x002a,
 		    "Failed to allocate memory for rsp.\n");
@@ -4376,9 +4377,8 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
 	    (*rsp)->ring);
 	/* Allocate memory for NVRAM data for vports */
 	if (ha->nvram_npiv_size) {
-		ha->npiv_info = kcalloc(ha->nvram_npiv_size,
-					sizeof(struct qla_npiv_entry),
-					GFP_KERNEL);
+		ha->npiv_info = kzalloc_objs(struct qla_npiv_entry,
+					     ha->nvram_npiv_size, GFP_KERNEL);
 		if (!ha->npiv_info) {
 			ql_log_pci(ql_log_fatal, ha->pdev, 0x002d,
 			    "Failed to allocate memory for npiv_info.\n");
@@ -4422,9 +4422,8 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
 	INIT_LIST_HEAD(&ha->vp_list);

 	/* Allocate memory for our loop_id bitmap */
-	ha->loop_id_map = kcalloc(BITS_TO_LONGS(LOOPID_MAP_SIZE),
-				  sizeof(long),
-				  GFP_KERNEL);
+	ha->loop_id_map = kzalloc_objs(long, BITS_TO_LONGS(LOOPID_MAP_SIZE),
+				       GFP_KERNEL);
 	if (!ha->loop_id_map)
 		goto fail_loop_id_map;
 	else {
@@ -5136,7 +5135,7 @@ qla2x00_alloc_work(struct scsi_qla_host *vha, enum qla_work_type type)
 	if (qla_vha_mark_busy(vha))
 		return NULL;

-	e = kzalloc(sizeof(struct qla_work_evt), GFP_ATOMIC);
+	e = kzalloc_obj(struct qla_work_evt, GFP_ATOMIC);
 	if (!e) {
 		QLA_VHA_MARK_NOT_BUSY(vha);
 		return NULL;
@@ -6018,7 +6017,7 @@ qla25xx_rdp_rsp_reduce_size(struct scsi_qla_host *vha,

 	ql_dbg(ql_dbg_init, vha, 0x0181, "%s: s_id=%#x\n", __func__, sid);

-	pdb = kzalloc(sizeof(*pdb), GFP_KERNEL);
+	pdb = kzalloc_obj(*pdb, GFP_KERNEL);
 	if (!pdb) {
 		ql_dbg(ql_dbg_init, vha, 0x0181,
 		    "%s: Failed allocate pdb\n", __func__);
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index ef3a5fac2b48..8062dad21d4e 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -1621,7 +1621,7 @@ static int qlt_sched_sess_work(struct qla_tgt *tgt, int type,
 	struct qla_tgt_sess_work_param *prm;
 	unsigned long flags;

-	prm = kzalloc(sizeof(*prm), GFP_ATOMIC);
+	prm = kzalloc_obj(*prm, GFP_ATOMIC);
 	if (!prm) {
 		ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xf050,
 		    "qla_target(%d): Unable to create session "
@@ -3988,7 +3988,7 @@ static int qlt_prepare_srr_ctio(struct qla_qpair *qpair,
 		return 0;
 	}

-	srr = kzalloc(sizeof(*srr), GFP_ATOMIC);
+	srr = kzalloc_obj(*srr, GFP_ATOMIC);
 	if (!srr)
 		return -ENOMEM;

@@ -5561,7 +5561,7 @@ static void qlt_prepare_srr_imm(struct scsi_qla_host *vha,
 	 * safely.
 	 */

-	srr = kzalloc(sizeof(*srr), GFP_ATOMIC);
+	srr = kzalloc_obj(*srr, GFP_ATOMIC);
 	if (!srr)
 		goto out_reject;

@@ -5707,7 +5707,7 @@ static int qlt_set_data_offset(struct qla_tgt_cmd *cmd, uint32_t offset)
 		 */
 		int n_alloc_sg = min(sg_srr_cnt, 2);
 		struct scatterlist *sg_srr =
-			kmalloc_array(n_alloc_sg, sizeof(*sg_srr), GFP_ATOMIC);
+			kmalloc_objs(*sg_srr, n_alloc_sg, GFP_ATOMIC);
 		if (!sg_srr) {
 			ql_dbg(ql_dbg_tgt_mgt, vha, 0x11027,
 			    "qla_target(%d): tag %lld: Unable to allocate SRR scatterlist\n",
@@ -7458,16 +7458,15 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha)

 	BUG_ON(base_vha->vha_tgt.qla_tgt != NULL);

-	tgt = kzalloc(sizeof(struct qla_tgt), GFP_KERNEL);
+	tgt = kzalloc_obj(struct qla_tgt, GFP_KERNEL);
 	if (!tgt) {
 		ql_dbg(ql_dbg_tgt, base_vha, 0xe066,
 		    "Unable to allocate struct qla_tgt\n");
 		return -ENOMEM;
 	}

-	tgt->qphints = kcalloc(ha->max_qpairs + 1,
-			       sizeof(struct qla_qpair_hint),
-			       GFP_KERNEL);
+	tgt->qphints = kzalloc_objs(struct qla_qpair_hint, ha->max_qpairs + 1,
+				    GFP_KERNEL);
 	if (!tgt->qphints) {
 		kfree(tgt);
 		ql_log(ql_log_warn, base_vha, 0x0197,
@@ -8280,7 +8279,7 @@ qlt_handle_abts_recv(struct scsi_qla_host *vha, struct rsp_que *rsp,
 {
 	struct qla_tgt_sess_op *op;

-	op = kzalloc(sizeof(*op), GFP_ATOMIC);
+	op = kzalloc_obj(*op, GFP_ATOMIC);

 	if (!op) {
 		/* do not reach for ATIO queue here.  This is best effort err
diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
index 3177cb7864a7..2eae89aad109 100644
--- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
@@ -1015,7 +1015,7 @@ static struct se_portal_group *tcm_qla2xxx_make_tpg(struct se_wwn *wwn,
 		return ERR_PTR(-ENOSYS);
 	}

-	tpg = kzalloc(sizeof(struct tcm_qla2xxx_tpg), GFP_KERNEL);
+	tpg = kzalloc_obj(struct tcm_qla2xxx_tpg, GFP_KERNEL);
 	if (!tpg) {
 		pr_err("Unable to allocate struct tcm_qla2xxx_tpg\n");
 		return ERR_PTR(-ENOMEM);
@@ -1106,7 +1106,7 @@ static struct se_portal_group *tcm_qla2xxx_npiv_make_tpg(struct se_wwn *wwn,
 	if (kstrtoul(name + 5, 10, &tpgt) || tpgt > USHRT_MAX)
 		return ERR_PTR(-EINVAL);

-	tpg = kzalloc(sizeof(struct tcm_qla2xxx_tpg), GFP_KERNEL);
+	tpg = kzalloc_obj(struct tcm_qla2xxx_tpg, GFP_KERNEL);
 	if (!tpg) {
 		pr_err("Unable to allocate struct tcm_qla2xxx_tpg\n");
 		return ERR_PTR(-ENOMEM);
@@ -1609,7 +1609,7 @@ static struct se_wwn *tcm_qla2xxx_make_lport(
 	if (tcm_qla2xxx_parse_wwn(name, &wwpn, 1) < 0)
 		return ERR_PTR(-EINVAL);

-	lport = kzalloc(sizeof(struct tcm_qla2xxx_lport), GFP_KERNEL);
+	lport = kzalloc_obj(struct tcm_qla2xxx_lport, GFP_KERNEL);
 	if (!lport) {
 		pr_err("Unable to allocate struct tcm_qla2xxx_lport\n");
 		return ERR_PTR(-ENOMEM);
@@ -1735,7 +1735,7 @@ static struct se_wwn *tcm_qla2xxx_npiv_make_lport(
 				       &npiv_wwpn, &npiv_wwnn) < 0)
 		return ERR_PTR(-EINVAL);

-	lport = kzalloc(sizeof(struct tcm_qla2xxx_lport), GFP_KERNEL);
+	lport = kzalloc_obj(struct tcm_qla2xxx_lport, GFP_KERNEL);
 	if (!lport) {
 		pr_err("Unable to allocate struct tcm_qla2xxx_lport for NPIV\n");
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/scsi/qla4xxx/ql4_iocb.c b/drivers/scsi/qla4xxx/ql4_iocb.c
index 28eab07935ba..3ec9321f41e2 100644
--- a/drivers/scsi/qla4xxx/ql4_iocb.c
+++ b/drivers/scsi/qla4xxx/ql4_iocb.c
@@ -451,7 +451,7 @@ static struct mrb *qla4xxx_get_new_mrb(struct scsi_qla_host *ha)
 {
 	struct mrb *mrb;

-	mrb = kzalloc(sizeof(*mrb), GFP_KERNEL);
+	mrb = kzalloc_obj(*mrb, GFP_KERNEL);
 	if (!mrb)
 		return mrb;

diff --git a/drivers/scsi/qla4xxx/ql4_nx.c b/drivers/scsi/qla4xxx/ql4_nx.c
index b0a62aaa1cca..47b9fea0a989 100644
--- a/drivers/scsi/qla4xxx/ql4_nx.c
+++ b/drivers/scsi/qla4xxx/ql4_nx.c
@@ -1058,7 +1058,7 @@ qla4_82xx_pinit_from_rom(struct scsi_qla_host *ha, int verbose)
 	ql4_printk(KERN_INFO, ha,
 		"%s: %d CRB init values found in ROM.\n", DRIVER_NAME, n);

-	buf = kmalloc_array(n, sizeof(struct crb_addr_pair), GFP_KERNEL);
+	buf = kmalloc_objs(struct crb_addr_pair, n, GFP_KERNEL);
 	if (buf == NULL) {
 		ql4_printk(KERN_WARNING, ha,
 		    "%s: [ERROR] Unable to malloc memory.\n", DRIVER_NAME);
diff --git a/drivers/scsi/raid_class.c b/drivers/scsi/raid_class.c
index 95a86e0dfd77..46fb627f61d6 100644
--- a/drivers/scsi/raid_class.c
+++ b/drivers/scsi/raid_class.c
@@ -81,7 +81,7 @@ static int raid_setup(struct transport_container *tc, struct device *dev,

 	BUG_ON(dev_get_drvdata(cdev));

-	rd = kzalloc(sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_obj(*rd, GFP_KERNEL);
 	if (!rd)
 		return -ENOMEM;

@@ -212,8 +212,7 @@ raid_attr_ro_state_fn(state);
 struct raid_template *
 raid_class_attach(struct raid_function_template *ft)
 {
-	struct raid_internal *i = kzalloc(sizeof(struct raid_internal),
-					  GFP_KERNEL);
+	struct raid_internal *i = kzalloc_obj(struct raid_internal, GFP_KERNEL);
 	int count = 0;

 	if (unlikely(!i))
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index c947655db518..fb609d2db056 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -1169,7 +1169,7 @@ static ssize_t sdebug_error_write(struct file *file, const char __user *ubuf,
 		return -EINVAL;
 	}

-	inject = kzalloc(sizeof(struct sdebug_err_inject), GFP_KERNEL);
+	inject = kzalloc_obj(struct sdebug_err_inject, GFP_KERNEL);
 	if (!inject) {
 		kfree(buf);
 		return -ENOMEM;
@@ -1266,7 +1266,7 @@ static int sdebug_target_alloc(struct scsi_target *starget)
 {
 	struct sdebug_target_info *targetip;

-	targetip = kzalloc(sizeof(struct sdebug_target_info), GFP_KERNEL);
+	targetip = kzalloc_obj(struct sdebug_target_info, GFP_KERNEL);
 	if (!targetip)
 		return -ENOMEM;

@@ -6504,8 +6504,8 @@ static int sdebug_device_create_zones(struct sdebug_dev_info *devip)
 			devip->max_open = sdeb_zbc_max_open;
 	}

-	devip->zstate = kcalloc(devip->nr_zones,
-				sizeof(struct sdeb_zone_state), GFP_KERNEL);
+	devip->zstate = kzalloc_objs(struct sdeb_zone_state, devip->nr_zones,
+				     GFP_KERNEL);
 	if (!devip->zstate)
 		return -ENOMEM;

@@ -6549,7 +6549,7 @@ static struct sdebug_dev_info *sdebug_device_create(
 {
 	struct sdebug_dev_info *devip;

-	devip = kzalloc(sizeof(*devip), flags);
+	devip = kzalloc_obj(*devip, flags);
 	if (devip) {
 		if (sdebug_uuid_ctl == 1)
 			uuid_gen(&devip->lu_name);
@@ -6649,8 +6649,8 @@ static int scsi_debug_sdev_configure(struct scsi_device *sdp,
 	if (sdebug_ptype == TYPE_TAPE) {
 		if (!devip->tape_blocks[0]) {
 			devip->tape_blocks[0] =
-				kcalloc(TAPE_UNITS, sizeof(struct tape_block),
-					GFP_KERNEL);
+				kzalloc_objs(struct tape_block, TAPE_UNITS,
+					     GFP_KERNEL);
 			if (!devip->tape_blocks[0])
 				return 1;
 		}
@@ -8791,7 +8791,7 @@ static int sdebug_add_store(void)
 	struct sdeb_store_info *sip = NULL;
 	struct xa_limit xal = { .max = 1 << 16, .min = 0 };

-	sip = kzalloc(sizeof(*sip), GFP_KERNEL);
+	sip = kzalloc_obj(*sip, GFP_KERNEL);
 	if (!sip)
 		return -ENOMEM;

@@ -8868,7 +8868,7 @@ static int sdebug_add_host_helper(int per_host_idx)
 	struct sdebug_host_info *sdbg_host;
 	struct sdebug_dev_info *sdbg_devinfo, *tmp;

-	sdbg_host = kzalloc(sizeof(*sdbg_host), GFP_KERNEL);
+	sdbg_host = kzalloc_obj(*sdbg_host, GFP_KERNEL);
 	if (!sdbg_host)
 		return -ENOMEM;
 	idx = (per_host_idx < 0) ? sdeb_first_idx : per_host_idx;
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index 78346b2b69c9..bb27ae42c594 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -355,7 +355,7 @@ int scsi_dev_info_list_add_keyed(int compatible, char *vendor, char *model,
 	if (IS_ERR(devinfo_table))
 		return PTR_ERR(devinfo_table);

-	devinfo = kmalloc(sizeof(*devinfo), GFP_KERNEL);
+	devinfo = kmalloc_obj(*devinfo, GFP_KERNEL);
 	if (!devinfo) {
 		printk(KERN_ERR "%s: no memory\n", __func__);
 		return -ENOMEM;
@@ -615,7 +615,7 @@ static int devinfo_seq_show(struct seq_file *m, void *v)

 static void *devinfo_seq_start(struct seq_file *m, loff_t *ppos)
 {
-	struct double_list *dl = kmalloc(sizeof(*dl), GFP_KERNEL);
+	struct double_list *dl = kmalloc_obj(*dl, GFP_KERNEL);
 	loff_t pos = *ppos;

 	if (!dl)
@@ -759,7 +759,7 @@ int scsi_dev_info_add_list(enum scsi_devinfo_key key, const char *name)
 		/* list already exists */
 		return -EEXIST;

-	devinfo_table = kmalloc(sizeof(*devinfo_table), GFP_KERNEL);
+	devinfo_table = kmalloc_obj(*devinfo_table, GFP_KERNEL);

 	if (!devinfo_table)
 		return -ENOMEM;
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 68c411aa5665..d3a8cd4166f9 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -2751,7 +2751,7 @@ EXPORT_SYMBOL_GPL(sdev_evt_send);
 struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type,
 				  gfp_t gfpflags)
 {
-	struct scsi_event *evt = kzalloc(sizeof(struct scsi_event), gfpflags);
+	struct scsi_event *evt = kzalloc_obj(struct scsi_event, gfpflags);
 	if (!evt)
 		return NULL;

diff --git a/drivers/scsi/scsi_proc.c b/drivers/scsi/scsi_proc.c
index 41f23cd0bfb4..046871351dc0 100644
--- a/drivers/scsi/scsi_proc.c
+++ b/drivers/scsi/scsi_proc.c
@@ -162,7 +162,7 @@ int scsi_proc_hostdir_add(const struct scsi_host_template *sht)
 	mutex_lock(&global_host_template_mutex);
 	e = __scsi_lookup_proc_entry(sht);
 	if (!e) {
-		e = kzalloc(sizeof(*e), GFP_KERNEL);
+		e = kzalloc_obj(*e, GFP_KERNEL);
 		if (!e) {
 			ret = -ENOMEM;
 			goto unlock;
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 7acbfcfc2172..ca2bda973aad 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -1954,7 +1954,7 @@ static struct async_scan_data *scsi_prep_async_scan(struct Scsi_Host *shost)
 		goto err;
 	}

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		goto err;
 	data->shost = scsi_host_get(shost);
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
index 9532138105c1..3ec584e65fb4 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -2651,8 +2651,7 @@ struct scsi_transport_template *
 fc_attach_transport(struct fc_function_template *ft)
 {
 	int count;
-	struct fc_internal *i = kzalloc(sizeof(struct fc_internal),
-					GFP_KERNEL);
+	struct fc_internal *i = kzalloc_obj(struct fc_internal, GFP_KERNEL);

 	if (unlikely(!i))
 		return NULL;
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index ed21c032bbc4..af050a2c628e 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -4848,7 +4848,7 @@ iscsi_register_transport(struct iscsi_transport *tt)
 	if (priv)
 		return NULL;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;
 	INIT_LIST_HEAD(&priv->list);
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c
index d69c7c444a31..9bc00d950f86 100644
--- a/drivers/scsi/scsi_transport_sas.c
+++ b/drivers/scsi/scsi_transport_sas.c
@@ -712,7 +712,7 @@ struct sas_phy *sas_phy_alloc(struct device *parent, int number)
 	struct Scsi_Host *shost = dev_to_shost(parent);
 	struct sas_phy *phy;

-	phy = kzalloc(sizeof(*phy), GFP_KERNEL);
+	phy = kzalloc_obj(*phy, GFP_KERNEL);
 	if (!phy)
 		return NULL;

@@ -907,7 +907,7 @@ struct sas_port *sas_port_alloc(struct device *parent, int port_id)
 	struct Scsi_Host *shost = dev_to_shost(parent);
 	struct sas_port *port;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return NULL;

@@ -1467,7 +1467,7 @@ struct sas_rphy *sas_end_device_alloc(struct sas_port *parent)
 	struct Scsi_Host *shost = dev_to_shost(&parent->dev);
 	struct sas_end_device *rdev;

-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (!rdev) {
 		return NULL;
 	}
@@ -1511,7 +1511,7 @@ struct sas_rphy *sas_expander_alloc(struct sas_port *parent,
 	BUG_ON(type != SAS_EDGE_EXPANDER_DEVICE &&
 	       type != SAS_FANOUT_EXPANDER_DEVICE);

-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (!rdev) {
 		return NULL;
 	}
@@ -1815,7 +1815,7 @@ sas_attach_transport(struct sas_function_template *ft)
 	struct sas_internal *i;
 	int count;

-	i = kzalloc(sizeof(struct sas_internal), GFP_KERNEL);
+	i = kzalloc_obj(struct sas_internal, GFP_KERNEL);
 	if (!i)
 		return NULL;

diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c
index 17a4a0918fc4..1f4299a61e1f 100644
--- a/drivers/scsi/scsi_transport_spi.c
+++ b/drivers/scsi/scsi_transport_spi.c
@@ -1096,7 +1096,7 @@ void
 spi_schedule_dv_device(struct scsi_device *sdev)
 {
 	struct work_queue_wrapper *wqw =
-		kmalloc(sizeof(struct work_queue_wrapper), GFP_ATOMIC);
+		kmalloc_obj(struct work_queue_wrapper, GFP_ATOMIC);

 	if (unlikely(!wqw))
 		return;
@@ -1570,8 +1570,7 @@ static int spi_target_configure(struct transport_container *tc,
 struct scsi_transport_template *
 spi_attach_transport(struct spi_function_template *ft)
 {
-	struct spi_internal *i = kzalloc(sizeof(struct spi_internal),
-					 GFP_KERNEL);
+	struct spi_internal *i = kzalloc_obj(struct spi_internal, GFP_KERNEL);

 	if (unlikely(!i))
 		return NULL;
diff --git a/drivers/scsi/scsi_transport_srp.c b/drivers/scsi/scsi_transport_srp.c
index aeb58a9e6b7f..ada7e07e5ae0 100644
--- a/drivers/scsi/scsi_transport_srp.c
+++ b/drivers/scsi/scsi_transport_srp.c
@@ -700,7 +700,7 @@ struct srp_rport *srp_rport_add(struct Scsi_Host *shost,
 	struct srp_internal *i = to_srp_internal(shost->transportt);
 	int id, ret;

-	rport = kzalloc(sizeof(*rport), GFP_KERNEL);
+	rport = kzalloc_obj(*rport, GFP_KERNEL);
 	if (!rport)
 		return ERR_PTR(-ENOMEM);

@@ -814,7 +814,7 @@ srp_attach_transport(struct srp_function_template *ft)
 	int count;
 	struct srp_internal *i;

-	i = kzalloc(sizeof(*i), GFP_KERNEL);
+	i = kzalloc_obj(*i, GFP_KERNEL);
 	if (!i)
 		return NULL;

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index d76996d6cbc9..92fbe9caf6be 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -3735,7 +3735,7 @@ static void sd_revalidate_disk(struct gendisk *disk)
 	if (!scsi_device_online(sdp))
 		return;

-	lim = kmalloc(sizeof(*lim), GFP_KERNEL);
+	lim = kmalloc_obj(*lim, GFP_KERNEL);
 	if (!lim)
 		return;

@@ -3974,7 +3974,7 @@ static int sd_probe(struct scsi_device *sdp)
 					"sd_probe\n"));

 	error = -ENOMEM;
-	sdkp = kzalloc(sizeof(*sdkp), GFP_KERNEL);
+	sdkp = kzalloc_obj(*sdkp, GFP_KERNEL);
 	if (!sdkp)
 		goto out;

diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c
index 789b170da652..901956cf3c5b 100644
--- a/drivers/scsi/ses.c
+++ b/drivers/scsi/ses.c
@@ -715,7 +715,7 @@ static int ses_intf_add(struct device *cdev)
 	if (sdev->type != TYPE_ENCLOSURE)
 		sdev_printk(KERN_NOTICE, sdev, "Embedded Enclosure Device\n");

-	ses_dev = kzalloc(sizeof(*ses_dev), GFP_KERNEL);
+	ses_dev = kzalloc_obj(*ses_dev, GFP_KERNEL);
 	hdr_buf = kzalloc(INIT_ALLOC_SIZE, GFP_KERNEL);
 	if (!hdr_buf || !ses_dev)
 		goto err_init_free;
@@ -799,7 +799,8 @@ static int ses_intf_add(struct device *cdev)
 	}
 page2_not_supported:
 	if (components > 0) {
-		scomp = kcalloc(components, sizeof(struct ses_component), GFP_KERNEL);
+		scomp = kzalloc_objs(struct ses_component, components,
+				     GFP_KERNEL);
 		if (!scomp)
 			goto err_free;
 	}
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index 1a521f9d821a..b04d8ddeb2eb 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -1436,7 +1436,7 @@ sg_alloc(struct scsi_device *scsidp)
 	int error;
 	u32 k;

-	sdp = kzalloc(sizeof(Sg_device), GFP_KERNEL);
+	sdp = kzalloc_obj(Sg_device, GFP_KERNEL);
 	if (!sdp) {
 		sdev_printk(KERN_WARNING, scsidp, "%s: kmalloc Sg_device "
 			    "failure\n", __func__);
@@ -2157,7 +2157,7 @@ sg_add_sfp(Sg_device * sdp)
 	unsigned long iflags;
 	int bufflen;

-	sfp = kzalloc(sizeof(*sfp), GFP_ATOMIC | __GFP_NOWARN);
+	sfp = kzalloc_obj(*sfp, GFP_ATOMIC | __GFP_NOWARN);
 	if (!sfp)
 		return ERR_PTR(-ENOMEM);

@@ -2456,7 +2456,7 @@ struct sg_proc_deviter {

 static void * dev_seq_start(struct seq_file *s, loff_t *pos)
 {
-	struct sg_proc_deviter * it = kmalloc(sizeof(*it), GFP_KERNEL);
+	struct sg_proc_deviter * it = kmalloc_obj(*it, GFP_KERNEL);

 	s->private = it;
 	if (! it)
diff --git a/drivers/scsi/sim710.c b/drivers/scsi/sim710.c
index 70c75ab1453a..16ca6245c51d 100644
--- a/drivers/scsi/sim710.c
+++ b/drivers/scsi/sim710.c
@@ -87,7 +87,7 @@ static int sim710_probe_common(struct device *dev, unsigned long base_addr,
 {
 	struct Scsi_Host * host = NULL;
 	struct NCR_700_Host_Parameters *hostdata =
-		kzalloc(sizeof(struct NCR_700_Host_Parameters),	GFP_KERNEL);
+		kzalloc_obj(struct NCR_700_Host_Parameters, GFP_KERNEL);

 	printk(KERN_NOTICE "sim710: %s\n", dev_name(dev));
 	printk(KERN_NOTICE "sim710: irq = %d, clock = %d, base = 0x%lx, scsi_id = %d\n",
diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c
index 6f859f0d2046..88b94e611d0f 100644
--- a/drivers/scsi/smartpqi/smartpqi_init.c
+++ b/drivers/scsi/smartpqi/smartpqi_init.c
@@ -888,7 +888,7 @@ static int pqi_get_advanced_raid_bypass_config(struct pqi_ctrl_info *ctrl_info)
 	struct pqi_raid_path_request request;
 	struct bmic_sense_feature_buffer *buffer;

-	buffer = kmalloc(sizeof(*buffer), GFP_KERNEL);
+	buffer = kmalloc_obj(*buffer, GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;

@@ -953,7 +953,7 @@ static int pqi_flush_cache(struct pqi_ctrl_info *ctrl_info,
 	int rc;
 	struct bmic_flush_cache *flush_cache;

-	flush_cache = kzalloc(sizeof(*flush_cache), GFP_KERNEL);
+	flush_cache = kzalloc_obj(*flush_cache, GFP_KERNEL);
 	if (!flush_cache)
 		return -ENOMEM;

@@ -982,7 +982,7 @@ static int pqi_set_diag_rescan(struct pqi_ctrl_info *ctrl_info)
 	int rc;
 	struct bmic_diag_options *diag;

-	diag = kzalloc(sizeof(*diag), GFP_KERNEL);
+	diag = kzalloc_obj(*diag, GFP_KERNEL);
 	if (!diag)
 		return -ENOMEM;

@@ -1164,7 +1164,7 @@ static int pqi_report_phys_logical_luns(struct pqi_ctrl_info *ctrl_info, u8 cmd,
 	void *lun_data = NULL;
 	struct report_lun_header *report_lun_header;

-	report_lun_header = kmalloc(sizeof(*report_lun_header), GFP_KERNEL);
+	report_lun_header = kmalloc_obj(*report_lun_header, GFP_KERNEL);
 	if (!report_lun_header) {
 		rc = -ENOMEM;
 		goto out;
@@ -1252,8 +1252,8 @@ static inline int pqi_report_phys_luns(struct pqi_ctrl_info *ctrl_info, void **b
 	rpl_8byte_wwid_list = rpl_list;
 	num_physicals = get_unaligned_be32(&rpl_8byte_wwid_list->header.list_length) / sizeof(rpl_8byte_wwid_list->lun_entries[0]);

-	rpl_16byte_wwid_list = kmalloc(struct_size(rpl_16byte_wwid_list, lun_entries,
-						   num_physicals), GFP_KERNEL);
+	rpl_16byte_wwid_list = kmalloc_flex(*rpl_16byte_wwid_list, lun_entries,
+					    num_physicals, GFP_KERNEL);
 	if (!rpl_16byte_wwid_list) {
 		rc = -ENOMEM;
 		goto out_free_rpl_list;
@@ -1478,7 +1478,7 @@ static int pqi_get_raid_map(struct pqi_ctrl_info *ctrl_info,
 	u32 raid_map_size;
 	struct raid_map *raid_map;

-	raid_map = kmalloc(sizeof(*raid_map), GFP_KERNEL);
+	raid_map = kmalloc_obj(*raid_map, GFP_KERNEL);
 	if (!raid_map)
 		return -ENOMEM;

@@ -1616,7 +1616,7 @@ static void pqi_get_volume_status(struct pqi_ctrl_info *ctrl_info,
 	u32 volume_flags;
 	struct ciss_vpd_logical_volume_status *vpd;

-	vpd = kmalloc(sizeof(*vpd), GFP_KERNEL);
+	vpd = kmalloc_obj(*vpd, GFP_KERNEL);
 	if (!vpd)
 		goto no_buffer;

@@ -2447,7 +2447,7 @@ static int pqi_update_scsi_devices(struct pqi_ctrl_info *ctrl_info)
 		 * pqi_get_physical_disk_info() because it's a fairly large
 		 * buffer.
 		 */
-		id_phys = kmalloc(sizeof(*id_phys), GFP_KERNEL);
+		id_phys = kmalloc_obj(*id_phys, GFP_KERNEL);
 		if (!id_phys) {
 			dev_warn(&ctrl_info->pci_dev->dev, "%s\n",
 				out_of_memory_msg);
@@ -2472,9 +2472,8 @@ static int pqi_update_scsi_devices(struct pqi_ctrl_info *ctrl_info)

 	num_new_devices = num_physicals + num_logicals;

-	new_device_list = kmalloc_array(num_new_devices,
-					sizeof(*new_device_list),
-					GFP_KERNEL);
+	new_device_list = kmalloc_objs(*new_device_list, num_new_devices,
+				       GFP_KERNEL);
 	if (!new_device_list) {
 		dev_warn(&ctrl_info->pci_dev->dev, "%s\n", out_of_memory_msg);
 		rc = -ENOMEM;
@@ -2482,7 +2481,7 @@ static int pqi_update_scsi_devices(struct pqi_ctrl_info *ctrl_info)
 	}

 	for (i = 0; i < num_new_devices; i++) {
-		device = kzalloc(sizeof(*device), GFP_KERNEL);
+		device = kzalloc_obj(*device, GFP_KERNEL);
 		if (!device) {
 			dev_warn(&ctrl_info->pci_dev->dev, "%s\n",
 				out_of_memory_msg);
@@ -4751,7 +4750,7 @@ static int pqi_report_device_capability(struct pqi_ctrl_info *ctrl_info)
 	struct pqi_device_capability *capability;
 	struct pqi_iu_layer_descriptor *sop_iu_layer_descriptor;

-	capability = kmalloc(sizeof(*capability), GFP_KERNEL);
+	capability = kmalloc_obj(*capability, GFP_KERNEL);
 	if (!capability)
 		return -ENOMEM;

@@ -5207,8 +5206,9 @@ static int pqi_alloc_io_resources(struct pqi_ctrl_info *ctrl_info)
 	struct device *dev;
 	struct pqi_io_request *io_request;

-	ctrl_info->io_request_pool = kcalloc(ctrl_info->max_io_slots,
-		sizeof(ctrl_info->io_request_pool[0]), GFP_KERNEL);
+	ctrl_info->io_request_pool = kzalloc_objs(ctrl_info->io_request_pool[0],
+						  ctrl_info->max_io_slots,
+						  GFP_KERNEL);

 	if (!ctrl_info->io_request_pool) {
 		dev_err(&ctrl_info->pci_dev->dev,
@@ -7746,7 +7746,7 @@ static int pqi_get_ctrl_serial_number(struct pqi_ctrl_info *ctrl_info)
 	int rc;
 	struct bmic_sense_subsystem_info *sense_info;

-	sense_info = kzalloc(sizeof(*sense_info), GFP_KERNEL);
+	sense_info = kzalloc_obj(*sense_info, GFP_KERNEL);
 	if (!sense_info)
 		return -ENOMEM;

@@ -7769,7 +7769,7 @@ static int pqi_get_ctrl_product_details(struct pqi_ctrl_info *ctrl_info)
 	int rc;
 	struct bmic_identify_controller *identify;

-	identify = kmalloc(sizeof(*identify), GFP_KERNEL);
+	identify = kmalloc_obj(*identify, GFP_KERNEL);
 	if (!identify)
 		return -ENOMEM;

diff --git a/drivers/scsi/smartpqi/smartpqi_sas_transport.c b/drivers/scsi/smartpqi/smartpqi_sas_transport.c
index 93e96705754e..093b2ee39e90 100644
--- a/drivers/scsi/smartpqi/smartpqi_sas_transport.c
+++ b/drivers/scsi/smartpqi/smartpqi_sas_transport.c
@@ -22,7 +22,7 @@ static struct pqi_sas_phy *pqi_alloc_sas_phy(struct pqi_sas_port *pqi_sas_port)
 	struct pqi_sas_phy *pqi_sas_phy;
 	struct sas_phy *phy;

-	pqi_sas_phy = kzalloc(sizeof(*pqi_sas_phy), GFP_KERNEL);
+	pqi_sas_phy = kzalloc_obj(*pqi_sas_phy, GFP_KERNEL);
 	if (!pqi_sas_phy)
 		return NULL;

@@ -131,7 +131,7 @@ static struct pqi_sas_port *pqi_alloc_sas_port(
 	struct pqi_sas_port *pqi_sas_port;
 	struct sas_port *port;

-	pqi_sas_port = kzalloc(sizeof(*pqi_sas_port), GFP_KERNEL);
+	pqi_sas_port = kzalloc_obj(*pqi_sas_port, GFP_KERNEL);
 	if (!pqi_sas_port)
 		return NULL;

@@ -180,7 +180,7 @@ static struct pqi_sas_node *pqi_alloc_sas_node(struct device *parent_dev)
 {
 	struct pqi_sas_node *pqi_sas_node;

-	pqi_sas_node = kzalloc(sizeof(*pqi_sas_node), GFP_KERNEL);
+	pqi_sas_node = kzalloc_obj(*pqi_sas_node, GFP_KERNEL);
 	if (pqi_sas_node) {
 		pqi_sas_node->parent_dev = parent_dev;
 		INIT_LIST_HEAD(&pqi_sas_node->port_list_head);
@@ -463,7 +463,7 @@ pqi_build_csmi_smp_passthru_buffer(struct sas_rphy *rphy,
 	u32 req_size;
 	u32 resp_size;

-	smp_buf = kzalloc(sizeof(*smp_buf), GFP_KERNEL);
+	smp_buf = kzalloc_obj(*smp_buf, GFP_KERNEL);
 	if (!smp_buf)
 		return NULL;

diff --git a/drivers/scsi/sni_53c710.c b/drivers/scsi/sni_53c710.c
index d1d2556c8fc4..0e57e873dc42 100644
--- a/drivers/scsi/sni_53c710.c
+++ b/drivers/scsi/sni_53c710.c
@@ -64,7 +64,7 @@ static int snirm710_probe(struct platform_device *dev)
 		return -ENODEV;

 	base = res->start;
-	hostdata = kzalloc(sizeof(*hostdata), GFP_KERNEL);
+	hostdata = kzalloc_obj(*hostdata, GFP_KERNEL);
 	if (!hostdata)
 		return -ENOMEM;

diff --git a/drivers/scsi/snic/snic_disc.c b/drivers/scsi/snic/snic_disc.c
index 4db3ba62fcd3..064f2d4d0ffc 100644
--- a/drivers/scsi/snic/snic_disc.c
+++ b/drivers/scsi/snic/snic_disc.c
@@ -244,7 +244,7 @@ snic_tgt_create(struct snic *snic, struct snic_tgt_id *tgtid)
 		return tgt;
 	}

-	tgt = kzalloc(sizeof(*tgt), GFP_KERNEL);
+	tgt = kzalloc_obj(*tgt, GFP_KERNEL);
 	if (!tgt) {
 		SNIC_HOST_ERR(snic->shost, "Failure to allocate snic_tgt.\n");
 		ret = -ENOMEM;
diff --git a/drivers/scsi/snic/snic_main.c b/drivers/scsi/snic/snic_main.c
index 1c24517e4e65..f9ee2205407e 100644
--- a/drivers/scsi/snic/snic_main.c
+++ b/drivers/scsi/snic/snic_main.c
@@ -818,7 +818,7 @@ snic_global_data_init(void)
 	struct kmem_cache *cachep;
 	ssize_t len = 0;

-	snic_glob = kzalloc(sizeof(*snic_glob), GFP_KERNEL);
+	snic_glob = kzalloc_obj(*snic_glob, GFP_KERNEL);

 	if (!snic_glob) {
 		SNIC_ERR("Failed to allocate Global Context.\n");
diff --git a/drivers/scsi/snic/vnic_dev.c b/drivers/scsi/snic/vnic_dev.c
index 760f3f22095c..c692de061f29 100644
--- a/drivers/scsi/snic/vnic_dev.c
+++ b/drivers/scsi/snic/vnic_dev.c
@@ -352,7 +352,7 @@ static int svnic_dev_init_devcmd2(struct vnic_dev *vdev)
 	if (!p)
 		return -ENODEV;

-	dc2c = kzalloc(sizeof(*dc2c), GFP_ATOMIC);
+	dc2c = kzalloc_obj(*dc2c, GFP_ATOMIC);
 	if (!dc2c)
 		return -ENOMEM;

@@ -712,7 +712,7 @@ struct vnic_dev *svnic_dev_alloc_discover(struct vnic_dev *vdev,
 					  unsigned int num_bars)
 {
 	if (!vdev) {
-		vdev = kzalloc(sizeof(struct vnic_dev), GFP_ATOMIC);
+		vdev = kzalloc_obj(struct vnic_dev, GFP_ATOMIC);
 		if (!vdev)
 			return NULL;
 	}
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index 1fb85f548955..f1871d78c30c 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -629,7 +629,7 @@ static int sr_probe(struct scsi_device *sdev)
 		goto fail;

 	error = -ENOMEM;
-	cd = kzalloc(sizeof(*cd), GFP_KERNEL);
+	cd = kzalloc_obj(*cd, GFP_KERNEL);
 	if (!cd)
 		goto fail;

diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index 413e844fa276..438c4e50d0fd 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -462,7 +462,7 @@ static struct st_request *st_allocate_request(struct scsi_tape *stp)
 {
 	struct st_request *streq;

-	streq = kzalloc(sizeof(*streq), GFP_KERNEL);
+	streq = kzalloc_obj(*streq, GFP_KERNEL);
 	if (streq)
 		streq->stp = stp;
 	else {
@@ -3973,7 +3973,7 @@ static struct st_buffer *new_tape_buffer(int max_sg)
 {
 	struct st_buffer *tb;

-	tb = kzalloc(sizeof(struct st_buffer), GFP_KERNEL);
+	tb = kzalloc_obj(struct st_buffer, GFP_KERNEL);
 	if (!tb) {
 		printk(KERN_NOTICE "st: Can't allocate new tape buffer.\n");
 		return NULL;
@@ -3982,8 +3982,7 @@ static struct st_buffer *new_tape_buffer(int max_sg)
 	tb->use_sg = max_sg;
 	tb->buffer_size = 0;

-	tb->reserved_pages = kcalloc(max_sg, sizeof(struct page *),
-				     GFP_KERNEL);
+	tb->reserved_pages = kzalloc_objs(struct page *, max_sg, GFP_KERNEL);
 	if (!tb->reserved_pages) {
 		kfree(tb);
 		return NULL;
@@ -4374,7 +4373,7 @@ static int st_probe(struct scsi_device *SDp)
 		goto out;
 	}

-	tpnt = kzalloc(sizeof(struct scsi_tape), GFP_KERNEL);
+	tpnt = kzalloc_obj(struct scsi_tape, GFP_KERNEL);
 	if (tpnt == NULL) {
 		sdev_printk(KERN_ERR, SDp,
 			    "st: Can't allocate device descriptor.\n");
@@ -4457,7 +4456,7 @@ static int st_probe(struct scsi_device *SDp)
 	}
 	tpnt->index = error;
 	sprintf(tpnt->name, "st%d", tpnt->index);
-	tpnt->stats = kzalloc(sizeof(struct scsi_tape_stats), GFP_KERNEL);
+	tpnt->stats = kzalloc_obj(struct scsi_tape_stats, GFP_KERNEL);
 	if (tpnt->stats == NULL) {
 		sdev_printk(KERN_ERR, SDp,
 			    "st: Can't allocate statistics.\n");
@@ -5007,7 +5006,7 @@ static int sgl_map_user_pages(struct st_buffer *STbp,
 	if (count == 0)
 		return 0;

-	pages = kmalloc_array(max_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, max_pages, GFP_KERNEL);
 	if (pages == NULL)
 		return -ENOMEM;

diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
index 5a3f6fe22ae9..1ff8be01b1b1 100644
--- a/drivers/scsi/stex.c
+++ b/drivers/scsi/stex.c
@@ -1757,7 +1757,7 @@ static int stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 		}
 	}

-	hba->ccb = kcalloc(ci->rq_count, sizeof(struct st_ccb), GFP_KERNEL);
+	hba->ccb = kzalloc_objs(struct st_ccb, ci->rq_count, GFP_KERNEL);
 	if (!hba->ccb) {
 		err = -ENOMEM;
 		printk(KERN_ERR DRV_NAME "(%s): ccb alloc failed\n",
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index b3f83c0dcced..4e3ff9e0a794 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1063,7 +1063,7 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb,
 	/*
 	 * We need to schedule work to process this error; schedule it.
 	 */
-	wrk = kmalloc(sizeof(struct storvsc_scan_work), GFP_ATOMIC);
+	wrk = kmalloc_obj(struct storvsc_scan_work, GFP_ATOMIC);
 	if (!wrk) {
 		set_host_byte(scmnd, DID_BAD_TARGET);
 		return;
@@ -1970,7 +1970,7 @@ static int storvsc_probe(struct hv_device *device,
 	host_dev->host = host;


-	stor_device = kzalloc(sizeof(struct storvsc_device), GFP_KERNEL);
+	stor_device = kzalloc_obj(struct storvsc_device, GFP_KERNEL);
 	if (!stor_device) {
 		ret = -ENOMEM;
 		goto err_out0;
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c
index f0db17e34ea0..b9117acd324d 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.c
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c
@@ -4990,8 +4990,8 @@ struct sym_lcb *sym_alloc_lcb (struct sym_hcb *np, u_char tn, u_char ln)
 	 *  Allocate the table of pointers for LUN(s) > 0, if needed.
 	 */
 	if (ln && !tp->lunmp) {
-		tp->lunmp = kcalloc(SYM_CONF_MAX_LUN, sizeof(struct sym_lcb *),
-				GFP_ATOMIC);
+		tp->lunmp = kzalloc_objs(struct sym_lcb *, SYM_CONF_MAX_LUN,
+					 GFP_ATOMIC);
 		if (!tp->lunmp)
 			goto fail;
 	}
@@ -5655,7 +5655,7 @@ int sym_hcb_attach(struct Scsi_Host *shost, struct sym_fw *fw, struct sym_nvram
 	/*
 	 *  Allocate the array of lists of CCBs hashed by DSA.
 	 */
-	np->ccbh = kcalloc(CCB_HASH_SIZE, sizeof(*np->ccbh), GFP_KERNEL);
+	np->ccbh = kzalloc_objs(*np->ccbh, CCB_HASH_SIZE, GFP_KERNEL);
 	if (!np->ccbh)
 		goto attach_failed;

diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 89322717b181..7cccb4e06297 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -853,8 +853,8 @@ static int virtscsi_init(struct virtio_device *vdev,

 	num_req_vqs = vscsi->num_queues;
 	num_vqs = num_req_vqs + VIRTIO_SCSI_VQ_BASE;
-	vqs = kmalloc_array(num_vqs, sizeof(struct virtqueue *), GFP_KERNEL);
-	vqs_info = kcalloc(num_vqs, sizeof(*vqs_info), GFP_KERNEL);
+	vqs = kmalloc_objs(struct virtqueue *, num_vqs, GFP_KERNEL);
+	vqs_info = kzalloc_objs(*vqs_info, num_vqs, GFP_KERNEL);

 	if (!vqs || !vqs_info) {
 		err = -ENOMEM;
diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c
index 11f86c76f391..b6da5cfe444f 100644
--- a/drivers/scsi/vmw_pvscsi.c
+++ b/drivers/scsi/vmw_pvscsi.c
@@ -1478,8 +1478,8 @@ static int pvscsi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	 */
 	pvscsi_setup_all_rings(adapter);

-	adapter->cmd_map = kcalloc(adapter->req_depth,
-				   sizeof(struct pvscsi_ctx), GFP_KERNEL);
+	adapter->cmd_map = kzalloc_objs(struct pvscsi_ctx, adapter->req_depth,
+					GFP_KERNEL);
 	if (!adapter->cmd_map) {
 		printk(KERN_ERR "vmw_pvscsi: failed to allocate memory.\n");
 		error = -ENOMEM;
diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c
index bf36c07c2b47..42cde0017f12 100644
--- a/drivers/scsi/xen-scsifront.c
+++ b/drivers/scsi/xen-scsifront.c
@@ -494,8 +494,8 @@ static int map_data_for_request(struct vscsifrnt_info *info,
 			return -E2BIG;
 		}
 		seg_grants = vscsiif_grants_sg(data_grants);
-		shadow->sg = kcalloc(data_grants,
-			sizeof(struct scsiif_request_segment), GFP_ATOMIC);
+		shadow->sg = kzalloc_objs(struct scsiif_request_segment,
+					  data_grants, GFP_ATOMIC);
 		if (!shadow->sg)
 			return -ENOMEM;
 	}
@@ -669,7 +669,7 @@ static int scsifront_action_handler(struct scsi_cmnd *sc, uint8_t act)
 	if (info->host_active == STATE_ERROR)
 		return FAILED;

-	shadow = kzalloc(sizeof(*shadow), GFP_NOIO);
+	shadow = kzalloc_obj(*shadow, GFP_NOIO);
 	if (!shadow)
 		return FAILED;

diff --git a/drivers/scsi/zorro7xx.c b/drivers/scsi/zorro7xx.c
index 7acf9193a9e8..392c905726ef 100644
--- a/drivers/scsi/zorro7xx.c
+++ b/drivers/scsi/zorro7xx.c
@@ -95,7 +95,7 @@ static int zorro7xx_init_one(struct zorro_dev *z,
 		return -EBUSY;
 	}

-	hostdata = kzalloc(sizeof(struct NCR_700_Host_Parameters), GFP_KERNEL);
+	hostdata = kzalloc_obj(struct NCR_700_Host_Parameters, GFP_KERNEL);
 	if (!hostdata) {
 		printk(KERN_ERR "zorro7xx: Failed to allocate host data\n");
 		goto out_release;
diff --git a/drivers/scsi/zorro_esp.c b/drivers/scsi/zorro_esp.c
index 56cae22a4242..39c0357eb8bd 100644
--- a/drivers/scsi/zorro_esp.c
+++ b/drivers/scsi/zorro_esp.c
@@ -726,7 +726,7 @@ static int zorro_esp_probe(struct zorro_dev *z,

 	pr_info("%s found at address 0x%lx.\n", zdd->name, board);

-	zep = kzalloc(sizeof(*zep), GFP_KERNEL);
+	zep = kzalloc_obj(*zep, GFP_KERNEL);
 	if (!zep) {
 		pr_err("Can't allocate device private data!\n");
 		return -ENOMEM;
diff --git a/drivers/sh/clk/cpg.c b/drivers/sh/clk/cpg.c
index 64ed7d64458a..58e64a666b2f 100644
--- a/drivers/sh/clk/cpg.c
+++ b/drivers/sh/clk/cpg.c
@@ -459,7 +459,7 @@ int __init sh_clk_fsidiv_register(struct clk *clks, int nr)

 	for (i = 0; i < nr; i++) {

-		map = kzalloc(sizeof(struct clk_mapping), GFP_KERNEL);
+		map = kzalloc_obj(struct clk_mapping, GFP_KERNEL);
 		if (!map) {
 			pr_err("%s: unable to alloc memory\n", __func__);
 			return -ENOMEM;
diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c
index 3dde703b7766..aa68fe190865 100644
--- a/drivers/sh/intc/core.c
+++ b/drivers/sh/intc/core.c
@@ -204,7 +204,7 @@ int __init register_intc_controller(struct intc_desc *desc)
 	pr_info("Registered controller '%s' with %u IRQs\n",
 		desc->name, hw->nr_vectors);

-	d = kzalloc(sizeof(*d), GFP_NOWAIT);
+	d = kzalloc_obj(*d, GFP_NOWAIT);
 	if (!d)
 		goto err0;

@@ -217,8 +217,7 @@ int __init register_intc_controller(struct intc_desc *desc)

 	if (desc->num_resources) {
 		d->nr_windows = desc->num_resources;
-		d->window = kcalloc(d->nr_windows, sizeof(*d->window),
-				    GFP_NOWAIT);
+		d->window = kzalloc_objs(*d->window, d->nr_windows, GFP_NOWAIT);
 		if (!d->window)
 			goto err1;

@@ -267,8 +266,7 @@ int __init register_intc_controller(struct intc_desc *desc)
 	}

 	if (hw->prio_regs) {
-		d->prio = kcalloc(hw->nr_vectors, sizeof(*d->prio),
-				  GFP_NOWAIT);
+		d->prio = kzalloc_objs(*d->prio, hw->nr_vectors, GFP_NOWAIT);
 		if (!d->prio)
 			goto err4;

@@ -283,8 +281,7 @@ int __init register_intc_controller(struct intc_desc *desc)
 	}

 	if (hw->sense_regs) {
-		d->sense = kcalloc(hw->nr_vectors, sizeof(*d->sense),
-				   GFP_NOWAIT);
+		d->sense = kzalloc_objs(*d->sense, hw->nr_vectors, GFP_NOWAIT);
 		if (!d->sense)
 			goto err5;

diff --git a/drivers/sh/intc/virq.c b/drivers/sh/intc/virq.c
index a638c3048207..291798526519 100644
--- a/drivers/sh/intc/virq.c
+++ b/drivers/sh/intc/virq.c
@@ -93,7 +93,7 @@ static int add_virq_to_pirq(unsigned int irq, unsigned int virq)
 		last = &entry->next;
 	}

-	entry = kzalloc(sizeof(struct intc_virq_list), GFP_ATOMIC);
+	entry = kzalloc_obj(struct intc_virq_list, GFP_ATOMIC);
 	if (!entry)
 		return -ENOMEM;

@@ -168,7 +168,7 @@ static void __init intc_subgroup_init_one(struct intc_desc *desc,
 		if (!subgroup->enum_ids[i])
 			continue;

-		entry = kmalloc(sizeof(*entry), GFP_NOWAIT);
+		entry = kmalloc_obj(*entry, GFP_NOWAIT);
 		if (!entry)
 			break;

diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c
index 6dc0549f7900..c9c3ba77653a 100644
--- a/drivers/sh/maple/maple.c
+++ b/drivers/sh/maple/maple.c
@@ -187,7 +187,7 @@ static struct mapleq *maple_allocq(struct maple_device *mdev)
 {
 	struct mapleq *mq;

-	mq = kzalloc(sizeof(*mq), GFP_KERNEL);
+	mq = kzalloc_obj(*mq, GFP_KERNEL);
 	if (!mq)
 		goto failed_nomem;

@@ -215,7 +215,7 @@ static struct maple_device *maple_alloc_dev(int port, int unit)
 	/* zero this out to avoid kobj subsystem
 	* thinking it has already been registered */

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return NULL;

diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c
index f98f5a27e659..d058f481a39a 100644
--- a/drivers/siox/siox-core.c
+++ b/drivers/siox/siox-core.c
@@ -822,7 +822,7 @@ static struct siox_device *siox_device_add(struct siox_master *smaster,
 	int ret;
 	size_t buf_len;

-	sdevice = kzalloc(sizeof(*sdevice), GFP_KERNEL);
+	sdevice = kzalloc_obj(*sdevice, GFP_KERNEL);
 	if (!sdevice)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
index 5079d3271ee8..4f796e24a6ed 100644
--- a/drivers/slimbus/core.c
+++ b/drivers/slimbus/core.c
@@ -180,7 +180,7 @@ static struct slim_device *slim_alloc_device(struct slim_controller *ctrl,
 	struct slim_device *sbdev;
 	int ret;

-	sbdev = kzalloc(sizeof(*sbdev), GFP_KERNEL);
+	sbdev = kzalloc_obj(*sbdev, GFP_KERNEL);
 	if (!sbdev)
 		return NULL;

diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctrl.c
index 7338b38697d0..0bead6949410 100644
--- a/drivers/slimbus/qcom-ngd-ctrl.c
+++ b/drivers/slimbus/qcom-ngd-ctrl.c
@@ -1523,7 +1523,7 @@ static int of_qcom_slim_ngd_register(struct device *parent,
 		if (of_property_read_u32(node, "reg", &id))
 			continue;

-		ngd = kzalloc(sizeof(*ngd), GFP_KERNEL);
+		ngd = kzalloc_obj(*ngd, GFP_KERNEL);
 		if (!ngd)
 			return -ENOMEM;

diff --git a/drivers/slimbus/stream.c b/drivers/slimbus/stream.c
index 863ab3075d7e..48711d4cf110 100644
--- a/drivers/slimbus/stream.c
+++ b/drivers/slimbus/stream.c
@@ -103,7 +103,7 @@ struct slim_stream_runtime *slim_stream_allocate(struct slim_device *dev,
 {
 	struct slim_stream_runtime *rt;

-	rt = kzalloc(sizeof(*rt), GFP_KERNEL);
+	rt = kzalloc_obj(*rt, GFP_KERNEL);
 	if (!rt)
 		return ERR_PTR(-ENOMEM);

@@ -214,7 +214,7 @@ int slim_stream_prepare(struct slim_stream_runtime *rt,
 	}

 	num_ports = hweight32(cfg->port_mask);
-	rt->ports = kcalloc(num_ports, sizeof(*port), GFP_KERNEL);
+	rt->ports = kzalloc_objs(*port, num_ports, GFP_KERNEL);
 	if (!rt->ports)
 		return -ENOMEM;

diff --git a/drivers/soc/amlogic/meson-gx-socinfo.c b/drivers/soc/amlogic/meson-gx-socinfo.c
index dcb75baaff24..f10aa0aab8d3 100644
--- a/drivers/soc/amlogic/meson-gx-socinfo.c
+++ b/drivers/soc/amlogic/meson-gx-socinfo.c
@@ -188,7 +188,7 @@ static int __init meson_gx_socinfo_init(void)
 		return -EINVAL;
 	}

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENODEV;

diff --git a/drivers/soc/amlogic/meson-mx-socinfo.c b/drivers/soc/amlogic/meson-mx-socinfo.c
index 92125dd65f33..e9003fd55294 100644
--- a/drivers/soc/amlogic/meson-mx-socinfo.c
+++ b/drivers/soc/amlogic/meson-mx-socinfo.c
@@ -146,7 +146,7 @@ static int __init meson_mx_socinfo_init(void)
 	if (ret < 0)
 		return ret;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENODEV;

diff --git a/drivers/soc/apple/rtkit.c b/drivers/soc/apple/rtkit.c
index 4ad4f964fde7..0cde365c75bb 100644
--- a/drivers/soc/apple/rtkit.c
+++ b/drivers/soc/apple/rtkit.c
@@ -590,7 +590,7 @@ static void apple_rtkit_rx(struct apple_mbox *mbox, struct apple_mbox_msg msg,
 	    rtk->ops->recv_message_early(rtk->cookie, ep, msg.msg0))
 		return;

-	work = kzalloc(sizeof(*work), GFP_ATOMIC);
+	work = kzalloc_obj(*work, GFP_ATOMIC);
 	if (!work)
 		return;

@@ -667,7 +667,7 @@ struct apple_rtkit *apple_rtkit_init(struct device *dev, void *cookie,
 	if (!ops)
 		return ERR_PTR(-EINVAL);

-	rtk = kzalloc(sizeof(*rtk), GFP_KERNEL);
+	rtk = kzalloc_obj(*rtk, GFP_KERNEL);
 	if (!rtk)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/soc/aspeed/aspeed-p2a-ctrl.c b/drivers/soc/aspeed/aspeed-p2a-ctrl.c
index 3be2e1b1085b..bbab8dabd940 100644
--- a/drivers/soc/aspeed/aspeed-p2a-ctrl.c
+++ b/drivers/soc/aspeed/aspeed-p2a-ctrl.c
@@ -238,7 +238,7 @@ static int aspeed_p2a_open(struct inode *inode, struct file *file)
 {
 	struct aspeed_p2a_user *priv;

-	priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kmalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/soc/aspeed/aspeed-socinfo.c b/drivers/soc/aspeed/aspeed-socinfo.c
index 67e9ac3d08ec..b4009164c84c 100644
--- a/drivers/soc/aspeed/aspeed-socinfo.c
+++ b/drivers/soc/aspeed/aspeed-socinfo.c
@@ -113,7 +113,7 @@ static int __init aspeed_socinfo_init(void)
 	}
 	of_node_put(np);

-	attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_obj(*attrs, GFP_KERNEL);
 	if (!attrs)
 		return -ENODEV;

diff --git a/drivers/soc/atmel/soc.c b/drivers/soc/atmel/soc.c
index 09347bccdb1d..88de5aa41191 100644
--- a/drivers/soc/atmel/soc.c
+++ b/drivers/soc/atmel/soc.c
@@ -368,7 +368,7 @@ struct soc_device * __init at91_soc_init(const struct at91_soc *socs)
 		return NULL;
 	}

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return NULL;

diff --git a/drivers/soc/bcm/brcmstb/common.c b/drivers/soc/bcm/brcmstb/common.c
index 2a010881f4b6..e9cf6897d8bf 100644
--- a/drivers/soc/bcm/brcmstb/common.c
+++ b/drivers/soc/bcm/brcmstb/common.c
@@ -82,7 +82,7 @@ static int __init brcmstb_soc_device_init(void)
 	if (!sun_top_ctrl)
 		return ret;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/soc/cirrus/soc-ep93xx.c b/drivers/soc/cirrus/soc-ep93xx.c
index 3e79b3b13aef..d42813382977 100644
--- a/drivers/soc/cirrus/soc-ep93xx.c
+++ b/drivers/soc/cirrus/soc-ep93xx.c
@@ -92,7 +92,7 @@ static struct auxiliary_device __init *ep93xx_adev_alloc(struct device *parent,
 	struct auxiliary_device *adev;
 	int ret;

-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (!rdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/soc/dove/pmu.c b/drivers/soc/dove/pmu.c
index dd8ade8e9ee8..64b05aa80d2c 100644
--- a/drivers/soc/dove/pmu.c
+++ b/drivers/soc/dove/pmu.c
@@ -311,7 +311,7 @@ int __init dove_init_pmu_legacy(const struct dove_pmu_initdata *initdata)
 	struct pmu_data *pmu;
 	int ret;

-	pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
+	pmu = kzalloc_obj(*pmu, GFP_KERNEL);
 	if (!pmu)
 		return -ENOMEM;

@@ -324,7 +324,7 @@ int __init dove_init_pmu_legacy(const struct dove_pmu_initdata *initdata)
 	     domain_initdata++) {
 		struct pmu_domain *domain;

-		domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+		domain = kzalloc_obj(*domain, GFP_KERNEL);
 		if (domain) {
 			domain->pmu = pmu;
 			domain->pwr_mask = domain_initdata->pwr_mask;
@@ -386,7 +386,7 @@ int __init dove_init_pmu(void)
 		return 0;
 	}

-	pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
+	pmu = kzalloc_obj(*pmu, GFP_KERNEL);
 	if (!pmu)
 		return -ENOMEM;

@@ -408,7 +408,7 @@ int __init dove_init_pmu(void)
 		struct of_phandle_args args;
 		struct pmu_domain *domain;

-		domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+		domain = kzalloc_obj(*domain, GFP_KERNEL);
 		if (!domain)
 			break;

diff --git a/drivers/soc/fsl/dpaa2-console.c b/drivers/soc/fsl/dpaa2-console.c
index 6310f54e68a2..841e0510151c 100644
--- a/drivers/soc/fsl/dpaa2-console.c
+++ b/drivers/soc/fsl/dpaa2-console.c
@@ -111,7 +111,7 @@ static int dpaa2_generic_console_open(struct inode *node, struct file *fp,
 	u64 base_addr;
 	int err;

-	cd = kmalloc(sizeof(*cd), GFP_KERNEL);
+	cd = kmalloc_obj(*cd, GFP_KERNEL);
 	if (!cd)
 		return -ENOMEM;

diff --git a/drivers/soc/fsl/dpio/dpio-service.c b/drivers/soc/fsl/dpio/dpio-service.c
index 0b60ed16297c..2a73d4e846ff 100644
--- a/drivers/soc/fsl/dpio/dpio-service.c
+++ b/drivers/soc/fsl/dpio/dpio-service.c
@@ -133,7 +133,7 @@ static void dpaa2_io_dim_work(struct work_struct *w)
 struct dpaa2_io *dpaa2_io_create(const struct dpaa2_io_desc *desc,
 				 struct device *dev)
 {
-	struct dpaa2_io *obj = kmalloc(sizeof(*obj), GFP_KERNEL);
+	struct dpaa2_io *obj = kmalloc_obj(*obj, GFP_KERNEL);
 	u32 qman_256_cycles_per_ns;

 	if (!obj)
@@ -523,7 +523,7 @@ int dpaa2_io_service_enqueue_multiple_desc_fq(struct dpaa2_io *d,
 	struct qbman_eq_desc *ed;
 	int i, ret;

-	ed = kcalloc(32, sizeof(struct qbman_eq_desc), GFP_KERNEL);
+	ed = kzalloc_objs(struct qbman_eq_desc, 32, GFP_KERNEL);
 	if (!ed)
 		return -ENOMEM;

@@ -658,7 +658,7 @@ struct dpaa2_io_store *dpaa2_io_store_create(unsigned int max_frames,
 	if (!max_frames || (max_frames > 32))
 		return NULL;

-	ret = kmalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kmalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

diff --git a/drivers/soc/fsl/dpio/qbman-portal.c b/drivers/soc/fsl/dpio/qbman-portal.c
index 0a3fb6c115f4..b6adc87f473a 100644
--- a/drivers/soc/fsl/dpio/qbman-portal.c
+++ b/drivers/soc/fsl/dpio/qbman-portal.c
@@ -246,7 +246,7 @@ static inline u8 qm_cyc_diff(u8 ringsize, u8 first, u8 last)
  */
 struct qbman_swp *qbman_swp_init(const struct qbman_swp_desc *d)
 {
-	struct qbman_swp *p = kzalloc(sizeof(*p), GFP_KERNEL);
+	struct qbman_swp *p = kzalloc_obj(*p, GFP_KERNEL);
 	u32 reg;
 	u32 mask_size;
 	u32 eqcr_pi;
diff --git a/drivers/soc/fsl/guts.c b/drivers/soc/fsl/guts.c
index 6bf3e6a980ff..055d0b61ea1d 100644
--- a/drivers/soc/fsl/guts.c
+++ b/drivers/soc/fsl/guts.c
@@ -213,7 +213,7 @@ static int __init fsl_guts_init(void)
 	of_node_put(np);

 	/* Register soc device */
-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/drivers/soc/fsl/qbman/bman.c b/drivers/soc/fsl/qbman/bman.c
index 6cc1847e534a..8993cf2d47b5 100644
--- a/drivers/soc/fsl/qbman/bman.c
+++ b/drivers/soc/fsl/qbman/bman.c
@@ -700,7 +700,7 @@ struct bman_pool *bman_new_pool(void)
 	if (bm_alloc_bpid_range(&bpid, 1))
 		return NULL;

-	pool = kmalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kmalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		goto err;

diff --git a/drivers/soc/fsl/qbman/qman.c b/drivers/soc/fsl/qbman/qman.c
index 6b392b3ad4b1..210438ea923e 100644
--- a/drivers/soc/fsl/qbman/qman.c
+++ b/drivers/soc/fsl/qbman/qman.c
@@ -1270,7 +1270,7 @@ static int qman_create_portal(struct qman_portal *portal,
 	qm_dqrr_set_ithresh(p, QMAN_PIRQ_DQRR_ITHRESH);
 	qm_mr_set_ithresh(p, QMAN_PIRQ_MR_ITHRESH);
 	qm_out(p, QM_REG_ITPR, QMAN_PIRQ_IPERIOD);
-	portal->cgrs = kmalloc_array(2, sizeof(*portal->cgrs), GFP_KERNEL);
+	portal->cgrs = kmalloc_objs(*portal->cgrs, 2, GFP_KERNEL);
 	if (!portal->cgrs)
 		goto fail_cgrs;
 	/* initial snapshot is no-depletion */
diff --git a/drivers/soc/fsl/qe/gpio.c b/drivers/soc/fsl/qe/gpio.c
index c54154b404df..488770405e99 100644
--- a/drivers/soc/fsl/qe/gpio.c
+++ b/drivers/soc/fsl/qe/gpio.c
@@ -161,7 +161,7 @@ struct qe_pin *qe_pin_request(struct device *dev, int index)
 	int gpio_num;
 	int err;

-	qe_pin = kzalloc(sizeof(*qe_pin), GFP_KERNEL);
+	qe_pin = kzalloc_obj(*qe_pin, GFP_KERNEL);
 	if (!qe_pin) {
 		dev_dbg(dev, "%s: can't allocate memory\n", __func__);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/soc/fsl/qe/qe_common.c b/drivers/soc/fsl/qe/qe_common.c
index 02c29f5f86d3..c77a068f64ff 100644
--- a/drivers/soc/fsl/qe/qe_common.c
+++ b/drivers/soc/fsl/qe/qe_common.c
@@ -118,7 +118,7 @@ static s32 cpm_muram_alloc_common(unsigned long size,
 	struct muram_block *entry;
 	s32 start;

-	entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kmalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return -ENOMEM;
 	start = gen_pool_alloc_algo(muram_pool, size, algo, data);
diff --git a/drivers/soc/fsl/qe/ucc_fast.c b/drivers/soc/fsl/qe/ucc_fast.c
index 53d8aafc9317..3cb45090fe74 100644
--- a/drivers/soc/fsl/qe/ucc_fast.c
+++ b/drivers/soc/fsl/qe/ucc_fast.c
@@ -191,7 +191,7 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
 		return -EINVAL;
 	}

-	uccf = kzalloc(sizeof(struct ucc_fast_private), GFP_KERNEL);
+	uccf = kzalloc_obj(struct ucc_fast_private, GFP_KERNEL);
 	if (!uccf) {
 		printk(KERN_ERR "%s: Cannot allocate private data\n",
 			__func__);
diff --git a/drivers/soc/fsl/qe/ucc_slow.c b/drivers/soc/fsl/qe/ucc_slow.c
index d5ac1ac0ed3c..335c8629a316 100644
--- a/drivers/soc/fsl/qe/ucc_slow.c
+++ b/drivers/soc/fsl/qe/ucc_slow.c
@@ -148,7 +148,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
 		return -EINVAL;
 	}

-	uccs = kzalloc(sizeof(struct ucc_slow_private), GFP_KERNEL);
+	uccs = kzalloc_obj(struct ucc_slow_private, GFP_KERNEL);
 	if (!uccs) {
 		printk(KERN_ERR "%s: Cannot allocate private data\n",
 			__func__);
diff --git a/drivers/soc/hisilicon/kunpeng_hccs.c b/drivers/soc/hisilicon/kunpeng_hccs.c
index 006fec47ea10..62e3b86fa42d 100644
--- a/drivers/soc/hisilicon/kunpeng_hccs.c
+++ b/drivers/soc/hisilicon/kunpeng_hccs.c
@@ -616,8 +616,7 @@ static int hccs_get_all_port_info_on_die(struct hccs_dev *hdev,
 	int ret;
 	u8 i;

-	attrs = kcalloc(die->port_num, sizeof(struct hccs_port_attr),
-			GFP_KERNEL);
+	attrs = kzalloc_objs(struct hccs_port_attr, die->port_num, GFP_KERNEL);
 	if (!attrs)
 		return -ENOMEM;

diff --git a/drivers/soc/imx/soc-imx.c b/drivers/soc/imx/soc-imx.c
index fab668c83f98..5d39cc3f5e7d 100644
--- a/drivers/soc/imx/soc-imx.c
+++ b/drivers/soc/imx/soc-imx.c
@@ -40,7 +40,7 @@ static int __init imx_soc_device_init(void)
 	if (!__mxc_cpu_type)
 		return 0;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c
index 67e5879374ac..a0f14aa28106 100644
--- a/drivers/soc/mediatek/mtk-cmdq-helper.c
+++ b/drivers/soc/mediatek/mtk-cmdq-helper.c
@@ -114,7 +114,7 @@ struct cmdq_client *cmdq_mbox_create(struct device *dev, int index)
 {
 	struct cmdq_client *client;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return (struct cmdq_client *)-ENOMEM;

diff --git a/drivers/soc/microchip/mpfs-sys-controller.c b/drivers/soc/microchip/mpfs-sys-controller.c
index 30bc45d17d34..4ce94066a5a8 100644
--- a/drivers/soc/microchip/mpfs-sys-controller.c
+++ b/drivers/soc/microchip/mpfs-sys-controller.c
@@ -132,7 +132,7 @@ static int mpfs_sys_controller_probe(struct platform_device *pdev)
 	struct device_node *np;
 	int i, ret;

-	sys_controller = kzalloc(sizeof(*sys_controller), GFP_KERNEL);
+	sys_controller = kzalloc_obj(*sys_controller, GFP_KERNEL);
 	if (!sys_controller)
 		return -ENOMEM;

diff --git a/drivers/soc/nuvoton/wpcm450-soc.c b/drivers/soc/nuvoton/wpcm450-soc.c
index c5e0d11c383b..dc1242bda713 100644
--- a/drivers/soc/nuvoton/wpcm450-soc.c
+++ b/drivers/soc/nuvoton/wpcm450-soc.c
@@ -74,7 +74,7 @@ static int __init wpcm450_soc_init(void)
 		return -ENODEV;
 	}

-	attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_obj(*attr, GFP_KERNEL);
 	if (!attr)
 		return -ENOMEM;

diff --git a/drivers/soc/qcom/apr.c b/drivers/soc/qcom/apr.c
index a956c407ce03..2c46a25abb24 100644
--- a/drivers/soc/qcom/apr.c
+++ b/drivers/soc/qcom/apr.c
@@ -95,7 +95,7 @@ gpr_port_t *gpr_alloc_port(struct apr_device *gdev, struct device *dev,
 	struct pkt_router_svc *svc;
 	int id;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return ERR_PTR(-ENOMEM);

@@ -171,7 +171,7 @@ static int apr_callback(struct rpmsg_device *rpdev, void *buf,
 		return -EINVAL;
 	}

-	abuf = kzalloc(struct_size(abuf, buf, len), GFP_ATOMIC);
+	abuf = kzalloc_flex(*abuf, buf, len, GFP_ATOMIC);
 	if (!abuf)
 		return -ENOMEM;

@@ -416,7 +416,7 @@ static int apr_add_device(struct device *dev, struct device_node *np,
 	struct pkt_router_svc *svc;
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return -ENOMEM;

diff --git a/drivers/soc/qcom/llcc-qcom.c b/drivers/soc/qcom/llcc-qcom.c
index 1abfda7a58f2..84ceba84d51a 100644
--- a/drivers/soc/qcom/llcc-qcom.c
+++ b/drivers/soc/qcom/llcc-qcom.c
@@ -4447,7 +4447,7 @@ struct llcc_slice_desc *llcc_slice_getd(u32 uid)
 	if (count == sz || !cfg)
 		return ERR_PTR(-ENODEV);

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/soc/qcom/ocmem.c b/drivers/soc/qcom/ocmem.c
index 71130a2f62e9..0a6094e17e66 100644
--- a/drivers/soc/qcom/ocmem.c
+++ b/drivers/soc/qcom/ocmem.c
@@ -226,7 +226,7 @@ struct ocmem_buf *ocmem_allocate(struct ocmem *ocmem, enum ocmem_client client,
 	if (test_and_set_bit_lock(BIT(client), &ocmem->active_allocations))
 		return ERR_PTR(-EBUSY);

-	struct ocmem_buf *buf __free(kfree) = kzalloc(sizeof(*buf), GFP_KERNEL);
+	struct ocmem_buf *buf __free(kfree) = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf) {
 		ret = -ENOMEM;
 		goto err_unlock;
diff --git a/drivers/soc/qcom/pdr_interface.c b/drivers/soc/qcom/pdr_interface.c
index 71be378d2e43..cd36f3f0b80f 100644
--- a/drivers/soc/qcom/pdr_interface.c
+++ b/drivers/soc/qcom/pdr_interface.c
@@ -322,7 +322,7 @@ static void pdr_indication_cb(struct qmi_handle *qmi,
 		ind_msg->service_path, ind_msg->curr_state,
 		ind_msg->transaction_id);

-	ind = kzalloc(sizeof(*ind), GFP_KERNEL);
+	ind = kzalloc_obj(*ind, GFP_KERNEL);
 	if (!ind)
 		return;

@@ -396,8 +396,8 @@ static int pdr_locate_service(struct pdr_handle *pdr, struct pdr_service *pds)
 	int domains_read = 0;
 	int ret, i;

-	struct servreg_get_domain_list_resp *resp __free(kfree) = kzalloc(sizeof(*resp),
-									  GFP_KERNEL);
+	struct servreg_get_domain_list_resp *resp __free(kfree) = kzalloc_obj(*resp,
+									      GFP_KERNEL);
 	if (!resp)
 		return -ENOMEM;

@@ -520,7 +520,7 @@ struct pdr_service *pdr_add_lookup(struct pdr_handle *pdr,
 	    !service_path || strlen(service_path) > SERVREG_NAME_LENGTH)
 		return ERR_PTR(-EINVAL);

-	struct pdr_service *pds __free(kfree) = kzalloc(sizeof(*pds), GFP_KERNEL);
+	struct pdr_service *pds __free(kfree) = kzalloc_obj(*pds, GFP_KERNEL);
 	if (!pds)
 		return ERR_PTR(-ENOMEM);

@@ -645,7 +645,7 @@ struct pdr_handle *pdr_handle_alloc(void (*status)(int state,
 	if (!status)
 		return ERR_PTR(-EINVAL);

-	struct pdr_handle *pdr __free(kfree) = kzalloc(sizeof(*pdr), GFP_KERNEL);
+	struct pdr_handle *pdr __free(kfree) = kzalloc_obj(*pdr, GFP_KERNEL);
 	if (!pdr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/soc/qcom/qcom_pd_mapper.c b/drivers/soc/qcom/qcom_pd_mapper.c
index 1bcbe69688d2..cb92c214311b 100644
--- a/drivers/soc/qcom/qcom_pd_mapper.c
+++ b/drivers/soc/qcom/qcom_pd_mapper.c
@@ -77,7 +77,7 @@ static int qcom_pdm_add_service_domain(struct qcom_pdm_data *data,
 				return -EBUSY;
 		}
 	} else {
-		service = kzalloc(sizeof(*service), GFP_KERNEL);
+		service = kzalloc_obj(*service, GFP_KERNEL);
 		if (!service)
 			return -ENOMEM;

@@ -87,7 +87,7 @@ static int qcom_pdm_add_service_domain(struct qcom_pdm_data *data,
 		list_add_tail(&service->list, &data->services);
 	}

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain) {
 		if (list_empty(&service->domains)) {
 			list_del(&service->list);
@@ -158,7 +158,7 @@ static void qcom_pdm_get_domain_list(struct qmi_handle *qmi,
 	u32 offset;
 	int ret;

-	rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
+	rsp = kzalloc_obj(*rsp, GFP_KERNEL);
 	if (!rsp)
 		return;

@@ -635,7 +635,7 @@ static struct qcom_pdm_data *qcom_pdm_start(void)
 		return ERR_PTR(-ENODEV);
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/soc/qcom/qmi_interface.c b/drivers/soc/qcom/qmi_interface.c
index 6500f863aae5..59a11fa572a7 100644
--- a/drivers/soc/qcom/qmi_interface.c
+++ b/drivers/soc/qcom/qmi_interface.c
@@ -44,7 +44,7 @@ static void qmi_recv_new_server(struct qmi_handle *qmi,
 	if (!node && !port)
 		return;

-	svc = kzalloc(sizeof(*svc), GFP_KERNEL);
+	svc = kzalloc_obj(*svc, GFP_KERNEL);
 	if (!svc)
 		return;

@@ -209,7 +209,7 @@ int qmi_add_lookup(struct qmi_handle *qmi, unsigned int service,
 {
 	struct qmi_service *svc;

-	svc = kzalloc(sizeof(*svc), GFP_KERNEL);
+	svc = kzalloc_obj(*svc, GFP_KERNEL);
 	if (!svc)
 		return -ENOMEM;

@@ -273,7 +273,7 @@ int qmi_add_server(struct qmi_handle *qmi, unsigned int service,
 {
 	struct qmi_service *svc;

-	svc = kzalloc(sizeof(*svc), GFP_KERNEL);
+	svc = kzalloc_obj(*svc, GFP_KERNEL);
 	if (!svc)
 		return -ENOMEM;

diff --git a/drivers/soc/qcom/rmtfs_mem.c b/drivers/soc/qcom/rmtfs_mem.c
index 1b32469f2789..cec7912f74dd 100644
--- a/drivers/soc/qcom/rmtfs_mem.c
+++ b/drivers/soc/qcom/rmtfs_mem.c
@@ -192,7 +192,7 @@ static int qcom_rmtfs_mem_probe(struct platform_device *pdev)

 	}

-	rmtfs_mem = kzalloc(sizeof(*rmtfs_mem), GFP_KERNEL);
+	rmtfs_mem = kzalloc_obj(*rmtfs_mem, GFP_KERNEL);
 	if (!rmtfs_mem)
 		return -ENOMEM;

diff --git a/drivers/soc/qcom/rpmh.c b/drivers/soc/qcom/rpmh.c
index 8903ed956312..ca37da3dc2b1 100644
--- a/drivers/soc/qcom/rpmh.c
+++ b/drivers/soc/qcom/rpmh.c
@@ -121,7 +121,7 @@ static struct cache_req *cache_rpm_request(struct rpmh_ctrlr *ctrlr,
 	if (req)
 		goto existing;

-	req = kzalloc(sizeof(*req), GFP_ATOMIC);
+	req = kzalloc_obj(*req, GFP_ATOMIC);
 	if (!req) {
 		req = ERR_PTR(-ENOMEM);
 		goto unlock;
@@ -225,7 +225,7 @@ int rpmh_write_async(const struct device *dev, enum rpmh_state state,
 	struct rpmh_request *rpm_msg;
 	int ret;

-	rpm_msg = kzalloc(sizeof(*rpm_msg), GFP_ATOMIC);
+	rpm_msg = kzalloc_obj(*rpm_msg, GFP_ATOMIC);
 	if (!rpm_msg)
 		return -ENOMEM;
 	rpm_msg->needs_free = true;
diff --git a/drivers/soc/qcom/smem_state.c b/drivers/soc/qcom/smem_state.c
index cc5be8019b6a..3d9bc96dfd2d 100644
--- a/drivers/soc/qcom/smem_state.c
+++ b/drivers/soc/qcom/smem_state.c
@@ -197,7 +197,7 @@ struct qcom_smem_state *qcom_smem_state_register(struct device_node *of_node,
 {
 	struct qcom_smem_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/soc/renesas/renesas-soc.c b/drivers/soc/renesas/renesas-soc.c
index ee4f17bb4db4..d170743d576a 100644
--- a/drivers/soc/renesas/renesas-soc.c
+++ b/drivers/soc/renesas/renesas-soc.c
@@ -487,7 +487,7 @@ static int __init renesas_soc_init(void)
 		chipid = ioremap(family->reg, 4);
 	}

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr) {
 		if (chipid)
 			iounmap(chipid);
diff --git a/drivers/soc/renesas/rz-sysc.c b/drivers/soc/renesas/rz-sysc.c
index ae727d9c8cc5..a3982a8dfba8 100644
--- a/drivers/soc/renesas/rz-sysc.c
+++ b/drivers/soc/renesas/rz-sysc.c
@@ -110,7 +110,8 @@ static int rz_sysc_probe(struct platform_device *pdev)
 	struct rz_sysc *sysc;
 	int ret;

-	struct regmap_config *regmap_cfg __free(kfree) = kzalloc(sizeof(*regmap_cfg), GFP_KERNEL);
+	struct regmap_config *regmap_cfg __free(kfree) = kzalloc_obj(*regmap_cfg,
+								     GFP_KERNEL);
 	if (!regmap_cfg)
 		return -ENOMEM;

diff --git a/drivers/soc/tegra/fuse/fuse-tegra.c b/drivers/soc/tegra/fuse/fuse-tegra.c
index 74d2fedea71c..165fad4f548e 100644
--- a/drivers/soc/tegra/fuse/fuse-tegra.c
+++ b/drivers/soc/tegra/fuse/fuse-tegra.c
@@ -441,7 +441,7 @@ struct device *tegra_soc_device_register(void)
 	struct soc_device_attribute *attr;
 	struct soc_device *dev;

-	attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_obj(*attr, GFP_KERNEL);
 	if (!attr)
 		return NULL;

diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
index 9cdbd8ba94be..8f2f83c4ad90 100644
--- a/drivers/soc/tegra/pmc.c
+++ b/drivers/soc/tegra/pmc.c
@@ -1131,11 +1131,11 @@ int tegra_pmc_powergate_sequence_power_up(struct tegra_pmc *pmc,
 	if (!tegra_powergate_is_available(pmc, id))
 		return -EINVAL;

-	pg = kzalloc(sizeof(*pg), GFP_KERNEL);
+	pg = kzalloc_obj(*pg, GFP_KERNEL);
 	if (!pg)
 		return -ENOMEM;

-	pg->clk_rates = kzalloc(sizeof(*pg->clk_rates), GFP_KERNEL);
+	pg->clk_rates = kzalloc_obj(*pg->clk_rates, GFP_KERNEL);
 	if (!pg->clk_rates) {
 		kfree(pg->clks);
 		return -ENOMEM;
@@ -1341,7 +1341,7 @@ static int tegra_powergate_of_get_clks(struct tegra_powergate *pg,
 	if (count == 0)
 		return -ENODEV;

-	pg->clks = kcalloc(count, sizeof(clk), GFP_KERNEL);
+	pg->clks = kzalloc_objs(clk, count, GFP_KERNEL);
 	if (!pg->clks)
 		return -ENOMEM;

@@ -1402,7 +1402,7 @@ static int tegra_powergate_add(struct tegra_pmc *pmc, struct device_node *np)
 	int id, err = 0;
 	bool off;

-	pg = kzalloc(sizeof(*pg), GFP_KERNEL);
+	pg = kzalloc_obj(*pg, GFP_KERNEL);
 	if (!pg)
 		return -ENOMEM;

diff --git a/drivers/soc/ti/k3-socinfo.c b/drivers/soc/ti/k3-socinfo.c
index 42275cb5ba1c..8655f829dc7b 100644
--- a/drivers/soc/ti/k3-socinfo.c
+++ b/drivers/soc/ti/k3-socinfo.c
@@ -163,7 +163,7 @@ static int k3_chipinfo_probe(struct platform_device *pdev)
 	partno_id = (jtag_id & CTRLMMR_WKUP_JTAGID_PARTNO_MASK) >>
 		 CTRLMMR_WKUP_JTAGID_PARTNO_SHIFT;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/drivers/soc/ux500/ux500-soc-id.c b/drivers/soc/ux500/ux500-soc-id.c
index 27d6e25a0115..eb26a601643a 100644
--- a/drivers/soc/ux500/ux500-soc-id.c
+++ b/drivers/soc/ux500/ux500-soc-id.c
@@ -205,7 +205,7 @@ static int __init ux500_soc_device_init(void)

 	ux500_setup_id();

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr) {
 		of_node_put(backupram);
 		return -ENOMEM;
diff --git a/drivers/soc/versatile/soc-integrator.c b/drivers/soc/versatile/soc-integrator.c
index d5099a3386b4..45110efcd4a1 100644
--- a/drivers/soc/versatile/soc-integrator.c
+++ b/drivers/soc/versatile/soc-integrator.c
@@ -123,7 +123,7 @@ static int __init integrator_soc_init(void)
 		return -ENODEV;
 	integrator_coreid = val;

-	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	soc_dev_attr = kzalloc_obj(*soc_dev_attr, GFP_KERNEL);
 	if (!soc_dev_attr)
 		return -ENOMEM;

diff --git a/drivers/soc/xilinx/xlnx_event_manager.c b/drivers/soc/xilinx/xlnx_event_manager.c
index 6fdf4d14b7e7..6a45b1b53caf 100644
--- a/drivers/soc/xilinx/xlnx_event_manager.c
+++ b/drivers/soc/xilinx/xlnx_event_manager.c
@@ -122,7 +122,7 @@ static int xlnx_add_cb_for_notify_event(const u32 node_id, const u32 event, cons

 	if (!present_in_hash) {
 		/* Add new entry if not present in HASH table */
-		eve_data = kmalloc(sizeof(*eve_data), GFP_KERNEL);
+		eve_data = kmalloc_obj(*eve_data, GFP_KERNEL);
 		if (!eve_data)
 			return -ENOMEM;
 		eve_data->key = key;
@@ -130,7 +130,7 @@ static int xlnx_add_cb_for_notify_event(const u32 node_id, const u32 event, cons
 		eve_data->wake = wake;
 		INIT_LIST_HEAD(&eve_data->cb_list_head);

-		cb_data = kmalloc(sizeof(*cb_data), GFP_KERNEL);
+		cb_data = kmalloc_obj(*cb_data, GFP_KERNEL);
 		if (!cb_data) {
 			kfree(eve_data);
 			return -ENOMEM;
@@ -153,7 +153,7 @@ static int xlnx_add_cb_for_notify_event(const u32 node_id, const u32 event, cons
 		}

 		/* Add multiple handler and private data in list */
-		cb_data = kmalloc(sizeof(*cb_data), GFP_KERNEL);
+		cb_data = kmalloc_obj(*cb_data, GFP_KERNEL);
 		if (!cb_data)
 			return -ENOMEM;
 		cb_data->eve_cb = cb_fun;
@@ -179,7 +179,7 @@ static int xlnx_add_cb_for_suspend(event_cb_func_t cb_fun, void *data)
 	}

 	/* Add new entry if not present */
-	eve_data = kmalloc(sizeof(*eve_data), GFP_KERNEL);
+	eve_data = kmalloc_obj(*eve_data, GFP_KERNEL);
 	if (!eve_data)
 		return -ENOMEM;

@@ -187,7 +187,7 @@ static int xlnx_add_cb_for_suspend(event_cb_func_t cb_fun, void *data)
 	eve_data->cb_type = PM_INIT_SUSPEND_CB;
 	INIT_LIST_HEAD(&eve_data->cb_list_head);

-	cb_data = kmalloc(sizeof(*cb_data), GFP_KERNEL);
+	cb_data = kmalloc_obj(*cb_data, GFP_KERNEL);
 	if (!cb_data) {
 		kfree(eve_data);
 		return -ENOMEM;
diff --git a/drivers/soundwire/amd_init.c b/drivers/soundwire/amd_init.c
index 643e94524fe6..e71cc23523e1 100644
--- a/drivers/soundwire/amd_init.c
+++ b/drivers/soundwire/amd_init.c
@@ -98,14 +98,14 @@ static struct sdw_amd_ctx *sdw_amd_probe_controller(struct sdw_amd_res *res)
 	 * the parent .probe.
 	 * If devm_ was used, the memory might never be freed on errors.
 	 */
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

 	ctx->count = count;
 	ctx->link_mask = res->link_mask;
-	struct resource *sdw_res __free(kfree) = kzalloc(sizeof(*sdw_res),
-							 GFP_KERNEL);
+	struct resource *sdw_res __free(kfree) = kzalloc_obj(*sdw_res,
+							     GFP_KERNEL);
 	if (!sdw_res) {
 		kfree(ctx);
 		return NULL;
@@ -205,8 +205,8 @@ int sdw_amd_get_slave_info(struct sdw_amd_ctx *ctx)
 			num_slaves++;
 	}

-	ctx->peripherals = kmalloc(struct_size(ctx->peripherals, array, num_slaves),
-				   GFP_KERNEL);
+	ctx->peripherals = kmalloc_flex(*ctx->peripherals, array, num_slaves,
+					GFP_KERNEL);
 	if (!ctx->peripherals)
 		return -ENOMEM;
 	ctx->peripherals->num_peripherals = num_slaves;
diff --git a/drivers/soundwire/amd_manager.c b/drivers/soundwire/amd_manager.c
index 5fd311ee4107..91dee9499df2 100644
--- a/drivers/soundwire/amd_manager.c
+++ b/drivers/soundwire/amd_manager.c
@@ -718,8 +718,8 @@ static int amd_sdw_hw_params(struct snd_pcm_substream *substream,
 	sconfig.bps = snd_pcm_format_width(params_format(params));

 	/* Port configuration */
-	struct sdw_port_config *pconfig __free(kfree) = kzalloc(sizeof(*pconfig),
-								GFP_KERNEL);
+	struct sdw_port_config *pconfig __free(kfree) = kzalloc_obj(*pconfig,
+								    GFP_KERNEL);
 	if (!pconfig)
 		return -ENOMEM;

@@ -764,7 +764,7 @@ static int amd_set_sdw_stream(struct snd_soc_dai *dai, void *stream, int directi
 		}

 		/* allocate and set dai_runtime info */
-		dai_runtime = kzalloc(sizeof(*dai_runtime), GFP_KERNEL);
+		dai_runtime = kzalloc_obj(*dai_runtime, GFP_KERNEL);
 		if (!dai_runtime)
 			return -ENOMEM;

diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c
index a106e5e482c8..dfdb591c6f6e 100644
--- a/drivers/soundwire/cadence_master.c
+++ b/drivers/soundwire/cadence_master.c
@@ -1846,7 +1846,7 @@ int cdns_set_sdw_stream(struct snd_soc_dai *dai,
 		}

 		/* allocate and set dai_runtime info */
-		dai_runtime = kzalloc(sizeof(*dai_runtime), GFP_KERNEL);
+		dai_runtime = kzalloc_obj(*dai_runtime, GFP_KERNEL);
 		if (!dai_runtime)
 			return -ENOMEM;

diff --git a/drivers/soundwire/debugfs.c b/drivers/soundwire/debugfs.c
index 6068011dd0d9..0e9c48ca76e9 100644
--- a/drivers/soundwire/debugfs.c
+++ b/drivers/soundwire/debugfs.c
@@ -224,7 +224,7 @@ static int do_bpt_sequence(struct sdw_slave *slave, bool write, u8 *buffer)
 	struct sdw_bpt_msg msg = {0};
 	struct sdw_bpt_section *sec;

-	sec = kcalloc(1, sizeof(*sec), GFP_KERNEL);
+	sec = kzalloc_objs(*sec, 1, GFP_KERNEL);
 	if (!sec)
 		return -ENOMEM;
 	msg.sections = 1;
diff --git a/drivers/soundwire/generic_bandwidth_allocation.c b/drivers/soundwire/generic_bandwidth_allocation.c
index 530ac66ac6fa..f5a7f404aacb 100644
--- a/drivers/soundwire/generic_bandwidth_allocation.c
+++ b/drivers/soundwire/generic_bandwidth_allocation.c
@@ -402,7 +402,7 @@ static int sdw_compute_port_params(struct sdw_bus *bus, struct sdw_stream_runtim
 	if (group.count == 0)
 		goto out;

-	params = kcalloc(group.count, sizeof(*params), GFP_KERNEL);
+	params = kzalloc_objs(*params, group.count, GFP_KERNEL);
 	if (!params) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c
index 9db78f3d7615..5b4d84ceecff 100644
--- a/drivers/soundwire/intel.c
+++ b/drivers/soundwire/intel.c
@@ -769,8 +769,8 @@ static int intel_hw_params(struct snd_pcm_substream *substream,
 	sconfig.bps = snd_pcm_format_width(params_format(params));

 	/* Port configuration */
-	struct sdw_port_config *pconfig __free(kfree) = kzalloc(sizeof(*pconfig),
-								GFP_KERNEL);
+	struct sdw_port_config *pconfig __free(kfree) = kzalloc_obj(*pconfig,
+								    GFP_KERNEL);
 	if (!pconfig)
 		return -ENOMEM;

diff --git a/drivers/soundwire/intel_ace2x.c b/drivers/soundwire/intel_ace2x.c
index 1ed0251d2592..8a37d185cbca 100644
--- a/drivers/soundwire/intel_ace2x.c
+++ b/drivers/soundwire/intel_ace2x.c
@@ -127,7 +127,7 @@ static int intel_ace2x_bpt_open_stream(struct sdw_intel *sdw, struct sdw_slave *
 	sconfig.bps = 32; /* this is required for BPT/BRA */

 	/* Port configuration */
-	pconfig = kcalloc(2, sizeof(*pconfig), GFP_KERNEL);
+	pconfig = kzalloc_objs(*pconfig, 2, GFP_KERNEL);
 	if (!pconfig) {
 		ret =  -ENOMEM;
 		goto remove_slave;
@@ -747,8 +747,8 @@ static int intel_hw_params(struct snd_pcm_substream *substream,
 	sconfig.bps = snd_pcm_format_width(params_format(params));

 	/* Port configuration */
-	struct sdw_port_config *pconfig __free(kfree) = kzalloc(sizeof(*pconfig),
-								GFP_KERNEL);
+	struct sdw_port_config *pconfig __free(kfree) = kzalloc_obj(*pconfig,
+								    GFP_KERNEL);
 	if (!pconfig)
 		return -ENOMEM;

diff --git a/drivers/soundwire/intel_init.c b/drivers/soundwire/intel_init.c
index 4ffdabaf9693..982d25f92c7c 100644
--- a/drivers/soundwire/intel_init.c
+++ b/drivers/soundwire/intel_init.c
@@ -40,7 +40,7 @@ static struct sdw_intel_link_dev *intel_link_dev_register(struct sdw_intel_res *
 	struct auxiliary_device *auxdev;
 	int ret;

-	ldev = kzalloc(sizeof(*ldev), GFP_KERNEL);
+	ldev = kzalloc_obj(*ldev, GFP_KERNEL);
 	if (!ldev)
 		return ERR_PTR(-ENOMEM);

@@ -186,7 +186,7 @@ static struct sdw_intel_ctx
 	 * the parent .probe.
 	 * If devm_ was used, the memory might never be freed on errors.
 	 */
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

@@ -198,7 +198,7 @@ static struct sdw_intel_ctx
 	 * If some links are disabled, the link pointer will remain NULL. Given that the
 	 * number of links is small, this is simpler than using a list to keep track of links.
 	 */
-	ctx->ldev = kcalloc(ctx->count, sizeof(*ctx->ldev), GFP_KERNEL);
+	ctx->ldev = kzalloc_objs(*ctx->ldev, ctx->count, GFP_KERNEL);
 	if (!ctx->ldev) {
 		kfree(ctx);
 		return NULL;
@@ -253,8 +253,8 @@ static struct sdw_intel_ctx
 			num_slaves++;
 	}

-	ctx->peripherals = kmalloc(struct_size(ctx->peripherals, array, num_slaves),
-				   GFP_KERNEL);
+	ctx->peripherals = kmalloc_flex(*ctx->peripherals, array, num_slaves,
+					GFP_KERNEL);
 	if (!ctx->peripherals)
 		goto err;
 	ctx->peripherals->num_peripherals = num_slaves;
diff --git a/drivers/soundwire/master.c b/drivers/soundwire/master.c
index b2c64512739d..a0f94877bc91 100644
--- a/drivers/soundwire/master.c
+++ b/drivers/soundwire/master.c
@@ -133,7 +133,7 @@ int sdw_master_device_add(struct sdw_bus *bus, struct device *parent,
 	if (!parent)
 		return -EINVAL;

-	md = kzalloc(sizeof(*md), GFP_KERNEL);
+	md = kzalloc_obj(*md, GFP_KERNEL);
 	if (!md)
 		return -ENOMEM;

diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c
index 8102a1b0d516..a85b9ecf1a05 100644
--- a/drivers/soundwire/qcom.c
+++ b/drivers/soundwire/qcom.c
@@ -1230,8 +1230,9 @@ static int qcom_swrm_stream_alloc_ports(struct qcom_swrm_ctrl *ctrl,
 	unsigned long *port_mask;
 	int maxport, pn, nports = 0;
 	unsigned int m_port;
-	struct sdw_port_config *pconfig __free(kfree) = kcalloc(ctrl->nports,
-								sizeof(*pconfig), GFP_KERNEL);
+	struct sdw_port_config *pconfig __free(kfree) = kzalloc_objs(*pconfig,
+								     ctrl->nports,
+								     GFP_KERNEL);
 	if (!pconfig)
 		return -ENOMEM;

diff --git a/drivers/soundwire/slave.c b/drivers/soundwire/slave.c
index d933cebad52b..45e80b9496f4 100644
--- a/drivers/soundwire/slave.c
+++ b/drivers/soundwire/slave.c
@@ -32,7 +32,7 @@ int sdw_slave_add(struct sdw_bus *bus,
 	int ret;
 	int i;

-	slave = kzalloc(sizeof(*slave), GFP_KERNEL);
+	slave = kzalloc_obj(*slave, GFP_KERNEL);
 	if (!slave)
 		return -ENOMEM;

diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c
index 38c9dbd35606..c6e3f911371b 100644
--- a/drivers/soundwire/stream.c
+++ b/drivers/soundwire/stream.c
@@ -748,11 +748,11 @@ static int sdw_bank_switch(struct sdw_bus *bus, int m_rt_count)
 	int ret;
 	u16 addr;

-	wr_msg = kzalloc(sizeof(*wr_msg), GFP_KERNEL);
+	wr_msg = kzalloc_obj(*wr_msg, GFP_KERNEL);
 	if (!wr_msg)
 		return -ENOMEM;

-	wbuf = kzalloc(sizeof(*wbuf), GFP_KERNEL);
+	wbuf = kzalloc_obj(*wbuf, GFP_KERNEL);
 	if (!wbuf) {
 		ret = -ENOMEM;
 		goto error_1;
@@ -956,7 +956,7 @@ static struct sdw_port_runtime *sdw_port_alloc(struct list_head *port_list)
 {
 	struct sdw_port_runtime *p_rt;

-	p_rt = kzalloc(sizeof(*p_rt), GFP_KERNEL);
+	p_rt = kzalloc_obj(*p_rt, GFP_KERNEL);
 	if (!p_rt)
 		return NULL;

@@ -1131,7 +1131,7 @@ static struct sdw_slave_runtime
 {
 	struct sdw_slave_runtime *s_rt;

-	s_rt = kzalloc(sizeof(*s_rt), GFP_KERNEL);
+	s_rt = kzalloc_obj(*s_rt, GFP_KERNEL);
 	if (!s_rt)
 		return NULL;

@@ -1241,7 +1241,7 @@ static struct sdw_master_runtime
 		}
 	}

-	m_rt = kzalloc(sizeof(*m_rt), GFP_KERNEL);
+	m_rt = kzalloc_obj(*m_rt, GFP_KERNEL);
 	if (!m_rt)
 		return NULL;

@@ -1875,7 +1875,7 @@ struct sdw_stream_runtime *sdw_alloc_stream(const char *stream_name, enum sdw_st
 {
 	struct sdw_stream_runtime *stream;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		return NULL;

diff --git a/drivers/spi/spi-amlogic-spifc-a4.c b/drivers/spi/spi-amlogic-spifc-a4.c
index 35a7c4965e11..786d66304c3d 100644
--- a/drivers/spi/spi-amlogic-spifc-a4.c
+++ b/drivers/spi/spi-amlogic-spifc-a4.c
@@ -986,7 +986,7 @@ static int aml_sfc_ecc_init_ctx(struct nand_device *nand)

 	nand->ecc.ctx.conf.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;

-	ecc_cfg = kzalloc(sizeof(*ecc_cfg), GFP_KERNEL);
+	ecc_cfg = kzalloc_obj(*ecc_cfg, GFP_KERNEL);
 	if (!ecc_cfg)
 		return -ENOMEM;

diff --git a/drivers/spi/spi-at91-usart.c b/drivers/spi/spi-at91-usart.c
index bbe97ce89a2f..40890068d840 100644
--- a/drivers/spi/spi-at91-usart.c
+++ b/drivers/spi/spi-at91-usart.c
@@ -364,7 +364,7 @@ static int at91_usart_spi_setup(struct spi_device *spi)
 		mr &= ~US_MR_LOOP;

 	if (!ausd) {
-		ausd = kzalloc(sizeof(*ausd), GFP_KERNEL);
+		ausd = kzalloc_obj(*ausd, GFP_KERNEL);
 		if (!ausd)
 			return -ENOMEM;

diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
index d71c0dbf1f38..ff4bf4e6bdb5 100644
--- a/drivers/spi/spi-atmel.c
+++ b/drivers/spi/spi-atmel.c
@@ -1300,7 +1300,7 @@ static int atmel_spi_setup(struct spi_device *spi)

 	asd = spi->controller_state;
 	if (!asd) {
-		asd = kzalloc(sizeof(struct atmel_spi_device), GFP_KERNEL);
+		asd = kzalloc_obj(struct atmel_spi_device, GFP_KERNEL);
 		if (!asd)
 			return -ENOMEM;

diff --git a/drivers/spi/spi-axi-spi-engine.c b/drivers/spi/spi-axi-spi-engine.c
index c75e8da049f7..b22c53c3e5b7 100644
--- a/drivers/spi/spi-axi-spi-engine.c
+++ b/drivers/spi/spi-axi-spi-engine.c
@@ -815,7 +815,7 @@ static int spi_engine_optimize_message(struct spi_message *msg)
 	p_dry.length = 0;
 	spi_engine_compile_message(msg, true, &p_dry);

-	p = kzalloc(struct_size(p, instructions, p_dry.length + 1), GFP_KERNEL);
+	p = kzalloc_flex(*p, instructions, p_dry.length + 1, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c
index 9c06ac562f3e..123d9d4fb08d 100644
--- a/drivers/spi/spi-bcm-qspi.c
+++ b/drivers/spi/spi-bcm-qspi.c
@@ -712,7 +712,7 @@ static int bcm_qspi_setup(struct spi_device *spi)

 	xp = spi_get_ctldata(spi);
 	if (!xp) {
-		xp = kzalloc(sizeof(*xp), GFP_KERNEL);
+		xp = kzalloc_obj(*xp, GFP_KERNEL);
 		if (!xp)
 			return -ENOMEM;
 		spi_set_ctldata(spi, xp);
@@ -1565,8 +1565,8 @@ int bcm_qspi_probe(struct platform_device *pdev,
 			return PTR_ERR(qspi->base[CHIP_SELECT]);
 	}

-	qspi->dev_ids = kcalloc(num_irqs, sizeof(struct bcm_qspi_dev_id),
-				GFP_KERNEL);
+	qspi->dev_ids = kzalloc_objs(struct bcm_qspi_dev_id, num_irqs,
+				     GFP_KERNEL);
 	if (!qspi->dev_ids)
 		return -ENOMEM;

diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
index 35ae50ca37ac..170118023b2f 100644
--- a/drivers/spi/spi-bcm2835.c
+++ b/drivers/spi/spi-bcm2835.c
@@ -1313,7 +1313,7 @@ static int bcm2835_spi_setup(struct spi_device *spi)
 	 * More on the problem that it addresses:
 	 *   https://www.spinics.net/lists/linux-gpio/msg36218.html
 	 */
-	lookup = kzalloc(struct_size(lookup, table, 2), GFP_KERNEL);
+	lookup = kzalloc_flex(*lookup, table, 2, GFP_KERNEL);
 	if (!lookup) {
 		ret = -ENOMEM;
 		goto err_cleanup;
diff --git a/drivers/spi/spi-bitbang.c b/drivers/spi/spi-bitbang.c
index ebe18f0b5d23..d9cfb6e18a4c 100644
--- a/drivers/spi/spi-bitbang.c
+++ b/drivers/spi/spi-bitbang.c
@@ -193,7 +193,7 @@ int spi_bitbang_setup(struct spi_device *spi)
 	bitbang = spi_controller_get_devdata(spi->controller);

 	if (!cs) {
-		cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+		cs = kzalloc_obj(*cs, GFP_KERNEL);
 		if (!cs)
 			return -ENOMEM;
 		spi->controller_state = cs;
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c
index d680142a059f..62171cc0d84d 100644
--- a/drivers/spi/spi-davinci.c
+++ b/drivers/spi/spi-davinci.c
@@ -443,7 +443,7 @@ static int davinci_spi_of_setup(struct spi_device *spi)
 	u32 prop;

 	if (spicfg == NULL && np) {
-		spicfg = kzalloc(sizeof(*spicfg), GFP_KERNEL);
+		spicfg = kzalloc_obj(*spicfg, GFP_KERNEL);
 		if (!spicfg)
 			return -ENOMEM;
 		*spicfg = davinci_spi_default_cfg;
diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c
index 0d59c141beb0..d2aa199bab9d 100644
--- a/drivers/spi/spi-dw-core.c
+++ b/drivers/spi/spi-dw-core.c
@@ -797,7 +797,7 @@ static int dw_spi_setup(struct spi_device *spi)
 		struct dw_spi *dws = spi_controller_get_devdata(spi->controller);
 		u32 rx_sample_dly_ns;

-		chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+		chip = kzalloc_obj(*chip, GFP_KERNEL);
 		if (!chip)
 			return -ENOMEM;
 		spi_set_ctldata(spi, chip);
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
index 76f142a54254..031d6785ecc4 100644
--- a/drivers/spi/spi-fsl-dspi.c
+++ b/drivers/spi/spi-fsl-dspi.c
@@ -1290,7 +1290,7 @@ static int dspi_setup(struct spi_device *spi)
 	/* Only alloc on first setup */
 	chip = spi_get_ctldata(spi);
 	if (chip == NULL) {
-		chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);
+		chip = kzalloc_obj(struct chip_data, GFP_KERNEL);
 		if (!chip)
 			return -ENOMEM;
 	}
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c
index b06555a457f8..f46f5c3cc992 100644
--- a/drivers/spi/spi-fsl-espi.c
+++ b/drivers/spi/spi-fsl-espi.c
@@ -482,7 +482,7 @@ static int fsl_espi_setup(struct spi_device *spi)
 	struct fsl_espi_cs *cs = spi_get_ctldata(spi);

 	if (!cs) {
-		cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+		cs = kzalloc_obj(*cs, GFP_KERNEL);
 		if (!cs)
 			return -ENOMEM;
 		spi_set_ctldata(spi, cs);
diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c
index 481a7b28aacd..e2f15998495f 100644
--- a/drivers/spi/spi-fsl-spi.c
+++ b/drivers/spi/spi-fsl-spi.c
@@ -378,7 +378,7 @@ static int fsl_spi_setup(struct spi_device *spi)
 		return -EINVAL;

 	if (!cs) {
-		cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+		cs = kzalloc_obj(*cs, GFP_KERNEL);
 		if (!cs)
 			return -ENOMEM;
 		spi_set_ctldata(spi, cs);
diff --git a/drivers/spi/spi-hisi-kunpeng.c b/drivers/spi/spi-hisi-kunpeng.c
index f123cdab9007..798ba06b86bc 100644
--- a/drivers/spi/spi-hisi-kunpeng.c
+++ b/drivers/spi/spi-hisi-kunpeng.c
@@ -426,7 +426,7 @@ static int hisi_spi_setup(struct spi_device *spi)
 	/* Only alloc on first setup */
 	chip = spi_get_ctldata(spi);
 	if (!chip) {
-		chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+		chip = kzalloc_obj(*chip, GFP_KERNEL);
 		if (!chip)
 			return -ENOMEM;
 		spi_set_ctldata(spi, chip);
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index f65c0bf11a73..64c6c09e1e7b 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -1666,9 +1666,9 @@ static int spi_imx_dma_data_prepare(struct spi_imx_data *spi_imx,
 		tail_bl = (transfer->len % MX51_ECSPI_CTRL_MAX_BURST) * BITS_PER_BYTE - 1;
 	}

-	spi_imx->dma_data = kmalloc_array(spi_imx->dma_package_num,
-					  sizeof(struct dma_data_package),
-					  GFP_KERNEL | __GFP_ZERO);
+	spi_imx->dma_data = kmalloc_objs(struct dma_data_package,
+					 spi_imx->dma_package_num,
+					 GFP_KERNEL | __GFP_ZERO);
 	if (!spi_imx->dma_data) {
 		dev_err(spi_imx->dev, "Failed to allocate DMA package buffer!\n");
 		return -ENOMEM;
diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
index 965673bac98b..abb380d2791b 100644
--- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c
@@ -713,7 +713,7 @@ spi_mem_dirmap_create(struct spi_mem *mem,
 	if (info->op_tmpl.data.dir == SPI_MEM_NO_DATA)
 		return ERR_PTR(-EINVAL);

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/spi/spi-mpc512x-psc.c b/drivers/spi/spi-mpc512x-psc.c
index a1aeb5403a74..e8383a79cb2e 100644
--- a/drivers/spi/spi-mpc512x-psc.c
+++ b/drivers/spi/spi-mpc512x-psc.c
@@ -362,7 +362,7 @@ static int mpc512x_psc_spi_setup(struct spi_device *spi)
 		return -EINVAL;

 	if (!cs) {
-		cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+		cs = kzalloc_obj(*cs, GFP_KERNEL);
 		if (!cs)
 			return -ENOMEM;

diff --git a/drivers/spi/spi-mpc52xx-psc.c b/drivers/spi/spi-mpc52xx-psc.c
index 73d2383461ca..03ee5f370382 100644
--- a/drivers/spi/spi-mpc52xx-psc.c
+++ b/drivers/spi/spi-mpc52xx-psc.c
@@ -222,7 +222,7 @@ static int mpc52xx_psc_spi_setup(struct spi_device *spi)
 		return -EINVAL;

 	if (!cs) {
-		cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+		cs = kzalloc_obj(*cs, GFP_KERNEL);
 		if (!cs)
 			return -ENOMEM;
 		spi->controller_state = cs;
diff --git a/drivers/spi/spi-mpc52xx.c b/drivers/spi/spi-mpc52xx.c
index 14188a6ba5a1..ea5c15191f23 100644
--- a/drivers/spi/spi-mpc52xx.c
+++ b/drivers/spi/spi-mpc52xx.c
@@ -443,9 +443,8 @@ static int mpc52xx_spi_probe(struct platform_device *op)
 	ms->gpio_cs_count = gpiod_count(&op->dev, NULL);
 	if (ms->gpio_cs_count > 0) {
 		host->num_chipselect = ms->gpio_cs_count;
-		ms->gpio_cs = kmalloc_array(ms->gpio_cs_count,
-					    sizeof(*ms->gpio_cs),
-					    GFP_KERNEL);
+		ms->gpio_cs = kmalloc_objs(*ms->gpio_cs, ms->gpio_cs_count,
+					   GFP_KERNEL);
 		if (!ms->gpio_cs) {
 			rc = -ENOMEM;
 			goto err_alloc_gpio;
diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c
index 7f7d0dfec743..833f8f8901bf 100644
--- a/drivers/spi/spi-mtk-snfi.c
+++ b/drivers/spi/spi-mtk-snfi.c
@@ -675,7 +675,7 @@ static int mtk_snand_ecc_init_ctx(struct nand_device *nand)
 	if (ret)
 		return ret;

-	ecc_cfg = kzalloc(sizeof(*ecc_cfg), GFP_KERNEL);
+	ecc_cfg = kzalloc_obj(*ecc_cfg, GFP_KERNEL);
 	if (!ecc_cfg)
 		return -ENOMEM;

diff --git a/drivers/spi/spi-mxs.c b/drivers/spi/spi-mxs.c
index 0ebcbdb1b1f7..35e4300deff5 100644
--- a/drivers/spi/spi-mxs.c
+++ b/drivers/spi/spi-mxs.c
@@ -182,7 +182,7 @@ static int mxs_spi_txrx_dma(struct mxs_spi *spi,
 	if (!len)
 		return -EINVAL;

-	dma_xfer = kcalloc(sgs, sizeof(*dma_xfer), GFP_KERNEL);
+	dma_xfer = kzalloc_objs(*dma_xfer, sgs, GFP_KERNEL);
 	if (!dma_xfer)
 		return -ENOMEM;

diff --git a/drivers/spi/spi-offload.c b/drivers/spi/spi-offload.c
index d336f4d228d5..de6de1517554 100644
--- a/drivers/spi/spi-offload.c
+++ b/drivers/spi/spi-offload.c
@@ -117,7 +117,7 @@ struct spi_offload *devm_spi_offload_get(struct device *dev,
 	if (!spi->controller->get_offload)
 		return ERR_PTR(-ENODEV);

-	resource = kzalloc(sizeof(*resource), GFP_KERNEL);
+	resource = kzalloc_obj(*resource, GFP_KERNEL);
 	if (!resource)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/spi/spi-omap-uwire.c b/drivers/spi/spi-omap-uwire.c
index b9a91dbfeaef..367a36a1fdc5 100644
--- a/drivers/spi/spi-omap-uwire.c
+++ b/drivers/spi/spi-omap-uwire.c
@@ -425,7 +425,7 @@ static int uwire_setup(struct spi_device *spi)
 	int status;

 	if (ust == NULL) {
-		ust = kzalloc(sizeof(*ust), GFP_KERNEL);
+		ust = kzalloc_obj(*ust, GFP_KERNEL);
 		if (ust == NULL)
 			return -ENOMEM;
 		spi->controller_state = ust;
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index 69c2e9d9be3c..11eca0572733 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -1076,7 +1076,7 @@ static int omap2_mcspi_setup(struct spi_device *spi)
 	struct omap2_mcspi_cs	*cs = spi->controller_state;

 	if (!cs) {
-		cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+		cs = kzalloc_obj(*cs, GFP_KERNEL);
 		if (!cs)
 			return -ENOMEM;
 		cs->base = mcspi->base + spi_get_chipselect(spi, 0) * 0x14;
diff --git a/drivers/spi/spi-pic32-sqi.c b/drivers/spi/spi-pic32-sqi.c
index fa0c1ee84532..f663ea5983d0 100644
--- a/drivers/spi/spi-pic32-sqi.c
+++ b/drivers/spi/spi-pic32-sqi.c
@@ -467,7 +467,7 @@ static int ring_desc_ring_alloc(struct pic32_sqi *sqi)
 	}

 	/* allocate software ring descriptors */
-	sqi->ring = kcalloc(PESQI_BD_COUNT, sizeof(*rdesc), GFP_KERNEL);
+	sqi->ring = kzalloc_objs(*rdesc, PESQI_BD_COUNT, GFP_KERNEL);
 	if (!sqi->ring) {
 		dma_free_coherent(&sqi->host->dev,
 				  sizeof(*bd) * PESQI_BD_COUNT,
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
index c32a1fba31ef..87f9d41f0236 100644
--- a/drivers/spi/spi-pl022.c
+++ b/drivers/spi/spi-pl022.c
@@ -1606,7 +1606,7 @@ static int pl022_setup(struct spi_device *spi)
 	chip = spi_get_ctldata(spi);

 	if (chip == NULL) {
-		chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);
+		chip = kzalloc_obj(struct chip_data, GFP_KERNEL);
 		if (!chip)
 			return -ENOMEM;
 		dev_dbg(&spi->dev,
diff --git a/drivers/spi/spi-ppc4xx.c b/drivers/spi/spi-ppc4xx.c
index 688cabcfbc52..c4ebef57c991 100644
--- a/drivers/spi/spi-ppc4xx.c
+++ b/drivers/spi/spi-ppc4xx.c
@@ -218,7 +218,7 @@ static int spi_ppc4xx_setup(struct spi_device *spi)
 	}

 	if (cs == NULL) {
-		cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+		cs = kzalloc_obj(*cs, GFP_KERNEL);
 		if (!cs)
 			return -ENOMEM;
 		spi->controller_state = cs;
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
index 78c399e95ef2..b0424ee64b75 100644
--- a/drivers/spi/spi-pxa2xx.c
+++ b/drivers/spi/spi-pxa2xx.c
@@ -1184,7 +1184,7 @@ static int setup(struct spi_device *spi)
 	/* Only allocate on the first setup */
 	chip = spi_get_ctldata(spi);
 	if (!chip) {
-		chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);
+		chip = kzalloc_obj(struct chip_data, GFP_KERNEL);
 		if (!chip)
 			return -ENOMEM;
 	}
diff --git a/drivers/spi/spi-qpic-snand.c b/drivers/spi/spi-qpic-snand.c
index d7fef48f20ef..eae0edb47652 100644
--- a/drivers/spi/spi-qpic-snand.c
+++ b/drivers/spi/spi-qpic-snand.c
@@ -258,7 +258,7 @@ static int qcom_spi_ecc_init_ctx_pipelined(struct nand_device *nand)
 	cwperpage = mtd->writesize / NANDC_STEP_SIZE;
 	snandc->qspi->num_cw = cwperpage;

-	ecc_cfg = kzalloc(sizeof(*ecc_cfg), GFP_KERNEL);
+	ecc_cfg = kzalloc_obj(*ecc_cfg, GFP_KERNEL);
 	if (!ecc_cfg)
 		return -ENOMEM;

diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c
index 4fbefd85d2e2..2591f1d11a9d 100644
--- a/drivers/spi/spi-s3c64xx.c
+++ b/drivers/spi/spi-s3c64xx.c
@@ -961,7 +961,7 @@ static struct s3c64xx_spi_csinfo *s3c64xx_get_target_ctrldata(
 		return ERR_PTR(-EINVAL);
 	}

-	cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+	cs = kzalloc_obj(*cs, GFP_KERNEL);
 	if (!cs)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/spi/spi-tegra114.c b/drivers/spi/spi-tegra114.c
index d805da250a10..6983a4567c45 100644
--- a/drivers/spi/spi-tegra114.c
+++ b/drivers/spi/spi-tegra114.c
@@ -920,7 +920,7 @@ static struct tegra_spi_client_data
 		return NULL;
 	}

-	cdata = kzalloc(sizeof(*cdata), GFP_KERNEL);
+	cdata = kzalloc_obj(*cdata, GFP_KERNEL);
 	if (!cdata)
 		return NULL;

diff --git a/drivers/spi/spi-tle62x0.c b/drivers/spi/spi-tle62x0.c
index 663c0136d119..0ef65cc689bd 100644
--- a/drivers/spi/spi-tle62x0.c
+++ b/drivers/spi/spi-tle62x0.c
@@ -249,7 +249,7 @@ static int tle62x0_probe(struct spi_device *spi)
 		return -EINVAL;
 	}

-	st = kzalloc(sizeof(struct tle62x0_state), GFP_KERNEL);
+	st = kzalloc_obj(struct tle62x0_state, GFP_KERNEL);
 	if (st == NULL)
 		return -ENOMEM;

diff --git a/drivers/spi/spi-topcliff-pch.c b/drivers/spi/spi-topcliff-pch.c
index 60fce5c73031..72316aa1aab9 100644
--- a/drivers/spi/spi-topcliff-pch.c
+++ b/drivers/spi/spi-topcliff-pch.c
@@ -982,7 +982,7 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
 	spin_unlock_irqrestore(&data->lock, flags);

 	/* RX */
-	dma->sg_rx_p = kmalloc_array(num, sizeof(*dma->sg_rx_p), GFP_ATOMIC);
+	dma->sg_rx_p = kmalloc_objs(*dma->sg_rx_p, num, GFP_ATOMIC);
 	if (!dma->sg_rx_p)
 		return;

@@ -1045,7 +1045,7 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
 		head = 0;
 	}

-	dma->sg_tx_p = kmalloc_array(num, sizeof(*dma->sg_tx_p), GFP_ATOMIC);
+	dma->sg_tx_p = kmalloc_objs(*dma->sg_tx_p, num, GFP_ATOMIC);
 	if (!dma->sg_tx_p)
 		return;

@@ -1527,11 +1527,11 @@ static int pch_spi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	int i;
 	struct pch_pd_dev_save *pd_dev_save;

-	pd_dev_save = kzalloc(sizeof(*pd_dev_save), GFP_KERNEL);
+	pd_dev_save = kzalloc_obj(*pd_dev_save, GFP_KERNEL);
 	if (!pd_dev_save)
 		return -ENOMEM;

-	board_dat = kzalloc(sizeof(*board_dat), GFP_KERNEL);
+	board_dat = kzalloc_obj(*board_dat, GFP_KERNEL);
 	if (!board_dat) {
 		retval = -ENOMEM;
 		goto err_no_mem;
diff --git a/drivers/spi/spi-virtio.c b/drivers/spi/spi-virtio.c
index 9e66c917fb75..9efadfb7a74f 100644
--- a/drivers/spi/spi-virtio.c
+++ b/drivers/spi/spi-virtio.c
@@ -158,8 +158,8 @@ static int virtio_spi_transfer_one(struct spi_controller *ctrl,
 	unsigned int incnt = 0;
 	int ret;

-	struct virtio_spi_req *spi_req __free(kfree) = kzalloc(sizeof(*spi_req),
-							       GFP_KERNEL);
+	struct virtio_spi_req *spi_req __free(kfree) = kzalloc_obj(*spi_req,
+								   GFP_KERNEL);
 	if (!spi_req)
 		return -ENOMEM;

diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 3887fcf8ec86..bd80a8bc8139 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -568,7 +568,7 @@ struct spi_device *spi_alloc_device(struct spi_controller *ctlr)
 	if (!spi_controller_get(ctlr))
 		return NULL;

-	spi = kzalloc(sizeof(*spi), GFP_KERNEL);
+	spi = kzalloc_obj(*spi, GFP_KERNEL);
 	if (!spi) {
 		spi_controller_put(ctlr);
 		return NULL;
@@ -921,7 +921,7 @@ int spi_register_board_info(struct spi_board_info const *info, unsigned n)
 	if (!n)
 		return 0;

-	bi = kcalloc(n, sizeof(*bi), GFP_KERNEL);
+	bi = kzalloc_objs(*bi, n, GFP_KERNEL);
 	if (!bi)
 		return -ENOMEM;

diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
index f28528ed1c24..840347f404b9 100644
--- a/drivers/spi/spidev.c
+++ b/drivers/spi/spidev.c
@@ -214,7 +214,7 @@ static int spidev_message(struct spidev_data *spidev,
 	int			status = -EFAULT;

 	spi_message_init(&msg);
-	k_xfers = kcalloc(n_xfers, sizeof(*k_tmp), GFP_KERNEL);
+	k_xfers = kzalloc_objs(*k_tmp, n_xfers, GFP_KERNEL);
 	if (k_xfers == NULL)
 		return -ENOMEM;

@@ -777,7 +777,7 @@ static int spidev_probe(struct spi_device *spi)
 	}

 	/* Allocate driver data */
-	spidev = kzalloc(sizeof(*spidev), GFP_KERNEL);
+	spidev = kzalloc_obj(*spidev, GFP_KERNEL);
 	if (!spidev)
 		return -ENOMEM;

diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c
index 3cf8d9bd4566..29de3055443d 100644
--- a/drivers/spmi/spmi.c
+++ b/drivers/spmi/spmi.c
@@ -418,7 +418,7 @@ struct spmi_device *spmi_device_alloc(struct spmi_controller *ctrl)
 {
 	struct spmi_device *sdev;

-	sdev = kzalloc(sizeof(*sdev), GFP_KERNEL);
+	sdev = kzalloc_obj(*sdev, GFP_KERNEL);
 	if (!sdev)
 		return NULL;

diff --git a/drivers/ssb/bridge_pcmcia_80211.c b/drivers/ssb/bridge_pcmcia_80211.c
index ffa379efff83..6e958e403dbe 100644
--- a/drivers/ssb/bridge_pcmcia_80211.c
+++ b/drivers/ssb/bridge_pcmcia_80211.c
@@ -31,7 +31,7 @@ static int ssb_host_pcmcia_probe(struct pcmcia_device *dev)
 	int err = -ENOMEM;
 	int res = 0;

-	ssb = kzalloc(sizeof(*ssb), GFP_KERNEL);
+	ssb = kzalloc_obj(*ssb, GFP_KERNEL);
 	if (!ssb)
 		goto out_error;

diff --git a/drivers/ssb/driver_gige.c b/drivers/ssb/driver_gige.c
index ebee6b0e3c34..fc2bf4ceedee 100644
--- a/drivers/ssb/driver_gige.c
+++ b/drivers/ssb/driver_gige.c
@@ -173,7 +173,7 @@ static int ssb_gige_probe(struct ssb_device *sdev,
 	struct ssb_gige *dev;
 	u32 base, tmslow, tmshigh;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	dev->dev = sdev;
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
index aa6165e3db4a..bb52e5197b1f 100644
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -481,7 +481,7 @@ static int ssb_devices_register(struct ssb_bus *bus)
 			continue;
 		}

-		devwrap = kzalloc(sizeof(*devwrap), GFP_KERNEL);
+		devwrap = kzalloc_obj(*devwrap, GFP_KERNEL);
 		if (!devwrap) {
 			err = -ENOMEM;
 			goto error;
diff --git a/drivers/ssb/pcihost_wrapper.c b/drivers/ssb/pcihost_wrapper.c
index dd70fd41c77d..36011a93f5af 100644
--- a/drivers/ssb/pcihost_wrapper.c
+++ b/drivers/ssb/pcihost_wrapper.c
@@ -71,7 +71,7 @@ static int ssb_pcihost_probe(struct pci_dev *dev,
 	int err = -ENOMEM;
 	u32 val;

-	ssb = kzalloc(sizeof(*ssb), GFP_KERNEL);
+	ssb = kzalloc_obj(*ssb, GFP_KERNEL);
 	if (!ssb)
 		goto out;
 	err = pci_enable_device(dev);
diff --git a/drivers/staging/fbtft/fb_agm1264k-fl.c b/drivers/staging/fbtft/fb_agm1264k-fl.c
index 207d578547cd..af2dbebefc72 100644
--- a/drivers/staging/fbtft/fb_agm1264k-fl.c
+++ b/drivers/staging/fbtft/fb_agm1264k-fl.c
@@ -283,8 +283,9 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
 	int ret = 0;

 	/* buffer to convert RGB565 -> grayscale16 -> Dithered image 1bpp */
-	signed short *convert_buf = kmalloc_array(par->info->var.xres *
-		par->info->var.yres, sizeof(signed short), GFP_NOIO);
+	signed short *convert_buf = kmalloc_objs(signed short,
+						 par->info->var.xres * par->info->var.yres,
+						 GFP_NOIO);

 	if (!convert_buf)
 		return -ENOMEM;
diff --git a/drivers/staging/greybus/audio_manager_module.c b/drivers/staging/greybus/audio_manager_module.c
index 4a4dfb42f50f..e87b82ca6d8a 100644
--- a/drivers/staging/greybus/audio_manager_module.c
+++ b/drivers/staging/greybus/audio_manager_module.c
@@ -188,7 +188,7 @@ int gb_audio_manager_module_create(struct gb_audio_manager_module **module,
 	int err;
 	struct gb_audio_manager_module *m;

-	m = kzalloc(sizeof(*m), GFP_ATOMIC);
+	m = kzalloc_obj(*m, GFP_ATOMIC);
 	if (!m)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/authentication.c b/drivers/staging/greybus/authentication.c
index d53e58f92e81..e52e3f043572 100644
--- a/drivers/staging/greybus/authentication.c
+++ b/drivers/staging/greybus/authentication.c
@@ -306,7 +306,7 @@ int gb_cap_connection_init(struct gb_connection *connection)
 	if (!connection)
 		return 0;

-	cap = kzalloc(sizeof(*cap), GFP_KERNEL);
+	cap = kzalloc_obj(*cap, GFP_KERNEL);
 	if (!cap)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/bootrom.c b/drivers/staging/greybus/bootrom.c
index d4d86b3898de..bad4091e2433 100644
--- a/drivers/staging/greybus/bootrom.c
+++ b/drivers/staging/greybus/bootrom.c
@@ -424,7 +424,7 @@ static int gb_bootrom_probe(struct gb_bundle *bundle,
 	if (cport_desc->protocol_id != GREYBUS_PROTOCOL_BOOTROM)
 		return -ENODEV;

-	bootrom = kzalloc(sizeof(*bootrom), GFP_KERNEL);
+	bootrom = kzalloc_obj(*bootrom, GFP_KERNEL);
 	if (!bootrom)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/camera.c b/drivers/staging/greybus/camera.c
index 5ac19c0055d9..8ad3785ff467 100644
--- a/drivers/staging/greybus/camera.c
+++ b/drivers/staging/greybus/camera.c
@@ -791,7 +791,7 @@ static int gb_camera_op_configure_streams(void *priv, unsigned int *nstreams,
 	if (gb_nstreams > GB_CAMERA_MAX_STREAMS)
 		return -EINVAL;

-	gb_streams = kcalloc(gb_nstreams, sizeof(*gb_streams), GFP_KERNEL);
+	gb_streams = kzalloc_objs(*gb_streams, gb_nstreams, GFP_KERNEL);
 	if (!gb_streams)
 		return -ENOMEM;

@@ -932,7 +932,7 @@ static ssize_t gb_camera_debugfs_configure_streams(struct gb_camera *gcam,
 		return ret;

 	/* For each stream to configure parse width, height and format */
-	streams = kcalloc(nstreams, sizeof(*streams), GFP_KERNEL);
+	streams = kzalloc_objs(*streams, nstreams, GFP_KERNEL);
 	if (!streams)
 		return -ENOMEM;

@@ -1244,7 +1244,7 @@ static int gb_camera_probe(struct gb_bundle *bundle,
 	if (!mgmt_cport_id || !data_cport_id)
 		return -ENODEV;

-	gcam = kzalloc(sizeof(*gcam), GFP_KERNEL);
+	gcam = kzalloc_obj(*gcam, GFP_KERNEL);
 	if (!gcam)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/fw-core.c b/drivers/staging/greybus/fw-core.c
index 0fb15a60412f..8a437361302c 100644
--- a/drivers/staging/greybus/fw-core.c
+++ b/drivers/staging/greybus/fw-core.c
@@ -68,7 +68,7 @@ static int gb_fw_core_probe(struct gb_bundle *bundle,
 	u16 cport_id;
 	u8 protocol_id;

-	fw_core = kzalloc(sizeof(*fw_core), GFP_KERNEL);
+	fw_core = kzalloc_obj(*fw_core, GFP_KERNEL);
 	if (!fw_core)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/fw-download.c b/drivers/staging/greybus/fw-download.c
index 9a09bd3af79b..0216282f72f2 100644
--- a/drivers/staging/greybus/fw-download.c
+++ b/drivers/staging/greybus/fw-download.c
@@ -165,7 +165,7 @@ static struct fw_request *find_firmware(struct fw_download *fw_download,
 	struct fw_request *fw_req;
 	int ret, req_count;

-	fw_req = kzalloc(sizeof(*fw_req), GFP_KERNEL);
+	fw_req = kzalloc_obj(*fw_req, GFP_KERNEL);
 	if (!fw_req)
 		return ERR_PTR(-ENOMEM);

@@ -409,7 +409,7 @@ int gb_fw_download_connection_init(struct gb_connection *connection)
 	if (!connection)
 		return 0;

-	fw_download = kzalloc(sizeof(*fw_download), GFP_KERNEL);
+	fw_download = kzalloc_obj(*fw_download, GFP_KERNEL);
 	if (!fw_download)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/fw-management.c b/drivers/staging/greybus/fw-management.c
index 152949c23d65..012ed95d750e 100644
--- a/drivers/staging/greybus/fw-management.c
+++ b/drivers/staging/greybus/fw-management.c
@@ -577,7 +577,7 @@ int gb_fw_mgmt_connection_init(struct gb_connection *connection)
 	if (!connection)
 		return 0;

-	fw_mgmt = kzalloc(sizeof(*fw_mgmt), GFP_KERNEL);
+	fw_mgmt = kzalloc_obj(*fw_mgmt, GFP_KERNEL);
 	if (!fw_mgmt)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/gbphy.c b/drivers/staging/greybus/gbphy.c
index 60cf09a302a7..24556c686e62 100644
--- a/drivers/staging/greybus/gbphy.c
+++ b/drivers/staging/greybus/gbphy.c
@@ -229,7 +229,7 @@ static struct gbphy_device *gb_gbphy_create_dev(struct gb_bundle *bundle,
 	if (id < 0)
 		return ERR_PTR(id);

-	gbphy_dev = kzalloc(sizeof(*gbphy_dev), GFP_KERNEL);
+	gbphy_dev = kzalloc_obj(*gbphy_dev, GFP_KERNEL);
 	if (!gbphy_dev) {
 		ida_free(&gbphy_id, id);
 		return ERR_PTR(-ENOMEM);
@@ -282,7 +282,7 @@ static int gb_gbphy_probe(struct gb_bundle *bundle,
 	if (bundle->num_cports == 0)
 		return -ENODEV;

-	gbphy_host = kzalloc(sizeof(*gbphy_host), GFP_KERNEL);
+	gbphy_host = kzalloc_obj(*gbphy_host, GFP_KERNEL);
 	if (!gbphy_host)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/gpio.c b/drivers/staging/greybus/gpio.c
index ac62b932e6a4..5b30841a4205 100644
--- a/drivers/staging/greybus/gpio.c
+++ b/drivers/staging/greybus/gpio.c
@@ -485,8 +485,7 @@ static int gb_gpio_controller_setup(struct gb_gpio_controller *ggc)
 	if (ret)
 		return ret;

-	ggc->lines = kcalloc(ggc->line_max + 1, sizeof(*ggc->lines),
-			     GFP_KERNEL);
+	ggc->lines = kzalloc_objs(*ggc->lines, ggc->line_max + 1, GFP_KERNEL);
 	if (!ggc->lines)
 		return -ENOMEM;

@@ -503,7 +502,7 @@ static int gb_gpio_probe(struct gbphy_device *gbphy_dev,
 	struct irq_chip *irqc;
 	int ret;

-	ggc = kzalloc(sizeof(*ggc), GFP_KERNEL);
+	ggc = kzalloc_obj(*ggc, GFP_KERNEL);
 	if (!ggc)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/hid.c b/drivers/staging/greybus/hid.c
index 63c77a3df591..2b5e6a7b04e6 100644
--- a/drivers/staging/greybus/hid.c
+++ b/drivers/staging/greybus/hid.c
@@ -434,7 +434,7 @@ static int gb_hid_probe(struct gb_bundle *bundle,
 	if (cport_desc->protocol_id != GREYBUS_PROTOCOL_HID)
 		return -ENODEV;

-	ghid = kzalloc(sizeof(*ghid), GFP_KERNEL);
+	ghid = kzalloc_obj(*ghid, GFP_KERNEL);
 	if (!ghid)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/i2c.c b/drivers/staging/greybus/i2c.c
index 14f1ff6d448c..e6934459c8f6 100644
--- a/drivers/staging/greybus/i2c.c
+++ b/drivers/staging/greybus/i2c.c
@@ -235,7 +235,7 @@ static int gb_i2c_probe(struct gbphy_device *gbphy_dev,
 	struct i2c_adapter *adapter;
 	int ret;

-	gb_i2c_dev = kzalloc(sizeof(*gb_i2c_dev), GFP_KERNEL);
+	gb_i2c_dev = kzalloc_obj(*gb_i2c_dev, GFP_KERNEL);
 	if (!gb_i2c_dev)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/light.c b/drivers/staging/greybus/light.c
index 38c233a706c4..5b8694d3943b 100644
--- a/drivers/staging/greybus/light.c
+++ b/drivers/staging/greybus/light.c
@@ -269,14 +269,14 @@ static int channel_attr_groups_set(struct gb_channel *channel,
 		return 0;

 	/* Set attributes based in the channel flags */
-	channel->attrs = kcalloc(size + 1, sizeof(*channel->attrs), GFP_KERNEL);
+	channel->attrs = kzalloc_objs(*channel->attrs, size + 1, GFP_KERNEL);
 	if (!channel->attrs)
 		return -ENOMEM;
-	channel->attr_group = kzalloc(sizeof(*channel->attr_group), GFP_KERNEL);
+	channel->attr_group = kzalloc_obj(*channel->attr_group, GFP_KERNEL);
 	if (!channel->attr_group)
 		return -ENOMEM;
-	channel->attr_groups = kcalloc(2, sizeof(*channel->attr_groups),
-				       GFP_KERNEL);
+	channel->attr_groups = kzalloc_objs(*channel->attr_groups, 2,
+					    GFP_KERNEL);
 	if (!channel->attr_groups)
 		return -ENOMEM;

@@ -1011,8 +1011,8 @@ static int gb_lights_light_config(struct gb_lights *glights, u8 id)
 	light->name = kstrndup(conf.name, NAMES_MAX, GFP_KERNEL);
 	if (!light->name)
 		return -ENOMEM;
-	light->channels = kcalloc(conf.channel_count,
-				  sizeof(struct gb_channel), GFP_KERNEL);
+	light->channels = kzalloc_objs(struct gb_channel, conf.channel_count,
+				       GFP_KERNEL);
 	if (!light->channels)
 		return -ENOMEM;
 	/*
@@ -1153,8 +1153,8 @@ static int gb_lights_create_all(struct gb_lights *glights)
 	if (ret < 0)
 		goto out;

-	glights->lights = kcalloc(glights->lights_count,
-				  sizeof(struct gb_light), GFP_KERNEL);
+	glights->lights = kzalloc_objs(struct gb_light, glights->lights_count,
+				       GFP_KERNEL);
 	if (!glights->lights) {
 		ret = -ENOMEM;
 		goto out;
@@ -1262,7 +1262,7 @@ static int gb_lights_probe(struct gb_bundle *bundle,
 	if (cport_desc->protocol_id != GREYBUS_PROTOCOL_LIGHTS)
 		return -ENODEV;

-	glights = kzalloc(sizeof(*glights), GFP_KERNEL);
+	glights = kzalloc_obj(*glights, GFP_KERNEL);
 	if (!glights)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/log.c b/drivers/staging/greybus/log.c
index 57dcf9453bf1..77fb9880c695 100644
--- a/drivers/staging/greybus/log.c
+++ b/drivers/staging/greybus/log.c
@@ -77,7 +77,7 @@ static int gb_log_probe(struct gb_bundle *bundle,
 	if (cport_desc->protocol_id != GREYBUS_PROTOCOL_LOG)
 		return -ENODEV;

-	log = kzalloc(sizeof(*log), GFP_KERNEL);
+	log = kzalloc_obj(*log, GFP_KERNEL);
 	if (!log)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/loopback.c b/drivers/staging/greybus/loopback.c
index 1f19323b0e1a..37a8cbf140ad 100644
--- a/drivers/staging/greybus/loopback.c
+++ b/drivers/staging/greybus/loopback.c
@@ -471,7 +471,7 @@ static int gb_loopback_async_operation(struct gb_loopback *gb, int type,
 	struct gb_operation *operation;
 	int ret;

-	op_async = kzalloc(sizeof(*op_async), GFP_KERNEL);
+	op_async = kzalloc_obj(*op_async, GFP_KERNEL);
 	if (!op_async)
 		return -ENOMEM;

@@ -989,7 +989,7 @@ static int gb_loopback_probe(struct gb_bundle *bundle,
 	if (cport_desc->protocol_id != GREYBUS_PROTOCOL_LOOPBACK)
 		return -ENODEV;

-	gb = kzalloc(sizeof(*gb), GFP_KERNEL);
+	gb = kzalloc_obj(*gb, GFP_KERNEL);
 	if (!gb)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/power_supply.c b/drivers/staging/greybus/power_supply.c
index a484c0ca058d..94e3650a2880 100644
--- a/drivers/staging/greybus/power_supply.c
+++ b/drivers/staging/greybus/power_supply.c
@@ -545,15 +545,15 @@ static int gb_power_supply_prop_descriptors_get(struct gb_power_supply *gbpsy)
 		}
 	}

-	gbpsy->props = kcalloc(gbpsy->properties_count, sizeof(*gbpsy->props),
-			       GFP_KERNEL);
+	gbpsy->props = kzalloc_objs(*gbpsy->props, gbpsy->properties_count,
+				    GFP_KERNEL);
 	if (!gbpsy->props) {
 		ret = -ENOMEM;
 		goto out_put_operation;
 	}

-	gbpsy->props_raw = kcalloc(gbpsy->properties_count,
-				   sizeof(*gbpsy->props_raw), GFP_KERNEL);
+	gbpsy->props_raw = kzalloc_objs(*gbpsy->props_raw,
+					gbpsy->properties_count, GFP_KERNEL);
 	if (!gbpsy->props_raw) {
 		ret = -ENOMEM;
 		goto out_put_operation;
@@ -942,9 +942,8 @@ static int gb_power_supplies_setup(struct gb_power_supplies *supplies)
 	if (ret < 0)
 		goto out;

-	supplies->supply = kcalloc(supplies->supplies_count,
-				   sizeof(struct gb_power_supply),
-				   GFP_KERNEL);
+	supplies->supply = kzalloc_objs(struct gb_power_supply,
+					supplies->supplies_count, GFP_KERNEL);

 	if (!supplies->supply) {
 		ret = -ENOMEM;
@@ -1064,7 +1063,7 @@ static int gb_power_supply_probe(struct gb_bundle *bundle,
 	if (cport_desc->protocol_id != GREYBUS_PROTOCOL_POWER_SUPPLY)
 		return -ENODEV;

-	supplies = kzalloc(sizeof(*supplies), GFP_KERNEL);
+	supplies = kzalloc_obj(*supplies, GFP_KERNEL);
 	if (!supplies)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/raw.c b/drivers/staging/greybus/raw.c
index 71de6776739c..742b3a84cf12 100644
--- a/drivers/staging/greybus/raw.c
+++ b/drivers/staging/greybus/raw.c
@@ -73,7 +73,7 @@ static int receive_data(struct gb_raw *raw, u32 len, u8 *data)
 		goto exit;
 	}

-	raw_data = kmalloc(struct_size(raw_data, data, len), GFP_KERNEL);
+	raw_data = kmalloc_flex(*raw_data, data, len, GFP_KERNEL);
 	if (!raw_data) {
 		retval = -ENOMEM;
 		goto exit;
@@ -164,7 +164,7 @@ static int gb_raw_probe(struct gb_bundle *bundle,
 	if (cport_desc->protocol_id != GREYBUS_PROTOCOL_RAW)
 		return -ENODEV;

-	raw = kzalloc(sizeof(*raw), GFP_KERNEL);
+	raw = kzalloc_obj(*raw, GFP_KERNEL);
 	if (!raw)
 		return -ENOMEM;

diff --git a/drivers/staging/greybus/uart.c b/drivers/staging/greybus/uart.c
index 5cece0a6606f..99eff4b97e7a 100644
--- a/drivers/staging/greybus/uart.c
+++ b/drivers/staging/greybus/uart.c
@@ -823,7 +823,7 @@ static int gb_uart_probe(struct gbphy_device *gbphy_dev,
 		goto exit_connection_destroy;
 	}

-	gb_tty = kzalloc(sizeof(*gb_tty), GFP_KERNEL);
+	gb_tty = kzalloc_obj(*gb_tty, GFP_KERNEL);
 	if (!gb_tty) {
 		retval = -ENOMEM;
 		goto exit_connection_destroy;
diff --git a/drivers/staging/greybus/vibrator.c b/drivers/staging/greybus/vibrator.c
index ee112aa13ff1..fc995fe41604 100644
--- a/drivers/staging/greybus/vibrator.c
+++ b/drivers/staging/greybus/vibrator.c
@@ -128,7 +128,7 @@ static int gb_vibrator_probe(struct gb_bundle *bundle,
 	if (cport_desc->protocol_id != GREYBUS_PROTOCOL_VIBRATOR)
 		return -ENODEV;

-	vib = kzalloc(sizeof(*vib), GFP_KERNEL);
+	vib = kzalloc_obj(*vib, GFP_KERNEL);
 	if (!vib)
 		return -ENOMEM;

diff --git a/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c b/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c
index 6050637a0def..a67eeed04b0c 100644
--- a/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c
+++ b/drivers/staging/media/atomisp/i2c/atomisp-gc2235.c
@@ -794,7 +794,7 @@ static int gc2235_probe(struct i2c_client *client)
 	int ret;
 	unsigned int i;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c b/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c
index a4519babf37d..38568259bd7f 100644
--- a/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c
+++ b/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c
@@ -952,7 +952,7 @@ static int ov2722_probe(struct i2c_client *client)
 	void *ovpdev;
 	int ret;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
index a3cd9d3e9ce7..4584f0ee15f0 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
@@ -2960,7 +2960,7 @@ int atomisp_set_parameters(struct video_device *vdev,
 		 * are ready, the parameters will be set to CSS.
 		 * per-frame setting only works for the main output frame.
 		 */
-		param = kvzalloc(sizeof(*param), GFP_KERNEL);
+		param = kvzalloc_obj(*param, GFP_KERNEL);
 		if (!param)
 			return -ENOMEM;
 		css_param = &param->params;
diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
index 2a90f86e515f..c934da53f4a3 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
@@ -305,8 +305,8 @@ static int atomisp_csi2_add_gpio_mappings(struct acpi_device *adev)
 	int ret;

 	/* Max num GPIOs we've seen plus a terminator */
-	int3472 = kzalloc(struct_size(int3472, gpios.table, INT3472_MAX_SENSOR_GPIOS + 1),
-			  GFP_KERNEL);
+	int3472 = kzalloc_flex(*int3472, gpios.table,
+			       INT3472_MAX_SENSOR_GPIOS + 1, GFP_KERNEL);
 	if (!int3472)
 		return -ENOMEM;

diff --git a/drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c b/drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c
index 964cc3bcc0ac..27d3c7d83e21 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c
@@ -969,7 +969,7 @@ static int camera_sensor_csi_alloc(struct v4l2_subdev *sd, u32 port, u32 lanes,
 	struct i2c_client *client = v4l2_get_subdevdata(sd);
 	struct camera_mipi_info *csi;

-	csi = kzalloc(sizeof(*csi), GFP_KERNEL);
+	csi = kzalloc_obj(*csi, GFP_KERNEL);
 	if (!csi)
 		return -ENOMEM;

diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
index bb8b2f2213b0..a19dc99922ad 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
@@ -696,7 +696,8 @@ int atomisp_alloc_css_stat_bufs(struct atomisp_sub_device *asd,
 			ATOMISP_S3A_BUF_QUEUE_DEPTH_FOR_HAL;
 		dev_dbg(isp->dev, "allocating %d 3a buffers\n", count);
 		while (count--) {
-			s3a_buf = kzalloc(sizeof(struct atomisp_s3a_buf), GFP_KERNEL);
+			s3a_buf = kzalloc_obj(struct atomisp_s3a_buf,
+					      GFP_KERNEL);
 			if (!s3a_buf)
 				goto error;

@@ -715,7 +716,8 @@ int atomisp_alloc_css_stat_bufs(struct atomisp_sub_device *asd,
 		count = ATOMISP_CSS_Q_DEPTH + 1;
 		dev_dbg(isp->dev, "allocating %d dis buffers\n", count);
 		while (count--) {
-			dis_buf = kzalloc(sizeof(struct atomisp_dis_buf), GFP_KERNEL);
+			dis_buf = kzalloc_obj(struct atomisp_dis_buf,
+					      GFP_KERNEL);
 			if (!dis_buf)
 				goto error;
 			if (atomisp_css_allocate_stat_buffers(
@@ -737,8 +739,8 @@ int atomisp_alloc_css_stat_bufs(struct atomisp_sub_device *asd,
 			dev_dbg(isp->dev, "allocating %d metadata buffers for type %d\n",
 				count, i);
 			while (count--) {
-				md_buf = kzalloc(sizeof(struct atomisp_metadata_buf),
-						 GFP_KERNEL);
+				md_buf = kzalloc_obj(struct atomisp_metadata_buf,
+						     GFP_KERNEL);
 				if (!md_buf)
 					goto error;

diff --git a/drivers/staging/media/atomisp/pci/hmm/hmm_bo.c b/drivers/staging/media/atomisp/pci/hmm/hmm_bo.c
index 5d0cd5260d3a..8181e988266a 100644
--- a/drivers/staging/media/atomisp/pci/hmm/hmm_bo.c
+++ b/drivers/staging/media/atomisp/pci/hmm/hmm_bo.c
@@ -676,7 +676,7 @@ int hmm_bo_alloc_pages(struct hmm_buffer_object *bo,
 	mutex_lock(&bo->mutex);
 	check_bo_status_no_goto(bo, HMM_BO_PAGE_ALLOCED, status_err);

-	bo->pages = kcalloc(bo->pgnr, sizeof(struct page *), GFP_KERNEL);
+	bo->pages = kzalloc_objs(struct page *, bo->pgnr, GFP_KERNEL);
 	if (unlikely(!bo->pages)) {
 		ret = -ENOMEM;
 		goto alloc_err;
diff --git a/drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_1.0/ia_css_sdis.host.c b/drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_1.0/ia_css_sdis.host.c
index a1bea8bd1a39..473e71e1bb59 100644
--- a/drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_1.0/ia_css_sdis.host.c
+++ b/drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_1.0/ia_css_sdis.host.c
@@ -309,7 +309,7 @@ ia_css_isp_dvs_statistics_allocate(
 	if (!grid->enable)
 		return NULL;

-	me = kvcalloc(1, sizeof(*me), GFP_KERNEL);
+	me = kvzalloc_objs(*me, 1, GFP_KERNEL);
 	if (!me)
 		goto err;

@@ -350,7 +350,7 @@ ia_css_isp_dvs_statistics_map_allocate(
 	 * so we use a local char * instead. */
 	char *base_ptr;

-	me = kvmalloc(sizeof(*me), GFP_KERNEL);
+	me = kvmalloc_obj(*me, GFP_KERNEL);
 	if (!me) {
 		IA_CSS_LOG("cannot allocate memory");
 		goto err;
diff --git a/drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_2/ia_css_sdis2.host.c b/drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_2/ia_css_sdis2.host.c
index 027eae0ca69e..f84ee4c683f4 100644
--- a/drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_2/ia_css_sdis2.host.c
+++ b/drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_2/ia_css_sdis2.host.c
@@ -274,7 +274,7 @@ ia_css_isp_dvs2_statistics_allocate(
 	if (!grid->enable)
 		return NULL;

-	me = kvcalloc(1, sizeof(*me), GFP_KERNEL);
+	me = kvzalloc_objs(*me, 1, GFP_KERNEL);
 	if (!me)
 		goto err;

diff --git a/drivers/staging/media/atomisp/pci/runtime/frame/src/frame.c b/drivers/staging/media/atomisp/pci/runtime/frame/src/frame.c
index 2cb96f9a6030..2217e3623a23 100644
--- a/drivers/staging/media/atomisp/pci/runtime/frame/src/frame.c
+++ b/drivers/staging/media/atomisp/pci/runtime/frame/src/frame.c
@@ -650,7 +650,7 @@ static struct ia_css_frame *frame_create(unsigned int width,
 	unsigned int raw_bit_depth,
 	bool valid)
 {
-	struct ia_css_frame *me = kvmalloc(sizeof(*me), GFP_KERNEL);
+	struct ia_css_frame *me = kvmalloc_obj(*me, GFP_KERNEL);

 	if (!me)
 		return NULL;
diff --git a/drivers/staging/media/atomisp/pci/runtime/pipeline/src/pipeline.c b/drivers/staging/media/atomisp/pci/runtime/pipeline/src/pipeline.c
index cb8d652227a7..2a1ba0a9c916 100644
--- a/drivers/staging/media/atomisp/pci/runtime/pipeline/src/pipeline.c
+++ b/drivers/staging/media/atomisp/pci/runtime/pipeline/src/pipeline.c
@@ -579,7 +579,7 @@ static int pipeline_stage_create(
 		out_frame[i] = stage_desc->out_frame[i];
 	}

-	stage = kvzalloc(sizeof(*stage), GFP_KERNEL);
+	stage = kvzalloc_obj(*stage, GFP_KERNEL);
 	if (!stage) {
 		err = -ENOMEM;
 		goto ERR;
diff --git a/drivers/staging/media/atomisp/pci/sh_css.c b/drivers/staging/media/atomisp/pci/sh_css.c
index 73bd87f43a8c..abf598b2811f 100644
--- a/drivers/staging/media/atomisp/pci/sh_css.c
+++ b/drivers/staging/media/atomisp/pci/sh_css.c
@@ -1880,7 +1880,7 @@ create_pipe(enum ia_css_pipe_mode mode,
 		return -EINVAL;
 	}

-	me = kmalloc(sizeof(*me), GFP_KERNEL);
+	me = kmalloc_obj(*me, GFP_KERNEL);
 	if (!me)
 		return -ENOMEM;

@@ -4530,16 +4530,17 @@ static int load_video_binaries(struct ia_css_pipe *pipe)
 		if (err)
 			return err;
 		mycs->num_yuv_scaler = cas_scaler_descr.num_stage;
-		mycs->yuv_scaler_binary = kcalloc(cas_scaler_descr.num_stage,
-						  sizeof(struct ia_css_binary),
-						  GFP_KERNEL);
+		mycs->yuv_scaler_binary = kzalloc_objs(struct ia_css_binary,
+						       cas_scaler_descr.num_stage,
+						       GFP_KERNEL);
 		if (!mycs->yuv_scaler_binary) {
 			mycs->num_yuv_scaler = 0;
 			err = -ENOMEM;
 			return err;
 		}
-		mycs->is_output_stage = kcalloc(cas_scaler_descr.num_stage,
-						sizeof(bool), GFP_KERNEL);
+		mycs->is_output_stage = kzalloc_objs(bool,
+						     cas_scaler_descr.num_stage,
+						     GFP_KERNEL);
 		if (!mycs->is_output_stage) {
 			err = -ENOMEM;
 			return err;
@@ -5110,16 +5111,17 @@ static int load_primary_binaries(
 			return err;
 		}
 		mycs->num_yuv_scaler = cas_scaler_descr.num_stage;
-		mycs->yuv_scaler_binary = kcalloc(cas_scaler_descr.num_stage,
-						  sizeof(struct ia_css_binary),
-						  GFP_KERNEL);
+		mycs->yuv_scaler_binary = kzalloc_objs(struct ia_css_binary,
+						       cas_scaler_descr.num_stage,
+						       GFP_KERNEL);
 		if (!mycs->yuv_scaler_binary) {
 			err = -ENOMEM;
 			IA_CSS_LEAVE_ERR_PRIVATE(err);
 			return err;
 		}
-		mycs->is_output_stage = kcalloc(cas_scaler_descr.num_stage,
-						sizeof(bool), GFP_KERNEL);
+		mycs->is_output_stage = kzalloc_objs(bool,
+						     cas_scaler_descr.num_stage,
+						     GFP_KERNEL);
 		if (!mycs->is_output_stage) {
 			err = -ENOMEM;
 			IA_CSS_LEAVE_ERR_PRIVATE(err);
@@ -5970,9 +5972,8 @@ ia_css_pipe_create_cas_scaler_desc(struct ia_css_pipe *pipe,

 	descr->num_stage = num_stages;

-	descr->in_info = kmalloc_array(descr->num_stage,
-				       sizeof(struct ia_css_frame_info),
-				       GFP_KERNEL);
+	descr->in_info = kmalloc_objs(struct ia_css_frame_info,
+				      descr->num_stage, GFP_KERNEL);
 	if (!descr->in_info) {
 		err = -ENOMEM;
 		goto ERR;
@@ -6143,15 +6144,16 @@ load_yuvpp_binaries(struct ia_css_pipe *pipe)
 			goto ERR;
 		mycs->num_output = cas_scaler_descr.num_output_stage;
 		mycs->num_yuv_scaler = cas_scaler_descr.num_stage;
-		mycs->yuv_scaler_binary = kcalloc(cas_scaler_descr.num_stage,
-						  sizeof(struct ia_css_binary),
-						  GFP_KERNEL);
+		mycs->yuv_scaler_binary = kzalloc_objs(struct ia_css_binary,
+						       cas_scaler_descr.num_stage,
+						       GFP_KERNEL);
 		if (!mycs->yuv_scaler_binary) {
 			err = -ENOMEM;
 			goto ERR;
 		}
-		mycs->is_output_stage = kcalloc(cas_scaler_descr.num_stage,
-						sizeof(bool), GFP_KERNEL);
+		mycs->is_output_stage = kzalloc_objs(bool,
+						     cas_scaler_descr.num_stage,
+						     GFP_KERNEL);
 		if (!mycs->is_output_stage) {
 			err = -ENOMEM;
 			goto ERR;
@@ -6250,9 +6252,8 @@ load_yuvpp_binaries(struct ia_css_pipe *pipe)

 		mycs->num_vf_pp = 1;
 	}
-	mycs->vf_pp_binary = kcalloc(mycs->num_vf_pp,
-				     sizeof(struct ia_css_binary),
-				     GFP_KERNEL);
+	mycs->vf_pp_binary = kzalloc_objs(struct ia_css_binary, mycs->num_vf_pp,
+					  GFP_KERNEL);
 	if (!mycs->vf_pp_binary) {
 		err = -ENOMEM;
 		goto ERR;
@@ -7909,7 +7910,7 @@ ia_css_stream_create(const struct ia_css_stream_config *stream_config,
 	}

 	/* allocate the stream instance */
-	curr_stream = kzalloc(sizeof(struct ia_css_stream), GFP_KERNEL);
+	curr_stream = kzalloc_obj(struct ia_css_stream, GFP_KERNEL);
 	if (!curr_stream) {
 		err = -ENOMEM;
 		IA_CSS_LEAVE_ERR(err);
@@ -7920,7 +7921,8 @@ ia_css_stream_create(const struct ia_css_stream_config *stream_config,

 	/* allocate pipes */
 	curr_stream->num_pipes = num_pipes;
-	curr_stream->pipes = kcalloc(num_pipes, sizeof(struct ia_css_pipe *), GFP_KERNEL);
+	curr_stream->pipes = kzalloc_objs(struct ia_css_pipe *, num_pipes,
+					  GFP_KERNEL);
 	if (!curr_stream->pipes) {
 		curr_stream->num_pipes = 0;
 		kfree(curr_stream);
diff --git a/drivers/staging/media/atomisp/pci/sh_css_firmware.c b/drivers/staging/media/atomisp/pci/sh_css_firmware.c
index bed599223717..a2a8a46c628b 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_firmware.c
+++ b/drivers/staging/media/atomisp/pci/sh_css_firmware.c
@@ -262,8 +262,8 @@ sh_css_load_firmware(struct device *dev, const char *fw_data,
 		sh_css_blob_info = NULL;
 	}

-	fw_minibuffer = kcalloc(sh_css_num_binaries, sizeof(struct fw_param),
-				GFP_KERNEL);
+	fw_minibuffer = kzalloc_objs(struct fw_param, sh_css_num_binaries,
+				     GFP_KERNEL);
 	if (!fw_minibuffer)
 		return -ENOMEM;

diff --git a/drivers/staging/media/atomisp/pci/sh_css_host_data.c b/drivers/staging/media/atomisp/pci/sh_css_host_data.c
index 39efd8933034..c9400600c241 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_host_data.c
+++ b/drivers/staging/media/atomisp/pci/sh_css_host_data.c
@@ -12,7 +12,7 @@ struct ia_css_host_data *ia_css_host_data_allocate(size_t size)
 {
 	struct ia_css_host_data *me;

-	me =  kmalloc(sizeof(struct ia_css_host_data), GFP_KERNEL);
+	me =  kmalloc_obj(struct ia_css_host_data, GFP_KERNEL);
 	if (!me)
 		return NULL;
 	me->size = (uint32_t)size;
diff --git a/drivers/staging/media/atomisp/pci/sh_css_param_dvs.c b/drivers/staging/media/atomisp/pci/sh_css_param_dvs.c
index 7fa4aab35b06..19f1b71a5c06 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_param_dvs.c
+++ b/drivers/staging/media/atomisp/pci/sh_css_param_dvs.c
@@ -22,8 +22,7 @@ alloc_dvs_6axis_table(const struct ia_css_resolution *frame_res,
 	int err = 0;
 	struct ia_css_dvs_6axis_config  *dvs_config = NULL;

-	dvs_config = kvmalloc(sizeof(struct ia_css_dvs_6axis_config),
-			      GFP_KERNEL);
+	dvs_config = kvmalloc_obj(struct ia_css_dvs_6axis_config, GFP_KERNEL);
 	if (!dvs_config)	{
 		IA_CSS_ERROR("out of memory");
 		err = -ENOMEM;
diff --git a/drivers/staging/media/atomisp/pci/sh_css_param_shading.c b/drivers/staging/media/atomisp/pci/sh_css_param_shading.c
index 513e272f2fdc..e9ce4ef6a991 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_param_shading.c
+++ b/drivers/staging/media/atomisp/pci/sh_css_param_shading.c
@@ -328,7 +328,7 @@ ia_css_shading_table_alloc(

 	IA_CSS_ENTER("");

-	me = kmalloc(sizeof(*me), GFP_KERNEL);
+	me = kmalloc_obj(*me, GFP_KERNEL);
 	if (!me)
 		return me;

diff --git a/drivers/staging/media/atomisp/pci/sh_css_params.c b/drivers/staging/media/atomisp/pci/sh_css_params.c
index 11d62313c908..ab9ab7b2f177 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_params.c
+++ b/drivers/staging/media/atomisp/pci/sh_css_params.c
@@ -1369,7 +1369,7 @@ struct ia_css_morph_table *ia_css_morph_table_allocate(

 	IA_CSS_ENTER("");

-	me = kvmalloc(sizeof(*me), GFP_KERNEL);
+	me = kvmalloc_obj(*me, GFP_KERNEL);
 	if (!me) {
 		IA_CSS_ERROR("out of memory");
 		return me;
@@ -1516,7 +1516,7 @@ ia_css_isp_3a_statistics_map_allocate(
 	 * so we use a local char * instead. */
 	char *base_ptr;

-	me = kvmalloc(sizeof(*me), GFP_KERNEL);
+	me = kvmalloc_obj(*me, GFP_KERNEL);
 	if (!me) {
 		IA_CSS_LEAVE("cannot allocate memory");
 		goto err;
@@ -2136,7 +2136,7 @@ ia_css_isp_3a_statistics_allocate(const struct ia_css_3a_grid_info *grid)
 	if (!grid->enable)
 		return NULL;

-	me = kvcalloc(1, sizeof(*me), GFP_KERNEL);
+	me = kvzalloc_objs(*me, 1, GFP_KERNEL);
 	if (!me)
 		goto err;

@@ -2200,7 +2200,7 @@ ia_css_metadata_allocate(const struct ia_css_metadata_info *metadata_info)
 	if (metadata_info->size == 0)
 		return NULL;

-	md = kvmalloc(sizeof(*md), GFP_KERNEL);
+	md = kvmalloc_obj(*md, GFP_KERNEL);
 	if (!md)
 		goto error;

@@ -2330,7 +2330,7 @@ sh_css_create_isp_params(struct ia_css_stream *stream,
 	int err;
 	size_t params_size;
 	struct ia_css_isp_parameters *params =
-	kvmalloc(sizeof(struct ia_css_isp_parameters), GFP_KERNEL);
+	kvmalloc_obj(struct ia_css_isp_parameters, GFP_KERNEL);

 	if (!params) {
 		*isp_params_out = NULL;
@@ -4161,7 +4161,7 @@ ia_css_3a_statistics_allocate(const struct ia_css_3a_grid_info *grid)

 	assert(grid);

-	me = kvcalloc(1, sizeof(*me), GFP_KERNEL);
+	me = kvzalloc_objs(*me, 1, GFP_KERNEL);
 	if (!me)
 		goto err;

@@ -4201,7 +4201,7 @@ ia_css_dvs_statistics_allocate(const struct ia_css_dvs_grid_info *grid)

 	assert(grid);

-	me = kvcalloc(1, sizeof(*me), GFP_KERNEL);
+	me = kvzalloc_objs(*me, 1, GFP_KERNEL);
 	if (!me)
 		goto err;

@@ -4239,7 +4239,7 @@ ia_css_dvs_coefficients_allocate(const struct ia_css_dvs_grid_info *grid)

 	assert(grid);

-	me = kvcalloc(1, sizeof(*me), GFP_KERNEL);
+	me = kvzalloc_objs(*me, 1, GFP_KERNEL);
 	if (!me)
 		goto err;

@@ -4280,7 +4280,7 @@ ia_css_dvs2_statistics_allocate(const struct ia_css_dvs_grid_info *grid)

 	assert(grid);

-	me = kvcalloc(1, sizeof(*me), GFP_KERNEL);
+	me = kvzalloc_objs(*me, 1, GFP_KERNEL);
 	if (!me)
 		goto err;

@@ -4371,7 +4371,7 @@ ia_css_dvs2_coefficients_allocate(const struct ia_css_dvs_grid_info *grid)

 	assert(grid);

-	me = kvcalloc(1, sizeof(*me), GFP_KERNEL);
+	me = kvzalloc_objs(*me, 1, GFP_KERNEL);
 	if (!me)
 		goto err;

@@ -4464,8 +4464,8 @@ ia_css_dvs2_6axis_config_allocate(const struct ia_css_stream *stream)
 	if (!params || !params->pipe_dvs_6axis_config[IA_CSS_PIPE_ID_VIDEO])
 		goto err;

-	dvs_config = kvcalloc(1, sizeof(struct ia_css_dvs_6axis_config),
-			      GFP_KERNEL);
+	dvs_config = kvzalloc_objs(struct ia_css_dvs_6axis_config, 1,
+				   GFP_KERNEL);
 	if (!dvs_config)
 		goto err;

diff --git a/drivers/staging/media/av7110/av7110.c b/drivers/staging/media/av7110/av7110.c
index 602342d1174f..bdd3cc28e364 100644
--- a/drivers/staging/media/av7110/av7110.c
+++ b/drivers/staging/media/av7110/av7110.c
@@ -2424,7 +2424,7 @@ static int av7110_attach(struct saa7146_dev *dev,
 	}

 	/* prepare the av7110 device struct */
-	av7110 = kzalloc(sizeof(*av7110), GFP_KERNEL);
+	av7110 = kzalloc_obj(*av7110, GFP_KERNEL);
 	if (!av7110) {
 		dprintk(1, "out of memory\n");
 		return -ENOMEM;
diff --git a/drivers/staging/media/av7110/sp8870.c b/drivers/staging/media/av7110/sp8870.c
index 93bf47a62e38..2254a5f3a351 100644
--- a/drivers/staging/media/av7110/sp8870.c
+++ b/drivers/staging/media/av7110/sp8870.c
@@ -563,7 +563,7 @@ struct dvb_frontend *sp8870_attach(const struct sp8870_config *config,
 	struct sp8870_state *state = NULL;

 	/* allocate memory for the internal state */
-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		goto error;

diff --git a/drivers/staging/media/imx/imx-media-csc-scaler.c b/drivers/staging/media/imx/imx-media-csc-scaler.c
index 0a27330f9790..f068ead6c088 100644
--- a/drivers/staging/media/imx/imx-media-csc-scaler.c
+++ b/drivers/staging/media/imx/imx-media-csc-scaler.c
@@ -124,7 +124,7 @@ static void device_run(void *_ctx)
 	src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
 	dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);

-	run = kzalloc(sizeof(*run), GFP_KERNEL);
+	run = kzalloc_obj(*run, GFP_KERNEL);
 	if (!run)
 		goto err;

@@ -756,7 +756,7 @@ static int ipu_csc_scaler_open(struct file *file)
 	struct ipu_csc_scaler_ctx *ctx = NULL;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -880,7 +880,7 @@ imx_media_csc_scaler_device_init(struct imx_media_dev *md)
 	struct video_device *vfd;
 	int ret;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/staging/media/ipu3/ipu3-css-fw.c b/drivers/staging/media/ipu3/ipu3-css-fw.c
index 37482b626c3c..0f242dd27288 100644
--- a/drivers/staging/media/ipu3/ipu3-css-fw.c
+++ b/drivers/staging/media/ipu3/ipu3-css-fw.c
@@ -236,7 +236,7 @@ int imgu_css_fw_init(struct imgu_css *css)

 	/* Allocate and map fw binaries into IMGU */

-	css->binary = kcalloc(binary_nr, sizeof(*css->binary), GFP_KERNEL);
+	css->binary = kzalloc_objs(*css->binary, binary_nr, GFP_KERNEL);
 	if (!css->binary) {
 		r = -ENOMEM;
 		goto error_out;
diff --git a/drivers/staging/media/ipu3/ipu3-css.c b/drivers/staging/media/ipu3/ipu3-css.c
index 777cac1c27bf..3fb863043c71 100644
--- a/drivers/staging/media/ipu3/ipu3-css.c
+++ b/drivers/staging/media/ipu3/ipu3-css.c
@@ -1702,7 +1702,7 @@ int imgu_css_fmt_try(struct imgu_css *css,
 	struct v4l2_pix_format_mplane *in, *out, *vf;
 	int i, s, ret;

-	q = kcalloc(IPU3_CSS_QUEUES, sizeof(struct imgu_css_queue), GFP_KERNEL);
+	q = kzalloc_objs(struct imgu_css_queue, IPU3_CSS_QUEUES, GFP_KERNEL);
 	if (!q)
 		return -ENOMEM;

diff --git a/drivers/staging/media/ipu3/ipu3-dmamap.c b/drivers/staging/media/ipu3/ipu3-dmamap.c
index 8a19b0024152..9f6025aa8a1f 100644
--- a/drivers/staging/media/ipu3/ipu3-dmamap.c
+++ b/drivers/staging/media/ipu3/ipu3-dmamap.c
@@ -39,7 +39,7 @@ static struct page **imgu_dmamap_alloc_buffer(size_t size, gfp_t gfp)
 	const gfp_t high_order_gfp = __GFP_NOWARN | __GFP_NORETRY;

 	/* Allocate mem for array of page ptrs */
-	pages = kvmalloc_array(count, sizeof(*pages), GFP_KERNEL);
+	pages = kvmalloc_objs(*pages, count, GFP_KERNEL);

 	if (!pages)
 		return NULL;
diff --git a/drivers/staging/media/ipu3/ipu3-mmu.c b/drivers/staging/media/ipu3/ipu3-mmu.c
index cb9bf5fb29a5..03583d37fdd0 100644
--- a/drivers/staging/media/ipu3/ipu3-mmu.c
+++ b/drivers/staging/media/ipu3/ipu3-mmu.c
@@ -429,7 +429,7 @@ struct imgu_mmu_info *imgu_mmu_init(struct device *parent, void __iomem *base)
 	struct imgu_mmu *mmu;
 	u32 pteval;

-	mmu = kzalloc(sizeof(*mmu), GFP_KERNEL);
+	mmu = kzalloc_obj(*mmu, GFP_KERNEL);
 	if (!mmu)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/staging/media/ipu7/ipu7-bus.c b/drivers/staging/media/ipu7/ipu7-bus.c
index 7da44fde002a..583825d15230 100644
--- a/drivers/staging/media/ipu7/ipu7-bus.c
+++ b/drivers/staging/media/ipu7/ipu7-bus.c
@@ -89,7 +89,7 @@ ipu7_bus_initialize_device(struct pci_dev *pdev, struct device *parent,
 	struct ipu7_device *isp = pci_get_drvdata(pdev);
 	int ret;

-	adev = kzalloc(sizeof(*adev), GFP_KERNEL);
+	adev = kzalloc_obj(*adev, GFP_KERNEL);
 	if (!adev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/staging/media/ipu7/ipu7-dma.c b/drivers/staging/media/ipu7/ipu7-dma.c
index a118b41b2f34..4f934e4c930b 100644
--- a/drivers/staging/media/ipu7/ipu7-dma.c
+++ b/drivers/staging/media/ipu7/ipu7-dma.c
@@ -164,7 +164,7 @@ void *ipu7_dma_alloc(struct ipu7_bus_device *sys, size_t size,
 	unsigned int i;
 	int ret;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return NULL;

diff --git a/drivers/staging/media/ipu7/ipu7-mmu.c b/drivers/staging/media/ipu7/ipu7-mmu.c
index ea35cce4830a..dfed9872bdfd 100644
--- a/drivers/staging/media/ipu7/ipu7-mmu.c
+++ b/drivers/staging/media/ipu7/ipu7-mmu.c
@@ -584,7 +584,7 @@ static struct ipu7_mmu_info *ipu7_mmu_alloc(struct ipu7_device *isp)
 	struct ipu7_mmu_info *mmu_info;
 	int ret;

-	mmu_info = kzalloc(sizeof(*mmu_info), GFP_KERNEL);
+	mmu_info = kzalloc_obj(*mmu_info, GFP_KERNEL);
 	if (!mmu_info)
 		return NULL;

@@ -654,7 +654,7 @@ static struct ipu7_dma_mapping *alloc_dma_mapping(struct ipu7_device *isp)
 	struct ipu7_dma_mapping *dmap;
 	unsigned long base_pfn;

-	dmap = kzalloc(sizeof(*dmap), GFP_KERNEL);
+	dmap = kzalloc_obj(*dmap, GFP_KERNEL);
 	if (!dmap)
 		return NULL;

diff --git a/drivers/staging/media/ipu7/ipu7.c b/drivers/staging/media/ipu7/ipu7.c
index fa5a1867626f..47b859e1fa0f 100644
--- a/drivers/staging/media/ipu7/ipu7.c
+++ b/drivers/staging/media/ipu7/ipu7.c
@@ -2150,7 +2150,7 @@ ipu7_isys_init(struct pci_dev *pdev, struct device *parent,
 		}
 	}

-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return ERR_PTR(-ENOMEM);

@@ -2197,7 +2197,7 @@ ipu7_psys_init(struct pci_dev *pdev, struct device *parent,
 	struct ipu7_psys_pdata *pdata;
 	int ret;

-	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+	pdata = kzalloc_obj(*pdata, GFP_KERNEL);
 	if (!pdata)
 		return ERR_PTR(-ENOMEM);

@@ -2271,7 +2271,7 @@ static int ipu7_map_fw_code_region(struct ipu7_bus_device *sys,

 	n_pages = PFN_UP(size);

-	pages = kmalloc_array(n_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, n_pages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

diff --git a/drivers/staging/media/meson/vdec/codec_h264.c b/drivers/staging/media/meson/vdec/codec_h264.c
index c61128fc4bb9..bafa7e99abf1 100644
--- a/drivers/staging/media/meson/vdec/codec_h264.c
+++ b/drivers/staging/media/meson/vdec/codec_h264.c
@@ -233,7 +233,7 @@ static int codec_h264_load_extended_firmware(struct amvdec_session *sess,
 	if (len < SIZE_EXT_FW)
 		return -EINVAL;

-	h264 = kzalloc(sizeof(*h264), GFP_KERNEL);
+	h264 = kzalloc_obj(*h264, GFP_KERNEL);
 	if (!h264)
 		return -ENOMEM;

diff --git a/drivers/staging/media/meson/vdec/codec_mpeg12.c b/drivers/staging/media/meson/vdec/codec_mpeg12.c
index 48869cc3d973..01adf66fb50a 100644
--- a/drivers/staging/media/meson/vdec/codec_mpeg12.c
+++ b/drivers/staging/media/meson/vdec/codec_mpeg12.c
@@ -66,7 +66,7 @@ static int codec_mpeg12_start(struct amvdec_session *sess)
 	struct codec_mpeg12 *mpeg12;
 	int ret;

-	mpeg12 = kzalloc(sizeof(*mpeg12), GFP_KERNEL);
+	mpeg12 = kzalloc_obj(*mpeg12, GFP_KERNEL);
 	if (!mpeg12)
 		return -ENOMEM;

diff --git a/drivers/staging/media/meson/vdec/codec_vp9.c b/drivers/staging/media/meson/vdec/codec_vp9.c
index 394df5761556..c82f7be67bc5 100644
--- a/drivers/staging/media/meson/vdec/codec_vp9.c
+++ b/drivers/staging/media/meson/vdec/codec_vp9.c
@@ -762,7 +762,7 @@ static int codec_vp9_start(struct amvdec_session *sess)
 	int i;
 	int ret;

-	vp9 = kzalloc(sizeof(*vp9), GFP_KERNEL);
+	vp9 = kzalloc_obj(*vp9, GFP_KERNEL);
 	if (!vp9)
 		return -ENOMEM;

@@ -1192,7 +1192,7 @@ static struct vp9_frame *codec_vp9_get_new_frame(struct amvdec_session *sess)
 	struct vb2_v4l2_buffer *vbuf;
 	struct vp9_frame *new_frame;

-	new_frame = kzalloc(sizeof(*new_frame), GFP_KERNEL);
+	new_frame = kzalloc_obj(*new_frame, GFP_KERNEL);
 	if (!new_frame)
 		return NULL;

diff --git a/drivers/staging/media/meson/vdec/vdec.c b/drivers/staging/media/meson/vdec/vdec.c
index 49e497a32973..befd3c3762cc 100644
--- a/drivers/staging/media/meson/vdec/vdec.c
+++ b/drivers/staging/media/meson/vdec/vdec.c
@@ -132,7 +132,7 @@ vdec_queue_recycle(struct amvdec_session *sess, struct vb2_buffer *vb)
 {
 	struct amvdec_buffer *new_buf;

-	new_buf = kmalloc(sizeof(*new_buf), GFP_KERNEL);
+	new_buf = kmalloc_obj(*new_buf, GFP_KERNEL);
 	if (!new_buf)
 		return;
 	new_buf->vb = vb;
@@ -867,7 +867,7 @@ static int vdec_open(struct file *file)
 	struct amvdec_session *sess;
 	int ret;

-	sess = kzalloc(sizeof(*sess), GFP_KERNEL);
+	sess = kzalloc_obj(*sess, GFP_KERNEL);
 	if (!sess)
 		return -ENOMEM;

diff --git a/drivers/staging/media/meson/vdec/vdec_helpers.c b/drivers/staging/media/meson/vdec/vdec_helpers.c
index 7d2a75653250..86ed5b8113d2 100644
--- a/drivers/staging/media/meson/vdec/vdec_helpers.c
+++ b/drivers/staging/media/meson/vdec/vdec_helpers.c
@@ -233,7 +233,7 @@ int amvdec_add_ts(struct amvdec_session *sess, u64 ts,
 	struct amvdec_timestamp *new_ts;
 	unsigned long flags;

-	new_ts = kzalloc(sizeof(*new_ts), GFP_KERNEL);
+	new_ts = kzalloc_obj(*new_ts, GFP_KERNEL);
 	if (!new_ts)
 		return -ENOMEM;

diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
index bff42ea1871f..accaee635d21 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
@@ -359,7 +359,7 @@ static int cedrus_open(struct file *file)
 	if (mutex_lock_interruptible(&dev->dev_mutex))
 		return -ERESTARTSYS;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		mutex_unlock(&dev->dev_mutex);
 		return -ENOMEM;
diff --git a/drivers/staging/media/tegra-video/csi.c b/drivers/staging/media/tegra-video/csi.c
index 3c3f6e3fd1ec..98e3a97ee658 100644
--- a/drivers/staging/media/tegra-video/csi.c
+++ b/drivers/staging/media/tegra-video/csi.c
@@ -463,7 +463,7 @@ static int tegra_csi_channel_alloc(struct tegra_csi *csi,
 	struct tegra_csi_channel *chan;
 	int ret = 0, i;

-	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
+	chan = kzalloc_obj(*chan, GFP_KERNEL);
 	if (!chan)
 		return -ENOMEM;

diff --git a/drivers/staging/media/tegra-video/vi.c b/drivers/staging/media/tegra-video/vi.c
index 14b327afe045..a86d0223f6c3 100644
--- a/drivers/staging/media/tegra-video/vi.c
+++ b/drivers/staging/media/tegra-video/vi.c
@@ -1209,7 +1209,7 @@ static int tegra_vi_channel_alloc(struct tegra_vi *vi, unsigned int port_num,
 	 * be holding the device node open. Channel memory allocated
 	 * with kzalloc is freed during video device release callback.
 	 */
-	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
+	chan = kzalloc_obj(*chan, GFP_KERNEL);
 	if (!chan)
 		return -ENOMEM;

diff --git a/drivers/staging/media/tegra-video/video.c b/drivers/staging/media/tegra-video/video.c
index 68783d5ffeb1..06d85292c0d2 100644
--- a/drivers/staging/media/tegra-video/video.c
+++ b/drivers/staging/media/tegra-video/video.c
@@ -46,7 +46,7 @@ static int host1x_video_probe(struct host1x_device *dev)
 	struct tegra_video_device *vid;
 	int ret;

-	vid = kzalloc(sizeof(*vid), GFP_KERNEL);
+	vid = kzalloc_obj(*vid, GFP_KERNEL);
 	if (!vid)
 		return -ENOMEM;

diff --git a/drivers/staging/most/dim2/dim2.c b/drivers/staging/most/dim2/dim2.c
index 80af965356d0..16b1aca26333 100644
--- a/drivers/staging/most/dim2/dim2.c
+++ b/drivers/staging/most/dim2/dim2.c
@@ -759,7 +759,7 @@ static int dim2_probe(struct platform_device *pdev)

 	enum { MLB_INT_IDX, AHB0_INT_IDX };

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/staging/most/video/video.c b/drivers/staging/most/video/video.c
index 8eeae209ff1c..b0d7216f5ab5 100644
--- a/drivers/staging/most/video/video.c
+++ b/drivers/staging/most/video/video.c
@@ -84,7 +84,7 @@ static int comp_vdev_open(struct file *filp)
 		return -EINVAL;
 	}

-	fh = kzalloc(sizeof(*fh), GFP_KERNEL);
+	fh = kzalloc_obj(*fh, GFP_KERNEL);
 	if (!fh)
 		return -ENOMEM;

@@ -474,7 +474,7 @@ static int comp_probe_channel(struct most_interface *iface, int channel_idx,
 		return -EINVAL;
 	}

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return -ENOMEM;

diff --git a/drivers/staging/nvec/nvec_ps2.c b/drivers/staging/nvec/nvec_ps2.c
index 2db57795ea2f..3422a5213803 100644
--- a/drivers/staging/nvec/nvec_ps2.c
+++ b/drivers/staging/nvec/nvec_ps2.c
@@ -102,7 +102,7 @@ static int nvec_mouse_probe(struct platform_device *pdev)
 	struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
 	struct serio *ser_dev;

-	ser_dev = kzalloc(sizeof(*ser_dev), GFP_KERNEL);
+	ser_dev = kzalloc_obj(*ser_dev, GFP_KERNEL);
 	if (!ser_dev)
 		return -ENOMEM;

diff --git a/drivers/staging/rtl8723bs/core/rtw_ap.c b/drivers/staging/rtl8723bs/core/rtw_ap.c
index ebe73abab892..a90b117906ce 100644
--- a/drivers/staging/rtl8723bs/core/rtw_ap.c
+++ b/drivers/staging/rtl8723bs/core/rtw_ap.c
@@ -1229,13 +1229,13 @@ u8 rtw_ap_set_pairwise_key(struct adapter *padapter, struct sta_info *psta)
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_KERNEL);
+	ph2c = kzalloc_obj(*ph2c, GFP_KERNEL);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	psetstakey_para = kzalloc(sizeof(*psetstakey_para), GFP_KERNEL);
+	psetstakey_para = kzalloc_obj(*psetstakey_para, GFP_KERNEL);
 	if (!psetstakey_para) {
 		kfree(ph2c);
 		res = _FAIL;
@@ -1269,12 +1269,12 @@ static int rtw_ap_set_key(struct adapter *padapter,
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	int res = _SUCCESS;

-	pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
+	pcmd = kzalloc_obj(*pcmd, GFP_KERNEL);
 	if (!pcmd) {
 		res = _FAIL;
 		goto exit;
 	}
-	psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_KERNEL);
+	psetkeyparm = kzalloc_obj(*psetkeyparm, GFP_KERNEL);
 	if (!psetkeyparm) {
 		kfree(pcmd);
 		res = _FAIL;
diff --git a/drivers/staging/rtl8723bs/core/rtw_cmd.c b/drivers/staging/rtl8723bs/core/rtw_cmd.c
index b2e7f479f72b..59f4e12535f9 100644
--- a/drivers/staging/rtl8723bs/core/rtw_cmd.c
+++ b/drivers/staging/rtl8723bs/core/rtw_cmd.c
@@ -533,11 +533,11 @@ u8 rtw_sitesurvey_cmd(struct adapter  *padapter, struct ndis_802_11_ssid *ssid,
 	if (check_fwstate(pmlmepriv, _FW_LINKED))
 		rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_SCAN, 1);

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c)
 		return _FAIL;

-	psurveyPara = kzalloc(sizeof(*psurveyPara), GFP_ATOMIC);
+	psurveyPara = kzalloc_obj(*psurveyPara, GFP_ATOMIC);
 	if (!psurveyPara) {
 		kfree(ph2c);
 		return _FAIL;
@@ -601,7 +601,7 @@ u8 rtw_createbss_cmd(struct adapter  *padapter)
 	struct wlan_bssid_ex *pdev_network = &padapter->registrypriv.dev_network;
 	u8 res = _SUCCESS;

-	pcmd = kzalloc(sizeof(*pcmd), GFP_ATOMIC);
+	pcmd = kzalloc_obj(*pcmd, GFP_ATOMIC);
 	if (!pcmd) {
 		res = _FAIL;
 		goto exit;
@@ -634,7 +634,7 @@ int rtw_startbss_cmd(struct adapter  *padapter, int flags)
 		start_bss_network(padapter);
 	} else {
 		/* need enqueue, prepare cmd_obj and enqueue */
-		pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
+		pcmd = kzalloc_obj(*pcmd, GFP_KERNEL);
 		if (!pcmd) {
 			res = _FAIL;
 			goto exit;
@@ -686,7 +686,7 @@ u8 rtw_joinbss_cmd(struct adapter  *padapter, struct wlan_network *pnetwork)
 	u32 tmp_len;
 	u8 *ptmp = NULL;

-	pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
+	pcmd = kzalloc_obj(*pcmd, GFP_KERNEL);
 	if (!pcmd) {
 		res = _FAIL;
 		goto exit;
@@ -795,7 +795,7 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueu
 	u8 res = _SUCCESS;

 	/* prepare cmd parameter */
-	param = kzalloc(sizeof(*param), GFP_KERNEL);
+	param = kzalloc_obj(*param, GFP_KERNEL);
 	if (!param) {
 		res = _FAIL;
 		goto exit;
@@ -804,7 +804,7 @@ u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueu

 	if (enqueue) {
 		/* need enqueue, prepare cmd_obj and enqueue */
-		cmdobj = kzalloc(sizeof(*cmdobj), GFP_KERNEL);
+		cmdobj = kzalloc_obj(*cmdobj, GFP_KERNEL);
 		if (!cmdobj) {
 			res = _FAIL;
 			kfree(param);
@@ -831,7 +831,7 @@ u8 rtw_setopmode_cmd(struct adapter  *padapter, enum ndis_802_11_network_infrast
 	struct	cmd_priv   *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	psetop = kzalloc(sizeof(*psetop), GFP_KERNEL);
+	psetop = kzalloc_obj(*psetop, GFP_KERNEL);
 	if (!psetop) {
 		res = _FAIL;
 		goto exit;
@@ -839,7 +839,7 @@ u8 rtw_setopmode_cmd(struct adapter  *padapter, enum ndis_802_11_network_infrast
 	psetop->mode = (u8)networktype;

 	if (enqueue) {
-		ph2c = kzalloc(sizeof(*ph2c), GFP_KERNEL);
+		ph2c = kzalloc_obj(*ph2c, GFP_KERNEL);
 		if (!ph2c) {
 			kfree(psetop);
 			res = _FAIL;
@@ -866,7 +866,7 @@ u8 rtw_setstakey_cmd(struct adapter *padapter, struct sta_info *sta, u8 unicast_
 	struct security_priv *psecuritypriv = &padapter->securitypriv;
 	u8 res = _SUCCESS;

-	psetstakey_para = kzalloc(sizeof(*psetstakey_para), GFP_KERNEL);
+	psetstakey_para = kzalloc_obj(*psetstakey_para, GFP_KERNEL);
 	if (!psetstakey_para) {
 		res = _FAIL;
 		goto exit;
@@ -888,14 +888,14 @@ u8 rtw_setstakey_cmd(struct adapter *padapter, struct sta_info *sta, u8 unicast_
 	padapter->securitypriv.busetkipkey = true;

 	if (enqueue) {
-		ph2c = kzalloc(sizeof(*ph2c), GFP_KERNEL);
+		ph2c = kzalloc_obj(*ph2c, GFP_KERNEL);
 		if (!ph2c) {
 			kfree(psetstakey_para);
 			res = _FAIL;
 			goto exit;
 		}

-		psetstakey_rsp = kzalloc(sizeof(*psetstakey_rsp), GFP_KERNEL);
+		psetstakey_rsp = kzalloc_obj(*psetstakey_rsp, GFP_KERNEL);
 		if (!psetstakey_rsp) {
 			kfree(ph2c);
 			kfree(psetstakey_para);
@@ -933,20 +933,20 @@ u8 rtw_clearstakey_cmd(struct adapter *padapter, struct sta_info *sta, u8 enqueu
 			rtw_camid_free(padapter, cam_id);
 		}
 	} else {
-		ph2c = kzalloc(sizeof(*ph2c), GFP_KERNEL);
+		ph2c = kzalloc_obj(*ph2c, GFP_KERNEL);
 		if (!ph2c) {
 			res = _FAIL;
 			goto exit;
 		}

-		psetstakey_para = kzalloc(sizeof(*psetstakey_para), GFP_KERNEL);
+		psetstakey_para = kzalloc_obj(*psetstakey_para, GFP_KERNEL);
 		if (!psetstakey_para) {
 			kfree(ph2c);
 			res = _FAIL;
 			goto exit;
 		}

-		psetstakey_rsp = kzalloc(sizeof(*psetstakey_rsp), GFP_KERNEL);
+		psetstakey_rsp = kzalloc_obj(*psetstakey_rsp, GFP_KERNEL);
 		if (!psetstakey_rsp) {
 			kfree(ph2c);
 			kfree(psetstakey_para);
@@ -976,13 +976,13 @@ u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr)

 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	paddbareq_parm = kzalloc(sizeof(*paddbareq_parm), GFP_ATOMIC);
+	paddbareq_parm = kzalloc_obj(*paddbareq_parm, GFP_ATOMIC);
 	if (!paddbareq_parm) {
 		kfree(ph2c);
 		res = _FAIL;
@@ -1009,13 +1009,13 @@ u8 rtw_reset_securitypriv_cmd(struct adapter *padapter)
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
+	pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
 	if (!pdrvextra_cmd_parm) {
 		kfree(ph2c);
 		res = _FAIL;
@@ -1042,13 +1042,13 @@ u8 rtw_free_assoc_resources_cmd(struct adapter *padapter)
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
+	pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
 	if (!pdrvextra_cmd_parm) {
 		kfree(ph2c);
 		res = _FAIL;
@@ -1076,13 +1076,13 @@ u8 rtw_dynamic_chk_wk_cmd(struct adapter *padapter)
 	u8 res = _SUCCESS;

 	/* only  primary padapter does this cmd */
-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
+	pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
 	if (!pdrvextra_cmd_parm) {
 		kfree(ph2c);
 		res = _FAIL;
@@ -1316,13 +1316,14 @@ u8 rtw_lps_ctrl_wk_cmd(struct adapter *padapter, u8 lps_ctrl_type, u8 enqueue)
 	u8 res = _SUCCESS;

 	if (enqueue) {
-		ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+		ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 		if (!ph2c) {
 			res = _FAIL;
 			goto exit;
 		}

-		pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
+		pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm,
+						 GFP_ATOMIC);
 		if (!pdrvextra_cmd_parm) {
 			kfree(ph2c);
 			res = _FAIL;
@@ -1357,13 +1358,13 @@ u8 rtw_dm_in_lps_wk_cmd(struct adapter *padapter)
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
+	pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
 	if (!pdrvextra_cmd_parm) {
 		kfree(ph2c);
 		res = _FAIL;
@@ -1419,13 +1420,13 @@ u8 rtw_dm_ra_mask_wk_cmd(struct adapter *padapter, u8 *psta)
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
+	pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
 	if (!pdrvextra_cmd_parm) {
 		kfree(ph2c);
 		res = _FAIL;
@@ -1453,13 +1454,13 @@ u8 rtw_ps_cmd(struct adapter *padapter)
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	ppscmd = kzalloc(sizeof(*ppscmd), GFP_ATOMIC);
+	ppscmd = kzalloc_obj(*ppscmd, GFP_ATOMIC);
 	if (!ppscmd) {
 		res = _FAIL;
 		goto exit;
 	}

-	pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
+	pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
 	if (!pdrvextra_cmd_parm) {
 		kfree(ppscmd);
 		res = _FAIL;
@@ -1523,13 +1524,13 @@ u8 rtw_chk_hi_queue_cmd(struct adapter *padapter)
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
+	pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
 	if (!pdrvextra_cmd_parm) {
 		kfree(ph2c);
 		res = _FAIL;
@@ -1615,13 +1616,13 @@ u8 rtw_c2h_packet_wk_cmd(struct adapter *padapter, u8 *pbuf, u16 length)
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
+	pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
 	if (!pdrvextra_cmd_parm) {
 		kfree(ph2c);
 		res = _FAIL;
@@ -1650,13 +1651,13 @@ u8 rtw_c2h_wk_cmd(struct adapter *padapter, u8 *c2h_evt)
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_KERNEL);
+	ph2c = kzalloc_obj(*ph2c, GFP_KERNEL);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_KERNEL);
+	pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_KERNEL);
 	if (!pdrvextra_cmd_parm) {
 		kfree(ph2c);
 		res = _FAIL;
diff --git a/drivers/staging/rtl8723bs/core/rtw_mlme.c b/drivers/staging/rtl8723bs/core/rtw_mlme.c
index 22dc36e8e38a..1bc90fa48d36 100644
--- a/drivers/staging/rtl8723bs/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723bs/core/rtw_mlme.c
@@ -1875,13 +1875,13 @@ signed int rtw_set_auth(struct adapter *adapter, struct security_priv *psecurity
 	struct	cmd_priv *pcmdpriv = &adapter->cmdpriv;
 	signed int		res = _SUCCESS;

-	pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
+	pcmd = kzalloc_obj(*pcmd, GFP_KERNEL);
 	if (!pcmd) {
 		res = _FAIL;  /* try again */
 		goto exit;
 	}

-	psetauthparm = kzalloc(sizeof(*psetauthparm), GFP_KERNEL);
+	psetauthparm = kzalloc_obj(*psetauthparm, GFP_KERNEL);
 	if (!psetauthparm) {
 		kfree(pcmd);
 		res = _FAIL;
@@ -1912,7 +1912,7 @@ signed int rtw_set_key(struct adapter *adapter, struct security_priv *psecurityp
 	struct cmd_priv *pcmdpriv = &adapter->cmdpriv;
 	signed int	res = _SUCCESS;

-	psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_KERNEL);
+	psetkeyparm = kzalloc_obj(*psetkeyparm, GFP_KERNEL);
 	if (!psetkeyparm) {
 		res = _FAIL;
 		goto exit;
@@ -1954,7 +1954,7 @@ signed int rtw_set_key(struct adapter *adapter, struct security_priv *psecurityp
 	}

 	if (enqueue) {
-		pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
+		pcmd = kzalloc_obj(*pcmd, GFP_KERNEL);
 		if (!pcmd) {
 			kfree(psetkeyparm);
 			res = _FAIL;  /* try again */
diff --git a/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c b/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
index 78abc5f5191f..b1f20aa81efb 100644
--- a/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
@@ -586,7 +586,7 @@ unsigned int OnBeacon(struct adapter *padapter, union recv_frame *precv_frame)
 	if (!memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN)) {
 		if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) {
 			/* we should update current network before auth, or some IE is wrong */
-			pbss = kmalloc(sizeof(*pbss), GFP_ATOMIC);
+			pbss = kmalloc_obj(*pbss, GFP_ATOMIC);
 			if (pbss) {
 				if (collect_bss_info(padapter, precv_frame, pbss) == _SUCCESS) {
 					update_network(&(pmlmepriv->cur_network.network), pbss, padapter, true);
@@ -4376,7 +4376,7 @@ void report_survey_event(struct adapter *padapter, union recv_frame *precv_frame
 	pmlmeext = &padapter->mlmeextpriv;
 	pcmdpriv = &padapter->cmdpriv;

-	pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
+	pcmd_obj = kzalloc_obj(*pcmd_obj, GFP_ATOMIC);
 	if (!pcmd_obj)
 		return;

@@ -4429,7 +4429,7 @@ void report_surveydone_event(struct adapter *padapter)
 	struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;

-	pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
+	pcmd_obj = kzalloc_obj(*pcmd_obj, GFP_ATOMIC);
 	if (!pcmd_obj)
 		return;

@@ -4474,7 +4474,7 @@ void report_join_res(struct adapter *padapter, int res)
 	struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;

-	pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
+	pcmd_obj = kzalloc_obj(*pcmd_obj, GFP_ATOMIC);
 	if (!pcmd_obj)
 		return;

@@ -4523,7 +4523,7 @@ void report_wmm_edca_update(struct adapter *padapter)
 	struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;

-	pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
+	pcmd_obj = kzalloc_obj(*pcmd_obj, GFP_ATOMIC);
 	if (!pcmd_obj)
 		return;

@@ -4569,7 +4569,7 @@ void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsi
 	struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;

-	pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
+	pcmd_obj = kzalloc_obj(*pcmd_obj, GFP_ATOMIC);
 	if (!pcmd_obj)
 		return;

@@ -4620,7 +4620,7 @@ void report_add_sta_event(struct adapter *padapter, unsigned char *MacAddr, int
 	struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
 	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;

-	pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
+	pcmd_obj = kzalloc_obj(*pcmd_obj, GFP_ATOMIC);
 	if (!pcmd_obj)
 		return;

@@ -5074,11 +5074,11 @@ void survey_timer_hdl(struct timer_list *t)
 			pmlmeext->scan_abort = false;/* reset */
 		}

-		ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+		ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 		if (!ph2c)
 			return;

-		psurveyPara = kzalloc(sizeof(*psurveyPara), GFP_ATOMIC);
+		psurveyPara = kzalloc_obj(*psurveyPara, GFP_ATOMIC);
 		if (!psurveyPara) {
 			kfree(ph2c);
 			return;
@@ -5689,7 +5689,7 @@ u8 chk_bmc_sleepq_cmd(struct adapter *padapter)
 	struct cmd_priv *pcmdpriv = &(padapter->cmdpriv);
 	u8 res = _SUCCESS;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
@@ -5713,13 +5713,13 @@ u8 set_tx_beacon_cmd(struct adapter *padapter)
 	u8 res = _SUCCESS;
 	int len_diff = 0;

-	ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
+	ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
 	if (!ph2c) {
 		res = _FAIL;
 		goto exit;
 	}

-	ptxBeacon_parm = kzalloc(sizeof(*ptxBeacon_parm), GFP_ATOMIC);
+	ptxBeacon_parm = kzalloc_obj(*ptxBeacon_parm, GFP_ATOMIC);
 	if (!ptxBeacon_parm) {
 		kfree(ph2c);
 		res = _FAIL;
diff --git a/drivers/staging/rtl8723bs/core/rtw_wlan_util.c b/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
index 9284657e23c2..aceb1bfde8a4 100644
--- a/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
@@ -1131,7 +1131,7 @@ int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len)
 	if (memcmp(cur_network->network.mac_address, pbssid, 6))
 		return true;

-	bssid = kzalloc(sizeof(*bssid), GFP_KERNEL);
+	bssid = kzalloc_obj(*bssid, GFP_KERNEL);
 	if (!bssid)
 		return true;

diff --git a/drivers/staging/rtl8723bs/core/rtw_xmit.c b/drivers/staging/rtl8723bs/core/rtw_xmit.c
index 222851e8d985..7b18be8912e6 100644
--- a/drivers/staging/rtl8723bs/core/rtw_xmit.c
+++ b/drivers/staging/rtl8723bs/core/rtw_xmit.c
@@ -1869,7 +1869,8 @@ s32 rtw_alloc_hwxmits(struct adapter *padapter)

 	pxmitpriv->hwxmits = NULL;

-	pxmitpriv->hwxmits = kcalloc(pxmitpriv->hwxmit_entry, sizeof(*hwxmits), GFP_ATOMIC);
+	pxmitpriv->hwxmits = kzalloc_objs(*hwxmits, pxmitpriv->hwxmit_entry,
+					  GFP_ATOMIC);
 	if (!pxmitpriv->hwxmits)
 		return _FAIL;

diff --git a/drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c b/drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c
index 54dbcea89491..64d3cbfb1244 100644
--- a/drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c
+++ b/drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c
@@ -306,10 +306,10 @@ s32 rtl8723b_FirmwareDownload(struct adapter *padapter, bool  bUsedWoWLANFw)
 	u8 *fwfilepath;
 	u8 tmp_ps;

-	pFirmware = kzalloc(sizeof(struct rt_firmware), GFP_KERNEL);
+	pFirmware = kzalloc_obj(struct rt_firmware, GFP_KERNEL);
 	if (!pFirmware)
 		return _FAIL;
-	pBTFirmware = kzalloc(sizeof(struct rt_firmware), GFP_KERNEL);
+	pBTFirmware = kzalloc_obj(struct rt_firmware, GFP_KERNEL);
 	if (!pBTFirmware) {
 		kfree(pFirmware);
 		return _FAIL;
diff --git a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
index a47d0d3fa2b7..3922c3920bd8 100644
--- a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
@@ -1248,7 +1248,7 @@ static int cfg80211_rtw_scan(struct wiphy *wiphy
 		goto check_need_indicate_scan_done;
 	}

-	ssid = kcalloc(RTW_SSID_SCAN_AMOUNT, sizeof(*ssid), GFP_KERNEL);
+	ssid = kzalloc_objs(*ssid, RTW_SSID_SCAN_AMOUNT, GFP_KERNEL);
 	if (!ssid) {
 		ret = -ENOMEM;
 		goto check_need_indicate_scan_done;
@@ -2145,7 +2145,7 @@ static int rtw_cfg80211_add_monitor_if(struct adapter *padapter, char *name, str
 	pnpi->sizeof_priv = sizeof(struct adapter);

 	/*  wdev */
-	mon_wdev = kzalloc(sizeof(*mon_wdev), GFP_KERNEL);
+	mon_wdev = kzalloc_obj(*mon_wdev, GFP_KERNEL);
 	if (!mon_wdev) {
 		ret = -ENOMEM;
 		goto out;
@@ -2726,7 +2726,7 @@ int rtw_wdev_alloc(struct adapter *padapter, struct device *dev)
 		goto free_wiphy;

 	/*  wdev */
-	wdev = kzalloc(sizeof(*wdev), GFP_KERNEL);
+	wdev = kzalloc_obj(*wdev, GFP_KERNEL);
 	if (!wdev) {
 		ret = -ENOMEM;
 		goto unregister_wiphy;
diff --git a/drivers/staging/rtl8723bs/os_dep/os_intfs.c b/drivers/staging/rtl8723bs/os_dep/os_intfs.c
index 21a0c3cf4c31..6260f8f33c6d 100644
--- a/drivers/staging/rtl8723bs/os_dep/os_intfs.c
+++ b/drivers/staging/rtl8723bs/os_dep/os_intfs.c
@@ -568,7 +568,7 @@ struct dvobj_priv *devobj_init(void)
 {
 	struct dvobj_priv *pdvobj = NULL;

-	pdvobj = kzalloc(sizeof(*pdvobj), GFP_KERNEL);
+	pdvobj = kzalloc_obj(*pdvobj, GFP_KERNEL);
 	if (!pdvobj)
 		return NULL;

diff --git a/drivers/staging/rtl8723bs/os_dep/osdep_service.c b/drivers/staging/rtl8723bs/os_dep/osdep_service.c
index 2a8fdafefcd9..9ad8473762bc 100644
--- a/drivers/staging/rtl8723bs/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8723bs/os_dep/osdep_service.c
@@ -193,7 +193,7 @@ struct rtw_cbuf *rtw_cbuf_alloc(u32 size)
 {
 	struct rtw_cbuf *cbuf;

-	cbuf = kzalloc(struct_size(cbuf, bufs, size), GFP_KERNEL);
+	cbuf = kzalloc_flex(*cbuf, bufs, size, GFP_KERNEL);
 	cbuf->size = size;

 	return cbuf;
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c
index 68e8d491a7ec..ae9ad7a8815d 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c
@@ -108,7 +108,7 @@ static int snd_bcm2835_playback_open_generic(struct snd_pcm_substream *substream
 		goto out;
 	}

-	alsa_stream = kzalloc(sizeof(*alsa_stream), GFP_KERNEL);
+	alsa_stream = kzalloc_obj(*alsa_stream, GFP_KERNEL);
 	if (!alsa_stream) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index 7368b384497f..d9397ac8faca 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -219,7 +219,7 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
 	int err;

 	/* Allocate memory for this instance */
-	instance = kzalloc(sizeof(*instance), GFP_KERNEL);
+	instance = kzalloc_obj(*instance, GFP_KERNEL);
 	if (!instance)
 		return -ENOMEM;
 	mutex_init(&instance->vchi_mutex);
diff --git a/drivers/staging/vme_user/vme.c b/drivers/staging/vme_user/vme.c
index 1d169f276bcf..4ab3b572bbd7 100644
--- a/drivers/staging/vme_user/vme.c
+++ b/drivers/staging/vme_user/vme.c
@@ -287,7 +287,7 @@ struct vme_resource *vme_slave_request(struct vme_dev *vdev, u32 address,
 	if (!allocated_image)
 		goto err_image;

-	resource = kmalloc(sizeof(*resource), GFP_KERNEL);
+	resource = kmalloc_obj(*resource, GFP_KERNEL);
 	if (!resource)
 		goto err_alloc;

@@ -484,7 +484,7 @@ struct vme_resource *vme_master_request(struct vme_dev *vdev, u32 address,
 		goto err_image;
 	}

-	resource = kmalloc(sizeof(*resource), GFP_KERNEL);
+	resource = kmalloc_obj(*resource, GFP_KERNEL);
 	if (!resource)
 		goto err_alloc;

@@ -854,7 +854,7 @@ struct vme_resource *vme_dma_request(struct vme_dev *vdev, u32 route)
 	if (!allocated_ctrlr)
 		goto err_ctrlr;

-	resource = kmalloc(sizeof(*resource), GFP_KERNEL);
+	resource = kmalloc_obj(*resource, GFP_KERNEL);
 	if (!resource)
 		goto err_alloc;

@@ -894,7 +894,7 @@ struct vme_dma_list *vme_new_dma_list(struct vme_resource *resource)
 		return NULL;
 	}

-	dma_list = kmalloc(sizeof(*dma_list), GFP_KERNEL);
+	dma_list = kmalloc_obj(*dma_list, GFP_KERNEL);
 	if (!dma_list)
 		return NULL;

@@ -924,11 +924,11 @@ struct vme_dma_attr *vme_dma_pattern_attribute(u32 pattern, u32 type)
 	struct vme_dma_attr *attributes;
 	struct vme_dma_pattern *pattern_attr;

-	attributes = kmalloc(sizeof(*attributes), GFP_KERNEL);
+	attributes = kmalloc_obj(*attributes, GFP_KERNEL);
 	if (!attributes)
 		goto err_attr;

-	pattern_attr = kmalloc(sizeof(*pattern_attr), GFP_KERNEL);
+	pattern_attr = kmalloc_obj(*pattern_attr, GFP_KERNEL);
 	if (!pattern_attr)
 		goto err_pat;

@@ -964,11 +964,11 @@ struct vme_dma_attr *vme_dma_pci_attribute(dma_addr_t address)

 	/* XXX Run some sanity checks here */

-	attributes = kmalloc(sizeof(*attributes), GFP_KERNEL);
+	attributes = kmalloc_obj(*attributes, GFP_KERNEL);
 	if (!attributes)
 		goto err_attr;

-	pci_attr = kmalloc(sizeof(*pci_attr), GFP_KERNEL);
+	pci_attr = kmalloc_obj(*pci_attr, GFP_KERNEL);
 	if (!pci_attr)
 		goto err_pci;

@@ -1005,11 +1005,11 @@ struct vme_dma_attr *vme_dma_vme_attribute(unsigned long long address,
 	struct vme_dma_attr *attributes;
 	struct vme_dma_vme *vme_attr;

-	attributes = kmalloc(sizeof(*attributes), GFP_KERNEL);
+	attributes = kmalloc_obj(*attributes, GFP_KERNEL);
 	if (!attributes)
 		goto err_attr;

-	vme_attr = kmalloc(sizeof(*vme_attr), GFP_KERNEL);
+	vme_attr = kmalloc_obj(*vme_attr, GFP_KERNEL);
 	if (!vme_attr)
 		goto err_vme;

@@ -1233,7 +1233,7 @@ struct vme_error_handler *vme_register_error_handler(struct vme_bridge *bridge,
 {
 	struct vme_error_handler *handler;

-	handler = kmalloc(sizeof(*handler), GFP_ATOMIC);
+	handler = kmalloc_obj(*handler, GFP_ATOMIC);
 	if (!handler)
 		return NULL;

@@ -1458,7 +1458,7 @@ struct vme_resource *vme_lm_request(struct vme_dev *vdev)
 	if (!allocated_lm)
 		goto err_lm;

-	resource = kmalloc(sizeof(*resource), GFP_KERNEL);
+	resource = kmalloc_obj(*resource, GFP_KERNEL);
 	if (!resource)
 		goto err_alloc;

@@ -1810,7 +1810,7 @@ static int __vme_register_driver_bus(struct vme_driver *drv,
 	struct vme_dev *tmp;

 	for (i = 0; i < ndevs; i++) {
-		vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
+		vdev = kzalloc_obj(*vdev, GFP_KERNEL);
 		if (!vdev) {
 			err = -ENOMEM;
 			goto err_devalloc;
diff --git a/drivers/staging/vme_user/vme_fake.c b/drivers/staging/vme_user/vme_fake.c
index 731fbba17dfd..77881a96114f 100644
--- a/drivers/staging/vme_user/vme_fake.c
+++ b/drivers/staging/vme_user/vme_fake.c
@@ -1073,13 +1073,13 @@ static int __init fake_init(void)
 	/* If we want to support more than one bridge at some point, we need to
 	 * dynamically allocate this so we get one per device.
 	 */
-	fake_bridge = kzalloc(sizeof(*fake_bridge), GFP_KERNEL);
+	fake_bridge = kzalloc_obj(*fake_bridge, GFP_KERNEL);
 	if (!fake_bridge) {
 		retval = -ENOMEM;
 		goto err_struct;
 	}

-	fake_device = kzalloc(sizeof(*fake_device), GFP_KERNEL);
+	fake_device = kzalloc_obj(*fake_device, GFP_KERNEL);
 	if (!fake_device) {
 		retval = -ENOMEM;
 		goto err_driver;
@@ -1102,7 +1102,7 @@ static int __init fake_init(void)
 	/* Add master windows to list */
 	INIT_LIST_HEAD(&fake_bridge->master_resources);
 	for (i = 0; i < FAKE_MAX_MASTER; i++) {
-		master_image = kmalloc(sizeof(*master_image), GFP_KERNEL);
+		master_image = kmalloc_obj(*master_image, GFP_KERNEL);
 		if (!master_image) {
 			retval = -ENOMEM;
 			goto err_master;
@@ -1128,7 +1128,7 @@ static int __init fake_init(void)
 	/* Add slave windows to list */
 	INIT_LIST_HEAD(&fake_bridge->slave_resources);
 	for (i = 0; i < FAKE_MAX_SLAVE; i++) {
-		slave_image = kmalloc(sizeof(*slave_image), GFP_KERNEL);
+		slave_image = kmalloc_obj(*slave_image, GFP_KERNEL);
 		if (!slave_image) {
 			retval = -ENOMEM;
 			goto err_slave;
@@ -1150,7 +1150,7 @@ static int __init fake_init(void)

 	/* Add location monitor to list */
 	INIT_LIST_HEAD(&fake_bridge->lm_resources);
-	lm = kmalloc(sizeof(*lm), GFP_KERNEL);
+	lm = kmalloc_obj(*lm, GFP_KERNEL);
 	if (!lm) {
 		retval = -ENOMEM;
 		goto err_lm;
diff --git a/drivers/staging/vme_user/vme_tsi148.c b/drivers/staging/vme_user/vme_tsi148.c
index 733594dde9ae..123408fffb6f 100644
--- a/drivers/staging/vme_user/vme_tsi148.c
+++ b/drivers/staging/vme_user/vme_tsi148.c
@@ -1611,7 +1611,7 @@ static int tsi148_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *s
 	tsi148_bridge = list->parent->parent;

 	/* Descriptor must be aligned on 64-bit boundaries */
-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		retval = -ENOMEM;
 		goto err_mem;
@@ -2260,14 +2260,14 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	/* If we want to support more than one of each bridge, we need to
 	 * dynamically generate this so we get one per device
 	 */
-	tsi148_bridge = kzalloc(sizeof(*tsi148_bridge), GFP_KERNEL);
+	tsi148_bridge = kzalloc_obj(*tsi148_bridge, GFP_KERNEL);
 	if (!tsi148_bridge) {
 		retval = -ENOMEM;
 		goto err_struct;
 	}
 	vme_init_bridge(tsi148_bridge);

-	tsi148_device = kzalloc(sizeof(*tsi148_device), GFP_KERNEL);
+	tsi148_device = kzalloc_obj(*tsi148_device, GFP_KERNEL);
 	if (!tsi148_device) {
 		retval = -ENOMEM;
 		goto err_driver;
@@ -2332,9 +2332,8 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	if (err_chk) {
 		master_num--;

-		tsi148_device->flush_image =
-			kmalloc(sizeof(*tsi148_device->flush_image),
-				GFP_KERNEL);
+		tsi148_device->flush_image = kmalloc_obj(*tsi148_device->flush_image,
+							 GFP_KERNEL);
 		if (!tsi148_device->flush_image) {
 			retval = -ENOMEM;
 			goto err_master;
@@ -2350,7 +2349,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)

 	/* Add master windows to list */
 	for (i = 0; i < master_num; i++) {
-		master_image = kmalloc(sizeof(*master_image), GFP_KERNEL);
+		master_image = kmalloc_obj(*master_image, GFP_KERNEL);
 		if (!master_image) {
 			retval = -ENOMEM;
 			goto err_master;
@@ -2376,7 +2375,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)

 	/* Add slave windows to list */
 	for (i = 0; i < TSI148_MAX_SLAVE; i++) {
-		slave_image = kmalloc(sizeof(*slave_image), GFP_KERNEL);
+		slave_image = kmalloc_obj(*slave_image, GFP_KERNEL);
 		if (!slave_image) {
 			retval = -ENOMEM;
 			goto err_slave;
@@ -2397,7 +2396,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)

 	/* Add dma engines to list */
 	for (i = 0; i < TSI148_MAX_DMA; i++) {
-		dma_ctrlr = kmalloc(sizeof(*dma_ctrlr), GFP_KERNEL);
+		dma_ctrlr = kmalloc_obj(*dma_ctrlr, GFP_KERNEL);
 		if (!dma_ctrlr) {
 			retval = -ENOMEM;
 			goto err_dma;
@@ -2417,7 +2416,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	}

 	/* Add location monitor to list */
-	lm = kmalloc(sizeof(*lm), GFP_KERNEL);
+	lm = kmalloc_obj(*lm, GFP_KERNEL);
 	if (!lm) {
 		retval = -ENOMEM;
 		goto err_lm;
diff --git a/drivers/staging/vme_user/vme_user.c b/drivers/staging/vme_user/vme_user.c
index 2012cccd0d09..00da869a8056 100644
--- a/drivers/staging/vme_user/vme_user.c
+++ b/drivers/staging/vme_user/vme_user.c
@@ -464,7 +464,7 @@ static int vme_user_master_mmap(unsigned int minor, struct vm_area_struct *vma)
 		return err;
 	}

-	vma_priv = kmalloc(sizeof(*vma_priv), GFP_KERNEL);
+	vma_priv = kmalloc_obj(*vma_priv, GFP_KERNEL);
 	if (!vma_priv) {
 		mutex_unlock(&image[minor].mutex);
 		return -ENOMEM;
diff --git a/drivers/target/iscsi/cxgbit/cxgbit_cm.c b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
index d9204c590d9a..0aa4cb9e494e 100644
--- a/drivers/target/iscsi/cxgbit/cxgbit_cm.c
+++ b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
@@ -79,7 +79,7 @@ static struct np_info *
 cxgbit_np_hash_add(struct cxgbit_device *cdev, struct cxgbit_np *cnp,
 		   unsigned int stid)
 {
-	struct np_info *p = kzalloc(sizeof(*p), GFP_KERNEL);
+	struct np_info *p = kzalloc_obj(*p, GFP_KERNEL);

 	if (p) {
 		int bucket = cxgbit_np_hashfn(cnp);
@@ -431,7 +431,7 @@ int cxgbit_setup_np(struct iscsi_np *np, struct sockaddr_storage *ksockaddr)
 	    (ksockaddr->ss_family != AF_INET6))
 		return -EINVAL;

-	cnp = kzalloc(sizeof(*cnp), GFP_KERNEL);
+	cnp = kzalloc_obj(*cnp, GFP_KERNEL);
 	if (!cnp)
 		return -ENOMEM;

@@ -1288,7 +1288,7 @@ cxgbit_pass_accept_req(struct cxgbit_device *cdev, struct sk_buff *skb)
 		goto reject;
 	}

-	csk = kzalloc(sizeof(*csk), GFP_ATOMIC);
+	csk = kzalloc_obj(*csk, GFP_ATOMIC);
 	if (!csk) {
 		dst_release(dst);
 		goto rel_skb;
diff --git a/drivers/target/iscsi/cxgbit/cxgbit_main.c b/drivers/target/iscsi/cxgbit/cxgbit_main.c
index 2c1950df3b3e..e1985e1187b0 100644
--- a/drivers/target/iscsi/cxgbit/cxgbit_main.c
+++ b/drivers/target/iscsi/cxgbit/cxgbit_main.c
@@ -57,7 +57,7 @@ static void *cxgbit_uld_add(const struct cxgb4_lld_info *lldi)
 	if (is_t4(lldi->adapter_type))
 		return ERR_PTR(-ENODEV);

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		return ERR_PTR(-ENOMEM);

@@ -646,7 +646,7 @@ cxgbit_dcbevent_notify(struct notifier_block *nb, unsigned long action,
 	struct cxgbit_dcb_work *dcb_work;
 	struct dcb_app_type *dcb_app = data;

-	dcb_work = kzalloc(sizeof(*dcb_work), GFP_ATOMIC);
+	dcb_work = kzalloc_obj(*dcb_work, GFP_ATOMIC);
 	if (!dcb_work)
 		return NOTIFY_DONE;

diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index a2dde08c8a62..6ff807754304 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -121,7 +121,7 @@ struct iscsi_tiqn *iscsit_add_tiqn(unsigned char *buf)
 		return ERR_PTR(-EINVAL);
 	}

-	tiqn = kzalloc(sizeof(*tiqn), GFP_KERNEL);
+	tiqn = kzalloc_obj(*tiqn, GFP_KERNEL);
 	if (!tiqn)
 		return ERR_PTR(-ENOMEM);

@@ -352,7 +352,7 @@ struct iscsi_np *iscsit_add_np(
 		return np;
 	}

-	np = kzalloc(sizeof(*np), GFP_KERNEL);
+	np = kzalloc_obj(*np, GFP_KERNEL);
 	if (!np) {
 		mutex_unlock(&np_lock);
 		return ERR_PTR(-ENOMEM);
@@ -674,7 +674,7 @@ static int __init iscsi_target_init_module(void)
 	int ret = 0, size;

 	pr_debug("iSCSI-Target "ISCSIT_VERSION"\n");
-	iscsit_global = kzalloc(sizeof(*iscsit_global), GFP_KERNEL);
+	iscsit_global = kzalloc_obj(*iscsit_global, GFP_KERNEL);
 	if (!iscsit_global)
 		return -1;

@@ -981,7 +981,7 @@ static int iscsit_allocate_iovecs(struct iscsit_cmd *cmd)
 	u32 iov_count = max(1UL, DIV_ROUND_UP(cmd->se_cmd.data_length, PAGE_SIZE));

 	iov_count += ISCSI_IOV_DATA_BUFFER;
-	cmd->iov_data = kcalloc(iov_count, sizeof(*cmd->iov_data), GFP_KERNEL);
+	cmd->iov_data = kzalloc_objs(*cmd->iov_data, iov_count, GFP_KERNEL);
 	if (!cmd->iov_data)
 		return -ENOMEM;

@@ -1992,7 +1992,7 @@ iscsit_handle_task_mgt_cmd(struct iscsit_conn *conn, struct iscsit_cmd *cmd,
 		hdr->refcmdsn = cpu_to_be32(ISCSI_RESERVED_TAG);

 	cmd->data_direction = DMA_NONE;
-	cmd->tmr_req = kzalloc(sizeof(*cmd->tmr_req), GFP_KERNEL);
+	cmd->tmr_req = kzalloc_obj(*cmd->tmr_req, GFP_KERNEL);
 	if (!cmd->tmr_req) {
 		return iscsit_add_reject_cmd(cmd,
 					     ISCSI_REASON_BOOKMARK_NO_RESOURCES,
diff --git a/drivers/target/iscsi/iscsi_target_auth.c b/drivers/target/iscsi/iscsi_target_auth.c
index 2c4d583fe3e6..d6f3611c0d4b 100644
--- a/drivers/target/iscsi/iscsi_target_auth.c
+++ b/drivers/target/iscsi/iscsi_target_auth.c
@@ -152,7 +152,7 @@ static struct iscsi_chap *chap_server_open(
 		return NULL;
 	}

-	conn->auth_protocol = kzalloc(sizeof(struct iscsi_chap), GFP_KERNEL);
+	conn->auth_protocol = kzalloc_obj(struct iscsi_chap, GFP_KERNEL);
 	if (!conn->auth_protocol)
 		return NULL;

diff --git a/drivers/target/iscsi/iscsi_target_erl2.c b/drivers/target/iscsi/iscsi_target_erl2.c
index 56d78af7cec7..7e7193a40959 100644
--- a/drivers/target/iscsi/iscsi_target_erl2.c
+++ b/drivers/target/iscsi/iscsi_target_erl2.c
@@ -268,7 +268,7 @@ int iscsit_prepare_cmds_for_reallegiance(struct iscsit_conn *conn)
 	 * (struct iscsit_cmd->cr) so we need to allocate this before preparing the
 	 * connection's command list for connection recovery.
 	 */
-	cr = kzalloc(sizeof(struct iscsi_conn_recovery), GFP_KERNEL);
+	cr = kzalloc_obj(struct iscsi_conn_recovery, GFP_KERNEL);
 	if (!cr) {
 		pr_err("Unable to allocate memory for"
 			" struct iscsi_conn_recovery.\n");
diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
index 53aca059dc16..8a5a711b505b 100644
--- a/drivers/target/iscsi/iscsi_target_login.c
+++ b/drivers/target/iscsi/iscsi_target_login.c
@@ -38,7 +38,7 @@ static struct iscsi_login *iscsi_login_init_conn(struct iscsit_conn *conn)
 {
 	struct iscsi_login *login;

-	login = kzalloc(sizeof(struct iscsi_login), GFP_KERNEL);
+	login = kzalloc_obj(struct iscsi_login, GFP_KERNEL);
 	if (!login) {
 		pr_err("Unable to allocate memory for struct iscsi_login.\n");
 		return NULL;
@@ -219,7 +219,7 @@ static int iscsi_login_zero_tsih_s1(
 	struct iscsi_login_req *pdu = (struct iscsi_login_req *)buf;
 	int ret;

-	sess = kzalloc(sizeof(struct iscsit_session), GFP_KERNEL);
+	sess = kzalloc_obj(struct iscsit_session, GFP_KERNEL);
 	if (!sess) {
 		iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
 				ISCSI_LOGIN_STATUS_NO_RESOURCES);
@@ -267,7 +267,7 @@ static int iscsi_login_zero_tsih_s1(
 	 */
 	atomic_set(&sess->max_cmd_sn, be32_to_cpu(pdu->cmdsn));

-	sess->sess_ops = kzalloc(sizeof(struct iscsi_sess_ops), GFP_KERNEL);
+	sess->sess_ops = kzalloc_obj(struct iscsi_sess_ops, GFP_KERNEL);
 	if (!sess->sess_ops) {
 		iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
 				ISCSI_LOGIN_STATUS_NO_RESOURCES);
@@ -1002,7 +1002,7 @@ static struct iscsit_conn *iscsit_alloc_conn(struct iscsi_np *np)
 {
 	struct iscsit_conn *conn;

-	conn = kzalloc(sizeof(struct iscsit_conn), GFP_KERNEL);
+	conn = kzalloc_obj(struct iscsit_conn, GFP_KERNEL);
 	if (!conn) {
 		pr_err("Could not allocate memory for new connection\n");
 		return NULL;
@@ -1040,7 +1040,7 @@ static struct iscsit_conn *iscsit_alloc_conn(struct iscsi_np *np)
 	if (iscsit_conn_set_transport(conn, np->np_transport) < 0)
 		goto free_conn;

-	conn->conn_ops = kzalloc(sizeof(struct iscsi_conn_ops), GFP_KERNEL);
+	conn->conn_ops = kzalloc_obj(struct iscsi_conn_ops, GFP_KERNEL);
 	if (!conn->conn_ops) {
 		pr_err("Unable to allocate memory for struct iscsi_conn_ops.\n");
 		goto put_transport;
diff --git a/drivers/target/iscsi/iscsi_target_parameters.c b/drivers/target/iscsi/iscsi_target_parameters.c
index 1d4e1788e073..fce6c91ac157 100644
--- a/drivers/target/iscsi/iscsi_target_parameters.c
+++ b/drivers/target/iscsi/iscsi_target_parameters.c
@@ -73,7 +73,7 @@ static struct iscsi_param *iscsi_set_default_param(struct iscsi_param_list *para
 {
 	struct iscsi_param *param = NULL;

-	param = kzalloc(sizeof(struct iscsi_param), GFP_KERNEL);
+	param = kzalloc_obj(struct iscsi_param, GFP_KERNEL);
 	if (!param) {
 		pr_err("Unable to allocate memory for parameter.\n");
 		goto out;
@@ -148,7 +148,7 @@ int iscsi_create_default_params(struct iscsi_param_list **param_list_ptr)
 	struct iscsi_param *param = NULL;
 	struct iscsi_param_list *pl;

-	pl = kzalloc(sizeof(struct iscsi_param_list), GFP_KERNEL);
+	pl = kzalloc_obj(struct iscsi_param_list, GFP_KERNEL);
 	if (!pl) {
 		pr_err("Unable to allocate memory for"
 				" struct iscsi_param_list.\n");
@@ -519,7 +519,7 @@ int iscsi_copy_param_list(
 	struct iscsi_param *new_param = NULL;
 	struct iscsi_param_list *param_list = NULL;

-	param_list = kzalloc(sizeof(struct iscsi_param_list), GFP_KERNEL);
+	param_list = kzalloc_obj(struct iscsi_param_list, GFP_KERNEL);
 	if (!param_list) {
 		pr_err("Unable to allocate memory for struct iscsi_param_list.\n");
 		return -ENOMEM;
@@ -535,7 +535,7 @@ int iscsi_copy_param_list(
 				continue;
 		}

-		new_param = kzalloc(sizeof(struct iscsi_param), GFP_KERNEL);
+		new_param = kzalloc_obj(struct iscsi_param, GFP_KERNEL);
 		if (!new_param) {
 			pr_err("Unable to allocate memory for struct iscsi_param.\n");
 			goto err_out;
@@ -670,7 +670,7 @@ static int iscsi_add_notunderstood_response(
 		return -1;
 	}

-	extra_response = kzalloc(sizeof(struct iscsi_extra_response), GFP_KERNEL);
+	extra_response = kzalloc_obj(struct iscsi_extra_response, GFP_KERNEL);
 	if (!extra_response) {
 		pr_err("Unable to allocate memory for"
 			" struct iscsi_extra_response.\n");
diff --git a/drivers/target/iscsi/iscsi_target_seq_pdu_list.c b/drivers/target/iscsi/iscsi_target_seq_pdu_list.c
index 66de2b8de463..75c37c8866c8 100644
--- a/drivers/target/iscsi/iscsi_target_seq_pdu_list.c
+++ b/drivers/target/iscsi/iscsi_target_seq_pdu_list.c
@@ -535,7 +535,7 @@ int iscsit_build_pdu_and_seq_lists(
 	iscsit_determine_counts_for_list(cmd, &bl, &seq_count, &pdu_count);

 	if (!conn->sess->sess_ops->DataSequenceInOrder) {
-		seq = kcalloc(seq_count, sizeof(struct iscsi_seq), GFP_ATOMIC);
+		seq = kzalloc_objs(struct iscsi_seq, seq_count, GFP_ATOMIC);
 		if (!seq) {
 			pr_err("Unable to allocate struct iscsi_seq list\n");
 			return -ENOMEM;
@@ -545,7 +545,7 @@ int iscsit_build_pdu_and_seq_lists(
 	}

 	if (!conn->sess->sess_ops->DataPDUInOrder) {
-		pdu = kcalloc(pdu_count, sizeof(struct iscsi_pdu), GFP_ATOMIC);
+		pdu = kzalloc_objs(struct iscsi_pdu, pdu_count, GFP_ATOMIC);
 		if (!pdu) {
 			pr_err("Unable to allocate struct iscsi_pdu list.\n");
 			kfree(seq);
diff --git a/drivers/target/iscsi/iscsi_target_tpg.c b/drivers/target/iscsi/iscsi_target_tpg.c
index bf06cfdfb012..82463efca798 100644
--- a/drivers/target/iscsi/iscsi_target_tpg.c
+++ b/drivers/target/iscsi/iscsi_target_tpg.c
@@ -26,7 +26,7 @@ struct iscsi_portal_group *iscsit_alloc_portal_group(struct iscsi_tiqn *tiqn, u1
 {
 	struct iscsi_portal_group *tpg;

-	tpg = kzalloc(sizeof(struct iscsi_portal_group), GFP_KERNEL);
+	tpg = kzalloc_obj(struct iscsi_portal_group, GFP_KERNEL);
 	if (!tpg) {
 		pr_err("Unable to allocate struct iscsi_portal_group\n");
 		return NULL;
@@ -464,7 +464,7 @@ struct iscsi_tpg_np *iscsit_tpg_add_network_portal(
 		}
 	}

-	tpg_np = kzalloc(sizeof(struct iscsi_tpg_np), GFP_KERNEL);
+	tpg_np = kzalloc_obj(struct iscsi_tpg_np, GFP_KERNEL);
 	if (!tpg_np) {
 		pr_err("Unable to allocate memory for"
 				" struct iscsi_tpg_np.\n");
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 0821a149573e..94e191809e1c 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -693,7 +693,7 @@ static int tcm_loop_make_nexus(
 		return -EEXIST;
 	}

-	tl_nexus = kzalloc(sizeof(*tl_nexus), GFP_KERNEL);
+	tl_nexus = kzalloc_obj(*tl_nexus, GFP_KERNEL);
 	if (!tl_nexus)
 		return -ENOMEM;

@@ -994,7 +994,7 @@ static struct se_wwn *tcm_loop_make_scsi_hba(
 	char *ptr;
 	int ret, off = 0;

-	tl_hba = kzalloc(sizeof(*tl_hba), GFP_KERNEL);
+	tl_hba = kzalloc_obj(*tl_hba, GFP_KERNEL);
 	if (!tl_hba)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
index 09120a538a40..ef69c1321dd0 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
@@ -186,7 +186,7 @@ static struct sbp_session *sbp_session_create(

 	snprintf(guid_str, sizeof(guid_str), "%016llx", guid);

-	sess = kmalloc(sizeof(*sess), GFP_KERNEL);
+	sess = kmalloc_obj(*sess, GFP_KERNEL);
 	if (!sess)
 		return ERR_PTR(-ENOMEM);

@@ -391,7 +391,7 @@ static void sbp_management_request_login(
 		1 << LOGIN_ORB_RECONNECT(be32_to_cpu(req->orb.misc)),
 		tport->max_reconnect_timeout) - 1;

-	login = kmalloc(sizeof(*login), GFP_KERNEL);
+	login = kmalloc_obj(*login, GFP_KERNEL);
 	if (!login) {
 		pr_err("failed to allocate login descriptor\n");

@@ -428,7 +428,7 @@ static void sbp_management_request_login(
 	spin_unlock_bh(&sess->lock);

 already_logged_in:
-	response = kzalloc(sizeof(*response), GFP_KERNEL);
+	response = kzalloc_obj(*response, GFP_KERNEL);
 	if (!response) {
 		pr_err("failed to allocate login response block\n");

@@ -1014,7 +1014,7 @@ static struct sbp_target_agent *sbp_target_agent_register(
 	struct sbp_target_agent *agent;
 	int ret;

-	agent = kmalloc(sizeof(*agent), GFP_KERNEL);
+	agent = kmalloc_obj(*agent, GFP_KERNEL);
 	if (!agent)
 		return ERR_PTR(-ENOMEM);

@@ -1603,7 +1603,7 @@ static void sbp_mgt_agent_rw(struct fw_card *card,
 			rcode = RCODE_CONFLICT_ERROR;
 			goto out;
 		}
-		req = kzalloc(sizeof(*req), GFP_ATOMIC);
+		req = kzalloc_obj(*req, GFP_ATOMIC);
 		if (!req) {
 			rcode = RCODE_CONFLICT_ERROR;
 			goto out;
@@ -1636,7 +1636,7 @@ static struct sbp_management_agent *sbp_management_agent_register(
 	int ret;
 	struct sbp_management_agent *agent;

-	agent = kmalloc(sizeof(*agent), GFP_KERNEL);
+	agent = kmalloc_obj(*agent, GFP_KERNEL);
 	if (!agent)
 		return ERR_PTR(-ENOMEM);

@@ -1973,7 +1973,7 @@ static struct se_portal_group *sbp_make_tpg(struct se_wwn *wwn,
 		return ERR_PTR(-EBUSY);
 	}

-	tpg = kzalloc(sizeof(*tpg), GFP_KERNEL);
+	tpg = kzalloc_obj(*tpg, GFP_KERNEL);
 	if (!tpg)
 		return ERR_PTR(-ENOMEM);

@@ -2030,7 +2030,7 @@ static struct se_wwn *sbp_make_tport(
 	if (sbp_parse_wwn(name, &guid) < 0)
 		return ERR_PTR(-EINVAL);

-	tport = kzalloc(sizeof(*tport), GFP_KERNEL);
+	tport = kzalloc_obj(*tport, GFP_KERNEL);
 	if (!tport)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
index b27a3b8dd767..a63de1b6c2b4 100644
--- a/drivers/target/target_core_configfs.c
+++ b/drivers/target/target_core_configfs.c
@@ -475,12 +475,12 @@ int target_register_template(const struct target_core_fabric_ops *fo)
 	if (ret)
 		return ret;

-	tf = kzalloc(sizeof(struct target_fabric_configfs), GFP_KERNEL);
+	tf = kzalloc_obj(struct target_fabric_configfs, GFP_KERNEL);
 	if (!tf) {
 		pr_err("%s: could not allocate memory!\n", __func__);
 		return -ENOMEM;
 	}
-	tfo = kzalloc(sizeof(struct target_core_fabric_ops), GFP_KERNEL);
+	tfo = kzalloc_obj(struct target_core_fabric_ops, GFP_KERNEL);
 	if (!tfo) {
 		kfree(tf);
 		pr_err("%s: could not allocate memory!\n", __func__);
diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
index 8ccb8541db1c..f082cbc79751 100644
--- a/drivers/target/target_core_device.c
+++ b/drivers/target/target_core_device.c
@@ -324,7 +324,7 @@ int core_enable_device_list_for_node(
 	struct se_dev_entry *orig, *new;
 	int ret = 0;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new) {
 		pr_err("Unable to allocate se_dev_entry memory\n");
 		return -ENOMEM;
@@ -591,7 +591,7 @@ struct se_lun_acl *core_dev_init_initiator_node_lun_acl(
 		*ret = -EOVERFLOW;
 		return NULL;
 	}
-	lacl = kzalloc(sizeof(struct se_lun_acl), GFP_KERNEL);
+	lacl = kzalloc_obj(struct se_lun_acl, GFP_KERNEL);
 	if (!lacl) {
 		pr_err("Unable to allocate memory for struct se_lun_acl.\n");
 		*ret = -ENOMEM;
@@ -726,7 +726,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name)
 	if (!dev->stats)
 		goto free_device;

-	dev->queues = kcalloc(nr_cpu_ids, sizeof(*dev->queues), GFP_KERNEL);
+	dev->queues = kzalloc_objs(*dev->queues, nr_cpu_ids, GFP_KERNEL);
 	if (!dev->queues)
 		goto free_stats;

diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c
index 59713e9be10a..69590c570859 100644
--- a/drivers/target/target_core_fabric_configfs.c
+++ b/drivers/target/target_core_fabric_configfs.c
@@ -899,7 +899,7 @@ target_fabric_setup_tpg_base_cit(struct target_fabric_configfs *tf)
 	nr_attrs++;

 	/* + 1 for final NULL in the array */
-	attrs = kcalloc(nr_attrs + 1, sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_objs(*attrs, nr_attrs + 1, GFP_KERNEL);
 	if (!attrs)
 		return -ENOMEM;

diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
index b2610073e8cc..5347800a276d 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -38,7 +38,7 @@ static int fd_attach_hba(struct se_hba *hba, u32 host_id)
 {
 	struct fd_host *fd_host;

-	fd_host = kzalloc(sizeof(struct fd_host), GFP_KERNEL);
+	fd_host = kzalloc_obj(struct fd_host, GFP_KERNEL);
 	if (!fd_host) {
 		pr_err("Unable to allocate memory for struct fd_host\n");
 		return -ENOMEM;
@@ -73,7 +73,7 @@ static struct se_device *fd_alloc_device(struct se_hba *hba, const char *name)
 	struct fd_dev *fd_dev;
 	struct fd_host *fd_host = hba->hba_ptr;

-	fd_dev = kzalloc(sizeof(struct fd_dev), GFP_KERNEL);
+	fd_dev = kzalloc_obj(struct fd_dev, GFP_KERNEL);
 	if (!fd_dev) {
 		pr_err("Unable to allocate memory for struct fd_dev\n");
 		return NULL;
@@ -276,7 +276,7 @@ fd_execute_rw_aio(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
 	ssize_t len = 0;
 	int ret = 0, i;

-	aio_cmd = kmalloc(struct_size(aio_cmd, bvecs, sgl_nents), GFP_KERNEL);
+	aio_cmd = kmalloc_flex(*aio_cmd, bvecs, sgl_nents, GFP_KERNEL);
 	if (!aio_cmd)
 		return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;

@@ -320,7 +320,7 @@ static int fd_do_rw(struct se_cmd *cmd, struct file *fd,
 	loff_t pos = (cmd->t_task_lba * block_size);
 	int ret = 0, i;

-	bvec = kcalloc(sgl_nents, sizeof(struct bio_vec), GFP_KERNEL);
+	bvec = kzalloc_objs(struct bio_vec, sgl_nents, GFP_KERNEL);
 	if (!bvec) {
 		pr_err("Unable to allocate fd_do_readv iov[]\n");
 		return -ENOMEM;
@@ -455,7 +455,7 @@ fd_execute_write_same(struct se_cmd *cmd)
 		return TCM_INVALID_CDB_FIELD;
 	}

-	bvec = kcalloc(nolb, sizeof(struct bio_vec), GFP_KERNEL);
+	bvec = kzalloc_objs(struct bio_vec, nolb, GFP_KERNEL);
 	if (!bvec)
 		return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;

diff --git a/drivers/target/target_core_hba.c b/drivers/target/target_core_hba.c
index d508b343ba7b..deafced2c804 100644
--- a/drivers/target/target_core_hba.c
+++ b/drivers/target/target_core_hba.c
@@ -39,7 +39,7 @@ int transport_backend_register(const struct target_backend_ops *ops)
 {
 	struct target_backend *tb, *old;

-	tb = kzalloc(sizeof(*tb), GFP_KERNEL);
+	tb = kzalloc_obj(*tb, GFP_KERNEL);
 	if (!tb)
 		return -ENOMEM;
 	tb->ops = ops;
@@ -111,7 +111,7 @@ core_alloc_hba(const char *plugin_name, u32 plugin_dep_id, u32 hba_flags)
 	struct se_hba *hba;
 	int ret = 0;

-	hba = kzalloc(sizeof(*hba), GFP_KERNEL);
+	hba = kzalloc_obj(*hba, GFP_KERNEL);
 	if (!hba) {
 		pr_err("Unable to allocate struct se_hba\n");
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c
index 8ec7b534ad76..8a333c9bd294 100644
--- a/drivers/target/target_core_iblock.c
+++ b/drivers/target/target_core_iblock.c
@@ -59,15 +59,15 @@ static struct se_device *iblock_alloc_device(struct se_hba *hba, const char *nam
 {
 	struct iblock_dev *ib_dev = NULL;

-	ib_dev = kzalloc(sizeof(struct iblock_dev), GFP_KERNEL);
+	ib_dev = kzalloc_obj(struct iblock_dev, GFP_KERNEL);
 	if (!ib_dev) {
 		pr_err("Unable to allocate struct iblock_dev\n");
 		return NULL;
 	}
 	ib_dev->ibd_exclusive = true;

-	ib_dev->ibd_plug = kcalloc(nr_cpu_ids, sizeof(*ib_dev->ibd_plug),
-				   GFP_KERNEL);
+	ib_dev->ibd_plug = kzalloc_objs(*ib_dev->ibd_plug, nr_cpu_ids,
+					GFP_KERNEL);
 	if (!ib_dev->ibd_plug)
 		goto free_dev;

@@ -523,7 +523,7 @@ iblock_execute_write_same(struct se_cmd *cmd)
 			return 0;
 	}

-	ibr = kzalloc(sizeof(struct iblock_req), GFP_KERNEL);
+	ibr = kzalloc_obj(struct iblock_req, GFP_KERNEL);
 	if (!ibr)
 		goto fail;
 	cmd->priv = ibr;
@@ -783,7 +783,7 @@ iblock_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
 		miter_dir = SG_MITER_FROM_SG;
 	}

-	ibr = kzalloc(sizeof(struct iblock_req), GFP_KERNEL);
+	ibr = kzalloc_obj(struct iblock_req, GFP_KERNEL);
 	if (!ibr)
 		goto fail;
 	cmd->priv = ibr;
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index 83e172c92238..1272c24512fa 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -1490,7 +1490,7 @@ core_scsi3_decode_spec_i_port(
 	 * local_node_acl pointer and add to struct list_head tid_dest_list
 	 * for add registration processing in the loop of tid_dest_list below.
 	 */
-	tidh_new = kzalloc(sizeof(struct pr_transport_id_holder), GFP_KERNEL);
+	tidh_new = kzalloc_obj(struct pr_transport_id_holder, GFP_KERNEL);
 	if (!tidh_new) {
 		pr_err("Unable to allocate tidh_new\n");
 		return TCM_INSUFFICIENT_REGISTRATION_RESOURCES;
@@ -1712,8 +1712,8 @@ core_scsi3_decode_spec_i_port(
 		 * the dest_node_acl and dest_se_deve pointers for the
 		 * loop below.
 		 */
-		tidh_new = kzalloc(sizeof(struct pr_transport_id_holder),
-				GFP_KERNEL);
+		tidh_new = kzalloc_obj(struct pr_transport_id_holder,
+				       GFP_KERNEL);
 		if (!tidh_new) {
 			pr_err("Unable to allocate tidh_new\n");
 			core_scsi3_lunacl_undepend_item(dest_se_deve);
diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
index 823b2665f95b..4f86030c9ad5 100644
--- a/drivers/target/target_core_pscsi.c
+++ b/drivers/target/target_core_pscsi.c
@@ -51,7 +51,7 @@ static int pscsi_attach_hba(struct se_hba *hba, u32 host_id)
 {
 	struct pscsi_hba_virt *phv;

-	phv = kzalloc(sizeof(struct pscsi_hba_virt), GFP_KERNEL);
+	phv = kzalloc_obj(struct pscsi_hba_virt, GFP_KERNEL);
 	if (!phv) {
 		pr_err("Unable to allocate struct pscsi_hba_virt\n");
 		return -ENOMEM;
@@ -247,7 +247,7 @@ pscsi_get_inquiry_vpd_device_ident(struct scsi_device *sdev,
 		}
 		pr_debug("T10 VPD Identifier Length: %d\n", ident_len);

-		vpd = kzalloc(sizeof(struct t10_vpd), GFP_KERNEL);
+		vpd = kzalloc_obj(struct t10_vpd, GFP_KERNEL);
 		if (!vpd) {
 			pr_err("Unable to allocate memory for"
 					" struct t10_vpd\n");
@@ -334,7 +334,7 @@ static struct se_device *pscsi_alloc_device(struct se_hba *hba,
 {
 	struct pscsi_dev_virt *pdv;

-	pdv = kzalloc(sizeof(struct pscsi_dev_virt), GFP_KERNEL);
+	pdv = kzalloc_obj(struct pscsi_dev_virt, GFP_KERNEL);
 	if (!pdv) {
 		pr_err("Unable to allocate memory for struct pscsi_dev_virt\n");
 		return NULL;
diff --git a/drivers/target/target_core_rd.c b/drivers/target/target_core_rd.c
index 6f67cc09c2b5..90ee036ad5ce 100644
--- a/drivers/target/target_core_rd.c
+++ b/drivers/target/target_core_rd.c
@@ -34,7 +34,7 @@ static int rd_attach_hba(struct se_hba *hba, u32 host_id)
 {
 	struct rd_host *rd_host;

-	rd_host = kzalloc(sizeof(*rd_host), GFP_KERNEL);
+	rd_host = kzalloc_obj(*rd_host, GFP_KERNEL);
 	if (!rd_host)
 		return -ENOMEM;

@@ -131,8 +131,7 @@ static int rd_allocate_sgl_table(struct rd_dev *rd_dev, struct rd_dev_sg_table *
 		if (sg_per_table < total_sg_needed)
 			chain_entry = 1;

-		sg = kmalloc_array(sg_per_table + chain_entry, sizeof(*sg),
-				GFP_KERNEL);
+		sg = kmalloc_objs(*sg, sg_per_table + chain_entry, GFP_KERNEL);
 		if (!sg)
 			return -ENOMEM;

@@ -192,7 +191,7 @@ static int rd_build_device_space(struct rd_dev *rd_dev)
 	total_sg_needed = rd_dev->rd_page_count;

 	sg_tables = (total_sg_needed / max_sg_per_table) + 1;
-	sg_table = kcalloc(sg_tables, sizeof(*sg_table), GFP_KERNEL);
+	sg_table = kzalloc_objs(*sg_table, sg_tables, GFP_KERNEL);
 	if (!sg_table)
 		return -ENOMEM;

@@ -249,7 +248,7 @@ static int rd_build_prot_space(struct rd_dev *rd_dev, int prot_length, int block
 	total_sg_needed = (rd_dev->rd_page_count * prot_length / block_size) + 1;

 	sg_tables = (total_sg_needed / max_sg_per_table) + 1;
-	sg_table = kcalloc(sg_tables, sizeof(*sg_table), GFP_KERNEL);
+	sg_table = kzalloc_objs(*sg_table, sg_tables, GFP_KERNEL);
 	if (!sg_table)
 		return -ENOMEM;

@@ -272,7 +271,7 @@ static struct se_device *rd_alloc_device(struct se_hba *hba, const char *name)
 	struct rd_dev *rd_dev;
 	struct rd_host *rd_host = hba->hba_ptr;

-	rd_dev = kzalloc(sizeof(*rd_dev), GFP_KERNEL);
+	rd_dev = kzalloc_obj(*rd_dev, GFP_KERNEL);
 	if (!rd_dev)
 		return NULL;

diff --git a/drivers/target/target_core_tmr.c b/drivers/target/target_core_tmr.c
index 4718db628222..db7388e207b2 100644
--- a/drivers/target/target_core_tmr.c
+++ b/drivers/target/target_core_tmr.c
@@ -31,7 +31,7 @@ int core_tmr_alloc_req(
 {
 	struct se_tmr_req *tmr;

-	tmr = kzalloc(sizeof(struct se_tmr_req), gfp_flags);
+	tmr = kzalloc_obj(struct se_tmr_req, gfp_flags);
 	if (!tmr) {
 		pr_err("Unable to allocate struct se_tmr_req\n");
 		return -ENOMEM;
diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c
index 8b5ad50baa43..bb4eaace5e77 100644
--- a/drivers/target/target_core_tpg.c
+++ b/drivers/target/target_core_tpg.c
@@ -610,7 +610,7 @@ struct se_lun *core_tpg_alloc_lun(
 {
 	struct se_lun *lun;

-	lun = kzalloc(sizeof(*lun), GFP_KERNEL);
+	lun = kzalloc_obj(*lun, GFP_KERNEL);
 	if (!lun) {
 		pr_err("Unable to allocate se_lun memory\n");
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index 50d21888a0c9..4b6899a729f7 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -233,7 +233,7 @@ struct target_cmd_counter *target_alloc_cmd_counter(void)
 	struct target_cmd_counter *cmd_cnt;
 	int rc;

-	cmd_cnt = kzalloc(sizeof(*cmd_cnt), GFP_KERNEL);
+	cmd_cnt = kzalloc_obj(*cmd_cnt, GFP_KERNEL);
 	if (!cmd_cnt)
 		return NULL;

@@ -2740,7 +2740,7 @@ void *transport_kmap_data_sg(struct se_cmd *cmd)
 		return kmap(sg_page(sg)) + sg->offset;

 	/* >1 page. use vmap */
-	pages = kmalloc_array(cmd->t_data_nents, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, cmd->t_data_nents, GFP_KERNEL);
 	if (!pages)
 		return NULL;

diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
index 3fd963612775..062e93231794 100644
--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -1293,7 +1293,7 @@ tcmu_tmr_notify(struct se_device *se_dev, enum tcm_tmreq_table tmf,
 	pr_debug("TMR event %d on dev %s, aborted cmds %d, afflicted cmd_ids %d\n",
 		 tcmu_tmr_type(tmf), udev->name, i, cmd_cnt);

-	tmr = kmalloc(struct_size(tmr, tmr_cmd_ids, cmd_cnt), GFP_NOIO);
+	tmr = kmalloc_flex(*tmr, tmr_cmd_ids, cmd_cnt, GFP_NOIO);
 	if (!tmr)
 		goto unlock;

@@ -1582,7 +1582,7 @@ static int tcmu_attach_hba(struct se_hba *hba, u32 host_id)
 {
 	struct tcmu_hba *tcmu_hba;

-	tcmu_hba = kzalloc(sizeof(struct tcmu_hba), GFP_KERNEL);
+	tcmu_hba = kzalloc_obj(struct tcmu_hba, GFP_KERNEL);
 	if (!tcmu_hba)
 		return -ENOMEM;

@@ -1602,7 +1602,7 @@ static struct se_device *tcmu_alloc_device(struct se_hba *hba, const char *name)
 {
 	struct tcmu_dev *udev;

-	udev = kzalloc(sizeof(struct tcmu_dev), GFP_KERNEL);
+	udev = kzalloc_obj(struct tcmu_dev, GFP_KERNEL);
 	if (!udev)
 		return NULL;
 	kref_init(&udev->kref);
diff --git a/drivers/target/target_core_xcopy.c b/drivers/target/target_core_xcopy.c
index 93534a6e14b7..2447b4abe2cf 100644
--- a/drivers/target/target_core_xcopy.c
+++ b/drivers/target/target_core_xcopy.c
@@ -898,7 +898,7 @@ sense_reason_t target_do_xcopy(struct se_cmd *se_cmd)
 		return TCM_PARAMETER_LIST_LENGTH_ERROR;
 	}

-	xop = kzalloc(sizeof(struct xcopy_op), GFP_KERNEL);
+	xop = kzalloc_obj(struct xcopy_op, GFP_KERNEL);
 	if (!xop)
 		goto err;
 	xop->xop_se_cmd = se_cmd;
diff --git a/drivers/target/tcm_fc/tfc_conf.c b/drivers/target/tcm_fc/tfc_conf.c
index a29b20b5f78e..7643503f739c 100644
--- a/drivers/target/tcm_fc/tfc_conf.c
+++ b/drivers/target/tcm_fc/tfc_conf.c
@@ -244,7 +244,7 @@ static struct se_portal_group *ft_add_tpg(struct se_wwn *wwn, const char *name)
 	}

 	ft_wwn = container_of(wwn, struct ft_lport_wwn, se_wwn);
-	tpg = kzalloc(sizeof(*tpg), GFP_KERNEL);
+	tpg = kzalloc_obj(*tpg, GFP_KERNEL);
 	if (!tpg)
 		return NULL;
 	tpg->index = index;
@@ -334,7 +334,7 @@ static struct se_wwn *ft_add_wwn(
 	pr_debug("add wwn %s\n", name);
 	if (ft_parse_wwn(name, &wwpn, 1) < 0)
 		return NULL;
-	ft_wwn = kzalloc(sizeof(*ft_wwn), GFP_KERNEL);
+	ft_wwn = kzalloc_obj(*ft_wwn, GFP_KERNEL);
 	if (!ft_wwn)
 		return NULL;
 	ft_wwn->wwpn = wwpn;
diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c
index d6afaba52ea5..584785ada9a6 100644
--- a/drivers/target/tcm_fc/tfc_sess.c
+++ b/drivers/target/tcm_fc/tfc_sess.c
@@ -59,7 +59,7 @@ static struct ft_tport *ft_tport_get(struct fc_lport *lport)
 		return tport;
 	}

-	tport = kzalloc(sizeof(*tport), GFP_KERNEL);
+	tport = kzalloc_obj(*tport, GFP_KERNEL);
 	if (!tport)
 		return NULL;

@@ -219,7 +219,7 @@ static struct ft_sess *ft_sess_create(struct ft_tport *tport, u32 port_id,
 		if (sess->port_id == port_id)
 			return sess;

-	sess = kzalloc(sizeof(*sess), GFP_KERNEL);
+	sess = kzalloc_obj(*sess, GFP_KERNEL);
 	if (!sess)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/target/tcm_remote/tcm_remote.c b/drivers/target/tcm_remote/tcm_remote.c
index cb8db2558056..480efdccbf67 100644
--- a/drivers/target/tcm_remote/tcm_remote.c
+++ b/drivers/target/tcm_remote/tcm_remote.c
@@ -156,7 +156,7 @@ static struct se_wwn *tcm_remote_make_wwn(
 	char *ptr;
 	int ret, off = 0;

-	remote_hba = kzalloc(sizeof(*remote_hba), GFP_KERNEL);
+	remote_hba = kzalloc_obj(*remote_hba, GFP_KERNEL);
 	if (!remote_hba)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/tc/tc.c b/drivers/tc/tc.c
index 0629f277f7b4..0cdb255f4f13 100644
--- a/drivers/tc/tc.c
+++ b/drivers/tc/tc.c
@@ -82,7 +82,7 @@ static void __init tc_bus_add_devices(struct tc_bus *tbus)
 			goto out_err;

 		/* Found a board, allocate it an entry in the list */
-		tdev = kzalloc(sizeof(*tdev), GFP_KERNEL);
+		tdev = kzalloc_obj(*tdev, GFP_KERNEL);
 		if (!tdev) {
 			pr_err("tc%x: unable to allocate tc_dev\n", slot);
 			goto out_err;
diff --git a/drivers/tee/amdtee/call.c b/drivers/tee/amdtee/call.c
index 460b0c9e511f..3d25cee5c7d0 100644
--- a/drivers/tee/amdtee/call.c
+++ b/drivers/tee/amdtee/call.c
@@ -134,7 +134,7 @@ static u32 get_ta_refcount(u32 ta_handle)
 		if (ta_data->ta_handle == ta_handle)
 			return ++ta_data->refcount;

-	ta_data = kzalloc(sizeof(*ta_data), GFP_KERNEL);
+	ta_data = kzalloc_obj(*ta_data, GFP_KERNEL);
 	if (ta_data) {
 		ta_data->ta_handle = ta_handle;
 		ta_data->refcount = 1;
@@ -293,7 +293,7 @@ int handle_map_shmem(u32 count, struct shmem_desc *start, u32 *buf_id)
 	if (!count || !start || !buf_id)
 		return -EINVAL;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

diff --git a/drivers/tee/amdtee/core.c b/drivers/tee/amdtee/core.c
index fb39d9a19c69..1ff4834722f7 100644
--- a/drivers/tee/amdtee/core.c
+++ b/drivers/tee/amdtee/core.c
@@ -38,7 +38,7 @@ static int amdtee_open(struct tee_context *ctx)
 {
 	struct amdtee_context_data *ctxdata;

-	ctxdata = kzalloc(sizeof(*ctxdata), GFP_KERNEL);
+	ctxdata = kzalloc_obj(*ctxdata, GFP_KERNEL);
 	if (!ctxdata)
 		return -ENOMEM;

@@ -122,7 +122,7 @@ static struct amdtee_session *alloc_session(struct amdtee_context_data *ctxdata,
 		}

 	/* Allocate a new session and add to list */
-	sess = kzalloc(sizeof(*sess), GFP_KERNEL);
+	sess = kzalloc_obj(*sess, GFP_KERNEL);
 	if (sess) {
 		sess->ta_handle = ta_handle;
 		kref_init(&sess->refcount);
@@ -351,7 +351,7 @@ int amdtee_map_shmem(struct tee_shm *shm)
 	if (!shm)
 		return -EINVAL;

-	shmnode = kmalloc(sizeof(*shmnode), GFP_KERNEL);
+	shmnode = kmalloc_obj(*shmnode, GFP_KERNEL);
 	if (!shmnode)
 		return -ENOMEM;

@@ -465,11 +465,11 @@ static int __init amdtee_driver_init(void)
 		return rc;
 	}

-	drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL);
+	drv_data = kzalloc_obj(*drv_data, GFP_KERNEL);
 	if (!drv_data)
 		return -ENOMEM;

-	amdtee = kzalloc(sizeof(*amdtee), GFP_KERNEL);
+	amdtee = kzalloc_obj(*amdtee, GFP_KERNEL);
 	if (!amdtee) {
 		rc = -ENOMEM;
 		goto err_kfree_drv_data;
diff --git a/drivers/tee/amdtee/shm_pool.c b/drivers/tee/amdtee/shm_pool.c
index 6346e0bc8a64..fcb0d5da4bfd 100644
--- a/drivers/tee/amdtee/shm_pool.c
+++ b/drivers/tee/amdtee/shm_pool.c
@@ -59,7 +59,7 @@ static const struct tee_shm_pool_ops pool_ops = {

 struct tee_shm_pool *amdtee_config_shm(void)
 {
-	struct tee_shm_pool *pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	struct tee_shm_pool *pool = kzalloc_obj(*pool, GFP_KERNEL);

 	if (!pool)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/tee/optee/call.c b/drivers/tee/optee/call.c
index 16eb953e14bb..5fa3edd9b233 100644
--- a/drivers/tee/optee/call.c
+++ b/drivers/tee/optee/call.c
@@ -293,7 +293,7 @@ struct optee_msg_arg *optee_get_msg_arg(struct tee_context *ctx,
 	/*
 	 * No entry was found, let's allocate a new.
 	 */
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		res = ERR_PTR(-ENOMEM);
 		goto out;
@@ -404,7 +404,7 @@ int optee_open_session(struct tee_context *ctx,
 	if (rc)
 		goto out;

-	sess = kzalloc(sizeof(*sess), GFP_KERNEL);
+	sess = kzalloc_obj(*sess, GFP_KERNEL);
 	if (!sess) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
index 2d807bc748bc..ec07a8e1a585 100644
--- a/drivers/tee/optee/core.c
+++ b/drivers/tee/optee/core.c
@@ -125,7 +125,7 @@ int optee_open(struct tee_context *ctx, bool cap_memref_null)
 	struct tee_device *teedev = ctx->teedev;
 	struct optee *optee = tee_get_drvdata(teedev);

-	ctxdata = kzalloc(sizeof(*ctxdata), GFP_KERNEL);
+	ctxdata = kzalloc_obj(*ctxdata, GFP_KERNEL);
 	if (!ctxdata)
 		return -ENOMEM;

diff --git a/drivers/tee/optee/device.c b/drivers/tee/optee/device.c
index 950b4661d5df..3f272c356ce4 100644
--- a/drivers/tee/optee/device.c
+++ b/drivers/tee/optee/device.c
@@ -81,7 +81,7 @@ static int optee_register_device(const uuid_t *device_uuid, u32 func)
 	struct tee_client_device *optee_device = NULL;
 	int rc;

-	optee_device = kzalloc(sizeof(*optee_device), GFP_KERNEL);
+	optee_device = kzalloc_obj(*optee_device, GFP_KERNEL);
 	if (!optee_device)
 		return -ENOMEM;

diff --git a/drivers/tee/optee/ffa_abi.c b/drivers/tee/optee/ffa_abi.c
index 8fc72aa95722..53ec3204b075 100644
--- a/drivers/tee/optee/ffa_abi.c
+++ b/drivers/tee/optee/ffa_abi.c
@@ -78,7 +78,7 @@ static int optee_shm_add_ffa_handle(struct optee *optee, struct tee_shm *shm,
 	struct shm_rhash *r;
 	int rc;

-	r = kmalloc(sizeof(*r), GFP_KERNEL);
+	r = kmalloc_obj(*r, GFP_KERNEL);
 	if (!r)
 		return -ENOMEM;
 	r->shm = shm;
@@ -404,7 +404,7 @@ static const struct tee_shm_pool_ops pool_ffa_ops = {
  */
 static struct tee_shm_pool *optee_ffa_shm_pool_alloc_pages(void)
 {
-	struct tee_shm_pool *pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	struct tee_shm_pool *pool = kzalloc_obj(*pool, GFP_KERNEL);

 	if (!pool)
 		return ERR_PTR(-ENOMEM);
@@ -697,7 +697,7 @@ static int optee_ffa_lend_protmem(struct optee *optee, struct tee_shm *protmem,
 	unsigned int n;
 	int rc;

-	mem_attr = kcalloc(ma_count, sizeof(*mem_attr), GFP_KERNEL);
+	mem_attr = kzalloc_objs(*mem_attr, ma_count, GFP_KERNEL);
 	for (n = 0; n < ma_count; n++) {
 		mem_attr[n].receiver = mem_attrs[n] & U16_MAX;
 		mem_attr[n].attrs = mem_attrs[n] >> 16;
@@ -1077,7 +1077,7 @@ static int optee_ffa_probe(struct ffa_device *ffa_dev)
 	if (sec_caps & OPTEE_FFA_SEC_CAP_ARG_OFFSET)
 		arg_cache_flags |= OPTEE_SHM_ARG_SHARED;

-	optee = kzalloc(sizeof(*optee), GFP_KERNEL);
+	optee = kzalloc_obj(*optee, GFP_KERNEL);
 	if (!optee)
 		return -ENOMEM;

diff --git a/drivers/tee/optee/notif.c b/drivers/tee/optee/notif.c
index 1970880c796f..7ce65c8a07cf 100644
--- a/drivers/tee/optee/notif.c
+++ b/drivers/tee/optee/notif.c
@@ -38,7 +38,7 @@ int optee_notif_wait(struct optee *optee, u_int key, u32 timeout)
 	if (key > optee->notif.max_key)
 		return -EINVAL;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;
 	init_completion(&entry->c);
diff --git a/drivers/tee/optee/protmem.c b/drivers/tee/optee/protmem.c
index 2eba48d5ac73..086df220f758 100644
--- a/drivers/tee/optee/protmem.c
+++ b/drivers/tee/optee/protmem.c
@@ -294,7 +294,7 @@ struct tee_protmem_pool *optee_protmem_alloc_dyn_pool(struct optee *optee,
 	u_int pa_width;
 	int rc;

-	rp = kzalloc(sizeof(*rp), GFP_KERNEL);
+	rp = kzalloc_obj(*rp, GFP_KERNEL);
 	if (!rp)
 		return ERR_PTR(-ENOMEM);
 	rp->use_case = id;
diff --git a/drivers/tee/optee/rpc.c b/drivers/tee/optee/rpc.c
index 1758eb7e6e8b..ef80f668a6bc 100644
--- a/drivers/tee/optee/rpc.c
+++ b/drivers/tee/optee/rpc.c
@@ -55,8 +55,7 @@ static void handle_rpc_func_cmd_i2c_transfer(struct tee_context *ctx,
 		return;
 	}

-	params = kmalloc_array(arg->num_params, sizeof(struct tee_param),
-			       GFP_KERNEL);
+	params = kmalloc_objs(struct tee_param, arg->num_params, GFP_KERNEL);
 	if (!params) {
 		arg->ret = TEEC_ERROR_OUT_OF_MEMORY;
 		return;
@@ -192,8 +191,7 @@ static void handle_rpc_supp_cmd(struct tee_context *ctx, struct optee *optee,

 	arg->ret_origin = TEEC_ORIGIN_COMMS;

-	params = kmalloc_array(arg->num_params, sizeof(struct tee_param),
-			       GFP_KERNEL);
+	params = kmalloc_objs(struct tee_param, arg->num_params, GFP_KERNEL);
 	if (!params) {
 		arg->ret = TEEC_ERROR_OUT_OF_MEMORY;
 		return;
diff --git a/drivers/tee/optee/smc_abi.c b/drivers/tee/optee/smc_abi.c
index 51fae1ab8ef8..3d33b8d6af37 100644
--- a/drivers/tee/optee/smc_abi.c
+++ b/drivers/tee/optee/smc_abi.c
@@ -626,7 +626,7 @@ static const struct tee_shm_pool_ops pool_ops = {
  */
 static struct tee_shm_pool *optee_shm_pool_alloc_pages(void)
 {
-	struct tee_shm_pool *pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	struct tee_shm_pool *pool = kzalloc_obj(*pool, GFP_KERNEL);

 	if (!pool)
 		return ERR_PTR(-ENOMEM);
@@ -1816,7 +1816,7 @@ static int optee_probe(struct platform_device *pdev)
 	if (IS_ERR(pool))
 		return PTR_ERR(pool);

-	optee = kzalloc(sizeof(*optee), GFP_KERNEL);
+	optee = kzalloc_obj(*optee, GFP_KERNEL);
 	if (!optee) {
 		rc = -ENOMEM;
 		goto err_free_shm_pool;
diff --git a/drivers/tee/optee/supp.c b/drivers/tee/optee/supp.c
index d0f397c90242..3562cb80a95a 100644
--- a/drivers/tee/optee/supp.c
+++ b/drivers/tee/optee/supp.c
@@ -89,7 +89,7 @@ u32 optee_supp_thrd_req(struct tee_context *ctx, u32 func, size_t num_params,
 	if (!supp->ctx && ctx->supp_nowait)
 		return TEEC_ERROR_COMMUNICATION;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return TEEC_ERROR_OUT_OF_MEMORY;

diff --git a/drivers/tee/qcomtee/call.c b/drivers/tee/qcomtee/call.c
index 8f8830f0df26..cd138adb5e17 100644
--- a/drivers/tee/qcomtee/call.c
+++ b/drivers/tee/qcomtee/call.c
@@ -416,8 +416,9 @@ static int qcomtee_object_invoke(struct tee_context *ctx,
 		return -ENOMEM;

 	/* +1 for ending QCOMTEE_ARG_TYPE_INV. */
-	struct qcomtee_arg *u __free(kfree) = kcalloc(arg->num_params + 1, sizeof(*u),
-						      GFP_KERNEL);
+	struct qcomtee_arg *u __free(kfree) = kzalloc_objs(*u,
+							   arg->num_params + 1,
+							   GFP_KERNEL);
 	if (!u)
 		return -ENOMEM;

@@ -562,8 +563,8 @@ static int qcomtee_supp_send(struct tee_context *ctx, u32 errno, u32 num_params,

 static int qcomtee_open(struct tee_context *ctx)
 {
-	struct qcomtee_context_data *ctxdata __free(kfree) = kzalloc(sizeof(*ctxdata),
-								     GFP_KERNEL);
+	struct qcomtee_context_data *ctxdata __free(kfree) = kzalloc_obj(*ctxdata,
+									 GFP_KERNEL);
 	if (!ctxdata)
 		return -ENOMEM;

@@ -706,7 +707,7 @@ static int qcomtee_probe(struct platform_device *pdev)
 	struct qcomtee *qcomtee;
 	int err;

-	qcomtee = kzalloc(sizeof(*qcomtee), GFP_KERNEL);
+	qcomtee = kzalloc_obj(*qcomtee, GFP_KERNEL);
 	if (!qcomtee)
 		return -ENOMEM;

diff --git a/drivers/tee/qcomtee/core.c b/drivers/tee/qcomtee/core.c
index ecd04403591c..ab477bbc8439 100644
--- a/drivers/tee/qcomtee/core.c
+++ b/drivers/tee/qcomtee/core.c
@@ -54,7 +54,7 @@ qcomtee_qtee_object_alloc(struct qcomtee_object_invoke_ctx *oic,
 	struct qcomtee *qcomtee = tee_get_drvdata(oic->ctx->teedev);
 	struct qcomtee_object *object;

-	object = kzalloc(sizeof(*object), GFP_KERNEL);
+	object = kzalloc_obj(*object, GFP_KERNEL);
 	if (!object)
 		return NULL_QCOMTEE_OBJECT;

diff --git a/drivers/tee/qcomtee/mem_obj.c b/drivers/tee/qcomtee/mem_obj.c
index a16f8fc39b8d..01bc8dcc22e7 100644
--- a/drivers/tee/qcomtee/mem_obj.c
+++ b/drivers/tee/qcomtee/mem_obj.c
@@ -91,8 +91,8 @@ int qcomtee_memobj_param_to_object(struct qcomtee_object **object,
 	struct tee_shm *shm;
 	int err;

-	struct qcomtee_mem_object *mem_object __free(kfree) = kzalloc(sizeof(*mem_object),
-								      GFP_KERNEL);
+	struct qcomtee_mem_object *mem_object __free(kfree) = kzalloc_obj(*mem_object,
+									  GFP_KERNEL);
 	if (!mem_object)
 		return -ENOMEM;

diff --git a/drivers/tee/qcomtee/qcomtee_object.h b/drivers/tee/qcomtee/qcomtee_object.h
index 5221449be7db..d763f90c62bb 100644
--- a/drivers/tee/qcomtee/qcomtee_object.h
+++ b/drivers/tee/qcomtee/qcomtee_object.h
@@ -176,7 +176,7 @@ qcomtee_object_invoke_ctx_alloc(struct tee_context *ctx)
 {
 	struct qcomtee_object_invoke_ctx *oic;

-	oic = kzalloc(sizeof(*oic), GFP_KERNEL);
+	oic = kzalloc_obj(*oic, GFP_KERNEL);
 	if (oic)
 		oic->ctx = ctx;
 	return oic;
diff --git a/drivers/tee/qcomtee/shm.c b/drivers/tee/qcomtee/shm.c
index 580bd25f98ed..7bef13767e25 100644
--- a/drivers/tee/qcomtee/shm.c
+++ b/drivers/tee/qcomtee/shm.c
@@ -140,7 +140,7 @@ struct tee_shm_pool *qcomtee_shm_pool_alloc(void)
 {
 	struct tee_shm_pool *pool;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/tee/qcomtee/user_obj.c b/drivers/tee/qcomtee/user_obj.c
index 6aa3aefd67f0..d19c6589574a 100644
--- a/drivers/tee/qcomtee/user_obj.c
+++ b/drivers/tee/qcomtee/user_obj.c
@@ -326,7 +326,7 @@ static void qcomtee_user_object_release(struct qcomtee_object *object)
 	if (!uo->notify)
 		goto out_no_notify;

-	ureq = kzalloc(sizeof(*ureq), GFP_KERNEL);
+	ureq = kzalloc_obj(*ureq, GFP_KERNEL);
 	if (!ureq)
 		goto out_no_notify;

@@ -370,7 +370,7 @@ int qcomtee_user_param_to_object(struct qcomtee_object **object,
 	int err;

 	struct qcomtee_user_object *user_object __free(kfree) =
-		kzalloc(sizeof(*user_object), GFP_KERNEL);
+		kzalloc_obj(*user_object, GFP_KERNEL);
 	if (!user_object)
 		return -ENOMEM;

diff --git a/drivers/tee/tee_core.c b/drivers/tee/tee_core.c
index 6c49e2e383c6..29df8cd1efd2 100644
--- a/drivers/tee/tee_core.c
+++ b/drivers/tee/tee_core.c
@@ -51,7 +51,7 @@ struct tee_context *teedev_open(struct tee_device *teedev)
 	if (!tee_device_get(teedev))
 		return ERR_PTR(-EINVAL);

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		rc = -ENOMEM;
 		goto err;
@@ -560,8 +560,8 @@ static int tee_ioctl_open_session(struct tee_context *ctx,
 		return -EINVAL;

 	if (arg.num_params) {
-		params = kcalloc(arg.num_params, sizeof(struct tee_param),
-				 GFP_KERNEL);
+		params = kzalloc_objs(struct tee_param, arg.num_params,
+				      GFP_KERNEL);
 		if (!params)
 			return -ENOMEM;
 		uparams = uarg->params;
@@ -638,8 +638,8 @@ static int tee_ioctl_invoke(struct tee_context *ctx,
 		return -EINVAL;

 	if (arg.num_params) {
-		params = kcalloc(arg.num_params, sizeof(struct tee_param),
-				 GFP_KERNEL);
+		params = kzalloc_objs(struct tee_param, arg.num_params,
+				      GFP_KERNEL);
 		if (!params)
 			return -ENOMEM;
 		uparams = uarg->params;
@@ -699,8 +699,8 @@ static int tee_ioctl_object_invoke(struct tee_context *ctx,
 		return -EINVAL;

 	if (arg.num_params) {
-		params = kcalloc(arg.num_params, sizeof(struct tee_param),
-				 GFP_KERNEL);
+		params = kzalloc_objs(struct tee_param, arg.num_params,
+				      GFP_KERNEL);
 		if (!params)
 			return -ENOMEM;
 		uparams = uarg->params;
@@ -844,7 +844,7 @@ static int tee_ioctl_supp_recv(struct tee_context *ctx,
 	if (size_add(sizeof(*uarg), TEE_IOCTL_PARAM_SIZE(num_params)) != buf.buf_len)
 		return -EINVAL;

-	params = kcalloc(num_params, sizeof(struct tee_param), GFP_KERNEL);
+	params = kzalloc_objs(struct tee_param, num_params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -958,7 +958,7 @@ static int tee_ioctl_supp_send(struct tee_context *ctx,
 	if (size_add(sizeof(*uarg), TEE_IOCTL_PARAM_SIZE(num_params)) > buf.buf_len)
 		return -EINVAL;

-	params = kcalloc(num_params, sizeof(struct tee_param), GFP_KERNEL);
+	params = kzalloc_objs(struct tee_param, num_params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -1052,7 +1052,7 @@ struct tee_device *tee_device_alloc(const struct tee_desc *teedesc,
 	    !teedesc->ops->release)
 		return ERR_PTR(-EINVAL);

-	teedev = kzalloc(sizeof(*teedev), GFP_KERNEL);
+	teedev = kzalloc_obj(*teedev, GFP_KERNEL);
 	if (!teedev) {
 		ret = ERR_PTR(-ENOMEM);
 		goto err;
diff --git a/drivers/tee/tee_heap.c b/drivers/tee/tee_heap.c
index d8d7735cdffb..71e50d9573c7 100644
--- a/drivers/tee/tee_heap.c
+++ b/drivers/tee/tee_heap.c
@@ -94,7 +94,7 @@ static int tee_heap_attach(struct dma_buf *dmabuf,
 	struct tee_heap_attachment *a;
 	int ret;

-	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	a = kzalloc_obj(*a, GFP_KERNEL);
 	if (!a)
 		return -ENOMEM;

@@ -188,7 +188,7 @@ static struct dma_buf *tee_dma_heap_alloc(struct dma_heap *heap,
 	if (!teedev)
 		return ERR_PTR(-EINVAL);

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf) {
 		dmabuf = ERR_PTR(-ENOMEM);
 		goto err;
@@ -260,7 +260,7 @@ static int alloc_dma_heap(struct tee_device *teedev, enum tee_dma_heap_id id,
 		return -ENOMEM;
 	}

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return -ENOMEM;
 	h->id = id;
@@ -472,7 +472,7 @@ struct tee_protmem_pool *tee_protmem_static_pool_alloc(phys_addr_t paddr,
 	if (!pfn_valid(PHYS_PFN(paddr)))
 		return ERR_PTR(-EINVAL);

-	stp = kzalloc(sizeof(*stp), GFP_KERNEL);
+	stp = kzalloc_obj(*stp, GFP_KERNEL);
 	if (!stp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
index 4a47de4bb2e5..1ed278fc9e4a 100644
--- a/drivers/tee/tee_shm.c
+++ b/drivers/tee/tee_shm.c
@@ -106,7 +106,7 @@ static struct tee_shm *shm_alloc_helper(struct tee_context *ctx, size_t size,
 		goto err_dev_put;
 	}

-	shm = kzalloc(sizeof(*shm), GFP_KERNEL);
+	shm = kzalloc_obj(*shm, GFP_KERNEL);
 	if (!shm) {
 		ret = ERR_PTR(-ENOMEM);
 		goto err_dev_put;
@@ -214,7 +214,7 @@ struct tee_shm *tee_shm_register_fd(struct tee_context *ctx, int fd)

 	teedev_ctx_get(ctx);

-	ref = kzalloc(sizeof(*ref), GFP_KERNEL);
+	ref = kzalloc_obj(*ref, GFP_KERNEL);
 	if (!ref) {
 		rc = -ENOMEM;
 		goto err_put_tee;
@@ -315,7 +315,7 @@ struct tee_shm *tee_shm_alloc_dma_mem(struct tee_context *ctx,
 	if (!page)
 		goto err_put_teedev;

-	dma_mem = kzalloc(sizeof(*dma_mem), GFP_KERNEL);
+	dma_mem = kzalloc_obj(*dma_mem, GFP_KERNEL);
 	if (!dma_mem)
 		goto err_free_pages;

@@ -373,7 +373,7 @@ int tee_dyn_shm_alloc_helper(struct tee_shm *shm, size_t size, size_t align,
 	shm->paddr = virt_to_phys(shm->kaddr);
 	shm->size = nr_pages * PAGE_SIZE;

-	pages = kcalloc(nr_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kzalloc_objs(*pages, nr_pages, GFP_KERNEL);
 	if (!pages) {
 		rc = -ENOMEM;
 		goto err_pages;
@@ -438,7 +438,7 @@ register_shm_helper(struct tee_context *ctx, struct iov_iter *iter, u32 flags,

 	teedev_ctx_get(ctx);

-	shm = kzalloc(sizeof(*shm), GFP_KERNEL);
+	shm = kzalloc_obj(*shm, GFP_KERNEL);
 	if (!shm) {
 		ret = ERR_PTR(-ENOMEM);
 		goto err_ctx_put;
@@ -456,7 +456,7 @@ register_shm_helper(struct tee_context *ctx, struct iov_iter *iter, u32 flags,
 		goto err_ctx_put;
 	}

-	shm->pages = kcalloc(num_pages, sizeof(*shm->pages), GFP_KERNEL);
+	shm->pages = kzalloc_objs(*shm->pages, num_pages, GFP_KERNEL);
 	if (!shm->pages) {
 		ret = ERR_PTR(-ENOMEM);
 		goto err_free_shm;
diff --git a/drivers/tee/tee_shm_pool.c b/drivers/tee/tee_shm_pool.c
index 80004b55628d..fc82c689c29e 100644
--- a/drivers/tee/tee_shm_pool.c
+++ b/drivers/tee/tee_shm_pool.c
@@ -65,7 +65,7 @@ struct tee_shm_pool *tee_shm_pool_alloc_res_mem(unsigned long vaddr,
 	if (vaddr & page_mask || paddr & page_mask || size & page_mask)
 		return ERR_PTR(-EINVAL);

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/tee/tstee/core.c b/drivers/tee/tstee/core.c
index 533425e9e9e7..4a4aa2bc5ab6 100644
--- a/drivers/tee/tstee/core.c
+++ b/drivers/tee/tstee/core.c
@@ -59,7 +59,7 @@ static int tstee_open(struct tee_context *ctx)
 {
 	struct ts_context_data *ctxdata;

-	ctxdata = kzalloc(sizeof(*ctxdata), GFP_KERNEL);
+	ctxdata = kzalloc_obj(*ctxdata, GFP_KERNEL);
 	if (!ctxdata)
 		return -ENOMEM;

@@ -122,7 +122,7 @@ static int tstee_open_session(struct tee_context *ctx,
 	if (ffa_args[TS_RPC_SERVICE_INFO_IFACE] > U8_MAX)
 		return -EINVAL;

-	sess = kzalloc(sizeof(*sess), GFP_KERNEL);
+	sess = kzalloc_obj(*sess, GFP_KERNEL);
 	if (!sess)
 		return -ENOMEM;

@@ -376,7 +376,7 @@ static const struct tee_shm_pool_ops pool_ops = {

 static struct tee_shm_pool *tstee_create_shm_pool(void)
 {
-	struct tee_shm_pool *pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	struct tee_shm_pool *pool = kzalloc_obj(*pool, GFP_KERNEL);

 	if (!pool)
 		return ERR_PTR(-ENOMEM);
@@ -414,7 +414,7 @@ static int tstee_probe(struct ffa_device *ffa_dev)
 	if (!tstee_check_rpc_compatible(ffa_dev))
 		return -EINVAL;

-	tstee = kzalloc(sizeof(*tstee), GFP_KERNEL);
+	tstee = kzalloc_obj(*tstee, GFP_KERNEL);
 	if (!tstee)
 		return -ENOMEM;

diff --git a/drivers/thermal/cpufreq_cooling.c b/drivers/thermal/cpufreq_cooling.c
index 6b7ab1814c12..d0bb782ff734 100644
--- a/drivers/thermal/cpufreq_cooling.c
+++ b/drivers/thermal/cpufreq_cooling.c
@@ -371,9 +371,8 @@ static int allocate_idle_time(struct cpufreq_cooling_device *cpufreq_cdev)
 {
 	unsigned int num_cpus = cpumask_weight(cpufreq_cdev->policy->related_cpus);

-	cpufreq_cdev->idle_time = kcalloc(num_cpus,
-					  sizeof(*cpufreq_cdev->idle_time),
-					  GFP_KERNEL);
+	cpufreq_cdev->idle_time = kzalloc_objs(*cpufreq_cdev->idle_time,
+					       num_cpus, GFP_KERNEL);
 	if (!cpufreq_cdev->idle_time)
 		return -ENOMEM;

@@ -543,7 +542,7 @@ __cpufreq_cooling_register(struct device_node *np,
 		return ERR_PTR(-ENODEV);
 	}

-	cpufreq_cdev = kzalloc(sizeof(*cpufreq_cdev), GFP_KERNEL);
+	cpufreq_cdev = kzalloc_obj(*cpufreq_cdev, GFP_KERNEL);
 	if (!cpufreq_cdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/thermal/cpuidle_cooling.c b/drivers/thermal/cpuidle_cooling.c
index f678c1281862..5a16d4e7e698 100644
--- a/drivers/thermal/cpuidle_cooling.c
+++ b/drivers/thermal/cpuidle_cooling.c
@@ -179,7 +179,7 @@ static int __cpuidle_cooling_register(struct device_node *np,
 	char *name;
 	int ret;

-	idle_cdev = kzalloc(sizeof(*idle_cdev), GFP_KERNEL);
+	idle_cdev = kzalloc_obj(*idle_cdev, GFP_KERNEL);
 	if (!idle_cdev) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/thermal/devfreq_cooling.c b/drivers/thermal/devfreq_cooling.c
index 8fd7cf1932cd..72fb23de5f55 100644
--- a/drivers/thermal/devfreq_cooling.c
+++ b/drivers/thermal/devfreq_cooling.c
@@ -402,7 +402,7 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
 	int err, num_opps;


-	dfc = kzalloc(sizeof(*dfc), GFP_KERNEL);
+	dfc = kzalloc_obj(*dfc, GFP_KERNEL);
 	if (!dfc)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c
index 0d9f636c80f4..696932ecb489 100644
--- a/drivers/thermal/gov_power_allocator.c
+++ b/drivers/thermal/gov_power_allocator.c
@@ -622,8 +622,7 @@ static int allocate_actors_buffer(struct power_allocator_params *params,
 		goto clean_state;
 	}

-	params->power = kcalloc(num_actors, sizeof(struct power_actor),
-				GFP_KERNEL);
+	params->power = kzalloc_objs(struct power_actor, num_actors, GFP_KERNEL);
 	if (!params->power) {
 		ret = -ENOMEM;
 		goto clean_state;
@@ -699,7 +698,7 @@ static int power_allocator_bind(struct thermal_zone_device *tz)
 	struct power_allocator_params *params;
 	int ret;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -720,7 +719,7 @@ static int power_allocator_bind(struct thermal_zone_device *tz)
 	}

 	if (!tz->tzp) {
-		tz->tzp = kzalloc(sizeof(*tz->tzp), GFP_KERNEL);
+		tz->tzp = kzalloc_obj(*tz->tzp, GFP_KERNEL);
 		if (!tz->tzp) {
 			ret = -ENOMEM;
 			goto free_params;
diff --git a/drivers/thermal/intel/int340x_thermal/acpi_thermal_rel.c b/drivers/thermal/intel/int340x_thermal/acpi_thermal_rel.c
index ce5d53be108b..d1876e76167a 100644
--- a/drivers/thermal/intel/int340x_thermal/acpi_thermal_rel.c
+++ b/drivers/thermal/intel/int340x_thermal/acpi_thermal_rel.c
@@ -89,7 +89,7 @@ int acpi_parse_trt(acpi_handle handle, int *trt_count, struct trt **trtp,
 	}

 	*trt_count = p->package.count;
-	trts = kcalloc(*trt_count, sizeof(struct trt), GFP_KERNEL);
+	trts = kzalloc_objs(struct trt, *trt_count, GFP_KERNEL);
 	if (!trts) {
 		result = -ENOMEM;
 		goto end;
@@ -165,7 +165,7 @@ int acpi_parse_art(acpi_handle handle, int *art_count, struct art **artp,

 	/* ignore p->package.elements[0], as this is _ART Revision field */
 	*art_count = p->package.count - 1;
-	arts = kcalloc(*art_count, sizeof(struct art), GFP_KERNEL);
+	arts = kzalloc_objs(struct art, *art_count, GFP_KERNEL);
 	if (!arts) {
 		result = -ENOMEM;
 		goto end;
@@ -253,7 +253,7 @@ static int acpi_parse_psvt(acpi_handle handle, int *psvt_count, struct psvt **ps
 		goto end;
 	}

-	psvts = kcalloc(*psvt_count, sizeof(*psvts), GFP_KERNEL);
+	psvts = kzalloc_objs(*psvts, *psvt_count, GFP_KERNEL);
 	if (!psvts) {
 		result = -ENOMEM;
 		goto end;
diff --git a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
index 41d3bc3ed8a2..3a97718e2f5c 100644
--- a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
+++ b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
@@ -382,8 +382,7 @@ static int evaluate_odvp(struct int3400_thermal_priv *priv)

 	if (priv->odvp == NULL) {
 		priv->odvp_count = obj->package.count;
-		priv->odvp = kmalloc_array(priv->odvp_count, sizeof(int),
-				     GFP_KERNEL);
+		priv->odvp = kmalloc_objs(int, priv->odvp_count, GFP_KERNEL);
 		if (!priv->odvp) {
 			ret = -ENOMEM;
 			goto out_err;
@@ -391,9 +390,8 @@ static int evaluate_odvp(struct int3400_thermal_priv *priv)
 	}

 	if (priv->odvp_attrs == NULL) {
-		priv->odvp_attrs = kcalloc(priv->odvp_count,
-					   sizeof(struct odvp_attr),
-					   GFP_KERNEL);
+		priv->odvp_attrs = kzalloc_objs(struct odvp_attr,
+						priv->odvp_count, GFP_KERNEL);
 		if (!priv->odvp_attrs) {
 			ret = -ENOMEM;
 			goto out_err;
@@ -563,7 +561,7 @@ static int int3400_thermal_probe(struct platform_device *pdev)
 	if (!adev)
 		return -ENODEV;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
index 3d9efe69d562..7db8fd86c4fd 100644
--- a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
+++ b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
@@ -123,7 +123,7 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
 	acpi_status status;
 	int i, ret;

-	int34x_zone = kzalloc(sizeof(*int34x_zone), GFP_KERNEL);
+	int34x_zone = kzalloc_obj(*int34x_zone, GFP_KERNEL);
 	if (!int34x_zone)
 		return ERR_PTR(-ENOMEM);

@@ -133,8 +133,9 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
 	if (ACPI_SUCCESS(status))
 		int34x_zone->aux_trip_nr = trip_cnt;

-	zone_trips = kcalloc(trip_cnt + INT340X_THERMAL_MAX_TRIP_COUNT,
-			     sizeof(*zone_trips), GFP_KERNEL);
+	zone_trips = kzalloc_objs(*zone_trips,
+				  trip_cnt + INT340X_THERMAL_MAX_TRIP_COUNT,
+				  GFP_KERNEL);
 	if (!zone_trips) {
 		ret = -ENOMEM;
 		goto err_trips_alloc;
diff --git a/drivers/thermal/intel/intel_hfi.c b/drivers/thermal/intel/intel_hfi.c
index 8a2f441cd2ec..5100ad1336ed 100644
--- a/drivers/thermal/intel/intel_hfi.c
+++ b/drivers/thermal/intel/intel_hfi.c
@@ -212,7 +212,7 @@ static void update_capabilities(struct hfi_instance *hfi_instance)
 	if (!cpu_count)
 		goto out;

-	cpu_caps = kcalloc(cpu_count, sizeof(*cpu_caps), GFP_KERNEL);
+	cpu_caps = kzalloc_objs(*cpu_caps, cpu_count, GFP_KERNEL);
 	if (!cpu_caps)
 		goto out;

@@ -690,8 +690,8 @@ void __init intel_hfi_init(void)
 	 * This allocation may fail. CPU hotplug callbacks must check
 	 * for a null pointer.
 	 */
-	hfi_instances = kcalloc(max_hfi_instances, sizeof(*hfi_instances),
-				GFP_KERNEL);
+	hfi_instances = kzalloc_objs(*hfi_instances, max_hfi_instances,
+				     GFP_KERNEL);
 	if (!hfi_instances)
 		return;

diff --git a/drivers/thermal/intel/intel_quark_dts_thermal.c b/drivers/thermal/intel/intel_quark_dts_thermal.c
index 89498eb29a89..38a0ae14b69d 100644
--- a/drivers/thermal/intel/intel_quark_dts_thermal.c
+++ b/drivers/thermal/intel/intel_quark_dts_thermal.c
@@ -336,7 +336,7 @@ static struct soc_sensor_entry *alloc_soc_dts(void)
 	int err;
 	u32 out;

-	aux_entry = kzalloc(sizeof(*aux_entry), GFP_KERNEL);
+	aux_entry = kzalloc_obj(*aux_entry, GFP_KERNEL);
 	if (!aux_entry) {
 		err = -ENOMEM;
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/thermal/intel/intel_soc_dts_iosf.c b/drivers/thermal/intel/intel_soc_dts_iosf.c
index ea87439fe7a9..78123107ac06 100644
--- a/drivers/thermal/intel/intel_soc_dts_iosf.c
+++ b/drivers/thermal/intel/intel_soc_dts_iosf.c
@@ -320,7 +320,7 @@ intel_soc_dts_iosf_init(enum intel_soc_dts_interrupt_type intr_type,
 	if (tj_max < 0)
 		return ERR_PTR(tj_max);

-	sensors = kzalloc(sizeof(*sensors), GFP_KERNEL);
+	sensors = kzalloc_obj(*sensors, GFP_KERNEL);
 	if (!sensors)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/thermal/intel/x86_pkg_temp_thermal.c b/drivers/thermal/intel/x86_pkg_temp_thermal.c
index aab5f9fca9c3..64cc0361d440 100644
--- a/drivers/thermal/intel/x86_pkg_temp_thermal.c
+++ b/drivers/thermal/intel/x86_pkg_temp_thermal.c
@@ -335,7 +335,7 @@ static int pkg_temp_thermal_device_add(unsigned int cpu)
 		return tj_max;
 	tj_max *= 1000;

-	zonedev = kzalloc(sizeof(*zonedev), GFP_KERNEL);
+	zonedev = kzalloc_obj(*zonedev, GFP_KERNEL);
 	if (!zonedev)
 		return -ENOMEM;

@@ -492,8 +492,7 @@ static int __init pkg_temp_thermal_init(void)
 		return -ENODEV;

 	max_id = topology_max_packages() * topology_max_dies_per_package();
-	zones = kcalloc(max_id, sizeof(struct zone_device *),
-			   GFP_KERNEL);
+	zones = kzalloc_objs(struct zone_device *, max_id, GFP_KERNEL);
 	if (!zones)
 		return -ENOMEM;

diff --git a/drivers/thermal/k3_j72xx_bandgap.c b/drivers/thermal/k3_j72xx_bandgap.c
index d9ec3bf19496..138a8137f790 100644
--- a/drivers/thermal/k3_j72xx_bandgap.c
+++ b/drivers/thermal/k3_j72xx_bandgap.c
@@ -462,7 +462,7 @@ static int k3_j72xx_bandgap_probe(struct platform_device *pdev)
 		goto err_alloc;
 	}

-	ref_table = kcalloc(TABLE_SIZE, sizeof(*ref_table), GFP_KERNEL);
+	ref_table = kzalloc_objs(*ref_table, TABLE_SIZE, GFP_KERNEL);
 	if (!ref_table) {
 		ret = -ENOMEM;
 		goto err_alloc;
diff --git a/drivers/thermal/testing/zone.c b/drivers/thermal/testing/zone.c
index c12c405225bb..014e6e5f0e83 100644
--- a/drivers/thermal/testing/zone.c
+++ b/drivers/thermal/testing/zone.c
@@ -186,12 +186,13 @@ int tt_add_tz(void)
 {
 	int ret;

-	struct tt_thermal_zone *tt_zone __free(kfree) = kzalloc(sizeof(*tt_zone),
-								GFP_KERNEL);
+	struct tt_thermal_zone *tt_zone __free(kfree) = kzalloc_obj(*tt_zone,
+								    GFP_KERNEL);
 	if (!tt_zone)
 		return -ENOMEM;

-	struct tt_work *tt_work __free(kfree) = kzalloc(sizeof(*tt_work), GFP_KERNEL);
+	struct tt_work *tt_work __free(kfree) = kzalloc_obj(*tt_work,
+							    GFP_KERNEL);
 	if (!tt_work)
 		return -ENOMEM;

@@ -244,7 +245,8 @@ int tt_del_tz(const char *arg)
 	if (ret != 1)
 		return -EINVAL;

-	struct tt_work *tt_work __free(kfree) = kzalloc(sizeof(*tt_work), GFP_KERNEL);
+	struct tt_work *tt_work __free(kfree) = kzalloc_obj(*tt_work,
+							    GFP_KERNEL);
 	if (!tt_work)
 		return -ENOMEM;

@@ -330,11 +332,13 @@ int tt_zone_add_trip(const char *arg)
 {
 	int id;

-	struct tt_work *tt_work __free(kfree) = kzalloc(sizeof(*tt_work), GFP_KERNEL);
+	struct tt_work *tt_work __free(kfree) = kzalloc_obj(*tt_work,
+							    GFP_KERNEL);
 	if (!tt_work)
 		return -ENOMEM;

-	struct tt_trip *tt_trip __free(kfree) = kzalloc(sizeof(*tt_trip), GFP_KERNEL);
+	struct tt_trip *tt_trip __free(kfree) = kzalloc_obj(*tt_trip,
+							    GFP_KERNEL);
 	if (!tt_trip)
 		return -ENOMEM;

@@ -391,8 +395,9 @@ static int tt_zone_register_tz(struct tt_thermal_zone *tt_zone)
 	if (tt_zone->tz)
 		return -EINVAL;

-	struct thermal_trip *trips __free(kfree) = kcalloc(tt_zone->num_trips,
-							   sizeof(*trips), GFP_KERNEL);
+	struct thermal_trip *trips __free(kfree) = kzalloc_objs(*trips,
+								tt_zone->num_trips,
+								GFP_KERNEL);
 	if (!trips)
 		return -ENOMEM;

diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index dc9f7416f7ff..daaba832b2a0 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -844,7 +844,7 @@ static int thermal_bind_cdev_to_trip(struct thermal_zone_device *tz,
 	if (cool_spec->lower > cool_spec->upper || cool_spec->upper > cdev->max_state)
 		return -EINVAL;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

@@ -1070,7 +1070,7 @@ __thermal_cooling_device_register(struct device_node *np,
 	if (!thermal_class)
 		return ERR_PTR(-ENODEV);

-	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		return ERR_PTR(-ENOMEM);

@@ -1542,7 +1542,7 @@ thermal_zone_device_register_with_trips(const char *type,
 	if (!thermal_class)
 		return ERR_PTR(-ENODEV);

-	tz = kzalloc(struct_size(tz, trips, num_trips), GFP_KERNEL);
+	tz = kzalloc_flex(*tz, trips, num_trips, GFP_KERNEL);
 	if (!tz)
 		return ERR_PTR(-ENOMEM);

@@ -1899,7 +1899,7 @@ static int __init thermal_init(void)
 	if (result)
 		goto unregister_netlink;

-	thermal_class = kzalloc(sizeof(*thermal_class), GFP_KERNEL);
+	thermal_class = kzalloc_obj(*thermal_class, GFP_KERNEL);
 	if (!thermal_class) {
 		result = -ENOMEM;
 		goto unregister_governors;
diff --git a/drivers/thermal/thermal_debugfs.c b/drivers/thermal/thermal_debugfs.c
index 11668f5b3c28..19b050cb4f70 100644
--- a/drivers/thermal/thermal_debugfs.c
+++ b/drivers/thermal/thermal_debugfs.c
@@ -193,7 +193,7 @@ static struct thermal_debugfs *thermal_debugfs_add_id(struct dentry *d, int id)
 	struct thermal_debugfs *thermal_dbg;
 	char ids[IDSLENGTH];

-	thermal_dbg = kzalloc(sizeof(*thermal_dbg), GFP_KERNEL);
+	thermal_dbg = kzalloc_obj(*thermal_dbg, GFP_KERNEL);
 	if (!thermal_dbg)
 		return NULL;

@@ -226,7 +226,7 @@ thermal_debugfs_cdev_record_alloc(struct thermal_debugfs *thermal_dbg,
 {
 	struct cdev_record *cdev_record;

-	cdev_record = kzalloc(sizeof(*cdev_record), GFP_KERNEL);
+	cdev_record = kzalloc_obj(*cdev_record, GFP_KERNEL);
 	if (!cdev_record)
 		return NULL;

@@ -559,7 +559,7 @@ static struct tz_episode *thermal_debugfs_tz_event_alloc(struct thermal_zone_dev
 	struct tz_episode *tze;
 	int i;

-	tze = kzalloc(struct_size(tze, trip_stats, tz->num_trips), GFP_KERNEL);
+	tze = kzalloc_flex(*tze, trip_stats, tz->num_trips, GFP_KERNEL);
 	if (!tze)
 		return NULL;

@@ -876,7 +876,7 @@ void thermal_debug_tz_add(struct thermal_zone_device *tz)

 	tz_dbg->tz = tz;

-	tz_dbg->trips_crossed = kcalloc(tz->num_trips, sizeof(int), GFP_KERNEL);
+	tz_dbg->trips_crossed = kzalloc_objs(int, tz->num_trips, GFP_KERNEL);
 	if (!tz_dbg->trips_crossed) {
 		thermal_debugfs_remove_id(thermal_dbg);
 		return;
diff --git a/drivers/thermal/thermal_hwmon.c b/drivers/thermal/thermal_hwmon.c
index faf1d0083890..f377175b2663 100644
--- a/drivers/thermal/thermal_hwmon.c
+++ b/drivers/thermal/thermal_hwmon.c
@@ -145,7 +145,7 @@ int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz)
 		goto register_sys_interface;
 	}

-	hwmon = kzalloc(sizeof(*hwmon), GFP_KERNEL);
+	hwmon = kzalloc_obj(*hwmon, GFP_KERNEL);
 	if (!hwmon)
 		return -ENOMEM;

@@ -160,7 +160,7 @@ int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz)
 	}

  register_sys_interface:
-	temp = kzalloc(sizeof(*temp), GFP_KERNEL);
+	temp = kzalloc_obj(*temp, GFP_KERNEL);
 	if (!temp) {
 		result = -ENOMEM;
 		goto unregister_name;
diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
index b6d0c92f5522..085a414d874b 100644
--- a/drivers/thermal/thermal_of.c
+++ b/drivers/thermal/thermal_of.c
@@ -107,7 +107,8 @@ static struct thermal_trip *thermal_of_trips_init(struct device_node *np, int *n
 	if (!count)
 		return NULL;

-	struct thermal_trip *tt __free(kfree) = kcalloc(count, sizeof(*tt), GFP_KERNEL);
+	struct thermal_trip *tt __free(kfree) = kzalloc_objs(*tt, count,
+							     GFP_KERNEL);
 	if (!tt)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
index 2538c2dcf6a9..057460b2e7bb 100644
--- a/drivers/thermal/thermal_sysfs.c
+++ b/drivers/thermal/thermal_sysfs.c
@@ -392,7 +392,7 @@ static int create_trip_attrs(struct thermal_zone_device *tz)
 	struct attribute **attrs;
 	int i;

-	attrs = kcalloc(tz->num_trips * 3 + 1, sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_objs(*attrs, tz->num_trips * 3 + 1, GFP_KERNEL);
 	if (!attrs)
 		return -ENOMEM;

@@ -465,7 +465,7 @@ int thermal_zone_create_device_groups(struct thermal_zone_device *tz)
 	/* we need one extra for trips and the NULL to terminate the array */
 	size = ARRAY_SIZE(thermal_zone_attribute_groups) + 2;
 	/* This also takes care of API requirement to be NULL terminated */
-	groups = kcalloc(size, sizeof(*groups), GFP_KERNEL);
+	groups = kzalloc_objs(*groups, size, GFP_KERNEL);
 	if (!groups)
 		return -ENOMEM;

diff --git a/drivers/thermal/thermal_thresholds.c b/drivers/thermal/thermal_thresholds.c
index 38f5fd0e8930..421ddf907b6d 100644
--- a/drivers/thermal/thermal_thresholds.c
+++ b/drivers/thermal/thermal_thresholds.c
@@ -181,7 +181,7 @@ int thermal_thresholds_add(struct thermal_zone_device *tz,
 		t->direction |= direction;
 	} else {

-		t = kmalloc(sizeof(*t), GFP_KERNEL);
+		t = kmalloc_obj(*t, GFP_KERNEL);
 		if (!t)
 			return -ENOMEM;

diff --git a/drivers/thunderbolt/ctl.c b/drivers/thunderbolt/ctl.c
index d7a535671404..3108727c4ef2 100644
--- a/drivers/thunderbolt/ctl.c
+++ b/drivers/thunderbolt/ctl.c
@@ -89,7 +89,7 @@ struct tb_cfg_request *tb_cfg_request_alloc(void)
 {
 	struct tb_cfg_request *req;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return NULL;

@@ -333,7 +333,7 @@ static void tb_ctl_pkg_free(struct ctl_pkg *pkg)

 static struct ctl_pkg *tb_ctl_pkg_alloc(struct tb_ctl *ctl)
 {
-	struct ctl_pkg *pkg = kzalloc(sizeof(*pkg), GFP_KERNEL);
+	struct ctl_pkg *pkg = kzalloc_obj(*pkg, GFP_KERNEL);
 	if (!pkg)
 		return NULL;
 	pkg->ctl = ctl;
@@ -654,7 +654,7 @@ struct tb_ctl *tb_ctl_alloc(struct tb_nhi *nhi, int index, int timeout_msec,
 			    event_cb cb, void *cb_data)
 {
 	int i;
-	struct tb_ctl *ctl = kzalloc(sizeof(*ctl), GFP_KERNEL);
+	struct tb_ctl *ctl = kzalloc_obj(*ctl, GFP_KERNEL);
 	if (!ctl)
 		return NULL;

diff --git a/drivers/thunderbolt/debugfs.c b/drivers/thunderbolt/debugfs.c
index 45266ec72f88..7e2a59dddbbd 100644
--- a/drivers/thunderbolt/debugfs.c
+++ b/drivers/thunderbolt/debugfs.c
@@ -1657,7 +1657,7 @@ static struct tb_margining *margining_alloc(struct tb_port *port,
 		return NULL;
 	}

-	margining = kzalloc(sizeof(*margining), GFP_KERNEL);
+	margining = kzalloc_obj(*margining, GFP_KERNEL);
 	if (!margining)
 		return NULL;

diff --git a/drivers/thunderbolt/dma_port.c b/drivers/thunderbolt/dma_port.c
index dc8ea188a114..ddbf5f9971fb 100644
--- a/drivers/thunderbolt/dma_port.c
+++ b/drivers/thunderbolt/dma_port.c
@@ -209,7 +209,7 @@ struct tb_dma_port *dma_port_alloc(struct tb_switch *sw)
 	if (port < 0)
 		return NULL;

-	dma = kzalloc(sizeof(*dma), GFP_KERNEL);
+	dma = kzalloc_obj(*dma, GFP_KERNEL);
 	if (!dma)
 		return NULL;

diff --git a/drivers/thunderbolt/dma_test.c b/drivers/thunderbolt/dma_test.c
index 9e47a63f28e7..8298f25ef6bd 100644
--- a/drivers/thunderbolt/dma_test.c
+++ b/drivers/thunderbolt/dma_test.c
@@ -267,7 +267,7 @@ static int dma_test_submit_rx(struct dma_test *dt, size_t npackets)
 		struct dma_test_frame *tf;
 		dma_addr_t dma_addr;

-		tf = kzalloc(sizeof(*tf), GFP_KERNEL);
+		tf = kzalloc_obj(*tf, GFP_KERNEL);
 		if (!tf)
 			return -ENOMEM;

@@ -318,7 +318,7 @@ static int dma_test_submit_tx(struct dma_test *dt, size_t npackets)
 		struct dma_test_frame *tf;
 		dma_addr_t dma_addr;

-		tf = kzalloc(sizeof(*tf), GFP_KERNEL);
+		tf = kzalloc_obj(*tf, GFP_KERNEL);
 		if (!tf)
 			return -ENOMEM;

diff --git a/drivers/thunderbolt/domain.c b/drivers/thunderbolt/domain.c
index 3ced37b4a869..1e7268e26fc2 100644
--- a/drivers/thunderbolt/domain.c
+++ b/drivers/thunderbolt/domain.c
@@ -126,7 +126,7 @@ static ssize_t boot_acl_show(struct device *dev, struct device_attribute *attr,
 	ssize_t ret;
 	int i;

-	uuids = kcalloc(tb->nboot_acl, sizeof(uuid_t), GFP_KERNEL);
+	uuids = kzalloc_objs(uuid_t, tb->nboot_acl, GFP_KERNEL);
 	if (!uuids)
 		return -ENOMEM;

@@ -181,7 +181,7 @@ static ssize_t boot_acl_store(struct device *dev, struct device_attribute *attr,
 	if (!str)
 		return -ENOMEM;

-	acl = kcalloc(tb->nboot_acl, sizeof(uuid_t), GFP_KERNEL);
+	acl = kzalloc_objs(uuid_t, tb->nboot_acl, GFP_KERNEL);
 	if (!acl) {
 		ret = -ENOMEM;
 		goto err_free_str;
diff --git a/drivers/thunderbolt/icm.c b/drivers/thunderbolt/icm.c
index d339ba835376..fda1471c7ef8 100644
--- a/drivers/thunderbolt/icm.c
+++ b/drivers/thunderbolt/icm.c
@@ -427,7 +427,7 @@ static int icm_fr_get_route(struct tb *tb, u8 link, u8 depth, u64 *route)
 	int ret, index;
 	u8 i;

-	switches = kcalloc(npackets, sizeof(*switches), GFP_KERNEL);
+	switches = kzalloc_objs(*switches, npackets, GFP_KERNEL);
 	if (!switches)
 		return -ENOMEM;

@@ -1769,7 +1769,7 @@ static void icm_handle_event(struct tb *tb, enum tb_cfg_pkg_type type,
 {
 	struct icm_notification *n;

-	n = kmalloc(sizeof(*n), GFP_KERNEL);
+	n = kmalloc_obj(*n, GFP_KERNEL);
 	if (!n)
 		return;

@@ -2246,7 +2246,7 @@ static int icm_usb4_switch_nvm_authenticate(struct tb *tb, u64 route)
 	struct tb_cfg_request *req;
 	int ret;

-	auth = kzalloc(sizeof(*auth), GFP_KERNEL);
+	auth = kzalloc_obj(*auth, GFP_KERNEL);
 	if (!auth)
 		return -ENOMEM;

diff --git a/drivers/thunderbolt/nhi.c b/drivers/thunderbolt/nhi.c
index 6d0c9d37c55d..6431c411fb17 100644
--- a/drivers/thunderbolt/nhi.c
+++ b/drivers/thunderbolt/nhi.c
@@ -587,7 +587,7 @@ static struct tb_ring *tb_ring_alloc(struct tb_nhi *nhi, u32 hop, int size,
 	dev_dbg(&nhi->pdev->dev, "allocating %s ring %d of size %d\n",
 		transmit ? "TX" : "RX", hop, size);

-	ring = kzalloc(sizeof(*ring), GFP_KERNEL);
+	ring = kzalloc_obj(*ring, GFP_KERNEL);
 	if (!ring)
 		return NULL;

diff --git a/drivers/thunderbolt/nvm.c b/drivers/thunderbolt/nvm.c
index 6901058b7ac0..ac9c5504cfc1 100644
--- a/drivers/thunderbolt/nvm.c
+++ b/drivers/thunderbolt/nvm.c
@@ -330,7 +330,7 @@ struct tb_nvm *tb_nvm_alloc(struct device *dev)
 		return ERR_PTR(-EOPNOTSUPP);
 	}

-	nvm = kzalloc(sizeof(*nvm), GFP_KERNEL);
+	nvm = kzalloc_obj(*nvm, GFP_KERNEL);
 	if (!nvm)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/thunderbolt/path.c b/drivers/thunderbolt/path.c
index 50659bd55d7b..88311c6e599b 100644
--- a/drivers/thunderbolt/path.c
+++ b/drivers/thunderbolt/path.c
@@ -150,7 +150,7 @@ struct tb_path *tb_path_discover(struct tb_port *src, int src_hopid,
 		num_hops++;
 	}

-	path = kzalloc(sizeof(*path), GFP_KERNEL);
+	path = kzalloc_obj(*path, GFP_KERNEL);
 	if (!path)
 		return NULL;

@@ -160,7 +160,7 @@ struct tb_path *tb_path_discover(struct tb_port *src, int src_hopid,
 	path->activated = true;
 	path->alloc_hopid = alloc_hopid;

-	path->hops = kcalloc(num_hops, sizeof(*path->hops), GFP_KERNEL);
+	path->hops = kzalloc_objs(*path->hops, num_hops, GFP_KERNEL);
 	if (!path->hops) {
 		kfree(path);
 		return NULL;
@@ -245,7 +245,7 @@ struct tb_path *tb_path_alloc(struct tb *tb, struct tb_port *src, int src_hopid,
 	size_t num_hops;
 	int i, ret;

-	path = kzalloc(sizeof(*path), GFP_KERNEL);
+	path = kzalloc_obj(*path, GFP_KERNEL);
 	if (!path)
 		return NULL;

@@ -267,7 +267,7 @@ struct tb_path *tb_path_alloc(struct tb *tb, struct tb_port *src, int src_hopid,
 	/* Each hop takes two ports */
 	num_hops = i / 2;

-	path->hops = kcalloc(num_hops, sizeof(*path->hops), GFP_KERNEL);
+	path->hops = kzalloc_objs(*path->hops, num_hops, GFP_KERNEL);
 	if (!path->hops) {
 		kfree(path);
 		return NULL;
diff --git a/drivers/thunderbolt/property.c b/drivers/thunderbolt/property.c
index 31aa0516932a..a274c02d71c0 100644
--- a/drivers/thunderbolt/property.c
+++ b/drivers/thunderbolt/property.c
@@ -81,7 +81,7 @@ tb_property_alloc(const char *key, enum tb_property_type type)
 {
 	struct tb_property *property;

-	property = kzalloc(sizeof(*property), GFP_KERNEL);
+	property = kzalloc_obj(*property, GFP_KERNEL);
 	if (!property)
 		return NULL;

@@ -166,7 +166,7 @@ static struct tb_property_dir *__tb_property_parse_dir(const u32 *block,
 	unsigned int content_offset;
 	struct tb_property_dir *dir;

-	dir = kzalloc(sizeof(*dir), GFP_KERNEL);
+	dir = kzalloc_obj(*dir, GFP_KERNEL);
 	if (!dir)
 		return NULL;

@@ -247,7 +247,7 @@ struct tb_property_dir *tb_property_create_dir(const uuid_t *uuid)
 {
 	struct tb_property_dir *dir;

-	dir = kzalloc(sizeof(*dir), GFP_KERNEL);
+	dir = kzalloc_obj(*dir, GFP_KERNEL);
 	if (!dir)
 		return NULL;

diff --git a/drivers/thunderbolt/retimer.c b/drivers/thunderbolt/retimer.c
index 13d64dbd2bc5..b95f5c19cca5 100644
--- a/drivers/thunderbolt/retimer.c
+++ b/drivers/thunderbolt/retimer.c
@@ -410,7 +410,7 @@ static int tb_retimer_add(struct tb_port *port, u8 index, u32 auth_status,
 	}


-	rt = kzalloc(sizeof(*rt), GFP_KERNEL);
+	rt = kzalloc_obj(*rt, GFP_KERNEL);
 	if (!rt)
 		return -ENOMEM;

diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
index e2732c575bad..90d62141ecd8 100644
--- a/drivers/thunderbolt/switch.c
+++ b/drivers/thunderbolt/switch.c
@@ -69,7 +69,7 @@ static void nvm_set_auth_status(const struct tb_switch *sw, u32 status)
 	st = __nvm_get_auth_status(sw);

 	if (!st) {
-		st = kzalloc(sizeof(*st), GFP_KERNEL);
+		st = kzalloc_obj(*st, GFP_KERNEL);
 		if (!st)
 			goto unlock;

@@ -2475,7 +2475,7 @@ struct tb_switch *tb_switch_alloc(struct tb *tb, struct device *parent,
 	if (upstream_port < 0)
 		return ERR_PTR(upstream_port);

-	sw = kzalloc(sizeof(*sw), GFP_KERNEL);
+	sw = kzalloc_obj(*sw, GFP_KERNEL);
 	if (!sw)
 		return ERR_PTR(-ENOMEM);

@@ -2503,8 +2503,8 @@ struct tb_switch *tb_switch_alloc(struct tb *tb, struct device *parent,
 	}

 	/* initialize ports */
-	sw->ports = kcalloc(sw->config.max_port_number + 1, sizeof(*sw->ports),
-				GFP_KERNEL);
+	sw->ports = kzalloc_objs(*sw->ports, sw->config.max_port_number + 1,
+				 GFP_KERNEL);
 	if (!sw->ports) {
 		ret = -ENOMEM;
 		goto err_free_sw_ports;
@@ -2577,7 +2577,7 @@ tb_switch_alloc_safe_mode(struct tb *tb, struct device *parent, u64 route)
 {
 	struct tb_switch *sw;

-	sw = kzalloc(sizeof(*sw), GFP_KERNEL);
+	sw = kzalloc_obj(*sw, GFP_KERNEL);
 	if (!sw)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
index 4f5f1dfc0fbf..4c3b2d48c4a0 100644
--- a/drivers/thunderbolt/tb.c
+++ b/drivers/thunderbolt/tb.c
@@ -94,7 +94,7 @@ static void tb_queue_hotplug(struct tb *tb, u64 route, u8 port, bool unplug)
 {
 	struct tb_hotplug_event *ev;

-	ev = kmalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kmalloc_obj(*ev, GFP_KERNEL);
 	if (!ev)
 		return;

@@ -2862,7 +2862,7 @@ static void tb_queue_dp_bandwidth_request(struct tb *tb, u64 route, u8 port,
 {
 	struct tb_hotplug_event *ev;

-	ev = kmalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kmalloc_obj(*ev, GFP_KERNEL);
 	if (!ev)
 		return;

diff --git a/drivers/thunderbolt/tunnel.c b/drivers/thunderbolt/tunnel.c
index 9fa95c595ecc..2d537ada98e1 100644
--- a/drivers/thunderbolt/tunnel.c
+++ b/drivers/thunderbolt/tunnel.c
@@ -180,11 +180,11 @@ static struct tb_tunnel *tb_tunnel_alloc(struct tb *tb, size_t npaths,
 {
 	struct tb_tunnel *tunnel;

-	tunnel = kzalloc(sizeof(*tunnel), GFP_KERNEL);
+	tunnel = kzalloc_obj(*tunnel, GFP_KERNEL);
 	if (!tunnel)
 		return NULL;

-	tunnel->paths = kcalloc(npaths, sizeof(tunnel->paths[0]), GFP_KERNEL);
+	tunnel->paths = kzalloc_objs(tunnel->paths[0], npaths, GFP_KERNEL);
 	if (!tunnel->paths) {
 		kfree(tunnel);
 		return NULL;
diff --git a/drivers/thunderbolt/usb4_port.c b/drivers/thunderbolt/usb4_port.c
index b5e06237261b..642822b58b42 100644
--- a/drivers/thunderbolt/usb4_port.c
+++ b/drivers/thunderbolt/usb4_port.c
@@ -305,7 +305,7 @@ struct usb4_port *usb4_port_device_add(struct tb_port *port)
 	struct usb4_port *usb4;
 	int ret;

-	usb4 = kzalloc(sizeof(*usb4), GFP_KERNEL);
+	usb4 = kzalloc_obj(*usb4, GFP_KERNEL);
 	if (!usb4)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/thunderbolt/xdomain.c b/drivers/thunderbolt/xdomain.c
index 63c7be818b2c..384afd16af72 100644
--- a/drivers/thunderbolt/xdomain.c
+++ b/drivers/thunderbolt/xdomain.c
@@ -858,7 +858,7 @@ tb_xdp_schedule_request(struct tb *tb, const struct tb_xdp_header *hdr,
 {
 	struct xdomain_request_work *xw;

-	xw = kmalloc(sizeof(*xw), GFP_KERNEL);
+	xw = kmalloc_obj(*xw, GFP_KERNEL);
 	if (!xw)
 		return false;

@@ -1094,7 +1094,7 @@ static void enumerate_services(struct tb_xdomain *xd)
 			continue;
 		}

-		svc = kzalloc(sizeof(*svc), GFP_KERNEL);
+		svc = kzalloc_obj(*svc, GFP_KERNEL);
 		if (!svc)
 			break;

@@ -1974,7 +1974,7 @@ struct tb_xdomain *tb_xdomain_alloc(struct tb *tb, struct device *parent,
 	down = tb_port_at(route, parent_sw);
 	tb_port_unlock(down);

-	xd = kzalloc(sizeof(*xd), GFP_KERNEL);
+	xd = kzalloc_obj(*xd, GFP_KERNEL);
 	if (!xd)
 		return NULL;

diff --git a/drivers/tty/ehv_bytechan.c b/drivers/tty/ehv_bytechan.c
index 69508d7a4135..2cbbaed14ee6 100644
--- a/drivers/tty/ehv_bytechan.c
+++ b/drivers/tty/ehv_bytechan.c
@@ -772,7 +772,7 @@ static int __init ehv_bc_init(void)
 	 * array, then you can use pointer math (e.g. "bc - bcs") to get its
 	 * tty index.
 	 */
-	bcs = kcalloc(count, sizeof(struct ehv_bc_data), GFP_KERNEL);
+	bcs = kzalloc_objs(struct ehv_bc_data, count, GFP_KERNEL);
 	if (!bcs)
 		return -ENOMEM;

diff --git a/drivers/tty/goldfish.c b/drivers/tty/goldfish.c
index 3a9582029005..c587ded7f9a5 100644
--- a/drivers/tty/goldfish.c
+++ b/drivers/tty/goldfish.c
@@ -238,9 +238,8 @@ static int goldfish_tty_create_driver(void)
 	int ret;
 	struct tty_driver *tty;

-	goldfish_ttys = kcalloc(goldfish_tty_line_count,
-				sizeof(*goldfish_ttys),
-				GFP_KERNEL);
+	goldfish_ttys = kzalloc_objs(*goldfish_ttys, goldfish_tty_line_count,
+				     GFP_KERNEL);
 	if (goldfish_ttys == NULL) {
 		ret = -ENOMEM;
 		goto err_alloc_goldfish_ttys_failed;
diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c
index 6b58f340f210..9b3856766e8c 100644
--- a/drivers/tty/hvc/hvc_console.c
+++ b/drivers/tty/hvc/hvc_console.c
@@ -922,7 +922,7 @@ struct hvc_struct *hvc_alloc(uint32_t vtermno, int data,
 			return ERR_PTR(err);
 	}

-	hp = kzalloc(struct_size(hp, outbuf, outbuf_size), GFP_KERNEL);
+	hp = kzalloc_flex(*hp, outbuf, outbuf_size, GFP_KERNEL);
 	if (!hp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/tty/hvc/hvc_iucv.c b/drivers/tty/hvc/hvc_iucv.c
index a7939c49c9cf..7fd3937d1396 100644
--- a/drivers/tty/hvc/hvc_iucv.c
+++ b/drivers/tty/hvc/hvc_iucv.c
@@ -1050,7 +1050,7 @@ static int __init hvc_iucv_alloc(int id, unsigned int is_console)
 	char name[9];
 	int rc;

-	priv = kzalloc(sizeof(struct hvc_iucv_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct hvc_iucv_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/tty/hvc/hvc_opal.c b/drivers/tty/hvc/hvc_opal.c
index b2ec1f6efa0a..72dfab77890c 100644
--- a/drivers/tty/hvc/hvc_opal.c
+++ b/drivers/tty/hvc/hvc_opal.c
@@ -181,7 +181,7 @@ static int hvc_opal_probe(struct platform_device *dev)
 		pv = hvc_opal_privs[termno];
 		boot = 1;
 	} else if (hvc_opal_privs[termno] == NULL) {
-		pv = kzalloc(sizeof(struct hvc_opal_priv), GFP_KERNEL);
+		pv = kzalloc_obj(struct hvc_opal_priv, GFP_KERNEL);
 		if (!pv)
 			return -ENOMEM;
 		pv->proto = proto;
diff --git a/drivers/tty/hvc/hvc_vio.c b/drivers/tty/hvc/hvc_vio.c
index 47930601a26a..8725cc77c557 100644
--- a/drivers/tty/hvc/hvc_vio.c
+++ b/drivers/tty/hvc/hvc_vio.c
@@ -338,7 +338,7 @@ static int hvc_vio_probe(struct vio_dev *vdev,
 		pr_devel("->non-boot console, using termno %d\n", termno);
 		if (termno < 0)
 			return -ENODEV;
-		pv = kzalloc(sizeof(struct hvterm_priv), GFP_KERNEL);
+		pv = kzalloc_obj(struct hvterm_priv, GFP_KERNEL);
 		if (!pv)
 			return -ENOMEM;
 		pv->termno = vdev->unit_address;
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index 95ec01b1aacf..138afdf3bbc4 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -264,7 +264,7 @@ static int xen_hvm_console_init(void)

 	info = vtermno_to_xencons(HVC_COOKIE);
 	if (!info) {
-		info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL);
+		info = kzalloc_obj(struct xencons_info, GFP_KERNEL);
 		if (!info)
 			return -ENOMEM;
 		spin_lock_init(&info->ring_lock);
@@ -328,7 +328,7 @@ static int xen_pv_console_init(void)

 	info = vtermno_to_xencons(HVC_COOKIE);
 	if (!info) {
-		info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL);
+		info = kzalloc_obj(struct xencons_info, GFP_KERNEL);
 		if (!info)
 			return -ENOMEM;
 	} else if (info->intf != NULL) {
@@ -352,7 +352,7 @@ static int xen_initial_domain_console_init(void)

 	info = vtermno_to_xencons(HVC_COOKIE);
 	if (!info) {
-		info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL);
+		info = kzalloc_obj(struct xencons_info, GFP_KERNEL);
 		if (!info)
 			return -ENOMEM;
 		spin_lock_init(&info->ring_lock);
@@ -513,7 +513,7 @@ static int xencons_probe(struct xenbus_device *dev,
 	if (devid == 0)
 		return -ENODEV;

-	info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL);
+	info = kzalloc_obj(struct xencons_info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	spin_lock_init(&info->ring_lock);
diff --git a/drivers/tty/hvc/hvcs.c b/drivers/tty/hvc/hvcs.c
index f57fd9095f75..7ff3c87354b8 100644
--- a/drivers/tty/hvc/hvcs.c
+++ b/drivers/tty/hvc/hvcs.c
@@ -748,7 +748,7 @@ static int hvcs_probe(
 		return -EFAULT;
 	}

-	hvcsd = kzalloc(sizeof(*hvcsd), GFP_KERNEL);
+	hvcsd = kzalloc_obj(*hvcsd, GFP_KERNEL);
 	if (!hvcsd)
 		return -ENODEV;

@@ -1394,8 +1394,7 @@ static int hvcs_alloc_index_list(int n)
 {
 	int i;

-	hvcs_index_list = kmalloc_array(n, sizeof(hvcs_index_count),
-					GFP_KERNEL);
+	hvcs_index_list = kmalloc_objs(hvcs_index_count, n, GFP_KERNEL);
 	if (!hvcs_index_list)
 		return -ENOMEM;
 	hvcs_index_count = n;
diff --git a/drivers/tty/ipwireless/hardware.c b/drivers/tty/ipwireless/hardware.c
index e18848267be4..6e6aa90b33ba 100644
--- a/drivers/tty/ipwireless/hardware.c
+++ b/drivers/tty/ipwireless/hardware.c
@@ -1618,7 +1618,7 @@ struct ipw_hardware *ipwireless_hardware_create(void)
 {
 	int i;
 	struct ipw_hardware *hw =
-		kzalloc(sizeof(struct ipw_hardware), GFP_KERNEL);
+		kzalloc_obj(struct ipw_hardware, GFP_KERNEL);

 	if (!hw)
 		return NULL;
diff --git a/drivers/tty/ipwireless/main.c b/drivers/tty/ipwireless/main.c
index 4c18bbfe1a92..3bf160d62a1e 100644
--- a/drivers/tty/ipwireless/main.c
+++ b/drivers/tty/ipwireless/main.c
@@ -267,7 +267,7 @@ static int ipwireless_attach(struct pcmcia_device *link)
 	struct ipw_dev *ipw;
 	int ret;

-	ipw = kzalloc(sizeof(struct ipw_dev), GFP_KERNEL);
+	ipw = kzalloc_obj(struct ipw_dev, GFP_KERNEL);
 	if (!ipw)
 		return -ENOMEM;

diff --git a/drivers/tty/ipwireless/network.c b/drivers/tty/ipwireless/network.c
index fe569f6294a2..cb864142be09 100644
--- a/drivers/tty/ipwireless/network.c
+++ b/drivers/tty/ipwireless/network.c
@@ -257,7 +257,7 @@ static void do_go_online(struct work_struct *work_go_online)
 		struct ppp_channel *channel;

 		spin_unlock_irqrestore(&network->lock, flags);
-		channel = kzalloc(sizeof(struct ppp_channel), GFP_KERNEL);
+		channel = kzalloc_obj(struct ppp_channel, GFP_KERNEL);
 		if (!channel) {
 			printk(KERN_ERR IPWIRELESS_PCCARD_NAME
 					": unable to allocate PPP channel\n");
@@ -416,7 +416,7 @@ void ipwireless_network_packet_received(struct ipw_network *network,
 struct ipw_network *ipwireless_network_create(struct ipw_hardware *hw)
 {
 	struct ipw_network *network =
-		kzalloc(sizeof(struct ipw_network), GFP_KERNEL);
+		kzalloc_obj(struct ipw_network, GFP_KERNEL);

 	if (!network)
 		return NULL;
diff --git a/drivers/tty/ipwireless/tty.c b/drivers/tty/ipwireless/tty.c
index b6de40815fb9..79c01ff49c65 100644
--- a/drivers/tty/ipwireless/tty.c
+++ b/drivers/tty/ipwireless/tty.c
@@ -437,7 +437,7 @@ static int add_tty(int j,
 		    struct ipw_network *network, int channel_idx,
 		    int secondary_channel_idx, int tty_type)
 {
-	ttys[j] = kzalloc(sizeof(struct ipw_tty), GFP_KERNEL);
+	ttys[j] = kzalloc_obj(struct ipw_tty, GFP_KERNEL);
 	if (!ttys[j])
 		return -ENOMEM;
 	ttys[j]->index = j;
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index 214abeb89aaa..815e35a24af9 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -2065,8 +2065,7 @@ static void gsm_control_retransmit(struct timer_list *t)
 static struct gsm_control *gsm_control_send(struct gsm_mux *gsm,
 		unsigned int command, u8 *data, int clen)
 {
-	struct gsm_control *ctrl = kzalloc(sizeof(struct gsm_control),
-						GFP_ATOMIC);
+	struct gsm_control *ctrl = kzalloc_obj(struct gsm_control, GFP_ATOMIC);
 	unsigned long flags;
 	if (ctrl == NULL)
 		return NULL;
@@ -2646,7 +2645,7 @@ static int gsm_dlci_config(struct gsm_dlci *dlci, struct gsm_dlci_config *dc, in

 static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr)
 {
-	struct gsm_dlci *dlci = kzalloc(sizeof(struct gsm_dlci), GFP_ATOMIC);
+	struct gsm_dlci *dlci = kzalloc_obj(struct gsm_dlci, GFP_ATOMIC);
 	if (dlci == NULL)
 		return NULL;
 	spin_lock_init(&dlci->lock);
@@ -3276,7 +3275,7 @@ static inline unsigned int mux_line_to_num(unsigned int line)
 static struct gsm_mux *gsm_alloc_mux(void)
 {
 	int i;
-	struct gsm_mux *gsm = kzalloc(sizeof(struct gsm_mux), GFP_KERNEL);
+	struct gsm_mux *gsm = kzalloc_obj(struct gsm_mux, GFP_KERNEL);
 	if (gsm == NULL)
 		return NULL;
 	gsm->buf = kmalloc(MAX_MRU + 1, GFP_KERNEL);
diff --git a/drivers/tty/n_hdlc.c b/drivers/tty/n_hdlc.c
index f242d73ee4e0..6c685a6d4ddb 100644
--- a/drivers/tty/n_hdlc.c
+++ b/drivers/tty/n_hdlc.c
@@ -388,8 +388,7 @@ static void n_hdlc_tty_receive(struct tty_struct *tty, const u8 *data,
 		 * buffer unless the maximum count has been reached
 		 */
 		if (n_hdlc->rx_buf_list.count < MAX_RX_BUF_COUNT)
-			buf = kmalloc(struct_size(buf, buf, maxframe),
-				      GFP_ATOMIC);
+			buf = kmalloc_flex(*buf, buf, maxframe, GFP_ATOMIC);
 	}

 	if (!buf) {
@@ -670,7 +669,7 @@ static void n_hdlc_alloc_buf(struct n_hdlc_buf_list *list, unsigned int count,
 	unsigned int i;

 	for (i = 0; i < count; i++) {
-		buf = kmalloc(struct_size(buf, buf, maxframe), GFP_KERNEL);
+		buf = kmalloc_flex(*buf, buf, maxframe, GFP_KERNEL);
 		if (!buf) {
 			pr_debug("%s(), kmalloc() failed for %s buffer %u\n",
 					__func__, name, i);
@@ -687,7 +686,7 @@ static void n_hdlc_alloc_buf(struct n_hdlc_buf_list *list, unsigned int count,
  */
 static struct n_hdlc *n_hdlc_alloc(void)
 {
-	struct n_hdlc *n_hdlc = kzalloc(sizeof(*n_hdlc), GFP_KERNEL);
+	struct n_hdlc *n_hdlc = kzalloc_obj(*n_hdlc, GFP_KERNEL);

 	if (!n_hdlc)
 		return NULL;
diff --git a/drivers/tty/nozomi.c b/drivers/tty/nozomi.c
index e28a921c1637..b05f4a8553ac 100644
--- a/drivers/tty/nozomi.c
+++ b/drivers/tty/nozomi.c
@@ -1298,7 +1298,7 @@ static int nozomi_card_init(struct pci_dev *pdev,
 		goto err;
 	}

-	dc = kzalloc(sizeof(struct nozomi), GFP_KERNEL);
+	dc = kzalloc_obj(struct nozomi, GFP_KERNEL);
 	if (unlikely(!dc)) {
 		dev_err(&pdev->dev, "Could not allocate memory\n");
 		ret = -ENOMEM;
diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
index 6120d827a797..ce58997dae93 100644
--- a/drivers/tty/pty.c
+++ b/drivers/tty/pty.c
@@ -364,8 +364,8 @@ static int pty_common_install(struct tty_driver *driver, struct tty_struct *tty,
 	if (driver->subtype != PTY_TYPE_MASTER)
 		return -EIO;

-	ports[0] = kmalloc(sizeof **ports, GFP_KERNEL);
-	ports[1] = kmalloc(sizeof **ports, GFP_KERNEL);
+	ports[0] = kmalloc_obj(**ports, GFP_KERNEL);
+	ports[1] = kmalloc_obj(**ports, GFP_KERNEL);
 	if (!ports[0] || !ports[1])
 		goto err;
 	if (!try_module_get(driver->other->owner)) {
diff --git a/drivers/tty/rpmsg_tty.c b/drivers/tty/rpmsg_tty.c
index 60a2915f5cfe..6ada8e92bbf2 100644
--- a/drivers/tty/rpmsg_tty.c
+++ b/drivers/tty/rpmsg_tty.c
@@ -134,7 +134,7 @@ static struct rpmsg_tty_port *rpmsg_tty_alloc_cport(void)
 	struct rpmsg_tty_port *cport;
 	int ret;

-	cport = kzalloc(sizeof(*cport), GFP_KERNEL);
+	cport = kzalloc_obj(*cport, GFP_KERNEL);
 	if (!cport)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index 40eedc15277c..aced9d895103 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -442,7 +442,7 @@ struct serdev_device *serdev_device_alloc(struct serdev_controller *ctrl)
 {
 	struct serdev_device *serdev;

-	serdev = kzalloc(sizeof(*serdev), GFP_KERNEL);
+	serdev = kzalloc_obj(*serdev, GFP_KERNEL);
 	if (!serdev)
 		return NULL;

diff --git a/drivers/tty/serial/8250/8250_acorn.c b/drivers/tty/serial/8250/8250_acorn.c
index 758c4aa203ab..84889bb952a2 100644
--- a/drivers/tty/serial/8250/8250_acorn.c
+++ b/drivers/tty/serial/8250/8250_acorn.c
@@ -44,7 +44,7 @@ serial_card_probe(struct expansion_card *ec, const struct ecard_id *id)
 	unsigned long bus_addr;
 	unsigned int i;

-	info = kzalloc(sizeof(struct serial_card_info), GFP_KERNEL);
+	info = kzalloc_obj(struct serial_card_info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index 0e81f78c6063..74a358e7ae03 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -140,7 +140,7 @@ static struct irq_info *serial_get_or_create_irq_info(const struct uart_8250_por
 		if (i->irq == up->port.irq)
 			return i;

-	i = kzalloc(sizeof(*i), GFP_KERNEL);
+	i = kzalloc_obj(*i, GFP_KERNEL);
 	if (i == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/tty/serial/8250/8250_hp300.c b/drivers/tty/serial/8250/8250_hp300.c
index 3012ea03d22c..732f1a158e62 100644
--- a/drivers/tty/serial/8250/8250_hp300.c
+++ b/drivers/tty/serial/8250/8250_hp300.c
@@ -240,7 +240,7 @@ static int __init hp300_8250_init(void)
 #endif

 		/* Create new serial device */
-		port = kmalloc(sizeof(struct hp300_port), GFP_KERNEL);
+		port = kmalloc_obj(struct hp300_port, GFP_KERNEL);
 		if (!port)
 			return -ENOMEM;

diff --git a/drivers/tty/serial/8250/8250_ni.c b/drivers/tty/serial/8250/8250_ni.c
index cb5b42b3609c..3f3dac694e20 100644
--- a/drivers/tty/serial/8250/8250_ni.c
+++ b/drivers/tty/serial/8250/8250_ni.c
@@ -285,7 +285,7 @@ static int ni16550_probe(struct platform_device *pdev)
 	bool rs232_property;
 	int ret;

-	uart = kzalloc(sizeof(*uart), GFP_KERNEL);
+	uart = kzalloc_obj(*uart, GFP_KERNEL);
 	if (!uart)
 		return -ENOMEM;

diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c
index 9799356b65f7..9c721bafbe37 100644
--- a/drivers/tty/serial/8250/8250_of.c
+++ b/drivers/tty/serial/8250/8250_of.c
@@ -217,7 +217,7 @@ static int of_platform_serial_probe(struct platform_device *ofdev)
 	if (of_property_read_bool(ofdev->dev.of_node, "used-by-rtas"))
 		return -EBUSY;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (info == NULL)
 		return -ENOMEM;

diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index 6589bb531cc6..643e5a620948 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -4148,7 +4148,7 @@ pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board)
 			nr_ports = rc;
 	}

-	priv = kzalloc(struct_size(priv, line, nr_ports), GFP_KERNEL);
+	priv = kzalloc_flex(*priv, line, nr_ports, GFP_KERNEL);
 	if (!priv) {
 		priv = ERR_PTR(-ENOMEM);
 		goto err_deinit;
diff --git a/drivers/tty/serial/8250/8250_platform.c b/drivers/tty/serial/8250/8250_platform.c
index 86d12d2b5907..37f3ef4d041d 100644
--- a/drivers/tty/serial/8250/8250_platform.c
+++ b/drivers/tty/serial/8250/8250_platform.c
@@ -111,7 +111,8 @@ static int serial8250_probe_acpi(struct platform_device *pdev)
 	struct resource *regs;
 	int ret, line;

-	struct uart_8250_port *uart __free(kfree) = kzalloc(sizeof(*uart), GFP_KERNEL);
+	struct uart_8250_port *uart __free(kfree) = kzalloc_obj(*uart,
+								GFP_KERNEL);
 	if (!uart)
 		return -ENOMEM;

@@ -156,7 +157,8 @@ static int serial8250_probe_platform(struct platform_device *dev, struct plat_se
 {
 	int ret, i;

-	struct uart_8250_port *uart __free(kfree) = kzalloc(sizeof(*uart), GFP_KERNEL);
+	struct uart_8250_port *uart __free(kfree) = kzalloc_obj(*uart,
+								GFP_KERNEL);
 	if (!uart)
 		return -ENOMEM;

diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
index 719faf92aa8a..cc94af2d578a 100644
--- a/drivers/tty/serial/8250/8250_port.c
+++ b/drivers/tty/serial/8250/8250_port.c
@@ -553,7 +553,7 @@ static int serial8250_em485_init(struct uart_8250_port *p)
 	if (p->em485)
 		goto deassert_rts;

-	p->em485 = kmalloc(sizeof(struct uart_8250_em485), GFP_ATOMIC);
+	p->em485 = kmalloc_obj(struct uart_8250_em485, GFP_ATOMIC);
 	if (!p->em485)
 		return -ENOMEM;

diff --git a/drivers/tty/serial/8250/serial_cs.c b/drivers/tty/serial/8250/serial_cs.c
index 58e279ea7ee0..5c372bd7f92a 100644
--- a/drivers/tty/serial/8250/serial_cs.c
+++ b/drivers/tty/serial/8250/serial_cs.c
@@ -305,7 +305,7 @@ static int serial_probe(struct pcmcia_device *link)
 	dev_dbg(&link->dev, "serial_attach()\n");

 	/* Create new serial device */
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	info->p_dev = link;
diff --git a/drivers/tty/serial/icom.c b/drivers/tty/serial/icom.c
index b7e33a896589..c0a7f8a0ff55 100644
--- a/drivers/tty/serial/icom.c
+++ b/drivers/tty/serial/icom.c
@@ -1632,7 +1632,7 @@ static int icom_alloc_adapter(struct icom_adapter
 	struct icom_adapter *icom_adapter;
 	struct icom_adapter *cur_adapter_entry;

-	icom_adapter = kzalloc(sizeof(struct icom_adapter), GFP_KERNEL);
+	icom_adapter = kzalloc_obj(struct icom_adapter, GFP_KERNEL);

 	if (!icom_adapter) {
 		return -ENOMEM;
diff --git a/drivers/tty/serial/jsm/jsm_driver.c b/drivers/tty/serial/jsm/jsm_driver.c
index 8d21373cae57..2a048dc62b96 100644
--- a/drivers/tty/serial/jsm/jsm_driver.c
+++ b/drivers/tty/serial/jsm/jsm_driver.c
@@ -66,7 +66,7 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 		goto out_disable_device;
 	}

-	brd = kzalloc(sizeof(*brd), GFP_KERNEL);
+	brd = kzalloc_obj(*brd, GFP_KERNEL);
 	if (!brd) {
 		rc = -ENOMEM;
 		goto out_release_regions;
diff --git a/drivers/tty/serial/jsm/jsm_tty.c b/drivers/tty/serial/jsm/jsm_tty.c
index be2f130696b3..8c665fc771dd 100644
--- a/drivers/tty/serial/jsm/jsm_tty.c
+++ b/drivers/tty/serial/jsm/jsm_tty.c
@@ -391,7 +391,8 @@ int jsm_tty_init(struct jsm_board *brd)
 			 * Okay to malloc with GFP_KERNEL, we are not at
 			 * interrupt context, and there are no locks held.
 			 */
-			brd->channels[i] = kzalloc(sizeof(struct jsm_channel), GFP_KERNEL);
+			brd->channels[i] = kzalloc_obj(struct jsm_channel,
+						       GFP_KERNEL);
 			if (!brd->channels[i]) {
 				jsm_dbg(CORE, &brd->pci_dev,
 					"%s:%d Unable to allocate memory for channel struct\n",
diff --git a/drivers/tty/serial/max3100.c b/drivers/tty/serial/max3100.c
index 3faa1b6aa3ee..68cef83de47d 100644
--- a/drivers/tty/serial/max3100.c
+++ b/drivers/tty/serial/max3100.c
@@ -708,7 +708,7 @@ static int max3100_probe(struct spi_device *spi)
 		return dev_err_probe(dev, -ENOSPC, "too many MAX3100 chips\n");
 	}

-	max3100s[i] = kzalloc(sizeof(struct max3100_port), GFP_KERNEL);
+	max3100s[i] = kzalloc_obj(struct max3100_port, GFP_KERNEL);
 	if (!max3100s[i]) {
 		mutex_unlock(&max3100s_lock);
 		return -ENOMEM;
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
index 884fefbfd5a1..2983d74a5cf1 100644
--- a/drivers/tty/serial/pch_uart.c
+++ b/drivers/tty/serial/pch_uart.c
@@ -909,7 +909,7 @@ static unsigned int dma_handle_tx(struct eg20t_port *priv)

 	priv->tx_dma_use = 1;

-	priv->sg_tx_p = kmalloc_array(num, sizeof(struct scatterlist), GFP_ATOMIC);
+	priv->sg_tx_p = kmalloc_objs(struct scatterlist, num, GFP_ATOMIC);
 	if (!priv->sg_tx_p) {
 		dev_err(priv->port.dev, "%s:kzalloc Failed\n", __func__);
 		return 0;
@@ -1651,7 +1651,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,
 	board = &drv_dat[id->driver_data];
 	port_type = board->port_type;

-	priv = kzalloc(sizeof(struct eg20t_port), GFP_KERNEL);
+	priv = kzalloc_obj(struct eg20t_port, GFP_KERNEL);
 	if (priv == NULL)
 		goto init_port_alloc_err;

diff --git a/drivers/tty/serial/pxa.c b/drivers/tty/serial/pxa.c
index e395ff29c1a2..063720ed9716 100644
--- a/drivers/tty/serial/pxa.c
+++ b/drivers/tty/serial/pxa.c
@@ -811,7 +811,7 @@ static int serial_pxa_probe(struct platform_device *dev)
 	if (irq < 0)
 		return irq;

-	sport = kzalloc(sizeof(struct uart_pxa_port), GFP_KERNEL);
+	sport = kzalloc_obj(struct uart_pxa_port, GFP_KERNEL);
 	if (!sport)
 		return -ENOMEM;

diff --git a/drivers/tty/serial/serial_base_bus.c b/drivers/tty/serial/serial_base_bus.c
index 1e1ad28d83fc..ffe331831e22 100644
--- a/drivers/tty/serial/serial_base_bus.c
+++ b/drivers/tty/serial/serial_base_bus.c
@@ -116,7 +116,7 @@ struct serial_ctrl_device *serial_base_ctrl_add(struct uart_port *port,
 	struct serial_ctrl_device *ctrl_dev;
 	int err;

-	ctrl_dev = kzalloc(sizeof(*ctrl_dev), GFP_KERNEL);
+	ctrl_dev = kzalloc_obj(*ctrl_dev, GFP_KERNEL);
 	if (!ctrl_dev)
 		return ERR_PTR(-ENOMEM);

@@ -156,7 +156,7 @@ struct serial_port_device *serial_base_port_add(struct uart_port *port,
 	int min = 0, max = -1;	/* Use -1 for max to apply IDA defaults */
 	int err;

-	port_dev = kzalloc(sizeof(*port_dev), GFP_KERNEL);
+	port_dev = kzalloc_obj(*port_dev, GFP_KERNEL);
 	if (!port_dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 2805cad10511..2047d73858ec 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2716,7 +2716,7 @@ int uart_register_driver(struct uart_driver *drv)
 	 * Maybe we should be using a slab cache for this, especially if
 	 * we have a large number of ports to handle.
 	 */
-	drv->state = kcalloc(drv->nr, sizeof(struct uart_state), GFP_KERNEL);
+	drv->state = kzalloc_objs(struct uart_state, drv->nr, GFP_KERNEL);
 	if (!drv->state)
 		goto out;

@@ -3088,8 +3088,8 @@ static int serial_core_add_one_port(struct uart_driver *drv, struct uart_port *u
 	if (uport->attr_group)
 		num_groups++;

-	uport->tty_groups = kcalloc(num_groups, sizeof(*uport->tty_groups),
-				    GFP_KERNEL);
+	uport->tty_groups = kzalloc_objs(*uport->tty_groups, num_groups,
+					 GFP_KERNEL);
 	if (!uport->tty_groups)
 		return -ENOMEM;

diff --git a/drivers/tty/serial/sunhv.c b/drivers/tty/serial/sunhv.c
index 2b3ec65d595d..219588a8b1ee 100644
--- a/drivers/tty/serial/sunhv.c
+++ b/drivers/tty/serial/sunhv.c
@@ -529,7 +529,7 @@ static int hv_probe(struct platform_device *op)
 	if (op->archdata.irqs[0] == 0xffffffff)
 		return -ENODEV;

-	port = kzalloc(sizeof(struct uart_port), GFP_KERNEL);
+	port = kzalloc_obj(struct uart_port, GFP_KERNEL);
 	if (unlikely(!port))
 		return -ENOMEM;

diff --git a/drivers/tty/serial/sunsab.c b/drivers/tty/serial/sunsab.c
index df906ccf2e8a..7c4cf6d02ece 100644
--- a/drivers/tty/serial/sunsab.c
+++ b/drivers/tty/serial/sunsab.c
@@ -1117,9 +1117,8 @@ static int __init sunsab_init(void)
 	}

 	if (num_channels) {
-		sunsab_ports = kcalloc(num_channels,
-				       sizeof(struct uart_sunsab_port),
-				       GFP_KERNEL);
+		sunsab_ports = kzalloc_objs(struct uart_sunsab_port,
+					    num_channels, GFP_KERNEL);
 		if (!sunsab_ports)
 			return -ENOMEM;

diff --git a/drivers/tty/serial/sunsu.c b/drivers/tty/serial/sunsu.c
index 383141fe7ba0..884985346226 100644
--- a/drivers/tty/serial/sunsu.c
+++ b/drivers/tty/serial/sunsu.c
@@ -1398,7 +1398,7 @@ static int su_probe(struct platform_device *op)
 			return -EINVAL;
 		up = &sunsu_ports[nr_inst];
 	} else {
-		up = kzalloc(sizeof(*up), GFP_KERNEL);
+		up = kzalloc_obj(*up, GFP_KERNEL);
 		if (!up)
 			return -ENOMEM;
 	}
diff --git a/drivers/tty/serial/timbuart.c b/drivers/tty/serial/timbuart.c
index 6fa93c3872a7..48f1ef5e9bac 100644
--- a/drivers/tty/serial/timbuart.c
+++ b/drivers/tty/serial/timbuart.c
@@ -412,7 +412,7 @@ static int timbuart_probe(struct platform_device *dev)

 	dev_dbg(&dev->dev, "%s\n", __func__);

-	uart = kzalloc(sizeof(*uart), GFP_KERNEL);
+	uart = kzalloc_obj(*uart, GFP_KERNEL);
 	if (!uart) {
 		err = -EINVAL;
 		goto err_mem;
diff --git a/drivers/tty/serial/ucc_uart.c b/drivers/tty/serial/ucc_uart.c
index 0613f8c11ab1..d7a39e36b53c 100644
--- a/drivers/tty/serial/ucc_uart.c
+++ b/drivers/tty/serial/ucc_uart.c
@@ -1247,7 +1247,7 @@ static int ucc_uart_probe(struct platform_device *ofdev)
 	if (ret)
 		return ret;

-	qe_port = kzalloc(sizeof(struct uart_qe_port), GFP_KERNEL);
+	qe_port = kzalloc_obj(struct uart_qe_port, GFP_KERNEL);
 	if (!qe_port) {
 		dev_err(&ofdev->dev, "can't allocate QE port structure\n");
 		return -ENOMEM;
diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c
index 9d591fb291fd..06af5c4349ec 100644
--- a/drivers/tty/synclink_gt.c
+++ b/drivers/tty/synclink_gt.c
@@ -3477,7 +3477,7 @@ static struct slgt_info *alloc_dev(int adapter_num, int port_num, struct pci_dev
 {
 	struct slgt_info *info;

-	info = kzalloc(sizeof(struct slgt_info), GFP_KERNEL);
+	info = kzalloc_obj(struct slgt_info, GFP_KERNEL);

 	if (!info) {
 		DBGERR(("%s device alloc failed adapter=%d port=%d\n",
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index 1f78b0db3b25..4aaa3e04e035 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -971,7 +971,7 @@ static int sysrq_connect(struct input_handler *handler,
 	struct sysrq_state *sysrq;
 	int error;

-	sysrq = kzalloc(sizeof(struct sysrq_state), GFP_KERNEL);
+	sysrq = kzalloc_obj(struct sysrq_state, GFP_KERNEL);
 	if (!sysrq)
 		return -ENOMEM;

diff --git a/drivers/tty/tty_audit.c b/drivers/tty/tty_audit.c
index 75542333c54a..e7964d319498 100644
--- a/drivers/tty/tty_audit.c
+++ b/drivers/tty/tty_audit.c
@@ -35,7 +35,7 @@ static struct tty_audit_buf *tty_audit_buf_alloc(void)
 {
 	struct tty_audit_buf *buf;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		goto err;

diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
index 1a5673acd9b1..79ec953824d5 100644
--- a/drivers/tty/tty_buffer.c
+++ b/drivers/tty/tty_buffer.c
@@ -177,7 +177,7 @@ static struct tty_buffer *tty_buffer_alloc(struct tty_port *port, size_t size)
 	 */
 	if (atomic_read(&port->buf.mem_used) > port->buf.mem_limit)
 		return NULL;
-	p = kmalloc(struct_size(p, data, 2 * size), GFP_ATOMIC | __GFP_NOWARN);
+	p = kmalloc_flex(*p, data, 2 * size, GFP_ATOMIC | __GFP_NOWARN);
 	if (p == NULL)
 		return NULL;

diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index e2d92cf70eb7..506b6c6329c2 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -183,7 +183,7 @@ int tty_alloc_file(struct file *file)
 {
 	struct tty_file_private *priv;

-	priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kmalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -1471,7 +1471,7 @@ void tty_save_termios(struct tty_struct *tty)
 	/* Stash the termios data */
 	tp = tty->driver->termios[idx];
 	if (tp == NULL) {
-		tp = kmalloc(sizeof(*tp), GFP_KERNEL);
+		tp = kmalloc_obj(*tp, GFP_KERNEL);
 		if (tp == NULL)
 			return;
 		tty->driver->termios[idx] = tp;
@@ -3099,7 +3099,7 @@ struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx)
 {
 	struct tty_struct *tty;

-	tty = kzalloc(sizeof(*tty), GFP_KERNEL_ACCOUNT);
+	tty = kzalloc_obj(*tty, GFP_KERNEL_ACCOUNT);
 	if (!tty)
 		return NULL;

@@ -3244,7 +3244,7 @@ struct device *tty_register_device_attr(struct tty_driver *driver,
 	else
 		tty_line_name(driver, index, name);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

@@ -3333,7 +3333,7 @@ struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
 	if (!lines || (flags & TTY_DRIVER_UNNUMBERED_NODE && lines > 1))
 		return ERR_PTR(-EINVAL);

-	driver = kzalloc(sizeof(*driver), GFP_KERNEL);
+	driver = kzalloc_obj(*driver, GFP_KERNEL);
 	if (!driver)
 		return ERR_PTR(-ENOMEM);

@@ -3343,10 +3343,9 @@ struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
 	driver->flags = flags;

 	if (!(flags & TTY_DRIVER_DEVPTS_MEM)) {
-		driver->ttys = kcalloc(lines, sizeof(*driver->ttys),
-				GFP_KERNEL);
-		driver->termios = kcalloc(lines, sizeof(*driver->termios),
-				GFP_KERNEL);
+		driver->ttys = kzalloc_objs(*driver->ttys, lines, GFP_KERNEL);
+		driver->termios = kzalloc_objs(*driver->termios, lines,
+					       GFP_KERNEL);
 		if (!driver->ttys || !driver->termios) {
 			err = -ENOMEM;
 			goto err_free_all;
@@ -3354,8 +3353,7 @@ struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
 	}

 	if (!(flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
-		driver->ports = kcalloc(lines, sizeof(*driver->ports),
-				GFP_KERNEL);
+		driver->ports = kzalloc_objs(*driver->ports, lines, GFP_KERNEL);
 		if (!driver->ports) {
 			err = -ENOMEM;
 			goto err_free_all;
@@ -3363,7 +3361,7 @@ struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
 		cdevs = lines;
 	}

-	driver->cdevs = kcalloc(cdevs, sizeof(*driver->cdevs), GFP_KERNEL);
+	driver->cdevs = kzalloc_objs(*driver->cdevs, cdevs, GFP_KERNEL);
 	if (!driver->cdevs) {
 		err = -ENOMEM;
 		goto err_free_all;
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
index d80e9d4c974b..888f2f8f9481 100644
--- a/drivers/tty/tty_ldisc.c
+++ b/drivers/tty/tty_ldisc.c
@@ -162,7 +162,7 @@ static struct tty_ldisc *tty_ldisc_get(struct tty_struct *tty, int disc)
 	 * There is no way to handle allocation failure of only 16 bytes.
 	 * Let's simplify error handling and save more memory.
 	 */
-	ld = kmalloc(sizeof(struct tty_ldisc), GFP_KERNEL | __GFP_NOFAIL);
+	ld = kmalloc_obj(struct tty_ldisc, GFP_KERNEL | __GFP_NOFAIL);
 	ld->ops = ldops;
 	ld->tty = tty;

diff --git a/drivers/tty/vcc.c b/drivers/tty/vcc.c
index 2960031ace72..cd741fbe6fbe 100644
--- a/drivers/tty/vcc.c
+++ b/drivers/tty/vcc.c
@@ -574,7 +574,7 @@ static int vcc_probe(struct vio_dev *vdev, const struct vio_device_id *id)
 		return -ENODEV;
 	}

-	port = kzalloc(sizeof(struct vcc_port), GFP_KERNEL);
+	port = kzalloc_obj(struct vcc_port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

@@ -957,7 +957,7 @@ static int vcc_install(struct tty_driver *driver, struct tty_struct *tty)
 	if (ret)
 		return ret;

-	port_tty = kzalloc(sizeof(struct tty_port), GFP_KERNEL);
+	port_tty = kzalloc_obj(struct tty_port, GFP_KERNEL);
 	if (!port_tty)
 		return -ENOMEM;

diff --git a/drivers/tty/vt/consolemap.c b/drivers/tty/vt/consolemap.c
index 7a11c3f2e875..97cf1ceb6709 100644
--- a/drivers/tty/vt/consolemap.c
+++ b/drivers/tty/vt/consolemap.c
@@ -539,7 +539,7 @@ static int con_allocate_new(struct vc_data *vc)
 {
 	struct uni_pagedict *new, *old = *vc->uni_pagedict_loc;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return -ENOMEM;

diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
index 3538d54d6a6a..dba09eb91f38 100644
--- a/drivers/tty/vt/keyboard.c
+++ b/drivers/tty/vt/keyboard.c
@@ -1548,7 +1548,8 @@ static int kbd_connect(struct input_handler *handler, struct input_dev *dev,
 {
 	int error;

-	struct input_handle __free(kfree) *handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	struct input_handle __free(kfree) *handle = kzalloc_obj(*handle,
+								GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

diff --git a/drivers/tty/vt/vc_screen.c b/drivers/tty/vt/vc_screen.c
index c814644ef4ee..824a74626548 100644
--- a/drivers/tty/vt/vc_screen.c
+++ b/drivers/tty/vt/vc_screen.c
@@ -131,7 +131,7 @@ vcs_poll_data_get(struct file *file)
 	if (poll)
 		return poll;

-	poll = kzalloc(sizeof(*poll), GFP_KERNEL);
+	poll = kzalloc_obj(*poll, GFP_KERNEL);
 	if (!poll)
 		return NULL;
 	poll->cons_num = console(file_inode(file));
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 3bdbd4c52c2f..cca7bdf8f2fe 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -1065,7 +1065,7 @@ int vc_allocate(unsigned int currcons)	/* return 0 on success */
 	/* although the numbers above are not valid since long ago, the
 	   point is still up-to-date and the comment still has its value
 	   even if only as a historical artifact.  --mj, July 1998 */
-	param.vc = vc = kzalloc(sizeof(struct vc_data), GFP_KERNEL);
+	param.vc = vc = kzalloc_obj(struct vc_data, GFP_KERNEL);
 	if (!vc)
 		return -ENOMEM;

@@ -3777,7 +3777,8 @@ static int __init con_init(void)
 	}

 	for (currcons = 0; currcons < MIN_NR_CONSOLES; currcons++) {
-		vc_cons[currcons].d = vc = kzalloc(sizeof(struct vc_data), GFP_NOWAIT);
+		vc_cons[currcons].d = vc = kzalloc_obj(struct vc_data,
+						       GFP_NOWAIT);
 		INIT_WORK(&vc_cons[currcons].SAK_work, vc_SAK);
 		tty_port_init(&vc->port);
 		visual_init(vc, currcons, true);
diff --git a/drivers/ufs/core/ufs-hwmon.c b/drivers/ufs/core/ufs-hwmon.c
index 34194064367f..1ca027b4caa5 100644
--- a/drivers/ufs/core/ufs-hwmon.c
+++ b/drivers/ufs/core/ufs-hwmon.c
@@ -169,7 +169,7 @@ void ufs_hwmon_probe(struct ufs_hba *hba, u8 mask)
 	struct ufs_hwmon_data *data;
 	struct device *hwmon;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return;

diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
index fa0d4e6aee16..14d14389164e 100644
--- a/drivers/uio/uio.c
+++ b/drivers/uio/uio.c
@@ -306,7 +306,7 @@ static int uio_dev_add_attributes(struct uio_device *idev)
 				goto err_map;
 			}
 		}
-		map = kzalloc(sizeof(*map), GFP_KERNEL);
+		map = kzalloc_obj(*map, GFP_KERNEL);
 		if (!map) {
 			ret = -ENOMEM;
 			goto err_map;
@@ -335,7 +335,7 @@ static int uio_dev_add_attributes(struct uio_device *idev)
 				goto err_portio;
 			}
 		}
-		portio = kzalloc(sizeof(*portio), GFP_KERNEL);
+		portio = kzalloc_obj(*portio, GFP_KERNEL);
 		if (!portio) {
 			ret = -ENOMEM;
 			goto err_portio;
@@ -494,7 +494,7 @@ static int uio_open(struct inode *inode, struct file *filep)
 		goto err_module_get;
 	}

-	listener = kmalloc(sizeof(*listener), GFP_KERNEL);
+	listener = kmalloc_obj(*listener, GFP_KERNEL);
 	if (!listener) {
 		ret = -ENOMEM;
 		goto err_alloc_listener;
@@ -991,7 +991,7 @@ int __uio_register_device(struct module *owner,

 	info->uio_dev = NULL;

-	idev = kzalloc(sizeof(*idev), GFP_KERNEL);
+	idev = kzalloc_obj(*idev, GFP_KERNEL);
 	if (!idev) {
 		return -ENOMEM;
 	}
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
index 68a8e9de8b4f..909fdb56c09a 100644
--- a/drivers/usb/atm/cxacru.c
+++ b/drivers/usb/atm/cxacru.c
@@ -1130,7 +1130,7 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance,
 	int ret;

 	/* instance init */
-	instance = kzalloc(sizeof(*instance), GFP_KERNEL);
+	instance = kzalloc_obj(*instance, GFP_KERNEL);
 	if (!instance)
 		return -ENOMEM;

diff --git a/drivers/usb/atm/speedtch.c b/drivers/usb/atm/speedtch.c
index e6b610a87482..d0a2f1361a91 100644
--- a/drivers/usb/atm/speedtch.c
+++ b/drivers/usb/atm/speedtch.c
@@ -804,7 +804,7 @@ static int speedtch_bind(struct usbatm_data *usbatm,
 		}
 	}

-	instance = kzalloc(sizeof(*instance), GFP_KERNEL);
+	instance = kzalloc_obj(*instance, GFP_KERNEL);

 	if (!instance) {
 		ret = -ENOMEM;
diff --git a/drivers/usb/atm/ueagle-atm.c b/drivers/usb/atm/ueagle-atm.c
index 78a2585f33ec..b27a5f8842b6 100644
--- a/drivers/usb/atm/ueagle-atm.c
+++ b/drivers/usb/atm/ueagle-atm.c
@@ -2516,7 +2516,7 @@ static int uea_bind(struct usbatm_data *usbatm, struct usb_interface *intf,
 			return ret;
 	}

-	sc = kzalloc(sizeof(struct uea_softc), GFP_KERNEL);
+	sc = kzalloc_obj(struct uea_softc, GFP_KERNEL);
 	if (!sc)
 		return -ENOMEM;

diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c
index 5f3ad9a99d9e..aa4c209cfb91 100644
--- a/drivers/usb/atm/usbatm.c
+++ b/drivers/usb/atm/usbatm.c
@@ -804,7 +804,7 @@ static int usbatm_atm_open(struct atm_vcc *vcc)
 		goto fail;
 	}

-	new = kzalloc(sizeof(struct usbatm_vcc_data), GFP_KERNEL);
+	new = kzalloc_obj(struct usbatm_vcc_data, GFP_KERNEL);
 	if (!new) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/usb/c67x00/c67x00-drv.c b/drivers/usb/c67x00/c67x00-drv.c
index 8f38e2c5369a..6b6814c1d557 100644
--- a/drivers/usb/c67x00/c67x00-drv.c
+++ b/drivers/usb/c67x00/c67x00-drv.c
@@ -121,7 +121,7 @@ static int c67x00_drv_probe(struct platform_device *pdev)
 	if (!pdata)
 		return -ENODEV;

-	c67x00 = kzalloc(sizeof(*c67x00), GFP_KERNEL);
+	c67x00 = kzalloc_obj(*c67x00, GFP_KERNEL);
 	if (!c67x00)
 		return -ENOMEM;

diff --git a/drivers/usb/c67x00/c67x00-sched.c b/drivers/usb/c67x00/c67x00-sched.c
index a09fa68a6ce7..a832f5696f2a 100644
--- a/drivers/usb/c67x00/c67x00-sched.c
+++ b/drivers/usb/c67x00/c67x00-sched.c
@@ -246,7 +246,7 @@ c67x00_ep_data_alloc(struct c67x00_hcd *c67x00, struct urb *urb)
 	}

 	/* Allocate and initialize a new c67x00 endpoint data structure */
-	ep_data = kzalloc(sizeof(*ep_data), GFP_ATOMIC);
+	ep_data = kzalloc_obj(*ep_data, GFP_ATOMIC);
 	if (!ep_data)
 		return NULL;

@@ -349,7 +349,7 @@ int c67x00_urb_enqueue(struct usb_hcd *hcd,
 	int port = get_root_port(urb->dev)-1;

 	/* Allocate and initialize urb private data */
-	urbp = kzalloc(sizeof(*urbp), mem_flags);
+	urbp = kzalloc_obj(*urbp, mem_flags);
 	if (!urbp) {
 		ret = -ENOMEM;
 		goto err_urbp;
@@ -574,7 +574,7 @@ static int c67x00_create_td(struct c67x00_hcd *c67x00, struct urb *urb,
 				  || usb_pipeint(urb->pipe)))
 		return -EMSGSIZE;	/* Not really an error, but expected */

-	td = kzalloc(sizeof(*td), GFP_ATOMIC);
+	td = kzalloc_obj(*td, GFP_ATOMIC);
 	if (!td)
 		return -ENOMEM;

diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c
index 168707213ed9..15b0060ce62d 100644
--- a/drivers/usb/cdns3/cdns3-gadget.c
+++ b/drivers/usb/cdns3/cdns3-gadget.c
@@ -903,7 +903,7 @@ static int cdns3_prepare_aligned_request_buf(struct cdns3_request *priv_req)
 	buf = priv_req->aligned_buf;

 	if (!buf || priv_req->request.length > buf->size) {
-		buf = kzalloc(sizeof(*buf), GFP_ATOMIC);
+		buf = kzalloc_obj(*buf, GFP_ATOMIC);
 		if (!buf)
 			return -ENOMEM;

@@ -2315,7 +2315,7 @@ struct usb_request *cdns3_gadget_ep_alloc_request(struct usb_ep *ep,
 	struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep);
 	struct cdns3_request *priv_req;

-	priv_req = kzalloc(sizeof(*priv_req), gfp_flags);
+	priv_req = kzalloc_obj(*priv_req, gfp_flags);
 	if (!priv_req)
 		return NULL;

@@ -3287,7 +3287,7 @@ static int cdns3_gadget_start(struct cdns *cdns)
 	u32 max_speed;
 	int ret;

-	priv_dev = kzalloc(sizeof(*priv_dev), GFP_KERNEL);
+	priv_dev = kzalloc_obj(*priv_dev, GFP_KERNEL);
 	if (!priv_dev)
 		return -ENOMEM;

diff --git a/drivers/usb/cdns3/cdns3-pci-wrap.c b/drivers/usb/cdns3/cdns3-pci-wrap.c
index 57f57c24c663..03c9762ad032 100644
--- a/drivers/usb/cdns3/cdns3-pci-wrap.c
+++ b/drivers/usb/cdns3/cdns3-pci-wrap.c
@@ -97,7 +97,7 @@ static int cdns3_pci_probe(struct pci_dev *pdev,
 	if (pci_is_enabled(func)) {
 		wrap = pci_get_drvdata(func);
 	} else {
-		wrap = kzalloc(sizeof(*wrap), GFP_KERNEL);
+		wrap = kzalloc_obj(*wrap, GFP_KERNEL);
 		if (!wrap)
 			return -ENOMEM;
 	}
diff --git a/drivers/usb/cdns3/cdnsp-gadget.c b/drivers/usb/cdns3/cdnsp-gadget.c
index d37c29a253dd..475ac61ad4c4 100644
--- a/drivers/usb/cdns3/cdnsp-gadget.c
+++ b/drivers/usb/cdns3/cdnsp-gadget.c
@@ -1102,7 +1102,7 @@ static struct usb_request *cdnsp_gadget_ep_alloc_request(struct usb_ep *ep,
 	struct cdnsp_ep *pep = to_cdnsp_ep(ep);
 	struct cdnsp_request *preq;

-	preq = kzalloc(sizeof(*preq), gfp_flags);
+	preq = kzalloc_obj(*preq, gfp_flags);
 	if (!preq)
 		return NULL;

@@ -1905,7 +1905,7 @@ static int __cdnsp_gadget_init(struct cdns *cdns)

 	cdns_drd_gadget_on(cdns);

-	pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
+	pdev = kzalloc_obj(*pdev, GFP_KERNEL);
 	if (!pdev)
 		return -ENOMEM;

diff --git a/drivers/usb/cdns3/cdnsp-mem.c b/drivers/usb/cdns3/cdnsp-mem.c
index 97866bfb2da9..a2a1b21f2ef8 100644
--- a/drivers/usb/cdns3/cdnsp-mem.c
+++ b/drivers/usb/cdns3/cdnsp-mem.c
@@ -35,7 +35,7 @@ static struct cdnsp_segment *cdnsp_segment_alloc(struct cdnsp_device *pdev,
 	dma_addr_t dma;
 	int i;

-	seg = kzalloc(sizeof(*seg), flags);
+	seg = kzalloc_obj(*seg, flags);
 	if (!seg)
 		return NULL;

@@ -376,7 +376,7 @@ static struct cdnsp_ring *cdnsp_ring_alloc(struct cdnsp_device *pdev,
 	struct cdnsp_ring *ring;
 	int ret;

-	ring = kzalloc(sizeof *(ring), flags);
+	ring = kzalloc_obj(*(ring), flags);
 	if (!ring)
 		return NULL;

@@ -575,9 +575,8 @@ int cdnsp_alloc_stream_info(struct cdnsp_device *pdev,
 	stream_info->num_stream_ctxs = num_stream_ctxs;

 	/* Initialize the array of virtual pointers to stream rings. */
-	stream_info->stream_rings = kcalloc(num_streams,
-					    sizeof(struct cdnsp_ring *),
-					    GFP_ATOMIC);
+	stream_info->stream_rings = kzalloc_objs(struct cdnsp_ring *,
+						 num_streams, GFP_ATOMIC);
 	if (!stream_info->stream_rings)
 		return -ENOMEM;

diff --git a/drivers/usb/cdns3/cdnsp-pci.c b/drivers/usb/cdns3/cdnsp-pci.c
index 5e7b88ca8b96..b6199f98ff77 100644
--- a/drivers/usb/cdns3/cdnsp-pci.c
+++ b/drivers/usb/cdns3/cdnsp-pci.c
@@ -82,7 +82,7 @@ static int cdnsp_pci_probe(struct pci_dev *pdev,
 	if (pci_is_enabled(func)) {
 		cdnsp = pci_get_drvdata(func);
 	} else {
-		cdnsp = kzalloc(sizeof(*cdnsp), GFP_KERNEL);
+		cdnsp = kzalloc_obj(*cdnsp, GFP_KERNEL);
 		if (!cdnsp) {
 			ret = -ENOMEM;
 			goto put_pci;
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index c8d931d9d433..f2de86d0ce40 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -360,8 +360,8 @@ static int add_td_to_list(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq,
 {
 	int i;
 	u32 temp;
-	struct td_node *lastnode, *node = kzalloc(sizeof(struct td_node),
-						  GFP_ATOMIC);
+	struct td_node *lastnode, *node = kzalloc_obj(struct td_node,
+						      GFP_ATOMIC);

 	if (node == NULL)
 		return -ENOMEM;
@@ -1645,7 +1645,7 @@ static struct usb_request *ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
 	if (ep == NULL)
 		return NULL;

-	hwreq = kzalloc(sizeof(struct ci_hw_req), gfp_flags);
+	hwreq = kzalloc_obj(struct ci_hw_req, gfp_flags);
 	if (hwreq != NULL) {
 		INIT_LIST_HEAD(&hwreq->queue);
 		INIT_LIST_HEAD(&hwreq->tds);
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 54be4aa1dcb2..8816c6eaba1d 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -1350,7 +1350,7 @@ static int acm_probe(struct usb_interface *intf,
 made_compressed_probe:
 	dev_dbg(&intf->dev, "interfaces are valid\n");

-	acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
+	acm = kzalloc_obj(struct acm, GFP_KERNEL);
 	if (!acm)
 		return -ENOMEM;

diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
index ecd6d1f39e49..28fc93e0c01d 100644
--- a/drivers/usb/class/cdc-wdm.c
+++ b/drivers/usb/class/cdc-wdm.c
@@ -1027,7 +1027,7 @@ static int wdm_create(struct usb_interface *intf, struct usb_endpoint_descriptor
 	int rv = -ENOMEM;
 	struct wdm_device *desc;

-	desc = kzalloc(sizeof(struct wdm_device), GFP_KERNEL);
+	desc = kzalloc_obj(struct wdm_device, GFP_KERNEL);
 	if (!desc)
 		goto out;
 	INIT_LIST_HEAD(&desc->device_list);
@@ -1050,10 +1050,10 @@ static int wdm_create(struct usb_interface *intf, struct usb_endpoint_descriptor

 	desc->wMaxPacketSize = usb_endpoint_maxp(ep);

-	desc->orq = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
+	desc->orq = kmalloc_obj(struct usb_ctrlrequest, GFP_KERNEL);
 	if (!desc->orq)
 		goto err;
-	desc->irq = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
+	desc->irq = kmalloc_obj(struct usb_ctrlrequest, GFP_KERNEL);
 	if (!desc->irq)
 		goto err;

diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
index a7a1d38b6bef..653583dc7a8d 100644
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -1142,7 +1142,7 @@ static int usblp_probe(struct usb_interface *intf,

 	/* Malloc and start initializing usblp structure so we can use it
 	 * directly. */
-	usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL);
+	usblp = kzalloc_obj(struct usblp, GFP_KERNEL);
 	if (!usblp) {
 		retval = -ENOMEM;
 		goto abort_ret;
diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c
index 206f1b738ed3..20bc86367660 100644
--- a/drivers/usb/class/usbtmc.c
+++ b/drivers/usb/class/usbtmc.c
@@ -172,7 +172,7 @@ static int usbtmc_open(struct inode *inode, struct file *filp)
 		return -ENODEV;
 	}

-	file_data = kzalloc(sizeof(*file_data), GFP_KERNEL);
+	file_data = kzalloc_obj(*file_data, GFP_KERNEL);
 	if (!file_data)
 		return -ENOMEM;

@@ -2378,7 +2378,7 @@ static int usbtmc_probe(struct usb_interface *intf,

 	dev_dbg(&intf->dev, "%s called\n", __func__);

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
index 4a2ee447b213..2f414b7c3e2c 100644
--- a/drivers/usb/common/ulpi.c
+++ b/drivers/usb/common/ulpi.c
@@ -324,7 +324,7 @@ struct ulpi *ulpi_register_interface(struct device *dev,
 	struct ulpi *ulpi;
 	int ret;

-	ulpi = kzalloc(sizeof(*ulpi), GFP_KERNEL);
+	ulpi = kzalloc_obj(*ulpi, GFP_KERNEL);
 	if (!ulpi)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
index 2bb1ceb9d621..129cbfd74f26 100644
--- a/drivers/usb/core/config.c
+++ b/drivers/usb/core/config.c
@@ -823,7 +823,7 @@ static int usb_parse_configuration(struct usb_device *dev, int cfgidx,
 			nalts[i] = j = USB_MAXALTSETTING;
 		}

-		intfc = kzalloc(struct_size(intfc, altsetting, j), GFP_KERNEL);
+		intfc = kzalloc_flex(*intfc, altsetting, j, GFP_KERNEL);
 		config->intf_cache[i] = intfc;
 		if (!intfc)
 			return -ENOMEM;
@@ -1045,7 +1045,7 @@ int usb_get_bos_descriptor(struct usb_device *dev)
 		return -ENOMSG;
 	}

-	bos = kzalloc(sizeof(*bos), GFP_KERNEL);
+	bos = kzalloc_obj(*bos, GFP_KERNEL);
 	if (!bos)
 		return -ENOMEM;

@@ -1066,7 +1066,7 @@ int usb_get_bos_descriptor(struct usb_device *dev)
 	if (total_len < length)
 		return -EINVAL;

-	dev->bos = kzalloc(sizeof(*dev->bos), GFP_KERNEL);
+	dev->bos = kzalloc_obj(*dev->bos, GFP_KERNEL);
 	if (!dev->bos)
 		return -ENOMEM;

diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index f6ce6e26e0d4..d7ac181454f9 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -245,7 +245,7 @@ static int usbdev_mmap(struct file *file, struct vm_area_struct *vma)
 	if (ret)
 		goto error;

-	usbm = kzalloc(sizeof(struct usb_memory), GFP_KERNEL);
+	usbm = kzalloc_obj(struct usb_memory, GFP_KERNEL);
 	if (!usbm) {
 		ret = -ENOMEM;
 		goto error_decrease_mem;
@@ -402,7 +402,7 @@ static struct async *alloc_async(unsigned int numisoframes)
 {
 	struct async *as;

-	as = kzalloc(sizeof(struct async), GFP_KERNEL);
+	as = kzalloc_obj(struct async, GFP_KERNEL);
 	if (!as)
 		return NULL;
 	as->urb = usb_alloc_urb(numisoframes, GFP_KERNEL);
@@ -970,7 +970,7 @@ static int parse_usbdevfs_streams(struct usb_dev_state *ps,
 	if (num_streams_ret && (num_streams < 2 || num_streams > 65536))
 		return -EINVAL;

-	eps = kmalloc_array(num_eps, sizeof(*eps), GFP_KERNEL);
+	eps = kmalloc_objs(*eps, num_eps, GFP_KERNEL);
 	if (!eps)
 		return -ENOMEM;

@@ -1039,7 +1039,7 @@ static int usbdev_open(struct inode *inode, struct file *file)
 	int ret;

 	ret = -ENOMEM;
-	ps = kzalloc(sizeof(struct usb_dev_state), GFP_KERNEL);
+	ps = kzalloc_obj(struct usb_dev_state, GFP_KERNEL);
 	if (!ps)
 		goto out_free_ps;

@@ -1196,7 +1196,7 @@ static int do_proc_control(struct usb_dev_state *ps,
 	urb = usb_alloc_urb(0, GFP_NOIO);
 	if (!urb)
 		goto done;
-	dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
+	dr = kmalloc_obj(struct usb_ctrlrequest, GFP_NOIO);
 	if (!dr)
 		goto done;

@@ -1670,7 +1670,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
 		/* min 8 byte setup packet */
 		if (uurb->buffer_length < 8)
 			return -EINVAL;
-		dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
+		dr = kmalloc_obj(struct usb_ctrlrequest, GFP_KERNEL);
 		if (!dr)
 			return -ENOMEM;
 		if (copy_from_user(dr, uurb->buffer, 8)) {
@@ -1805,9 +1805,8 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
 	as->mem_usage = u;

 	if (num_sgs) {
-		as->urb->sg = kmalloc_array(num_sgs,
-					    sizeof(struct scatterlist),
-					    GFP_KERNEL | __GFP_NOWARN);
+		as->urb->sg = kmalloc_objs(struct scatterlist, num_sgs,
+					   GFP_KERNEL | __GFP_NOWARN);
 		if (!as->urb->sg) {
 			ret = -ENOMEM;
 			goto error;
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 2f5958bc4f7f..db67874879d8 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -57,7 +57,7 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids,
 	if (fields < 2)
 		return -EINVAL;

-	dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
+	dynid = kzalloc_obj(*dynid, GFP_KERNEL);
 	if (!dynid)
 		return -ENOMEM;

diff --git a/drivers/usb/core/endpoint.c b/drivers/usb/core/endpoint.c
index e48399401608..f44f0fffeb41 100644
--- a/drivers/usb/core/endpoint.c
+++ b/drivers/usb/core/endpoint.c
@@ -154,7 +154,7 @@ int usb_create_ep_devs(struct device *parent,
 	struct ep_device *ep_dev;
 	int retval;

-	ep_dev = kzalloc(sizeof(*ep_dev), GFP_KERNEL);
+	ep_dev = kzalloc_obj(*ep_dev, GFP_KERNEL);
 	if (!ep_dev) {
 		retval = -ENOMEM;
 		goto exit;
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 2d99a59d9f3f..f1b2b0e4c437 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -2193,7 +2193,7 @@ int ehset_single_step_set_feature(struct usb_hcd *hcd, int port)
 	if (!buf)
 		return -ENOMEM;

-	dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
+	dr = kmalloc_obj(struct usb_ctrlrequest, GFP_KERNEL);
 	if (!dr) {
 		kfree(buf);
 		return -ENOMEM;
@@ -2567,16 +2567,16 @@ struct usb_hcd *__usb_create_hcd(const struct hc_driver *driver,
 	if (!hcd)
 		return NULL;
 	if (primary_hcd == NULL) {
-		hcd->address0_mutex = kmalloc(sizeof(*hcd->address0_mutex),
-				GFP_KERNEL);
+		hcd->address0_mutex = kmalloc_obj(*hcd->address0_mutex,
+						  GFP_KERNEL);
 		if (!hcd->address0_mutex) {
 			kfree(hcd);
 			dev_dbg(dev, "hcd address0 mutex alloc failed\n");
 			return NULL;
 		}
 		mutex_init(hcd->address0_mutex);
-		hcd->bandwidth_mutex = kmalloc(sizeof(*hcd->bandwidth_mutex),
-				GFP_KERNEL);
+		hcd->bandwidth_mutex = kmalloc_obj(*hcd->bandwidth_mutex,
+						   GFP_KERNEL);
 		if (!hcd->bandwidth_mutex) {
 			kfree(hcd->address0_mutex);
 			kfree(hcd);
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index be50d03034a9..22a54c632c26 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -929,7 +929,7 @@ int usb_hub_clear_tt_buffer(struct urb *urb)
 	 * since each TT has "at least two" buffers that can need it (and
 	 * there can be many TTs per hub).  even if they're uncommon.
 	 */
-	clear = kmalloc(sizeof *clear, GFP_ATOMIC);
+	clear = kmalloc_obj(*clear, GFP_ATOMIC);
 	if (clear == NULL) {
 		dev_err(&udev->dev, "can't save CLEAR_TT_BUFFER state\n");
 		/* FIXME recover somehow ... RESET_TT? */
@@ -1461,20 +1461,20 @@ static int hub_configure(struct usb_hub *hub,
 	unsigned full_load;
 	unsigned maxchild;

-	hub->buffer = kmalloc(sizeof(*hub->buffer), GFP_KERNEL);
+	hub->buffer = kmalloc_obj(*hub->buffer, GFP_KERNEL);
 	if (!hub->buffer) {
 		ret = -ENOMEM;
 		goto fail;
 	}

-	hub->status = kmalloc(sizeof(*hub->status), GFP_KERNEL);
+	hub->status = kmalloc_obj(*hub->status, GFP_KERNEL);
 	if (!hub->status) {
 		ret = -ENOMEM;
 		goto fail;
 	}
 	mutex_init(&hub->status_mutex);

-	hub->descriptor = kzalloc(sizeof(*hub->descriptor), GFP_KERNEL);
+	hub->descriptor = kzalloc_obj(*hub->descriptor, GFP_KERNEL);
 	if (!hub->descriptor) {
 		ret = -ENOMEM;
 		goto fail;
@@ -1522,7 +1522,7 @@ static int hub_configure(struct usb_hub *hub,
 	dev_info(hub_dev, "%d port%s detected\n", maxchild,
 			str_plural(maxchild));

-	hub->ports = kcalloc(maxchild, sizeof(struct usb_port *), GFP_KERNEL);
+	hub->ports = kzalloc_objs(struct usb_port *, maxchild, GFP_KERNEL);
 	if (!hub->ports) {
 		ret = -ENOMEM;
 		goto fail;
@@ -1958,7 +1958,7 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
 	/* We found a hub */
 	dev_info(&intf->dev, "USB hub found\n");

-	hub = kzalloc(sizeof(*hub), GFP_KERNEL);
+	hub = kzalloc_obj(*hub, GFP_KERNEL);
 	if (!hub)
 		return -ENOMEM;

@@ -4142,7 +4142,7 @@ static int usb_req_set_sel(struct usb_device *udev)
 	 * which may be initiated by an error path of a mass storage driver.
 	 * Therefore, use GFP_NOIO.
 	 */
-	sel_values = kmalloc(sizeof *(sel_values), GFP_NOIO);
+	sel_values = kmalloc_obj(*(sel_values), GFP_NOIO);
 	if (!sel_values)
 		return -ENOMEM;

@@ -5236,7 +5236,7 @@ check_highspeed(struct usb_hub *hub, struct usb_device *udev, int port1)
 	if (udev->quirks & USB_QUIRK_DEVICE_QUALIFIER)
 		return;

-	qual = kmalloc(sizeof *qual, GFP_KERNEL);
+	qual = kmalloc_obj(*qual, GFP_KERNEL);
 	if (qual == NULL)
 		return;

diff --git a/drivers/usb/core/ledtrig-usbport.c b/drivers/usb/core/ledtrig-usbport.c
index 5e3c515991f3..e7de8864a527 100644
--- a/drivers/usb/core/ledtrig-usbport.c
+++ b/drivers/usb/core/ledtrig-usbport.c
@@ -190,7 +190,7 @@ static int usbport_trig_add_port(struct usbport_trig_data *usbport_data,
 	size_t len;
 	int err;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port) {
 		err = -ENOMEM;
 		goto err_out;
@@ -305,7 +305,7 @@ static int usbport_trig_activate(struct led_classdev *led_cdev)
 	struct usbport_trig_data *usbport_data;
 	int err;

-	usbport_data = kzalloc(sizeof(*usbport_data), GFP_KERNEL);
+	usbport_data = kzalloc_obj(*usbport_data, GFP_KERNEL);
 	if (!usbport_data)
 		return -ENOMEM;
 	usbport_data->led_cdev = led_cdev;
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 6138468c67c4..d8f50d468794 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -141,7 +141,7 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
 	struct usb_ctrlrequest *dr;
 	int ret;

-	dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
+	dr = kmalloc_obj(struct usb_ctrlrequest, GFP_NOIO);
 	if (!dr)
 		return -ENOMEM;

@@ -526,7 +526,7 @@ int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,
 	}

 	/* initialize all the urbs we'll use */
-	io->urbs = kmalloc_array(io->entries, sizeof(*io->urbs), mem_flags);
+	io->urbs = kmalloc_objs(*io->urbs, io->entries, mem_flags);
 	if (!io->urbs)
 		goto nomem;

@@ -1058,7 +1058,7 @@ struct usb_device_descriptor *usb_get_device_descriptor(struct usb_device *udev)
 	struct usb_device_descriptor *desc;
 	int ret;

-	desc = kmalloc(sizeof(*desc), GFP_NOIO);
+	desc = kmalloc_obj(*desc, GFP_NOIO);
 	if (!desc)
 		return ERR_PTR(-ENOMEM);

@@ -2028,15 +2028,13 @@ int usb_set_configuration(struct usb_device *dev, int configuration)
 	n = nintf = 0;
 	if (cp) {
 		nintf = cp->desc.bNumInterfaces;
-		new_interfaces = kmalloc_array(nintf, sizeof(*new_interfaces),
-					       GFP_NOIO);
+		new_interfaces = kmalloc_objs(*new_interfaces, nintf, GFP_NOIO);
 		if (!new_interfaces)
 			return -ENOMEM;

 		for (; n < nintf; ++n) {
-			new_interfaces[n] = kzalloc(
-					sizeof(struct usb_interface),
-					GFP_NOIO);
+			new_interfaces[n] = kzalloc_obj(struct usb_interface,
+							GFP_NOIO);
 			if (!new_interfaces[n]) {
 				ret = -ENOMEM;
 free_interfaces:
@@ -2289,7 +2287,7 @@ int usb_driver_set_configuration(struct usb_device *udev, int config)
 {
 	struct set_config_request *req;

-	req = kmalloc(sizeof(*req), GFP_KERNEL);
+	req = kmalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;
 	req->udev = udev;
diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c
index f54198171b6a..36096973eb59 100644
--- a/drivers/usb/core/port.c
+++ b/drivers/usb/core/port.c
@@ -739,11 +739,11 @@ int usb_hub_create_port_device(struct usb_hub *hub, int port1)
 	struct usb_device *hdev = hub->hdev;
 	int retval;

-	port_dev = kzalloc(sizeof(*port_dev), GFP_KERNEL);
+	port_dev = kzalloc_obj(*port_dev, GFP_KERNEL);
 	if (!port_dev)
 		return -ENOMEM;

-	port_dev->req = kzalloc(sizeof(*(port_dev->req)), GFP_KERNEL);
+	port_dev->req = kzalloc_obj(*(port_dev->req), GFP_KERNEL);
 	if (!port_dev->req) {
 		kfree(port_dev);
 		return -ENOMEM;
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index c4d85089d19b..135a89ab2bfa 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -61,8 +61,7 @@ static int quirks_param_set(const char *value, const struct kernel_param *kp)
 		quirk_list = NULL;
 	}

-	quirk_list = kcalloc(quirk_count, sizeof(struct quirk_entry),
-			     GFP_KERNEL);
+	quirk_list = kzalloc_objs(struct quirk_entry, quirk_count, GFP_KERNEL);
 	if (!quirk_list) {
 		quirk_count = 0;
 		mutex_unlock(&quirk_mutex);
diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
index ff8df16cca35..c06b44ca507b 100644
--- a/drivers/usb/core/urb.c
+++ b/drivers/usb/core/urb.c
@@ -72,8 +72,7 @@ struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags)
 {
 	struct urb *urb;

-	urb = kmalloc(struct_size(urb, iso_frame_desc, iso_packets),
-		      mem_flags);
+	urb = kmalloc_flex(*urb, iso_frame_desc, iso_packets, mem_flags);
 	if (!urb)
 		return NULL;
 	usb_init_urb(urb);
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index e740f7852bcd..cfb882b86981 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -648,7 +648,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent,
 	struct usb_hcd *usb_hcd = bus_to_hcd(bus);
 	unsigned raw_port = port1;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
index 0637bfbc054e..d216e26c787b 100644
--- a/drivers/usb/dwc2/gadget.c
+++ b/drivers/usb/dwc2/gadget.c
@@ -397,7 +397,7 @@ static struct usb_request *dwc2_hsotg_ep_alloc_request(struct usb_ep *ep,
 {
 	struct dwc2_hsotg_req *req;

-	req = kzalloc(sizeof(*req), flags);
+	req = kzalloc_obj(*req, flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
index 30eb8506617c..55809a83f8f8 100644
--- a/drivers/usb/dwc2/hcd.c
+++ b/drivers/usb/dwc2/hcd.c
@@ -3823,7 +3823,7 @@ static struct dwc2_hcd_urb *dwc2_hcd_urb_alloc(struct dwc2_hsotg *hsotg,
 {
 	struct dwc2_hcd_urb *urb;

-	urb = kzalloc(struct_size(urb, iso_descs, iso_desc_count), mem_flags);
+	urb = kzalloc_flex(*urb, iso_descs, iso_desc_count, mem_flags);
 	if (urb)
 		urb->packet_count = iso_desc_count;
 	return urb;
@@ -4743,7 +4743,7 @@ static int _dwc2_hcd_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
 		qh_allocated = true;
 	}

-	qtd = kzalloc(sizeof(*qtd), mem_flags);
+	qtd = kzalloc_obj(*qtd, mem_flags);
 	if (!qtd) {
 		retval = -ENOMEM;
 		goto fail1;
@@ -5218,7 +5218,7 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg)
 	memset(&hsotg->hc_ptr_array[0], 0, sizeof(hsotg->hc_ptr_array));

 	for (i = 0; i < num_channels; i++) {
-		channel = kzalloc(sizeof(*channel), GFP_KERNEL);
+		channel = kzalloc_obj(*channel, GFP_KERNEL);
 		if (!channel)
 			goto error3;
 		channel->hc_num = i;
diff --git a/drivers/usb/dwc2/hcd_queue.c b/drivers/usb/dwc2/hcd_queue.c
index 904fe0632b34..4f00ff1dc3e1 100644
--- a/drivers/usb/dwc2/hcd_queue.c
+++ b/drivers/usb/dwc2/hcd_queue.c
@@ -1585,7 +1585,7 @@ struct dwc2_qh *dwc2_hcd_qh_create(struct dwc2_hsotg *hsotg,
 		return NULL;

 	/* Allocate memory */
-	qh = kzalloc(sizeof(*qh), mem_flags);
+	qh = kzalloc_obj(*qh, mem_flags);
 	if (!qh)
 		return NULL;

diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
index ffb1101f55c7..a005865862c8 100644
--- a/drivers/usb/dwc3/debugfs.c
+++ b/drivers/usb/dwc3/debugfs.c
@@ -1003,7 +1003,7 @@ void dwc3_debugfs_init(struct dwc3 *dwc)
 {
 	struct dentry		*root;

-	dwc->regset = kzalloc(sizeof(*dwc->regset), GFP_KERNEL);
+	dwc->regset = kzalloc_obj(*dwc->regset, GFP_KERNEL);
 	if (!dwc->regset)
 		return;

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index c65291e7b8d9..7bd60fc7cd74 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1188,7 +1188,7 @@ static struct usb_request *dwc3_gadget_ep_alloc_request(struct usb_ep *ep,
 	struct dwc3_request		*req;
 	struct dwc3_ep			*dep = to_dwc3_ep(ep);

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

@@ -3373,7 +3373,7 @@ static int dwc3_gadget_init_endpoint(struct dwc3 *dwc, u8 epnum)
 	int				ret;
 	u8				num = epnum >> 1;

-	dep = kzalloc(sizeof(*dep), GFP_KERNEL);
+	dep = kzalloc_obj(*dep, GFP_KERNEL);
 	if (!dep)
 		return -ENOMEM;

@@ -4728,7 +4728,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
 	}

 	init_completion(&dwc->ep0_in_setup);
-	dwc->gadget = kzalloc(sizeof(struct usb_gadget), GFP_KERNEL);
+	dwc->gadget = kzalloc_obj(struct usb_gadget, GFP_KERNEL);
 	if (!dwc->gadget) {
 		ret = -ENOMEM;
 		goto err3;
diff --git a/drivers/usb/fotg210/fotg210-hcd.c b/drivers/usb/fotg210/fotg210-hcd.c
index fbb5d590eab6..65a16d2cdfd7 100644
--- a/drivers/usb/fotg210/fotg210-hcd.c
+++ b/drivers/usb/fotg210/fotg210-hcd.c
@@ -515,7 +515,7 @@ static ssize_t fill_periodic_buffer(struct debug_buffer *buf)
 	unsigned i;
 	__hc32 tag;

-	seen = kmalloc_array(DBG_SCHED_LIMIT, sizeof(*seen), GFP_ATOMIC);
+	seen = kmalloc_objs(*seen, DBG_SCHED_LIMIT, GFP_ATOMIC);
 	if (!seen)
 		return 0;

@@ -738,7 +738,7 @@ static struct debug_buffer
 {
 	struct debug_buffer *buf;

-	buf = kzalloc(sizeof(struct debug_buffer), GFP_KERNEL);
+	buf = kzalloc_obj(struct debug_buffer, GFP_KERNEL);

 	if (buf) {
 		buf->bus = bus;
@@ -1847,7 +1847,7 @@ static struct fotg210_qh *fotg210_qh_alloc(struct fotg210_hcd *fotg210,
 	struct fotg210_qh *qh;
 	dma_addr_t dma;

-	qh = kzalloc(sizeof(*qh), GFP_ATOMIC);
+	qh = kzalloc_obj(*qh, GFP_ATOMIC);
 	if (!qh)
 		goto done;
 	qh->hw = (struct fotg210_qh_hw *)
@@ -3899,7 +3899,7 @@ static struct fotg210_iso_stream *iso_stream_alloc(gfp_t mem_flags)
 {
 	struct fotg210_iso_stream *stream;

-	stream = kzalloc(sizeof(*stream), mem_flags);
+	stream = kzalloc_obj(*stream, mem_flags);
 	if (likely(stream != NULL)) {
 		INIT_LIST_HEAD(&stream->td_list);
 		INIT_LIST_HEAD(&stream->free_list);
@@ -4007,7 +4007,7 @@ static struct fotg210_iso_sched *iso_sched_alloc(unsigned packets,
 {
 	struct fotg210_iso_sched *iso_sched;

-	iso_sched = kzalloc(struct_size(iso_sched, packet, packets), mem_flags);
+	iso_sched = kzalloc_flex(*iso_sched, packet, packets, mem_flags);
 	if (likely(iso_sched != NULL))
 		INIT_LIST_HEAD(&iso_sched->td_list);

diff --git a/drivers/usb/fotg210/fotg210-udc.c b/drivers/usb/fotg210/fotg210-udc.c
index 0bae12e34f9a..79509ec08be9 100644
--- a/drivers/usb/fotg210/fotg210-udc.c
+++ b/drivers/usb/fotg210/fotg210-udc.c
@@ -244,7 +244,7 @@ static struct usb_request *fotg210_ep_alloc_request(struct usb_ep *_ep,
 {
 	struct fotg210_request *req;

-	req = kzalloc(sizeof(struct fotg210_request), gfp_flags);
+	req = kzalloc_obj(struct fotg210_request, gfp_flags);
 	if (!req)
 		return NULL;

@@ -1183,7 +1183,7 @@ int fotg210_udc_probe(struct platform_device *pdev, struct fotg210 *fotg)
 		return irq;

 	/* initialize udc */
-	fotg210 = kzalloc(sizeof(struct fotg210_udc), GFP_KERNEL);
+	fotg210 = kzalloc_obj(struct fotg210_udc, GFP_KERNEL);
 	if (fotg210 == NULL)
 		return -ENOMEM;

@@ -1207,7 +1207,7 @@ int fotg210_udc_probe(struct platform_device *pdev, struct fotg210 *fotg)
 	ret = -ENOMEM;

 	for (i = 0; i < FOTG210_MAX_NUM_EP; i++) {
-		fotg210->ep[i] = kzalloc(sizeof(struct fotg210_ep), GFP_KERNEL);
+		fotg210->ep[i] = kzalloc_obj(struct fotg210_ep, GFP_KERNEL);
 		if (!fotg210->ep[i])
 			goto err_alloc;
 	}
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 5b3866909b75..aba08d058ff9 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -2531,7 +2531,7 @@ static int composite_bind(struct usb_gadget *gadget,
 	struct usb_composite_driver	*composite = to_cdriver(gdriver);
 	int				status = -ENOMEM;

-	cdev = kzalloc(sizeof *cdev, GFP_KERNEL);
+	cdev = kzalloc_obj(*cdev, GFP_KERNEL);
 	if (!cdev)
 		return status;

diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index acef1c6f199c..5163a994f9e7 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -727,7 +727,7 @@ static struct config_group *config_desc_make(
 	if (ret)
 		return ERR_PTR(ret);

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return ERR_PTR(-ENOMEM);
 	cfg->c.label = kstrdup(buf, GFP_KERNEL);
@@ -870,7 +870,7 @@ static struct config_item *gadget_language_string_make(struct config_group *grou

 	language = to_gadget_language(&group->cg_item);

-	string = kzalloc(sizeof(*string), GFP_KERNEL);
+	string = kzalloc_obj(*string, GFP_KERNEL);
 	if (!string)
 		return ERR_PTR(-ENOMEM);

@@ -922,7 +922,7 @@ static struct config_group *gadget_language_make(struct config_group *group,
 	int langs = 0;
 	int ret;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return ERR_PTR(-ENOMEM);

@@ -1629,8 +1629,8 @@ configfs_attach_gadget_strings(struct gadget_info *gi)
 	if (!nlangs)
 		return NULL;

-	gadget_strings = kcalloc(nlangs + 1, /* including NULL terminator */
-				 sizeof(struct usb_gadget_strings *), GFP_KERNEL);
+	gadget_strings = kzalloc_objs(struct usb_gadget_strings *, nlangs + 1,
+				      GFP_KERNEL)/* including NULL terminator */;
 	if (!gadget_strings)
 		return ERR_PTR(-ENOMEM);

@@ -1645,8 +1645,8 @@ configfs_attach_gadget_strings(struct gadget_info *gi)
 			goto cleanup;
 		}

-		stringtab = kcalloc(language->nstrings + 1, sizeof(struct usb_string),
-				    GFP_KERNEL);
+		stringtab = kzalloc_objs(struct usb_string,
+					 language->nstrings + 1, GFP_KERNEL);
 		if (!stringtab) {
 			us = ERR_PTR(-ENOMEM);
 			goto cleanup;
@@ -1992,7 +1992,7 @@ static struct config_group *gadgets_make(
 {
 	struct gadget_info *gi;

-	gi = kzalloc(sizeof(*gi), GFP_KERNEL);
+	gi = kzalloc_obj(*gi, GFP_KERNEL);
 	if (!gi)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_acm.c b/drivers/usb/gadget/function/f_acm.c
index 0ad857f1f325..d34b4710f962 100644
--- a/drivers/usb/gadget/function/f_acm.c
+++ b/drivers/usb/gadget/function/f_acm.c
@@ -748,7 +748,7 @@ static struct usb_function *acm_alloc_func(struct usb_function_instance *fi)
 	struct f_serial_opts *opts;
 	struct f_acm *acm;

-	acm = kzalloc(sizeof(*acm), GFP_KERNEL);
+	acm = kzalloc_obj(*acm, GFP_KERNEL);
 	if (!acm)
 		return ERR_PTR(-ENOMEM);

@@ -882,7 +882,7 @@ static struct usb_function_instance *acm_alloc_instance(void)
 	struct f_serial_opts *opts;
 	int ret;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);
 	opts->protocol = USB_CDC_ACM_PROTO_AT_V25TER;
diff --git a/drivers/usb/gadget/function/f_ecm.c b/drivers/usb/gadget/function/f_ecm.c
index 675d2bc538a4..aa91d705bc8d 100644
--- a/drivers/usb/gadget/function/f_ecm.c
+++ b/drivers/usb/gadget/function/f_ecm.c
@@ -847,7 +847,7 @@ static struct usb_function_instance *ecm_alloc_inst(void)
 {
 	struct f_ecm_opts *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);
 	mutex_init(&opts->lock);
@@ -927,7 +927,7 @@ static struct usb_function *ecm_alloc(struct usb_function_instance *fi)
 	int status;

 	/* allocate and initialize one new instance */
-	ecm = kzalloc(sizeof(*ecm), GFP_KERNEL);
+	ecm = kzalloc_obj(*ecm, GFP_KERNEL);
 	if (!ecm)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_eem.c b/drivers/usb/gadget/function/f_eem.c
index edbbadad6138..acdd6c637c7b 100644
--- a/drivers/usb/gadget/function/f_eem.c
+++ b/drivers/usb/gadget/function/f_eem.c
@@ -462,7 +462,7 @@ static int eem_unwrap(struct gether *port,
 					goto next;
 				}

-				ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+				ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 				if (!ctx) {
 					kfree(req->buf);
 					usb_ep_free_request(ep, req);
@@ -608,7 +608,7 @@ static struct usb_function_instance *eem_alloc_inst(void)
 {
 	struct f_eem_opts *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);
 	mutex_init(&opts->lock);
@@ -651,7 +651,7 @@ static struct usb_function *eem_alloc(struct usb_function_instance *fi)
 	struct f_eem_opts *opts;

 	/* allocate and initialize one new instance */
-	eem = kzalloc(sizeof(*eem), GFP_KERNEL);
+	eem = kzalloc_obj(*eem, GFP_KERNEL);
 	if (!eem)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index 2c6986e381ca..84cfa7a8437a 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -814,7 +814,7 @@ static void *ffs_build_sg_list(struct sg_table *sgt, size_t sz)
 		return NULL;

 	n_pages = PAGE_ALIGN(sz) >> PAGE_SHIFT;
-	pages = kvmalloc_array(n_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kvmalloc_objs(struct page *, n_pages, GFP_KERNEL);
 	if (!pages) {
 		vfree(vaddr);

@@ -957,7 +957,7 @@ static ssize_t __ffs_epfile_read_data(struct ffs_epfile *epfile,
 		data_len, ret);

 	data_len -= ret;
-	buf = kmalloc(struct_size(buf, storage, data_len), GFP_KERNEL);
+	buf = kmalloc_flex(*buf, storage, data_len, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;
 	buf->length = data_len;
@@ -1245,7 +1245,7 @@ static ssize_t ffs_epfile_write_iter(struct kiocb *kiocb, struct iov_iter *from)
 	ssize_t res;

 	if (!is_sync_kiocb(kiocb)) {
-		p = kzalloc(sizeof(io_data), GFP_KERNEL);
+		p = kzalloc_obj(io_data, GFP_KERNEL);
 		if (!p)
 			return -ENOMEM;
 		p->aio = true;
@@ -1280,7 +1280,7 @@ static ssize_t ffs_epfile_read_iter(struct kiocb *kiocb, struct iov_iter *to)
 	ssize_t res;

 	if (!is_sync_kiocb(kiocb)) {
-		p = kzalloc(sizeof(io_data), GFP_KERNEL);
+		p = kzalloc_obj(io_data, GFP_KERNEL);
 		if (!p)
 			return -ENOMEM;
 		p->aio = true;
@@ -1503,7 +1503,7 @@ static int ffs_dmabuf_attach(struct file *file, int fd)
 		goto err_dmabuf_put;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		err = -ENOMEM;
 		goto err_dmabuf_detach;
@@ -1652,7 +1652,7 @@ static int ffs_dmabuf_transfer(struct file *file,
 	if (ret)
 		goto err_resv_unlock;

-	fence = kmalloc(sizeof(*fence), GFP_KERNEL);
+	fence = kmalloc_obj(*fence, GFP_KERNEL);
 	if (!fence) {
 		ret = -ENOMEM;
 		goto err_resv_unlock;
@@ -2067,7 +2067,7 @@ static int ffs_fs_init_fs_context(struct fs_context *fc)
 {
 	struct ffs_sb_fill_data *ctx;

-	ctx = kzalloc(sizeof(struct ffs_sb_fill_data), GFP_KERNEL);
+	ctx = kzalloc_obj(struct ffs_sb_fill_data, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -2183,7 +2183,7 @@ static void ffs_data_closed(struct ffs_data *ffs)

 static struct ffs_data *ffs_data_new(const char *dev_name)
 {
-	struct ffs_data *ffs = kzalloc(sizeof *ffs, GFP_KERNEL);
+	struct ffs_data *ffs = kzalloc_obj(*ffs, GFP_KERNEL);
 	if (!ffs)
 		return NULL;

@@ -2330,7 +2330,7 @@ static int ffs_epfiles_create(struct ffs_data *ffs)
 	int err;

 	count = ffs->eps_count;
-	epfiles = kcalloc(count, sizeof(*epfiles), GFP_KERNEL);
+	epfiles = kzalloc_objs(*epfiles, count, GFP_KERNEL);
 	if (!epfiles)
 		return -ENOMEM;

@@ -4031,7 +4031,7 @@ static struct usb_function_instance *ffs_alloc_inst(void)
 	struct f_fs_opts *opts;
 	struct ffs_dev *dev;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -4107,7 +4107,7 @@ static struct usb_function *ffs_alloc(struct usb_function_instance *fi)
 {
 	struct ffs_function *func;

-	func = kzalloc(sizeof(*func), GFP_KERNEL);
+	func = kzalloc_obj(*func, GFP_KERNEL);
 	if (!func)
 		return ERR_PTR(-ENOMEM);

@@ -4138,7 +4138,7 @@ static struct ffs_dev *_ffs_alloc_dev(void)
 	if (_ffs_get_single_dev())
 			return ERR_PTR(-EBUSY);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
index bee0d0458ff7..93dd678cafe1 100644
--- a/drivers/usb/gadget/function/f_hid.c
+++ b/drivers/usb/gadget/function/f_hid.c
@@ -650,7 +650,7 @@ static int f_hidg_get_report(struct file *file, struct usb_hidg_report __user *b
 	struct report_entry *ptr;
 	__u8 report_id;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -775,7 +775,7 @@ static void hidg_intout_complete(struct usb_ep *ep, struct usb_request *req)

 	switch (req->status) {
 	case 0:
-		req_list = kzalloc(sizeof(*req_list), GFP_ATOMIC);
+		req_list = kzalloc_obj(*req_list, GFP_ATOMIC);
 		if (!req_list) {
 			ERROR(cdev, "Unable to allocate mem for req_list\n");
 			goto free_req;
@@ -1530,7 +1530,7 @@ static struct usb_function_instance *hidg_alloc_inst(void)
 	struct usb_function_instance *ret;
 	int status = 0;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);
 	mutex_init(&opts->lock);
@@ -1596,7 +1596,7 @@ static struct usb_function *hidg_alloc(struct usb_function_instance *fi)
 	int ret;

 	/* allocate and initialize one new instance */
-	hidg = kzalloc(sizeof(*hidg), GFP_KERNEL);
+	hidg = kzalloc_obj(*hidg, GFP_KERNEL);
 	if (!hidg)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_loopback.c b/drivers/usb/gadget/function/f_loopback.c
index 39862e236837..b8fa60af9385 100644
--- a/drivers/usb/gadget/function/f_loopback.c
+++ b/drivers/usb/gadget/function/f_loopback.c
@@ -425,7 +425,7 @@ static struct usb_function *loopback_alloc(struct usb_function_instance *fi)
 	struct f_loopback	*loop;
 	struct f_lb_opts	*lb_opts;

-	loop = kzalloc(sizeof *loop, GFP_KERNEL);
+	loop = kzalloc_obj(*loop, GFP_KERNEL);
 	if (!loop)
 		return ERR_PTR(-ENOMEM);

@@ -568,7 +568,7 @@ static struct usb_function_instance *loopback_alloc_instance(void)
 {
 	struct f_lb_opts *lb_opts;

-	lb_opts = kzalloc(sizeof(*lb_opts), GFP_KERNEL);
+	lb_opts = kzalloc_obj(*lb_opts, GFP_KERNEL);
 	if (!lb_opts)
 		return ERR_PTR(-ENOMEM);
 	mutex_init(&lb_opts->lock);
diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
index 5c3f34a2f35c..c894ede6bcd2 100644
--- a/drivers/usb/gadget/function/f_mass_storage.c
+++ b/drivers/usb/gadget/function/f_mass_storage.c
@@ -2699,7 +2699,7 @@ static void fsg_lun_release(struct device *dev)
 static struct fsg_common *fsg_common_setup(struct fsg_common *common)
 {
 	if (!common) {
-		common = kzalloc(sizeof(*common), GFP_KERNEL);
+		common = kzalloc_obj(*common, GFP_KERNEL);
 		if (!common)
 			return ERR_PTR(-ENOMEM);
 		common->free_storage_on_release = 1;
@@ -2740,7 +2740,7 @@ int fsg_common_set_num_buffers(struct fsg_common *common, unsigned int n)
 	struct fsg_buffhd *bh, *buffhds;
 	int i;

-	buffhds = kcalloc(n, sizeof(*buffhds), GFP_KERNEL);
+	buffhds = kzalloc_objs(*buffhds, n, GFP_KERNEL);
 	if (!buffhds)
 		return -ENOMEM;

@@ -2887,7 +2887,7 @@ int fsg_common_create_lun(struct fsg_common *common, struct fsg_lun_config *cfg,
 		return -EINVAL;
 	}

-	lun = kzalloc(sizeof(*lun), GFP_KERNEL);
+	lun = kzalloc_obj(*lun, GFP_KERNEL);
 	if (!lun)
 		return -ENOMEM;

@@ -3311,7 +3311,7 @@ static struct config_group *fsg_lun_make(struct config_group *group,
 		goto out;
 	}

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts) {
 		ret = -ENOMEM;
 		goto out;
@@ -3489,7 +3489,7 @@ static struct usb_function_instance *fsg_alloc_inst(void)
 	struct fsg_lun_config config;
 	int rc;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);
 	mutex_init(&opts->lock);
@@ -3554,7 +3554,7 @@ static struct usb_function *fsg_alloc(struct usb_function_instance *fi)
 	struct fsg_common *common = opts->common;
 	struct fsg_dev *fsg;

-	fsg = kzalloc(sizeof(*fsg), GFP_KERNEL);
+	fsg = kzalloc_obj(*fsg, GFP_KERNEL);
 	if (unlikely(!fsg))
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
index f592f9eb85d4..d98f946b1621 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -931,8 +931,8 @@ static int f_midi_bind(struct usb_configuration *c, struct usb_function *f)
 		goto fail;

 	/* allocate temporary function list */
-	midi_function = kcalloc((MAX_PORTS * 4) + 11, sizeof(*midi_function),
-				GFP_KERNEL);
+	midi_function = kzalloc_objs(*midi_function, (MAX_PORTS * 4) + 11,
+				     GFP_KERNEL);
 	if (!midi_function) {
 		status = -ENOMEM;
 		goto fail;
@@ -1279,7 +1279,7 @@ static struct usb_function_instance *f_midi_alloc_inst(void)
 {
 	struct f_midi_opts *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -1361,8 +1361,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
 	}

 	/* allocate and initialize one new instance */
-	midi = kzalloc(struct_size(midi, in_ports_array, opts->in_ports),
-		       GFP_KERNEL);
+	midi = kzalloc_flex(*midi, in_ports_array, opts->in_ports, GFP_KERNEL);
 	if (!midi) {
 		status = -ENOMEM;
 		goto setup_fail;
diff --git a/drivers/usb/gadget/function/f_midi2.c b/drivers/usb/gadget/function/f_midi2.c
index 95ec87bed3ee..1a4feca1f083 100644
--- a/drivers/usb/gadget/function/f_midi2.c
+++ b/drivers/usb/gadget/function/f_midi2.c
@@ -1187,8 +1187,8 @@ static int f_midi2_init_ep(struct f_midi2 *midi2, struct f_midi2_ep *ep,
 		return -ENODEV;
 	usb_ep->complete = complete;

-	usb_ep->reqs = kcalloc(midi2->info.num_reqs, sizeof(*usb_ep->reqs),
-			       GFP_KERNEL);
+	usb_ep->reqs = kzalloc_objs(*usb_ep->reqs, midi2->info.num_reqs,
+				    GFP_KERNEL);
 	if (!usb_ep->reqs)
 		return -ENOMEM;
 	for (i = 0; i < midi2->info.num_reqs; i++) {
@@ -2340,7 +2340,7 @@ static int f_midi2_block_opts_create(struct f_midi2_ep_opts *ep_opts,
 		goto out;
 	}

-	block_opts = kzalloc(sizeof(*block_opts), GFP_KERNEL);
+	block_opts = kzalloc_obj(*block_opts, GFP_KERNEL);
 	if (!block_opts) {
 		ret = -ENOMEM;
 		goto out;
@@ -2502,7 +2502,7 @@ static int f_midi2_ep_opts_create(struct f_midi2_opts *opts,
 {
 	struct f_midi2_ep_opts *ep_opts;

-	ep_opts = kzalloc(sizeof(*ep_opts), GFP_KERNEL);
+	ep_opts = kzalloc_obj(*ep_opts, GFP_KERNEL);
 	if (!ep_opts)
 		return -ENOMEM;

@@ -2652,7 +2652,7 @@ static struct usb_function_instance *f_midi2_alloc_inst(void)
 	struct f_midi2_block_opts *block_opts;
 	int ret;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -2813,7 +2813,7 @@ static struct usb_function *f_midi2_alloc(struct usb_function_instance *fi)
 	struct f_midi2_block *bp;
 	int i, num_eps, blk;

-	midi2 = kzalloc(sizeof(*midi2), GFP_KERNEL);
+	midi2 = kzalloc_obj(*midi2, GFP_KERNEL);
 	if (!midi2)
 		return ERR_PTR(-ENOMEM);

@@ -2855,8 +2855,8 @@ static struct usb_function *f_midi2_alloc(struct usb_function_instance *fi)
 		}
 	}

-	midi2->string_defs = kcalloc(midi2->total_blocks + 1,
-				     sizeof(*midi2->string_defs), GFP_KERNEL);
+	midi2->string_defs = kzalloc_objs(*midi2->string_defs,
+					  midi2->total_blocks + 1, GFP_KERNEL);
 	if (!midi2->string_defs) {
 		do_f_midi2_free(midi2, opts);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
index e23adc132f88..6bbdb10ce3ca 100644
--- a/drivers/usb/gadget/function/f_ncm.c
+++ b/drivers/usb/gadget/function/f_ncm.c
@@ -1683,7 +1683,7 @@ static struct usb_function_instance *ncm_alloc_inst(void)
 	char *names[1];
 	struct config_group *ncm_interf_group;

-	struct f_ncm_opts *opts __free(kfree) = kzalloc(sizeof(*opts), GFP_KERNEL);
+	struct f_ncm_opts *opts __free(kfree) = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_obex.c b/drivers/usb/gadget/function/f_obex.c
index 6d498f63183e..e9e9fd70c243 100644
--- a/drivers/usb/gadget/function/f_obex.c
+++ b/drivers/usb/gadget/function/f_obex.c
@@ -426,7 +426,7 @@ static struct usb_function_instance *obex_alloc_inst(void)
 	struct f_serial_opts *opts;
 	int ret;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -461,7 +461,7 @@ static struct usb_function *obex_alloc(struct usb_function_instance *fi)
 	struct f_serial_opts *opts;

 	/* allocate and initialize one new instance */
-	obex = kzalloc(sizeof(*obex), GFP_KERNEL);
+	obex = kzalloc_obj(*obex, GFP_KERNEL);
 	if (!obex)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_phonet.c b/drivers/usb/gadget/function/f_phonet.c
index d644d5495fdc..b427dcae456c 100644
--- a/drivers/usb/gadget/function/f_phonet.c
+++ b/drivers/usb/gadget/function/f_phonet.c
@@ -623,7 +623,7 @@ static struct usb_function_instance *phonet_alloc_inst(void)
 {
 	struct f_phonet_opts *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -669,7 +669,7 @@ static struct usb_function *phonet_alloc(struct usb_function_instance *fi)
 	struct f_phonet *fp;
 	struct f_phonet_opts *opts;

-	fp = kzalloc(struct_size(fp, out_reqv, phonet_rxq_size), GFP_KERNEL);
+	fp = kzalloc_flex(*fp, out_reqv, phonet_rxq_size, GFP_KERNEL);
 	if (!fp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_printer.c b/drivers/usb/gadget/function/f_printer.c
index b2fa2b56c37e..d0e6435ac7a6 100644
--- a/drivers/usb/gadget/function/f_printer.c
+++ b/drivers/usb/gadget/function/f_printer.c
@@ -1374,7 +1374,7 @@ static struct usb_function_instance *gprinter_alloc_inst(void)
 	struct usb_function_instance *ret;
 	int status = 0;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -1482,7 +1482,7 @@ static struct usb_function *gprinter_alloc(struct usb_function_instance *fi)
 		return ERR_PTR(-ENOENT);
 	}

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		mutex_unlock(&opts->lock);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c
index 7451e7cb7a85..39a87458bab4 100644
--- a/drivers/usb/gadget/function/f_rndis.c
+++ b/drivers/usb/gadget/function/f_rndis.c
@@ -673,7 +673,7 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
 	rndis_opts = container_of(f->fi, struct f_rndis_opts, func_inst);

 	if (cdev->use_os_string) {
-		os_desc_table = kzalloc(sizeof(*os_desc_table), GFP_KERNEL);
+		os_desc_table = kzalloc_obj(*os_desc_table, GFP_KERNEL);
 		if (!os_desc_table)
 			return -ENOMEM;
 	}
@@ -888,7 +888,7 @@ static struct usb_function_instance *rndis_alloc_inst(void)
 	char *names[1];
 	struct config_group *rndis_interf_group;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);
 	opts->rndis_os_desc.ext_compat_id = opts->rndis_ext_compat_id;
@@ -956,7 +956,7 @@ static struct usb_function *rndis_alloc(struct usb_function_instance *fi)
 	struct rndis_params *params;

 	/* allocate and initialize one new instance */
-	rndis = kzalloc(sizeof(*rndis), GFP_KERNEL);
+	rndis = kzalloc_obj(*rndis, GFP_KERNEL);
 	if (!rndis)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_serial.c b/drivers/usb/gadget/function/f_serial.c
index e6b412e0e045..01fc06b29ab2 100644
--- a/drivers/usb/gadget/function/f_serial.c
+++ b/drivers/usb/gadget/function/f_serial.c
@@ -317,7 +317,7 @@ static struct usb_function_instance *gser_alloc_inst(void)
 	struct f_serial_opts *opts;
 	int ret;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -376,7 +376,7 @@ static struct usb_function *gser_alloc(struct usb_function_instance *fi)
 	struct f_serial_opts *opts;

 	/* allocate and initialize one new instance */
-	gser = kzalloc(sizeof(*gser), GFP_KERNEL);
+	gser = kzalloc_obj(*gser, GFP_KERNEL);
 	if (!gser)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_sourcesink.c b/drivers/usb/gadget/function/f_sourcesink.c
index 22104e9c6cab..e77e2e83833f 100644
--- a/drivers/usb/gadget/function/f_sourcesink.c
+++ b/drivers/usb/gadget/function/f_sourcesink.c
@@ -844,7 +844,7 @@ static struct usb_function *source_sink_alloc_func(
 	struct f_sourcesink     *ss;
 	struct f_ss_opts	*ss_opts;

-	ss = kzalloc(sizeof(*ss), GFP_KERNEL);
+	ss = kzalloc_obj(*ss, GFP_KERNEL);
 	if (!ss)
 		return ERR_PTR(-ENOMEM);

@@ -1297,7 +1297,7 @@ static struct usb_function_instance *source_sink_alloc_inst(void)
 {
 	struct f_ss_opts *ss_opts;

-	ss_opts = kzalloc(sizeof(*ss_opts), GFP_KERNEL);
+	ss_opts = kzalloc_obj(*ss_opts, GFP_KERNEL);
 	if (!ss_opts)
 		return ERR_PTR(-ENOMEM);
 	mutex_init(&ss_opts->lock);
diff --git a/drivers/usb/gadget/function/f_subset.c b/drivers/usb/gadget/function/f_subset.c
index ea3fdd842462..4913f60db048 100644
--- a/drivers/usb/gadget/function/f_subset.c
+++ b/drivers/usb/gadget/function/f_subset.c
@@ -428,7 +428,7 @@ static struct usb_function_instance *geth_alloc_inst(void)
 {
 	struct f_gether_opts *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);
 	mutex_init(&opts->lock);
@@ -467,7 +467,7 @@ static struct usb_function *geth_alloc(struct usb_function_instance *fi)
 	int status;

 	/* allocate and initialize one new instance */
-	geth = kzalloc(sizeof(*geth), GFP_KERNEL);
+	geth = kzalloc_obj(*geth, GFP_KERNEL);
 	if (!geth)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c
index efb94fd82533..29d6fd6ce935 100644
--- a/drivers/usb/gadget/function/f_tcm.c
+++ b/drivers/usb/gadget/function/f_tcm.c
@@ -1676,7 +1676,7 @@ static struct se_portal_group *usbg_make_tpg(struct se_wwn *wwn,
 			goto unlock_dep;
 	}

-	tpg = kzalloc(sizeof(struct usbg_tpg), GFP_KERNEL);
+	tpg = kzalloc_obj(struct usbg_tpg, GFP_KERNEL);
 	ret = -ENOMEM;
 	if (!tpg)
 		goto unref_dep;
@@ -1768,7 +1768,7 @@ static struct se_wwn *usbg_make_tport(
 	if (!wnn_name)
 		return ERR_PTR(-EINVAL);

-	tport = kzalloc(sizeof(struct usbg_tport), GFP_KERNEL);
+	tport = kzalloc_obj(struct usbg_tport, GFP_KERNEL);
 	if (!(tport))
 		return ERR_PTR(-ENOMEM);

@@ -1861,7 +1861,7 @@ static int tcm_usbg_make_nexus(struct usbg_tpg *tpg, char *name)
 		goto out_unlock;
 	}

-	tv_nexus = kzalloc(sizeof(*tv_nexus), GFP_KERNEL);
+	tv_nexus = kzalloc_obj(*tv_nexus, GFP_KERNEL);
 	if (!tv_nexus) {
 		ret = -ENOMEM;
 		goto out_unlock;
@@ -2400,7 +2400,7 @@ static int tcm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
 	if ((alt == USB_G_ALT_INT_BBB) || (alt == USB_G_ALT_INT_UAS)) {
 		struct guas_setup_wq *work;

-		work = kmalloc(sizeof(*work), GFP_ATOMIC);
+		work = kmalloc_obj(*work, GFP_ATOMIC);
 		if (!work)
 			return -ENOMEM;
 		INIT_WORK(&work->work, tcm_delayed_set_alt);
@@ -2535,7 +2535,7 @@ static struct usb_function_instance *tcm_alloc_inst(void)
 	int i;


-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -2590,7 +2590,7 @@ static struct usb_function *tcm_alloc(struct usb_function_instance *fi)
 		return ERR_PTR(-ENODEV);
 	}

-	fu = kzalloc(sizeof(*fu), GFP_KERNEL);
+	fu = kzalloc_obj(*fu, GFP_KERNEL);
 	if (!fu) {
 		mutex_unlock(&tpg_instances_lock);
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/usb/gadget/function/f_uac1.c b/drivers/usb/gadget/function/f_uac1.c
index efe9f270b02d..58ada4855de8 100644
--- a/drivers/usb/gadget/function/f_uac1.c
+++ b/drivers/usb/gadget/function/f_uac1.c
@@ -451,7 +451,7 @@ static int audio_notify(struct g_audio *audio, int unit_id, int cs)
 		goto err_dec_int_count;
 	}

-	msg = kmalloc(sizeof(*msg), GFP_ATOMIC);
+	msg = kmalloc_obj(*msg, GFP_ATOMIC);
 	if (msg == NULL) {
 		ret = -ENOMEM;
 		goto err_free_request;
@@ -1748,7 +1748,7 @@ static struct usb_function_instance *f_audio_alloc_inst(void)
 {
 	struct f_uac1_opts *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -1831,7 +1831,7 @@ static struct usb_function *f_audio_alloc(struct usb_function_instance *fi)
 	struct f_uac1_opts *opts;

 	/* allocate and initialize one new instance */
-	uac1 = kzalloc(sizeof(*uac1), GFP_KERNEL);
+	uac1 = kzalloc_obj(*uac1, GFP_KERNEL);
 	if (!uac1)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_uac1_legacy.c b/drivers/usb/gadget/function/f_uac1_legacy.c
index 8fc452b4b39a..ed7e1f061784 100644
--- a/drivers/usb/gadget/function/f_uac1_legacy.c
+++ b/drivers/usb/gadget/function/f_uac1_legacy.c
@@ -251,7 +251,7 @@ static struct f_audio_buf *f_audio_buffer_alloc(int buf_size)
 {
 	struct f_audio_buf *copy_buf;

-	copy_buf = kzalloc(sizeof *copy_buf, GFP_ATOMIC);
+	copy_buf = kzalloc_obj(*copy_buf, GFP_ATOMIC);
 	if (!copy_buf)
 		return ERR_PTR(-ENOMEM);

@@ -942,7 +942,7 @@ static struct usb_function_instance *f_audio_alloc_inst(void)
 {
 	struct f_uac1_legacy_opts *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -985,7 +985,7 @@ static struct usb_function *f_audio_alloc(struct usb_function_instance *fi)
 	struct f_uac1_legacy_opts *opts;

 	/* allocate and initialize one new instance */
-	audio = kzalloc(sizeof(*audio), GFP_KERNEL);
+	audio = kzalloc_obj(*audio, GFP_KERNEL);
 	if (!audio)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c
index 98f0f50dc7a8..c66908bbe714 100644
--- a/drivers/usb/gadget/function/f_uac2.c
+++ b/drivers/usb/gadget/function/f_uac2.c
@@ -1388,7 +1388,7 @@ afunc_notify(struct g_audio *agdev, int unit_id, int cs)
 		goto err_dec_int_count;
 	}

-	msg = kzalloc(sizeof(*msg), GFP_ATOMIC);
+	msg = kzalloc_obj(*msg, GFP_ATOMIC);
 	if (msg == NULL) {
 		ret = -ENOMEM;
 		goto err_free_request;
@@ -2189,7 +2189,7 @@ static struct usb_function_instance *afunc_alloc_inst(void)
 {
 	struct f_uac2_opts *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);

@@ -2278,7 +2278,7 @@ static struct usb_function *afunc_alloc(struct usb_function_instance *fi)
 	struct f_uac2	*uac2;
 	struct f_uac2_opts *opts;

-	uac2 = kzalloc(sizeof(*uac2), GFP_KERNEL);
+	uac2 = kzalloc_obj(*uac2, GFP_KERNEL);
 	if (uac2 == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c
index a96476507d2f..4b9846ab99f2 100644
--- a/drivers/usb/gadget/function/f_uvc.c
+++ b/drivers/usb/gadget/function/f_uvc.c
@@ -887,7 +887,7 @@ static struct usb_function_instance *uvc_alloc_inst(void)
 	struct uvc_descriptor_header **ctl_cls;
 	int ret;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return ERR_PTR(-ENOMEM);
 	opts->func_inst.free_func_inst = uvc_free_inst;
@@ -1042,7 +1042,7 @@ static struct usb_function *uvc_alloc(struct usb_function_instance *fi)
 	struct uvc_descriptor_header **strm_cls;
 	struct config_item *streaming, *header, *h;

-	uvc = kzalloc(sizeof(*uvc), GFP_KERNEL);
+	uvc = kzalloc_obj(*uvc, GFP_KERNEL);
 	if (uvc == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/gadget/function/rndis.c b/drivers/usb/gadget/function/rndis.c
index afd75d72412c..1e168666a3f5 100644
--- a/drivers/usb/gadget/function/rndis.c
+++ b/drivers/usb/gadget/function/rndis.c
@@ -892,7 +892,7 @@ struct rndis_params *rndis_register(void (*resp_avail)(void *v), void *v)
 		return ERR_PTR(-ENODEV);
 	}

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params) {
 		rndis_put_nr(i);

diff --git a/drivers/usb/gadget/function/u_audio.c b/drivers/usb/gadget/function/u_audio.c
index ca8dbec65f73..24c934bbf0e5 100644
--- a/drivers/usb/gadget/function/u_audio.c
+++ b/drivers/usb/gadget/function/u_audio.c
@@ -1191,7 +1191,7 @@ int g_audio_setup(struct g_audio *g_audio, const char *pcm_name,
 	if (!g_audio)
 		return -EINVAL;

-	uac = kzalloc(sizeof(*uac), GFP_KERNEL);
+	uac = kzalloc_obj(*uac, GFP_KERNEL);
 	if (!uac)
 		return -ENOMEM;
 	g_audio->uac = uac;
@@ -1209,9 +1209,8 @@ int g_audio_setup(struct g_audio *g_audio, const char *pcm_name,
 		prm->max_psize = g_audio->out_ep_maxpsize;
 		prm->srate = params->c_srates[0];

-		prm->reqs = kcalloc(params->req_number,
-				    sizeof(struct usb_request *),
-				    GFP_KERNEL);
+		prm->reqs = kzalloc_objs(struct usb_request *,
+					 params->req_number, GFP_KERNEL);
 		if (!prm->reqs) {
 			err = -ENOMEM;
 			goto fail;
@@ -1234,9 +1233,8 @@ int g_audio_setup(struct g_audio *g_audio, const char *pcm_name,
 		prm->max_psize = g_audio->in_ep_maxpsize;
 		prm->srate = params->p_srates[0];

-		prm->reqs = kcalloc(params->req_number,
-				    sizeof(struct usb_request *),
-				    GFP_KERNEL);
+		prm->reqs = kzalloc_objs(struct usb_request *,
+					 params->req_number, GFP_KERNEL);
 		if (!prm->reqs) {
 			err = -ENOMEM;
 			goto fail;
diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
index 1cce5317181a..e61beaa0c53d 100644
--- a/drivers/usb/gadget/function/u_serial.c
+++ b/drivers/usb/gadget/function/u_serial.c
@@ -1082,7 +1082,7 @@ static int gs_console_init(struct gs_port *port)
 	if (port->console)
 		return 0;

-	cons = kzalloc(sizeof(*port->console), GFP_KERNEL);
+	cons = kzalloc_obj(*port->console, GFP_KERNEL);
 	if (!cons)
 		return -ENOMEM;

@@ -1215,7 +1215,7 @@ gs_port_alloc(unsigned port_num, struct usb_cdc_line_coding *coding)
 		goto out;
 	}

-	port = kzalloc(sizeof(struct gs_port), GFP_KERNEL);
+	port = kzalloc_obj(struct gs_port, GFP_KERNEL);
 	if (port == NULL) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/usb/gadget/function/u_uac1_legacy.c b/drivers/usb/gadget/function/u_uac1_legacy.c
index dd21c251542c..e95c2fc7fc10 100644
--- a/drivers/usb/gadget/function/u_uac1_legacy.c
+++ b/drivers/usb/gadget/function/u_uac1_legacy.c
@@ -106,7 +106,7 @@ static int playback_default_hw_params(struct gaudio_snd_dev *snd)
 	snd->channels = 2;
 	snd->rate = 48000;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c
index 4cec6c586d67..553057cbf63a 100644
--- a/drivers/usb/gadget/function/uvc_configfs.c
+++ b/drivers/usb/gadget/function/uvc_configfs.c
@@ -158,7 +158,7 @@ static int uvcg_config_create_group(struct config_group *parent,
 {
 	struct config_group *group;

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group)
 		return -ENOMEM;

@@ -270,7 +270,7 @@ static struct config_item *uvcg_control_header_make(struct config_group *group,
 {
 	struct uvcg_control_header *h;

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return ERR_PTR(-ENOMEM);

@@ -1273,7 +1273,7 @@ static struct config_item *uvcg_extension_make(struct config_group *group, const
 	opts_item = group->cg_item.ci_parent->ci_parent;
 	opts = to_f_uvc_opts(opts_item);

-	xu = kzalloc(sizeof(*xu), GFP_KERNEL);
+	xu = kzalloc_obj(*xu, GFP_KERNEL);
 	if (!xu)
 		return ERR_PTR(-ENOMEM);

@@ -1437,7 +1437,7 @@ static int uvcg_control_class_create_children(struct config_group *parent)
 	for (i = 0; i < ARRAY_SIZE(names); ++i) {
 		struct uvcg_control_class_group *group;

-		group = kzalloc(sizeof(*group), GFP_KERNEL);
+		group = kzalloc_obj(*group, GFP_KERNEL);
 		if (!group)
 			return -ENOMEM;

@@ -1785,7 +1785,7 @@ static int uvcg_streaming_header_allow_link(struct config_item *src,

 	uvcg_format_set_indices(to_config_group(target));

-	format_ptr = kzalloc(sizeof(*format_ptr), GFP_KERNEL);
+	format_ptr = kzalloc_obj(*format_ptr, GFP_KERNEL);
 	if (!format_ptr) {
 		ret = -ENOMEM;
 		goto out;
@@ -1899,7 +1899,7 @@ static struct config_item
 {
 	struct uvcg_streaming_header *h;

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return ERR_PTR(-ENOMEM);

@@ -2163,7 +2163,7 @@ static struct config_item *uvcg_frame_make(struct config_group *group,
 	struct config_item *opts_item;
 	struct uvcg_frame_ptr *frame_ptr;

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return ERR_PTR(-ENOMEM);

@@ -2197,7 +2197,7 @@ static struct config_item *uvcg_frame_make(struct config_group *group,
 		return ERR_PTR(-EINVAL);
 	}

-	frame_ptr = kzalloc(sizeof(*frame_ptr), GFP_KERNEL);
+	frame_ptr = kzalloc_obj(*frame_ptr, GFP_KERNEL);
 	if (!frame_ptr) {
 		mutex_unlock(&opts->lock);
 		kfree(h);
@@ -2483,7 +2483,7 @@ static struct config_group *uvcg_uncompressed_make(struct config_group *group,
 	if (!color_match)
 		return ERR_PTR(-EINVAL);

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return ERR_PTR(-ENOMEM);

@@ -2675,7 +2675,7 @@ static struct config_group *uvcg_mjpeg_make(struct config_group *group,
 	if (!color_match)
 		return ERR_PTR(-EINVAL);

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return ERR_PTR(-ENOMEM);

@@ -2926,7 +2926,7 @@ static struct config_group *uvcg_framebased_make(struct config_group *group,
 	if (!color_match)
 		return ERR_PTR(-EINVAL);

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (!h)
 		return ERR_PTR(-ENOMEM);

@@ -3075,7 +3075,7 @@ static struct config_group *uvcg_color_matching_make(struct config_group *group,
 {
 	struct uvcg_color_matching *color_match;

-	color_match = kzalloc(sizeof(*color_match), GFP_KERNEL);
+	color_match = kzalloc_obj(*color_match, GFP_KERNEL);
 	if (!color_match)
 		return ERR_PTR(-ENOMEM);

@@ -3097,7 +3097,7 @@ static int uvcg_color_matching_create_children(struct config_group *parent)
 {
 	struct uvcg_color_matching *color_match;

-	color_match = kzalloc(sizeof(*color_match), GFP_KERNEL);
+	color_match = kzalloc_obj(*color_match, GFP_KERNEL);
 	if (!color_match)
 		return -ENOMEM;

@@ -3553,7 +3553,7 @@ static int uvcg_streaming_class_create_children(struct config_group *parent)
 	for (i = 0; i < ARRAY_SIZE(names); ++i) {
 		struct uvcg_streaming_class_group *group;

-		group = kzalloc(sizeof(*group), GFP_KERNEL);
+		group = kzalloc_obj(*group, GFP_KERNEL);
 		if (!group)
 			return -ENOMEM;

diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c
index fd4b998ccd16..574b3a8986a0 100644
--- a/drivers/usb/gadget/function/uvc_v4l2.c
+++ b/drivers/usb/gadget/function/uvc_v4l2.c
@@ -667,7 +667,7 @@ uvc_v4l2_open(struct file *file)
 	struct uvc_device *uvc = video_get_drvdata(vdev);
 	struct uvc_file_handle *handle;

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (handle == NULL)
 		return -ENOMEM;

diff --git a/drivers/usb/gadget/function/uvc_video.c b/drivers/usb/gadget/function/uvc_video.c
index f568dee08b3b..b2784a57dbcd 100644
--- a/drivers/usb/gadget/function/uvc_video.c
+++ b/drivers/usb/gadget/function/uvc_video.c
@@ -559,7 +559,7 @@ uvc_video_alloc_requests(struct uvc_video *video)
 	uvc_video_prep_requests(video);

 	for (i = 0; i < video->uvc_num_requests; i++) {
-		ureq = kzalloc(sizeof(struct uvc_request), GFP_KERNEL);
+		ureq = kzalloc_obj(struct uvc_request, GFP_KERNEL);
 		if (ureq == NULL)
 			goto error;

diff --git a/drivers/usb/gadget/legacy/dbgp.c b/drivers/usb/gadget/legacy/dbgp.c
index d70fb5bc2357..af8968ef9380 100644
--- a/drivers/usb/gadget/legacy/dbgp.c
+++ b/drivers/usb/gadget/legacy/dbgp.c
@@ -298,7 +298,7 @@ static int dbgp_bind(struct usb_gadget *gadget,
 	dbgp.req->length = DBGP_REQ_EP0_LEN;

 #ifdef CONFIG_USB_G_DBGP_SERIAL
-	dbgp.serial = kzalloc(sizeof(struct gserial), GFP_KERNEL);
+	dbgp.serial = kzalloc_obj(struct gserial, GFP_KERNEL);
 	if (!dbgp.serial) {
 		stp = 3;
 		err = -ENOMEM;
diff --git a/drivers/usb/gadget/legacy/g_ffs.c b/drivers/usb/gadget/legacy/g_ffs.c
index 578556422ea3..98a08efe86dd 100644
--- a/drivers/usb/gadget/legacy/g_ffs.c
+++ b/drivers/usb/gadget/legacy/g_ffs.c
@@ -188,7 +188,7 @@ static int __init gfs_init(void)
 	/*
 	 * Allocate in one chunk for easier maintenance
 	 */
-	f_ffs[0] = kcalloc(func_num * N_CONF, sizeof(*f_ffs[0]), GFP_KERNEL);
+	f_ffs[0] = kzalloc_objs(*f_ffs[0], func_num * N_CONF, GFP_KERNEL);
 	if (!f_ffs[0]) {
 		ret = -ENOMEM;
 		goto no_func;
@@ -196,7 +196,7 @@ static int __init gfs_init(void)
 	for (i = 1; i < N_CONF; ++i)
 		f_ffs[i] = f_ffs[0] + i * func_num;

-	fi_ffs = kcalloc(func_num, sizeof(*fi_ffs), GFP_KERNEL);
+	fi_ffs = kzalloc_objs(*fi_ffs, func_num, GFP_KERNEL);
 	if (!fi_ffs) {
 		ret = -ENOMEM;
 		goto no_func;
diff --git a/drivers/usb/gadget/legacy/hid.c b/drivers/usb/gadget/legacy/hid.c
index 3684546e8801..bc25c04daaaf 100644
--- a/drivers/usb/gadget/legacy/hid.c
+++ b/drivers/usb/gadget/legacy/hid.c
@@ -227,7 +227,7 @@ static int hidg_plat_driver_probe(struct platform_device *pdev)
 		return -ENODEV;
 	}

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
index 62566a8e7451..52512fba80ec 100644
--- a/drivers/usb/gadget/legacy/inode.c
+++ b/drivers/usb/gadget/legacy/inode.c
@@ -173,7 +173,7 @@ static struct dev_data *dev_new (void)
 {
 	struct dev_data		*dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;
 	dev->state = STATE_DEV_DISABLED;
@@ -614,7 +614,7 @@ ep_read_iter(struct kiocb *iocb, struct iov_iter *to)
 		if (value >= 0 && (copy_to_iter(buf, value, to) != value))
 			value = -EFAULT;
 	} else {
-		struct kiocb_priv *priv = kzalloc(sizeof *priv, GFP_KERNEL);
+		struct kiocb_priv *priv = kzalloc_obj(*priv, GFP_KERNEL);
 		value = -ENOMEM;
 		if (!priv)
 			goto fail;
@@ -682,7 +682,7 @@ ep_write_iter(struct kiocb *iocb, struct iov_iter *from)
 	} else if (is_sync_kiocb(iocb)) {
 		value = ep_io(epdata, buf, len);
 	} else {
-		struct kiocb_priv *priv = kzalloc(sizeof *priv, GFP_KERNEL);
+		struct kiocb_priv *priv = kzalloc_obj(*priv, GFP_KERNEL);
 		value = -ENOMEM;
 		if (priv) {
 			value = ep_aio(iocb, priv, epdata, buf, len);
@@ -1598,7 +1598,7 @@ static int activate_ep_files (struct dev_data *dev)

 	gadget_for_each_ep (ep, dev->gadget) {

-		data = kzalloc(sizeof(*data), GFP_KERNEL);
+		data = kzalloc_obj(*data, GFP_KERNEL);
 		if (!data)
 			goto enomem0;
 		data->state = STATE_EP_DISABLED;
diff --git a/drivers/usb/gadget/legacy/raw_gadget.c b/drivers/usb/gadget/legacy/raw_gadget.c
index 46f343ba48b3..5cb8d262329f 100644
--- a/drivers/usb/gadget/legacy/raw_gadget.c
+++ b/drivers/usb/gadget/legacy/raw_gadget.c
@@ -190,7 +190,7 @@ static struct raw_dev *dev_new(void)
 {
 	struct raw_dev *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;
 	/* Matches kref_put() in raw_release(). */
@@ -1251,7 +1251,7 @@ static int raw_ioctl_eps_info(struct raw_dev *dev, unsigned long value)
 	struct usb_raw_eps_info *info;
 	struct raw_ep *ep;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/usb/gadget/udc/amd5536udc_pci.c b/drivers/usb/gadget/udc/amd5536udc_pci.c
index a36913ae31f9..e709bd4976c5 100644
--- a/drivers/usb/gadget/udc/amd5536udc_pci.c
+++ b/drivers/usb/gadget/udc/amd5536udc_pci.c
@@ -95,7 +95,7 @@ static int udc_pci_probe(
 	}

 	/* init */
-	dev = kzalloc(sizeof(struct udc), GFP_KERNEL);
+	dev = kzalloc_obj(struct udc, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/usb/gadget/udc/aspeed-vhub/core.c b/drivers/usb/gadget/udc/aspeed-vhub/core.c
index 19c1849ae665..4a8b9ff8368f 100644
--- a/drivers/usb/gadget/udc/aspeed-vhub/core.c
+++ b/drivers/usb/gadget/udc/aspeed-vhub/core.c
@@ -78,7 +78,7 @@ struct usb_request *ast_vhub_alloc_request(struct usb_ep *u_ep,
 {
 	struct ast_vhub_req *req;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;
 	return &req->req;
diff --git a/drivers/usb/gadget/udc/aspeed-vhub/dev.c b/drivers/usb/gadget/udc/aspeed-vhub/dev.c
index a09f72772e6e..c79522164f18 100644
--- a/drivers/usb/gadget/udc/aspeed-vhub/dev.c
+++ b/drivers/usb/gadget/udc/aspeed-vhub/dev.c
@@ -560,7 +560,7 @@ int ast_vhub_init_dev(struct ast_vhub *vhub, unsigned int idx)
 	 * endpoint 0.
 	 */
 	d->max_epns = min_t(u32, vhub->max_epns, 30);
-	d->epns = kcalloc(d->max_epns, sizeof(*d->epns), GFP_KERNEL);
+	d->epns = kzalloc_objs(*d->epns, d->max_epns, GFP_KERNEL);
 	if (!d->epns)
 		return -ENOMEM;

@@ -569,7 +569,7 @@ int ast_vhub_init_dev(struct ast_vhub *vhub, unsigned int idx)
 	 * named "parent" devices for each port so we create a sub device
 	 * here for that purpose
 	 */
-	d->port_dev = kzalloc(sizeof(struct device), GFP_KERNEL);
+	d->port_dev = kzalloc_obj(struct device, GFP_KERNEL);
 	if (!d->port_dev) {
 		rc = -ENOMEM;
 		goto fail_alloc;
diff --git a/drivers/usb/gadget/udc/aspeed_udc.c b/drivers/usb/gadget/udc/aspeed_udc.c
index 353bfb1ff0a1..7fc6696b7694 100644
--- a/drivers/usb/gadget/udc/aspeed_udc.c
+++ b/drivers/usb/gadget/udc/aspeed_udc.c
@@ -452,7 +452,7 @@ static struct usb_request *ast_udc_ep_alloc_request(struct usb_ep *_ep,
 	struct ast_udc_ep *ep = to_ast_ep(_ep);
 	struct ast_udc_request *req;

-	req = kzalloc(sizeof(struct ast_udc_request), gfp_flags);
+	req = kzalloc_obj(struct ast_udc_request, gfp_flags);
 	if (!req) {
 		EP_DBG(ep, "request allocation failed\n");
 		return NULL;
diff --git a/drivers/usb/gadget/udc/at91_udc.c b/drivers/usb/gadget/udc/at91_udc.c
index 42b94d858e37..5aa360ba4f03 100644
--- a/drivers/usb/gadget/udc/at91_udc.c
+++ b/drivers/usb/gadget/udc/at91_udc.c
@@ -585,7 +585,7 @@ at91_ep_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
 {
 	struct at91_request *req;

-	req = kzalloc(sizeof (struct at91_request), gfp_flags);
+	req = kzalloc_obj(struct at91_request, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
index 0c6f2ad81d37..427535bf35a6 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
@@ -40,7 +40,7 @@ static int queue_dbg_open(struct inode *inode, struct file *file)
 	struct usba_request *req, *req_copy;
 	struct list_head *queue_data;

-	queue_data = kmalloc(sizeof(*queue_data), GFP_KERNEL);
+	queue_data = kmalloc_obj(*queue_data, GFP_KERNEL);
 	if (!queue_data)
 		return -ENOMEM;
 	INIT_LIST_HEAD(queue_data);
@@ -702,7 +702,7 @@ usba_ep_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)

 	DBG(DBG_GADGET, "ep_alloc_request: %p, 0x%x\n", _ep, gfp_flags);

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/bcm63xx_udc.c b/drivers/usb/gadget/udc/bcm63xx_udc.c
index 502612a5650e..c4f9ea45bdbb 100644
--- a/drivers/usb/gadget/udc/bcm63xx_udc.c
+++ b/drivers/usb/gadget/udc/bcm63xx_udc.c
@@ -1115,7 +1115,7 @@ static struct usb_request *bcm63xx_udc_alloc_request(struct usb_ep *ep,
 {
 	struct bcm63xx_req *breq;

-	breq = kzalloc(sizeof(*breq), mem_flags);
+	breq = kzalloc_obj(*breq, mem_flags);
 	if (!breq)
 		return NULL;
 	return &breq->req;
diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c
index f47aac078f6b..51602d9eca02 100644
--- a/drivers/usb/gadget/udc/bdc/bdc_core.c
+++ b/drivers/usb/gadget/udc/bdc/bdc_core.c
@@ -397,8 +397,8 @@ static int bdc_mem_alloc(struct bdc *bdc)
 		"ieps:%d eops:%d num_eps:%d\n",
 		num_ieps, num_oeps, bdc->num_eps);
 	/* allocate array of ep pointers */
-	bdc->bdc_ep_array = kcalloc(bdc->num_eps, sizeof(struct bdc_ep *),
-								GFP_KERNEL);
+	bdc->bdc_ep_array = kzalloc_objs(struct bdc_ep *, bdc->num_eps,
+					 GFP_KERNEL);
 	if (!bdc->bdc_ep_array)
 		goto fail;

diff --git a/drivers/usb/gadget/udc/bdc/bdc_ep.c b/drivers/usb/gadget/udc/bdc/bdc_ep.c
index f995cfa9b99e..a7f2fe29e433 100644
--- a/drivers/usb/gadget/udc/bdc/bdc_ep.c
+++ b/drivers/usb/gadget/udc/bdc/bdc_ep.c
@@ -138,16 +138,15 @@ static int ep_bd_list_alloc(struct bdc_ep *ep)
 		__func__, ep, num_tabs);

 	/* Allocate memory for table array */
-	ep->bd_list.bd_table_array = kcalloc(num_tabs,
-					     sizeof(struct bd_table *),
-					     GFP_ATOMIC);
+	ep->bd_list.bd_table_array = kzalloc_objs(struct bd_table *, num_tabs,
+						  GFP_ATOMIC);
 	if (!ep->bd_list.bd_table_array)
 		return -ENOMEM;

 	/* Allocate memory for each table */
 	for (index = 0; index < num_tabs; index++) {
 		/* Allocate memory for bd_table structure */
-		bd_table = kzalloc(sizeof(*bd_table), GFP_ATOMIC);
+		bd_table = kzalloc_obj(*bd_table, GFP_ATOMIC);
 		if (!bd_table)
 			goto fail;

@@ -1829,7 +1828,7 @@ static struct usb_request *bdc_gadget_alloc_request(struct usb_ep *_ep,
 	struct bdc_req *req;
 	struct bdc_ep *ep;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

@@ -1946,7 +1945,7 @@ static int init_ep(struct bdc *bdc, u32 epnum, u32 dir)
 	struct bdc_ep *ep;

 	dev_dbg(bdc->dev, "%s epnum=%d dir=%d\n", __func__, epnum, dir);
-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;

diff --git a/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c b/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c
index 9b53daf76583..308d3c468ab1 100644
--- a/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c
+++ b/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c
@@ -1505,7 +1505,7 @@ struct usb_request *cdns2_gadget_ep_alloc_request(struct usb_ep *ep,
 	struct cdns2_endpoint *pep = ep_to_cdns2_ep(ep);
 	struct cdns2_request *preq;

-	preq = kzalloc(sizeof(*preq), gfp_flags);
+	preq = kzalloc_obj(*preq, gfp_flags);
 	if (!preq)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
index 8dbe79bdc0f9..394ed540c22f 100644
--- a/drivers/usb/gadget/udc/core.c
+++ b/drivers/usb/gadget/udc/core.c
@@ -1393,7 +1393,7 @@ int usb_add_gadget(struct usb_gadget *gadget)
 	struct usb_udc		*udc;
 	int			ret = -ENOMEM;

-	udc = kzalloc(sizeof(*udc), GFP_KERNEL);
+	udc = kzalloc_obj(*udc, GFP_KERNEL);
 	if (!udc)
 		goto error;

diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
index 1cefca660773..e183f36b2b0b 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
@@ -666,7 +666,7 @@ static struct usb_request *dummy_alloc_request(struct usb_ep *_ep,
 	if (!_ep)
 		return NULL;

-	req = kzalloc(sizeof(*req), mem_flags);
+	req = kzalloc_obj(*req, mem_flags);
 	if (!req)
 		return NULL;
 	INIT_LIST_HEAD(&req->queue);
@@ -1270,7 +1270,7 @@ static int dummy_urb_enqueue(
 	unsigned long	flags;
 	int		rc;

-	urbp = kmalloc(sizeof *urbp, mem_flags);
+	urbp = kmalloc_obj(*urbp, mem_flags);
 	if (!urbp)
 		return -ENOMEM;
 	urbp->urb = urb;
@@ -2819,7 +2819,7 @@ static int __init dummy_hcd_init(void)
 		}
 	}
 	for (i = 0; i < mod_data.num; i++) {
-		dum[i] = kzalloc(sizeof(struct dummy), GFP_KERNEL);
+		dum[i] = kzalloc_obj(struct dummy, GFP_KERNEL);
 		if (!dum[i]) {
 			retval = -ENOMEM;
 			goto err_add_pdata;
diff --git a/drivers/usb/gadget/udc/fsl_qe_udc.c b/drivers/usb/gadget/udc/fsl_qe_udc.c
index aacfde06387c..edbffafa6fa7 100644
--- a/drivers/usb/gadget/udc/fsl_qe_udc.c
+++ b/drivers/usb/gadget/udc/fsl_qe_udc.c
@@ -417,7 +417,7 @@ static int qe_ep_rxbd_update(struct qe_ep *ep)

 	bd = ep->rxbase;

-	ep->rxframe = kmalloc(sizeof(*ep->rxframe), GFP_ATOMIC);
+	ep->rxframe = kmalloc_obj(*ep->rxframe, GFP_ATOMIC);
 	if (!ep->rxframe)
 		return -ENOMEM;

@@ -666,7 +666,7 @@ static int qe_ep_init(struct qe_udc *udc,
 	}

 	if ((ep->tm == USBP_TM_CTL) || (ep->dir == USB_DIR_IN)) {
-		ep->txframe = kmalloc(sizeof(*ep->txframe), GFP_ATOMIC);
+		ep->txframe = kmalloc_obj(*ep->txframe, GFP_ATOMIC);
 		if (!ep->txframe)
 			goto en_done2;
 		qe_frame_init(ep->txframe);
@@ -1670,7 +1670,7 @@ static struct usb_request *qe_alloc_request(struct usb_ep *_ep,	gfp_t gfp_flags)
 {
 	struct qe_req *req;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

@@ -2344,7 +2344,7 @@ static struct qe_udc *qe_udc_config(struct platform_device *ofdev)
 	u64 size;
 	u32 offset;

-	udc = kzalloc(sizeof(*udc), GFP_KERNEL);
+	udc = kzalloc_obj(*udc, GFP_KERNEL);
 	if (!udc)
 		goto cleanup;

diff --git a/drivers/usb/gadget/udc/fsl_udc_core.c b/drivers/usb/gadget/udc/fsl_udc_core.c
index 4dea8bc30cf6..961728e92a88 100644
--- a/drivers/usb/gadget/udc/fsl_udc_core.c
+++ b/drivers/usb/gadget/udc/fsl_udc_core.c
@@ -678,7 +678,7 @@ fsl_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
 {
 	struct fsl_req *req;

-	req = kzalloc(sizeof *req, gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

@@ -2250,7 +2250,7 @@ static int struct_udc_setup(struct fsl_udc *udc,
 	pdata = dev_get_platdata(&pdev->dev);
 	udc->phy_mode = pdata->phy_mode;

-	udc->eps = kcalloc(udc->max_ep, sizeof(struct fsl_ep), GFP_KERNEL);
+	udc->eps = kzalloc_objs(struct fsl_ep, udc->max_ep, GFP_KERNEL);
 	if (!udc->eps) {
 		dev_err(&udc->gadget.dev, "kmalloc udc endpoint status failed\n");
 		goto eps_alloc_failed;
@@ -2369,7 +2369,7 @@ static int fsl_udc_probe(struct platform_device *pdev)
 	unsigned int i;
 	u32 dccparams;

-	udc_controller = kzalloc(sizeof(struct fsl_udc), GFP_KERNEL);
+	udc_controller = kzalloc_obj(struct fsl_udc, GFP_KERNEL);
 	if (udc_controller == NULL)
 		return -ENOMEM;

diff --git a/drivers/usb/gadget/udc/goku_udc.c b/drivers/usb/gadget/udc/goku_udc.c
index b860c2e76449..f9ddf22c57ef 100644
--- a/drivers/usb/gadget/udc/goku_udc.c
+++ b/drivers/usb/gadget/udc/goku_udc.c
@@ -273,7 +273,7 @@ goku_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)

 	if (!_ep)
 		return NULL;
-	req = kzalloc(sizeof *req, gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

@@ -1755,7 +1755,7 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	}

 	/* alloc, and start init */
-	dev = kzalloc (sizeof *dev, GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		retval = -ENOMEM;
 		goto err;
diff --git a/drivers/usb/gadget/udc/gr_udc.c b/drivers/usb/gadget/udc/gr_udc.c
index bf5b3c964c18..cdcbfae140e9 100644
--- a/drivers/usb/gadget/udc/gr_udc.c
+++ b/drivers/usb/gadget/udc/gr_udc.c
@@ -347,7 +347,7 @@ static struct usb_request *gr_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
 {
 	struct gr_request *req;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c
index 83c7e243dcf9..044c31869cfb 100644
--- a/drivers/usb/gadget/udc/lpc32xx_udc.c
+++ b/drivers/usb/gadget/udc/lpc32xx_udc.c
@@ -1705,7 +1705,7 @@ static struct usb_request *lpc32xx_ep_alloc_request(struct usb_ep *_ep,
 {
 	struct lpc32xx_request *req;

-	req = kzalloc(sizeof(struct lpc32xx_request), gfp_flags);
+	req = kzalloc_obj(struct lpc32xx_request, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/m66592-udc.c b/drivers/usb/gadget/udc/m66592-udc.c
index 54885175b8a4..08ae3d5a79ff 100644
--- a/drivers/usb/gadget/udc/m66592-udc.c
+++ b/drivers/usb/gadget/udc/m66592-udc.c
@@ -1330,7 +1330,7 @@ static struct usb_request *m66592_alloc_request(struct usb_ep *_ep,
 {
 	struct m66592_request *req;

-	req = kzalloc(sizeof(struct m66592_request), gfp_flags);
+	req = kzalloc_obj(struct m66592_request, gfp_flags);
 	if (!req)
 		return NULL;

@@ -1571,7 +1571,7 @@ static int m66592_probe(struct platform_device *pdev)
 	}

 	/* initialize ucd */
-	m66592 = kzalloc(sizeof(struct m66592), GFP_KERNEL);
+	m66592 = kzalloc_obj(struct m66592, GFP_KERNEL);
 	if (m66592 == NULL) {
 		ret = -ENOMEM;
 		goto clean_up;
diff --git a/drivers/usb/gadget/udc/max3420_udc.c b/drivers/usb/gadget/udc/max3420_udc.c
index 7349ea774adf..11fd61cba5af 100644
--- a/drivers/usb/gadget/udc/max3420_udc.c
+++ b/drivers/usb/gadget/udc/max3420_udc.c
@@ -1007,7 +1007,7 @@ static struct usb_request *max3420_alloc_request(struct usb_ep *_ep,
 	struct max3420_ep *ep = to_max3420_ep(_ep);
 	struct max3420_req *req;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
index 8ea1adc7461d..aa1a88a2aa3b 100644
--- a/drivers/usb/gadget/udc/net2280.c
+++ b/drivers/usb/gadget/udc/net2280.c
@@ -554,7 +554,7 @@ static struct usb_request
 	}
 	ep = container_of(_ep, struct net2280_ep, ep);

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

@@ -3625,7 +3625,7 @@ static int net2280_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	int			retval, i;

 	/* alloc, and start init */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		retval = -ENOMEM;
 		goto done;
diff --git a/drivers/usb/gadget/udc/omap_udc.c b/drivers/usb/gadget/udc/omap_udc.c
index 062bf2b57d2e..8dda63c38ee5 100644
--- a/drivers/usb/gadget/udc/omap_udc.c
+++ b/drivers/usb/gadget/udc/omap_udc.c
@@ -267,7 +267,7 @@ omap_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
 {
 	struct omap_req	*req;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

@@ -2627,7 +2627,7 @@ omap_udc_setup(struct platform_device *odev, struct usb_phy *xceiv)
 	/* UDC_PULLUP_EN gates the chip clock */
 	/* OTG_SYSCON_1 |= DEV_IDLE_EN; */

-	udc = kzalloc(sizeof(*udc), GFP_KERNEL);
+	udc = kzalloc_obj(*udc, GFP_KERNEL);
 	if (!udc)
 		return -ENOMEM;

diff --git a/drivers/usb/gadget/udc/pch_udc.c b/drivers/usb/gadget/udc/pch_udc.c
index 0b20ecbe64f9..0a6886428739 100644
--- a/drivers/usb/gadget/udc/pch_udc.c
+++ b/drivers/usb/gadget/udc/pch_udc.c
@@ -1717,7 +1717,7 @@ static struct usb_request *pch_udc_alloc_request(struct usb_ep *usbep,
 	if (!usbep)
 		return NULL;
 	ep = container_of(usbep, struct pch_udc_ep, ep);
-	req = kzalloc(sizeof *req, gfp);
+	req = kzalloc_obj(*req, gfp);
 	if (!req)
 		return NULL;
 	req->req.dma = DMA_ADDR_INVALID;
diff --git a/drivers/usb/gadget/udc/pxa25x_udc.c b/drivers/usb/gadget/udc/pxa25x_udc.c
index b97fb7b0cb2c..b3d58d7c3a77 100644
--- a/drivers/usb/gadget/udc/pxa25x_udc.c
+++ b/drivers/usb/gadget/udc/pxa25x_udc.c
@@ -508,7 +508,7 @@ pxa25x_ep_alloc_request (struct usb_ep *_ep, gfp_t gfp_flags)
 {
 	struct pxa25x_request *req;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/pxa27x_udc.c b/drivers/usb/gadget/udc/pxa27x_udc.c
index 897f53601b5b..4fac477d24c0 100644
--- a/drivers/usb/gadget/udc/pxa27x_udc.c
+++ b/drivers/usb/gadget/udc/pxa27x_udc.c
@@ -573,7 +573,7 @@ pxa_ep_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
 {
 	struct pxa27x_request *req;

-	req = kzalloc(sizeof *req, gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/r8a66597-udc.c b/drivers/usb/gadget/udc/r8a66597-udc.c
index e5c2630e3711..e7a5d8553c0e 100644
--- a/drivers/usb/gadget/udc/r8a66597-udc.c
+++ b/drivers/usb/gadget/udc/r8a66597-udc.c
@@ -1580,7 +1580,7 @@ static struct usb_request *r8a66597_alloc_request(struct usb_ep *_ep,
 {
 	struct r8a66597_request *req;

-	req = kzalloc(sizeof(struct r8a66597_request), gfp_flags);
+	req = kzalloc_obj(struct r8a66597_request, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
index 7cdcc9d16b8b..b0b264d34919 100644
--- a/drivers/usb/gadget/udc/renesas_usb3.c
+++ b/drivers/usb/gadget/udc/renesas_usb3.c
@@ -2265,7 +2265,7 @@ static struct usb_request *__renesas_usb3_ep_alloc_request(gfp_t gfp_flags)
 {
 	struct renesas_usb3_request *usb3_req;

-	usb3_req = kzalloc(sizeof(struct renesas_usb3_request), gfp_flags);
+	usb3_req = kzalloc_obj(struct renesas_usb3_request, gfp_flags);
 	if (!usb3_req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/renesas_usbf.c b/drivers/usb/gadget/udc/renesas_usbf.c
index 4c201574a0af..5d510665da1f 100644
--- a/drivers/usb/gadget/udc/renesas_usbf.c
+++ b/drivers/usb/gadget/udc/renesas_usbf.c
@@ -2081,7 +2081,7 @@ static struct usb_request *usbf_ep_alloc_request(struct usb_ep *_ep,
 	if (!_ep)
 		return NULL;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/snps_udc_core.c b/drivers/usb/gadget/udc/snps_udc_core.c
index 373942ceb076..5f9514623956 100644
--- a/drivers/usb/gadget/udc/snps_udc_core.c
+++ b/drivers/usb/gadget/udc/snps_udc_core.c
@@ -523,7 +523,7 @@ udc_alloc_request(struct usb_ep *usbep, gfp_t gfp)
 	ep = container_of(usbep, struct udc_ep, ep);

 	VDBG(ep->dev, "udc_alloc_req(): ep%d\n", ep->num);
-	req = kzalloc(sizeof(struct udc_request), gfp);
+	req = kzalloc_obj(struct udc_request, gfp);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/tegra-xudc.c b/drivers/usb/gadget/udc/tegra-xudc.c
index 7f7251c10e95..e9d33be02866 100644
--- a/drivers/usb/gadget/udc/tegra-xudc.c
+++ b/drivers/usb/gadget/udc/tegra-xudc.c
@@ -1906,7 +1906,7 @@ tegra_xudc_ep_alloc_request(struct usb_ep *usb_ep, gfp_t gfp)
 {
 	struct tegra_xudc_request *req;

-	req = kzalloc(sizeof(*req), gfp);
+	req = kzalloc_obj(*req, gfp);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/gadget/udc/udc-xilinx.c b/drivers/usb/gadget/udc/udc-xilinx.c
index 8d803a612bb1..bef06fe7543b 100644
--- a/drivers/usb/gadget/udc/udc-xilinx.c
+++ b/drivers/usb/gadget/udc/udc-xilinx.c
@@ -970,7 +970,7 @@ static struct usb_request *xudc_ep_alloc_request(struct usb_ep *_ep,
 	struct xusb_ep *ep = to_xusb_ep(_ep);
 	struct xusb_req *req;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c
index 435001128221..cc3f2da39d71 100644
--- a/drivers/usb/host/ehci-dbg.c
+++ b/drivers/usb/host/ehci-dbg.c
@@ -629,7 +629,7 @@ static ssize_t fill_periodic_buffer(struct debug_buffer *buf)
 	unsigned		i;
 	__hc32			tag;

-	seen = kmalloc_array(DBG_SCHED_LIMIT, sizeof(*seen), GFP_ATOMIC);
+	seen = kmalloc_objs(*seen, DBG_SCHED_LIMIT, GFP_ATOMIC);
 	if (!seen)
 		return 0;
 	seen_count = 0;
@@ -917,7 +917,7 @@ static struct debug_buffer *alloc_buffer(struct usb_bus *bus,
 {
 	struct debug_buffer *buf;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);

 	if (buf) {
 		buf->bus = bus;
diff --git a/drivers/usb/host/ehci-mem.c b/drivers/usb/host/ehci-mem.c
index 4c6c08b675b5..a2d4499e67e0 100644
--- a/drivers/usb/host/ehci-mem.c
+++ b/drivers/usb/host/ehci-mem.c
@@ -69,7 +69,7 @@ static struct ehci_qh *ehci_qh_alloc (struct ehci_hcd *ehci, gfp_t flags)
 	struct ehci_qh		*qh;
 	dma_addr_t		dma;

-	qh = kzalloc(sizeof *qh, GFP_ATOMIC);
+	qh = kzalloc_obj(*qh, GFP_ATOMIC);
 	if (!qh)
 		goto done;
 	qh->hw = (struct ehci_qh_hw *)
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
index 7e834587e7de..a241337c9af8 100644
--- a/drivers/usb/host/ehci-sched.c
+++ b/drivers/usb/host/ehci-sched.c
@@ -117,9 +117,8 @@ static struct ehci_tt *find_tt(struct usb_device *udev)
 	if (utt->multi) {
 		tt_index = utt->hcpriv;
 		if (!tt_index) {		/* Create the index array */
-			tt_index = kcalloc(utt->hub->maxchild,
-					   sizeof(*tt_index),
-					   GFP_ATOMIC);
+			tt_index = kzalloc_objs(*tt_index, utt->hub->maxchild,
+						GFP_ATOMIC);
 			if (!tt_index)
 				return ERR_PTR(-ENOMEM);
 			utt->hcpriv = tt_index;
@@ -137,7 +136,7 @@ static struct ehci_tt *find_tt(struct usb_device *udev)
 		struct ehci_hcd		*ehci =
 				hcd_to_ehci(bus_to_hcd(udev->bus));

-		tt = kzalloc(sizeof(*tt), GFP_ATOMIC);
+		tt = kzalloc_obj(*tt, GFP_ATOMIC);
 		if (!tt) {
 			if (allocated_index) {
 				utt->hcpriv = NULL;
@@ -1003,7 +1002,7 @@ iso_stream_alloc(gfp_t mem_flags)
 {
 	struct ehci_iso_stream *stream;

-	stream = kzalloc(sizeof(*stream), mem_flags);
+	stream = kzalloc_obj(*stream, mem_flags);
 	if (likely(stream != NULL)) {
 		INIT_LIST_HEAD(&stream->td_list);
 		INIT_LIST_HEAD(&stream->free_list);
@@ -1167,7 +1166,7 @@ iso_sched_alloc(unsigned packets, gfp_t mem_flags)
 {
 	struct ehci_iso_sched	*iso_sched;

-	iso_sched = kzalloc(struct_size(iso_sched, packet, packets), mem_flags);
+	iso_sched = kzalloc_flex(*iso_sched, packet, packets, mem_flags);
 	if (likely(iso_sched != NULL))
 		INIT_LIST_HEAD(&iso_sched->td_list);

diff --git a/drivers/usb/host/fhci-hcd.c b/drivers/usb/host/fhci-hcd.c
index 22a0942f0bce..445847b92f33 100644
--- a/drivers/usb/host/fhci-hcd.c
+++ b/drivers/usb/host/fhci-hcd.c
@@ -193,7 +193,7 @@ static int fhci_mem_init(struct fhci_hcd *fhci)
 {
 	int i;

-	fhci->hc_list = kzalloc(sizeof(*fhci->hc_list), GFP_KERNEL);
+	fhci->hc_list = kzalloc_obj(*fhci->hc_list, GFP_KERNEL);
 	if (!fhci->hc_list)
 		goto err;

@@ -203,7 +203,7 @@ static int fhci_mem_init(struct fhci_hcd *fhci)
 	INIT_LIST_HEAD(&fhci->hc_list->intr_list);
 	INIT_LIST_HEAD(&fhci->hc_list->done_list);

-	fhci->vroot_hub = kzalloc(sizeof(*fhci->vroot_hub), GFP_KERNEL);
+	fhci->vroot_hub = kzalloc_obj(*fhci->vroot_hub, GFP_KERNEL);
 	if (!fhci->vroot_hub)
 		goto err;

@@ -217,7 +217,7 @@ static int fhci_mem_init(struct fhci_hcd *fhci)
 	for (i = 0; i < MAX_TDS; i++) {
 		struct td *td;

-		td = kmalloc(sizeof(*td), GFP_KERNEL);
+		td = kmalloc_obj(*td, GFP_KERNEL);
 		if (!td)
 			goto err;
 		fhci_recycle_empty_td(fhci, td);
@@ -225,7 +225,7 @@ static int fhci_mem_init(struct fhci_hcd *fhci)
 	for (i = 0; i < MAX_EDS; i++) {
 		struct ed *ed;

-		ed = kmalloc(sizeof(*ed), GFP_KERNEL);
+		ed = kmalloc_obj(*ed, GFP_KERNEL);
 		if (!ed)
 			goto err;
 		fhci_recycle_empty_ed(fhci, ed);
@@ -264,7 +264,7 @@ static int fhci_usb_init(struct fhci_hcd *fhci)
 	usb->max_frame_usage = FRAME_TIME_USAGE;
 	usb->sw_transaction_time = SW_FIX_TIME_BETWEEN_TRANSACTION;

-	usb->actual_frame = kzalloc(sizeof(*usb->actual_frame), GFP_KERNEL);
+	usb->actual_frame = kzalloc_obj(*usb->actual_frame, GFP_KERNEL);
 	if (!usb->actual_frame) {
 		fhci_usb_free(usb);
 		return -ENOMEM;
@@ -306,7 +306,7 @@ static struct fhci_usb *fhci_create_lld(struct fhci_hcd *fhci)
 	struct fhci_usb *usb;

 	/* allocate memory for SCC data structure */
-	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
+	usb = kzalloc_obj(*usb, GFP_KERNEL);
 	if (!usb)
 		return NULL;

@@ -426,12 +426,12 @@ static int fhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
 	}

 	/* allocate the private part of the URB */
-	urb_priv = kzalloc(sizeof(*urb_priv), mem_flags);
+	urb_priv = kzalloc_obj(*urb_priv, mem_flags);
 	if (!urb_priv)
 		return -ENOMEM;

 	/* allocate the private part of the URB */
-	urb_priv->tds = kcalloc(size, sizeof(*urb_priv->tds), mem_flags);
+	urb_priv->tds = kzalloc_objs(*urb_priv->tds, size, mem_flags);
 	if (!urb_priv->tds) {
 		kfree(urb_priv);
 		return -ENOMEM;
diff --git a/drivers/usb/host/fhci-mem.c b/drivers/usb/host/fhci-mem.c
index 658aedc6adc1..d5951fc1964a 100644
--- a/drivers/usb/host/fhci-mem.c
+++ b/drivers/usb/host/fhci-mem.c
@@ -42,7 +42,7 @@ static struct td *get_empty_td(struct fhci_hcd *fhci)
 		td = list_entry(fhci->empty_tds.next, struct td, node);
 		list_del(fhci->empty_tds.next);
 	} else {
-		td = kmalloc(sizeof(*td), GFP_ATOMIC);
+		td = kmalloc_obj(*td, GFP_ATOMIC);
 		if (!td)
 			fhci_err(fhci, "No memory to allocate to TD\n");
 		else
@@ -66,7 +66,7 @@ struct ed *fhci_get_empty_ed(struct fhci_hcd *fhci)
 		ed = list_entry(fhci->empty_eds.next, struct ed, node);
 		list_del(fhci->empty_eds.next);
 	} else {
-		ed = kmalloc(sizeof(*ed), GFP_ATOMIC);
+		ed = kmalloc_obj(*ed, GFP_ATOMIC);
 		if (!ed)
 			fhci_err(fhci, "No memory to allocate to ED\n");
 		else
diff --git a/drivers/usb/host/fhci-tds.c b/drivers/usb/host/fhci-tds.c
index d98fd9e1af0b..6fb4feb4ad7b 100644
--- a/drivers/usb/host/fhci-tds.c
+++ b/drivers/usb/host/fhci-tds.c
@@ -161,7 +161,7 @@ u32 fhci_create_ep(struct fhci_usb *usb, enum fhci_mem_alloc data_mem,
 		return -EINVAL;
 	}

-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;

@@ -183,7 +183,7 @@ u32 fhci_create_ep(struct fhci_usb *usb, enum fhci_mem_alloc data_mem,
 		struct packet *pkt;
 		u8 *buff;

-		pkt = kmalloc(sizeof(*pkt), GFP_KERNEL);
+		pkt = kmalloc_obj(*pkt, GFP_KERNEL);
 		if (!pkt) {
 			err_for = "frame";
 			goto err;
diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c
index 71c22c4bd163..b5e9056895e4 100644
--- a/drivers/usb/host/isp116x-hcd.c
+++ b/drivers/usb/host/isp116x-hcd.c
@@ -703,7 +703,7 @@ static int isp116x_urb_enqueue(struct usb_hcd *hcd,
 	}
 	/* avoid all allocations within spinlocks: request or endpoint */
 	if (!hep->hcpriv) {
-		ep = kzalloc(sizeof *ep, mem_flags);
+		ep = kzalloc_obj(*ep, mem_flags);
 		if (!ep)
 			return -ENOMEM;
 	}
diff --git a/drivers/usb/host/max3421-hcd.c b/drivers/usb/host/max3421-hcd.c
index 4b5f03f683f7..82e231e05dc2 100644
--- a/drivers/usb/host/max3421-hcd.c
+++ b/drivers/usb/host/max3421-hcd.c
@@ -1523,7 +1523,7 @@ max3421_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags)
 	max3421_ep = urb->ep->hcpriv;
 	if (!max3421_ep) {
 		/* gets freed in max3421_endpoint_disable: */
-		max3421_ep = kzalloc(sizeof(struct max3421_ep), GFP_ATOMIC);
+		max3421_ep = kzalloc_obj(struct max3421_ep, GFP_ATOMIC);
 		if (!max3421_ep) {
 			retval = -ENOMEM;
 			goto out;
@@ -1878,10 +1878,10 @@ max3421_probe(struct spi_device *spi)
 	INIT_LIST_HEAD(&max3421_hcd->ep_list);
 	spi_set_drvdata(spi, max3421_hcd);

-	max3421_hcd->tx = kmalloc(sizeof(*max3421_hcd->tx), GFP_KERNEL);
+	max3421_hcd->tx = kmalloc_obj(*max3421_hcd->tx, GFP_KERNEL);
 	if (!max3421_hcd->tx)
 		goto error;
-	max3421_hcd->rx = kmalloc(sizeof(*max3421_hcd->rx), GFP_KERNEL);
+	max3421_hcd->rx = kmalloc_obj(*max3421_hcd->rx, GFP_KERNEL);
 	if (!max3421_hcd->rx)
 		goto error;

diff --git a/drivers/usb/host/octeon-hcd.c b/drivers/usb/host/octeon-hcd.c
index 361d33b0c4d2..34ce771fa0f5 100644
--- a/drivers/usb/host/octeon-hcd.c
+++ b/drivers/usb/host/octeon-hcd.c
@@ -1098,7 +1098,7 @@ static struct cvmx_usb_pipe *cvmx_usb_open_pipe(struct octeon_hcd *usb,
 {
 	struct cvmx_usb_pipe *pipe;

-	pipe = kzalloc(sizeof(*pipe), GFP_ATOMIC);
+	pipe = kzalloc_obj(*pipe, GFP_ATOMIC);
 	if (!pipe)
 		return NULL;
 	if ((device_speed == CVMX_USB_SPEED_HIGH) &&
@@ -2138,7 +2138,7 @@ static struct cvmx_usb_transaction *cvmx_usb_submit_transaction(
 	if (unlikely(pipe->transfer_type != type))
 		return NULL;

-	transaction = kzalloc(sizeof(*transaction), GFP_ATOMIC);
+	transaction = kzalloc_obj(*transaction, GFP_ATOMIC);
 	if (unlikely(!transaction))
 		return NULL;

@@ -3180,9 +3180,8 @@ static int octeon_usb_urb_enqueue(struct usb_hcd *hcd,
 		 * Allocate a structure to use for our private list of
 		 * isochronous packets.
 		 */
-		iso_packet = kmalloc_array(urb->number_of_packets,
-					   sizeof(struct cvmx_usb_iso_packet),
-					   GFP_ATOMIC);
+		iso_packet = kmalloc_objs(struct cvmx_usb_iso_packet,
+					  urb->number_of_packets, GFP_ATOMIC);
 		if (iso_packet) {
 			int i;
 			/* Fill the list with the data from the URB */
diff --git a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c
index 76bc8d56325d..30e22acd9461 100644
--- a/drivers/usb/host/ohci-dbg.c
+++ b/drivers/usb/host/ohci-dbg.c
@@ -492,7 +492,7 @@ static ssize_t fill_periodic_buffer(struct debug_buffer *buf)
 	char			*next;
 	unsigned		i;

-	seen = kmalloc_array(DBG_SCHED_LIMIT, sizeof(*seen), GFP_ATOMIC);
+	seen = kmalloc_objs(*seen, DBG_SCHED_LIMIT, GFP_ATOMIC);
 	if (!seen)
 		return 0;
 	seen_count = 0;
@@ -667,7 +667,7 @@ static struct debug_buffer *alloc_buffer(struct ohci_hcd *ohci,
 {
 	struct debug_buffer *buf;

-	buf = kzalloc(sizeof(struct debug_buffer), GFP_KERNEL);
+	buf = kzalloc_obj(struct debug_buffer, GFP_KERNEL);

 	if (buf) {
 		buf->ohci = ohci;
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index 30840922f729..129468b1efc2 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -190,7 +190,7 @@ static int ohci_urb_enqueue (
 	}

 	/* allocate the private part of the URB */
-	urb_priv = kzalloc(struct_size(urb_priv, td, size), mem_flags);
+	urb_priv = kzalloc_flex(*urb_priv, td, size, mem_flags);
 	if (!urb_priv)
 		return -ENOMEM;
 	INIT_LIST_HEAD (&urb_priv->pending);
diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c
index 6b7c73eff081..ca96067e6d6d 100644
--- a/drivers/usb/host/oxu210hp-hcd.c
+++ b/drivers/usb/host/oxu210hp-hcd.c
@@ -1149,7 +1149,7 @@ static int ehci_mem_init(struct oxu_hcd *oxu, gfp_t flags)
 	for (i = 0; i < QTD_NUM; i++)
 		oxu->qtd_used[i] = 0;

-	oxu->murb_pool = kcalloc(MURB_NUM, sizeof(struct oxu_murb), flags);
+	oxu->murb_pool = kzalloc_objs(struct oxu_murb, MURB_NUM, flags);
 	if (!oxu->murb_pool)
 		goto fail;

diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
index d21a03cf5c17..0a26489a40d0 100644
--- a/drivers/usb/host/r8a66597-hcd.c
+++ b/drivers/usb/host/r8a66597-hcd.c
@@ -337,7 +337,7 @@ static int make_r8a66597_device(struct r8a66597 *r8a66597,
 	struct r8a66597_device *dev;
 	int usb_address = urb->setup_packet[2];	/* urb->pipe is address 0 */

-	dev = kzalloc(sizeof(struct r8a66597_device), GFP_ATOMIC);
+	dev = kzalloc_obj(struct r8a66597_device, GFP_ATOMIC);
 	if (dev == NULL)
 		return -ENOMEM;

@@ -1859,7 +1859,7 @@ static struct r8a66597_td *r8a66597_make_td(struct r8a66597 *r8a66597,
 	struct r8a66597_td *td;
 	u16 pipenum;

-	td = kzalloc(sizeof(struct r8a66597_td), GFP_ATOMIC);
+	td = kzalloc_obj(struct r8a66597_td, GFP_ATOMIC);
 	if (td == NULL)
 		return NULL;

@@ -1901,8 +1901,7 @@ static int r8a66597_urb_enqueue(struct usb_hcd *hcd,
 		goto error_not_linked;

 	if (!hep->hcpriv) {
-		hep->hcpriv = kzalloc(sizeof(struct r8a66597_pipe),
-				GFP_ATOMIC);
+		hep->hcpriv = kzalloc_obj(struct r8a66597_pipe, GFP_ATOMIC);
 		if (!hep->hcpriv) {
 			ret = -ENOMEM;
 			goto error;
diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
index 5d6dba681e50..4ae47edd4b8b 100644
--- a/drivers/usb/host/sl811-hcd.c
+++ b/drivers/usb/host/sl811-hcd.c
@@ -814,7 +814,7 @@ static int sl811h_urb_enqueue(

 	/* avoid all allocations within spinlocks */
 	if (!hep->hcpriv) {
-		ep = kzalloc(sizeof *ep, mem_flags);
+		ep = kzalloc_obj(*ep, mem_flags);
 		if (ep == NULL)
 			return -ENOMEM;
 	}
diff --git a/drivers/usb/host/sl811_cs.c b/drivers/usb/host/sl811_cs.c
index 16d157013018..afdbcac3185c 100644
--- a/drivers/usb/host/sl811_cs.c
+++ b/drivers/usb/host/sl811_cs.c
@@ -178,7 +178,7 @@ static int sl811_cs_probe(struct pcmcia_device *link)
 {
 	local_info_t *local;

-	local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
+	local = kzalloc_obj(local_info_t, GFP_KERNEL);
 	if (!local)
 		return -ENOMEM;
 	local->p_dev = link;
diff --git a/drivers/usb/host/uhci-debug.c b/drivers/usb/host/uhci-debug.c
index c4e67c4b51f6..675107e9bae0 100644
--- a/drivers/usb/host/uhci-debug.c
+++ b/drivers/usb/host/uhci-debug.c
@@ -561,7 +561,7 @@ static int uhci_debug_open(struct inode *inode, struct file *file)
 	struct uhci_debug *up;
 	unsigned long flags;

-	up = kmalloc(sizeof(*up), GFP_KERNEL);
+	up = kmalloc_obj(*up, GFP_KERNEL);
 	if (!up)
 		return -ENOMEM;

diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
index 8bb11109b66c..027c3798a581 100644
--- a/drivers/usb/host/uhci-hcd.c
+++ b/drivers/usb/host/uhci-hcd.c
@@ -603,8 +603,8 @@ static int uhci_start(struct usb_hcd *hcd)
 		goto err_alloc_frame;
 	}

-	uhci->frame_cpu = kcalloc(UHCI_NUMFRAMES, sizeof(*uhci->frame_cpu),
-			GFP_KERNEL);
+	uhci->frame_cpu = kzalloc_objs(*uhci->frame_cpu, UHCI_NUMFRAMES,
+				       GFP_KERNEL);
 	if (!uhci->frame_cpu)
 		goto err_alloc_frame_cpu;

diff --git a/drivers/usb/host/xhci-dbgcap.c b/drivers/usb/host/xhci-dbgcap.c
index 9fd497e0dc7f..31995b12598f 100644
--- a/drivers/usb/host/xhci-dbgcap.c
+++ b/drivers/usb/host/xhci-dbgcap.c
@@ -238,7 +238,7 @@ dbc_alloc_request(struct xhci_dbc *dbc, unsigned int direction, gfp_t flags)
 	if (!dbc)
 		return NULL;

-	req = kzalloc(sizeof(*req), flags);
+	req = kzalloc_obj(*req, flags);
 	if (!req)
 		return NULL;

@@ -446,7 +446,7 @@ dbc_alloc_ctx(struct device *dev, gfp_t flags)
 {
 	struct xhci_container_ctx *ctx;

-	ctx = kzalloc(sizeof(*ctx), flags);
+	ctx = kzalloc_obj(*ctx, flags);
 	if (!ctx)
 		return NULL;

@@ -503,14 +503,14 @@ xhci_dbc_ring_alloc(struct device *dev, enum xhci_ring_type type, gfp_t flags)
 	struct xhci_segment *seg;
 	dma_addr_t dma;

-	ring = kzalloc(sizeof(*ring), flags);
+	ring = kzalloc_obj(*ring, flags);
 	if (!ring)
 		return NULL;

 	ring->num_segs = 1;
 	ring->type = type;

-	seg = kzalloc(sizeof(*seg), flags);
+	seg = kzalloc_obj(*seg, flags);
 	if (!seg)
 		goto seg_fail;

@@ -1425,7 +1425,7 @@ xhci_alloc_dbc(struct device *dev, void __iomem *base, const struct dbc_driver *
 	struct xhci_dbc		*dbc;
 	int			ret;

-	dbc = kzalloc(sizeof(*dbc), GFP_KERNEL);
+	dbc = kzalloc_obj(*dbc, GFP_KERNEL);
 	if (!dbc)
 		return NULL;

diff --git a/drivers/usb/host/xhci-dbgtty.c b/drivers/usb/host/xhci-dbgtty.c
index 90282e51e23e..a058277b5ff9 100644
--- a/drivers/usb/host/xhci-dbgtty.c
+++ b/drivers/usb/host/xhci-dbgtty.c
@@ -584,7 +584,7 @@ int xhci_dbc_tty_probe(struct device *dev, void __iomem *base, struct xhci_hcd *
 	if (!dbc_tty_driver)
 		return -ENODEV;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/drivers/usb/host/xhci-debugfs.c b/drivers/usb/host/xhci-debugfs.c
index c1eb1036ede9..296ff14d4e9a 100644
--- a/drivers/usb/host/xhci-debugfs.c
+++ b/drivers/usb/host/xhci-debugfs.c
@@ -87,7 +87,7 @@ static struct xhci_regset *xhci_debugfs_alloc_regset(struct xhci_hcd *xhci)
 {
 	struct xhci_regset	*regset;

-	regset = kzalloc(sizeof(*regset), GFP_KERNEL);
+	regset = kzalloc_obj(*regset, GFP_KERNEL);
 	if (!regset)
 		return NULL;

@@ -468,7 +468,7 @@ void xhci_debugfs_create_endpoint(struct xhci_hcd *xhci,
 	if (spriv->eps[ep_index])
 		return;

-	epriv = kzalloc(sizeof(*epriv), GFP_KERNEL);
+	epriv = kzalloc_obj(*epriv, GFP_KERNEL);
 	if (!epriv)
 		return;

@@ -608,7 +608,7 @@ void xhci_debugfs_create_slot(struct xhci_hcd *xhci, int slot_id)
 	struct xhci_slot_priv	*priv;
 	struct xhci_virt_device	*dev = xhci->devs[slot_id];

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return;

diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index c708bdd69f16..75bc1eb98b76 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -977,7 +977,7 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id,
 		return 0;
 	}

-	dev = kzalloc(sizeof(*dev), flags);
+	dev = kzalloc_obj(*dev, flags);
 	if (!dev)
 		return 0;

diff --git a/drivers/usb/host/xhci-mtk-sch.c b/drivers/usb/host/xhci-mtk-sch.c
index 27eb384a3963..ef255b968ab6 100644
--- a/drivers/usb/host/xhci-mtk-sch.c
+++ b/drivers/usb/host/xhci-mtk-sch.c
@@ -179,8 +179,8 @@ static struct mu3h_sch_tt *find_tt(struct usb_device *udev)
 	if (utt->multi) {
 		tt_index = utt->hcpriv;
 		if (!tt_index) {	/* Create the index array */
-			tt_index = kcalloc(utt->hub->maxchild,
-					sizeof(*tt_index), GFP_KERNEL);
+			tt_index = kzalloc_objs(*tt_index, utt->hub->maxchild,
+						GFP_KERNEL);
 			if (!tt_index)
 				return ERR_PTR(-ENOMEM);
 			utt->hcpriv = tt_index;
@@ -193,7 +193,7 @@ static struct mu3h_sch_tt *find_tt(struct usb_device *udev)

 	tt = *ptt;
 	if (!tt) {	/* Create the mu3h_sch_tt */
-		tt = kzalloc(sizeof(*tt), GFP_KERNEL);
+		tt = kzalloc_obj(*tt, GFP_KERNEL);
 		if (!tt) {
 			if (allocated_index) {
 				utt->hcpriv = NULL;
@@ -264,7 +264,7 @@ create_sch_ep(struct xhci_hcd_mtk *mtk, struct usb_device *udev,
 	else
 		len = 1;

-	sch_ep = kzalloc(struct_size(sch_ep, bw_budget_table, len), GFP_KERNEL);
+	sch_ep = kzalloc_flex(*sch_ep, bw_budget_table, len, GFP_KERNEL);
 	if (!sch_ep)
 		return ERR_PTR(-ENOMEM);

@@ -891,7 +891,7 @@ int xhci_mtk_sch_init(struct xhci_hcd_mtk *mtk)
 	/* ss IN and OUT are separated */
 	num_usb_bus = xhci->usb3_rhub.num_ports * 2 + xhci->usb2_rhub.num_ports;

-	sch_array = kcalloc(num_usb_bus, sizeof(*sch_array), GFP_KERNEL);
+	sch_array = kzalloc_objs(*sch_array, num_usb_bus, GFP_KERNEL);
 	if (sch_array == NULL)
 		return -ENOMEM;

diff --git a/drivers/usb/host/xhci-sideband.c b/drivers/usb/host/xhci-sideband.c
index 2bd77255032b..3ebe22755693 100644
--- a/drivers/usb/host/xhci-sideband.c
+++ b/drivers/usb/host/xhci-sideband.c
@@ -28,11 +28,11 @@ xhci_ring_to_sgtable(struct xhci_sideband *sb, struct xhci_ring *ring)
 	dev = xhci_to_hcd(sb->xhci)->self.sysdev;
 	sz = ring->num_segs * TRB_SEGMENT_SIZE;
 	n_pages = PAGE_ALIGN(sz) >> PAGE_SHIFT;
-	pages = kvmalloc_array(n_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kvmalloc_objs(struct page *, n_pages, GFP_KERNEL);
 	if (!pages)
 		return NULL;

-	sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kzalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		kvfree(pages);
 		return NULL;
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index b3ba16b9718c..c36ab323d68e 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -1641,7 +1641,7 @@ static int xhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flag
 	else
 		num_tds = 1;

-	urb_priv = kzalloc(struct_size(urb_priv, td, num_tds), mem_flags);
+	urb_priv = kzalloc_flex(*urb_priv, td, num_tds, mem_flags);
 	if (!urb_priv)
 		return -ENOMEM;

diff --git a/drivers/usb/image/mdc800.c b/drivers/usb/image/mdc800.c
index 7b7e1554ea20..9cb74eb91b07 100644
--- a/drivers/usb/image/mdc800.c
+++ b/drivers/usb/image/mdc800.c
@@ -982,7 +982,7 @@ static int __init usb_mdc800_init (void)
 {
 	int retval = -ENODEV;
 	/* Allocate Memory */
-	mdc800=kzalloc (sizeof (struct mdc800_data), GFP_KERNEL);
+	mdc800=kzalloc_obj(struct mdc800_data, GFP_KERNEL);
 	if (!mdc800)
 		goto cleanup_on_fail;

diff --git a/drivers/usb/image/microtek.c b/drivers/usb/image/microtek.c
index 82859374f302..20b0b3736322 100644
--- a/drivers/usb/image/microtek.c
+++ b/drivers/usb/image/microtek.c
@@ -723,7 +723,7 @@ static int mts_usb_probe(struct usb_interface *intf,
 	}


-	new_desc = kzalloc(sizeof(struct mts_desc), GFP_KERNEL);
+	new_desc = kzalloc_obj(struct mts_desc, GFP_KERNEL);
 	if (!new_desc)
 		goto out;

diff --git a/drivers/usb/isp1760/isp1760-hcd.c b/drivers/usb/isp1760/isp1760-hcd.c
index 8dcd9cc22413..fbb83c84beee 100644
--- a/drivers/usb/isp1760/isp1760-hcd.c
+++ b/drivers/usb/isp1760/isp1760-hcd.c
@@ -2572,15 +2572,15 @@ int isp1760_hcd_register(struct isp1760_hcd *priv, struct resource *mem,

 	priv->hcd = hcd;

-	priv->atl_slots = kcalloc(mem_layout->slot_num,
-				  sizeof(struct isp1760_slotinfo), GFP_KERNEL);
+	priv->atl_slots = kzalloc_objs(struct isp1760_slotinfo,
+				       mem_layout->slot_num, GFP_KERNEL);
 	if (!priv->atl_slots) {
 		ret = -ENOMEM;
 		goto put_hcd;
 	}

-	priv->int_slots = kcalloc(mem_layout->slot_num,
-				  sizeof(struct isp1760_slotinfo), GFP_KERNEL);
+	priv->int_slots = kzalloc_objs(struct isp1760_slotinfo,
+				       mem_layout->slot_num, GFP_KERNEL);
 	if (!priv->int_slots) {
 		ret = -ENOMEM;
 		goto free_atl_slots;
diff --git a/drivers/usb/isp1760/isp1760-udc.c b/drivers/usb/isp1760/isp1760-udc.c
index 65ac91d0595a..e45a54c4a560 100644
--- a/drivers/usb/isp1760/isp1760-udc.c
+++ b/drivers/usb/isp1760/isp1760-udc.c
@@ -878,7 +878,7 @@ static struct usb_request *isp1760_ep_alloc_request(struct usb_ep *ep,
 {
 	struct isp1760_request *req;

-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (!req)
 		return NULL;

diff --git a/drivers/usb/misc/adutux.c b/drivers/usb/misc/adutux.c
index ed6a19254d2f..2c311dc92ab9 100644
--- a/drivers/usb/misc/adutux.c
+++ b/drivers/usb/misc/adutux.c
@@ -657,7 +657,7 @@ static int adu_probe(struct usb_interface *interface,
 	int res;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(struct adu_device), GFP_KERNEL);
+	dev = kzalloc_obj(struct adu_device, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/usb/misc/apple-mfi-fastcharge.c b/drivers/usb/misc/apple-mfi-fastcharge.c
index 47b38dcc2992..8cf08fbda163 100644
--- a/drivers/usb/misc/apple-mfi-fastcharge.c
+++ b/drivers/usb/misc/apple-mfi-fastcharge.c
@@ -184,7 +184,7 @@ static int mfi_fc_probe(struct usb_device *udev)
 	if (!mfi_fc_match(udev))
 		return -ENODEV;

-	mfi = kzalloc(sizeof(struct mfi_device), GFP_KERNEL);
+	mfi = kzalloc_obj(struct mfi_device, GFP_KERNEL);
 	if (!mfi)
 		return -ENOMEM;

diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c
index 62b5a30edc42..e9b26cf7bcfc 100644
--- a/drivers/usb/misc/appledisplay.c
+++ b/drivers/usb/misc/appledisplay.c
@@ -226,7 +226,7 @@ static int appledisplay_probe(struct usb_interface *iface,
 	int_in_endpointAddr = endpoint->bEndpointAddress;

 	/* allocate memory for our device state and initialize it */
-	pdata = kzalloc(sizeof(struct appledisplay), GFP_KERNEL);
+	pdata = kzalloc_obj(struct appledisplay, GFP_KERNEL);
 	if (!pdata) {
 		retval = -ENOMEM;
 		goto error;
diff --git a/drivers/usb/misc/chaoskey.c b/drivers/usb/misc/chaoskey.c
index 45cff32656c6..039e2b1bba00 100644
--- a/drivers/usb/misc/chaoskey.c
+++ b/drivers/usb/misc/chaoskey.c
@@ -143,7 +143,7 @@ static int chaoskey_probe(struct usb_interface *interface,

 	/* Looks good, allocate and initialize */

-	dev = kzalloc(sizeof(struct chaoskey), GFP_KERNEL);
+	dev = kzalloc_obj(struct chaoskey, GFP_KERNEL);

 	if (dev == NULL)
 		goto out;
diff --git a/drivers/usb/misc/cypress_cy7c63.c b/drivers/usb/misc/cypress_cy7c63.c
index 75f5a740cba3..ace0ec94506c 100644
--- a/drivers/usb/misc/cypress_cy7c63.c
+++ b/drivers/usb/misc/cypress_cy7c63.c
@@ -211,7 +211,7 @@ static int cypress_probe(struct usb_interface *interface,
 	int retval = -ENOMEM;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto error_mem;

diff --git a/drivers/usb/misc/cytherm.c b/drivers/usb/misc/cytherm.c
index 875016dd073c..6af966118792 100644
--- a/drivers/usb/misc/cytherm.c
+++ b/drivers/usb/misc/cytherm.c
@@ -307,7 +307,7 @@ static int cytherm_probe(struct usb_interface *interface,
 	struct usb_cytherm *dev;
 	int retval = -ENOMEM;

-	dev = kzalloc(sizeof(struct usb_cytherm), GFP_KERNEL);
+	dev = kzalloc_obj(struct usb_cytherm, GFP_KERNEL);
 	if (!dev)
 		goto error_mem;

diff --git a/drivers/usb/misc/idmouse.c b/drivers/usb/misc/idmouse.c
index ea39243efee3..1f649eedfa68 100644
--- a/drivers/usb/misc/idmouse.c
+++ b/drivers/usb/misc/idmouse.c
@@ -330,7 +330,7 @@ static int idmouse_probe(struct usb_interface *interface,
 		return -ENODEV;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL)
 		return -ENOMEM;

diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c
index 365c10069345..5f882cb6ff07 100644
--- a/drivers/usb/misc/iowarrior.c
+++ b/drivers/usb/misc/iowarrior.c
@@ -777,7 +777,7 @@ static int iowarrior_probe(struct usb_interface *interface,
 	int res;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(struct iowarrior), GFP_KERNEL);
+	dev = kzalloc_obj(struct iowarrior, GFP_KERNEL);
 	if (!dev)
 		return retval;

diff --git a/drivers/usb/misc/ldusb.c b/drivers/usb/misc/ldusb.c
index f392d6f84df9..cb7125a5b27f 100644
--- a/drivers/usb/misc/ldusb.c
+++ b/drivers/usb/misc/ldusb.c
@@ -656,7 +656,7 @@ static int ld_usb_probe(struct usb_interface *intf, const struct usb_device_id *

 	/* allocate memory for our device state and initialize it */

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto exit;
 	mutex_init(&dev->mutex);
diff --git a/drivers/usb/misc/legousbtower.c b/drivers/usb/misc/legousbtower.c
index 379cf01a6e96..a2909dee0d2a 100644
--- a/drivers/usb/misc/legousbtower.c
+++ b/drivers/usb/misc/legousbtower.c
@@ -748,7 +748,7 @@ static int tower_probe(struct usb_interface *interface, const struct usb_device_
 	int result;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto exit;

diff --git a/drivers/usb/misc/lvstest.c b/drivers/usb/misc/lvstest.c
index 25ec5666a75e..52d84e2d8193 100644
--- a/drivers/usb/misc/lvstest.c
+++ b/drivers/usb/misc/lvstest.c
@@ -260,7 +260,7 @@ static ssize_t get_dev_desc_store(struct device *dev,
 	struct usb_device_descriptor *descriptor;
 	int ret;

-	descriptor = kmalloc(sizeof(*descriptor), GFP_KERNEL);
+	descriptor = kmalloc_obj(*descriptor, GFP_KERNEL);
 	if (!descriptor)
 		return -ENOMEM;

diff --git a/drivers/usb/misc/onboard_usb_dev.c b/drivers/usb/misc/onboard_usb_dev.c
index 41360a7591e5..40572d7192f6 100644
--- a/drivers/usb/misc/onboard_usb_dev.c
+++ b/drivers/usb/misc/onboard_usb_dev.c
@@ -202,7 +202,7 @@ static int onboard_dev_add_usbdev(struct onboard_dev *onboard_dev,
 		goto error;
 	}

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node) {
 		err = -ENOMEM;
 		goto error;
diff --git a/drivers/usb/misc/onboard_usb_dev_pdevs.c b/drivers/usb/misc/onboard_usb_dev_pdevs.c
index 722504752ce3..2550108bf73c 100644
--- a/drivers/usb/misc/onboard_usb_dev_pdevs.c
+++ b/drivers/usb/misc/onboard_usb_dev_pdevs.c
@@ -109,7 +109,7 @@ void onboard_dev_create_pdevs(struct usb_device *parent_hub, struct list_head *p
 			goto node_put;
 		}

-		pdle = kzalloc(sizeof(*pdle), GFP_KERNEL);
+		pdle = kzalloc_obj(*pdle, GFP_KERNEL);
 		if (!pdle) {
 			of_platform_device_destroy(&pdev->dev, NULL);
 			goto node_put;
diff --git a/drivers/usb/misc/sisusbvga/sisusbvga.c b/drivers/usb/misc/sisusbvga/sisusbvga.c
index febf34f9f049..be7e7abc47c6 100644
--- a/drivers/usb/misc/sisusbvga/sisusbvga.c
+++ b/drivers/usb/misc/sisusbvga/sisusbvga.c
@@ -2797,7 +2797,7 @@ static int sisusb_probe(struct usb_interface *intf,
 			dev->devnum);

 	/* Allocate memory for our private */
-	sisusb = kzalloc(sizeof(*sisusb), GFP_KERNEL);
+	sisusb = kzalloc_obj(*sisusb, GFP_KERNEL);
 	if (!sisusb)
 		return -ENOMEM;

diff --git a/drivers/usb/misc/trancevibrator.c b/drivers/usb/misc/trancevibrator.c
index 26baba3ab7d7..a43f2ef30433 100644
--- a/drivers/usb/misc/trancevibrator.c
+++ b/drivers/usb/misc/trancevibrator.c
@@ -86,7 +86,7 @@ static int tv_probe(struct usb_interface *interface,
 	struct trancevibrator *dev;
 	int retval;

-	dev = kzalloc(sizeof(struct trancevibrator), GFP_KERNEL);
+	dev = kzalloc_obj(struct trancevibrator, GFP_KERNEL);
 	if (!dev) {
 		retval = -ENOMEM;
 		goto error;
diff --git a/drivers/usb/misc/usb-ljca.c b/drivers/usb/misc/usb-ljca.c
index 9e65bb9577ea..a959dd824f0e 100644
--- a/drivers/usb/misc/usb-ljca.c
+++ b/drivers/usb/misc/usb-ljca.c
@@ -529,7 +529,7 @@ static int ljca_new_client_device(struct ljca_adapter *adap, u8 type, u8 id,
 	struct ljca_client *client;
 	int ret;

-	client = kzalloc(sizeof *client, GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client) {
 		kfree(data);
 		return -ENOMEM;
@@ -597,7 +597,7 @@ static int ljca_enumerate_gpio(struct ljca_adapter *adap)
 		return -EINVAL;

 	/* construct platform data */
-	gpio_info = kzalloc(sizeof *gpio_info, GFP_KERNEL);
+	gpio_info = kzalloc_obj(*gpio_info, GFP_KERNEL);
 	if (!gpio_info)
 		return -ENOMEM;
 	gpio_info->num = gpio_num;
@@ -630,7 +630,7 @@ static int ljca_enumerate_i2c(struct ljca_adapter *adap)

 	for (i = 0; i < desc->num; i++) {
 		/* construct platform data */
-		i2c_info = kzalloc(sizeof *i2c_info, GFP_KERNEL);
+		i2c_info = kzalloc_obj(*i2c_info, GFP_KERNEL);
 		if (!i2c_info)
 			return -ENOMEM;

@@ -669,7 +669,7 @@ static int ljca_enumerate_spi(struct ljca_adapter *adap)

 	for (i = 0; i < desc->num; i++) {
 		/* construct platform data */
-		spi_info = kzalloc(sizeof *spi_info, GFP_KERNEL);
+		spi_info = kzalloc_obj(*spi_info, GFP_KERNEL);
 		if (!spi_info)
 			return -ENOMEM;

diff --git a/drivers/usb/misc/usbio.c b/drivers/usb/misc/usbio.c
index 37644dddf157..50ff9f1ca78f 100644
--- a/drivers/usb/misc/usbio.c
+++ b/drivers/usb/misc/usbio.c
@@ -439,7 +439,7 @@ static int usbio_add_client(struct usbio_device *usbio, char *name, u8 id, void
 	struct auxiliary_device *adev;
 	int ret;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

diff --git a/drivers/usb/misc/usblcd.c b/drivers/usb/misc/usblcd.c
index bb546f624a45..be798a293904 100644
--- a/drivers/usb/misc/usblcd.c
+++ b/drivers/usb/misc/usblcd.c
@@ -323,7 +323,7 @@ static int lcd_probe(struct usb_interface *interface,
 	int retval;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/usb/misc/usbsevseg.c b/drivers/usb/misc/usbsevseg.c
index 546deff754ba..97fcb35513ce 100644
--- a/drivers/usb/misc/usbsevseg.c
+++ b/drivers/usb/misc/usbsevseg.c
@@ -308,7 +308,7 @@ static int sevseg_probe(struct usb_interface *interface,
 	struct usb_sevsegdev *mydev;
 	int rc = -ENOMEM;

-	mydev = kzalloc(sizeof(struct usb_sevsegdev), GFP_KERNEL);
+	mydev = kzalloc_obj(struct usb_sevsegdev, GFP_KERNEL);
 	if (!mydev)
 		goto error_mem;

diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index 5c92c8d8e283..689cf82ce47d 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -545,7 +545,7 @@ alloc_sglist(int nents, int max, int vary, struct usbtest_dev *dev, int pipe)
 	if (max == 0)
 		return NULL;

-	sg = kmalloc_array(nents, sizeof(*sg), GFP_KERNEL);
+	sg = kmalloc_objs(*sg, nents, GFP_KERNEL);
 	if (!sg)
 		return NULL;
 	sg_init_table(sg, nents);
@@ -1221,7 +1221,7 @@ test_ctrl_queue(struct usbtest_dev *dev, struct usbtest_param_32 *param)
 	 * as with bulk/intr sglists, sglen is the queue depth; it also
 	 * controls which subtests run (more tests than sglen) or rerun.
 	 */
-	urb = kcalloc(param->sglen, sizeof(struct urb *), GFP_KERNEL);
+	urb = kzalloc_objs(struct urb *, param->sglen, GFP_KERNEL);
 	if (!urb)
 		return -ENOMEM;
 	for (i = 0; i < param->sglen; i++) {
@@ -1370,7 +1370,7 @@ test_ctrl_queue(struct usbtest_dev *dev, struct usbtest_param_32 *param)
 		if (!u)
 			goto cleanup;

-		reqp = kmalloc(sizeof(*reqp), GFP_KERNEL);
+		reqp = kmalloc_obj(*reqp, GFP_KERNEL);
 		if (!reqp)
 			goto cleanup;
 		reqp->setup = req;
@@ -1572,7 +1572,7 @@ static int unlink_queued(struct usbtest_dev *dev, int pipe, unsigned num,
 	memset(buf, 0, size);

 	/* Allocate and init the urbs we'll queue */
-	ctx.urbs = kcalloc(num, sizeof(struct urb *), GFP_KERNEL);
+	ctx.urbs = kzalloc_objs(struct urb *, num, GFP_KERNEL);
 	if (!ctx.urbs)
 		goto free_buf;
 	for (i = 0; i < num; i++) {
@@ -2052,7 +2052,7 @@ test_queue(struct usbtest_dev *dev, struct usbtest_param_32 *param,
 	if (param->sglen > MAX_SGLEN)
 		return -EINVAL;

-	urbs = kcalloc(param->sglen, sizeof(*urbs), GFP_KERNEL);
+	urbs = kzalloc_objs(*urbs, param->sglen, GFP_KERNEL);
 	if (!urbs)
 		return -ENOMEM;

@@ -2786,7 +2786,7 @@ usbtest_probe(struct usb_interface *intf, const struct usb_device_id *id)
 	}
 #endif

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	info = (struct usbtest_info *) id->driver_info;
diff --git a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c
index b26c1d382d59..46356d099d26 100644
--- a/drivers/usb/misc/uss720.c
+++ b/drivers/usb/misc/uss720.c
@@ -134,7 +134,7 @@ static struct uss720_async_request *submit_async_request(struct parport_uss720_p
 	usbdev = priv->usbdev;
 	if (!usbdev)
 		return NULL;
-	rq = kzalloc(sizeof(struct uss720_async_request), mem_flags);
+	rq = kzalloc_obj(struct uss720_async_request, mem_flags);
 	if (!rq)
 		return NULL;
 	kref_init(&rq->ref_count);
@@ -147,7 +147,7 @@ static struct uss720_async_request *submit_async_request(struct parport_uss720_p
 		kref_put(&rq->ref_count, destroy_async);
 		return NULL;
 	}
-	rq->dr = kmalloc(sizeof(*rq->dr), mem_flags);
+	rq->dr = kmalloc_obj(*rq->dr, mem_flags);
 	if (!rq->dr) {
 		kref_put(&rq->ref_count, destroy_async);
 		return NULL;
@@ -701,7 +701,7 @@ static int uss720_probe(struct usb_interface *intf,
 	/*
 	 * Allocate parport interface
 	 */
-	priv = kzalloc(sizeof(struct parport_uss720_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct parport_uss720_private, GFP_KERNEL);
 	if (!priv) {
 		usb_put_dev(usbdev);
 		return -ENOMEM;
diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c
index 70dff0db5354..2e2057ef5b68 100644
--- a/drivers/usb/misc/yurex.c
+++ b/drivers/usb/misc/yurex.c
@@ -197,7 +197,7 @@ static int yurex_probe(struct usb_interface *interface, const struct usb_device_
 	int res;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto error;
 	kref_init(&dev->kref);
diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c
index e713fc5964b1..c0c4eb0a166d 100644
--- a/drivers/usb/mon/mon_bin.c
+++ b/drivers/usb/mon/mon_bin.c
@@ -694,7 +694,7 @@ static int mon_bin_open(struct inode *inode, struct file *file)
 		return -ENODEV;
 	}

-	rp = kzalloc(sizeof(struct mon_reader_bin), GFP_KERNEL);
+	rp = kzalloc_obj(struct mon_reader_bin, GFP_KERNEL);
 	if (rp == NULL) {
 		rc = -ENOMEM;
 		goto err_alloc;
@@ -1029,8 +1029,8 @@ static long mon_bin_ioctl(struct file *file, unsigned int cmd, unsigned long arg
 			return -EINVAL;

 		size = CHUNK_ALIGN(arg);
-		vec = kcalloc(size / CHUNK_SIZE, sizeof(struct mon_pgmap),
-			      GFP_KERNEL);
+		vec = kzalloc_objs(struct mon_pgmap, size / CHUNK_SIZE,
+				   GFP_KERNEL);
 		if (vec == NULL) {
 			ret = -ENOMEM;
 			break;
diff --git a/drivers/usb/mon/mon_main.c b/drivers/usb/mon/mon_main.c
index af852d53aac6..b3a68ac6fb98 100644
--- a/drivers/usb/mon/mon_main.c
+++ b/drivers/usb/mon/mon_main.c
@@ -273,7 +273,7 @@ static void mon_bus_init(struct usb_bus *ubus)
 {
 	struct mon_bus *mbus;

-	mbus = kzalloc(sizeof(struct mon_bus), GFP_KERNEL);
+	mbus = kzalloc_obj(struct mon_bus, GFP_KERNEL);
 	if (mbus == NULL)
 		goto err_alloc;
 	kref_init(&mbus->ref);
diff --git a/drivers/usb/mon/mon_stat.c b/drivers/usb/mon/mon_stat.c
index 398e02af6a2b..8329c1fc719e 100644
--- a/drivers/usb/mon/mon_stat.c
+++ b/drivers/usb/mon/mon_stat.c
@@ -29,7 +29,7 @@ static int mon_stat_open(struct inode *inode, struct file *file)
 	struct mon_bus *mbus;
 	struct snap *sp;

-	sp = kmalloc(sizeof(struct snap), GFP_KERNEL);
+	sp = kmalloc_obj(struct snap, GFP_KERNEL);
 	if (sp == NULL)
 		return -ENOMEM;

diff --git a/drivers/usb/mon/mon_text.c b/drivers/usb/mon/mon_text.c
index 68b9b2b41189..b55016068b47 100644
--- a/drivers/usb/mon/mon_text.c
+++ b/drivers/usb/mon/mon_text.c
@@ -330,7 +330,7 @@ static int mon_text_open(struct inode *inode, struct file *file)
 	mutex_lock(&mon_lock);
 	mbus = inode->i_private;

-	rp = kzalloc(sizeof(struct mon_reader_text), GFP_KERNEL);
+	rp = kzalloc_obj(struct mon_reader_text, GFP_KERNEL);
 	if (rp == NULL) {
 		rc = -ENOMEM;
 		goto err_alloc;
diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c
index 3a25ee18f144..9215373a9738 100644
--- a/drivers/usb/mtu3/mtu3_core.c
+++ b/drivers/usb/mtu3/mtu3_core.c
@@ -613,7 +613,7 @@ static int mtu3_mem_alloc(struct mtu3 *mtu)

 	/* one for ep0, another is reserved */
 	mtu->num_eps = min(in_ep_num, out_ep_num) + 1;
-	ep_array = kcalloc(mtu->num_eps * 2, sizeof(*ep_array), GFP_KERNEL);
+	ep_array = kzalloc_objs(*ep_array, mtu->num_eps * 2, GFP_KERNEL);
 	if (ep_array == NULL)
 		return -ENOMEM;

diff --git a/drivers/usb/mtu3/mtu3_gadget.c b/drivers/usb/mtu3/mtu3_gadget.c
index bf73fbc29976..da29f467943f 100644
--- a/drivers/usb/mtu3/mtu3_gadget.c
+++ b/drivers/usb/mtu3/mtu3_gadget.c
@@ -235,7 +235,7 @@ struct usb_request *mtu3_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
 	struct mtu3_ep *mep = to_mtu3_ep(ep);
 	struct mtu3_request *mreq;

-	mreq = kzalloc(sizeof(*mreq), gfp_flags);
+	mreq = kzalloc_obj(*mreq, gfp_flags);
 	if (!mreq)
 		return NULL;

diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c
index 4cde3abb7006..240953cdf46d 100644
--- a/drivers/usb/musb/musb_cppi41.c
+++ b/drivers/usb/musb/musb_cppi41.c
@@ -756,7 +756,7 @@ cppi41_dma_controller_create(struct musb *musb, void __iomem *base)
 		return NULL;
 	}

-	controller = kzalloc(sizeof(*controller), GFP_KERNEL);
+	controller = kzalloc_obj(*controller, GFP_KERNEL);
 	if (!controller)
 		goto kzalloc_fail;

diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index d666c4292753..016d3f3fc1e0 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -1133,7 +1133,7 @@ struct usb_request *musb_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
 	struct musb_ep		*musb_ep = to_musb_ep(ep);
 	struct musb_request	*request;

-	request = kzalloc(sizeof *request, gfp_flags);
+	request = kzalloc_obj(*request, gfp_flags);
 	if (!request)
 		return NULL;

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 6b4481a867c5..8efd2fa472f9 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -2154,7 +2154,7 @@ static int musb_urb_enqueue(
 	 * REVISIT consider a dedicated qh kmem_cache, so it's harder
 	 * for bugs in other kernel code to break this driver...
 	 */
-	qh = kzalloc(sizeof *qh, mem_flags);
+	qh = kzalloc_obj(*qh, mem_flags);
 	if (!qh) {
 		spin_lock_irqsave(&musb->lock, flags);
 		usb_hcd_unlink_urb_from_ep(hcd, urb);
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
index 7acd1635850d..9cd4616d853e 100644
--- a/drivers/usb/musb/musbhsdma.c
+++ b/drivers/usb/musb/musbhsdma.c
@@ -395,7 +395,7 @@ dma_controller_alloc(struct musb *musb, void __iomem *base)
 {
 	struct musb_dma_controller *controller;

-	controller = kzalloc(sizeof(*controller), GFP_KERNEL);
+	controller = kzalloc_obj(*controller, GFP_KERNEL);
 	if (!controller)
 		return NULL;

diff --git a/drivers/usb/musb/tusb6010_omap.c b/drivers/usb/musb/tusb6010_omap.c
index 60a93b8bbe3c..ed8fea4738cd 100644
--- a/drivers/usb/musb/tusb6010_omap.c
+++ b/drivers/usb/musb/tusb6010_omap.c
@@ -596,7 +596,7 @@ tusb_dma_controller_create(struct musb *musb, void __iomem *base)
 		| TUSB_DMA_REQ_CONF_DMA_REQ_EN(0x3f)
 		| TUSB_DMA_REQ_CONF_DMA_REQ_ASSER(2));

-	tusb_dma = kzalloc(sizeof(struct tusb_omap_dma), GFP_KERNEL);
+	tusb_dma = kzalloc_obj(struct tusb_omap_dma, GFP_KERNEL);
 	if (!tusb_dma)
 		goto out;

@@ -615,13 +615,13 @@ tusb_dma_controller_create(struct musb *musb, void __iomem *base)
 		struct dma_channel	*ch;
 		struct tusb_omap_dma_ch	*chdat;

-		ch = kzalloc(sizeof(struct dma_channel), GFP_KERNEL);
+		ch = kzalloc_obj(struct dma_channel, GFP_KERNEL);
 		if (!ch)
 			goto cleanup;

 		dma_channel_pool[i] = ch;

-		chdat = kzalloc(sizeof(struct tusb_omap_dma_ch), GFP_KERNEL);
+		chdat = kzalloc_obj(struct tusb_omap_dma_ch, GFP_KERNEL);
 		if (!chdat)
 			goto cleanup;

diff --git a/drivers/usb/musb/ux500_dma.c b/drivers/usb/musb/ux500_dma.c
index d5cf5e8bb1ca..0621a6c0c6b6 100644
--- a/drivers/usb/musb/ux500_dma.c
+++ b/drivers/usb/musb/ux500_dma.c
@@ -362,7 +362,7 @@ ux500_dma_controller_create(struct musb *musb, void __iomem *base)
 	struct resource	*iomem;
 	int ret;

-	controller = kzalloc(sizeof(*controller), GFP_KERNEL);
+	controller = kzalloc_obj(*controller, GFP_KERNEL);
 	if (!controller)
 		goto kzalloc_fail;

diff --git a/drivers/usb/phy/phy-fsl-usb.c b/drivers/usb/phy/phy-fsl-usb.c
index e266a47c4d48..f5712dddd1fd 100644
--- a/drivers/usb/phy/phy-fsl-usb.c
+++ b/drivers/usb/phy/phy-fsl-usb.c
@@ -779,11 +779,11 @@ static int fsl_otg_conf(struct platform_device *pdev)
 		return 0;

 	/* allocate space to fsl otg device */
-	fsl_otg_tc = kzalloc(sizeof(struct fsl_otg), GFP_KERNEL);
+	fsl_otg_tc = kzalloc_obj(struct fsl_otg, GFP_KERNEL);
 	if (!fsl_otg_tc)
 		return -ENOMEM;

-	fsl_otg_tc->phy.otg = kzalloc(sizeof(struct usb_otg), GFP_KERNEL);
+	fsl_otg_tc->phy.otg = kzalloc_obj(struct usb_otg, GFP_KERNEL);
 	if (!fsl_otg_tc->phy.otg) {
 		kfree(fsl_otg_tc);
 		return -ENOMEM;
diff --git a/drivers/usb/phy/phy-fsl-usb.h b/drivers/usb/phy/phy-fsl-usb.h
index d70341ae5a92..487a11ff4391 100644
--- a/drivers/usb/phy/phy-fsl-usb.h
+++ b/drivers/usb/phy/phy-fsl-usb.h
@@ -345,7 +345,7 @@ inline struct fsl_otg_timer *otg_timer_initializer
 {
 	struct fsl_otg_timer *timer;

-	timer = kmalloc(sizeof(struct fsl_otg_timer), GFP_KERNEL);
+	timer = kmalloc_obj(struct fsl_otg_timer, GFP_KERNEL);
 	if (!timer)
 		return NULL;
 	timer->function = function;
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c
index e8e5723f5412..ca96c0164593 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -325,7 +325,7 @@ static void __usbhsg_recip_send_status(struct usbhsg_gpriv *gpriv,
 	}

 	/* alloc recip data buffer */
-	buf = kmalloc(sizeof(*buf), GFP_ATOMIC);
+	buf = kmalloc_obj(*buf, GFP_ATOMIC);
 	if (!buf) {
 		usb_ep_free_request(&dcp->ep, req);
 		return;
@@ -661,7 +661,7 @@ static struct usb_request *usbhsg_ep_alloc_request(struct usb_ep *ep,
 {
 	struct usbhsg_request *ureq;

-	ureq = kzalloc(sizeof *ureq, gfp_flags);
+	ureq = kzalloc_obj(*ureq, gfp_flags);
 	if (!ureq)
 		return NULL;

@@ -1084,11 +1084,11 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
 	int i;
 	int ret;

-	gpriv = kzalloc(sizeof(struct usbhsg_gpriv), GFP_KERNEL);
+	gpriv = kzalloc_obj(struct usbhsg_gpriv, GFP_KERNEL);
 	if (!gpriv)
 		return -ENOMEM;

-	uep = kcalloc(pipe_size, sizeof(struct usbhsg_uep), GFP_KERNEL);
+	uep = kzalloc_objs(struct usbhsg_uep, pipe_size, GFP_KERNEL);
 	if (!uep) {
 		ret = -ENOMEM;
 		goto usbhs_mod_gadget_probe_err_gpriv;
diff --git a/drivers/usb/renesas_usbhs/mod_host.c b/drivers/usb/renesas_usbhs/mod_host.c
index ae54221011c3..f7ef3a9f82a4 100644
--- a/drivers/usb/renesas_usbhs/mod_host.c
+++ b/drivers/usb/renesas_usbhs/mod_host.c
@@ -158,7 +158,7 @@ static struct usbhsh_request *usbhsh_ureq_alloc(struct usbhsh_hpriv *hpriv,
 {
 	struct usbhsh_request *ureq;

-	ureq = kzalloc(sizeof(struct usbhsh_request), mem_flags);
+	ureq = kzalloc_obj(struct usbhsh_request, mem_flags);
 	if (!ureq)
 		return NULL;

@@ -374,7 +374,7 @@ static int usbhsh_endpoint_attach(struct usbhsh_hpriv *hpriv,
 	struct usb_endpoint_descriptor *desc = &ep->desc;
 	unsigned long flags;

-	uep = kzalloc(sizeof(struct usbhsh_ep), mem_flags);
+	uep = kzalloc_obj(struct usbhsh_ep, mem_flags);
 	if (!uep)
 		return -ENOMEM;

diff --git a/drivers/usb/renesas_usbhs/pipe.c b/drivers/usb/renesas_usbhs/pipe.c
index 56fc3ff5016f..f48a22037f43 100644
--- a/drivers/usb/renesas_usbhs/pipe.c
+++ b/drivers/usb/renesas_usbhs/pipe.c
@@ -822,8 +822,7 @@ int usbhs_pipe_probe(struct usbhs_priv *priv)
 		return -EINVAL;
 	}

-	info->pipe = kcalloc(pipe_size, sizeof(struct usbhs_pipe),
-			     GFP_KERNEL);
+	info->pipe = kzalloc_objs(struct usbhs_pipe, pipe_size, GFP_KERNEL);
 	if (!info->pipe)
 		return -ENOMEM;

diff --git a/drivers/usb/roles/class.c b/drivers/usb/roles/class.c
index 30482d4cf826..31c2c3e370dd 100644
--- a/drivers/usb/roles/class.c
+++ b/drivers/usb/roles/class.c
@@ -364,7 +364,7 @@ usb_role_switch_register(struct device *parent,
 	if (!desc || !desc->set)
 		return ERR_PTR(-EINVAL);

-	sw = kzalloc(sizeof(*sw), GFP_KERNEL);
+	sw = kzalloc_obj(*sw, GFP_KERNEL);
 	if (!sw)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/serial/ark3116.c b/drivers/usb/serial/ark3116.c
index 800b04fe37fa..336d199e4994 100644
--- a/drivers/usb/serial/ark3116.c
+++ b/drivers/usb/serial/ark3116.c
@@ -126,7 +126,7 @@ static int ark3116_port_probe(struct usb_serial_port *port)
 	struct usb_serial *serial = port->serial;
 	struct ark3116_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c
index 5c41c1c82c3f..334f59c512d7 100644
--- a/drivers/usb/serial/belkin_sa.c
+++ b/drivers/usb/serial/belkin_sa.c
@@ -114,7 +114,7 @@ static int belkin_sa_port_probe(struct usb_serial_port *port)
 	struct usb_device *dev = port->serial->dev;
 	struct belkin_sa_private *priv;

-	priv = kmalloc(sizeof(struct belkin_sa_private), GFP_KERNEL);
+	priv = kmalloc_obj(struct belkin_sa_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
index 7cc36f84821f..ceb2612a9228 100644
--- a/drivers/usb/serial/ch341.c
+++ b/drivers/usb/serial/ch341.c
@@ -381,7 +381,7 @@ static int ch341_port_probe(struct usb_serial_port *port)
 	struct ch341_private *priv;
 	int r;

-	priv = kzalloc(sizeof(struct ch341_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct ch341_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c
index c3ea3a46ed76..4b5f56bd01e8 100644
--- a/drivers/usb/serial/console.c
+++ b/drivers/usb/serial/console.c
@@ -133,7 +133,7 @@ static int usb_console_setup(struct console *co, char *options)
 			 * the termios structure, then later call set_termios to
 			 * configure according to command line arguments
 			 */
-			tty = kzalloc(sizeof(*tty), GFP_KERNEL);
+			tty = kzalloc_obj(*tty, GFP_KERNEL);
 			if (!tty) {
 				retval = -ENOMEM;
 				goto reset_open_count;
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index 36b25418b214..3c30dd095b32 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -2006,7 +2006,7 @@ static int cp210x_port_probe(struct usb_serial_port *port)
 	struct usb_serial *serial = port->serial;
 	struct cp210x_port_private *port_priv;

-	port_priv = kzalloc(sizeof(*port_priv), GFP_KERNEL);
+	port_priv = kzalloc_obj(*port_priv, GFP_KERNEL);
 	if (!port_priv)
 		return -ENOMEM;

@@ -2163,7 +2163,7 @@ static int cp210x_attach(struct usb_serial *serial)
 	int result;
 	struct cp210x_serial_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
index 76dd8e7453b5..609d3a700b70 100644
--- a/drivers/usb/serial/cyberjack.c
+++ b/drivers/usb/serial/cyberjack.c
@@ -101,7 +101,7 @@ static int cyberjack_port_probe(struct usb_serial_port *port)
 	struct cyberjack_private *priv;
 	int result;

-	priv = kmalloc(sizeof(struct cyberjack_private), GFP_KERNEL);
+	priv = kmalloc_obj(struct cyberjack_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
index e29569d65991..52d52a92b7ea 100644
--- a/drivers/usb/serial/cypress_m8.c
+++ b/drivers/usb/serial/cypress_m8.c
@@ -445,7 +445,7 @@ static int cypress_generic_port_probe(struct usb_serial_port *port)
 		return -ENODEV;
 	}

-	priv = kzalloc(sizeof(struct cypress_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct cypress_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
index a06485965412..8a8d4dc899b0 100644
--- a/drivers/usb/serial/digi_acceleport.c
+++ b/drivers/usb/serial/digi_acceleport.c
@@ -1209,7 +1209,7 @@ static int digi_port_init(struct usb_serial_port *port, unsigned port_num)
 {
 	struct digi_port *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -1231,7 +1231,7 @@ static int digi_startup(struct usb_serial *serial)
 	struct digi_serial *serial_priv;
 	int ret;

-	serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL);
+	serial_priv = kzalloc_obj(*serial_priv, GFP_KERNEL);
 	if (!serial_priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index acb48b1c83f7..7500e1a85c88 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -2188,7 +2188,7 @@ static int ftdi_port_probe(struct usb_serial_port *port)
 	struct ftdi_private *priv;
 	int result;

-	priv = kzalloc(sizeof(struct ftdi_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct ftdi_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
index 614de0c2f5f2..aa7561aba927 100644
--- a/drivers/usb/serial/garmin_gps.c
+++ b/drivers/usb/serial/garmin_gps.c
@@ -267,7 +267,7 @@ static int pkt_add(struct garmin_data *garmin_data_p,

 	/* process only packets containing data ... */
 	if (data_length) {
-		pkt = kmalloc(struct_size(pkt, data, data_length), GFP_ATOMIC);
+		pkt = kmalloc_flex(*pkt, data, data_length, GFP_ATOMIC);
 		if (!pkt)
 			return 0;

@@ -1373,7 +1373,7 @@ static int garmin_port_probe(struct usb_serial_port *port)
 	int status;
 	struct garmin_data *garmin_data_p;

-	garmin_data_p = kzalloc(sizeof(struct garmin_data), GFP_KERNEL);
+	garmin_data_p = kzalloc_obj(struct garmin_data, GFP_KERNEL);
 	if (!garmin_data_p)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index 1fffda7647f9..b036fcde63e4 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -498,7 +498,7 @@ static int get_epic_descriptor(struct edgeport_serial *ep)

 	ep->is_epic = 0;

-	epic = kmalloc(sizeof(*epic), GFP_KERNEL);
+	epic = kmalloc_obj(*epic, GFP_KERNEL);
 	if (!epic)
 		return -ENOMEM;

@@ -2714,7 +2714,7 @@ static int edge_startup(struct usb_serial *serial)
 	dev = serial->dev;

 	/* create our private serial structure */
-	edge_serial = kzalloc(sizeof(struct edgeport_serial), GFP_KERNEL);
+	edge_serial = kzalloc_obj(struct edgeport_serial, GFP_KERNEL);
 	if (!edge_serial)
 		return -ENOMEM;

@@ -2956,7 +2956,7 @@ static int edge_port_probe(struct usb_serial_port *port)
 {
 	struct edgeport_port *edge_port;

-	edge_port = kzalloc(sizeof(*edge_port), GFP_KERNEL);
+	edge_port = kzalloc_obj(*edge_port, GFP_KERNEL);
 	if (!edge_port)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index 7d0584b2a234..fed02fdf3dcb 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -528,7 +528,7 @@ static int tx_active(struct edgeport_port *port)
 	u8 *lsr;
 	int bytes_left = 0;

-	oedb = kmalloc(sizeof(*oedb), GFP_KERNEL);
+	oedb = kmalloc_obj(*oedb, GFP_KERNEL);
 	if (!oedb)
 		return -ENOMEM;

@@ -680,7 +680,7 @@ static int check_i2c_image(struct edgeport_serial *serial)
 	u8 *buffer;
 	u16 ttype;

-	rom_desc = kmalloc(sizeof(*rom_desc), GFP_KERNEL);
+	rom_desc = kmalloc_obj(*rom_desc, GFP_KERNEL);
 	if (!rom_desc)
 		return -ENOMEM;

@@ -759,7 +759,7 @@ static int get_manuf_info(struct edgeport_serial *serial, u8 *buffer)
 	struct edge_ti_manuf_descriptor *desc;
 	struct device *dev = &serial->serial->dev->dev;

-	rom_desc = kmalloc(sizeof(*rom_desc), GFP_KERNEL);
+	rom_desc = kmalloc_obj(*rom_desc, GFP_KERNEL);
 	if (!rom_desc)
 		return -ENOMEM;

@@ -1089,7 +1089,7 @@ static int do_download_mode(struct edgeport_serial *serial,
 	 * Validate Hardware version number
 	 * Read Manufacturing Descriptor from TI Based Edgeport
 	 */
-	ti_manuf_desc = kmalloc(sizeof(*ti_manuf_desc), GFP_KERNEL);
+	ti_manuf_desc = kmalloc_obj(*ti_manuf_desc, GFP_KERNEL);
 	if (!ti_manuf_desc)
 		return -ENOMEM;

@@ -1107,7 +1107,7 @@ static int do_download_mode(struct edgeport_serial *serial,
 		return -EINVAL;
 	}

-	rom_desc = kmalloc(sizeof(*rom_desc), GFP_KERNEL);
+	rom_desc = kmalloc_obj(*rom_desc, GFP_KERNEL);
 	if (!rom_desc) {
 		kfree(ti_manuf_desc);
 		return -ENOMEM;
@@ -1123,8 +1123,7 @@ static int do_download_mode(struct edgeport_serial *serial,
 		dev_dbg(dev, "%s - Found Type FIRMWARE (Type 2) record\n",
 				__func__);

-		firmware_version = kmalloc(sizeof(*firmware_version),
-							GFP_KERNEL);
+		firmware_version = kmalloc_obj(*firmware_version, GFP_KERNEL);
 		if (!firmware_version) {
 			kfree(rom_desc);
 			kfree(ti_manuf_desc);
@@ -1419,7 +1418,7 @@ static int do_boot_mode(struct edgeport_serial *serial,
 		 * Validate Hardware version number
 		 * Read Manufacturing Descriptor from TI Based Edgeport
 		 */
-		ti_manuf_desc = kmalloc(sizeof(*ti_manuf_desc), GFP_KERNEL);
+		ti_manuf_desc = kmalloc_obj(*ti_manuf_desc, GFP_KERNEL);
 		if (!ti_manuf_desc)
 			return -ENOMEM;

@@ -2219,7 +2218,7 @@ static void change_port_settings(struct tty_struct *tty,
 	unsigned cflag;
 	int status;

-	config = kmalloc (sizeof (*config), GFP_KERNEL);
+	config = kmalloc_obj(*config, GFP_KERNEL);
 	if (!config) {
 		tty->termios = *old_termios;
 		return;
@@ -2458,7 +2457,7 @@ static void edge_heartbeat_work(struct work_struct *work)
 	serial = container_of(work, struct edgeport_serial,
 			heartbeat_work.work);

-	rom_desc = kmalloc(sizeof(*rom_desc), GFP_KERNEL);
+	rom_desc = kmalloc_obj(*rom_desc, GFP_KERNEL);

 	/* Descriptor address request is enough to reset the firmware timer */
 	if (!rom_desc || !get_descriptor_addr(serial, I2C_DESC_TYPE_ION,
@@ -2497,7 +2496,7 @@ static int edge_startup(struct usb_serial *serial)
 	u16 product_id;

 	/* create our private serial structure */
-	edge_serial = kzalloc(sizeof(struct edgeport_serial), GFP_KERNEL);
+	edge_serial = kzalloc_obj(struct edgeport_serial, GFP_KERNEL);
 	if (!edge_serial)
 		return -ENOMEM;

@@ -2551,7 +2550,7 @@ static int edge_port_probe(struct usb_serial_port *port)
 	struct edgeport_port *edge_port;
 	int ret;

-	edge_port = kzalloc(sizeof(*edge_port), GFP_KERNEL);
+	edge_port = kzalloc_obj(*edge_port, GFP_KERNEL);
 	if (!edge_port)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/ipw.c b/drivers/usb/serial/ipw.c
index b1e672c2f423..ec2b061c0e84 100644
--- a/drivers/usb/serial/ipw.c
+++ b/drivers/usb/serial/ipw.c
@@ -198,7 +198,7 @@ static int ipw_attach(struct usb_serial *serial)
 {
 	struct usb_wwan_intf_private *data;

-	data = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL);
+	data = kzalloc_obj(struct usb_wwan_intf_private, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c
index a106b71e698f..4eeec9c06a11 100644
--- a/drivers/usb/serial/ir-usb.c
+++ b/drivers/usb/serial/ir-usb.c
@@ -126,7 +126,7 @@ irda_usb_find_class_desc(struct usb_serial *serial, unsigned int ifnum)
 	struct usb_irda_cs_descriptor *desc;
 	int ret;

-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		return NULL;

diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
index c21dcc9b6f05..6feb886991d6 100644
--- a/drivers/usb/serial/iuu_phoenix.c
+++ b/drivers/usb/serial/iuu_phoenix.c
@@ -67,7 +67,7 @@ static int iuu_port_probe(struct usb_serial_port *port)
 	struct iuu_private *priv;
 	int ret;

-	priv = kzalloc(sizeof(struct iuu_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct iuu_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
index 9129e0282c24..ba3f80d21e92 100644
--- a/drivers/usb/serial/keyspan.c
+++ b/drivers/usb/serial/keyspan.c
@@ -2789,7 +2789,7 @@ static int keyspan_startup(struct usb_serial *serial)
 	}

 	/* Setup private data for serial driver */
-	s_priv = kzalloc(sizeof(struct keyspan_serial_private), GFP_KERNEL);
+	s_priv = kzalloc_obj(struct keyspan_serial_private, GFP_KERNEL);
 	if (!s_priv)
 		return -ENOMEM;

@@ -2886,7 +2886,7 @@ static int keyspan_port_probe(struct usb_serial_port *port)
 	s_priv = usb_get_serial_data(serial);
 	d_details = s_priv->device_details;

-	p_priv = kzalloc(sizeof(*p_priv), GFP_KERNEL);
+	p_priv = kzalloc_obj(*p_priv, GFP_KERNEL);
 	if (!p_priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
index e98b479593d3..8a0f993ec7c6 100644
--- a/drivers/usb/serial/keyspan_pda.c
+++ b/drivers/usb/serial/keyspan_pda.c
@@ -654,7 +654,7 @@ static int keyspan_pda_port_probe(struct usb_serial_port *port)

 	struct keyspan_pda_private *priv;

-	priv = kmalloc(sizeof(struct keyspan_pda_private), GFP_KERNEL);
+	priv = kmalloc_obj(struct keyspan_pda_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c
index d36155b6d2bf..d2960271a1f7 100644
--- a/drivers/usb/serial/kl5kusb105.c
+++ b/drivers/usb/serial/kl5kusb105.c
@@ -189,7 +189,7 @@ static int klsi_105_port_probe(struct usb_serial_port *port)
 {
 	struct klsi_105_private *priv;

-	priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kmalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -378,7 +378,7 @@ static void klsi_105_set_termios(struct tty_struct *tty,
 	unsigned long flags;
 	speed_t baud;

-	cfg = kmalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kmalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return;

diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
index 3a1343d88386..3f9311b3bdf9 100644
--- a/drivers/usb/serial/kobil_sct.c
+++ b/drivers/usb/serial/kobil_sct.c
@@ -130,7 +130,7 @@ static int kobil_port_probe(struct usb_serial_port *port)
 	struct usb_serial *serial = port->serial;
 	struct kobil_private *priv;

-	priv = kmalloc(sizeof(struct kobil_private), GFP_KERNEL);
+	priv = kmalloc_obj(struct kobil_private, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
index 2bce8cc03aca..2bf86c3cc7ff 100644
--- a/drivers/usb/serial/mct_u232.c
+++ b/drivers/usb/serial/mct_u232.c
@@ -385,7 +385,7 @@ static int mct_u232_port_probe(struct usb_serial_port *port)
 		return -ENODEV;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/metro-usb.c b/drivers/usb/serial/metro-usb.c
index 028878292901..7e7fb49fc3d5 100644
--- a/drivers/usb/serial/metro-usb.c
+++ b/drivers/usb/serial/metro-usb.c
@@ -245,7 +245,7 @@ static int metrousb_port_probe(struct usb_serial_port *port)
 {
 	struct metrousb_private *metro_priv;

-	metro_priv = kzalloc(sizeof(*metro_priv), GFP_KERNEL);
+	metro_priv = kzalloc_obj(*metro_priv, GFP_KERNEL);
 	if (!metro_priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
index e59bfa7c8030..1495d82bf838 100644
--- a/drivers/usb/serial/mos7720.c
+++ b/drivers/usb/serial/mos7720.c
@@ -555,7 +555,7 @@ static int mos7715_parport_init(struct usb_serial *serial)
 	struct mos7715_parport *mos_parport;

 	/* allocate and initialize parallel port control struct */
-	mos_parport = kzalloc(sizeof(struct mos7715_parport), GFP_KERNEL);
+	mos_parport = kzalloc_obj(struct mos7715_parport, GFP_KERNEL);
 	if (!mos_parport)
 		return -ENOMEM;

@@ -1703,7 +1703,7 @@ static int mos7720_port_probe(struct usb_serial_port *port)
 {
 	struct moschip_port *mos7720_port;

-	mos7720_port = kzalloc(sizeof(*mos7720_port), GFP_KERNEL);
+	mos7720_port = kzalloc_obj(*mos7720_port, GFP_KERNEL);
 	if (!mos7720_port)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
index 9e9aca271c0a..065ac3777906 100644
--- a/drivers/usb/serial/mos7840.c
+++ b/drivers/usb/serial/mos7840.c
@@ -1532,7 +1532,7 @@ static int mos7840_port_probe(struct usb_serial_port *port)
 	pnum = port->port_number;

 	dev_dbg(&port->dev, "mos7840_startup: configuring port %d\n", pnum);
-	mos7840_port = kzalloc(sizeof(struct moschip_port), GFP_KERNEL);
+	mos7840_port = kzalloc_obj(struct moschip_port, GFP_KERNEL);
 	if (!mos7840_port)
 		return -ENOMEM;

@@ -1677,8 +1677,8 @@ static int mos7840_port_probe(struct usb_serial_port *port)
 	/* Initialize LED timers */
 	if (mos7840_port->has_led) {
 		mos7840_port->led_urb = usb_alloc_urb(0, GFP_KERNEL);
-		mos7840_port->led_dr = kmalloc(sizeof(*mos7840_port->led_dr),
-								GFP_KERNEL);
+		mos7840_port->led_dr = kmalloc_obj(*mos7840_port->led_dr,
+						   GFP_KERNEL);
 		if (!mos7840_port->led_urb || !mos7840_port->led_dr) {
 			status = -ENOMEM;
 			goto error;
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
index 397ebd5a3e74..05f5ab767a53 100644
--- a/drivers/usb/serial/omninet.c
+++ b/drivers/usb/serial/omninet.c
@@ -113,7 +113,7 @@ static int omninet_port_probe(struct usb_serial_port *port)
 {
 	struct omninet_data *od;

-	od = kzalloc(sizeof(*od), GFP_KERNEL);
+	od = kzalloc_obj(*od, GFP_KERNEL);
 	if (!od)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c
index 1ee84ccc4bbd..0ced33c28545 100644
--- a/drivers/usb/serial/opticon.c
+++ b/drivers/usb/serial/opticon.c
@@ -220,7 +220,7 @@ static int opticon_write(struct tty_struct *tty, struct usb_serial_port *port,

 	/* The connected devices do not have a bulk write endpoint,
 	 * to transmit data to de barcode device the control endpoint is used */
-	dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC);
+	dr = kmalloc_obj(struct usb_ctrlrequest, GFP_ATOMIC);
 	if (!dr)
 		goto error_no_dr;

@@ -354,7 +354,7 @@ static int opticon_port_probe(struct usb_serial_port *port)
 {
 	struct opticon_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index d4505a426446..261d852aaccf 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -2606,7 +2606,7 @@ static int option_attach(struct usb_serial *serial)
 	struct usb_wwan_intf_private *data;
 	unsigned long device_flags;

-	data = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL);
+	data = kzalloc_obj(struct usb_wwan_intf_private, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/oti6858.c b/drivers/usb/serial/oti6858.c
index bd206cb9cc08..70ddda6a300e 100644
--- a/drivers/usb/serial/oti6858.c
+++ b/drivers/usb/serial/oti6858.c
@@ -328,7 +328,7 @@ static int oti6858_port_probe(struct usb_serial_port *port)
 {
 	struct oti6858_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index 22579d0d8ab8..75fd24019cba 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -503,7 +503,7 @@ static int pl2303_startup(struct usb_serial *serial)
 	type = ret;
 	dev_dbg(&serial->interface->dev, "device type: %s\n", pl2303_type_data[type].name);

-	spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
+	spriv = kzalloc_obj(*spriv, GFP_KERNEL);
 	if (!spriv)
 		return -ENOMEM;

@@ -555,7 +555,7 @@ static int pl2303_port_probe(struct usb_serial_port *port)
 {
 	struct pl2303_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
index 13c664317a05..bbc3e33a2d81 100644
--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -431,7 +431,7 @@ static int qc_attach(struct usb_serial *serial)
 	struct usb_wwan_intf_private *data;
 	bool sendsetup;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/quatech2.c b/drivers/usb/serial/quatech2.c
index 72fe83a6c978..606beb6e12aa 100644
--- a/drivers/usb/serial/quatech2.c
+++ b/drivers/usb/serial/quatech2.c
@@ -626,7 +626,7 @@ static int qt2_attach(struct usb_serial *serial)
 		return status;
 	}

-	serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL);
+	serial_priv = kzalloc_obj(*serial_priv, GFP_KERNEL);
 	if (!serial_priv)
 		return -ENOMEM;

@@ -657,7 +657,7 @@ static int qt2_port_probe(struct usb_serial_port *port)
 	struct qt2_port_private *port_priv;
 	u8 bEndpointAddress;

-	port_priv = kzalloc(sizeof(*port_priv), GFP_KERNEL);
+	port_priv = kzalloc_obj(*port_priv, GFP_KERNEL);
 	if (!port_priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
index 741e68e46139..3b6a025cbeb8 100644
--- a/drivers/usb/serial/sierra.c
+++ b/drivers/usb/serial/sierra.c
@@ -828,7 +828,7 @@ static int sierra_startup(struct usb_serial *serial)
 {
 	struct sierra_intf_private *intfdata;

-	intfdata = kzalloc(sizeof(*intfdata), GFP_KERNEL);
+	intfdata = kzalloc_obj(*intfdata, GFP_KERNEL);
 	if (!intfdata)
 		return -ENOMEM;

@@ -861,7 +861,7 @@ static int sierra_port_probe(struct usb_serial_port *port)
 	const struct sierra_iface_list *himemory_list;
 	u8 ifnum;

-	portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
+	portdata = kzalloc_obj(*portdata, GFP_KERNEL);
 	if (!portdata)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/spcp8x5.c b/drivers/usb/serial/spcp8x5.c
index 11077beb7232..df1d1eed1236 100644
--- a/drivers/usb/serial/spcp8x5.c
+++ b/drivers/usb/serial/spcp8x5.c
@@ -145,7 +145,7 @@ static int spcp8x5_port_probe(struct usb_serial_port *port)
 	const struct usb_device_id *id = usb_get_serial_data(port->serial);
 	struct spcp8x5_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/ssu100.c b/drivers/usb/serial/ssu100.c
index df21009bdf42..f73321fd5dfd 100644
--- a/drivers/usb/serial/ssu100.c
+++ b/drivers/usb/serial/ssu100.c
@@ -326,7 +326,7 @@ static int ssu100_port_probe(struct usb_serial_port *port)
 {
 	struct ssu100_port_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/symbolserial.c b/drivers/usb/serial/symbolserial.c
index 58962bcbf9ba..46158cfc546a 100644
--- a/drivers/usb/serial/symbolserial.c
+++ b/drivers/usb/serial/symbolserial.c
@@ -149,7 +149,7 @@ static int symbol_port_probe(struct usb_serial_port *port)
 {
 	struct symbol_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index d671189ecee2..cb6b0c018809 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -519,7 +519,7 @@ static int ti_startup(struct usb_serial *serial)
 		dev->descriptor.bNumConfigurations,
 		dev->actconfig->desc.bConfigurationValue);

-	tdev = kzalloc(sizeof(struct ti_device), GFP_KERNEL);
+	tdev = kzalloc_obj(struct ti_device, GFP_KERNEL);
 	if (!tdev)
 		return -ENOMEM;

@@ -598,7 +598,7 @@ static int ti_port_probe(struct usb_serial_port *port)
 {
 	struct ti_port *tport;

-	tport = kzalloc(sizeof(*tport), GFP_KERNEL);
+	tport = kzalloc_obj(*tport, GFP_KERNEL);
 	if (!tport)
 		return -ENOMEM;

@@ -897,7 +897,7 @@ static void ti_set_termios(struct tty_struct *tty,
 	u16 wbaudrate;
 	u16 wflags = 0;

-	config = kmalloc(sizeof(*config), GFP_KERNEL);
+	config = kmalloc_obj(*config, GFP_KERNEL);
 	if (!config)
 		return;

diff --git a/drivers/usb/serial/upd78f0730.c b/drivers/usb/serial/upd78f0730.c
index 15a17bf111f1..ecf0ecfceccb 100644
--- a/drivers/usb/serial/upd78f0730.c
+++ b/drivers/usb/serial/upd78f0730.c
@@ -161,7 +161,7 @@ static int upd78f0730_port_probe(struct usb_serial_port *port)
 {
 	struct upd78f0730_port_private *private;

-	private = kzalloc(sizeof(*private), GFP_KERNEL);
+	private = kzalloc_obj(*private, GFP_KERNEL);
 	if (!private)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index c78ff40b1e5f..26c40f8108e4 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -688,7 +688,7 @@ static struct usb_serial *create_serial(struct usb_device *dev,
 {
 	struct usb_serial *serial;

-	serial = kzalloc(sizeof(*serial), GFP_KERNEL);
+	serial = kzalloc_obj(*serial, GFP_KERNEL);
 	if (!serial)
 		return NULL;
 	serial->dev = usb_get_dev(dev);
@@ -1005,7 +1005,7 @@ static int usb_serial_probe(struct usb_interface *interface,
 	}

 	/* descriptor matches, let's find the endpoints needed */
-	epds = kzalloc(sizeof(*epds), GFP_KERNEL);
+	epds = kzalloc_obj(*epds, GFP_KERNEL);
 	if (!epds) {
 		retval = -ENOMEM;
 		goto err_release_sibling;
@@ -1059,7 +1059,7 @@ static int usb_serial_probe(struct usb_interface *interface,

 	dev_dbg(ddev, "setting up %d port structure(s)\n", max_endpoints);
 	for (i = 0; i < max_endpoints; ++i) {
-		port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
+		port = kzalloc_obj(struct usb_serial_port, GFP_KERNEL);
 		if (!port) {
 			retval = -ENOMEM;
 			goto err_free_epds;
@@ -1482,7 +1482,7 @@ int __usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers
 	 * Suspend/resume support is implemented in the usb-serial core,
 	 * so fill in the PM-related fields in udriver.
 	 */
-	udriver = kzalloc(sizeof(*udriver), GFP_KERNEL);
+	udriver = kzalloc_obj(*udriver, GFP_KERNEL);
 	if (!udriver)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
index 0017f6e969e1..ea529a15c1f6 100644
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -449,7 +449,7 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
 	if (!port->bulk_in_size || !port->bulk_out_size)
 		return -ENODEV;

-	portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
+	portdata = kzalloc_obj(*portdata, GFP_KERNEL);
 	if (!portdata)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
index 009faeb2ef55..c530e7a85cb4 100644
--- a/drivers/usb/serial/whiteheat.c
+++ b/drivers/usb/serial/whiteheat.c
@@ -278,8 +278,7 @@ static int whiteheat_attach(struct usb_serial *serial)
 		 serial->type->description,
 		 hw_info->sw_major_rev, hw_info->sw_minor_rev);

-	command_info = kmalloc(sizeof(struct whiteheat_command_private),
-								GFP_KERNEL);
+	command_info = kmalloc_obj(struct whiteheat_command_private, GFP_KERNEL);
 	if (!command_info)
 		goto no_command_private;

@@ -330,7 +329,7 @@ static int whiteheat_port_probe(struct usb_serial_port *port)
 {
 	struct whiteheat_private *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/usb/serial/xr_serial.c b/drivers/usb/serial/xr_serial.c
index 4186e791b384..91c0a8d0097a 100644
--- a/drivers/usb/serial/xr_serial.c
+++ b/drivers/usb/serial/xr_serial.c
@@ -756,7 +756,7 @@ static void xr_cdc_set_line_coding(struct tty_struct *tty,
 	struct usb_cdc_line_coding *lc;
 	int ret;

-	lc = kzalloc(sizeof(*lc), GFP_KERNEL);
+	lc = kzalloc_obj(*lc, GFP_KERNEL);
 	if (!lc)
 		return;

@@ -1020,7 +1020,7 @@ static int xr_port_probe(struct usb_serial_port *port)
 	type_id = (int)(unsigned long)usb_get_serial_data(port->serial);
 	type = &xr_types[type_id];

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/usb/storage/alauda.c b/drivers/usb/storage/alauda.c
index e01f3a42bde4..691fe47009cf 100644
--- a/drivers/usb/storage/alauda.c
+++ b/drivers/usb/storage/alauda.c
@@ -1113,7 +1113,7 @@ static int init_alauda(struct us_data *us)
 	struct usb_host_interface *altsetting = us->pusb_intf->cur_altsetting;
 	nand_init_ecc();

-	us->extra = kzalloc(sizeof(struct alauda_info), GFP_NOIO);
+	us->extra = kzalloc_obj(struct alauda_info, GFP_NOIO);
 	if (!us->extra)
 		return -ENOMEM;

diff --git a/drivers/usb/storage/datafab.c b/drivers/usb/storage/datafab.c
index 9ba369483c9b..0ded8ef72efa 100644
--- a/drivers/usb/storage/datafab.c
+++ b/drivers/usb/storage/datafab.c
@@ -555,7 +555,7 @@ static int datafab_transport(struct scsi_cmnd *srb, struct us_data *us)
 	};

 	if (!us->extra) {
-		us->extra = kzalloc(sizeof(struct datafab_info), GFP_NOIO);
+		us->extra = kzalloc_obj(struct datafab_info, GFP_NOIO);
 		if (!us->extra)
 			return USB_STOR_TRANSPORT_ERROR;

diff --git a/drivers/usb/storage/ene_ub6250.c b/drivers/usb/storage/ene_ub6250.c
index ce91fb105975..5a5f35213c1d 100644
--- a/drivers/usb/storage/ene_ub6250.c
+++ b/drivers/usb/storage/ene_ub6250.c
@@ -1119,9 +1119,9 @@ static int ms_lib_alloc_writebuf(struct us_data *us)
 	info->MS_Lib.blkpag = kmalloc_array(info->MS_Lib.PagesPerBlock,
 					    info->MS_Lib.BytesPerSector,
 					    GFP_KERNEL);
-	info->MS_Lib.blkext = kmalloc_array(info->MS_Lib.PagesPerBlock,
-					    sizeof(struct ms_lib_type_extdat),
-					    GFP_KERNEL);
+	info->MS_Lib.blkext = kmalloc_objs(struct ms_lib_type_extdat,
+					   info->MS_Lib.PagesPerBlock,
+					   GFP_KERNEL);

 	if ((info->MS_Lib.blkpag == NULL) || (info->MS_Lib.blkext == NULL)) {
 		ms_lib_free_writebuf(us);
@@ -2336,7 +2336,7 @@ static int ene_ub6250_probe(struct usb_interface *intf,
 		return result;

 	/* FIXME: where should the code alloc extra buf ? */
-	us->extra = kzalloc(sizeof(struct ene_ub6250_info), GFP_KERNEL);
+	us->extra = kzalloc_obj(struct ene_ub6250_info, GFP_KERNEL);
 	if (!us->extra)
 		return -ENOMEM;
 	us->extra_destructor = ene_ub6250_info_destructor;
diff --git a/drivers/usb/storage/isd200.c b/drivers/usb/storage/isd200.c
index a1669c35bad5..92113848913d 100644
--- a/drivers/usb/storage/isd200.c
+++ b/drivers/usb/storage/isd200.c
@@ -1463,7 +1463,7 @@ static int isd200_init_info(struct us_data *us)
 {
 	struct isd200_info *info;

-	info = kzalloc(sizeof(struct isd200_info), GFP_KERNEL);
+	info = kzalloc_obj(struct isd200_info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/drivers/usb/storage/jumpshot.c b/drivers/usb/storage/jumpshot.c
index 089c6f8ac85f..a9c48091491e 100644
--- a/drivers/usb/storage/jumpshot.c
+++ b/drivers/usb/storage/jumpshot.c
@@ -482,7 +482,7 @@ static int jumpshot_transport(struct scsi_cmnd *srb, struct us_data *us)
 	};

 	if (!us->extra) {
-		us->extra = kzalloc(sizeof(struct jumpshot_info), GFP_NOIO);
+		us->extra = kzalloc_obj(struct jumpshot_info, GFP_NOIO);
 		if (!us->extra)
 			return USB_STOR_TRANSPORT_ERROR;

diff --git a/drivers/usb/storage/karma.c b/drivers/usb/storage/karma.c
index 341d6839548a..5f199c21bb0c 100644
--- a/drivers/usb/storage/karma.c
+++ b/drivers/usb/storage/karma.c
@@ -174,7 +174,7 @@ static void rio_karma_destructor(void *extra)

 static int rio_karma_init(struct us_data *us)
 {
-	struct karma_data *data = kzalloc(sizeof(struct karma_data), GFP_NOIO);
+	struct karma_data *data = kzalloc_obj(struct karma_data, GFP_NOIO);

 	if (!data)
 		return -ENOMEM;
diff --git a/drivers/usb/storage/onetouch.c b/drivers/usb/storage/onetouch.c
index 5a8a1ffda0ec..083423606ad9 100644
--- a/drivers/usb/storage/onetouch.c
+++ b/drivers/usb/storage/onetouch.c
@@ -183,7 +183,7 @@ static int onetouch_connect_input(struct us_data *ss)
 	maxp = usb_maxpacket(udev, pipe);
 	maxp = min(maxp, ONETOUCH_PKT_LEN);

-	onetouch = kzalloc(sizeof(struct usb_onetouch), GFP_KERNEL);
+	onetouch = kzalloc_obj(struct usb_onetouch, GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!onetouch || !input_dev)
 		goto fail1;
diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
index 3cc243956fd4..12eb1ab224cd 100644
--- a/drivers/usb/storage/realtek_cr.c
+++ b/drivers/usb/storage/realtek_cr.c
@@ -976,7 +976,7 @@ static int init_realtek_cr(struct us_data *us)
 	struct rts51x_chip *chip;
 	int size, i, retval;

-	chip = kzalloc(sizeof(struct rts51x_chip), GFP_KERNEL);
+	chip = kzalloc_obj(struct rts51x_chip, GFP_KERNEL);
 	if (!chip)
 		return -ENOMEM;

diff --git a/drivers/usb/storage/sddr09.c b/drivers/usb/storage/sddr09.c
index e66b920e99e2..3d45e1b54c66 100644
--- a/drivers/usb/storage/sddr09.c
+++ b/drivers/usb/storage/sddr09.c
@@ -1232,8 +1232,8 @@ sddr09_read_map(struct us_data *us) {

 	kfree(info->lba_to_pba);
 	kfree(info->pba_to_lba);
-	info->lba_to_pba = kmalloc_array(numblocks, sizeof(int), GFP_NOIO);
-	info->pba_to_lba = kmalloc_array(numblocks, sizeof(int), GFP_NOIO);
+	info->lba_to_pba = kmalloc_objs(int, numblocks, GFP_NOIO);
+	info->pba_to_lba = kmalloc_objs(int, numblocks, GFP_NOIO);

 	if (info->lba_to_pba == NULL || info->pba_to_lba == NULL) {
 		printk(KERN_WARNING "sddr09_read_map: out of memory\n");
@@ -1428,7 +1428,7 @@ sddr09_common_init(struct us_data *us) {
 		return -EINVAL;
 	}

-	us->extra = kzalloc(sizeof(struct sddr09_card_info), GFP_NOIO);
+	us->extra = kzalloc_obj(struct sddr09_card_info, GFP_NOIO);
 	if (!us->extra)
 		return -ENOMEM;
 	us->extra_destructor = sddr09_card_info_destructor;
diff --git a/drivers/usb/storage/sddr55.c b/drivers/usb/storage/sddr55.c
index 9d813727e65f..e05e824cd4d1 100644
--- a/drivers/usb/storage/sddr55.c
+++ b/drivers/usb/storage/sddr55.c
@@ -691,8 +691,8 @@ static int sddr55_read_map(struct us_data *us) {

 	kfree(info->lba_to_pba);
 	kfree(info->pba_to_lba);
-	info->lba_to_pba = kmalloc_array(numblocks, sizeof(int), GFP_NOIO);
-	info->pba_to_lba = kmalloc_array(numblocks, sizeof(int), GFP_NOIO);
+	info->lba_to_pba = kmalloc_objs(int, numblocks, GFP_NOIO);
+	info->pba_to_lba = kmalloc_objs(int, numblocks, GFP_NOIO);

 	if (info->lba_to_pba == NULL || info->pba_to_lba == NULL) {
 		kfree(info->lba_to_pba);
@@ -799,8 +799,7 @@ static int sddr55_transport(struct scsi_cmnd *srb, struct us_data *us)
 	struct sddr55_card_info *info;

 	if (!us->extra) {
-		us->extra = kzalloc(
-			sizeof(struct sddr55_card_info), GFP_NOIO);
+		us->extra = kzalloc_obj(struct sddr55_card_info, GFP_NOIO);
 		if (!us->extra)
 			return USB_STOR_TRANSPORT_ERROR;
 		us->extra_destructor = sddr55_card_info_destructor;
diff --git a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c
index 27faa0ead11d..7e5424268c73 100644
--- a/drivers/usb/storage/shuttle_usbat.c
+++ b/drivers/usb/storage/shuttle_usbat.c
@@ -1454,7 +1454,7 @@ static int init_usbat(struct us_data *us, int devicetype)
 	unsigned char subcountL = USBAT_ATA_LBA_ME;
 	unsigned char *status = us->iobuf;

-	us->extra = kzalloc(sizeof(struct usbat_info), GFP_NOIO);
+	us->extra = kzalloc_obj(struct usbat_info, GFP_NOIO);
 	if (!us->extra)
 		return -ENOMEM;

diff --git a/drivers/usb/storage/sierra_ms.c b/drivers/usb/storage/sierra_ms.c
index 177fa6cd143a..357e5d29da0c 100644
--- a/drivers/usb/storage/sierra_ms.c
+++ b/drivers/usb/storage/sierra_ms.c
@@ -100,7 +100,7 @@ static ssize_t truinst_show(struct device *dev, struct device_attribute *attr,
 	if (swi_tru_install == TRU_FORCE_MS) {
 		result = sysfs_emit(buf, "Forced Mass Storage\n");
 	} else {
-		swocInfo = kmalloc(sizeof(struct swoc_info), GFP_KERNEL);
+		swocInfo = kmalloc_obj(struct swoc_info, GFP_KERNEL);
 		if (!swocInfo) {
 			sysfs_emit(buf, "Error\n");
 			return -ENOMEM;
@@ -149,8 +149,7 @@ int sierra_ms_init(struct us_data *us)
 	else {
 		usb_stor_dbg(us, "SWIMS: Normal SWoC Logic\n");

-		swocInfo = kmalloc(sizeof(struct swoc_info),
-				GFP_KERNEL);
+		swocInfo = kmalloc_obj(struct swoc_info, GFP_KERNEL);
 		if (!swocInfo)
 			return -ENOMEM;

diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index ac3c0b919fdd..0a9902d2b118 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -480,7 +480,7 @@ static struct urb *uas_alloc_sense_urb(struct uas_dev_info *devinfo, gfp_t gfp,
 	if (!urb)
 		goto out;

-	iu = kzalloc(sizeof(*iu), gfp);
+	iu = kzalloc_obj(*iu, gfp);
 	if (!iu)
 		goto free;

diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index 152ee3376550..0d24d426a176 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -537,7 +537,7 @@ static int associate_dev(struct us_data *us, struct usb_interface *intf)
 	usb_set_intfdata(intf, us);

 	/* Allocate the control/setup and DMA-mapped buffers */
-	us->cr = kmalloc(sizeof(*us->cr), GFP_KERNEL);
+	us->cr = kmalloc_obj(*us->cr, GFP_KERNEL);
 	if (!us->cr)
 		return -ENOMEM;

diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
index dbba53f02497..19f793ac6389 100644
--- a/drivers/usb/typec/class.c
+++ b/drivers/usb/typec/class.c
@@ -646,7 +646,7 @@ typec_register_altmode(struct device *parent,
 	struct altmode *alt;
 	int ret;

-	alt = kzalloc(sizeof(*alt), GFP_KERNEL);
+	alt = kzalloc_obj(*alt, GFP_KERNEL);
 	if (!alt) {
 		altmode_id_remove(parent, id);
 		return ERR_PTR(-ENOMEM);
@@ -1113,7 +1113,7 @@ struct typec_partner *typec_register_partner(struct typec_port *port,
 	struct typec_partner *partner;
 	int ret;

-	partner = kzalloc(sizeof(*partner), GFP_KERNEL);
+	partner = kzalloc_obj(*partner, GFP_KERNEL);
 	if (!partner)
 		return ERR_PTR(-ENOMEM);

@@ -1313,7 +1313,7 @@ struct typec_plug *typec_register_plug(struct typec_cable *cable,
 	char name[8];
 	int ret;

-	plug = kzalloc(sizeof(*plug), GFP_KERNEL);
+	plug = kzalloc_obj(*plug, GFP_KERNEL);
 	if (!plug)
 		return ERR_PTR(-ENOMEM);

@@ -1466,7 +1466,7 @@ struct typec_cable *typec_register_cable(struct typec_port *port,
 	struct typec_cable *cable;
 	int ret;

-	cable = kzalloc(sizeof(*cable), GFP_KERNEL);
+	cable = kzalloc_obj(*cable, GFP_KERNEL);
 	if (!cable)
 		return ERR_PTR(-ENOMEM);

@@ -2703,7 +2703,7 @@ struct typec_port *typec_register_port(struct device *parent,
 	int ret;
 	int id;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/typec/mode_selection.c b/drivers/usb/typec/mode_selection.c
index a95b31e21b52..56c6eced5666 100644
--- a/drivers/usb/typec/mode_selection.c
+++ b/drivers/usb/typec/mode_selection.c
@@ -216,7 +216,7 @@ static int altmode_add_to_list(struct device *dev, void *data)
 		struct mode_state *ms;

 		if (pdev && altmode->ops && altmode->ops->activate) {
-			ms = kzalloc(sizeof(*ms), GFP_KERNEL);
+			ms = kzalloc_obj(*ms, GFP_KERNEL);
 			if (!ms)
 				return -ENOMEM;
 			ms->svid = pdev->svid;
@@ -240,7 +240,7 @@ int typec_mode_selection_start(struct typec_partner *partner,
 	if (partner->sel)
 		return -EALREADY;

-	sel = kzalloc(sizeof(*sel), GFP_KERNEL);
+	sel = kzalloc_obj(*sel, GFP_KERNEL);
 	if (!sel)
 		return -ENOMEM;

diff --git a/drivers/usb/typec/mux.c b/drivers/usb/typec/mux.c
index 182c902c42f6..e09de0d3f32f 100644
--- a/drivers/usb/typec/mux.c
+++ b/drivers/usb/typec/mux.c
@@ -76,7 +76,7 @@ struct typec_switch *fwnode_typec_switch_get(struct fwnode_handle *fwnode)
 	int err;
 	int i;

-	sw = kzalloc(sizeof(*sw), GFP_KERNEL);
+	sw = kzalloc_obj(*sw, GFP_KERNEL);
 	if (!sw)
 		return ERR_PTR(-ENOMEM);

@@ -171,7 +171,7 @@ typec_switch_register(struct device *parent,
 	if (!desc || !desc->set)
 		return ERR_PTR(-EINVAL);

-	sw_dev = kzalloc(sizeof(*sw_dev), GFP_KERNEL);
+	sw_dev = kzalloc_obj(*sw_dev, GFP_KERNEL);
 	if (!sw_dev)
 		return ERR_PTR(-ENOMEM);

@@ -301,7 +301,7 @@ struct typec_mux *fwnode_typec_mux_get(struct fwnode_handle *fwnode)
 	int err;
 	int i;

-	mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+	mux = kzalloc_obj(*mux, GFP_KERNEL);
 	if (!mux)
 		return ERR_PTR(-ENOMEM);

@@ -415,7 +415,7 @@ typec_mux_register(struct device *parent, const struct typec_mux_desc *desc)
 	if (!desc || !desc->set)
 		return ERR_PTR(-EINVAL);

-	mux_dev = kzalloc(sizeof(*mux_dev), GFP_KERNEL);
+	mux_dev = kzalloc_obj(*mux_dev, GFP_KERNEL);
 	if (!mux_dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/typec/pd.c b/drivers/usb/typec/pd.c
index 67f20b5ffdf4..e3337ff98ab2 100644
--- a/drivers/usb/typec/pd.c
+++ b/drivers/usb/typec/pd.c
@@ -480,7 +480,7 @@ static int add_pdo(struct usb_power_delivery_capabilities *cap, u32 pdo, int pos
 	struct pdo *p;
 	int ret;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

@@ -569,7 +569,7 @@ usb_power_delivery_register_capabilities(struct usb_power_delivery *pd,
 	int ret;
 	int i;

-	cap = kzalloc(sizeof(*cap), GFP_KERNEL);
+	cap = kzalloc_obj(*cap, GFP_KERNEL);
 	if (!cap)
 		return ERR_PTR(-ENOMEM);

@@ -697,7 +697,7 @@ usb_power_delivery_register(struct device *parent, struct usb_power_delivery_des
 	struct usb_power_delivery *pd;
 	int ret;

-	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+	pd = kzalloc_obj(*pd, GFP_KERNEL);
 	if (!pd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/typec/retimer.c b/drivers/usb/typec/retimer.c
index b519fcf358ca..9bc896160af1 100644
--- a/drivers/usb/typec/retimer.c
+++ b/drivers/usb/typec/retimer.c
@@ -110,7 +110,7 @@ typec_retimer_register(struct device *parent, const struct typec_retimer_desc *d
 	if (!desc || !desc->set)
 		return ERR_PTR(-EINVAL);

-	retimer = kzalloc(sizeof(*retimer), GFP_KERNEL);
+	retimer = kzalloc_obj(*retimer, GFP_KERNEL);
 	if (!retimer)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index b7828160b81d..13b9873ba92e 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -1665,7 +1665,7 @@ static int tcpm_queue_vdm_unlocked(struct tcpm_port *port, const u32 header,
 	u32 *data_cpy;
 	int ret = -ENOMEM;

-	event = kzalloc(sizeof(*event), GFP_KERNEL);
+	event = kzalloc_obj(*event, GFP_KERNEL);
 	if (!event)
 		goto err_event;

@@ -3803,7 +3803,7 @@ void tcpm_pd_receive(struct tcpm_port *port, const struct pd_message *msg,
 {
 	struct pd_rx_event *event;

-	event = kzalloc(sizeof(*event), GFP_ATOMIC);
+	event = kzalloc_obj(*event, GFP_ATOMIC);
 	if (!event)
 		return;

diff --git a/drivers/usb/typec/ucsi/debugfs.c b/drivers/usb/typec/ucsi/debugfs.c
index d1f5832165c3..7549fef83d85 100644
--- a/drivers/usb/typec/ucsi/debugfs.c
+++ b/drivers/usb/typec/ucsi/debugfs.c
@@ -112,7 +112,7 @@ DEFINE_SHOW_ATTRIBUTE(ucsi_vbus_volt);

 void ucsi_debugfs_register(struct ucsi *ucsi)
 {
-	ucsi->debugfs = kzalloc(sizeof(*ucsi->debugfs), GFP_KERNEL);
+	ucsi->debugfs = kzalloc_obj(*ucsi->debugfs, GFP_KERNEL);
 	if (!ucsi->debugfs)
 		return;

diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index 91b6c71dd739..fe01a5e915d9 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -293,7 +293,7 @@ static int ucsi_partner_task(struct ucsi_connector *con,
 	if (!con->partner)
 		return 0;

-	uwork = kzalloc(sizeof(*uwork), GFP_KERNEL);
+	uwork = kzalloc_obj(*uwork, GFP_KERNEL);
 	if (!uwork)
 		return -ENOMEM;

@@ -1865,7 +1865,8 @@ static int ucsi_init(struct ucsi *ucsi)
 	}

 	/* Allocate the connectors. Released in ucsi_unregister() */
-	connector = kcalloc(ucsi->cap.num_connectors + 1, sizeof(*connector), GFP_KERNEL);
+	connector = kzalloc_objs(*connector, ucsi->cap.num_connectors + 1,
+				 GFP_KERNEL);
 	if (!connector) {
 		ret = -ENOMEM;
 		goto err_reset;
@@ -2043,7 +2044,7 @@ struct ucsi *ucsi_create(struct device *dev, const struct ucsi_operations *ops)
 	    !ops->read_message_in || !ops->sync_control || !ops->async_control)
 		return ERR_PTR(-EINVAL);

-	ucsi = kzalloc(sizeof(*ucsi), GFP_KERNEL);
+	ucsi = kzalloc_obj(*ucsi, GFP_KERNEL);
 	if (!ucsi)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
index 900a64ad25e4..5fe991baffa2 100644
--- a/drivers/usb/usb-skeleton.c
+++ b/drivers/usb/usb-skeleton.c
@@ -493,7 +493,7 @@ static int skel_probe(struct usb_interface *interface,
 	int retval;

 	/* allocate memory for our device state and initialize it */
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c
index ce625b1ce9a5..e859c51c94e8 100644
--- a/drivers/usb/usbip/stub_dev.c
+++ b/drivers/usb/usbip/stub_dev.c
@@ -263,7 +263,7 @@ static struct stub_device *stub_device_alloc(struct usb_device *udev)
 	dev_dbg(&udev->dev, "allocating stub device");

 	/* yes, it's a new device */
-	sdev = kzalloc(sizeof(struct stub_device), GFP_KERNEL);
+	sdev = kzalloc_obj(struct stub_device, GFP_KERNEL);
 	if (!sdev)
 		return NULL;

diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
index 9aa30ef76f3b..7df83464a75f 100644
--- a/drivers/usb/usbip/stub_rx.c
+++ b/drivers/usb/usbip/stub_rx.c
@@ -535,7 +535,7 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,

 	/* allocate urb array */
 	priv->num_urbs = num_urbs;
-	priv->urbs = kmalloc_array(num_urbs, sizeof(*priv->urbs), GFP_KERNEL);
+	priv->urbs = kmalloc_objs(*priv->urbs, num_urbs, GFP_KERNEL);
 	if (!priv->urbs)
 		goto err_urbs;

diff --git a/drivers/usb/usbip/stub_tx.c b/drivers/usb/usbip/stub_tx.c
index cd92d9fac327..9e6187c3ddb0 100644
--- a/drivers/usb/usbip/stub_tx.c
+++ b/drivers/usb/usbip/stub_tx.c
@@ -17,7 +17,7 @@ void stub_enqueue_ret_unlink(struct stub_device *sdev, __u32 seqnum,
 {
 	struct stub_unlink *unlink;

-	unlink = kzalloc(sizeof(struct stub_unlink), GFP_ATOMIC);
+	unlink = kzalloc_obj(struct stub_unlink, GFP_ATOMIC);
 	if (!unlink) {
 		usbip_event_add(&sdev->ud, VDEV_EVENT_ERROR_MALLOC);
 		return;
@@ -191,7 +191,7 @@ static int stub_send_ret_submit(struct stub_device *sdev)
 		else
 			iovnum = 2;

-		iov = kcalloc(iovnum, sizeof(struct kvec), GFP_KERNEL);
+		iov = kzalloc_objs(struct kvec, iovnum, GFP_KERNEL);

 		if (!iov) {
 			usbip_event_add(&sdev->ud, SDEV_EVENT_ERROR_MALLOC);
diff --git a/drivers/usb/usbip/usbip_event.c b/drivers/usb/usbip/usbip_event.c
index 26513540bcdb..0e00c2d000f8 100644
--- a/drivers/usb/usbip/usbip_event.c
+++ b/drivers/usb/usbip/usbip_event.c
@@ -158,7 +158,7 @@ void usbip_event_add(struct usbip_device *ud, unsigned long event)
 			goto out;
 	}

-	ue = kmalloc(sizeof(struct usbip_event), GFP_ATOMIC);
+	ue = kmalloc_obj(struct usbip_event, GFP_ATOMIC);
 	if (ue == NULL)
 		goto out;

diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
index e55690da19e5..4dcda9e8316f 100644
--- a/drivers/usb/usbip/vhci_hcd.c
+++ b/drivers/usb/usbip/vhci_hcd.c
@@ -671,7 +671,7 @@ static void vhci_tx_urb(struct urb *urb, struct vhci_device *vdev)
 	struct vhci_hcd *vhci_hcd = vdev_to_vhci_hcd(vdev);
 	unsigned long flags;

-	priv = kzalloc(sizeof(struct vhci_priv), GFP_ATOMIC);
+	priv = kzalloc_obj(struct vhci_priv, GFP_ATOMIC);
 	if (!priv) {
 		usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC);
 		return;
@@ -951,7 +951,7 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
 		spin_lock(&vdev->priv_lock);

 		/* setup CMD_UNLINK pdu */
-		unlink = kzalloc(sizeof(struct vhci_unlink), GFP_ATOMIC);
+		unlink = kzalloc_obj(struct vhci_unlink, GFP_ATOMIC);
 		if (!unlink) {
 			spin_unlock(&vdev->priv_lock);
 			spin_unlock_irqrestore(&vhci->lock, flags);
@@ -1537,7 +1537,7 @@ static int __init vhci_hcd_init(void)
 	if (vhci_num_controllers < 1)
 		vhci_num_controllers = 1;

-	vhcis = kcalloc(vhci_num_controllers, sizeof(struct vhci), GFP_KERNEL);
+	vhcis = kzalloc_objs(struct vhci, vhci_num_controllers, GFP_KERNEL);
 	if (vhcis == NULL)
 		return -ENOMEM;

diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c
index d5865460e82d..f7929b4a43a4 100644
--- a/drivers/usb/usbip/vhci_sysfs.c
+++ b/drivers/usb/usbip/vhci_sysfs.c
@@ -476,8 +476,8 @@ static int init_status_attrs(void)
 {
 	int id;

-	status_attrs = kcalloc(vhci_num_controllers, sizeof(struct status_attr),
-			       GFP_KERNEL);
+	status_attrs = kzalloc_objs(struct status_attr, vhci_num_controllers,
+				    GFP_KERNEL);
 	if (status_attrs == NULL)
 		return -ENOMEM;

@@ -501,8 +501,8 @@ int vhci_init_attr_group(void)
 	struct attribute **attrs;
 	int ret, i;

-	attrs = kcalloc((vhci_num_controllers + 5), sizeof(struct attribute *),
-			GFP_KERNEL);
+	attrs = kzalloc_objs(struct attribute *, (vhci_num_controllers + 5),
+			     GFP_KERNEL);
 	if (attrs == NULL)
 		return -ENOMEM;

diff --git a/drivers/usb/usbip/vhci_tx.c b/drivers/usb/usbip/vhci_tx.c
index 0ae40a13a9fe..a63805d57d94 100644
--- a/drivers/usb/usbip/vhci_tx.c
+++ b/drivers/usb/usbip/vhci_tx.c
@@ -82,7 +82,7 @@ static int vhci_send_cmd_submit(struct vhci_device *vdev)
 		else
 			iovnum = 3;

-		iov = kcalloc(iovnum, sizeof(*iov), GFP_KERNEL);
+		iov = kzalloc_objs(*iov, iovnum, GFP_KERNEL);
 		if (!iov) {
 			usbip_event_add(&vdev->ud, SDEV_EVENT_ERROR_MALLOC);
 			return -ENOMEM;
diff --git a/drivers/usb/usbip/vudc_dev.c b/drivers/usb/usbip/vudc_dev.c
index f11535020e35..80ab3d019b87 100644
--- a/drivers/usb/usbip/vudc_dev.c
+++ b/drivers/usb/usbip/vudc_dev.c
@@ -43,7 +43,7 @@ struct urbp *alloc_urbp(void)
 {
 	struct urbp *urb_p;

-	urb_p = kzalloc(sizeof(*urb_p), GFP_KERNEL);
+	urb_p = kzalloc_obj(*urb_p, GFP_KERNEL);
 	if (!urb_p)
 		return urb_p;

@@ -284,7 +284,7 @@ static struct usb_request *vep_alloc_request(struct usb_ep *_ep,
 	if (!_ep)
 		return NULL;

-	req = kzalloc(sizeof(*req), mem_flags);
+	req = kzalloc_obj(*req, mem_flags);
 	if (!req)
 		return NULL;

@@ -491,7 +491,7 @@ struct vudc_device *alloc_vudc_device(int devid)
 {
 	struct vudc_device *udc_dev;

-	udc_dev = kzalloc(sizeof(*udc_dev), GFP_KERNEL);
+	udc_dev = kzalloc_obj(*udc_dev, GFP_KERNEL);
 	if (!udc_dev)
 		return NULL;

@@ -518,7 +518,7 @@ static int init_vudc_hw(struct vudc *udc)
 	struct usbip_device *ud = &udc->ud;
 	struct vep *ep;

-	udc->ep = kcalloc(VIRTUAL_ENDPOINTS, sizeof(*udc->ep), GFP_KERNEL);
+	udc->ep = kzalloc_objs(*udc->ep, VIRTUAL_ENDPOINTS, GFP_KERNEL);
 	if (!udc->ep)
 		goto nomem_ep;

@@ -598,7 +598,7 @@ int vudc_probe(struct platform_device *pdev)
 	struct vudc *udc;
 	int ret = -ENOMEM;

-	udc = kzalloc(sizeof(*udc), GFP_KERNEL);
+	udc = kzalloc_obj(*udc, GFP_KERNEL);
 	if (!udc)
 		goto out;

diff --git a/drivers/usb/usbip/vudc_tx.c b/drivers/usb/usbip/vudc_tx.c
index 30c11bf9f4e7..b4b7796319f1 100644
--- a/drivers/usb/usbip/vudc_tx.c
+++ b/drivers/usb/usbip/vudc_tx.c
@@ -97,7 +97,7 @@ static int v_send_ret_submit(struct vudc *udc, struct urbp *urb_p)
 	else
 		iovnum = 2;

-	iov = kcalloc(iovnum, sizeof(*iov), GFP_KERNEL);
+	iov = kzalloc_objs(*iov, iovnum, GFP_KERNEL);
 	if (!iov) {
 		usbip_event_add(&udc->ud, VUDC_EVENT_ERROR_MALLOC);
 		ret = -ENOMEM;
@@ -246,12 +246,12 @@ void v_enqueue_ret_unlink(struct vudc *udc, __u32 seqnum, __u32 status)
 	struct tx_item *txi;
 	struct v_unlink *unlink;

-	txi = kzalloc(sizeof(*txi), GFP_ATOMIC);
+	txi = kzalloc_obj(*txi, GFP_ATOMIC);
 	if (!txi) {
 		usbip_event_add(&udc->ud, VDEV_EVENT_ERROR_MALLOC);
 		return;
 	}
-	unlink = kzalloc(sizeof(*unlink), GFP_ATOMIC);
+	unlink = kzalloc_obj(*unlink, GFP_ATOMIC);
 	if (!unlink) {
 		kfree(txi);
 		usbip_event_add(&udc->ud, VDEV_EVENT_ERROR_MALLOC);
@@ -271,7 +271,7 @@ void v_enqueue_ret_submit(struct vudc *udc, struct urbp *urb_p)
 {
 	struct tx_item *txi;

-	txi = kzalloc(sizeof(*txi), GFP_ATOMIC);
+	txi = kzalloc_obj(*txi, GFP_ATOMIC);
 	if (!txi) {
 		usbip_event_add(&udc->ud, VDEV_EVENT_ERROR_MALLOC);
 		return;
diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
index 6658dc74d915..b1b4c6adeef7 100644
--- a/drivers/vdpa/ifcvf/ifcvf_main.c
+++ b/drivers/vdpa/ifcvf/ifcvf_main.c
@@ -793,7 +793,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	}

 	pci_set_master(pdev);
-	ifcvf_mgmt_dev = kzalloc(sizeof(struct ifcvf_vdpa_mgmt_dev), GFP_KERNEL);
+	ifcvf_mgmt_dev = kzalloc_obj(struct ifcvf_vdpa_mgmt_dev, GFP_KERNEL);
 	if (!ifcvf_mgmt_dev) {
 		IFCVF_ERR(pdev, "Failed to alloc memory for the vDPA management device\n");
 		return -ENOMEM;
diff --git a/drivers/vdpa/mlx5/core/mr.c b/drivers/vdpa/mlx5/core/mr.c
index 8870a7169267..f27316f3fec3 100644
--- a/drivers/vdpa/mlx5/core/mr.c
+++ b/drivers/vdpa/mlx5/core/mr.c
@@ -215,7 +215,7 @@ static int create_direct_keys(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_mr *
 	int err = 0;
 	int i = 0;

-	cmds = kvcalloc(mr->num_directs, sizeof(*cmds), GFP_KERNEL);
+	cmds = kvzalloc_objs(*cmds, mr->num_directs, GFP_KERNEL);
 	if (!cmds)
 		return -ENOMEM;

@@ -287,8 +287,8 @@ static int destroy_direct_keys(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_mr
 	int err = 0;
 	int i = 0;

-	cmds = kvcalloc(mr->num_directs, sizeof(*cmds), GFP_KERNEL);
-	cmd_mem = kvcalloc(mr->num_directs, sizeof(*cmd_mem), GFP_KERNEL);
+	cmds = kvzalloc_objs(*cmds, mr->num_directs, GFP_KERNEL);
+	cmd_mem = kvzalloc_objs(*cmd_mem, mr->num_directs, GFP_KERNEL);
 	if (!cmds || !cmd_mem)
 		return -ENOMEM;

@@ -456,7 +456,7 @@ static int add_direct_chain(struct mlx5_vdpa_dev *mvdev,
 	st = start;
 	while (size) {
 		sz = (u32)min_t(u64, MAX_KLM_SIZE, size);
-		dmr = kzalloc(sizeof(*dmr), GFP_KERNEL);
+		dmr = kzalloc_obj(*dmr, GFP_KERNEL);
 		if (!dmr) {
 			err = -ENOMEM;
 			goto err_alloc;
@@ -817,7 +817,7 @@ struct mlx5_vdpa_mr *mlx5_vdpa_create_mr(struct mlx5_vdpa_dev *mvdev,
 	struct mlx5_vdpa_mr *mr;
 	int err;

-	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+	mr = kzalloc_obj(*mr, GFP_KERNEL);
 	if (!mr)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c
index b7e46338815f..15a6c91ec335 100644
--- a/drivers/vdpa/mlx5/net/mlx5_vnet.c
+++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c
@@ -1229,8 +1229,8 @@ static int query_virtqueues(struct mlx5_vdpa_net *ndev,
 	WARN(start_vq + num_vqs > mvdev->max_vqs, "query vq range invalid [%d, %d), max_vqs: %u\n",
 	     start_vq, start_vq + num_vqs, mvdev->max_vqs);

-	cmds = kvcalloc(num_vqs, sizeof(*cmds), GFP_KERNEL);
-	cmd_mem = kvcalloc(num_vqs, sizeof(*cmd_mem), GFP_KERNEL);
+	cmds = kvzalloc_objs(*cmds, num_vqs, GFP_KERNEL);
+	cmd_mem = kvzalloc_objs(*cmd_mem, num_vqs, GFP_KERNEL);
 	if (!cmds || !cmd_mem) {
 		err = -ENOMEM;
 		goto done;
@@ -1562,8 +1562,8 @@ static int modify_virtqueues(struct mlx5_vdpa_net *ndev, int start_vq, int num_v
 	WARN(start_vq + num_vqs > mvdev->max_vqs, "modify vq range invalid [%d, %d), max_vqs: %u\n",
 	     start_vq, start_vq + num_vqs, mvdev->max_vqs);

-	cmds = kvcalloc(num_vqs, sizeof(*cmds), GFP_KERNEL);
-	cmd_mem = kvcalloc(num_vqs, sizeof(*cmd_mem), GFP_KERNEL);
+	cmds = kvzalloc_objs(*cmds, num_vqs, GFP_KERNEL);
+	cmd_mem = kvzalloc_objs(*cmd_mem, num_vqs, GFP_KERNEL);
 	if (!cmds || !cmd_mem) {
 		err = -ENOMEM;
 		goto done;
@@ -1649,7 +1649,7 @@ static int suspend_vqs(struct mlx5_vdpa_net *ndev, int start_vq, int num_vqs)
 	if (err)
 		return err;

-	attrs = kcalloc(num_vqs, sizeof(struct mlx5_virtq_attr), GFP_KERNEL);
+	attrs = kzalloc_objs(struct mlx5_virtq_attr, num_vqs, GFP_KERNEL);
 	if (!attrs)
 		return -ENOMEM;

@@ -1922,7 +1922,7 @@ static int mlx5_vdpa_add_mac_vlan_rules(struct mlx5_vdpa_net *ndev, u8 *mac,
 	int err;
 	u16 vid;

-	spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kvzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

@@ -2034,7 +2034,7 @@ static int mac_vlan_add(struct mlx5_vdpa_net *ndev, u8 *mac, u16 vid, bool tagge
 	if (mac_vlan_lookup(ndev, val))
 		return -EEXIST;

-	ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+	ptr = kzalloc_obj(*ptr, GFP_KERNEL);
 	if (!ptr)
 		return -ENOMEM;

@@ -2846,7 +2846,7 @@ static int queue_link_work(struct mlx5_vdpa_net *ndev)
 {
 	struct mlx5_vdpa_wq_ent *wqent;

-	wqent = kzalloc(sizeof(*wqent), GFP_ATOMIC);
+	wqent = kzalloc_obj(*wqent, GFP_ATOMIC);
 	if (!wqent)
 		return -ENOMEM;

@@ -3809,7 +3809,8 @@ static void allocate_irqs(struct mlx5_vdpa_net *ndev)
 	if (!ndev->mvdev.mdev->pdev)
 		return;

-	ndev->irqp.entries = kcalloc(ndev->mvdev.max_vqs, sizeof(*ndev->irqp.entries), GFP_KERNEL);
+	ndev->irqp.entries = kzalloc_objs(*ndev->irqp.entries,
+					  ndev->mvdev.max_vqs, GFP_KERNEL);
 	if (!ndev->irqp.entries)
 		return;

@@ -3901,8 +3902,9 @@ static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name,

 	mlx5_cmd_init_async_ctx(mdev, &mvdev->async_ctx);

-	ndev->vqs = kcalloc(max_vqs, sizeof(*ndev->vqs), GFP_KERNEL);
-	ndev->event_cbs = kcalloc(max_vqs + 1, sizeof(*ndev->event_cbs), GFP_KERNEL);
+	ndev->vqs = kzalloc_objs(*ndev->vqs, max_vqs, GFP_KERNEL);
+	ndev->event_cbs = kzalloc_objs(*ndev->event_cbs, max_vqs + 1,
+				       GFP_KERNEL);
 	if (!ndev->vqs || !ndev->event_cbs) {
 		err = -ENOMEM;
 		goto err_alloc;
@@ -4102,7 +4104,7 @@ static int mlx5v_probe(struct auxiliary_device *adev,
 	struct mlx5_vdpa_mgmtdev *mgtdev;
 	int err;

-	mgtdev = kzalloc(sizeof(*mgtdev), GFP_KERNEL);
+	mgtdev = kzalloc_obj(*mgtdev, GFP_KERNEL);
 	if (!mgtdev)
 		return -ENOMEM;

diff --git a/drivers/vdpa/pds/aux_drv.c b/drivers/vdpa/pds/aux_drv.c
index f57330cf9024..970eec66b117 100644
--- a/drivers/vdpa/pds/aux_drv.c
+++ b/drivers/vdpa/pds/aux_drv.c
@@ -39,7 +39,7 @@ static int pds_vdpa_probe(struct auxiliary_device *aux_dev,
 	struct pds_vdpa_aux *vdpa_aux;
 	int err;

-	vdpa_aux = kzalloc(sizeof(*vdpa_aux), GFP_KERNEL);
+	vdpa_aux = kzalloc_obj(*vdpa_aux, GFP_KERNEL);
 	if (!vdpa_aux)
 		return -ENOMEM;

diff --git a/drivers/vdpa/solidrun/snet_main.c b/drivers/vdpa/solidrun/snet_main.c
index 4588211d57eb..527efeed912c 100644
--- a/drivers/vdpa/solidrun/snet_main.c
+++ b/drivers/vdpa/solidrun/snet_main.c
@@ -732,7 +732,7 @@ static int psnet_read_cfg(struct pci_dev *pdev, struct psnet *psnet)

 	/* Load device configuration from BAR */
 	for (i = 0; i < cfg->devices_num; i++) {
-		cfg->devs[i] = kzalloc(sizeof(*cfg->devs[i]), GFP_KERNEL);
+		cfg->devs[i] = kzalloc_obj(*cfg->devs[i], GFP_KERNEL);
 		if (!cfg->devs[i]) {
 			snet_free_cfg(cfg);
 			return -ENOMEM;
@@ -827,7 +827,7 @@ static int snet_build_vqs(struct snet *snet)

 	/* Allocate the VQs */
 	for (i = 0; i < snet->cfg->vq_num; i++) {
-		snet->vqs[i] = kzalloc(sizeof(*snet->vqs[i]), GFP_KERNEL);
+		snet->vqs[i] = kzalloc_obj(*snet->vqs[i], GFP_KERNEL);
 		if (!snet->vqs[i]) {
 			snet_free_vqs(snet);
 			return -ENOMEM;
@@ -902,7 +902,7 @@ static int snet_vdpa_probe_pf(struct pci_dev *pdev)
 	}

 	/* Allocate a PCI physical function device */
-	psnet = kzalloc(sizeof(*psnet), GFP_KERNEL);
+	psnet = kzalloc_obj(*psnet, GFP_KERNEL);
 	if (!psnet)
 		return -ENOMEM;

diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c
index df9c7ddc5d78..24b4fca22893 100644
--- a/drivers/vdpa/vdpa_sim/vdpa_sim.c
+++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c
@@ -246,18 +246,18 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr,
 	if (!vdpasim->config)
 		goto err_iommu;

-	vdpasim->vqs = kcalloc(dev_attr->nvqs, sizeof(struct vdpasim_virtqueue),
-			       GFP_KERNEL);
+	vdpasim->vqs = kzalloc_objs(struct vdpasim_virtqueue, dev_attr->nvqs,
+				    GFP_KERNEL);
 	if (!vdpasim->vqs)
 		goto err_iommu;

-	vdpasim->iommu = kmalloc_array(vdpasim->dev_attr.nas,
-				       sizeof(*vdpasim->iommu), GFP_KERNEL);
+	vdpasim->iommu = kmalloc_objs(*vdpasim->iommu, vdpasim->dev_attr.nas,
+				      GFP_KERNEL);
 	if (!vdpasim->iommu)
 		goto err_iommu;

-	vdpasim->iommu_pt = kmalloc_array(vdpasim->dev_attr.nas,
-					  sizeof(*vdpasim->iommu_pt), GFP_KERNEL);
+	vdpasim->iommu_pt = kmalloc_objs(*vdpasim->iommu_pt,
+					 vdpasim->dev_attr.nas, GFP_KERNEL);
 	if (!vdpasim->iommu_pt)
 		goto err_iommu;

diff --git a/drivers/vdpa/vdpa_user/iova_domain.c b/drivers/vdpa/vdpa_user/iova_domain.c
index 0a9f668467a8..44e9babc0b54 100644
--- a/drivers/vdpa/vdpa_user/iova_domain.c
+++ b/drivers/vdpa/vdpa_user/iova_domain.c
@@ -25,7 +25,7 @@ static int vduse_iotlb_add_range(struct vduse_iova_domain *domain,
 	struct vdpa_map_file *map_file;
 	int ret;

-	map_file = kmalloc(sizeof(*map_file), GFP_ATOMIC);
+	map_file = kmalloc_obj(*map_file, GFP_ATOMIC);
 	if (!map_file)
 		return -ENOMEM;

@@ -622,7 +622,7 @@ vduse_domain_create(unsigned long iova_limit, size_t bounce_size)
 	if (iova_limit <= bounce_size)
 		return NULL;

-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain)
 		return NULL;

diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c
index 405d59610f76..7478aa8d5489 100644
--- a/drivers/vdpa/vdpa_user/vduse_dev.c
+++ b/drivers/vdpa/vdpa_user/vduse_dev.c
@@ -1232,7 +1232,7 @@ static int vduse_dev_reg_umem(struct vduse_dev *dev,
 	npages = size >> PAGE_SHIFT;
 	page_list = __vmalloc(array_size(npages, sizeof(struct page *)),
 			      GFP_KERNEL_ACCOUNT);
-	umem = kzalloc(sizeof(*umem), GFP_KERNEL);
+	umem = kzalloc_obj(*umem, GFP_KERNEL);
 	if (!page_list || !umem)
 		goto unlock;

@@ -1800,12 +1800,12 @@ static int vduse_dev_init_vqs(struct vduse_dev *dev, u32 vq_align, u32 vq_num)

 	dev->vq_align = vq_align;
 	dev->vq_num = vq_num;
-	dev->vqs = kcalloc(dev->vq_num, sizeof(*dev->vqs), GFP_KERNEL);
+	dev->vqs = kzalloc_objs(*dev->vqs, dev->vq_num, GFP_KERNEL);
 	if (!dev->vqs)
 		return -ENOMEM;

 	for (i = 0; i < vq_num; i++) {
-		dev->vqs[i] = kzalloc(sizeof(*dev->vqs[i]), GFP_KERNEL);
+		dev->vqs[i] = kzalloc_obj(*dev->vqs[i], GFP_KERNEL);
 		if (!dev->vqs[i]) {
 			ret = -ENOMEM;
 			goto err;
@@ -1839,7 +1839,7 @@ static int vduse_dev_init_vqs(struct vduse_dev *dev, u32 vq_align, u32 vq_num)

 static struct vduse_dev *vduse_dev_create(void)
 {
-	struct vduse_dev *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	struct vduse_dev *dev = kzalloc_obj(*dev, GFP_KERNEL);

 	if (!dev)
 		return NULL;
@@ -2076,7 +2076,7 @@ static int vduse_create_dev(struct vduse_dev_config *config,
 	dev->vendor_id = config->vendor_id;

 	dev->nas = (dev->api_version < VDUSE_API_VERSION_1) ? 1 : config->nas;
-	dev->as = kcalloc(dev->nas, sizeof(dev->as[0]), GFP_KERNEL);
+	dev->as = kzalloc_objs(dev->as[0], dev->nas, GFP_KERNEL);
 	if (!dev->as)
 		goto err_as;
 	for (int i = 0; i < dev->nas; i++)
@@ -2085,8 +2085,7 @@ static int vduse_create_dev(struct vduse_dev_config *config,
 	dev->ngroups = (dev->api_version < VDUSE_API_VERSION_1)
 		       ? 1
 		       : config->ngroups;
-	dev->groups = kcalloc(dev->ngroups, sizeof(dev->groups[0]),
-			      GFP_KERNEL);
+	dev->groups = kzalloc_objs(dev->groups[0], dev->ngroups, GFP_KERNEL);
 	if (!dev->groups)
 		goto err_vq_groups;
 	for (u32 i = 0; i < dev->ngroups; ++i) {
@@ -2227,7 +2226,7 @@ static int vduse_open(struct inode *inode, struct file *file)
 {
 	struct vduse_control *control;

-	control = kmalloc(sizeof(struct vduse_control), GFP_KERNEL);
+	control = kmalloc_obj(struct vduse_control, GFP_KERNEL);
 	if (!control)
 		return -ENOMEM;

@@ -2357,7 +2356,7 @@ static int vduse_mgmtdev_init(void)
 {
 	int ret;

-	vduse_mgmt = kzalloc(sizeof(*vduse_mgmt), GFP_KERNEL);
+	vduse_mgmt = kzalloc_obj(*vduse_mgmt, GFP_KERNEL);
 	if (!vduse_mgmt)
 		return -ENOMEM;

diff --git a/drivers/vdpa/virtio_pci/vp_vdpa.c b/drivers/vdpa/virtio_pci/vp_vdpa.c
index 17a19a728c9c..102f25ccfddf 100644
--- a/drivers/vdpa/virtio_pci/vp_vdpa.c
+++ b/drivers/vdpa/virtio_pci/vp_vdpa.c
@@ -608,7 +608,7 @@ static int vp_vdpa_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	struct virtio_device_id *mdev_id = NULL;
 	int err;

-	vp_vdpa_mgtdev = kzalloc(sizeof(*vp_vdpa_mgtdev), GFP_KERNEL);
+	vp_vdpa_mgtdev = kzalloc_obj(*vp_vdpa_mgtdev, GFP_KERNEL);
 	if (!vp_vdpa_mgtdev)
 		return -ENOMEM;

@@ -616,7 +616,7 @@ static int vp_vdpa_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	mgtdev->ops = &vp_vdpa_mdev_ops;
 	mgtdev->device = dev;

-	mdev = kzalloc(sizeof(struct virtio_pci_modern_device), GFP_KERNEL);
+	mdev = kzalloc_obj(struct virtio_pci_modern_device, GFP_KERNEL);
 	if (!mdev) {
 		err = -ENOMEM;
 		goto mdev_err;
@@ -626,7 +626,7 @@ static int vp_vdpa_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	 * id_table should be a null terminated array, so allocate one additional
 	 * entry here, see vdpa_mgmtdev_get_classes().
 	 */
-	mdev_id = kcalloc(2, sizeof(struct virtio_device_id), GFP_KERNEL);
+	mdev_id = kzalloc_objs(struct virtio_device_id, 2, GFP_KERNEL);
 	if (!mdev_id) {
 		err = -ENOMEM;
 		goto mdev_id_err;
diff --git a/drivers/vfio/cdx/intr.c b/drivers/vfio/cdx/intr.c
index 986fa2a45fa4..0ae39bda7c35 100644
--- a/drivers/vfio/cdx/intr.c
+++ b/drivers/vfio/cdx/intr.c
@@ -27,7 +27,7 @@ static int vfio_cdx_msi_enable(struct vfio_cdx_device *vdev, int nvec)
 	struct device *dev = vdev->vdev.dev;
 	int msi_idx, ret;

-	vdev->cdx_irqs = kcalloc(nvec, sizeof(struct vfio_cdx_irq), GFP_KERNEL);
+	vdev->cdx_irqs = kzalloc_objs(struct vfio_cdx_irq, nvec, GFP_KERNEL);
 	if (!vdev->cdx_irqs)
 		return -ENOMEM;

diff --git a/drivers/vfio/cdx/main.c b/drivers/vfio/cdx/main.c
index 253031b86b60..8ab97405b2bd 100644
--- a/drivers/vfio/cdx/main.c
+++ b/drivers/vfio/cdx/main.c
@@ -16,8 +16,8 @@ static int vfio_cdx_open_device(struct vfio_device *core_vdev)
 	int count = cdx_dev->res_count;
 	int i, ret;

-	vdev->regions = kcalloc(count, sizeof(struct vfio_cdx_region),
-				GFP_KERNEL_ACCOUNT);
+	vdev->regions = kzalloc_objs(struct vfio_cdx_region, count,
+				     GFP_KERNEL_ACCOUNT);
 	if (!vdev->regions)
 		return -ENOMEM;

diff --git a/drivers/vfio/container.c b/drivers/vfio/container.c
index d53d08f16973..937fc1de5965 100644
--- a/drivers/vfio/container.c
+++ b/drivers/vfio/container.c
@@ -95,7 +95,7 @@ int vfio_register_iommu_driver(const struct vfio_iommu_driver_ops *ops)
 	if (WARN_ON(!ops->register_device != !ops->unregister_device))
 		return -EINVAL;

-	driver = kzalloc(sizeof(*driver), GFP_KERNEL);
+	driver = kzalloc_obj(*driver, GFP_KERNEL);
 	if (!driver)
 		return -ENOMEM;

@@ -360,7 +360,7 @@ static int vfio_fops_open(struct inode *inode, struct file *filep)
 {
 	struct vfio_container *container;

-	container = kzalloc(sizeof(*container), GFP_KERNEL_ACCOUNT);
+	container = kzalloc_obj(*container, GFP_KERNEL_ACCOUNT);
 	if (!container)
 		return -ENOMEM;

diff --git a/drivers/vfio/fsl-mc/vfio_fsl_mc.c b/drivers/vfio/fsl-mc/vfio_fsl_mc.c
index 3985613e6830..462fae1aa538 100644
--- a/drivers/vfio/fsl-mc/vfio_fsl_mc.c
+++ b/drivers/vfio/fsl-mc/vfio_fsl_mc.c
@@ -27,8 +27,8 @@ static int vfio_fsl_mc_open_device(struct vfio_device *core_vdev)
 	int count = mc_dev->obj_desc.region_count;
 	int i;

-	vdev->regions = kcalloc(count, sizeof(struct vfio_fsl_mc_region),
-				GFP_KERNEL_ACCOUNT);
+	vdev->regions = kzalloc_objs(struct vfio_fsl_mc_region, count,
+				     GFP_KERNEL_ACCOUNT);
 	if (!vdev->regions)
 		return -ENOMEM;

diff --git a/drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c b/drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c
index 7e7988c4258f..d0fedd9aa7c5 100644
--- a/drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c
+++ b/drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c
@@ -29,7 +29,7 @@ static int vfio_fsl_mc_irqs_allocate(struct vfio_fsl_mc_device *vdev)

 	irq_count = mc_dev->obj_desc.irq_count;

-	mc_irq = kcalloc(irq_count, sizeof(*mc_irq), GFP_KERNEL_ACCOUNT);
+	mc_irq = kzalloc_objs(*mc_irq, irq_count, GFP_KERNEL_ACCOUNT);
 	if (!mc_irq)
 		return -ENOMEM;

diff --git a/drivers/vfio/group.c b/drivers/vfio/group.c
index d47ffada6912..868e69053050 100644
--- a/drivers/vfio/group.c
+++ b/drivers/vfio/group.c
@@ -515,7 +515,7 @@ static struct vfio_group *vfio_group_alloc(struct iommu_group *iommu_group,
 	struct vfio_group *group;
 	int minor;

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c
index f2e686f8f1ef..5b6ac30c02bf 100644
--- a/drivers/vfio/mdev/mdev_core.c
+++ b/drivers/vfio/mdev/mdev_core.c
@@ -154,7 +154,7 @@ int mdev_device_create(struct mdev_type *type, const guid_t *uuid)
 		atomic_dec(&parent->available_instances);
 	}

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev) {
 		mutex_unlock(&mdev_list_lock);
 		return -ENOMEM;
diff --git a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c
index e61df3fe0db9..68b3c1745609 100644
--- a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c
+++ b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c
@@ -831,7 +831,7 @@ hisi_acc_vf_pci_resume(struct hisi_acc_vf_core_device *hisi_acc_vdev)
 {
 	struct hisi_acc_vf_migration_file *migf;

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
+	migf = kzalloc_obj(*migf, GFP_KERNEL_ACCOUNT);
 	if (!migf)
 		return ERR_PTR(-ENOMEM);

@@ -953,7 +953,7 @@ hisi_acc_open_saving_migf(struct hisi_acc_vf_core_device *hisi_acc_vdev)
 	struct hisi_acc_vf_migration_file *migf;
 	int ret;

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
+	migf = kzalloc_obj(*migf, GFP_KERNEL_ACCOUNT);
 	if (!migf)
 		return ERR_PTR(-ENOMEM);

@@ -1498,7 +1498,7 @@ static int hisi_acc_vf_dev_read(struct seq_file *seq, void *data)
 	}

 	mutex_lock(&hisi_acc_vdev->state_mutex);
-	vf_data = kzalloc(sizeof(*vf_data), GFP_KERNEL);
+	vf_data = kzalloc_obj(*vf_data, GFP_KERNEL);
 	if (!vf_data) {
 		ret = -ENOMEM;
 		goto mutex_release;
@@ -1679,7 +1679,7 @@ static void hisi_acc_vfio_debug_init(struct hisi_acc_vf_core_device *hisi_acc_vd
 		return;
 	}

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL);
+	migf = kzalloc_obj(*migf, GFP_KERNEL);
 	if (!migf) {
 		dput(vfio_dev_migration);
 		return;
diff --git a/drivers/vfio/pci/mlx5/cmd.c b/drivers/vfio/pci/mlx5/cmd.c
index a92b095b90f6..ca6d95f293cd 100644
--- a/drivers/vfio/pci/mlx5/cmd.c
+++ b/drivers/vfio/pci/mlx5/cmd.c
@@ -492,7 +492,7 @@ static int mlx5vf_add_pages(struct page ***page_list, unsigned int npages)
 	int i;

 	*page_list =
-		kvcalloc(npages, sizeof(struct page *), GFP_KERNEL_ACCOUNT);
+		kvzalloc_objs(struct page *, npages, GFP_KERNEL_ACCOUNT);
 	if (!*page_list)
 		return -ENOMEM;

@@ -525,7 +525,7 @@ mlx5vf_alloc_data_buffer(struct mlx5_vf_migration_file *migf, u32 npages,
 	struct mlx5_vhca_data_buffer *buf;
 	int ret;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL_ACCOUNT);
+	buf = kzalloc_obj(*buf, GFP_KERNEL_ACCOUNT);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

@@ -1233,7 +1233,7 @@ mlx5vf_create_rc_qp(struct mlx5_core_dev *mdev,
 	void *in;
 	int err;

-	qp = kzalloc(sizeof(*qp), GFP_KERNEL_ACCOUNT);
+	qp = kzalloc_obj(*qp, GFP_KERNEL_ACCOUNT);
 	if (!qp)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/vfio/pci/mlx5/main.c b/drivers/vfio/pci/mlx5/main.c
index 9c5970411d07..dbba6173894b 100644
--- a/drivers/vfio/pci/mlx5/main.c
+++ b/drivers/vfio/pci/mlx5/main.c
@@ -608,7 +608,7 @@ mlx5vf_pci_save_device_data(struct mlx5vf_pci_core_device *mvdev, bool track)
 	u64 full_size;
 	int ret;

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
+	migf = kzalloc_obj(*migf, GFP_KERNEL_ACCOUNT);
 	if (!migf)
 		return ERR_PTR(-ENOMEM);

@@ -989,7 +989,7 @@ mlx5vf_pci_resume_device_data(struct mlx5vf_pci_core_device *mvdev)
 	struct mlx5_vhca_data_buffer *buf;
 	int ret;

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
+	migf = kzalloc_obj(*migf, GFP_KERNEL_ACCOUNT);
 	if (!migf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/vfio/pci/pds/dirty.c b/drivers/vfio/pci/pds/dirty.c
index 4915a7c1c491..7a218948c475 100644
--- a/drivers/vfio/pci/pds/dirty.c
+++ b/drivers/vfio/pci/pds/dirty.c
@@ -43,9 +43,8 @@ pds_vfio_print_guest_region_info(struct pds_vfio_pci_device *pds_vfio,
 	u8 num_regions;
 	int err;

-	region_info = kcalloc(max_regions,
-			      sizeof(struct pds_lm_dirty_region_info),
-			      GFP_KERNEL);
+	region_info = kzalloc_objs(struct pds_lm_dirty_region_info, max_regions,
+				   GFP_KERNEL);
 	if (!region_info)
 		return;

@@ -286,7 +285,7 @@ static int pds_vfio_dirty_enable(struct pds_vfio_pci_device *pds_vfio,
 		num_ranges = max_regions;
 	}

-	region_info = kcalloc(num_ranges, sizeof(*region_info), GFP_KERNEL);
+	region_info = kzalloc_objs(*region_info, num_ranges, GFP_KERNEL);
 	if (!region_info)
 		return -ENOMEM;
 	len = num_ranges * sizeof(*region_info);
@@ -398,7 +397,7 @@ static int pds_vfio_dirty_seq_ack(struct pds_vfio_pci_device *pds_vfio,
 	 * will be enough pages to represent the bmp_bytes
 	 */
 	npages = DIV_ROUND_UP_ULL(bmp_bytes + page_offset, PAGE_SIZE);
-	pages = kmalloc_array(npages, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, npages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

diff --git a/drivers/vfio/pci/pds/lm.c b/drivers/vfio/pci/pds/lm.c
index 4d70c833fa32..c9a21a049372 100644
--- a/drivers/vfio/pci/pds/lm.c
+++ b/drivers/vfio/pci/pds/lm.c
@@ -24,7 +24,7 @@ pds_vfio_get_lm_file(const struct file_operations *fops, int flags, u64 size)
 		return NULL;

 	/* Alloc file structure */
-	lm_file = kzalloc(sizeof(*lm_file), GFP_KERNEL);
+	lm_file = kzalloc_obj(*lm_file, GFP_KERNEL);
 	if (!lm_file)
 		return NULL;

@@ -42,7 +42,7 @@ pds_vfio_get_lm_file(const struct file_operations *fops, int flags, u64 size)

 	/* Allocate memory for file pages */
 	npages = DIV_ROUND_UP_ULL(size, PAGE_SIZE);
-	pages = kmalloc_array(npages, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, npages, GFP_KERNEL);
 	if (!pages)
 		goto out_put_file;

diff --git a/drivers/vfio/pci/qat/main.c b/drivers/vfio/pci/qat/main.c
index 8fbdf7c6d666..591349c2edc8 100644
--- a/drivers/vfio/pci/qat/main.c
+++ b/drivers/vfio/pci/qat/main.c
@@ -261,7 +261,7 @@ qat_vf_save_device_data(struct qat_vf_core_device *qat_vdev, bool pre_copy)
 	struct qat_vf_migration_file *migf;
 	int ret;

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL);
+	migf = kzalloc_obj(*migf, GFP_KERNEL);
 	if (!migf)
 		return ERR_PTR(-ENOMEM);

@@ -352,7 +352,7 @@ qat_vf_resume_device_data(struct qat_vf_core_device *qat_vdev)
 	struct qat_vf_migration_file *migf;
 	int ret;

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL);
+	migf = kzalloc_obj(*migf, GFP_KERNEL);
 	if (!migf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c
index dc4e510e6e1b..b4e39253f98d 100644
--- a/drivers/vfio/pci/vfio_pci_config.c
+++ b/drivers/vfio/pci/vfio_pci_config.c
@@ -1265,7 +1265,7 @@ static int vfio_msi_cap_len(struct vfio_pci_core_device *vdev, u8 pos)
 	if (vdev->msi_perm)
 		return len;

-	vdev->msi_perm = kmalloc(sizeof(struct perm_bits), GFP_KERNEL_ACCOUNT);
+	vdev->msi_perm = kmalloc_obj(struct perm_bits, GFP_KERNEL_ACCOUNT);
 	if (!vdev->msi_perm)
 		return -ENOMEM;

diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c
index 72c33b399800..10bfa76f06e5 100644
--- a/drivers/vfio/pci/vfio_pci_core.c
+++ b/drivers/vfio/pci/vfio_pci_core.c
@@ -61,7 +61,7 @@ int vfio_pci_eventfd_replace_locked(struct vfio_pci_core_device *vdev,
 	lockdep_assert_held(&vdev->igate);

 	if (ctx) {
-		new = kzalloc(sizeof(*new), GFP_KERNEL_ACCOUNT);
+		new = kzalloc_obj(*new, GFP_KERNEL_ACCOUNT);
 		if (!new)
 			return -ENOMEM;

@@ -175,8 +175,7 @@ static void vfio_pci_probe_mmaps(struct vfio_pci_core_device *vdev)
 			 * of the exclusive page in case that hot-add
 			 * device's bar is assigned into it.
 			 */
-			dummy_res =
-				kzalloc(sizeof(*dummy_res), GFP_KERNEL_ACCOUNT);
+			dummy_res = kzalloc_obj(*dummy_res, GFP_KERNEL_ACCOUNT);
 			if (dummy_res == NULL)
 				goto no_mmap;

@@ -1292,7 +1291,7 @@ static int vfio_pci_ioctl_get_pci_hot_reset_info(
 		goto header;
 	}

-	devices = kcalloc(count, sizeof(*devices), GFP_KERNEL);
+	devices = kzalloc_objs(*devices, count, GFP_KERNEL);
 	if (!devices)
 		return -ENOMEM;

@@ -1351,8 +1350,8 @@ vfio_pci_ioctl_pci_hot_reset_groups(struct vfio_pci_core_device *vdev,
 	if (array_count > count)
 		return -EINVAL;

-	group_fds = kcalloc(array_count, sizeof(*group_fds), GFP_KERNEL);
-	files = kcalloc(array_count, sizeof(*files), GFP_KERNEL);
+	group_fds = kzalloc_objs(*group_fds, array_count, GFP_KERNEL);
+	files = kzalloc_objs(*files, array_count, GFP_KERNEL);
 	if (!group_fds || !files) {
 		kfree(group_fds);
 		kfree(files);
@@ -2035,7 +2034,7 @@ static int vfio_pci_vf_init(struct vfio_pci_core_device *vdev)
 	if (!pdev->is_physfn)
 		return 0;

-	vdev->vf_token = kzalloc(sizeof(*vdev->vf_token), GFP_KERNEL);
+	vdev->vf_token = kzalloc_obj(*vdev->vf_token, GFP_KERNEL);
 	if (!vdev->vf_token)
 		return -ENOMEM;

diff --git a/drivers/vfio/pci/vfio_pci_dmabuf.c b/drivers/vfio/pci/vfio_pci_dmabuf.c
index 9918713d5774..abed6508cd83 100644
--- a/drivers/vfio/pci/vfio_pci_dmabuf.c
+++ b/drivers/vfio/pci/vfio_pci_dmabuf.c
@@ -246,13 +246,13 @@ int vfio_pci_core_feature_dma_buf(struct vfio_pci_core_device *vdev, u32 flags,
 	if (ret)
 		goto err_free_ranges;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv) {
 		ret = -ENOMEM;
 		goto err_free_ranges;
 	}
-	priv->phys_vec = kcalloc(get_dma_buf.nr_ranges, sizeof(*priv->phys_vec),
-				 GFP_KERNEL);
+	priv->phys_vec = kzalloc_objs(*priv->phys_vec, get_dma_buf.nr_ranges,
+				      GFP_KERNEL);
 	if (!priv->phys_vec) {
 		ret = -ENOMEM;
 		goto err_free_priv;
diff --git a/drivers/vfio/pci/vfio_pci_igd.c b/drivers/vfio/pci/vfio_pci_igd.c
index 988b6919c2c3..24f3118fc61b 100644
--- a/drivers/vfio/pci/vfio_pci_igd.c
+++ b/drivers/vfio/pci/vfio_pci_igd.c
@@ -180,7 +180,7 @@ static int vfio_pci_igd_opregion_init(struct vfio_pci_core_device *vdev)
 	if (!addr || !(~addr))
 		return -ENODEV;

-	opregionvbt = kzalloc(sizeof(*opregionvbt), GFP_KERNEL_ACCOUNT);
+	opregionvbt = kzalloc_obj(*opregionvbt, GFP_KERNEL_ACCOUNT);
 	if (!opregionvbt)
 		return -ENOMEM;

diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
index c76e753b3cec..33944d4d9dc4 100644
--- a/drivers/vfio/pci/vfio_pci_intrs.c
+++ b/drivers/vfio/pci/vfio_pci_intrs.c
@@ -69,7 +69,7 @@ vfio_irq_ctx_alloc(struct vfio_pci_core_device *vdev, unsigned long index)
 	struct vfio_pci_irq_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL_ACCOUNT);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL_ACCOUNT);
 	if (!ctx)
 		return NULL;

diff --git a/drivers/vfio/pci/vfio_pci_rdwr.c b/drivers/vfio/pci/vfio_pci_rdwr.c
index b38627b35c35..4251ee03e146 100644
--- a/drivers/vfio/pci/vfio_pci_rdwr.c
+++ b/drivers/vfio/pci/vfio_pci_rdwr.c
@@ -484,7 +484,7 @@ int vfio_pci_ioeventfd(struct vfio_pci_core_device *vdev, loff_t offset,
 		goto out_unlock;
 	}

-	ioeventfd = kzalloc(sizeof(*ioeventfd), GFP_KERNEL_ACCOUNT);
+	ioeventfd = kzalloc_obj(*ioeventfd, GFP_KERNEL_ACCOUNT);
 	if (!ioeventfd) {
 		ret = -ENOMEM;
 		goto out_unlock;
diff --git a/drivers/vfio/pci/virtio/migrate.c b/drivers/vfio/pci/virtio/migrate.c
index 7dd0ac866461..35fa2d6ed611 100644
--- a/drivers/vfio/pci/virtio/migrate.c
+++ b/drivers/vfio/pci/virtio/migrate.c
@@ -71,7 +71,7 @@ static int virtiovf_add_migration_pages(struct virtiovf_data_buffer *buf,
 	int i;

 	to_fill = min_t(unsigned int, npages, PAGE_SIZE / sizeof(*page_list));
-	page_list = kvcalloc(to_fill, sizeof(*page_list), GFP_KERNEL_ACCOUNT);
+	page_list = kvzalloc_objs(*page_list, to_fill, GFP_KERNEL_ACCOUNT);
 	if (!page_list)
 		return -ENOMEM;

@@ -124,7 +124,7 @@ virtiovf_alloc_data_buffer(struct virtiovf_migration_file *migf, size_t length)
 	struct virtiovf_data_buffer *buf;
 	int ret;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL_ACCOUNT);
+	buf = kzalloc_obj(*buf, GFP_KERNEL_ACCOUNT);
 	if (!buf)
 		return ERR_PTR(-ENOMEM);

@@ -676,7 +676,7 @@ virtiovf_pci_save_device_data(struct virtiovf_pci_core_device *virtvdev,
 	u32 obj_id;
 	int ret;

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
+	migf = kzalloc_obj(*migf, GFP_KERNEL_ACCOUNT);
 	if (!migf)
 		return ERR_PTR(-ENOMEM);

@@ -1066,7 +1066,7 @@ virtiovf_pci_resume_device_data(struct virtiovf_pci_core_device *virtvdev)
 	u32 obj_id;
 	int ret;

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
+	migf = kzalloc_obj(*migf, GFP_KERNEL_ACCOUNT);
 	if (!migf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/vfio/pci/xe/main.c b/drivers/vfio/pci/xe/main.c
index 2a5eb9260ec7..fff95b2d5dde 100644
--- a/drivers/vfio/pci/xe/main.c
+++ b/drivers/vfio/pci/xe/main.c
@@ -252,7 +252,7 @@ xe_vfio_pci_alloc_file(struct xe_vfio_pci_core_device *xe_vdev,
 	int flags;
 	int ret;

-	migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
+	migf = kzalloc_obj(*migf, GFP_KERNEL_ACCOUNT);
 	if (!migf)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/vfio/platform/vfio_platform_common.c b/drivers/vfio/platform/vfio_platform_common.c
index c2990b7e900f..c72db5a99ebd 100644
--- a/drivers/vfio/platform/vfio_platform_common.c
+++ b/drivers/vfio/platform/vfio_platform_common.c
@@ -141,8 +141,8 @@ static int vfio_platform_regions_init(struct vfio_platform_device *vdev)
 	while (vdev->get_resource(vdev, cnt))
 		cnt++;

-	vdev->regions = kcalloc(cnt, sizeof(struct vfio_platform_region),
-				GFP_KERNEL_ACCOUNT);
+	vdev->regions = kzalloc_objs(struct vfio_platform_region, cnt,
+				     GFP_KERNEL_ACCOUNT);
 	if (!vdev->regions)
 		return -ENOMEM;

diff --git a/drivers/vfio/platform/vfio_platform_irq.c b/drivers/vfio/platform/vfio_platform_irq.c
index ef41ecef83af..d16596e7f266 100644
--- a/drivers/vfio/platform/vfio_platform_irq.c
+++ b/drivers/vfio/platform/vfio_platform_irq.c
@@ -291,8 +291,8 @@ int vfio_platform_irq_init(struct vfio_platform_device *vdev)
 	while (vdev->get_irq(vdev, cnt) >= 0)
 		cnt++;

-	vdev->irqs = kcalloc(cnt, sizeof(struct vfio_platform_irq),
-			     GFP_KERNEL_ACCOUNT);
+	vdev->irqs = kzalloc_objs(struct vfio_platform_irq, cnt,
+				  GFP_KERNEL_ACCOUNT);
 	if (!vdev->irqs)
 		return -ENOMEM;

diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c
index 5f9e7e477078..3867928d2f49 100644
--- a/drivers/vfio/vfio_iommu_spapr_tce.c
+++ b/drivers/vfio/vfio_iommu_spapr_tce.c
@@ -159,7 +159,7 @@ static long tce_iommu_register_pages(struct tce_container *container,
 			return ret;
 	}

-	tcemem = kzalloc(sizeof(*tcemem), GFP_KERNEL);
+	tcemem = kzalloc_obj(*tcemem, GFP_KERNEL);
 	if (!tcemem) {
 		ret = -ENOMEM;
 		goto put_exit;
@@ -322,7 +322,7 @@ static void *tce_iommu_open(unsigned long arg)
 		return ERR_PTR(-EINVAL);
 	}

-	container = kzalloc(sizeof(*container), GFP_KERNEL);
+	container = kzalloc_obj(*container, GFP_KERNEL);
 	if (!container)
 		return ERR_PTR(-ENOMEM);

@@ -1290,7 +1290,7 @@ static int tce_iommu_attach_group(void *iommu_data,
 		}
 	}

-	tcegrp = kzalloc(sizeof(*tcegrp), GFP_KERNEL);
+	tcegrp = kzalloc_obj(*tcegrp, GFP_KERNEL);
 	if (!tcegrp) {
 		ret = -ENOMEM;
 		goto unlock_exit;
diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
index 5167bec14e36..aedbc2fecb23 100644
--- a/drivers/vfio/vfio_iommu_type1.c
+++ b/drivers/vfio/vfio_iommu_type1.c
@@ -388,7 +388,7 @@ static int vfio_add_to_pfn_list(struct vfio_dma *dma, dma_addr_t iova,
 {
 	struct vfio_pfn *vpfn;

-	vpfn = kzalloc(sizeof(*vpfn), GFP_KERNEL);
+	vpfn = kzalloc_obj(*vpfn, GFP_KERNEL);
 	if (!vpfn)
 		return -ENOMEM;

@@ -1097,7 +1097,7 @@ static size_t unmap_unpin_fast(struct vfio_domain *domain,
 			       struct iommu_iotlb_gather *iotlb_gather)
 {
 	size_t unmapped = 0;
-	struct vfio_regions *entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	struct vfio_regions *entry = kzalloc_obj(*entry, GFP_KERNEL);

 	if (entry) {
 		unmapped = iommu_unmap_fast(domain->domain, iova, len,
@@ -1753,7 +1753,7 @@ static int vfio_dma_do_map(struct vfio_iommu *iommu,
 		goto out_unlock;
 	}

-	dma = kzalloc(sizeof(*dma), GFP_KERNEL);
+	dma = kzalloc_obj(*dma, GFP_KERNEL);
 	if (!dma) {
 		ret = -ENOMEM;
 		goto out_unlock;
@@ -2017,7 +2017,7 @@ static int vfio_iommu_iova_insert(struct list_head *head,
 {
 	struct vfio_iova *region;

-	region = kmalloc(sizeof(*region), GFP_KERNEL);
+	region = kmalloc_obj(*region, GFP_KERNEL);
 	if (!region)
 		return -ENOMEM;

@@ -2259,7 +2259,7 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
 		goto out_unlock;

 	ret = -ENOMEM;
-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group)
 		goto out_unlock;
 	group->iommu_group = iommu_group;
@@ -2278,7 +2278,7 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
 	}

 	ret = -ENOMEM;
-	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+	domain = kzalloc_obj(*domain, GFP_KERNEL);
 	if (!domain)
 		goto out_free_group;

@@ -2625,7 +2625,7 @@ static void *vfio_iommu_type1_open(unsigned long arg)
 {
 	struct vfio_iommu *iommu;

-	iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
+	iommu = kzalloc_obj(*iommu, GFP_KERNEL);
 	if (!iommu)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c
index f7df90c423b4..0028abdfe3cb 100644
--- a/drivers/vfio/vfio_main.c
+++ b/drivers/vfio/vfio_main.c
@@ -82,7 +82,7 @@ int vfio_assign_device_set(struct vfio_device *device, void *set_id)
 		goto found_get_ref;
 	xa_unlock(&vfio_device_set_xa);

-	new_dev_set = kzalloc(sizeof(*new_dev_set), GFP_KERNEL);
+	new_dev_set = kzalloc_obj(*new_dev_set, GFP_KERNEL);
 	if (!new_dev_set)
 		return -ENOMEM;
 	mutex_init(&new_dev_set->lock);
@@ -495,7 +495,7 @@ vfio_allocate_device_file(struct vfio_device *device)
 {
 	struct vfio_device_file *df;

-	df = kzalloc(sizeof(*df), GFP_KERNEL_ACCOUNT);
+	df = kzalloc_obj(*df, GFP_KERNEL_ACCOUNT);
 	if (!df)
 		return ERR_PTR(-ENOMEM);

@@ -1083,8 +1083,7 @@ vfio_ioctl_device_feature_logging_start(struct vfio_device *device,
 		return -E2BIG;

 	ranges = u64_to_user_ptr(control.ranges);
-	nodes = kmalloc_array(nnodes, sizeof(struct interval_tree_node),
-			      GFP_KERNEL);
+	nodes = kmalloc_objs(struct interval_tree_node, nnodes, GFP_KERNEL);
 	if (!nodes)
 		return -ENOMEM;

diff --git a/drivers/vfio/virqfd.c b/drivers/vfio/virqfd.c
index aa2891f97508..59105a0ace4c 100644
--- a/drivers/vfio/virqfd.c
+++ b/drivers/vfio/virqfd.c
@@ -118,7 +118,7 @@ int vfio_virqfd_enable(void *opaque,
 	int ret = 0;
 	__poll_t events;

-	virqfd = kzalloc(sizeof(*virqfd), GFP_KERNEL_ACCOUNT);
+	virqfd = kzalloc_obj(*virqfd, GFP_KERNEL_ACCOUNT);
 	if (!virqfd)
 		return -ENOMEM;

diff --git a/drivers/vhost/iotlb.c b/drivers/vhost/iotlb.c
index ea61330a3431..6528d084f42d 100644
--- a/drivers/vhost/iotlb.c
+++ b/drivers/vhost/iotlb.c
@@ -79,7 +79,7 @@ int vhost_iotlb_add_range_ctx(struct vhost_iotlb *iotlb,
 		vhost_iotlb_map_free(iotlb, map);
 	}

-	map = kmalloc(sizeof(*map), GFP_ATOMIC);
+	map = kmalloc_obj(*map, GFP_ATOMIC);
 	if (!map)
 		return -ENOMEM;

@@ -151,7 +151,7 @@ EXPORT_SYMBOL_GPL(vhost_iotlb_init);
  */
 struct vhost_iotlb *vhost_iotlb_alloc(unsigned int limit, unsigned int flags)
 {
-	struct vhost_iotlb *iotlb = kzalloc(sizeof(*iotlb), GFP_KERNEL);
+	struct vhost_iotlb *iotlb = kzalloc_obj(*iotlb, GFP_KERNEL);

 	if (!iotlb)
 		return NULL;
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 7f886d3dba7d..440d959b6e24 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -240,7 +240,7 @@ vhost_net_ubuf_alloc(struct vhost_virtqueue *vq, bool zcopy)
 	/* No zero copy backend? Nothing to count. */
 	if (!zcopy)
 		return NULL;
-	ubufs = kmalloc(sizeof(*ubufs), GFP_KERNEL);
+	ubufs = kmalloc_obj(*ubufs, GFP_KERNEL);
 	if (!ubufs)
 		return ERR_PTR(-ENOMEM);
 	atomic_set(&ubufs->refcount, 1);
@@ -293,9 +293,8 @@ static int vhost_net_set_ubuf_info(struct vhost_net *n)
 		if (!zcopy)
 			continue;
 		n->vqs[i].ubuf_info =
-			kmalloc_array(UIO_MAXIOV,
-				      sizeof(*n->vqs[i].ubuf_info),
-				      GFP_KERNEL);
+			kmalloc_objs(*n->vqs[i].ubuf_info, UIO_MAXIOV,
+				     GFP_KERNEL);
 		if  (!n->vqs[i].ubuf_info)
 			goto err;
 	}
@@ -1328,10 +1327,10 @@ static int vhost_net_open(struct inode *inode, struct file *f)
 	struct xdp_buff *xdp;
 	int i;

-	n = kvmalloc(sizeof *n, GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	n = kvmalloc_obj(*n, GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!n)
 		return -ENOMEM;
-	vqs = kmalloc_array(VHOST_NET_VQ_MAX, sizeof(*vqs), GFP_KERNEL);
+	vqs = kmalloc_objs(*vqs, VHOST_NET_VQ_MAX, GFP_KERNEL);
 	if (!vqs) {
 		kvfree(n);
 		return -ENOMEM;
@@ -1346,7 +1345,7 @@ static int vhost_net_open(struct inode *inode, struct file *f)
 	}
 	n->vqs[VHOST_NET_VQ_RX].rxq.queue = queue;

-	xdp = kmalloc_array(VHOST_NET_BATCH, sizeof(*xdp), GFP_KERNEL);
+	xdp = kmalloc_objs(*xdp, VHOST_NET_BATCH, GFP_KERNEL);
 	if (!xdp) {
 		kfree(vqs);
 		kvfree(n);
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
index f43c1fe9fad9..36ed704562d7 100644
--- a/drivers/vhost/scsi.c
+++ b/drivers/vhost/scsi.c
@@ -382,9 +382,8 @@ static int vhost_scsi_copy_cmd_log(struct vhost_virtqueue *vq,
 				   unsigned int log_num)
 {
 	if (!cmd->tvc_log)
-		cmd->tvc_log = kmalloc_array(vq->dev->iov_limit,
-					     sizeof(*cmd->tvc_log),
-					     GFP_KERNEL);
+		cmd->tvc_log = kmalloc_objs(*cmd->tvc_log, vq->dev->iov_limit,
+					    GFP_KERNEL);

 	if (unlikely(!cmd->tvc_log)) {
 		vq_err(vq, "Failed to alloc tvc_log\n");
@@ -549,7 +548,7 @@ vhost_scsi_allocate_evt(struct vhost_scsi *vs,
 		return NULL;
 	}

-	evt = kzalloc(sizeof(*evt), GFP_KERNEL);
+	evt = kzalloc_obj(*evt, GFP_KERNEL);
 	if (!evt) {
 		vq_err(vq, "Failed to allocate vhost_scsi_evt\n");
 		vs->vs_events_missed = true;
@@ -897,7 +896,7 @@ vhost_scsi_copy_iov_to_sgl(struct vhost_scsi_cmd *cmd, struct iov_iter *iter,
 	int i, ret;

 	if (data_dir == DMA_FROM_DEVICE) {
-		cmd->read_iter = kzalloc(sizeof(*cmd->read_iter), GFP_KERNEL);
+		cmd->read_iter = kzalloc_obj(*cmd->read_iter, GFP_KERNEL);
 		if (!cmd->read_iter)
 			return -ENOMEM;

@@ -1264,8 +1263,7 @@ vhost_scsi_setup_resp_iovs(struct vhost_scsi_cmd *cmd, struct iovec *in_iovs,
 		 * iov per byte.
 		 */
 		cnt = min(VHOST_SCSI_MAX_RESP_IOVS, in_iovs_cnt);
-		cmd->tvc_resp_iovs = kcalloc(cnt, sizeof(struct iovec),
-					     GFP_KERNEL);
+		cmd->tvc_resp_iovs = kzalloc_objs(struct iovec, cnt, GFP_KERNEL);
 		if (!cmd->tvc_resp_iovs)
 			return -ENOMEM;

@@ -1603,7 +1601,7 @@ vhost_scsi_handle_tmf(struct vhost_scsi *vs, struct vhost_scsi_tpg *tpg,
 		goto send_reject;
 	}

-	tmf = kzalloc(sizeof(*tmf), GFP_KERNEL);
+	tmf = kzalloc_obj(*tmf, GFP_KERNEL);
 	if (!tmf)
 		goto send_reject;

@@ -1617,8 +1615,7 @@ vhost_scsi_handle_tmf(struct vhost_scsi *vs, struct vhost_scsi_tpg *tpg,
 	tmf->inflight = vhost_scsi_get_inflight(vq);

 	if (unlikely(log && log_num)) {
-		tmf->tmf_log = kmalloc_array(log_num, sizeof(*tmf->tmf_log),
-					     GFP_KERNEL);
+		tmf->tmf_log = kmalloc_objs(*tmf->tmf_log, log_num, GFP_KERNEL);
 		if (tmf->tmf_log) {
 			memcpy(tmf->tmf_log, log, sizeof(*tmf->tmf_log) * log_num);
 			tmf->tmf_log_num = log_num;
@@ -1936,14 +1933,14 @@ static int vhost_scsi_setup_vq_cmds(struct vhost_virtqueue *vq, int max_cmds)
 		return -ENOMEM;
 	svq->max_cmds = max_cmds;

-	svq->scsi_cmds = kcalloc(max_cmds, sizeof(*tv_cmd), GFP_KERNEL);
+	svq->scsi_cmds = kzalloc_objs(*tv_cmd, max_cmds, GFP_KERNEL);
 	if (!svq->scsi_cmds) {
 		sbitmap_free(&svq->scsi_tags);
 		return -ENOMEM;
 	}

-	svq->upages = kcalloc(VHOST_SCSI_PREALLOC_UPAGES, sizeof(struct page *),
-			      GFP_KERNEL);
+	svq->upages = kzalloc_objs(struct page *, VHOST_SCSI_PREALLOC_UPAGES,
+				   GFP_KERNEL);
 	if (!svq->upages)
 		goto out;

@@ -1951,9 +1948,9 @@ static int vhost_scsi_setup_vq_cmds(struct vhost_virtqueue *vq, int max_cmds)
 		tv_cmd = &svq->scsi_cmds[i];

 		if (vs->inline_sg_cnt) {
-			tv_cmd->sgl = kcalloc(vs->inline_sg_cnt,
-					      sizeof(struct scatterlist),
-					      GFP_KERNEL);
+			tv_cmd->sgl = kzalloc_objs(struct scatterlist,
+						   vs->inline_sg_cnt,
+						   GFP_KERNEL);
 			if (!tv_cmd->sgl) {
 				pr_err("Unable to allocate tv_cmd->sgl\n");
 				goto out;
@@ -1962,9 +1959,9 @@ static int vhost_scsi_setup_vq_cmds(struct vhost_virtqueue *vq, int max_cmds)

 		if (vhost_has_feature(vq, VIRTIO_SCSI_F_T10_PI) &&
 		    vs->inline_sg_cnt) {
-			tv_cmd->prot_sgl = kcalloc(vs->inline_sg_cnt,
-						   sizeof(struct scatterlist),
-						   GFP_KERNEL);
+			tv_cmd->prot_sgl = kzalloc_objs(struct scatterlist,
+							vs->inline_sg_cnt,
+							GFP_KERNEL);
 			if (!tv_cmd->prot_sgl) {
 				pr_err("Unable to allocate tv_cmd->prot_sgl\n");
 				goto out;
@@ -2282,7 +2279,7 @@ static int vhost_scsi_open(struct inode *inode, struct file *f)
 	struct vhost_virtqueue **vqs;
 	int r = -ENOMEM, i, nvqs = vhost_scsi_max_io_vqs;

-	vs = kvzalloc(sizeof(*vs), GFP_KERNEL);
+	vs = kvzalloc_obj(*vs, GFP_KERNEL);
 	if (!vs)
 		goto err_vs;
 	vs->inline_sg_cnt = vhost_scsi_inline_sg_cnt;
@@ -2297,17 +2294,16 @@ static int vhost_scsi_open(struct inode *inode, struct file *f)
 	}
 	nvqs += VHOST_SCSI_VQ_IO;

-	vs->old_inflight = kmalloc_array(nvqs, sizeof(*vs->old_inflight),
-					 GFP_KERNEL | __GFP_ZERO);
+	vs->old_inflight = kmalloc_objs(*vs->old_inflight, nvqs,
+					GFP_KERNEL | __GFP_ZERO);
 	if (!vs->old_inflight)
 		goto err_inflight;

-	vs->vqs = kmalloc_array(nvqs, sizeof(*vs->vqs),
-				GFP_KERNEL | __GFP_ZERO);
+	vs->vqs = kmalloc_objs(*vs->vqs, nvqs, GFP_KERNEL | __GFP_ZERO);
 	if (!vs->vqs)
 		goto err_vqs;

-	vqs = kmalloc_array(nvqs, sizeof(*vqs), GFP_KERNEL);
+	vqs = kmalloc_objs(*vqs, nvqs, GFP_KERNEL);
 	if (!vqs)
 		goto err_local_vqs;

@@ -2603,7 +2599,7 @@ static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg,
 		return -EEXIST;
 	}

-	tv_nexus = kzalloc(sizeof(*tv_nexus), GFP_KERNEL);
+	tv_nexus = kzalloc_obj(*tv_nexus, GFP_KERNEL);
 	if (!tv_nexus) {
 		mutex_unlock(&tpg->tv_tpg_mutex);
 		pr_err("Unable to allocate struct vhost_scsi_nexus\n");
@@ -2798,7 +2794,7 @@ vhost_scsi_make_tpg(struct se_wwn *wwn, const char *name)
 	if (kstrtou16(name + 5, 10, &tpgt) || tpgt >= VHOST_SCSI_MAX_TARGET)
 		return ERR_PTR(-EINVAL);

-	tpg = kzalloc(sizeof(*tpg), GFP_KERNEL);
+	tpg = kzalloc_obj(*tpg, GFP_KERNEL);
 	if (!tpg) {
 		pr_err("Unable to allocate struct vhost_scsi_tpg");
 		return ERR_PTR(-ENOMEM);
@@ -2852,7 +2848,7 @@ vhost_scsi_make_tport(struct target_fabric_configfs *tf,
 	/* if (vhost_scsi_parse_wwn(name, &wwpn, 1) < 0)
 		return ERR_PTR(-EINVAL); */

-	tport = kzalloc(sizeof(*tport), GFP_KERNEL);
+	tport = kzalloc_obj(*tport, GFP_KERNEL);
 	if (!tport) {
 		pr_err("Unable to allocate struct vhost_scsi_tport");
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/vhost/test.c b/drivers/vhost/test.c
index 1e4e36edbcd2..fc11a048a620 100644
--- a/drivers/vhost/test.c
+++ b/drivers/vhost/test.c
@@ -110,13 +110,13 @@ static void handle_vq_kick(struct vhost_work *work)

 static int vhost_test_open(struct inode *inode, struct file *f)
 {
-	struct vhost_test *n = kmalloc(sizeof *n, GFP_KERNEL);
+	struct vhost_test *n = kmalloc_obj(*n, GFP_KERNEL);
 	struct vhost_dev *dev;
 	struct vhost_virtqueue **vqs;

 	if (!n)
 		return -ENOMEM;
-	vqs = kmalloc_array(VHOST_TEST_VQ_MAX, sizeof(*vqs), GFP_KERNEL);
+	vqs = kmalloc_objs(*vqs, VHOST_TEST_VQ_MAX, GFP_KERNEL);
 	if (!vqs) {
 		kfree(n);
 		return -ENOMEM;
diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
index cdee8f320dca..a9f85f05874f 100644
--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -110,7 +110,7 @@ static struct vhost_vdpa_as *vhost_vdpa_alloc_as(struct vhost_vdpa *v, u32 asid)
 	if (asid >= v->vdpa->nas)
 		return NULL;

-	as = kmalloc(sizeof(*as), GFP_KERNEL);
+	as = kmalloc_obj(*as, GFP_KERNEL);
 	if (!as)
 		return NULL;

@@ -1064,7 +1064,7 @@ static int vhost_vdpa_va_map(struct vhost_vdpa *v,
 			!(vma->vm_flags & (VM_IO | VM_PFNMAP))))
 			goto next;

-		map_file = kzalloc(sizeof(*map_file), GFP_KERNEL);
+		map_file = kzalloc_obj(*map_file, GFP_KERNEL);
 		if (!map_file) {
 			ret = -ENOMEM;
 			break;
@@ -1420,7 +1420,7 @@ static int vhost_vdpa_open(struct inode *inode, struct file *filep)
 	if (r)
 		goto err;

-	vqs = kmalloc_array(nvqs, sizeof(*vqs), GFP_KERNEL);
+	vqs = kmalloc_objs(*vqs, nvqs, GFP_KERNEL);
 	if (!vqs) {
 		r = -ENOMEM;
 		goto err;
@@ -1572,7 +1572,7 @@ static int vhost_vdpa_probe(struct vdpa_device *vdpa)
 	    (vdpa->ngroups > 1 || vdpa->nas > 1))
 		return -EOPNOTSUPP;

-	v = kzalloc(sizeof(*v), GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	v = kzalloc_obj(*v, GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!v)
 		return -ENOMEM;

@@ -1593,8 +1593,7 @@ static int vhost_vdpa_probe(struct vdpa_device *vdpa)
 	v->dev.release = vhost_vdpa_release_dev;
 	v->dev.parent = &vdpa->dev;
 	v->dev.devt = MKDEV(MAJOR(vhost_vdpa_major), minor);
-	v->vqs = kmalloc_array(v->nvqs, sizeof(struct vhost_virtqueue),
-			       GFP_KERNEL);
+	v->vqs = kmalloc_objs(struct vhost_virtqueue, v->nvqs, GFP_KERNEL);
 	if (!v->vqs) {
 		r = -ENOMEM;
 		goto err;
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index fcf7f10adbbf..dafbc3dd3805 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -514,13 +514,10 @@ static long vhost_dev_alloc_iovecs(struct vhost_dev *dev)

 	for (i = 0; i < dev->nvqs; ++i) {
 		vq = dev->vqs[i];
-		vq->indirect = kmalloc_array(UIO_MAXIOV,
-					     sizeof(*vq->indirect),
-					     GFP_KERNEL);
-		vq->log = kmalloc_array(dev->iov_limit, sizeof(*vq->log),
-					GFP_KERNEL);
-		vq->heads = kmalloc_array(dev->iov_limit, sizeof(*vq->heads),
-					  GFP_KERNEL);
+		vq->indirect = kmalloc_objs(*vq->indirect, UIO_MAXIOV,
+					    GFP_KERNEL);
+		vq->log = kmalloc_objs(*vq->log, dev->iov_limit, GFP_KERNEL);
+		vq->heads = kmalloc_objs(*vq->heads, dev->iov_limit, GFP_KERNEL);
 		vq->nheads = kmalloc_array(dev->iov_limit, sizeof(*vq->nheads),
 					   GFP_KERNEL);
 		if (!vq->indirect || !vq->log || !vq->heads || !vq->nheads)
@@ -836,7 +833,7 @@ static struct vhost_worker *vhost_worker_create(struct vhost_dev *dev)
 	const struct vhost_worker_ops *ops = dev->fork_owner ? &vhost_task_ops :
 							       &kthread_ops;

-	worker = kzalloc(sizeof(*worker), GFP_KERNEL_ACCOUNT);
+	worker = kzalloc_obj(*worker, GFP_KERNEL_ACCOUNT);
 	if (!worker)
 		return NULL;

@@ -1982,8 +1979,7 @@ static long vhost_set_memory(struct vhost_dev *d, struct vhost_memory __user *m)
 		return -EOPNOTSUPP;
 	if (mem.nregions > max_mem_regions)
 		return -E2BIG;
-	newmem = kvzalloc(struct_size(newmem, regions, mem.nregions),
-			GFP_KERNEL);
+	newmem = kvzalloc_flex(*newmem, regions, mem.nregions, GFP_KERNEL);
 	if (!newmem)
 		return -ENOMEM;

@@ -3272,7 +3268,7 @@ EXPORT_SYMBOL_GPL(vhost_disable_notify);
 struct vhost_msg_node *vhost_new_msg(struct vhost_virtqueue *vq, int type)
 {
 	/* Make sure all padding within the structure is initialized. */
-	struct vhost_msg_node *node = kzalloc(sizeof(*node), GFP_KERNEL);
+	struct vhost_msg_node *node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return NULL;

diff --git a/drivers/vhost/vringh.c b/drivers/vhost/vringh.c
index 925858cc6096..9066f9f12ba1 100644
--- a/drivers/vhost/vringh.c
+++ b/drivers/vhost/vringh.c
@@ -227,7 +227,7 @@ static int resize_iovec(struct vringh_kiov *iov, gfp_t gfp)
 	if (flag)
 		new = krealloc_array(iov->iov, new_num, sizeof(*new), gfp);
 	else {
-		new = kmalloc_array(new_num, sizeof(*new), gfp);
+		new = kmalloc_objs(*new, new_num, gfp);
 		if (new) {
 			memcpy(new, iov->iov,
 			       iov->max_num * sizeof(struct iovec));
diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
index 488d7fa6e4ec..0bb4e3fdc71c 100644
--- a/drivers/vhost/vsock.c
+++ b/drivers/vhost/vsock.c
@@ -676,11 +676,11 @@ static int vhost_vsock_dev_open(struct inode *inode, struct file *file)
 	/* This struct is large and allocation could fail, fall back to vmalloc
 	 * if there is no other way.
 	 */
-	vsock = kvmalloc(sizeof(*vsock), GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	vsock = kvmalloc_obj(*vsock, GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!vsock)
 		return -ENOMEM;

-	vqs = kmalloc_array(ARRAY_SIZE(vsock->vqs), sizeof(*vqs), GFP_KERNEL);
+	vqs = kmalloc_objs(*vqs, ARRAY_SIZE(vsock->vqs), GFP_KERNEL);
 	if (!vqs) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
index 1e9b7e85d99a..c6e155a150a5 100644
--- a/drivers/video/backlight/backlight.c
+++ b/drivers/video/backlight/backlight.c
@@ -371,7 +371,7 @@ struct backlight_device *backlight_device_register(const char *name,

 	pr_debug("backlight_device_register: name=%s\n", name);

-	new_bd = kzalloc(sizeof(struct backlight_device), GFP_KERNEL);
+	new_bd = kzalloc_obj(struct backlight_device, GFP_KERNEL);
 	if (!new_bd)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
index affe5c52471a..d33c4f370075 100644
--- a/drivers/video/backlight/lcd.c
+++ b/drivers/video/backlight/lcd.c
@@ -197,7 +197,7 @@ struct lcd_device *lcd_device_register(const char *name, struct device *parent,

 	pr_debug("lcd_device_register: name=%s\n", name);

-	new_ld = kzalloc(sizeof(struct lcd_device), GFP_KERNEL);
+	new_ld = kzalloc_obj(struct lcd_device, GFP_KERNEL);
 	if (!new_ld)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c
index f1f3ee8e5e8a..98df1ddfd1e9 100644
--- a/drivers/video/console/sticon.c
+++ b/drivers/video/console/sticon.c
@@ -186,7 +186,7 @@ static int sticon_set_font(struct vc_data *vc, const struct console_font *op,
 	new_font->underline_height = 0;
 	new_font->underline_pos = 0;

-	cooked_font = kzalloc(sizeof(*cooked_font), GFP_KERNEL);
+	cooked_font = kzalloc_obj(*cooked_font, GFP_KERNEL);
 	if (!cooked_font) {
 		kfree(new_font);
 		return -ENOMEM;
diff --git a/drivers/video/fbdev/arkfb.c b/drivers/video/fbdev/arkfb.c
index ec084323115f..990e8038ffb3 100644
--- a/drivers/video/fbdev/arkfb.c
+++ b/drivers/video/fbdev/arkfb.c
@@ -431,7 +431,8 @@ static struct dac_ops ics5342_ops = {

 static struct dac_info * ics5342_init(dac_read_regs_t drr, dac_write_regs_t dwr, void *data)
 {
-	struct ics5342_info *ics_info = kzalloc(sizeof(struct ics5342_info), GFP_KERNEL);
+	struct ics5342_info *ics_info = kzalloc_obj(struct ics5342_info,
+						    GFP_KERNEL);
 	struct dac_info *info = &ics_info->dac;

 	if (!ics_info)
diff --git a/drivers/video/fbdev/aty/atyfb_base.c b/drivers/video/fbdev/aty/atyfb_base.c
index 56ef1d88e003..d5e107730a4d 100644
--- a/drivers/video/fbdev/aty/atyfb_base.c
+++ b/drivers/video/fbdev/aty/atyfb_base.c
@@ -2976,7 +2976,7 @@ static int atyfb_setup_sparc(struct pci_dev *pdev, struct fb_info *info,
 		/* nothing */ ;
 	j = i + 4;

-	par->mmap_map = kcalloc(j, sizeof(*par->mmap_map), GFP_ATOMIC);
+	par->mmap_map = kzalloc_objs(*par->mmap_map, j, GFP_ATOMIC);
 	if (!par->mmap_map) {
 		PRINTKE("atyfb_setup_sparc() can't alloc mmap_map\n");
 		return -ENOMEM;
diff --git a/drivers/video/fbdev/aty/radeon_backlight.c b/drivers/video/fbdev/aty/radeon_backlight.c
index bf764c92bcf1..908b2be850ac 100644
--- a/drivers/video/fbdev/aty/radeon_backlight.c
+++ b/drivers/video/fbdev/aty/radeon_backlight.c
@@ -136,7 +136,7 @@ void radeonfb_bl_init(struct radeonfb_info *rinfo)
 		return;
 #endif

-	pdata = kmalloc(sizeof(struct radeon_bl_privdata), GFP_KERNEL);
+	pdata = kmalloc_obj(struct radeon_bl_privdata, GFP_KERNEL);
 	if (!pdata) {
 		printk("radeonfb: Memory allocation failed\n");
 		goto error;
diff --git a/drivers/video/fbdev/aty/radeon_base.c b/drivers/video/fbdev/aty/radeon_base.c
index 1d2c57ba25a3..979e8eb6cda4 100644
--- a/drivers/video/fbdev/aty/radeon_base.c
+++ b/drivers/video/fbdev/aty/radeon_base.c
@@ -1653,7 +1653,7 @@ static int radeonfb_set_par(struct fb_info *info)
 	int depth = var_to_depth(mode);
 	int use_rmx = 0;

-	newmode = kmalloc(sizeof(struct radeon_regs), GFP_KERNEL);
+	newmode = kmalloc_obj(struct radeon_regs, GFP_KERNEL);
 	if (!newmode)
 		return -ENOMEM;

diff --git a/drivers/video/fbdev/carminefb.c b/drivers/video/fbdev/carminefb.c
index 2bdd67595891..82836c327f05 100644
--- a/drivers/video/fbdev/carminefb.c
+++ b/drivers/video/fbdev/carminefb.c
@@ -620,7 +620,7 @@ static int carminefb_probe(struct pci_dev *dev, const struct pci_device_id *ent)
 		return ret;

 	ret = -ENOMEM;
-	hw = kzalloc(sizeof *hw, GFP_KERNEL);
+	hw = kzalloc_obj(*hw, GFP_KERNEL);
 	if (!hw)
 		goto err_enable_pci;

diff --git a/drivers/video/fbdev/controlfb.c b/drivers/video/fbdev/controlfb.c
index 5c5284e8ae0e..b589f46178a2 100644
--- a/drivers/video/fbdev/controlfb.c
+++ b/drivers/video/fbdev/controlfb.c
@@ -944,7 +944,7 @@ static int __init control_of_init(struct device_node *dp)
 		printk(KERN_ERR "can't get 2 addresses for control\n");
 		return -ENXIO;
 	}
-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;
 	control_fb = p;	/* save it for cleanups */
diff --git a/drivers/video/fbdev/core/fb_defio.c b/drivers/video/fbdev/core/fb_defio.c
index 8df2e51e3390..2b2604255b90 100644
--- a/drivers/video/fbdev/core/fb_defio.c
+++ b/drivers/video/fbdev/core/fb_defio.c
@@ -307,7 +307,7 @@ int fb_deferred_io_init(struct fb_info *info)
 	npagerefs = DIV_ROUND_UP(info->fix.smem_len, PAGE_SIZE);

 	/* alloc a page ref for each page of the display memory */
-	pagerefs = kvcalloc(npagerefs, sizeof(*pagerefs), GFP_KERNEL);
+	pagerefs = kvzalloc_objs(*pagerefs, npagerefs, GFP_KERNEL);
 	if (!pagerefs) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 98387c42e4e5..29ed5b152ac6 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -769,7 +769,7 @@ static int fbcon_open(struct fb_info *info)
 	}
 	unlock_fb_info(info);

-	par = kzalloc(sizeof(*par), GFP_KERNEL);
+	par = kzalloc_obj(*par, GFP_KERNEL);
 	if (!par) {
 		fbcon_release(info);
 		return -ENOMEM;
diff --git a/drivers/video/fbdev/core/fbmon.c b/drivers/video/fbdev/core/fbmon.c
index 07df7e98f8a3..67ccb5607ded 100644
--- a/drivers/video/fbdev/core/fbmon.c
+++ b/drivers/video/fbdev/core/fbmon.c
@@ -388,7 +388,7 @@ static void calc_mode_timings(int xres, int yres, int refresh,
 {
 	struct fb_var_screeninfo *var;

-	var = kzalloc(sizeof(struct fb_var_screeninfo), GFP_KERNEL);
+	var = kzalloc_obj(struct fb_var_screeninfo, GFP_KERNEL);

 	if (var) {
 		var->xres = xres;
@@ -626,7 +626,7 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize,
 	int num = 0, i, first = 1;
 	int ver, rev;

-	mode = kcalloc(50, sizeof(struct fb_videomode), GFP_KERNEL);
+	mode = kzalloc_objs(struct fb_videomode, 50, GFP_KERNEL);
 	if (mode == NULL)
 		return NULL;

@@ -677,7 +677,7 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize,
 	}

 	*dbsize = num;
-	m = kmalloc_array(num, sizeof(struct fb_videomode), GFP_KERNEL);
+	m = kmalloc_objs(struct fb_videomode, num, GFP_KERNEL);
 	if (!m)
 		return mode;
 	memmove(m, mode, num * sizeof(struct fb_videomode));
@@ -1224,7 +1224,7 @@ int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var, struct fb_inf
 	u32 hfmin, hfmax, vfmin, vfmax, dclkmin, dclkmax, err = 0;


-	timings = kzalloc(sizeof(struct __fb_timings), GFP_KERNEL);
+	timings = kzalloc_obj(struct __fb_timings, GFP_KERNEL);

 	if (!timings)
 		return -ENOMEM;
diff --git a/drivers/video/fbdev/core/modedb.c b/drivers/video/fbdev/core/modedb.c
index 53a610948c4a..fda6066eec99 100644
--- a/drivers/video/fbdev/core/modedb.c
+++ b/drivers/video/fbdev/core/modedb.c
@@ -1070,8 +1070,7 @@ int fb_add_videomode(const struct fb_videomode *mode, struct list_head *head)
 		}
 	}
 	if (!found) {
-		modelist = kmalloc(sizeof(struct fb_modelist),
-						  GFP_KERNEL);
+		modelist = kmalloc_obj(struct fb_modelist, GFP_KERNEL);

 		if (!modelist)
 			return -ENOMEM;
diff --git a/drivers/video/fbdev/cyber2000fb.c b/drivers/video/fbdev/cyber2000fb.c
index 5cb5ee517f81..172ca6bc2c05 100644
--- a/drivers/video/fbdev/cyber2000fb.c
+++ b/drivers/video/fbdev/cyber2000fb.c
@@ -1363,7 +1363,7 @@ static struct cfb_info *cyberpro_alloc_fb_info(unsigned int id, char *name)
 {
 	struct cfb_info *cfb;

-	cfb = kzalloc(sizeof(struct cfb_info), GFP_KERNEL);
+	cfb = kzalloc_obj(struct cfb_info, GFP_KERNEL);
 	if (!cfb)
 		return NULL;

diff --git a/drivers/video/fbdev/goldfishfb.c b/drivers/video/fbdev/goldfishfb.c
index 7704f2ab18c0..fcba50a6f65b 100644
--- a/drivers/video/fbdev/goldfishfb.c
+++ b/drivers/video/fbdev/goldfishfb.c
@@ -180,7 +180,7 @@ static int goldfish_fb_probe(struct platform_device *pdev)
 	u32 width, height;
 	dma_addr_t fbpaddr;

-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	fb = kzalloc_obj(*fb, GFP_KERNEL);
 	if (fb == NULL) {
 		ret = -ENOMEM;
 		goto err_fb_alloc_failed;
diff --git a/drivers/video/fbdev/matrox/i2c-matroxfb.c b/drivers/video/fbdev/matrox/i2c-matroxfb.c
index bb048e14b2cf..6741028d2d0c 100644
--- a/drivers/video/fbdev/matrox/i2c-matroxfb.c
+++ b/drivers/video/fbdev/matrox/i2c-matroxfb.c
@@ -144,7 +144,7 @@ static void* i2c_matroxfb_probe(struct matrox_fb_info* minfo) {
 	unsigned long flags;
 	struct matroxfb_dh_maven_info* m2info;

-	m2info = kzalloc(sizeof(*m2info), GFP_KERNEL);
+	m2info = kzalloc_obj(*m2info, GFP_KERNEL);
 	if (!m2info)
 		return NULL;

diff --git a/drivers/video/fbdev/matrox/matroxfb_base.c b/drivers/video/fbdev/matrox/matroxfb_base.c
index 5be0cdcd7c71..e7d8e13d1945 100644
--- a/drivers/video/fbdev/matrox/matroxfb_base.c
+++ b/drivers/video/fbdev/matrox/matroxfb_base.c
@@ -2073,7 +2073,7 @@ static int matroxfb_probe(struct pci_dev* pdev, const struct pci_device_id* dumm
 		return -1;
 	}

-	minfo = kzalloc(sizeof(*minfo), GFP_KERNEL);
+	minfo = kzalloc_obj(*minfo, GFP_KERNEL);
 	if (!minfo)
 		return -ENOMEM;

diff --git a/drivers/video/fbdev/matrox/matroxfb_crtc2.c b/drivers/video/fbdev/matrox/matroxfb_crtc2.c
index 417fc692468d..6043ebb2bc96 100644
--- a/drivers/video/fbdev/matrox/matroxfb_crtc2.c
+++ b/drivers/video/fbdev/matrox/matroxfb_crtc2.c
@@ -693,7 +693,7 @@ static void* matroxfb_crtc2_probe(struct matrox_fb_info* minfo) {
 	/* hardware is CRTC2 incapable... */
 	if (!minfo->devflags.crtc2)
 		return NULL;
-	m2info = kzalloc(sizeof(*m2info), GFP_KERNEL);
+	m2info = kzalloc_obj(*m2info, GFP_KERNEL);
 	if (!m2info)
 		return NULL;

diff --git a/drivers/video/fbdev/matrox/matroxfb_maven.c b/drivers/video/fbdev/matrox/matroxfb_maven.c
index dcfae770b42d..63cc77ac74ea 100644
--- a/drivers/video/fbdev/matrox/matroxfb_maven.c
+++ b/drivers/video/fbdev/matrox/matroxfb_maven.c
@@ -1260,7 +1260,7 @@ static int maven_probe(struct i2c_client *client)
 					      I2C_FUNC_NOSTART |
 					      I2C_FUNC_PROTOCOL_MANGLING))
 		goto ERROR0;
-	if (!(data = kzalloc(sizeof(*data), GFP_KERNEL))) {
+	if (!(data = kzalloc_obj(*data, GFP_KERNEL))) {
 		err = -ENOMEM;
 		goto ERROR0;
 	}
diff --git a/drivers/video/fbdev/mmp/core.c b/drivers/video/fbdev/mmp/core.c
index 03707461eced..9e7c138b1290 100644
--- a/drivers/video/fbdev/mmp/core.c
+++ b/drivers/video/fbdev/mmp/core.c
@@ -155,8 +155,7 @@ struct mmp_path *mmp_register_path(struct mmp_path_info *info)
 	struct mmp_path *path = NULL;
 	struct mmp_panel *panel;

-	path = kzalloc(struct_size(path, overlays, info->overlay_num),
-		       GFP_KERNEL);
+	path = kzalloc_flex(*path, overlays, info->overlay_num, GFP_KERNEL);
 	if (!path)
 		return NULL;

diff --git a/drivers/video/fbdev/mmp/fb/mmpfb.c b/drivers/video/fbdev/mmp/fb/mmpfb.c
index 2d9797c6fb3e..18cef14e6d4c 100644
--- a/drivers/video/fbdev/mmp/fb/mmpfb.c
+++ b/drivers/video/fbdev/mmp/fb/mmpfb.c
@@ -476,8 +476,8 @@ static int modes_setup(struct mmpfb_info *fbi)
 		return 0;
 	}
 	/* put videomode list to info structure */
-	videomodes = kcalloc(videomode_num, sizeof(struct fb_videomode),
-			     GFP_KERNEL);
+	videomodes = kzalloc_objs(struct fb_videomode, videomode_num,
+				  GFP_KERNEL);
 	if (!videomodes)
 		return -ENOMEM;

diff --git a/drivers/video/fbdev/mmp/hw/mmp_ctrl.c b/drivers/video/fbdev/mmp/hw/mmp_ctrl.c
index 03e23173198c..2cd152f7a4be 100644
--- a/drivers/video/fbdev/mmp/hw/mmp_ctrl.c
+++ b/drivers/video/fbdev/mmp/hw/mmp_ctrl.c
@@ -402,7 +402,7 @@ static int path_init(struct mmphw_path_plat *path_plat,
 	dev_info(ctrl->dev, "%s: %s\n", __func__, config->name);

 	/* init driver data */
-	path_info = kzalloc(sizeof(*path_info), GFP_KERNEL);
+	path_info = kzalloc_obj(*path_info, GFP_KERNEL);
 	if (!path_info)
 		return 0;

diff --git a/drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c b/drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c
index 34fae588e202..40194c60987d 100644
--- a/drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c
+++ b/drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c
@@ -144,7 +144,7 @@ static int tpohvga_probe(struct spi_device *spi)
 		return ret;
 	}

-	plat_data = kzalloc(sizeof(*plat_data), GFP_KERNEL);
+	plat_data = kzalloc_obj(*plat_data, GFP_KERNEL);
 	if (plat_data == NULL)
 		return -ENOMEM;

diff --git a/drivers/video/fbdev/neofb.c b/drivers/video/fbdev/neofb.c
index 632ba2455913..7b7a2b2d1a40 100644
--- a/drivers/video/fbdev/neofb.c
+++ b/drivers/video/fbdev/neofb.c
@@ -1768,7 +1768,7 @@ static int neo_scan_monitor(struct fb_info *info)
 	int w;

 	// Eventually we will have i2c support.
-	info->monspecs.modedb = kmalloc(sizeof(struct fb_videomode), GFP_KERNEL);
+	info->monspecs.modedb = kmalloc_obj(struct fb_videomode, GFP_KERNEL);
 	if (!info->monspecs.modedb)
 		return -ENOMEM;
 	info->monspecs.modedb_len = 1;
diff --git a/drivers/video/fbdev/nvidia/nv_setup.c b/drivers/video/fbdev/nvidia/nv_setup.c
index 5404017e6957..f392da4761da 100644
--- a/drivers/video/fbdev/nvidia/nv_setup.c
+++ b/drivers/video/fbdev/nvidia/nv_setup.c
@@ -283,9 +283,9 @@ int NVCommonSetup(struct fb_info *info)
 	int Television = 0;
 	int err = 0;

-	var = kzalloc(sizeof(struct fb_var_screeninfo), GFP_KERNEL);
-	monitorA = kzalloc(sizeof(struct fb_monspecs), GFP_KERNEL);
-	monitorB = kzalloc(sizeof(struct fb_monspecs), GFP_KERNEL);
+	var = kzalloc_obj(struct fb_var_screeninfo, GFP_KERNEL);
+	monitorA = kzalloc_obj(struct fb_monspecs, GFP_KERNEL);
+	monitorB = kzalloc_obj(struct fb_monspecs, GFP_KERNEL);

 	if (!var || !monitorA || !monitorB) {
 		err = -ENOMEM;
diff --git a/drivers/video/fbdev/omap/lcd_mipid.c b/drivers/video/fbdev/omap/lcd_mipid.c
index a0fc4570403b..ffe0ce489adb 100644
--- a/drivers/video/fbdev/omap/lcd_mipid.c
+++ b/drivers/video/fbdev/omap/lcd_mipid.c
@@ -552,7 +552,7 @@ static int mipid_spi_probe(struct spi_device *spi)
 	struct mipid_device *md;
 	int r;

-	md = kzalloc(sizeof(*md), GFP_KERNEL);
+	md = kzalloc_obj(*md, GFP_KERNEL);
 	if (md == NULL) {
 		dev_err(&spi->dev, "out of memory\n");
 		return -ENOMEM;
diff --git a/drivers/video/fbdev/omap/omapfb_main.c b/drivers/video/fbdev/omap/omapfb_main.c
index a8740213e891..8306faf01f40 100644
--- a/drivers/video/fbdev/omap/omapfb_main.c
+++ b/drivers/video/fbdev/omap/omapfb_main.c
@@ -1630,7 +1630,7 @@ static int omapfb_do_probe(struct platform_device *pdev,
 		goto cleanup;
 	}

-	fbdev = kzalloc(sizeof(*fbdev), GFP_KERNEL);
+	fbdev = kzalloc_obj(*fbdev, GFP_KERNEL);
 	if (fbdev == NULL) {
 		dev_err(&pdev->dev,
 			"unable to allocate memory for device info\n");
diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
index 370e8623754e..19498b7ccb14 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
@@ -1539,7 +1539,7 @@ static void dsi_dump_dsidev_irqs(struct platform_device *dsidev,
 	unsigned long flags;
 	struct dsi_irq_stats *stats;

-	stats = kzalloc(sizeof(*stats), GFP_KERNEL);
+	stats = kzalloc_obj(*stats, GFP_KERNEL);
 	if (!stats) {
 		seq_printf(s, "out of memory\n");
 		return;
diff --git a/drivers/video/fbdev/omap2/omapfb/dss/manager.c b/drivers/video/fbdev/omap2/omapfb/dss/manager.c
index c59e5689d6cc..0fc5d43c58ff 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/manager.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/manager.c
@@ -32,8 +32,8 @@ int dss_init_overlay_managers(void)

 	num_managers = dss_feat_get_num_mgrs();

-	managers = kcalloc(num_managers, sizeof(struct omap_overlay_manager),
-			   GFP_KERNEL);
+	managers = kzalloc_objs(struct omap_overlay_manager, num_managers,
+				GFP_KERNEL);

 	BUG_ON(managers == NULL);

diff --git a/drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c b/drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c
index d80720c84323..098c02164428 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c
@@ -46,7 +46,7 @@ static void __init omapdss_update_prop(struct device_node *node, char *compat,
 {
 	struct property *prop;

-	prop = kzalloc(sizeof(*prop), GFP_KERNEL);
+	prop = kzalloc_obj(*prop, GFP_KERNEL);
 	if (!prop)
 		return;

@@ -110,8 +110,7 @@ static void __init omapdss_omapify_node(struct device_node *node)

 static void __init omapdss_add_to_list(struct device_node *node, bool root)
 {
-	struct dss_conv_node *n = kmalloc(sizeof(struct dss_conv_node),
-		GFP_KERNEL);
+	struct dss_conv_node *n = kmalloc_obj(struct dss_conv_node, GFP_KERNEL);
 	if (n) {
 		n->node = node;
 		n->root = root;
diff --git a/drivers/video/fbdev/omap2/omapfb/dss/overlay.c b/drivers/video/fbdev/omap2/omapfb/dss/overlay.c
index bbbdc233ee61..cb2a230c57a1 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/overlay.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/overlay.c
@@ -49,8 +49,7 @@ void dss_init_overlays(struct platform_device *pdev)

 	num_overlays = dss_feat_get_num_ovls();

-	overlays = kcalloc(num_overlays, sizeof(struct omap_overlay),
-			   GFP_KERNEL);
+	overlays = kzalloc_objs(struct omap_overlay, num_overlays, GFP_KERNEL);

 	BUG_ON(overlays == NULL);

diff --git a/drivers/video/fbdev/omap2/omapfb/omapfb-main.c b/drivers/video/fbdev/omap2/omapfb/omapfb-main.c
index 211f23648686..599a7d6a6114 100644
--- a/drivers/video/fbdev/omap2/omapfb/omapfb-main.c
+++ b/drivers/video/fbdev/omap2/omapfb/omapfb-main.c
@@ -2023,19 +2023,19 @@ static int omapfb_mode_to_timings(const char *mode_str,
 	var = NULL;
 	fbops = NULL;

-	fbi = kzalloc(sizeof(*fbi), GFP_KERNEL);
+	fbi = kzalloc_obj(*fbi, GFP_KERNEL);
 	if (fbi == NULL) {
 		r = -ENOMEM;
 		goto err;
 	}

-	var = kzalloc(sizeof(*var), GFP_KERNEL);
+	var = kzalloc_obj(*var, GFP_KERNEL);
 	if (var == NULL) {
 		r = -ENOMEM;
 		goto err;
 	}

-	fbops = kzalloc(sizeof(*fbops), GFP_KERNEL);
+	fbops = kzalloc_obj(*fbops, GFP_KERNEL);
 	if (fbops == NULL) {
 		r = -ENOMEM;
 		goto err;
@@ -2244,7 +2244,7 @@ static int omapfb_find_best_mode(struct omap_dss_device *display,
 	if (r < 0)
 		goto err1;

-	specs = kzalloc(sizeof(*specs), GFP_KERNEL);
+	specs = kzalloc_obj(*specs, GFP_KERNEL);
 	if (specs == NULL) {
 		r = -ENOMEM;
 		goto err1;
diff --git a/drivers/video/fbdev/pvr2fb.c b/drivers/video/fbdev/pvr2fb.c
index 0b8d23c12b77..d47c173fd8e0 100644
--- a/drivers/video/fbdev/pvr2fb.c
+++ b/drivers/video/fbdev/pvr2fb.c
@@ -652,7 +652,7 @@ static ssize_t pvr2fb_write(struct fb_info *info, const char *buf,

 	nr_pages = (count + PAGE_SIZE - 1) >> PAGE_SHIFT;

-	pages = kmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kmalloc_objs(struct page *, nr_pages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

diff --git a/drivers/video/fbdev/pxa3xx-gcu.c b/drivers/video/fbdev/pxa3xx-gcu.c
index 4a78b387b343..c2aec9419ae9 100644
--- a/drivers/video/fbdev/pxa3xx-gcu.c
+++ b/drivers/video/fbdev/pxa3xx-gcu.c
@@ -530,7 +530,7 @@ pxa3xx_gcu_add_buffer(struct device *dev,
 {
 	struct pxa3xx_gcu_batch *buffer;

-	buffer = kzalloc(sizeof(struct pxa3xx_gcu_batch), GFP_KERNEL);
+	buffer = kzalloc_obj(struct pxa3xx_gcu_batch, GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;

diff --git a/drivers/video/fbdev/sh_mobile_lcdcfb.c b/drivers/video/fbdev/sh_mobile_lcdcfb.c
index 5f3a0cd27db3..c52391f9893b 100644
--- a/drivers/video/fbdev/sh_mobile_lcdcfb.c
+++ b/drivers/video/fbdev/sh_mobile_lcdcfb.c
@@ -2512,7 +2512,7 @@ static int sh_mobile_lcdc_probe(struct platform_device *pdev)
 		return -ENOENT;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/drivers/video/fbdev/simplefb.c b/drivers/video/fbdev/simplefb.c
index 92595af022eb..67f3f2df2064 100644
--- a/drivers/video/fbdev/simplefb.c
+++ b/drivers/video/fbdev/simplefb.c
@@ -249,7 +249,7 @@ static int simplefb_clocks_get(struct simplefb_par *par,
 	if (!par->clk_count)
 		return 0;

-	par->clks = kcalloc(par->clk_count, sizeof(struct clk *), GFP_KERNEL);
+	par->clks = kzalloc_objs(struct clk *, par->clk_count, GFP_KERNEL);
 	if (!par->clks)
 		return -ENOMEM;

diff --git a/drivers/video/fbdev/sm501fb.c b/drivers/video/fbdev/sm501fb.c
index ed6f4f43e2d5..abc9bcfe579b 100644
--- a/drivers/video/fbdev/sm501fb.c
+++ b/drivers/video/fbdev/sm501fb.c
@@ -1947,7 +1947,7 @@ static int sm501fb_probe(struct platform_device *pdev)
 	int ret;

 	/* allocate our framebuffers */
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		dev_err(dev, "failed to allocate state\n");
 		return -ENOMEM;
diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c
index 891ce7b76d63..ddc45d9a2ca2 100644
--- a/drivers/video/fbdev/smscufx.c
+++ b/drivers/video/fbdev/smscufx.c
@@ -946,7 +946,8 @@ static int ufx_ops_ioctl(struct fb_info *info, unsigned int cmd,

 	/* TODO: Help propose a standard fb.h ioctl to report mmap damage */
 	if (cmd == UFX_IOCTL_REPORT_DAMAGE) {
-		struct dloarea *area __free(kfree) = kmalloc(sizeof(*area), GFP_KERNEL);
+		struct dloarea *area __free(kfree) = kmalloc_obj(*area,
+								 GFP_KERNEL);
 		if (!area)
 			return -ENOMEM;

@@ -1037,7 +1038,7 @@ static int ufx_ops_open(struct fb_info *info, int user)

 		struct fb_deferred_io *fbdefio;

-		fbdefio = kzalloc(sizeof(*fbdefio), GFP_KERNEL);
+		fbdefio = kzalloc_obj(*fbdefio, GFP_KERNEL);
 		if (fbdefio) {
 			fbdefio->delay = UFX_DEFIO_WRITE_DELAY;
 			fbdefio->deferred_io = ufx_dpy_deferred_io;
@@ -1594,7 +1595,7 @@ static int ufx_usb_probe(struct usb_interface *interface,
 	usbdev = interface_to_usbdev(interface);
 	BUG_ON(!usbdev);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL) {
 		dev_err(&usbdev->dev, "ufx_usb_probe: failed alloc of dev struct\n");
 		return -ENOMEM;
@@ -1851,7 +1852,7 @@ static int ufx_alloc_urb_list(struct ufx_data *dev, int count, size_t size)
 	INIT_LIST_HEAD(&dev->urbs.list);

 	while (i < count) {
-		unode = kzalloc(sizeof(*unode), GFP_KERNEL);
+		unode = kzalloc_obj(*unode, GFP_KERNEL);
 		if (!unode)
 			break;
 		unode->dev = dev;
diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c
index ccede85df1e1..ba060af2b09f 100644
--- a/drivers/video/fbdev/udlfb.c
+++ b/drivers/video/fbdev/udlfb.c
@@ -918,7 +918,7 @@ static int dlfb_ops_open(struct fb_info *info, int user)

 		struct fb_deferred_io *fbdefio;

-		fbdefio = kzalloc(sizeof(struct fb_deferred_io), GFP_KERNEL);
+		fbdefio = kzalloc_obj(struct fb_deferred_io, GFP_KERNEL);

 		if (fbdefio) {
 			fbdefio->delay = DL_DEFIO_WRITE_DELAY;
@@ -1164,7 +1164,8 @@ static const struct fb_ops dlfb_ops = {

 static void dlfb_deferred_vfree(struct dlfb_data *dlfb, void *mem)
 {
-	struct dlfb_deferred_free *d = kmalloc(sizeof(struct dlfb_deferred_free), GFP_KERNEL);
+	struct dlfb_deferred_free *d = kmalloc_obj(struct dlfb_deferred_free,
+						   GFP_KERNEL);
 	if (!d)
 		return;
 	d->mem = mem;
@@ -1606,7 +1607,7 @@ static int dlfb_usb_probe(struct usb_interface *intf,
 	static u8 out_ep[] = {OUT_EP_NUM + USB_DIR_OUT, 0};

 	/* usb initialization */
-	dlfb = kzalloc(sizeof(*dlfb), GFP_KERNEL);
+	dlfb = kzalloc_obj(*dlfb, GFP_KERNEL);
 	if (!dlfb) {
 		dev_err(&intf->dev, "%s: failed to allocate dlfb\n", __func__);
 		return -ENOMEM;
@@ -1852,7 +1853,7 @@ static int dlfb_alloc_urb_list(struct dlfb_data *dlfb, int count, size_t size)
 	dlfb->urbs.available = 0;

 	while (dlfb->urbs.count * size < wanted_size) {
-		unode = kzalloc(sizeof(*unode), GFP_KERNEL);
+		unode = kzalloc_obj(*unode, GFP_KERNEL);
 		if (!unode)
 			break;
 		unode->dlfb = dlfb;
diff --git a/drivers/video/fbdev/uvesafb.c b/drivers/video/fbdev/uvesafb.c
index 5d52fd00806e..c9e299afc02b 100644
--- a/drivers/video/fbdev/uvesafb.c
+++ b/drivers/video/fbdev/uvesafb.c
@@ -258,9 +258,9 @@ static struct uvesafb_ktask *uvesafb_prep(void)
 {
 	struct uvesafb_ktask *task;

-	task = kzalloc(sizeof(*task), GFP_KERNEL);
+	task = kzalloc_obj(*task, GFP_KERNEL);
 	if (task) {
-		task->done = kzalloc(sizeof(*task->done), GFP_KERNEL);
+		task->done = kzalloc_obj(*task->done, GFP_KERNEL);
 		if (!task->done) {
 			kfree(task);
 			task = NULL;
@@ -487,9 +487,8 @@ static int uvesafb_vbe_getmodes(struct uvesafb_ktask *task,
 		mode++;
 	}

-	par->vbe_modes = kcalloc(par->vbe_modes_cnt,
-				 sizeof(struct vbe_mode_ib),
-				 GFP_KERNEL);
+	par->vbe_modes = kzalloc_objs(struct vbe_mode_ib, par->vbe_modes_cnt,
+				      GFP_KERNEL);
 	if (!par->vbe_modes)
 		return -ENOMEM;

@@ -862,7 +861,7 @@ static int uvesafb_vbe_init_mode(struct fb_info *info)
 	 * Convert the modelist into a modedb so that we can use it with
 	 * fb_find_mode().
 	 */
-	mode = kcalloc(i, sizeof(*mode), GFP_KERNEL);
+	mode = kzalloc_objs(*mode, i, GFP_KERNEL);
 	if (mode) {
 		i = 0;
 		list_for_each(pos, &info->modelist) {
@@ -1048,8 +1047,7 @@ static int uvesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
 		    info->cmap.len || cmap->start < info->cmap.start)
 			return -EINVAL;

-		entries = kmalloc_array(cmap->len, sizeof(*entries),
-					GFP_KERNEL);
+		entries = kmalloc_objs(*entries, cmap->len, GFP_KERNEL);
 		if (!entries)
 			return -ENOMEM;

@@ -1243,7 +1241,7 @@ static int uvesafb_set_par(struct fb_info *info)
 	    info->var.pixclock != 0) {
 		task->t.regs.ebx |= 0x0800;		/* use CRTC data */
 		task->t.flags = TF_BUF_ESDI;
-		crtc = kzalloc(sizeof(struct vbe_crtc_ib), GFP_KERNEL);
+		crtc = kzalloc_obj(struct vbe_crtc_ib, GFP_KERNEL);
 		if (!crtc) {
 			err = -ENOMEM;
 			goto out;
diff --git a/drivers/video/fbdev/valkyriefb.c b/drivers/video/fbdev/valkyriefb.c
index 6ff059ee1694..ec3cf4589056 100644
--- a/drivers/video/fbdev/valkyriefb.c
+++ b/drivers/video/fbdev/valkyriefb.c
@@ -339,7 +339,7 @@ static int __init valkyriefb_init(void)
 	}
 #endif /* ppc (!CONFIG_MAC) */

-	p = kzalloc(sizeof(*p), GFP_ATOMIC);
+	p = kzalloc_obj(*p, GFP_ATOMIC);
 	if (!p)
 		return -ENOMEM;

diff --git a/drivers/video/fbdev/via/via_aux.c b/drivers/video/fbdev/via/via_aux.c
index 902191dddbeb..11f28a16e9b1 100644
--- a/drivers/video/fbdev/via/via_aux.c
+++ b/drivers/video/fbdev/via/via_aux.c
@@ -17,7 +17,7 @@ struct via_aux_bus *via_aux_probe(struct i2c_adapter *adap)
 	if (!adap)
 		return NULL;

-	bus = kmalloc(sizeof(*bus), GFP_KERNEL);
+	bus = kmalloc_obj(*bus, GFP_KERNEL);
 	if (!bus)
 		return NULL;

diff --git a/drivers/video/fbdev/via/via_aux.h b/drivers/video/fbdev/via/via_aux.h
index 464723fd514c..cb28fb21b1c7 100644
--- a/drivers/video/fbdev/via/via_aux.h
+++ b/drivers/video/fbdev/via/via_aux.h
@@ -42,7 +42,7 @@ const struct fb_videomode *via_aux_get_preferred_mode(struct via_aux_bus *bus);

 static inline bool via_aux_add(struct via_aux_drv *drv)
 {
-	struct via_aux_drv *data = kmalloc(sizeof(*data), GFP_KERNEL);
+	struct via_aux_drv *data = kmalloc_obj(*data, GFP_KERNEL);

 	if (!data)
 		return false;
diff --git a/drivers/video/fbdev/via/via_aux_edid.c b/drivers/video/fbdev/via/via_aux_edid.c
index 9791381a9865..75c40aede6f2 100644
--- a/drivers/video/fbdev/via/via_aux_edid.c
+++ b/drivers/video/fbdev/via/via_aux_edid.c
@@ -24,7 +24,7 @@ static void query_edid(struct via_aux_drv *drv)
 	if (spec) {
 		fb_destroy_modedb(spec->modedb);
 	} else {
-		spec = kmalloc(sizeof(*spec), GFP_KERNEL);
+		spec = kmalloc_obj(*spec, GFP_KERNEL);
 		if (!spec)
 			return;
 	}
diff --git a/drivers/video/fbdev/via/viafbdev.c b/drivers/video/fbdev/via/viafbdev.c
index 6da5ae7d229a..80f95dac32c8 100644
--- a/drivers/video/fbdev/via/viafbdev.c
+++ b/drivers/video/fbdev/via/viafbdev.c
@@ -840,7 +840,7 @@ static int viafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
 		struct {
 			u8 data[CURSOR_SIZE];
 			u32 bak[CURSOR_SIZE / 4];
-		} *cr_data = kzalloc(sizeof(*cr_data), GFP_ATOMIC);
+		} *cr_data = kzalloc_obj(*cr_data, GFP_ATOMIC);
 		int size = ((cursor->image.width + 7) >> 3) *
 			cursor->image.height;

diff --git a/drivers/video/fbdev/xen-fbfront.c b/drivers/video/fbdev/xen-fbfront.c
index d8f3bfb2dd6c..a432b487bb76 100644
--- a/drivers/video/fbdev/xen-fbfront.c
+++ b/drivers/video/fbdev/xen-fbfront.c
@@ -348,7 +348,7 @@ static int xenfb_probe(struct xenbus_device *dev,
 	int val;
 	int ret = 0;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (info == NULL) {
 		xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure");
 		return -ENOMEM;
diff --git a/drivers/video/of_display_timing.c b/drivers/video/of_display_timing.c
index a6ec392253c3..54b6595e8758 100644
--- a/drivers/video/of_display_timing.c
+++ b/drivers/video/of_display_timing.c
@@ -157,7 +157,7 @@ struct display_timings *of_get_display_timings(const struct device_node *np)
 		return NULL;
 	}

-	disp = kzalloc(sizeof(*disp), GFP_KERNEL);
+	disp = kzalloc_obj(*disp, GFP_KERNEL);
 	if (!disp) {
 		pr_err("%pOF: could not allocate struct disp'\n", np);
 		goto dispfail;
@@ -184,9 +184,8 @@ struct display_timings *of_get_display_timings(const struct device_node *np)
 		goto timingfail;
 	}

-	disp->timings = kcalloc(disp->num_timings,
-				sizeof(struct display_timing *),
-				GFP_KERNEL);
+	disp->timings = kzalloc_objs(struct display_timing *, disp->num_timings,
+				     GFP_KERNEL);
 	if (!disp->timings) {
 		pr_err("%pOF: could not allocate timings array\n", np);
 		goto timingfail;
@@ -199,7 +198,7 @@ struct display_timings *of_get_display_timings(const struct device_node *np)
 		struct display_timing *dt;
 		int r;

-		dt = kmalloc(sizeof(*dt), GFP_KERNEL);
+		dt = kmalloc_obj(*dt, GFP_KERNEL);
 		if (!dt) {
 			pr_err("%pOF: could not allocate display_timing struct\n",
 				np);
diff --git a/drivers/video/sticore.c b/drivers/video/sticore.c
index 88a1758616e0..8920c1fa2546 100644
--- a/drivers/video/sticore.c
+++ b/drivers/video/sticore.c
@@ -558,7 +558,7 @@ sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name)
 	dest += sizeof(struct sti_rom_font);
 	memcpy(dest, fbfont->data, bpc * fbfont->charcount);

-	cooked_font = kzalloc(sizeof(*cooked_font), GFP_KERNEL);
+	cooked_font = kzalloc_obj(*cooked_font, GFP_KERNEL);
 	if (!cooked_font) {
 		kfree(nf);
 		return NULL;
@@ -678,7 +678,7 @@ static int sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
 	struct sti_rom_font *raw_font, *font_start;
 	struct sti_cooked_font *cooked_font;

-	cooked_font = kzalloc(sizeof(*cooked_font), GFP_KERNEL);
+	cooked_font = kzalloc_obj(*cooked_font, GFP_KERNEL);
 	if (!cooked_font)
 		return 0;

@@ -692,7 +692,7 @@ static int sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
 	while (raw_font->next_font) {
 		raw_font = ((void *)font_start) + (raw_font->next_font);

-		cooked_font->next_font = kzalloc(sizeof(*cooked_font), GFP_KERNEL);
+		cooked_font->next_font = kzalloc_obj(*cooked_font, GFP_KERNEL);
 		if (!cooked_font->next_font)
 			return 1;

@@ -806,7 +806,7 @@ static int sti_read_rom(int wordmode, struct sti_struct *sti,
 	struct sti_rom *raw = NULL;
 	unsigned long revno;

-	cooked = kmalloc(sizeof *cooked, GFP_KERNEL);
+	cooked = kmalloc_obj(*cooked, GFP_KERNEL);
 	if (!cooked)
 		goto out_err;

@@ -915,7 +915,7 @@ static struct sti_struct *sti_try_rom_generic(unsigned long address,
 		return NULL;
 	}

-	sti = kzalloc(sizeof(*sti), GFP_KERNEL);
+	sti = kzalloc_obj(*sti, GFP_KERNEL);
 	if (!sti)
 		return NULL;

diff --git a/drivers/video/vgastate.c b/drivers/video/vgastate.c
index 122fb3c3ec9d..0727716cf5fd 100644
--- a/drivers/video/vgastate.c
+++ b/drivers/video/vgastate.c
@@ -351,7 +351,7 @@ int save_vga(struct vgastate *state)
 {
 	struct regstate *saved;

-	saved = kzalloc(sizeof(struct regstate), GFP_KERNEL);
+	saved = kzalloc_obj(struct regstate, GFP_KERNEL);

 	if (saved == NULL)
 		return 1;
diff --git a/drivers/virt/acrn/hsm.c b/drivers/virt/acrn/hsm.c
index e4e196abdaac..c73a566d135d 100644
--- a/drivers/virt/acrn/hsm.c
+++ b/drivers/virt/acrn/hsm.c
@@ -30,7 +30,7 @@ static int acrn_dev_open(struct inode *inode, struct file *filp)
 {
 	struct acrn_vm *vm;

-	vm = kzalloc(sizeof(*vm), GFP_KERNEL);
+	vm = kzalloc_obj(*vm, GFP_KERNEL);
 	if (!vm)
 		return -ENOMEM;

@@ -64,7 +64,7 @@ static int pmcmd_ioctl(u64 cmd, void __user *uptr)
 		kfree(pm_info);
 		break;
 	case ACRN_PMCMD_GET_PX_DATA:
-		px_data = kzalloc(sizeof(*px_data), GFP_KERNEL);
+		px_data = kzalloc_obj(*px_data, GFP_KERNEL);
 		if (!px_data)
 			return -ENOMEM;

@@ -79,7 +79,7 @@ static int pmcmd_ioctl(u64 cmd, void __user *uptr)
 		kfree(px_data);
 		break;
 	case ACRN_PMCMD_GET_CX_DATA:
-		cx_data = kzalloc(sizeof(*cx_data), GFP_KERNEL);
+		cx_data = kzalloc_obj(*cx_data, GFP_KERNEL);
 		if (!cx_data)
 			return -ENOMEM;

diff --git a/drivers/virt/acrn/ioeventfd.c b/drivers/virt/acrn/ioeventfd.c
index 4e845c6ca0b5..5daccfaa127b 100644
--- a/drivers/virt/acrn/ioeventfd.c
+++ b/drivers/virt/acrn/ioeventfd.c
@@ -96,7 +96,7 @@ static int acrn_ioeventfd_assign(struct acrn_vm *vm,
 	if (IS_ERR(eventfd))
 		return PTR_ERR(eventfd);

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/drivers/virt/acrn/ioreq.c b/drivers/virt/acrn/ioreq.c
index 55ddfa4840af..2216e62406e0 100644
--- a/drivers/virt/acrn/ioreq.c
+++ b/drivers/virt/acrn/ioreq.c
@@ -123,7 +123,7 @@ int acrn_ioreq_range_add(struct acrn_ioreq_client *client,
 		return -EINVAL;
 	}

-	range = kzalloc(sizeof(*range), GFP_KERNEL);
+	range = kzalloc_obj(*range, GFP_KERNEL);
 	if (!range)
 		return -ENOMEM;

@@ -424,7 +424,7 @@ struct acrn_ioreq_client *acrn_ioreq_client_create(struct acrn_vm *vm,
 			"Cannot create non-default client w/o handler!\n");
 		return NULL;
 	}
-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return NULL;

@@ -602,7 +602,7 @@ int acrn_ioreq_init(struct acrn_vm *vm, u64 buf_vma)
 	if (vm->ioreq_buf)
 		return -EEXIST;

-	set_buffer = kzalloc(sizeof(*set_buffer), GFP_KERNEL);
+	set_buffer = kzalloc_obj(*set_buffer, GFP_KERNEL);
 	if (!set_buffer)
 		return -ENOMEM;

diff --git a/drivers/virt/acrn/irqfd.c b/drivers/virt/acrn/irqfd.c
index 64d32c8fbf79..f0ff5140699f 100644
--- a/drivers/virt/acrn/irqfd.c
+++ b/drivers/virt/acrn/irqfd.c
@@ -112,7 +112,7 @@ static int acrn_irqfd_assign(struct acrn_vm *vm, struct acrn_irqfd *args)
 	__poll_t events;
 	int ret = 0;

-	irqfd = kzalloc(sizeof(*irqfd), GFP_KERNEL);
+	irqfd = kzalloc_obj(*irqfd, GFP_KERNEL);
 	if (!irqfd)
 		return -ENOMEM;

diff --git a/drivers/virt/acrn/mm.c b/drivers/virt/acrn/mm.c
index bfb3031885e8..86b386761ee3 100644
--- a/drivers/virt/acrn/mm.c
+++ b/drivers/virt/acrn/mm.c
@@ -21,7 +21,7 @@ static int modify_region(struct acrn_vm *vm, struct vm_memory_region_op *region)
 	struct vm_memory_region_batch *regions;
 	int ret;

-	regions = kzalloc(sizeof(*regions), GFP_KERNEL);
+	regions = kzalloc_obj(*regions, GFP_KERNEL);
 	if (!regions)
 		return -ENOMEM;

@@ -55,7 +55,7 @@ int acrn_mm_region_add(struct acrn_vm *vm, u64 user_gpa, u64 service_gpa,
 	struct vm_memory_region_op *region;
 	int ret = 0;

-	region = kzalloc(sizeof(*region), GFP_KERNEL);
+	region = kzalloc_obj(*region, GFP_KERNEL);
 	if (!region)
 		return -ENOMEM;

@@ -87,7 +87,7 @@ int acrn_mm_region_del(struct acrn_vm *vm, u64 user_gpa, u64 size)
 	struct vm_memory_region_op *region;
 	int ret = 0;

-	region = kzalloc(sizeof(*region), GFP_KERNEL);
+	region = kzalloc_obj(*region, GFP_KERNEL);
 	if (!region)
 		return -ENOMEM;

@@ -285,8 +285,8 @@ int acrn_vm_ram_map(struct acrn_vm *vm, struct acrn_vm_memmap *memmap)
 	}

 	/* Prepare the vm_memory_region_batch */
-	regions_info = kzalloc(struct_size(regions_info, regions_op,
-					   nr_regions), GFP_KERNEL);
+	regions_info = kzalloc_flex(*regions_info, regions_op, nr_regions,
+				    GFP_KERNEL);
 	if (!regions_info) {
 		ret = -ENOMEM;
 		goto unmap_kernel_map;
diff --git a/drivers/virt/acrn/vm.c b/drivers/virt/acrn/vm.c
index fbc9f1042000..3753b27c5312 100644
--- a/drivers/virt/acrn/vm.c
+++ b/drivers/virt/acrn/vm.c
@@ -107,7 +107,7 @@ int acrn_msi_inject(struct acrn_vm *vm, u64 msi_addr, u64 msi_data)
 	int ret;

 	/* might be used in interrupt context, so use GFP_ATOMIC */
-	msi = kzalloc(sizeof(*msi), GFP_ATOMIC);
+	msi = kzalloc_obj(*msi, GFP_ATOMIC);
 	if (!msi)
 		return -ENOMEM;

diff --git a/drivers/virt/coco/guest/report.c b/drivers/virt/coco/guest/report.c
index d3d18fc22bc2..ab50adfec7ec 100644
--- a/drivers/virt/coco/guest/report.c
+++ b/drivers/virt/coco/guest/report.c
@@ -428,7 +428,7 @@ static struct config_item *tsm_report_make_item(struct config_group *group,
 	if (!provider.ops)
 		return ERR_PTR(-ENXIO);

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/virt/coco/guest/tsm-mr.c b/drivers/virt/coco/guest/tsm-mr.c
index bc509df04db1..37859cc8eefb 100644
--- a/drivers/virt/coco/guest/tsm-mr.c
+++ b/drivers/virt/coco/guest/tsm-mr.c
@@ -176,7 +176,7 @@ tsm_mr_create_attribute_group(const struct tsm_measurements *tm)
 	const struct bin_attribute **attrs __free(kfree) =
 		kzalloc(sizeof(*attrs) * (tm->nr_mrs + 1) + nlen, GFP_KERNEL);
 	struct tm_context *ctx __free(kfree) =
-		kzalloc(struct_size(ctx, mrs, tm->nr_mrs), GFP_KERNEL);
+		kzalloc_flex(*ctx, mrs, tm->nr_mrs, GFP_KERNEL);
 	char *name, *end;

 	if (!ctx || !attrs)
diff --git a/drivers/virt/coco/sev-guest/sev-guest.c b/drivers/virt/coco/sev-guest/sev-guest.c
index b01ec99106cd..e001e6769a43 100644
--- a/drivers/virt/coco/sev-guest/sev-guest.c
+++ b/drivers/virt/coco/sev-guest/sev-guest.c
@@ -75,7 +75,7 @@ static int get_report(struct snp_guest_dev *snp_dev, struct snp_guest_request_io
 	if (!arg->req_data || !arg->resp_data)
 		return -EINVAL;

-	report_req = kzalloc(sizeof(*report_req), GFP_KERNEL_ACCOUNT);
+	report_req = kzalloc_obj(*report_req, GFP_KERNEL_ACCOUNT);
 	if (!report_req)
 		return -ENOMEM;

@@ -135,7 +135,7 @@ static int get_derived_key(struct snp_guest_dev *snp_dev, struct snp_guest_reque
 	if (!derived_key_resp)
 		return -ENOMEM;

-	derived_key_req = kzalloc(sizeof(*derived_key_req), GFP_KERNEL_ACCOUNT);
+	derived_key_req = kzalloc_obj(*derived_key_req, GFP_KERNEL_ACCOUNT);
 	if (!derived_key_req)
 		return -ENOMEM;

@@ -181,7 +181,7 @@ static int get_ext_report(struct snp_guest_dev *snp_dev, struct snp_guest_reques
 	if (sockptr_is_null(io->req_data) || sockptr_is_null(io->resp_data))
 		return -EINVAL;

-	report_req = kzalloc(sizeof(*report_req), GFP_KERNEL_ACCOUNT);
+	report_req = kzalloc_obj(*report_req, GFP_KERNEL_ACCOUNT);
 	if (!report_req)
 		return -ENOMEM;

diff --git a/drivers/virt/coco/tsm-core.c b/drivers/virt/coco/tsm-core.c
index 8712df8596a1..b783fd36fc7e 100644
--- a/drivers/virt/coco/tsm-core.c
+++ b/drivers/virt/coco/tsm-core.c
@@ -35,7 +35,7 @@ static struct tsm_dev *alloc_tsm_dev(struct device *parent)
 	int id;

 	struct tsm_dev *tsm_dev __free(kfree) =
-		kzalloc(sizeof(*tsm_dev), GFP_KERNEL);
+		kzalloc_obj(*tsm_dev, GFP_KERNEL);
 	if (!tsm_dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/virt/fsl_hypervisor.c b/drivers/virt/fsl_hypervisor.c
index e92e2ceb12a4..541ee3a4909c 100644
--- a/drivers/virt/fsl_hypervisor.c
+++ b/drivers/virt/fsl_hypervisor.c
@@ -226,7 +226,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
 	 * 'pages' is an array of struct page pointers that's initialized by
 	 * get_user_pages_fast().
 	 */
-	pages = kcalloc(num_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kzalloc_objs(struct page *, num_pages, GFP_KERNEL);
 	if (!pages) {
 		pr_debug("fsl-hv: could not allocate page list\n");
 		return -ENOMEM;
@@ -660,7 +660,7 @@ static int fsl_hv_open(struct inode *inode, struct file *filp)
 	struct doorbell_queue *dbq;
 	unsigned long flags;

-	dbq = kzalloc(sizeof(struct doorbell_queue), GFP_KERNEL);
+	dbq = kzalloc_obj(struct doorbell_queue, GFP_KERNEL);
 	if (!dbq) {
 		pr_err("fsl-hv: out of memory\n");
 		return -ENOMEM;
@@ -845,7 +845,7 @@ static int __init fsl_hypervisor_init(void)
 			continue;
 		}

-		dbisr = kzalloc(sizeof(*dbisr), GFP_KERNEL);
+		dbisr = kzalloc_obj(*dbisr, GFP_KERNEL);
 		if (!dbisr)
 			goto out_of_memory;

diff --git a/drivers/virt/nitro_enclaves/ne_misc_dev.c b/drivers/virt/nitro_enclaves/ne_misc_dev.c
index 241b94f62e56..1ad44e92348a 100644
--- a/drivers/virt/nitro_enclaves/ne_misc_dev.c
+++ b/drivers/virt/nitro_enclaves/ne_misc_dev.c
@@ -294,9 +294,9 @@ static int ne_setup_cpu_pool(const char *ne_cpu_list)

 	ne_cpu_pool.nr_parent_vm_cores = nr_cpu_ids / ne_cpu_pool.nr_threads_per_core;

-	ne_cpu_pool.avail_threads_per_core = kcalloc(ne_cpu_pool.nr_parent_vm_cores,
-						     sizeof(*ne_cpu_pool.avail_threads_per_core),
-						     GFP_KERNEL);
+	ne_cpu_pool.avail_threads_per_core = kzalloc_objs(*ne_cpu_pool.avail_threads_per_core,
+							  ne_cpu_pool.nr_parent_vm_cores,
+							  GFP_KERNEL);
 	if (!ne_cpu_pool.avail_threads_per_core) {
 		rc = -ENOMEM;

@@ -928,23 +928,22 @@ static int ne_set_user_memory_region_ioctl(struct ne_enclave *ne_enclave,
 	if (rc < 0)
 		return rc;

-	ne_mem_region = kzalloc(sizeof(*ne_mem_region), GFP_KERNEL);
+	ne_mem_region = kzalloc_obj(*ne_mem_region, GFP_KERNEL);
 	if (!ne_mem_region)
 		return -ENOMEM;

 	max_nr_pages = mem_region.memory_size / NE_MIN_MEM_REGION_SIZE;

-	ne_mem_region->pages = kcalloc(max_nr_pages, sizeof(*ne_mem_region->pages),
-				       GFP_KERNEL);
+	ne_mem_region->pages = kzalloc_objs(*ne_mem_region->pages, max_nr_pages,
+					    GFP_KERNEL);
 	if (!ne_mem_region->pages) {
 		rc = -ENOMEM;

 		goto free_mem_region;
 	}

-	phys_contig_mem_regions.regions = kcalloc(max_nr_pages,
-						  sizeof(*phys_contig_mem_regions.regions),
-						  GFP_KERNEL);
+	phys_contig_mem_regions.regions = kzalloc_objs(*phys_contig_mem_regions.regions,
+						       max_nr_pages, GFP_KERNEL);
 	if (!phys_contig_mem_regions.regions) {
 		rc = -ENOMEM;

@@ -1617,7 +1616,7 @@ static int ne_create_vm_ioctl(struct ne_pci_dev *ne_pci_dev, u64 __user *slot_ui

 	mutex_unlock(&ne_cpu_pool.mutex);

-	ne_enclave = kzalloc(sizeof(*ne_enclave), GFP_KERNEL);
+	ne_enclave = kzalloc_obj(*ne_enclave, GFP_KERNEL);
 	if (!ne_enclave)
 		return -ENOMEM;

@@ -1629,9 +1628,9 @@ static int ne_create_vm_ioctl(struct ne_pci_dev *ne_pci_dev, u64 __user *slot_ui

 	mutex_unlock(&ne_cpu_pool.mutex);

-	ne_enclave->threads_per_core = kcalloc(ne_enclave->nr_parent_vm_cores,
-					       sizeof(*ne_enclave->threads_per_core),
-					       GFP_KERNEL);
+	ne_enclave->threads_per_core = kzalloc_objs(*ne_enclave->threads_per_core,
+						    ne_enclave->nr_parent_vm_cores,
+						    GFP_KERNEL);
 	if (!ne_enclave->threads_per_core) {
 		rc = -ENOMEM;

diff --git a/drivers/virt/nitro_enclaves/ne_pci_dev.c b/drivers/virt/nitro_enclaves/ne_pci_dev.c
index 6b81e8f3a5dc..a219657ace80 100644
--- a/drivers/virt/nitro_enclaves/ne_pci_dev.c
+++ b/drivers/virt/nitro_enclaves/ne_pci_dev.c
@@ -468,7 +468,7 @@ static int ne_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	struct ne_pci_dev *ne_pci_dev = NULL;
 	int rc = -EINVAL;

-	ne_pci_dev = kzalloc(sizeof(*ne_pci_dev), GFP_KERNEL);
+	ne_pci_dev = kzalloc_obj(*ne_pci_dev, GFP_KERNEL);
 	if (!ne_pci_dev)
 		return -ENOMEM;

diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
index b177a534b6a4..9621606fc5db 100644
--- a/drivers/virt/vboxguest/vboxguest_core.c
+++ b/drivers/virt/vboxguest/vboxguest_core.c
@@ -74,7 +74,7 @@ static void vbg_guest_mappings_init(struct vbg_dev *gdev)
 	/* Add 4M so that we can align the vmap to 4MiB as the host requires. */
 	size = PAGE_ALIGN(req->hypervisor_size) + SZ_4M;

-	pages = kmalloc_array(size >> PAGE_SHIFT, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, size >> PAGE_SHIFT, GFP_KERNEL);
 	if (!pages)
 		goto out;

@@ -275,9 +275,8 @@ static int vbg_balloon_inflate(struct vbg_dev *gdev, u32 chunk_idx)
 	struct page **pages;
 	int i, rc, ret;

-	pages = kmalloc_array(VMMDEV_MEMORY_BALLOON_CHUNK_PAGES,
-			      sizeof(*pages),
-			      GFP_KERNEL | __GFP_NOWARN);
+	pages = kmalloc_objs(*pages, VMMDEV_MEMORY_BALLOON_CHUNK_PAGES,
+			     GFP_KERNEL | __GFP_NOWARN);
 	if (!pages)
 		return -ENOMEM;

@@ -1081,7 +1080,7 @@ struct vbg_session *vbg_core_open_session(struct vbg_dev *gdev, u32 requestor)
 {
 	struct vbg_session *session;

-	session = kzalloc(sizeof(*session), GFP_KERNEL);
+	session = kzalloc_obj(*session, GFP_KERNEL);
 	if (!session)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index 4e549abe59ff..4151aeebe766 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -927,7 +927,7 @@ static int virtballoon_probe(struct virtio_device *vdev)
 		return -EINVAL;
 	}

-	vdev->priv = vb = kzalloc(sizeof(*vb), GFP_KERNEL);
+	vdev->priv = vb = kzalloc_obj(*vb, GFP_KERNEL);
 	if (!vb) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/virtio/virtio_input.c b/drivers/virtio/virtio_input.c
index 74df16677da8..2386021e6dc5 100644
--- a/drivers/virtio/virtio_input.c
+++ b/drivers/virtio/virtio_input.c
@@ -83,7 +83,7 @@ static int virtinput_send_status(struct virtio_input *vi,
 	if (vi->idev->mt && type == EV_MSC && code == MSC_TIMESTAMP)
 		return 0;

-	stsbuf = kzalloc(sizeof(*stsbuf), GFP_ATOMIC);
+	stsbuf = kzalloc_obj(*stsbuf, GFP_ATOMIC);
 	if (!stsbuf)
 		return -ENOMEM;

@@ -229,7 +229,7 @@ static int virtinput_probe(struct virtio_device *vdev)
 	if (!virtio_has_feature(vdev, VIRTIO_F_VERSION_1))
 		return -ENODEV;

-	vi = kzalloc(sizeof(*vi), GFP_KERNEL);
+	vi = kzalloc_obj(*vi, GFP_KERNEL);
 	if (!vi)
 		return -ENOMEM;

diff --git a/drivers/virtio/virtio_mem.c b/drivers/virtio/virtio_mem.c
index 1688ecd69a04..065027783822 100644
--- a/drivers/virtio/virtio_mem.c
+++ b/drivers/virtio/virtio_mem.c
@@ -2940,7 +2940,7 @@ static int virtio_mem_probe(struct virtio_device *vdev)
 	BUILD_BUG_ON(sizeof(struct virtio_mem_req) != 24);
 	BUILD_BUG_ON(sizeof(struct virtio_mem_resp) != 10);

-	vdev->priv = vm = kzalloc(sizeof(*vm), GFP_KERNEL);
+	vdev->priv = vm = kzalloc_obj(*vm, GFP_KERNEL);
 	if (!vm)
 		return -ENOMEM;

diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
index b152a1eca05a..7b063ea8b7f1 100644
--- a/drivers/virtio/virtio_mmio.c
+++ b/drivers/virtio/virtio_mmio.c
@@ -575,7 +575,7 @@ static int virtio_mmio_probe(struct platform_device *pdev)
 	unsigned long magic;
 	int rc;

-	vm_dev = kzalloc(sizeof(*vm_dev), GFP_KERNEL);
+	vm_dev = kzalloc_obj(*vm_dev, GFP_KERNEL);
 	if (!vm_dev)
 		return -ENOMEM;

diff --git a/drivers/virtio/virtio_pci_admin_legacy_io.c b/drivers/virtio/virtio_pci_admin_legacy_io.c
index 819cfbbc67c3..24733b098703 100644
--- a/drivers/virtio/virtio_pci_admin_legacy_io.c
+++ b/drivers/virtio/virtio_pci_admin_legacy_io.c
@@ -124,7 +124,7 @@ static int virtio_pci_admin_legacy_io_read(struct pci_dev *pdev, u16 opcode,
 	if (vf_id < 0)
 		return vf_id;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -210,7 +210,7 @@ int virtio_pci_admin_legacy_io_notify_info(struct pci_dev *pdev,
 	if (vf_id < 0)
 		return vf_id;

-	result = kzalloc(sizeof(*result), GFP_KERNEL);
+	result = kzalloc_obj(*result, GFP_KERNEL);
 	if (!result)
 		return -ENOMEM;

diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
index d6d79af44569..2749bd6500fb 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -134,14 +134,13 @@ static int vp_request_msix_vectors(struct virtio_device *vdev, int nvectors,

 	vp_dev->msix_vectors = nvectors;

-	vp_dev->msix_names = kmalloc_array(nvectors,
-					   sizeof(*vp_dev->msix_names),
-					   GFP_KERNEL);
+	vp_dev->msix_names = kmalloc_objs(*vp_dev->msix_names, nvectors,
+					  GFP_KERNEL);
 	if (!vp_dev->msix_names)
 		goto error;
 	vp_dev->msix_affinity_masks
-		= kcalloc(nvectors, sizeof(*vp_dev->msix_affinity_masks),
-			  GFP_KERNEL);
+		= kzalloc_objs(*vp_dev->msix_affinity_masks, nvectors,
+			       GFP_KERNEL);
 	if (!vp_dev->msix_affinity_masks)
 		goto error;
 	for (i = 0; i < nvectors; ++i)
@@ -211,7 +210,7 @@ static struct virtqueue *vp_setup_vq(struct virtio_device *vdev, unsigned int in
 				     struct virtio_pci_vq_info **p_info)
 {
 	struct virtio_pci_device *vp_dev = to_vp_device(vdev);
-	struct virtio_pci_vq_info *info = kmalloc(sizeof *info, GFP_KERNEL);
+	struct virtio_pci_vq_info *info = kmalloc_obj(*info, GFP_KERNEL);
 	struct virtqueue *vq;
 	unsigned long flags;

@@ -387,7 +386,7 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned int nvqs,
 	bool per_vq_vectors;
 	u16 avq_num = 0;

-	vp_dev->vqs = kcalloc(nvqs, sizeof(*vp_dev->vqs), GFP_KERNEL);
+	vp_dev->vqs = kzalloc_objs(*vp_dev->vqs, nvqs, GFP_KERNEL);
 	if (!vp_dev->vqs)
 		return -ENOMEM;

@@ -464,7 +463,7 @@ static int vp_find_vqs_intx(struct virtio_device *vdev, unsigned int nvqs,
 	struct virtqueue *vq;
 	u16 avq_num = 0;

-	vp_dev->vqs = kcalloc(nvqs, sizeof(*vp_dev->vqs), GFP_KERNEL);
+	vp_dev->vqs = kzalloc_objs(*vp_dev->vqs, nvqs, GFP_KERNEL);
 	if (!vp_dev->vqs)
 		return -ENOMEM;

@@ -686,7 +685,7 @@ static int virtio_pci_probe(struct pci_dev *pci_dev,
 	int rc;

 	/* allocate our structure and fill it out */
-	vp_dev = kzalloc(sizeof(struct virtio_pci_device), GFP_KERNEL);
+	vp_dev = kzalloc_obj(struct virtio_pci_device, GFP_KERNEL);
 	if (!vp_dev)
 		return -ENOMEM;

diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c
index dd0e65f71d41..041a7fd72835 100644
--- a/drivers/virtio/virtio_pci_modern.c
+++ b/drivers/virtio/virtio_pci_modern.c
@@ -137,11 +137,11 @@ int vp_modern_admin_cmd_exec(struct virtio_device *vdev,
 	if (!virtio_has_feature(vdev, VIRTIO_F_ADMIN_VQ))
 		return -EOPNOTSUPP;

-	va_status = kzalloc(sizeof(*va_status), GFP_KERNEL);
+	va_status = kzalloc_obj(*va_status, GFP_KERNEL);
 	if (!va_status)
 		return -ENOMEM;

-	va_hdr = kzalloc(sizeof(*va_hdr), GFP_KERNEL);
+	va_hdr = kzalloc_obj(*va_hdr, GFP_KERNEL);
 	if (!va_hdr) {
 		ret = -ENOMEM;
 		goto err_alloc;
@@ -204,7 +204,7 @@ static void virtio_pci_admin_cmd_list_init(struct virtio_device *virtio_dev)
 	__le64 *data;
 	int ret;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return;

@@ -246,11 +246,11 @@ virtio_pci_admin_cmd_dev_parts_objects_enable(struct virtio_device *virtio_dev)
 	u16 set_data_size;
 	int ret;

-	get_data = kzalloc(sizeof(*get_data), GFP_KERNEL);
+	get_data = kzalloc_obj(*get_data, GFP_KERNEL);
 	if (!get_data)
 		return;

-	result = kzalloc(sizeof(*result), GFP_KERNEL);
+	result = kzalloc_obj(*result, GFP_KERNEL);
 	if (!result)
 		goto end;

@@ -310,7 +310,7 @@ static void virtio_pci_admin_cmd_cap_init(struct virtio_device *virtio_dev)
 	struct scatterlist result_sg;
 	int ret;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return;

@@ -929,7 +929,7 @@ int virtio_pci_admin_mode_set(struct pci_dev *pdev, u8 flags)
 	if (vf_id < 0)
 		return vf_id;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -1054,7 +1054,7 @@ int virtio_pci_admin_obj_destroy(struct pci_dev *pdev, u16 obj_type, u32 id)
 	if (obj_type != VIRTIO_RESOURCE_OBJ_DEV_PARTS)
 		return -EINVAL;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -1109,11 +1109,11 @@ int virtio_pci_admin_dev_parts_metadata_get(struct pci_dev *pdev, u16 obj_type,
 	if (vf_id < 0)
 		return vf_id;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

-	result = kzalloc(sizeof(*result), GFP_KERNEL);
+	result = kzalloc_obj(*result, GFP_KERNEL);
 	if (!result) {
 		ret = -ENOMEM;
 		goto end;
@@ -1173,7 +1173,7 @@ int virtio_pci_admin_dev_parts_get(struct pci_dev *pdev, u16 obj_type, u32 id,
 	if (vf_id < 0)
 		return vf_id;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index 4fe0f78df5ec..2cab954906cd 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -1209,7 +1209,7 @@ static int vring_alloc_state_extra_split(struct vring_virtqueue_split *vring_spl
 	struct vring_desc_extra *extra;
 	u32 num = vring_split->vring.num;

-	state = kmalloc_array(num, sizeof(struct vring_desc_state_split), GFP_KERNEL);
+	state = kmalloc_objs(struct vring_desc_state_split, num, GFP_KERNEL);
 	if (!state)
 		goto err_state;

@@ -1308,7 +1308,7 @@ static struct virtqueue *__vring_new_virtqueue_split(unsigned int index,
 	struct vring_virtqueue *vq;
 	int err;

-	vq = kmalloc(sizeof(*vq), GFP_KERNEL);
+	vq = kmalloc_obj(*vq, GFP_KERNEL);
 	if (!vq)
 		return NULL;

@@ -2349,8 +2349,7 @@ static struct vring_desc_extra *vring_alloc_desc_extra(unsigned int num)
 	struct vring_desc_extra *desc_extra;
 	unsigned int i;

-	desc_extra = kmalloc_array(num, sizeof(struct vring_desc_extra),
-				   GFP_KERNEL);
+	desc_extra = kmalloc_objs(struct vring_desc_extra, num, GFP_KERNEL);
 	if (!desc_extra)
 		return NULL;

@@ -2450,7 +2449,7 @@ static int vring_alloc_state_extra_packed(struct vring_virtqueue_packed *vring_p
 	struct vring_desc_extra *extra;
 	u32 num = vring_packed->vring.num;

-	state = kmalloc_array(num, sizeof(struct vring_desc_state_packed), GFP_KERNEL);
+	state = kmalloc_objs(struct vring_desc_state_packed, num, GFP_KERNEL);
 	if (!state)
 		goto err_desc_state;

@@ -2529,7 +2528,7 @@ static struct virtqueue *__vring_new_virtqueue_packed(unsigned int index,
 	struct vring_virtqueue *vq;
 	int err;

-	vq = kmalloc(sizeof(*vq), GFP_KERNEL);
+	vq = kmalloc_obj(*vq, GFP_KERNEL);
 	if (!vq)
 		return NULL;

diff --git a/drivers/virtio/virtio_vdpa.c b/drivers/virtio/virtio_vdpa.c
index 0a801f67b599..6c0d2f946817 100644
--- a/drivers/virtio/virtio_vdpa.c
+++ b/drivers/virtio/virtio_vdpa.c
@@ -287,7 +287,7 @@ create_affinity_masks(unsigned int nvecs, struct irq_affinity *affd)
 	if (!affvecs)
 		return NULL;

-	masks = kcalloc(nvecs, sizeof(*masks), GFP_KERNEL);
+	masks = kzalloc_objs(*masks, nvecs, GFP_KERNEL);
 	if (!masks)
 		return NULL;

@@ -462,7 +462,7 @@ static int virtio_vdpa_probe(struct vdpa_device *vdpa)
 	struct virtio_vdpa_device *vd_dev, *reg_dev = NULL;
 	int ret = -EINVAL;

-	vd_dev = kzalloc(sizeof(*vd_dev), GFP_KERNEL);
+	vd_dev = kzalloc_obj(*vd_dev, GFP_KERNEL);
 	if (!vd_dev)
 		return -ENOMEM;

diff --git a/drivers/w1/masters/ds2490.c b/drivers/w1/masters/ds2490.c
index e1cac0730cbb..68501b0a2c4d 100644
--- a/drivers/w1/masters/ds2490.c
+++ b/drivers/w1/masters/ds2490.c
@@ -1018,7 +1018,7 @@ static int ds_probe(struct usb_interface *intf,
 	struct ds_device *dev;
 	int i, err, alt;

-	dev = kzalloc(sizeof(struct ds_device), GFP_KERNEL);
+	dev = kzalloc_obj(struct ds_device, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;

diff --git a/drivers/w1/slaves/w1_ds2433.c b/drivers/w1/slaves/w1_ds2433.c
index 3371d804dc6c..54d78060d6ff 100644
--- a/drivers/w1/slaves/w1_ds2433.c
+++ b/drivers/w1/slaves/w1_ds2433.c
@@ -320,7 +320,7 @@ static int w1_f23_add_slave(struct w1_slave *sl)
 {
 	struct w1_f23_data *data;

-	data = kzalloc(sizeof(struct w1_f23_data), GFP_KERNEL);
+	data = kzalloc_obj(struct w1_f23_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/drivers/w1/slaves/w1_ds28e04.c b/drivers/w1/slaves/w1_ds28e04.c
index c577b5973032..cb198414d47b 100644
--- a/drivers/w1/slaves/w1_ds28e04.c
+++ b/drivers/w1/slaves/w1_ds28e04.c
@@ -384,7 +384,7 @@ static int w1_f1C_add_slave(struct w1_slave *sl)
 	struct w1_f1C_data *data = NULL;

 	if (w1_enable_crccheck) {
-		data = kzalloc(sizeof(struct w1_f1C_data), GFP_KERNEL);
+		data = kzalloc_obj(struct w1_f1C_data, GFP_KERNEL);
 		if (!data)
 			return -ENOMEM;
 		sl->family_data = data;
diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c
index 832e3da94b20..f72e9b57fe79 100644
--- a/drivers/w1/slaves/w1_therm.c
+++ b/drivers/w1/slaves/w1_therm.c
@@ -973,8 +973,7 @@ static int w1_therm_add_slave(struct w1_slave *sl)
 	struct w1_therm_family_converter *sl_family_conv;

 	/* Allocate memory */
-	sl->family_data = kzalloc(sizeof(struct w1_therm_family_data),
-		GFP_KERNEL);
+	sl->family_data = kzalloc_obj(struct w1_therm_family_data, GFP_KERNEL);
 	if (!sl->family_data)
 		return -ENOMEM;

diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
index 5f78b0a0b766..a08d5b420f31 100644
--- a/drivers/w1/w1.c
+++ b/drivers/w1/w1.c
@@ -715,7 +715,7 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
 	int err;
 	struct w1_netlink_msg msg;

-	sl = kzalloc(sizeof(struct w1_slave), GFP_KERNEL);
+	sl = kzalloc_obj(struct w1_slave, GFP_KERNEL);
 	if (!sl) {
 		dev_err(&dev->dev,
 			 "%s: failed to allocate new slave device.\n",
diff --git a/drivers/watchdog/exar_wdt.c b/drivers/watchdog/exar_wdt.c
index c2e3bb08df89..30fa33a4c08d 100644
--- a/drivers/watchdog/exar_wdt.c
+++ b/drivers/watchdog/exar_wdt.c
@@ -342,7 +342,7 @@ static int __init exar_wdt_register(struct wdt_priv *priv, const int idx)
 {
 	struct wdt_pdev_node *n;

-	n = kzalloc(sizeof(*n), GFP_KERNEL);
+	n = kzalloc_obj(*n, GFP_KERNEL);
 	if (!n)
 		return -ENOMEM;

diff --git a/drivers/watchdog/mei_wdt.c b/drivers/watchdog/mei_wdt.c
index c7a7235e6224..01c44881608c 100644
--- a/drivers/watchdog/mei_wdt.c
+++ b/drivers/watchdog/mei_wdt.c
@@ -563,7 +563,7 @@ static int mei_wdt_probe(struct mei_cl_device *cldev,
 	struct mei_wdt *wdt;
 	int ret;

-	wdt = kzalloc(sizeof(struct mei_wdt), GFP_KERNEL);
+	wdt = kzalloc_obj(struct mei_wdt, GFP_KERNEL);
 	if (!wdt)
 		return -ENOMEM;

diff --git a/drivers/watchdog/pcwd_usb.c b/drivers/watchdog/pcwd_usb.c
index b636650b714b..dbefe9a690d7 100644
--- a/drivers/watchdog/pcwd_usb.c
+++ b/drivers/watchdog/pcwd_usb.c
@@ -641,7 +641,7 @@ static int usb_pcwd_probe(struct usb_interface *interface,
 	pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress);

 	/* allocate memory for our device and initialize it */
-	usb_pcwd = kzalloc(sizeof(struct usb_pcwd_private), GFP_KERNEL);
+	usb_pcwd = kzalloc_obj(struct usb_pcwd_private, GFP_KERNEL);
 	if (usb_pcwd == NULL)
 		goto error;

diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
index 9a5e544b886b..cd4c7342a172 100644
--- a/drivers/watchdog/watchdog_dev.c
+++ b/drivers/watchdog/watchdog_dev.c
@@ -1019,7 +1019,7 @@ static int watchdog_cdev_register(struct watchdog_device *wdd)
 	struct watchdog_core_data *wd_data;
 	int err;

-	wd_data = kzalloc(sizeof(struct watchdog_core_data), GFP_KERNEL);
+	wd_data = kzalloc_obj(struct watchdog_core_data, GFP_KERNEL);
 	if (!wd_data)
 		return -ENOMEM;
 	mutex_init(&wd_data->lock);
diff --git a/drivers/watchdog/watchdog_pretimeout.c b/drivers/watchdog/watchdog_pretimeout.c
index 2526436dc74d..3957b6ba63b7 100644
--- a/drivers/watchdog/watchdog_pretimeout.c
+++ b/drivers/watchdog/watchdog_pretimeout.c
@@ -119,7 +119,7 @@ int watchdog_register_governor(struct watchdog_governor *gov)
 	struct watchdog_pretimeout *p;
 	struct governor_priv *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -183,7 +183,7 @@ int watchdog_register_pretimeout(struct watchdog_device *wdd)
 	if (!watchdog_have_pretimeout(wdd))
 		return 0;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/drivers/xen/arm-device.c b/drivers/xen/arm-device.c
index 87493f92291f..009c76546d85 100644
--- a/drivers/xen/arm-device.c
+++ b/drivers/xen/arm-device.c
@@ -59,9 +59,9 @@ static int xen_map_device_mmio(const struct resource *resources,
 		if ((resource_type(r) != IORESOURCE_MEM) || (nr == 0))
 			continue;

-		gpfns = kcalloc(nr, sizeof(xen_pfn_t), GFP_KERNEL);
-		idxs = kcalloc(nr, sizeof(xen_ulong_t), GFP_KERNEL);
-		errs = kcalloc(nr, sizeof(int), GFP_KERNEL);
+		gpfns = kzalloc_objs(xen_pfn_t, nr, GFP_KERNEL);
+		idxs = kzalloc_objs(xen_ulong_t, nr, GFP_KERNEL);
+		errs = kzalloc_objs(int, nr, GFP_KERNEL);
 		if (!gpfns || !idxs || !errs) {
 			kfree(gpfns);
 			kfree(idxs);
diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index 9b6531eb28b6..6cbff7e90947 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -242,7 +242,7 @@ static struct resource *additional_memory_resource(phys_addr_t size)
 	struct resource *res;
 	int ret;

-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (!res)
 		return NULL;

diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index 663df17776fd..515bb5708e7f 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -714,7 +714,7 @@ static struct irq_info *xen_irq_init(unsigned int irq)
 {
 	struct irq_info *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (info) {
 		info->irq = irq;
 		info->type = IRQT_UNBOUND;
@@ -2292,8 +2292,9 @@ void __init xen_init_IRQ(void)
 				  "xen/evtchn:prepare",
 				  xen_evtchn_cpu_prepare, xen_evtchn_cpu_dead);

-	evtchn_to_irq = kcalloc(EVTCHN_ROW(xen_evtchn_max_channels()),
-				sizeof(*evtchn_to_irq), GFP_KERNEL);
+	evtchn_to_irq = kzalloc_objs(*evtchn_to_irq,
+				     EVTCHN_ROW(xen_evtchn_max_channels()),
+				     GFP_KERNEL);
 	BUG_ON(!evtchn_to_irq);

 	/* No event channels are 'live' right now. */
diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
index 7e4a13e632dc..568f1830f3a3 100644
--- a/drivers/xen/evtchn.c
+++ b/drivers/xen/evtchn.c
@@ -332,7 +332,7 @@ static int evtchn_resize_ring(struct per_user_data *u)
 	else
 		new_size = 2 * u->ring_size;

-	new_ring = kvmalloc_array(new_size, sizeof(*new_ring), GFP_KERNEL);
+	new_ring = kvmalloc_objs(*new_ring, new_size, GFP_KERNEL);
 	if (!new_ring)
 		return -ENOMEM;

@@ -386,7 +386,7 @@ static int evtchn_bind_to_user(struct per_user_data *u, evtchn_port_t port,
 	 * serialized bind operations.)
 	 */

-	evtchn = kzalloc(sizeof(*evtchn), GFP_KERNEL);
+	evtchn = kzalloc_obj(*evtchn, GFP_KERNEL);
 	if (!evtchn)
 		return -ENOMEM;

@@ -642,7 +642,7 @@ static int evtchn_open(struct inode *inode, struct file *filp)
 {
 	struct per_user_data *u;

-	u = kzalloc(sizeof(*u), GFP_KERNEL);
+	u = kzalloc_obj(*u, GFP_KERNEL);
 	if (u == NULL)
 		return -ENOMEM;

diff --git a/drivers/xen/gntalloc.c b/drivers/xen/gntalloc.c
index f93f73ecefee..8204135c31f9 100644
--- a/drivers/xen/gntalloc.c
+++ b/drivers/xen/gntalloc.c
@@ -128,7 +128,7 @@ static int add_grefs(struct ioctl_gntalloc_alloc_gref *op,

 	readonly = !(op->flags & GNTALLOC_FLAG_WRITABLE);
 	for (i = 0; i < op->count; i++) {
-		gref = kzalloc(sizeof(*gref), GFP_KERNEL);
+		gref = kzalloc_obj(*gref, GFP_KERNEL);
 		if (!gref) {
 			rc = -ENOMEM;
 			goto undo;
@@ -229,7 +229,7 @@ static int gntalloc_open(struct inode *inode, struct file *filp)
 {
 	struct gntalloc_file_private_data *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		goto out_nomem;
 	INIT_LIST_HEAD(&priv->list);
@@ -501,7 +501,7 @@ static int gntalloc_mmap(struct file *filp, struct vm_area_struct *vma)
 		return -EINVAL;
 	}

-	vm_priv = kmalloc(sizeof(*vm_priv), GFP_KERNEL);
+	vm_priv = kmalloc_obj(*vm_priv, GFP_KERNEL);
 	if (!vm_priv)
 		return -ENOMEM;

diff --git a/drivers/xen/gntdev-dmabuf.c b/drivers/xen/gntdev-dmabuf.c
index 550980dd3b0b..649d3a912d20 100644
--- a/drivers/xen/gntdev-dmabuf.c
+++ b/drivers/xen/gntdev-dmabuf.c
@@ -95,7 +95,7 @@ dmabuf_exp_wait_obj_new(struct gntdev_dmabuf_priv *priv,
 {
 	struct gntdev_dmabuf_wait_obj *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return ERR_PTR(-ENOMEM);

@@ -198,7 +198,7 @@ dmabuf_pages_to_sgt(struct page **pages, unsigned int nr_pages)
 	struct sg_table *sgt;
 	int ret;

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt) {
 		ret = -ENOMEM;
 		goto out;
@@ -222,8 +222,7 @@ static int dmabuf_exp_ops_attach(struct dma_buf *dma_buf,
 {
 	struct gntdev_dmabuf_attachment *gntdev_dmabuf_attach;

-	gntdev_dmabuf_attach = kzalloc(sizeof(*gntdev_dmabuf_attach),
-				       GFP_KERNEL);
+	gntdev_dmabuf_attach = kzalloc_obj(*gntdev_dmabuf_attach, GFP_KERNEL);
 	if (!gntdev_dmabuf_attach)
 		return -ENOMEM;

@@ -363,7 +362,7 @@ static int dmabuf_exp_from_pages(struct gntdev_dmabuf_export_args *args)
 	if (ret < 0)
 		return ret;

-	gntdev_dmabuf = kzalloc(sizeof(*gntdev_dmabuf), GFP_KERNEL);
+	gntdev_dmabuf = kzalloc_obj(*gntdev_dmabuf, GFP_KERNEL);
 	if (!gntdev_dmabuf)
 		return -ENOMEM;

@@ -531,13 +530,12 @@ static struct gntdev_dmabuf *dmabuf_imp_alloc_storage(int count)
 	struct gntdev_dmabuf *gntdev_dmabuf;
 	int i;

-	gntdev_dmabuf = kzalloc(sizeof(*gntdev_dmabuf), GFP_KERNEL);
+	gntdev_dmabuf = kzalloc_obj(*gntdev_dmabuf, GFP_KERNEL);
 	if (!gntdev_dmabuf)
 		goto fail_no_free;

-	gntdev_dmabuf->u.imp.refs = kcalloc(count,
-					    sizeof(gntdev_dmabuf->u.imp.refs[0]),
-					    GFP_KERNEL);
+	gntdev_dmabuf->u.imp.refs = kzalloc_objs(gntdev_dmabuf->u.imp.refs[0],
+						 count, GFP_KERNEL);
 	if (!gntdev_dmabuf->u.imp.refs)
 		goto fail;

@@ -818,7 +816,7 @@ struct gntdev_dmabuf_priv *gntdev_dmabuf_init(struct file *filp)
 {
 	struct gntdev_dmabuf_priv *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
index 2c960f187f7c..1a986cb7324a 100644
--- a/drivers/xen/gntdev.c
+++ b/drivers/xen/gntdev.c
@@ -141,19 +141,16 @@ struct gntdev_grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count,
 	struct gntdev_grant_map *add;
 	int i;

-	add = kzalloc(sizeof(*add), GFP_KERNEL);
+	add = kzalloc_obj(*add, GFP_KERNEL);
 	if (NULL == add)
 		return NULL;

-	add->grants    = kvmalloc_array(count, sizeof(add->grants[0]),
-					GFP_KERNEL);
-	add->map_ops   = kvmalloc_array(count, sizeof(add->map_ops[0]),
-					GFP_KERNEL);
-	add->unmap_ops = kvmalloc_array(count, sizeof(add->unmap_ops[0]),
-					GFP_KERNEL);
-	add->pages     = kvcalloc(count, sizeof(add->pages[0]), GFP_KERNEL);
+	add->grants    = kvmalloc_objs(add->grants[0], count, GFP_KERNEL);
+	add->map_ops   = kvmalloc_objs(add->map_ops[0], count, GFP_KERNEL);
+	add->unmap_ops = kvmalloc_objs(add->unmap_ops[0], count, GFP_KERNEL);
+	add->pages     = kvzalloc_objs(add->pages[0], count, GFP_KERNEL);
 	add->being_removed =
-		kvcalloc(count, sizeof(add->being_removed[0]), GFP_KERNEL);
+		kvzalloc_objs(add->being_removed[0], count, GFP_KERNEL);
 	if (NULL == add->grants    ||
 	    NULL == add->map_ops   ||
 	    NULL == add->unmap_ops ||
@@ -161,10 +158,10 @@ struct gntdev_grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count,
 	    NULL == add->being_removed)
 		goto err;
 	if (xen_pv_domain()) {
-		add->kmap_ops   = kvmalloc_array(count, sizeof(add->kmap_ops[0]),
-						 GFP_KERNEL);
-		add->kunmap_ops = kvmalloc_array(count, sizeof(add->kunmap_ops[0]),
-						 GFP_KERNEL);
+		add->kmap_ops   = kvmalloc_objs(add->kmap_ops[0], count,
+						GFP_KERNEL);
+		add->kunmap_ops = kvmalloc_objs(add->kunmap_ops[0], count,
+						GFP_KERNEL);
 		if (NULL == add->kmap_ops || NULL == add->kunmap_ops)
 			goto err;
 	}
@@ -179,8 +176,7 @@ struct gntdev_grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count,
 	if (dma_flags & (GNTDEV_DMA_FLAG_WC | GNTDEV_DMA_FLAG_COHERENT)) {
 		struct gnttab_dma_alloc_args args;

-		add->frames = kvcalloc(count, sizeof(add->frames[0]),
-				       GFP_KERNEL);
+		add->frames = kvzalloc_objs(add->frames[0], count, GFP_KERNEL);
 		if (!add->frames)
 			goto err;

@@ -587,7 +583,7 @@ static int gntdev_open(struct inode *inode, struct file *flip)
 {
 	struct gntdev_priv *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -972,7 +968,7 @@ static long gntdev_ioctl_grant_copy(struct gntdev_priv *priv, void __user *u)

 	mutex_lock(&priv->batch_lock);
 	if (!priv->batch) {
-		batch = kmalloc(sizeof(*batch), GFP_KERNEL);
+		batch = kmalloc_obj(*batch, GFP_KERNEL);
 	} else {
 		batch = priv->batch;
 		priv->batch = batch->next;
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index 3e76e33f6e08..6fcd5a7f6605 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -556,7 +556,7 @@ static void gnttab_add_deferred(grant_ref_t ref, struct page *page)
 	gfp_t gfp = (in_atomic() || irqs_disabled()) ? GFP_ATOMIC : GFP_KERNEL;
 	uint64_t leaked, deferred;

-	entry = kmalloc(sizeof(*entry), gfp);
+	entry = kmalloc_obj(*entry, gfp);
 	if (!page) {
 		unsigned long gfn = gnttab_interface->read_frame(ref);

@@ -831,7 +831,7 @@ int gnttab_setup_auto_xlat_frames(phys_addr_t addr)
 			&addr);
 		return -ENOMEM;
 	}
-	pfn = kcalloc(max_nr_gframes, sizeof(pfn[0]), GFP_KERNEL);
+	pfn = kzalloc_objs(pfn[0], max_nr_gframes, GFP_KERNEL);
 	if (!pfn) {
 		memunmap(vaddr);
 		return -ENOMEM;
@@ -868,7 +868,7 @@ int gnttab_pages_set_private(int nr_pages, struct page **pages)
 #if BITS_PER_LONG < 64
 		struct xen_page_foreign *foreign;

-		foreign = kzalloc(sizeof(*foreign), GFP_KERNEL);
+		foreign = kzalloc_obj(*foreign, GFP_KERNEL);
 		if (!foreign)
 			return -ENOMEM;

@@ -1635,9 +1635,8 @@ int gnttab_init(void)
 	 */
 	max_nr_glist_frames = max_nr_grefs / RPP;

-	gnttab_list = kmalloc_array(max_nr_glist_frames,
-				    sizeof(grant_ref_t *),
-				    GFP_KERNEL);
+	gnttab_list = kmalloc_objs(grant_ref_t *, max_nr_glist_frames,
+				   GFP_KERNEL);
 	if (gnttab_list == NULL)
 		return -ENOMEM;

diff --git a/drivers/xen/mcelog.c b/drivers/xen/mcelog.c
index abe658c73b7b..ca8dbb9be419 100644
--- a/drivers/xen/mcelog.c
+++ b/drivers/xen/mcelog.c
@@ -373,8 +373,7 @@ static int bind_virq_for_mce(void)

 	/* Fetch each CPU Physical Info for later reference*/
 	ncpus = mc_op.u.mc_physcpuinfo.ncpus;
-	g_physinfo = kcalloc(ncpus, sizeof(struct mcinfo_logical_cpu),
-			     GFP_KERNEL);
+	g_physinfo = kzalloc_objs(struct mcinfo_logical_cpu, ncpus, GFP_KERNEL);
 	if (!g_physinfo)
 		return -ENOMEM;
 	set_xen_guest_handle(mc_op.u.mc_physcpuinfo.info, g_physinfo);
diff --git a/drivers/xen/pci.c b/drivers/xen/pci.c
index bfe07adb3e3a..07e6b811c9d3 100644
--- a/drivers/xen/pci.c
+++ b/drivers/xen/pci.c
@@ -336,7 +336,7 @@ int xen_register_device_domain_owner(struct pci_dev *dev, uint16_t domain)
 {
 	struct xen_device_domain_owner *owner;

-	owner = kzalloc(sizeof(struct xen_device_domain_owner), GFP_KERNEL);
+	owner = kzalloc_obj(struct xen_device_domain_owner, GFP_KERNEL);
 	if (!owner)
 		return -ENODEV;

diff --git a/drivers/xen/pcpu.c b/drivers/xen/pcpu.c
index 093ad4a08672..1d9f3874d099 100644
--- a/drivers/xen/pcpu.c
+++ b/drivers/xen/pcpu.c
@@ -247,7 +247,7 @@ static struct pcpu *create_and_register_pcpu(struct xenpf_pcpuinfo *info)
 	if (info->flags & XEN_PCPU_FLAGS_INVALID)
 		return ERR_PTR(-ENODEV);

-	pcpu = kzalloc(sizeof(struct pcpu), GFP_KERNEL);
+	pcpu = kzalloc_obj(struct pcpu, GFP_KERNEL);
 	if (!pcpu)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/xen/privcmd-buf.c b/drivers/xen/privcmd-buf.c
index 0f0dad427d7e..95d2d5ca5e4f 100644
--- a/drivers/xen/privcmd-buf.c
+++ b/drivers/xen/privcmd-buf.c
@@ -39,7 +39,7 @@ static int privcmd_buf_open(struct inode *ino, struct file *file)
 {
 	struct privcmd_buf_private *file_priv;

-	file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
+	file_priv = kzalloc_obj(*file_priv, GFP_KERNEL);
 	if (!file_priv)
 		return -ENOMEM;

@@ -141,7 +141,7 @@ static int privcmd_buf_mmap(struct file *file, struct vm_area_struct *vma)
 	if (!(vma->vm_flags & VM_SHARED))
 		return -EINVAL;

-	vma_priv = kzalloc(struct_size(vma_priv, pages, count), GFP_KERNEL);
+	vma_priv = kzalloc_flex(*vma_priv, pages, count, GFP_KERNEL);
 	if (!vma_priv)
 		return -ENOMEM;

diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
index 402be080ad2c..a5d9211f36c3 100644
--- a/drivers/xen/privcmd.c
+++ b/drivers/xen/privcmd.c
@@ -433,7 +433,7 @@ static int alloc_empty_pages(struct vm_area_struct *vma, int numpgs)
 	int rc;
 	struct page **pages;

-	pages = kvcalloc(numpgs, sizeof(pages[0]), GFP_KERNEL);
+	pages = kvzalloc_objs(pages[0], numpgs, GFP_KERNEL);
 	if (pages == NULL)
 		return -ENOMEM;

@@ -653,7 +653,7 @@ static long privcmd_ioctl_dm_op(struct file *file, void __user *udata)
 	if (kdata.num > privcmd_dm_op_max_num)
 		return -E2BIG;

-	kbufs = kcalloc(kdata.num, sizeof(*kbufs), GFP_KERNEL);
+	kbufs = kzalloc_objs(*kbufs, kdata.num, GFP_KERNEL);
 	if (!kbufs)
 		return -ENOMEM;

@@ -680,13 +680,13 @@ static long privcmd_ioctl_dm_op(struct file *file, void __user *udata)
 			PAGE_SIZE);
 	}

-	pages = kcalloc(nr_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kzalloc_objs(*pages, nr_pages, GFP_KERNEL);
 	if (!pages) {
 		rc = -ENOMEM;
 		goto out;
 	}

-	xbufs = kcalloc(kdata.num, sizeof(*xbufs), GFP_KERNEL);
+	xbufs = kzalloc_objs(*xbufs, kdata.num, GFP_KERNEL);
 	if (!xbufs) {
 		rc = -ENOMEM;
 		goto out;
@@ -773,7 +773,7 @@ static long privcmd_ioctl_mmap_resource(struct file *file,
 		goto out;
 	}

-	pfns = kcalloc(kdata.num, sizeof(*pfns), GFP_KERNEL | __GFP_NOWARN);
+	pfns = kzalloc_objs(*pfns, kdata.num, GFP_KERNEL | __GFP_NOWARN);
 	if (!pfns) {
 		rc = -ENOMEM;
 		goto out;
@@ -1355,7 +1355,7 @@ static int privcmd_ioeventfd_assign(struct privcmd_ioeventfd *ioeventfd)
 	if (!ioeventfd->vcpus || ioeventfd->vcpus > 4096)
 		return -EINVAL;

-	kioeventfd = kzalloc(sizeof(*kioeventfd), GFP_KERNEL);
+	kioeventfd = kzalloc_obj(*kioeventfd, GFP_KERNEL);
 	if (!kioeventfd)
 		return -ENOMEM;

@@ -1563,7 +1563,7 @@ static long privcmd_ioctl(struct file *file,

 static int privcmd_open(struct inode *ino, struct file *file)
 {
-	struct privcmd_data *data = kzalloc(sizeof(*data), GFP_KERNEL);
+	struct privcmd_data *data = kzalloc_obj(*data, GFP_KERNEL);

 	if (!data)
 		return -ENOMEM;
diff --git a/drivers/xen/pvcalls-back.c b/drivers/xen/pvcalls-back.c
index c5b6f6fa11eb..8a5dafcaab03 100644
--- a/drivers/xen/pvcalls-back.c
+++ b/drivers/xen/pvcalls-back.c
@@ -324,7 +324,7 @@ static struct sock_mapping *pvcalls_new_active_socket(
 	struct sock_mapping *map;
 	void *page;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (map == NULL) {
 		sock_release(sock);
 		return NULL;
@@ -632,7 +632,7 @@ static int pvcalls_back_bind(struct xenbus_device *dev,

 	fedata = dev_get_drvdata(&dev->dev);

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (map == NULL) {
 		ret = -ENOMEM;
 		goto out;
@@ -934,7 +934,7 @@ static int backend_connect(struct xenbus_device *dev)
 	grant_ref_t ring_ref;
 	struct pvcalls_fedata *fedata = NULL;

-	fedata = kzalloc(sizeof(struct pvcalls_fedata), GFP_KERNEL);
+	fedata = kzalloc_obj(struct pvcalls_fedata, GFP_KERNEL);
 	if (!fedata)
 		return -ENOMEM;

diff --git a/drivers/xen/pvcalls-front.c b/drivers/xen/pvcalls-front.c
index 4926d4badc57..c32fd69482e9 100644
--- a/drivers/xen/pvcalls-front.c
+++ b/drivers/xen/pvcalls-front.c
@@ -291,7 +291,7 @@ int pvcalls_front_socket(struct socket *sock)
 	}
 	bedata = dev_get_drvdata(&pvcalls_front_dev->dev);

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (map == NULL) {
 		pvcalls_exit();
 		return -ENOMEM;
@@ -820,7 +820,7 @@ int pvcalls_front_accept(struct socket *sock, struct socket *newsock,
 		}
 	}

-	map2 = kzalloc(sizeof(*map2), GFP_KERNEL);
+	map2 = kzalloc_obj(*map2, GFP_KERNEL);
 	if (map2 == NULL) {
 		clear_bit(PVCALLS_FLAG_ACCEPT_INFLIGHT,
 			  (void *)&map->passive.flags);
@@ -1179,7 +1179,7 @@ static int pvcalls_front_probe(struct xenbus_device *dev,
 		return -ENODEV;
 	pr_info("%s max-page-order is %u\n", __func__, max_page_order);

-	bedata = kzalloc(sizeof(struct pvcalls_bedata), GFP_KERNEL);
+	bedata = kzalloc_obj(struct pvcalls_bedata, GFP_KERNEL);
 	if (!bedata)
 		return -ENOMEM;

diff --git a/drivers/xen/sys-hypervisor.c b/drivers/xen/sys-hypervisor.c
index 2f880374b463..25f4e1ff13f6 100644
--- a/drivers/xen/sys-hypervisor.c
+++ b/drivers/xen/sys-hypervisor.c
@@ -182,7 +182,7 @@ static ssize_t compiler_show(struct hyp_sysfs_attr *attr, char *buffer)
 	int ret = -ENOMEM;
 	struct xen_compile_info *info;

-	info = kmalloc(sizeof(struct xen_compile_info), GFP_KERNEL);
+	info = kmalloc_obj(struct xen_compile_info, GFP_KERNEL);
 	if (info) {
 		ret = HYPERVISOR_xen_version(XENVER_compile_info, info);
 		if (!ret)
@@ -200,7 +200,7 @@ static ssize_t compiled_by_show(struct hyp_sysfs_attr *attr, char *buffer)
 	int ret = -ENOMEM;
 	struct xen_compile_info *info;

-	info = kmalloc(sizeof(struct xen_compile_info), GFP_KERNEL);
+	info = kmalloc_obj(struct xen_compile_info, GFP_KERNEL);
 	if (info) {
 		ret = HYPERVISOR_xen_version(XENVER_compile_info, info);
 		if (!ret)
@@ -218,7 +218,7 @@ static ssize_t compile_date_show(struct hyp_sysfs_attr *attr, char *buffer)
 	int ret = -ENOMEM;
 	struct xen_compile_info *info;

-	info = kmalloc(sizeof(struct xen_compile_info), GFP_KERNEL);
+	info = kmalloc_obj(struct xen_compile_info, GFP_KERNEL);
 	if (info) {
 		ret = HYPERVISOR_xen_version(XENVER_compile_info, info);
 		if (!ret)
@@ -291,7 +291,7 @@ static ssize_t virtual_start_show(struct hyp_sysfs_attr *attr, char *buffer)
 	int ret = -ENOMEM;
 	struct xen_platform_parameters *parms;

-	parms = kmalloc(sizeof(struct xen_platform_parameters), GFP_KERNEL);
+	parms = kmalloc_obj(struct xen_platform_parameters, GFP_KERNEL);
 	if (parms) {
 		ret = HYPERVISOR_xen_version(XENVER_platform_parameters,
 					     parms);
diff --git a/drivers/xen/time.c b/drivers/xen/time.c
index 0b18d8a5a2dd..a2be0a4d45b0 100644
--- a/drivers/xen/time.c
+++ b/drivers/xen/time.c
@@ -94,9 +94,8 @@ void xen_manage_runstate_time(int action)
 			pr_warn_once("%s: memory leak as runstate_delta is not NULL\n",
 					__func__);

-		runstate_delta = kmalloc_array(num_possible_cpus(),
-					sizeof(*runstate_delta),
-					GFP_ATOMIC);
+		runstate_delta = kmalloc_objs(*runstate_delta,
+					      num_possible_cpus(), GFP_ATOMIC);
 		if (unlikely(!runstate_delta)) {
 			pr_warn("%s: failed to allocate runstate_delta\n",
 					__func__);
diff --git a/drivers/xen/unpopulated-alloc.c b/drivers/xen/unpopulated-alloc.c
index 1dc0b495c8e5..4cfb6abdc3d8 100644
--- a/drivers/xen/unpopulated-alloc.c
+++ b/drivers/xen/unpopulated-alloc.c
@@ -43,7 +43,7 @@ static int fill_list(unsigned int nr_pages)
 	struct range mhp_range;
 	int ret;

-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	if (!res)
 		return -ENOMEM;

@@ -65,7 +65,7 @@ static int fill_list(unsigned int nr_pages)
 	 * re-using it by someone else.
 	 */
 	if (target_resource != &iomem_resource) {
-		tmp_res = kzalloc(sizeof(*tmp_res), GFP_KERNEL);
+		tmp_res = kzalloc_obj(*tmp_res, GFP_KERNEL);
 		if (!tmp_res) {
 			ret = -ENOMEM;
 			goto err_insert;
@@ -84,7 +84,7 @@ static int fill_list(unsigned int nr_pages)
 		}
 	}

-	pgmap = kzalloc(sizeof(*pgmap), GFP_KERNEL);
+	pgmap = kzalloc_obj(*pgmap, GFP_KERNEL);
 	if (!pgmap) {
 		ret = -ENOMEM;
 		goto err_pgmap;
diff --git a/drivers/xen/xen-acpi-processor.c b/drivers/xen/xen-acpi-processor.c
index f2e8eaf684ba..d7effbaf8948 100644
--- a/drivers/xen/xen-acpi-processor.c
+++ b/drivers/xen/xen-acpi-processor.c
@@ -61,8 +61,8 @@ static int push_cxx_to_hypervisor(struct acpi_processor *_pr)
 	unsigned int i, ok;
 	int ret = 0;

-	dst_cx_states = kcalloc(_pr->power.count,
-				sizeof(struct xen_processor_cx), GFP_KERNEL);
+	dst_cx_states = kzalloc_objs(struct xen_processor_cx, _pr->power.count,
+				     GFP_KERNEL);
 	if (!dst_cx_states)
 		return -ENOMEM;

@@ -142,8 +142,8 @@ xen_copy_pss_data(struct acpi_processor *_pr,
 	BUILD_BUG_ON(sizeof(struct xen_processor_px) !=
 		     sizeof(struct acpi_processor_px));

-	dst_states = kcalloc(_pr->performance->state_count,
-			     sizeof(struct xen_processor_px), GFP_KERNEL);
+	dst_states = kzalloc_objs(struct xen_processor_px,
+				  _pr->performance->state_count, GFP_KERNEL);
 	if (!dst_states)
 		return ERR_PTR(-ENOMEM);

@@ -412,8 +412,8 @@ static int check_acpi_ids(struct acpi_processor *pr_backup)
 		return -ENOMEM;
 	}

-	acpi_psd = kcalloc(nr_acpi_bits, sizeof(struct acpi_psd_package),
-			   GFP_KERNEL);
+	acpi_psd = kzalloc_objs(struct acpi_psd_package, nr_acpi_bits,
+				GFP_KERNEL);
 	if (!acpi_psd) {
 		bitmap_free(acpi_id_present);
 		bitmap_free(acpi_id_cst_present);
diff --git a/drivers/xen/xen-front-pgdir-shbuf.c b/drivers/xen/xen-front-pgdir-shbuf.c
index 223870a0111b..32e28f044b33 100644
--- a/drivers/xen/xen-front-pgdir-shbuf.c
+++ b/drivers/xen/xen-front-pgdir-shbuf.c
@@ -205,8 +205,7 @@ static int backend_unmap(struct xen_front_pgdir_shbuf *buf)
 	if (!buf->pages || !buf->backend_map_handles || !buf->grefs)
 		return 0;

-	unmap_ops = kcalloc(buf->num_pages, sizeof(*unmap_ops),
-			    GFP_KERNEL);
+	unmap_ops = kzalloc_objs(*unmap_ops, buf->num_pages, GFP_KERNEL);
 	if (!unmap_ops)
 		return -ENOMEM;

@@ -250,13 +249,12 @@ static int backend_map(struct xen_front_pgdir_shbuf *buf)
 	unsigned char *ptr;
 	int ret, cur_gref, cur_dir_page, cur_page, grefs_left;

-	map_ops = kcalloc(buf->num_pages, sizeof(*map_ops), GFP_KERNEL);
+	map_ops = kzalloc_objs(*map_ops, buf->num_pages, GFP_KERNEL);
 	if (!map_ops)
 		return -ENOMEM;

-	buf->backend_map_handles = kcalloc(buf->num_pages,
-					   sizeof(*buf->backend_map_handles),
-					   GFP_KERNEL);
+	buf->backend_map_handles = kzalloc_objs(*buf->backend_map_handles,
+						buf->num_pages, GFP_KERNEL);
 	if (!buf->backend_map_handles) {
 		kfree(map_ops);
 		return -ENOMEM;
@@ -474,7 +472,7 @@ static int grant_references(struct xen_front_pgdir_shbuf *buf)
  */
 static int alloc_storage(struct xen_front_pgdir_shbuf *buf)
 {
-	buf->grefs = kcalloc(buf->num_grefs, sizeof(*buf->grefs), GFP_KERNEL);
+	buf->grefs = kzalloc_objs(*buf->grefs, buf->num_grefs, GFP_KERNEL);
 	if (!buf->grefs)
 		return -ENOMEM;

diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c
index d47eee6c5143..fbc40acd593f 100644
--- a/drivers/xen/xen-pciback/conf_space.c
+++ b/drivers/xen/xen-pciback/conf_space.c
@@ -401,7 +401,7 @@ int xen_pcibk_config_add_field_offset(struct pci_dev *dev,
 	struct config_field_entry *cfg_entry;
 	void *tmp;

-	cfg_entry = kmalloc(sizeof(*cfg_entry), GFP_KERNEL);
+	cfg_entry = kmalloc_obj(*cfg_entry, GFP_KERNEL);
 	if (!cfg_entry) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/xen/xen-pciback/conf_space_header.c b/drivers/xen/xen-pciback/conf_space_header.c
index fc0332645966..0efbd85cf7e1 100644
--- a/drivers/xen/xen-pciback/conf_space_header.c
+++ b/drivers/xen/xen-pciback/conf_space_header.c
@@ -33,7 +33,7 @@ struct pci_bar_info {

 static void *command_init(struct pci_dev *dev, int offset)
 {
-	struct pci_cmd_info *cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
+	struct pci_cmd_info *cmd = kmalloc_obj(*cmd, GFP_KERNEL);
 	int err;

 	if (!cmd)
@@ -211,7 +211,7 @@ static void *bar_init(struct pci_dev *dev, int offset)
 {
 	unsigned int pos;
 	const struct resource *res = dev->resource;
-	struct pci_bar_info *bar = kzalloc(sizeof(*bar), GFP_KERNEL);
+	struct pci_bar_info *bar = kzalloc_obj(*bar, GFP_KERNEL);

 	if (!bar)
 		return ERR_PTR(-ENOMEM);
diff --git a/drivers/xen/xen-pciback/conf_space_quirks.c b/drivers/xen/xen-pciback/conf_space_quirks.c
index 7dc281086302..52c8d38cb434 100644
--- a/drivers/xen/xen-pciback/conf_space_quirks.c
+++ b/drivers/xen/xen-pciback/conf_space_quirks.c
@@ -97,7 +97,7 @@ int xen_pcibk_config_quirks_init(struct pci_dev *dev)
 	struct xen_pcibk_config_quirk *quirk;
 	int ret = 0;

-	quirk = kzalloc(sizeof(*quirk), GFP_KERNEL);
+	quirk = kzalloc_obj(*quirk, GFP_KERNEL);
 	if (!quirk) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/drivers/xen/xen-pciback/passthrough.c b/drivers/xen/xen-pciback/passthrough.c
index 66e9b814cc86..9d2583a7a19a 100644
--- a/drivers/xen/xen-pciback/passthrough.c
+++ b/drivers/xen/xen-pciback/passthrough.c
@@ -51,7 +51,7 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,
 	unsigned int domain, bus, devfn;
 	int err;

-	dev_entry = kmalloc(sizeof(*dev_entry), GFP_KERNEL);
+	dev_entry = kmalloc_obj(*dev_entry, GFP_KERNEL);
 	if (!dev_entry)
 		return -ENOMEM;
 	dev_entry->dev = dev;
@@ -101,7 +101,7 @@ static int __xen_pcibk_init_devices(struct xen_pcibk_device *pdev)
 {
 	struct passthrough_dev_data *dev_data;

-	dev_data = kmalloc(sizeof(*dev_data), GFP_KERNEL);
+	dev_data = kmalloc_obj(*dev_data, GFP_KERNEL);
 	if (!dev_data)
 		return -ENOMEM;

diff --git a/drivers/xen/xen-pciback/pci_stub.c b/drivers/xen/xen-pciback/pci_stub.c
index 045e74847fe6..ffc70ce61c8f 100644
--- a/drivers/xen/xen-pciback/pci_stub.c
+++ b/drivers/xen/xen-pciback/pci_stub.c
@@ -79,7 +79,7 @@ static struct pcistub_device *pcistub_device_alloc(struct pci_dev *dev)

 	dev_dbg(&dev->dev, "pcistub_device_alloc\n");

-	psdev = kzalloc(sizeof(*psdev), GFP_KERNEL);
+	psdev = kzalloc_obj(*psdev, GFP_KERNEL);
 	if (!psdev)
 		return NULL;

@@ -623,7 +623,7 @@ static int pcistub_probe(struct pci_dev *dev, const struct pci_device_id *id)
 		}

 		if (!match) {
-			pci_dev_id = kmalloc(sizeof(*pci_dev_id), GFP_KERNEL);
+			pci_dev_id = kmalloc_obj(*pci_dev_id, GFP_KERNEL);
 			if (!pci_dev_id) {
 				err = -ENOMEM;
 				goto out;
@@ -1129,7 +1129,7 @@ static int pcistub_device_id_add(int domain, int bus, int slot, int func)
 	    || PCI_FUNC(devfn) != func)
 		return -EINVAL;

-	pci_dev_id = kmalloc(sizeof(*pci_dev_id), GFP_KERNEL);
+	pci_dev_id = kmalloc_obj(*pci_dev_id, GFP_KERNEL);
 	if (!pci_dev_id)
 		return -ENOMEM;

@@ -1189,7 +1189,7 @@ static int pcistub_reg_add(int domain, int bus, int slot, int func,
 	}
 	dev = psdev->dev;

-	field = kzalloc(sizeof(*field), GFP_KERNEL);
+	field = kzalloc_obj(*field, GFP_KERNEL);
 	if (!field) {
 		err = -ENOMEM;
 		goto out;
diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
index 84e014490950..2755ab0b0d85 100644
--- a/drivers/xen/xen-pciback/pciback_ops.c
+++ b/drivers/xen/xen-pciback/pciback_ops.c
@@ -219,7 +219,7 @@ int xen_pcibk_enable_msix(struct xen_pcibk_device *pdev,
 	if (dev->msi_enabled || !(cmd & PCI_COMMAND_MEMORY))
 		return -ENXIO;

-	entries = kmalloc_array(op->value, sizeof(*entries), GFP_KERNEL);
+	entries = kmalloc_objs(*entries, op->value, GFP_KERNEL);
 	if (entries == NULL)
 		return -ENOMEM;

diff --git a/drivers/xen/xen-pciback/vpci.c b/drivers/xen/xen-pciback/vpci.c
index cc7450f2b2a9..391ea1040b16 100644
--- a/drivers/xen/xen-pciback/vpci.c
+++ b/drivers/xen/xen-pciback/vpci.c
@@ -81,7 +81,7 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,
 		goto out;
 	}

-	dev_entry = kmalloc(sizeof(*dev_entry), GFP_KERNEL);
+	dev_entry = kmalloc_obj(*dev_entry, GFP_KERNEL);
 	if (!dev_entry) {
 		err = -ENOMEM;
 		xenbus_dev_fatal(pdev->xdev, err,
@@ -186,7 +186,7 @@ static int __xen_pcibk_init_devices(struct xen_pcibk_device *pdev)
 	int slot;
 	struct vpci_dev_data *vpci_dev;

-	vpci_dev = kmalloc(sizeof(*vpci_dev), GFP_KERNEL);
+	vpci_dev = kmalloc_obj(*vpci_dev, GFP_KERNEL);
 	if (!vpci_dev)
 		return -ENOMEM;

diff --git a/drivers/xen/xen-pciback/xenbus.c b/drivers/xen/xen-pciback/xenbus.c
index b11e401f1b1e..d5e001ff0489 100644
--- a/drivers/xen/xen-pciback/xenbus.c
+++ b/drivers/xen/xen-pciback/xenbus.c
@@ -38,7 +38,7 @@ static struct xen_pcibk_device *alloc_pdev(struct xenbus_device *xdev)
 {
 	struct xen_pcibk_device *pdev;

-	pdev = kzalloc(sizeof(struct xen_pcibk_device), GFP_KERNEL);
+	pdev = kzalloc_obj(struct xen_pcibk_device, GFP_KERNEL);
 	if (pdev == NULL)
 		goto out;
 	dev_dbg(&xdev->dev, "allocated pdev @ 0x%p\n", pdev);
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
index 7d5117e5efe0..66758c72d5d1 100644
--- a/drivers/xen/xen-scsiback.c
+++ b/drivers/xen/xen-scsiback.c
@@ -543,8 +543,8 @@ static int scsiback_gnttab_data_map(struct vscsiif_request *ring_req,
 	}

 	/* free of (sgl) in fast_flush_area() */
-	pending_req->sgl = kmalloc_array(nr_segments,
-					sizeof(struct scatterlist), GFP_KERNEL);
+	pending_req->sgl = kmalloc_objs(struct scatterlist, nr_segments,
+					GFP_KERNEL);
 	if (!pending_req->sgl)
 		return -ENOMEM;

@@ -974,7 +974,7 @@ static int scsiback_add_translation_entry(struct vscsibk_info *info,
 		return -ENODEV;
 	}

-	new = kmalloc(sizeof(struct v2p_entry), GFP_KERNEL);
+	new = kmalloc_obj(struct v2p_entry, GFP_KERNEL);
 	if (new == NULL) {
 		err = -ENOMEM;
 		goto out_free;
@@ -1270,8 +1270,7 @@ static int scsiback_probe(struct xenbus_device *dev,
 {
 	int err;

-	struct vscsibk_info *info = kzalloc(sizeof(struct vscsibk_info),
-					    GFP_KERNEL);
+	struct vscsibk_info *info = kzalloc_obj(struct vscsibk_info, GFP_KERNEL);

 	pr_debug("%s %p %d\n", __func__, dev, dev->otherend_id);

@@ -1352,7 +1351,7 @@ scsiback_make_tport(struct target_fabric_configfs *tf,
 	u64 wwpn = 0;
 	int off = 0;

-	tport = kzalloc(sizeof(struct scsiback_tport), GFP_KERNEL);
+	tport = kzalloc_obj(struct scsiback_tport, GFP_KERNEL);
 	if (!tport)
 		return ERR_PTR(-ENOMEM);

@@ -1532,7 +1531,7 @@ static int scsiback_make_nexus(struct scsiback_tpg *tpg,
 		goto out_unlock;
 	}

-	tv_nexus = kzalloc(sizeof(struct scsiback_nexus), GFP_KERNEL);
+	tv_nexus = kzalloc_obj(struct scsiback_nexus, GFP_KERNEL);
 	if (!tv_nexus) {
 		ret = -ENOMEM;
 		goto out_unlock;
@@ -1759,7 +1758,7 @@ scsiback_make_tpg(struct se_wwn *wwn, const char *name)
 	if (ret)
 		return ERR_PTR(ret);

-	tpg = kzalloc(sizeof(struct scsiback_tpg), GFP_KERNEL);
+	tpg = kzalloc_obj(struct scsiback_tpg, GFP_KERNEL);
 	if (!tpg)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c
index 2dc874fb5506..61739961838c 100644
--- a/drivers/xen/xenbus/xenbus_client.c
+++ b/drivers/xen/xenbus/xenbus_client.c
@@ -535,11 +535,11 @@ int xenbus_map_ring_valloc(struct xenbus_device *dev, grant_ref_t *gnt_refs,
 	if (nr_grefs > XENBUS_MAX_RING_GRANTS)
 		return -EINVAL;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

-	info->node = kzalloc(sizeof(*info->node), GFP_KERNEL);
+	info->node = kzalloc_obj(*info->node, GFP_KERNEL);
 	if (!info->node)
 		err = -ENOMEM;
 	else
diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/xenbus_dev_frontend.c
index f5c21ba64df5..7b37d80b82ed 100644
--- a/drivers/xen/xenbus/xenbus_dev_frontend.c
+++ b/drivers/xen/xenbus/xenbus_dev_frontend.c
@@ -195,7 +195,7 @@ static int queue_reply(struct list_head *queue, const void *data, size_t len)
 	if (len > XENSTORE_PAYLOAD_MAX)
 		return -EINVAL;

-	rb = kmalloc(struct_size(rb, msg, len), GFP_KERNEL);
+	rb = kmalloc_flex(*rb, msg, len, GFP_KERNEL);
 	if (rb == NULL)
 		return -ENOMEM;

@@ -242,7 +242,7 @@ static struct watch_adapter *alloc_watch_adapter(const char *path,
 {
 	struct watch_adapter *watch;

-	watch = kzalloc(sizeof(*watch), GFP_KERNEL);
+	watch = kzalloc_obj(*watch, GFP_KERNEL);
 	if (watch == NULL)
 		goto out_fail;

@@ -454,7 +454,7 @@ static int xenbus_write_transaction(unsigned msg_type,
 	} *msg = (void *)u->u.buffer;

 	if (msg_type == XS_TRANSACTION_START) {
-		trans = kzalloc(sizeof(*trans), GFP_KERNEL);
+		trans = kzalloc_obj(*trans, GFP_KERNEL);
 		if (!trans) {
 			rc = -ENOMEM;
 			goto out;
@@ -655,7 +655,7 @@ static int xenbus_file_open(struct inode *inode, struct file *filp)

 	stream_open(inode, filp);

-	u = kzalloc(sizeof(*u), GFP_KERNEL);
+	u = kzalloc_obj(*u, GFP_KERNEL);
 	if (u == NULL)
 		return -ENOMEM;

diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c
index 15f18374020e..82b0a34ded70 100644
--- a/drivers/xen/xenbus/xenbus_xs.c
+++ b/drivers/xen/xenbus/xenbus_xs.c
@@ -324,7 +324,7 @@ static void *xs_talkv(struct xenbus_transaction t,
 	unsigned int i;
 	int err;

-	req = kmalloc(sizeof(*req), GFP_NOIO | __GFP_HIGH);
+	req = kmalloc_obj(*req, GFP_NOIO | __GFP_HIGH);
 	if (!req)
 		return ERR_PTR(-ENOMEM);

diff --git a/drivers/xen/xlate_mmu.c b/drivers/xen/xlate_mmu.c
index f17c4c03db30..b40ec40eb9a2 100644
--- a/drivers/xen/xlate_mmu.c
+++ b/drivers/xen/xlate_mmu.c
@@ -223,11 +223,11 @@ int __init xen_xlate_map_ballooned_pages(xen_pfn_t **gfns, void **virt,

 	BUG_ON(nr_grant_frames == 0);
 	nr_pages = DIV_ROUND_UP(nr_grant_frames, XEN_PFN_PER_PAGE);
-	pages = kcalloc(nr_pages, sizeof(pages[0]), GFP_KERNEL);
+	pages = kzalloc_objs(pages[0], nr_pages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

-	pfns = kcalloc(nr_grant_frames, sizeof(pfns[0]), GFP_KERNEL);
+	pfns = kzalloc_objs(pfns[0], nr_grant_frames, GFP_KERNEL);
 	if (!pfns) {
 		kfree(pages);
 		return -ENOMEM;
diff --git a/drivers/zorro/zorro.c b/drivers/zorro/zorro.c
index 4e23d53d269e..1959faa6926a 100644
--- a/drivers/zorro/zorro.c
+++ b/drivers/zorro/zorro.c
@@ -135,8 +135,7 @@ static int __init amiga_zorro_probe(struct platform_device *pdev)
 	int error;

 	/* Initialize the Zorro bus */
-	bus = kzalloc(struct_size(bus, devices, zorro_num_autocon),
-		      GFP_KERNEL);
+	bus = kzalloc_flex(*bus, devices, zorro_num_autocon, GFP_KERNEL);
 	if (!bus)
 		return -ENOMEM;

diff --git a/fs/9p/vfs_super.c b/fs/9p/vfs_super.c
index 315336de6f02..b9872016deae 100644
--- a/fs/9p/vfs_super.c
+++ b/fs/9p/vfs_super.c
@@ -90,7 +90,7 @@ static int v9fs_get_tree(struct fs_context *fc)

 	p9_debug(P9_DEBUG_VFS, "\n");

-	v9ses = kzalloc(sizeof(struct v9fs_session_info), GFP_KERNEL);
+	v9ses = kzalloc_obj(struct v9fs_session_info, GFP_KERNEL);
 	if (!v9ses)
 		return -ENOMEM;

@@ -308,7 +308,7 @@ static int v9fs_init_fs_context(struct fs_context *fc)
 {
 	struct v9fs_context	*ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/adfs/dir.c b/fs/adfs/dir.c
index 4f9dc276da6f..366fb93c7b38 100644
--- a/fs/adfs/dir.c
+++ b/fs/adfs/dir.c
@@ -108,7 +108,7 @@ int adfs_dir_read_buffers(struct super_block *sb, u32 indaddr,
 		if (dir->bhs != dir->bh)
 			return -EINVAL;

-		bhs = kcalloc(num, sizeof(*bhs), GFP_KERNEL);
+		bhs = kzalloc_objs(*bhs, num, GFP_KERNEL);
 		if (!bhs)
 			return -ENOMEM;

diff --git a/fs/adfs/map.c b/fs/adfs/map.c
index a0ce272b4098..9e24e212b3e1 100644
--- a/fs/adfs/map.c
+++ b/fs/adfs/map.c
@@ -373,7 +373,7 @@ struct adfs_discmap *adfs_read_map(struct super_block *sb, struct adfs_discrecor
 		     ((nzones > 1) ? ADFS_DR_SIZE_BITS : 0);
 	map_addr = signed_asl(map_addr, asb->s_map2blk);

-	dm = kmalloc_array(nzones, sizeof(*dm), GFP_KERNEL);
+	dm = kmalloc_objs(*dm, nzones, GFP_KERNEL);
 	if (dm == NULL) {
 		adfs_error(sb, "not enough memory");
 		return ERR_PTR(-ENOMEM);
diff --git a/fs/adfs/super.c b/fs/adfs/super.c
index fdccdbbfc213..a8e73e980abb 100644
--- a/fs/adfs/super.c
+++ b/fs/adfs/super.c
@@ -437,7 +437,7 @@ static int adfs_init_fs_context(struct fs_context *fc)
 {
 	struct adfs_sb_info *asb;

-	asb = kzalloc(sizeof(struct adfs_sb_info), GFP_KERNEL);
+	asb = kzalloc_obj(struct adfs_sb_info, GFP_KERNEL);
 	if (!asb)
 		return -ENOMEM;

diff --git a/fs/affs/dir.c b/fs/affs/dir.c
index fe18caaf4d65..39b6ddc4e4b1 100644
--- a/fs/affs/dir.c
+++ b/fs/affs/dir.c
@@ -36,7 +36,7 @@ static int affs_dir_open(struct inode *inode, struct file *file)
 {
 	struct affs_dir_data	*data;

-	data = kzalloc(sizeof(struct affs_dir_data), GFP_KERNEL);
+	data = kzalloc_obj(struct affs_dir_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 	file->private_data = data;
diff --git a/fs/affs/super.c b/fs/affs/super.c
index 44f8aa883100..1a2f72fea1ab 100644
--- a/fs/affs/super.c
+++ b/fs/affs/super.c
@@ -327,7 +327,7 @@ static int affs_fill_super(struct super_block *sb, struct fs_context *fc)
 	sb->s_time_min = sys_tz.tz_minuteswest * 60 + AFFS_EPOCH_DELTA;
 	sb->s_time_max = 86400LL * U32_MAX + 86400 + sb->s_time_min;

-	sbi = kzalloc(sizeof(struct affs_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct affs_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

@@ -615,7 +615,7 @@ static int affs_init_fs_context(struct fs_context *fc)
 {
 	struct affs_context *ctx;

-	ctx = kzalloc(sizeof(struct affs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct affs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/afs/addr_list.c b/fs/afs/addr_list.c
index e941da5b6dd9..26590bfeae91 100644
--- a/fs/afs/addr_list.c
+++ b/fs/afs/addr_list.c
@@ -66,7 +66,7 @@ struct afs_addr_list *afs_alloc_addrlist(unsigned int nr)
 	if (nr > AFS_MAX_ADDRESSES)
 		nr = AFS_MAX_ADDRESSES;

-	alist = kzalloc(struct_size(alist, addrs, nr), GFP_KERNEL);
+	alist = kzalloc_flex(*alist, addrs, nr, GFP_KERNEL);
 	if (!alist)
 		return NULL;

diff --git a/fs/afs/addr_prefs.c b/fs/afs/addr_prefs.c
index 133736412c3d..f5a4fb6f609a 100644
--- a/fs/afs/addr_prefs.c
+++ b/fs/afs/addr_prefs.c
@@ -401,7 +401,7 @@ int afs_proc_addr_prefs_write(struct file *file, char *buf, size_t size)
 	max_prefs = min_t(size_t, (psize - sizeof(*old)) / sizeof(old->prefs[0]), 255);

 	ret = -ENOMEM;
-	preflist = kmalloc(struct_size(preflist, prefs, max_prefs), GFP_KERNEL);
+	preflist = kmalloc_flex(*preflist, prefs, max_prefs, GFP_KERNEL);
 	if (!preflist)
 		goto done;

diff --git a/fs/afs/cell.c b/fs/afs/cell.c
index 71c10a05cebe..4331bf8e1dbd 100644
--- a/fs/afs/cell.c
+++ b/fs/afs/cell.c
@@ -134,7 +134,7 @@ static struct afs_cell *afs_alloc_cell(struct afs_net *net,

 	_enter("%*.*s,%s", namelen, namelen, name, addresses);

-	cell = kzalloc(sizeof(struct afs_cell), GFP_KERNEL);
+	cell = kzalloc_obj(struct afs_cell, GFP_KERNEL);
 	if (!cell) {
 		_leave(" = -ENOMEM");
 		return ERR_PTR(-ENOMEM);
diff --git a/fs/afs/cmservice.c b/fs/afs/cmservice.c
index 1a906805a9e3..a32e7c2864d2 100644
--- a/fs/afs/cmservice.c
+++ b/fs/afs/cmservice.c
@@ -228,9 +228,8 @@ static int afs_deliver_cb_callback(struct afs_call *call)
 			return ret;

 		_debug("unmarshall FID array");
-		call->request = kcalloc(call->count,
-					sizeof(struct afs_callback_break),
-					GFP_KERNEL);
+		call->request = kzalloc_objs(struct afs_callback_break,
+					     call->count, GFP_KERNEL);
 		if (!call->request)
 			return -ENOMEM;

@@ -340,7 +339,7 @@ static int afs_deliver_cb_init_call_back_state3(struct afs_call *call)
 		}

 		_debug("unmarshall UUID");
-		call->request = kmalloc(sizeof(struct afs_uuid), GFP_KERNEL);
+		call->request = kmalloc_obj(struct afs_uuid, GFP_KERNEL);
 		if (!call->request)
 			return -ENOMEM;

@@ -457,7 +456,7 @@ static int afs_deliver_cb_probe_uuid(struct afs_call *call)
 		}

 		_debug("unmarshall UUID");
-		call->request = kmalloc(sizeof(struct afs_uuid), GFP_KERNEL);
+		call->request = kmalloc_obj(struct afs_uuid, GFP_KERNEL);
 		if (!call->request)
 			return -ENOMEM;

@@ -589,9 +588,8 @@ static int afs_deliver_yfs_cb_callback(struct afs_call *call)
 			return ret;

 		_debug("unmarshall FID array");
-		call->request = kcalloc(call->count,
-					sizeof(struct afs_callback_break),
-					GFP_KERNEL);
+		call->request = kzalloc_objs(struct afs_callback_break,
+					     call->count, GFP_KERNEL);
 		if (!call->request)
 			return -ENOMEM;

diff --git a/fs/afs/dir.c b/fs/afs/dir.c
index f4e9e12373ac..6f7380f25365 100644
--- a/fs/afs/dir.c
+++ b/fs/afs/dir.c
@@ -785,7 +785,7 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry)

 	_enter("{%lu},%p{%pd},", dir->i_ino, dentry, dentry);

-	cookie = kzalloc(sizeof(struct afs_lookup_cookie), GFP_KERNEL);
+	cookie = kzalloc_obj(struct afs_lookup_cookie, GFP_KERNEL);
 	if (!cookie)
 		return ERR_PTR(-ENOMEM);

@@ -834,9 +834,8 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry)

 	/* Need space for examining all the selected files */
 	if (op->nr_files > 2) {
-		op->more_files = kvcalloc(op->nr_files - 2,
-					  sizeof(struct afs_vnode_param),
-					  GFP_KERNEL);
+		op->more_files = kvzalloc_objs(struct afs_vnode_param,
+					       op->nr_files - 2, GFP_KERNEL);
 		if (!op->more_files) {
 			afs_op_nomem(op);
 			goto out_op;
@@ -2095,7 +2094,7 @@ static int afs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
 		goto error;

 	ret = -ENOMEM;
-	op->more_files = kvcalloc(2, sizeof(struct afs_vnode_param), GFP_KERNEL);
+	op->more_files = kvzalloc_objs(struct afs_vnode_param, 2, GFP_KERNEL);
 	if (!op->more_files)
 		goto error;

diff --git a/fs/afs/dir_silly.c b/fs/afs/dir_silly.c
index 014495d4b868..f77bed45e808 100644
--- a/fs/afs/dir_silly.c
+++ b/fs/afs/dir_silly.c
@@ -69,7 +69,7 @@ static int afs_do_silly_rename(struct afs_vnode *dvnode, struct afs_vnode *vnode
 	if (IS_ERR(op))
 		return PTR_ERR(op);

-	op->more_files = kvcalloc(2, sizeof(struct afs_vnode_param), GFP_KERNEL);
+	op->more_files = kvzalloc_objs(struct afs_vnode_param, 2, GFP_KERNEL);
 	if (!op->more_files) {
 		afs_put_operation(op);
 		return -ENOMEM;
diff --git a/fs/afs/file.c b/fs/afs/file.c
index f66a92294284..5c429a746d76 100644
--- a/fs/afs/file.c
+++ b/fs/afs/file.c
@@ -86,7 +86,7 @@ int afs_cache_wb_key(struct afs_vnode *vnode, struct afs_file *af)
 {
 	struct afs_wb_key *wbk, *p;

-	wbk = kzalloc(sizeof(struct afs_wb_key), GFP_KERNEL);
+	wbk = kzalloc_obj(struct afs_wb_key, GFP_KERNEL);
 	if (!wbk)
 		return -ENOMEM;
 	refcount_set(&wbk->usage, 2);
@@ -130,7 +130,7 @@ int afs_open(struct inode *inode, struct file *file)
 		goto error;
 	}

-	af = kzalloc(sizeof(*af), GFP_KERNEL);
+	af = kzalloc_obj(*af, GFP_KERNEL);
 	if (!af) {
 		ret = -ENOMEM;
 		goto error_key;
diff --git a/fs/afs/fs_operation.c b/fs/afs/fs_operation.c
index 8418813ee043..0ffd19f5279d 100644
--- a/fs/afs/fs_operation.c
+++ b/fs/afs/fs_operation.c
@@ -21,7 +21,7 @@ struct afs_operation *afs_alloc_operation(struct key *key, struct afs_volume *vo

 	_enter("");

-	op = kzalloc(sizeof(*op), GFP_KERNEL);
+	op = kzalloc_obj(*op, GFP_KERNEL);
 	if (!op)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/afs/fs_probe.c b/fs/afs/fs_probe.c
index e0030ac74ea0..0100ce4c62a0 100644
--- a/fs/afs/fs_probe.c
+++ b/fs/afs/fs_probe.c
@@ -244,7 +244,7 @@ int afs_fs_probe_fileserver(struct afs_net *net, struct afs_server *server,

 	_enter("%pU", &server->uuid);

-	estate = kzalloc(sizeof(*estate), GFP_KERNEL);
+	estate = kzalloc_obj(*estate, GFP_KERNEL);
 	if (!estate)
 		return -ENOMEM;

diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c
index bc9556991d7c..eb3520b9a282 100644
--- a/fs/afs/fsclient.c
+++ b/fs/afs/fsclient.c
@@ -2010,7 +2010,7 @@ static int afs_deliver_fs_fetch_acl(struct afs_call *call)
 		size = call->count2 = ntohl(call->tmp);
 		size = round_up(size, 4);

-		acl = kmalloc(struct_size(acl, data, size), GFP_KERNEL);
+		acl = kmalloc_flex(*acl, data, size, GFP_KERNEL);
 		if (!acl)
 			return -ENOMEM;
 		op->acl = acl;
diff --git a/fs/afs/main.c b/fs/afs/main.c
index e6bb8237db98..7e09bf7aa03b 100644
--- a/fs/afs/main.c
+++ b/fs/afs/main.c
@@ -93,7 +93,7 @@ static int __net_init afs_net_init(struct net *net_ns)
 	atomic_set(&net->servers_outstanding, 1);

 	ret = -ENOMEM;
-	sysnames = kzalloc(sizeof(*sysnames), GFP_KERNEL);
+	sysnames = kzalloc_obj(*sysnames, GFP_KERNEL);
 	if (!sysnames)
 		goto error_sysnames;
 	sysnames->subs[0] = (char *)&afs_init_sysname;
diff --git a/fs/afs/proc.c b/fs/afs/proc.c
index 44520549b509..52e8195ef2b8 100644
--- a/fs/afs/proc.c
+++ b/fs/afs/proc.c
@@ -572,7 +572,7 @@ static int afs_proc_sysname_write(struct file *file, char *buf, size_t size)
 	char *s, *p, *sub;
 	int ret, len;

-	sysnames = kzalloc(sizeof(*sysnames), GFP_KERNEL);
+	sysnames = kzalloc_obj(*sysnames, GFP_KERNEL);
 	if (!sysnames)
 		return -ENOMEM;
 	refcount_set(&sysnames->usage, 1);
diff --git a/fs/afs/rotate.c b/fs/afs/rotate.c
index 6a4e7da10fc4..69e80c5b6610 100644
--- a/fs/afs/rotate.c
+++ b/fs/afs/rotate.c
@@ -46,8 +46,9 @@ static bool afs_start_fs_iteration(struct afs_operation *op,
 					  lockdep_is_held(&op->volume->servers_lock)));
 	read_unlock(&op->volume->servers_lock);

-	op->server_states = kcalloc(op->server_list->nr_servers, sizeof(op->server_states[0]),
-				    GFP_KERNEL);
+	op->server_states = kzalloc_objs(op->server_states[0],
+					 op->server_list->nr_servers,
+					 GFP_KERNEL);
 	if (!op->server_states) {
 		afs_op_nomem(op);
 		trace_afs_rotate(op, afs_rotate_trace_nomem, 0);
diff --git a/fs/afs/rxrpc.c b/fs/afs/rxrpc.c
index bf0e4ea0aafd..588f8de51167 100644
--- a/fs/afs/rxrpc.c
+++ b/fs/afs/rxrpc.c
@@ -160,7 +160,7 @@ static struct afs_call *afs_alloc_call(struct afs_net *net,
 	struct afs_call *call;
 	int o;

-	call = kzalloc(sizeof(*call), gfp);
+	call = kzalloc_obj(*call, gfp);
 	if (!call)
 		return NULL;

diff --git a/fs/afs/security.c b/fs/afs/security.c
index 55ddce94af03..6d00d62a65ed 100644
--- a/fs/afs/security.c
+++ b/fs/afs/security.c
@@ -252,7 +252,7 @@ void afs_cache_permit(struct afs_vnode *vnode, struct key *key,
 	 * yet.
 	 */
 	size++;
-	new = kzalloc(struct_size(new, permits, size), GFP_NOFS);
+	new = kzalloc_flex(*new, permits, size, GFP_NOFS);
 	if (!new)
 		goto out_put;

diff --git a/fs/afs/server.c b/fs/afs/server.c
index c4428ebddb1d..8777c566d12d 100644
--- a/fs/afs/server.c
+++ b/fs/afs/server.c
@@ -117,7 +117,7 @@ static struct afs_server *afs_alloc_server(struct afs_cell *cell, const uuid_t *

 	_enter("");

-	server = kzalloc(sizeof(struct afs_server), GFP_KERNEL);
+	server = kzalloc_obj(struct afs_server, GFP_KERNEL);
 	if (!server)
 		return NULL;

diff --git a/fs/afs/server_list.c b/fs/afs/server_list.c
index 20d5474837df..b948df6dddc7 100644
--- a/fs/afs/server_list.c
+++ b/fs/afs/server_list.c
@@ -51,7 +51,7 @@ struct afs_server_list *afs_alloc_server_list(struct afs_volume *volume,
 			newrep++;
 	}

-	slist = kzalloc(struct_size(slist, servers, nr_servers), GFP_KERNEL);
+	slist = kzalloc_flex(*slist, servers, nr_servers, GFP_KERNEL);
 	if (!slist)
 		goto error;

diff --git a/fs/afs/super.c b/fs/afs/super.c
index d672b7ab57ae..2b567fe5b4cb 100644
--- a/fs/afs/super.c
+++ b/fs/afs/super.c
@@ -502,7 +502,7 @@ static struct afs_super_info *afs_alloc_sbi(struct fs_context *fc)
 	struct afs_fs_context *ctx = fc->fs_private;
 	struct afs_super_info *as;

-	as = kzalloc(sizeof(struct afs_super_info), GFP_KERNEL);
+	as = kzalloc_obj(struct afs_super_info, GFP_KERNEL);
 	if (as) {
 		as->net_ns = get_net(fc->net_ns);
 		as->flock_mode = ctx->flock_mode;
@@ -623,7 +623,7 @@ static int afs_init_fs_context(struct fs_context *fc)
 	struct afs_fs_context *ctx;
 	struct afs_cell *cell;

-	ctx = kzalloc(sizeof(struct afs_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct afs_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/afs/vl_list.c b/fs/afs/vl_list.c
index 9b1c20daac53..4f430ae01646 100644
--- a/fs/afs/vl_list.c
+++ b/fs/afs/vl_list.c
@@ -15,8 +15,7 @@ struct afs_vlserver *afs_alloc_vlserver(const char *name, size_t name_len,
 	struct afs_vlserver *vlserver;
 	static atomic_t debug_ids;

-	vlserver = kzalloc(struct_size(vlserver, name, name_len + 1),
-			   GFP_KERNEL);
+	vlserver = kzalloc_flex(*vlserver, name, name_len + 1, GFP_KERNEL);
 	if (vlserver) {
 		refcount_set(&vlserver->ref, 1);
 		rwlock_init(&vlserver->lock);
@@ -52,7 +51,7 @@ struct afs_vlserver_list *afs_alloc_vlserver_list(unsigned int nr_servers)
 {
 	struct afs_vlserver_list *vllist;

-	vllist = kzalloc(struct_size(vllist, servers, nr_servers), GFP_KERNEL);
+	vllist = kzalloc_flex(*vllist, servers, nr_servers, GFP_KERNEL);
 	if (vllist) {
 		refcount_set(&vllist->ref, 1);
 		rwlock_init(&vllist->lock);
diff --git a/fs/afs/vlclient.c b/fs/afs/vlclient.c
index 3a23c0b08eb6..05abd50e4057 100644
--- a/fs/afs/vlclient.c
+++ b/fs/afs/vlclient.c
@@ -122,7 +122,7 @@ struct afs_vldb_entry *afs_vl_get_entry_by_name_u(struct afs_vl_cursor *vc,
 	padsz = (4 - (volnamesz & 3)) & 3;
 	reqsz = 8 + volnamesz + padsz;

-	entry = kzalloc(sizeof(struct afs_vldb_entry), GFP_KERNEL);
+	entry = kzalloc_obj(struct afs_vldb_entry, GFP_KERNEL);
 	if (!entry)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/afs/volume.c b/fs/afs/volume.c
index 0efff3d25133..260df046143a 100644
--- a/fs/afs/volume.c
+++ b/fs/afs/volume.c
@@ -81,7 +81,7 @@ static struct afs_volume *afs_alloc_volume(struct afs_fs_context *params,
 	struct afs_volume *volume;
 	int ret = -ENOMEM, i;

-	volume = kzalloc(sizeof(struct afs_volume), GFP_KERNEL);
+	volume = kzalloc_obj(struct afs_volume, GFP_KERNEL);
 	if (!volume)
 		goto error_0;

diff --git a/fs/afs/xattr.c b/fs/afs/xattr.c
index e19f396aa370..2daf23af01e5 100644
--- a/fs/afs/xattr.c
+++ b/fs/afs/xattr.c
@@ -75,7 +75,7 @@ static bool afs_make_acl(struct afs_operation *op,
 {
 	struct afs_acl *acl;

-	acl = kmalloc(struct_size(acl, data, size), GFP_KERNEL);
+	acl = kmalloc_flex(*acl, data, size, GFP_KERNEL);
 	if (!acl) {
 		afs_op_nomem(op);
 		return false;
@@ -157,7 +157,7 @@ static int afs_xattr_get_yfs(const struct xattr_handler *handler,
 	else
 		return -EOPNOTSUPP;

-	yacl = kzalloc(sizeof(struct yfs_acl), GFP_KERNEL);
+	yacl = kzalloc_obj(struct yfs_acl, GFP_KERNEL);
 	if (!yacl)
 		goto error;

diff --git a/fs/afs/yfsclient.c b/fs/afs/yfsclient.c
index febf13a49f0b..9adc2dcde9a7 100644
--- a/fs/afs/yfsclient.c
+++ b/fs/afs/yfsclient.c
@@ -2048,7 +2048,7 @@ static int yfs_deliver_fs_fetch_opaque_acl(struct afs_call *call)
 		size = round_up(size, 4);

 		if (yacl->flags & YFS_ACL_WANT_ACL) {
-			acl = kmalloc(struct_size(acl, data, size), GFP_KERNEL);
+			acl = kmalloc_flex(*acl, data, size, GFP_KERNEL);
 			if (!acl)
 				return -ENOMEM;
 			yacl->acl = acl;
@@ -2080,7 +2080,7 @@ static int yfs_deliver_fs_fetch_opaque_acl(struct afs_call *call)
 		size = round_up(size, 4);

 		if (yacl->flags & YFS_ACL_WANT_VOL_ACL) {
-			acl = kmalloc(struct_size(acl, data, size), GFP_KERNEL);
+			acl = kmalloc_flex(*acl, data, size, GFP_KERNEL);
 			if (!acl)
 				return -ENOMEM;
 			yacl->vol_acl = acl;
diff --git a/fs/aio.c b/fs/aio.c
index 59b67b8da1b2..4eb757df3d80 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -510,8 +510,8 @@ static int aio_setup_ring(struct kioctx *ctx, unsigned int nr_events)

 	ctx->ring_folios = ctx->internal_folios;
 	if (nr_pages > AIO_RING_PAGES) {
-		ctx->ring_folios = kcalloc(nr_pages, sizeof(struct folio *),
-					   GFP_KERNEL);
+		ctx->ring_folios = kzalloc_objs(struct folio *, nr_pages,
+						GFP_KERNEL);
 		if (!ctx->ring_folios) {
 			put_aio_ring_file(ctx);
 			return -ENOMEM;
@@ -693,7 +693,7 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
 		new_nr = (table ? table->nr : 1) * 4;
 		spin_unlock(&mm->ioctx_lock);

-		table = kzalloc(struct_size(table, table, new_nr), GFP_KERNEL);
+		table = kzalloc_flex(*table, table, new_nr, GFP_KERNEL);
 		if (!table)
 			return -ENOMEM;

diff --git a/fs/autofs/inode.c b/fs/autofs/inode.c
index b932b1719dfc..5134a042044c 100644
--- a/fs/autofs/inode.c
+++ b/fs/autofs/inode.c
@@ -13,7 +13,7 @@ struct autofs_info *autofs_new_ino(struct autofs_sb_info *sbi)
 {
 	struct autofs_info *ino;

-	ino = kzalloc(sizeof(*ino), GFP_KERNEL);
+	ino = kzalloc_obj(*ino, GFP_KERNEL);
 	if (ino) {
 		INIT_LIST_HEAD(&ino->active);
 		INIT_LIST_HEAD(&ino->expiring);
@@ -242,7 +242,7 @@ static struct autofs_sb_info *autofs_alloc_sbi(void)
 {
 	struct autofs_sb_info *sbi;

-	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
+	sbi = kzalloc_obj(*sbi, GFP_KERNEL);
 	if (!sbi)
 		return NULL;

@@ -405,7 +405,7 @@ int autofs_init_fs_context(struct fs_context *fc)
 	struct autofs_fs_context *ctx;
 	struct autofs_sb_info *sbi;

-	ctx = kzalloc(sizeof(struct autofs_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct autofs_fs_context, GFP_KERNEL);
 	if (!ctx)
 		goto nomem;

diff --git a/fs/autofs/waitq.c b/fs/autofs/waitq.c
index 33dd4660d82f..21ecd0bbc0ca 100644
--- a/fs/autofs/waitq.c
+++ b/fs/autofs/waitq.c
@@ -376,7 +376,7 @@ int autofs_wait(struct autofs_sb_info *sbi,

 	if (!wq) {
 		/* Create a new wait queue */
-		wq = kmalloc(sizeof(struct autofs_wait_queue), GFP_KERNEL);
+		wq = kmalloc_obj(struct autofs_wait_queue, GFP_KERNEL);
 		if (!wq) {
 			kfree(name);
 			mutex_unlock(&sbi->wq_mutex);
diff --git a/fs/befs/btree.c b/fs/befs/btree.c
index 53b36aa29978..aa24f1daccdd 100644
--- a/fs/befs/btree.c
+++ b/fs/befs/btree.c
@@ -258,8 +258,7 @@ befs_btree_find(struct super_block *sb, const befs_data_stream *ds,
 		goto error;
 	}

-	this_node = kmalloc(sizeof(struct befs_btree_node),
-						GFP_NOFS);
+	this_node = kmalloc_obj(struct befs_btree_node, GFP_NOFS);
 	if (!this_node) {
 		befs_error(sb, "befs_btree_find() failed to allocate %zu "
 			   "bytes of memory", sizeof(struct befs_btree_node));
@@ -431,7 +430,7 @@ befs_btree_read(struct super_block *sb, const befs_data_stream *ds,
 		goto error;
 	}

-	this_node = kmalloc(sizeof(struct befs_btree_node), GFP_NOFS);
+	this_node = kmalloc_obj(struct befs_btree_node, GFP_NOFS);
 	if (this_node == NULL) {
 		befs_error(sb, "befs_btree_read() failed to allocate %zu "
 			   "bytes of memory", sizeof(struct befs_btree_node));
diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c
index d7c5d9270387..df54c52d2f19 100644
--- a/fs/befs/linuxvfs.c
+++ b/fs/befs/linuxvfs.c
@@ -790,7 +790,7 @@ befs_fill_super(struct super_block *sb, struct fs_context *fc)
 	struct befs_mount_options *parsed_opts = fc->fs_private;
 	int silent = fc->sb_flags & SB_SILENT;

-	sb->s_fs_info = kzalloc(sizeof(*befs_sb), GFP_KERNEL);
+	sb->s_fs_info = kzalloc_obj(*befs_sb, GFP_KERNEL);
 	if (sb->s_fs_info == NULL)
 		goto unacquire_none;

@@ -956,7 +956,7 @@ static int befs_init_fs_context(struct fs_context *fc)
 {
 	struct befs_mount_options *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return -ENOMEM;

diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c
index ce6f83234b67..6ed07d892e3d 100644
--- a/fs/bfs/inode.c
+++ b/fs/bfs/inode.c
@@ -334,7 +334,7 @@ static int bfs_fill_super(struct super_block *s, struct fs_context *fc)
 	unsigned long i_sblock, i_eblock, i_eoff, s_size;
 	int silent = fc->sb_flags & SB_SILENT;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	mutex_init(&info->bfs_lock);
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index 3eb734c192e9..6ea9681cab33 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -916,7 +916,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
 		 */
 		would_dump(bprm, interpreter);

-		interp_elf_ex = kmalloc(sizeof(*interp_elf_ex), GFP_KERNEL);
+		interp_elf_ex = kmalloc_obj(*interp_elf_ex, GFP_KERNEL);
 		if (!interp_elf_ex) {
 			retval = -ENOMEM;
 			goto out_free_file;
@@ -1798,7 +1798,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
 	fill_note(&t->notes[0], PRSTATUS, sizeof(t->prstatus), &t->prstatus);
 	info->size += notesize(&t->notes[0]);

-	fpu = kzalloc(sizeof(elf_fpregset_t), GFP_KERNEL);
+	fpu = kzalloc_obj(elf_fpregset_t, GFP_KERNEL);
 	if (!fpu || !elf_core_copy_task_fpregs(p, fpu)) {
 		kfree(fpu);
 		return 1;
@@ -1824,7 +1824,7 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
 	u16 machine;
 	u32 flags;

-	psinfo = kmalloc(sizeof(*psinfo), GFP_KERNEL);
+	psinfo = kmalloc_obj(*psinfo, GFP_KERNEL);
 	if (!psinfo)
 		return 0;
 	fill_note(&info->psinfo, PRPSINFO, sizeof(*psinfo), psinfo);
@@ -1873,15 +1873,14 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
 	/*
 	 * Allocate a structure for each thread.
 	 */
-	info->thread = kzalloc(struct_size(info->thread, notes, info->thread_notes),
-			       GFP_KERNEL);
+	info->thread = kzalloc_flex(*info->thread, notes, info->thread_notes,
+				    GFP_KERNEL);
 	if (unlikely(!info->thread))
 		return 0;

 	info->thread->task = dump_task;
 	for (ct = dump_task->signal->core_state->dumper.next; ct; ct = ct->next) {
-		t = kzalloc(struct_size(t, notes, info->thread_notes),
-			    GFP_KERNEL);
+		t = kzalloc_flex(*t, notes, info->thread_notes, GFP_KERNEL);
 		if (unlikely(!t))
 			return 0;

@@ -2037,7 +2036,7 @@ static int elf_core_dump(struct coredump_params *cprm)
 		/* For cell spufs and x86 xstate */
 		sz += elf_coredump_extra_notes_size();

-		phdr4note = kmalloc(sizeof(*phdr4note), GFP_KERNEL);
+		phdr4note = kmalloc_obj(*phdr4note, GFP_KERNEL);
 		if (!phdr4note)
 			goto end_coredump;

@@ -2052,7 +2051,7 @@ static int elf_core_dump(struct coredump_params *cprm)
 	e_shoff = offset;

 	if (e_phnum == PN_XNUM) {
-		shdr4extnum = kmalloc(sizeof(*shdr4extnum), GFP_KERNEL);
+		shdr4extnum = kmalloc_obj(*shdr4extnum, GFP_KERNEL);
 		if (!shdr4extnum)
 			goto end_coredump;
 		fill_extnum_info(&elf, shdr4extnum, e_shoff, segs);
diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
index 48fd2de3bca0..cee0871b0164 100644
--- a/fs/binfmt_elf_fdpic.c
+++ b/fs/binfmt_elf_fdpic.c
@@ -761,7 +761,7 @@ static int elf_fdpic_map_file(struct elf_fdpic_params *params,
 	if (nloads == 0)
 		return -ELIBBAD;

-	loadmap = kzalloc(struct_size(loadmap, segs, nloads), GFP_KERNEL);
+	loadmap = kzalloc_flex(*loadmap, segs, nloads, GFP_KERNEL);
 	if (!loadmap)
 		return -ENOMEM;

@@ -1391,7 +1391,7 @@ static struct elf_thread_status *elf_dump_thread_status(long signr, struct task_
 	struct elf_thread_status *t;
 	int i, ret;

-	t = kzalloc(sizeof(struct elf_thread_status), GFP_KERNEL);
+	t = kzalloc_obj(struct elf_thread_status, GFP_KERNEL);
 	if (!t)
 		return t;

@@ -1486,10 +1486,10 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
 	struct elf_thread_status *tmp;

 	/* alloc memory for large data structures: too large to be on stack */
-	elf = kmalloc(sizeof(*elf), GFP_KERNEL);
+	elf = kmalloc_obj(*elf, GFP_KERNEL);
 	if (!elf)
 		goto end_coredump;
-	psinfo = kmalloc(sizeof(*psinfo), GFP_KERNEL);
+	psinfo = kmalloc_obj(*psinfo, GFP_KERNEL);
 	if (!psinfo)
 		goto end_coredump;

@@ -1547,7 +1547,7 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
 	offset += segs * sizeof(struct elf_phdr);	/* Program headers */

 	/* Write notes phdr entry */
-	phdr4note = kmalloc(sizeof(*phdr4note), GFP_KERNEL);
+	phdr4note = kmalloc_obj(*phdr4note, GFP_KERNEL);
 	if (!phdr4note)
 		goto end_coredump;

@@ -1562,7 +1562,7 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
 	e_shoff = offset;

 	if (e_phnum == PN_XNUM) {
-		shdr4extnum = kmalloc(sizeof(*shdr4extnum), GFP_KERNEL);
+		shdr4extnum = kmalloc_obj(*shdr4extnum, GFP_KERNEL);
 		if (!shdr4extnum)
 			goto end_coredump;
 		fill_extnum_info(elf, shdr4extnum, e_shoff, segs);
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
index 2b772613a74c..4a15e09bc398 100644
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -961,7 +961,7 @@ static int bm_fill_super(struct super_block *sb, struct fs_context *fc)
 		 * create their own separate binfmt_misc mounts we should
 		 * consider turning this into a kmem cache.
 		 */
-		misc = kzalloc(sizeof(struct binfmt_misc), GFP_KERNEL);
+		misc = kzalloc_obj(struct binfmt_misc, GFP_KERNEL);
 		if (!misc)
 			return -ENOMEM;

diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c
index 6c6f3bb58f4e..cce7b2610364 100644
--- a/fs/btrfs/async-thread.c
+++ b/fs/btrfs/async-thread.c
@@ -85,7 +85,7 @@ struct btrfs_workqueue *btrfs_alloc_workqueue(struct btrfs_fs_info *fs_info,
 					      const char *name, unsigned int flags,
 					      int limit_active, int thresh)
 {
-	struct btrfs_workqueue *ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	struct btrfs_workqueue *ret = kzalloc_obj(*ret, GFP_KERNEL);

 	if (!ret)
 		return NULL;
@@ -126,7 +126,7 @@ struct btrfs_workqueue *btrfs_alloc_ordered_workqueue(
 {
 	struct btrfs_workqueue *ret;

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
index 9bb406f7dd30..78bf0cad1d2d 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -78,7 +78,7 @@ static int check_extent_in_eb(struct btrfs_backref_walk_ctx *ctx,
 	}

 add_inode_elem:
-	e = kmalloc(sizeof(*e), GFP_NOFS);
+	e = kmalloc_obj(*e, GFP_NOFS);
 	if (!e)
 		return -ENOMEM;

@@ -1805,7 +1805,7 @@ struct btrfs_backref_share_check_ctx *btrfs_alloc_backref_share_check_ctx(void)
 {
 	struct btrfs_backref_share_check_ctx *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

@@ -2797,7 +2797,7 @@ struct inode_fs_paths *init_ipath(s32 total_bytes, struct btrfs_root *fs_root,
 	if (IS_ERR(fspath))
 		return ERR_CAST(fspath);

-	ifp = kmalloc(sizeof(*ifp), GFP_KERNEL);
+	ifp = kmalloc_obj(*ifp, GFP_KERNEL);
 	if (!ifp) {
 		kvfree(fspath);
 		return ERR_PTR(-ENOMEM);
@@ -2814,7 +2814,7 @@ struct btrfs_backref_iter *btrfs_backref_iter_alloc(struct btrfs_fs_info *fs_inf
 {
 	struct btrfs_backref_iter *ret;

-	ret = kzalloc(sizeof(*ret), GFP_NOFS);
+	ret = kzalloc_obj(*ret, GFP_NOFS);
 	if (!ret)
 		return NULL;

@@ -3024,7 +3024,7 @@ struct btrfs_backref_node *btrfs_backref_alloc_node(
 	struct btrfs_backref_node *node;

 	ASSERT(level >= 0 && level < BTRFS_MAX_LEVEL);
-	node = kzalloc(sizeof(*node), GFP_NOFS);
+	node = kzalloc_obj(*node, GFP_NOFS);
 	if (!node)
 		return node;

@@ -3057,7 +3057,7 @@ struct btrfs_backref_edge *btrfs_backref_alloc_edge(
 {
 	struct btrfs_backref_edge *edge;

-	edge = kzalloc(sizeof(*edge), GFP_NOFS);
+	edge = kzalloc_obj(*edge, GFP_NOFS);
 	if (edge)
 		cache->nr_edges++;
 	return edge;
diff --git a/fs/btrfs/bio.c b/fs/btrfs/bio.c
index 4a1528803ff7..2a2a21aec817 100644
--- a/fs/btrfs/bio.c
+++ b/fs/btrfs/bio.c
@@ -709,7 +709,7 @@ static bool btrfs_wq_submit_bio(struct btrfs_bio *bbio,
 	struct btrfs_fs_info *fs_info = bbio->inode->root->fs_info;
 	struct async_submit_bio *async;

-	async = kmalloc(sizeof(*async), GFP_NOFS);
+	async = kmalloc_obj(*async, GFP_NOFS);
 	if (!async)
 		return false;

diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c
index 5f76683b3f21..c284f48cfae4 100644
--- a/fs/btrfs/block-group.c
+++ b/fs/btrfs/block-group.c
@@ -947,7 +947,7 @@ int btrfs_cache_block_group(struct btrfs_block_group *cache, bool wait)
 	if (cache->flags & BTRFS_BLOCK_GROUP_REMAPPED)
 		return 0;

-	caching_ctl = kzalloc(sizeof(*caching_ctl), GFP_NOFS);
+	caching_ctl = kzalloc_obj(*caching_ctl, GFP_NOFS);
 	if (!caching_ctl)
 		return -ENOMEM;

@@ -2312,12 +2312,11 @@ static struct btrfs_block_group *btrfs_create_block_group(
 {
 	struct btrfs_block_group *cache;

-	cache = kzalloc(sizeof(*cache), GFP_NOFS);
+	cache = kzalloc_obj(*cache, GFP_NOFS);
 	if (!cache)
 		return NULL;

-	cache->free_space_ctl = kzalloc(sizeof(*cache->free_space_ctl),
-					GFP_NOFS);
+	cache->free_space_ctl = kzalloc_obj(*cache->free_space_ctl, GFP_NOFS);
 	if (!cache->free_space_ctl) {
 		kfree(cache);
 		return NULL;
diff --git a/fs/btrfs/block-rsv.c b/fs/btrfs/block-rsv.c
index 93c371db8731..6064dd00d041 100644
--- a/fs/btrfs/block-rsv.c
+++ b/fs/btrfs/block-rsv.c
@@ -192,7 +192,7 @@ struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info,
 {
 	struct btrfs_block_rsv *block_rsv;

-	block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS);
+	block_rsv = kmalloc_obj(*block_rsv, GFP_NOFS);
 	if (!block_rsv)
 		return NULL;

diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index 1e7174ad32e2..7fde7698c331 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -662,7 +662,7 @@ static struct list_head *alloc_heuristic_ws(struct btrfs_fs_info *fs_info)
 {
 	struct heuristic_ws *ws;

-	ws = kzalloc(sizeof(*ws), GFP_KERNEL);
+	ws = kzalloc_obj(*ws, GFP_KERNEL);
 	if (!ws)
 		return ERR_PTR(-ENOMEM);

@@ -670,11 +670,11 @@ static struct list_head *alloc_heuristic_ws(struct btrfs_fs_info *fs_info)
 	if (!ws->sample)
 		goto fail;

-	ws->bucket = kcalloc(BUCKET_SIZE, sizeof(*ws->bucket), GFP_KERNEL);
+	ws->bucket = kzalloc_objs(*ws->bucket, BUCKET_SIZE, GFP_KERNEL);
 	if (!ws->bucket)
 		goto fail;

-	ws->bucket_b = kcalloc(BUCKET_SIZE, sizeof(*ws->bucket_b), GFP_KERNEL);
+	ws->bucket_b = kzalloc_objs(*ws->bucket_b, BUCKET_SIZE, GFP_KERNEL);
 	if (!ws->bucket_b)
 		goto fail;

@@ -734,7 +734,7 @@ static int alloc_workspace_manager(struct btrfs_fs_info *fs_info,
 	struct list_head *workspace;

 	ASSERT(fs_info->compr_wsm[type] == NULL);
-	gwsm = kzalloc(sizeof(*gwsm), GFP_KERNEL);
+	gwsm = kzalloc_obj(*gwsm, GFP_KERNEL);
 	if (!gwsm)
 		return -ENOMEM;

diff --git a/fs/btrfs/defrag.c b/fs/btrfs/defrag.c
index ecf05cd64696..7e2db5d3a4d4 100644
--- a/fs/btrfs/defrag.c
+++ b/fs/btrfs/defrag.c
@@ -1091,7 +1091,7 @@ static int defrag_collect_targets(struct btrfs_inode *inode,
 		}

 		/* Allocate new defrag_target_range */
-		new = kmalloc(sizeof(*new), GFP_NOFS);
+		new = kmalloc_obj(*new, GFP_NOFS);
 		if (!new) {
 			btrfs_free_extent_map(em);
 			ret = -ENOMEM;
@@ -1206,7 +1206,7 @@ static int defrag_one_range(struct btrfs_inode *inode, u64 start, u32 len,
 	ASSERT(nr_pages <= CLUSTER_SIZE / PAGE_SIZE);
 	ASSERT(IS_ALIGNED(start, sectorsize) && IS_ALIGNED(len, sectorsize));

-	folios = kcalloc(nr_pages, sizeof(struct folio *), GFP_NOFS);
+	folios = kzalloc_objs(struct folio *, nr_pages, GFP_NOFS);
 	if (!folios)
 		return -ENOMEM;

diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
index 1739a0b29c49..d97bbbd045e0 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -349,7 +349,7 @@ static struct btrfs_delayed_item *btrfs_alloc_delayed_item(u16 data_len,
 {
 	struct btrfs_delayed_item *item;

-	item = kmalloc(struct_size(item, data, data_len), GFP_NOFS);
+	item = kmalloc_flex(*item, data, data_len, GFP_NOFS);
 	if (item) {
 		item->data_len = data_len;
 		item->type = type;
@@ -1384,7 +1384,7 @@ static int btrfs_wq_run_delayed_node(struct btrfs_delayed_root *delayed_root,
 {
 	struct btrfs_async_delayed_work *async_work;

-	async_work = kmalloc(sizeof(*async_work), GFP_NOFS);
+	async_work = kmalloc_obj(*async_work, GFP_NOFS);
 	if (!async_work)
 		return -ENOMEM;

diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
index e8bc37453336..3766ff29fbbb 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -1027,7 +1027,7 @@ static int add_delayed_ref(struct btrfs_trans_handle *trans,
 	delayed_refs = &trans->transaction->delayed_refs;

 	if (btrfs_qgroup_full_accounting(fs_info) && !generic_ref->skip_qgroup) {
-		record = kzalloc(sizeof(*record), GFP_NOFS);
+		record = kzalloc_obj(*record, GFP_NOFS);
 		if (!record) {
 			ret = -ENOMEM;
 			goto free_head_ref;
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 13e400046c87..f6fa15a1193f 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -605,7 +605,7 @@ static struct btrfs_root *btrfs_alloc_root(struct btrfs_fs_info *fs_info,
 {
 	struct btrfs_root *root;

-	root = kzalloc(sizeof(*root), flags);
+	root = kzalloc_obj(*root, flags);
 	if (!root)
 		return NULL;

diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index 73571d5d3d5a..a9b0b596429d 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -200,7 +200,7 @@ static inline struct extent_changeset *extent_changeset_alloc(void)
 {
 	struct extent_changeset *ret;

-	ret = kmalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kmalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return NULL;

diff --git a/fs/btrfs/fiemap.c b/fs/btrfs/fiemap.c
index f2eaaef8422b..2e113f81a2d8 100644
--- a/fs/btrfs/fiemap.c
+++ b/fs/btrfs/fiemap.c
@@ -646,9 +646,8 @@ static int extent_fiemap(struct btrfs_inode *inode,
 	int ret;

 	cache.entries_size = PAGE_SIZE / sizeof(struct btrfs_fiemap_entry);
-	cache.entries = kmalloc_array(cache.entries_size,
-				      sizeof(struct btrfs_fiemap_entry),
-				      GFP_KERNEL);
+	cache.entries = kmalloc_objs(struct btrfs_fiemap_entry,
+				     cache.entries_size, GFP_KERNEL);
 	backref_ctx = btrfs_alloc_backref_share_check_ctx();
 	path = btrfs_alloc_path();
 	if (!cache.entries || !backref_ctx || !path) {
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
index 7bd715442f3e..927324a2175a 100644
--- a/fs/btrfs/file-item.c
+++ b/fs/btrfs/file-item.c
@@ -845,7 +845,7 @@ int btrfs_csum_one_bio(struct btrfs_bio *bbio, bool async)
  */
 int btrfs_alloc_dummy_sum(struct btrfs_bio *bbio)
 {
-	bbio->sums = kmalloc(sizeof(*bbio->sums), GFP_NOFS);
+	bbio->sums = kmalloc_obj(*bbio->sums, GFP_NOFS);
 	if (!bbio->sums)
 		return -ENOMEM;
 	bbio->sums->len = bbio->bio.bi_iter.bi_size;
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index acaa3dbd2b7b..21cb45e23a6f 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -2842,7 +2842,7 @@ static int add_falloc_range(struct list_head *head, u64 start, u64 len)
 		}
 	}

-	range = kmalloc(sizeof(*range), GFP_KERNEL);
+	range = kmalloc_obj(*range, GFP_KERNEL);
 	if (!range)
 		return -ENOMEM;
 	range->start = start;
@@ -3572,7 +3572,7 @@ static loff_t find_desired_extent(struct file *file, loff_t offset, int whence)
 		 */
 		private = NULL;
 	} else if (!private) {
-		private = kzalloc(sizeof(*private), GFP_KERNEL);
+		private = kzalloc_obj(*private, GFP_KERNEL);
 		/*
 		 * No worries if memory allocation failed.
 		 * The private structure is used only for speeding up multiple
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
index cc075a460a22..ab22e4f9ffdd 100644
--- a/fs/btrfs/free-space-cache.c
+++ b/fs/btrfs/free-space-cache.c
@@ -388,7 +388,7 @@ static int io_ctl_init(struct btrfs_io_ctl *io_ctl, struct inode *inode,

 	memset(io_ctl, 0, sizeof(struct btrfs_io_ctl));

-	io_ctl->pages = kcalloc(num_pages, sizeof(struct page *), GFP_NOFS);
+	io_ctl->pages = kzalloc_objs(struct page *, num_pages, GFP_NOFS);
 	if (!io_ctl->pages)
 		return -ENOMEM;

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 5bbbce2224a1..da4be08d133e 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -781,7 +781,7 @@ static int add_async_extent(struct async_chunk *cow, u64 start, u64 ram_size,
 {
 	struct async_extent *async_extent;

-	async_extent = kmalloc(sizeof(*async_extent), GFP_NOFS);
+	async_extent = kmalloc_obj(*async_extent, GFP_NOFS);
 	if (!async_extent)
 		return -ENOMEM;
 	ASSERT(ram_size < U32_MAX);
@@ -1692,7 +1692,7 @@ static bool run_delalloc_compressed(struct btrfs_inode *inode,
 	const blk_opf_t write_flags = wbc_to_write_flags(wbc);

 	nofs_flag = memalloc_nofs_save();
-	ctx = kvmalloc(struct_size(ctx, chunks, num_chunks), GFP_KERNEL);
+	ctx = kvmalloc_flex(*ctx, chunks, num_chunks, GFP_KERNEL);
 	memalloc_nofs_restore(nofs_flag);
 	if (!ctx)
 		return false;
@@ -2991,7 +2991,7 @@ int btrfs_writepage_cow_fixup(struct folio *folio)
 	if (folio_test_checked(folio))
 		return -EAGAIN;

-	fixup = kzalloc(sizeof(*fixup), GFP_NOFS);
+	fixup = kzalloc_obj(*fixup, GFP_NOFS);
 	if (!fixup)
 		return -EAGAIN;

@@ -3967,7 +3967,7 @@ static int btrfs_init_file_extent_tree(struct btrfs_inode *inode)
 	if (btrfs_is_free_space_inode(inode))
 		return 0;

-	inode->file_extent_tree = kmalloc(sizeof(struct extent_io_tree), GFP_KERNEL);
+	inode->file_extent_tree = kmalloc_obj(struct extent_io_tree, GFP_KERNEL);
 	if (!inode->file_extent_tree)
 		return -ENOMEM;

@@ -6221,7 +6221,7 @@ static int btrfs_opendir(struct inode *inode, struct file *file)
 	if (ret)
 		return ret;

-	private = kzalloc(sizeof(struct btrfs_file_private), GFP_KERNEL);
+	private = kzalloc_obj(struct btrfs_file_private, GFP_KERNEL);
 	if (!private)
 		return -ENOMEM;
 	private->last_index = last_index;
@@ -8839,7 +8839,7 @@ static struct btrfs_delalloc_work *btrfs_alloc_delalloc_work(struct inode *inode
 {
 	struct btrfs_delalloc_work *work;

-	work = kmalloc(sizeof(*work), GFP_NOFS);
+	work = kmalloc_obj(*work, GFP_NOFS);
 	if (!work)
 		return NULL;

@@ -9538,7 +9538,7 @@ int btrfs_encoded_read_regular_fill_pages(struct btrfs_inode *inode,
 	 * needs longer time span.
 	 */
 	if (uring_ctx) {
-		priv = kmalloc(sizeof(struct btrfs_encoded_read_private), GFP_NOFS);
+		priv = kmalloc_obj(struct btrfs_encoded_read_private, GFP_NOFS);
 		if (!priv)
 			return -ENOMEM;
 	} else {
@@ -9608,7 +9608,7 @@ ssize_t btrfs_encoded_read_regular(struct kiocb *iocb, struct iov_iter *iter,
 	ssize_t ret;

 	nr_pages = DIV_ROUND_UP(disk_io_size, PAGE_SIZE);
-	pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
+	pages = kzalloc_objs(struct page *, nr_pages, GFP_NOFS);
 	if (!pages)
 		return -ENOMEM;
 	ret = btrfs_alloc_page_array(nr_pages, pages, false);
@@ -10092,7 +10092,7 @@ static int btrfs_add_swapfile_pin(struct inode *inode, void *ptr,
 	struct rb_node **p;
 	struct rb_node *parent = NULL;

-	sp = kmalloc(sizeof(*sp), GFP_NOFS);
+	sp = kmalloc_obj(*sp, GFP_NOFS);
 	if (!sp)
 		return -ENOMEM;
 	sp->ptr = ptr;
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index a6cc2d3b414c..af8a9c698b07 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -726,15 +726,15 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
 		return -ETXTBSY;
 	}

-	pending_snapshot = kzalloc(sizeof(*pending_snapshot), GFP_KERNEL);
+	pending_snapshot = kzalloc_obj(*pending_snapshot, GFP_KERNEL);
 	if (!pending_snapshot)
 		return -ENOMEM;

 	ret = get_anon_bdev(&pending_snapshot->anon_dev);
 	if (ret < 0)
 		goto free_pending;
-	pending_snapshot->root_item = kzalloc(sizeof(struct btrfs_root_item),
-			GFP_KERNEL);
+	pending_snapshot->root_item = kzalloc_obj(struct btrfs_root_item,
+						  GFP_KERNEL);
 	pending_snapshot->path = btrfs_alloc_path();
 	if (!pending_snapshot->root_item || !pending_snapshot->path) {
 		ret = -ENOMEM;
@@ -1958,7 +1958,7 @@ static int btrfs_ioctl_get_subvol_info(struct inode *inode, void __user *argp)
 	if (!path)
 		return -ENOMEM;

-	subvol_info = kzalloc(sizeof(*subvol_info), GFP_KERNEL);
+	subvol_info = kzalloc_obj(*subvol_info, GFP_KERNEL);
 	if (!subvol_info) {
 		btrfs_free_path(path);
 		return -ENOMEM;
@@ -3423,7 +3423,7 @@ static long btrfs_ioctl_balance(struct file *file, void __user *arg)
 		goto out_unlock;
 	}

-	bctl = kzalloc(sizeof(*bctl), GFP_KERNEL);
+	bctl = kzalloc_obj(*bctl, GFP_KERNEL);
 	if (!bctl) {
 		ret = -ENOMEM;
 		goto out_unlock;
@@ -3604,7 +3604,7 @@ static long btrfs_ioctl_qgroup_assign(struct file *file, void __user *arg)
 	}

 	if (sa->assign) {
-		prealloc = kzalloc(sizeof(*prealloc), GFP_KERNEL);
+		prealloc = kzalloc_obj(*prealloc, GFP_KERNEL);
 		if (!prealloc) {
 			ret = -ENOMEM;
 			goto out;
@@ -3924,7 +3924,7 @@ static long btrfs_ioctl_set_received_subvol_32(struct file *file,
 	if (IS_ERR(args32))
 		return PTR_ERR(args32);

-	args64 = kmalloc(sizeof(*args64), GFP_KERNEL);
+	args64 = kmalloc_obj(*args64, GFP_KERNEL);
 	if (!args64) {
 		ret = -ENOMEM;
 		goto out;
@@ -4234,7 +4234,7 @@ static int _btrfs_ioctl_send(struct btrfs_root *root, void __user *argp, bool co
 		ret = copy_from_user(&args32, argp, sizeof(args32));
 		if (ret)
 			return -EFAULT;
-		arg = kzalloc(sizeof(*arg), GFP_KERNEL);
+		arg = kzalloc_obj(*arg, GFP_KERNEL);
 		if (!arg)
 			return -ENOMEM;
 		arg->send_fd = args32.send_fd;
@@ -4588,7 +4588,7 @@ static int btrfs_uring_read_extent(struct kiocb *iocb, struct iov_iter *iter,
 	int ret;

 	nr_pages = DIV_ROUND_UP(disk_io_size, PAGE_SIZE);
-	pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
+	pages = kzalloc_objs(struct page *, nr_pages, GFP_NOFS);
 	if (!pages)
 		return -ENOMEM;
 	ret = btrfs_alloc_page_array(nr_pages, pages, 0);
@@ -4597,7 +4597,7 @@ static int btrfs_uring_read_extent(struct kiocb *iocb, struct iov_iter *iter,
 		goto out_fail;
 	}

-	priv = kmalloc(sizeof(*priv), GFP_NOFS);
+	priv = kmalloc_obj(*priv, GFP_NOFS);
 	if (!priv) {
 		ret = -ENOMEM;
 		goto out_fail;
@@ -4682,7 +4682,7 @@ static int btrfs_uring_encoded_read(struct io_uring_cmd *cmd, unsigned int issue
 	}

 	if (!data) {
-		data = kzalloc(sizeof(*data), GFP_NOFS);
+		data = kzalloc_obj(*data, GFP_NOFS);
 		if (!data) {
 			ret = -ENOMEM;
 			goto out_acct;
@@ -4817,7 +4817,7 @@ static int btrfs_uring_encoded_write(struct io_uring_cmd *cmd, unsigned int issu
 	}

 	if (!data) {
-		data = kzalloc(sizeof(*data), GFP_NOFS);
+		data = kzalloc_obj(*data, GFP_NOFS);
 		if (!data) {
 			ret = -ENOMEM;
 			goto out_acct;
diff --git a/fs/btrfs/lru_cache.c b/fs/btrfs/lru_cache.c
index fd88af17d8d9..f5a053b905e1 100644
--- a/fs/btrfs/lru_cache.c
+++ b/fs/btrfs/lru_cache.c
@@ -111,7 +111,7 @@ int btrfs_lru_cache_store(struct btrfs_lru_cache *cache,
 	struct list_head *head;
 	int ret;

-	head = kmalloc(sizeof(*head), gfp);
+	head = kmalloc_obj(*head, gfp);
 	if (!head)
 		return -ENOMEM;

diff --git a/fs/btrfs/lzo.c b/fs/btrfs/lzo.c
index 8e20497afffe..e37d986f26be 100644
--- a/fs/btrfs/lzo.c
+++ b/fs/btrfs/lzo.c
@@ -88,7 +88,7 @@ struct list_head *lzo_alloc_workspace(struct btrfs_fs_info *fs_info)
 {
 	struct workspace *workspace;

-	workspace = kzalloc(sizeof(*workspace), GFP_KERNEL);
+	workspace = kzalloc_obj(*workspace, GFP_KERNEL);
 	if (!workspace)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 38adadb936dc..6bd8739097d3 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -495,7 +495,7 @@ int btrfs_read_qgroup_config(struct btrfs_fs_info *fs_info)
 			struct btrfs_qgroup *prealloc;
 			struct btrfs_root *tree_root = fs_info->tree_root;

-			prealloc = kzalloc(sizeof(*prealloc), GFP_KERNEL);
+			prealloc = kzalloc_obj(*prealloc, GFP_KERNEL);
 			if (!prealloc) {
 				ret = -ENOMEM;
 				goto out;
@@ -585,7 +585,7 @@ int btrfs_read_qgroup_config(struct btrfs_fs_info *fs_info)
 			goto next2;
 		}

-		list = kzalloc(sizeof(*list), GFP_KERNEL);
+		list = kzalloc_obj(*list, GFP_KERNEL);
 		if (!list) {
 			ret = -ENOMEM;
 			goto out;
@@ -1140,7 +1140,7 @@ int btrfs_quota_enable(struct btrfs_fs_info *fs_info,

 			/* We should not have a stray @prealloc pointer. */
 			ASSERT(prealloc == NULL);
-			prealloc = kzalloc(sizeof(*prealloc), GFP_NOFS);
+			prealloc = kzalloc_obj(*prealloc, GFP_NOFS);
 			if (unlikely(!prealloc)) {
 				ret = -ENOMEM;
 				btrfs_abort_transaction(trans, ret);
@@ -1197,7 +1197,7 @@ int btrfs_quota_enable(struct btrfs_fs_info *fs_info,
 	}

 	ASSERT(prealloc == NULL);
-	prealloc = kzalloc(sizeof(*prealloc), GFP_NOFS);
+	prealloc = kzalloc_obj(*prealloc, GFP_NOFS);
 	if (!prealloc) {
 		ret = -ENOMEM;
 		goto out_free_path;
@@ -1693,7 +1693,7 @@ int btrfs_create_qgroup(struct btrfs_trans_handle *trans, u64 qgroupid)
 		goto out;
 	}

-	prealloc = kzalloc(sizeof(*prealloc), GFP_NOFS);
+	prealloc = kzalloc_obj(*prealloc, GFP_NOFS);
 	if (!prealloc) {
 		ret = -ENOMEM;
 		goto out;
@@ -2147,7 +2147,7 @@ int btrfs_qgroup_trace_extent(struct btrfs_trans_handle *trans, u64 bytenr,

 	if (!btrfs_qgroup_full_accounting(fs_info) || bytenr == 0 || num_bytes == 0)
 		return 0;
-	record = kzalloc(sizeof(*record), GFP_NOFS);
+	record = kzalloc_obj(*record, GFP_NOFS);
 	if (!record)
 		return -ENOMEM;

@@ -3346,7 +3346,7 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans, u64 srcid,
 	if (!btrfs_qgroup_enabled(fs_info))
 		return 0;

-	prealloc = kzalloc(sizeof(*prealloc), GFP_NOFS);
+	prealloc = kzalloc_obj(*prealloc, GFP_NOFS);
 	if (!prealloc)
 		return -ENOMEM;

@@ -3428,16 +3428,15 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans, u64 srcid,
 		}
 		ret = 0;

-		qlist_prealloc = kcalloc(inherit->num_qgroups,
-					 sizeof(struct btrfs_qgroup_list *),
-					 GFP_NOFS);
+		qlist_prealloc = kzalloc_objs(struct btrfs_qgroup_list *,
+					      inherit->num_qgroups, GFP_NOFS);
 		if (!qlist_prealloc) {
 			ret = -ENOMEM;
 			goto out;
 		}
 		for (int i = 0; i < inherit->num_qgroups; i++) {
-			qlist_prealloc[i] = kzalloc(sizeof(struct btrfs_qgroup_list),
-						    GFP_NOFS);
+			qlist_prealloc[i] = kzalloc_obj(struct btrfs_qgroup_list,
+							GFP_NOFS);
 			if (!qlist_prealloc[i]) {
 				ret = -ENOMEM;
 				goto out;
@@ -4753,7 +4752,7 @@ int btrfs_qgroup_add_swapped_blocks(struct btrfs_root *subvol_root,
 		return -EUCLEAN;
 	}

-	block = kmalloc(sizeof(*block), GFP_NOFS);
+	block = kmalloc_obj(*block, GFP_NOFS);
 	if (!block) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
index baadaaa189c0..8112122c13e6 100644
--- a/fs/btrfs/raid56.c
+++ b/fs/btrfs/raid56.c
@@ -208,7 +208,7 @@ int btrfs_alloc_stripe_hash_table(struct btrfs_fs_info *info)
 	 * Try harder to allocate and fallback to vmalloc to lower the chance
 	 * of a failing mount.
 	 */
-	table = kvzalloc(struct_size(table, table, num_entries), GFP_KERNEL);
+	table = kvzalloc_flex(*table, table, num_entries, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

@@ -1090,13 +1090,15 @@ static struct btrfs_raid_bio *alloc_rbio(struct btrfs_fs_info *fs_info,
 	ASSERT(real_stripes >= 2);
 	ASSERT(real_stripes <= U8_MAX);

-	rbio = kzalloc(sizeof(*rbio), GFP_NOFS);
+	rbio = kzalloc_obj(*rbio, GFP_NOFS);
 	if (!rbio)
 		return ERR_PTR(-ENOMEM);
-	rbio->stripe_pages = kcalloc(num_pages, sizeof(struct page *),
-				     GFP_NOFS);
-	rbio->bio_paddrs = kcalloc(num_sectors * sector_nsteps, sizeof(phys_addr_t), GFP_NOFS);
-	rbio->stripe_paddrs = kcalloc(num_sectors * sector_nsteps, sizeof(phys_addr_t), GFP_NOFS);
+	rbio->stripe_pages = kzalloc_objs(struct page *, num_pages, GFP_NOFS);
+	rbio->bio_paddrs = kzalloc_objs(phys_addr_t,
+					num_sectors * sector_nsteps, GFP_NOFS);
+	rbio->stripe_paddrs = kzalloc_objs(phys_addr_t,
+					   num_sectors * sector_nsteps,
+					   GFP_NOFS);
 	rbio->finish_pointers = kcalloc(real_stripes, sizeof(void *), GFP_NOFS);
 	rbio->error_bitmap = bitmap_zalloc(num_sectors, GFP_NOFS);
 	rbio->stripe_uptodate_bitmap = bitmap_zalloc(num_sectors, GFP_NOFS);
diff --git a/fs/btrfs/ref-verify.c b/fs/btrfs/ref-verify.c
index e9224145d754..f78369ff2a66 100644
--- a/fs/btrfs/ref-verify.c
+++ b/fs/btrfs/ref-verify.c
@@ -249,8 +249,8 @@ static struct block_entry *add_block_entry(struct btrfs_fs_info *fs_info,
 	struct block_entry *be = NULL, *exist;
 	struct root_entry *re = NULL;

-	re = kzalloc(sizeof(struct root_entry), GFP_NOFS);
-	be = kzalloc(sizeof(struct block_entry), GFP_NOFS);
+	re = kzalloc_obj(struct root_entry, GFP_NOFS);
+	be = kzalloc_obj(struct block_entry, GFP_NOFS);
 	if (!be || !re) {
 		kfree(re);
 		kfree(be);
@@ -298,7 +298,7 @@ static int add_tree_block(struct btrfs_fs_info *fs_info, u64 ref_root,
 	struct root_entry *re;
 	struct ref_entry *ref = NULL, *exist;

-	ref = kmalloc(sizeof(struct ref_entry), GFP_NOFS);
+	ref = kmalloc_obj(struct ref_entry, GFP_NOFS);
 	if (!ref)
 		return -ENOMEM;

@@ -343,7 +343,7 @@ static int add_shared_data_ref(struct btrfs_fs_info *fs_info,
 	struct block_entry *be;
 	struct ref_entry *ref;

-	ref = kzalloc(sizeof(struct ref_entry), GFP_NOFS);
+	ref = kzalloc_obj(struct ref_entry, GFP_NOFS);
 	if (!ref)
 		return -ENOMEM;
 	be = add_block_entry(fs_info, bytenr, num_bytes, 0);
@@ -378,7 +378,7 @@ static int add_extent_data_ref(struct btrfs_fs_info *fs_info,
 	u64 offset = btrfs_extent_data_ref_offset(leaf, dref);
 	u32 num_refs = btrfs_extent_data_ref_count(leaf, dref);

-	ref = kzalloc(sizeof(struct ref_entry), GFP_NOFS);
+	ref = kzalloc_obj(struct ref_entry, GFP_NOFS);
 	if (!ref)
 		return -ENOMEM;
 	be = add_block_entry(fs_info, bytenr, num_bytes, ref_root);
@@ -680,8 +680,8 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info,
 	}
 	metadata = owner < BTRFS_FIRST_FREE_OBJECTID;

-	ref = kzalloc(sizeof(struct ref_entry), GFP_NOFS);
-	ra = kmalloc(sizeof(struct ref_action), GFP_NOFS);
+	ref = kzalloc_obj(struct ref_entry, GFP_NOFS);
+	ra = kmalloc_obj(struct ref_action, GFP_NOFS);
 	if (!ra || !ref) {
 		kfree(ref);
 		kfree(ra);
@@ -755,7 +755,7 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info,
 		struct root_entry *tmp;

 		if (!parent) {
-			re = kmalloc(sizeof(struct root_entry), GFP_NOFS);
+			re = kmalloc_obj(struct root_entry, GFP_NOFS);
 			if (!re) {
 				kfree(ref);
 				kfree(ra);
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index fcd0a2ba3554..95db7c48fbad 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -483,7 +483,7 @@ static int __add_reloc_root(struct btrfs_root *root)
 	struct mapping_node *node;
 	struct reloc_control *rc = fs_info->reloc_ctl;

-	node = kmalloc(sizeof(*node), GFP_NOFS);
+	node = kmalloc_obj(*node, GFP_NOFS);
 	if (!node)
 		return -ENOMEM;

@@ -3115,7 +3115,7 @@ static int add_tree_block(struct reloc_control *rc,

 	BUG_ON(level == -1);

-	block = kmalloc(sizeof(*block), GFP_NOFS);
+	block = kmalloc_obj(*block, GFP_NOFS);
 	if (!block)
 		return -ENOMEM;

@@ -3813,7 +3813,7 @@ static struct reloc_control *alloc_reloc_control(struct btrfs_fs_info *fs_info)
 {
 	struct reloc_control *rc;

-	rc = kzalloc(sizeof(*rc), GFP_NOFS);
+	rc = kzalloc_obj(*rc, GFP_NOFS);
 	if (!rc)
 		return NULL;

@@ -4042,7 +4042,7 @@ static int copy_remapped_data(struct btrfs_fs_info *fs_info, u64 old_addr,
 	struct reloc_io_private priv;
 	unsigned int nr_pages = DIV_ROUND_UP(length, PAGE_SIZE);

-	pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
+	pages = kzalloc_objs(struct page *, nr_pages, GFP_NOFS);
 	if (!pages)
 		return -ENOMEM;

diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 2a64e2d50ced..dfed8eaf938e 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -373,9 +373,8 @@ static int init_scrub_stripe(struct btrfs_fs_info *fs_info,
 	if (ret < 0)
 		goto error;

-	stripe->sectors = kcalloc(stripe->nr_sectors,
-				  sizeof(struct scrub_sector_verification),
-				  GFP_KERNEL);
+	stripe->sectors = kzalloc_objs(struct scrub_sector_verification,
+				       stripe->nr_sectors, GFP_KERNEL);
 	if (!stripe->sectors)
 		goto error;

@@ -456,7 +455,7 @@ static noinline_for_stack struct scrub_ctx *scrub_setup_ctx(
 	/* Since sctx has inline 128 stripes, it can go beyond 64K easily.  Use
 	 * kvzalloc().
 	 */
-	sctx = kvzalloc(sizeof(*sctx), GFP_KERNEL);
+	sctx = kvzalloc_obj(*sctx, GFP_KERNEL);
 	if (!sctx)
 		goto nomem;
 	refcount_set(&sctx->refs, 1);
@@ -2474,9 +2473,9 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
 	if (profile & BTRFS_BLOCK_GROUP_RAID56_MASK) {
 		ASSERT(sctx->raid56_data_stripes == NULL);

-		sctx->raid56_data_stripes = kcalloc(nr_data_stripes(map),
-						    sizeof(struct scrub_stripe),
-						    GFP_KERNEL);
+		sctx->raid56_data_stripes = kzalloc_objs(struct scrub_stripe,
+							 nr_data_stripes(map),
+							 GFP_KERNEL);
 		if (!sctx->raid56_data_stripes) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index 3dcfdba018b5..23b0b06ac71c 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -450,7 +450,7 @@ static struct fs_path *fs_path_alloc(void)
 {
 	struct fs_path *p;

-	p = kmalloc(sizeof(*p), GFP_KERNEL);
+	p = kmalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return NULL;
 	init_path(p);
@@ -1429,7 +1429,7 @@ static void store_backref_cache(u64 leaf_bytenr, const struct ulist *root_ids,
 	 * fs_info->commit_root_sem (at iterate_extent_inodes()), so must do a
 	 * NOFS allocation.
 	 */
-	new_entry = kmalloc(sizeof(struct backref_cache_entry), GFP_NOFS);
+	new_entry = kmalloc_obj(struct backref_cache_entry, GFP_NOFS);
 	/* No worries, cache is optional. */
 	if (!new_entry)
 		return;
@@ -2743,7 +2743,7 @@ static int cache_dir_utimes(struct send_ctx *sctx, u64 dir, u64 gen)
 		return 0;

 	/* Caching is optional, don't fail if we can't allocate memory. */
-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return send_utimes(sctx, dir, gen);

@@ -2870,7 +2870,7 @@ static void cache_dir_created(struct send_ctx *sctx, u64 dir)
 	int ret;

 	/* Caching is optional, ignore any failures. */
-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return;

@@ -2974,7 +2974,7 @@ static struct recorded_ref *recorded_ref_alloc(void)
 {
 	struct recorded_ref *ref;

-	ref = kzalloc(sizeof(*ref), GFP_KERNEL);
+	ref = kzalloc_obj(*ref, GFP_KERNEL);
 	if (!ref)
 		return NULL;
 	RB_CLEAR_NODE(&ref->node);
@@ -3083,7 +3083,7 @@ static struct orphan_dir_info *add_orphan_dir_info(struct send_ctx *sctx,
 			return entry;
 	}

-	odi = kmalloc(sizeof(*odi), GFP_KERNEL);
+	odi = kmalloc_obj(*odi, GFP_KERNEL);
 	if (!odi)
 		return ERR_PTR(-ENOMEM);
 	odi->ino = dir_ino;
@@ -3284,7 +3284,7 @@ static int add_waiting_dir_move(struct send_ctx *sctx, u64 ino, bool orphanized)
 	struct rb_node *parent = NULL;
 	struct waiting_dir_move *entry, *dm;

-	dm = kmalloc(sizeof(*dm), GFP_KERNEL);
+	dm = kmalloc_obj(*dm, GFP_KERNEL);
 	if (!dm)
 		return -ENOMEM;
 	dm->ino = ino;
@@ -3352,7 +3352,7 @@ static int add_pending_dir_move(struct send_ctx *sctx,
 	int exists = 0;
 	int ret;

-	pm = kmalloc(sizeof(*pm), GFP_KERNEL);
+	pm = kmalloc_obj(*pm, GFP_KERNEL);
 	if (!pm)
 		return -ENOMEM;
 	pm->parent_ino = parent_ino;
@@ -8035,7 +8035,7 @@ long btrfs_ioctl_send(struct btrfs_root *send_root, const struct btrfs_ioctl_sen
 		goto out;
 	}

-	sctx = kzalloc(sizeof(struct send_ctx), GFP_KERNEL);
+	sctx = kzalloc_obj(struct send_ctx, GFP_KERNEL);
 	if (!sctx) {
 		ret = -ENOMEM;
 		goto out;
@@ -8097,9 +8097,9 @@ long btrfs_ioctl_send(struct btrfs_root *send_root, const struct btrfs_ioctl_sen
 			goto out;
 		}
 		send_buf_num_pages = sctx->send_max_size >> PAGE_SHIFT;
-		sctx->send_buf_pages = kcalloc(send_buf_num_pages,
-					       sizeof(*sctx->send_buf_pages),
-					       GFP_KERNEL);
+		sctx->send_buf_pages = kzalloc_objs(*sctx->send_buf_pages,
+						    send_buf_num_pages,
+						    GFP_KERNEL);
 		if (!sctx->send_buf_pages) {
 			ret = -ENOMEM;
 			goto out;
@@ -8117,9 +8117,9 @@ long btrfs_ioctl_send(struct btrfs_root *send_root, const struct btrfs_ioctl_sen
 		goto out;
 	}

-	sctx->clone_roots = kvcalloc(arg->clone_sources_count + 1,
-				     sizeof(*sctx->clone_roots),
-				     GFP_KERNEL);
+	sctx->clone_roots = kvzalloc_objs(*sctx->clone_roots,
+					  arg->clone_sources_count + 1,
+					  GFP_KERNEL);
 	if (!sctx->clone_roots) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c
index bb5aac7ee9d2..52a267a5dd80 100644
--- a/fs/btrfs/space-info.c
+++ b/fs/btrfs/space-info.c
@@ -266,7 +266,7 @@ static int create_space_info_sub_group(struct btrfs_space_info *parent, u64 flag
 	       "parent->subgroup_id=%d", parent->subgroup_id);
 	ASSERT(id != BTRFS_SUB_GROUP_PRIMARY, "id=%d", id);

-	sub_group = kzalloc(sizeof(*sub_group), GFP_NOFS);
+	sub_group = kzalloc_obj(*sub_group, GFP_NOFS);
 	if (!sub_group)
 		return -ENOMEM;

@@ -289,7 +289,7 @@ static int create_space_info(struct btrfs_fs_info *info, u64 flags)
 	struct btrfs_space_info *space_info;
 	int ret = 0;

-	space_info = kzalloc(sizeof(*space_info), GFP_NOFS);
+	space_info = kzalloc_obj(*space_info, GFP_NOFS);
 	if (!space_info)
 		return -ENOMEM;

diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index d64d303b6edc..3f9523563259 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -2054,7 +2054,7 @@ static int btrfs_get_tree_subvol(struct fs_context *fc)
 	 * of the fs_info (locks and such) to make cleanup easier if we find a
 	 * superblock with our given fs_devices later on at sget() time.
 	 */
-	fs_info = kvzalloc(sizeof(struct btrfs_fs_info), GFP_KERNEL);
+	fs_info = kvzalloc_obj(struct btrfs_fs_info, GFP_KERNEL);
 	if (!fs_info)
 		return -ENOMEM;

@@ -2173,7 +2173,7 @@ static int btrfs_init_fs_context(struct fs_context *fc)
 {
 	struct btrfs_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct btrfs_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct btrfs_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index 27bfb7b55ec4..f62278f0c191 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -1833,7 +1833,7 @@ void btrfs_sysfs_add_block_group_type(struct btrfs_block_group *cache)
 	 */
 	nofs_flag = memalloc_nofs_save();

-	rkobj = kzalloc(sizeof(*rkobj), GFP_NOFS);
+	rkobj = kzalloc_obj(*rkobj, GFP_NOFS);
 	if (!rkobj) {
 		memalloc_nofs_restore(nofs_flag);
 		btrfs_warn(cache->fs_info,
@@ -2597,7 +2597,7 @@ int btrfs_sysfs_add_qgroups(struct btrfs_fs_info *fs_info)
 	if (fs_info->qgroups_kobj)
 		return 0;

-	fs_info->qgroups_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL);
+	fs_info->qgroups_kobj = kzalloc_obj(struct kobject, GFP_KERNEL);
 	if (!fs_info->qgroups_kobj)
 		return -ENOMEM;

diff --git a/fs/btrfs/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c
index 7f13c05d3736..c5b1bc0f7f91 100644
--- a/fs/btrfs/tests/btrfs-tests.c
+++ b/fs/btrfs/tests/btrfs-tests.c
@@ -98,7 +98,7 @@ struct btrfs_device *btrfs_alloc_dummy_device(struct btrfs_fs_info *fs_info)
 {
 	struct btrfs_device *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

@@ -117,21 +117,19 @@ static void btrfs_free_dummy_device(struct btrfs_device *dev)

 struct btrfs_fs_info *btrfs_alloc_dummy_fs_info(u32 nodesize, u32 sectorsize)
 {
-	struct btrfs_fs_info *fs_info = kzalloc(sizeof(struct btrfs_fs_info),
-						GFP_KERNEL);
+	struct btrfs_fs_info *fs_info = kzalloc_obj(struct btrfs_fs_info,
+						    GFP_KERNEL);

 	if (!fs_info)
 		return fs_info;
-	fs_info->fs_devices = kzalloc(sizeof(struct btrfs_fs_devices),
-				      GFP_KERNEL);
+	fs_info->fs_devices = kzalloc_obj(struct btrfs_fs_devices, GFP_KERNEL);
 	if (!fs_info->fs_devices) {
 		kfree(fs_info);
 		return NULL;
 	}
 	INIT_LIST_HEAD(&fs_info->fs_devices->devices);

-	fs_info->super_copy = kzalloc(sizeof(struct btrfs_super_block),
-				      GFP_KERNEL);
+	fs_info->super_copy = kzalloc_obj(struct btrfs_super_block, GFP_KERNEL);
 	if (!fs_info->super_copy) {
 		kfree(fs_info->fs_devices);
 		kfree(fs_info);
@@ -208,11 +206,10 @@ btrfs_alloc_dummy_block_group(struct btrfs_fs_info *fs_info,
 {
 	struct btrfs_block_group *cache;

-	cache = kzalloc(sizeof(*cache), GFP_KERNEL);
+	cache = kzalloc_obj(*cache, GFP_KERNEL);
 	if (!cache)
 		return NULL;
-	cache->free_space_ctl = kzalloc(sizeof(*cache->free_space_ctl),
-					GFP_KERNEL);
+	cache->free_space_ctl = kzalloc_obj(*cache->free_space_ctl, GFP_KERNEL);
 	if (!cache->free_space_ctl) {
 		kfree(cache);
 		return NULL;
diff --git a/fs/btrfs/tests/delayed-refs-tests.c b/fs/btrfs/tests/delayed-refs-tests.c
index e2248acb906b..fdc183ebc6da 100644
--- a/fs/btrfs/tests/delayed-refs-tests.c
+++ b/fs/btrfs/tests/delayed-refs-tests.c
@@ -985,7 +985,7 @@ int btrfs_test_delayed_refs(u32 sectorsize, u32 nodesize)
 		test_std_err(TEST_ALLOC_FS_INFO);
 		return -ENOMEM;
 	}
-	transaction = kmalloc(sizeof(*transaction), GFP_KERNEL);
+	transaction = kmalloc_obj(*transaction, GFP_KERNEL);
 	if (!transaction) {
 		test_std_err(TEST_ALLOC_TRANSACTION);
 		ret = -ENOMEM;
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index 463238ca8a4d..7ef8c9b7dfc1 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -315,7 +315,7 @@ static noinline int join_transaction(struct btrfs_fs_info *fs_info,
 	 */
 	BUG_ON(type == TRANS_JOIN_NOLOCK);

-	cur_trans = kmalloc(sizeof(*cur_trans), GFP_NOFS);
+	cur_trans = kmalloc_obj(*cur_trans, GFP_NOFS);
 	if (!cur_trans)
 		return -ENOMEM;

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index e1bd03ebfd98..780a06d59240 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -5928,7 +5928,7 @@ static int log_new_dir_dentries(struct btrfs_trans_handle *trans,
 			if (ret)
 				goto out;
 			if (ctx->log_new_dentries) {
-				dir_elem = kmalloc(sizeof(*dir_elem), GFP_NOFS);
+				dir_elem = kmalloc_obj(*dir_elem, GFP_NOFS);
 				if (!dir_elem) {
 					ret = -ENOMEM;
 					goto out;
@@ -6122,7 +6122,7 @@ static int add_conflicting_inode(struct btrfs_trans_handle *trans,
 			return ret;

 		/* Conflicting inode is a directory, so we'll log its parent. */
-		ino_elem = kmalloc(sizeof(*ino_elem), GFP_NOFS);
+		ino_elem = kmalloc_obj(*ino_elem, GFP_NOFS);
 		if (!ino_elem)
 			return -ENOMEM;
 		ino_elem->ino = ino;
@@ -6180,7 +6180,7 @@ static int add_conflicting_inode(struct btrfs_trans_handle *trans,

 	btrfs_add_delayed_iput(inode);

-	ino_elem = kmalloc(sizeof(*ino_elem), GFP_NOFS);
+	ino_elem = kmalloc_obj(*ino_elem, GFP_NOFS);
 	if (!ino_elem)
 		return -ENOMEM;
 	ino_elem->ino = ino;
diff --git a/fs/btrfs/tree-mod-log.c b/fs/btrfs/tree-mod-log.c
index 9e8cb3b7c064..603c1457130e 100644
--- a/fs/btrfs/tree-mod-log.c
+++ b/fs/btrfs/tree-mod-log.c
@@ -243,7 +243,7 @@ static struct tree_mod_elem *alloc_tree_mod_elem(const struct extent_buffer *eb,
 	ASSERT(op != BTRFS_MOD_LOG_MOVE_KEYS);
 	ASSERT(op != BTRFS_MOD_LOG_ROOT_REPLACE);

-	tm = kzalloc(sizeof(*tm), GFP_NOFS);
+	tm = kzalloc_obj(*tm, GFP_NOFS);
 	if (!tm)
 		return NULL;

@@ -301,7 +301,7 @@ static struct tree_mod_elem *tree_mod_log_alloc_move(const struct extent_buffer
 {
 	struct tree_mod_elem *tm;

-	tm = kzalloc(sizeof(*tm), GFP_NOFS);
+	tm = kzalloc_obj(*tm, GFP_NOFS);
 	if (!tm)
 		return ERR_PTR(-ENOMEM);

@@ -328,7 +328,7 @@ int btrfs_tree_mod_log_insert_move(const struct extent_buffer *eb,
 	if (!tree_mod_need_log(eb->fs_info, eb))
 		return 0;

-	tm_list = kcalloc(nr_items, sizeof(struct tree_mod_elem *), GFP_NOFS);
+	tm_list = kzalloc_objs(struct tree_mod_elem *, nr_items, GFP_NOFS);
 	if (!tm_list) {
 		ret = -ENOMEM;
 		goto lock;
@@ -439,8 +439,8 @@ int btrfs_tree_mod_log_insert_root(struct extent_buffer *old_root,

 	if (log_removal && btrfs_header_level(old_root) > 0) {
 		nritems = btrfs_header_nritems(old_root);
-		tm_list = kcalloc(nritems, sizeof(struct tree_mod_elem *),
-				  GFP_NOFS);
+		tm_list = kzalloc_objs(struct tree_mod_elem *, nritems,
+				       GFP_NOFS);
 		if (!tm_list) {
 			ret = -ENOMEM;
 			goto lock;
@@ -455,7 +455,7 @@ int btrfs_tree_mod_log_insert_root(struct extent_buffer *old_root,
 		}
 	}

-	tm = kzalloc(sizeof(*tm), GFP_NOFS);
+	tm = kzalloc_obj(*tm, GFP_NOFS);
 	if (!tm) {
 		ret = -ENOMEM;
 		goto lock;
@@ -595,8 +595,7 @@ int btrfs_tree_mod_log_eb_copy(struct extent_buffer *dst,
 	if (btrfs_header_level(dst) == 0 && btrfs_header_level(src) == 0)
 		return 0;

-	tm_list = kcalloc(nr_items * 2, sizeof(struct tree_mod_elem *),
-			  GFP_NOFS);
+	tm_list = kzalloc_objs(struct tree_mod_elem *, nr_items * 2, GFP_NOFS);
 	if (!tm_list) {
 		ret = -ENOMEM;
 		goto lock;
@@ -714,7 +713,7 @@ int btrfs_tree_mod_log_free_eb(struct extent_buffer *eb)
 		return 0;

 	nritems = btrfs_header_nritems(eb);
-	tm_list = kcalloc(nritems, sizeof(struct tree_mod_elem *), GFP_NOFS);
+	tm_list = kzalloc_objs(struct tree_mod_elem *, nritems, GFP_NOFS);
 	if (!tm_list) {
 		ret = -ENOMEM;
 		goto lock;
diff --git a/fs/btrfs/ulist.c b/fs/btrfs/ulist.c
index 7e16a253fb35..7898076ce41c 100644
--- a/fs/btrfs/ulist.c
+++ b/fs/btrfs/ulist.c
@@ -98,7 +98,7 @@ void ulist_reinit(struct ulist *ulist)
  */
 struct ulist *ulist_alloc(gfp_t gfp_mask)
 {
-	struct ulist *ulist = kmalloc(sizeof(*ulist), gfp_mask);
+	struct ulist *ulist = kmalloc_obj(*ulist, gfp_mask);

 	if (!ulist)
 		return NULL;
@@ -111,7 +111,7 @@ struct ulist *ulist_alloc(gfp_t gfp_mask)
 void ulist_prealloc(struct ulist *ulist, gfp_t gfp_mask)
 {
 	if (!ulist->prealloc)
-		ulist->prealloc = kzalloc(sizeof(*ulist->prealloc), gfp_mask);
+		ulist->prealloc = kzalloc_obj(*ulist->prealloc, gfp_mask);
 }

 /*
@@ -219,7 +219,7 @@ int ulist_add_merge(struct ulist *ulist, u64 val, u64 aux,
 		node = ulist->prealloc;
 		ulist->prealloc = NULL;
 	} else {
-		node = kmalloc(sizeof(*node), gfp_mask);
+		node = kmalloc_obj(*node, gfp_mask);
 		if (!node)
 			return -ENOMEM;
 	}
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 50f7aae70418..71ff7006ca6b 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -382,7 +382,7 @@ static struct btrfs_fs_devices *alloc_fs_devices(const u8 *fsid)
 {
 	struct btrfs_fs_devices *fs_devs;

-	fs_devs = kzalloc(sizeof(*fs_devs), GFP_KERNEL);
+	fs_devs = kzalloc_obj(*fs_devs, GFP_KERNEL);
 	if (!fs_devs)
 		return ERR_PTR(-ENOMEM);

@@ -4456,7 +4456,7 @@ static int __btrfs_balance(struct btrfs_fs_info *fs_info)
 		if (chunk_type & BTRFS_BLOCK_GROUP_METADATA_REMAP) {
 			mutex_unlock(&fs_info->reclaim_bgs_lock);

-			rci = kmalloc(sizeof(struct remap_chunk_info), GFP_NOFS);
+			rci = kmalloc_obj(struct remap_chunk_info, GFP_NOFS);
 			if (!rci) {
 				ret = -ENOMEM;
 				goto error;
@@ -5004,7 +5004,7 @@ int btrfs_recover_balance(struct btrfs_fs_info *fs_info)
 		return 0;
 	}

-	bctl = kzalloc(sizeof(*bctl), GFP_NOFS);
+	bctl = kzalloc_obj(*bctl, GFP_NOFS);
 	if (!bctl)
 		return -ENOMEM;

@@ -6338,7 +6338,7 @@ struct btrfs_io_context *alloc_btrfs_io_context(struct btrfs_fs_info *fs_info,
 {
 	struct btrfs_io_context *bioc;

-	bioc = kzalloc(struct_size(bioc, stripes, total_stripes), GFP_NOFS);
+	bioc = kzalloc_flex(*bioc, stripes, total_stripes, GFP_NOFS);

 	if (!bioc)
 		return NULL;
@@ -6471,7 +6471,7 @@ struct btrfs_discard_stripe *btrfs_map_discard(struct btrfs_fs_info *fs_info,
 		stripe_nr /= map->num_stripes;
 	}

-	stripes = kcalloc(*num_stripes, sizeof(*stripes), GFP_NOFS);
+	stripes = kzalloc_objs(*stripes, *num_stripes, GFP_NOFS);
 	if (!stripes) {
 		ret = -ENOMEM;
 		goto out_free_map;
@@ -7202,7 +7202,7 @@ struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info,
 	if (WARN_ON(!devid && !fs_info))
 		return ERR_PTR(-EINVAL);

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/btrfs/zlib.c b/fs/btrfs/zlib.c
index 0a8fcee16428..5a0913a31991 100644
--- a/fs/btrfs/zlib.c
+++ b/fs/btrfs/zlib.c
@@ -75,7 +75,7 @@ struct list_head *zlib_alloc_workspace(struct btrfs_fs_info *fs_info, unsigned i
 	struct workspace *workspace;
 	int workspacesize;

-	workspace = kzalloc(sizeof(*workspace), GFP_KERNEL);
+	workspace = kzalloc_obj(*workspace, GFP_KERNEL);
 	if (!workspace)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
index ad8621587fd2..fcdfb831b484 100644
--- a/fs/btrfs/zoned.c
+++ b/fs/btrfs/zoned.c
@@ -377,7 +377,7 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device, bool populate_cache)
 	if (device->zone_info)
 		return 0;

-	zone_info = kzalloc(sizeof(*zone_info), GFP_KERNEL);
+	zone_info = kzalloc_obj(*zone_info, GFP_KERNEL);
 	if (!zone_info)
 		return -ENOMEM;

@@ -454,7 +454,8 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device, bool populate_cache)
 		goto out;
 	}

-	zones = kvcalloc(BTRFS_REPORT_NR_ZONES, sizeof(struct blk_zone), GFP_KERNEL);
+	zones = kvzalloc_objs(struct blk_zone, BTRFS_REPORT_NR_ZONES,
+			      GFP_KERNEL);
 	if (!zones) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/fs/btrfs/zstd.c b/fs/btrfs/zstd.c
index 32fd7f5454d3..a7a41dd320d9 100644
--- a/fs/btrfs/zstd.c
+++ b/fs/btrfs/zstd.c
@@ -185,7 +185,7 @@ int zstd_alloc_workspace_manager(struct btrfs_fs_info *fs_info)
 	struct list_head *ws;

 	ASSERT(fs_info->compr_wsm[BTRFS_COMPRESS_ZSTD] == NULL);
-	zwsm = kzalloc(sizeof(*zwsm), GFP_KERNEL);
+	zwsm = kzalloc_obj(*zwsm, GFP_KERNEL);
 	if (!zwsm)
 		return -ENOMEM;
 	zstd_calc_ws_mem_sizes();
@@ -373,7 +373,7 @@ struct list_head *zstd_alloc_workspace(struct btrfs_fs_info *fs_info, int level)
 	const u32 blocksize = fs_info->sectorsize;
 	struct workspace *workspace;

-	workspace = kzalloc(sizeof(*workspace), GFP_KERNEL);
+	workspace = kzalloc_obj(*workspace, GFP_KERNEL);
 	if (!workspace)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/buffer.c b/fs/buffer.c
index ed724a902657..22b43642ba57 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -358,8 +358,7 @@ static void end_buffer_async_read_io(struct buffer_head *bh, int uptodate)

 	/* Decrypt (with fscrypt) and/or verify (with fsverity) if needed. */
 	if (uptodate && (decrypt || vi)) {
-		struct postprocess_bh_ctx *ctx =
-			kmalloc(sizeof(*ctx), GFP_ATOMIC);
+		struct postprocess_bh_ctx *ctx = kmalloc_obj(*ctx, GFP_ATOMIC);

 		if (ctx) {
 			ctx->bh = bh;
diff --git a/fs/cachefiles/daemon.c b/fs/cachefiles/daemon.c
index 1806bff8e59b..99795864bcb3 100644
--- a/fs/cachefiles/daemon.c
+++ b/fs/cachefiles/daemon.c
@@ -102,7 +102,7 @@ static int cachefiles_daemon_open(struct inode *inode, struct file *file)
 		return -EBUSY;

 	/* allocate a cache record */
-	cache = kzalloc(sizeof(struct cachefiles_cache), GFP_KERNEL);
+	cache = kzalloc_obj(struct cachefiles_cache, GFP_KERNEL);
 	if (!cache) {
 		cachefiles_open = 0;
 		return -ENOMEM;
diff --git a/fs/cachefiles/io.c b/fs/cachefiles/io.c
index 3e0576d9db1d..7b9d547ecee6 100644
--- a/fs/cachefiles/io.c
+++ b/fs/cachefiles/io.c
@@ -132,7 +132,7 @@ static int cachefiles_read(struct netfs_cache_resources *cres,
 	}

 	ret = -ENOMEM;
-	ki = kzalloc(sizeof(struct cachefiles_kiocb), GFP_KERNEL);
+	ki = kzalloc_obj(struct cachefiles_kiocb, GFP_KERNEL);
 	if (!ki)
 		goto presubmission_error;

@@ -298,7 +298,7 @@ int __cachefiles_write(struct cachefiles_object *object,
 	       file, file_inode(file)->i_ino, start_pos, len,
 	       i_size_read(file_inode(file)));

-	ki = kzalloc(sizeof(struct cachefiles_kiocb), GFP_KERNEL);
+	ki = kzalloc_obj(struct cachefiles_kiocb, GFP_KERNEL);
 	if (!ki) {
 		if (term_func)
 			term_func(term_func_priv, -ENOMEM);
diff --git a/fs/cachefiles/ondemand.c b/fs/cachefiles/ondemand.c
index a7ed86fa98bb..b251fff2bed0 100644
--- a/fs/cachefiles/ondemand.c
+++ b/fs/cachefiles/ondemand.c
@@ -734,8 +734,8 @@ int cachefiles_ondemand_init_obj_info(struct cachefiles_object *object,
 	if (!cachefiles_in_ondemand_mode(volume->cache))
 		return 0;

-	object->ondemand = kzalloc(sizeof(struct cachefiles_ondemand_info),
-					GFP_KERNEL);
+	object->ondemand = kzalloc_obj(struct cachefiles_ondemand_info,
+				       GFP_KERNEL);
 	if (!object->ondemand)
 		return -ENOMEM;

diff --git a/fs/cachefiles/volume.c b/fs/cachefiles/volume.c
index 90ba926f488e..655de0cef530 100644
--- a/fs/cachefiles/volume.c
+++ b/fs/cachefiles/volume.c
@@ -28,7 +28,7 @@ void cachefiles_acquire_volume(struct fscache_volume *vcookie)

 	_enter("");

-	volume = kzalloc(sizeof(struct cachefiles_volume), GFP_KERNEL);
+	volume = kzalloc_obj(struct cachefiles_volume, GFP_KERNEL);
 	if (!volume)
 		return;
 	volume->vcookie = vcookie;
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index ce09ff3e020f..e87b3bb94ee8 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -470,7 +470,7 @@ static int ceph_init_request(struct netfs_io_request *rreq, struct file *file)
 	if (rreq->origin != NETFS_READAHEAD)
 		return 0;

-	priv = kzalloc(sizeof(*priv), GFP_NOFS);
+	priv = kzalloc_obj(*priv, GFP_NOFS);
 	if (!priv)
 		return -ENOMEM;

@@ -1186,9 +1186,7 @@ static inline
 void __ceph_allocate_page_array(struct ceph_writeback_ctl *ceph_wbc,
 				unsigned int max_pages)
 {
-	ceph_wbc->pages = kmalloc_array(max_pages,
-					sizeof(*ceph_wbc->pages),
-					GFP_NOFS);
+	ceph_wbc->pages = kmalloc_objs(*ceph_wbc->pages, max_pages, GFP_NOFS);
 	if (!ceph_wbc->pages) {
 		ceph_wbc->from_pool = true;
 		ceph_wbc->pages = mempool_alloc(ceph_wb_pagevec_pool, GFP_NOFS);
@@ -2506,7 +2504,7 @@ static int __ceph_pool_perm_get(struct ceph_inode_info *ci,
 	}

 	pool_ns_len = pool_ns ? pool_ns->len : 0;
-	perm = kmalloc(struct_size(perm, pool_ns, pool_ns_len + 1), GFP_NOFS);
+	perm = kmalloc_flex(*perm, pool_ns, pool_ns_len + 1, GFP_NOFS);
 	if (!perm) {
 		err = -ENOMEM;
 		goto out_unlock;
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 2f663972da99..5d7c2ffae8fa 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -2395,7 +2395,7 @@ static int flush_mdlog_and_wait_inode_unsafe_requests(struct inode *inode)
 		mutex_lock(&mdsc->mutex);
 		max_sessions = mdsc->max_sessions;

-		sessions = kcalloc(max_sessions, sizeof(s), GFP_KERNEL);
+		sessions = kzalloc_objs(s, max_sessions, GFP_KERNEL);
 		if (!sessions) {
 			mutex_unlock(&mdsc->mutex);
 			err = -ENOMEM;
diff --git a/fs/ceph/crypto.c b/fs/ceph/crypto.c
index 9a115282f67d..643c8ba28ae7 100644
--- a/fs/ceph/crypto.c
+++ b/fs/ceph/crypto.c
@@ -50,7 +50,7 @@ static int ceph_crypt_set_context(struct inode *inode, const void *ctx,
 	if (len > FSCRYPT_SET_CONTEXT_MAX_SIZE)
 		return -EINVAL;

-	cfa = kzalloc(sizeof(*cfa), GFP_KERNEL);
+	cfa = kzalloc_obj(*cfa, GFP_KERNEL);
 	if (!cfa)
 		return -ENOMEM;

@@ -112,7 +112,7 @@ int ceph_fscrypt_prepare_context(struct inode *dir, struct inode *inode,
 	if (!encrypted)
 		return 0;

-	as->fscrypt_auth = kzalloc(sizeof(*as->fscrypt_auth), GFP_KERNEL);
+	as->fscrypt_auth = kzalloc_obj(*as->fscrypt_auth, GFP_KERNEL);
 	if (!as->fscrypt_auth)
 		return -ENOMEM;

diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 72cc67ab4ead..fdbf4aeaa408 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -140,7 +140,7 @@ static ssize_t iter_get_bvecs_alloc(struct iov_iter *iter, size_t maxsize,
 	 * __iter_get_bvecs() may populate only part of the array -- zero it
 	 * out.
 	 */
-	bv = kvmalloc_array(npages, sizeof(*bv), GFP_KERNEL | __GFP_ZERO);
+	bv = kvmalloc_objs(*bv, npages, GFP_KERNEL | __GFP_ZERO);
 	if (!bv)
 		return -ENOMEM;

@@ -1344,7 +1344,7 @@ static void ceph_aio_complete_req(struct ceph_osd_request *req)
 		struct ceph_aio_work *aio_work;
 		BUG_ON(!aio_req->write);

-		aio_work = kmalloc(sizeof(*aio_work), GFP_NOFS);
+		aio_work = kmalloc_obj(*aio_work, GFP_NOFS);
 		if (aio_work) {
 			INIT_WORK(&aio_work->work, ceph_aio_retry_work);
 			aio_work->req = req;
@@ -1572,7 +1572,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
 		 */
 		if (pos == iocb->ki_pos && !is_sync_kiocb(iocb) &&
 		    (len == count || pos + count <= i_size_read(inode))) {
-			aio_req = kzalloc(sizeof(*aio_req), GFP_KERNEL);
+			aio_req = kzalloc_obj(*aio_req, GFP_KERNEL);
 			if (aio_req) {
 				aio_req->iocb = iocb;
 				aio_req->write = write;
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index 2966f88310e3..d76f9a79dc0c 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -321,7 +321,7 @@ static struct ceph_inode_frag *__get_or_create_frag(struct ceph_inode_info *ci,
 			return frag;
 	}

-	frag = kmalloc(sizeof(*frag), GFP_NOFS);
+	frag = kmalloc_obj(*frag, GFP_NOFS);
 	if (!frag)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index c45bd19d4b1c..8933f05f5144 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -973,7 +973,7 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
 	if (mds >= mdsc->mdsmap->possible_max_rank)
 		return ERR_PTR(-EINVAL);

-	s = kzalloc(sizeof(*s), GFP_NOFS);
+	s = kzalloc_obj(*s, GFP_NOFS);
 	if (!s)
 		return ERR_PTR(-ENOMEM);

@@ -4230,9 +4230,8 @@ static void handle_session(struct ceph_mds_session *session,
 			goto skip_cap_auths;
 		}

-		cap_auths = kcalloc(cap_auths_num,
-				    sizeof(struct ceph_mds_cap_auth),
-				    GFP_KERNEL);
+		cap_auths = kzalloc_objs(struct ceph_mds_cap_auth,
+					 cap_auths_num, GFP_KERNEL);
 		if (!cap_auths) {
 			pr_err_client(cl, "No memory for cap_auths\n");
 			return;
@@ -4731,9 +4730,9 @@ static int reconnect_caps_cb(struct inode *inode, int mds, void *arg)
 			num_flock_locks = 0;
 		}
 		if (num_fcntl_locks + num_flock_locks > 0) {
-			flocks = kmalloc_array(num_fcntl_locks + num_flock_locks,
-					       sizeof(struct ceph_filelock),
-					       GFP_NOFS);
+			flocks = kmalloc_objs(struct ceph_filelock,
+					      num_fcntl_locks + num_flock_locks,
+					      GFP_NOFS);
 			if (!flocks) {
 				err = -ENOMEM;
 				goto out_err;
@@ -5534,12 +5533,12 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc)
 	struct ceph_mds_client *mdsc;
 	int err;

-	mdsc = kzalloc(sizeof(struct ceph_mds_client), GFP_NOFS);
+	mdsc = kzalloc_obj(struct ceph_mds_client, GFP_NOFS);
 	if (!mdsc)
 		return -ENOMEM;
 	mdsc->fsc = fsc;
 	mutex_init(&mdsc->mutex);
-	mdsc->mdsmap = kzalloc(sizeof(*mdsc->mdsmap), GFP_NOFS);
+	mdsc->mdsmap = kzalloc_obj(*mdsc->mdsmap, GFP_NOFS);
 	if (!mdsc->mdsmap) {
 		err = -ENOMEM;
 		goto err_mdsc;
diff --git a/fs/ceph/mdsmap.c b/fs/ceph/mdsmap.c
index b228e5ecfb92..d8e46eb7e5eb 100644
--- a/fs/ceph/mdsmap.c
+++ b/fs/ceph/mdsmap.c
@@ -127,7 +127,7 @@ struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p,
 	u16 mdsmap_ev;
 	u32 target;

-	m = kzalloc(sizeof(*m), GFP_NOFS);
+	m = kzalloc_obj(*m, GFP_NOFS);
 	if (!m)
 		return ERR_PTR(-ENOMEM);

@@ -169,7 +169,7 @@ struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p,
 	 */
 	m->possible_max_rank = max(m->m_num_active_mds, m->m_max_mds);

-	m->m_info = kcalloc(m->possible_max_rank, sizeof(*m->m_info), GFP_NOFS);
+	m->m_info = kzalloc_objs(*m->m_info, m->possible_max_rank, GFP_NOFS);
 	if (!m->m_info)
 		goto nomem;

diff --git a/fs/ceph/quota.c b/fs/ceph/quota.c
index d90eda19bcc4..514da29469b8 100644
--- a/fs/ceph/quota.c
+++ b/fs/ceph/quota.c
@@ -103,7 +103,7 @@ find_quotarealm_inode(struct ceph_mds_client *mdsc, u64 ino)
 	}
 	if (!qri || (qri->ino != ino)) {
 		/* Not found, create a new one and insert it */
-		qri = kmalloc(sizeof(*qri), GFP_KERNEL);
+		qri = kmalloc_obj(*qri, GFP_KERNEL);
 		if (qri) {
 			qri->ino = ino;
 			qri->inode = NULL;
diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c
index 521507ea8260..52b4c2684f92 100644
--- a/fs/ceph/snap.c
+++ b/fs/ceph/snap.c
@@ -118,7 +118,7 @@ static struct ceph_snap_realm *ceph_create_snap_realm(

 	lockdep_assert_held_write(&mdsc->snap_rwsem);

-	realm = kzalloc(sizeof(*realm), GFP_NOFS);
+	realm = kzalloc_obj(*realm, GFP_NOFS);
 	if (!realm)
 		return ERR_PTR(-ENOMEM);

@@ -1216,7 +1216,7 @@ struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc,
 		return exist;
 	}

-	sm = kmalloc(sizeof(*sm), GFP_NOFS);
+	sm = kmalloc_obj(*sm, GFP_NOFS);
 	if (!sm)
 		return NULL;

diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index 7c1c1dac320d..57320e830eda 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -809,7 +809,7 @@ static struct ceph_fs_client *create_fs_client(struct ceph_mount_options *fsopt,
 	struct ceph_fs_client *fsc;
 	int err;

-	fsc = kzalloc(sizeof(*fsc), GFP_KERNEL);
+	fsc = kzalloc_obj(*fsc, GFP_KERNEL);
 	if (!fsc) {
 		err = -ENOMEM;
 		goto fail;
@@ -1429,7 +1429,7 @@ static int ceph_init_fs_context(struct fs_context *fc)
 	struct ceph_parse_opts_ctx *pctx;
 	struct ceph_mount_options *fsopt;

-	pctx = kzalloc(sizeof(*pctx), GFP_KERNEL);
+	pctx = kzalloc_obj(*pctx, GFP_KERNEL);
 	if (!pctx)
 		return -ENOMEM;

@@ -1437,7 +1437,7 @@ static int ceph_init_fs_context(struct fs_context *fc)
 	if (!pctx->copts)
 		goto nomem;

-	pctx->opts = kzalloc(sizeof(*pctx->opts), GFP_KERNEL);
+	pctx->opts = kzalloc_obj(*pctx->opts, GFP_KERNEL);
 	if (!pctx->opts)
 		goto nomem;

diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
index ad1f30bea175..5f87f62091a1 100644
--- a/fs/ceph/xattr.c
+++ b/fs/ceph/xattr.c
@@ -819,15 +819,15 @@ static int __build_xattrs(struct inode *inode)
 		xattr_version = ci->i_xattrs.version;
 		spin_unlock(&ci->i_ceph_lock);

-		xattrs = kcalloc(numattr, sizeof(struct ceph_inode_xattr *),
-				 GFP_NOFS);
+		xattrs = kzalloc_objs(struct ceph_inode_xattr *, numattr,
+				      GFP_NOFS);
 		err = -ENOMEM;
 		if (!xattrs)
 			goto bad_lock;

 		for (i = 0; i < numattr; i++) {
-			xattrs[i] = kmalloc(sizeof(struct ceph_inode_xattr),
-					    GFP_NOFS);
+			xattrs[i] = kmalloc_obj(struct ceph_inode_xattr,
+						GFP_NOFS);
 			if (!xattrs[i])
 				goto bad_lock;
 		}
@@ -1220,7 +1220,7 @@ int __ceph_setxattr(struct inode *inode, const char *name,
 			goto out;
 	}

-	xattr = kmalloc(sizeof(struct ceph_inode_xattr), GFP_NOFS);
+	xattr = kmalloc_obj(struct ceph_inode_xattr, GFP_NOFS);
 	if (!xattr)
 		goto out;

diff --git a/fs/char_dev.c b/fs/char_dev.c
index bf7b32650e54..49b2641bbe03 100644
--- a/fs/char_dev.c
+++ b/fs/char_dev.c
@@ -115,7 +115,7 @@ __register_chrdev_region(unsigned int major, unsigned int baseminor,
 		return ERR_PTR(-EINVAL);
 	}

-	cd = kzalloc(sizeof(struct char_device_struct), GFP_KERNEL);
+	cd = kzalloc_obj(struct char_device_struct, GFP_KERNEL);
 	if (cd == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -636,7 +636,7 @@ static struct kobj_type ktype_cdev_dynamic = {
  */
 struct cdev *cdev_alloc(void)
 {
-	struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL);
+	struct cdev *p = kzalloc_obj(struct cdev, GFP_KERNEL);
 	if (p) {
 		INIT_LIST_HEAD(&p->list);
 		kobject_init(&p->kobj, &ktype_cdev_dynamic);
diff --git a/fs/coda/dir.c b/fs/coda/dir.c
index ca9990017265..329cefb16fb5 100644
--- a/fs/coda/dir.c
+++ b/fs/coda/dir.c
@@ -362,7 +362,7 @@ static int coda_venus_readdir(struct file *coda_file, struct dir_context *ctx)

 	cii = ITOC(file_inode(coda_file));

-	vdir = kmalloc(sizeof(*vdir), GFP_KERNEL);
+	vdir = kmalloc_obj(*vdir, GFP_KERNEL);
 	if (!vdir) return -ENOMEM;

 	if (!dir_emit_dots(coda_file, ctx))
diff --git a/fs/coda/file.c b/fs/coda/file.c
index a390b5d21196..a40ba8d0b14b 100644
--- a/fs/coda/file.c
+++ b/fs/coda/file.c
@@ -175,7 +175,7 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
 	if (ret)
 		return ret;

-	cvm_ops = kmalloc(sizeof(struct coda_vm_ops), GFP_KERNEL);
+	cvm_ops = kmalloc_obj(struct coda_vm_ops, GFP_KERNEL);
 	if (!cvm_ops)
 		return -ENOMEM;

@@ -231,7 +231,7 @@ int coda_open(struct inode *coda_inode, struct file *coda_file)
 	unsigned short coda_flags = coda_flags_to_cflags(flags);
 	struct coda_file_info *cfi;

-	cfi = kmalloc(sizeof(struct coda_file_info), GFP_KERNEL);
+	cfi = kmalloc_obj(struct coda_file_info, GFP_KERNEL);
 	if (!cfi)
 		return -ENOMEM;

diff --git a/fs/coda/inode.c b/fs/coda/inode.c
index 08450d006016..d95ae651f528 100644
--- a/fs/coda/inode.c
+++ b/fs/coda/inode.c
@@ -381,7 +381,7 @@ static int coda_init_fs_context(struct fs_context *fc)
 {
 	struct coda_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct coda_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct coda_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c
index cd6a3721f6f6..0abde29b4f47 100644
--- a/fs/coda/upcall.c
+++ b/fs/coda/upcall.c
@@ -724,7 +724,7 @@ static int coda_upcall(struct venus_comm *vcp,
 	}

 	/* Format the request message. */
-	req = kmalloc(sizeof(struct upc_req), GFP_KERNEL);
+	req = kmalloc_obj(struct upc_req, GFP_KERNEL);
 	if (!req) {
 		error = -ENOMEM;
 		goto exit;
@@ -788,10 +788,10 @@ static int coda_upcall(struct venus_comm *vcp,
 	}

 	error = -ENOMEM;
-	sig_req = kmalloc(sizeof(struct upc_req), GFP_KERNEL);
+	sig_req = kmalloc_obj(struct upc_req, GFP_KERNEL);
 	if (!sig_req) goto exit;

-	sig_inputArgs = kvzalloc(sizeof(*sig_inputArgs), GFP_KERNEL);
+	sig_inputArgs = kvzalloc_obj(*sig_inputArgs, GFP_KERNEL);
 	if (!sig_inputArgs) {
 		kfree(sig_req);
 		goto exit;
diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
index ba95f636a5ab..f437b1ab3b68 100644
--- a/fs/configfs/dir.c
+++ b/fs/configfs/dir.c
@@ -159,7 +159,7 @@ static struct configfs_fragment *new_fragment(void)
 {
 	struct configfs_fragment *p;

-	p = kmalloc(sizeof(struct configfs_fragment), GFP_KERNEL);
+	p = kmalloc_obj(struct configfs_fragment, GFP_KERNEL);
 	if (p) {
 		atomic_set(&p->frag_count, 1);
 		init_rwsem(&p->frag_sem);
@@ -1847,7 +1847,7 @@ configfs_register_default_group(struct config_group *parent_group,
 	int ret;
 	struct config_group *group;

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);
 	if (!group)
 		return ERR_PTR(-ENOMEM);
 	config_group_init_type_name(group, name, item_type);
diff --git a/fs/configfs/file.c b/fs/configfs/file.c
index affe4742bbb5..a83d1981e96f 100644
--- a/fs/configfs/file.c
+++ b/fs/configfs/file.c
@@ -296,7 +296,7 @@ static int __configfs_open_file(struct inode *inode, struct file *file, int type
 	int error;

 	error = -ENOMEM;
-	buffer = kzalloc(sizeof(struct configfs_buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(struct configfs_buffer, GFP_KERNEL);
 	if (!buffer)
 		goto out;

diff --git a/fs/configfs/inode.c b/fs/configfs/inode.c
index bcda3372e141..e7d8500fee7d 100644
--- a/fs/configfs/inode.c
+++ b/fs/configfs/inode.c
@@ -47,7 +47,7 @@ int configfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
 	sd_iattr = sd->s_iattr;
 	if (!sd_iattr) {
 		/* setting attributes for the first time, allocate now */
-		sd_iattr = kzalloc(sizeof(struct iattr), GFP_KERNEL);
+		sd_iattr = kzalloc_obj(struct iattr, GFP_KERNEL);
 		if (!sd_iattr)
 			return -ENOMEM;
 		/* assign default attributes */
diff --git a/fs/coredump.c b/fs/coredump.c
index 4ce7c80b39c8..c5b81cacbabb 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -262,7 +262,7 @@ static bool coredump_parse(struct core_name *cn, struct coredump_params *cprm,
 	switch (cn->core_type) {
 	case COREDUMP_PIPE: {
 		int argvs = sizeof(core_pattern) / 2;
-		(*argv) = kmalloc_array(argvs, sizeof(**argv), GFP_KERNEL);
+		(*argv) = kmalloc_objs(**argv, argvs, GFP_KERNEL);
 		if (!(*argv))
 			return false;
 		(*argv)[(*argc)++] = 0;
@@ -1736,7 +1736,8 @@ static bool dump_vma_snapshot(struct coredump_params *cprm)
 	gate_vma = get_gate_vma(mm);
 	cprm->vma_count = mm->map_count + (gate_vma ? 1 : 0);

-	cprm->vma_meta = kvmalloc_array(cprm->vma_count, sizeof(*cprm->vma_meta), GFP_KERNEL);
+	cprm->vma_meta = kvmalloc_objs(*cprm->vma_meta, cprm->vma_count,
+				       GFP_KERNEL);
 	if (!cprm->vma_meta) {
 		mmap_write_unlock(mm);
 		return false;
diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
index 41b1a869cf13..10403cb81182 100644
--- a/fs/cramfs/inode.c
+++ b/fs/cramfs/inode.c
@@ -619,7 +619,7 @@ static int cramfs_blkdev_fill_super(struct super_block *sb, struct fs_context *f
 	struct cramfs_super super;
 	int i, err;

-	sbi = kzalloc(sizeof(struct cramfs_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct cramfs_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;
 	sb->s_fs_info = sbi;
@@ -640,7 +640,7 @@ static int cramfs_mtd_fill_super(struct super_block *sb, struct fs_context *fc)
 	struct cramfs_super super;
 	int err;

-	sbi = kzalloc(sizeof(struct cramfs_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct cramfs_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;
 	sb->s_fs_info = sbi;
diff --git a/fs/crypto/inline_crypt.c b/fs/crypto/inline_crypt.c
index ed6e926226b5..e286d9fd17f3 100644
--- a/fs/crypto/inline_crypt.c
+++ b/fs/crypto/inline_crypt.c
@@ -32,7 +32,7 @@ static struct block_device **fscrypt_get_devices(struct super_block *sb,
 		if (devs)
 			return devs;
 	}
-	devs = kmalloc(sizeof(*devs), GFP_KERNEL);
+	devs = kmalloc_obj(*devs, GFP_KERNEL);
 	if (!devs)
 		return ERR_PTR(-ENOMEM);
 	devs[0] = sb->s_bdev;
@@ -169,7 +169,7 @@ int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key,
 	unsigned int i;
 	int err;

-	blk_key = kmalloc(sizeof(*blk_key), GFP_KERNEL);
+	blk_key = kmalloc_obj(*blk_key, GFP_KERNEL);
 	if (!blk_key)
 		return -ENOMEM;

diff --git a/fs/crypto/keyring.c b/fs/crypto/keyring.c
index 5e939ea3ac28..855314a28b18 100644
--- a/fs/crypto/keyring.c
+++ b/fs/crypto/keyring.c
@@ -209,7 +209,7 @@ static int allocate_filesystem_keyring(struct super_block *sb)
 	if (sb->s_master_keys)
 		return 0;

-	keyring = kzalloc(sizeof(*keyring), GFP_KERNEL);
+	keyring = kzalloc_obj(*keyring, GFP_KERNEL);
 	if (!keyring)
 		return -ENOMEM;
 	spin_lock_init(&keyring->lock);
@@ -434,7 +434,7 @@ static int add_new_master_key(struct super_block *sb,
 	struct fscrypt_master_key *mk;
 	int err;

-	mk = kzalloc(sizeof(*mk), GFP_KERNEL);
+	mk = kzalloc_obj(*mk, GFP_KERNEL);
 	if (!mk)
 		return -ENOMEM;

diff --git a/fs/crypto/keysetup_v1.c b/fs/crypto/keysetup_v1.c
index c4d05168522b..93fc2ab7ee97 100644
--- a/fs/crypto/keysetup_v1.c
+++ b/fs/crypto/keysetup_v1.c
@@ -221,7 +221,7 @@ fscrypt_get_direct_key(const struct fscrypt_inode_info *ci, const u8 *raw_key)
 		return dk;

 	/* Nope, allocate one. */
-	dk = kzalloc(sizeof(*dk), GFP_KERNEL);
+	dk = kzalloc_obj(*dk, GFP_KERNEL);
 	if (!dk)
 		return ERR_PTR(-ENOMEM);
 	dk->dk_sb = ci->ci_inode->i_sb;
diff --git a/fs/crypto/policy.c b/fs/crypto/policy.c
index bbb2f5ced988..49309e9da4ea 100644
--- a/fs/crypto/policy.c
+++ b/fs/crypto/policy.c
@@ -813,7 +813,7 @@ int fscrypt_parse_test_dummy_encryption(const struct fs_parameter *param,
 	if (param->type == fs_value_is_string && *param->string)
 		arg = param->string;

-	policy = kzalloc(sizeof(*policy), GFP_KERNEL);
+	policy = kzalloc_obj(*policy, GFP_KERNEL);
 	if (!policy)
 		return -ENOMEM;

diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c
index 3ec3324c2060..70b8dcd3599d 100644
--- a/fs/debugfs/file.c
+++ b/fs/debugfs/file.c
@@ -82,7 +82,7 @@ static int __debugfs_file_get(struct dentry *dentry, enum dbgfs_get_mode mode)
 		if (WARN_ON(mode == DBGFS_GET_ALREADY))
 			return -EINVAL;

-		fsd = kmalloc(sizeof(*fsd), GFP_KERNEL);
+		fsd = kmalloc_obj(*fsd, GFP_KERNEL);
 		if (!fsd)
 			return -ENOMEM;

diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
index 4005d21cf009..a9e161f6fb7d 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
@@ -310,7 +310,7 @@ static int debugfs_init_fs_context(struct fs_context *fc)
 {
 	struct debugfs_fs_info *fsi;

-	fsi = kzalloc(sizeof(struct debugfs_fs_info), GFP_KERNEL);
+	fsi = kzalloc_obj(struct debugfs_fs_info, GFP_KERNEL);
 	if (!fsi)
 		return -ENOMEM;

diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c
index 9f3de528c358..93af356408ee 100644
--- a/fs/devpts/inode.c
+++ b/fs/devpts/inode.c
@@ -420,7 +420,7 @@ static int devpts_init_fs_context(struct fs_context *fc)
 {
 	struct pts_fs_info *fsi;

-	fsi = kzalloc(sizeof(struct pts_fs_info), GFP_KERNEL);
+	fsi = kzalloc_obj(struct pts_fs_info, GFP_KERNEL);
 	if (!fsi)
 		return -ENOMEM;

diff --git a/fs/dlm/config.c b/fs/dlm/config.c
index 82cc3215663f..0f80fda98227 100644
--- a/fs/dlm/config.c
+++ b/fs/dlm/config.c
@@ -426,9 +426,9 @@ static struct config_group *make_cluster(struct config_group *g,
 	struct dlm_spaces *sps = NULL;
 	struct dlm_comms *cms = NULL;

-	cl = kzalloc(sizeof(struct dlm_cluster), GFP_NOFS);
-	sps = kzalloc(sizeof(struct dlm_spaces), GFP_NOFS);
-	cms = kzalloc(sizeof(struct dlm_comms), GFP_NOFS);
+	cl = kzalloc_obj(struct dlm_cluster, GFP_NOFS);
+	sps = kzalloc_obj(struct dlm_spaces, GFP_NOFS);
+	cms = kzalloc_obj(struct dlm_comms, GFP_NOFS);

 	if (!cl || !sps || !cms)
 		goto fail;
@@ -480,8 +480,8 @@ static struct config_group *make_space(struct config_group *g, const char *name)
 	struct dlm_space *sp = NULL;
 	struct dlm_nodes *nds = NULL;

-	sp = kzalloc(sizeof(struct dlm_space), GFP_NOFS);
-	nds = kzalloc(sizeof(struct dlm_nodes), GFP_NOFS);
+	sp = kzalloc_obj(struct dlm_space, GFP_NOFS);
+	nds = kzalloc_obj(struct dlm_nodes, GFP_NOFS);

 	if (!sp || !nds)
 		goto fail;
@@ -531,7 +531,7 @@ static struct config_item *make_comm(struct config_group *g, const char *name)
 	if (rv)
 		return ERR_PTR(rv);

-	cm = kzalloc(sizeof(struct dlm_comm), GFP_NOFS);
+	cm = kzalloc_obj(struct dlm_comm, GFP_NOFS);
 	if (!cm)
 		return ERR_PTR(-ENOMEM);

@@ -577,7 +577,7 @@ static struct config_item *make_node(struct config_group *g, const char *name)
 	if (rv)
 		return ERR_PTR(rv);

-	nd = kzalloc(sizeof(struct dlm_node), GFP_NOFS);
+	nd = kzalloc_obj(struct dlm_node, GFP_NOFS);
 	if (!nd)
 		return ERR_PTR(-ENOMEM);

@@ -602,7 +602,7 @@ static void drop_node(struct config_group *g, struct config_item *i)
 	struct dlm_node *nd = config_item_to_node(i);
 	struct dlm_member_gone *mb_gone;

-	mb_gone = kzalloc(sizeof(*mb_gone), GFP_KERNEL);
+	mb_gone = kzalloc_obj(*mb_gone, GFP_KERNEL);
 	if (!mb_gone)
 		return;

@@ -701,7 +701,7 @@ static ssize_t comm_addr_store(struct config_item *item, const char *buf,
 	if (cm->addr_count >= DLM_MAX_ADDR_COUNT)
 		return -ENOSPC;

-	addr = kzalloc(sizeof(*addr), GFP_NOFS);
+	addr = kzalloc_obj(*addr, GFP_NOFS);
 	if (!addr)
 		return -ENOMEM;

@@ -946,7 +946,7 @@ int dlm_config_nodes(char *lsname, struct dlm_config_node **nodes_out,

 	count = sp->members_count + sp->members_gone_count;

-	nodes = kcalloc(count, sizeof(struct dlm_config_node), GFP_NOFS);
+	nodes = kzalloc_objs(struct dlm_config_node, count, GFP_NOFS);
 	if (!nodes) {
 		rv = -ENOMEM;
 		goto out;
diff --git a/fs/dlm/dir.c b/fs/dlm/dir.c
index 01c292379f5b..aa08e8f446a1 100644
--- a/fs/dlm/dir.c
+++ b/fs/dlm/dir.c
@@ -276,7 +276,7 @@ static struct dlm_dir_dump *init_dir_dump(struct dlm_ls *ls, int nodeid)
 		drop_dir_ctx(ls, nodeid);
 	}

-	dd = kzalloc(sizeof(*dd), GFP_ATOMIC);
+	dd = kzalloc_obj(*dd, GFP_ATOMIC);
 	if (!dd)
 		return NULL;

diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
index 47a09d6748cb..3b6e6a29eab8 100644
--- a/fs/dlm/lock.c
+++ b/fs/dlm/lock.c
@@ -5050,7 +5050,7 @@ void dlm_recover_waiters_pre(struct dlm_ls *ls)
 	int wait_type, local_unlock_result, local_cancel_result;
 	int dir_nodeid;

-	ms_local = kmalloc(sizeof(*ms_local), GFP_KERNEL);
+	ms_local = kmalloc_obj(*ms_local, GFP_KERNEL);
 	if (!ms_local)
 		return;

@@ -6288,7 +6288,7 @@ int dlm_debug_add_lkb(struct dlm_ls *ls, uint32_t lkb_id, char *name, int len,
 	if (lkb_dflags & BIT(DLM_DFL_USER_BIT))
 		return -EOPNOTSUPP;

-	lksb = kzalloc(sizeof(*lksb), GFP_NOFS);
+	lksb = kzalloc_obj(*lksb, GFP_NOFS);
 	if (!lksb)
 		return -ENOMEM;

diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c
index ddaa76558706..a9c98b4f378f 100644
--- a/fs/dlm/lockspace.c
+++ b/fs/dlm/lockspace.c
@@ -427,7 +427,7 @@ static int new_lockspace(const char *name, const char *cluster,

 	error = -ENOMEM;

-	ls = kzalloc(sizeof(*ls), GFP_NOFS);
+	ls = kzalloc_obj(*ls, GFP_NOFS);
 	if (!ls)
 		goto out;
 	memcpy(ls->ls_name, name, namelen);
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
index b3958008ba3f..5b6142787919 100644
--- a/fs/dlm/lowcomms.c
+++ b/fs/dlm/lowcomms.c
@@ -305,7 +305,7 @@ static struct connection *nodeid2con(int nodeid, gfp_t alloc)
 	if (con || !alloc)
 		return con;

-	con = kzalloc(sizeof(*con), alloc);
+	con = kzalloc_obj(*con, alloc);
 	if (!con)
 		return NULL;

@@ -838,7 +838,7 @@ static struct processqueue_entry *new_processqueue_entry(int nodeid,
 {
 	struct processqueue_entry *pentry;

-	pentry = kmalloc(sizeof(*pentry), GFP_NOFS);
+	pentry = kmalloc_obj(*pentry, GFP_NOFS);
 	if (!pentry)
 		return NULL;

@@ -1052,7 +1052,7 @@ static int accept_from_sock(void)
 		struct connection *othercon = newcon->othercon;

 		if (!othercon) {
-			othercon = kzalloc(sizeof(*othercon), GFP_NOFS);
+			othercon = kzalloc_obj(*othercon, GFP_NOFS);
 			if (!othercon) {
 				log_print("failed to allocate incoming socket");
 				up_write(&newcon->sock_lock);
diff --git a/fs/dlm/member.c b/fs/dlm/member.c
index c1b5598997b7..812d889f1ce5 100644
--- a/fs/dlm/member.c
+++ b/fs/dlm/member.c
@@ -211,7 +211,7 @@ int dlm_slots_assign(struct dlm_ls *ls, int *num_slots, int *slots_size,
 	}

 	array_size = max + need;
-	array = kcalloc(array_size, sizeof(*array), GFP_NOFS);
+	array = kzalloc_objs(*array, array_size, GFP_NOFS);
 	if (!array)
 		return -ENOMEM;

@@ -323,7 +323,7 @@ static int dlm_add_member(struct dlm_ls *ls, struct dlm_config_node *node)
 	struct dlm_member *memb;
 	int error;

-	memb = kzalloc(sizeof(*memb), GFP_NOFS);
+	memb = kzalloc_obj(*memb, GFP_NOFS);
 	if (!memb)
 		return -ENOMEM;

@@ -423,7 +423,7 @@ static void make_member_array(struct dlm_ls *ls)
 	}

 	ls->ls_total_weight = total;
-	array = kmalloc_array(total, sizeof(*array), GFP_NOFS);
+	array = kmalloc_objs(*array, total, GFP_NOFS);
 	if (!array)
 		return;

@@ -511,7 +511,7 @@ void dlm_lsop_recover_done(struct dlm_ls *ls)
 		return;

 	num = ls->ls_num_nodes;
-	slots = kcalloc(num, sizeof(*slots), GFP_KERNEL);
+	slots = kzalloc_objs(*slots, num, GFP_KERNEL);
 	if (!slots)
 		return;

@@ -726,7 +726,7 @@ int dlm_ls_start(struct dlm_ls *ls)
 	struct dlm_config_node *nodes = NULL;
 	int error, count;

-	rv = kzalloc(sizeof(*rv), GFP_NOFS);
+	rv = kzalloc_obj(*rv, GFP_NOFS);
 	if (!rv)
 		return -ENOMEM;

diff --git a/fs/dlm/midcomms.c b/fs/dlm/midcomms.c
index 2c101bbe261a..d54bdd8fc4f2 100644
--- a/fs/dlm/midcomms.c
+++ b/fs/dlm/midcomms.c
@@ -351,7 +351,7 @@ int dlm_midcomms_addr(int nodeid, struct sockaddr_storage *addr)
 	}
 	srcu_read_unlock(&nodes_srcu, idx);

-	node = kmalloc(sizeof(*node), GFP_NOFS);
+	node = kmalloc_obj(*node, GFP_NOFS);
 	if (!node)
 		return -ENOMEM;

diff --git a/fs/dlm/plock.c b/fs/dlm/plock.c
index 9ca83ef70ed1..e9598b3fe5d0 100644
--- a/fs/dlm/plock.c
+++ b/fs/dlm/plock.c
@@ -102,7 +102,7 @@ static int do_lock_cancel(const struct dlm_plock_info *orig_info)
 	struct plock_op *op;
 	int rv;

-	op = kzalloc(sizeof(*op), GFP_NOFS);
+	op = kzalloc_obj(*op, GFP_NOFS);
 	if (!op)
 		return -ENOMEM;

@@ -131,7 +131,7 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
 	if (!ls)
 		return -EINVAL;

-	op = kzalloc(sizeof(*op), GFP_NOFS);
+	op = kzalloc_obj(*op, GFP_NOFS);
 	if (!op) {
 		rv = -ENOMEM;
 		goto out;
@@ -148,7 +148,7 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
 	op->info.owner = (__u64)(long) fl->c.flc_owner;
 	/* async handling */
 	if (fl->fl_lmops && fl->fl_lmops->lm_grant) {
-		op_data = kzalloc(sizeof(*op_data), GFP_NOFS);
+		op_data = kzalloc_obj(*op_data, GFP_NOFS);
 		if (!op_data) {
 			dlm_release_plock_op(op);
 			rv = -ENOMEM;
@@ -297,7 +297,7 @@ int dlm_posix_unlock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
 	if (!ls)
 		return -EINVAL;

-	op = kzalloc(sizeof(*op), GFP_NOFS);
+	op = kzalloc_obj(*op, GFP_NOFS);
 	if (!op) {
 		rv = -ENOMEM;
 		goto out;
@@ -430,7 +430,7 @@ int dlm_posix_get(dlm_lockspace_t *lockspace, u64 number, struct file *file,
 	if (!ls)
 		return -EINVAL;

-	op = kzalloc(sizeof(*op), GFP_NOFS);
+	op = kzalloc_obj(*op, GFP_NOFS);
 	if (!op) {
 		rv = -ENOMEM;
 		goto out;
diff --git a/fs/dlm/user.c b/fs/dlm/user.c
index 51daf4acbe31..a8ed4c8fdc5b 100644
--- a/fs/dlm/user.c
+++ b/fs/dlm/user.c
@@ -262,7 +262,7 @@ static int device_user_lock(struct dlm_user_proc *proc,
 		goto out;
 	}

-	ua = kzalloc(sizeof(struct dlm_user_args), GFP_NOFS);
+	ua = kzalloc_obj(struct dlm_user_args, GFP_NOFS);
 	if (!ua)
 		goto out;
 	ua->proc = proc;
@@ -307,7 +307,7 @@ static int device_user_unlock(struct dlm_user_proc *proc,
 	if (!ls)
 		return -ENOENT;

-	ua = kzalloc(sizeof(struct dlm_user_args), GFP_NOFS);
+	ua = kzalloc_obj(struct dlm_user_args, GFP_NOFS);
 	if (!ua)
 		goto out;
 	ua->proc = proc;
@@ -645,7 +645,7 @@ static int device_open(struct inode *inode, struct file *file)
 	if (!ls)
 		return -ENOENT;

-	proc = kzalloc(sizeof(struct dlm_user_proc), GFP_NOFS);
+	proc = kzalloc_obj(struct dlm_user_proc, GFP_NOFS);
 	if (!proc) {
 		dlm_put_lockspace(ls);
 		return -ENOMEM;
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
index 5459f18b3cca..6ada136f3f3f 100644
--- a/fs/ecryptfs/crypto.c
+++ b/fs/ecryptfs/crypto.c
@@ -1793,7 +1793,7 @@ int ecryptfs_encrypt_and_encode_filename(
 				     & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES)) {
 		struct ecryptfs_filename *filename;

-		filename = kzalloc(sizeof(*filename), GFP_KERNEL);
+		filename = kzalloc_obj(*filename, GFP_KERNEL);
 		if (!filename) {
 			rc = -ENOMEM;
 			goto out;
diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c
index a41c82d610a7..04b6d296a3fa 100644
--- a/fs/ecryptfs/keystore.c
+++ b/fs/ecryptfs/keystore.c
@@ -623,7 +623,7 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes,
 	struct key *auth_tok_key = NULL;
 	int rc = 0;

-	s = kzalloc(sizeof(*s), GFP_KERNEL);
+	s = kzalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

@@ -860,7 +860,7 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size,
 	(*packet_size) = 0;
 	(*filename_size) = 0;
 	(*filename) = NULL;
-	s = kzalloc(sizeof(*s), GFP_KERNEL);
+	s = kzalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c
index 7d51e6b60f53..dcfa607fbf15 100644
--- a/fs/ecryptfs/main.c
+++ b/fs/ecryptfs/main.c
@@ -610,7 +610,7 @@ static int ecryptfs_init_fs_context(struct fs_context *fc)
 	struct ecryptfs_fs_context *ctx;
 	struct ecryptfs_sb_info *sbi = NULL;

-	ctx = kzalloc(sizeof(struct ecryptfs_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct ecryptfs_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	sbi = kmem_cache_zalloc(ecryptfs_sb_info_cache, GFP_KERNEL);
diff --git a/fs/ecryptfs/messaging.c b/fs/ecryptfs/messaging.c
index 6318f3500e5c..6cf3052e9370 100644
--- a/fs/ecryptfs/messaging.c
+++ b/fs/ecryptfs/messaging.c
@@ -131,7 +131,7 @@ ecryptfs_spawn_daemon(struct ecryptfs_daemon **daemon, struct file *file)
 {
 	int rc = 0;

-	(*daemon) = kzalloc(sizeof(**daemon), GFP_KERNEL);
+	(*daemon) = kzalloc_obj(**daemon, GFP_KERNEL);
 	if (!(*daemon)) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
index 9da992925920..14c2752831c8 100644
--- a/fs/efivarfs/super.c
+++ b/fs/efivarfs/super.c
@@ -44,7 +44,7 @@ static int efivarfs_ops_notifier(struct notifier_block *nb, unsigned long event,

 static struct inode *efivarfs_alloc_inode(struct super_block *sb)
 {
-	struct efivar_entry *entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	struct efivar_entry *entry = kzalloc_obj(*entry, GFP_KERNEL);

 	if (!entry)
 		return NULL;
@@ -505,7 +505,7 @@ static int efivarfs_init_fs_context(struct fs_context *fc)
 	if (!efivar_is_available())
 		return -EOPNOTSUPP;

-	sfi = kzalloc(sizeof(*sfi), GFP_KERNEL);
+	sfi = kzalloc_obj(*sfi, GFP_KERNEL);
 	if (!sfi)
 		return -ENOMEM;

diff --git a/fs/efs/super.c b/fs/efs/super.c
index c59086b7eabf..54252bccd6a3 100644
--- a/fs/efs/super.c
+++ b/fs/efs/super.c
@@ -243,7 +243,7 @@ static int efs_fill_super(struct super_block *s, struct fs_context *fc)
 	struct buffer_head *bh;
 	struct inode *root;

-	sb = kzalloc(sizeof(struct efs_sb_info), GFP_KERNEL);
+	sb = kzalloc_obj(struct efs_sb_info, GFP_KERNEL);
 	if (!sb)
 		return -ENOMEM;
 	s->s_fs_info = sb;
diff --git a/fs/erofs/decompressor_deflate.c b/fs/erofs/decompressor_deflate.c
index 4f26ab767645..787eb8fc6262 100644
--- a/fs/erofs/decompressor_deflate.c
+++ b/fs/erofs/decompressor_deflate.c
@@ -71,7 +71,7 @@ static int z_erofs_load_deflate_config(struct super_block *sb,
 		     ++z_erofs_deflate_avail_strms) {
 			struct z_erofs_deflate *strm;

-			strm = kzalloc(sizeof(*strm), GFP_KERNEL);
+			strm = kzalloc_obj(*strm, GFP_KERNEL);
 			if (!strm)
 				goto failed;
 			/* XXX: in-kernel zlib cannot customize windowbits */
diff --git a/fs/erofs/decompressor_lzma.c b/fs/erofs/decompressor_lzma.c
index b4ea6978faae..c1c908d7b6ef 100644
--- a/fs/erofs/decompressor_lzma.c
+++ b/fs/erofs/decompressor_lzma.c
@@ -54,7 +54,7 @@ static int __init z_erofs_lzma_init(void)
 		z_erofs_lzma_nstrms = num_possible_cpus();

 	for (i = 0; i < z_erofs_lzma_nstrms; ++i) {
-		struct z_erofs_lzma *strm = kzalloc(sizeof(*strm), GFP_KERNEL);
+		struct z_erofs_lzma *strm = kzalloc_obj(*strm, GFP_KERNEL);

 		if (!strm) {
 			z_erofs_lzma_exit();
diff --git a/fs/erofs/decompressor_zstd.c b/fs/erofs/decompressor_zstd.c
index beae49165c69..6da93f74431b 100644
--- a/fs/erofs/decompressor_zstd.c
+++ b/fs/erofs/decompressor_zstd.c
@@ -59,7 +59,7 @@ static int __init z_erofs_zstd_init(void)
 	     ++z_erofs_zstd_avail_strms) {
 		struct z_erofs_zstd *strm;

-		strm = kzalloc(sizeof(*strm), GFP_KERNEL);
+		strm = kzalloc_obj(*strm, GFP_KERNEL);
 		if (!strm) {
 			z_erofs_zstd_exit();
 			return -ENOMEM;
diff --git a/fs/erofs/fileio.c b/fs/erofs/fileio.c
index 4d5054dcac95..abe873f01297 100644
--- a/fs/erofs/fileio.c
+++ b/fs/erofs/fileio.c
@@ -68,8 +68,7 @@ static void erofs_fileio_rq_submit(struct erofs_fileio_rq *rq)

 static struct erofs_fileio_rq *erofs_fileio_rq_alloc(struct erofs_map_dev *mdev)
 {
-	struct erofs_fileio_rq *rq = kzalloc(sizeof(*rq),
-					     GFP_KERNEL | __GFP_NOFAIL);
+	struct erofs_fileio_rq *rq = kzalloc_obj(*rq, GFP_KERNEL | __GFP_NOFAIL);

 	bio_init(&rq->bio, NULL, rq->bvecs, ARRAY_SIZE(rq->bvecs), REQ_OP_READ);
 	rq->iocb.ki_filp = mdev->m_dif->file;
diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c
index a2cc0f3fa9d0..0a231063b341 100644
--- a/fs/erofs/fscache.c
+++ b/fs/erofs/fscache.c
@@ -70,7 +70,7 @@ static void erofs_fscache_req_put(struct erofs_fscache_rq *req)
 static struct erofs_fscache_rq *erofs_fscache_req_alloc(struct address_space *mapping,
 						loff_t start, size_t len)
 {
-	struct erofs_fscache_rq *req = kzalloc(sizeof(*req), GFP_KERNEL);
+	struct erofs_fscache_rq *req = kzalloc_obj(*req, GFP_KERNEL);

 	if (!req)
 		return NULL;
@@ -101,7 +101,7 @@ static void erofs_fscache_req_end_io(void *priv, ssize_t transferred_or_error)

 static struct erofs_fscache_io *erofs_fscache_req_io_alloc(struct erofs_fscache_rq *req)
 {
-	struct erofs_fscache_io *io = kzalloc(sizeof(*io), GFP_KERNEL);
+	struct erofs_fscache_io *io = kzalloc_obj(*io, GFP_KERNEL);

 	if (!io)
 		return NULL;
@@ -181,7 +181,7 @@ struct bio *erofs_fscache_bio_alloc(struct erofs_map_dev *mdev)
 {
 	struct erofs_fscache_bio *io;

-	io = kmalloc(sizeof(*io), GFP_KERNEL | __GFP_NOFAIL);
+	io = kmalloc_obj(*io, GFP_KERNEL | __GFP_NOFAIL);
 	bio_init(&io->bio, NULL, io->bvecs, BIO_MAX_VECS, REQ_OP_READ);
 	io->io.private = mdev->m_dif->fscache->cookie;
 	io->io.end_io = erofs_fscache_bio_endio;
@@ -417,7 +417,7 @@ static int erofs_fscache_init_domain(struct super_block *sb)
 	struct erofs_domain *domain;
 	struct erofs_sb_info *sbi = EROFS_SB(sb);

-	domain = kzalloc(sizeof(struct erofs_domain), GFP_KERNEL);
+	domain = kzalloc_obj(struct erofs_domain, GFP_KERNEL);
 	if (!domain)
 		return -ENOMEM;

@@ -482,7 +482,7 @@ static struct erofs_fscache *erofs_fscache_acquire_cookie(struct super_block *sb
 	struct inode *inode;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&ctx->node);
diff --git a/fs/erofs/super.c b/fs/erofs/super.c
index 7827e61424b7..a333456c7d5d 100644
--- a/fs/erofs/super.c
+++ b/fs/erofs/super.c
@@ -226,7 +226,7 @@ static int erofs_scan_devices(struct super_block *sb,
 		}
 	} else {
 		for (id = 0; id < ondisk_extradevs; id++) {
-			dif = kzalloc(sizeof(*dif), GFP_KERNEL);
+			dif = kzalloc_obj(*dif, GFP_KERNEL);
 			if (!dif) {
 				err = -ENOMEM;
 				break;
@@ -495,7 +495,7 @@ static int erofs_fc_parse_param(struct fs_context *fc,
 			return -EINVAL;
 		break;
 	case Opt_device:
-		dif = kzalloc(sizeof(*dif), GFP_KERNEL);
+		dif = kzalloc_obj(*dif, GFP_KERNEL);
 		if (!dif)
 			return -ENOMEM;
 		dif->path = kstrdup(param->string, GFP_KERNEL);
@@ -903,11 +903,11 @@ static int erofs_init_fs_context(struct fs_context *fc)
 {
 	struct erofs_sb_info *sbi;

-	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
+	sbi = kzalloc_obj(*sbi, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

-	sbi->devs = kzalloc(sizeof(struct erofs_dev_context), GFP_KERNEL);
+	sbi->devs = kzalloc_obj(struct erofs_dev_context, GFP_KERNEL);
 	if (!sbi->devs) {
 		kfree(sbi);
 		return -ENOMEM;
diff --git a/fs/erofs/xattr.c b/fs/erofs/xattr.c
index b7da1ed83160..5997a7ae19d9 100644
--- a/fs/erofs/xattr.c
+++ b/fs/erofs/xattr.c
@@ -85,8 +85,8 @@ static int erofs_init_inode_xattrs(struct inode *inode)
 	}
 	vi->xattr_name_filter = le32_to_cpu(ih->h_name_filter);
 	vi->xattr_shared_count = ih->h_shared_count;
-	vi->xattr_shared_xattrs = kmalloc_array(vi->xattr_shared_count,
-						sizeof(uint), GFP_KERNEL);
+	vi->xattr_shared_xattrs = kmalloc_objs(uint, vi->xattr_shared_count,
+					       GFP_KERNEL);
 	if (!vi->xattr_shared_xattrs) {
 		erofs_put_metabuf(&buf);
 		ret = -ENOMEM;
@@ -498,7 +498,7 @@ int erofs_xattr_prefixes_init(struct super_block *sb)
 	if (!sbi->xattr_prefix_count)
 		return 0;

-	pfs = kcalloc(sbi->xattr_prefix_count, sizeof(*pfs), GFP_KERNEL);
+	pfs = kzalloc_objs(*pfs, sbi->xattr_prefix_count, GFP_KERNEL);
 	if (!pfs)
 		return -ENOMEM;

diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index ea9d32e9cb12..3977e42b9516 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -323,8 +323,8 @@ static int erofs_init_percpu_workers(void)
 	struct kthread_worker *worker;
 	unsigned int cpu;

-	z_erofs_pcpu_workers = kcalloc(num_possible_cpus(),
-			sizeof(struct kthread_worker *), GFP_ATOMIC);
+	z_erofs_pcpu_workers = kzalloc_objs(struct kthread_worker *,
+					    num_possible_cpus(), GFP_ATOMIC);
 	if (!z_erofs_pcpu_workers)
 		return -ENOMEM;

@@ -1144,7 +1144,7 @@ static void z_erofs_do_decompressed_bvec(struct z_erofs_backend *be,
 	}

 	/* (cold path) one pcluster is requested multiple times */
-	item = kmalloc(sizeof(*item), GFP_KERNEL | __GFP_NOFAIL);
+	item = kmalloc_obj(*item, GFP_KERNEL | __GFP_NOFAIL);
 	item->bvec = *bvec;
 	list_add(&item->list, &be->decompressed_secondary_bvecs);
 }
@@ -1282,12 +1282,12 @@ static int z_erofs_decompress_pcluster(struct z_erofs_backend *be, bool eio)

 	if (!be->decompressed_pages)
 		be->decompressed_pages =
-			kvcalloc(be->nr_pages, sizeof(struct page *),
-				 GFP_KERNEL | __GFP_NOFAIL);
+			kvzalloc_objs(struct page *, be->nr_pages,
+				      GFP_KERNEL | __GFP_NOFAIL);
 	if (!be->compressed_pages)
 		be->compressed_pages =
-			kvcalloc(pclusterpages, sizeof(struct page *),
-				 GFP_KERNEL | __GFP_NOFAIL);
+			kvzalloc_objs(struct page *, pclusterpages,
+				      GFP_KERNEL | __GFP_NOFAIL);

 	z_erofs_parse_out_bvecs(be);
 	err2 = z_erofs_parse_in_bvecs(be, &overlapped);
@@ -1590,7 +1590,7 @@ static struct z_erofs_decompressqueue *jobqueue_init(struct super_block *sb,
 	struct z_erofs_decompressqueue *q;

 	if (fg && !*fg) {
-		q = kvzalloc(sizeof(*q), GFP_KERNEL | __GFP_NOWARN);
+		q = kvzalloc_obj(*q, GFP_KERNEL | __GFP_NOWARN);
 		if (!q) {
 			*fg = true;
 			goto fg_out;
diff --git a/fs/erofs/zutil.c b/fs/erofs/zutil.c
index 55ff2ab5128e..9a15088744f0 100644
--- a/fs/erofs/zutil.c
+++ b/fs/erofs/zutil.c
@@ -79,7 +79,7 @@ int z_erofs_gbuf_growsize(unsigned int nrpages)

 	for (i = 0; i < z_erofs_gbuf_count; ++i) {
 		gbuf = &z_erofs_gbufpool[i];
-		tmp_pages = kcalloc(nrpages, sizeof(*tmp_pages), GFP_KERNEL);
+		tmp_pages = kzalloc_objs(*tmp_pages, nrpages, GFP_KERNEL);
 		if (!tmp_pages)
 			goto out;

@@ -131,15 +131,15 @@ int __init z_erofs_gbuf_init(void)
 	/* The last (special) global buffer is the reserved buffer */
 	total += !!z_erofs_rsv_nrpages;

-	z_erofs_gbufpool = kcalloc(total, sizeof(*z_erofs_gbufpool),
-				   GFP_KERNEL);
+	z_erofs_gbufpool = kzalloc_objs(*z_erofs_gbufpool, total, GFP_KERNEL);
 	if (!z_erofs_gbufpool)
 		return -ENOMEM;

 	if (z_erofs_rsv_nrpages) {
 		z_erofs_rsvbuf = &z_erofs_gbufpool[total - 1];
-		z_erofs_rsvbuf->pages = kcalloc(z_erofs_rsv_nrpages,
-				sizeof(*z_erofs_rsvbuf->pages), GFP_KERNEL);
+		z_erofs_rsvbuf->pages = kzalloc_objs(*z_erofs_rsvbuf->pages,
+						     z_erofs_rsv_nrpages,
+						     GFP_KERNEL);
 		if (!z_erofs_rsvbuf->pages) {
 			z_erofs_rsvbuf = NULL;
 			z_erofs_rsv_nrpages = 0;
diff --git a/fs/eventfd.c b/fs/eventfd.c
index 3219e0d596fe..a0ea7f30c76f 100644
--- a/fs/eventfd.c
+++ b/fs/eventfd.c
@@ -388,7 +388,7 @@ static int do_eventfd(unsigned int count, int flags)
 	if (flags & ~EFD_FLAGS_SET)
 		return -EINVAL;

-	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/eventpoll.c b/fs/eventpoll.c
index 6c36d9dc6926..4d0c0ce43cb3 100644
--- a/fs/eventpoll.c
+++ b/fs/eventpoll.c
@@ -1147,7 +1147,7 @@ static int ep_alloc(struct eventpoll **pep)
 {
 	struct eventpoll *ep;

-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (unlikely(!ep))
 		return -ENOMEM;

diff --git a/fs/exec.c b/fs/exec.c
index 2e3a6593c6fd..c367e74cf103 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1402,7 +1402,7 @@ static struct linux_binprm *alloc_bprm(int fd, struct filename *filename, int fl
 	if (IS_ERR(file))
 		return ERR_CAST(file);

-	bprm = kzalloc(sizeof(*bprm), GFP_KERNEL);
+	bprm = kzalloc_obj(*bprm, GFP_KERNEL);
 	if (!bprm) {
 		do_close_execat(file);
 		return ERR_PTR(-ENOMEM);
diff --git a/fs/exfat/balloc.c b/fs/exfat/balloc.c
index 5429041c7eaf..8dd9e39f8ccf 100644
--- a/fs/exfat/balloc.c
+++ b/fs/exfat/balloc.c
@@ -96,8 +96,8 @@ static int exfat_allocate_bitmap(struct super_block *sb,
 	}
 	sbi->map_sectors = ((need_map_size - 1) >>
 			(sb->s_blocksize_bits)) + 1;
-	sbi->vol_amap = kvmalloc_array(sbi->map_sectors,
-				sizeof(struct buffer_head *), GFP_KERNEL);
+	sbi->vol_amap = kvmalloc_objs(struct buffer_head *, sbi->map_sectors,
+				      GFP_KERNEL);
 	if (!sbi->vol_amap)
 		return -ENOMEM;

diff --git a/fs/exfat/dir.c b/fs/exfat/dir.c
index 2dbf335eafef..3a4853693d8b 100644
--- a/fs/exfat/dir.c
+++ b/fs/exfat/dir.c
@@ -802,7 +802,7 @@ static int __exfat_get_dentry_set(struct exfat_entry_set_cache *es,

 	num_bh = EXFAT_B_TO_BLK_ROUND_UP(off + num_entries * DENTRY_SIZE, sb);
 	if (num_bh > ARRAY_SIZE(es->__bh)) {
-		es->bh = kmalloc_array(num_bh, sizeof(*es->bh), GFP_NOFS);
+		es->bh = kmalloc_objs(*es->bh, num_bh, GFP_NOFS);
 		if (!es->bh) {
 			brelse(bh);
 			return -ENOMEM;
diff --git a/fs/exfat/super.c b/fs/exfat/super.c
index 10e872a99663..42a232394afb 100644
--- a/fs/exfat/super.c
+++ b/fs/exfat/super.c
@@ -815,7 +815,7 @@ static int exfat_init_fs_context(struct fs_context *fc)
 {
 	struct exfat_sb_info *sbi;

-	sbi = kzalloc(sizeof(struct exfat_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct exfat_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c
index b8cfab8f98b9..2bac6dcb1792 100644
--- a/fs/ext2/balloc.c
+++ b/fs/ext2/balloc.c
@@ -419,7 +419,7 @@ void ext2_init_block_alloc_info(struct inode *inode)
 	struct ext2_block_alloc_info *block_i;
 	struct super_block *sb = inode->i_sb;

-	block_i = kmalloc(sizeof(*block_i), GFP_KERNEL);
+	block_i = kmalloc_obj(*block_i, GFP_KERNEL);
 	if (block_i) {
 		struct ext2_reserve_window_node *rsv = &block_i->rsv_window_node;

diff --git a/fs/ext2/super.c b/fs/ext2/super.c
index 121e634c792a..9bb4c63f5628 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -893,12 +893,12 @@ static int ext2_fill_super(struct super_block *sb, struct fs_context *fc)
 	__le32 features;
 	int err;

-	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
+	sbi = kzalloc_obj(*sbi, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

 	sbi->s_blockgroup_lock =
-		kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
+		kzalloc_obj(struct blockgroup_lock, GFP_KERNEL);
 	if (!sbi->s_blockgroup_lock) {
 		kfree(sbi);
 		return -ENOMEM;
@@ -1122,9 +1122,8 @@ static int ext2_fill_super(struct super_block *sb, struct fs_context *fc)
 	}
 	db_count = (sbi->s_groups_count + EXT2_DESC_PER_BLOCK(sb) - 1) /
 		   EXT2_DESC_PER_BLOCK(sb);
-	sbi->s_group_desc = kvmalloc_array(db_count,
-					   sizeof(struct buffer_head *),
-					   GFP_KERNEL);
+	sbi->s_group_desc = kvmalloc_objs(struct buffer_head *, db_count,
+					  GFP_KERNEL);
 	if (sbi->s_group_desc == NULL) {
 		ret = -ENOMEM;
 		ext2_msg(sb, KERN_ERR, "error: not enough memory");
@@ -1670,7 +1669,7 @@ static int ext2_init_fs_context(struct fs_context *fc)
 {
 	struct ext2_fs_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c
index e8c5525afc67..75179be4a488 100644
--- a/fs/ext4/block_validity.c
+++ b/fs/ext4/block_validity.c
@@ -217,7 +217,7 @@ int ext4_setup_system_zone(struct super_block *sb)
 	ext4_group_t i;
 	int ret;

-	system_blks = kzalloc(sizeof(*system_blks), GFP_KERNEL);
+	system_blks = kzalloc_obj(*system_blks, GFP_KERNEL);
 	if (!system_blks)
 		return -ENOMEM;

diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
index 00c4b3c82b65..b285ce18b183 100644
--- a/fs/ext4/dir.c
+++ b/fs/ext4/dir.c
@@ -480,8 +480,7 @@ int ext4_htree_store_dirent(struct file *dir_file, __u32 hash,
 	p = &info->root.rb_node;

 	/* Create and allocate the fname structure */
-	new_fn = kzalloc(struct_size(new_fn, name, ent_name->len + 1),
-			 GFP_KERNEL);
+	new_fn = kzalloc_flex(*new_fn, name, ent_name->len + 1, GFP_KERNEL);
 	if (!new_fn)
 		return -ENOMEM;
 	new_fn->hash = hash;
@@ -673,7 +672,7 @@ static int ext4_dir_open(struct inode *inode, struct file *file)
 {
 	struct dir_private_info *info;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	file->private_data = info;
diff --git a/fs/ext4/extents-test.c b/fs/ext4/extents-test.c
index 4879e68e465d..913103089799 100644
--- a/fs/ext4/extents-test.c
+++ b/fs/ext4/extents-test.c
@@ -229,7 +229,7 @@ static int extents_kunit_init(struct kunit *test)
 	sb->s_blocksize = 4096;
 	sb->s_blocksize_bits = 12;

-	sbi = kzalloc(sizeof(struct ext4_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct ext4_sb_info, GFP_KERNEL);
 	if (sbi == NULL)
 		return -ENOMEM;

@@ -240,7 +240,7 @@ static int extents_kunit_init(struct kunit *test)
 		sbi->s_extent_max_zeroout_kb = 32;

 	/* setup the mock inode */
-	k_ctx.k_ei = kzalloc(sizeof(struct ext4_inode_info), GFP_KERNEL);
+	k_ctx.k_ei = kzalloc_obj(struct ext4_inode_info, GFP_KERNEL);
 	if (k_ctx.k_ei == NULL)
 		return -ENOMEM;
 	ei = k_ctx.k_ei;
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 3630b27e4fd7..ae3804f36535 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -621,8 +621,7 @@ int ext4_ext_precache(struct inode *inode)
 		return ret;
 	}

-	path = kcalloc(depth + 1, sizeof(struct ext4_ext_path),
-		       GFP_NOFS);
+	path = kzalloc_objs(struct ext4_ext_path, depth + 1, GFP_NOFS);
 	if (path == NULL) {
 		up_read(&ei->i_data_sem);
 		return -ENOMEM;
@@ -916,8 +915,7 @@ ext4_find_extent(struct inode *inode, ext4_lblk_t block,
 	}
 	if (!path) {
 		/* account possible depth increase */
-		path = kcalloc(depth + 2, sizeof(struct ext4_ext_path),
-				gfp_flags);
+		path = kzalloc_objs(struct ext4_ext_path, depth + 2, gfp_flags);
 		if (unlikely(!path))
 			return ERR_PTR(-ENOMEM);
 		path[0].p_maxdepth = depth + 1;
@@ -1105,7 +1103,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
 	 * We need this to handle errors and free blocks
 	 * upon them.
 	 */
-	ablocks = kcalloc(depth, sizeof(ext4_fsblk_t), gfp_flags);
+	ablocks = kzalloc_objs(ext4_fsblk_t, depth, gfp_flags);
 	if (!ablocks)
 		return -ENOMEM;

@@ -2947,8 +2945,8 @@ int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start,
 			path[k].p_block =
 				le16_to_cpu(path[k].p_hdr->eh_entries)+1;
 	} else {
-		path = kcalloc(depth + 1, sizeof(struct ext4_ext_path),
-			       GFP_NOFS | __GFP_NOFAIL);
+		path = kzalloc_objs(struct ext4_ext_path, depth + 1,
+				    GFP_NOFS | __GFP_NOFAIL);
 		path[0].p_maxdepth = path[0].p_depth = depth;
 		path[0].p_hdr = ext_inode_hdr(inode);
 		i = 0;
diff --git a/fs/ext4/fsmap.c b/fs/ext4/fsmap.c
index 22fc333244ef..8b1138d2dc8e 100644
--- a/fs/ext4/fsmap.c
+++ b/fs/ext4/fsmap.c
@@ -348,7 +348,7 @@ static inline int ext4_getfsmap_fill(struct list_head *meta_list,
 {
 	struct ext4_fsmap *fsm;

-	fsm = kmalloc(sizeof(*fsm), GFP_NOFS);
+	fsm = kmalloc_obj(*fsm, GFP_NOFS);
 	if (!fsm)
 		return -ENOMEM;
 	fsm->fmr_device = 0;
diff --git a/fs/ext4/mballoc-test.c b/fs/ext4/mballoc-test.c
index 4abb40d4561c..6b448aad6f63 100644
--- a/fs/ext4/mballoc-test.c
+++ b/fs/ext4/mballoc-test.c
@@ -34,7 +34,7 @@ static struct inode *mbt_alloc_inode(struct super_block *sb)
 {
 	struct ext4_inode_info *ei;

-	ei = kmalloc(sizeof(struct ext4_inode_info), GFP_KERNEL);
+	ei = kmalloc_obj(struct ext4_inode_info, GFP_KERNEL);
 	if (!ei)
 		return NULL;

@@ -73,11 +73,11 @@ static int mbt_mb_init(struct super_block *sb)
 	int ret;

 	/* needed by ext4_mb_init->bdev_nonrot(sb->s_bdev) */
-	sb->s_bdev = kzalloc(sizeof(*sb->s_bdev), GFP_KERNEL);
+	sb->s_bdev = kzalloc_obj(*sb->s_bdev, GFP_KERNEL);
 	if (sb->s_bdev == NULL)
 		return -ENOMEM;

-	sb->s_bdev->bd_queue = kzalloc(sizeof(struct request_queue), GFP_KERNEL);
+	sb->s_bdev->bd_queue = kzalloc_obj(struct request_queue, GFP_KERNEL);
 	if (sb->s_bdev->bd_queue == NULL) {
 		kfree(sb->s_bdev);
 		return -ENOMEM;
@@ -137,7 +137,7 @@ static struct super_block *mbt_ext4_alloc_super_block(void)
 	struct super_block *sb;
 	struct ext4_sb_info *sbi;

-	fsb = kzalloc(sizeof(*fsb), GFP_KERNEL);
+	fsb = kzalloc_obj(*fsb, GFP_KERNEL);
 	if (fsb == NULL)
 		return NULL;

@@ -148,7 +148,7 @@ static struct super_block *mbt_ext4_alloc_super_block(void)
 	sbi = &fsb->sbi;

 	sbi->s_blockgroup_lock =
-		kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
+		kzalloc_obj(struct blockgroup_lock, GFP_KERNEL);
 	if (!sbi->s_blockgroup_lock)
 		goto out_deactivate;

@@ -252,8 +252,7 @@ static int mbt_ctx_init(struct super_block *sb)
 	struct mbt_ctx *ctx = MBT_CTX(sb);
 	ext4_group_t i, ngroups = ext4_get_groups_count(sb);

-	ctx->grp_ctx = kcalloc(ngroups, sizeof(struct mbt_grp_ctx),
-			       GFP_KERNEL);
+	ctx->grp_ctx = kzalloc_objs(struct mbt_grp_ctx, ngroups, GFP_KERNEL);
 	if (ctx->grp_ctx == NULL)
 		return -ENOMEM;

diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index b99d1a7e580e..4d0bf2fcf2d3 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -3754,8 +3754,7 @@ int ext4_mb_init(struct super_block *sb)
 	} while (i < MB_NUM_ORDERS(sb));

 	sbi->s_mb_avg_fragment_size =
-		kmalloc_array(MB_NUM_ORDERS(sb), sizeof(struct xarray),
-			GFP_KERNEL);
+		kmalloc_objs(struct xarray, MB_NUM_ORDERS(sb), GFP_KERNEL);
 	if (!sbi->s_mb_avg_fragment_size) {
 		ret = -ENOMEM;
 		goto out;
@@ -3764,8 +3763,7 @@ int ext4_mb_init(struct super_block *sb)
 		xa_init(&sbi->s_mb_avg_fragment_size[i]);

 	sbi->s_mb_largest_free_orders =
-		kmalloc_array(MB_NUM_ORDERS(sb), sizeof(struct xarray),
-			GFP_KERNEL);
+		kmalloc_objs(struct xarray, MB_NUM_ORDERS(sb), GFP_KERNEL);
 	if (!sbi->s_mb_largest_free_orders) {
 		ret = -ENOMEM;
 		goto out;
@@ -3817,8 +3815,9 @@ int ext4_mb_init(struct super_block *sb)

 	sbi->s_mb_nr_global_goals = umin(num_possible_cpus(),
 					 DIV_ROUND_UP(sbi->s_groups_count, 4));
-	sbi->s_mb_last_groups = kcalloc(sbi->s_mb_nr_global_goals,
-					sizeof(ext4_group_t), GFP_KERNEL);
+	sbi->s_mb_last_groups = kzalloc_objs(ext4_group_t,
+					     sbi->s_mb_nr_global_goals,
+					     GFP_KERNEL);
 	if (sbi->s_mb_last_groups == NULL) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/fs/ext4/orphan.c b/fs/ext4/orphan.c
index c9b93b670b0f..2dbaf3c01168 100644
--- a/fs/ext4/orphan.c
+++ b/fs/ext4/orphan.c
@@ -598,8 +598,7 @@ int ext4_init_orphan_info(struct super_block *sb)
 	}
 	oi->of_blocks = inode->i_size >> sb->s_blocksize_bits;
 	oi->of_csum_seed = EXT4_I(inode)->i_csum_seed;
-	oi->of_binfo = kvmalloc_array(oi->of_blocks,
-				     sizeof(struct ext4_orphan_block),
+	oi->of_binfo = kvmalloc_objs(struct ext4_orphan_block, oi->of_blocks,
 				     GFP_KERNEL);
 	if (!oi->of_binfo) {
 		ret = -ENOMEM;
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
index 76842f0957b5..780679645b6e 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -32,7 +32,7 @@ static void ext4_rcu_ptr_callback(struct rcu_head *head)

 void ext4_kvfree_array_rcu(void *to_free)
 {
-	struct ext4_rcu_ptr *ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+	struct ext4_rcu_ptr *ptr = kzalloc_obj(*ptr, GFP_KERNEL);

 	if (ptr) {
 		ptr->ptr = to_free;
@@ -242,7 +242,7 @@ static struct ext4_new_flex_group_data *alloc_flex_gd(unsigned int flexbg_size,
 	unsigned int max_resize_bg;
 	struct ext4_new_flex_group_data *flex_gd;

-	flex_gd = kmalloc(sizeof(*flex_gd), GFP_NOFS);
+	flex_gd = kmalloc_obj(*flex_gd, GFP_NOFS);
 	if (flex_gd == NULL)
 		goto out3;

@@ -260,9 +260,8 @@ static struct ext4_new_flex_group_data *alloc_flex_gd(unsigned int flexbg_size,
 	if (WARN_ON_ONCE(flex_gd->resize_bg > max_resize_bg))
 		flex_gd->resize_bg = max_resize_bg;

-	flex_gd->groups = kmalloc_array(flex_gd->resize_bg,
-					sizeof(struct ext4_new_group_data),
-					GFP_NOFS);
+	flex_gd->groups = kmalloc_objs(struct ext4_new_group_data,
+				       flex_gd->resize_bg, GFP_NOFS);
 	if (flex_gd->groups == NULL)
 		goto out2;

@@ -1031,7 +1030,7 @@ static int reserve_backup_gdb(handle_t *handle, struct inode *inode,
 	int res, i;
 	int err;

-	primary = kmalloc_array(reserved_gdb, sizeof(*primary), GFP_NOFS);
+	primary = kmalloc_objs(*primary, reserved_gdb, GFP_NOFS);
 	if (!primary)
 		return -ENOMEM;

diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 504148b2142b..63784d9b1874 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -2016,7 +2016,7 @@ int ext4_init_fs_context(struct fs_context *fc)
 {
 	struct ext4_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct ext4_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct ext4_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -2496,11 +2496,11 @@ static int parse_apply_sb_mount_options(struct super_block *sb,
 	if (strscpy_pad(s_mount_opts, sbi->s_es->s_mount_opts) < 0)
 		return -E2BIG;

-	fc = kzalloc(sizeof(struct fs_context), GFP_KERNEL);
+	fc = kzalloc_obj(struct fs_context, GFP_KERNEL);
 	if (!fc)
 		return -ENOMEM;

-	s_ctx = kzalloc(sizeof(struct ext4_fs_context), GFP_KERNEL);
+	s_ctx = kzalloc_obj(struct ext4_fs_context, GFP_KERNEL);
 	if (!s_ctx)
 		goto out_free;

@@ -3962,7 +3962,7 @@ static int ext4_li_info_new(void)
 {
 	struct ext4_lazy_init *eli = NULL;

-	eli = kzalloc(sizeof(*eli), GFP_KERNEL);
+	eli = kzalloc_obj(*eli, GFP_KERNEL);
 	if (!eli)
 		return -ENOMEM;

@@ -3981,7 +3981,7 @@ static struct ext4_li_request *ext4_li_request_new(struct super_block *sb,
 {
 	struct ext4_li_request *elr;

-	elr = kzalloc(sizeof(*elr), GFP_KERNEL);
+	elr = kzalloc_obj(*elr, GFP_KERNEL);
 	if (!elr)
 		return NULL;

@@ -4328,7 +4328,7 @@ static struct ext4_sb_info *ext4_alloc_sbi(struct super_block *sb)
 {
 	struct ext4_sb_info *sbi;

-	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
+	sbi = kzalloc_obj(*sbi, GFP_KERNEL);
 	if (!sbi)
 		return NULL;

@@ -4336,7 +4336,7 @@ static struct ext4_sb_info *ext4_alloc_sbi(struct super_block *sb)
 					   NULL, NULL);

 	sbi->s_blockgroup_lock =
-		kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
+		kzalloc_obj(struct blockgroup_lock, GFP_KERNEL);

 	if (!sbi->s_blockgroup_lock)
 		goto err_out;
@@ -4879,9 +4879,7 @@ static int ext4_group_desc_init(struct super_block *sb,
 		}
 	}
 	rcu_assign_pointer(sbi->s_group_desc,
-			   kvmalloc_array(db_count,
-					  sizeof(struct buffer_head *),
-					  GFP_KERNEL));
+			   kvmalloc_objs(struct buffer_head *, db_count, GFP_KERNEL));
 	if (sbi->s_group_desc == NULL) {
 		ext4_msg(sb, KERN_ERR, "not enough memory");
 		return -ENOMEM;
diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
index d2ecc1026c0c..cdf78da85861 100644
--- a/fs/ext4/sysfs.c
+++ b/fs/ext4/sysfs.c
@@ -655,7 +655,7 @@ int __init ext4_init_sysfs(void)
 	if (!ext4_root)
 		return -ENOMEM;

-	ext4_feat = kzalloc(sizeof(*ext4_feat), GFP_KERNEL);
+	ext4_feat = kzalloc_obj(*ext4_feat, GFP_KERNEL);
 	if (!ext4_feat) {
 		ret = -ENOMEM;
 		goto root_err;
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 4ed8ddf2a60b..7bf9ba19a89d 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -390,7 +390,7 @@ static int ext4_xattr_inode_read(struct inode *ea_inode, void *buf, size_t size)
 	int i, ret;

 	if (bh_count > ARRAY_SIZE(bhs_inline)) {
-		bhs = kmalloc_array(bh_count, sizeof(*bhs), GFP_NOFS);
+		bhs = kmalloc_objs(*bhs, bh_count, GFP_NOFS);
 		if (!bhs)
 			return -ENOMEM;
 	}
@@ -2618,8 +2618,8 @@ static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode,
 	int needs_kvfree = 0;
 	int error;

-	is = kzalloc(sizeof(struct ext4_xattr_ibody_find), GFP_NOFS);
-	bs = kzalloc(sizeof(struct ext4_xattr_block_find), GFP_NOFS);
+	is = kzalloc_obj(struct ext4_xattr_ibody_find, GFP_NOFS);
+	bs = kzalloc_obj(struct ext4_xattr_block_find, GFP_NOFS);
 	b_entry_name = kmalloc(entry->e_name_len + 1, GFP_NOFS);
 	if (!is || !bs || !b_entry_name) {
 		error = -ENOMEM;
@@ -2876,9 +2876,8 @@ ext4_expand_inode_array(struct ext4_xattr_inode_array **ea_inode_array,
 		/*
 		 * Start with 15 inodes, so it fits into a power-of-two size.
 		 */
-		(*ea_inode_array) = kmalloc(
-			struct_size(*ea_inode_array, inodes, EIA_MASK),
-			GFP_NOFS);
+		(*ea_inode_array) = kmalloc_flex(**ea_inode_array, inodes,
+						 EIA_MASK, GFP_NOFS);
 		if (*ea_inode_array == NULL)
 			return -ENOMEM;
 		(*ea_inode_array)->count = 0;
@@ -2886,10 +2885,9 @@ ext4_expand_inode_array(struct ext4_xattr_inode_array **ea_inode_array,
 		/* expand the array once all 15 + n * 16 slots are full */
 		struct ext4_xattr_inode_array *new_array = NULL;

-		new_array = kmalloc(
-			struct_size(*ea_inode_array, inodes,
-				    (*ea_inode_array)->count + EIA_INCR),
-			GFP_NOFS);
+		new_array = kmalloc_flex(**ea_inode_array, inodes,
+					 (*ea_inode_array)->count + EIA_INCR,
+					 GFP_NOFS);
 		if (new_array == NULL)
 			return -ENOMEM;
 		memcpy(new_array, *ea_inode_array,
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 7c8e6eea60df..2a12fe8eb668 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -3725,7 +3725,7 @@ static struct block_device **f2fs_get_devices(struct super_block *sb,
 	if (!f2fs_is_multi_device(sbi))
 		return NULL;

-	devs = kmalloc_array(sbi->s_ndevs, sizeof(*devs), GFP_KERNEL);
+	devs = kmalloc_objs(*devs, sbi->s_ndevs, GFP_KERNEL);
 	if (!devs)
 		return ERR_PTR(-ENOMEM);

@@ -4501,7 +4501,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi,
 	struct f2fs_super_block *super;
 	int err = 0;

-	super = kzalloc(sizeof(struct f2fs_super_block), GFP_KERNEL);
+	super = kzalloc_obj(struct f2fs_super_block, GFP_KERNEL);
 	if (!super)
 		return -ENOMEM;

@@ -4938,7 +4938,7 @@ static int f2fs_fill_super(struct super_block *sb, struct fs_context *fc)
 	recovery = 0;

 	/* allocate memory for f2fs-specific super block info */
-	sbi = kzalloc(sizeof(struct f2fs_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct f2fs_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

@@ -5509,7 +5509,7 @@ static int f2fs_init_fs_context(struct fs_context *fc)
 {
 	struct f2fs_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct f2fs_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct f2fs_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index 59fa90617b5b..175e8e66c29f 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -1554,7 +1554,7 @@ int fat_fill_super(struct super_block *sb, struct fs_context *fc,
 	 * the filesystem, since we're only just about to mount
 	 * it and have no inodes etc active!
 	 */
-	sbi = kzalloc(sizeof(struct msdos_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct msdos_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;
 	sb->s_fs_info = sbi;
@@ -1905,7 +1905,7 @@ int fat_init_fs_context(struct fs_context *fc, bool is_vfat)
 {
 	struct fat_mount_options *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return -ENOMEM;

diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c
index 2acfe3123a72..87dcdd86272b 100644
--- a/fs/fat/namei_vfat.c
+++ b/fs/fat/namei_vfat.c
@@ -663,7 +663,7 @@ static int vfat_add_entry(struct inode *dir, const struct qstr *qname,
 	if (len == 0)
 		return -ENOENT;

-	slots = kmalloc_array(MSDOS_SLOTS, sizeof(*slots), GFP_NOFS);
+	slots = kmalloc_objs(*slots, MSDOS_SLOTS, GFP_NOFS);
 	if (slots == NULL)
 		return -ENOMEM;

diff --git a/fs/fcntl.c b/fs/fcntl.c
index f93dbca08435..c9c73305011e 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -100,7 +100,7 @@ int file_f_owner_allocate(struct file *file)
 	if (f_owner)
 		return 0;

-	f_owner = kzalloc(sizeof(struct fown_struct), GFP_KERNEL);
+	f_owner = kzalloc_obj(struct fown_struct, GFP_KERNEL);
 	if (!f_owner)
 		return -ENOMEM;

diff --git a/fs/fhandle.c b/fs/fhandle.c
index e15bcf4b0b23..fa4053f9e015 100644
--- a/fs/fhandle.c
+++ b/fs/fhandle.c
@@ -46,8 +46,8 @@ static long do_sys_name_to_handle(const struct path *path,
 	if (f_handle.handle_bytes > MAX_HANDLE_SZ)
 		return -EINVAL;

-	handle = kzalloc(struct_size(handle, f_handle, f_handle.handle_bytes),
-			 GFP_KERNEL);
+	handle = kzalloc_flex(*handle, f_handle, f_handle.handle_bytes,
+			      GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

@@ -368,8 +368,8 @@ static int handle_to_path(int mountdirfd, struct file_handle __user *ufh,
 	if (retval)
 		goto out_path;

-	handle = kmalloc(struct_size(handle, f_handle, f_handle.handle_bytes),
-			 GFP_KERNEL);
+	handle = kmalloc_flex(*handle, f_handle, f_handle.handle_bytes,
+			      GFP_KERNEL);
 	if (!handle) {
 		retval = -ENOMEM;
 		goto out_path;
diff --git a/fs/file.c b/fs/file.c
index 51ddcff0081a..384c83ce768d 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -212,11 +212,11 @@ static struct fdtable *alloc_fdtable(unsigned int slots_wanted)
 	if (unlikely(nr > INT_MAX / sizeof(struct file *)))
 		return ERR_PTR(-EMFILE);

-	fdt = kmalloc(sizeof(struct fdtable), GFP_KERNEL_ACCOUNT);
+	fdt = kmalloc_obj(struct fdtable, GFP_KERNEL_ACCOUNT);
 	if (!fdt)
 		goto out;
 	fdt->max_fds = nr;
-	data = kvmalloc_array(nr, sizeof(struct file *), GFP_KERNEL_ACCOUNT);
+	data = kvmalloc_objs(struct file *, nr, GFP_KERNEL_ACCOUNT);
 	if (!data)
 		goto out_fdt;
 	fdt->fd = data;
diff --git a/fs/freevxfs/vxfs_fshead.c b/fs/freevxfs/vxfs_fshead.c
index c1174a3f8990..c1d90905b7b2 100644
--- a/fs/freevxfs/vxfs_fshead.c
+++ b/fs/freevxfs/vxfs_fshead.c
@@ -58,7 +58,7 @@ vxfs_getfsh(struct inode *ip, int which)
 	if (bp) {
 		struct vxfs_fsh		*fhp;

-		if (!(fhp = kmalloc(sizeof(*fhp), GFP_KERNEL)))
+		if (!(fhp = kmalloc_obj(*fhp, GFP_KERNEL)))
 			goto out;
 		memcpy(fhp, bp->b_data, sizeof(*fhp));

diff --git a/fs/freevxfs/vxfs_super.c b/fs/freevxfs/vxfs_super.c
index fabe60778658..44b4958277ce 100644
--- a/fs/freevxfs/vxfs_super.c
+++ b/fs/freevxfs/vxfs_super.c
@@ -193,7 +193,7 @@ static int vxfs_fill_super(struct super_block *sbp, struct fs_context *fc)

 	sbp->s_flags |= SB_RDONLY;

-	infp = kzalloc(sizeof(*infp), GFP_KERNEL);
+	infp = kzalloc_obj(*infp, GFP_KERNEL);
 	if (!infp) {
 		warnf(fc, "vxfs: unable to allocate incore superblock");
 		return -ENOMEM;
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index 68228bf89b82..22a1996c00cd 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -653,7 +653,7 @@ static void inode_switch_wbs(struct inode *inode, int new_wb_id)
 	if (atomic_read(&isw_nr_in_flight) > WB_FRN_MAX_IN_FLIGHT)
 		return;

-	isw = kzalloc(struct_size(isw, inodes, 2), GFP_ATOMIC);
+	isw = kzalloc_flex(*isw, inodes, 2, GFP_ATOMIC);
 	if (!isw)
 		return;

@@ -724,8 +724,7 @@ bool cleanup_offline_cgwb(struct bdi_writeback *wb)
 	int nr;
 	bool restart = false;

-	isw = kzalloc(struct_size(isw, inodes, WB_MAX_INODES_PER_ISW),
-		      GFP_KERNEL);
+	isw = kzalloc_flex(*isw, inodes, WB_MAX_INODES_PER_ISW, GFP_KERNEL);
 	if (!isw)
 		return restart;

@@ -1075,7 +1074,7 @@ static void bdi_split_work_to_wbs(struct backing_dev_info *bdi,

 		nr_pages = wb_split_bdi_pages(wb, base_work->nr_pages);

-		work = kmalloc(sizeof(*work), GFP_ATOMIC);
+		work = kmalloc_obj(*work, GFP_ATOMIC);
 		if (work) {
 			*work = *base_work;
 			work->nr_pages = nr_pages;
@@ -1173,7 +1172,7 @@ int cgroup_writeback_by_id(u64 bdi_id, int memcg_id,
 	dirty = dirty * 10 / 8;

 	/* issue the writeback work */
-	work = kzalloc(sizeof(*work), GFP_NOWAIT);
+	work = kzalloc_obj(*work, GFP_NOWAIT);
 	if (work) {
 		work->nr_pages = dirty;
 		work->sync_mode = WB_SYNC_NONE;
diff --git a/fs/fs_context.c b/fs/fs_context.c
index 81ed94f46cac..a37b0a093505 100644
--- a/fs/fs_context.c
+++ b/fs/fs_context.c
@@ -264,7 +264,7 @@ static struct fs_context *alloc_fs_context(struct file_system_type *fs_type,
 	struct fs_context *fc;
 	int ret = -ENOMEM;

-	fc = kzalloc(sizeof(struct fs_context), GFP_KERNEL_ACCOUNT);
+	fc = kzalloc_obj(struct fs_context, GFP_KERNEL_ACCOUNT);
 	if (!fc)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/fsopen.c b/fs/fsopen.c
index 614922623675..a23f003ae056 100644
--- a/fs/fsopen.c
+++ b/fs/fsopen.c
@@ -102,7 +102,7 @@ static int fscontext_create_fd(struct fs_context *fc, unsigned int o_flags)

 static int fscontext_alloc_log(struct fs_context *fc)
 {
-	fc->log.log = kzalloc(sizeof(*fc->log.log), GFP_KERNEL);
+	fc->log.log = kzalloc_obj(*fc->log.log, GFP_KERNEL);
 	if (!fc->log.log)
 		return -ENOMEM;
 	refcount_set(&fc->log.log->usage, 1);
diff --git a/fs/fuse/backing.c b/fs/fuse/backing.c
index 4afda419dd14..45a78ee15e3c 100644
--- a/fs/fuse/backing.c
+++ b/fs/fuse/backing.c
@@ -112,7 +112,7 @@ int fuse_backing_open(struct fuse_conn *fc, struct fuse_backing_map *map)
 	if (backing_sb->s_stack_depth >= fc->max_stack_depth)
 		goto out_fput;

-	fb = kmalloc(sizeof(struct fuse_backing), GFP_KERNEL);
+	fb = kmalloc_obj(struct fuse_backing, GFP_KERNEL);
 	res = -ENOMEM;
 	if (!fb)
 		goto out_fput;
diff --git a/fs/fuse/cuse.c b/fs/fuse/cuse.c
index 28c96961e85d..0aace951541b 100644
--- a/fs/fuse/cuse.c
+++ b/fs/fuse/cuse.c
@@ -362,7 +362,7 @@ static void cuse_process_init_reply(struct fuse_mount *fm,

 	/* devt determined, create device */
 	rc = -ENOMEM;
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto err_region;

@@ -443,7 +443,7 @@ static int cuse_send_init(struct cuse_conn *cc)
 	if (!folio)
 		goto err;

-	ia = kzalloc(sizeof(*ia), GFP_KERNEL);
+	ia = kzalloc_obj(*ia, GFP_KERNEL);
 	if (!ia)
 		goto err_free_folio;

@@ -505,7 +505,7 @@ static int cuse_channel_open(struct inode *inode, struct file *file)
 	int rc;

 	/* set up cuse_conn */
-	cc = kzalloc(sizeof(*cc), GFP_KERNEL);
+	cc = kzalloc_obj(*cc, GFP_KERNEL);
 	if (!cc)
 		return -ENOMEM;

diff --git a/fs/fuse/dax.c b/fs/fuse/dax.c
index ac6d4c1064cc..7d11eac4f629 100644
--- a/fs/fuse/dax.c
+++ b/fs/fuse/dax.c
@@ -257,7 +257,7 @@ static int dmap_removemapping_list(struct inode *inode, unsigned int num,
 	int ret, i = 0, nr_alloc;

 	nr_alloc = min_t(unsigned int, num, FUSE_REMOVEMAPPING_MAX_ENTRY);
-	remove_one = kmalloc_array(nr_alloc, sizeof(*remove_one), GFP_NOFS);
+	remove_one = kmalloc_objs(*remove_one, nr_alloc, GFP_NOFS);
 	if (!remove_one)
 		return -ENOMEM;

@@ -1219,7 +1219,7 @@ static int fuse_dax_mem_range_init(struct fuse_conn_dax *fcd)
 		__func__, nr_pages, nr_ranges);

 	for (i = 0; i < nr_ranges; i++) {
-		range = kzalloc(sizeof(struct fuse_dax_mapping), GFP_KERNEL);
+		range = kzalloc_obj(struct fuse_dax_mapping, GFP_KERNEL);
 		ret = -ENOMEM;
 		if (!range)
 			goto out_err;
@@ -1255,7 +1255,7 @@ int fuse_dax_conn_alloc(struct fuse_conn *fc, enum fuse_dax_mode dax_mode,
 	if (!dax_dev)
 		return 0;

-	fcd = kzalloc(sizeof(*fcd), GFP_KERNEL);
+	fcd = kzalloc_obj(*fcd, GFP_KERNEL);
 	if (!fcd)
 		return -ENOMEM;

@@ -1277,7 +1277,7 @@ bool fuse_dax_inode_alloc(struct super_block *sb, struct fuse_inode *fi)

 	fi->dax = NULL;
 	if (fc->dax) {
-		fi->dax = kzalloc(sizeof(*fi->dax), GFP_KERNEL_ACCOUNT);
+		fi->dax = kzalloc_obj(*fi->dax, GFP_KERNEL_ACCOUNT);
 		if (!fi->dax)
 			return false;

diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index a30c8b57d478..3ec0fa236da0 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -1598,8 +1598,7 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos,
 	if (IS_ERR(fud))
 		return PTR_ERR(fud);

-	bufs = kvmalloc_array(pipe->max_usage, sizeof(struct pipe_buffer),
-			      GFP_KERNEL);
+	bufs = kvmalloc_objs(struct pipe_buffer, pipe->max_usage, GFP_KERNEL);
 	if (!bufs)
 		return -ENOMEM;

@@ -2311,7 +2310,7 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe,
 	tail = pipe->tail;
 	count = pipe_occupancy(head, tail);

-	bufs = kvmalloc_array(count, sizeof(struct pipe_buffer), GFP_KERNEL);
+	bufs = kvmalloc_objs(struct pipe_buffer, count, GFP_KERNEL);
 	if (!bufs) {
 		pipe_unlock(pipe);
 		return -ENOMEM;
diff --git a/fs/fuse/dev_uring.c b/fs/fuse/dev_uring.c
index 5ceb217ced1b..aee37347b652 100644
--- a/fs/fuse/dev_uring.c
+++ b/fs/fuse/dev_uring.c
@@ -231,12 +231,12 @@ static struct fuse_ring *fuse_uring_create(struct fuse_conn *fc)
 	struct fuse_ring *res = NULL;
 	size_t max_payload_size;

-	ring = kzalloc(sizeof(*fc->ring), GFP_KERNEL_ACCOUNT);
+	ring = kzalloc_obj(*fc->ring, GFP_KERNEL_ACCOUNT);
 	if (!ring)
 		return NULL;

-	ring->queues = kcalloc(nr_queues, sizeof(struct fuse_ring_queue *),
-			       GFP_KERNEL_ACCOUNT);
+	ring->queues = kzalloc_objs(struct fuse_ring_queue *, nr_queues,
+				    GFP_KERNEL_ACCOUNT);
 	if (!ring->queues)
 		goto out_err;

@@ -274,10 +274,10 @@ static struct fuse_ring_queue *fuse_uring_create_queue(struct fuse_ring *ring,
 	struct fuse_ring_queue *queue;
 	struct list_head *pq;

-	queue = kzalloc(sizeof(*queue), GFP_KERNEL_ACCOUNT);
+	queue = kzalloc_obj(*queue, GFP_KERNEL_ACCOUNT);
 	if (!queue)
 		return NULL;
-	pq = kcalloc(FUSE_PQ_HASH_SIZE, sizeof(struct list_head), GFP_KERNEL);
+	pq = kzalloc_objs(struct list_head, FUSE_PQ_HASH_SIZE, GFP_KERNEL);
 	if (!pq) {
 		kfree(queue);
 		return NULL;
@@ -1062,7 +1062,7 @@ fuse_uring_create_ring_ent(struct io_uring_cmd *cmd,
 	}

 	err = -ENOMEM;
-	ent = kzalloc(sizeof(*ent), GFP_KERNEL_ACCOUNT);
+	ent = kzalloc_obj(*ent, GFP_KERNEL_ACCOUNT);
 	if (!ent)
 		return ERR_PTR(err);

diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index f25ee47822ad..7ac6b232ef12 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -473,8 +473,8 @@ static int fuse_dentry_init(struct dentry *dentry)
 {
 	struct fuse_dentry *fd;

-	fd = kzalloc(sizeof(struct fuse_dentry),
-			  GFP_KERNEL_ACCOUNT | __GFP_RECLAIMABLE);
+	fd = kzalloc_obj(struct fuse_dentry,
+			 GFP_KERNEL_ACCOUNT | __GFP_RECLAIMABLE);
 	if (!fd)
 		return -ENOMEM;

diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 80765ab6d04a..e29aecdab97e 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -56,13 +56,13 @@ struct fuse_file *fuse_file_alloc(struct fuse_mount *fm, bool release)
 {
 	struct fuse_file *ff;

-	ff = kzalloc(sizeof(struct fuse_file), GFP_KERNEL_ACCOUNT);
+	ff = kzalloc_obj(struct fuse_file, GFP_KERNEL_ACCOUNT);
 	if (unlikely(!ff))
 		return NULL;

 	ff->fm = fm;
 	if (release) {
-		ff->args = kzalloc(sizeof(*ff->args), GFP_KERNEL_ACCOUNT);
+		ff->args = kzalloc_obj(*ff->args, GFP_KERNEL_ACCOUNT);
 		if (!ff->args) {
 			kfree(ff);
 			return NULL;
@@ -684,7 +684,7 @@ static struct fuse_io_args *fuse_io_alloc(struct fuse_io_priv *io,
 {
 	struct fuse_io_args *ia;

-	ia = kzalloc(sizeof(*ia), GFP_KERNEL);
+	ia = kzalloc_obj(*ia, GFP_KERNEL);
 	if (ia) {
 		ia->io = io;
 		ia->ap.folios = fuse_folios_alloc(nfolios, GFP_KERNEL,
@@ -2045,7 +2045,7 @@ static struct fuse_writepage_args *fuse_writepage_args_alloc(void)
 	struct fuse_writepage_args *wpa;
 	struct fuse_args_pages *ap;

-	wpa = kzalloc(sizeof(*wpa), GFP_NOFS);
+	wpa = kzalloc_obj(*wpa, GFP_NOFS);
 	if (wpa) {
 		ap = &wpa->ia.ap;
 		ap->num_folios = 0;
@@ -2834,7 +2834,7 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 	if ((iov_iter_rw(iter) == READ) && (offset >= i_size))
 		return 0;

-	io = kmalloc(sizeof(struct fuse_io_priv), GFP_KERNEL);
+	io = kmalloc_obj(struct fuse_io_priv, GFP_KERNEL);
 	if (!io)
 		return -ENOMEM;
 	spin_lock_init(&io->lock);
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
index 819e50d66622..3db0fe0d764b 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -74,14 +74,14 @@ static struct file_system_type fuseblk_fs_type;

 struct fuse_forget_link *fuse_alloc_forget(void)
 {
-	return kzalloc(sizeof(struct fuse_forget_link), GFP_KERNEL_ACCOUNT);
+	return kzalloc_obj(struct fuse_forget_link, GFP_KERNEL_ACCOUNT);
 }

 static struct fuse_submount_lookup *fuse_alloc_submount_lookup(void)
 {
 	struct fuse_submount_lookup *sl;

-	sl = kzalloc(sizeof(struct fuse_submount_lookup), GFP_KERNEL_ACCOUNT);
+	sl = kzalloc_obj(struct fuse_submount_lookup, GFP_KERNEL_ACCOUNT);
 	if (!sl)
 		return NULL;
 	sl->forget = fuse_alloc_forget();
@@ -684,7 +684,7 @@ static struct fuse_sync_bucket *fuse_sync_bucket_alloc(void)
 {
 	struct fuse_sync_bucket *bucket;

-	bucket = kzalloc(sizeof(*bucket), GFP_KERNEL | __GFP_NOFAIL);
+	bucket = kzalloc_obj(*bucket, GFP_KERNEL | __GFP_NOFAIL);
 	if (bucket) {
 		init_waitqueue_head(&bucket->waitq);
 		/* Initial active count */
@@ -1487,7 +1487,7 @@ static struct fuse_init_args *fuse_new_init(struct fuse_mount *fm)
 	struct fuse_init_args *ia;
 	u64 flags;

-	ia = kzalloc(sizeof(*ia), GFP_KERNEL | __GFP_NOFAIL);
+	ia = kzalloc_obj(*ia, GFP_KERNEL | __GFP_NOFAIL);

 	ia->in.major = FUSE_KERNEL_VERSION;
 	ia->in.minor = FUSE_KERNEL_MINOR_VERSION;
@@ -1618,11 +1618,11 @@ struct fuse_dev *fuse_dev_alloc(void)
 	struct fuse_dev *fud;
 	struct list_head *pq;

-	fud = kzalloc(sizeof(struct fuse_dev), GFP_KERNEL);
+	fud = kzalloc_obj(struct fuse_dev, GFP_KERNEL);
 	if (!fud)
 		return NULL;

-	pq = kcalloc(FUSE_PQ_HASH_SIZE, sizeof(struct list_head), GFP_KERNEL);
+	pq = kzalloc_objs(struct list_head, FUSE_PQ_HASH_SIZE, GFP_KERNEL);
 	if (!pq) {
 		kfree(fud);
 		return NULL;
@@ -1780,7 +1780,7 @@ static int fuse_get_tree_submount(struct fs_context *fsc)
 	struct super_block *sb;
 	int err;

-	fm = kzalloc(sizeof(struct fuse_mount), GFP_KERNEL);
+	fm = kzalloc_obj(struct fuse_mount, GFP_KERNEL);
 	if (!fm)
 		return -ENOMEM;

@@ -1981,11 +1981,11 @@ static int fuse_get_tree(struct fs_context *fsc)
 	struct super_block *sb;
 	int err;

-	fc = kmalloc(sizeof(*fc), GFP_KERNEL);
+	fc = kmalloc_obj(*fc, GFP_KERNEL);
 	if (!fc)
 		return -ENOMEM;

-	fm = kzalloc(sizeof(*fm), GFP_KERNEL);
+	fm = kzalloc_obj(*fm, GFP_KERNEL);
 	if (!fm) {
 		kfree(fc);
 		return -ENOMEM;
@@ -2047,7 +2047,7 @@ static int fuse_init_fs_context(struct fs_context *fsc)
 {
 	struct fuse_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct fuse_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct fuse_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c
index b2f6486fe1d5..dc96ee0b952a 100644
--- a/fs/fuse/virtio_fs.c
+++ b/fs/fuse/virtio_fs.c
@@ -839,7 +839,7 @@ static void virtio_fs_requests_done_work(struct work_struct *work)
 		if (req->args->may_block) {
 			struct virtio_fs_req_work *w;

-			w = kzalloc(sizeof(*w), GFP_NOFS | __GFP_NOFAIL);
+			w = kzalloc_obj(*w, GFP_NOFS | __GFP_NOFAIL);
 			INIT_WORK(&w->done_work, virtio_fs_complete_req_work);
 			w->fsvq = fsvq;
 			w->req = req;
@@ -947,14 +947,14 @@ static int virtio_fs_setup_vqs(struct virtio_device *vdev,
 	fs->num_request_queues = min_t(unsigned int, fs->num_request_queues,
 					nr_cpu_ids);
 	fs->nvqs = VQ_REQUEST + fs->num_request_queues;
-	fs->vqs = kcalloc(fs->nvqs, sizeof(fs->vqs[VQ_HIPRIO]), GFP_KERNEL);
+	fs->vqs = kzalloc_objs(fs->vqs[VQ_HIPRIO], fs->nvqs, GFP_KERNEL);
 	if (!fs->vqs)
 		return -ENOMEM;

-	vqs = kmalloc_array(fs->nvqs, sizeof(vqs[VQ_HIPRIO]), GFP_KERNEL);
+	vqs = kmalloc_objs(vqs[VQ_HIPRIO], fs->nvqs, GFP_KERNEL);
 	fs->mq_map = kcalloc_node(nr_cpu_ids, sizeof(*fs->mq_map), GFP_KERNEL,
 					dev_to_node(&vdev->dev));
-	vqs_info = kcalloc(fs->nvqs, sizeof(*vqs_info), GFP_KERNEL);
+	vqs_info = kzalloc_objs(*vqs_info, fs->nvqs, GFP_KERNEL);
 	if (!vqs || !vqs_info || !fs->mq_map) {
 		ret = -ENOMEM;
 		goto out;
@@ -1120,7 +1120,7 @@ static int virtio_fs_probe(struct virtio_device *vdev)
 	struct virtio_fs *fs;
 	int ret;

-	fs = kzalloc(sizeof(*fs), GFP_KERNEL);
+	fs = kzalloc_obj(*fs, GFP_KERNEL);
 	if (!fs)
 		return -ENOMEM;
 	kobject_init(&fs->kobj, &virtio_fs_ktype);
@@ -1240,7 +1240,7 @@ static void virtio_fs_send_forget(struct fuse_iqueue *fiq, struct fuse_forget_li
 	u64 unique = fuse_get_unique(fiq);

 	/* Allocate a buffer for the request */
-	forget = kmalloc(sizeof(*forget), GFP_NOFS | __GFP_NOFAIL);
+	forget = kmalloc_obj(*forget, GFP_NOFS | __GFP_NOFAIL);
 	req = &forget->req;

 	req->ih = (struct fuse_in_header){
@@ -1390,8 +1390,8 @@ static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq,
 	/* Does the sglist fit on the stack? */
 	total_sgs = sg_count_fuse_req(req);
 	if (total_sgs > ARRAY_SIZE(stack_sgs)) {
-		sgs = kmalloc_array(total_sgs, sizeof(sgs[0]), gfp);
-		sg = kmalloc_array(total_sgs, sizeof(sg[0]), gfp);
+		sgs = kmalloc_objs(sgs[0], total_sgs, gfp);
+		sg = kmalloc_objs(sg[0], total_sgs, gfp);
 		if (!sgs || !sg) {
 			ret = -ENOMEM;
 			goto out;
@@ -1684,11 +1684,11 @@ static int virtio_fs_get_tree(struct fs_context *fsc)
 		goto out_err;

 	err = -ENOMEM;
-	fc = kzalloc(sizeof(struct fuse_conn), GFP_KERNEL);
+	fc = kzalloc_obj(struct fuse_conn, GFP_KERNEL);
 	if (!fc)
 		goto out_err;

-	fm = kzalloc(sizeof(struct fuse_mount), GFP_KERNEL);
+	fm = kzalloc_obj(struct fuse_mount, GFP_KERNEL);
 	if (!fm)
 		goto out_err;

@@ -1743,7 +1743,7 @@ static int virtio_fs_init_fs_context(struct fs_context *fsc)
 	if (fsc->purpose == FS_CONTEXT_FOR_SUBMOUNT)
 		return fuse_init_fs_context_submount(fsc);

-	ctx = kzalloc(sizeof(struct fuse_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct fuse_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	fsc->fs_private = ctx;
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index fdcac8e3f2ba..1cd8ec0bce83 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -2225,7 +2225,7 @@ static int gfs2_add_jextent(struct gfs2_jdesc *jd, u64 lblock, u64 dblock, u64 b
 		}
 	}

-	jext = kzalloc(sizeof(struct gfs2_journal_extent), GFP_NOFS);
+	jext = kzalloc_obj(struct gfs2_journal_extent, GFP_NOFS);
 	if (jext == NULL)
 		return -ENOMEM;
 	jext->dblock = dblock;
diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c
index 509e2f0d97e7..022dbb31e0d9 100644
--- a/fs/gfs2/dir.c
+++ b/fs/gfs2/dir.c
@@ -1593,7 +1593,7 @@ int gfs2_dir_read(struct inode *inode, struct dir_context *ctx,

 	error = -ENOMEM;
 	/* 96 is max number of dirents which can be stuffed into an inode */
-	darr = kmalloc_array(96, sizeof(struct gfs2_dirent *), GFP_NOFS);
+	darr = kmalloc_objs(struct gfs2_dirent *, 96, GFP_NOFS);
 	if (darr) {
 		g.pdent = (const struct gfs2_dirent **)darr;
 		g.offset = 0;
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
index 3e061e8115ec..9704f1ef6ad1 100644
--- a/fs/gfs2/file.c
+++ b/fs/gfs2/file.c
@@ -637,7 +637,7 @@ int gfs2_open_common(struct inode *inode, struct file *file)
 			file->f_mode |= FMODE_CAN_ODIRECT;
 	}

-	fp = kzalloc(sizeof(struct gfs2_file), GFP_NOFS);
+	fp = kzalloc_obj(struct gfs2_file, GFP_NOFS);
 	if (!fp)
 		return -ENOMEM;

@@ -1029,7 +1029,7 @@ static ssize_t gfs2_file_buffered_write(struct kiocb *iocb,
 	 */

 	if (inode == sdp->sd_rindex) {
-		statfs_gh = kmalloc(sizeof(*statfs_gh), GFP_NOFS);
+		statfs_gh = kmalloc_obj(*statfs_gh, GFP_NOFS);
 		if (!statfs_gh)
 			return -ENOMEM;
 	}
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index 6fb2731e8be1..2acbabccc8ad 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -1764,8 +1764,7 @@ int gfs2_glock_nq_m(unsigned int num_gh, struct gfs2_holder *ghs)
 	default:
 		if (num_gh <= 4)
 			break;
-		pph = kmalloc_array(num_gh, sizeof(struct gfs2_holder *),
-				    GFP_NOFS);
+		pph = kmalloc_objs(struct gfs2_holder *, num_gh, GFP_NOFS);
 		if (!pph)
 			return -ENOMEM;
 	}
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
index c7d57de7c8f0..f3f649fc5cb1 100644
--- a/fs/gfs2/ops_fstype.c
+++ b/fs/gfs2/ops_fstype.c
@@ -76,7 +76,7 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb)
 {
 	struct gfs2_sbd *sdp;

-	sdp = kzalloc(sizeof(struct gfs2_sbd), GFP_KERNEL);
+	sdp = kzalloc_obj(struct gfs2_sbd, GFP_KERNEL);
 	if (!sdp)
 		return NULL;

@@ -562,7 +562,7 @@ static int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh)
 			break;

 		error = -ENOMEM;
-		jd = kzalloc(sizeof(struct gfs2_jdesc), GFP_KERNEL);
+		jd = kzalloc_obj(struct gfs2_jdesc, GFP_KERNEL);
 		if (!jd)
 			break;

@@ -631,7 +631,7 @@ static int init_statfs(struct gfs2_sbd *sdp)
 	 * per_node metafs directory and save it in the sdp->sd_sc_inodes_list. */
 	list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
 		struct local_statfs_inode *lsi =
-			kmalloc(sizeof(struct local_statfs_inode), GFP_NOFS);
+			kmalloc_obj(struct local_statfs_inode, GFP_NOFS);
 		if (!lsi) {
 			error = -ENOMEM;
 			goto free_local;
@@ -1637,7 +1637,7 @@ static int gfs2_init_fs_context(struct fs_context *fc)
 {
 	struct gfs2_args *args;

-	args = kmalloc(sizeof(*args), GFP_KERNEL);
+	args = kmalloc_obj(*args, GFP_KERNEL);
 	if (args == NULL)
 		return -ENOMEM;

diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
index 1c3455093ae8..af3dfeed62fe 100644
--- a/fs/gfs2/quota.c
+++ b/fs/gfs2/quota.c
@@ -908,7 +908,7 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda,
 	gfs2_write_calc_reserv(ip, sizeof(struct gfs2_quota),
 			      &data_blocks, &ind_blocks);

-	ghs = kmalloc_array(num_qd, sizeof(struct gfs2_holder), GFP_NOFS);
+	ghs = kmalloc_objs(struct gfs2_holder, num_qd, GFP_NOFS);
 	if (!ghs)
 		return -ENOMEM;

@@ -1318,7 +1318,7 @@ int gfs2_quota_sync(struct super_block *sb, int type)
 	if (sb_rdonly(sdp->sd_vfs))
 		return 0;

-	qda = kcalloc(max_qd, sizeof(struct gfs2_quota_data *), GFP_KERNEL);
+	qda = kzalloc_objs(struct gfs2_quota_data *, max_qd, GFP_KERNEL);
 	if (!qda)
 		return -ENOMEM;

diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c
index 8c8202c68b64..616c46aa3434 100644
--- a/fs/gfs2/recovery.c
+++ b/fs/gfs2/recovery.c
@@ -69,7 +69,7 @@ int gfs2_revoke_add(struct gfs2_jdesc *jd, u64 blkno, unsigned int where)
 		return 0;
 	}

-	rr = kmalloc(sizeof(struct gfs2_revoke_replay), GFP_NOFS);
+	rr = kmalloc_obj(struct gfs2_revoke_replay, GFP_NOFS);
 	if (!rr)
 		return -ENOMEM;

diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
index 8a97ca734afc..441774cc07ce 100644
--- a/fs/gfs2/rgrp.c
+++ b/fs/gfs2/rgrp.c
@@ -763,7 +763,7 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd)
 	if (!length)
 		return -EINVAL;

-	rgd->rd_bits = kcalloc(length, sizeof(struct gfs2_bitmap), GFP_NOFS);
+	rgd->rd_bits = kzalloc_objs(struct gfs2_bitmap, length, GFP_NOFS);
 	if (!rgd->rd_bits)
 		return -ENOMEM;

@@ -2699,8 +2699,8 @@ void gfs2_rlist_add(struct gfs2_inode *ip, struct gfs2_rgrp_list *rlist,
 	if (rlist->rl_rgrps == rlist->rl_space) {
 		new_space = rlist->rl_space + 10;

-		tmp = kcalloc(new_space, sizeof(struct gfs2_rgrpd *),
-			      GFP_NOFS | __GFP_NOFAIL);
+		tmp = kzalloc_objs(struct gfs2_rgrpd *, new_space,
+				   GFP_NOFS | __GFP_NOFAIL);

 		if (rlist->rl_rgd) {
 			memcpy(tmp, rlist->rl_rgd,
@@ -2731,9 +2731,8 @@ void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist,
 {
 	unsigned int x;

-	rlist->rl_ghs = kmalloc_array(rlist->rl_rgrps,
-				      sizeof(struct gfs2_holder),
-				      GFP_NOFS | __GFP_NOFAIL);
+	rlist->rl_ghs = kmalloc_objs(struct gfs2_holder, rlist->rl_rgrps,
+				     GFP_NOFS | __GFP_NOFAIL);
 	for (x = 0; x < rlist->rl_rgrps; x++)
 		gfs2_holder_init(rlist->rl_rgd[x]->rd_gl, state, flags,
 				 &rlist->rl_ghs[x]);
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index d96160636161..9a655588c0c5 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -336,7 +336,7 @@ static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp)
 	 */

 	list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
-		lfcc = kmalloc(sizeof(struct lfcc), GFP_KERNEL);
+		lfcc = kmalloc_obj(struct lfcc, GFP_KERNEL);
 		if (!lfcc) {
 			error = -ENOMEM;
 			goto out;
@@ -860,7 +860,7 @@ static int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host
 	int error = 0, err;

 	memset(sc, 0, sizeof(struct gfs2_statfs_change_host));
-	gha = kmalloc_array(slots, sizeof(struct gfs2_holder), GFP_KERNEL);
+	gha = kmalloc_objs(struct gfs2_holder, slots, GFP_KERNEL);
 	if (!gha)
 		return -ENOMEM;
 	for (x = 0; x < slots; x++)
diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c
index df9c93de94c7..b9f48d6f10a9 100644
--- a/fs/gfs2/xattr.c
+++ b/fs/gfs2/xattr.c
@@ -467,7 +467,7 @@ static int gfs2_iter_unstuffed(struct gfs2_inode *ip, struct gfs2_ea_header *ea,
 	unsigned char *pos;
 	unsigned cp_size;

-	bh = kcalloc(nptrs, sizeof(struct buffer_head *), GFP_NOFS);
+	bh = kzalloc_objs(struct buffer_head *, nptrs, GFP_NOFS);
 	if (!bh)
 		return -ENOMEM;

diff --git a/fs/hfs/btree.c b/fs/hfs/btree.c
index 7bc425283d49..b5ee0e072935 100644
--- a/fs/hfs/btree.c
+++ b/fs/hfs/btree.c
@@ -28,7 +28,7 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id, btree_keycmp ke
 	sector_t start_block;
 	loff_t offset;

-	tree = kzalloc(sizeof(*tree), GFP_KERNEL);
+	tree = kzalloc_obj(*tree, GFP_KERNEL);
 	if (!tree)
 		return NULL;

diff --git a/fs/hfs/dir.c b/fs/hfs/dir.c
index 0c615c078650..80277979c09c 100644
--- a/fs/hfs/dir.c
+++ b/fs/hfs/dir.c
@@ -148,7 +148,7 @@ static int hfs_readdir(struct file *file, struct dir_context *ctx)
 	}
 	rd = file->private_data;
 	if (!rd) {
-		rd = kmalloc(sizeof(struct hfs_readdir_data), GFP_KERNEL);
+		rd = kmalloc_obj(struct hfs_readdir_data, GFP_KERNEL);
 		if (!rd) {
 			err = -ENOMEM;
 			goto out;
diff --git a/fs/hfs/super.c b/fs/hfs/super.c
index 97546d6b41f4..78dc9dabb0c1 100644
--- a/fs/hfs/super.c
+++ b/fs/hfs/super.c
@@ -411,7 +411,7 @@ static int hfs_init_fs_context(struct fs_context *fc)
 {
 	struct hfs_sb_info *hsb;

-	hsb = kzalloc(sizeof(struct hfs_sb_info), GFP_KERNEL);
+	hsb = kzalloc_obj(struct hfs_sb_info, GFP_KERNEL);
 	if (!hsb)
 		return -ENOMEM;

diff --git a/fs/hfsplus/btree.c b/fs/hfsplus/btree.c
index 229f25dc7c49..5016d97290c8 100644
--- a/fs/hfsplus/btree.c
+++ b/fs/hfsplus/btree.c
@@ -139,7 +139,7 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id)
 	struct page *page;
 	unsigned int size;

-	tree = kzalloc(sizeof(*tree), GFP_KERNEL);
+	tree = kzalloc_obj(*tree, GFP_KERNEL);
 	if (!tree)
 		return NULL;

diff --git a/fs/hfsplus/dir.c b/fs/hfsplus/dir.c
index ca5f74a140ec..9998b28aa8f7 100644
--- a/fs/hfsplus/dir.c
+++ b/fs/hfsplus/dir.c
@@ -263,7 +263,7 @@ static int hfsplus_readdir(struct file *file, struct dir_context *ctx)
 	}
 	rd = file->private_data;
 	if (!rd) {
-		rd = kmalloc(sizeof(struct hfsplus_readdir_data), GFP_KERNEL);
+		rd = kmalloc_obj(struct hfsplus_readdir_data, GFP_KERNEL);
 		if (!rd) {
 			err = -ENOMEM;
 			goto out;
diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c
index 592d8fbb748c..f60f37caea65 100644
--- a/fs/hfsplus/super.c
+++ b/fs/hfsplus/super.c
@@ -698,7 +698,7 @@ static int hfsplus_init_fs_context(struct fs_context *fc)
 {
 	struct hfsplus_sb_info *sbi;

-	sbi = kzalloc(sizeof(struct hfsplus_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct hfsplus_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

diff --git a/fs/hfsplus/unicode_test.c b/fs/hfsplus/unicode_test.c
index 5a7a6859efe3..c162c0fea4a8 100644
--- a/fs/hfsplus/unicode_test.c
+++ b/fs/hfsplus/unicode_test.c
@@ -22,7 +22,7 @@ static struct test_mock_string_env *setup_mock_str_env(u32 buf_size)
 {
 	struct test_mock_string_env *env;

-	env = kzalloc(sizeof(struct test_mock_string_env), GFP_KERNEL);
+	env = kzalloc_obj(struct test_mock_string_env, GFP_KERNEL);
 	if (!env)
 		return NULL;

@@ -393,7 +393,7 @@ static struct test_mock_sb *setup_mock_sb(void)
 {
 	struct test_mock_sb *ptr;

-	ptr = kzalloc(sizeof(struct test_mock_sb), GFP_KERNEL);
+	ptr = kzalloc_obj(struct test_mock_sb, GFP_KERNEL);
 	if (!ptr)
 		return NULL;

diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
index 51d26aa2b93e..2c463a8c0ab4 100644
--- a/fs/hostfs/hostfs_kern.c
+++ b/fs/hostfs/hostfs_kern.c
@@ -1047,7 +1047,7 @@ static int hostfs_init_fs_context(struct fs_context *fc)
 {
 	struct hostfs_fs_info *fsi;

-	fsi = kzalloc(sizeof(*fsi), GFP_KERNEL);
+	fsi = kzalloc_obj(*fsi, GFP_KERNEL);
 	if (!fsi)
 		return -ENOMEM;

diff --git a/fs/hpfs/dnode.c b/fs/hpfs/dnode.c
index 4ada525c5c43..dde764ebe246 100644
--- a/fs/hpfs/dnode.c
+++ b/fs/hpfs/dnode.c
@@ -33,7 +33,7 @@ int hpfs_add_pos(struct inode *inode, loff_t *pos)
 			if (hpfs_inode->i_rddir_off[i] == pos)
 				return 0;
 	if (!(i&0x0f)) {
-		ppos = kmalloc_array(i + 0x11, sizeof(loff_t *), GFP_NOFS);
+		ppos = kmalloc_objs(loff_t *, i + 0x11, GFP_NOFS);
 		if (!ppos) {
 			pr_err("out of memory for position list\n");
 			return -ENOMEM;
diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c
index 371aa6de8075..0f17b7710ae5 100644
--- a/fs/hpfs/super.c
+++ b/fs/hpfs/super.c
@@ -513,7 +513,7 @@ static int hpfs_fill_super(struct super_block *s, struct fs_context *fc)
 	struct hpfs_dirent *de = NULL;
 	struct quad_buffer_head qbh;

-	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
+	sbi = kzalloc_obj(*sbi, GFP_KERNEL);
 	if (!sbi) {
 		return -ENOMEM;
 	}
@@ -715,7 +715,7 @@ static int hpfs_init_fs_context(struct fs_context *fc)
 {
 	struct hpfs_fc_context *ctx;

-	ctx = kzalloc(sizeof(struct hpfs_fc_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct hpfs_fc_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index 95a5b23b4808..8e2c1fbdfd86 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -1407,7 +1407,7 @@ hugetlbfs_fill_super(struct super_block *sb, struct fs_context *fc)
 	struct hugetlbfs_fs_context *ctx = fc->fs_private;
 	struct hugetlbfs_sb_info *sbinfo;

-	sbinfo = kmalloc(sizeof(struct hugetlbfs_sb_info), GFP_KERNEL);
+	sbinfo = kmalloc_obj(struct hugetlbfs_sb_info, GFP_KERNEL);
 	if (!sbinfo)
 		return -ENOMEM;
 	sb->s_fs_info = sbinfo;
@@ -1478,7 +1478,7 @@ static int hugetlbfs_init_fs_context(struct fs_context *fc)
 {
 	struct hugetlbfs_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct hugetlbfs_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct hugetlbfs_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index 1fe19b4ee2f4..a0c46aadb97d 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -229,8 +229,7 @@ static struct iomap_folio_state *ifs_alloc(struct inode *inode,
 	 * The first state tracks per-block uptodate and the
 	 * second tracks per-block dirty state.
 	 */
-	ifs = kzalloc(struct_size(ifs, state,
-		      BITS_TO_LONGS(2 * nr_blocks)), gfp);
+	ifs = kzalloc_flex(*ifs, state, BITS_TO_LONGS(2 * nr_blocks), gfp);
 	if (!ifs)
 		return ifs;

diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c
index 8c1fd7573aee..438c00e526c6 100644
--- a/fs/iomap/direct-io.c
+++ b/fs/iomap/direct-io.c
@@ -677,7 +677,7 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
 	if (!iomi.len)
 		return NULL;

-	dio = kmalloc(sizeof(*dio), GFP_KERNEL);
+	dio = kmalloc_obj(*dio, GFP_KERNEL);
 	if (!dio)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/isofs/compress.c b/fs/isofs/compress.c
index 5f3b6da0e022..4aa8f0734456 100644
--- a/fs/isofs/compress.c
+++ b/fs/isofs/compress.c
@@ -75,7 +75,7 @@ static loff_t zisofs_uncompress_block(struct inode *inode, loff_t block_start,

 	/* Because zlib is not thread-safe, do all the I/O at the top. */
 	blocknum = block_start >> bufshift;
-	bhs = kcalloc(needblocks + 1, sizeof(*bhs), GFP_KERNEL);
+	bhs = kzalloc_objs(*bhs, needblocks + 1, GFP_KERNEL);
 	if (!bhs) {
 		*errp = -ENOMEM;
 		return 0;
@@ -333,8 +333,9 @@ static int zisofs_read_folio(struct file *file, struct folio *folio)
 		full_page = 0;
 		pcount = 1;
 	}
-	pages = kcalloc(max_t(unsigned int, zisofs_pages_per_cblock, 1),
-					sizeof(*pages), GFP_KERNEL);
+	pages = kzalloc_objs(*pages,
+			     max_t(unsigned int, zisofs_pages_per_cblock, 1),
+			     GFP_KERNEL);
 	if (!pages) {
 		folio_unlock(folio);
 		return -ENOMEM;
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index b7cbe126faf3..6597d0224835 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -589,7 +589,7 @@ static int isofs_fill_super(struct super_block *s, struct fs_context *fc)
 	unsigned int vol_desc_start;
 	int silent = fc->sb_flags & SB_SILENT;

-	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
+	sbi = kzalloc_obj(*sbi, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;
 	s->s_fs_info = sbi;
@@ -1557,7 +1557,7 @@ static int isofs_init_fs_context(struct fs_context *fc)
 {
 	struct isofs_options *opt;

-	opt = kzalloc(sizeof(*opt), GFP_KERNEL);
+	opt = kzalloc_obj(*opt, GFP_KERNEL);
 	if (!opt)
 		return -ENOMEM;

diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index c973162d5b31..05ea1e5af80d 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -1175,7 +1175,7 @@ static int jbd2_seq_info_open(struct inode *inode, struct file *file)
 	struct jbd2_stats_proc_session *s;
 	int rc, size;

-	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	s = kmalloc_obj(*s, GFP_KERNEL);
 	if (s == NULL)
 		return -ENOMEM;
 	size = sizeof(struct transaction_stats_s);
@@ -1525,7 +1525,7 @@ static journal_t *journal_init_common(struct block_device *bdev,
 	int err;
 	int n;

-	journal = kzalloc(sizeof(*journal), GFP_KERNEL);
+	journal = kzalloc_obj(*journal, GFP_KERNEL);
 	if (!journal)
 		return ERR_PTR(-ENOMEM);

@@ -1578,8 +1578,7 @@ static journal_t *journal_init_common(struct block_device *bdev,
 	n = journal->j_blocksize / jbd2_min_tag_size();
 	journal->j_wbufsize = n;
 	journal->j_fc_wbuf = NULL;
-	journal->j_wbuf = kmalloc_array(n, sizeof(struct buffer_head *),
-					GFP_KERNEL);
+	journal->j_wbuf = kmalloc_objs(struct buffer_head *, n, GFP_KERNEL);
 	if (!journal->j_wbuf)
 		goto err_cleanup;

@@ -2269,8 +2268,8 @@ jbd2_journal_initialize_fast_commit(journal_t *journal)

 	/* Are we called twice? */
 	WARN_ON(journal->j_fc_wbuf != NULL);
-	journal->j_fc_wbuf = kmalloc_array(num_fc_blks,
-				sizeof(struct buffer_head *), GFP_KERNEL);
+	journal->j_fc_wbuf = kmalloc_objs(struct buffer_head *, num_fc_blks,
+					  GFP_KERNEL);
 	if (!journal->j_fc_wbuf)
 		return -ENOMEM;

diff --git a/fs/jbd2/revoke.c b/fs/jbd2/revoke.c
index 1467f6790747..3aa9f82a8ef7 100644
--- a/fs/jbd2/revoke.c
+++ b/fs/jbd2/revoke.c
@@ -231,7 +231,7 @@ struct jbd2_revoke_table_s *jbd2_journal_init_revoke_table(int hash_size)
 	table->hash_size = hash_size;
 	table->hash_shift = shift;
 	table->hash_table =
-		kvmalloc_array(hash_size, sizeof(struct list_head), GFP_KERNEL);
+		kvmalloc_objs(struct list_head, hash_size, GFP_KERNEL);
 	if (!table->hash_table) {
 		kmem_cache_free(jbd2_revoke_table_cache, table);
 		table = NULL;
diff --git a/fs/jffs2/acl.c b/fs/jffs2/acl.c
index 888a7ceb6479..b7ece06cad80 100644
--- a/fs/jffs2/acl.c
+++ b/fs/jffs2/acl.c
@@ -133,8 +133,7 @@ static void *jffs2_acl_to_medium(const struct posix_acl *acl, size_t *size)
 	size_t i;

 	*size = jffs2_acl_size(acl->a_count);
-	header = kmalloc(struct_size(header, a_entries, acl->a_count),
-			GFP_KERNEL);
+	header = kmalloc_flex(*header, a_entries, acl->a_count, GFP_KERNEL);
 	if (!header)
 		return ERR_PTR(-ENOMEM);
 	header->a_version = cpu_to_je32(JFFS2_ACL_VERSION);
diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c
index fda9f4d6093f..d451c8a1fdac 100644
--- a/fs/jffs2/erase.c
+++ b/fs/jffs2/erase.c
@@ -43,7 +43,7 @@ static void jffs2_erase_block(struct jffs2_sb_info *c,
 	jffs2_dbg(1, "%s(): erase block %#08x (range %#08x-%#08x)\n",
 		  __func__,
 		  jeb->offset, jeb->offset, jeb->offset + c->sector_size);
-	instr = kzalloc(sizeof(struct erase_info), GFP_KERNEL);
+	instr = kzalloc_obj(struct erase_info, GFP_KERNEL);
 	if (!instr) {
 		pr_warn("kzalloc for struct erase_info in jffs2_erase_block failed. Refiling block for later\n");
 		mutex_lock(&c->erase_free_sem);
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c
index 764bba8ba999..ff469d44b92f 100644
--- a/fs/jffs2/fs.c
+++ b/fs/jffs2/fs.c
@@ -562,7 +562,8 @@ int jffs2_do_fill_super(struct super_block *sb, struct fs_context *fc)
 		return ret;

 	c->inocache_hashsize = calculate_inocache_hashsize(c->flash_size);
-	c->inocache_list = kcalloc(c->inocache_hashsize, sizeof(struct jffs2_inode_cache *), GFP_KERNEL);
+	c->inocache_list = kzalloc_objs(struct jffs2_inode_cache *,
+					c->inocache_hashsize, GFP_KERNEL);
 	if (!c->inocache_list) {
 		ret = -ENOMEM;
 		goto out_wbuf;
diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c
index f987f78a894e..eeca922d4da4 100644
--- a/fs/jffs2/readinode.c
+++ b/fs/jffs2/readinode.c
@@ -1392,7 +1392,7 @@ int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
 int jffs2_do_crccheck_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic)
 {
 	struct jffs2_raw_inode n;
-	struct jffs2_inode_info *f = kzalloc(sizeof(*f), GFP_KERNEL);
+	struct jffs2_inode_info *f = kzalloc_obj(*f, GFP_KERNEL);
 	int ret;

 	if (!f)
diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c
index 62879c218d4b..39063e2131d6 100644
--- a/fs/jffs2/scan.c
+++ b/fs/jffs2/scan.c
@@ -132,7 +132,7 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
 	}

 	if (jffs2_sum_active()) {
-		s = kzalloc(sizeof(struct jffs2_summary), GFP_KERNEL);
+		s = kzalloc_obj(struct jffs2_summary, GFP_KERNEL);
 		if (!s) {
 			JFFS2_WARNING("Can't allocate memory for summary\n");
 			ret = -ENOMEM;
diff --git a/fs/jffs2/summary.c b/fs/jffs2/summary.c
index d83372d3e1a0..b9df829eff56 100644
--- a/fs/jffs2/summary.c
+++ b/fs/jffs2/summary.c
@@ -27,7 +27,7 @@ int jffs2_sum_init(struct jffs2_sb_info *c)
 {
 	uint32_t sum_size = min_t(uint32_t, c->sector_size, MAX_SUMMARY_SIZE);

-	c->summary = kzalloc(sizeof(struct jffs2_summary), GFP_KERNEL);
+	c->summary = kzalloc_obj(struct jffs2_summary, GFP_KERNEL);

 	if (!c->summary) {
 		JFFS2_WARNING("Can't allocate memory for summary information!\n");
@@ -115,7 +115,8 @@ int jffs2_sum_add_padding_mem(struct jffs2_summary *s, uint32_t size)
 int jffs2_sum_add_inode_mem(struct jffs2_summary *s, struct jffs2_raw_inode *ri,
 				uint32_t ofs)
 {
-	struct jffs2_sum_inode_mem *temp = kmalloc(sizeof(struct jffs2_sum_inode_mem), GFP_KERNEL);
+	struct jffs2_sum_inode_mem *temp = kmalloc_obj(struct jffs2_sum_inode_mem,
+						       GFP_KERNEL);

 	if (!temp)
 		return -ENOMEM;
@@ -159,7 +160,7 @@ int jffs2_sum_add_xattr_mem(struct jffs2_summary *s, struct jffs2_raw_xattr *rx,
 {
 	struct jffs2_sum_xattr_mem *temp;

-	temp = kmalloc(sizeof(struct jffs2_sum_xattr_mem), GFP_KERNEL);
+	temp = kmalloc_obj(struct jffs2_sum_xattr_mem, GFP_KERNEL);
 	if (!temp)
 		return -ENOMEM;

@@ -177,7 +178,7 @@ int jffs2_sum_add_xref_mem(struct jffs2_summary *s, struct jffs2_raw_xref *rr, u
 {
 	struct jffs2_sum_xref_mem *temp;

-	temp = kmalloc(sizeof(struct jffs2_sum_xref_mem), GFP_KERNEL);
+	temp = kmalloc_obj(struct jffs2_sum_xref_mem, GFP_KERNEL);
 	if (!temp)
 		return -ENOMEM;

@@ -263,7 +264,8 @@ int jffs2_sum_add_kvec(struct jffs2_sb_info *c, const struct kvec *invecs,
 	switch (je16_to_cpu(node->u.nodetype)) {
 		case JFFS2_NODETYPE_INODE: {
 			struct jffs2_sum_inode_mem *temp =
-				kmalloc(sizeof(struct jffs2_sum_inode_mem), GFP_KERNEL);
+				kmalloc_obj(struct jffs2_sum_inode_mem,
+					    GFP_KERNEL);

 			if (!temp)
 				goto no_mem;
@@ -314,7 +316,8 @@ int jffs2_sum_add_kvec(struct jffs2_sb_info *c, const struct kvec *invecs,
 #ifdef CONFIG_JFFS2_FS_XATTR
 		case JFFS2_NODETYPE_XATTR: {
 			struct jffs2_sum_xattr_mem *temp;
-			temp = kmalloc(sizeof(struct jffs2_sum_xattr_mem), GFP_KERNEL);
+			temp = kmalloc_obj(struct jffs2_sum_xattr_mem,
+					   GFP_KERNEL);
 			if (!temp)
 				goto no_mem;

@@ -329,7 +332,8 @@ int jffs2_sum_add_kvec(struct jffs2_sb_info *c, const struct kvec *invecs,
 		}
 		case JFFS2_NODETYPE_XREF: {
 			struct jffs2_sum_xref_mem *temp;
-			temp = kmalloc(sizeof(struct jffs2_sum_xref_mem), GFP_KERNEL);
+			temp = kmalloc_obj(struct jffs2_sum_xref_mem,
+					   GFP_KERNEL);
 			if (!temp)
 				goto no_mem;
 			temp->nodetype = node->r.nodetype;
diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
index 4545f885c41e..48fbf1594ce8 100644
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
@@ -311,7 +311,7 @@ static int jffs2_init_fs_context(struct fs_context *fc)
 {
 	struct jffs2_sb_info *ctx;

-	ctx = kzalloc(sizeof(struct jffs2_sb_info), GFP_KERNEL);
+	ctx = kzalloc_obj(struct jffs2_sb_info, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
index 3ab3f0ff7ebb..9775b9b84504 100644
--- a/fs/jffs2/wbuf.c
+++ b/fs/jffs2/wbuf.c
@@ -92,7 +92,7 @@ static void jffs2_wbuf_dirties_inode(struct jffs2_sb_info *c, uint32_t ino)
 	if (jffs2_wbuf_pending_for_ino(c, ino))
 		return;

-	new = kmalloc(sizeof(*new), GFP_KERNEL);
+	new = kmalloc_obj(*new, GFP_KERNEL);
 	if (!new) {
 		jffs2_dbg(1, "No memory to allocate inodirty. Fallback to all considered dirty\n");
 		jffs2_clear_wbuf_ino_list(c);
diff --git a/fs/jffs2/xattr.c b/fs/jffs2/xattr.c
index defb4162c3d5..4452e6837b34 100644
--- a/fs/jffs2/xattr.c
+++ b/fs/jffs2/xattr.c
@@ -784,8 +784,8 @@ int jffs2_build_xattr_subsystem(struct jffs2_sb_info *c)

 	BUG_ON(!(c->flags & JFFS2_SB_FLAG_BUILDING));

-	xref_tmphash = kcalloc(XREF_TMPHASH_SIZE,
-			       sizeof(struct jffs2_xattr_ref *), GFP_KERNEL);
+	xref_tmphash = kzalloc_objs(struct jffs2_xattr_ref *, XREF_TMPHASH_SIZE,
+				    GFP_KERNEL);
 	if (!xref_tmphash)
 		return -ENOMEM;

diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c
index cdfa699cd7c8..368fcdd8c328 100644
--- a/fs/jfs/jfs_dmap.c
+++ b/fs/jfs/jfs_dmap.c
@@ -161,7 +161,7 @@ int dbMount(struct inode *ipbmap)
 	 * allocate/initialize the in-memory bmap descriptor
 	 */
 	/* allocate memory for the in-memory bmap descriptor */
-	bmp = kmalloc(sizeof(struct bmap), GFP_KERNEL);
+	bmp = kmalloc_obj(struct bmap, GFP_KERNEL);
 	if (bmp == NULL)
 		return -ENOMEM;

@@ -1593,7 +1593,7 @@ s64 dbDiscardAG(struct inode *ip, int agno, s64 minlen)
 	max_ranges = nblocks;
 	do_div(max_ranges, minlen);
 	range_cnt = min_t(u64, max_ranges + 1, 32 * 1024);
-	totrim = kmalloc_array(range_cnt, sizeof(struct range2trim), GFP_NOFS);
+	totrim = kmalloc_objs(struct range2trim, range_cnt, GFP_NOFS);
 	if (totrim == NULL) {
 		jfs_error(bmp->db_ipbmap->i_sb, "no memory for trim array\n");
 		IWRITE_UNLOCK(ipbmap);
diff --git a/fs/jfs/jfs_imap.c b/fs/jfs/jfs_imap.c
index ecb8e05b8b84..739fcb4a6fc8 100644
--- a/fs/jfs/jfs_imap.c
+++ b/fs/jfs/jfs_imap.c
@@ -102,7 +102,7 @@ int diMount(struct inode *ipimap)
 	 * allocate/initialize the in-memory inode map control structure
 	 */
 	/* allocate the in-memory inode map control structure. */
-	imap = kzalloc(sizeof(struct inomap), GFP_KERNEL);
+	imap = kzalloc_obj(struct inomap, GFP_KERNEL);
 	if (imap == NULL)
 		return -ENOMEM;

diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c
index 5b1c5da04163..204cca8dd5d4 100644
--- a/fs/jfs/jfs_logmgr.c
+++ b/fs/jfs/jfs_logmgr.c
@@ -1087,7 +1087,7 @@ int lmLogOpen(struct super_block *sb)
 		}
 	}

-	if (!(log = kzalloc(sizeof(struct jfs_log), GFP_KERNEL))) {
+	if (!(log = kzalloc_obj(struct jfs_log, GFP_KERNEL))) {
 		mutex_unlock(&jfs_log_mutex);
 		return -ENOMEM;
 	}
@@ -1156,7 +1156,7 @@ static int open_inline_log(struct super_block *sb)
 	struct jfs_log *log;
 	int rc;

-	if (!(log = kzalloc(sizeof(struct jfs_log), GFP_KERNEL)))
+	if (!(log = kzalloc_obj(struct jfs_log, GFP_KERNEL)))
 		return -ENOMEM;
 	INIT_LIST_HEAD(&log->sb_list);
 	init_waitqueue_head(&log->syncwait);
@@ -1190,7 +1190,7 @@ static int open_dummy_log(struct super_block *sb)

 	mutex_lock(&jfs_log_mutex);
 	if (!dummy_log) {
-		dummy_log = kzalloc(sizeof(struct jfs_log), GFP_KERNEL);
+		dummy_log = kzalloc_obj(struct jfs_log, GFP_KERNEL);
 		if (!dummy_log) {
 			mutex_unlock(&jfs_log_mutex);
 			return -ENOMEM;
@@ -1818,7 +1818,7 @@ static int lbmLogInit(struct jfs_log * log)
 			goto error;
 		buffer = page_address(page);
 		for (offset = 0; offset < PAGE_SIZE; offset += LOGPSIZE) {
-			lbuf = kmalloc(sizeof(struct lbuf), GFP_KERNEL);
+			lbuf = kmalloc_obj(struct lbuf, GFP_KERNEL);
 			if (lbuf == NULL) {
 				if (offset == 0)
 					__free_page(page);
diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c
index 871cf4fb3636..64c6eaa7f3f2 100644
--- a/fs/jfs/jfs_metapage.c
+++ b/fs/jfs/jfs_metapage.c
@@ -98,7 +98,7 @@ static inline int insert_metapage(struct folio *folio, struct metapage *mp)

 	a = folio->private;
 	if (!a) {
-		a = kzalloc(sizeof(struct meta_anchor), GFP_NOFS);
+		a = kzalloc_obj(struct meta_anchor, GFP_NOFS);
 		if (!a)
 			return -ENOMEM;
 		folio_attach_private(folio, a);
diff --git a/fs/jfs/super.c b/fs/jfs/super.c
index 3cfb86c5a36e..4c1510091fe2 100644
--- a/fs/jfs/super.c
+++ b/fs/jfs/super.c
@@ -449,7 +449,7 @@ static int jfs_fill_super(struct super_block *sb, struct fs_context *fc)

 	jfs_info("In jfs_read_super: s_flags=0x%lx", sb->s_flags);

-	sbi = kzalloc(sizeof(struct jfs_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct jfs_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

@@ -912,7 +912,7 @@ static int jfs_init_fs_context(struct fs_context *fc)
 {
 	struct jfs_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
index 29baeeb97871..3d0704e21f71 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -989,7 +989,7 @@ struct kernfs_root *kernfs_create_root(struct kernfs_syscall_ops *scops,
 	struct kernfs_root *root;
 	struct kernfs_node *kn;

-	root = kzalloc(sizeof(*root), GFP_KERNEL);
+	root = kzalloc_obj(*root, GFP_KERNEL);
 	if (!root)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c
index 9adf36e6364b..d338875f0258 100644
--- a/fs/kernfs/file.c
+++ b/fs/kernfs/file.c
@@ -540,7 +540,7 @@ static int kernfs_get_open_node(struct kernfs_node *kn,

 	if (!on) {
 		/* not there, initialize a new one */
-		on = kzalloc(sizeof(*on), GFP_KERNEL);
+		on = kzalloc_obj(*on, GFP_KERNEL);
 		if (!on) {
 			mutex_unlock(mutex);
 			return -ENOMEM;
@@ -638,7 +638,7 @@ static int kernfs_fop_open(struct inode *inode, struct file *file)

 	/* allocate a kernfs_open_file for the file */
 	error = -ENOMEM;
-	of = kzalloc(sizeof(struct kernfs_open_file), GFP_KERNEL);
+	of = kzalloc_obj(struct kernfs_open_file, GFP_KERNEL);
 	if (!of)
 		goto err_out;

diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c
index 3ac52e141766..dd38e2e21a17 100644
--- a/fs/kernfs/mount.c
+++ b/fs/kernfs/mount.c
@@ -370,7 +370,7 @@ int kernfs_get_tree(struct fs_context *fc)
 	struct kernfs_super_info *info;
 	int error;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -451,7 +451,7 @@ static void __init kernfs_mutex_init(void)

 static void __init kernfs_lock_init(void)
 {
-	kernfs_locks = kmalloc(sizeof(struct kernfs_global_locks), GFP_KERNEL);
+	kernfs_locks = kmalloc_obj(struct kernfs_global_locks, GFP_KERNEL);
 	WARN_ON(!kernfs_locks);

 	kernfs_mutex_init();
diff --git a/fs/libfs.c b/fs/libfs.c
index f1860dff86f2..361d5203e464 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -731,7 +731,7 @@ struct pseudo_fs_context *init_pseudo(struct fs_context *fc,
 {
 	struct pseudo_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct pseudo_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct pseudo_fs_context, GFP_KERNEL);
 	if (likely(ctx)) {
 		ctx->magic = magic;
 		fc->fs_private = ctx;
@@ -1320,7 +1320,7 @@ int simple_attr_open(struct inode *inode, struct file *file,
 {
 	struct simple_attr *attr;

-	attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_obj(*attr, GFP_KERNEL);
 	if (!attr)
 		return -ENOMEM;

diff --git a/fs/lockd/clntlock.c b/fs/lockd/clntlock.c
index a7e0519ec024..372fe0cf830f 100644
--- a/fs/lockd/clntlock.c
+++ b/fs/lockd/clntlock.c
@@ -233,7 +233,7 @@ reclaimer(void *ptr)
 	u32 nsmstate;
 	struct net *net = host->net;

-	req = kmalloc(sizeof(*req), GFP_KERNEL);
+	req = kmalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return 0;

diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
index cebcc283b7ce..e189b3ddfedf 100644
--- a/fs/lockd/clntproc.c
+++ b/fs/lockd/clntproc.c
@@ -105,7 +105,7 @@ static struct nlm_lockowner *nlmclnt_find_lockowner(struct nlm_host *host, fl_ow
 	res = __nlmclnt_find_lockowner(host, owner);
 	if (res == NULL) {
 		spin_unlock(&host->h_lock);
-		new = kmalloc(sizeof(*new), GFP_KERNEL);
+		new = kmalloc_obj(*new, GFP_KERNEL);
 		spin_lock(&host->h_lock);
 		res = __nlmclnt_find_lockowner(host, owner);
 		if (res == NULL && new != NULL) {
@@ -208,7 +208,7 @@ struct nlm_rqst *nlm_alloc_call(struct nlm_host *host)
 	struct nlm_rqst	*call;

 	for(;;) {
-		call = kzalloc(sizeof(*call), GFP_KERNEL);
+		call = kzalloc_obj(*call, GFP_KERNEL);
 		if (call != NULL) {
 			refcount_set(&call->a_count, 1);
 			locks_init_lock(&call->a_args.lock.fl);
diff --git a/fs/lockd/host.c b/fs/lockd/host.c
index 5e6877c37f73..12a745a543e0 100644
--- a/fs/lockd/host.c
+++ b/fs/lockd/host.c
@@ -126,7 +126,7 @@ static struct nlm_host *nlm_alloc_host(struct nlm_lookup_host_info *ni,
 		}
 	}

-	host = kmalloc(sizeof(*host), GFP_KERNEL);
+	host = kmalloc_obj(*host, GFP_KERNEL);
 	if (unlikely(host == NULL)) {
 		dprintk("lockd: %s failed; no memory\n", __func__);
 		nsm_release(nsm);
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
index 712df1e025d8..1dee1da9ee0f 100644
--- a/fs/lockd/svclock.c
+++ b/fs/lockd/svclock.c
@@ -233,7 +233,7 @@ nlmsvc_create_block(struct svc_rqst *rqstp, struct nlm_host *host,
 		return NULL;

 	/* Allocate memory for block, and initialize arguments */
-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (block == NULL)
 		goto failed;
 	kref_init(&block->b_count);
@@ -380,7 +380,7 @@ static struct nlm_lockowner *nlmsvc_find_lockowner(struct nlm_host *host, pid_t

 	if (res == NULL) {
 		spin_unlock(&host->h_lock);
-		new = kmalloc(sizeof(*res), GFP_KERNEL);
+		new = kmalloc_obj(*res, GFP_KERNEL);
 		spin_lock(&host->h_lock);
 		res = __nlmsvc_find_lockowner(host, pid);
 		if (res == NULL && new != NULL) {
diff --git a/fs/lockd/svcsubs.c b/fs/lockd/svcsubs.c
index 9103896164f6..fcfeaf6d6855 100644
--- a/fs/lockd/svcsubs.c
+++ b/fs/lockd/svcsubs.c
@@ -128,7 +128,7 @@ nlm_lookup_file(struct svc_rqst *rqstp, struct nlm_file **result,
 	nlm_debug_print_fh("creating file for", &lock->fh);

 	nfserr = nlm_lck_denied_nolocks;
-	file = kzalloc(sizeof(*file), GFP_KERNEL);
+	file = kzalloc_obj(*file, GFP_KERNEL);
 	if (!file)
 		goto out_free;

diff --git a/fs/mbcache.c b/fs/mbcache.c
index e60a840999aa..19cb8eb6744e 100644
--- a/fs/mbcache.c
+++ b/fs/mbcache.c
@@ -358,16 +358,15 @@ struct mb_cache *mb_cache_create(int bucket_bits)
 	unsigned long bucket_count = 1UL << bucket_bits;
 	unsigned long i;

-	cache = kzalloc(sizeof(struct mb_cache), GFP_KERNEL);
+	cache = kzalloc_obj(struct mb_cache, GFP_KERNEL);
 	if (!cache)
 		goto err_out;
 	cache->c_bucket_bits = bucket_bits;
 	cache->c_max_entries = bucket_count << 4;
 	INIT_LIST_HEAD(&cache->c_list);
 	spin_lock_init(&cache->c_list_lock);
-	cache->c_hash = kmalloc_array(bucket_count,
-				      sizeof(struct hlist_bl_head),
-				      GFP_KERNEL);
+	cache->c_hash = kmalloc_objs(struct hlist_bl_head, bucket_count,
+				     GFP_KERNEL);
 	if (!cache->c_hash) {
 		kfree(cache);
 		goto err_out;
diff --git a/fs/minix/inode.c b/fs/minix/inode.c
index c8c6b2135abe..495d31b8cd0e 100644
--- a/fs/minix/inode.c
+++ b/fs/minix/inode.c
@@ -226,7 +226,7 @@ static int minix_fill_super(struct super_block *s, struct fs_context *fc)
 	int ret = -EINVAL;
 	int silent = fc->sb_flags & SB_SILENT;

-	sbi = kzalloc(sizeof(struct minix_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct minix_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;
 	s->s_fs_info = sbi;
diff --git a/fs/mnt_idmapping.c b/fs/mnt_idmapping.c
index a37991fdb194..6472c4ea3d1e 100644
--- a/fs/mnt_idmapping.c
+++ b/fs/mnt_idmapping.c
@@ -289,7 +289,7 @@ struct mnt_idmap *alloc_mnt_idmap(struct user_namespace *mnt_userns)
 	struct mnt_idmap *idmap;
 	int ret;

-	idmap = kzalloc(sizeof(struct mnt_idmap), GFP_KERNEL_ACCOUNT);
+	idmap = kzalloc_obj(struct mnt_idmap, GFP_KERNEL_ACCOUNT);
 	if (!idmap)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/namei.c b/fs/namei.c
index 5fe6cac48df8..58f715f7657e 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -790,8 +790,8 @@ static bool nd_alloc_stack(struct nameidata *nd)
 {
 	struct saved *p;

-	p= kmalloc_array(MAXSYMLINKS, sizeof(struct saved),
-			 nd->flags & LOOKUP_RCU ? GFP_ATOMIC : GFP_KERNEL);
+	p= kmalloc_objs(struct saved, MAXSYMLINKS,
+			nd->flags & LOOKUP_RCU ? GFP_ATOMIC : GFP_KERNEL);
 	if (unlikely(!p))
 		return false;
 	memcpy(p, nd->internal, sizeof(nd->internal));
diff --git a/fs/namespace.c b/fs/namespace.c
index a67cbe42746d..1cb7fa1a02ed 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -889,7 +889,7 @@ static int get_mountpoint(struct dentry *dentry, struct pinned_mountpoint *m)
 	}

 	if (!mp)
-		mp = kmalloc(sizeof(struct mountpoint), GFP_KERNEL);
+		mp = kmalloc_obj(struct mountpoint, GFP_KERNEL);
 	if (!mp)
 		return -ENOMEM;

@@ -2226,7 +2226,7 @@ static inline bool extend_array(struct path **res, struct path **to_free,

 	if (likely(n < *count))
 		return true;
-	p = kmalloc_array(new_count, sizeof(struct path), GFP_KERNEL);
+	p = kmalloc_objs(struct path, new_count, GFP_KERNEL);
 	if (p && *count)
 		memcpy(p, *res, *count * sizeof(struct path));
 	*count = new_count;
@@ -4187,7 +4187,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns, bool a
 	if (!ucounts)
 		return ERR_PTR(-ENOSPC);

-	new_ns = kzalloc(sizeof(struct mnt_namespace), GFP_KERNEL_ACCOUNT);
+	new_ns = kzalloc_obj(struct mnt_namespace, GFP_KERNEL_ACCOUNT);
 	if (!new_ns) {
 		dec_mnt_namespaces(ucounts);
 		return ERR_PTR(-ENOMEM);
diff --git a/fs/netfs/buffered_read.c b/fs/netfs/buffered_read.c
index 37ab6f28b5ad..60073d41a387 100644
--- a/fs/netfs/buffered_read.c
+++ b/fs/netfs/buffered_read.c
@@ -429,7 +429,7 @@ static int netfs_read_gaps(struct file *file, struct folio *folio)
 	 * end get copied to, but the middle is discarded.
 	 */
 	ret = -ENOMEM;
-	bvec = kmalloc_array(nr_bvec, sizeof(*bvec), GFP_KERNEL);
+	bvec = kmalloc_objs(*bvec, nr_bvec, GFP_KERNEL);
 	if (!bvec)
 		goto discard;

diff --git a/fs/netfs/buffered_write.c b/fs/netfs/buffered_write.c
index f9d62abef2ac..8fe514447df6 100644
--- a/fs/netfs/buffered_write.c
+++ b/fs/netfs/buffered_write.c
@@ -302,7 +302,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
 				goto copied;
 			}

-			finfo = kzalloc(sizeof(*finfo), GFP_KERNEL);
+			finfo = kzalloc_obj(*finfo, GFP_KERNEL);
 			if (!finfo) {
 				iov_iter_revert(iter, copied);
 				ret = -ENOMEM;
diff --git a/fs/netfs/fscache_cache.c b/fs/netfs/fscache_cache.c
index 8f70f8da064b..e709617b64d5 100644
--- a/fs/netfs/fscache_cache.c
+++ b/fs/netfs/fscache_cache.c
@@ -25,7 +25,7 @@ static struct fscache_cache *fscache_alloc_cache(const char *name)
 {
 	struct fscache_cache *cache;

-	cache = kzalloc(sizeof(*cache), GFP_KERNEL);
+	cache = kzalloc_obj(*cache, GFP_KERNEL);
 	if (cache) {
 		if (name) {
 			cache->name = kstrdup(name, GFP_KERNEL);
diff --git a/fs/netfs/fscache_io.c b/fs/netfs/fscache_io.c
index e4308457633c..37f05b4d3469 100644
--- a/fs/netfs/fscache_io.c
+++ b/fs/netfs/fscache_io.c
@@ -223,7 +223,7 @@ void __fscache_write_to_cache(struct fscache_cookie *cookie,

 	_enter("%llx,%zx", start, len);

-	wreq = kzalloc(sizeof(struct fscache_write_request), GFP_NOFS);
+	wreq = kzalloc_obj(struct fscache_write_request, GFP_NOFS);
 	if (!wreq)
 		goto abandon;
 	wreq->mapping		= mapping;
diff --git a/fs/netfs/fscache_volume.c b/fs/netfs/fscache_volume.c
index ced14ac78cc1..57a9f12e79aa 100644
--- a/fs/netfs/fscache_volume.c
+++ b/fs/netfs/fscache_volume.c
@@ -230,8 +230,7 @@ static struct fscache_volume *fscache_alloc_volume(const char *volume_key,
 	if (IS_ERR(cache))
 		return NULL;

-	volume = kzalloc(struct_size(volume, coherency, coherency_len),
-			 GFP_KERNEL);
+	volume = kzalloc_flex(*volume, coherency, coherency_len, GFP_KERNEL);
 	if (!volume)
 		goto err_cache;

diff --git a/fs/netfs/rolling_buffer.c b/fs/netfs/rolling_buffer.c
index 207b6a326651..a17fbf9853a4 100644
--- a/fs/netfs/rolling_buffer.c
+++ b/fs/netfs/rolling_buffer.c
@@ -27,7 +27,7 @@ struct folio_queue *netfs_folioq_alloc(unsigned int rreq_id, gfp_t gfp,
 {
 	struct folio_queue *fq;

-	fq = kmalloc(sizeof(*fq), gfp);
+	fq = kmalloc_obj(*fq, gfp);
 	if (fq) {
 		netfs_stat(&netfs_n_folioq);
 		folioq_init(fq, rreq_id);
diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
index 0e4c67373e4f..cb0a645aeb50 100644
--- a/fs/nfs/blocklayout/blocklayout.c
+++ b/fs/nfs/blocklayout/blocklayout.c
@@ -74,7 +74,7 @@ static inline struct parallel_io *alloc_parallel(void *data)
 {
 	struct parallel_io *rv;

-	rv  = kmalloc(sizeof(*rv), GFP_NOFS);
+	rv = kmalloc_obj(*rv, GFP_NOFS);
 	if (rv) {
 		rv->data = data;
 		kref_init(&rv->refcnt);
@@ -461,7 +461,7 @@ static struct pnfs_layout_hdr *__bl_alloc_layout_hdr(struct inode *inode,
 	struct pnfs_block_layout *bl;

 	dprintk("%s enter\n", __func__);
-	bl = kzalloc(sizeof(*bl), gfp_flags);
+	bl = kzalloc_obj(*bl, gfp_flags);
 	if (!bl)
 		return NULL;

@@ -619,7 +619,7 @@ bl_alloc_extent(struct xdr_stream *xdr, struct pnfs_layout_hdr *lo,
 	if (!p)
 		return -EIO;

-	be = kzalloc(sizeof(*be), GFP_NOFS);
+	be = kzalloc_obj(*be, GFP_NOFS);
 	if (!be)
 		return -ENOMEM;

@@ -684,7 +684,7 @@ bl_alloc_lseg(struct pnfs_layout_hdr *lo, struct nfs4_layoutget_res *lgr,

 	dprintk("---> %s\n", __func__);

-	lseg = kzalloc(sizeof(*lseg), gfp_mask);
+	lseg = kzalloc_obj(*lseg, gfp_mask);
 	if (!lseg)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/nfs/blocklayout/dev.c b/fs/nfs/blocklayout/dev.c
index 134d7f760a33..cc6327d97a91 100644
--- a/fs/nfs/blocklayout/dev.c
+++ b/fs/nfs/blocklayout/dev.c
@@ -461,8 +461,8 @@ bl_parse_concat(struct nfs_server *server, struct pnfs_block_dev *d,
 	u64 len = 0;
 	int ret, i;

-	d->children = kcalloc(v->concat.volumes_count,
-			sizeof(struct pnfs_block_dev), gfp_mask);
+	d->children = kzalloc_objs(struct pnfs_block_dev,
+				   v->concat.volumes_count, gfp_mask);
 	if (!d->children)
 		return -ENOMEM;

@@ -490,8 +490,8 @@ bl_parse_stripe(struct nfs_server *server, struct pnfs_block_dev *d,
 	u64 len = 0;
 	int ret, i;

-	d->children = kcalloc(v->stripe.volumes_count,
-			sizeof(struct pnfs_block_dev), gfp_mask);
+	d->children = kzalloc_objs(struct pnfs_block_dev,
+				   v->stripe.volumes_count, gfp_mask);
 	if (!d->children)
 		return -ENOMEM;

@@ -559,8 +559,7 @@ bl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
 		goto out_free_scratch;
 	nr_volumes = be32_to_cpup(p++);

-	volumes = kcalloc(nr_volumes, sizeof(struct pnfs_block_volume),
-			  gfp_mask);
+	volumes = kzalloc_objs(struct pnfs_block_volume, nr_volumes, gfp_mask);
 	if (!volumes)
 		goto out_free_scratch;

@@ -570,7 +569,7 @@ bl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
 			goto out_free_volumes;
 	}

-	top = kzalloc(sizeof(*top), gfp_mask);
+	top = kzalloc_obj(*top, gfp_mask);
 	if (!top)
 		goto out_free_volumes;

diff --git a/fs/nfs/blocklayout/extent_tree.c b/fs/nfs/blocklayout/extent_tree.c
index 315949a7e92d..7393118c42a2 100644
--- a/fs/nfs/blocklayout/extent_tree.c
+++ b/fs/nfs/blocklayout/extent_tree.c
@@ -201,7 +201,7 @@ __ext_tree_remove(struct rb_root *root,
 		if (len1 > 0) {
 			struct pnfs_block_extent *new;

-			new = kzalloc(sizeof(*new), GFP_ATOMIC);
+			new = kzalloc_obj(*new, GFP_ATOMIC);
 			if (!new)
 				return -ENOMEM;

@@ -384,7 +384,7 @@ ext_tree_split(struct rb_root *root, struct pnfs_block_extent *be,
 	struct pnfs_block_extent *new;
 	sector_t orig_len = be->be_length;

-	new = kzalloc(sizeof(*new), GFP_ATOMIC);
+	new = kzalloc_obj(*new, GFP_ATOMIC);
 	if (!new)
 		return -ENOMEM;

@@ -653,8 +653,9 @@ ext_tree_prepare_commit(struct nfs4_layoutcommit_args *arg)
 		count = 0;

 		arg->layoutupdate_pages =
-			kcalloc(DIV_ROUND_UP(buffer_size, PAGE_SIZE),
-				sizeof(struct page *), GFP_NOFS);
+			kzalloc_objs(struct page *,
+				     DIV_ROUND_UP(buffer_size, PAGE_SIZE),
+				     GFP_NOFS);
 		if (!arg->layoutupdate_pages)
 			return -ENOMEM;

diff --git a/fs/nfs/cache_lib.c b/fs/nfs/cache_lib.c
index ef6729568432..90fa1e4440be 100644
--- a/fs/nfs/cache_lib.c
+++ b/fs/nfs/cache_lib.c
@@ -96,7 +96,7 @@ struct nfs_cache_defer_req *nfs_cache_defer_req_alloc(void)
 {
 	struct nfs_cache_defer_req *dreq;

-	dreq = kzalloc(sizeof(*dreq), GFP_KERNEL);
+	dreq = kzalloc_obj(*dreq, GFP_KERNEL);
 	if (dreq) {
 		init_completion(&dreq->completion);
 		refcount_set(&dreq->count, 1);
diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c
index 805eb3764186..1c94a97efd31 100644
--- a/fs/nfs/callback_proc.c
+++ b/fs/nfs/callback_proc.c
@@ -718,7 +718,7 @@ __be32 nfs4_callback_offload(void *data, void *dummy,
 	struct nfs4_copy_state *copy, *tmp_copy;
 	bool found = false;

-	copy = kzalloc(sizeof(struct nfs4_copy_state), GFP_KERNEL);
+	copy = kzalloc_obj(struct nfs4_copy_state, GFP_KERNEL);
 	if (!copy)
 		return cpu_to_be32(NFS4ERR_DELAY);

diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
index c2fa4a91db26..857393803e71 100644
--- a/fs/nfs/callback_xdr.c
+++ b/fs/nfs/callback_xdr.c
@@ -272,7 +272,7 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp,
 	if (n == 0)
 		goto out;

-	args->devs = kmalloc_array(n, sizeof(*args->devs), GFP_KERNEL);
+	args->devs = kmalloc_objs(*args->devs, n, GFP_KERNEL);
 	if (!args->devs) {
 		status = htonl(NFS4ERR_DELAY);
 		goto out;
@@ -378,9 +378,9 @@ static __be32 decode_rc_list(struct xdr_stream *xdr,
 			     rc_list->rcl_nrefcalls * 2 * sizeof(uint32_t));
 		if (unlikely(p == NULL))
 			goto out;
-		rc_list->rcl_refcalls = kmalloc_array(rc_list->rcl_nrefcalls,
-						sizeof(*rc_list->rcl_refcalls),
-						GFP_KERNEL);
+		rc_list->rcl_refcalls = kmalloc_objs(*rc_list->rcl_refcalls,
+						     rc_list->rcl_nrefcalls,
+						     GFP_KERNEL);
 		if (unlikely(rc_list->rcl_refcalls == NULL))
 			goto out;
 		for (i = 0; i < rc_list->rcl_nrefcalls; i++) {
@@ -419,9 +419,8 @@ static __be32 decode_cb_sequence_args(struct svc_rqst *rqstp,
 	args->csa_nrclists = ntohl(*p++);
 	args->csa_rclists = NULL;
 	if (args->csa_nrclists) {
-		args->csa_rclists = kmalloc_array(args->csa_nrclists,
-						  sizeof(*args->csa_rclists),
-						  GFP_KERNEL);
+		args->csa_rclists = kmalloc_objs(*args->csa_rclists,
+						 args->csa_nrclists, GFP_KERNEL);
 		if (unlikely(args->csa_rclists == NULL))
 			return htonl(NFS4ERR_RESOURCE);

diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index fd15731cf361..be6e3b61735d 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -150,7 +150,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init)
 	struct nfs_client *clp;
 	int err = -ENOMEM;

-	if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL)
+	if ((clp = kzalloc_obj(*clp, GFP_KERNEL)) == NULL)
 		goto error_0;

 	clp->cl_minorversion = cl_init->minorversion;
@@ -1044,7 +1044,7 @@ struct nfs_server *nfs_alloc_server(void)
 {
 	struct nfs_server *server;

-	server = kzalloc(sizeof(struct nfs_server), GFP_KERNEL);
+	server = kzalloc_obj(struct nfs_server, GFP_KERNEL);
 	if (!server)
 		return NULL;

diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
index 94103f8d3f21..cf40ced95305 100644
--- a/fs/nfs/delegation.c
+++ b/fs/nfs/delegation.c
@@ -442,7 +442,7 @@ int nfs_inode_set_delegation(struct inode *inode, const struct cred *cred,
 	struct nfs_delegation *freeme = NULL;
 	int status = 0;

-	delegation = kmalloc(sizeof(*delegation), GFP_KERNEL_ACCOUNT);
+	delegation = kmalloc_obj(*delegation, GFP_KERNEL_ACCOUNT);
 	if (delegation == NULL)
 		return -ENOMEM;
 	nfs4_stateid_copy(&delegation->stateid, stateid);
@@ -1602,8 +1602,9 @@ int nfs4_delegation_hash_alloc(struct nfs_server *server)

 	delegation_buckets = roundup_pow_of_two(nfs_delegation_watermark / 16);
 	server->delegation_hash_mask = delegation_buckets - 1;
-	server->delegation_hash_table = kmalloc_array(delegation_buckets,
-			sizeof(*server->delegation_hash_table), GFP_KERNEL);
+	server->delegation_hash_table = kmalloc_objs(*server->delegation_hash_table,
+						     delegation_buckets,
+						     GFP_KERNEL);
 	if (!server->delegation_hash_table)
 		return -ENOMEM;
 	for (i = 0; i < delegation_buckets; i++)
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index b3f5c9461204..624ee989929d 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -80,7 +80,7 @@ alloc_nfs_open_dir_context(struct inode *dir)
 	struct nfs_inode *nfsi = NFS_I(dir);
 	struct nfs_open_dir_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL_ACCOUNT);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL_ACCOUNT);
 	if (ctx != NULL) {
 		ctx->attr_gencount = nfsi->attr_gencount;
 		ctx->dtsize = min(NFS_SERVER(dir)->dtsize, NFS_INIT_DTSIZE);
@@ -912,7 +912,7 @@ static struct page **nfs_readdir_alloc_pages(size_t npages)
 	struct page **pages;
 	size_t i;

-	pages = kmalloc_array(npages, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, npages, GFP_KERNEL);
 	if (!pages)
 		return NULL;
 	for (i = 0; i < npages; i++) {
@@ -942,7 +942,7 @@ static int nfs_readdir_xdr_to_array(struct nfs_readdir_descriptor *desc,
 	unsigned int pglen;
 	int status = -ENOMEM;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;
 	entry->cookie = nfs_readdir_folio_last_cookie(folio);
@@ -1154,7 +1154,7 @@ static int uncached_readdir(struct nfs_readdir_descriptor *desc)
 	dfprintk(DIRCACHE, "NFS: uncached_readdir() searching for cookie %llu\n",
 			(unsigned long long)desc->dir_cookie);

-	arrays = kcalloc(sz, sizeof(*arrays), GFP_KERNEL);
+	arrays = kzalloc_objs(*arrays, sz, GFP_KERNEL);
 	if (!arrays)
 		goto out;
 	arrays[0] = nfs_readdir_folio_array_alloc(desc->dir_cookie, GFP_KERNEL);
@@ -1245,7 +1245,7 @@ static int nfs_readdir(struct file *file, struct dir_context *ctx)
 	nfs_revalidate_mapping(inode, file->f_mapping);

 	res = -ENOMEM;
-	desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	desc = kzalloc_obj(*desc, GFP_KERNEL);
 	if (!desc)
 		goto out;
 	desc->file = file;
@@ -3216,7 +3216,7 @@ static void nfs_access_add_rbtree(struct inode *inode,
 void nfs_access_add_cache(struct inode *inode, struct nfs_access_entry *set,
 			  const struct cred *cred)
 {
-	struct nfs_access_entry *cache = kmalloc(sizeof(*cache), GFP_KERNEL);
+	struct nfs_access_entry *cache = kmalloc_obj(*cache, GFP_KERNEL);
 	if (cache == NULL)
 		return;
 	RB_CLEAR_NODE(&cache->rb_node);
diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c
index 714975e5c0db..9bce45de1cb4 100644
--- a/fs/nfs/dns_resolve.c
+++ b/fs/nfs/dns_resolve.c
@@ -120,7 +120,7 @@ static void nfs_dns_ent_put(struct kref *ref)

 static struct cache_head *nfs_dns_ent_alloc(void)
 {
-	struct nfs_dns_ent *item = kmalloc(sizeof(*item), GFP_KERNEL);
+	struct nfs_dns_ent *item = kmalloc_obj(*item, GFP_KERNEL);

 	if (item != NULL) {
 		item->hostname = NULL;
diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c
index 5c4551117c58..90a11afa5d05 100644
--- a/fs/nfs/filelayout/filelayout.c
+++ b/fs/nfs/filelayout/filelayout.c
@@ -694,15 +694,15 @@ filelayout_decode_layout(struct pnfs_layout_hdr *flo,
 		goto out_err;

 	if (fl->num_fh > 0) {
-		fl->fh_array = kcalloc(fl->num_fh, sizeof(fl->fh_array[0]),
-				       gfp_flags);
+		fl->fh_array = kzalloc_objs(fl->fh_array[0], fl->num_fh,
+					    gfp_flags);
 		if (!fl->fh_array)
 			goto out_err;
 	}

 	for (i = 0; i < fl->num_fh; i++) {
 		/* Do we want to use a mempool here? */
-		fl->fh_array[i] = kmalloc(sizeof(struct nfs_fh), gfp_flags);
+		fl->fh_array[i] = kmalloc_obj(struct nfs_fh, gfp_flags);
 		if (!fl->fh_array[i])
 			goto out_err;

@@ -763,7 +763,7 @@ filelayout_alloc_lseg(struct pnfs_layout_hdr *layoutid,
 	int rc;

 	dprintk("--> %s\n", __func__);
-	fl = kzalloc(sizeof(*fl), gfp_flags);
+	fl = kzalloc_obj(*fl, gfp_flags);
 	if (!fl)
 		return NULL;

@@ -1049,7 +1049,7 @@ filelayout_alloc_layout_hdr(struct inode *inode, gfp_t gfp_flags)
 {
 	struct nfs4_filelayout *flo;

-	flo = kzalloc(sizeof(*flo), gfp_flags);
+	flo = kzalloc_obj(*flo, gfp_flags);
 	if (flo == NULL)
 		return NULL;
 	pnfs_init_ds_commit_info(&flo->commit_info);
diff --git a/fs/nfs/filelayout/filelayoutdev.c b/fs/nfs/filelayout/filelayoutdev.c
index df79aeb68db4..7226989ee4d5 100644
--- a/fs/nfs/filelayout/filelayoutdev.c
+++ b/fs/nfs/filelayout/filelayoutdev.c
@@ -138,7 +138,7 @@ nfs4_fl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
 		goto out_err_free_stripe_indices;
 	}

-	dsaddr = kzalloc(struct_size(dsaddr, ds_list, num), gfp_flags);
+	dsaddr = kzalloc_flex(*dsaddr, ds_list, num, gfp_flags);
 	if (!dsaddr)
 		goto out_err_free_stripe_indices;

diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
index 9056f05a67dc..f67773d52830 100644
--- a/fs/nfs/flexfilelayout/flexfilelayout.c
+++ b/fs/nfs/flexfilelayout/flexfilelayout.c
@@ -54,7 +54,7 @@ ff_layout_alloc_layout_hdr(struct inode *inode, gfp_t gfp_flags)
 {
 	struct nfs4_flexfile_layout *ffl;

-	ffl = kzalloc(sizeof(*ffl), gfp_flags);
+	ffl = kzalloc_obj(*ffl, gfp_flags);
 	if (ffl) {
 		pnfs_init_ds_commit_info(&ffl->commit_info);
 		INIT_LIST_HEAD(&ffl->error_list);
@@ -275,7 +275,7 @@ static struct nfs4_ff_layout_mirror *ff_layout_alloc_mirror(u32 dss_count,
 {
 	struct nfs4_ff_layout_mirror *mirror;

-	mirror = kzalloc(sizeof(*mirror), gfp_flags);
+	mirror = kzalloc_obj(*mirror, gfp_flags);
 	if (mirror == NULL)
 		return NULL;

@@ -285,8 +285,8 @@ static struct nfs4_ff_layout_mirror *ff_layout_alloc_mirror(u32 dss_count,

 	mirror->dss_count = dss_count;
 	mirror->dss =
-		kcalloc(dss_count, sizeof(struct nfs4_ff_layout_ds_stripe),
-			gfp_flags);
+		kzalloc_objs(struct nfs4_ff_layout_ds_stripe, dss_count,
+			     gfp_flags);
 	if (mirror->dss == NULL) {
 		kfree(mirror);
 		return NULL;
@@ -483,8 +483,7 @@ ff_layout_alloc_lseg(struct pnfs_layout_hdr *lh,
 		goto out_err_free;

 	rc = -ENOMEM;
-	fls = kzalloc(struct_size(fls, mirror_array, mirror_array_cnt),
-			gfp_flags);
+	fls = kzalloc_flex(*fls, mirror_array, mirror_array_cnt, gfp_flags);
 	if (!fls)
 		goto out_err_free;

@@ -554,8 +553,7 @@ ff_layout_alloc_lseg(struct pnfs_layout_hdr *lh,
 			fh_count = be32_to_cpup(p);

 			dss_info->fh_versions =
-			    kcalloc(fh_count, sizeof(struct nfs_fh),
-				    gfp_flags);
+			    kzalloc_objs(struct nfs_fh, fh_count, gfp_flags);
 			if (dss_info->fh_versions == NULL) {
 				rc = -ENOMEM;
 				goto out_err_free;
@@ -2633,7 +2631,7 @@ ff_layout_prepare_layoutreturn(struct nfs4_layoutreturn_args *args)
 	struct nfs4_flexfile_layoutreturn_args *ff_args;
 	struct nfs4_flexfile_layout *ff_layout = FF_LAYOUT_FROM_HDR(args->layout);

-	ff_args = kmalloc(sizeof(*ff_args), nfs_io_gfp_mask());
+	ff_args = kmalloc_obj(*ff_args, nfs_io_gfp_mask());
 	if (!ff_args)
 		goto out_nomem;
 	ff_args->pages[0] = alloc_page(nfs_io_gfp_mask());
@@ -2674,8 +2672,7 @@ ff_layout_send_layouterror(struct pnfs_layout_segment *lseg)
 	if (list_empty(&head))
 		return;

-	errors = kmalloc_array(NFS42_LAYOUTERROR_MAX, sizeof(*errors),
-			       nfs_io_gfp_mask());
+	errors = kmalloc_objs(*errors, NFS42_LAYOUTERROR_MAX, nfs_io_gfp_mask());
 	if (errors != NULL) {
 		const struct nfs4_ff_layout_ds_err *pos;
 		size_t n = 0;
@@ -2943,8 +2940,8 @@ static int ff_layout_prepare_layoutstats(struct nfs42_layoutstat_args *args)
 	const int dev_count = PNFS_LAYOUTSTATS_MAXDEV;

 	/* For now, send at most PNFS_LAYOUTSTATS_MAXDEV statistics */
-	args->devinfo = kmalloc_array(dev_count, sizeof(*args->devinfo),
-				      nfs_io_gfp_mask());
+	args->devinfo = kmalloc_objs(*args->devinfo, dev_count,
+				     nfs_io_gfp_mask());
 	if (!args->devinfo)
 		return -ENOMEM;

diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
index c2d8a13a9dbd..c40395ae0814 100644
--- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
+++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
@@ -60,7 +60,7 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
 	if (!scratch)
 		goto out_err;

-	new_ds = kzalloc(sizeof(struct nfs4_ff_layout_ds), gfp_flags);
+	new_ds = kzalloc_obj(struct nfs4_ff_layout_ds, gfp_flags);
 	if (!new_ds)
 		goto out_scratch;

@@ -99,9 +99,8 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev,
 	version_count = be32_to_cpup(p);
 	dprintk("%s: version count %d\n", __func__, version_count);

-	ds_versions = kcalloc(version_count,
-			      sizeof(struct nfs4_ff_ds_version),
-			      gfp_flags);
+	ds_versions = kzalloc_objs(struct nfs4_ff_ds_version, version_count,
+				   gfp_flags);
 	if (!ds_versions)
 		goto out_err_drain_dsaddrs;

@@ -262,7 +261,7 @@ int ff_layout_track_ds_error(struct nfs4_flexfile_layout *flo,
 	if (IS_ERR_OR_NULL(mirror->dss[dss_id].mirror_ds))
 		return -EINVAL;

-	dserr = kmalloc(sizeof(*dserr), gfp_flags);
+	dserr = kmalloc_obj(*dserr, gfp_flags);
 	if (!dserr)
 		return -ENOMEM;

diff --git a/fs/nfs/fs_context.c b/fs/nfs/fs_context.c
index 86750f110053..2fc851abd187 100644
--- a/fs/nfs/fs_context.c
+++ b/fs/nfs/fs_context.c
@@ -1692,7 +1692,7 @@ static int nfs_init_fs_context(struct fs_context *fc)
 {
 	struct nfs_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct nfs_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct nfs_fs_context, GFP_KERNEL);
 	if (unlikely(!ctx))
 		return -ENOMEM;

diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c
index 8b0785178731..9b7fdad4a920 100644
--- a/fs/nfs/fscache.c
+++ b/fs/nfs/fscache.c
@@ -288,7 +288,7 @@ static struct nfs_netfs_io_data *nfs_netfs_alloc(struct netfs_io_subrequest *sre
 {
 	struct nfs_netfs_io_data *netfs;

-	netfs = kzalloc(sizeof(*netfs), GFP_KERNEL_ACCOUNT);
+	netfs = kzalloc_obj(*netfs, GFP_KERNEL_ACCOUNT);
 	if (!netfs)
 		return NULL;
 	netfs->sreq = sreq;
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 331cdecdd966..ea215fc2ed21 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -383,7 +383,7 @@ struct nfs4_label *nfs4_label_alloc(struct nfs_server *server, gfp_t flags)
 	if (!(server->caps & NFS_CAP_SECURITY_LABEL))
 		return NULL;

-	label = kzalloc(sizeof(struct nfs4_label), flags);
+	label = kzalloc_obj(struct nfs4_label, flags);
 	if (label == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -1131,7 +1131,7 @@ struct nfs_lock_context *nfs_get_lock_context(struct nfs_open_context *ctx)
 	res = __nfs_find_lock_context(ctx);
 	rcu_read_unlock();
 	if (res == NULL) {
-		new = kmalloc(sizeof(*new), GFP_KERNEL_ACCOUNT);
+		new = kmalloc_obj(*new, GFP_KERNEL_ACCOUNT);
 		if (new == NULL)
 			return ERR_PTR(-ENOMEM);
 		nfs_init_lock_context(new);
@@ -1209,7 +1209,7 @@ struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry,
 {
 	struct nfs_open_context *ctx;

-	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL_ACCOUNT);
+	ctx = kmalloc_obj(*ctx, GFP_KERNEL_ACCOUNT);
 	if (!ctx)
 		return ERR_PTR(-ENOMEM);
 	nfs_sb_active(dentry->d_sb);
@@ -1777,7 +1777,7 @@ struct nfs_fattr *nfs_alloc_fattr(void)
 {
 	struct nfs_fattr *fattr;

-	fattr = kmalloc(sizeof(*fattr), GFP_KERNEL);
+	fattr = kmalloc_obj(*fattr, GFP_KERNEL);
 	if (fattr != NULL) {
 		nfs_fattr_init(fattr);
 		fattr->label = NULL;
@@ -1807,7 +1807,7 @@ struct nfs_fh *nfs_alloc_fhandle(void)
 {
 	struct nfs_fh *fh;

-	fh = kmalloc(sizeof(struct nfs_fh), GFP_KERNEL);
+	fh = kmalloc_obj(struct nfs_fh, GFP_KERNEL);
 	if (fh != NULL)
 		fh->size = 0;
 	return fh;
@@ -2015,7 +2015,7 @@ static void nfs_ooo_merge(struct nfs_inode *nfsi,
 		return;

 	if (!nfsi->ooo) {
-		nfsi->ooo = kmalloc(sizeof(*nfsi->ooo), GFP_ATOMIC);
+		nfsi->ooo = kmalloc_obj(*nfsi->ooo, GFP_ATOMIC);
 		if (!nfsi->ooo) {
 			nfsi->cache_validity |= NFS_INO_DATA_INVAL_DEFER;
 			return;
diff --git a/fs/nfs/localio.c b/fs/nfs/localio.c
index 3b47be4e693a..4c7d16a99ed6 100644
--- a/fs/nfs/localio.c
+++ b/fs/nfs/localio.c
@@ -316,12 +316,11 @@ nfs_local_iocb_alloc(struct nfs_pgio_header *hdr,
 {
 	struct nfs_local_kiocb *iocb;

-	iocb = kzalloc(sizeof(*iocb), flags);
+	iocb = kzalloc_obj(*iocb, flags);
 	if (iocb == NULL)
 		return NULL;

-	iocb->bvec = kmalloc_array(hdr->page_array.npages,
-				   sizeof(struct bio_vec), flags);
+	iocb->bvec = kmalloc_objs(struct bio_vec, hdr->page_array.npages, flags);
 	if (iocb->bvec == NULL) {
 		kfree(iocb);
 		return NULL;
@@ -1070,7 +1069,7 @@ static struct nfs_local_fsync_ctx *
 nfs_local_fsync_ctx_alloc(struct nfs_commit_data *data,
 			  struct nfsd_file *localio, gfp_t flags)
 {
-	struct nfs_local_fsync_ctx *ctx = kmalloc(sizeof(*ctx), flags);
+	struct nfs_local_fsync_ctx *ctx = kmalloc_obj(*ctx, flags);

 	if (ctx != NULL) {
 		ctx->localio = localio;
diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c
index d3d2fbeba89d..eb9cac652550 100644
--- a/fs/nfs/nfs3proc.c
+++ b/fs/nfs/nfs3proc.c
@@ -299,7 +299,7 @@ static struct nfs3_createdata *nfs3_alloc_createdata(void)
 {
 	struct nfs3_createdata *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (data != NULL) {
 		data->msg.rpc_argp = &data->arg;
 		data->msg.rpc_resp = &data->res;
diff --git a/fs/nfs/nfs40client.c b/fs/nfs/nfs40client.c
index fc0c6b48fc94..f44d68faea93 100644
--- a/fs/nfs/nfs40client.c
+++ b/fs/nfs/nfs40client.c
@@ -65,7 +65,7 @@ int nfs40_init_client(struct nfs_client *clp)
 	struct nfs4_slot_table *tbl;
 	int ret;

-	tbl = kzalloc(sizeof(*tbl), GFP_NOFS);
+	tbl = kzalloc_obj(*tbl, GFP_NOFS);
 	if (tbl == NULL)
 		return -ENOMEM;

diff --git a/fs/nfs/nfs40proc.c b/fs/nfs/nfs40proc.c
index 32a2a1a2b216..53f54081942e 100644
--- a/fs/nfs/nfs40proc.c
+++ b/fs/nfs/nfs40proc.c
@@ -122,7 +122,7 @@ static int nfs4_proc_async_renew(struct nfs_client *clp, const struct cred *cred
 		return 0;
 	if (!refcount_inc_not_zero(&clp->cl_count))
 		return -EIO;
-	data = kmalloc(sizeof(*data), GFP_NOFS);
+	data = kmalloc_obj(*data, GFP_NOFS);
 	if (data == NULL) {
 		nfs_put_client(clp);
 		return -ENOMEM;
@@ -320,7 +320,7 @@ nfs4_release_lockowner(struct nfs_server *server, struct nfs4_lock_state *lsp)
 	if (clp->cl_mvops->minor_version != 0)
 		return;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return;
 	data->lsp = lsp;
diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c
index 3487948d7181..46298606e509 100644
--- a/fs/nfs/nfs42proc.c
+++ b/fs/nfs/nfs42proc.c
@@ -247,7 +247,7 @@ static int handle_async_copy(struct nfs42_copy_res *res,
 	int status = NFS4_OK;
 	u64 copied;

-	copy = kzalloc(sizeof(struct nfs4_copy_state), GFP_KERNEL);
+	copy = kzalloc_obj(struct nfs4_copy_state, GFP_KERNEL);
 	if (!copy)
 		return -ENOMEM;

@@ -351,7 +351,7 @@ static int process_copy_commit(struct file *dst, loff_t pos_dst,
 	struct nfs_commitres cres;
 	int status = -ENOMEM;

-	cres.verf = kzalloc(sizeof(struct nfs_writeverf), GFP_KERNEL);
+	cres.verf = kzalloc_obj(struct nfs_writeverf, GFP_KERNEL);
 	if (!cres.verf)
 		goto out;

@@ -461,7 +461,7 @@ static ssize_t _nfs42_proc_copy(struct file *src,
 	res->commit_res.verf = NULL;
 	if (args->sync) {
 		res->commit_res.verf =
-			kzalloc(sizeof(struct nfs_writeverf), GFP_KERNEL);
+			kzalloc_obj(struct nfs_writeverf, GFP_KERNEL);
 		if (!res->commit_res.verf)
 			return -ENOMEM;
 	}
@@ -659,7 +659,7 @@ static int nfs42_do_offload_cancel_async(struct file *dst,
 	if (!(dst_server->caps & NFS_CAP_OFFLOAD_CANCEL))
 		return -EOPNOTSUPP;

-	data = kzalloc(sizeof(struct nfs42_offload_data), GFP_KERNEL);
+	data = kzalloc_obj(struct nfs42_offload_data, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;

@@ -756,7 +756,7 @@ nfs42_proc_offload_status(struct file *dst, nfs4_stateid *stateid, u64 *copied)
 	if (!(server->caps & NFS_CAP_OFFLOAD_STATUS))
 		return -EOPNOTSUPP;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 	data->seq_server = server;
@@ -838,7 +838,7 @@ int nfs42_proc_copy_notify(struct file *src, struct file *dst,
 	if (!(src_server->caps & NFS_CAP_COPY_NOTIFY))
 		return -EOPNOTSUPP;

-	args = kzalloc(sizeof(struct nfs42_copy_notify_args), GFP_KERNEL);
+	args = kzalloc_obj(struct nfs42_copy_notify_args, GFP_KERNEL);
 	if (args == NULL)
 		return -ENOMEM;

@@ -1087,7 +1087,7 @@ nfs42_alloc_layouterror_data(struct pnfs_layout_segment *lseg, gfp_t gfp_flags)
 	struct nfs42_layouterror_data *data;
 	struct inode *inode = lseg->pls_layout->plh_inode;

-	data = kzalloc(sizeof(*data), gfp_flags);
+	data = kzalloc_obj(*data, gfp_flags);
 	if (data) {
 		data->args.inode = data->inode = nfs_igrab_and_active(inode);
 		if (data->inode) {
@@ -1535,7 +1535,7 @@ static ssize_t _nfs42_proc_listxattrs(struct inode *inode, void *buf,
 		xdrlen = server->lxasize;
 	np = xdrlen / PAGE_SIZE + 1;

-	pages = kcalloc(np, sizeof(struct page *), GFP_KERNEL);
+	pages = kzalloc_objs(struct page *, np, GFP_KERNEL);
 	if (!pages)
 		goto out_free_scratch;
 	for (i = 0; i < np; i++) {
@@ -1578,7 +1578,7 @@ ssize_t nfs42_proc_getxattr(struct inode *inode, const char *name,
 	struct page **pages;

 	np = nfs_page_array_len(0, buflen ?: XATTR_SIZE_MAX);
-	pages = kmalloc_array(np, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, np, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c
index e10d83ba835e..432cfeebeba4 100644
--- a/fs/nfs/nfs42xdr.c
+++ b/fs/nfs/nfs42xdr.c
@@ -1159,7 +1159,7 @@ static int decode_read_plus(struct xdr_stream *xdr, struct nfs_pgio_res *res)
 	if (segments == 0)
 		return 0;

-	segs = kmalloc_array(segments, sizeof(*segs), GFP_KERNEL);
+	segs = kmalloc_objs(*segs, segments, GFP_KERNEL);
 	if (!segs)
 		return -ENOMEM;

diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index 51cf4a37d652..c211639949c2 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -99,7 +99,7 @@ nfs4_alloc_ds_server(struct nfs_client *ds_clp, rpc_authflavor_t flavor)
 {
 	struct nfs4_ds_server *dss;

-	dss = kmalloc(sizeof(*dss), GFP_NOFS);
+	dss = kmalloc_obj(*dss, GFP_NOFS);
 	if (dss == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
index 7f43e890d356..bd079b4a6523 100644
--- a/fs/nfs/nfs4file.c
+++ b/fs/nfs/nfs4file.c
@@ -164,8 +164,7 @@ static ssize_t __nfs4_copy_file_range(struct file *file_in, loff_t pos_in,
 		 */
 		if (sync)
 			return -EOPNOTSUPP;
-		cn_resp = kzalloc(sizeof(struct nfs42_copy_notify_res),
-				  GFP_KERNEL);
+		cn_resp = kzalloc_obj(struct nfs42_copy_notify_res, GFP_KERNEL);
 		if (unlikely(cn_resp == NULL))
 			return -ENOMEM;

diff --git a/fs/nfs/nfs4idmap.c b/fs/nfs/nfs4idmap.c
index 9e1c48c5c0b8..01fb53132279 100644
--- a/fs/nfs/nfs4idmap.c
+++ b/fs/nfs/nfs4idmap.c
@@ -445,7 +445,7 @@ nfs_idmap_new(struct nfs_client *clp)
 	struct rpc_pipe *pipe;
 	int error;

-	idmap = kzalloc(sizeof(*idmap), GFP_KERNEL);
+	idmap = kzalloc_obj(*idmap, GFP_KERNEL);
 	if (idmap == NULL)
 		return -ENOMEM;

@@ -579,7 +579,7 @@ static int nfs_idmap_legacy_upcall(struct key *authkey, void *aux)

 	/* msg and im are freed in idmap_pipe_destroy_msg */
 	ret = -ENOMEM;
-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		goto out1;

diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c
index 9a98595bb160..7366f2e6bc12 100644
--- a/fs/nfs/nfs4namespace.c
+++ b/fs/nfs/nfs4namespace.c
@@ -415,7 +415,7 @@ static int nfs_do_refmount(struct fs_context *fc, struct rpc_clnt *client)
 	if (!page)
 		return -ENOMEM;

-	fs_locations = kmalloc(sizeof(struct nfs4_fs_locations), GFP_KERNEL);
+	fs_locations = kmalloc_obj(struct nfs4_fs_locations, GFP_KERNEL);
 	if (!fs_locations)
 		goto out_free;
 	fs_locations->fattr = nfs_alloc_fattr();
@@ -490,7 +490,7 @@ static int nfs4_try_replacing_one_location(struct nfs_server *server,
 	size_t salen;
 	int error;

-	sap = kmalloc(sizeof(*sap), GFP_KERNEL);
+	sap = kmalloc_obj(*sap, GFP_KERNEL);
 	if (sap == NULL)
 		return -ENOMEM;

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 180229320731..df9ae871726d 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1370,7 +1370,7 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
 	struct nfs4_label *label = (c != NULL) ? c->label : NULL;
 	struct nfs4_opendata *p;

-	p = kzalloc(sizeof(*p), gfp_mask);
+	p = kzalloc_obj(*p, gfp_mask);
 	if (p == NULL)
 		goto err;

@@ -3774,7 +3774,7 @@ int nfs4_do_close(struct nfs4_state *state, gfp_t gfp_mask, int wait)
 	nfs4_state_protect(clp, NFS_SP4_MACH_CRED_CLEANUP,
 		&task_setup_data.rpc_client, &msg);

-	calldata = kzalloc(sizeof(*calldata), gfp_mask);
+	calldata = kzalloc_obj(*calldata, gfp_mask);
 	if (calldata == NULL)
 		goto out;
 	nfs4_init_sequence(clp, &calldata->arg.seq_args,
@@ -4107,7 +4107,7 @@ static int _nfs4_discover_trunking(struct nfs_server *server,
 	page = alloc_page(GFP_KERNEL);
 	if (!page)
 		goto out_put_cred;
-	locations = kmalloc(sizeof(struct nfs4_fs_locations), GFP_KERNEL);
+	locations = kmalloc_obj(struct nfs4_fs_locations, GFP_KERNEL);
 	if (!locations)
 		goto out_free;
 	locations->fattr = nfs_alloc_fattr();
@@ -4341,7 +4341,7 @@ static int nfs4_get_referral(struct rpc_clnt *client, struct inode *dir,
 	page = alloc_page(GFP_KERNEL);
 	if (page == NULL)
 		goto out;
-	locations = kmalloc(sizeof(struct nfs4_fs_locations), GFP_KERNEL);
+	locations = kmalloc_obj(struct nfs4_fs_locations, GFP_KERNEL);
 	if (locations == NULL)
 		goto out;

@@ -5130,7 +5130,7 @@ static struct nfs4_createdata *nfs4_alloc_createdata(struct inode *dir,
 {
 	struct nfs4_createdata *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (data != NULL) {
 		struct nfs_server *server = NFS_SERVER(dir);

@@ -6023,7 +6023,7 @@ static void nfs4_write_cached_acl(struct inode *inode, struct page **pages,
 		acl->cached = 1;
 		_copy_from_pages(acl->data, pages, pgbase, acl_len);
 	} else {
-		acl = kmalloc(sizeof(*acl), GFP_KERNEL);
+		acl = kmalloc_obj(*acl, GFP_KERNEL);
 		if (acl == NULL)
 			goto out;
 		acl->cached = 0;
@@ -6070,7 +6070,7 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf,
 		buflen = server->rsize;

 	npages = DIV_ROUND_UP(buflen, PAGE_SIZE) + 1;
-	pages = kmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
+	pages = kmalloc_objs(struct page *, npages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

@@ -6822,7 +6822,7 @@ static int _nfs4_proc_delegreturn(struct inode *inode, const struct cred *cred,
 	if (nfs_server_capable(inode, NFS_CAP_MOVEABLE))
 		task_setup_data.flags |= RPC_TASK_MOVEABLE;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;

@@ -7026,7 +7026,7 @@ static struct nfs4_unlockdata *nfs4_alloc_unlockdata(struct file_lock *fl,
 	struct inode *inode = state->inode;
 	struct nfs_lock_context *l_ctx;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (p == NULL)
 		return NULL;
 	l_ctx = nfs_get_lock_context(ctx);
@@ -7260,7 +7260,7 @@ static struct nfs4_lockdata *nfs4_alloc_lockdata(struct file_lock *fl,
 	struct nfs_server *server = NFS_SERVER(inode);
 	struct nfs_seqid *(*alloc_seqid)(struct nfs_seqid_counter *, gfp_t);

-	p = kzalloc(sizeof(*p), gfp_mask);
+	p = kzalloc_obj(*p, gfp_mask);
 	if (p == NULL)
 		return NULL;

@@ -8706,7 +8706,7 @@ nfs4_run_exchange_id(struct nfs_client *clp, const struct cred *cred,
 		return ERR_PTR(-EIO);

 	status = -ENOMEM;
-	calldata = kzalloc(sizeof(*calldata), GFP_NOFS);
+	calldata = kzalloc_obj(*calldata, GFP_NOFS);
 	if (!calldata)
 		goto out;

@@ -8716,18 +8716,18 @@ nfs4_run_exchange_id(struct nfs_client *clp, const struct cred *cred,
 	if (status)
 		goto out_calldata;

-	calldata->res.server_owner = kzalloc(sizeof(struct nfs41_server_owner),
-						GFP_NOFS);
+	calldata->res.server_owner = kzalloc_obj(struct nfs41_server_owner,
+						 GFP_NOFS);
 	status = -ENOMEM;
 	if (unlikely(calldata->res.server_owner == NULL))
 		goto out_calldata;

-	calldata->res.server_scope = kzalloc(sizeof(struct nfs41_server_scope),
-					GFP_NOFS);
+	calldata->res.server_scope = kzalloc_obj(struct nfs41_server_scope,
+						 GFP_NOFS);
 	if (unlikely(calldata->res.server_scope == NULL))
 		goto out_server_owner;

-	calldata->res.impl_id = kzalloc(sizeof(struct nfs41_impl_id), GFP_NOFS);
+	calldata->res.impl_id = kzalloc_obj(struct nfs41_impl_id, GFP_NOFS);
 	if (unlikely(calldata->res.impl_id == NULL))
 		goto out_server_scope;

@@ -9396,7 +9396,7 @@ static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp,
 		goto out_err;

 	ret = ERR_PTR(-ENOMEM);
-	calldata = kzalloc(sizeof(*calldata), GFP_KERNEL);
+	calldata = kzalloc_obj(*calldata, GFP_KERNEL);
 	if (calldata == NULL)
 		goto out_put_clp;
 	nfs4_init_sequence(clp, &calldata->args, &calldata->res, 0, is_privileged);
@@ -9543,7 +9543,7 @@ static int nfs41_proc_reclaim_complete(struct nfs_client *clp,
 	};
 	int status = -ENOMEM;

-	calldata = kzalloc(sizeof(*calldata), GFP_NOFS);
+	calldata = kzalloc_obj(*calldata, GFP_NOFS);
 	if (calldata == NULL)
 		goto out;
 	calldata->clp = clp;
@@ -10358,7 +10358,7 @@ static int nfs41_free_stateid(struct nfs_server *server,
 		&task_setup.rpc_client, &msg);

 	dprintk("NFS call  free_stateid %p\n", stateid);
-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 	data->server = server;
diff --git a/fs/nfs/nfs4session.c b/fs/nfs/nfs4session.c
index a2fdd4b80dc4..5c128957a0a4 100644
--- a/fs/nfs/nfs4session.c
+++ b/fs/nfs/nfs4session.c
@@ -106,7 +106,7 @@ static struct nfs4_slot *nfs4_new_slot(struct nfs4_slot_table  *tbl,
 {
 	struct nfs4_slot *slot;

-	slot = kzalloc(sizeof(*slot), gfp_mask);
+	slot = kzalloc_obj(*slot, gfp_mask);
 	if (slot) {
 		slot->table = tbl;
 		slot->slot_nr = slotid;
@@ -558,7 +558,7 @@ struct nfs4_session *nfs4_alloc_session(struct nfs_client *clp)
 {
 	struct nfs4_session *session;

-	session = kzalloc(sizeof(struct nfs4_session), GFP_NOFS);
+	session = kzalloc_obj(struct nfs4_session, GFP_NOFS);
 	if (!session)
 		return NULL;

diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 963719f35467..7e1f14fad898 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -446,7 +446,7 @@ nfs4_alloc_state_owner(struct nfs_server *server,
 {
 	struct nfs4_state_owner *sp;

-	sp = kzalloc(sizeof(*sp), gfp_flags);
+	sp = kzalloc_obj(*sp, gfp_flags);
 	if (!sp)
 		return NULL;
 	sp->so_seqid.owner_id = atomic64_inc_return(&server->owner_ctr);
@@ -612,7 +612,7 @@ nfs4_alloc_open_state(void)
 {
 	struct nfs4_state *state;

-	state = kzalloc(sizeof(*state), GFP_KERNEL_ACCOUNT);
+	state = kzalloc_obj(*state, GFP_KERNEL_ACCOUNT);
 	if (!state)
 		return NULL;
 	refcount_set(&state->count, 1);
@@ -815,7 +815,7 @@ static struct nfs4_lock_state *nfs4_alloc_lock_state(struct nfs4_state *state, f
 	struct nfs4_lock_state *lsp;
 	struct nfs_server *server = state->owner->so_server;

-	lsp = kzalloc(sizeof(*lsp), GFP_KERNEL_ACCOUNT);
+	lsp = kzalloc_obj(*lsp, GFP_KERNEL_ACCOUNT);
 	if (lsp == NULL)
 		return NULL;
 	nfs4_init_seqid_counter(&lsp->ls_seqid);
@@ -1014,7 +1014,7 @@ struct nfs_seqid *nfs_alloc_seqid(struct nfs_seqid_counter *counter, gfp_t gfp_m
 {
 	struct nfs_seqid *new;

-	new = kmalloc(sizeof(*new), gfp_mask);
+	new = kmalloc_obj(*new, gfp_mask);
 	if (new == NULL)
 		return ERR_PTR(-ENOMEM);
 	new->sequence = counter;
@@ -2054,7 +2054,7 @@ static int nfs4_try_migration(struct nfs_server *server, const struct cred *cred
 			clp->cl_hostname);

 	page = alloc_page(GFP_KERNEL);
-	locations = kmalloc(sizeof(struct nfs4_fs_locations), GFP_KERNEL);
+	locations = kmalloc_obj(struct nfs4_fs_locations, GFP_KERNEL);
 	fattr = nfs_alloc_fattr();
 	if (page == NULL || locations == NULL || fattr == NULL) {
 		dprintk("<-- %s: no memory\n", __func__);
diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c
index 5ec9c83f1ef0..678f1f6c62bc 100644
--- a/fs/nfs/nfs4super.c
+++ b/fs/nfs/nfs4super.c
@@ -100,7 +100,7 @@ static int nfs_referral_loop_protect(void)
 	struct nfs_referral_count *p, *new;
 	int ret = -ENOMEM;

-	new = kmalloc(sizeof(*new), GFP_KERNEL);
+	new = kmalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		goto out;
 	new->task = current;
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c
index 6e69ce43a13f..a9373de891c9 100644
--- a/fs/nfs/pagelist.c
+++ b/fs/nfs/pagelist.c
@@ -893,7 +893,8 @@ int nfs_generic_pgio(struct nfs_pageio_descriptor *desc,
 	if (pagecount <= ARRAY_SIZE(pg_array->page_array))
 		pg_array->pagevec = pg_array->page_array;
 	else {
-		pg_array->pagevec = kcalloc(pagecount, sizeof(struct page *), gfp_flags);
+		pg_array->pagevec = kzalloc_objs(struct page *, pagecount,
+						 gfp_flags);
 		if (!pg_array->pagevec) {
 			pg_array->npages = 0;
 			nfs_pgio_error(hdr);
@@ -991,7 +992,7 @@ nfs_pageio_alloc_mirrors(struct nfs_pageio_descriptor *desc,
 	desc->pg_mirrors_dynamic = NULL;
 	if (mirror_count == 1)
 		return desc->pg_mirrors_static;
-	ret = kmalloc_array(mirror_count, sizeof(*ret), nfs_io_gfp_mask());
+	ret = kmalloc_objs(*ret, mirror_count, nfs_io_gfp_mask());
 	if (ret != NULL) {
 		for (i = 0; i < mirror_count; i++)
 			nfs_pageio_mirror_init(&ret[i], desc->pg_bsize);
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index ff8483d3373a..bc13d1e69449 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -1143,7 +1143,7 @@ static struct page **nfs4_alloc_pages(size_t size, gfp_t gfp_flags)
 	struct page **pages;
 	int i;

-	pages = kmalloc_array(size, sizeof(struct page *), gfp_flags);
+	pages = kmalloc_objs(struct page *, size, gfp_flags);
 	if (!pages) {
 		dprintk("%s: can't alloc array of %zu pages\n", __func__, size);
 		return NULL;
@@ -1175,7 +1175,7 @@ pnfs_alloc_init_layoutget_args(struct inode *ino,

 	dprintk("--> %s\n", __func__);

-	lgp = kzalloc(sizeof(*lgp), gfp_flags);
+	lgp = kzalloc_obj(*lgp, gfp_flags);
 	if (lgp == NULL)
 		return NULL;

@@ -1357,7 +1357,7 @@ pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo,
 	int status = 0;

 	*pcred = NULL;
-	lrp = kzalloc(sizeof(*lrp), nfs_io_gfp_mask());
+	lrp = kzalloc_obj(*lrp, nfs_io_gfp_mask());
 	if (unlikely(lrp == NULL)) {
 		status = -ENOMEM;
 		spin_lock(&ino->i_lock);
@@ -3379,7 +3379,7 @@ pnfs_layoutcommit_inode(struct inode *inode, bool sync)

 	status = -ENOMEM;
 	/* Note kzalloc ensures data->res.seq_res.sr_slot == NULL */
-	data = kzalloc(sizeof(*data), nfs_io_gfp_mask());
+	data = kzalloc_obj(*data, nfs_io_gfp_mask());
 	if (!data)
 		goto clear_layoutcommitting;

@@ -3450,7 +3450,7 @@ struct nfs4_threshold *pnfs_mdsthreshold_alloc(void)
 {
 	struct nfs4_threshold *thp;

-	thp = kzalloc(sizeof(*thp), nfs_io_gfp_mask());
+	thp = kzalloc_obj(*thp, nfs_io_gfp_mask());
 	if (!thp) {
 		dprintk("%s mdsthreshold allocation failed\n", __func__);
 		return NULL;
@@ -3487,7 +3487,7 @@ pnfs_report_layoutstat(struct inode *inode, gfp_t gfp_flags)
 	pnfs_get_layout_hdr(hdr);
 	spin_unlock(&inode->i_lock);

-	data = kzalloc(sizeof(*data), gfp_flags);
+	data = kzalloc_obj(*data, gfp_flags);
 	if (!data) {
 		status = -ENOMEM;
 		goto out_put;
diff --git a/fs/nfs/pnfs_dev.c b/fs/nfs/pnfs_dev.c
index bf0f2d67e96c..274abdd6d5f3 100644
--- a/fs/nfs/pnfs_dev.c
+++ b/fs/nfs/pnfs_dev.c
@@ -114,11 +114,11 @@ nfs4_get_device_info(struct nfs_server *server,
 	dprintk("%s: server %p max_resp_sz %u max_pages %d\n",
 		__func__, server, max_resp_sz, max_pages);

-	pdev = kzalloc(sizeof(*pdev), gfp_flags);
+	pdev = kzalloc_obj(*pdev, gfp_flags);
 	if (!pdev)
 		return NULL;

-	pages = kcalloc(max_pages, sizeof(struct page *), gfp_flags);
+	pages = kzalloc_objs(struct page *, max_pages, gfp_flags);
 	if (!pages)
 		goto out_free_pdev;

diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c
index 9976cc16b689..12632a706da8 100644
--- a/fs/nfs/pnfs_nfs.c
+++ b/fs/nfs/pnfs_nfs.c
@@ -101,7 +101,7 @@ pnfs_alloc_commit_array(size_t n, gfp_t gfp_flags)
 	struct pnfs_commit_array *p;
 	struct pnfs_commit_bucket *b;

-	p = kmalloc(struct_size(p, buckets, n), gfp_flags);
+	p = kmalloc_flex(*p, buckets, n, gfp_flags);
 	if (!p)
 		return NULL;
 	p->nbuckets = n;
@@ -618,7 +618,7 @@ _data_server_lookup_locked(const struct nfs_net *nn, const struct list_head *dsa

 static struct nfs4_pnfs_ds_addr *nfs4_pnfs_ds_addr_alloc(gfp_t gfp_flags)
 {
-	struct nfs4_pnfs_ds_addr *da = kzalloc(sizeof(*da), gfp_flags);
+	struct nfs4_pnfs_ds_addr *da = kzalloc_obj(*da, gfp_flags);
 	if (da)
 		INIT_LIST_HEAD(&da->da_node);
 	return da;
@@ -730,7 +730,7 @@ nfs4_pnfs_ds_add(const struct net *net, struct list_head *dsaddrs, gfp_t gfp_fla
 		goto out;
 	}

-	ds = kzalloc(sizeof(*ds), gfp_flags);
+	ds = kzalloc_obj(*ds, gfp_flags);
 	if (!ds)
 		goto out;

diff --git a/fs/nfs/proc.c b/fs/nfs/proc.c
index 0e440ebf5335..523f44a2a416 100644
--- a/fs/nfs/proc.c
+++ b/fs/nfs/proc.c
@@ -217,7 +217,7 @@ static struct nfs_createdata *nfs_alloc_createdata(struct inode *dir,
 {
 	struct nfs_createdata *data;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);

 	if (data != NULL) {
 		data->arg.fh = NFS_FH(dir);
diff --git a/fs/nfs/sysfs.c b/fs/nfs/sysfs.c
index 7bf650fda1cb..2c723d41b7a7 100644
--- a/fs/nfs/sysfs.c
+++ b/fs/nfs/sysfs.c
@@ -43,7 +43,7 @@ int nfs_sysfs_init(void)
 {
 	int ret;

-	nfs_kset = kzalloc(sizeof(*nfs_kset), GFP_KERNEL);
+	nfs_kset = kzalloc_obj(*nfs_kset, GFP_KERNEL);
 	if (!nfs_kset)
 		return -ENOMEM;

@@ -172,7 +172,7 @@ static struct nfs_netns_client *nfs_netns_client_alloc(struct kobject *parent,
 {
 	struct nfs_netns_client *p;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (p) {
 		p->net = net;
 		p->kobject.kset = nfs_kset;
diff --git a/fs/nfs/unlink.c b/fs/nfs/unlink.c
index 4db818c0f9dd..2a07899c69af 100644
--- a/fs/nfs/unlink.c
+++ b/fs/nfs/unlink.c
@@ -175,7 +175,7 @@ nfs_async_unlink(struct dentry *dentry, const struct qstr *name)
 	int status = -ENOMEM;
 	void *devname_garbage = NULL;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (data == NULL)
 		goto out;
 	data->args.name.name = kstrdup(name->name, GFP_KERNEL);
@@ -355,7 +355,7 @@ nfs_async_rename(struct inode *old_dir, struct inode *new_dir,
 	    nfs_server_capable(new_dir, NFS_CAP_MOVEABLE))
 		task_setup_data.flags |= RPC_TASK_MOVEABLE;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (data == NULL)
 		return ERR_PTR(-ENOMEM);
 	task_setup_data.task = &data->task;
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 2d0e4a765aeb..1ed4b3590b1a 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -113,7 +113,7 @@ static void nfs_writehdr_free(struct nfs_pgio_header *hdr)

 static struct nfs_io_completion *nfs_io_completion_alloc(gfp_t gfp_flags)
 {
-	return kmalloc(sizeof(struct nfs_io_completion), gfp_flags);
+	return kmalloc_obj(struct nfs_io_completion, gfp_flags);
 }

 static void nfs_io_completion_init(struct nfs_io_completion *ioc,
diff --git a/fs/nfsd/blocklayout.c b/fs/nfsd/blocklayout.c
index afa16d7a8013..e3553ccb6ab4 100644
--- a/fs/nfsd/blocklayout.c
+++ b/fs/nfsd/blocklayout.c
@@ -131,7 +131,7 @@ nfsd4_block_proc_layoutget(struct svc_rqst *rqstp, struct inode *inode,
 	 * layouts, so make sure to zero the whole structure.
 	 */
 	nfserr = nfserrno(-ENOMEM);
-	bl = kzalloc(struct_size(bl, extents, nr_extents_max), GFP_KERNEL);
+	bl = kzalloc_flex(*bl, extents, nr_extents_max, GFP_KERNEL);
 	if (!bl)
 		goto out_error;
 	bl->nr_extents = nr_extents_max;
@@ -208,7 +208,7 @@ nfsd4_block_get_device_info_simple(struct super_block *sb,
 	struct pnfs_block_deviceaddr *dev;
 	struct pnfs_block_volume *b;

-	dev = kzalloc(struct_size(dev, volumes, 1), GFP_KERNEL);
+	dev = kzalloc_flex(*dev, volumes, 1, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	gdp->gd_device = dev;
@@ -319,7 +319,7 @@ nfsd4_block_get_device_info_scsi(struct super_block *sb,
 	const struct pr_ops *ops;
 	int ret;

-	dev = kzalloc(struct_size(dev, volumes, 1), GFP_KERNEL);
+	dev = kzalloc_flex(*dev, volumes, 1, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	gdp->gd_device = dev;
diff --git a/fs/nfsd/blocklayoutxdr.c b/fs/nfsd/blocklayoutxdr.c
index 196ef4245604..3c145146a0c8 100644
--- a/fs/nfsd/blocklayoutxdr.c
+++ b/fs/nfsd/blocklayoutxdr.c
@@ -164,7 +164,7 @@ nfsd4_block_decode_layoutupdate(struct xdr_stream *xdr, struct iomap **iomapp,
 	if (len != expected)
 		return nfserr_bad_xdr;

-	iomaps = kcalloc(nr_iomaps, sizeof(*iomaps), GFP_KERNEL);
+	iomaps = kzalloc_objs(*iomaps, nr_iomaps, GFP_KERNEL);
 	if (!iomaps)
 		return nfserr_delay;

@@ -258,7 +258,7 @@ nfsd4_scsi_decode_layoutupdate(struct xdr_stream *xdr, struct iomap **iomapp,
 	if (len != expected)
 		return nfserr_bad_xdr;

-	iomaps = kcalloc(nr_iomaps, sizeof(*iomaps), GFP_KERNEL);
+	iomaps = kzalloc_objs(*iomaps, nr_iomaps, GFP_KERNEL);
 	if (!iomaps)
 		return nfserr_delay;

diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c
index 09fe268fe2c7..8fb394afc3f5 100644
--- a/fs/nfsd/export.c
+++ b/fs/nfsd/export.c
@@ -234,7 +234,7 @@ static inline void expkey_update(struct cache_head *cnew,

 static struct cache_head *expkey_alloc(void)
 {
-	struct svc_expkey *i = kmalloc(sizeof(*i), GFP_KERNEL);
+	struct svc_expkey *i = kmalloc_obj(*i, GFP_KERNEL);
 	if (i)
 		return &i->h;
 	else
@@ -479,9 +479,8 @@ fsloc_parse(char **mesg, char *buf, struct nfsd4_fs_locations *fsloc)
 	if (fsloc->locations_count == 0)
 		return 0;

-	fsloc->locations = kcalloc(fsloc->locations_count,
-				   sizeof(struct nfsd4_fs_location),
-				   GFP_KERNEL);
+	fsloc->locations = kzalloc_objs(struct nfsd4_fs_location,
+					fsloc->locations_count, GFP_KERNEL);
 	if (!fsloc->locations)
 		return -ENOMEM;
 	for (i=0; i < fsloc->locations_count; i++) {
@@ -871,11 +870,11 @@ static void export_update(struct cache_head *cnew, struct cache_head *citem)

 static struct cache_head *svc_export_alloc(void)
 {
-	struct svc_export *i = kmalloc(sizeof(*i), GFP_KERNEL);
+	struct svc_export *i = kmalloc_obj(*i, GFP_KERNEL);
 	if (!i)
 		return NULL;

-	i->ex_stats = kmalloc(sizeof(*(i->ex_stats)), GFP_KERNEL);
+	i->ex_stats = kmalloc_obj(*(i->ex_stats), GFP_KERNEL);
 	if (!i->ex_stats) {
 		kfree(i);
 		return NULL;
diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c
index 93798575b807..6b4eeb28c88b 100644
--- a/fs/nfsd/filecache.c
+++ b/fs/nfsd/filecache.c
@@ -899,7 +899,7 @@ nfsd_alloc_fcache_disposal(void)
 {
 	struct nfsd_fcache_disposal *l;

-	l = kmalloc(sizeof(*l), GFP_KERNEL);
+	l = kmalloc_obj(*l, GFP_KERNEL);
 	if (!l)
 		return NULL;
 	spin_lock_init(&l->lock);
diff --git a/fs/nfsd/flexfilelayout.c b/fs/nfsd/flexfilelayout.c
index 0f1a35400cd5..a65d55bcdc02 100644
--- a/fs/nfsd/flexfilelayout.c
+++ b/fs/nfsd/flexfilelayout.c
@@ -36,7 +36,7 @@ nfsd4_ff_proc_layoutget(struct svc_rqst *rqstp, struct inode *inode,
 	 * Zero it out for the stateid - don't want junk in there!
 	 */
 	error = -ENOMEM;
-	fl = kzalloc(sizeof(*fl), GFP_KERNEL);
+	fl = kzalloc_obj(*fl, GFP_KERNEL);
 	if (!fl)
 		goto out_error;
 	args->lg_content = fl;
@@ -86,7 +86,7 @@ nfsd4_ff_proc_getdeviceinfo(struct super_block *sb, struct svc_rqst *rqstp,
 	u16 port;
 	char addr[INET6_ADDRSTRLEN];

-	da = kzalloc(sizeof(struct pnfs_ff_device_addr), GFP_KERNEL);
+	da = kzalloc_obj(struct pnfs_ff_device_addr, GFP_KERNEL);
 	if (!da)
 		return nfserrno(-ENOMEM);

diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index e00b2aea8da2..88782df7c3a1 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -1378,7 +1378,7 @@ void nfsd41_cb_referring_call(struct nfsd4_callback *cb,
 		}
 	}
 	if (!found) {
-		rcl = kmalloc(sizeof(*rcl), GFP_KERNEL);
+		rcl = kmalloc_obj(*rcl, GFP_KERNEL);
 		if (!rcl)
 			return;
 		memcpy(rcl->rcl_sessionid.data, sessionid->data,
@@ -1397,7 +1397,7 @@ void nfsd41_cb_referring_call(struct nfsd4_callback *cb,
 		}
 	}
 	if (!found) {
-		rc = kmalloc(sizeof(*rc), GFP_KERNEL);
+		rc = kmalloc_obj(*rc, GFP_KERNEL);
 		if (!rc)
 			goto out;
 		rc->rc_sequenceid = seqno;
diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c
index c319c31b0f64..6415b847a939 100644
--- a/fs/nfsd/nfs4idmap.c
+++ b/fs/nfsd/nfs4idmap.c
@@ -97,7 +97,7 @@ ent_put(struct kref *ref)
 static struct cache_head *
 ent_alloc(void)
 {
-	struct ent *e = kmalloc(sizeof(*e), GFP_KERNEL);
+	struct ent *e = kmalloc_obj(*e, GFP_KERNEL);
 	if (e)
 		return &e->h;
 	else
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index 37ab3a69c4b6..7dbb1dc184db 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -451,7 +451,7 @@ do_open_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, stru
 	int accmode;
 	__be32 status;

-	*resfh = kmalloc(sizeof(struct svc_fh), GFP_KERNEL);
+	*resfh = kmalloc_obj(struct svc_fh, GFP_KERNEL);
 	if (!*resfh)
 		return nfserr_jukebox;
 	fh_init(*resfh, NFS4_FHSIZE);
@@ -1630,7 +1630,7 @@ static __be32 nfsd4_ssc_setup_dul(struct nfsd_net *nn, char *ipaddr,
 	__be32 status = 0;

 	*nsui = NULL;
-	work = kzalloc(sizeof(*work), GFP_KERNEL);
+	work = kzalloc_obj(*work, GFP_KERNEL);
 try_again:
 	spin_lock(&nn->nfsd_ssc_lock);
 	list_for_each_entry_safe(ni, tmp, &nn->nfsd_ssc_mount_list, nsui_list) {
@@ -2160,7 +2160,7 @@ nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
 	memcpy(&copy->fh, &cstate->current_fh.fh_handle,
 		sizeof(struct knfsd_fh));
 	if (nfsd4_copy_is_async(copy)) {
-		async_copy = kzalloc(sizeof(struct nfsd4_copy), GFP_KERNEL);
+		async_copy = kzalloc_obj(struct nfsd4_copy, GFP_KERNEL);
 		if (!async_copy)
 			goto out_err;
 		async_copy->cp_nn = nn;
@@ -2171,7 +2171,8 @@ nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
 		if (atomic_inc_return(&nn->pending_async_copies) >
 				(int)rqstp->rq_pool->sp_nrthreads)
 			goto out_dec_async_copy_err;
-		async_copy->cp_src = kmalloc(sizeof(*async_copy->cp_src), GFP_KERNEL);
+		async_copy->cp_src = kmalloc_obj(*async_copy->cp_src,
+						 GFP_KERNEL);
 		if (!async_copy->cp_src)
 			goto out_dec_async_copy_err;
 		if (!nfs4_init_copy_state(nn, copy))
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c
index 1e6b2dd47ba7..87de08c7f405 100644
--- a/fs/nfsd/nfs4recover.c
+++ b/fs/nfsd/nfs4recover.c
@@ -203,7 +203,7 @@ nfsd4_build_namelist(struct dir_context *__ctx, const char *name, int namlen,

 	if (namlen != HEXDIR_LEN - 1)
 		return true;
-	entry = kmalloc(sizeof(struct name_list), GFP_KERNEL);
+	entry = kmalloc_obj(struct name_list, GFP_KERNEL);
 	if (entry == NULL)
 		return false;
 	memcpy(entry->name, name, HEXDIR_LEN - 1);
@@ -478,9 +478,8 @@ nfs4_legacy_state_init(struct net *net)
 	struct nfsd_net *nn = net_generic(net, nfsd_net_id);
 	int i;

-	nn->reclaim_str_hashtbl = kmalloc_array(CLIENT_HASH_SIZE,
-						sizeof(struct list_head),
-						GFP_KERNEL);
+	nn->reclaim_str_hashtbl = kmalloc_objs(struct list_head,
+					       CLIENT_HASH_SIZE, GFP_KERNEL);
 	if (!nn->reclaim_str_hashtbl)
 		return -ENOMEM;

@@ -898,7 +897,7 @@ __nfsd4_init_cld_pipe(struct net *net)
 	if (nn->cld_net)
 		return 0;

-	cn = kzalloc(sizeof(*cn), GFP_KERNEL);
+	cn = kzalloc_obj(*cn, GFP_KERNEL);
 	if (!cn) {
 		ret = -ENOMEM;
 		goto err;
@@ -960,7 +959,7 @@ alloc_cld_upcall(struct nfsd_net *nn)
 	struct cld_upcall *new, *tmp;
 	struct cld_net *cn = nn->cld_net;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return new;

@@ -1356,9 +1355,8 @@ nfs4_cld_state_init(struct net *net)
 	struct nfsd_net *nn = net_generic(net, nfsd_net_id);
 	int i;

-	nn->reclaim_str_hashtbl = kmalloc_array(CLIENT_HASH_SIZE,
-						sizeof(struct list_head),
-						GFP_KERNEL);
+	nn->reclaim_str_hashtbl = kmalloc_objs(struct list_head,
+					       CLIENT_HASH_SIZE, GFP_KERNEL);
 	if (!nn->reclaim_str_hashtbl)
 		return -ENOMEM;

diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index f5cb067a1e50..fb5b2ff4201e 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -299,7 +299,7 @@ find_or_allocate_block(struct nfs4_lockowner *lo, struct knfsd_fh *fh,

 	nbl = find_blocked_lock(lo, fh, nn);
 	if (!nbl) {
-		nbl = kmalloc(sizeof(*nbl), GFP_KERNEL);
+		nbl = kmalloc_obj(*nbl, GFP_KERNEL);
 		if (nbl) {
 			INIT_LIST_HEAD(&nbl->nbl_list);
 			INIT_LIST_HEAD(&nbl->nbl_lru);
@@ -974,7 +974,7 @@ struct nfs4_cpntf_state *nfs4_alloc_init_cpntf_state(struct nfsd_net *nn,
 {
 	struct nfs4_cpntf_state *cps;

-	cps = kzalloc(sizeof(struct nfs4_cpntf_state), GFP_KERNEL);
+	cps = kzalloc_obj(struct nfs4_cpntf_state, GFP_KERNEL);
 	if (!cps)
 		return NULL;
 	cps->cpntf_time = ktime_get_boottime_seconds();
@@ -2032,7 +2032,7 @@ static struct nfsd4_slot *nfsd4_alloc_slot(struct nfsd4_channel_attrs *fattrs,
 	size = fattrs->maxresp_cached < NFSD_MIN_HDR_SEQ_SZ ?
 		0 : fattrs->maxresp_cached - NFSD_MIN_HDR_SEQ_SZ;

-	slot = kzalloc(struct_size(slot, sl_data, size), gfp);
+	slot = kzalloc_flex(*slot, sl_data, size, gfp);
 	if (!slot)
 		return NULL;
 	slot->sl_index = index;
@@ -2047,7 +2047,7 @@ static struct nfsd4_session *alloc_session(struct nfsd4_channel_attrs *fattrs,
 	struct nfsd4_slot *slot;
 	int i;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;
 	xa_init(&new->se_slots);
@@ -2108,7 +2108,7 @@ static struct nfsd4_conn *alloc_conn(struct svc_rqst *rqstp, u32 flags)
 {
 	struct nfsd4_conn *conn;

-	conn = kmalloc(sizeof(struct nfsd4_conn), GFP_KERNEL);
+	conn = kmalloc_obj(struct nfsd4_conn, GFP_KERNEL);
 	if (!conn)
 		return NULL;
 	svc_xprt_get(rqstp->rq_xprt);
@@ -2357,9 +2357,8 @@ static struct nfs4_client *alloc_client(struct xdr_netobj name,
 	xdr_netobj_dup(&clp->cl_name, &name, GFP_KERNEL);
 	if (clp->cl_name.data == NULL)
 		goto err_no_name;
-	clp->cl_ownerstr_hashtbl = kmalloc_array(OWNER_HASH_SIZE,
-						 sizeof(struct list_head),
-						 GFP_KERNEL);
+	clp->cl_ownerstr_hashtbl = kmalloc_objs(struct list_head,
+						OWNER_HASH_SIZE, GFP_KERNEL);
 	if (!clp->cl_ownerstr_hashtbl)
 		goto err_no_hashtbl;
 	clp->cl_callback_wq = alloc_ordered_workqueue("nfsd4_callbacks", 0);
@@ -3309,7 +3308,7 @@ static struct nfs4_client *create_client(struct xdr_netobj name,
 		free_client(clp);
 		return NULL;
 	}
-	clp->cl_ra = kzalloc(sizeof(*clp->cl_ra), GFP_KERNEL);
+	clp->cl_ra = kzalloc_obj(*clp->cl_ra, GFP_KERNEL);
 	if (!clp->cl_ra) {
 		free_client(clp);
 		return NULL;
@@ -8823,7 +8822,7 @@ nfsd4_release_lockowner(struct svc_rqst *rqstp,
 static inline struct nfs4_client_reclaim *
 alloc_reclaim(void)
 {
-	return kmalloc(sizeof(struct nfs4_client_reclaim), GFP_KERNEL);
+	return kmalloc_obj(struct nfs4_client_reclaim, GFP_KERNEL);
 }

 bool
@@ -8960,19 +8959,16 @@ static int nfs4_state_create_net(struct net *net)
 	struct nfsd_net *nn = net_generic(net, nfsd_net_id);
 	int i;

-	nn->conf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE,
-					    sizeof(struct list_head),
-					    GFP_KERNEL);
+	nn->conf_id_hashtbl = kmalloc_objs(struct list_head, CLIENT_HASH_SIZE,
+					   GFP_KERNEL);
 	if (!nn->conf_id_hashtbl)
 		goto err;
-	nn->unconf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE,
-					      sizeof(struct list_head),
-					      GFP_KERNEL);
+	nn->unconf_id_hashtbl = kmalloc_objs(struct list_head, CLIENT_HASH_SIZE,
+					     GFP_KERNEL);
 	if (!nn->unconf_id_hashtbl)
 		goto err_unconf_id;
-	nn->sessionid_hashtbl = kmalloc_array(SESSION_HASH_SIZE,
-					      sizeof(struct list_head),
-					      GFP_KERNEL);
+	nn->sessionid_hashtbl = kmalloc_objs(struct list_head,
+					     SESSION_HASH_SIZE, GFP_KERNEL);
 	if (!nn->sessionid_hashtbl)
 		goto err_sessionid;

diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 5172dbd0cb05..c96d31b7846e 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -124,7 +124,7 @@ svcxdr_tmpalloc(struct nfsd4_compoundargs *argp, size_t len)
 {
 	struct svcxdr_tmpbuf *tb;

-	tb = kmalloc(struct_size(tb, buf, len), GFP_KERNEL);
+	tb = kmalloc_flex(*tb, buf, len, GFP_KERNEL);
 	if (!tb)
 		return NULL;
 	tb->next = argp->to_free;
@@ -2184,7 +2184,7 @@ nfsd4_decode_copy(struct nfsd4_compoundargs *argp, union nfsd4_op_u *u)
 	if (status)
 		return status;

-	ns_dummy = kmalloc(sizeof(struct nl4_server), GFP_KERNEL);
+	ns_dummy = kmalloc_obj(struct nl4_server, GFP_KERNEL);
 	if (ns_dummy == NULL)
 		return nfserr_jukebox;
 	for (i = 0; i < count - 1; i++) {
@@ -3956,7 +3956,7 @@ nfsd4_encode_fattr4(struct svc_rqst *rqstp, struct xdr_stream *xdr,
 	}
 	if ((attrmask[0] & (FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FSID)) &&
 	    !fhp) {
-		tempfh = kmalloc(sizeof(struct svc_fh), GFP_KERNEL);
+		tempfh = kmalloc_obj(struct svc_fh, GFP_KERNEL);
 		status = nfserr_jukebox;
 		if (!tempfh)
 			goto out;
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index 89fe2c0e8d44..777b7bb9aeca 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -477,7 +477,7 @@ static ssize_t write_pool_threads(struct file *file, char *buf, size_t size)
 		return strlen(buf);
 	}

-	nthreads = kcalloc(npools, sizeof(int), GFP_KERNEL);
+	nthreads = kzalloc_objs(int, npools, GFP_KERNEL);
 	rv = -ENOMEM;
 	if (nthreads == NULL)
 		goto out_free;
@@ -1596,7 +1596,7 @@ int nfsd_nl_threads_set_doit(struct sk_buff *skb, struct genl_info *info)

 	mutex_lock(&nfsd_mutex);

-	nthreads = kcalloc(nrpools, sizeof(int), GFP_KERNEL);
+	nthreads = kzalloc_objs(int, nrpools, GFP_KERNEL);
 	if (!nthreads) {
 		ret = -ENOMEM;
 		goto out_unlock;
diff --git a/fs/nilfs2/alloc.c b/fs/nilfs2/alloc.c
index 6b506995818d..e7eebb04f9a4 100644
--- a/fs/nilfs2/alloc.c
+++ b/fs/nilfs2/alloc.c
@@ -54,7 +54,7 @@ int nilfs_palloc_init_blockgroup(struct inode *inode, unsigned int entry_size)
 {
 	struct nilfs_mdt_info *mi = NILFS_MDT(inode);

-	mi->mi_bgl = kmalloc(sizeof(*mi->mi_bgl), GFP_NOFS);
+	mi->mi_bgl = kmalloc_obj(*mi->mi_bgl, GFP_NOFS);
 	if (!mi->mi_bgl)
 		return -ENOMEM;

diff --git a/fs/nilfs2/recovery.c b/fs/nilfs2/recovery.c
index a9c61d0492cb..4d5a6aa5214c 100644
--- a/fs/nilfs2/recovery.c
+++ b/fs/nilfs2/recovery.c
@@ -370,7 +370,7 @@ static int nilfs_scan_dsync_log(struct the_nilfs *nilfs, sector_t start_blocknr,
 			if (unlikely(!binfo))
 				goto out;

-			rb = kmalloc(sizeof(*rb), GFP_NOFS);
+			rb = kmalloc_obj(*rb, GFP_NOFS);
 			if (unlikely(!rb)) {
 				err = -ENOMEM;
 				goto out;
@@ -414,7 +414,7 @@ struct nilfs_segment_entry {

 static int nilfs_segment_list_add(struct list_head *head, __u64 segnum)
 {
-	struct nilfs_segment_entry *ent = kmalloc(sizeof(*ent), GFP_NOFS);
+	struct nilfs_segment_entry *ent = kmalloc_obj(*ent, GFP_NOFS);

 	if (unlikely(!ent))
 		return -ENOMEM;
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index deee16bc9d4e..21c5539c7e84 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -2701,7 +2701,7 @@ static struct nilfs_sc_info *nilfs_segctor_new(struct super_block *sb,
 	struct the_nilfs *nilfs = sb->s_fs_info;
 	struct nilfs_sc_info *sci;

-	sci = kzalloc(sizeof(*sci), GFP_KERNEL);
+	sci = kzalloc_obj(*sci, GFP_KERNEL);
 	if (!sci)
 		return NULL;

diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
index badc2cbc895e..55fac3f83232 100644
--- a/fs/nilfs2/super.c
+++ b/fs/nilfs2/super.c
@@ -1292,7 +1292,7 @@ static int nilfs_init_fs_context(struct fs_context *fc)
 {
 	struct nilfs_fs_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/nilfs2/the_nilfs.c b/fs/nilfs2/the_nilfs.c
index d0bcf744c553..f481532ea8e9 100644
--- a/fs/nilfs2/the_nilfs.c
+++ b/fs/nilfs2/the_nilfs.c
@@ -56,7 +56,7 @@ struct the_nilfs *alloc_nilfs(struct super_block *sb)
 {
 	struct the_nilfs *nilfs;

-	nilfs = kzalloc(sizeof(*nilfs), GFP_KERNEL);
+	nilfs = kzalloc_obj(*nilfs, GFP_KERNEL);
 	if (!nilfs)
 		return NULL;

@@ -877,7 +877,7 @@ nilfs_find_or_create_root(struct the_nilfs *nilfs, __u64 cno)
 	if (root)
 		return root;

-	new = kzalloc(sizeof(*root), GFP_KERNEL);
+	new = kzalloc_obj(*root, GFP_KERNEL);
 	if (!new)
 		return NULL;

diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c
index d0b9b984002f..c2dcb25151de 100644
--- a/fs/notify/fanotify/fanotify_user.c
+++ b/fs/notify/fanotify/fanotify_user.c
@@ -1573,7 +1573,7 @@ static struct fsnotify_event *fanotify_alloc_overflow_event(void)
 {
 	struct fanotify_event *oevent;

-	oevent = kmalloc(sizeof(*oevent), GFP_KERNEL_ACCOUNT);
+	oevent = kmalloc_obj(*oevent, GFP_KERNEL_ACCOUNT);
 	if (!oevent)
 		return NULL;

diff --git a/fs/notify/group.c b/fs/notify/group.c
index 18446b7b0d49..b56d1c1d9644 100644
--- a/fs/notify/group.c
+++ b/fs/notify/group.c
@@ -117,7 +117,7 @@ static struct fsnotify_group *__fsnotify_alloc_group(
 {
 	struct fsnotify_group *group;

-	group = kzalloc(sizeof(struct fsnotify_group), gfp);
+	group = kzalloc_obj(struct fsnotify_group, gfp);
 	if (!group)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
index b372fb2c56bd..5e1845f2c25d 100644
--- a/fs/notify/inotify/inotify_user.c
+++ b/fs/notify/inotify/inotify_user.c
@@ -660,7 +660,7 @@ static struct fsnotify_group *inotify_new_group(unsigned int max_events)
 	if (IS_ERR(group))
 		return group;

-	oevent = kmalloc(sizeof(struct inotify_event_info), GFP_KERNEL_ACCOUNT);
+	oevent = kmalloc_obj(struct inotify_event_info, GFP_KERNEL_ACCOUNT);
 	if (unlikely(!oevent)) {
 		fsnotify_destroy_group(group);
 		return ERR_PTR(-ENOMEM);
diff --git a/fs/notify/mark.c b/fs/notify/mark.c
index 8e6997e9aebb..691d36104ae2 100644
--- a/fs/notify/mark.c
+++ b/fs/notify/mark.c
@@ -644,7 +644,7 @@ static int fsnotify_attach_info_to_sb(struct super_block *sb)
 	struct fsnotify_sb_info *sbinfo;

 	/* sb info is freed on fsnotify_sb_delete() */
-	sbinfo = kzalloc(sizeof(*sbinfo), GFP_KERNEL);
+	sbinfo = kzalloc_obj(*sbinfo, GFP_KERNEL);
 	if (!sbinfo)
 		return -ENOMEM;

diff --git a/fs/ntfs3/bitmap.c b/fs/ntfs3/bitmap.c
index db7d0ecfb469..60b362f388d9 100644
--- a/fs/ntfs3/bitmap.c
+++ b/fs/ntfs3/bitmap.c
@@ -519,7 +519,7 @@ static int wnd_rescan(struct wnd_bitmap *wnd)
 	vbo = 0;

 	/* Allocate in memory instead of stack. Not critical if failed. */
-	ra = kzalloc(sizeof(*ra), GFP_NOFS);
+	ra = kzalloc_obj(*ra, GFP_NOFS);
 	if (ra) {
 		file_ra_state_init(ra, mapping);
 		ra->ra_pages = (wnd->nbits / 8 + PAGE_SIZE - 1) >> PAGE_SHIFT;
diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c
index f53037e0ecb6..7eecf1e01f74 100644
--- a/fs/ntfs3/file.c
+++ b/fs/ntfs3/file.c
@@ -1006,7 +1006,7 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)
 		return -EOPNOTSUPP;
 	}

-	pages = kmalloc_array(pages_per_frame, sizeof(struct page *), GFP_NOFS);
+	pages = kmalloc_objs(struct page *, pages_per_frame, GFP_NOFS);
 	if (!pages)
 		return -ENOMEM;

diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c
index bd0fa481e4b3..2e901d073fe9 100644
--- a/fs/ntfs3/frecord.c
+++ b/fs/ntfs3/frecord.c
@@ -316,7 +316,7 @@ bool ni_add_subrecord(struct ntfs_inode *ni, CLST rno, struct mft_inode **mi)
 {
 	struct mft_inode *m;

-	m = kzalloc(sizeof(struct mft_inode), GFP_NOFS);
+	m = kzalloc_obj(struct mft_inode, GFP_NOFS);
 	if (!m)
 		return false;

@@ -1915,7 +1915,7 @@ int ni_read_folio_cmpr(struct ntfs_inode *ni, struct folio *folio)
 	idx = (vbo - frame_vbo) >> PAGE_SHIFT;

 	pages_per_frame = frame_size >> PAGE_SHIFT;
-	pages = kcalloc(pages_per_frame, sizeof(struct page *), GFP_NOFS);
+	pages = kzalloc_objs(struct page *, pages_per_frame, GFP_NOFS);
 	if (!pages) {
 		err = -ENOMEM;
 		goto out;
@@ -1998,7 +1998,7 @@ int ni_decompress_file(struct ntfs_inode *ni)
 	frame_bits = ni_ext_compress_bits(ni);
 	frame_size = 1u << frame_bits;
 	pages_per_frame = frame_size >> PAGE_SHIFT;
-	pages = kcalloc(pages_per_frame, sizeof(struct page *), GFP_NOFS);
+	pages = kzalloc_objs(struct page *, pages_per_frame, GFP_NOFS);
 	if (!pages) {
 		err = -ENOMEM;
 		goto out;
diff --git a/fs/ntfs3/fslog.c b/fs/ntfs3/fslog.c
index 10863c83c315..272e45276143 100644
--- a/fs/ntfs3/fslog.c
+++ b/fs/ntfs3/fslog.c
@@ -2473,7 +2473,7 @@ static int read_log_rec_lcb(struct ntfs_log *log, u64 lsn, u32 ctx_mode,
 	if (!verify_client_lsn(log, cr, lsn))
 		return -EINVAL;

-	lcb = kzalloc(sizeof(struct lcb), GFP_NOFS);
+	lcb = kzalloc_obj(struct lcb, GFP_NOFS);
 	if (!lcb)
 		return -ENOMEM;
 	lcb->client = log->client_id;
@@ -3117,8 +3117,7 @@ static int do_action(struct ntfs_log *log, struct OPEN_ATTR_ENRTY *oe,
 			/* Read from disk. */
 			err = mi_get(sbi, rno, &mi);
 			if (err && op == InitializeFileRecordSegment) {
-				mi = kzalloc(sizeof(struct mft_inode),
-					     GFP_NOFS);
+				mi = kzalloc_obj(struct mft_inode, GFP_NOFS);
 				if (!mi)
 					return -ENOMEM;
 				err = mi_format_new(mi, sbi, rno, 0, false);
@@ -3779,7 +3778,7 @@ int log_replay(struct ntfs_inode *ni, bool *initialized)
 	u16 t16;
 	u32 t32;

-	log = kzalloc(sizeof(struct ntfs_log), GFP_NOFS);
+	log = kzalloc_obj(struct ntfs_log, GFP_NOFS);
 	if (!log)
 		return -ENOMEM;

@@ -4725,7 +4724,7 @@ int log_replay(struct ntfs_inode *ni, bool *initialized)
 		goto next_dirty_page;
 	}

-	oa = kzalloc(sizeof(struct OpenAttr), GFP_NOFS);
+	oa = kzalloc_obj(struct OpenAttr, GFP_NOFS);
 	if (!oa) {
 		err = -ENOMEM;
 		goto out;
diff --git a/fs/ntfs3/index.c b/fs/ntfs3/index.c
index 2416c61050f1..97f06c26fe1a 100644
--- a/fs/ntfs3/index.c
+++ b/fs/ntfs3/index.c
@@ -940,7 +940,7 @@ static struct indx_node *indx_new(struct ntfs_index *indx,
 	u16 fn;
 	u32 eo;

-	r = kzalloc(sizeof(struct indx_node), GFP_NOFS);
+	r = kzalloc_obj(struct indx_node, GFP_NOFS);
 	if (!r)
 		return ERR_PTR(-ENOMEM);

@@ -1046,7 +1046,7 @@ int indx_read_ra(struct ntfs_index *indx, struct ntfs_inode *ni, CLST vbn,
 	const struct INDEX_NAMES *name;

 	if (!in) {
-		in = kzalloc(sizeof(struct indx_node), GFP_NOFS);
+		in = kzalloc_obj(struct indx_node, GFP_NOFS);
 		if (!in)
 			return -ENOMEM;
 	} else {
diff --git a/fs/ntfs3/lib/lzx_decompress.c b/fs/ntfs3/lib/lzx_decompress.c
index 4d5701024f83..9196bf30011a 100644
--- a/fs/ntfs3/lib/lzx_decompress.c
+++ b/fs/ntfs3/lib/lzx_decompress.c
@@ -572,7 +572,7 @@ static int lzx_decompress_block(const struct lzx_decompressor *d,
  */
 struct lzx_decompressor *lzx_allocate_decompressor(void)
 {
-	return kmalloc(sizeof(struct lzx_decompressor), GFP_NOFS);
+	return kmalloc_obj(struct lzx_decompressor, GFP_NOFS);
 }

 /*
diff --git a/fs/ntfs3/lib/xpress_decompress.c b/fs/ntfs3/lib/xpress_decompress.c
index 769c6d3dde67..402cf21aede2 100644
--- a/fs/ntfs3/lib/xpress_decompress.c
+++ b/fs/ntfs3/lib/xpress_decompress.c
@@ -39,7 +39,7 @@ struct xpress_decompressor {
  */
 struct xpress_decompressor *xpress_allocate_decompressor(void)
 {
-	return kmalloc(sizeof(struct xpress_decompressor), GFP_NOFS);
+	return kmalloc_obj(struct xpress_decompressor, GFP_NOFS);
 }

 /*
diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h
index 921b526eb0f4..daf5a1f47275 100644
--- a/fs/ntfs3/ntfs_fs.h
+++ b/fs/ntfs3/ntfs_fs.h
@@ -730,7 +730,7 @@ int indx_used_bit(struct ntfs_index *indx, struct ntfs_inode *ni, size_t *bit);
 void fnd_clear(struct ntfs_fnd *fnd);
 static inline struct ntfs_fnd *fnd_get(void)
 {
-	return kzalloc(sizeof(struct ntfs_fnd), GFP_NOFS);
+	return kzalloc_obj(struct ntfs_fnd, GFP_NOFS);
 }
 static inline void fnd_put(struct ntfs_fnd *fnd)
 {
@@ -996,7 +996,7 @@ static inline void run_init(struct runs_tree *run)

 static inline struct runs_tree *run_alloc(void)
 {
-	return kzalloc(sizeof(struct runs_tree), GFP_NOFS);
+	return kzalloc_obj(struct runs_tree, GFP_NOFS);
 }

 static inline void run_close(struct runs_tree *run)
diff --git a/fs/ntfs3/record.c b/fs/ntfs3/record.c
index 167093e8d287..32bdb034c2a3 100644
--- a/fs/ntfs3/record.c
+++ b/fs/ntfs3/record.c
@@ -71,7 +71,7 @@ static __le16 mi_new_attt_id(struct ntfs_inode *ni, struct mft_inode *mi)
 int mi_get(struct ntfs_sb_info *sbi, CLST rno, struct mft_inode **mi)
 {
 	int err;
-	struct mft_inode *m = kzalloc(sizeof(struct mft_inode), GFP_NOFS);
+	struct mft_inode *m = kzalloc_obj(struct mft_inode, GFP_NOFS);

 	if (!m)
 		return -ENOMEM;
diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c
index 27411203082a..174a7cb202a0 100644
--- a/fs/ntfs3/super.c
+++ b/fs/ntfs3/super.c
@@ -1828,7 +1828,7 @@ static int __ntfs_init_fs_context(struct fs_context *fc)
 	struct ntfs_mount_options *opts;
 	struct ntfs_sb_info *sbi;

-	opts = kzalloc(sizeof(struct ntfs_mount_options), GFP_NOFS);
+	opts = kzalloc_obj(struct ntfs_mount_options, GFP_NOFS);
 	if (!opts)
 		return -ENOMEM;

@@ -1847,7 +1847,7 @@ static int __ntfs_init_fs_context(struct fs_context *fc)
 	if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE)
 		goto ok;

-	sbi = kzalloc(sizeof(struct ntfs_sb_info), GFP_NOFS);
+	sbi = kzalloc_obj(struct ntfs_sb_info, GFP_NOFS);
 	if (!sbi)
 		goto free_opts;

diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index b7db177d17d6..ce8ce1470981 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -686,7 +686,7 @@ static struct ocfs2_path *ocfs2_new_path(struct buffer_head *root_bh,

 	BUG_ON(le16_to_cpu(root_el->l_tree_depth) >= OCFS2_MAX_PATH_DEPTH);

-	path = kzalloc(sizeof(*path), GFP_NOFS);
+	path = kzalloc_obj(*path, GFP_NOFS);
 	if (path) {
 		path->p_tree_depth = le16_to_cpu(root_el->l_tree_depth);
 		get_bh(root_bh);
@@ -1202,8 +1202,7 @@ static int ocfs2_add_branch(handle_t *handle,
 	}

 	/* allocate the number of new eb blocks we need */
-	new_eb_bhs = kcalloc(new_blocks, sizeof(struct buffer_head *),
-			     GFP_KERNEL);
+	new_eb_bhs = kzalloc_objs(struct buffer_head *, new_blocks, GFP_KERNEL);
 	if (!new_eb_bhs) {
 		status = -ENOMEM;
 		mlog_errno(status);
@@ -6493,7 +6492,7 @@ int ocfs2_cache_cluster_dealloc(struct ocfs2_cached_dealloc_ctxt *ctxt,
 	int ret = 0;
 	struct ocfs2_cached_block_free *item;

-	item = kzalloc(sizeof(*item), GFP_NOFS);
+	item = kzalloc_obj(*item, GFP_NOFS);
 	if (item == NULL) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
@@ -6619,7 +6618,7 @@ ocfs2_find_per_slot_free_list(int type,
 		fl = fl->f_next_suballocator;
 	}

-	fl = kmalloc(sizeof(*fl), GFP_NOFS);
+	fl = kmalloc_obj(*fl, GFP_NOFS);
 	if (fl) {
 		fl->f_inode_type = type;
 		fl->f_slot = slot;
@@ -6794,7 +6793,7 @@ int ocfs2_cache_block_dealloc(struct ocfs2_cached_dealloc_ctxt *ctxt,
 		goto out;
 	}

-	item = kzalloc(sizeof(*item), GFP_NOFS);
+	item = kzalloc_obj(*item, GFP_NOFS);
 	if (item == NULL) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
@@ -6984,8 +6983,8 @@ int ocfs2_zero_range_for_truncate(struct inode *inode, handle_t *handle,
 	if (range_start >= range_end)
 		return 0;

-	folios = kcalloc(ocfs2_pages_per_cluster(sb),
-			sizeof(struct folio *), GFP_NOFS);
+	folios = kzalloc_objs(struct folio *, ocfs2_pages_per_cluster(sb),
+			      GFP_NOFS);
 	if (folios == NULL) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index 76c86f1c2b1c..17ba79f443ee 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -823,7 +823,7 @@ static int ocfs2_alloc_write_ctxt(struct ocfs2_write_ctxt **wcp,
 	u32 cend;
 	struct ocfs2_write_ctxt *wc;

-	wc = kzalloc(sizeof(struct ocfs2_write_ctxt), GFP_NOFS);
+	wc = kzalloc_obj(struct ocfs2_write_ctxt, GFP_NOFS);
 	if (!wc)
 		return -ENOMEM;

@@ -1325,8 +1325,7 @@ static int ocfs2_unwritten_check(struct inode *inode,

 	if (new == NULL) {
 		spin_unlock(&oi->ip_lock);
-		new = kmalloc(sizeof(struct ocfs2_unwritten_extent),
-			     GFP_NOFS);
+		new = kmalloc_obj(struct ocfs2_unwritten_extent, GFP_NOFS);
 		if (new == NULL) {
 			ret = -ENOMEM;
 			goto out;
@@ -2080,7 +2079,7 @@ ocfs2_dio_alloc_write_ctx(struct buffer_head *bh, int *alloc)
 	if (bh->b_private)
 		return bh->b_private;

-	dwc = kmalloc(sizeof(struct ocfs2_dio_write_ctxt), GFP_NOFS);
+	dwc = kmalloc_obj(struct ocfs2_dio_write_ctxt, GFP_NOFS);
 	if (dwc == NULL)
 		return NULL;
 	INIT_LIST_HEAD(&dwc->dw_zero_list);
diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c
index 8e9cbc334cf4..91fb76a43900 100644
--- a/fs/ocfs2/cluster/heartbeat.c
+++ b/fs/ocfs2/cluster/heartbeat.c
@@ -1677,8 +1677,8 @@ static int o2hb_map_slot_data(struct o2hb_region *reg)
 	if (reg->hr_tmp_block == NULL)
 		return -ENOMEM;

-	reg->hr_slots = kcalloc(reg->hr_blocks,
-				sizeof(struct o2hb_disk_slot), GFP_KERNEL);
+	reg->hr_slots = kzalloc_objs(struct o2hb_disk_slot, reg->hr_blocks,
+				     GFP_KERNEL);
 	if (reg->hr_slots == NULL)
 		return -ENOMEM;

@@ -1694,8 +1694,8 @@ static int o2hb_map_slot_data(struct o2hb_region *reg)
 			   "at %u blocks per page\n",
 	     reg->hr_num_pages, reg->hr_blocks, spp);

-	reg->hr_slot_data = kcalloc(reg->hr_num_pages, sizeof(struct page *),
-				    GFP_KERNEL);
+	reg->hr_slot_data = kzalloc_objs(struct page *, reg->hr_num_pages,
+					 GFP_KERNEL);
 	if (!reg->hr_slot_data)
 		return -ENOMEM;

@@ -2001,7 +2001,7 @@ static struct config_item *o2hb_heartbeat_group_make_item(struct config_group *g
 	struct o2hb_region *reg = NULL;
 	int ret;

-	reg = kzalloc(sizeof(struct o2hb_region), GFP_KERNEL);
+	reg = kzalloc_obj(struct o2hb_region, GFP_KERNEL);
 	if (reg == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -2211,7 +2211,7 @@ struct config_group *o2hb_alloc_hb_set(void)
 	struct o2hb_heartbeat_group *hs = NULL;
 	struct config_group *ret = NULL;

-	hs = kzalloc(sizeof(struct o2hb_heartbeat_group), GFP_KERNEL);
+	hs = kzalloc_obj(struct o2hb_heartbeat_group, GFP_KERNEL);
 	if (hs == NULL)
 		goto out;

diff --git a/fs/ocfs2/cluster/netdebug.c b/fs/ocfs2/cluster/netdebug.c
index bc27301eab6d..2cb3162aeb89 100644
--- a/fs/ocfs2/cluster/netdebug.c
+++ b/fs/ocfs2/cluster/netdebug.c
@@ -380,7 +380,7 @@ static int sc_common_open(struct file *file, int ctxt)
 	struct o2net_sock_debug *sd;
 	struct o2net_sock_container *dummy_sc;

-	dummy_sc = kzalloc(sizeof(*dummy_sc), GFP_KERNEL);
+	dummy_sc = kzalloc_obj(*dummy_sc, GFP_KERNEL);
 	if (!dummy_sc)
 		return -ENOMEM;

diff --git a/fs/ocfs2/cluster/nodemanager.c b/fs/ocfs2/cluster/nodemanager.c
index c5e83c774d73..6fb8bc38c0f7 100644
--- a/fs/ocfs2/cluster/nodemanager.c
+++ b/fs/ocfs2/cluster/nodemanager.c
@@ -587,7 +587,7 @@ static struct config_item *o2nm_node_group_make_item(struct config_group *group,
 	if (strlen(name) > O2NM_MAX_NAME_LEN)
 		return ERR_PTR(-ENAMETOOLONG);

-	node = kzalloc(sizeof(struct o2nm_node), GFP_KERNEL);
+	node = kzalloc_obj(struct o2nm_node, GFP_KERNEL);
 	if (node == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -695,8 +695,8 @@ static struct config_group *o2nm_cluster_group_make_group(struct config_group *g
 	if (o2nm_single_cluster)
 		return ERR_PTR(-ENOSPC);

-	cluster = kzalloc(sizeof(struct o2nm_cluster), GFP_KERNEL);
-	ns = kzalloc(sizeof(struct o2nm_node_group), GFP_KERNEL);
+	cluster = kzalloc_obj(struct o2nm_cluster, GFP_KERNEL);
+	ns = kzalloc_obj(struct o2nm_node_group, GFP_KERNEL);
 	o2hb_group = o2hb_alloc_hb_set();
 	if (cluster == NULL || ns == NULL || o2hb_group == NULL)
 		goto out;
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
index 79b281e32f4c..09a1f3b77bb8 100644
--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
@@ -415,7 +415,7 @@ static struct o2net_sock_container *sc_alloc(struct o2nm_node *node)
 	int status = 0;

 	page = alloc_page(GFP_NOFS);
-	sc = kzalloc(sizeof(*sc), GFP_NOFS);
+	sc = kzalloc_obj(*sc, GFP_NOFS);
 	if (sc == NULL || page == NULL)
 		goto out;

@@ -825,7 +825,7 @@ int o2net_register_handler(u32 msg_type, u32 key, u32 max_len,
 		goto out;
 	}

-       	nmh = kzalloc(sizeof(struct o2net_msg_handler), GFP_NOFS);
+       	nmh = kzalloc_obj(struct o2net_msg_handler, GFP_NOFS);
 	if (nmh == NULL) {
 		ret = -ENOMEM;
 		goto out;
@@ -1064,14 +1064,14 @@ int o2net_send_message_vec(u32 msg_type, u32 key, struct kvec *caller_vec,
 	o2net_set_nst_sock_container(&nst, sc);

 	veclen = caller_veclen + 1;
-	vec = kmalloc_array(veclen, sizeof(struct kvec), GFP_ATOMIC);
+	vec = kmalloc_objs(struct kvec, veclen, GFP_ATOMIC);
 	if (vec == NULL) {
 		mlog(0, "failed to %zu element kvec!\n", veclen);
 		ret = -ENOMEM;
 		goto out;
 	}

-	msg = kmalloc(sizeof(struct o2net_msg), GFP_ATOMIC);
+	msg = kmalloc_obj(struct o2net_msg, GFP_ATOMIC);
 	if (!msg) {
 		mlog(0, "failed to allocate a o2net_msg!\n");
 		ret = -ENOMEM;
diff --git a/fs/ocfs2/dcache.c b/fs/ocfs2/dcache.c
index 1873bbbb7e5b..c4ba968e778b 100644
--- a/fs/ocfs2/dcache.c
+++ b/fs/ocfs2/dcache.c
@@ -265,7 +265,7 @@ int ocfs2_dentry_attach_lock(struct dentry *dentry,
 	/*
 	 * There are no other aliases
 	 */
-	dl = kmalloc(sizeof(*dl), GFP_NOFS);
+	dl = kmalloc_obj(*dl, GFP_NOFS);
 	if (!dl) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 782afd9fa934..1c8abf2c592c 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -2550,8 +2550,7 @@ static struct buffer_head **ocfs2_dx_dir_kmalloc_leaves(struct super_block *sb,
 	int num_dx_leaves = ocfs2_clusters_to_blocks(sb, 1);
 	struct buffer_head **dx_leaves;

-	dx_leaves = kcalloc(num_dx_leaves, sizeof(struct buffer_head *),
-			    GFP_NOFS);
+	dx_leaves = kzalloc_objs(struct buffer_head *, num_dx_leaves, GFP_NOFS);
 	if (dx_leaves && ret_num_leaves)
 		*ret_num_leaves = num_dx_leaves;

diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c
index cf3ca2f597c2..ff4868619d35 100644
--- a/fs/ocfs2/dlm/dlmdomain.c
+++ b/fs/ocfs2/dlm/dlmdomain.c
@@ -1048,7 +1048,7 @@ static int dlm_send_regions(struct dlm_ctxt *dlm, unsigned long *node_map)
 	if (find_first_bit(node_map, O2NM_MAX_NODES) >= O2NM_MAX_NODES)
 		goto bail;

-	qr = kzalloc(sizeof(struct dlm_query_region), GFP_KERNEL);
+	qr = kzalloc_obj(struct dlm_query_region, GFP_KERNEL);
 	if (!qr) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
@@ -1220,7 +1220,7 @@ static int dlm_send_nodeinfo(struct dlm_ctxt *dlm, unsigned long *node_map)
 	if (find_first_bit(node_map, O2NM_MAX_NODES) >= O2NM_MAX_NODES)
 		goto bail;

-	qn = kzalloc(sizeof(struct dlm_query_nodeinfo), GFP_KERNEL);
+	qn = kzalloc_obj(struct dlm_query_nodeinfo, GFP_KERNEL);
 	if (!qn) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
@@ -1592,7 +1592,7 @@ static int dlm_try_to_join_domain(struct dlm_ctxt *dlm)

 	mlog(0, "%p", dlm);

-	ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kzalloc_obj(*ctxt, GFP_KERNEL);
 	if (!ctxt) {
 		status = -ENOMEM;
 		mlog_errno(status);
@@ -1946,7 +1946,7 @@ static struct dlm_ctxt *dlm_alloc_ctxt(const char *domain,
 	int ret;
 	struct dlm_ctxt *dlm = NULL;

-	dlm = kzalloc(sizeof(*dlm), GFP_KERNEL);
+	dlm = kzalloc_obj(*dlm, GFP_KERNEL);
 	if (!dlm) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
diff --git a/fs/ocfs2/dlm/dlmlock.c b/fs/ocfs2/dlm/dlmlock.c
index 041fd1791ae7..46120eb75d90 100644
--- a/fs/ocfs2/dlm/dlmlock.c
+++ b/fs/ocfs2/dlm/dlmlock.c
@@ -414,7 +414,7 @@ struct dlm_lock * dlm_new_lock(int type, u8 node, u64 cookie,

 	if (!lksb) {
 		/* zero memory only if kernel-allocated */
-		lksb = kzalloc(sizeof(*lksb), GFP_NOFS);
+		lksb = kzalloc_obj(*lksb, GFP_NOFS);
 		if (!lksb) {
 			kmem_cache_free(dlm_lock_cache, lock);
 			return NULL;
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index 4145e06d2c08..eb62724bbe9b 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
@@ -2040,7 +2040,7 @@ int dlm_dispatch_assert_master(struct dlm_ctxt *dlm,
 			       int ignore_higher, u8 request_from, u32 flags)
 {
 	struct dlm_work_item *item;
-	item = kzalloc(sizeof(*item), GFP_ATOMIC);
+	item = kzalloc_obj(*item, GFP_ATOMIC);
 	if (!item)
 		return -ENOMEM;

@@ -2303,7 +2303,7 @@ int dlm_deref_lockres_handler(struct o2net_msg *msg, u32 len, void *data,
 		goto done;
 	}

-	item = kzalloc(sizeof(*item), GFP_NOFS);
+	item = kzalloc_obj(*item, GFP_NOFS);
 	if (!item) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
index 843ee02bd85f..128872bd945d 100644
--- a/fs/ocfs2/dlm/dlmrecovery.c
+++ b/fs/ocfs2/dlm/dlmrecovery.c
@@ -743,7 +743,7 @@ static int dlm_init_recovery_area(struct dlm_ctxt *dlm, u8 dead_node)
 		}
 		BUG_ON(num == dead_node);

-		ndata = kzalloc(sizeof(*ndata), GFP_NOFS);
+		ndata = kzalloc_obj(*ndata, GFP_NOFS);
 		if (!ndata) {
 			dlm_destroy_recovery_area(dlm);
 			return -ENOMEM;
@@ -830,7 +830,7 @@ int dlm_request_all_locks_handler(struct o2net_msg *msg, u32 len, void *data,
 	}
 	BUG_ON(lr->dead_node != dlm->reco.dead_node);

-	item = kzalloc(sizeof(*item), GFP_NOFS);
+	item = kzalloc_obj(*item, GFP_NOFS);
 	if (!item) {
 		dlm_put(dlm);
 		return -ENOMEM;
@@ -1382,7 +1382,7 @@ int dlm_mig_lockres_handler(struct o2net_msg *msg, u32 len, void *data,

 	ret = -ENOMEM;
 	buf = kmalloc(be16_to_cpu(msg->data_len), GFP_NOFS);
-	item = kzalloc(sizeof(*item), GFP_NOFS);
+	item = kzalloc_obj(*item, GFP_NOFS);
 	if (!buf || !item)
 		goto leave;

diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c
index 339f0b11cdc8..45cce261da65 100644
--- a/fs/ocfs2/dlmfs/dlmfs.c
+++ b/fs/ocfs2/dlmfs/dlmfs.c
@@ -134,7 +134,7 @@ static int dlmfs_file_open(struct inode *inode,
 	 * doesn't make sense for LVB writes. */
 	file->f_flags &= ~O_APPEND;

-	fp = kmalloc(sizeof(*fp), GFP_NOFS);
+	fp = kmalloc_obj(*fp, GFP_NOFS);
 	if (!fp) {
 		status = -ENOMEM;
 		goto bail;
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 619ff03b15d6..627d488b0148 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
@@ -3030,7 +3030,7 @@ struct ocfs2_dlm_debug *ocfs2_new_dlm_debug(void)
 {
 	struct ocfs2_dlm_debug *dlm_debug;

-	dlm_debug = kmalloc(sizeof(struct ocfs2_dlm_debug), GFP_KERNEL);
+	dlm_debug = kmalloc_obj(struct ocfs2_dlm_debug, GFP_KERNEL);
 	if (!dlm_debug) {
 		mlog_errno(-ENOMEM);
 		goto out;
diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c
index ef147e8b3271..d68229422dda 100644
--- a/fs/ocfs2/extent_map.c
+++ b/fs/ocfs2/extent_map.c
@@ -246,7 +246,7 @@ void ocfs2_extent_map_insert_rec(struct inode *inode,
 		if (new_emi == NULL) {
 			spin_unlock(&oi->ip_lock);

-			new_emi = kmalloc(sizeof(*new_emi), GFP_NOFS);
+			new_emi = kmalloc_obj(*new_emi, GFP_NOFS);
 			if (new_emi == NULL)
 				goto out;

diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index ed961a854983..70879058b0c9 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -54,7 +54,7 @@ static int ocfs2_init_file_private(struct inode *inode, struct file *file)
 {
 	struct ocfs2_file_private *fp;

-	fp = kzalloc(sizeof(struct ocfs2_file_private), GFP_KERNEL);
+	fp = kzalloc_obj(struct ocfs2_file_private, GFP_KERNEL);
 	if (!fp)
 		return -ENOMEM;

diff --git a/fs/ocfs2/filecheck.c b/fs/ocfs2/filecheck.c
index 3ad7baf67658..be713d7d24a7 100644
--- a/fs/ocfs2/filecheck.c
+++ b/fs/ocfs2/filecheck.c
@@ -169,7 +169,7 @@ int ocfs2_filecheck_create_sysfs(struct ocfs2_super *osb)
 	struct ocfs2_filecheck *fcheck;
 	struct ocfs2_filecheck_sysfs_entry *entry = &osb->osb_fc_ent;

-	fcheck = kmalloc(sizeof(struct ocfs2_filecheck), GFP_NOFS);
+	fcheck = kmalloc_obj(struct ocfs2_filecheck, GFP_NOFS);
 	if (!fcheck)
 		return -ENOMEM;

@@ -464,7 +464,7 @@ static ssize_t ocfs2_filecheck_attr_store(struct kobject *kobj,
 		goto exit;
 	}

-	entry = kmalloc(sizeof(struct ocfs2_filecheck_entry), GFP_NOFS);
+	entry = kmalloc_obj(struct ocfs2_filecheck_entry, GFP_NOFS);
 	if (!entry) {
 		ret = -ENOMEM;
 		goto exit;
diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c
index b6864602814c..872b826979ec 100644
--- a/fs/ocfs2/ioctl.c
+++ b/fs/ocfs2/ioctl.c
@@ -334,7 +334,7 @@ static int ocfs2_info_handle_freeinode(struct inode *inode,
 	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
 	struct inode *inode_alloc = NULL;

-	oifi = kzalloc(sizeof(struct ocfs2_info_freeinode), GFP_KERNEL);
+	oifi = kzalloc_obj(struct ocfs2_info_freeinode, GFP_KERNEL);
 	if (!oifi) {
 		status = -ENOMEM;
 		mlog_errno(status);
@@ -620,7 +620,7 @@ static int ocfs2_info_handle_freefrag(struct inode *inode,
 	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
 	struct inode *gb_inode = NULL;

-	oiff = kzalloc(sizeof(struct ocfs2_info_freefrag), GFP_KERNEL);
+	oiff = kzalloc_obj(struct ocfs2_info_freefrag, GFP_KERNEL);
 	if (!oiff) {
 		status = -ENOMEM;
 		mlog_errno(status);
diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c
index 85239807dec7..1b9359304aef 100644
--- a/fs/ocfs2/journal.c
+++ b/fs/ocfs2/journal.c
@@ -114,9 +114,8 @@ int ocfs2_compute_replay_slots(struct ocfs2_super *osb)
 	if (osb->replay_map)
 		return 0;

-	replay_map = kzalloc(struct_size(replay_map, rm_replay_slots,
-					 osb->max_slots),
-			     GFP_KERNEL);
+	replay_map = kzalloc_flex(*replay_map, rm_replay_slots, osb->max_slots,
+				  GFP_KERNEL);
 	if (!replay_map) {
 		mlog_errno(-ENOMEM);
 		return -ENOMEM;
@@ -178,8 +177,7 @@ int ocfs2_recovery_init(struct ocfs2_super *osb)
 	osb->recovery_thread_task = NULL;
 	init_waitqueue_head(&osb->recovery_event);

-	rm = kzalloc(struct_size(rm, rm_entries, osb->max_slots),
-		     GFP_KERNEL);
+	rm = kzalloc_flex(*rm, rm_entries, osb->max_slots, GFP_KERNEL);
 	if (!rm) {
 		mlog_errno(-ENOMEM);
 		return -ENOMEM;
@@ -878,7 +876,7 @@ int ocfs2_journal_alloc(struct ocfs2_super *osb)
 	int status = 0;
 	struct ocfs2_journal *journal;

-	journal = kzalloc(sizeof(struct ocfs2_journal), GFP_KERNEL);
+	journal = kzalloc_obj(struct ocfs2_journal, GFP_KERNEL);
 	if (!journal) {
 		mlog(ML_ERROR, "unable to alloc journal\n");
 		status = -ENOMEM;
@@ -1394,7 +1392,7 @@ static void ocfs2_queue_recovery_completion(struct ocfs2_journal *journal,
 {
 	struct ocfs2_la_recovery_item *item;

-	item = kmalloc(sizeof(struct ocfs2_la_recovery_item), GFP_NOFS);
+	item = kmalloc_obj(struct ocfs2_la_recovery_item, GFP_NOFS);
 	if (!item) {
 		/* Though we wish to avoid it, we are in fact safe in
 		 * skipping local alloc cleanup as fsck.ocfs2 is more
@@ -1480,7 +1478,7 @@ static int __ocfs2_recovery_thread(void *arg)
 	}

 	if (quota_enabled) {
-		rm_quota = kcalloc(osb->max_slots, sizeof(int), GFP_NOFS);
+		rm_quota = kzalloc_objs(int, osb->max_slots, GFP_NOFS);
 		if (!rm_quota) {
 			status = -ENOMEM;
 			goto bail;
diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
index 56be21c695d6..29fa6fb11ea5 100644
--- a/fs/ocfs2/localalloc.c
+++ b/fs/ocfs2/localalloc.c
@@ -1094,7 +1094,7 @@ static int ocfs2_local_alloc_reserve_for_window(struct ocfs2_super *osb,
 {
 	int status;

-	*ac = kzalloc(sizeof(struct ocfs2_alloc_context), GFP_KERNEL);
+	*ac = kzalloc_obj(struct ocfs2_alloc_context, GFP_KERNEL);
 	if (!(*ac)) {
 		status = -ENOMEM;
 		mlog_errno(status);
diff --git a/fs/ocfs2/move_extents.c b/fs/ocfs2/move_extents.c
index e3cdf8788484..c53de4439d93 100644
--- a/fs/ocfs2/move_extents.c
+++ b/fs/ocfs2/move_extents.c
@@ -1011,7 +1011,7 @@ int ocfs2_ioctl_move_extents(struct file *filp, void __user *argp)
 		goto out_drop;
 	}

-	context = kzalloc(sizeof(struct ocfs2_move_extents_context), GFP_NOFS);
+	context = kzalloc_obj(struct ocfs2_move_extents_context, GFP_NOFS);
 	if (!context) {
 		status = -ENOMEM;
 		mlog_errno(status);
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index 4ec6dbed65a8..85ad1a9db734 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -1736,7 +1736,7 @@ static int ocfs2_create_symlink_data(struct ocfs2_super *osb,
 		goto bail;
 	}

-	bhs = kcalloc(blocks, sizeof(struct buffer_head *), GFP_KERNEL);
+	bhs = kzalloc_objs(struct buffer_head *, blocks, GFP_KERNEL);
 	if (!bhs) {
 		status = -ENOMEM;
 		mlog_errno(status);
diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c
index de7f12858729..c4e0117d8977 100644
--- a/fs/ocfs2/quota_local.c
+++ b/fs/ocfs2/quota_local.c
@@ -298,7 +298,7 @@ static int ocfs2_add_recovery_chunk(struct super_block *sb,
 {
 	struct ocfs2_recovery_chunk *rc;

-	rc = kmalloc(sizeof(struct ocfs2_recovery_chunk), GFP_NOFS);
+	rc = kmalloc_obj(struct ocfs2_recovery_chunk, GFP_NOFS);
 	if (!rc)
 		return -ENOMEM;
 	rc->rc_chunk = chunk;
@@ -372,7 +372,7 @@ static struct ocfs2_quota_recovery *ocfs2_alloc_quota_recovery(void)
 	int type;
 	struct ocfs2_quota_recovery *rec;

-	rec = kmalloc(sizeof(struct ocfs2_quota_recovery), GFP_NOFS);
+	rec = kmalloc_obj(struct ocfs2_quota_recovery, GFP_NOFS);
 	if (!rec)
 		return NULL;
 	for (type = 0; type < OCFS2_MAXQUOTAS; type++)
@@ -692,7 +692,7 @@ static int ocfs2_local_read_info(struct super_block *sb, int type)

 	info->dqi_max_spc_limit = 0x7fffffffffffffffLL;
 	info->dqi_max_ino_limit = 0x7fffffffffffffffLL;
-	oinfo = kmalloc(sizeof(struct ocfs2_mem_dqinfo), GFP_NOFS);
+	oinfo = kmalloc_obj(struct ocfs2_mem_dqinfo, GFP_NOFS);
 	if (!oinfo) {
 		mlog(ML_ERROR, "failed to allocate memory for ocfs2 quota"
 			       " info.");
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c
index c92e0ea85bca..c1cdececdfa4 100644
--- a/fs/ocfs2/refcounttree.c
+++ b/fs/ocfs2/refcounttree.c
@@ -311,7 +311,7 @@ ocfs2_allocate_refcount_tree(struct ocfs2_super *osb, u64 rf_blkno)
 {
 	struct ocfs2_refcount_tree *new;

-	new = kzalloc(sizeof(struct ocfs2_refcount_tree), GFP_NOFS);
+	new = kzalloc_obj(struct ocfs2_refcount_tree, GFP_NOFS);
 	if (!new)
 		return NULL;

@@ -3397,7 +3397,7 @@ static int ocfs2_refcount_cow_hunk(struct inode *inode,

 	BUG_ON(cow_len == 0);

-	context = kzalloc(sizeof(struct ocfs2_cow_context), GFP_NOFS);
+	context = kzalloc_obj(struct ocfs2_cow_context, GFP_NOFS);
 	if (!context) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
@@ -3606,7 +3606,7 @@ int ocfs2_refcount_cow_xattr(struct inode *inode,

 	BUG_ON(cow_len == 0);

-	context = kzalloc(sizeof(struct ocfs2_cow_context), GFP_NOFS);
+	context = kzalloc_obj(struct ocfs2_cow_context, GFP_NOFS);
 	if (!context) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
diff --git a/fs/ocfs2/slot_map.c b/fs/ocfs2/slot_map.c
index ea4a68abc25b..3ea14f00e84a 100644
--- a/fs/ocfs2/slot_map.c
+++ b/fs/ocfs2/slot_map.c
@@ -385,8 +385,8 @@ static int ocfs2_map_slot_buffers(struct ocfs2_super *osb,

 	trace_ocfs2_map_slot_buffers(bytes, si->si_blocks);

-	si->si_bh = kcalloc(si->si_blocks, sizeof(struct buffer_head *),
-			    GFP_KERNEL);
+	si->si_bh = kzalloc_objs(struct buffer_head *, si->si_blocks,
+				 GFP_KERNEL);
 	if (!si->si_bh) {
 		status = -ENOMEM;
 		mlog_errno(status);
@@ -425,7 +425,7 @@ int ocfs2_init_slot_info(struct ocfs2_super *osb)
 	struct inode *inode = NULL;
 	struct ocfs2_slot_info *si;

-	si = kzalloc(struct_size(si, si_slots, osb->max_slots), GFP_KERNEL);
+	si = kzalloc_flex(*si, si_slots, osb->max_slots, GFP_KERNEL);
 	if (!si) {
 		status = -ENOMEM;
 		mlog_errno(status);
diff --git a/fs/ocfs2/stack_o2cb.c b/fs/ocfs2/stack_o2cb.c
index f58e891aa2da..78a97c37398b 100644
--- a/fs/ocfs2/stack_o2cb.c
+++ b/fs/ocfs2/stack_o2cb.c
@@ -334,7 +334,7 @@ static int o2cb_cluster_connect(struct ocfs2_cluster_connection *conn)
 		goto out;
 	}

-	priv = kzalloc(sizeof(struct o2dlm_private), GFP_KERNEL);
+	priv = kzalloc_obj(struct o2dlm_private, GFP_KERNEL);
 	if (!priv) {
 		rc = -ENOMEM;
 		goto out_free;
diff --git a/fs/ocfs2/stack_user.c b/fs/ocfs2/stack_user.c
index be0a5758bd40..11b34407de36 100644
--- a/fs/ocfs2/stack_user.c
+++ b/fs/ocfs2/stack_user.c
@@ -593,7 +593,7 @@ static int ocfs2_control_open(struct inode *inode, struct file *file)
 {
 	struct ocfs2_control_private *p;

-	p = kzalloc(sizeof(struct ocfs2_control_private), GFP_KERNEL);
+	p = kzalloc_obj(struct ocfs2_control_private, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;
 	p->op_this_node = -1;
@@ -967,7 +967,7 @@ static int user_cluster_connect(struct ocfs2_cluster_connection *conn)

 	BUG_ON(conn == NULL);

-	lc = kzalloc(sizeof(struct ocfs2_live_connection), GFP_KERNEL);
+	lc = kzalloc_obj(struct ocfs2_live_connection, GFP_KERNEL);
 	if (!lc)
 		return -ENOMEM;

diff --git a/fs/ocfs2/stackglue.c b/fs/ocfs2/stackglue.c
index fca2fd07c881..46ff5835da2e 100644
--- a/fs/ocfs2/stackglue.c
+++ b/fs/ocfs2/stackglue.c
@@ -328,8 +328,7 @@ int ocfs2_cluster_connect(const char *stack_name,
 		goto out;
 	}

-	new_conn = kzalloc(sizeof(struct ocfs2_cluster_connection),
-			   GFP_KERNEL);
+	new_conn = kzalloc_obj(struct ocfs2_cluster_connection, GFP_KERNEL);
 	if (!new_conn) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
index 79d1325b2111..872c7b303a3c 100644
--- a/fs/ocfs2/suballoc.c
+++ b/fs/ocfs2/suballoc.c
@@ -1034,7 +1034,7 @@ int ocfs2_reserve_new_metadata_blocks(struct ocfs2_super *osb,
 	int status;
 	int slot = ocfs2_get_meta_steal_slot(osb);

-	*ac = kzalloc(sizeof(struct ocfs2_alloc_context), GFP_KERNEL);
+	*ac = kzalloc_obj(struct ocfs2_alloc_context, GFP_KERNEL);
 	if (!(*ac)) {
 		status = -ENOMEM;
 		mlog_errno(status);
@@ -1105,7 +1105,7 @@ int ocfs2_reserve_new_inode(struct ocfs2_super *osb,
 	int slot = ocfs2_get_inode_steal_slot(osb);
 	u64 alloc_group;

-	*ac = kzalloc(sizeof(struct ocfs2_alloc_context), GFP_KERNEL);
+	*ac = kzalloc_obj(struct ocfs2_alloc_context, GFP_KERNEL);
 	if (!(*ac)) {
 		status = -ENOMEM;
 		mlog_errno(status);
@@ -1221,7 +1221,7 @@ static int ocfs2_reserve_clusters_with_limit(struct ocfs2_super *osb,
 	int status, ret = 0;
 	int retried = 0;

-	*ac = kzalloc(sizeof(struct ocfs2_alloc_context), GFP_KERNEL);
+	*ac = kzalloc_obj(struct ocfs2_alloc_context, GFP_KERNEL);
 	if (!(*ac)) {
 		status = -ENOMEM;
 		mlog_errno(status);
@@ -2245,7 +2245,7 @@ int ocfs2_find_new_inode_loc(struct inode *dir,
 	BUG_ON(ac->ac_bits_wanted != 1);
 	BUG_ON(ac->ac_which != OCFS2_AC_USE_INODE);

-	res = kzalloc(sizeof(*res), GFP_NOFS);
+	res = kzalloc_obj(*res, GFP_NOFS);
 	if (res == NULL) {
 		ret = -ENOMEM;
 		mlog_errno(ret);
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index 3cbafac50cd1..9779f524ff1a 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1200,7 +1200,7 @@ static int ocfs2_init_fs_context(struct fs_context *fc)
 {
 	struct mount_options *mopt;

-	mopt = kzalloc(sizeof(struct mount_options), GFP_KERNEL);
+	mopt = kzalloc_obj(struct mount_options, GFP_KERNEL);
 	if (!mopt)
 		return -EINVAL;

@@ -1953,7 +1953,7 @@ static int ocfs2_initialize_super(struct super_block *sb,
 	struct ocfs2_super *osb;
 	u64 total_blocks;

-	osb = kzalloc(sizeof(struct ocfs2_super), GFP_KERNEL);
+	osb = kzalloc_obj(struct ocfs2_super, GFP_KERNEL);
 	if (!osb) {
 		status = -ENOMEM;
 		mlog_errno(status);
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index e434a62dd69f..42ee5db362d3 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -324,7 +324,7 @@ static struct ocfs2_xattr_bucket *ocfs2_xattr_bucket_new(struct inode *inode)

 	BUG_ON(blks > OCFS2_XATTR_MAX_BLOCKS_PER_BUCKET);

-	bucket = kzalloc(sizeof(struct ocfs2_xattr_bucket), GFP_NOFS);
+	bucket = kzalloc_obj(struct ocfs2_xattr_bucket, GFP_NOFS);
 	if (bucket) {
 		bucket->bu_inode = inode;
 		bucket->bu_blocks = blks;
diff --git a/fs/omfs/inode.c b/fs/omfs/inode.c
index 701ed85d9831..ba2a581f7ab7 100644
--- a/fs/omfs/inode.c
+++ b/fs/omfs/inode.c
@@ -464,7 +464,7 @@ static int omfs_fill_super(struct super_block *sb, struct fs_context *fc)
 	int ret = -EINVAL;
 	int silent = fc->sb_flags & SB_SILENT;

-	sbi = kzalloc(sizeof(struct omfs_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct omfs_sb_info, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

@@ -612,7 +612,7 @@ static int omfs_init_fs_context(struct fs_context *fc)
 {
 	struct omfs_mount_options *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return -ENOMEM;

diff --git a/fs/orangefs/dir.c b/fs/orangefs/dir.c
index 3c32bf9f1296..84db9f0db9df 100644
--- a/fs/orangefs/dir.c
+++ b/fs/orangefs/dir.c
@@ -363,8 +363,7 @@ static int orangefs_dir_iterate(struct file *file,
 static int orangefs_dir_open(struct inode *inode, struct file *file)
 {
 	struct orangefs_dir *od;
-	file->private_data = kmalloc(sizeof(struct orangefs_dir),
-	    GFP_KERNEL);
+	file->private_data = kmalloc_obj(struct orangefs_dir, GFP_KERNEL);
 	if (!file->private_data)
 		return -ENOMEM;
 	od = file->private_data;
diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c
index f420f48fc069..50836be41cd2 100644
--- a/fs/orangefs/inode.c
+++ b/fs/orangefs/inode.c
@@ -184,16 +184,16 @@ static int orangefs_writepages(struct address_space *mapping,
 	int error;
 	struct folio *folio = NULL;

-	ow = kzalloc(sizeof(struct orangefs_writepages), GFP_KERNEL);
+	ow = kzalloc_obj(struct orangefs_writepages, GFP_KERNEL);
 	if (!ow)
 		return -ENOMEM;
 	ow->maxpages = orangefs_bufmap_size_query()/PAGE_SIZE;
-	ow->folios = kcalloc(ow->maxpages, sizeof(struct folio *), GFP_KERNEL);
+	ow->folios = kzalloc_objs(struct folio *, ow->maxpages, GFP_KERNEL);
 	if (!ow->folios) {
 		kfree(ow);
 		return -ENOMEM;
 	}
-	ow->bv = kcalloc(ow->maxpages, sizeof(struct bio_vec), GFP_KERNEL);
+	ow->bv = kzalloc_objs(struct bio_vec, ow->maxpages, GFP_KERNEL);
 	if (!ow->bv) {
 		kfree(ow->folios);
 		kfree(ow);
@@ -328,7 +328,7 @@ static int orangefs_write_begin(const struct kiocb *iocb,
 		}
 	}

-	wr = kmalloc(sizeof *wr, GFP_KERNEL);
+	wr = kmalloc_obj(*wr, GFP_KERNEL);
 	if (!wr)
 		return -ENOMEM;

@@ -644,7 +644,7 @@ vm_fault_t orangefs_page_mkwrite(struct vm_fault *vmf)
 			}
 		}
 	}
-	wr = kmalloc(sizeof *wr, GFP_KERNEL);
+	wr = kmalloc_obj(*wr, GFP_KERNEL);
 	if (!wr) {
 		ret = VM_FAULT_LOCKED|VM_FAULT_RETRY;
 		goto out;
diff --git a/fs/orangefs/orangefs-bufmap.c b/fs/orangefs/orangefs-bufmap.c
index b562d3dbc76b..bad105dd10fa 100644
--- a/fs/orangefs/orangefs-bufmap.c
+++ b/fs/orangefs/orangefs-bufmap.c
@@ -205,7 +205,7 @@ orangefs_bufmap_alloc(struct ORANGEFS_dev_map_desc *user_desc)
 {
 	struct orangefs_bufmap *bufmap;

-	bufmap = kzalloc(sizeof(*bufmap), GFP_KERNEL);
+	bufmap = kzalloc_obj(*bufmap, GFP_KERNEL);
 	if (!bufmap)
 		goto out;

@@ -219,8 +219,8 @@ orangefs_bufmap_alloc(struct ORANGEFS_dev_map_desc *user_desc)
 		goto out_free_bufmap;

 	bufmap->desc_array =
-		kcalloc(bufmap->desc_count, sizeof(struct orangefs_bufmap_desc),
-			GFP_KERNEL);
+		kzalloc_objs(struct orangefs_bufmap_desc, bufmap->desc_count,
+			     GFP_KERNEL);
 	if (!bufmap->desc_array)
 		goto out_free_index_array;

@@ -228,7 +228,7 @@ orangefs_bufmap_alloc(struct ORANGEFS_dev_map_desc *user_desc)

 	/* allocate storage to track our page mappings */
 	bufmap->page_array =
-		kcalloc(bufmap->page_count, sizeof(struct page *), GFP_KERNEL);
+		kzalloc_objs(struct page *, bufmap->page_count, GFP_KERNEL);
 	if (!bufmap->page_array)
 		goto out_free_desc_array;

diff --git a/fs/orangefs/orangefs-debugfs.c b/fs/orangefs/orangefs-debugfs.c
index 002092950605..229981c310bd 100644
--- a/fs/orangefs/orangefs-debugfs.c
+++ b/fs/orangefs/orangefs-debugfs.c
@@ -560,7 +560,7 @@ static int orangefs_prepare_cdm_array(char *debug_array_string)
 		goto out;
 	}

-	cdm_array = kcalloc(cdm_element_count, sizeof(*cdm_array), GFP_KERNEL);
+	cdm_array = kzalloc_objs(*cdm_array, cdm_element_count, GFP_KERNEL);
 	if (!cdm_array) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/fs/orangefs/orangefs-mod.c b/fs/orangefs/orangefs-mod.c
index 7ac16a4d2dc6..30bc3c17daa4 100644
--- a/fs/orangefs/orangefs-mod.c
+++ b/fs/orangefs/orangefs-mod.c
@@ -99,7 +99,7 @@ static int __init orangefs_init(void)
 		goto cleanup_op;

 	orangefs_htable_ops_in_progress =
-	    kcalloc(hash_table_size, sizeof(struct list_head), GFP_KERNEL);
+	    kzalloc_objs(struct list_head, hash_table_size, GFP_KERNEL);
 	if (!orangefs_htable_ops_in_progress) {
 		ret = -ENOMEM;
 		goto cleanup_inode;
diff --git a/fs/orangefs/orangefs-sysfs.c b/fs/orangefs/orangefs-sysfs.c
index 369455b354ef..8ea25b71b1fb 100644
--- a/fs/orangefs/orangefs-sysfs.c
+++ b/fs/orangefs/orangefs-sysfs.c
@@ -1170,7 +1170,7 @@ int orangefs_sysfs_init(void)
 	gossip_debug(GOSSIP_SYSFS_DEBUG, "orangefs_sysfs_init: start\n");

 	/* create /sys/fs/orangefs. */
-	orangefs_obj = kzalloc(sizeof(*orangefs_obj), GFP_KERNEL);
+	orangefs_obj = kzalloc_obj(*orangefs_obj, GFP_KERNEL);
 	if (!orangefs_obj)
 		goto out;

@@ -1185,7 +1185,7 @@ int orangefs_sysfs_init(void)
 	kobject_uevent(orangefs_obj, KOBJ_ADD);

 	/* create /sys/fs/orangefs/acache. */
-	acache_orangefs_obj = kzalloc(sizeof(*acache_orangefs_obj), GFP_KERNEL);
+	acache_orangefs_obj = kzalloc_obj(*acache_orangefs_obj, GFP_KERNEL);
 	if (!acache_orangefs_obj) {
 		rc = -EINVAL;
 		goto ofs_obj_bail;
@@ -1202,8 +1202,7 @@ int orangefs_sysfs_init(void)
 	kobject_uevent(acache_orangefs_obj, KOBJ_ADD);

 	/* create /sys/fs/orangefs/capcache. */
-	capcache_orangefs_obj =
-		kzalloc(sizeof(*capcache_orangefs_obj), GFP_KERNEL);
+	capcache_orangefs_obj = kzalloc_obj(*capcache_orangefs_obj, GFP_KERNEL);
 	if (!capcache_orangefs_obj) {
 		rc = -EINVAL;
 		goto acache_obj_bail;
@@ -1219,8 +1218,7 @@ int orangefs_sysfs_init(void)
 	kobject_uevent(capcache_orangefs_obj, KOBJ_ADD);

 	/* create /sys/fs/orangefs/ccache. */
-	ccache_orangefs_obj =
-		kzalloc(sizeof(*ccache_orangefs_obj), GFP_KERNEL);
+	ccache_orangefs_obj = kzalloc_obj(*ccache_orangefs_obj, GFP_KERNEL);
 	if (!ccache_orangefs_obj) {
 		rc = -EINVAL;
 		goto capcache_obj_bail;
@@ -1236,7 +1234,7 @@ int orangefs_sysfs_init(void)
 	kobject_uevent(ccache_orangefs_obj, KOBJ_ADD);

 	/* create /sys/fs/orangefs/ncache. */
-	ncache_orangefs_obj = kzalloc(sizeof(*ncache_orangefs_obj), GFP_KERNEL);
+	ncache_orangefs_obj = kzalloc_obj(*ncache_orangefs_obj, GFP_KERNEL);
 	if (!ncache_orangefs_obj) {
 		rc = -EINVAL;
 		goto ccache_obj_bail;
@@ -1253,7 +1251,7 @@ int orangefs_sysfs_init(void)
 	kobject_uevent(ncache_orangefs_obj, KOBJ_ADD);

 	/* create /sys/fs/orangefs/perf_counters. */
-	pc_orangefs_obj = kzalloc(sizeof(*pc_orangefs_obj), GFP_KERNEL);
+	pc_orangefs_obj = kzalloc_obj(*pc_orangefs_obj, GFP_KERNEL);
 	if (!pc_orangefs_obj) {
 		rc = -EINVAL;
 		goto ncache_obj_bail;
@@ -1270,7 +1268,7 @@ int orangefs_sysfs_init(void)
 	kobject_uevent(pc_orangefs_obj, KOBJ_ADD);

 	/* create /sys/fs/orangefs/stats. */
-	stats_orangefs_obj = kzalloc(sizeof(*stats_orangefs_obj), GFP_KERNEL);
+	stats_orangefs_obj = kzalloc_obj(*stats_orangefs_obj, GFP_KERNEL);
 	if (!stats_orangefs_obj) {
 		rc = -EINVAL;
 		goto pc_obj_bail;
diff --git a/fs/orangefs/super.c b/fs/orangefs/super.c
index b46100a4f529..3030509ddeaf 100644
--- a/fs/orangefs/super.c
+++ b/fs/orangefs/super.c
@@ -578,7 +578,7 @@ int orangefs_init_fs_context(struct fs_context *fc)
 {
 	struct orangefs_sb_info_s *osi;

-	osi = kzalloc(sizeof(struct orangefs_sb_info_s), GFP_KERNEL);
+	osi = kzalloc_obj(struct orangefs_sb_info_s, GFP_KERNEL);
 	if (!osi)
 		return -ENOMEM;

diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c
index a431aa07a229..44712bcdcef7 100644
--- a/fs/orangefs/xattr.c
+++ b/fs/orangefs/xattr.c
@@ -171,7 +171,7 @@ ssize_t orangefs_inode_getxattr(struct inode *inode, const char *name,
 				     " does not exist!\n",
 				     get_khandle_from_ino(inode),
 				     (char *)new_op->upcall.req.getxattr.key);
-			cx = kmalloc(sizeof *cx, GFP_KERNEL);
+			cx = kmalloc_obj(*cx, GFP_KERNEL);
 			if (cx) {
 				strscpy(cx->key, name);
 				cx->length = -1;
@@ -225,7 +225,7 @@ ssize_t orangefs_inode_getxattr(struct inode *inode, const char *name,
 		cx->length = length;
 		cx->timeout = jiffies + HZ;
 	} else {
-		cx = kmalloc(sizeof *cx, GFP_KERNEL);
+		cx = kmalloc_obj(*cx, GFP_KERNEL);
 		if (cx) {
 			strscpy(cx->key, name);
 			memcpy(cx->val, buffer, length);
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
index 8269431ba3c6..7f7a2c2a7937 100644
--- a/fs/overlayfs/file.c
+++ b/fs/overlayfs/file.c
@@ -96,7 +96,7 @@ struct ovl_file {

 struct ovl_file *ovl_file_alloc(struct file *realfile)
 {
-	struct ovl_file *of = kzalloc(sizeof(struct ovl_file), GFP_KERNEL);
+	struct ovl_file *of = kzalloc_obj(struct ovl_file, GFP_KERNEL);

 	if (unlikely(!of))
 		return NULL;
diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c
index afb7019fd43a..f30b81ee0d9b 100644
--- a/fs/overlayfs/namei.c
+++ b/fs/overlayfs/namei.c
@@ -481,7 +481,7 @@ int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh, bool connected,
 		goto invalid;

 	if (!*stackp)
-		*stackp = kmalloc(sizeof(struct ovl_path), GFP_KERNEL);
+		*stackp = kmalloc_obj(struct ovl_path, GFP_KERNEL);
 	if (!*stackp) {
 		dput(origin);
 		return -ENOMEM;
diff --git a/fs/overlayfs/params.c b/fs/overlayfs/params.c
index 63b7346c5ee1..af735a0c310a 100644
--- a/fs/overlayfs/params.c
+++ b/fs/overlayfs/params.c
@@ -777,7 +777,7 @@ int ovl_init_fs_context(struct fs_context *fc)
 	struct ovl_fs_context *ctx;
 	struct ovl_fs *ofs;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL_ACCOUNT);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL_ACCOUNT);
 	if (!ctx)
 		return -ENOMEM;

@@ -785,12 +785,12 @@ int ovl_init_fs_context(struct fs_context *fc)
 	 * By default we allocate for three lower layers. It's likely
 	 * that it'll cover most users.
 	 */
-	ctx->lower = kmalloc_array(3, sizeof(*ctx->lower), GFP_KERNEL_ACCOUNT);
+	ctx->lower = kmalloc_objs(*ctx->lower, 3, GFP_KERNEL_ACCOUNT);
 	if (!ctx->lower)
 		goto out_err;
 	ctx->capacity = 3;

-	ofs = kzalloc(sizeof(struct ovl_fs), GFP_KERNEL);
+	ofs = kzalloc_obj(struct ovl_fs, GFP_KERNEL);
 	if (!ofs)
 		goto out_err;

diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c
index bb09142b4e15..953c2cdca1b4 100644
--- a/fs/overlayfs/readdir.c
+++ b/fs/overlayfs/readdir.c
@@ -180,7 +180,7 @@ static struct ovl_cache_entry *ovl_cache_entry_new(struct ovl_readdir_data *rdd,
 {
 	struct ovl_cache_entry *p;

-	p = kmalloc(struct_size(p, name, len + 1), GFP_KERNEL);
+	p = kmalloc_flex(*p, name, len + 1, GFP_KERNEL);
 	if (!p)
 		return NULL;

@@ -493,7 +493,7 @@ static struct ovl_dir_cache *ovl_cache_get(struct dentry *dentry)
 	}
 	ovl_set_dir_cache(d_inode(dentry), NULL);

-	cache = kzalloc(sizeof(struct ovl_dir_cache), GFP_KERNEL);
+	cache = kzalloc_obj(struct ovl_dir_cache, GFP_KERNEL);
 	if (!cache)
 		return ERR_PTR(-ENOMEM);

@@ -706,7 +706,7 @@ static struct ovl_dir_cache *ovl_cache_get_impure(const struct path *path)
 	ovl_dir_cache_free(inode);
 	ovl_set_dir_cache(inode, NULL);

-	cache = kzalloc(sizeof(struct ovl_dir_cache), GFP_KERNEL);
+	cache = kzalloc_obj(struct ovl_dir_cache, GFP_KERNEL);
 	if (!cache)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index c9f166a1390a..f3a39b7703f5 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -1031,7 +1031,7 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs,
 	unsigned int i;
 	size_t nr_merged_lower;

-	ofs->fs = kcalloc(ctx->nr + 2, sizeof(struct ovl_sb), GFP_KERNEL);
+	ofs->fs = kzalloc_objs(struct ovl_sb, ctx->nr + 2, GFP_KERNEL);
 	if (ofs->fs == NULL)
 		return -ENOMEM;

@@ -1393,7 +1393,7 @@ static int ovl_fill_super_creds(struct fs_context *fc, struct super_block *sb)
 	}

 	err = -ENOMEM;
-	layers = kcalloc(ctx->nr + 1, sizeof(struct ovl_layer), GFP_KERNEL);
+	layers = kzalloc_objs(struct ovl_layer, ctx->nr + 1, GFP_KERNEL);
 	if (!layers)
 		return err;

diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c
index 94986d11a166..a28524e83662 100644
--- a/fs/overlayfs/util.c
+++ b/fs/overlayfs/util.c
@@ -113,7 +113,7 @@ bool ovl_verify_lower(struct super_block *sb)

 struct ovl_path *ovl_stack_alloc(unsigned int n)
 {
-	return kcalloc(n, sizeof(struct ovl_path), GFP_KERNEL);
+	return kzalloc_objs(struct ovl_path, n, GFP_KERNEL);
 }

 void ovl_stack_cpy(struct ovl_path *dst, struct ovl_path *src, unsigned int n)
@@ -143,7 +143,7 @@ struct ovl_entry *ovl_alloc_entry(unsigned int numlower)
 {
 	struct ovl_entry *oe;

-	oe = kzalloc(struct_size(oe, __lowerstack, numlower), GFP_KERNEL);
+	oe = kzalloc_flex(*oe, __lowerstack, numlower, GFP_KERNEL);
 	if (oe)
 		oe->__numlower = numlower;

diff --git a/fs/pipe.c b/fs/pipe.c
index 22647f50b286..b44a756c0b41 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -797,7 +797,7 @@ struct pipe_inode_info *alloc_pipe_info(void)
 	unsigned long user_bufs;
 	unsigned int max_size = READ_ONCE(pipe_max_size);

-	pipe = kzalloc(sizeof(struct pipe_inode_info), GFP_KERNEL_ACCOUNT);
+	pipe = kzalloc_obj(struct pipe_inode_info, GFP_KERNEL_ACCOUNT);
 	if (pipe == NULL)
 		goto out_free_uid;

@@ -814,8 +814,8 @@ struct pipe_inode_info *alloc_pipe_info(void)
 	if (too_many_pipe_buffers_hard(user_bufs) && pipe_is_unprivileged_user())
 		goto out_revert_acct;

-	pipe->bufs = kcalloc(pipe_bufs, sizeof(struct pipe_buffer),
-			     GFP_KERNEL_ACCOUNT);
+	pipe->bufs = kzalloc_objs(struct pipe_buffer, pipe_bufs,
+				  GFP_KERNEL_ACCOUNT);

 	if (pipe->bufs) {
 		init_waitqueue_head(&pipe->rd_wait);
@@ -1297,8 +1297,7 @@ int pipe_resize_ring(struct pipe_inode_info *pipe, unsigned int nr_slots)
 	if (unlikely(nr_slots > (pipe_index_t)-1u))
 		return -EINVAL;

-	bufs = kcalloc(nr_slots, sizeof(*bufs),
-		       GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
+	bufs = kzalloc_objs(*bufs, nr_slots, GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
 	if (unlikely(!bufs))
 		return -ENOMEM;

diff --git a/fs/posix_acl.c b/fs/posix_acl.c
index 4ef6f9d2b8d6..12591c95c925 100644
--- a/fs/posix_acl.c
+++ b/fs/posix_acl.c
@@ -204,7 +204,7 @@ posix_acl_alloc(unsigned int count, gfp_t flags)
 {
 	struct posix_acl *acl;

-	acl = kmalloc(struct_size(acl, a_entries, count), flags);
+	acl = kmalloc_flex(*acl, a_entries, count, flags);
 	if (acl)
 		posix_acl_init(acl, count);
 	return acl;
diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
index 728630b10fdf..55438bc0afc8 100644
--- a/fs/proc/kcore.c
+++ b/fs/proc/kcore.c
@@ -143,7 +143,7 @@ static int kcore_ram_list(struct list_head *head)
 {
 	struct kcore_list *ent;

-	ent = kmalloc(sizeof(*ent), GFP_KERNEL);
+	ent = kmalloc_obj(*ent, GFP_KERNEL);
 	if (!ent)
 		return -ENOMEM;
 	ent->addr = (unsigned long)__va(0);
@@ -178,7 +178,7 @@ get_sparsemem_vmemmap_info(struct kcore_list *ent, struct list_head *head)
 				end = tmp->addr;
 	}
 	if (start < end) {
-		vmm = kmalloc(sizeof(*vmm), GFP_KERNEL);
+		vmm = kmalloc_obj(*vmm, GFP_KERNEL);
 		if (!vmm)
 			return 0;
 		vmm->addr = start;
@@ -210,7 +210,7 @@ kclist_add_private(unsigned long pfn, unsigned long nr_pages, void *arg)

 	p = pfn_to_page(pfn);

-	ent = kmalloc(sizeof(*ent), GFP_KERNEL);
+	ent = kmalloc_obj(*ent, GFP_KERNEL);
 	if (!ent)
 		return -ENOMEM;
 	ent->addr = (unsigned long)page_to_virt(p);
diff --git a/fs/proc/root.c b/fs/proc/root.c
index d8ca41d823e4..fb0ccacb08e6 100644
--- a/fs/proc/root.c
+++ b/fs/proc/root.c
@@ -249,7 +249,7 @@ static int proc_fill_super(struct super_block *s, struct fs_context *fc)
 	struct proc_fs_info *fs_info;
 	int ret;

-	fs_info = kzalloc(sizeof(*fs_info), GFP_KERNEL);
+	fs_info = kzalloc_obj(*fs_info, GFP_KERNEL);
 	if (!fs_info)
 		return -ENOMEM;

@@ -331,7 +331,7 @@ static int proc_init_fs_context(struct fs_context *fc)
 {
 	struct proc_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct proc_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct proc_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index d7d52e259055..0418511f69fe 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -1534,7 +1534,7 @@ static int smaps_rollup_open(struct inode *inode, struct file *file)
 	int ret;
 	struct proc_maps_private *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL_ACCOUNT);
+	priv = kzalloc_obj(*priv, GFP_KERNEL_ACCOUNT);
 	if (!priv)
 		return -ENOMEM;

@@ -2981,8 +2981,7 @@ static int pagemap_scan_init_bounce_buffer(struct pagemap_scan_private *p)

 	p->vec_buf_len = min_t(size_t, PAGEMAP_WALK_SIZE >> PAGE_SHIFT,
 			       p->arg.vec_len);
-	p->vec_buf = kmalloc_array(p->vec_buf_len, sizeof(*p->vec_buf),
-				   GFP_KERNEL);
+	p->vec_buf = kmalloc_objs(*p->vec_buf, p->vec_buf_len, GFP_KERNEL);
 	if (!p->vec_buf)
 		return -ENOMEM;

diff --git a/fs/pstore/blk.c b/fs/pstore/blk.c
index fa6b8cb788a1..0c9c8b6fdbb8 100644
--- a/fs/pstore/blk.c
+++ b/fs/pstore/blk.c
@@ -297,7 +297,7 @@ static int __init __best_effort_init(void)
 		return -EINVAL;
 	}

-	best_effort_dev = kzalloc(sizeof(*best_effort_dev), GFP_KERNEL);
+	best_effort_dev = kzalloc_obj(*best_effort_dev, GFP_KERNEL);
 	if (!best_effort_dev)
 		return -ENOMEM;

diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c
index 71deffcc3356..8ebcd231e09a 100644
--- a/fs/pstore/inode.c
+++ b/fs/pstore/inode.c
@@ -70,7 +70,7 @@ static void *pstore_ftrace_seq_start(struct seq_file *s, loff_t *pos)
 	struct pstore_private *ps = s->private;
 	struct pstore_ftrace_seq_data *data __free(kfree) = NULL;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;

@@ -365,7 +365,7 @@ int pstore_mkfile(struct dentry *root, struct pstore_record *record)
 			record->psi->name, record->id,
 			record->compressed ? ".enc.z" : "");

-	private = kzalloc(sizeof(*private), GFP_KERNEL);
+	private = kzalloc_obj(*private, GFP_KERNEL);
 	if (!private)
 		return -ENOMEM;

@@ -477,7 +477,7 @@ static int pstore_init_fs_context(struct fs_context *fc)
 {
 	struct pstore_context *ctx;

-	ctx = kzalloc(sizeof(struct pstore_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct pstore_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
index f8b9c9c73997..ff9603bb89db 100644
--- a/fs/pstore/platform.c
+++ b/fs/pstore/platform.c
@@ -683,7 +683,7 @@ void pstore_get_backend_records(struct pstore_info *psi,
 		struct pstore_record *record;
 		int rc;

-		record = kzalloc(sizeof(*record), GFP_KERNEL);
+		record = kzalloc_obj(*record, GFP_KERNEL);
 		if (!record) {
 			pr_err("out of memory creating record\n");
 			break;
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
index 39936d6da0dd..79f801c913bf 100644
--- a/fs/pstore/ram.c
+++ b/fs/pstore/ram.c
@@ -232,8 +232,8 @@ static ssize_t ramoops_pstore_read(struct pstore_record *record)
 			 */
 			struct persistent_ram_zone *tmp_prz, *prz_next;

-			tmp_prz = kzalloc(sizeof(struct persistent_ram_zone),
-					  GFP_KERNEL);
+			tmp_prz = kzalloc_obj(struct persistent_ram_zone,
+					      GFP_KERNEL);
 			if (!tmp_prz)
 				return -ENOMEM;
 			prz = tmp_prz;
@@ -539,7 +539,7 @@ static int ramoops_init_przs(const char *name,
 		goto fail;
 	}

-	prz_ar = kcalloc(*cnt, sizeof(**przs), GFP_KERNEL);
+	prz_ar = kzalloc_objs(**przs, *cnt, GFP_KERNEL);
 	if (!prz_ar)
 		goto fail;

diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
index 7b6d6378a3b8..49d022b85d8a 100644
--- a/fs/pstore/ram_core.c
+++ b/fs/pstore/ram_core.c
@@ -229,9 +229,8 @@ static int persistent_ram_init_ecc(struct persistent_ram_zone *prz,
 	}

 	/* allocate workspace instead of using stack VLA */
-	prz->ecc_info.par = kmalloc_array(prz->ecc_info.ecc_size,
-					  sizeof(*prz->ecc_info.par),
-					  GFP_KERNEL);
+	prz->ecc_info.par = kmalloc_objs(*prz->ecc_info.par,
+					 prz->ecc_info.ecc_size, GFP_KERNEL);
 	if (!prz->ecc_info.par) {
 		pr_err("cannot allocate ECC parity workspace\n");
 		return -ENOMEM;
@@ -439,7 +438,7 @@ static void *persistent_ram_vmap(phys_addr_t start, size_t size,
 		return NULL;
 	}

-	pages = kmalloc_array(page_count, sizeof(struct page *), GFP_KERNEL);
+	pages = kmalloc_objs(struct page *, page_count, GFP_KERNEL);
 	if (!pages) {
 		pr_err("%s: Failed to allocate array for %u pages\n",
 		       __func__, page_count);
@@ -606,7 +605,7 @@ struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
 	struct persistent_ram_zone *prz;
 	int ret = -ENOMEM;

-	prz = kzalloc(sizeof(struct persistent_ram_zone), GFP_KERNEL);
+	prz = kzalloc_obj(struct persistent_ram_zone, GFP_KERNEL);
 	if (!prz) {
 		pr_err("failed to allocate persistent ram zone\n");
 		goto err;
diff --git a/fs/pstore/zone.c b/fs/pstore/zone.c
index eb61ba5bb964..6687d255a36b 100644
--- a/fs/pstore/zone.c
+++ b/fs/pstore/zone.c
@@ -1166,7 +1166,7 @@ static struct pstore_zone *psz_init_zone(enum pstore_type_id type,
 		return ERR_PTR(-ENOMEM);
 	}

-	zone = kzalloc(sizeof(struct pstore_zone), GFP_KERNEL);
+	zone = kzalloc_obj(struct pstore_zone, GFP_KERNEL);
 	if (!zone)
 		return ERR_PTR(-ENOMEM);

@@ -1218,7 +1218,7 @@ static struct pstore_zone **psz_init_zones(enum pstore_type_id type,
 		return ERR_PTR(-EINVAL);
 	}

-	zones = kcalloc(c, sizeof(*zones), GFP_KERNEL);
+	zones = kzalloc_objs(*zones, c, GFP_KERNEL);
 	if (!zones) {
 		pr_err("allocate for zones %s failed\n", name);
 		return ERR_PTR(-ENOMEM);
diff --git a/fs/qnx4/inode.c b/fs/qnx4/inode.c
index 31d78da203ea..e8c4de5de7be 100644
--- a/fs/qnx4/inode.c
+++ b/fs/qnx4/inode.c
@@ -197,7 +197,7 @@ static int qnx4_fill_super(struct super_block *s, struct fs_context *fc)
 	struct qnx4_sb_info *qs;
 	int silent = fc->sb_flags & SB_SILENT;

-	qs = kzalloc(sizeof(struct qnx4_sb_info), GFP_KERNEL);
+	qs = kzalloc_obj(struct qnx4_sb_info, GFP_KERNEL);
 	if (!qs)
 		return -ENOMEM;
 	s->s_fs_info = qs;
diff --git a/fs/qnx6/inode.c b/fs/qnx6/inode.c
index 88d285005083..de1e1a61810d 100644
--- a/fs/qnx6/inode.c
+++ b/fs/qnx6/inode.c
@@ -302,7 +302,7 @@ static int qnx6_fill_super(struct super_block *s, struct fs_context *fc)
 	int bootblock_offset = QNX6_BOOTBLOCK_SIZE;
 	int silent = fc->sb_flags & SB_SILENT;

-	qs = kzalloc(sizeof(struct qnx6_sb_info), GFP_KERNEL);
+	qs = kzalloc_obj(struct qnx6_sb_info, GFP_KERNEL);
 	if (!qs)
 		return -ENOMEM;
 	s->s_fs_info = qs;
@@ -645,7 +645,7 @@ static int qnx6_init_fs_context(struct fs_context *fc)
 {
 	struct qnx6_context *ctx;

-	ctx = kzalloc(sizeof(struct qnx6_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct qnx6_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	fc->ops = &qnx6_context_ops;
diff --git a/fs/qnx6/super_mmi.c b/fs/qnx6/super_mmi.c
index d282c2c73404..d36ade7fc477 100644
--- a/fs/qnx6/super_mmi.c
+++ b/fs/qnx6/super_mmi.c
@@ -100,7 +100,7 @@ struct qnx6_super_block *qnx6_mmi_fill_super(struct super_block *s, int silent)
 		goto out;
 	}

-	qsb = kmalloc(sizeof(*qsb), GFP_KERNEL);
+	qsb = kmalloc_obj(*qsb, GFP_KERNEL);
 	if (!qsb) {
 		pr_err("unable to allocate memory.\n");
 		goto out;
diff --git a/fs/quota/quota_v2.c b/fs/quota/quota_v2.c
index 1fda93dcbc1b..d022b18782c6 100644
--- a/fs/quota/quota_v2.c
+++ b/fs/quota/quota_v2.c
@@ -121,7 +121,7 @@ static int v2_read_file_info(struct super_block *sb, int type)
 			ret = -EIO;
 		goto out;
 	}
-	info->dqi_priv = kmalloc(sizeof(struct qtree_mem_dqinfo), GFP_KERNEL);
+	info->dqi_priv = kmalloc_obj(struct qtree_mem_dqinfo, GFP_KERNEL);
 	if (!info->dqi_priv) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c
index 505d10a0cb36..d084b6804b65 100644
--- a/fs/ramfs/inode.c
+++ b/fs/ramfs/inode.c
@@ -298,7 +298,7 @@ int ramfs_init_fs_context(struct fs_context *fc)
 {
 	struct ramfs_fs_info *fsi;

-	fsi = kzalloc(sizeof(*fsi), GFP_KERNEL);
+	fsi = kzalloc_obj(*fsi, GFP_KERNEL);
 	if (!fsi)
 		return -ENOMEM;

diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c
index 0cd5476a483a..6fd5c0e8a0dd 100644
--- a/fs/resctrl/monitor.c
+++ b/fs/resctrl/monitor.c
@@ -923,7 +923,7 @@ int setup_rmid_lru_list(void)
 		return 0;

 	idx_limit = resctrl_arch_system_num_rmid_idx();
-	rmid_ptrs = kcalloc(idx_limit, sizeof(struct rmid_entry), GFP_KERNEL);
+	rmid_ptrs = kzalloc_objs(struct rmid_entry, idx_limit, GFP_KERNEL);
 	if (!rmid_ptrs)
 		return -ENOMEM;

diff --git a/fs/resctrl/pseudo_lock.c b/fs/resctrl/pseudo_lock.c
index e81d71abfe54..55e71d257324 100644
--- a/fs/resctrl/pseudo_lock.c
+++ b/fs/resctrl/pseudo_lock.c
@@ -154,7 +154,7 @@ static int pseudo_lock_cstates_constrain(struct pseudo_lock_region *plr)
 	int ret;

 	for_each_cpu(cpu, &plr->d->hdr.cpu_mask) {
-		pm_req = kzalloc(sizeof(*pm_req), GFP_KERNEL);
+		pm_req = kzalloc_obj(*pm_req, GFP_KERNEL);
 		if (!pm_req) {
 			rdt_last_cmd_puts("Failure to allocate memory for PM QoS\n");
 			ret = -ENOMEM;
@@ -270,7 +270,7 @@ static int pseudo_lock_init(struct rdtgroup *rdtgrp)
 {
 	struct pseudo_lock_region *plr;

-	plr = kzalloc(sizeof(*plr), GFP_KERNEL);
+	plr = kzalloc_obj(*plr, GFP_KERNEL);
 	if (!plr)
 		return -ENOMEM;

diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index ba8d503551cd..1135208adafb 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -2686,7 +2686,7 @@ static int schemata_list_add(struct rdt_resource *r, enum resctrl_conf_type type
 	const char *suffix = "";
 	int ret, cl;

-	s = kzalloc(sizeof(*s), GFP_KERNEL);
+	s = kzalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

@@ -2966,7 +2966,7 @@ static int rdt_init_fs_context(struct fs_context *fc)
 {
 	struct rdt_fs_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -3117,7 +3117,7 @@ static struct mon_data *mon_get_kn_priv(enum resctrl_res_level rid, int domid,
 			return priv;
 	}

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;

@@ -3753,7 +3753,7 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,
 	}

 	/* allocate the rdtgroup. */
-	rdtgrp = kzalloc(sizeof(*rdtgrp), GFP_KERNEL);
+	rdtgrp = kzalloc_obj(*rdtgrp, GFP_KERNEL);
 	if (!rdtgrp) {
 		ret = -ENOSPC;
 		rdt_last_cmd_puts("Kernel out of memory\n");
diff --git a/fs/select.c b/fs/select.c
index 78a1508c84d3..57b0af64cc1e 100644
--- a/fs/select.c
+++ b/fs/select.c
@@ -993,8 +993,8 @@ static int do_sys_poll(struct pollfd __user *ufds, unsigned int nfds,
 		todo -= walk->len;

 		len = min(todo, POLLFD_PER_PAGE);
-		walk = walk->next = kmalloc(struct_size(walk, entries, len),
-					    GFP_KERNEL);
+		walk = walk->next = kmalloc_flex(*walk, entries, len,
+						 GFP_KERNEL);
 		if (!walk) {
 			err = -ENOMEM;
 			goto out_fds;
diff --git a/fs/seq_file.c b/fs/seq_file.c
index 8894cbde8d3a..4745db2a34d1 100644
--- a/fs/seq_file.c
+++ b/fs/seq_file.c
@@ -573,7 +573,7 @@ static void single_stop(struct seq_file *p, void *v)
 int single_open(struct file *file, int (*show)(struct seq_file *, void *),
 		void *data)
 {
-	struct seq_operations *op = kmalloc(sizeof(*op), GFP_KERNEL_ACCOUNT);
+	struct seq_operations *op = kmalloc_obj(*op, GFP_KERNEL_ACCOUNT);
 	int res = -ENOMEM;

 	if (op) {
diff --git a/fs/signalfd.c b/fs/signalfd.c
index d69eab584bc6..0b663f9c1cff 100644
--- a/fs/signalfd.c
+++ b/fs/signalfd.c
@@ -264,7 +264,7 @@ static int do_signalfd4(int ufd, sigset_t *mask, int flags)
 		int fd;
 		struct signalfd_ctx *ctx __free(kfree) = NULL;

-		ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+		ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 		if (!ctx)
 			return -ENOMEM;

diff --git a/fs/smb/client/cached_dir.c b/fs/smb/client/cached_dir.c
index 2a6b8ce80be2..94574dab56f6 100644
--- a/fs/smb/client/cached_dir.c
+++ b/fs/smb/client/cached_dir.c
@@ -556,7 +556,7 @@ void close_all_cached_dirs(struct cifs_sb_info *cifs_sb)
 			continue;
 		spin_lock(&cfids->cfid_list_lock);
 		list_for_each_entry(cfid, &cfids->entries, entry) {
-			tmp_list = kmalloc(sizeof(*tmp_list), GFP_ATOMIC);
+			tmp_list = kmalloc_obj(*tmp_list, GFP_ATOMIC);
 			if (tmp_list == NULL) {
 				/*
 				 * If the malloc() fails, we won't drop all
@@ -698,7 +698,7 @@ static struct cached_fid *init_cached_dir(const char *path)
 {
 	struct cached_fid *cfid;

-	cfid = kzalloc(sizeof(*cfid), GFP_ATOMIC);
+	cfid = kzalloc_obj(*cfid, GFP_ATOMIC);
 	if (!cfid)
 		return NULL;
 	cfid->path = kstrdup(path, GFP_ATOMIC);
@@ -813,7 +813,7 @@ struct cached_fids *init_cached_dirs(void)
 {
 	struct cached_fids *cfids;

-	cfids = kzalloc(sizeof(*cfids), GFP_KERNEL);
+	cfids = kzalloc_obj(*cfids, GFP_KERNEL);
 	if (!cfids)
 		return NULL;
 	spin_lock_init(&cfids->cfid_list_lock);
diff --git a/fs/smb/client/cifs_swn.c b/fs/smb/client/cifs_swn.c
index 68a1f87c446d..9753a432d099 100644
--- a/fs/smb/client/cifs_swn.c
+++ b/fs/smb/client/cifs_swn.c
@@ -315,7 +315,7 @@ static struct cifs_swn_reg *cifs_get_swn_reg(struct cifs_tcon *tcon)
 		goto unlock;
 	}

-	reg = kmalloc(sizeof(struct cifs_swn_reg), GFP_ATOMIC);
+	reg = kmalloc_obj(struct cifs_swn_reg, GFP_ATOMIC);
 	if (reg == NULL) {
 		ret = -ENOMEM;
 		goto fail_unlock;
diff --git a/fs/smb/client/cifsacl.c b/fs/smb/client/cifsacl.c
index f03eda46f452..85ffb8cfe320 100644
--- a/fs/smb/client/cifsacl.c
+++ b/fs/smb/client/cifsacl.c
@@ -805,8 +805,7 @@ static void parse_dacl(struct smb_acl *pdacl, char *end_of_acl,
 				 offsetof(struct smb_sid, sub_auth) + sizeof(__le16)))
 			return;

-		ppace = kmalloc_array(num_aces, sizeof(struct smb_ace *),
-				      GFP_KERNEL);
+		ppace = kmalloc_objs(struct smb_ace *, num_aces, GFP_KERNEL);
 		if (!ppace)
 			return;

@@ -1332,8 +1331,7 @@ static int build_sec_desc(struct smb_ntsd *pntsd, struct smb_ntsd *pnntsd,

 		if (uid_valid(uid)) { /* chown */
 			uid_t id;
-			nowner_sid_ptr = kzalloc(sizeof(struct smb_sid),
-								GFP_KERNEL);
+			nowner_sid_ptr = kzalloc_obj(struct smb_sid, GFP_KERNEL);
 			if (!nowner_sid_ptr) {
 				rc = -ENOMEM;
 				goto chown_chgrp_exit;
@@ -1361,8 +1359,7 @@ static int build_sec_desc(struct smb_ntsd *pntsd, struct smb_ntsd *pnntsd,
 		}
 		if (gid_valid(gid)) { /* chgrp */
 			gid_t id;
-			ngroup_sid_ptr = kzalloc(sizeof(struct smb_sid),
-								GFP_KERNEL);
+			ngroup_sid_ptr = kzalloc_obj(struct smb_sid, GFP_KERNEL);
 			if (!ngroup_sid_ptr) {
 				rc = -ENOMEM;
 				goto chown_chgrp_exit;
diff --git a/fs/smb/client/cifsencrypt.c b/fs/smb/client/cifsencrypt.c
index 50b7ec39053c..b717b348e98e 100644
--- a/fs/smb/client/cifsencrypt.c
+++ b/fs/smb/client/cifsencrypt.c
@@ -500,7 +500,7 @@ calc_seckey(struct cifs_ses *ses)

 	get_random_bytes(sec_key, CIFS_SESS_KEY_SIZE);

-	ctx_arc4 = kmalloc(sizeof(*ctx_arc4), GFP_KERNEL);
+	ctx_arc4 = kmalloc_obj(*ctx_arc4, GFP_KERNEL);
 	if (!ctx_arc4) {
 		cifs_dbg(VFS, "Could not allocate arc4 context\n");
 		return -ENOMEM;
diff --git a/fs/smb/client/cifsfs.c b/fs/smb/client/cifsfs.c
index afda1d7c1ee1..85a53cd77f9e 100644
--- a/fs/smb/client/cifsfs.c
+++ b/fs/smb/client/cifsfs.c
@@ -1016,11 +1016,11 @@ cifs_smb3_do_mount(struct file_system_type *fs_type,
 	} else {
 		cifs_info("Attempting to mount %s\n", old_ctx->source);
 	}
-	cifs_sb = kzalloc(sizeof(*cifs_sb), GFP_KERNEL);
+	cifs_sb = kzalloc_obj(*cifs_sb, GFP_KERNEL);
 	if (!cifs_sb)
 		return ERR_PTR(-ENOMEM);

-	cifs_sb->ctx = kzalloc(sizeof(struct smb3_fs_context), GFP_KERNEL);
+	cifs_sb->ctx = kzalloc_obj(struct smb3_fs_context, GFP_KERNEL);
 	if (!cifs_sb->ctx) {
 		root = ERR_PTR(-ENOMEM);
 		goto out;
diff --git a/fs/smb/client/compress.c b/fs/smb/client/compress.c
index e0c44b46080e..ae536aa63ef1 100644
--- a/fs/smb/client/compress.c
+++ b/fs/smb/client/compress.c
@@ -229,7 +229,7 @@ static bool is_compressible(const struct iov_iter *data)
 	if (has_repeated_data(sample, len))
 		goto out;

-	bkt = kcalloc(bkt_size, sizeof(*bkt), GFP_KERNEL);
+	bkt = kzalloc_objs(*bkt, bkt_size, GFP_KERNEL);
 	if (!bkt) {
 		WARN_ON_ONCE(1);
 		ret = false;
diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c
index 1b479561cbf9..c7ed2ffb66ee 100644
--- a/fs/smb/client/connect.c
+++ b/fs/smb/client/connect.c
@@ -1755,7 +1755,7 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
 	if (tcp_ses)
 		return tcp_ses;

-	tcp_ses = kzalloc(sizeof(struct TCP_Server_Info), GFP_KERNEL);
+	tcp_ses = kzalloc_obj(struct TCP_Server_Info, GFP_KERNEL);
 	if (!tcp_ses) {
 		rc = -ENOMEM;
 		goto out_err;
@@ -3674,7 +3674,7 @@ static int mount_setup_tlink(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses,
 	struct tcon_link *tlink;

 	/* hang the tcon off of the superblock */
-	tlink = kzalloc(sizeof(*tlink), GFP_KERNEL);
+	tlink = kzalloc_obj(*tlink, GFP_KERNEL);
 	if (tlink == NULL)
 		return -ENOMEM;

@@ -3798,7 +3798,7 @@ mchan_mount_alloc(struct cifs_ses *ses)
 {
 	struct mchan_mount *mchan_mount;

-	mchan_mount = kzalloc(sizeof(*mchan_mount), GFP_KERNEL);
+	mchan_mount = kzalloc_obj(*mchan_mount, GFP_KERNEL);
 	if (!mchan_mount)
 		return ERR_PTR(-ENOMEM);

@@ -4193,7 +4193,7 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid)
 	struct smb3_fs_context *ctx;
 	char *origin_fullpath = NULL;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (ctx == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -4367,7 +4367,7 @@ cifs_sb_tlink(struct cifs_sb_info *cifs_sb)
 	spin_unlock(&cifs_sb->tlink_tree_lock);

 	if (tlink == NULL) {
-		newtlink = kzalloc(sizeof(*tlink), GFP_KERNEL);
+		newtlink = kzalloc_obj(*tlink, GFP_KERNEL);
 		if (newtlink == NULL)
 			return ERR_PTR(-ENOMEM);
 		newtlink->tl_uid = fsuid;
diff --git a/fs/smb/client/dfs.h b/fs/smb/client/dfs.h
index 6b5b5ca0f55c..0401c55517b8 100644
--- a/fs/smb/client/dfs.h
+++ b/fs/smb/client/dfs.h
@@ -46,7 +46,7 @@ static inline struct dfs_ref_walk *ref_walk_alloc(void)
 {
 	struct dfs_ref_walk *rw;

-	rw = kmalloc(sizeof(*rw), GFP_KERNEL);
+	rw = kmalloc_obj(*rw, GFP_KERNEL);
 	if (!rw)
 		return ERR_PTR(-ENOMEM);
 	return rw;
diff --git a/fs/smb/client/dfs_cache.c b/fs/smb/client/dfs_cache.c
index f2ad0ccd08a7..983132735d72 100644
--- a/fs/smb/client/dfs_cache.c
+++ b/fs/smb/client/dfs_cache.c
@@ -363,7 +363,7 @@ static struct cache_dfs_tgt *alloc_target(const char *name, int path_consumed)
 {
 	struct cache_dfs_tgt *t;

-	t = kmalloc(sizeof(*t), GFP_ATOMIC);
+	t = kmalloc_obj(*t, GFP_ATOMIC);
 	if (!t)
 		return ERR_PTR(-ENOMEM);
 	t->name = kstrdup(name, GFP_ATOMIC);
@@ -796,7 +796,7 @@ static int get_targets(struct cache_entry *ce, struct dfs_cache_tgt_list *tl)
 	INIT_LIST_HEAD(head);

 	list_for_each_entry(t, &ce->tlist, list) {
-		it = kzalloc(sizeof(*it), GFP_ATOMIC);
+		it = kzalloc_obj(*it, GFP_ATOMIC);
 		if (!it) {
 			rc = -ENOMEM;
 			goto err_free_it;
diff --git a/fs/smb/client/file.c b/fs/smb/client/file.c
index 88273f82812b..43b5b48f5a67 100644
--- a/fs/smb/client/file.c
+++ b/fs/smb/client/file.c
@@ -489,7 +489,7 @@ int cifs_posix_open(const char *full_path, struct inode **pinode,

 	cifs_dbg(FYI, "posix open %s\n", full_path);

-	presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
+	presp_data = kzalloc_obj(FILE_UNIX_BASIC_INFO, GFP_KERNEL);
 	if (presp_data == NULL)
 		return -ENOMEM;

@@ -673,11 +673,11 @@ struct cifsFileInfo *cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
 	struct cifs_tcon *tcon = tlink_tcon(tlink);
 	struct TCP_Server_Info *server = tcon->ses->server;

-	cfile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
+	cfile = kzalloc_obj(struct cifsFileInfo, GFP_KERNEL);
 	if (cfile == NULL)
 		return cfile;

-	fdlocks = kzalloc(sizeof(struct cifs_fid_locks), GFP_KERNEL);
+	fdlocks = kzalloc_obj(struct cifs_fid_locks, GFP_KERNEL);
 	if (!fdlocks) {
 		kfree(cfile);
 		return NULL;
@@ -1458,7 +1458,7 @@ int cifs_close(struct inode *inode, struct file *file)
 	if (file->private_data != NULL) {
 		cfile = file->private_data;
 		file->private_data = NULL;
-		dclose = kmalloc(sizeof(struct cifs_deferred_close), GFP_KERNEL);
+		dclose = kmalloc_obj(struct cifs_deferred_close, GFP_KERNEL);
 		if ((cfile->status_file_deleted == false) &&
 		    (smb2_can_defer_close(inode, dclose))) {
 			if (test_and_clear_bit(NETFS_ICTX_MODIFIED_ATTR, &cinode->netfs.flags)) {
@@ -1582,7 +1582,7 @@ static struct cifsLockInfo *
 cifs_lock_init(__u64 offset, __u64 length, __u8 type, __u16 flags)
 {
 	struct cifsLockInfo *lock =
-		kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
+		kmalloc_obj(struct cifsLockInfo, GFP_KERNEL);
 	if (!lock)
 		return lock;
 	lock->offset = offset;
@@ -1853,7 +1853,7 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
 			PAGE_SIZE);
 	max_num = (max_buf - sizeof(struct smb_hdr)) /
 						sizeof(LOCKING_ANDX_RANGE);
-	buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
+	buf = kzalloc_objs(LOCKING_ANDX_RANGE, max_num, GFP_KERNEL);
 	if (!buf) {
 		free_xid(xid);
 		return -ENOMEM;
@@ -1945,7 +1945,7 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile)
 	 * protects locking operations of this inode.
 	 */
 	for (i = 0; i < count; i++) {
-		lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
+		lck = kmalloc_obj(struct lock_to_push, GFP_KERNEL);
 		if (!lck) {
 			rc = -ENOMEM;
 			goto err_out;
@@ -2229,7 +2229,7 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
 			PAGE_SIZE);
 	max_num = (max_buf - sizeof(struct smb_hdr)) /
 						sizeof(LOCKING_ANDX_RANGE);
-	buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
+	buf = kzalloc_objs(LOCKING_ANDX_RANGE, max_num, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

diff --git a/fs/smb/client/fs_context.c b/fs/smb/client/fs_context.c
index 412c5b534791..4810f926dccb 100644
--- a/fs/smb/client/fs_context.c
+++ b/fs/smb/client/fs_context.c
@@ -1924,7 +1924,7 @@ int smb3_init_fs_context(struct fs_context *fc)
 	char *nodename = utsname()->nodename;
 	int i;

-	ctx = kzalloc(sizeof(struct smb3_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct smb3_fs_context, GFP_KERNEL);
 	if (unlikely(!ctx))
 		return -ENOMEM;

diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c
index c23c057162e6..d40f39f9547c 100644
--- a/fs/smb/client/inode.c
+++ b/fs/smb/client/inode.c
@@ -1841,7 +1841,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,

 	/* set ATTR_HIDDEN and clear ATTR_READONLY, but only if needed */
 	if (dosattr != origattr) {
-		info_buf = kzalloc(sizeof(*info_buf), GFP_KERNEL);
+		info_buf = kzalloc_obj(*info_buf, GFP_KERNEL);
 		if (info_buf == NULL) {
 			rc = -ENOMEM;
 			goto out_close;
@@ -2041,7 +2041,7 @@ static int __cifs_unlink(struct inode *dir, struct dentry *dentry, bool sillyren
 			}
 		}
 	} else if ((rc == -EACCES) && (dosattr == 0) && inode) {
-		attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);
+		attrs = kzalloc_obj(*attrs, GFP_KERNEL);
 		if (attrs == NULL) {
 			rc = -ENOMEM;
 			goto out_reval;
@@ -2197,7 +2197,7 @@ cifs_posix_mkdir(struct inode *inode, struct dentry *dentry, umode_t mode,
 	struct inode *newinode = NULL;
 	struct cifs_fattr fattr;

-	info = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
+	info = kzalloc_obj(FILE_UNIX_BASIC_INFO, GFP_KERNEL);
 	if (info == NULL) {
 		rc = -ENOMEM;
 		goto posix_mkdir_out;
@@ -2585,8 +2585,7 @@ cifs_rename2(struct mnt_idmap *idmap, struct inode *source_dir,
 		 * with unix extensions enabled.
 		 */
 		info_buf_source =
-			kmalloc_array(2, sizeof(FILE_UNIX_BASIC_INFO),
-					GFP_KERNEL);
+			kmalloc_objs(FILE_UNIX_BASIC_INFO, 2, GFP_KERNEL);
 		if (info_buf_source == NULL) {
 			rc = -ENOMEM;
 			goto cifs_rename_exit;
@@ -3167,7 +3166,7 @@ cifs_setattr_unix(struct dentry *direntry, struct iattr *attrs)
 	if (attrs->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID))
 		attrs->ia_valid &= ~ATTR_MODE;

-	args = kmalloc(sizeof(*args), GFP_KERNEL);
+	args = kmalloc_obj(*args, GFP_KERNEL);
 	if (args == NULL) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/fs/smb/client/ioctl.c b/fs/smb/client/ioctl.c
index a4aa063cf5ea..6d24184c8735 100644
--- a/fs/smb/client/ioctl.c
+++ b/fs/smb/client/ioctl.c
@@ -133,7 +133,7 @@ static long smb_mnt_get_fsinfo(unsigned int xid, struct cifs_tcon *tcon,
 	int rc = 0;
 	struct smb_mnt_fs_info *fsinf;

-	fsinf = kzalloc(sizeof(struct smb_mnt_fs_info), GFP_KERNEL);
+	fsinf = kzalloc_obj(struct smb_mnt_fs_info, GFP_KERNEL);
 	if (fsinf == NULL)
 		return -ENOMEM;

diff --git a/fs/smb/client/misc.c b/fs/smb/client/misc.c
index 1773e3b471aa..290d0a0bea53 100644
--- a/fs/smb/client/misc.c
+++ b/fs/smb/client/misc.c
@@ -67,7 +67,7 @@ sesInfoAlloc(void)
 {
 	struct cifs_ses *ret_buf;

-	ret_buf = kzalloc(sizeof(struct cifs_ses), GFP_KERNEL);
+	ret_buf = kzalloc_obj(struct cifs_ses, GFP_KERNEL);
 	if (ret_buf) {
 		atomic_inc(&sesInfoAllocCount);
 		spin_lock_init(&ret_buf->ses_lock);
@@ -118,7 +118,7 @@ tcon_info_alloc(bool dir_leases_enabled, enum smb3_tcon_ref_trace trace)
 	struct cifs_tcon *ret_buf;
 	static atomic_t tcon_debug_id;

-	ret_buf = kzalloc(sizeof(*ret_buf), GFP_KERNEL);
+	ret_buf = kzalloc_obj(*ret_buf, GFP_KERNEL);
 	if (!ret_buf)
 		return NULL;

@@ -499,7 +499,8 @@ cifs_close_deferred_file(struct cifsInodeInfo *cifs_inode)
 				cifs_del_deferred_close(cfile);
 				spin_unlock(&cifs_inode->deferred_lock);

-				tmp_list = kmalloc(sizeof(struct file_list), GFP_ATOMIC);
+				tmp_list = kmalloc_obj(struct file_list,
+						       GFP_ATOMIC);
 				if (tmp_list == NULL)
 					break;
 				tmp_list->cfile = cfile;
@@ -531,7 +532,8 @@ cifs_close_all_deferred_files(struct cifs_tcon *tcon)
 				cifs_del_deferred_close(cfile);
 				spin_unlock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock);

-				tmp_list = kmalloc(sizeof(struct file_list), GFP_ATOMIC);
+				tmp_list = kmalloc_obj(struct file_list,
+						       GFP_ATOMIC);
 				if (tmp_list == NULL)
 					break;
 				tmp_list->cfile = cfile;
@@ -564,7 +566,7 @@ void cifs_close_deferred_file_under_dentry(struct cifs_tcon *tcon,
 			cifs_del_deferred_close(cfile);
 			spin_unlock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock);

-			tmp_list = kmalloc(sizeof(struct file_list), GFP_ATOMIC);
+			tmp_list = kmalloc_obj(struct file_list, GFP_ATOMIC);
 			if (tmp_list == NULL)
 				break;
 			tmp_list->cfile = cfile;
@@ -671,8 +673,8 @@ parse_dfs_referrals(struct get_dfs_referral_rsp *rsp, u32 rsp_size,
 	cifs_dbg(FYI, "num_referrals: %d dfs flags: 0x%x ...\n",
 		 *num_of_nodes, le32_to_cpu(rsp->DFSFlags));

-	*target_nodes = kcalloc(*num_of_nodes, sizeof(struct dfs_info3_param),
-				GFP_KERNEL);
+	*target_nodes = kzalloc_objs(struct dfs_info3_param, *num_of_nodes,
+				     GFP_KERNEL);
 	if (*target_nodes == NULL) {
 		rc = -ENOMEM;
 		goto parse_DFS_referrals_exit;
diff --git a/fs/smb/client/readdir.c b/fs/smb/client/readdir.c
index 67a8555efa1e..53e17fb2b6ee 100644
--- a/fs/smb/client/readdir.c
+++ b/fs/smb/client/readdir.c
@@ -358,7 +358,7 @@ _initiate_cifs_search(const unsigned int xid, struct file *file,
 		if (IS_ERR(tlink))
 			return PTR_ERR(tlink);

-		cifsFile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
+		cifsFile = kzalloc_obj(struct cifsFileInfo, GFP_KERNEL);
 		if (cifsFile == NULL) {
 			rc = -ENOMEM;
 			goto error_exit;
@@ -888,7 +888,7 @@ static bool add_cached_dirent(struct cached_dirents *cde,
 		cde->is_failed = 1;
 		return false;
 	}
-	de = kzalloc(sizeof(*de), GFP_ATOMIC);
+	de = kzalloc_obj(*de, GFP_ATOMIC);
 	if (de == NULL) {
 		cde->is_failed = 1;
 		return false;
diff --git a/fs/smb/client/sess.c b/fs/smb/client/sess.c
index d523540565ef..e32f9e185499 100644
--- a/fs/smb/client/sess.c
+++ b/fs/smb/client/sess.c
@@ -510,7 +510,7 @@ cifs_ses_add_channel(struct cifs_ses *ses,
 	 * the session and server without caring about memory
 	 * management.
 	 */
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		rc = -ENOMEM;
 		goto out_free_xid;
diff --git a/fs/smb/client/smb1ops.c b/fs/smb/client/smb1ops.c
index 970aeffe936e..689e052c2809 100644
--- a/fs/smb/client/smb1ops.c
+++ b/fs/smb/client/smb1ops.c
@@ -506,7 +506,7 @@ cifs_is_path_accessible(const unsigned int xid, struct cifs_tcon *tcon,
 	int rc;
 	FILE_ALL_INFO *file_info;

-	file_info = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
+	file_info = kmalloc_obj(FILE_ALL_INFO, GFP_KERNEL);
 	if (file_info == NULL)
 		return -ENOMEM;

diff --git a/fs/smb/client/smb1session.c b/fs/smb/client/smb1session.c
index 1cf6bd640fde..f5ef07d24b5f 100644
--- a/fs/smb/client/smb1session.c
+++ b/fs/smb/client/smb1session.c
@@ -725,7 +725,7 @@ sess_auth_rawntlmssp_negotiate(struct sess_data *sess_data)
 	 * if memory allocation is successful, caller of this function
 	 * frees it.
 	 */
-	ses->ntlmssp = kmalloc(sizeof(struct ntlmssp_auth), GFP_KERNEL);
+	ses->ntlmssp = kmalloc_obj(struct ntlmssp_auth, GFP_KERNEL);
 	if (!ses->ntlmssp) {
 		rc = -ENOMEM;
 		goto out;
@@ -969,7 +969,7 @@ int CIFS_SessSetup(const unsigned int xid, struct cifs_ses *ses,
 		return -EINVAL;
 	}

-	sess_data = kzalloc(sizeof(struct sess_data), GFP_KERNEL);
+	sess_data = kzalloc_obj(struct sess_data, GFP_KERNEL);
 	if (!sess_data)
 		return -ENOMEM;

diff --git a/fs/smb/client/smb2file.c b/fs/smb/client/smb2file.c
index 476c53b3711f..6dba874156aa 100644
--- a/fs/smb/client/smb2file.c
+++ b/fs/smb/client/smb2file.c
@@ -281,7 +281,7 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
 	BUILD_BUG_ON(sizeof(struct smb2_lock_element) > PAGE_SIZE);
 	max_buf = min_t(unsigned int, max_buf, PAGE_SIZE);
 	max_num = max_buf / sizeof(struct smb2_lock_element);
-	buf = kcalloc(max_num, sizeof(struct smb2_lock_element), GFP_KERNEL);
+	buf = kzalloc_objs(struct smb2_lock_element, max_num, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

@@ -424,7 +424,7 @@ smb2_push_mandatory_locks(struct cifsFileInfo *cfile)
 	BUILD_BUG_ON(sizeof(struct smb2_lock_element) > PAGE_SIZE);
 	max_buf = min_t(unsigned int, max_buf, PAGE_SIZE);
 	max_num = max_buf / sizeof(struct smb2_lock_element);
-	buf = kcalloc(max_num, sizeof(struct smb2_lock_element), GFP_KERNEL);
+	buf = kzalloc_objs(struct smb2_lock_element, max_num, GFP_KERNEL);
 	if (!buf) {
 		free_xid(xid);
 		return -ENOMEM;
diff --git a/fs/smb/client/smb2inode.c b/fs/smb/client/smb2inode.c
index 8a30088fed15..195a38fd61e8 100644
--- a/fs/smb/client/smb2inode.c
+++ b/fs/smb/client/smb2inode.c
@@ -209,7 +209,7 @@ static int smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon,
 	num_rqst = 0;
 	server = cifs_pick_channel(ses);

-	vars = kzalloc(sizeof(*vars), GFP_ATOMIC);
+	vars = kzalloc_obj(*vars, GFP_ATOMIC);
 	if (vars == NULL) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/fs/smb/client/smb2misc.c b/fs/smb/client/smb2misc.c
index d1ae839e4863..efba7cb9fb70 100644
--- a/fs/smb/client/smb2misc.c
+++ b/fs/smb/client/smb2misc.c
@@ -526,7 +526,7 @@ smb2_queue_pending_open_break(struct tcon_link *tlink, __u8 *lease_key,
 {
 	struct smb2_lease_break_work *lw;

-	lw = kmalloc(sizeof(struct smb2_lease_break_work), GFP_KERNEL);
+	lw = kmalloc_obj(struct smb2_lease_break_work, GFP_KERNEL);
 	if (!lw) {
 		cifs_put_tlink(tlink);
 		return;
@@ -798,7 +798,7 @@ __smb2_handle_cancelled_cmd(struct cifs_tcon *tcon, __u16 cmd, __u64 mid,
 {
 	struct close_cancelled_open *cancelled;

-	cancelled = kzalloc(sizeof(*cancelled), GFP_KERNEL);
+	cancelled = kzalloc_obj(*cancelled, GFP_KERNEL);
 	if (!cancelled)
 		return -ENOMEM;

diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c
index 7370d7a18cd0..071df7465a8b 100644
--- a/fs/smb/client/smb2ops.c
+++ b/fs/smb/client/smb2ops.c
@@ -731,8 +731,7 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf,
 		spin_unlock(&ses->iface_lock);

 		/* no match. insert the entry in the list */
-		info = kmalloc(sizeof(struct cifs_server_iface),
-			       GFP_KERNEL);
+		info = kmalloc_obj(struct cifs_server_iface, GFP_KERNEL);
 		if (!info) {
 			rc = -ENOMEM;
 			goto out;
@@ -1202,7 +1201,7 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,

 	ea = NULL;
 	resp_buftype[0] = resp_buftype[1] = resp_buftype[2] = CIFS_NO_BUFFER;
-	vars = kzalloc(sizeof(*vars), GFP_KERNEL);
+	vars = kzalloc_obj(*vars, GFP_KERNEL);
 	if (!vars) {
 		rc = -ENOMEM;
 		goto out_free_path;
@@ -1594,7 +1593,7 @@ smb2_ioctl_query_info(const unsigned int xid,
 	oplock = SMB2_OPLOCK_LEVEL_NONE;
 	server = cifs_pick_channel(ses);

-	vars = kzalloc(sizeof(*vars), GFP_ATOMIC);
+	vars = kzalloc_obj(*vars, GFP_ATOMIC);
 	if (vars == NULL)
 		return -ENOMEM;
 	rqst = &vars->rqst[0];
@@ -1889,7 +1888,7 @@ smb2_copychunk_range(const unsigned int xid,
 		goto out;
 	}

-	cc_req = kzalloc(struct_size(cc_req, Chunks, chunk_count), GFP_KERNEL);
+	cc_req = kzalloc_flex(*cc_req, Chunks, chunk_count, GFP_KERNEL);
 	if (!cc_req) {
 		rc = -ENOMEM;
 		goto out;
@@ -2850,7 +2849,7 @@ smb2_query_info_compound(const unsigned int xid, struct cifs_tcon *tcon,
 		flags |= CIFS_TRANSFORM_REQ;

 	resp_buftype[0] = resp_buftype[1] = resp_buftype[2] = CIFS_NO_BUFFER;
-	vars = kzalloc(sizeof(*vars), GFP_KERNEL);
+	vars = kzalloc_obj(*vars, GFP_KERNEL);
 	if (!vars) {
 		rc = -ENOMEM;
 		goto out_free_path;
@@ -4221,7 +4220,7 @@ smb2_create_lease_buf(u8 *lease_key, u8 oplock, u8 *parent_lease_key, __le32 fla
 {
 	struct create_lease *buf;

-	buf = kzalloc(sizeof(struct create_lease), GFP_KERNEL);
+	buf = kzalloc_obj(struct create_lease, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -4247,7 +4246,7 @@ smb3_create_lease_buf(u8 *lease_key, u8 oplock, u8 *parent_lease_key, __le32 fla
 {
 	struct create_lease_v2 *buf;

-	buf = kzalloc(sizeof(struct create_lease_v2), GFP_KERNEL);
+	buf = kzalloc_obj(struct create_lease_v2, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -4931,7 +4930,7 @@ receive_encrypted_read(struct TCP_Server_Info *server, struct mid_q_entry **mid,
 	int rc;
 	struct smb2_decrypt_work *dw;

-	dw = kzalloc(sizeof(struct smb2_decrypt_work), GFP_KERNEL);
+	dw = kzalloc_obj(struct smb2_decrypt_work, GFP_KERNEL);
 	if (!dw)
 		return -ENOMEM;
 	INIT_WORK(&dw->decrypt, smb2_decrypt_offload);
diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c
index 7f3edf42b9c3..0ebfdfebc5e9 100644
--- a/fs/smb/client/smb2pdu.c
+++ b/fs/smb/client/smb2pdu.c
@@ -1009,8 +1009,7 @@ create_posix_buf(umode_t mode)
 {
 	struct create_posix *buf;

-	buf = kzalloc(sizeof(struct create_posix),
-			GFP_KERNEL);
+	buf = kzalloc_obj(struct create_posix, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -1359,7 +1358,7 @@ int smb3_validate_negotiate(const unsigned int xid, struct cifs_tcon *tcon)
 	if (tcon->ses->session_flags & SMB2_SESSION_FLAG_IS_NULL)
 		cifs_tcon_dbg(VFS, "Unexpected null user (anonymous) auth flag sent by server\n");

-	pneg_inbuf = kmalloc(sizeof(*pneg_inbuf), GFP_NOFS);
+	pneg_inbuf = kmalloc_obj(*pneg_inbuf, GFP_NOFS);
 	if (!pneg_inbuf)
 		return -ENOMEM;

@@ -1786,7 +1785,7 @@ SMB2_sess_auth_rawntlmssp_negotiate(struct SMB2_sess_data *sess_data)
 	 * If memory allocation is successful, caller of this function
 	 * frees it.
 	 */
-	ses->ntlmssp = kmalloc(sizeof(struct ntlmssp_auth), GFP_KERNEL);
+	ses->ntlmssp = kmalloc_obj(struct ntlmssp_auth, GFP_KERNEL);
 	if (!ses->ntlmssp) {
 		rc = -ENOMEM;
 		goto out_err;
@@ -1984,7 +1983,7 @@ SMB2_sess_setup(const unsigned int xid, struct cifs_ses *ses,
 		return smb_EIO(smb_eio_trace_null_pointers);
 	}

-	sess_data = kzalloc(sizeof(struct SMB2_sess_data), GFP_KERNEL);
+	sess_data = kzalloc_obj(struct SMB2_sess_data, GFP_KERNEL);
 	if (!sess_data)
 		return -ENOMEM;

@@ -2298,7 +2297,7 @@ create_durable_buf(void)
 {
 	create_durable_req_t *buf;

-	buf = kzalloc(sizeof(create_durable_req_t), GFP_KERNEL);
+	buf = kzalloc_obj(create_durable_req_t, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -2321,7 +2320,7 @@ create_reconnect_durable_buf(struct cifs_fid *fid)
 {
 	create_durable_req_t *buf;

-	buf = kzalloc(sizeof(create_durable_req_t), GFP_KERNEL);
+	buf = kzalloc_obj(create_durable_req_t, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -2493,7 +2492,7 @@ create_durable_v2_buf(struct cifs_open_parms *oparms)
 	struct cifs_fid *pfid = oparms->fid;
 	struct create_durable_req_v2 *buf;

-	buf = kzalloc(sizeof(struct create_durable_req_v2), GFP_KERNEL);
+	buf = kzalloc_obj(struct create_durable_req_v2, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -2534,8 +2533,7 @@ create_reconnect_durable_v2_buf(struct cifs_fid *fid)
 {
 	struct create_durable_handle_reconnect_v2 *buf;

-	buf = kzalloc(sizeof(struct create_durable_handle_reconnect_v2),
-			GFP_KERNEL);
+	buf = kzalloc_obj(struct create_durable_handle_reconnect_v2, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -2626,7 +2624,7 @@ create_twarp_buf(__u64 timewarp)
 {
 	struct crt_twarp_ctxt *buf;

-	buf = kzalloc(sizeof(struct crt_twarp_ctxt), GFP_KERNEL);
+	buf = kzalloc_obj(struct crt_twarp_ctxt, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -2793,7 +2791,7 @@ create_query_id_buf(void)
 {
 	struct crt_query_id_ctxt *buf;

-	buf = kzalloc(sizeof(struct crt_query_id_ctxt), GFP_KERNEL);
+	buf = kzalloc_obj(struct crt_query_id_ctxt, GFP_KERNEL);
 	if (!buf)
 		return NULL;

@@ -5845,7 +5843,7 @@ send_set_info(const unsigned int xid, struct cifs_tcon *tcon,
 	if (smb3_encryption_required(tcon))
 		flags |= CIFS_TRANSFORM_REQ;

-	iov = kmalloc_array(num, sizeof(struct kvec), GFP_KERNEL);
+	iov = kmalloc_objs(struct kvec, num, GFP_KERNEL);
 	if (!iov)
 		return -ENOMEM;

diff --git a/fs/smb/client/smbdirect.c b/fs/smb/client/smbdirect.c
index d44847c9d8fc..e2df73c719fd 100644
--- a/fs/smb/client/smbdirect.c
+++ b/fs/smb/client/smbdirect.c
@@ -2098,7 +2098,7 @@ static struct smbd_connection *_smbd_get_connection(
 	char wq_name[80];
 	struct workqueue_struct *workqueue;

-	info = kzalloc(sizeof(struct smbd_connection), GFP_KERNEL);
+	info = kzalloc_obj(struct smbd_connection, GFP_KERNEL);
 	if (!info)
 		return NULL;
 	sc = &info->socket;
@@ -2786,7 +2786,7 @@ static int allocate_mr_list(struct smbdirect_socket *sc)

 	/* Allocate more MRs (2x) than hardware responder_resources */
 	for (i = 0; i < sp->responder_resources * 2; i++) {
-		mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+		mr = kzalloc_obj(*mr, GFP_KERNEL);
 		if (!mr) {
 			ret = -ENOMEM;
 			goto kzalloc_mr_failed;
@@ -2805,9 +2805,8 @@ static int allocate_mr_list(struct smbdirect_socket *sc)
 			goto ib_alloc_mr_failed;
 		}

-		mr->sgt.sgl = kcalloc(sp->max_frmr_depth,
-				      sizeof(struct scatterlist),
-				      GFP_KERNEL);
+		mr->sgt.sgl = kzalloc_objs(struct scatterlist,
+					   sp->max_frmr_depth, GFP_KERNEL);
 		if (!mr->sgt.sgl) {
 			ret = -ENOMEM;
 			log_rdma_mr(ERR, "failed to allocate sgl\n");
diff --git a/fs/smb/server/auth.c b/fs/smb/server/auth.c
index 09af55b71153..580c4d303dc3 100644
--- a/fs/smb/server/auth.c
+++ b/fs/smb/server/auth.c
@@ -239,7 +239,7 @@ int ksmbd_decode_ntlmssp_auth_blob(struct authenticate_message *authblob,
 		if (sess_key_len > CIFS_KEY_SIZE)
 			return -EINVAL;

-		ctx_arc4 = kmalloc(sizeof(*ctx_arc4), KSMBD_DEFAULT_GFP);
+		ctx_arc4 = kmalloc_obj(*ctx_arc4, KSMBD_DEFAULT_GFP);
 		if (!ctx_arc4)
 			return -ENOMEM;

@@ -774,7 +774,7 @@ static struct scatterlist *ksmbd_init_sg(struct kvec *iov, unsigned int nvec,
 	if (!nvec)
 		return NULL;

-	nr_entries = kcalloc(nvec, sizeof(int), KSMBD_DEFAULT_GFP);
+	nr_entries = kzalloc_objs(int, nvec, KSMBD_DEFAULT_GFP);
 	if (!nr_entries)
 		return NULL;

@@ -794,8 +794,7 @@ static struct scatterlist *ksmbd_init_sg(struct kvec *iov, unsigned int nvec,
 	/* Add two entries for transform header and signature */
 	total_entries += 2;

-	sg = kmalloc_array(total_entries, sizeof(struct scatterlist),
-			   KSMBD_DEFAULT_GFP);
+	sg = kmalloc_objs(struct scatterlist, total_entries, KSMBD_DEFAULT_GFP);
 	if (!sg) {
 		kfree(nr_entries);
 		return NULL;
diff --git a/fs/smb/server/connection.c b/fs/smb/server/connection.c
index e7e3e77006b1..1bb2081c492c 100644
--- a/fs/smb/server/connection.c
+++ b/fs/smb/server/connection.c
@@ -111,7 +111,7 @@ struct ksmbd_conn *ksmbd_conn_alloc(void)
 {
 	struct ksmbd_conn *conn;

-	conn = kzalloc(sizeof(struct ksmbd_conn), KSMBD_DEFAULT_GFP);
+	conn = kzalloc_obj(struct ksmbd_conn, KSMBD_DEFAULT_GFP);
 	if (!conn)
 		return NULL;

diff --git a/fs/smb/server/crypto_ctx.c b/fs/smb/server/crypto_ctx.c
index fe29d186baf6..8fd9713b00b7 100644
--- a/fs/smb/server/crypto_ctx.c
+++ b/fs/smb/server/crypto_ctx.c
@@ -121,7 +121,7 @@ static struct ksmbd_crypto_ctx *ksmbd_find_crypto_ctx(void)
 		ctx_list.avail_ctx++;
 		spin_unlock(&ctx_list.ctx_lock);

-		ctx = kzalloc(sizeof(struct ksmbd_crypto_ctx), KSMBD_DEFAULT_GFP);
+		ctx = kzalloc_obj(struct ksmbd_crypto_ctx, KSMBD_DEFAULT_GFP);
 		if (!ctx) {
 			spin_lock(&ctx_list.ctx_lock);
 			ctx_list.avail_ctx--;
@@ -226,7 +226,7 @@ int ksmbd_crypto_create(void)
 	init_waitqueue_head(&ctx_list.ctx_wait);
 	ctx_list.avail_ctx = 1;

-	ctx = kzalloc(sizeof(struct ksmbd_crypto_ctx), KSMBD_DEFAULT_GFP);
+	ctx = kzalloc_obj(struct ksmbd_crypto_ctx, KSMBD_DEFAULT_GFP);
 	if (!ctx)
 		return -ENOMEM;
 	list_add(&ctx->list, &ctx_list.idle_ctx);
diff --git a/fs/smb/server/ksmbd_work.c b/fs/smb/server/ksmbd_work.c
index 4a71f46d7020..ab4958dc3eb0 100644
--- a/fs/smb/server/ksmbd_work.c
+++ b/fs/smb/server/ksmbd_work.c
@@ -28,8 +28,8 @@ struct ksmbd_work *ksmbd_alloc_work_struct(void)
 		INIT_LIST_HEAD(&work->fp_entry);
 		INIT_LIST_HEAD(&work->aux_read_list);
 		work->iov_alloc_cnt = 4;
-		work->iov = kcalloc(work->iov_alloc_cnt, sizeof(struct kvec),
-				    KSMBD_DEFAULT_GFP);
+		work->iov = kzalloc_objs(struct kvec, work->iov_alloc_cnt,
+					 KSMBD_DEFAULT_GFP);
 		if (!work->iov) {
 			kmem_cache_free(work_cache, work);
 			work = NULL;
@@ -111,7 +111,7 @@ static int __ksmbd_iov_pin_rsp(struct ksmbd_work *work, void *ib, int len,

 	if (aux_size) {
 		need_iov_cnt++;
-		ar = kmalloc(sizeof(struct aux_read), KSMBD_DEFAULT_GFP);
+		ar = kmalloc_obj(struct aux_read, KSMBD_DEFAULT_GFP);
 		if (!ar)
 			return -ENOMEM;
 	}
diff --git a/fs/smb/server/mgmt/share_config.c b/fs/smb/server/mgmt/share_config.c
index c9b1108d6e96..53f44ff4d376 100644
--- a/fs/smb/server/mgmt/share_config.c
+++ b/fs/smb/server/mgmt/share_config.c
@@ -102,7 +102,7 @@ static int parse_veto_list(struct ksmbd_share_config *share,
 		if (!sz)
 			break;

-		p = kzalloc(sizeof(struct ksmbd_veto_pattern), KSMBD_DEFAULT_GFP);
+		p = kzalloc_obj(struct ksmbd_veto_pattern, KSMBD_DEFAULT_GFP);
 		if (!p)
 			return -ENOMEM;

@@ -150,7 +150,7 @@ static struct ksmbd_share_config *share_config_request(struct ksmbd_work *work,
 			goto out;
 	}

-	share = kzalloc(sizeof(struct ksmbd_share_config), KSMBD_DEFAULT_GFP);
+	share = kzalloc_obj(struct ksmbd_share_config, KSMBD_DEFAULT_GFP);
 	if (!share)
 		goto out;

diff --git a/fs/smb/server/mgmt/tree_connect.c b/fs/smb/server/mgmt/tree_connect.c
index 57dd47ef688c..a72d7e42a6c2 100644
--- a/fs/smb/server/mgmt/tree_connect.c
+++ b/fs/smb/server/mgmt/tree_connect.c
@@ -32,8 +32,7 @@ ksmbd_tree_conn_connect(struct ksmbd_work *work, const char *share_name)
 	if (!sc)
 		return status;

-	tree_conn = kzalloc(sizeof(struct ksmbd_tree_connect),
-			    KSMBD_DEFAULT_GFP);
+	tree_conn = kzalloc_obj(struct ksmbd_tree_connect, KSMBD_DEFAULT_GFP);
 	if (!tree_conn) {
 		status.ret = -ENOMEM;
 		goto out_error;
diff --git a/fs/smb/server/mgmt/user_config.c b/fs/smb/server/mgmt/user_config.c
index 3267b86b8c16..a3183fe5c536 100644
--- a/fs/smb/server/mgmt/user_config.c
+++ b/fs/smb/server/mgmt/user_config.c
@@ -36,7 +36,7 @@ struct ksmbd_user *ksmbd_alloc_user(struct ksmbd_login_response *resp,
 {
 	struct ksmbd_user *user;

-	user = kmalloc(sizeof(struct ksmbd_user), KSMBD_DEFAULT_GFP);
+	user = kmalloc_obj(struct ksmbd_user, KSMBD_DEFAULT_GFP);
 	if (!user)
 		return NULL;

diff --git a/fs/smb/server/mgmt/user_session.c b/fs/smb/server/mgmt/user_session.c
index 957a12de6a9d..39be2d2be86c 100644
--- a/fs/smb/server/mgmt/user_session.c
+++ b/fs/smb/server/mgmt/user_session.c
@@ -322,7 +322,7 @@ int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name)
 	if (!method)
 		return -EINVAL;

-	entry = kzalloc(sizeof(struct ksmbd_session_rpc), KSMBD_DEFAULT_GFP);
+	entry = kzalloc_obj(struct ksmbd_session_rpc, KSMBD_DEFAULT_GFP);
 	if (!entry)
 		return -ENOMEM;

@@ -579,7 +579,7 @@ struct preauth_session *ksmbd_preauth_session_alloc(struct ksmbd_conn *conn,
 {
 	struct preauth_session *sess;

-	sess = kmalloc(sizeof(struct preauth_session), KSMBD_DEFAULT_GFP);
+	sess = kmalloc_obj(struct preauth_session, KSMBD_DEFAULT_GFP);
 	if (!sess)
 		return NULL;

@@ -663,7 +663,7 @@ static struct ksmbd_session *__session_create(int protocol)
 	if (protocol != CIFDS_SESSION_FLAG_SMB2)
 		return NULL;

-	sess = kzalloc(sizeof(struct ksmbd_session), KSMBD_DEFAULT_GFP);
+	sess = kzalloc_obj(struct ksmbd_session, KSMBD_DEFAULT_GFP);
 	if (!sess)
 		return NULL;

diff --git a/fs/smb/server/oplock.c b/fs/smb/server/oplock.c
index a5967ac46604..09d9878db9cb 100644
--- a/fs/smb/server/oplock.c
+++ b/fs/smb/server/oplock.c
@@ -34,7 +34,7 @@ static struct oplock_info *alloc_opinfo(struct ksmbd_work *work,
 	struct ksmbd_session *sess = work->sess;
 	struct oplock_info *opinfo;

-	opinfo = kzalloc(sizeof(struct oplock_info), KSMBD_DEFAULT_GFP);
+	opinfo = kzalloc_obj(struct oplock_info, KSMBD_DEFAULT_GFP);
 	if (!opinfo)
 		return NULL;

@@ -93,7 +93,7 @@ static int alloc_lease(struct oplock_info *opinfo, struct lease_ctx_info *lctx)
 {
 	struct lease *lease;

-	lease = kmalloc(sizeof(struct lease), KSMBD_DEFAULT_GFP);
+	lease = kmalloc_obj(struct lease, KSMBD_DEFAULT_GFP);
 	if (!lease)
 		return -ENOMEM;

@@ -698,7 +698,7 @@ static int smb2_oplock_break_noti(struct oplock_info *opinfo)
 	if (!work)
 		return -ENOMEM;

-	br_info = kmalloc(sizeof(struct oplock_break_info), KSMBD_DEFAULT_GFP);
+	br_info = kmalloc_obj(struct oplock_break_info, KSMBD_DEFAULT_GFP);
 	if (!br_info) {
 		ksmbd_free_work_struct(work);
 		return -ENOMEM;
@@ -803,7 +803,7 @@ static int smb2_lease_break_noti(struct oplock_info *opinfo)
 	if (!work)
 		return -ENOMEM;

-	br_info = kmalloc(sizeof(struct lease_break_info), KSMBD_DEFAULT_GFP);
+	br_info = kmalloc_obj(struct lease_break_info, KSMBD_DEFAULT_GFP);
 	if (!br_info) {
 		ksmbd_free_work_struct(work);
 		return -ENOMEM;
@@ -1046,7 +1046,7 @@ static int add_lease_global_list(struct oplock_info *opinfo)
 	}
 	read_unlock(&lease_list_lock);

-	lb = kmalloc(sizeof(struct lease_table), KSMBD_DEFAULT_GFP);
+	lb = kmalloc_obj(struct lease_table, KSMBD_DEFAULT_GFP);
 	if (!lb)
 		return -ENOMEM;

@@ -1491,7 +1491,7 @@ struct lease_ctx_info *parse_lease_state(void *open_req)
 	if (IS_ERR_OR_NULL(cc))
 		return NULL;

-	lreq = kzalloc(sizeof(struct lease_ctx_info), KSMBD_DEFAULT_GFP);
+	lreq = kzalloc_obj(struct lease_ctx_info, KSMBD_DEFAULT_GFP);
 	if (!lreq)
 		return NULL;

diff --git a/fs/smb/server/server.c b/fs/smb/server/server.c
index c2c074346da1..c3f1b7219950 100644
--- a/fs/smb/server/server.c
+++ b/fs/smb/server/server.c
@@ -410,7 +410,7 @@ static int __queue_ctrl_work(int type)
 {
 	struct server_ctrl_struct *ctrl;

-	ctrl = kmalloc(sizeof(struct server_ctrl_struct), KSMBD_DEFAULT_GFP);
+	ctrl = kmalloc_obj(struct server_ctrl_struct, KSMBD_DEFAULT_GFP);
 	if (!ctrl)
 		return -ENOMEM;

diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c
index cbb31efdbaa2..8a3e17fd4af9 100644
--- a/fs/smb/server/smb2pdu.c
+++ b/fs/smb/server/smb2pdu.c
@@ -1164,8 +1164,8 @@ int smb2_handle_negotiate(struct ksmbd_work *work)
 	switch (conn->dialect) {
 	case SMB311_PROT_ID:
 		conn->preauth_info =
-			kzalloc(sizeof(struct preauth_integrity_info),
-				KSMBD_DEFAULT_GFP);
+			kzalloc_obj(struct preauth_integrity_info,
+				    KSMBD_DEFAULT_GFP);
 		if (!conn->preauth_info) {
 			rc = -ENOMEM;
 			rsp->hdr.Status = STATUS_INVALID_PARAMETER;
@@ -1560,7 +1560,7 @@ static int ntlm_authenticate(struct ksmbd_work *work,
 	if (conn->dialect >= SMB30_PROT_ID) {
 		chann = lookup_chann_list(sess, conn);
 		if (!chann) {
-			chann = kmalloc(sizeof(struct channel), KSMBD_DEFAULT_GFP);
+			chann = kmalloc_obj(struct channel, KSMBD_DEFAULT_GFP);
 			if (!chann)
 				return -ENOMEM;

@@ -1655,7 +1655,7 @@ static int krb5_authenticate(struct ksmbd_work *work,
 	if (conn->dialect >= SMB30_PROT_ID) {
 		chann = lookup_chann_list(sess, conn);
 		if (!chann) {
-			chann = kmalloc(sizeof(struct channel), KSMBD_DEFAULT_GFP);
+			chann = kmalloc_obj(struct channel, KSMBD_DEFAULT_GFP);
 			if (!chann)
 				return -ENOMEM;

@@ -7326,7 +7326,7 @@ static struct ksmbd_lock *smb2_lock_init(struct file_lock *flock,
 {
 	struct ksmbd_lock *lock;

-	lock = kzalloc(sizeof(struct ksmbd_lock), KSMBD_DEFAULT_GFP);
+	lock = kzalloc_obj(struct ksmbd_lock, KSMBD_DEFAULT_GFP);
 	if (!lock)
 		return NULL;

diff --git a/fs/smb/server/smbacl.c b/fs/smb/server/smbacl.c
index 05598d994a68..49c2abb29bf5 100644
--- a/fs/smb/server/smbacl.c
+++ b/fs/smb/server/smbacl.c
@@ -417,7 +417,7 @@ static void parse_dacl(struct mnt_idmap *idmap,
 		return;
 	}

-	ppace = kmalloc_array(num_aces, sizeof(struct smb_ace *), KSMBD_DEFAULT_GFP);
+	ppace = kmalloc_objs(struct smb_ace *, num_aces, KSMBD_DEFAULT_GFP);
 	if (!ppace) {
 		free_acl_state(&default_acl_state);
 		free_acl_state(&acl_state);
@@ -603,7 +603,7 @@ static void set_posix_acl_entries_dacl(struct mnt_idmap *idmap,
 	for (i = 0; i < fattr->cf_acls->a_count; i++, pace++) {
 		int flags = 0;

-		sid = kmalloc(sizeof(struct smb_sid), KSMBD_DEFAULT_GFP);
+		sid = kmalloc_obj(struct smb_sid, KSMBD_DEFAULT_GFP);
 		if (!sid)
 			break;

@@ -670,7 +670,7 @@ static void set_posix_acl_entries_dacl(struct mnt_idmap *idmap,

 	pace = fattr->cf_dacls->a_entries;
 	for (i = 0; i < fattr->cf_dacls->a_count; i++, pace++) {
-		sid = kmalloc(sizeof(struct smb_sid), KSMBD_DEFAULT_GFP);
+		sid = kmalloc_obj(struct smb_sid, KSMBD_DEFAULT_GFP);
 		if (!sid)
 			break;

@@ -930,7 +930,7 @@ int build_sec_desc(struct mnt_idmap *idmap,
 	gid_t gid;
 	unsigned int sid_type = SIDOWNER;

-	nowner_sid_ptr = kmalloc(sizeof(struct smb_sid), KSMBD_DEFAULT_GFP);
+	nowner_sid_ptr = kmalloc_obj(struct smb_sid, KSMBD_DEFAULT_GFP);
 	if (!nowner_sid_ptr)
 		return -ENOMEM;

@@ -939,7 +939,7 @@ int build_sec_desc(struct mnt_idmap *idmap,
 		sid_type = SIDUNIX_USER;
 	id_to_sid(uid, sid_type, nowner_sid_ptr);

-	ngroup_sid_ptr = kmalloc(sizeof(struct smb_sid), KSMBD_DEFAULT_GFP);
+	ngroup_sid_ptr = kmalloc_obj(struct smb_sid, KSMBD_DEFAULT_GFP);
 	if (!ngroup_sid_ptr) {
 		kfree(nowner_sid_ptr);
 		return -ENOMEM;
diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c
index fb36fb9d5214..7c53b78b818e 100644
--- a/fs/smb/server/transport_rdma.c
+++ b/fs/smb/server/transport_rdma.c
@@ -411,7 +411,7 @@ static struct smb_direct_transport *alloc_transport(struct rdma_cm_id *cm_id)
 	struct smbdirect_socket_parameters *sp;
 	struct ksmbd_conn *conn;

-	t = kzalloc(sizeof(*t), KSMBD_DEFAULT_GFP);
+	t = kzalloc_obj(*t, KSMBD_DEFAULT_GFP);
 	if (!t)
 		return NULL;
 	sc = &t->socket;
@@ -1852,8 +1852,8 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t,
 	/* build rdma_rw_ctx for each descriptor */
 	desc_buf = buf;
 	for (i = 0; i < desc_num; i++) {
-		msg = kzalloc(struct_size(msg, sg_list, SG_CHUNK_SIZE),
-			      KSMBD_DEFAULT_GFP);
+		msg = kzalloc_flex(*msg, sg_list, SG_CHUNK_SIZE,
+				   KSMBD_DEFAULT_GFP);
 		if (!msg) {
 			ret = -ENOMEM;
 			goto out;
@@ -2860,7 +2860,7 @@ static int smb_direct_ib_client_add(struct ib_device *ib_dev)
 	if (!rdma_frwr_is_supported(&ib_dev->attrs))
 		return 0;

-	smb_dev = kzalloc(sizeof(*smb_dev), KSMBD_DEFAULT_GFP);
+	smb_dev = kzalloc_obj(*smb_dev, KSMBD_DEFAULT_GFP);
 	if (!smb_dev)
 		return -ENOMEM;
 	smb_dev->ib_dev = ib_dev;
diff --git a/fs/smb/server/transport_tcp.c b/fs/smb/server/transport_tcp.c
index 2436dabada95..7e29b06820e2 100644
--- a/fs/smb/server/transport_tcp.c
+++ b/fs/smb/server/transport_tcp.c
@@ -61,7 +61,7 @@ static struct tcp_transport *alloc_transport(struct socket *client_sk)
 	struct tcp_transport *t;
 	struct ksmbd_conn *conn;

-	t = kzalloc(sizeof(*t), KSMBD_DEFAULT_GFP);
+	t = kzalloc_obj(*t, KSMBD_DEFAULT_GFP);
 	if (!t)
 		return NULL;
 	t->sock = client_sk;
@@ -156,7 +156,7 @@ static struct kvec *get_conn_iovec(struct tcp_transport *t, unsigned int nr_segs
 		return t->iov;

 	/* not big enough -- allocate a new one and release the old */
-	new_iov = kmalloc_array(nr_segs, sizeof(*new_iov), KSMBD_DEFAULT_GFP);
+	new_iov = kmalloc_objs(*new_iov, nr_segs, KSMBD_DEFAULT_GFP);
 	if (new_iov) {
 		kfree(t->iov);
 		t->iov = new_iov;
@@ -636,7 +636,7 @@ static struct interface *alloc_iface(char *ifname)
 	if (!ifname)
 		return NULL;

-	iface = kzalloc(sizeof(struct interface), KSMBD_DEFAULT_GFP);
+	iface = kzalloc_obj(struct interface, KSMBD_DEFAULT_GFP);
 	if (!iface) {
 		kfree(ifname);
 		return NULL;
diff --git a/fs/smb/server/vfs_cache.c b/fs/smb/server/vfs_cache.c
index e302e403e55a..ff4ea412d900 100644
--- a/fs/smb/server/vfs_cache.c
+++ b/fs/smb/server/vfs_cache.c
@@ -303,7 +303,7 @@ static struct ksmbd_inode *ksmbd_inode_get(struct ksmbd_file *fp)
 	if (ci)
 		return ci;

-	ci = kmalloc(sizeof(struct ksmbd_inode), KSMBD_DEFAULT_GFP);
+	ci = kmalloc_obj(struct ksmbd_inode, KSMBD_DEFAULT_GFP);
 	if (!ci)
 		return NULL;

@@ -1126,7 +1126,7 @@ int ksmbd_reopen_durable_fd(struct ksmbd_work *work, struct ksmbd_file *fp)

 int ksmbd_init_file_table(struct ksmbd_file_table *ft)
 {
-	ft->idr = kzalloc(sizeof(struct idr), KSMBD_DEFAULT_GFP);
+	ft->idr = kzalloc_obj(struct idr, KSMBD_DEFAULT_GFP);
 	if (!ft->idr)
 		return -ENOMEM;

diff --git a/fs/splice.c b/fs/splice.c
index 5fb07c01936f..cad3779fa35c 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -275,9 +275,8 @@ int splice_grow_spd(const struct pipe_inode_info *pipe, struct splice_pipe_desc
 	if (max_usage <= PIPE_DEF_BUFFERS)
 		return 0;

-	spd->pages = kmalloc_array(max_usage, sizeof(struct page *), GFP_KERNEL);
-	spd->partial = kmalloc_array(max_usage, sizeof(struct partial_page),
-				     GFP_KERNEL);
+	spd->pages = kmalloc_objs(struct page *, max_usage, GFP_KERNEL);
+	spd->partial = kmalloc_objs(struct partial_page, max_usage, GFP_KERNEL);

 	if (spd->pages && spd->partial)
 		return 0;
@@ -676,7 +675,7 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
 	if (!out->f_op->write_iter)
 		return -EINVAL;

-	array = kcalloc(nbufs, sizeof(struct bio_vec), GFP_KERNEL);
+	array = kzalloc_objs(struct bio_vec, nbufs, GFP_KERNEL);
 	if (unlikely(!array))
 		return -ENOMEM;

@@ -697,8 +696,7 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
 		if (unlikely(nbufs < pipe->max_usage)) {
 			kfree(array);
 			nbufs = pipe->max_usage;
-			array = kcalloc(nbufs, sizeof(struct bio_vec),
-					GFP_KERNEL);
+			array = kzalloc_objs(struct bio_vec, nbufs, GFP_KERNEL);
 			if (!array) {
 				ret = -ENOMEM;
 				break;
diff --git a/fs/squashfs/block.c b/fs/squashfs/block.c
index a05e3793f93a..2d5850168026 100644
--- a/fs/squashfs/block.c
+++ b/fs/squashfs/block.c
@@ -88,8 +88,8 @@ static int squashfs_bio_read_cached(struct bio *fullbio,
 	int idx = 0;
 	int err = 0;
 #ifdef CONFIG_SQUASHFS_COMP_CACHE_FULL
-	struct folio **cache_folios = kmalloc_array(page_count,
-			sizeof(*cache_folios), GFP_KERNEL | __GFP_ZERO);
+	struct folio **cache_folios = kmalloc_objs(*cache_folios, page_count,
+						   GFP_KERNEL | __GFP_ZERO);
 #endif

 	bio_for_each_folio_all(fi, fullbio) {
diff --git a/fs/squashfs/cache.c b/fs/squashfs/cache.c
index 181260e72680..5d97b22ce297 100644
--- a/fs/squashfs/cache.c
+++ b/fs/squashfs/cache.c
@@ -229,13 +229,13 @@ struct squashfs_cache *squashfs_cache_init(char *name, int entries,
 	if (entries == 0)
 		return NULL;

-	cache = kzalloc(sizeof(*cache), GFP_KERNEL);
+	cache = kzalloc_obj(*cache, GFP_KERNEL);
 	if (cache == NULL) {
 		ERROR("Failed to allocate %s cache\n", name);
 		return ERR_PTR(-ENOMEM);
 	}

-	cache->entry = kcalloc(entries, sizeof(*(cache->entry)), GFP_KERNEL);
+	cache->entry = kzalloc_objs(*(cache->entry), entries, GFP_KERNEL);
 	if (cache->entry == NULL) {
 		ERROR("Failed to allocate %s cache\n", name);
 		goto cleanup;
diff --git a/fs/squashfs/decompressor_multi.c b/fs/squashfs/decompressor_multi.c
index 416c53eedbd1..4d7bc620bef5 100644
--- a/fs/squashfs/decompressor_multi.c
+++ b/fs/squashfs/decompressor_multi.c
@@ -65,7 +65,7 @@ static void *squashfs_decompressor_create(struct squashfs_sb_info *msblk,
 	struct decomp_stream *decomp_strm = NULL;
 	int err = -ENOMEM;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		goto out;

@@ -80,7 +80,7 @@ static void *squashfs_decompressor_create(struct squashfs_sb_info *msblk,
 	 * we could always fall back to default decompressor and
 	 * file system works.
 	 */
-	decomp_strm = kmalloc(sizeof(*decomp_strm), GFP_KERNEL);
+	decomp_strm = kmalloc_obj(*decomp_strm, GFP_KERNEL);
 	if (!decomp_strm)
 		goto out;

@@ -148,7 +148,7 @@ static struct decomp_stream *get_decomp_stream(struct squashfs_sb_info *msblk,
 			goto wait;

 		/* Let's allocate new decomp */
-		decomp_strm = kmalloc(sizeof(*decomp_strm), GFP_KERNEL);
+		decomp_strm = kmalloc_obj(*decomp_strm, GFP_KERNEL);
 		if (!decomp_strm)
 			goto wait;

diff --git a/fs/squashfs/decompressor_single.c b/fs/squashfs/decompressor_single.c
index 6f161887710b..1f1597104ca8 100644
--- a/fs/squashfs/decompressor_single.c
+++ b/fs/squashfs/decompressor_single.c
@@ -30,7 +30,7 @@ static void *squashfs_decompressor_create(struct squashfs_sb_info *msblk,
 	struct squashfs_stream *stream;
 	int err = -ENOMEM;

-	stream = kmalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kmalloc_obj(*stream, GFP_KERNEL);
 	if (stream == NULL)
 		goto out;

diff --git a/fs/squashfs/file.c b/fs/squashfs/file.c
index 4be92206e755..8b45020b4a13 100644
--- a/fs/squashfs/file.c
+++ b/fs/squashfs/file.c
@@ -103,8 +103,9 @@ static struct meta_index *empty_meta_index(struct inode *inode, int offset,
 		 * mount time but doing it here means it is allocated only
 		 * if a 'large' file is read.
 		 */
-		msblk->meta_index = kcalloc(SQUASHFS_META_SLOTS,
-			sizeof(*(msblk->meta_index)), GFP_KERNEL);
+		msblk->meta_index = kzalloc_objs(*(msblk->meta_index),
+						 SQUASHFS_META_SLOTS,
+						 GFP_KERNEL);
 		if (msblk->meta_index == NULL) {
 			ERROR("Failed to allocate meta_index\n");
 			goto failed;
diff --git a/fs/squashfs/lz4_wrapper.c b/fs/squashfs/lz4_wrapper.c
index 49797729f143..e482757d8f2c 100644
--- a/fs/squashfs/lz4_wrapper.c
+++ b/fs/squashfs/lz4_wrapper.c
@@ -54,7 +54,7 @@ static void *lz4_init(struct squashfs_sb_info *msblk, void *buff)
 	int block_size = max_t(int, msblk->block_size, SQUASHFS_METADATA_SIZE);
 	struct squashfs_lz4 *stream;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (stream == NULL)
 		goto failed;
 	stream->input = vmalloc(block_size);
diff --git a/fs/squashfs/lzo_wrapper.c b/fs/squashfs/lzo_wrapper.c
index d216aeefa865..961fda720c14 100644
--- a/fs/squashfs/lzo_wrapper.c
+++ b/fs/squashfs/lzo_wrapper.c
@@ -29,7 +29,7 @@ static void *lzo_init(struct squashfs_sb_info *msblk, void *buff)
 {
 	int block_size = max_t(int, msblk->block_size, SQUASHFS_METADATA_SIZE);

-	struct squashfs_lzo *stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	struct squashfs_lzo *stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (stream == NULL)
 		goto failed;
 	stream->input = vmalloc(block_size);
diff --git a/fs/squashfs/page_actor.c b/fs/squashfs/page_actor.c
index 2b3e807d4dea..3d8f0225e240 100644
--- a/fs/squashfs/page_actor.c
+++ b/fs/squashfs/page_actor.c
@@ -43,7 +43,7 @@ static void cache_finish_page(struct squashfs_page_actor *actor)
 struct squashfs_page_actor *squashfs_page_actor_init(void **buffer,
 	int pages, int length)
 {
-	struct squashfs_page_actor *actor = kmalloc(sizeof(*actor), GFP_KERNEL);
+	struct squashfs_page_actor *actor = kmalloc_obj(*actor, GFP_KERNEL);

 	if (actor == NULL)
 		return NULL;
@@ -110,7 +110,7 @@ static void direct_finish_page(struct squashfs_page_actor *actor)
 struct squashfs_page_actor *squashfs_page_actor_init_special(struct squashfs_sb_info *msblk,
 	struct page **page, int pages, int length, loff_t start_index)
 {
-	struct squashfs_page_actor *actor = kmalloc(sizeof(*actor), GFP_KERNEL);
+	struct squashfs_page_actor *actor = kmalloc_obj(*actor, GFP_KERNEL);

 	if (actor == NULL)
 		return NULL;
diff --git a/fs/squashfs/super.c b/fs/squashfs/super.c
index 4465cf05603a..69217e752bc5 100644
--- a/fs/squashfs/super.c
+++ b/fs/squashfs/super.c
@@ -196,7 +196,7 @@ static int squashfs_fill_super(struct super_block *sb, struct fs_context *fc)
 		return -EINVAL;
 	}

-	sb->s_fs_info = kzalloc(sizeof(*msblk), GFP_KERNEL);
+	sb->s_fs_info = kzalloc_obj(*msblk, GFP_KERNEL);
 	if (sb->s_fs_info == NULL) {
 		ERROR("Failed to allocate squashfs_sb_info\n");
 		return -ENOMEM;
@@ -549,7 +549,7 @@ static int squashfs_init_fs_context(struct fs_context *fc)
 {
 	struct squashfs_mount_opts *opts;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return -ENOMEM;

diff --git a/fs/squashfs/xz_wrapper.c b/fs/squashfs/xz_wrapper.c
index 6c49481a2f8c..d258f4726d2e 100644
--- a/fs/squashfs/xz_wrapper.c
+++ b/fs/squashfs/xz_wrapper.c
@@ -42,7 +42,7 @@ static void *squashfs_xz_comp_opts(struct squashfs_sb_info *msblk,
 	struct comp_opts *opts;
 	int err = 0, n;

-	opts = kmalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kmalloc_obj(*opts, GFP_KERNEL);
 	if (opts == NULL) {
 		err = -ENOMEM;
 		goto out2;
@@ -84,7 +84,7 @@ static void *squashfs_xz_init(struct squashfs_sb_info *msblk, void *buff)
 	struct squashfs_xz *stream;
 	int err;

-	stream = kmalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kmalloc_obj(*stream, GFP_KERNEL);
 	if (stream == NULL) {
 		err = -ENOMEM;
 		goto failed;
diff --git a/fs/squashfs/zlib_wrapper.c b/fs/squashfs/zlib_wrapper.c
index cbb7afe7bc46..899629c54d97 100644
--- a/fs/squashfs/zlib_wrapper.c
+++ b/fs/squashfs/zlib_wrapper.c
@@ -23,7 +23,7 @@

 static void *zlib_init(struct squashfs_sb_info *dummy, void *buff)
 {
-	z_stream *stream = kmalloc(sizeof(z_stream), GFP_KERNEL);
+	z_stream *stream = kmalloc_obj(z_stream, GFP_KERNEL);
 	if (stream == NULL)
 		goto failed;
 	stream->workspace = vmalloc(zlib_inflate_workspacesize());
diff --git a/fs/squashfs/zstd_wrapper.c b/fs/squashfs/zstd_wrapper.c
index 0e407c4d8b3b..632560e4d6b0 100644
--- a/fs/squashfs/zstd_wrapper.c
+++ b/fs/squashfs/zstd_wrapper.c
@@ -28,7 +28,7 @@ struct workspace {

 static void *zstd_init(struct squashfs_sb_info *msblk, void *buff)
 {
-	struct workspace *wksp = kmalloc(sizeof(*wksp), GFP_KERNEL);
+	struct workspace *wksp = kmalloc_obj(*wksp, GFP_KERNEL);

 	if (wksp == NULL)
 		goto failed;
diff --git a/fs/super.c b/fs/super.c
index 784b5297a7d7..b8a6e156359d 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -317,7 +317,7 @@ static void destroy_unused_super(struct super_block *s)
 static struct super_block *alloc_super(struct file_system_type *type, int flags,
 				       struct user_namespace *user_ns)
 {
-	struct super_block *s = kzalloc(sizeof(struct super_block), GFP_KERNEL);
+	struct super_block *s = kzalloc_obj(struct super_block, GFP_KERNEL);
 	static const struct super_operations default_op;
 	int i;

@@ -1135,7 +1135,7 @@ void emergency_remount(void)
 {
 	struct work_struct *work;

-	work = kmalloc(sizeof(*work), GFP_ATOMIC);
+	work = kmalloc_obj(*work, GFP_ATOMIC);
 	if (work) {
 		INIT_WORK(work, do_emergency_remount);
 		schedule_work(work);
@@ -1167,7 +1167,7 @@ void emergency_thaw_all(void)
 {
 	struct work_struct *work;

-	work = kmalloc(sizeof(*work), GFP_ATOMIC);
+	work = kmalloc_obj(*work, GFP_ATOMIC);
 	if (work) {
 		INIT_WORK(work, do_thaw_all);
 		schedule_work(work);
diff --git a/fs/sync.c b/fs/sync.c
index f310a550316f..942a60cfedfb 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -135,7 +135,7 @@ void emergency_sync(void)
 {
 	struct work_struct *work;

-	work = kmalloc(sizeof(*work), GFP_ATOMIC);
+	work = kmalloc_obj(*work, GFP_ATOMIC);
 	if (work) {
 		INIT_WORK(work, do_sync_work);
 		schedule_work(work);
diff --git a/fs/sysfs/mount.c b/fs/sysfs/mount.c
index 98467bb76737..a6de7d945fba 100644
--- a/fs/sysfs/mount.c
+++ b/fs/sysfs/mount.c
@@ -62,7 +62,7 @@ static int sysfs_init_fs_context(struct fs_context *fc)
 			return -EPERM;
 	}

-	kfc = kzalloc(sizeof(struct kernfs_fs_context), GFP_KERNEL);
+	kfc = kzalloc_obj(struct kernfs_fs_context, GFP_KERNEL);
 	if (!kfc)
 		return -ENOMEM;

diff --git a/fs/timerfd.c b/fs/timerfd.c
index 9fcea7860ddf..f379edab7c02 100644
--- a/fs/timerfd.c
+++ b/fs/timerfd.c
@@ -413,7 +413,7 @@ SYSCALL_DEFINE2(timerfd_create, int, clockid, int, flags)
 	    !capable(CAP_WAKE_ALARM))
 		return -EPERM;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/tracefs/event_inode.c b/fs/tracefs/event_inode.c
index 61cbdafa2411..81a3a7dcf6ce 100644
--- a/fs/tracefs/event_inode.c
+++ b/fs/tracefs/event_inode.c
@@ -191,8 +191,8 @@ static int eventfs_set_attr(struct mnt_idmap *idmap, struct dentry *dentry,
 	/* Preallocate the children mode array if necessary */
 	if (!(dentry->d_inode->i_mode & S_IFDIR)) {
 		if (!ei->entry_attrs) {
-			ei->entry_attrs = kcalloc(ei->nr_entries, sizeof(*ei->entry_attrs),
-						  GFP_NOFS);
+			ei->entry_attrs = kzalloc_objs(*ei->entry_attrs,
+						       ei->nr_entries, GFP_NOFS);
 			if (!ei->entry_attrs) {
 				ret = -ENOMEM;
 				goto out;
@@ -439,7 +439,7 @@ static inline struct eventfs_inode *init_ei(struct eventfs_inode *ei, const char

 static inline struct eventfs_inode *alloc_ei(const char *name)
 {
-	struct eventfs_inode *ei = kzalloc(sizeof(*ei), GFP_KERNEL);
+	struct eventfs_inode *ei = kzalloc_obj(*ei, GFP_KERNEL);
 	struct eventfs_inode *result;

 	if (!ei)
@@ -454,7 +454,7 @@ static inline struct eventfs_inode *alloc_ei(const char *name)

 static inline struct eventfs_inode *alloc_root_ei(const char *name)
 {
-	struct eventfs_root_inode *rei = kzalloc(sizeof(*rei), GFP_KERNEL);
+	struct eventfs_root_inode *rei = kzalloc_obj(*rei, GFP_KERNEL);
 	struct eventfs_inode *ei;

 	if (!rei)
diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
index d9d8932a7b9c..780f38c1b52d 100644
--- a/fs/tracefs/inode.c
+++ b/fs/tracefs/inode.c
@@ -522,7 +522,7 @@ static int tracefs_init_fs_context(struct fs_context *fc)
 {
 	struct tracefs_fs_info *fsi;

-	fsi = kzalloc(sizeof(struct tracefs_fs_info), GFP_KERNEL);
+	fsi = kzalloc_obj(struct tracefs_fs_info, GFP_KERNEL);
 	if (!fsi)
 		return -ENOMEM;

diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c
index b01f382ce8db..cb24592753b0 100644
--- a/fs/ubifs/debug.c
+++ b/fs/ubifs/debug.c
@@ -1846,7 +1846,7 @@ static struct fsck_inode *add_inode(struct ubifs_info *c,
 		return ERR_PTR(-EINVAL);
 	}

-	fscki = kzalloc(sizeof(struct fsck_inode), GFP_NOFS);
+	fscki = kzalloc_obj(struct fsck_inode, GFP_NOFS);
 	if (!fscki)
 		return ERR_PTR(-ENOMEM);

@@ -3035,7 +3035,7 @@ void ubifs_assert_failed(struct ubifs_info *c, const char *expr,
  */
 int ubifs_debugging_init(struct ubifs_info *c)
 {
-	c->dbg = kzalloc(sizeof(struct ubifs_debug_info), GFP_KERNEL);
+	c->dbg = kzalloc_obj(struct ubifs_debug_info, GFP_KERNEL);
 	if (!c->dbg)
 		return -ENOMEM;

diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index 3c3d3ad4fa6c..0e088aa661af 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -1099,7 +1099,7 @@ static int ubifs_mknod(struct mnt_idmap *idmap, struct inode *dir,
 	dbg_gen("dent '%pd' in dir ino %lu", dentry, dir->i_ino);

 	if (S_ISBLK(mode) || S_ISCHR(mode)) {
-		dev = kmalloc(sizeof(union ubifs_dev_desc), GFP_NOFS);
+		dev = kmalloc_obj(union ubifs_dev_desc, GFP_NOFS);
 		if (!dev)
 			return -ENOMEM;
 		devlen = ubifs_encode_dev(dev, rdev);
@@ -1399,7 +1399,7 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry,
 	if (flags & RENAME_WHITEOUT) {
 		union ubifs_dev_desc *dev = NULL;

-		dev = kmalloc(sizeof(union ubifs_dev_desc), GFP_NOFS);
+		dev = kmalloc_obj(union ubifs_dev_desc, GFP_NOFS);
 		if (!dev) {
 			err = -ENOMEM;
 			goto out_release;
@@ -1725,7 +1725,7 @@ static int ubifs_dir_open(struct inode *inode, struct file *file)
 {
 	struct ubifs_dir_data *data;

-	data = kzalloc(sizeof(struct ubifs_dir_data), GFP_KERNEL);
+	data = kzalloc_obj(struct ubifs_dir_data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 	file->private_data = data;
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c
index 3dc3ca1cd803..cd04755e792a 100644
--- a/fs/ubifs/file.c
+++ b/fs/ubifs/file.c
@@ -848,7 +848,7 @@ static int ubifs_bulk_read(struct folio *folio)
 	if (mutex_trylock(&c->bu_mutex))
 		bu = &c->bu;
 	else {
-		bu = kmalloc(sizeof(struct bu_info), GFP_NOFS | __GFP_NOWARN);
+		bu = kmalloc_obj(struct bu_info, GFP_NOFS | __GFP_NOWARN);
 		if (!bu)
 			goto out_unlock;

diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c
index 3134d070fcc0..0bf08b7755b8 100644
--- a/fs/ubifs/gc.c
+++ b/fs/ubifs/gc.c
@@ -559,7 +559,7 @@ int ubifs_garbage_collect_leb(struct ubifs_info *c, struct ubifs_lprops *lp)
 				goto out;
 		}

-		idx_gc = kmalloc(sizeof(struct ubifs_gced_idx_leb), GFP_NOFS);
+		idx_gc = kmalloc_obj(struct ubifs_gced_idx_leb, GFP_NOFS);
 		if (!idx_gc) {
 			err = -ENOMEM;
 			goto out;
@@ -916,7 +916,7 @@ int ubifs_gc_start_commit(struct ubifs_info *c)
 		}
 		if (!lp)
 			break;
-		idx_gc = kmalloc(sizeof(struct ubifs_gced_idx_leb), GFP_NOFS);
+		idx_gc = kmalloc_obj(struct ubifs_gced_idx_leb, GFP_NOFS);
 		if (!idx_gc) {
 			err = -ENOMEM;
 			goto out;
diff --git a/fs/ubifs/log.c b/fs/ubifs/log.c
index b6ac9c4281ef..c6edcbf35ebc 100644
--- a/fs/ubifs/log.c
+++ b/fs/ubifs/log.c
@@ -167,7 +167,7 @@ int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs)
 	struct ubifs_bud *bud;
 	struct ubifs_ref_node *ref;

-	bud = kmalloc(sizeof(struct ubifs_bud), GFP_NOFS);
+	bud = kmalloc_obj(struct ubifs_bud, GFP_NOFS);
 	if (!bud)
 		return -ENOMEM;
 	ref = kzalloc(c->ref_node_alsz, GFP_NOFS);
@@ -574,7 +574,7 @@ static int done_already(struct rb_root *done_tree, int lnum)
 			return 1;
 	}

-	dr = kzalloc(sizeof(struct done_ref), GFP_NOFS);
+	dr = kzalloc_obj(struct done_ref, GFP_NOFS);
 	if (!dr)
 		return -ENOMEM;

diff --git a/fs/ubifs/lpt.c b/fs/ubifs/lpt.c
index dde0aa3287f4..a9cb92e3ee9c 100644
--- a/fs/ubifs/lpt.c
+++ b/fs/ubifs/lpt.c
@@ -624,9 +624,9 @@ int ubifs_create_dflt_lpt(struct ubifs_info *c, int *main_lebs, int lpt_first,
 	if (IS_ERR(desc))
 		return PTR_ERR(desc);

-	lsave = kmalloc_array(c->lsave_cnt, sizeof(int), GFP_KERNEL);
-	pnode = kzalloc(sizeof(struct ubifs_pnode), GFP_KERNEL);
-	nnode = kzalloc(sizeof(struct ubifs_nnode), GFP_KERNEL);
+	lsave = kmalloc_objs(int, c->lsave_cnt, GFP_KERNEL);
+	pnode = kzalloc_obj(struct ubifs_pnode, GFP_KERNEL);
+	nnode = kzalloc_obj(struct ubifs_nnode, GFP_KERNEL);
 	buf = vmalloc(c->leb_size);
 	ltab = vmalloc_array(c->lpt_lebs,
 			     sizeof(struct ubifs_lpt_lprops));
@@ -1215,7 +1215,7 @@ int ubifs_read_nnode(struct ubifs_info *c, struct ubifs_nnode *parent, int iip)
 		lnum = c->lpt_lnum;
 		offs = c->lpt_offs;
 	}
-	nnode = kzalloc(sizeof(struct ubifs_nnode), GFP_NOFS);
+	nnode = kzalloc_obj(struct ubifs_nnode, GFP_NOFS);
 	if (!nnode) {
 		err = -ENOMEM;
 		goto out;
@@ -1278,7 +1278,7 @@ static int read_pnode(struct ubifs_info *c, struct ubifs_nnode *parent, int iip)
 	branch = &parent->nbranch[iip];
 	lnum = branch->lnum;
 	offs = branch->offs;
-	pnode = kzalloc(sizeof(struct ubifs_pnode), GFP_NOFS);
+	pnode = kzalloc_obj(struct ubifs_pnode, GFP_NOFS);
 	if (!pnode)
 		return -ENOMEM;

@@ -1856,7 +1856,7 @@ static int lpt_init_wr(struct ubifs_info *c)
 		return -ENOMEM;

 	if (c->big_lpt) {
-		c->lsave = kmalloc_array(c->lsave_cnt, sizeof(int), GFP_NOFS);
+		c->lsave = kmalloc_objs(int, c->lsave_cnt, GFP_NOFS);
 		if (!c->lsave)
 			return -ENOMEM;
 		err = read_lsave(c);
@@ -2099,8 +2099,7 @@ int ubifs_lpt_scan_nolock(struct ubifs_info *c, int start_lnum, int end_lnum,
 			return err;
 	}

-	path = kmalloc_array(c->lpt_hght + 1, sizeof(struct lpt_scan_node),
-			     GFP_NOFS);
+	path = kmalloc_objs(struct lpt_scan_node, c->lpt_hght + 1, GFP_NOFS);
 	if (!path)
 		return -ENOMEM;

diff --git a/fs/ubifs/orphan.c b/fs/ubifs/orphan.c
index 5555dd740889..85e467646e4a 100644
--- a/fs/ubifs/orphan.c
+++ b/fs/ubifs/orphan.c
@@ -55,7 +55,7 @@ int ubifs_add_orphan(struct ubifs_info *c, ino_t inum)
 	struct ubifs_orphan *orphan, *o;
 	struct rb_node **p, *parent = NULL;

-	orphan = kzalloc(sizeof(struct ubifs_orphan), GFP_NOFS);
+	orphan = kzalloc_obj(struct ubifs_orphan, GFP_NOFS);
 	if (!orphan)
 		return -ENOMEM;
 	orphan->inum = inum;
@@ -758,7 +758,7 @@ static int dbg_ins_check_orphan(struct rb_root *root, ino_t inum)
 	struct check_orphan *orphan, *o;
 	struct rb_node **p, *parent = NULL;

-	orphan = kzalloc(sizeof(struct check_orphan), GFP_NOFS);
+	orphan = kzalloc_obj(struct check_orphan, GFP_NOFS);
 	if (!orphan)
 		return -ENOMEM;
 	orphan->inum = inum;
diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c
index b36dc9b032f4..d92aed9fbad7 100644
--- a/fs/ubifs/recovery.c
+++ b/fs/ubifs/recovery.c
@@ -508,7 +508,7 @@ static int fix_unclean_leb(struct ubifs_info *c, struct ubifs_scan_leb *sleb,

 		dbg_rcvry("need to fix LEB %d start %d endpt %d",
 			  lnum, start, sleb->endpt);
-		ucleb = kzalloc(sizeof(struct ubifs_unclean_leb), GFP_NOFS);
+		ucleb = kzalloc_obj(struct ubifs_unclean_leb, GFP_NOFS);
 		if (!ucleb)
 			return -ENOMEM;
 		ucleb->lnum = lnum;
@@ -1258,7 +1258,7 @@ static int add_ino(struct ubifs_info *c, ino_t inum, loff_t i_size,
 			p = &(*p)->rb_right;
 	}

-	e = kzalloc(sizeof(struct size_entry), GFP_KERNEL);
+	e = kzalloc_obj(struct size_entry, GFP_KERNEL);
 	if (!e)
 		return -ENOMEM;

diff --git a/fs/ubifs/replay.c b/fs/ubifs/replay.c
index a950c5f2560e..7e5435dab283 100644
--- a/fs/ubifs/replay.c
+++ b/fs/ubifs/replay.c
@@ -393,7 +393,7 @@ static int insert_node(struct ubifs_info *c, int lnum, int offs, int len,
 	if (key_inum(c, key) >= c->highest_inum)
 		c->highest_inum = key_inum(c, key);

-	r = kzalloc(sizeof(struct replay_entry), GFP_KERNEL);
+	r = kzalloc_obj(struct replay_entry, GFP_KERNEL);
 	if (!r)
 		return -ENOMEM;

@@ -443,7 +443,7 @@ static int insert_dent(struct ubifs_info *c, int lnum, int offs, int len,
 	if (key_inum(c, key) >= c->highest_inum)
 		c->highest_inum = key_inum(c, key);

-	r = kzalloc(sizeof(struct replay_entry), GFP_KERNEL);
+	r = kzalloc_obj(struct replay_entry, GFP_KERNEL);
 	if (!r)
 		return -ENOMEM;

@@ -897,11 +897,11 @@ static int add_replay_bud(struct ubifs_info *c, int lnum, int offs, int jhead,

 	dbg_mnt("add replay bud LEB %d:%d, head %d", lnum, offs, jhead);

-	bud = kmalloc(sizeof(struct ubifs_bud), GFP_KERNEL);
+	bud = kmalloc_obj(struct ubifs_bud, GFP_KERNEL);
 	if (!bud)
 		return -ENOMEM;

-	b = kmalloc(sizeof(struct bud_entry), GFP_KERNEL);
+	b = kmalloc_obj(struct bud_entry, GFP_KERNEL);
 	if (!b) {
 		err = -ENOMEM;
 		goto out;
diff --git a/fs/ubifs/scan.c b/fs/ubifs/scan.c
index 84a9157dcc32..cbff2d800e27 100644
--- a/fs/ubifs/scan.c
+++ b/fs/ubifs/scan.c
@@ -130,7 +130,7 @@ struct ubifs_scan_leb *ubifs_start_scan(const struct ubifs_info *c, int lnum,

 	dbg_scan("scan LEB %d:%d", lnum, offs);

-	sleb = kzalloc(sizeof(struct ubifs_scan_leb), GFP_NOFS);
+	sleb = kzalloc_obj(struct ubifs_scan_leb, GFP_NOFS);
 	if (!sleb)
 		return ERR_PTR(-ENOMEM);

@@ -185,7 +185,7 @@ int ubifs_add_snod(const struct ubifs_info *c, struct ubifs_scan_leb *sleb,
 	struct ubifs_ino_node *ino = buf;
 	struct ubifs_scan_node *snod;

-	snod = kmalloc(sizeof(struct ubifs_scan_node), GFP_NOFS);
+	snod = kmalloc_obj(struct ubifs_scan_node, GFP_NOFS);
 	if (!snod)
 		return -ENOMEM;

diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index f453c37cee37..b86b65fcd615 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -208,7 +208,7 @@ struct inode *ubifs_iget(struct super_block *sb, unsigned long inum)
 		dev_t rdev;
 		union ubifs_dev_desc *dev;

-		ui->data = kmalloc(sizeof(union ubifs_dev_desc), GFP_NOFS);
+		ui->data = kmalloc_obj(union ubifs_dev_desc, GFP_NOFS);
 		if (!ui->data) {
 			err = -ENOMEM;
 			goto out_ino;
@@ -819,8 +819,7 @@ static int alloc_wbufs(struct ubifs_info *c)
 {
 	int i, err;

-	c->jheads = kcalloc(c->jhead_cnt, sizeof(struct ubifs_jhead),
-			    GFP_KERNEL);
+	c->jheads = kzalloc_objs(struct ubifs_jhead, c->jhead_cnt, GFP_KERNEL);
 	if (!c->jheads)
 		return -ENOMEM;

@@ -1246,8 +1245,7 @@ static int mount_ubifs(struct ubifs_info *c)
 	 * never exceed 64.
 	 */
 	err = -ENOMEM;
-	c->bottom_up_buf = kmalloc_array(BOTTOM_UP_HEIGHT, sizeof(int),
-					 GFP_KERNEL);
+	c->bottom_up_buf = kmalloc_objs(int, BOTTOM_UP_HEIGHT, GFP_KERNEL);
 	if (!c->bottom_up_buf)
 		goto out_free;

@@ -2083,7 +2081,7 @@ static struct ubifs_info *alloc_ubifs_info(struct ubi_volume_desc *ubi)
 {
 	struct ubifs_info *c;

-	c = kzalloc(sizeof(struct ubifs_info), GFP_KERNEL);
+	c = kzalloc_obj(struct ubifs_info, GFP_KERNEL);
 	if (c) {
 		spin_lock_init(&c->cnt_lock);
 		spin_lock_init(&c->cs_lock);
@@ -2336,7 +2334,7 @@ static int ubifs_init_fs_context(struct fs_context *fc)
 {
 	struct ubifs_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct ubifs_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct ubifs_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/ubifs/sysfs.c b/fs/ubifs/sysfs.c
index aae32222f11b..1c926e865be3 100644
--- a/fs/ubifs/sysfs.c
+++ b/fs/ubifs/sysfs.c
@@ -93,7 +93,7 @@ int ubifs_sysfs_register(struct ubifs_info *c)
 	int ret, n;
 	char dfs_dir_name[UBIFS_DFS_DIR_LEN];

-	c->stats = kzalloc(sizeof(struct ubifs_stats_info), GFP_KERNEL);
+	c->stats = kzalloc_obj(struct ubifs_stats_info, GFP_KERNEL);
 	if (!c->stats) {
 		ret = -ENOMEM;
 		goto out_last;
diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c
index 33946b518148..694b08d27d7d 100644
--- a/fs/ubifs/tnc.c
+++ b/fs/ubifs/tnc.c
@@ -99,7 +99,7 @@ static int insert_old_idx(struct ubifs_info *c, int lnum, int offs)
 {
 	struct ubifs_old_idx *old_idx;

-	old_idx = kmalloc(sizeof(struct ubifs_old_idx), GFP_NOFS);
+	old_idx = kmalloc_obj(struct ubifs_old_idx, GFP_NOFS);
 	if (unlikely(!old_idx))
 		return -ENOMEM;
 	old_idx->lnum = lnum;
@@ -294,7 +294,7 @@ static struct ubifs_znode *dirty_cow_znode(struct ubifs_info *c,
 	if (zbr->len) {
 		struct ubifs_old_idx *old_idx;

-		old_idx = kmalloc(sizeof(struct ubifs_old_idx), GFP_NOFS);
+		old_idx = kmalloc_obj(struct ubifs_old_idx, GFP_NOFS);
 		if (unlikely(!old_idx)) {
 			err = -ENOMEM;
 			goto out;
@@ -1134,9 +1134,8 @@ static struct ubifs_znode *dirty_cow_bottom_up(struct ubifs_info *c,
 	ubifs_assert(c, znode);
 	if (c->zroot.znode->level > BOTTOM_UP_HEIGHT) {
 		kfree(c->bottom_up_buf);
-		c->bottom_up_buf = kmalloc_array(c->zroot.znode->level,
-						 sizeof(int),
-						 GFP_NOFS);
+		c->bottom_up_buf = kmalloc_objs(int, c->zroot.znode->level,
+						GFP_NOFS);
 		if (!c->bottom_up_buf)
 			return ERR_PTR(-ENOMEM);
 		path = c->bottom_up_buf;
diff --git a/fs/ubifs/tnc_commit.c b/fs/ubifs/tnc_commit.c
index 7c43e0ccf6d4..7bf2672062a2 100644
--- a/fs/ubifs/tnc_commit.c
+++ b/fs/ubifs/tnc_commit.c
@@ -359,8 +359,7 @@ static int layout_in_gaps(struct ubifs_info *c, int cnt)

 	dbg_gc("%d znodes to write", cnt);

-	c->gap_lebs = kmalloc_array(c->lst.idx_lebs + 1, sizeof(int),
-				    GFP_NOFS);
+	c->gap_lebs = kmalloc_objs(int, c->lst.idx_lebs + 1, GFP_NOFS);
 	if (!c->gap_lebs)
 		return -ENOMEM;

@@ -692,7 +691,7 @@ static int alloc_idx_lebs(struct ubifs_info *c, int cnt)
 	dbg_cmt("need about %d empty LEBS for TNC commit", leb_cnt);
 	if (!leb_cnt)
 		return 0;
-	c->ilebs = kmalloc_array(leb_cnt, sizeof(int), GFP_NOFS);
+	c->ilebs = kmalloc_objs(int, leb_cnt, GFP_NOFS);
 	if (!c->ilebs)
 		return -ENOMEM;
 	for (i = 0; i < leb_cnt; i++) {
diff --git a/fs/udf/super.c b/fs/udf/super.c
index b2f168b0a0d1..365cb78097d3 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -270,7 +270,7 @@ static int udf_init_fs_context(struct fs_context *fc)
 {
 	struct udf_options *uopt;

-	uopt = kzalloc(sizeof(*uopt), GFP_KERNEL);
+	uopt = kzalloc_obj(*uopt, GFP_KERNEL);
 	if (!uopt)
 		return -ENOMEM;

@@ -320,7 +320,7 @@ static int udf_sb_alloc_partition_maps(struct super_block *sb, u32 count)
 {
 	struct udf_sb_info *sbi = UDF_SB(sb);

-	sbi->s_partmaps = kcalloc(count, sizeof(*sbi->s_partmaps), GFP_KERNEL);
+	sbi->s_partmaps = kzalloc_objs(*sbi->s_partmaps, count, GFP_KERNEL);
 	if (!sbi->s_partmaps) {
 		sbi->s_partitions = 0;
 		return -ENOMEM;
@@ -1047,8 +1047,7 @@ static struct udf_bitmap *udf_sb_alloc_bitmap(struct super_block *sb, u32 index)
 	struct udf_bitmap *bitmap;
 	int nr_groups = udf_compute_nr_groups(sb, index);

-	bitmap = kvzalloc(struct_size(bitmap, s_block_bitmap, nr_groups),
-			  GFP_KERNEL);
+	bitmap = kvzalloc_flex(*bitmap, s_block_bitmap, nr_groups, GFP_KERNEL);
 	if (!bitmap)
 		return NULL;

@@ -1697,7 +1696,7 @@ static struct udf_vds_record *handle_partition_descriptor(
 		struct part_desc_seq_scan_data *new_loc;
 		unsigned int new_size = ALIGN(partnum, PART_DESC_ALLOC_STEP);

-		new_loc = kcalloc(new_size, sizeof(*new_loc), GFP_KERNEL);
+		new_loc = kzalloc_objs(*new_loc, new_size, GFP_KERNEL);
 		if (!new_loc)
 			return ERR_PTR(-ENOMEM);
 		memcpy(new_loc, data->part_descs_loc,
@@ -1757,9 +1756,8 @@ static noinline int udf_process_sequence(
 	memset(data.vds, 0, sizeof(struct udf_vds_record) * VDS_POS_LENGTH);
 	data.size_part_descs = PART_DESC_ALLOC_STEP;
 	data.num_part_descs = 0;
-	data.part_descs_loc = kcalloc(data.size_part_descs,
-				      sizeof(*data.part_descs_loc),
-				      GFP_KERNEL);
+	data.part_descs_loc = kzalloc_objs(*data.part_descs_loc,
+					   data.size_part_descs, GFP_KERNEL);
 	if (!data.part_descs_loc)
 		return -ENOMEM;

@@ -2158,7 +2156,7 @@ static int udf_fill_super(struct super_block *sb, struct fs_context *fc)
 	bool lvid_open = false;
 	int silent = fc->sb_flags & SB_SILENT;

-	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
+	sbi = kzalloc_obj(*sbi, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

diff --git a/fs/ufs/super.c b/fs/ufs/super.c
index 6e4585169f94..2937221f7942 100644
--- a/fs/ufs/super.c
+++ b/fs/ufs/super.c
@@ -483,8 +483,7 @@ static int ufs_read_cylinder_structures(struct super_block *sb)
 	 * Read cylinder group (we read only first fragment from block
 	 * at this time) and prepare internal data structures for cg caching.
 	 */
-	sbi->s_ucg = kmalloc_array(uspi->s_ncg, sizeof(struct buffer_head *),
-				   GFP_NOFS);
+	sbi->s_ucg = kmalloc_objs(struct buffer_head *, uspi->s_ncg, GFP_NOFS);
 	if (!sbi->s_ucg)
 		goto failed;
 	for (i = 0; i < uspi->s_ncg; i++)
@@ -503,7 +502,7 @@ static int ufs_read_cylinder_structures(struct super_block *sb)
 		ufs_print_cylinder_stuff(sb, (struct ufs_cylinder_group *) sbi->s_ucg[i]->b_data);
 	}
 	for (i = 0; i < UFS_MAX_GROUP_LOADED; i++) {
-		if (!(sbi->s_ucpi[i] = kmalloc (sizeof(struct ufs_cg_private_info), GFP_NOFS)))
+		if (!(sbi->s_ucpi[i] = kmalloc_obj(struct ufs_cg_private_info, GFP_NOFS)))
 			goto failed;
 		sbi->s_cgno[i] = UFS_CGNO_EMPTY;
 	}
@@ -744,7 +743,7 @@ static int ufs_fill_super(struct super_block *sb, struct fs_context *fc)
 	}
 #endif

-	sbi = kzalloc(sizeof(struct ufs_sb_info), GFP_KERNEL);
+	sbi = kzalloc_obj(struct ufs_sb_info, GFP_KERNEL);
 	if (!sbi)
 		goto failed_nomem;
 	sb->s_fs_info = sbi;
@@ -769,7 +768,7 @@ static int ufs_fill_super(struct super_block *sb, struct fs_context *fc)
 		sbi->s_flavour = UFS_MOUNT_UFSTYPE_OLD;
 	}

-	uspi = kzalloc(sizeof(struct ufs_sb_private_info), GFP_KERNEL);
+	uspi = kzalloc_obj(struct ufs_sb_private_info, GFP_KERNEL);
 	sbi->s_uspi = uspi;
 	if (!uspi)
 		goto failed;
@@ -1438,7 +1437,7 @@ static int ufs_init_fs_context(struct fs_context *fc)
 {
 	struct ufs_fs_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/ufs/util.c b/fs/ufs/util.c
index f0e906ab4ddd..034b1d82c355 100644
--- a/fs/ufs/util.c
+++ b/fs/ufs/util.c
@@ -27,7 +27,7 @@ struct ufs_buffer_head * _ubh_bread_ (struct ufs_sb_private_info * uspi,
 	count = size >> uspi->s_fshift;
 	if (count > UFS_MAXFRAG)
 		return NULL;
-	ubh = kmalloc (sizeof (struct ufs_buffer_head), GFP_NOFS);
+	ubh = kmalloc_obj(struct ufs_buffer_head, GFP_NOFS);
 	if (!ubh)
 		return NULL;
 	ubh->fragment = fragment;
diff --git a/fs/unicode/utf8-core.c b/fs/unicode/utf8-core.c
index 6fc9ab8667e6..3755b8067ad3 100644
--- a/fs/unicode/utf8-core.c
+++ b/fs/unicode/utf8-core.c
@@ -176,7 +176,7 @@ struct unicode_map *utf8_load(unsigned int version)
 {
 	struct unicode_map *um;

-	um = kzalloc(sizeof(struct unicode_map), GFP_KERNEL);
+	um = kzalloc_obj(struct unicode_map, GFP_KERNEL);
 	if (!um)
 		return ERR_PTR(-ENOMEM);
 	um->version = version;
diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
index c5ba1f4487bd..e90c4a762917 100644
--- a/fs/userfaultfd.c
+++ b/fs/userfaultfd.c
@@ -653,7 +653,7 @@ int dup_userfaultfd(struct vm_area_struct *vma, struct list_head *fcs)
 		}

 	if (!ctx) {
-		fctx = kmalloc(sizeof(*fctx), GFP_KERNEL);
+		fctx = kmalloc_obj(*fctx, GFP_KERNEL);
 		if (!fctx)
 			return -ENOMEM;

@@ -840,7 +840,7 @@ int userfaultfd_unmap_prep(struct vm_area_struct *vma, unsigned long start,
 	    has_unmap_ctx(ctx, unmaps, start, end))
 		return 0;

-	unmap_ctx = kzalloc(sizeof(*unmap_ctx), GFP_KERNEL);
+	unmap_ctx = kzalloc_obj(*unmap_ctx, GFP_KERNEL);
 	if (!unmap_ctx)
 		return -ENOMEM;

diff --git a/fs/vboxsf/file.c b/fs/vboxsf/file.c
index 111752010edb..174ede512d30 100644
--- a/fs/vboxsf/file.c
+++ b/fs/vboxsf/file.c
@@ -26,7 +26,7 @@ struct vboxsf_handle *vboxsf_create_sf_handle(struct inode *inode,
 	struct vboxsf_inode *sf_i = VBOXSF_I(inode);
 	struct vboxsf_handle *sf_handle;

-	sf_handle = kmalloc(sizeof(*sf_handle), GFP_KERNEL);
+	sf_handle = kmalloc_obj(*sf_handle, GFP_KERNEL);
 	if (!sf_handle)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/vboxsf/super.c b/fs/vboxsf/super.c
index 241647b060ee..fe048ab05c48 100644
--- a/fs/vboxsf/super.c
+++ b/fs/vboxsf/super.c
@@ -122,7 +122,7 @@ static int vboxsf_fill_super(struct super_block *sb, struct fs_context *fc)
 	if (!fc->source)
 		return -EINVAL;

-	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
+	sbi = kzalloc_obj(*sbi, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

@@ -427,7 +427,7 @@ static int vboxsf_init_fs_context(struct fs_context *fc)
 {
 	struct vboxsf_fs_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/fs/vboxsf/utils.c b/fs/vboxsf/utils.c
index 9515bbf0b54c..b95c1e42d073 100644
--- a/fs/vboxsf/utils.c
+++ b/fs/vboxsf/utils.c
@@ -478,7 +478,7 @@ static struct vboxsf_dir_buf *vboxsf_dir_buf_alloc(struct list_head *list)
 {
 	struct vboxsf_dir_buf *b;

-	b = kmalloc(sizeof(*b), GFP_KERNEL);
+	b = kmalloc_obj(*b, GFP_KERNEL);
 	if (!b)
 		return NULL;

@@ -507,7 +507,7 @@ struct vboxsf_dir_info *vboxsf_dir_info_alloc(void)
 {
 	struct vboxsf_dir_info *p;

-	p = kmalloc(sizeof(*p), GFP_KERNEL);
+	p = kmalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return NULL;

diff --git a/fs/xfs/libxfs/xfs_ag.c b/fs/xfs/libxfs/xfs_ag.c
index 586918ed1cbf..759da639d386 100644
--- a/fs/xfs/libxfs/xfs_ag.c
+++ b/fs/xfs/libxfs/xfs_ag.c
@@ -224,7 +224,7 @@ xfs_perag_alloc(
 	struct xfs_perag	*pag;
 	int			error;

-	pag = kzalloc(sizeof(*pag), GFP_KERNEL);
+	pag = kzalloc_obj(*pag, GFP_KERNEL);
 	if (!pag)
 		return -ENOMEM;

diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c
index c39e40dcb0b0..472c261163ed 100644
--- a/fs/xfs/libxfs/xfs_defer.c
+++ b/fs/xfs/libxfs/xfs_defer.c
@@ -982,7 +982,7 @@ xfs_defer_ops_capture(
 		return ERR_PTR(error);

 	/* Create an object to capture the defer ops. */
-	dfc = kzalloc(sizeof(*dfc), GFP_KERNEL | __GFP_NOFAIL);
+	dfc = kzalloc_obj(*dfc, GFP_KERNEL | __GFP_NOFAIL);
 	INIT_LIST_HEAD(&dfc->dfc_list);
 	INIT_LIST_HEAD(&dfc->dfc_dfops);

diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c
index 107c1a5b8a96..495620cc001f 100644
--- a/fs/xfs/libxfs/xfs_dir2.c
+++ b/fs/xfs/libxfs/xfs_dir2.c
@@ -116,10 +116,10 @@ xfs_da_mount(
 	ASSERT(mp->m_sb.sb_versionnum & XFS_SB_VERSION_DIRV2BIT);
 	ASSERT(xfs_dir2_dirblock_bytes(&mp->m_sb) <= XFS_MAX_BLOCKSIZE);

-	mp->m_dir_geo = kzalloc(sizeof(struct xfs_da_geometry),
-				GFP_KERNEL | __GFP_RETRY_MAYFAIL);
-	mp->m_attr_geo = kzalloc(sizeof(struct xfs_da_geometry),
-				GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	mp->m_dir_geo = kzalloc_obj(struct xfs_da_geometry,
+				    GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	mp->m_attr_geo = kzalloc_obj(struct xfs_da_geometry,
+				     GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!mp->m_dir_geo || !mp->m_attr_geo) {
 		kfree(mp->m_dir_geo);
 		kfree(mp->m_attr_geo);
@@ -248,7 +248,7 @@ xfs_dir_init(
 	if (error)
 		return error;

-	args = kzalloc(sizeof(*args), GFP_KERNEL | __GFP_NOFAIL);
+	args = kzalloc_obj(*args, GFP_KERNEL | __GFP_NOFAIL);
 	if (!args)
 		return -ENOMEM;

@@ -341,7 +341,7 @@ xfs_dir_createname(
 		XFS_STATS_INC(dp->i_mount, xs_dir_create);
 	}

-	args = kzalloc(sizeof(*args), GFP_KERNEL | __GFP_NOFAIL);
+	args = kzalloc_obj(*args, GFP_KERNEL | __GFP_NOFAIL);
 	if (!args)
 		return -ENOMEM;

@@ -437,8 +437,7 @@ xfs_dir_lookup(
 	ASSERT(S_ISDIR(VFS_I(dp)->i_mode));
 	XFS_STATS_INC(dp->i_mount, xs_dir_lookup);

-	args = kzalloc(sizeof(*args),
-			GFP_KERNEL | __GFP_NOLOCKDEP | __GFP_NOFAIL);
+	args = kzalloc_obj(*args, GFP_KERNEL | __GFP_NOLOCKDEP | __GFP_NOFAIL);
 	args->geo = dp->i_mount->m_dir_geo;
 	args->name = name->name;
 	args->namelen = name->len;
@@ -503,7 +502,7 @@ xfs_dir_removename(
 	ASSERT(S_ISDIR(VFS_I(dp)->i_mode));
 	XFS_STATS_INC(dp->i_mount, xs_dir_remove);

-	args = kzalloc(sizeof(*args), GFP_KERNEL | __GFP_NOFAIL);
+	args = kzalloc_obj(*args, GFP_KERNEL | __GFP_NOFAIL);
 	if (!args)
 		return -ENOMEM;

@@ -563,7 +562,7 @@ xfs_dir_replace(
 	if (rval)
 		return rval;

-	args = kzalloc(sizeof(*args), GFP_KERNEL | __GFP_NOFAIL);
+	args = kzalloc_obj(*args, GFP_KERNEL | __GFP_NOFAIL);
 	if (!args)
 		return -ENOMEM;

diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c
index 915ec85530e7..40c7f0ff6cf3 100644
--- a/fs/xfs/libxfs/xfs_refcount.c
+++ b/fs/xfs/libxfs/xfs_refcount.c
@@ -2033,8 +2033,8 @@ xfs_refcount_recover_extent(
 		return -EFSCORRUPTED;
 	}

-	rr = kmalloc(sizeof(struct xfs_refcount_recovery),
-			GFP_KERNEL | __GFP_NOFAIL);
+	rr = kmalloc_obj(struct xfs_refcount_recovery,
+			 GFP_KERNEL | __GFP_NOFAIL);
 	INIT_LIST_HEAD(&rr->rr_list);
 	xfs_refcount_btrec_to_irec(rec, &rr->rr_rrec);

diff --git a/fs/xfs/libxfs/xfs_rtgroup.c b/fs/xfs/libxfs/xfs_rtgroup.c
index 09328f2d1575..3b7f4819b85b 100644
--- a/fs/xfs/libxfs/xfs_rtgroup.c
+++ b/fs/xfs/libxfs/xfs_rtgroup.c
@@ -98,7 +98,7 @@ xfs_rtgroup_alloc(
 	struct xfs_rtgroup	*rtg;
 	int			error;

-	rtg = kzalloc(sizeof(struct xfs_rtgroup), GFP_KERNEL);
+	rtg = kzalloc_obj(struct xfs_rtgroup, GFP_KERNEL);
 	if (!rtg)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/agheader.c b/fs/xfs/scrub/agheader.c
index 7ffe4b0ef0f1..9ed053b5f061 100644
--- a/fs/xfs/scrub/agheader.c
+++ b/fs/xfs/scrub/agheader.c
@@ -816,8 +816,8 @@ xchk_agfl(
 		xchk_block_set_corrupt(sc, sc->sa.agf_bp);
 		goto out;
 	}
-	sai.entries = kvcalloc(sai.agflcount, sizeof(xfs_agblock_t),
-			       XCHK_GFP_FLAGS);
+	sai.entries = kvzalloc_objs(xfs_agblock_t, sai.agflcount,
+				    XCHK_GFP_FLAGS);
 	if (!sai.entries) {
 		error = -ENOMEM;
 		goto out;
diff --git a/fs/xfs/scrub/agheader_repair.c b/fs/xfs/scrub/agheader_repair.c
index 15d58eedb387..ae9ed5f280d0 100644
--- a/fs/xfs/scrub/agheader_repair.c
+++ b/fs/xfs/scrub/agheader_repair.c
@@ -1719,7 +1719,7 @@ xrep_agi(
 	if (!xfs_has_rmapbt(mp))
 		return -EOPNOTSUPP;

-	sc->buf = kzalloc(sizeof(struct xrep_agi), XCHK_GFP_FLAGS);
+	sc->buf = kzalloc_obj(struct xrep_agi, XCHK_GFP_FLAGS);
 	if (!sc->buf)
 		return -ENOMEM;
 	ragi = sc->buf;
diff --git a/fs/xfs/scrub/alloc_repair.c b/fs/xfs/scrub/alloc_repair.c
index 5b4c2a39a155..dce6ab0429dc 100644
--- a/fs/xfs/scrub/alloc_repair.c
+++ b/fs/xfs/scrub/alloc_repair.c
@@ -856,7 +856,7 @@ xrep_allocbt(
 	if (!xfs_has_rmapbt(mp))
 		return -EOPNOTSUPP;

-	ra = kzalloc(sizeof(struct xrep_abt), XCHK_GFP_FLAGS);
+	ra = kzalloc_obj(struct xrep_abt, XCHK_GFP_FLAGS);
 	if (!ra)
 		return -ENOMEM;
 	ra->sc = sc;
diff --git a/fs/xfs/scrub/attr.c b/fs/xfs/scrub/attr.c
index c3c122ea2d32..390ac2e11ee0 100644
--- a/fs/xfs/scrub/attr.c
+++ b/fs/xfs/scrub/attr.c
@@ -85,7 +85,7 @@ xchk_setup_xattr_buf(
 	if (ab)
 		goto resize_value;

-	ab = kvzalloc(sizeof(struct xchk_xattr_buf), XCHK_GFP_FLAGS);
+	ab = kvzalloc_obj(struct xchk_xattr_buf, XCHK_GFP_FLAGS);
 	if (!ab)
 		return -ENOMEM;
 	sc->buf = ab;
diff --git a/fs/xfs/scrub/attr_repair.c b/fs/xfs/scrub/attr_repair.c
index a924b467a844..7d00a1ce0bac 100644
--- a/fs/xfs/scrub/attr_repair.c
+++ b/fs/xfs/scrub/attr_repair.c
@@ -1534,7 +1534,7 @@ xrep_xattr_setup_scan(
 	int			max_len;
 	int			error;

-	rx = kzalloc(sizeof(struct xrep_xattr), XCHK_GFP_FLAGS);
+	rx = kzalloc_obj(struct xrep_xattr, XCHK_GFP_FLAGS);
 	if (!rx)
 		return -ENOMEM;
 	rx->sc = sc;
diff --git a/fs/xfs/scrub/bitmap.c b/fs/xfs/scrub/bitmap.c
index 51f3171bc6c8..c7fa908d92b2 100644
--- a/fs/xfs/scrub/bitmap.c
+++ b/fs/xfs/scrub/bitmap.c
@@ -87,8 +87,8 @@ xbitmap64_clear(
 			xbitmap64_tree_insert(bn, &bitmap->xb_root);

 			/* add an extent */
-			new_bn = kmalloc(sizeof(struct xbitmap64_node),
-					XCHK_GFP_FLAGS);
+			new_bn = kmalloc_obj(struct xbitmap64_node,
+					     XCHK_GFP_FLAGS);
 			if (!new_bn)
 				return -ENOMEM;
 			new_bn->bn_start = last + 1;
@@ -164,7 +164,7 @@ xbitmap64_set(
 		xbitmap64_tree_insert(right, &bitmap->xb_root);
 	} else {
 		/* add an extent */
-		left = kmalloc(sizeof(struct xbitmap64_node), XCHK_GFP_FLAGS);
+		left = kmalloc_obj(struct xbitmap64_node, XCHK_GFP_FLAGS);
 		if (!left)
 			return -ENOMEM;
 		left->bn_start = start;
@@ -362,8 +362,8 @@ xbitmap32_clear(
 			xbitmap32_tree_insert(bn, &bitmap->xb_root);

 			/* add an extent */
-			new_bn = kmalloc(sizeof(struct xbitmap32_node),
-					XCHK_GFP_FLAGS);
+			new_bn = kmalloc_obj(struct xbitmap32_node,
+					     XCHK_GFP_FLAGS);
 			if (!new_bn)
 				return -ENOMEM;
 			new_bn->bn_start = last + 1;
@@ -439,7 +439,7 @@ xbitmap32_set(
 		xbitmap32_tree_insert(right, &bitmap->xb_root);
 	} else {
 		/* add an extent */
-		left = kmalloc(sizeof(struct xbitmap32_node), XCHK_GFP_FLAGS);
+		left = kmalloc_obj(struct xbitmap32_node, XCHK_GFP_FLAGS);
 		if (!left)
 			return -ENOMEM;
 		left->bn_start = start;
diff --git a/fs/xfs/scrub/bmap_repair.c b/fs/xfs/scrub/bmap_repair.c
index 0a83d5845379..822a4af43833 100644
--- a/fs/xfs/scrub/bmap_repair.c
+++ b/fs/xfs/scrub/bmap_repair.c
@@ -933,7 +933,7 @@ xrep_bmap(
 	if (error)
 		return error;

-	rb = kzalloc(sizeof(struct xrep_bmap), XCHK_GFP_FLAGS);
+	rb = kzalloc_obj(struct xrep_bmap, XCHK_GFP_FLAGS);
 	if (!rb)
 		return -ENOMEM;
 	rb->sc = sc;
diff --git a/fs/xfs/scrub/btree.c b/fs/xfs/scrub/btree.c
index 1089b1f4c5df..786b1e7c4dc3 100644
--- a/fs/xfs/scrub/btree.c
+++ b/fs/xfs/scrub/btree.c
@@ -449,7 +449,7 @@ xchk_btree_check_owner(
 	if (xfs_btree_is_bno(cur->bc_ops) || xfs_btree_is_rmap(cur->bc_ops)) {
 		struct check_owner	*co;

-		co = kmalloc(sizeof(struct check_owner), XCHK_GFP_FLAGS);
+		co = kmalloc_obj(struct check_owner, XCHK_GFP_FLAGS);
 		if (!co)
 			return -ENOMEM;

diff --git a/fs/xfs/scrub/cow_repair.c b/fs/xfs/scrub/cow_repair.c
index 33749cf43520..bffc4666ce60 100644
--- a/fs/xfs/scrub/cow_repair.c
+++ b/fs/xfs/scrub/cow_repair.c
@@ -685,7 +685,7 @@ xrep_bmap_cow(
 		return 0;
 	}

-	xc = kzalloc(sizeof(struct xrep_cow), XCHK_GFP_FLAGS);
+	xc = kzalloc_obj(struct xrep_cow, XCHK_GFP_FLAGS);
 	if (!xc)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/dabtree.c b/fs/xfs/scrub/dabtree.c
index 5858d4d5e279..1a71d36898b1 100644
--- a/fs/xfs/scrub/dabtree.c
+++ b/fs/xfs/scrub/dabtree.c
@@ -512,7 +512,7 @@ xchk_da_btree(
 		return 0;

 	/* Set up initial da state. */
-	ds = kzalloc(sizeof(struct xchk_da_btree), XCHK_GFP_FLAGS);
+	ds = kzalloc_obj(struct xchk_da_btree, XCHK_GFP_FLAGS);
 	if (!ds)
 		return -ENOMEM;
 	ds->dargs.dp = sc->ip;
diff --git a/fs/xfs/scrub/dir.c b/fs/xfs/scrub/dir.c
index 91228623d016..e09724cd3725 100644
--- a/fs/xfs/scrub/dir.c
+++ b/fs/xfs/scrub/dir.c
@@ -1095,7 +1095,7 @@ xchk_directory(
 	if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
 		return 0;

-	sd = kvzalloc(sizeof(struct xchk_dir), XCHK_GFP_FLAGS);
+	sd = kvzalloc_obj(struct xchk_dir, XCHK_GFP_FLAGS);
 	if (!sd)
 		return -ENOMEM;
 	sd->sc = sc;
diff --git a/fs/xfs/scrub/dir_repair.c b/fs/xfs/scrub/dir_repair.c
index f105e49f654b..9dc55c918c78 100644
--- a/fs/xfs/scrub/dir_repair.c
+++ b/fs/xfs/scrub/dir_repair.c
@@ -198,7 +198,7 @@ xrep_setup_directory(
 	if (error)
 		return error;

-	rd = kvzalloc(sizeof(struct xrep_dir), XCHK_GFP_FLAGS);
+	rd = kvzalloc_obj(struct xrep_dir, XCHK_GFP_FLAGS);
 	if (!rd)
 		return -ENOMEM;
 	rd->sc = sc;
diff --git a/fs/xfs/scrub/dirtree.c b/fs/xfs/scrub/dirtree.c
index e95dc74f1145..143114718d75 100644
--- a/fs/xfs/scrub/dirtree.c
+++ b/fs/xfs/scrub/dirtree.c
@@ -106,7 +106,7 @@ xchk_setup_dirtree(
 			return error;
 	}

-	dl = kvzalloc(sizeof(struct xchk_dirtree), XCHK_GFP_FLAGS);
+	dl = kvzalloc_obj(struct xchk_dirtree, XCHK_GFP_FLAGS);
 	if (!dl)
 		return -ENOMEM;
 	dl->sc = sc;
@@ -238,7 +238,7 @@ xchk_dirtree_create_path(
 	 * Create a new xchk_path structure to remember this parent pointer
 	 * and record the first name step.
 	 */
-	path = kmalloc(sizeof(struct xchk_dirpath), XCHK_GFP_FLAGS);
+	path = kmalloc_obj(struct xchk_dirpath, XCHK_GFP_FLAGS);
 	if (!path)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/dirtree_repair.c b/fs/xfs/scrub/dirtree_repair.c
index 019feaf0d606..bcfbbf5efc6c 100644
--- a/fs/xfs/scrub/dirtree_repair.c
+++ b/fs/xfs/scrub/dirtree_repair.c
@@ -567,7 +567,7 @@ xrep_dirtree_create_adoption_path(
 	 * Create a new xchk_path structure to remember this parent pointer
 	 * and record the first name step.
 	 */
-	path = kmalloc(sizeof(struct xchk_dirpath), XCHK_GFP_FLAGS);
+	path = kmalloc_obj(struct xchk_dirpath, XCHK_GFP_FLAGS);
 	if (!path)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/fscounters.c b/fs/xfs/scrub/fscounters.c
index b35f65b537ba..916699f3da7b 100644
--- a/fs/xfs/scrub/fscounters.c
+++ b/fs/xfs/scrub/fscounters.c
@@ -207,7 +207,7 @@ xchk_setup_fscounters(
 	if (!xfs_has_lazysbcount(sc->mp))
 		xchk_fsgates_enable(sc, XCHK_FSGATES_DRAIN);

-	sc->buf = kzalloc(sizeof(struct xchk_fscounters), XCHK_GFP_FLAGS);
+	sc->buf = kzalloc_obj(struct xchk_fscounters, XCHK_GFP_FLAGS);
 	if (!sc->buf)
 		return -ENOMEM;
 	sc->buf_cleanup = xchk_fscounters_cleanup;
diff --git a/fs/xfs/scrub/ialloc_repair.c b/fs/xfs/scrub/ialloc_repair.c
index 9b63b9d19e1b..608c7022ac15 100644
--- a/fs/xfs/scrub/ialloc_repair.c
+++ b/fs/xfs/scrub/ialloc_repair.c
@@ -804,7 +804,7 @@ xrep_iallocbt(
 	if (!xfs_has_rmapbt(mp))
 		return -EOPNOTSUPP;

-	ri = kzalloc(sizeof(struct xrep_ibt), XCHK_GFP_FLAGS);
+	ri = kzalloc_obj(struct xrep_ibt, XCHK_GFP_FLAGS);
 	if (!ri)
 		return -ENOMEM;
 	ri->sc = sc;
diff --git a/fs/xfs/scrub/inode_repair.c b/fs/xfs/scrub/inode_repair.c
index bf182a18f115..9738b9ce3f2d 100644
--- a/fs/xfs/scrub/inode_repair.c
+++ b/fs/xfs/scrub/inode_repair.c
@@ -151,7 +151,7 @@ xrep_setup_inode(
 {
 	struct xrep_inode	*ri;

-	sc->buf = kzalloc(sizeof(struct xrep_inode), XCHK_GFP_FLAGS);
+	sc->buf = kzalloc_obj(struct xrep_inode, XCHK_GFP_FLAGS);
 	if (!sc->buf)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/metapath.c b/fs/xfs/scrub/metapath.c
index 3d9de59c1758..050b86eb12d3 100644
--- a/fs/xfs/scrub/metapath.c
+++ b/fs/xfs/scrub/metapath.c
@@ -102,7 +102,7 @@ xchk_setup_metapath_scan(
 		return error;
 	}

-	mpath = kzalloc(sizeof(struct xchk_metapath), XCHK_GFP_FLAGS);
+	mpath = kzalloc_obj(struct xchk_metapath, XCHK_GFP_FLAGS);
 	if (!mpath) {
 		kfree_const(path);
 		return -ENOMEM;
diff --git a/fs/xfs/scrub/newbt.c b/fs/xfs/scrub/newbt.c
index 43e868f829aa..2e4981c1baf2 100644
--- a/fs/xfs/scrub/newbt.c
+++ b/fs/xfs/scrub/newbt.c
@@ -195,7 +195,7 @@ xrep_newbt_add_blocks(
 	struct xrep_newbt_resv		*resv;
 	int				error;

-	resv = kmalloc(sizeof(struct xrep_newbt_resv), XCHK_GFP_FLAGS);
+	resv = kmalloc_obj(struct xrep_newbt_resv, XCHK_GFP_FLAGS);
 	if (!resv)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/nlinks.c b/fs/xfs/scrub/nlinks.c
index e80fe7395d78..1e0effdb65a6 100644
--- a/fs/xfs/scrub/nlinks.c
+++ b/fs/xfs/scrub/nlinks.c
@@ -58,7 +58,7 @@ xchk_setup_nlinks(
 			return error;
 	}

-	xnc = kvzalloc(sizeof(struct xchk_nlink_ctrs), XCHK_GFP_FLAGS);
+	xnc = kvzalloc_obj(struct xchk_nlink_ctrs, XCHK_GFP_FLAGS);
 	if (!xnc)
 		return -ENOMEM;
 	xnc->xname.name = xnc->namebuf;
diff --git a/fs/xfs/scrub/parent.c b/fs/xfs/scrub/parent.c
index 5a259570b154..931604fa1294 100644
--- a/fs/xfs/scrub/parent.c
+++ b/fs/xfs/scrub/parent.c
@@ -757,7 +757,7 @@ xchk_parent_pptr(
 	struct xchk_pptrs	*pp;
 	int			error;

-	pp = kvzalloc(sizeof(struct xchk_pptrs), XCHK_GFP_FLAGS);
+	pp = kvzalloc_obj(struct xchk_pptrs, XCHK_GFP_FLAGS);
 	if (!pp)
 		return -ENOMEM;
 	pp->sc = sc;
diff --git a/fs/xfs/scrub/parent_repair.c b/fs/xfs/scrub/parent_repair.c
index 83a8205ae2f1..2ce0cefad362 100644
--- a/fs/xfs/scrub/parent_repair.c
+++ b/fs/xfs/scrub/parent_repair.c
@@ -217,7 +217,7 @@ xrep_setup_parent(

 	xchk_fsgates_enable(sc, XCHK_FSGATES_DIRENTS);

-	rp = kvzalloc(sizeof(struct xrep_parent), XCHK_GFP_FLAGS);
+	rp = kvzalloc_obj(struct xrep_parent, XCHK_GFP_FLAGS);
 	if (!rp)
 		return -ENOMEM;
 	rp->sc = sc;
diff --git a/fs/xfs/scrub/quotacheck.c b/fs/xfs/scrub/quotacheck.c
index e8cba19334a0..9ea014e2ecfd 100644
--- a/fs/xfs/scrub/quotacheck.c
+++ b/fs/xfs/scrub/quotacheck.c
@@ -86,7 +86,7 @@ xchk_setup_quotacheck(

 	xchk_fsgates_enable(sc, XCHK_FSGATES_QUOTA);

-	sc->buf = kzalloc(sizeof(struct xqcheck), XCHK_GFP_FLAGS);
+	sc->buf = kzalloc_obj(struct xqcheck, XCHK_GFP_FLAGS);
 	if (!sc->buf)
 		return -ENOMEM;

@@ -256,7 +256,7 @@ xqcheck_mod_live_ino_dqtrx(
 	dqa = rhashtable_lookup_fast(&xqc->shadow_dquot_acct, &p->tx_id,
 			xqcheck_dqacct_hash_params);
 	if (!dqa) {
-		dqa = kzalloc(sizeof(struct xqcheck_dqacct), XCHK_GFP_FLAGS);
+		dqa = kzalloc_obj(struct xqcheck_dqacct, XCHK_GFP_FLAGS);
 		if (!dqa)
 			goto out_abort;

diff --git a/fs/xfs/scrub/rcbag.c b/fs/xfs/scrub/rcbag.c
index c1a97a073d92..8f3a10f7c908 100644
--- a/fs/xfs/scrub/rcbag.c
+++ b/fs/xfs/scrub/rcbag.c
@@ -36,7 +36,7 @@ rcbag_init(
 	struct rcbag		*bag;
 	int			error;

-	bag = kzalloc(sizeof(struct rcbag), XCHK_GFP_FLAGS);
+	bag = kzalloc_obj(struct rcbag, XCHK_GFP_FLAGS);
 	if (!bag)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/refcount.c b/fs/xfs/scrub/refcount.c
index bf87025f24fc..4e1bf23e5b89 100644
--- a/fs/xfs/scrub/refcount.c
+++ b/fs/xfs/scrub/refcount.c
@@ -142,8 +142,7 @@ xchk_refcountbt_rmap_check(
 		 * is healthy each rmap_irec we see will be in agbno order
 		 * so we don't need insertion sort here.
 		 */
-		frag = kmalloc(sizeof(struct xchk_refcnt_frag),
-				XCHK_GFP_FLAGS);
+		frag = kmalloc_obj(struct xchk_refcnt_frag, XCHK_GFP_FLAGS);
 		if (!frag)
 			return -ENOMEM;
 		memcpy(&frag->rm, rec, sizeof(frag->rm));
diff --git a/fs/xfs/scrub/refcount_repair.c b/fs/xfs/scrub/refcount_repair.c
index 507993e0fb0f..ca9c382005ff 100644
--- a/fs/xfs/scrub/refcount_repair.c
+++ b/fs/xfs/scrub/refcount_repair.c
@@ -704,7 +704,7 @@ xrep_refcountbt(
 	if (!xfs_has_rmapbt(mp))
 		return -EOPNOTSUPP;

-	rr = kzalloc(sizeof(struct xrep_refc), XCHK_GFP_FLAGS);
+	rr = kzalloc_obj(struct xrep_refc, XCHK_GFP_FLAGS);
 	if (!rr)
 		return -ENOMEM;
 	rr->sc = sc;
diff --git a/fs/xfs/scrub/rmap.c b/fs/xfs/scrub/rmap.c
index 2c25910e2903..0cd3eecd2ca5 100644
--- a/fs/xfs/scrub/rmap.c
+++ b/fs/xfs/scrub/rmap.c
@@ -548,7 +548,7 @@ xchk_rmapbt(
 	struct xchk_rmap	*cr;
 	int			error;

-	cr = kzalloc(sizeof(struct xchk_rmap), XCHK_GFP_FLAGS);
+	cr = kzalloc_obj(struct xchk_rmap, XCHK_GFP_FLAGS);
 	if (!cr)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/rmap_repair.c b/fs/xfs/scrub/rmap_repair.c
index ab7053e25e1c..6766df9922e8 100644
--- a/fs/xfs/scrub/rmap_repair.c
+++ b/fs/xfs/scrub/rmap_repair.c
@@ -172,7 +172,7 @@ xrep_setup_ag_rmapbt(
 	if (error)
 		return error;

-	rr = kzalloc(sizeof(struct xrep_rmap), XCHK_GFP_FLAGS);
+	rr = kzalloc_obj(struct xrep_rmap, XCHK_GFP_FLAGS);
 	if (!rr)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/rtbitmap.c b/fs/xfs/scrub/rtbitmap.c
index 4bcfd99cec17..b3a4972d423e 100644
--- a/fs/xfs/scrub/rtbitmap.c
+++ b/fs/xfs/scrub/rtbitmap.c
@@ -41,8 +41,8 @@ xchk_setup_rtbitmap(
 	if (xchk_need_intent_drain(sc))
 		xchk_fsgates_enable(sc, XCHK_FSGATES_DRAIN);

-	rtb = kzalloc(struct_size(rtb, words, xchk_rtbitmap_wordcnt(sc)),
-			XCHK_GFP_FLAGS);
+	rtb = kzalloc_flex(*rtb, words, xchk_rtbitmap_wordcnt(sc),
+			   XCHK_GFP_FLAGS);
 	if (!rtb)
 		return -ENOMEM;
 	sc->buf = rtb;
diff --git a/fs/xfs/scrub/rtrefcount.c b/fs/xfs/scrub/rtrefcount.c
index 8cfe2f120b6b..4951cc271788 100644
--- a/fs/xfs/scrub/rtrefcount.c
+++ b/fs/xfs/scrub/rtrefcount.c
@@ -156,8 +156,7 @@ xchk_rtrefcountbt_rmap_check(
 		 * is healthy each rmap_irec we see will be in agbno order
 		 * so we don't need insertion sort here.
 		 */
-		frag = kmalloc(sizeof(struct xchk_rtrefcnt_frag),
-				XCHK_GFP_FLAGS);
+		frag = kmalloc_obj(struct xchk_rtrefcnt_frag, XCHK_GFP_FLAGS);
 		if (!frag)
 			return -ENOMEM;
 		memcpy(&frag->rm, rec, sizeof(frag->rm));
diff --git a/fs/xfs/scrub/rtrefcount_repair.c b/fs/xfs/scrub/rtrefcount_repair.c
index f713daf095fb..f165fb397647 100644
--- a/fs/xfs/scrub/rtrefcount_repair.c
+++ b/fs/xfs/scrub/rtrefcount_repair.c
@@ -709,7 +709,7 @@ xrep_rtrefcountbt(
 	if (error)
 		return error;

-	rr = kzalloc(sizeof(struct xrep_rtrefc), XCHK_GFP_FLAGS);
+	rr = kzalloc_obj(struct xrep_rtrefc, XCHK_GFP_FLAGS);
 	if (!rr)
 		return -ENOMEM;
 	rr->sc = sc;
diff --git a/fs/xfs/scrub/rtrmap_repair.c b/fs/xfs/scrub/rtrmap_repair.c
index 4610d6d80648..f2d16ca8d251 100644
--- a/fs/xfs/scrub/rtrmap_repair.c
+++ b/fs/xfs/scrub/rtrmap_repair.c
@@ -111,7 +111,7 @@ xrep_setup_rtrmapbt(
 	if (error)
 		return error;

-	rr = kzalloc(sizeof(struct xrep_rtrmap), XCHK_GFP_FLAGS);
+	rr = kzalloc_obj(struct xrep_rtrmap, XCHK_GFP_FLAGS);
 	if (!rr)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/rtsummary.c b/fs/xfs/scrub/rtsummary.c
index b510e6bbbd3e..efce39d7a1ef 100644
--- a/fs/xfs/scrub/rtsummary.c
+++ b/fs/xfs/scrub/rtsummary.c
@@ -49,8 +49,7 @@ xchk_setup_rtsummary(
 	if (xchk_need_intent_drain(sc))
 		xchk_fsgates_enable(sc, XCHK_FSGATES_DRAIN);

-	rts = kvzalloc(struct_size(rts, words, mp->m_blockwsize),
-			XCHK_GFP_FLAGS);
+	rts = kvzalloc_flex(*rts, words, mp->m_blockwsize, XCHK_GFP_FLAGS);
 	if (!rts)
 		return -ENOMEM;
 	sc->buf = rts;
diff --git a/fs/xfs/scrub/scrub.c b/fs/xfs/scrub/scrub.c
index c1c6415f5055..27511a125b39 100644
--- a/fs/xfs/scrub/scrub.c
+++ b/fs/xfs/scrub/scrub.c
@@ -632,7 +632,7 @@ xchk_scrub_create_subord(
 {
 	struct xfs_scrub_subord	*sub;

-	sub = kzalloc(sizeof(*sub), XCHK_GFP_FLAGS);
+	sub = kzalloc_obj(*sub, XCHK_GFP_FLAGS);
 	if (!sub)
 		return NULL;

@@ -680,7 +680,7 @@ xfs_scrub_metadata(
 	if (error)
 		goto out;

-	sc = kzalloc(sizeof(struct xfs_scrub), XCHK_GFP_FLAGS);
+	sc = kzalloc_obj(struct xfs_scrub, XCHK_GFP_FLAGS);
 	if (!sc) {
 		error = -ENOMEM;
 		goto out;
diff --git a/fs/xfs/scrub/stats.c b/fs/xfs/scrub/stats.c
index 4efafc5ae966..8cd018bac5d6 100644
--- a/fs/xfs/scrub/stats.c
+++ b/fs/xfs/scrub/stats.c
@@ -389,7 +389,7 @@ xchk_mount_stats_alloc(
 	struct xchk_stats	*cs;
 	int			error;

-	cs = kvzalloc(sizeof(struct xchk_stats), GFP_KERNEL);
+	cs = kvzalloc_obj(struct xchk_stats, GFP_KERNEL);
 	if (!cs)
 		return -ENOMEM;

diff --git a/fs/xfs/scrub/xfblob.c b/fs/xfs/scrub/xfblob.c
index 96fc360312de..84237fb41ccb 100644
--- a/fs/xfs/scrub/xfblob.c
+++ b/fs/xfs/scrub/xfblob.c
@@ -41,7 +41,7 @@ xfblob_create(
 	if (error)
 		return error;

-	blob = kmalloc(sizeof(struct xfblob), XCHK_GFP_FLAGS);
+	blob = kmalloc_obj(struct xfblob, XCHK_GFP_FLAGS);
 	if (!blob) {
 		error = -ENOMEM;
 		goto out_xfile;
diff --git a/fs/xfs/scrub/xfile.c b/fs/xfs/scrub/xfile.c
index bee0662fbdb6..05581571854d 100644
--- a/fs/xfs/scrub/xfile.c
+++ b/fs/xfs/scrub/xfile.c
@@ -57,7 +57,7 @@ xfile_create(
 	struct xfile		*xf;
 	int			error;

-	xf = kmalloc(sizeof(struct xfile), XCHK_GFP_FLAGS);
+	xf = kmalloc_obj(struct xfile, XCHK_GFP_FLAGS);
 	if (!xf)
 		return -ENOMEM;

diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
index db46883991de..d2f3c50d80e7 100644
--- a/fs/xfs/xfs_buf.c
+++ b/fs/xfs/xfs_buf.c
@@ -295,8 +295,8 @@ xfs_buf_alloc(
 	if (nmaps == 1)
 		bp->b_maps = &bp->__b_map;
 	else
-		bp->b_maps = kcalloc(nmaps, sizeof(struct xfs_buf_map),
-				GFP_KERNEL | __GFP_NOLOCKDEP | __GFP_NOFAIL);
+		bp->b_maps = kzalloc_objs(struct xfs_buf_map, nmaps,
+					  GFP_KERNEL | __GFP_NOLOCKDEP | __GFP_NOFAIL);
 	for (i = 0; i < nmaps; i++) {
 		bp->b_maps[i].bm_bn = map[i].bm_bn;
 		bp->b_maps[i].bm_len = map[i].bm_len;
@@ -1799,7 +1799,7 @@ xfs_alloc_buftarg(
 #if defined(CONFIG_FS_DAX) && defined(CONFIG_MEMORY_FAILURE)
 	ops = &xfs_dax_holder_operations;
 #endif
-	btp = kzalloc(sizeof(*btp), GFP_KERNEL | __GFP_NOFAIL);
+	btp = kzalloc_obj(*btp, GFP_KERNEL | __GFP_NOFAIL);

 	btp->bt_mount = mp;
 	btp->bt_file = bdev_file;
diff --git a/fs/xfs/xfs_buf_item_recover.c b/fs/xfs/xfs_buf_item_recover.c
index 77ad071ebe78..5f391372f188 100644
--- a/fs/xfs/xfs_buf_item_recover.c
+++ b/fs/xfs/xfs_buf_item_recover.c
@@ -90,7 +90,7 @@ xlog_add_buffer_cancelled(
 		return false;
 	}

-	bcp = kmalloc(sizeof(struct xfs_buf_cancel), GFP_KERNEL | __GFP_NOFAIL);
+	bcp = kmalloc_obj(struct xfs_buf_cancel, GFP_KERNEL | __GFP_NOFAIL);
 	bcp->bc_blkno = blkno;
 	bcp->bc_len = len;
 	bcp->bc_refcount = 1;
@@ -1180,8 +1180,7 @@ xlog_alloc_buf_cancel_table(

 	ASSERT(log->l_buf_cancel_table == NULL);

-	p = kmalloc_array(XLOG_BC_TABLE_SIZE, sizeof(struct list_head),
-			  GFP_KERNEL);
+	p = kmalloc_objs(struct list_head, XLOG_BC_TABLE_SIZE, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/fs/xfs/xfs_buf_mem.c b/fs/xfs/xfs_buf_mem.c
index f1f23623e4a4..e0529f380a77 100644
--- a/fs/xfs/xfs_buf_mem.c
+++ b/fs/xfs/xfs_buf_mem.c
@@ -58,7 +58,7 @@ xmbuf_alloc(
 	struct xfs_buftarg	*btp;
 	int			error;

-	btp = kzalloc(struct_size(btp, bt_cache, 1), GFP_KERNEL);
+	btp = kzalloc_flex(*btp, bt_cache, 1, GFP_KERNEL);
 	if (!btp)
 		return -ENOMEM;

diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c
index 31477a74b523..3ecbb4e0f2c8 100644
--- a/fs/xfs/xfs_discard.c
+++ b/fs/xfs/xfs_discard.c
@@ -349,7 +349,7 @@ xfs_trim_perag_extents(
 	do {
 		struct xfs_busy_extents	*extents;

-		extents = kzalloc(sizeof(*extents), GFP_KERNEL);
+		extents = kzalloc_obj(*extents, GFP_KERNEL);
 		if (!extents) {
 			error = -ENOMEM;
 			break;
@@ -537,7 +537,7 @@ xfs_trim_gather_rtextent(
 		return 0;
 	}

-	busyp = kzalloc(sizeof(struct xfs_rtx_busy), GFP_KERNEL);
+	busyp = kzalloc_obj(struct xfs_rtx_busy, GFP_KERNEL);
 	if (!busyp)
 		return -ENOMEM;

@@ -689,7 +689,7 @@ xfs_trim_rtgroup_extents(
 	 * trims the extents returned.
 	 */
 	do {
-		tr.extents = kzalloc(sizeof(*tr.extents), GFP_KERNEL);
+		tr.extents = kzalloc_obj(*tr.extents, GFP_KERNEL);
 		if (!tr.extents) {
 			error = -ENOMEM;
 			break;
diff --git a/fs/xfs/xfs_extent_busy.c b/fs/xfs/xfs_extent_busy.c
index cfecb2959472..a5f02cac9d31 100644
--- a/fs/xfs/xfs_extent_busy.c
+++ b/fs/xfs/xfs_extent_busy.c
@@ -41,8 +41,7 @@ xfs_extent_busy_insert_list(
 	struct rb_node		**rbp;
 	struct rb_node		*parent = NULL;

-	new = kzalloc(sizeof(struct xfs_extent_busy),
-			GFP_KERNEL | __GFP_NOFAIL);
+	new = kzalloc_obj(struct xfs_extent_busy, GFP_KERNEL | __GFP_NOFAIL);
 	new->group = xfs_group_hold(xg);
 	new->bno = bno;
 	new->length = len;
@@ -718,7 +717,7 @@ xfs_extent_busy_alloc(void)
 {
 	struct xfs_extent_busy_tree *eb;

-	eb = kzalloc(sizeof(*eb), GFP_KERNEL);
+	eb = kzalloc_obj(*eb, GFP_KERNEL);
 	if (!eb)
 		return NULL;
 	spin_lock_init(&eb->eb_lock);
diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c
index 44e1b14069a3..32e641d76e92 100644
--- a/fs/xfs/xfs_filestream.c
+++ b/fs/xfs/xfs_filestream.c
@@ -308,7 +308,7 @@ xfs_filestream_create_association(
 	 * error for this failure - as long as we return a referenced AG, the
 	 * allocation can still go ahead just fine.
 	 */
-	item = kmalloc(sizeof(*item), GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	item = kmalloc_obj(*item, GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!item)
 		goto out_put_fstrms;

diff --git a/fs/xfs/xfs_fsmap.c b/fs/xfs/xfs_fsmap.c
index 098c2b50bc6f..3724e64898f3 100644
--- a/fs/xfs/xfs_fsmap.c
+++ b/fs/xfs/xfs_fsmap.c
@@ -1326,11 +1326,11 @@ xfs_ioc_getfsmap(
 	 */
 	count = min_t(unsigned int, head.fmh_count,
 			131072 / sizeof(struct fsmap));
-	recs = kvcalloc(count, sizeof(struct fsmap), GFP_KERNEL);
+	recs = kvzalloc_objs(struct fsmap, count, GFP_KERNEL);
 	if (!recs) {
 		count = min_t(unsigned int, head.fmh_count,
 				PAGE_SIZE / sizeof(struct fsmap));
-		recs = kvcalloc(count, sizeof(struct fsmap), GFP_KERNEL);
+		recs = kvzalloc_objs(struct fsmap, count, GFP_KERNEL);
 		if (!recs)
 			return -ENOMEM;
 	}
diff --git a/fs/xfs/xfs_healthmon.c b/fs/xfs/xfs_healthmon.c
index ca7352dcd182..757a4213b2d0 100644
--- a/fs/xfs/xfs_healthmon.c
+++ b/fs/xfs/xfs_healthmon.c
@@ -1187,7 +1187,7 @@ xfs_ioc_health_monitor(
 	if (!xfs_healthmon_validate(&hmo))
 		return -EINVAL;

-	hm = kzalloc(sizeof(*hm), GFP_KERNEL);
+	hm = kzalloc_obj(*hm, GFP_KERNEL);
 	if (!hm)
 		return -ENOMEM;
 	hm->dev = mp->m_super->s_dev;
@@ -1200,7 +1200,7 @@ xfs_ioc_health_monitor(
 		hm->verbose = true;

 	/* Queue up the first event that lets the client know we're running. */
-	running_event = kzalloc(sizeof(struct xfs_healthmon_event), GFP_NOFS);
+	running_event = kzalloc_obj(struct xfs_healthmon_event, GFP_NOFS);
 	if (!running_event) {
 		ret = -ENOMEM;
 		goto out_hm;
@@ -1214,8 +1214,7 @@ xfs_ioc_health_monitor(
 	 * filesystem later.  This is key for triggering fast exit of the
 	 * xfs_healer daemon.
 	 */
-	hm->unmount_event = kzalloc(sizeof(struct xfs_healthmon_event),
-			GFP_NOFS);
+	hm->unmount_event = kzalloc_obj(struct xfs_healthmon_event, GFP_NOFS);
 	if (!hm->unmount_event) {
 		ret = -ENOMEM;
 		goto out_hm;
diff --git a/fs/xfs/xfs_inode_item_recover.c b/fs/xfs/xfs_inode_item_recover.c
index 5d93228783eb..b42106c4a9ef 100644
--- a/fs/xfs/xfs_inode_item_recover.c
+++ b/fs/xfs/xfs_inode_item_recover.c
@@ -329,8 +329,8 @@ xlog_recover_inode_commit_pass2(
 	if (item->ri_buf[0].iov_len == sizeof(struct xfs_inode_log_format)) {
 		in_f = item->ri_buf[0].iov_base;
 	} else {
-		in_f = kmalloc(sizeof(struct xfs_inode_log_format),
-				GFP_KERNEL | __GFP_NOFAIL);
+		in_f = kmalloc_obj(struct xfs_inode_log_format,
+				   GFP_KERNEL | __GFP_NOFAIL);
 		need_free = 1;
 		error = xfs_inode_item_format_convert(&item->ri_buf[0], in_f);
 		if (error)
diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
index 4eeda4d4e3ab..1074e36fa240 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -896,7 +896,7 @@ xfs_ioc_getbmap(
 	if (bmx.bmv_count >= INT_MAX / recsize)
 		return -ENOMEM;

-	buf = kvcalloc(bmx.bmv_count, sizeof(*buf), GFP_KERNEL);
+	buf = kvzalloc_objs(*buf, bmx.bmv_count, GFP_KERNEL);
 	if (!buf)
 		return -ENOMEM;

diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c
index 9faff287f747..97f106d2b4cd 100644
--- a/fs/xfs/xfs_itable.c
+++ b/fs/xfs/xfs_itable.c
@@ -230,8 +230,8 @@ xfs_bulkstat_one(

 	ASSERT(breq->icount == 1);

-	bc.buf = kzalloc(sizeof(struct xfs_bulkstat),
-			GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	bc.buf = kzalloc_obj(struct xfs_bulkstat,
+			     GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!bc.buf)
 		return -ENOMEM;

@@ -317,8 +317,8 @@ xfs_bulkstat(
 	if (xfs_bulkstat_already_done(breq->mp, breq->startino))
 		return 0;

-	bc.buf = kzalloc(sizeof(struct xfs_bulkstat),
-			GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	bc.buf = kzalloc_obj(struct xfs_bulkstat,
+			     GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!bc.buf)
 		return -ENOMEM;

diff --git a/fs/xfs/xfs_iwalk.c b/fs/xfs/xfs_iwalk.c
index ed4033006868..96a4cb3360bc 100644
--- a/fs/xfs/xfs_iwalk.c
+++ b/fs/xfs/xfs_iwalk.c
@@ -659,8 +659,8 @@ xfs_iwalk_threaded(
 		if (xfs_pwork_ctl_want_abort(&pctl))
 			break;

-		iwag = kzalloc(sizeof(struct xfs_iwalk_ag),
-				GFP_KERNEL | __GFP_NOFAIL);
+		iwag = kzalloc_obj(struct xfs_iwalk_ag,
+				   GFP_KERNEL | __GFP_NOFAIL);
 		iwag->mp = mp;

 		/*
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
index a26378ca247d..b96f262ba139 100644
--- a/fs/xfs/xfs_log.c
+++ b/fs/xfs/xfs_log.c
@@ -1334,7 +1334,7 @@ xlog_alloc_log(
 	int			error = -ENOMEM;
 	uint			log2_size = 0;

-	log = kzalloc(sizeof(struct xlog), GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	log = kzalloc_obj(struct xlog, GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!log) {
 		xfs_warn(mp, "Log allocation failed: No memory!");
 		goto out;
diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
index 566976b8fef3..edc368938f30 100644
--- a/fs/xfs/xfs_log_cil.c
+++ b/fs/xfs/xfs_log_cil.c
@@ -100,7 +100,7 @@ xlog_cil_ctx_alloc(void)
 {
 	struct xfs_cil_ctx	*ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL | __GFP_NOFAIL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL | __GFP_NOFAIL);
 	INIT_LIST_HEAD(&ctx->committing);
 	INIT_LIST_HEAD(&ctx->busy_extents.extent_list);
 	INIT_LIST_HEAD(&ctx->log_items);
@@ -2006,7 +2006,7 @@ xlog_cil_init(
 	struct xlog_cil_pcp	*cilpcp;
 	int			cpu;

-	cil = kzalloc(sizeof(*cil), GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	cil = kzalloc_obj(*cil, GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!cil)
 		return -ENOMEM;
 	/*
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index 935905743f94..09e6678ca487 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -2092,8 +2092,7 @@ xlog_recover_add_item(
 {
 	struct xlog_recover_item *item;

-	item = kzalloc(sizeof(struct xlog_recover_item),
-			GFP_KERNEL | __GFP_NOFAIL);
+	item = kzalloc_obj(struct xlog_recover_item, GFP_KERNEL | __GFP_NOFAIL);
 	INIT_LIST_HEAD(&item->ri_list);
 	list_add_tail(&item->ri_list, head);
 }
@@ -2223,8 +2222,8 @@ xlog_recover_add_to_trans(
 		}

 		item->ri_total = in_f->ilf_size;
-		item->ri_buf = kcalloc(item->ri_total, sizeof(*item->ri_buf),
-				GFP_KERNEL | __GFP_NOFAIL);
+		item->ri_buf = kzalloc_objs(*item->ri_buf, item->ri_total,
+					    GFP_KERNEL | __GFP_NOFAIL);
 	}

 	if (item->ri_total <= item->ri_cnt) {
@@ -2367,7 +2366,7 @@ xlog_recover_ophdr_to_trans(
 	 * This is a new transaction so allocate a new recovery container to
 	 * hold the recovery ops that will follow.
 	 */
-	trans = kzalloc(sizeof(struct xlog_recover), GFP_KERNEL | __GFP_NOFAIL);
+	trans = kzalloc_obj(struct xlog_recover, GFP_KERNEL | __GFP_NOFAIL);
 	trans->r_log_tid = tid;
 	trans->r_lsn = be64_to_cpu(rhead->h_lsn);
 	INIT_LIST_HEAD(&trans->r_itemq);
diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c
index 4e417747688f..d61ec8cb126d 100644
--- a/fs/xfs/xfs_mru_cache.c
+++ b/fs/xfs/xfs_mru_cache.c
@@ -333,7 +333,7 @@ xfs_mru_cache_create(
 	if (!(grp_time = msecs_to_jiffies(lifetime_ms) / grp_count))
 		return -EINVAL;

-	mru = kzalloc(sizeof(*mru), GFP_KERNEL | __GFP_NOFAIL);
+	mru = kzalloc_obj(*mru, GFP_KERNEL | __GFP_NOFAIL);
 	if (!mru)
 		return -ENOMEM;

diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
index a3e7d4a107d4..7bd15d9e7fba 100644
--- a/fs/xfs/xfs_qm.c
+++ b/fs/xfs/xfs_qm.c
@@ -771,8 +771,8 @@ xfs_qm_init_quotainfo(

 	ASSERT(XFS_IS_QUOTA_ON(mp));

-	qinf = mp->m_quotainfo = kzalloc(sizeof(struct xfs_quotainfo),
-					GFP_KERNEL | __GFP_NOFAIL);
+	qinf = mp->m_quotainfo = kzalloc_obj(struct xfs_quotainfo,
+					     GFP_KERNEL | __GFP_NOFAIL);

 	error = list_lru_init(&qinf->qi_lru);
 	if (error)
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 8586f044a14b..0ce953b45852 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -2235,12 +2235,12 @@ xfs_init_fs_context(
 	struct xfs_mount	*mp;
 	int			i;

-	mp = kzalloc(sizeof(struct xfs_mount), GFP_KERNEL);
+	mp = kzalloc_obj(struct xfs_mount, GFP_KERNEL);
 	if (!mp)
 		return -ENOMEM;
 #ifdef DEBUG
-	mp->m_errortag = kcalloc(XFS_ERRTAG_MAX, sizeof(*mp->m_errortag),
-			GFP_KERNEL);
+	mp->m_errortag = kzalloc_objs(*mp->m_errortag, XFS_ERRTAG_MAX,
+				      GFP_KERNEL);
 	if (!mp->m_errortag) {
 		kfree(mp);
 		return -ENOMEM;
diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c
index 363d7f88c2c6..923729af4206 100644
--- a/fs/xfs/xfs_trans_ail.c
+++ b/fs/xfs/xfs_trans_ail.c
@@ -922,8 +922,7 @@ xfs_trans_ail_init(
 {
 	struct xfs_ail	*ailp;

-	ailp = kzalloc(sizeof(struct xfs_ail),
-			GFP_KERNEL | __GFP_RETRY_MAYFAIL);
+	ailp = kzalloc_obj(struct xfs_ail, GFP_KERNEL | __GFP_RETRY_MAYFAIL);
 	if (!ailp)
 		return -ENOMEM;

diff --git a/fs/xfs/xfs_zone_alloc.c b/fs/xfs/xfs_zone_alloc.c
index b60952565737..5d45d88f1f03 100644
--- a/fs/xfs/xfs_zone_alloc.c
+++ b/fs/xfs/xfs_zone_alloc.c
@@ -417,7 +417,7 @@ xfs_init_open_zone(
 {
 	struct xfs_open_zone	*oz;

-	oz = kzalloc(sizeof(*oz), GFP_NOFS | __GFP_NOFAIL);
+	oz = kzalloc_obj(*oz, GFP_NOFS | __GFP_NOFAIL);
 	spin_lock_init(&oz->oz_alloc_lock);
 	atomic_set(&oz->oz_ref, 1);
 	oz->oz_rtg = rtg;
@@ -1196,7 +1196,7 @@ xfs_alloc_zone_info(
 	struct xfs_zone_info	*zi;
 	int			i;

-	zi = kzalloc(sizeof(*zi), GFP_KERNEL);
+	zi = kzalloc_obj(*zi, GFP_KERNEL);
 	if (!zi)
 		return NULL;
 	INIT_LIST_HEAD(&zi->zi_open_zones);
diff --git a/fs/xfs/xfs_zone_gc.c b/fs/xfs/xfs_zone_gc.c
index 1f1f9fc973af..b8b9c72e955a 100644
--- a/fs/xfs/xfs_zone_gc.c
+++ b/fs/xfs/xfs_zone_gc.c
@@ -199,11 +199,11 @@ xfs_zone_gc_data_alloc(
 	struct xfs_zone_gc_data	*data;
 	int			i;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return NULL;
-	data->iter.recs = kcalloc(XFS_ZONE_GC_RECS, sizeof(*data->iter.recs),
-			GFP_KERNEL);
+	data->iter.recs = kzalloc_objs(*data->iter.recs, XFS_ZONE_GC_RECS,
+				       GFP_KERNEL);
 	if (!data->iter.recs)
 		goto out_free_data;

diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
index 086a31269198..28be57db6e4b 100644
--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -903,8 +903,8 @@ static int zonefs_get_zone_info(struct zonefs_zone_data *zd)
 	struct block_device *bdev = zd->sb->s_bdev;
 	int ret;

-	zd->zones = kvcalloc(bdev_nr_zones(bdev), sizeof(struct blk_zone),
-			     GFP_KERNEL);
+	zd->zones = kvzalloc_objs(struct blk_zone, bdev_nr_zones(bdev),
+				  GFP_KERNEL);
 	if (!zd->zones)
 		return -ENOMEM;

@@ -948,8 +948,8 @@ static int zonefs_init_zgroup(struct super_block *sb,
 	if (!zgroup->g_nr_zones)
 		return 0;

-	zgroup->g_zones = kvcalloc(zgroup->g_nr_zones,
-				   sizeof(struct zonefs_zone), GFP_KERNEL);
+	zgroup->g_zones = kvzalloc_objs(struct zonefs_zone, zgroup->g_nr_zones,
+					GFP_KERNEL);
 	if (!zgroup->g_zones)
 		return -ENOMEM;

@@ -1243,7 +1243,7 @@ static int zonefs_fill_super(struct super_block *sb, struct fs_context *fc)
 	 * ZONEFS_F_AGGRCNV which increases the maximum file size of a file
 	 * beyond the zone size is taken into account.
 	 */
-	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
+	sbi = kzalloc_obj(*sbi, GFP_KERNEL);
 	if (!sbi)
 		return -ENOMEM;

@@ -1388,7 +1388,7 @@ static int zonefs_init_fs_context(struct fs_context *fc)
 {
 	struct zonefs_context *ctx;

-	ctx = kzalloc(sizeof(struct zonefs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct zonefs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx->s_mount_opts = ZONEFS_MNTOPT_ERRORS_RO;
diff --git a/include/kunit/resource.h b/include/kunit/resource.h
index 4ad69a2642a5..c330ed3e751c 100644
--- a/include/kunit/resource.h
+++ b/include/kunit/resource.h
@@ -243,7 +243,7 @@ kunit_alloc_and_get_resource(struct kunit *test,
 	struct kunit_resource *res;
 	int ret;

-	res = kzalloc(sizeof(*res), internal_gfp);
+	res = kzalloc_obj(*res, internal_gfp);
 	if (!res)
 		return NULL;

@@ -285,7 +285,7 @@ static inline void *kunit_alloc_resource(struct kunit *test,
 {
 	struct kunit_resource *res;

-	res = kzalloc(sizeof(*res), internal_gfp);
+	res = kzalloc_obj(*res, internal_gfp);
 	if (!res)
 		return NULL;

diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 3a412dcebc29..8b1d8993793d 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -66,7 +66,7 @@ static inline struct fwnode_handle *acpi_alloc_fwnode_static(void)
 {
 	struct fwnode_handle *fwnode;

-	fwnode = kzalloc(sizeof(struct fwnode_handle), GFP_KERNEL);
+	fwnode = kzalloc_obj(struct fwnode_handle, GFP_KERNEL);
 	if (!fwnode)
 		return NULL;

diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index cd9b96434904..b78b53198a2e 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -2299,7 +2299,7 @@ static inline bool bpf_map_flags_access_ok(u32 access_flags)

 static inline struct bpf_map_owner *bpf_map_owner_alloc(struct bpf_map *map)
 {
-	return kzalloc(sizeof(*map->owner), GFP_ATOMIC);
+	return kzalloc_obj(*map->owner, GFP_ATOMIC);
 }

 static inline void bpf_map_owner_free(struct bpf_map *map)
diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h
index dd6fc3b2133b..2cb211617ecc 100644
--- a/include/linux/crash_dump.h
+++ b/include/linux/crash_dump.h
@@ -136,7 +136,7 @@ struct vmcore_range {
 static inline int vmcore_alloc_add_range(struct list_head *list,
 		unsigned long long paddr, unsigned long long size)
 {
-	struct vmcore_range *m = kzalloc(sizeof(*m), GFP_KERNEL);
+	struct vmcore_range *m = kzalloc_obj(*m, GFP_KERNEL);

 	if (!m)
 		return -ENOMEM;
diff --git a/include/linux/dma-fence-chain.h b/include/linux/dma-fence-chain.h
index 68c3c1e41014..3267ab0e8c54 100644
--- a/include/linux/dma-fence-chain.h
+++ b/include/linux/dma-fence-chain.h
@@ -91,7 +91,7 @@ dma_fence_chain_contained(struct dma_fence *fence)
  * intentional to enforce typesafety.
  */
 #define dma_fence_chain_alloc()	\
-		((struct dma_fence_chain *)kmalloc(sizeof(struct dma_fence_chain), GFP_KERNEL))
+		((struct dma_fence_chain *) kmalloc_obj(struct dma_fence_chain, GFP_KERNEL))

 /**
  * dma_fence_chain_free
diff --git a/include/linux/gameport.h b/include/linux/gameport.h
index 86d62fdafd7a..09a1a59034e0 100644
--- a/include/linux/gameport.h
+++ b/include/linux/gameport.h
@@ -97,7 +97,7 @@ void gameport_set_phys(struct gameport *gameport, const char *fmt, ...)

 static inline struct gameport *gameport_allocate_port(void)
 {
-	struct gameport *gameport = kzalloc(sizeof(struct gameport), GFP_KERNEL);
+	struct gameport *gameport = kzalloc_obj(struct gameport, GFP_KERNEL);

 	return gameport;
 }
diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h
index c16353cc6e3c..ff9012c6a93a 100644
--- a/include/linux/io-mapping.h
+++ b/include/linux/io-mapping.h
@@ -206,7 +206,7 @@ io_mapping_create_wc(resource_size_t base,
 {
 	struct io_mapping *iomap;

-	iomap = kmalloc(sizeof(*iomap), GFP_KERNEL);
+	iomap = kmalloc_obj(*iomap, GFP_KERNEL);
 	if (!iomap)
 		return NULL;

diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index d42a95cbcfbc..dde605cb894e 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -1664,7 +1664,7 @@ void kvm_arch_create_vm_debugfs(struct kvm *kvm);
  */
 static inline struct kvm *kvm_arch_alloc_vm(void)
 {
-	return kzalloc(sizeof(struct kvm), GFP_KERNEL_ACCOUNT);
+	return kzalloc_obj(struct kvm, GFP_KERNEL_ACCOUNT);
 }
 #endif

diff --git a/include/linux/skmsg.h b/include/linux/skmsg.h
index 829b281d6c9c..a8513e401760 100644
--- a/include/linux/skmsg.h
+++ b/include/linux/skmsg.h
@@ -460,8 +460,7 @@ int sk_psock_msg_verdict(struct sock *sk, struct sk_psock *psock,
  * intentional to enforce typesafety.
  */
 #define sk_psock_init_link()	\
-		((struct sk_psock_link *)kzalloc(sizeof(struct sk_psock_link),	\
-						 GFP_ATOMIC | __GFP_NOWARN))
+		((struct sk_psock_link *) kzalloc_obj(struct sk_psock_link, GFP_ATOMIC | __GFP_NOWARN))

 static inline void sk_psock_free_link(struct sk_psock_link *link)
 {
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index fd8dce4169f7..af7cfee7b8f6 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -1309,7 +1309,7 @@ static inline struct spi_message *spi_message_alloc(unsigned ntrans, gfp_t flags
 	} *mwt;
 	unsigned i;

-	mwt = kzalloc(struct_size(mwt, t, ntrans), flags);
+	mwt = kzalloc_flex(*mwt, t, ntrans, flags);
 	if (!mwt)
 		return NULL;

diff --git a/include/net/act_api.h b/include/net/act_api.h
index 91a24b5e0b93..453d6e18851b 100644
--- a/include/net/act_api.h
+++ b/include/net/act_api.h
@@ -159,7 +159,7 @@ int tc_action_net_init(struct net *net, struct tc_action_net *tn,
 {
 	int err = 0;

-	tn->idrinfo = kmalloc(sizeof(*tn->idrinfo), GFP_KERNEL);
+	tn->idrinfo = kmalloc_obj(*tn->idrinfo, GFP_KERNEL);
 	if (!tn->idrinfo)
 		return -ENOMEM;
 	tn->ops = ops;
diff --git a/include/net/fq_impl.h b/include/net/fq_impl.h
index 9467e33dfb36..171ee6f7aa83 100644
--- a/include/net/fq_impl.h
+++ b/include/net/fq_impl.h
@@ -358,7 +358,7 @@ static int fq_init(struct fq *fq, int flows_cnt)
 	fq->limit = 8192;
 	fq->memory_limit = 16 << 20; /* 16 MBytes */

-	fq->flows = kvcalloc(fq->flows_cnt, sizeof(fq->flows[0]), GFP_KERNEL);
+	fq->flows = kvzalloc_objs(fq->flows[0], fq->flows_cnt, GFP_KERNEL);
 	if (!fq->flows)
 		return -ENOMEM;

diff --git a/include/net/iucv/iucv.h b/include/net/iucv/iucv.h
index 5606ed6e7084..18f511da9a09 100644
--- a/include/net/iucv/iucv.h
+++ b/include/net/iucv/iucv.h
@@ -211,7 +211,7 @@ static inline struct iucv_path *iucv_path_alloc(u16 msglim, u8 flags, gfp_t gfp)
 {
 	struct iucv_path *path;

-	path = kzalloc(sizeof(struct iucv_path), gfp);
+	path = kzalloc_obj(struct iucv_path, gfp);
 	if (path) {
 		path->msglim = msglim;
 		path->flags = flags;
diff --git a/include/net/tc_act/tc_gate.h b/include/net/tc_act/tc_gate.h
index c1a67149c6b6..b147a3bb1a46 100644
--- a/include/net/tc_act/tc_gate.h
+++ b/include/net/tc_act/tc_gate.h
@@ -114,7 +114,7 @@ static inline struct action_gate_entry
 	if (i != num_entries)
 		return NULL;

-	oe = kcalloc(num_entries, sizeof(*oe), GFP_ATOMIC);
+	oe = kzalloc_objs(*oe, num_entries, GFP_ATOMIC);
 	if (!oe)
 		return NULL;

diff --git a/include/net/udp.h b/include/net/udp.h
index 700dbedcb15f..24491111477a 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -294,8 +294,8 @@ static inline int udp_lib_init_sock(struct sock *sk)
 	up->forward_threshold = sk->sk_rcvbuf >> 2;
 	set_bit(SOCK_CUSTOM_SOCKOPT, &sk->sk_socket->flags);

-	up->udp_prod_queue = kcalloc(nr_node_ids, sizeof(*up->udp_prod_queue),
-				     GFP_KERNEL);
+	up->udp_prod_queue = kzalloc_objs(*up->udp_prod_queue, nr_node_ids,
+					  GFP_KERNEL);
 	if (!up->udp_prod_queue)
 		return -ENOMEM;
 	for (int i = 0; i < nr_node_ids; i++)
diff --git a/init/initramfs.c b/init/initramfs.c
index 6ddbfb17fb8f..3d89e31e0d8a 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -102,7 +102,7 @@ static char __init *find_link(int major, int minor, int ino,
 			continue;
 		return (*p)->name;
 	}
-	q = kmalloc(sizeof(struct hash), GFP_KERNEL);
+	q = kmalloc_obj(struct hash, GFP_KERNEL);
 	if (!q)
 		panic_show_mem("can't allocate link hash entry");
 	q->major = major;
@@ -153,7 +153,7 @@ static void __init dir_add(const char *name, size_t nlen, time64_t mtime)
 {
 	struct dir_entry *de;

-	de = kmalloc(struct_size(de, name, nlen), GFP_KERNEL);
+	de = kmalloc_flex(*de, name, nlen, GFP_KERNEL);
 	if (!de)
 		panic_show_mem("can't allocate dir_entry buffer");
 	INIT_LIST_HEAD(&de->list);
@@ -517,7 +517,7 @@ char * __init unpack_to_rootfs(char *buf, unsigned long len)
 		char header[CPIO_HDRLEN];
 		char symlink[PATH_MAX + N_ALIGN(PATH_MAX) + 1];
 		char name[N_ALIGN(PATH_MAX)];
-	} *bufs = kmalloc(sizeof(*bufs), GFP_KERNEL);
+	} *bufs = kmalloc_obj(*bufs, GFP_KERNEL);

 	if (!bufs)
 		panic_show_mem("can't allocate buffers");
diff --git a/init/initramfs_test.c b/init/initramfs_test.c
index beb6e3cf7808..1e75faec678b 100644
--- a/init/initramfs_test.c
+++ b/init/initramfs_test.c
@@ -403,7 +403,7 @@ static void __init initramfs_test_fname_pad(struct kunit *test)
 	struct test_fname_pad {
 		char padded_fname[4096 - CPIO_HDRLEN];
 		char cpio_srcbuf[CPIO_HDRLEN + PATH_MAX + 3 + sizeof(fdata)];
-	} *tbufs = kzalloc(sizeof(struct test_fname_pad), GFP_KERNEL);
+	} *tbufs = kzalloc_obj(struct test_fname_pad, GFP_KERNEL);
 	struct initramfs_test_cpio c[] = { {
 		.magic = "070701",
 		.ino = 1,
@@ -457,7 +457,7 @@ static void __init initramfs_test_fname_path_max(struct kunit *test)
 		char fname_oversize[PATH_MAX + 1];
 		char fname_ok[PATH_MAX];
 		char cpio_src[(CPIO_HDRLEN + PATH_MAX + 3 + sizeof(fdata)) * 2];
-	} *tbufs = kzalloc(sizeof(struct test_fname_path_max), GFP_KERNEL);
+	} *tbufs = kzalloc_obj(struct test_fname_path_max, GFP_KERNEL);
 	struct initramfs_test_cpio c[] = { {
 		.magic = "070701",
 		.ino = 1,
diff --git a/io_uring/bpf_filter.c b/io_uring/bpf_filter.c
index 28a23e92ee81..6a98750e38b0 100644
--- a/io_uring/bpf_filter.c
+++ b/io_uring/bpf_filter.c
@@ -152,13 +152,12 @@ static struct io_bpf_filters *io_new_bpf_filters(void)
 {
 	struct io_bpf_filters *filters __free(kfree) = NULL;

-	filters = kzalloc(sizeof(*filters), GFP_KERNEL_ACCOUNT);
+	filters = kzalloc_obj(*filters, GFP_KERNEL_ACCOUNT);
 	if (!filters)
 		return ERR_PTR(-ENOMEM);

-	filters->filters = kcalloc(IORING_OP_LAST,
-				   sizeof(struct io_bpf_filter *),
-				   GFP_KERNEL_ACCOUNT);
+	filters->filters = kzalloc_objs(struct io_bpf_filter *, IORING_OP_LAST,
+					GFP_KERNEL_ACCOUNT);
 	if (!filters->filters)
 		return ERR_PTR(-ENOMEM);

@@ -402,7 +401,7 @@ int io_register_bpf_filter(struct io_restriction *res,
 		old_filters = res->bpf_filters;
 	}

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL_ACCOUNT);
+	filter = kzalloc_obj(*filter, GFP_KERNEL_ACCOUNT);
 	if (!filter) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/io_uring/eventfd.c b/io_uring/eventfd.c
index 78f8ab7db104..0120ecd97321 100644
--- a/io_uring/eventfd.c
+++ b/io_uring/eventfd.c
@@ -127,7 +127,7 @@ int io_eventfd_register(struct io_ring_ctx *ctx, void __user *arg,
 	if (copy_from_user(&fd, fds, sizeof(*fds)))
 		return -EFAULT;

-	ev_fd = kmalloc(sizeof(*ev_fd), GFP_KERNEL);
+	ev_fd = kmalloc_obj(*ev_fd, GFP_KERNEL);
 	if (!ev_fd)
 		return -ENOMEM;

diff --git a/io_uring/futex.c b/io_uring/futex.c
index 1dabcfd503b8..fd503c24b428 100644
--- a/io_uring/futex.c
+++ b/io_uring/futex.c
@@ -185,8 +185,8 @@ int io_futexv_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 	if (!iof->futex_nr || iof->futex_nr > FUTEX_WAITV_MAX)
 		return -EINVAL;

-	ifd = kzalloc(struct_size_t(struct io_futexv_data, futexv, iof->futex_nr),
-			GFP_KERNEL_ACCOUNT);
+	ifd = kzalloc_flex(struct io_futexv_data, futexv, iof->futex_nr,
+			   GFP_KERNEL_ACCOUNT);
 	if (!ifd)
 		return -ENOMEM;

diff --git a/io_uring/io-wq.c b/io_uring/io-wq.c
index 7ed04911f7b9..2d04ff565920 100644
--- a/io_uring/io-wq.c
+++ b/io_uring/io-wq.c
@@ -897,7 +897,7 @@ static bool create_io_worker(struct io_wq *wq, struct io_wq_acct *acct)

 	__set_current_state(TASK_RUNNING);

-	worker = kzalloc(sizeof(*worker), GFP_KERNEL);
+	worker = kzalloc_obj(*worker, GFP_KERNEL);
 	if (!worker) {
 fail:
 		atomic_dec(&acct->nr_running);
@@ -1255,7 +1255,7 @@ struct io_wq *io_wq_create(unsigned bounded, struct io_wq_data *data)
 	if (WARN_ON_ONCE(!bounded))
 		return ERR_PTR(-EINVAL);

-	wq = kzalloc(sizeof(struct io_wq), GFP_KERNEL);
+	wq = kzalloc_obj(struct io_wq, GFP_KERNEL);
 	if (!wq)
 		return ERR_PTR(-ENOMEM);

diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c
index ccab8562d273..3c64c458a281 100644
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -195,8 +195,8 @@ static int io_alloc_hash_table(struct io_hash_table *table, unsigned bits)

 	do {
 		hash_buckets = 1U << bits;
-		table->hbs = kvmalloc_array(hash_buckets, sizeof(table->hbs[0]),
-						GFP_KERNEL_ACCOUNT);
+		table->hbs = kvmalloc_objs(table->hbs[0], hash_buckets,
+					   GFP_KERNEL_ACCOUNT);
 		if (table->hbs)
 			break;
 		if (bits == 1)
@@ -226,7 +226,7 @@ static __cold struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p)
 	int hash_bits;
 	bool ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

@@ -1330,7 +1330,7 @@ static __cold void io_drain_req(struct io_kiocb *req)
 	bool drain = req->flags & IOSQE_IO_DRAIN;
 	struct io_defer_entry *de;

-	de = kmalloc(sizeof(*de), GFP_KERNEL_ACCOUNT);
+	de = kmalloc_obj(*de, GFP_KERNEL_ACCOUNT);
 	if (!de) {
 		io_req_defer_failed(req, -ENOMEM);
 		return;
diff --git a/io_uring/kbuf.c b/io_uring/kbuf.c
index 67d4fe576473..dcfa4d558f72 100644
--- a/io_uring/kbuf.c
+++ b/io_uring/kbuf.c
@@ -265,7 +265,7 @@ static int io_ring_buffers_peek(struct io_kiocb *req, struct buf_sel_arg *arg,
 	 * a speculative peek operation.
 	 */
 	if (arg->mode & KBUF_MODE_EXPAND && nr_avail > nr_iovs && arg->max_len) {
-		iov = kmalloc_array(nr_avail, sizeof(struct iovec), GFP_KERNEL);
+		iov = kmalloc_objs(struct iovec, nr_avail, GFP_KERNEL);
 		if (unlikely(!iov))
 			return -ENOMEM;
 		if (arg->mode & KBUF_MODE_FREE)
@@ -532,7 +532,7 @@ static int io_add_buffers(struct io_ring_ctx *ctx, struct io_provide_buf *pbuf,
 			ret = -EOVERFLOW;
 			break;
 		}
-		buf = kmalloc(sizeof(*buf), GFP_KERNEL_ACCOUNT);
+		buf = kmalloc_obj(*buf, GFP_KERNEL_ACCOUNT);
 		if (!buf)
 			break;

@@ -559,7 +559,7 @@ static int __io_manage_buffers_legacy(struct io_kiocb *req,
 	if (!bl) {
 		if (req->opcode != IORING_OP_PROVIDE_BUFFERS)
 			return -ENOENT;
-		bl = kzalloc(sizeof(*bl), GFP_KERNEL_ACCOUNT);
+		bl = kzalloc_obj(*bl, GFP_KERNEL_ACCOUNT);
 		if (!bl)
 			return -ENOMEM;

@@ -628,7 +628,7 @@ int io_register_pbuf_ring(struct io_ring_ctx *ctx, void __user *arg)
 		io_destroy_bl(ctx, bl);
 	}

-	bl = kzalloc(sizeof(*bl), GFP_KERNEL_ACCOUNT);
+	bl = kzalloc_obj(*bl, GFP_KERNEL_ACCOUNT);
 	if (!bl)
 		return -ENOMEM;

diff --git a/io_uring/memmap.c b/io_uring/memmap.c
index 89f56609e50a..e6958968975a 100644
--- a/io_uring/memmap.c
+++ b/io_uring/memmap.c
@@ -56,7 +56,7 @@ struct page **io_pin_pages(unsigned long uaddr, unsigned long len, int *npages)
 	if (WARN_ON_ONCE(nr_pages > INT_MAX))
 		return ERR_PTR(-EOVERFLOW);

-	pages = kvmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL_ACCOUNT);
+	pages = kvmalloc_objs(struct page *, nr_pages, GFP_KERNEL_ACCOUNT);
 	if (!pages)
 		return ERR_PTR(-ENOMEM);

@@ -158,7 +158,7 @@ static int io_region_allocate_pages(struct io_mapped_region *mr,
 	unsigned long nr_allocated;
 	struct page **pages;

-	pages = kvmalloc_array(mr->nr_pages, sizeof(*pages), gfp);
+	pages = kvmalloc_objs(*pages, mr->nr_pages, gfp);
 	if (!pages)
 		return -ENOMEM;

diff --git a/io_uring/mock_file.c b/io_uring/mock_file.c
index 80c96ad2061f..221b60ad0723 100644
--- a/io_uring/mock_file.c
+++ b/io_uring/mock_file.c
@@ -115,7 +115,7 @@ static ssize_t io_mock_delay_rw(struct kiocb *iocb, size_t len)
 	struct io_mock_file *mf = iocb->ki_filp->private_data;
 	struct io_mock_iocb *mio;

-	mio = kzalloc(sizeof(*mio), GFP_KERNEL);
+	mio = kzalloc_obj(*mio, GFP_KERNEL);
 	if (!mio)
 		return -ENOMEM;

@@ -242,7 +242,7 @@ static int io_create_mock_file(struct io_uring_cmd *cmd, unsigned int issue_flag
 	if (mc.rw_delay_ns > NSEC_PER_SEC)
 		return -EINVAL;

-	mf = kzalloc(sizeof(*mf), GFP_KERNEL_ACCOUNT);
+	mf = kzalloc_obj(*mf, GFP_KERNEL_ACCOUNT);
 	if (!mf)
 		return -ENOMEM;

diff --git a/io_uring/poll.c b/io_uring/poll.c
index aac4b3b881fb..b671b84657d9 100644
--- a/io_uring/poll.c
+++ b/io_uring/poll.c
@@ -478,7 +478,7 @@ static void __io_queue_proc(struct io_poll *poll, struct io_poll_table *pt,
 			return;
 		}

-		poll = kmalloc(sizeof(*poll), GFP_ATOMIC);
+		poll = kmalloc_obj(*poll, GFP_ATOMIC);
 		if (!poll) {
 			pt->error = -ENOMEM;
 			return;
@@ -655,7 +655,7 @@ static struct async_poll *io_req_alloc_apoll(struct io_kiocb *req,
 		if (!(issue_flags & IO_URING_F_UNLOCKED))
 			apoll = io_cache_alloc(&ctx->apoll_cache, GFP_ATOMIC);
 		else
-			apoll = kmalloc(sizeof(*apoll), GFP_ATOMIC);
+			apoll = kmalloc_obj(*apoll, GFP_ATOMIC);
 		if (!apoll)
 			return NULL;
 		apoll->poll.retries = APOLL_MAX_RETRY;
diff --git a/io_uring/register.c b/io_uring/register.c
index 594b1f2ce875..6015a3e9ce69 100644
--- a/io_uring/register.c
+++ b/io_uring/register.c
@@ -218,7 +218,7 @@ static int io_register_restrictions_task(void __user *arg, unsigned int nr_args)
 	if (!mem_is_zero(tres.resv, sizeof(tres.resv)))
 		return -EINVAL;

-	res = kzalloc(sizeof(*res), GFP_KERNEL_ACCOUNT);
+	res = kzalloc_obj(*res, GFP_KERNEL_ACCOUNT);
 	if (!res)
 		return -ENOMEM;

@@ -250,7 +250,7 @@ static int io_register_bpf_filter_task(void __user *arg, unsigned int nr_args)
 	/* If no task restrictions exist, setup a new set */
 	res = current->io_uring_restrict;
 	if (!res) {
-		res = kzalloc(sizeof(*res), GFP_KERNEL_ACCOUNT);
+		res = kzalloc_obj(*res, GFP_KERNEL_ACCOUNT);
 		if (!res)
 			return -ENOMEM;
 	}
diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
index 842e231c8a7c..9b799e7ba889 100644
--- a/io_uring/rsrc.c
+++ b/io_uring/rsrc.c
@@ -113,8 +113,7 @@ static struct io_mapped_ubuf *io_alloc_imu(struct io_ring_ctx *ctx,
 {
 	if (nr_bvecs <= IO_CACHED_BVECS_SEGS)
 		return io_cache_alloc(&ctx->imu_cache, GFP_KERNEL);
-	return kvmalloc(struct_size_t(struct io_mapped_ubuf, bvec, nr_bvecs),
-			GFP_KERNEL);
+	return kvmalloc_flex(struct io_mapped_ubuf, bvec, nr_bvecs, GFP_KERNEL);
 }

 static void io_free_imu(struct io_ring_ctx *ctx, struct io_mapped_ubuf *imu)
@@ -200,8 +199,8 @@ __cold void io_rsrc_data_free(struct io_ring_ctx *ctx,

 __cold int io_rsrc_data_alloc(struct io_rsrc_data *data, unsigned nr)
 {
-	data->nodes = kvmalloc_array(nr, sizeof(struct io_rsrc_node *),
-					GFP_KERNEL_ACCOUNT | __GFP_ZERO);
+	data->nodes = kvmalloc_objs(struct io_rsrc_node *, nr,
+				    GFP_KERNEL_ACCOUNT | __GFP_ZERO);
 	if (data->nodes) {
 		data->nr = nr;
 		return 0;
@@ -684,7 +683,7 @@ static bool io_coalesce_buffer(struct page ***pages, int *nr_pages,
 	unsigned i, j;

 	/* Store head pages only*/
-	new_array = kvmalloc_array(nr_folios, sizeof(struct page *), GFP_KERNEL);
+	new_array = kvmalloc_objs(struct page *, nr_folios, GFP_KERNEL);
 	if (!new_array)
 		return false;

@@ -1310,7 +1309,7 @@ int io_vec_realloc(struct iou_vec *iv, unsigned nr_entries)
 	gfp_t gfp = GFP_KERNEL_ACCOUNT | __GFP_NOWARN;
 	struct iovec *iov;

-	iov = kmalloc_array(nr_entries, sizeof(iov[0]), gfp);
+	iov = kmalloc_objs(iov[0], nr_entries, gfp);
 	if (!iov)
 		return -ENOMEM;

diff --git a/io_uring/sqpoll.c b/io_uring/sqpoll.c
index becdfdd323a9..97e64d7d029f 100644
--- a/io_uring/sqpoll.c
+++ b/io_uring/sqpoll.c
@@ -153,7 +153,7 @@ static struct io_sq_data *io_get_sq_data(struct io_uring_params *p,
 			return sqd;
 	}

-	sqd = kzalloc(sizeof(*sqd), GFP_KERNEL);
+	sqd = kzalloc_obj(*sqd, GFP_KERNEL);
 	if (!sqd)
 		return ERR_PTR(-ENOMEM);

diff --git a/io_uring/tctx.c b/io_uring/tctx.c
index 270263699c6f..fa97bc7db6a3 100644
--- a/io_uring/tctx.c
+++ b/io_uring/tctx.c
@@ -23,7 +23,7 @@ static struct io_wq *io_init_wq_offload(struct io_ring_ctx *ctx,
 	mutex_lock(&ctx->uring_lock);
 	hash = ctx->hash_map;
 	if (!hash) {
-		hash = kzalloc(sizeof(*hash), GFP_KERNEL);
+		hash = kzalloc_obj(*hash, GFP_KERNEL);
 		if (!hash) {
 			mutex_unlock(&ctx->uring_lock);
 			return ERR_PTR(-ENOMEM);
@@ -80,7 +80,7 @@ __cold int io_uring_alloc_task_context(struct task_struct *task,
 	struct io_uring_task *tctx;
 	int ret;

-	tctx = kzalloc(sizeof(*tctx), GFP_KERNEL);
+	tctx = kzalloc_obj(*tctx, GFP_KERNEL);
 	if (unlikely(!tctx))
 		return -ENOMEM;

@@ -139,7 +139,7 @@ int __io_uring_add_tctx_node(struct io_ring_ctx *ctx)
 	if (tctx->io_wq)
 		io_wq_set_exit_on_idle(tctx->io_wq, false);
 	if (!xa_load(&tctx->xa, (unsigned long)ctx)) {
-		node = kmalloc(sizeof(*node), GFP_KERNEL);
+		node = kmalloc_obj(*node, GFP_KERNEL);
 		if (!node)
 			return -ENOMEM;
 		node->ctx = ctx;
@@ -378,7 +378,7 @@ int __io_uring_fork(struct task_struct *tsk)
 	/* Don't leave it dangling on error */
 	tsk->io_uring_restrict = NULL;

-	res = kzalloc(sizeof(*res), GFP_KERNEL_ACCOUNT);
+	res = kzalloc_obj(*res, GFP_KERNEL_ACCOUNT);
 	if (!res)
 		return -ENOMEM;

diff --git a/io_uring/xattr.c b/io_uring/xattr.c
index ba2b98cf13f9..28475bf8ed47 100644
--- a/io_uring/xattr.c
+++ b/io_uring/xattr.c
@@ -56,7 +56,7 @@ static int __io_getxattr_prep(struct io_kiocb *req,
 	if (ix->ctx.flags)
 		return -EINVAL;

-	ix->ctx.kname = kmalloc(sizeof(*ix->ctx.kname), GFP_KERNEL);
+	ix->ctx.kname = kmalloc_obj(*ix->ctx.kname, GFP_KERNEL);
 	if (!ix->ctx.kname)
 		return -ENOMEM;

@@ -133,7 +133,7 @@ static int __io_setxattr_prep(struct io_kiocb *req,
 	ix->ctx.size = READ_ONCE(sqe->len);
 	ix->ctx.flags = READ_ONCE(sqe->xattr_flags);

-	ix->ctx.kname = kmalloc(sizeof(*ix->ctx.kname), GFP_KERNEL);
+	ix->ctx.kname = kmalloc_obj(*ix->ctx.kname, GFP_KERNEL);
 	if (!ix->ctx.kname)
 		return -ENOMEM;

diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c
index 28150c6578e3..d1ecc55de5ee 100644
--- a/io_uring/zcrx.c
+++ b/io_uring/zcrx.c
@@ -448,7 +448,7 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
 	}

 	ret = -ENOMEM;
-	area = kzalloc(sizeof(*area), GFP_KERNEL);
+	area = kzalloc_obj(*area, GFP_KERNEL);
 	if (!area)
 		goto err;
 	area->ifq = ifq;
@@ -467,8 +467,8 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
 	area->nia.num_niovs = nr_iovs;

 	ret = -ENOMEM;
-	area->nia.niovs = kvmalloc_array(nr_iovs, sizeof(area->nia.niovs[0]),
-					 GFP_KERNEL_ACCOUNT | __GFP_ZERO);
+	area->nia.niovs = kvmalloc_objs(area->nia.niovs[0], nr_iovs,
+					GFP_KERNEL_ACCOUNT | __GFP_ZERO);
 	if (!area->nia.niovs)
 		goto err;

@@ -477,7 +477,7 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
 	if (!area->freelist)
 		goto err;

-	area->user_refs = kvmalloc_array(nr_iovs, sizeof(area->user_refs[0]),
+	area->user_refs = kvmalloc_objs(area->user_refs[0], nr_iovs,
 					GFP_KERNEL_ACCOUNT | __GFP_ZERO);
 	if (!area->user_refs)
 		goto err;
@@ -510,7 +510,7 @@ static struct io_zcrx_ifq *io_zcrx_ifq_alloc(struct io_ring_ctx *ctx)
 {
 	struct io_zcrx_ifq *ifq;

-	ifq = kzalloc(sizeof(*ifq), GFP_KERNEL);
+	ifq = kzalloc_obj(*ifq, GFP_KERNEL);
 	if (!ifq)
 		return NULL;

diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index bb7c9e5d2b90..a90aa6803f1b 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -210,7 +210,7 @@ static int msg_insert(struct msg_msg *msg, struct mqueue_inode_info *info)
 		leaf = info->node_cache;
 		info->node_cache = NULL;
 	} else {
-		leaf = kmalloc(sizeof(*leaf), GFP_ATOMIC);
+		leaf = kmalloc_obj(*leaf, GFP_ATOMIC);
 		if (!leaf)
 			return -ENOMEM;
 		INIT_LIST_HEAD(&leaf->msg_list);
@@ -449,7 +449,7 @@ static int mqueue_init_fs_context(struct fs_context *fc)
 {
 	struct mqueue_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct mqueue_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct mqueue_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -1088,7 +1088,7 @@ static int do_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr,
 	 * fall back to that if necessary.
 	 */
 	if (!info->node_cache)
-		new_leaf = kmalloc(sizeof(*new_leaf), GFP_KERNEL);
+		new_leaf = kmalloc_obj(*new_leaf, GFP_KERNEL);

 	spin_lock(&info->lock);

@@ -1181,7 +1181,7 @@ static int do_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
 	 * fall back to that if necessary.
 	 */
 	if (!info->node_cache)
-		new_leaf = kmalloc(sizeof(*new_leaf), GFP_KERNEL);
+		new_leaf = kmalloc_obj(*new_leaf, GFP_KERNEL);

 	spin_lock(&info->lock);

diff --git a/ipc/msg.c b/ipc/msg.c
index ee6af4fe52bf..62996b97f0ac 100644
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -148,7 +148,7 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params)
 	key_t key = params->key;
 	int msgflg = params->flg;

-	msq = kmalloc(sizeof(*msq), GFP_KERNEL_ACCOUNT);
+	msq = kmalloc_obj(*msq, GFP_KERNEL_ACCOUNT);
 	if (unlikely(!msq))
 		return -ENOMEM;

diff --git a/ipc/namespace.c b/ipc/namespace.c
index 535f16ea40e1..1e71353bdb4a 100644
--- a/ipc/namespace.c
+++ b/ipc/namespace.c
@@ -58,7 +58,7 @@ static struct ipc_namespace *create_ipc_ns(struct user_namespace *user_ns,
 	}

 	err = -ENOMEM;
-	ns = kzalloc(sizeof(struct ipc_namespace), GFP_KERNEL_ACCOUNT);
+	ns = kzalloc_obj(struct ipc_namespace, GFP_KERNEL_ACCOUNT);
 	if (ns == NULL)
 		goto fail_dec;

diff --git a/ipc/sem.c b/ipc/sem.c
index 0f06e4bd4673..2a19244cff22 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -514,7 +514,7 @@ static struct sem_array *sem_alloc(size_t nsems)
 	if (nsems > (INT_MAX - sizeof(*sma)) / sizeof(sma->sems[0]))
 		return NULL;

-	sma = kvzalloc(struct_size(sma, sems, nsems), GFP_KERNEL_ACCOUNT);
+	sma = kvzalloc_flex(*sma, sems, nsems, GFP_KERNEL_ACCOUNT);
 	if (unlikely(!sma))
 		return NULL;

@@ -1853,7 +1853,7 @@ static inline int get_undo_list(struct sem_undo_list **undo_listp)

 	undo_list = current->sysvsem.undo_list;
 	if (!undo_list) {
-		undo_list = kzalloc(sizeof(*undo_list), GFP_KERNEL_ACCOUNT);
+		undo_list = kzalloc_obj(*undo_list, GFP_KERNEL_ACCOUNT);
 		if (undo_list == NULL)
 			return -ENOMEM;
 		spin_lock_init(&undo_list->lock);
@@ -1938,7 +1938,7 @@ static struct sem_undo *find_alloc_undo(struct ipc_namespace *ns, int semid)
 	rcu_read_unlock();

 	/* step 2: allocate new undo structure */
-	new = kvzalloc(struct_size(new, semadj, nsems), GFP_KERNEL_ACCOUNT);
+	new = kvzalloc_flex(*new, semadj, nsems, GFP_KERNEL_ACCOUNT);
 	if (!new) {
 		ipc_rcu_putref(&sma->sem_perm, sem_rcu_free);
 		return ERR_PTR(-ENOMEM);
@@ -2234,7 +2234,7 @@ static long do_semtimedop(int semid, struct sembuf __user *tsops,
 		return -EINVAL;

 	if (nsops > SEMOPM_FAST) {
-		sops = kvmalloc_array(nsops, sizeof(*sops), GFP_KERNEL);
+		sops = kvmalloc_objs(*sops, nsops, GFP_KERNEL);
 		if (sops == NULL)
 			return -ENOMEM;
 	}
diff --git a/ipc/shm.c b/ipc/shm.c
index e8c7d1924c50..b94248570304 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -722,7 +722,7 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params)
 			ns->shm_tot + numpages > ns->shm_ctlall)
 		return -ENOSPC;

-	shp = kmalloc(sizeof(*shp), GFP_KERNEL_ACCOUNT);
+	shp = kmalloc_obj(*shp, GFP_KERNEL_ACCOUNT);
 	if (unlikely(!shp))
 		return -ENOMEM;

@@ -1618,7 +1618,7 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg,
 	rcu_read_unlock();

 	err = -ENOMEM;
-	sfd = kzalloc(sizeof(*sfd), GFP_KERNEL);
+	sfd = kzalloc_obj(*sfd, GFP_KERNEL);
 	if (!sfd) {
 		fput(base);
 		goto out_nattch;
diff --git a/ipc/util.c b/ipc/util.c
index cae60f11d9c2..59235ffba0d9 100644
--- a/ipc/util.c
+++ b/ipc/util.c
@@ -141,7 +141,7 @@ void __init ipc_init_proc_interface(const char *path, const char *header,
 	struct proc_dir_entry *pde;
 	struct ipc_proc_iface *iface;

-	iface = kmalloc(sizeof(*iface), GFP_KERNEL);
+	iface = kmalloc_obj(*iface, GFP_KERNEL);
 	if (!iface)
 		return;
 	iface->path	= path;
diff --git a/kernel/acct.c b/kernel/acct.c
index 812808e5b1b8..06e8b79eaf7e 100644
--- a/kernel/acct.c
+++ b/kernel/acct.c
@@ -255,7 +255,7 @@ static int acct_on(const char __user *name)
 	if (!(file->f_mode & FMODE_CAN_WRITE))
 		return -EIO;

-	acct = kzalloc(sizeof(struct bsd_acct_struct), GFP_KERNEL);
+	acct = kzalloc_obj(struct bsd_acct_struct, GFP_KERNEL);
 	if (!acct)
 		return -ENOMEM;

diff --git a/kernel/async.c b/kernel/async.c
index 4c3e6a44595f..862532ad328a 100644
--- a/kernel/async.c
+++ b/kernel/async.c
@@ -205,7 +205,7 @@ async_cookie_t async_schedule_node_domain(async_func_t func, void *data,
 	async_cookie_t newcookie;

 	/* allow irq-off callers */
-	entry = kzalloc(sizeof(struct async_entry), GFP_ATOMIC);
+	entry = kzalloc_obj(struct async_entry, GFP_ATOMIC);

 	/*
 	 * If we're out of memory or if there's too much work
@@ -261,7 +261,7 @@ bool async_schedule_dev_nocall(async_func_t func, struct device *dev)
 {
 	struct async_entry *entry;

-	entry = kzalloc(sizeof(struct async_entry), GFP_KERNEL);
+	entry = kzalloc_obj(struct async_entry, GFP_KERNEL);

 	/* Give up if there is no memory or too much work. */
 	if (!entry || atomic_read(&entry_count) > MAX_WORK) {
diff --git a/kernel/audit.c b/kernel/audit.c
index 592d927e70f9..838ca1648f7b 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -545,7 +545,7 @@ static int auditd_set(struct pid *pid, u32 portid, struct net *net,
 	if (!pid || !net)
 		return -EINVAL;

-	ac_new = kzalloc(sizeof(*ac_new), GFP_KERNEL);
+	ac_new = kzalloc_obj(*ac_new, GFP_KERNEL);
 	if (!ac_new)
 		return -ENOMEM;
 	ac_new->pid = get_pid(pid);
@@ -1044,7 +1044,7 @@ static void audit_send_reply(struct sk_buff *request_skb, int seq, int type, int
 	struct task_struct *tsk;
 	struct audit_reply *reply;

-	reply = kzalloc(sizeof(*reply), GFP_KERNEL);
+	reply = kzalloc_obj(*reply, GFP_KERNEL);
 	if (!reply)
 		return;

@@ -1517,8 +1517,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
 			if (err < 0)
 				return err;
 		}
-		sig_data = kmalloc(struct_size(sig_data, ctx, lsmctx.len),
-				   GFP_KERNEL);
+		sig_data = kmalloc_flex(*sig_data, ctx, lsmctx.len, GFP_KERNEL);
 		if (!sig_data) {
 			if (lsmprop_is_set(&audit_sig_lsm))
 				security_release_secctx(&lsmctx);
diff --git a/kernel/audit_fsnotify.c b/kernel/audit_fsnotify.c
index b92805b317a2..7b89e1ccb5a4 100644
--- a/kernel/audit_fsnotify.c
+++ b/kernel/audit_fsnotify.c
@@ -89,7 +89,7 @@ struct audit_fsnotify_mark *audit_alloc_mark(struct audit_krule *krule, char *pa
 		goto out;
 	}

-	audit_mark = kzalloc(sizeof(*audit_mark), GFP_KERNEL);
+	audit_mark = kzalloc_obj(*audit_mark, GFP_KERNEL);
 	if (unlikely(!audit_mark)) {
 		audit_mark = ERR_PTR(-ENOMEM);
 		goto out;
diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c
index fda6beb041e0..3ffd6582bfe5 100644
--- a/kernel/audit_tree.c
+++ b/kernel/audit_tree.c
@@ -96,7 +96,7 @@ static struct audit_tree *alloc_tree(const char *s)
 	size_t sz;

 	sz = strlen(s) + 1;
-	tree = kmalloc(struct_size(tree, pathname, sz), GFP_KERNEL);
+	tree = kmalloc_flex(*tree, pathname, sz, GFP_KERNEL);
 	if (tree) {
 		refcount_set(&tree->count, 1);
 		tree->goner = 0;
@@ -192,7 +192,7 @@ static struct audit_chunk *alloc_chunk(int count)
 	struct audit_chunk *chunk;
 	int i;

-	chunk = kzalloc(struct_size(chunk, owners, count), GFP_KERNEL);
+	chunk = kzalloc_flex(*chunk, owners, count, GFP_KERNEL);
 	if (!chunk)
 		return NULL;

diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
index a700e3c8925f..6a73b30929c0 100644
--- a/kernel/audit_watch.c
+++ b/kernel/audit_watch.c
@@ -139,7 +139,7 @@ static struct audit_parent *audit_init_parent(const struct path *path)
 	struct audit_parent *parent;
 	int ret;

-	parent = kzalloc(sizeof(*parent), GFP_KERNEL);
+	parent = kzalloc_obj(*parent, GFP_KERNEL);
 	if (unlikely(!parent))
 		return ERR_PTR(-ENOMEM);

@@ -161,7 +161,7 @@ static struct audit_watch *audit_init_watch(char *path)
 {
 	struct audit_watch *watch;

-	watch = kzalloc(sizeof(*watch), GFP_KERNEL);
+	watch = kzalloc_obj(*watch, GFP_KERNEL);
 	if (unlikely(!watch))
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
index 6a86c0683b67..e2d6f9a91a49 100644
--- a/kernel/auditfilter.c
+++ b/kernel/auditfilter.c
@@ -108,11 +108,11 @@ static inline struct audit_entry *audit_init_entry(u32 field_count)
 	struct audit_entry *entry;
 	struct audit_field *fields;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (unlikely(!entry))
 		return NULL;

-	fields = kcalloc(field_count, sizeof(*fields), GFP_KERNEL);
+	fields = kzalloc_objs(*fields, field_count, GFP_KERNEL);
 	if (unlikely(!fields)) {
 		kfree(entry);
 		return NULL;
@@ -638,7 +638,7 @@ static struct audit_rule_data *audit_krule_to_data(struct audit_krule *krule)
 	void *bufp;
 	int i;

-	data = kzalloc(struct_size(data, buf, krule->buflen), GFP_KERNEL);
+	data = kzalloc_flex(*data, buf, krule->buflen, GFP_KERNEL);
 	if (unlikely(!data))
 		return NULL;

@@ -1180,7 +1180,7 @@ int audit_list_rules_send(struct sk_buff *request_skb, int seq)
 	 * happen if we're actually running in the context of auditctl
 	 * trying to _send_ the stuff */

-	dest = kmalloc(sizeof(*dest), GFP_KERNEL);
+	dest = kmalloc_obj(*dest, GFP_KERNEL);
 	if (!dest)
 		return -ENOMEM;
 	dest->net = get_net(sock_net(NETLINK_CB(request_skb).sk));
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index 86a44b162a87..e45883de200f 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -255,7 +255,7 @@ static int grow_tree_refs(struct audit_context *ctx)
 {
 	struct audit_tree_refs *p = ctx->trees;

-	ctx->trees = kzalloc(sizeof(struct audit_tree_refs), GFP_KERNEL);
+	ctx->trees = kzalloc_obj(struct audit_tree_refs, GFP_KERNEL);
 	if (!ctx->trees) {
 		ctx->trees = p;
 		return 0;
@@ -1032,7 +1032,7 @@ static inline struct audit_context *audit_alloc_context(enum audit_state state)
 {
 	struct audit_context *context;

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context)
 		return NULL;
 	context->context = AUDIT_CTX_UNUSED;
@@ -2153,7 +2153,7 @@ static struct audit_names *audit_alloc_name(struct audit_context *context,
 		aname = &context->preallocated_names[context->name_count];
 		memset(aname, 0, sizeof(*aname));
 	} else {
-		aname = kzalloc(sizeof(*aname), GFP_NOFS);
+		aname = kzalloc_obj(*aname, GFP_NOFS);
 		if (!aname)
 			return NULL;
 		aname->should_free = true;
@@ -2650,7 +2650,7 @@ int __audit_sockaddr(int len, void *a)
 	struct audit_context *context = audit_context();

 	if (!context->sockaddr) {
-		void *p = kmalloc(sizeof(struct sockaddr_storage), GFP_KERNEL);
+		void *p = kmalloc_obj(struct sockaddr_storage, GFP_KERNEL);

 		if (!p)
 			return -ENOMEM;
@@ -2704,7 +2704,7 @@ int audit_signal_info_syscall(struct task_struct *t)

 	axp = (void *)ctx->aux_pids;
 	if (!axp || axp->pid_count == AUDIT_AUX_PIDS) {
-		axp = kzalloc(sizeof(*axp), GFP_ATOMIC);
+		axp = kzalloc_obj(*axp, GFP_ATOMIC);
 		if (!axp)
 			return -ENOMEM;

@@ -2743,7 +2743,7 @@ int __audit_log_bprm_fcaps(struct linux_binprm *bprm,
 	struct audit_context *context = audit_context();
 	struct cpu_vfs_cap_data vcaps;

-	ax = kmalloc(sizeof(*ax), GFP_KERNEL);
+	ax = kmalloc_obj(*ax, GFP_KERNEL);
 	if (!ax)
 		return -ENOMEM;

diff --git a/kernel/bpf/arena.c b/kernel/bpf/arena.c
index 42fae0a9f314..5baea15cb07d 100644
--- a/kernel/bpf/arena.c
+++ b/kernel/bpf/arena.c
@@ -324,7 +324,7 @@ static int remember_vma(struct bpf_arena *arena, struct vm_area_struct *vma)
 {
 	struct vma_list *vml;

-	vml = kmalloc(sizeof(*vml), GFP_KERNEL);
+	vml = kmalloc_obj(*vml, GFP_KERNEL);
 	if (!vml)
 		return -ENOMEM;
 	refcount_set(&vml->mmap_count, 1);
diff --git a/kernel/bpf/arraymap.c b/kernel/bpf/arraymap.c
index 67e9e811de3a..188b0e35f856 100644
--- a/kernel/bpf/arraymap.c
+++ b/kernel/bpf/arraymap.c
@@ -1061,7 +1061,7 @@ static int prog_array_map_poke_track(struct bpf_map *map,
 			goto out;
 	}

-	elem = kmalloc(sizeof(*elem), GFP_KERNEL);
+	elem = kmalloc_obj(*elem, GFP_KERNEL);
 	if (!elem) {
 		ret = -ENOMEM;
 		goto out;
@@ -1174,7 +1174,7 @@ static struct bpf_map *prog_array_map_alloc(union bpf_attr *attr)
 	struct bpf_array_aux *aux;
 	struct bpf_map *map;

-	aux = kzalloc(sizeof(*aux), GFP_KERNEL_ACCOUNT);
+	aux = kzalloc_obj(*aux, GFP_KERNEL_ACCOUNT);
 	if (!aux)
 		return ERR_PTR(-ENOMEM);

@@ -1237,7 +1237,7 @@ static struct bpf_event_entry *bpf_event_entry_gen(struct file *perf_file,
 {
 	struct bpf_event_entry *ee;

-	ee = kzalloc(sizeof(*ee), GFP_KERNEL);
+	ee = kzalloc_obj(*ee, GFP_KERNEL);
 	if (ee) {
 		ee->event = perf_file->private_data;
 		ee->perf_file = perf_file;
diff --git a/kernel/bpf/bpf_iter.c b/kernel/bpf/bpf_iter.c
index 4b58d56ecab1..b5d16050f7b3 100644
--- a/kernel/bpf/bpf_iter.c
+++ b/kernel/bpf/bpf_iter.c
@@ -295,7 +295,7 @@ int bpf_iter_reg_target(const struct bpf_iter_reg *reg_info)
 {
 	struct bpf_iter_target_info *tinfo;

-	tinfo = kzalloc(sizeof(*tinfo), GFP_KERNEL);
+	tinfo = kzalloc_obj(*tinfo, GFP_KERNEL);
 	if (!tinfo)
 		return -ENOMEM;

@@ -548,7 +548,7 @@ int bpf_iter_link_attach(const union bpf_attr *attr, bpfptr_t uattr,
 	if (prog->sleepable && !bpf_iter_target_support_resched(tinfo))
 		return -EINVAL;

-	link = kzalloc(sizeof(*link), GFP_USER | __GFP_NOWARN);
+	link = kzalloc_obj(*link, GFP_USER | __GFP_NOWARN);
 	if (!link)
 		return -ENOMEM;

diff --git a/kernel/bpf/bpf_struct_ops.c b/kernel/bpf/bpf_struct_ops.c
index c43346cb3d76..1ff292a6f3ed 100644
--- a/kernel/bpf/bpf_struct_ops.c
+++ b/kernel/bpf/bpf_struct_ops.c
@@ -218,7 +218,7 @@ static int prepare_arg_info(struct btf *btf,
 	args = btf_params(func_proto);
 	stub_args = btf_params(stub_func_proto);

-	info_buf = kcalloc(nargs, sizeof(*info_buf), GFP_KERNEL);
+	info_buf = kzalloc_objs(*info_buf, nargs, GFP_KERNEL);
 	if (!info_buf)
 		return -ENOMEM;

@@ -378,8 +378,7 @@ int bpf_struct_ops_desc_init(struct bpf_struct_ops_desc *st_ops_desc,
 	if (!is_valid_value_type(btf, value_id, t, value_name))
 		return -EINVAL;

-	arg_info = kcalloc(btf_type_vlen(t), sizeof(*arg_info),
-			   GFP_KERNEL);
+	arg_info = kzalloc_objs(*arg_info, btf_type_vlen(t), GFP_KERNEL);
 	if (!arg_info)
 		return -ENOMEM;

@@ -721,7 +720,7 @@ static long bpf_struct_ops_map_update_elem(struct bpf_map *map, void *key,
 	if (uvalue->common.state || refcount_read(&uvalue->common.refcnt))
 		return -EINVAL;

-	tlinks = kcalloc(BPF_TRAMP_MAX, sizeof(*tlinks), GFP_KERNEL);
+	tlinks = kzalloc_objs(*tlinks, BPF_TRAMP_MAX, GFP_KERNEL);
 	if (!tlinks)
 		return -ENOMEM;

@@ -815,7 +814,7 @@ static long bpf_struct_ops_map_update_elem(struct bpf_map *map, void *key,
 		/* Poison pointer on error instead of return for backward compatibility */
 		bpf_prog_assoc_struct_ops(prog, &st_map->map);

-		link = kzalloc(sizeof(*link), GFP_USER);
+		link = kzalloc_obj(*link, GFP_USER);
 		if (!link) {
 			bpf_prog_put(prog);
 			err = -ENOMEM;
@@ -825,7 +824,7 @@ static long bpf_struct_ops_map_update_elem(struct bpf_map *map, void *key,
 			      &bpf_struct_ops_link_lops, prog, prog->expected_attach_type);
 		*plink++ = &link->link;

-		ksym = kzalloc(sizeof(*ksym), GFP_USER);
+		ksym = kzalloc_obj(*ksym, GFP_USER);
 		if (!ksym) {
 			err = -ENOMEM;
 			goto reset_unlock;
@@ -1376,7 +1375,7 @@ int bpf_struct_ops_link_create(union bpf_attr *attr)
 		goto err_out;
 	}

-	link = kzalloc(sizeof(*link), GFP_USER);
+	link = kzalloc_obj(*link, GFP_USER);
 	if (!link) {
 		err = -ENOMEM;
 		goto err_out;
diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c
index 7708958e3fb8..ee9037aa9ab7 100644
--- a/kernel/bpf/btf.c
+++ b/kernel/bpf/btf.c
@@ -1729,8 +1729,8 @@ static int btf_add_type(struct btf_verifier_env *env, struct btf_type *t)
 		new_size = min_t(u32, BTF_MAX_TYPE,
 				 btf->types_size + expand_by);

-		new_types = kvcalloc(new_size, sizeof(*new_types),
-				     GFP_KERNEL | __GFP_NOWARN);
+		new_types = kvzalloc_objs(*new_types, new_size,
+					  GFP_KERNEL | __GFP_NOWARN);
 		if (!new_types)
 			return -ENOMEM;

@@ -4072,7 +4072,7 @@ struct btf_record *btf_parse_fields(const struct btf *btf, const struct btf_type
 	/* This needs to be kzalloc to zero out padding and unused fields, see
 	 * comment in btf_record_equal.
 	 */
-	rec = kzalloc(struct_size(rec, fields, cnt), GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
+	rec = kzalloc_flex(*rec, fields, cnt, GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
 	if (!rec)
 		return ERR_PTR(-ENOMEM);

@@ -5687,7 +5687,7 @@ btf_parse_struct_metas(struct bpf_verifier_log *log, struct btf *btf)
 	BUILD_BUG_ON(offsetof(struct btf_id_set, cnt) != 0);
 	BUILD_BUG_ON(sizeof(struct btf_id_set) != sizeof(u32));

-	aof = kmalloc(sizeof(*aof), GFP_KERNEL | __GFP_NOWARN);
+	aof = kmalloc_obj(*aof, GFP_KERNEL | __GFP_NOWARN);
 	if (!aof)
 		return ERR_PTR(-ENOMEM);
 	aof->cnt = 0;
@@ -5885,7 +5885,7 @@ static struct btf *btf_parse(const union bpf_attr *attr, bpfptr_t uattr, u32 uat
 	if (attr->btf_size > BTF_MAX_SIZE)
 		return ERR_PTR(-E2BIG);

-	env = kzalloc(sizeof(*env), GFP_KERNEL | __GFP_NOWARN);
+	env = kzalloc_obj(*env, GFP_KERNEL | __GFP_NOWARN);
 	if (!env)
 		return ERR_PTR(-ENOMEM);

@@ -5897,7 +5897,7 @@ static struct btf *btf_parse(const union bpf_attr *attr, bpfptr_t uattr, u32 uat
 	if (err)
 		goto errout_free;

-	btf = kzalloc(sizeof(*btf), GFP_KERNEL | __GFP_NOWARN);
+	btf = kzalloc_obj(*btf, GFP_KERNEL | __GFP_NOWARN);
 	if (!btf) {
 		err = -ENOMEM;
 		goto errout;
@@ -6314,7 +6314,7 @@ static struct btf *btf_parse_base(struct btf_verifier_env *env, const char *name
 	if (!IS_ENABLED(CONFIG_DEBUG_INFO_BTF))
 		return ERR_PTR(-ENOENT);

-	btf = kzalloc(sizeof(*btf), GFP_KERNEL | __GFP_NOWARN);
+	btf = kzalloc_obj(*btf, GFP_KERNEL | __GFP_NOWARN);
 	if (!btf) {
 		err = -ENOMEM;
 		goto errout;
@@ -6365,7 +6365,7 @@ struct btf *btf_parse_vmlinux(void)
 	struct btf *btf;
 	int err;

-	env = kzalloc(sizeof(*env), GFP_KERNEL | __GFP_NOWARN);
+	env = kzalloc_obj(*env, GFP_KERNEL | __GFP_NOWARN);
 	if (!env)
 		return ERR_PTR(-ENOMEM);

@@ -6415,7 +6415,7 @@ static struct btf *btf_parse_module(const char *module_name, const void *data,
 	if (!vmlinux_btf)
 		return ERR_PTR(-EINVAL);

-	env = kzalloc(sizeof(*env), GFP_KERNEL | __GFP_NOWARN);
+	env = kzalloc_obj(*env, GFP_KERNEL | __GFP_NOWARN);
 	if (!env)
 		return ERR_PTR(-ENOMEM);

@@ -6432,7 +6432,7 @@ static struct btf *btf_parse_module(const char *module_name, const void *data,
 		base_btf = vmlinux_btf;
 	}

-	btf = kzalloc(sizeof(*btf), GFP_KERNEL | __GFP_NOWARN);
+	btf = kzalloc_obj(*btf, GFP_KERNEL | __GFP_NOWARN);
 	if (!btf) {
 		err = -ENOMEM;
 		goto errout;
@@ -8306,7 +8306,7 @@ static int btf_module_notify(struct notifier_block *nb, unsigned long op,

 	switch (op) {
 	case MODULE_STATE_COMING:
-		btf_mod = kzalloc(sizeof(*btf_mod), GFP_KERNEL);
+		btf_mod = kzalloc_obj(*btf_mod, GFP_KERNEL);
 		if (!btf_mod) {
 			err = -ENOMEM;
 			goto out;
@@ -8341,7 +8341,7 @@ static int btf_module_notify(struct notifier_block *nb, unsigned long op,
 		if (IS_ENABLED(CONFIG_SYSFS)) {
 			struct bin_attribute *attr;

-			attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+			attr = kzalloc_obj(*attr, GFP_KERNEL);
 			if (!attr)
 				goto out;

@@ -8689,7 +8689,7 @@ static int btf_populate_kfunc_set(struct btf *btf, enum btf_kfunc_hook hook,
 	}

 	if (!tab) {
-		tab = kzalloc(sizeof(*tab), GFP_KERNEL | __GFP_NOWARN);
+		tab = kzalloc_obj(*tab, GFP_KERNEL | __GFP_NOWARN);
 		if (!tab)
 			return -ENOMEM;
 		btf->kfunc_set_tab = tab;
@@ -9439,7 +9439,7 @@ int bpf_core_apply(struct bpf_core_ctx *ctx, const struct bpf_core_relo *relo,
 	/* ~4k of temp memory necessary to convert LLVM spec like "0:1:0:5"
 	 * into arrays of btf_ids of struct fields and array indices.
 	 */
-	specs = kcalloc(3, sizeof(*specs), GFP_KERNEL_ACCOUNT);
+	specs = kzalloc_objs(*specs, 3, GFP_KERNEL_ACCOUNT);
 	if (!specs)
 		return -ENOMEM;

@@ -9464,7 +9464,8 @@ int bpf_core_apply(struct bpf_core_ctx *ctx, const struct bpf_core_relo *relo,
 			goto out;
 		}
 		if (cc->cnt) {
-			cands.cands = kcalloc(cc->cnt, sizeof(*cands.cands), GFP_KERNEL_ACCOUNT);
+			cands.cands = kzalloc_objs(*cands.cands, cc->cnt,
+						   GFP_KERNEL_ACCOUNT);
 			if (!cands.cands) {
 				err = -ENOMEM;
 				goto out;
@@ -9616,7 +9617,7 @@ btf_add_struct_ops(struct btf *btf, struct bpf_struct_ops *st_ops,

 	tab = btf->struct_ops_tab;
 	if (!tab) {
-		tab = kzalloc(struct_size(tab, ops, 4), GFP_KERNEL);
+		tab = kzalloc_flex(*tab, ops, 4, GFP_KERNEL);
 		if (!tab)
 			return -ENOMEM;
 		tab->capacity = 4;
@@ -9705,7 +9706,7 @@ int __register_bpf_struct_ops(struct bpf_struct_ops *st_ops)
 	if (IS_ERR(btf))
 		return PTR_ERR(btf);

-	log = kzalloc(sizeof(*log), GFP_KERNEL | __GFP_NOWARN);
+	log = kzalloc_obj(*log, GFP_KERNEL | __GFP_NOWARN);
 	if (!log) {
 		err = -ENOMEM;
 		goto errout;
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
index b029f0369ecf..5d7a35e476e9 100644
--- a/kernel/bpf/cgroup.c
+++ b/kernel/bpf/cgroup.c
@@ -845,7 +845,7 @@ static int __cgroup_bpf_attach(struct cgroup *cgrp,
 	if (pl) {
 		old_prog = pl->prog;
 	} else {
-		pl = kmalloc(sizeof(*pl), GFP_KERNEL);
+		pl = kmalloc_obj(*pl, GFP_KERNEL);
 		if (!pl) {
 			bpf_cgroup_storages_free(new_storage);
 			return -ENOMEM;
@@ -1488,7 +1488,7 @@ int cgroup_bpf_link_attach(const union bpf_attr *attr, struct bpf_prog *prog)
 	if (IS_ERR(cgrp))
 		return PTR_ERR(cgrp);

-	link = kzalloc(sizeof(*link), GFP_USER);
+	link = kzalloc_obj(*link, GFP_USER);
 	if (!link) {
 		err = -ENOMEM;
 		goto out_put_cgroup;
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
index 5ab6bace7d0d..80b3e94f3fe3 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
@@ -108,7 +108,7 @@ struct bpf_prog *bpf_prog_alloc_no_stats(unsigned int size, gfp_t gfp_extra_flag
 	if (fp == NULL)
 		return NULL;

-	aux = kzalloc(sizeof(*aux), bpf_memcg_flags(GFP_KERNEL | gfp_extra_flags));
+	aux = kzalloc_obj(*aux, bpf_memcg_flags(GFP_KERNEL | gfp_extra_flags));
 	if (aux == NULL) {
 		vfree(fp);
 		return NULL;
@@ -180,9 +180,9 @@ int bpf_prog_alloc_jited_linfo(struct bpf_prog *prog)
 	if (!prog->aux->nr_linfo || !prog->jit_requested)
 		return 0;

-	prog->aux->jited_linfo = kvcalloc(prog->aux->nr_linfo,
-					  sizeof(*prog->aux->jited_linfo),
-					  bpf_memcg_flags(GFP_KERNEL | __GFP_NOWARN));
+	prog->aux->jited_linfo = kvzalloc_objs(*prog->aux->jited_linfo,
+					       prog->aux->nr_linfo,
+					       bpf_memcg_flags(GFP_KERNEL | __GFP_NOWARN));
 	if (!prog->aux->jited_linfo)
 		return -ENOMEM;

@@ -910,8 +910,8 @@ static struct bpf_prog_pack *alloc_new_pack(bpf_jit_fill_hole_t bpf_fill_ill_ins
 	struct bpf_prog_pack *pack;
 	int err;

-	pack = kzalloc(struct_size(pack, bitmap, BITS_TO_LONGS(BPF_PROG_CHUNK_COUNT)),
-		       GFP_KERNEL);
+	pack = kzalloc_flex(*pack, bitmap, BITS_TO_LONGS(BPF_PROG_CHUNK_COUNT),
+			    GFP_KERNEL);
 	if (!pack)
 		return NULL;
 	pack->ptr = bpf_jit_alloc_exec(BPF_PROG_PACK_SIZE);
@@ -2597,7 +2597,7 @@ struct bpf_prog_array *bpf_prog_array_alloc(u32 prog_cnt, gfp_t flags)
 	struct bpf_prog_array *p;

 	if (prog_cnt)
-		p = kzalloc(struct_size(p, items, prog_cnt + 1), flags);
+		p = kzalloc_flex(*p, items, prog_cnt + 1, flags);
 	else
 		p = &bpf_empty_prog_array.hdr;

diff --git a/kernel/bpf/crypto.c b/kernel/bpf/crypto.c
index 7e75a1936256..2b0660c32c92 100644
--- a/kernel/bpf/crypto.c
+++ b/kernel/bpf/crypto.c
@@ -68,7 +68,7 @@ int bpf_crypto_register_type(const struct bpf_crypto_type *type)
 			goto unlock;
 	}

-	node = kmalloc(sizeof(*node), GFP_KERNEL);
+	node = kmalloc_obj(*node, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!node)
 		goto unlock;
@@ -176,7 +176,7 @@ bpf_crypto_ctx_create(const struct bpf_crypto_params *params, u32 params__sz,
 		goto err_module_put;
 	}

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		*err = -ENOMEM;
 		goto err_module_put;
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index 7ac32798eb04..42a692682f18 100644
--- a/kernel/bpf/helpers.c
+++ b/kernel/bpf/helpers.c
@@ -3993,7 +3993,7 @@ __bpf_kfunc struct bpf_key *bpf_lookup_user_key(s32 serial, u64 flags)
 	if (IS_ERR(key_ref))
 		return NULL;

-	bkey = kmalloc(sizeof(*bkey), GFP_KERNEL);
+	bkey = kmalloc_obj(*bkey, GFP_KERNEL);
 	if (!bkey) {
 		key_put(key_ref_to_ptr(key_ref));
 		return NULL;
@@ -4033,7 +4033,7 @@ __bpf_kfunc struct bpf_key *bpf_lookup_system_key(u64 id)
 	if (system_keyring_id_check(id) < 0)
 		return NULL;

-	bkey = kmalloc(sizeof(*bkey), GFP_ATOMIC);
+	bkey = kmalloc_obj(*bkey, GFP_ATOMIC);
 	if (!bkey)
 		return NULL;

diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
index 005ea3a2cda7..a111b0e9214e 100644
--- a/kernel/bpf/inode.c
+++ b/kernel/bpf/inode.c
@@ -195,7 +195,7 @@ static struct map_iter *map_iter_alloc(struct bpf_map *map)
 {
 	struct map_iter *iter;

-	iter = kzalloc(sizeof(*iter), GFP_KERNEL | __GFP_NOWARN);
+	iter = kzalloc_obj(*iter, GFP_KERNEL | __GFP_NOWARN);
 	if (!iter)
 		goto error;

@@ -1044,7 +1044,7 @@ static int bpf_init_fs_context(struct fs_context *fc)
 {
 	struct bpf_mount_opts *opts;

-	opts = kzalloc(sizeof(struct bpf_mount_opts), GFP_KERNEL);
+	opts = kzalloc_obj(struct bpf_mount_opts, GFP_KERNEL);
 	if (!opts)
 		return -ENOMEM;

diff --git a/kernel/bpf/liveness.c b/kernel/bpf/liveness.c
index 60db5d655495..998986853c61 100644
--- a/kernel/bpf/liveness.c
+++ b/kernel/bpf/liveness.c
@@ -193,8 +193,8 @@ static struct func_instance *__lookup_instance(struct bpf_verifier_env *env,
 	result = kvzalloc(size, GFP_KERNEL_ACCOUNT);
 	if (!result)
 		return ERR_PTR(-ENOMEM);
-	result->must_write_set = kvcalloc(subprog_sz, sizeof(*result->must_write_set),
-					  GFP_KERNEL_ACCOUNT);
+	result->must_write_set = kvzalloc_objs(*result->must_write_set,
+					       subprog_sz, GFP_KERNEL_ACCOUNT);
 	if (!result->must_write_set) {
 		kvfree(result);
 		return ERR_PTR(-ENOMEM);
@@ -217,7 +217,7 @@ static struct func_instance *lookup_instance(struct bpf_verifier_env *env,

 int bpf_stack_liveness_init(struct bpf_verifier_env *env)
 {
-	env->liveness = kvzalloc(sizeof(*env->liveness), GFP_KERNEL_ACCOUNT);
+	env->liveness = kvzalloc_obj(*env->liveness, GFP_KERNEL_ACCOUNT);
 	if (!env->liveness)
 		return -ENOMEM;
 	hash_init(env->liveness->func_instances);
@@ -266,7 +266,8 @@ static struct per_frame_masks *alloc_frame_masks(struct bpf_verifier_env *env,
 	struct per_frame_masks *arr;

 	if (!instance->frames[frame]) {
-		arr = kvcalloc(instance->insn_cnt, sizeof(*arr), GFP_KERNEL_ACCOUNT);
+		arr = kvzalloc_objs(*arr, instance->insn_cnt,
+				    GFP_KERNEL_ACCOUNT);
 		instance->frames[frame] = arr;
 		if (!arr)
 			return ERR_PTR(-ENOMEM);
diff --git a/kernel/bpf/lpm_trie.c b/kernel/bpf/lpm_trie.c
index be66d7e520e0..1adeb4d3b8cf 100644
--- a/kernel/bpf/lpm_trie.c
+++ b/kernel/bpf/lpm_trie.c
@@ -683,9 +683,9 @@ static int trie_get_next_key(struct bpf_map *map, void *_key, void *_next_key)
 	if (!key || key->prefixlen > trie->max_prefixlen)
 		goto find_leftmost;

-	node_stack = kmalloc_array(trie->max_prefixlen + 1,
-				   sizeof(struct lpm_trie_node *),
-				   GFP_ATOMIC | __GFP_NOWARN);
+	node_stack = kmalloc_objs(struct lpm_trie_node *,
+				  trie->max_prefixlen + 1,
+				  GFP_ATOMIC | __GFP_NOWARN);
 	if (!node_stack)
 		return -ENOMEM;

diff --git a/kernel/bpf/net_namespace.c b/kernel/bpf/net_namespace.c
index 8e88201c98bf..25f30f9edaef 100644
--- a/kernel/bpf/net_namespace.c
+++ b/kernel/bpf/net_namespace.c
@@ -494,7 +494,7 @@ int netns_bpf_link_create(const union bpf_attr *attr, struct bpf_prog *prog)
 	if (IS_ERR(net))
 		return PTR_ERR(net);

-	net_link = kzalloc(sizeof(*net_link), GFP_USER);
+	net_link = kzalloc_obj(*net_link, GFP_USER);
 	if (!net_link) {
 		err = -ENOMEM;
 		goto out_put_net;
diff --git a/kernel/bpf/offload.c b/kernel/bpf/offload.c
index 227f9b5f388b..7fcbbe0ad925 100644
--- a/kernel/bpf/offload.c
+++ b/kernel/bpf/offload.c
@@ -72,7 +72,7 @@ static int __bpf_offload_dev_netdev_register(struct bpf_offload_dev *offdev,
 	struct bpf_offload_netdev *ondev;
 	int err;

-	ondev = kzalloc(sizeof(*ondev), GFP_KERNEL);
+	ondev = kzalloc_obj(*ondev, GFP_KERNEL);
 	if (!ondev)
 		return -ENOMEM;

@@ -182,7 +182,7 @@ static int __bpf_prog_dev_bound_init(struct bpf_prog *prog, struct net_device *n
 	struct bpf_prog_offload *offload;
 	int err;

-	offload = kzalloc(sizeof(*offload), GFP_USER);
+	offload = kzalloc_obj(*offload, GFP_USER);
 	if (!offload)
 		return -ENOMEM;

@@ -777,7 +777,7 @@ bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops, void *priv)
 {
 	struct bpf_offload_dev *offdev;

-	offdev = kzalloc(sizeof(*offdev), GFP_KERNEL);
+	offdev = kzalloc_obj(*offdev, GFP_KERNEL);
 	if (!offdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
index dd89bf809772..2d14fb6d0ed0 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -3633,7 +3633,7 @@ static int bpf_tracing_prog_attach(struct bpf_prog *prog,
 	if (prog->expected_attach_type == BPF_TRACE_FSESSION) {
 		struct bpf_fsession_link *fslink;

-		fslink = kzalloc(sizeof(*fslink), GFP_USER);
+		fslink = kzalloc_obj(*fslink, GFP_USER);
 		if (fslink) {
 			bpf_link_init(&fslink->fexit.link, BPF_LINK_TYPE_TRACING,
 				      &bpf_tracing_link_lops, prog, attach_type);
@@ -3643,7 +3643,7 @@ static int bpf_tracing_prog_attach(struct bpf_prog *prog,
 			link = NULL;
 		}
 	} else {
-		link = kzalloc(sizeof(*link), GFP_USER);
+		link = kzalloc_obj(*link, GFP_USER);
 	}
 	if (!link) {
 		err = -ENOMEM;
@@ -4183,7 +4183,7 @@ static int bpf_perf_link_attach(const union bpf_attr *attr, struct bpf_prog *pro
 	if (IS_ERR(perf_file))
 		return PTR_ERR(perf_file);

-	link = kzalloc(sizeof(*link), GFP_USER);
+	link = kzalloc_obj(*link, GFP_USER);
 	if (!link) {
 		err = -ENOMEM;
 		goto out_put_file;
@@ -4261,7 +4261,7 @@ static int bpf_raw_tp_link_attach(struct bpf_prog *prog,
 	if (!btp)
 		return -ENOENT;

-	link = kzalloc(sizeof(*link), GFP_USER);
+	link = kzalloc_obj(*link, GFP_USER);
 	if (!link) {
 		err = -ENOMEM;
 		goto out_put_btp;
@@ -6076,9 +6076,8 @@ static int bpf_prog_bind_map(union bpf_attr *attr)
 			goto out_unlock;
 		}

-	used_maps_new = kmalloc_array(prog->aux->used_map_cnt + 1,
-				      sizeof(used_maps_new[0]),
-				      GFP_KERNEL);
+	used_maps_new = kmalloc_objs(used_maps_new[0],
+				     prog->aux->used_map_cnt + 1, GFP_KERNEL);
 	if (!used_maps_new) {
 		ret = -ENOMEM;
 		goto out_unlock;
diff --git a/kernel/bpf/tcx.c b/kernel/bpf/tcx.c
index efd987ea6872..02db0113b8e7 100644
--- a/kernel/bpf/tcx.c
+++ b/kernel/bpf/tcx.c
@@ -321,7 +321,7 @@ int tcx_link_attach(const union bpf_attr *attr, struct bpf_prog *prog)
 		ret = -ENODEV;
 		goto out;
 	}
-	tcx = kzalloc(sizeof(*tcx), GFP_USER);
+	tcx = kzalloc_obj(*tcx, GFP_USER);
 	if (!tcx) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/kernel/bpf/token.c b/kernel/bpf/token.c
index 7e4aa1e44b50..e85a179523f0 100644
--- a/kernel/bpf/token.c
+++ b/kernel/bpf/token.c
@@ -172,7 +172,7 @@ int bpf_token_create(union bpf_attr *attr)
 	if (fdf.err)
 		return fdf.err;

-	token = kzalloc(sizeof(*token), GFP_USER);
+	token = kzalloc_obj(*token, GFP_USER);
 	if (!token)
 		return -ENOMEM;

diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c
index 952cd7932461..b94565843f77 100644
--- a/kernel/bpf/trampoline.c
+++ b/kernel/bpf/trampoline.c
@@ -256,7 +256,7 @@ static int direct_ops_mod(struct bpf_trampoline *tr, void *addr, bool lock_direc
  */
 static int direct_ops_alloc(struct bpf_trampoline *tr)
 {
-	tr->fops = kzalloc(sizeof(struct ftrace_ops), GFP_KERNEL);
+	tr->fops = kzalloc_obj(struct ftrace_ops, GFP_KERNEL);
 	if (!tr->fops)
 		return -ENOMEM;
 	tr->fops->private = tr;
@@ -342,7 +342,7 @@ static struct bpf_trampoline *bpf_trampoline_lookup(u64 key, unsigned long ip)
 			goto out;
 		}
 	}
-	tr = kzalloc(sizeof(*tr), GFP_KERNEL);
+	tr = kzalloc_obj(*tr, GFP_KERNEL);
 	if (!tr)
 		goto out;
 	if (direct_ops_alloc(tr)) {
@@ -446,7 +446,7 @@ bpf_trampoline_get_progs(const struct bpf_trampoline *tr, int *total, bool *ip_a
 	int kind;

 	*total = 0;
-	tlinks = kcalloc(BPF_TRAMP_MAX, sizeof(*tlinks), GFP_KERNEL);
+	tlinks = kzalloc_objs(*tlinks, BPF_TRAMP_MAX, GFP_KERNEL);
 	if (!tlinks)
 		return ERR_PTR(-ENOMEM);

@@ -569,7 +569,7 @@ static struct bpf_tramp_image *bpf_tramp_image_alloc(u64 key, int size)
 	void *image;
 	int err = -ENOMEM;

-	im = kzalloc(sizeof(*im), GFP_KERNEL);
+	im = kzalloc_obj(*im, GFP_KERNEL);
 	if (!im)
 		goto out;

@@ -928,7 +928,7 @@ static struct bpf_shim_tramp_link *cgroup_shim_alloc(const struct bpf_prog *prog
 	struct bpf_shim_tramp_link *shim_link = NULL;
 	struct bpf_prog *p;

-	shim_link = kzalloc(sizeof(*shim_link), GFP_USER);
+	shim_link = kzalloc_obj(*shim_link, GFP_USER);
 	if (!shim_link)
 		return NULL;

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index dbaafb64d3bd..63f05d90e708 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -1779,7 +1779,7 @@ static int copy_verifier_state(struct bpf_verifier_state *dst_state,
 	for (i = 0; i <= src->curframe; i++) {
 		dst = dst_state->frame[i];
 		if (!dst) {
-			dst = kzalloc(sizeof(*dst), GFP_KERNEL_ACCOUNT);
+			dst = kzalloc_obj(*dst, GFP_KERNEL_ACCOUNT);
 			if (!dst)
 				return -ENOMEM;
 			dst_state->frame[i] = dst;
@@ -2127,7 +2127,7 @@ static struct bpf_verifier_state *push_stack(struct bpf_verifier_env *env,
 	struct bpf_verifier_stack_elem *elem;
 	int err;

-	elem = kzalloc(sizeof(struct bpf_verifier_stack_elem), GFP_KERNEL_ACCOUNT);
+	elem = kzalloc_obj(struct bpf_verifier_stack_elem, GFP_KERNEL_ACCOUNT);
 	if (!elem)
 		return ERR_PTR(-ENOMEM);

@@ -2949,7 +2949,7 @@ static struct bpf_verifier_state *push_async_cb(struct bpf_verifier_env *env,
 	struct bpf_verifier_stack_elem *elem;
 	struct bpf_func_state *frame;

-	elem = kzalloc(sizeof(struct bpf_verifier_stack_elem), GFP_KERNEL_ACCOUNT);
+	elem = kzalloc_obj(struct bpf_verifier_stack_elem, GFP_KERNEL_ACCOUNT);
 	if (!elem)
 		return ERR_PTR(-ENOMEM);

@@ -2972,7 +2972,7 @@ static struct bpf_verifier_state *push_async_cb(struct bpf_verifier_env *env,
 	 */
 	elem->st.branches = 1;
 	elem->st.in_sleepable = is_sleepable;
-	frame = kzalloc(sizeof(*frame), GFP_KERNEL_ACCOUNT);
+	frame = kzalloc_obj(*frame, GFP_KERNEL_ACCOUNT);
 	if (!frame)
 		return ERR_PTR(-ENOMEM);
 	init_func_state(env, frame,
@@ -3410,7 +3410,7 @@ static int add_kfunc_call(struct bpf_verifier_env *env, u32 func_id, s16 offset)
 			return -EINVAL;
 		}

-		tab = kzalloc(sizeof(*tab), GFP_KERNEL_ACCOUNT);
+		tab = kzalloc_obj(*tab, GFP_KERNEL_ACCOUNT);
 		if (!tab)
 			return -ENOMEM;
 		prog_aux->kfunc_tab = tab;
@@ -3426,7 +3426,7 @@ static int add_kfunc_call(struct bpf_verifier_env *env, u32 func_id, s16 offset)
 		return 0;

 	if (!btf_tab && offset) {
-		btf_tab = kzalloc(sizeof(*btf_tab), GFP_KERNEL_ACCOUNT);
+		btf_tab = kzalloc_obj(*btf_tab, GFP_KERNEL_ACCOUNT);
 		if (!btf_tab)
 			return -ENOMEM;
 		prog_aux->kfunc_btf_tab = btf_tab;
@@ -10580,7 +10580,7 @@ static int setup_func_entry(struct bpf_verifier_env *env, int subprog, int calls
 	}

 	caller = state->frame[state->curframe];
-	callee = kzalloc(sizeof(*callee), GFP_KERNEL_ACCOUNT);
+	callee = kzalloc_obj(*callee, GFP_KERNEL_ACCOUNT);
 	if (!callee)
 		return -ENOMEM;
 	state->frame[state->curframe + 1] = callee;
@@ -18860,11 +18860,13 @@ static int check_cfg(struct bpf_verifier_env *env)
 	int *insn_stack, *insn_state;
 	int ex_insn_beg, i, ret = 0;

-	insn_state = env->cfg.insn_state = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL_ACCOUNT);
+	insn_state = env->cfg.insn_state = kvzalloc_objs(int, insn_cnt,
+							 GFP_KERNEL_ACCOUNT);
 	if (!insn_state)
 		return -ENOMEM;

-	insn_stack = env->cfg.insn_stack = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL_ACCOUNT);
+	insn_stack = env->cfg.insn_stack = kvzalloc_objs(int, insn_cnt,
+							 GFP_KERNEL_ACCOUNT);
 	if (!insn_stack) {
 		kvfree(insn_state);
 		return -ENOMEM;
@@ -18951,9 +18953,9 @@ static int compute_postorder(struct bpf_verifier_env *env)
 	int *stack = NULL, *postorder = NULL, *state = NULL;
 	struct bpf_iarray *succ;

-	postorder = kvcalloc(env->prog->len, sizeof(int), GFP_KERNEL_ACCOUNT);
-	state = kvcalloc(env->prog->len, sizeof(int), GFP_KERNEL_ACCOUNT);
-	stack = kvcalloc(env->prog->len, sizeof(int), GFP_KERNEL_ACCOUNT);
+	postorder = kvzalloc_objs(int, env->prog->len, GFP_KERNEL_ACCOUNT);
+	state = kvzalloc_objs(int, env->prog->len, GFP_KERNEL_ACCOUNT);
+	stack = kvzalloc_objs(int, env->prog->len, GFP_KERNEL_ACCOUNT);
 	if (!postorder || !state || !stack) {
 		kvfree(postorder);
 		kvfree(state);
@@ -19147,7 +19149,8 @@ static int check_btf_func(struct bpf_verifier_env *env,
 	urecord = make_bpfptr(attr->func_info, uattr.is_kernel);

 	krecord = prog->aux->func_info;
-	info_aux = kcalloc(nfuncs, sizeof(*info_aux), GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
+	info_aux = kzalloc_objs(*info_aux, nfuncs,
+				GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
 	if (!info_aux)
 		return -ENOMEM;

@@ -19232,8 +19235,8 @@ static int check_btf_line(struct bpf_verifier_env *env,
 	/* Need to zero it in case the userspace may
 	 * pass in a smaller bpf_line_info object.
 	 */
-	linfo = kvcalloc(nr_linfo, sizeof(struct bpf_line_info),
-			 GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
+	linfo = kvzalloc_objs(struct bpf_line_info, nr_linfo,
+			      GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
 	if (!linfo)
 		return -ENOMEM;

@@ -20619,7 +20622,8 @@ static int is_state_visited(struct bpf_verifier_env *env, int insn_idx)
 			if (loop) {
 				struct bpf_scc_backedge *backedge;

-				backedge = kzalloc(sizeof(*backedge), GFP_KERNEL_ACCOUNT);
+				backedge = kzalloc_obj(*backedge,
+						       GFP_KERNEL_ACCOUNT);
 				if (!backedge)
 					return -ENOMEM;
 				err = copy_verifier_state(&backedge->state, cur);
@@ -20683,7 +20687,7 @@ static int is_state_visited(struct bpf_verifier_env *env, int insn_idx)
 	 * When looping the sl->state.branches will be > 0 and this state
 	 * will not be considered for equivalence until branches == 0.
 	 */
-	new_sl = kzalloc(sizeof(struct bpf_verifier_state_list), GFP_KERNEL_ACCOUNT);
+	new_sl = kzalloc_obj(struct bpf_verifier_state_list, GFP_KERNEL_ACCOUNT);
 	if (!new_sl)
 		return -ENOMEM;
 	env->total_states++;
@@ -22765,7 +22769,7 @@ static int jit_subprogs(struct bpf_verifier_env *env)
 		goto out_undo_insn;

 	err = -ENOMEM;
-	func = kcalloc(env->subprog_cnt, sizeof(prog), GFP_KERNEL);
+	func = kzalloc_objs(prog, env->subprog_cnt, GFP_KERNEL);
 	if (!func)
 		goto out_undo_insn;

@@ -24472,14 +24476,14 @@ static int do_check_common(struct bpf_verifier_env *env, int subprog)
 	env->prev_linfo = NULL;
 	env->pass_cnt++;

-	state = kzalloc(sizeof(struct bpf_verifier_state), GFP_KERNEL_ACCOUNT);
+	state = kzalloc_obj(struct bpf_verifier_state, GFP_KERNEL_ACCOUNT);
 	if (!state)
 		return -ENOMEM;
 	state->curframe = 0;
 	state->speculative = false;
 	state->branches = 1;
 	state->in_sleepable = env->prog->sleepable;
-	state->frame[0] = kzalloc(sizeof(struct bpf_func_state), GFP_KERNEL_ACCOUNT);
+	state->frame[0] = kzalloc_obj(struct bpf_func_state, GFP_KERNEL_ACCOUNT);
 	if (!state->frame[0]) {
 		kfree(state);
 		return -ENOMEM;
@@ -25600,7 +25604,7 @@ static int compute_live_registers(struct bpf_verifier_env *env)
 	 * - repeat the computation while {in,out} fields changes for
 	 *   any instruction.
 	 */
-	state = kvcalloc(insn_cnt, sizeof(*state), GFP_KERNEL_ACCOUNT);
+	state = kvzalloc_objs(*state, insn_cnt, GFP_KERNEL_ACCOUNT);
 	if (!state) {
 		err = -ENOMEM;
 		goto out;
@@ -25828,7 +25832,8 @@ static int compute_scc(struct bpf_verifier_env *env)
 			dfs_sz--;
 		}
 	}
-	env->scc_info = kvcalloc(next_scc_id, sizeof(*env->scc_info), GFP_KERNEL_ACCOUNT);
+	env->scc_info = kvzalloc_objs(*env->scc_info, next_scc_id,
+				      GFP_KERNEL_ACCOUNT);
 	if (!env->scc_info) {
 		err = -ENOMEM;
 		goto exit;
@@ -25859,7 +25864,7 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, bpfptr_t uattr, __u3
 	/* 'struct bpf_verifier_env' can be global, but since it's not small,
 	 * allocate/free it every time bpf_check() is called
 	 */
-	env = kvzalloc(sizeof(struct bpf_verifier_env), GFP_KERNEL_ACCOUNT);
+	env = kvzalloc_obj(struct bpf_verifier_env, GFP_KERNEL_ACCOUNT);
 	if (!env)
 		return -ENOMEM;

@@ -25923,9 +25928,9 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, bpfptr_t uattr, __u3
 		env->test_state_freq = attr->prog_flags & BPF_F_TEST_STATE_FREQ;
 	env->test_reg_invariants = attr->prog_flags & BPF_F_TEST_REG_INVARIANTS;

-	env->explored_states = kvcalloc(state_htab_size(env),
-				       sizeof(struct list_head),
-				       GFP_KERNEL_ACCOUNT);
+	env->explored_states = kvzalloc_objs(struct list_head,
+					     state_htab_size(env),
+					     GFP_KERNEL_ACCOUNT);
 	ret = -ENOMEM;
 	if (!env->explored_states)
 		goto skip_full_check;
@@ -26062,9 +26067,9 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, bpfptr_t uattr, __u3

 	if (env->used_map_cnt) {
 		/* if program passed verifier, update used_maps in bpf_prog_info */
-		env->prog->aux->used_maps = kmalloc_array(env->used_map_cnt,
-							  sizeof(env->used_maps[0]),
-							  GFP_KERNEL_ACCOUNT);
+		env->prog->aux->used_maps = kmalloc_objs(env->used_maps[0],
+							 env->used_map_cnt,
+							 GFP_KERNEL_ACCOUNT);

 		if (!env->prog->aux->used_maps) {
 			ret = -ENOMEM;
@@ -26077,9 +26082,9 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, bpfptr_t uattr, __u3
 	}
 	if (env->used_btf_cnt) {
 		/* if program passed verifier, update used_btfs in bpf_prog_aux */
-		env->prog->aux->used_btfs = kmalloc_array(env->used_btf_cnt,
-							  sizeof(env->used_btfs[0]),
-							  GFP_KERNEL_ACCOUNT);
+		env->prog->aux->used_btfs = kmalloc_objs(env->used_btfs[0],
+							 env->used_btf_cnt,
+							 GFP_KERNEL_ACCOUNT);
 		if (!env->prog->aux->used_btfs) {
 			ret = -ENOMEM;
 			goto err_release_maps;
diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index 724950c4b690..0449b062dd1c 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -317,7 +317,7 @@ static struct cgroup_pidlist *cgroup_pidlist_find_create(struct cgroup *cgrp,
 		return l;

 	/* entry not found; create a new one */
-	l = kzalloc(sizeof(struct cgroup_pidlist), GFP_KERNEL);
+	l = kzalloc_obj(struct cgroup_pidlist, GFP_KERNEL);
 	if (!l)
 		return l;

@@ -352,7 +352,7 @@ static int pidlist_array_load(struct cgroup *cgrp, enum cgroup_filetype type,
 	 * show up until sometime later on.
 	 */
 	length = cgroup_task_count(cgrp);
-	array = kvmalloc_array(length, sizeof(pid_t), GFP_KERNEL);
+	array = kvmalloc_objs(pid_t, length, GFP_KERNEL);
 	if (!array)
 		return -ENOMEM;
 	/* now, populate the array */
@@ -1237,7 +1237,7 @@ static int cgroup1_root_to_use(struct fs_context *fc)
 	if (ctx->ns != &init_cgroup_ns)
 		return -EPERM;

-	root = kzalloc(sizeof(*root), GFP_KERNEL);
+	root = kzalloc_obj(*root, GFP_KERNEL);
 	if (!root)
 		return -ENOMEM;

diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 8af4351536cf..7d220276d019 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -1168,7 +1168,7 @@ static int allocate_cgrp_cset_links(int count, struct list_head *tmp_links)
 	INIT_LIST_HEAD(tmp_links);

 	for (i = 0; i < count; i++) {
-		link = kzalloc(sizeof(*link), GFP_KERNEL);
+		link = kzalloc_obj(*link, GFP_KERNEL);
 		if (!link) {
 			free_cgrp_cset_links(tmp_links);
 			return -ENOMEM;
@@ -1241,7 +1241,7 @@ static struct css_set *find_css_set(struct css_set *old_cset,
 	if (cset)
 		return cset;

-	cset = kzalloc(sizeof(*cset), GFP_KERNEL);
+	cset = kzalloc_obj(*cset, GFP_KERNEL);
 	if (!cset)
 		return NULL;

@@ -2350,7 +2350,7 @@ static int cgroup_init_fs_context(struct fs_context *fc)
 {
 	struct cgroup_fs_context *ctx;

-	ctx = kzalloc(sizeof(struct cgroup_fs_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct cgroup_fs_context, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -4251,7 +4251,7 @@ static int cgroup_file_open(struct kernfs_open_file *of)
 	struct cgroup_file_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

@@ -5844,7 +5844,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name,
 	int ret;

 	/* allocate the cgroup and its ID, 0 is reserved for the root */
-	cgrp = kzalloc(struct_size(cgrp, _low_ancestors, level), GFP_KERNEL);
+	cgrp = kzalloc_flex(*cgrp, _low_ancestors, level, GFP_KERNEL);
 	if (!cgrp)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/cgroup/cpuset-v1.c b/kernel/cgroup/cpuset-v1.c
index 7a23b9e8778f..8e7ffc205c3b 100644
--- a/kernel/cgroup/cpuset-v1.c
+++ b/kernel/cgroup/cpuset-v1.c
@@ -316,7 +316,7 @@ void cpuset1_hotplug_update_tasks(struct cpuset *cs,
 	    css_tryget_online(&cs->css)) {
 		struct cpuset_remove_tasks_struct *s;

-		s = kzalloc(sizeof(*s), GFP_KERNEL);
+		s = kzalloc_obj(*s, GFP_KERNEL);
 		if (WARN_ON_ONCE(!s)) {
 			css_put(&cs->css);
 			return;
@@ -653,7 +653,7 @@ int cpuset1_generate_sched_domains(cpumask_var_t **domains,
 		if (!doms)
 			goto done;

-		dattr = kmalloc(sizeof(struct sched_domain_attr), GFP_KERNEL);
+		dattr = kmalloc_obj(struct sched_domain_attr, GFP_KERNEL);
 		if (dattr) {
 			*dattr = SD_ATTR_INIT;
 			update_domain_attr_tree(dattr, &top_cpuset);
@@ -664,7 +664,7 @@ int cpuset1_generate_sched_domains(cpumask_var_t **domains,
 		goto done;
 	}

-	csa = kmalloc_array(nr_cpusets(), sizeof(cp), GFP_KERNEL);
+	csa = kmalloc_objs(cp, nr_cpusets(), GFP_KERNEL);
 	if (!csa)
 		goto done;
 	csn = 0;
@@ -727,8 +727,7 @@ int cpuset1_generate_sched_domains(cpumask_var_t **domains,
 	 * The rest of the code, including the scheduler, can deal with
 	 * dattr==NULL case. No need to abort if alloc fails.
 	 */
-	dattr = kmalloc_array(ndoms, sizeof(struct sched_domain_attr),
-			      GFP_KERNEL);
+	dattr = kmalloc_objs(struct sched_domain_attr, ndoms, GFP_KERNEL);

 	for (nslot = 0, i = 0; i < csn; i++) {
 		nslot_update = 0;
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index 7607dfe516e6..384d9d6e323b 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -536,7 +536,7 @@ static struct cpuset *dup_or_alloc_cpuset(struct cpuset *cs)

 	/* Allocate base structure */
 	trial = cs ? kmemdup(cs, sizeof(*cs), GFP_KERNEL) :
-		     kzalloc(sizeof(*cs), GFP_KERNEL);
+		     kzalloc_obj(*cs, GFP_KERNEL);
 	if (!trial)
 		return NULL;

@@ -791,7 +791,7 @@ static int generate_sched_domains(cpumask_var_t **domains,
 		goto generate_doms;
 	}

-	csa = kmalloc_array(nr_cpusets(), sizeof(cp), GFP_KERNEL);
+	csa = kmalloc_objs(cp, nr_cpusets(), GFP_KERNEL);
 	if (!csa)
 		goto done;

@@ -835,8 +835,7 @@ static int generate_sched_domains(cpumask_var_t **domains,
 	 * The rest of the code, including the scheduler, can deal with
 	 * dattr==NULL case. No need to abort if alloc fails.
 	 */
-	dattr = kmalloc_array(ndoms, sizeof(struct sched_domain_attr),
-			      GFP_KERNEL);
+	dattr = kmalloc_objs(struct sched_domain_attr, ndoms, GFP_KERNEL);

 	/*
 	 * Cgroup v2 doesn't support domain attributes, just set all of them
@@ -2479,7 +2478,7 @@ static void cpuset_migrate_mm(struct mm_struct *mm, const nodemask_t *from,
 		return;
 	}

-	mwork = kzalloc(sizeof(*mwork), GFP_KERNEL);
+	mwork = kzalloc_obj(*mwork, GFP_KERNEL);
 	if (mwork) {
 		mwork->mm = mm;
 		mwork->from = *from;
@@ -2501,7 +2500,7 @@ static void schedule_flush_migrate_mm(void)
 {
 	struct callback_head *flush_cb;

-	flush_cb = kzalloc(sizeof(struct callback_head), GFP_KERNEL);
+	flush_cb = kzalloc_obj(struct callback_head, GFP_KERNEL);
 	if (!flush_cb)
 		return;

diff --git a/kernel/cgroup/debug.c b/kernel/cgroup/debug.c
index a5490097fe52..78429dd9e9c6 100644
--- a/kernel/cgroup/debug.c
+++ b/kernel/cgroup/debug.c
@@ -14,7 +14,7 @@
 static struct cgroup_subsys_state *
 debug_css_alloc(struct cgroup_subsys_state *parent_css)
 {
-	struct cgroup_subsys_state *css = kzalloc(sizeof(*css), GFP_KERNEL);
+	struct cgroup_subsys_state *css = kzalloc_obj(*css, GFP_KERNEL);

 	if (!css)
 		return ERR_PTR(-ENOMEM);
diff --git a/kernel/cgroup/dmem.c b/kernel/cgroup/dmem.c
index 1ea6afffa985..0c8c0a135231 100644
--- a/kernel/cgroup/dmem.c
+++ b/kernel/cgroup/dmem.c
@@ -222,7 +222,7 @@ static void dmemcs_free(struct cgroup_subsys_state *css)
 static struct cgroup_subsys_state *
 dmemcs_alloc(struct cgroup_subsys_state *parent_css)
 {
-	struct dmemcg_state *dmemcs = kzalloc(sizeof(*dmemcs), GFP_KERNEL);
+	struct dmemcg_state *dmemcs = kzalloc_obj(*dmemcs, GFP_KERNEL);
 	if (!dmemcs)
 		return ERR_PTR(-ENOMEM);

@@ -359,7 +359,7 @@ alloc_pool_single(struct dmemcg_state *dmemcs, struct dmem_cgroup_region *region
 	struct dmem_cgroup_pool_state *pool, *ppool = NULL;

 	if (!*allocpool) {
-		pool = kzalloc(sizeof(*pool), GFP_NOWAIT);
+		pool = kzalloc_obj(*pool, GFP_NOWAIT);
 		if (!pool)
 			return ERR_PTR(-ENOMEM);
 	} else {
@@ -521,7 +521,7 @@ struct dmem_cgroup_region *dmem_cgroup_register_region(u64 size, const char *fmt
 	if (!region_name)
 		return ERR_PTR(-ENOMEM);

-	ret = kzalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kzalloc_obj(*ret, GFP_KERNEL);
 	if (!ret) {
 		kfree(region_name);
 		return ERR_PTR(-ENOMEM);
@@ -597,7 +597,7 @@ get_cg_pool_unlocked(struct dmemcg_state *cg, struct dmem_cgroup_region *region)
 			if (WARN_ON(allocpool))
 				continue;

-			allocpool = kzalloc(sizeof(*allocpool), GFP_KERNEL);
+			allocpool = kzalloc_obj(*allocpool, GFP_KERNEL);
 			if (allocpool) {
 				pool = NULL;
 				continue;
diff --git a/kernel/cgroup/legacy_freezer.c b/kernel/cgroup/legacy_freezer.c
index 817c33450fee..85344b107873 100644
--- a/kernel/cgroup/legacy_freezer.c
+++ b/kernel/cgroup/legacy_freezer.c
@@ -81,7 +81,7 @@ freezer_css_alloc(struct cgroup_subsys_state *parent_css)
 {
 	struct freezer *freezer;

-	freezer = kzalloc(sizeof(struct freezer), GFP_KERNEL);
+	freezer = kzalloc_obj(struct freezer, GFP_KERNEL);
 	if (!freezer)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/cgroup/misc.c b/kernel/cgroup/misc.c
index 6a01d91ea4cb..7c3ae3a76c8d 100644
--- a/kernel/cgroup/misc.c
+++ b/kernel/cgroup/misc.c
@@ -445,7 +445,7 @@ misc_cg_alloc(struct cgroup_subsys_state *parent_css)
 	if (!parent_css) {
 		cg = &root_cg;
 	} else {
-		cg = kzalloc(sizeof(*cg), GFP_KERNEL);
+		cg = kzalloc_obj(*cg, GFP_KERNEL);
 		if (!cg)
 			return ERR_PTR(-ENOMEM);
 	}
diff --git a/kernel/cgroup/namespace.c b/kernel/cgroup/namespace.c
index db9617556dd7..ea4ee13936be 100644
--- a/kernel/cgroup/namespace.c
+++ b/kernel/cgroup/namespace.c
@@ -24,7 +24,7 @@ static struct cgroup_namespace *alloc_cgroup_ns(void)
 	struct cgroup_namespace *new_ns __free(kfree) = NULL;
 	int ret;

-	new_ns = kzalloc(sizeof(struct cgroup_namespace), GFP_KERNEL_ACCOUNT);
+	new_ns = kzalloc_obj(struct cgroup_namespace, GFP_KERNEL_ACCOUNT);
 	if (!new_ns)
 		return ERR_PTR(-ENOMEM);
 	ret = ns_common_init(new_ns);
diff --git a/kernel/cgroup/pids.c b/kernel/cgroup/pids.c
index 8f61114c36dd..6221573fc6ad 100644
--- a/kernel/cgroup/pids.c
+++ b/kernel/cgroup/pids.c
@@ -80,7 +80,7 @@ pids_css_alloc(struct cgroup_subsys_state *parent)
 {
 	struct pids_cgroup *pids;

-	pids = kzalloc(sizeof(struct pids_cgroup), GFP_KERNEL);
+	pids = kzalloc_obj(struct pids_cgroup, GFP_KERNEL);
 	if (!pids)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/cgroup/rdma.c b/kernel/cgroup/rdma.c
index ef5878fb2005..9d3693574b11 100644
--- a/kernel/cgroup/rdma.c
+++ b/kernel/cgroup/rdma.c
@@ -134,7 +134,7 @@ get_cg_rpool_locked(struct rdma_cgroup *cg, struct rdmacg_device *device)
 	if (rpool)
 		return rpool;

-	rpool = kzalloc(sizeof(*rpool), GFP_KERNEL);
+	rpool = kzalloc_obj(*rpool, GFP_KERNEL);
 	if (!rpool)
 		return ERR_PTR(-ENOMEM);

@@ -443,7 +443,7 @@ static ssize_t rdmacg_resource_set_max(struct kernfs_open_file *of,
 		goto err;
 	}

-	new_limits = kcalloc(RDMACG_RESOURCE_MAX, sizeof(int), GFP_KERNEL);
+	new_limits = kzalloc_objs(int, RDMACG_RESOURCE_MAX, GFP_KERNEL);
 	if (!new_limits) {
 		ret = -ENOMEM;
 		goto err;
@@ -566,7 +566,7 @@ rdmacg_css_alloc(struct cgroup_subsys_state *parent)
 {
 	struct rdma_cgroup *cg;

-	cg = kzalloc(sizeof(*cg), GFP_KERNEL);
+	cg = kzalloc_obj(*cg, GFP_KERNEL);
 	if (!cg)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/crash_core.c b/kernel/crash_core.c
index 3952b3e102e0..2146ca0f0ed8 100644
--- a/kernel/crash_core.c
+++ b/kernel/crash_core.c
@@ -368,7 +368,7 @@ static int __crash_shrink_memory(struct resource *old_res,
 {
 	struct resource *ram_res;

-	ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL);
+	ram_res = kzalloc_obj(*ram_res, GFP_KERNEL);
 	if (!ram_res)
 		return -ENOMEM;

diff --git a/kernel/crash_dump_dm_crypt.c b/kernel/crash_dump_dm_crypt.c
index 37129243054d..13191d7c7a32 100644
--- a/kernel/crash_dump_dm_crypt.c
+++ b/kernel/crash_dump_dm_crypt.c
@@ -252,7 +252,7 @@ static struct config_item *config_keys_make_item(struct config_group *group,
 		return ERR_PTR(-EINVAL);
 	}

-	config_key = kzalloc(sizeof(struct config_key), GFP_KERNEL);
+	config_key = kzalloc_obj(struct config_key, GFP_KERNEL);
 	if (!config_key)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
index 314787fb8ce7..ddce56b47b25 100644
--- a/kernel/debug/kdb/kdb_main.c
+++ b/kernel/debug/kdb/kdb_main.c
@@ -661,7 +661,7 @@ static int kdb_defcmd2(const char *cmdstr, const char *argv0)
 		return 0;
 	}

-	kms = kmalloc(sizeof(*kms), GFP_KDB);
+	kms = kmalloc_obj(*kms, GFP_KDB);
 	if (!kms) {
 		kdb_printf("Could not allocate new kdb macro command: %s\n",
 			   cmdstr);
@@ -707,7 +707,7 @@ static int kdb_defcmd(int argc, const char **argv)
 		kdb_printf("Command only available during kdb_init()\n");
 		return KDB_NOTIMP;
 	}
-	kdb_macro = kzalloc(sizeof(*kdb_macro), GFP_KDB);
+	kdb_macro = kzalloc_obj(*kdb_macro, GFP_KDB);
 	if (!kdb_macro)
 		goto fail_defcmd;

diff --git a/kernel/dma/coherent.c b/kernel/dma/coherent.c
index 77c8d9487a9a..d580ab6d2e33 100644
--- a/kernel/dma/coherent.c
+++ b/kernel/dma/coherent.c
@@ -49,7 +49,7 @@ static struct dma_coherent_mem *dma_init_coherent_memory(phys_addr_t phys_addr,
 	if (!mem_base)
 		return ERR_PTR(-EINVAL);

-	dma_mem = kzalloc(sizeof(struct dma_coherent_mem), GFP_KERNEL);
+	dma_mem = kzalloc_obj(struct dma_coherent_mem, GFP_KERNEL);
 	if (!dma_mem)
 		goto out_unmap_membase;
 	dma_mem->bitmap = bitmap_zalloc(pages, GFP_KERNEL);
diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
index 43d6a996d7a7..3be263d7afd6 100644
--- a/kernel/dma/debug.c
+++ b/kernel/dma/debug.c
@@ -900,7 +900,7 @@ void dma_debug_add_bus(const struct bus_type *bus)
 	if (dma_debug_disabled())
 		return;

-	nb = kzalloc(sizeof(struct notifier_block), GFP_KERNEL);
+	nb = kzalloc_obj(struct notifier_block, GFP_KERNEL);
 	if (nb == NULL) {
 		pr_err("dma_debug_add_bus: out of memory\n");
 		return;
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index c9fa983990cd..280ec952c5e1 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -654,7 +654,7 @@ int dma_direct_set_offset(struct device *dev, phys_addr_t cpu_start,
 	if (!offset)
 		return 0;

-	map = kcalloc(2, sizeof(*map), GFP_KERNEL);
+	map = kzalloc_objs(*map, 2, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;
 	map[0].cpu_start = cpu_start;
diff --git a/kernel/dma/map_benchmark.c b/kernel/dma/map_benchmark.c
index 794041a39e65..48ab3d957960 100644
--- a/kernel/dma/map_benchmark.c
+++ b/kernel/dma/map_benchmark.c
@@ -121,7 +121,7 @@ static int do_map_benchmark(struct map_benchmark_data *map)
 	int ret = 0;
 	int i;

-	tsk = kmalloc_array(threads, sizeof(*tsk), GFP_KERNEL);
+	tsk = kmalloc_objs(*tsk, threads, GFP_KERNEL);
 	if (!tsk)
 		return -ENOMEM;

diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index ee29c47781e3..3928a509c44c 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -768,7 +768,7 @@ static struct sg_table *alloc_single_sgt(struct device *dev, size_t size,
 	struct sg_table *sgt;
 	struct page *page;

-	sgt = kmalloc(sizeof(*sgt), gfp);
+	sgt = kmalloc_obj(*sgt, gfp);
 	if (!sgt)
 		return NULL;
 	if (sg_alloc_table(sgt, 1, gfp))
diff --git a/kernel/dma/remap.c b/kernel/dma/remap.c
index b7c1c0c92d0c..b53e66417e5f 100644
--- a/kernel/dma/remap.c
+++ b/kernel/dma/remap.c
@@ -45,7 +45,7 @@ void *dma_common_contiguous_remap(struct page *page, size_t size,
 	void *vaddr;
 	int i;

-	pages = kvmalloc_array(count, sizeof(struct page *), GFP_KERNEL);
+	pages = kvmalloc_objs(struct page *, count, GFP_KERNEL);
 	if (!pages)
 		return NULL;
 	for (i = 0; i < count; i++)
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index a547c7693135..cb8efc059e6a 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -1809,19 +1809,18 @@ static int rmem_swiotlb_device_init(struct reserved_mem *rmem,
 	if (!mem) {
 		struct io_tlb_pool *pool;

-		mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+		mem = kzalloc_obj(*mem, GFP_KERNEL);
 		if (!mem)
 			return -ENOMEM;
 		pool = &mem->defpool;

-		pool->slots = kcalloc(nslabs, sizeof(*pool->slots), GFP_KERNEL);
+		pool->slots = kzalloc_objs(*pool->slots, nslabs, GFP_KERNEL);
 		if (!pool->slots) {
 			kfree(mem);
 			return -ENOMEM;
 		}

-		pool->areas = kcalloc(nareas, sizeof(*pool->areas),
-				GFP_KERNEL);
+		pool->areas = kzalloc_objs(*pool->areas, nareas, GFP_KERNEL);
 		if (!pool->areas) {
 			kfree(pool->slots);
 			kfree(mem);
diff --git a/kernel/events/core.c b/kernel/events/core.c
index e18119f30c29..33c84a605799 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -5058,7 +5058,7 @@ alloc_perf_context(struct task_struct *task)
 {
 	struct perf_event_context *ctx;

-	ctx = kzalloc(sizeof(struct perf_event_context), GFP_KERNEL);
+	ctx = kzalloc_obj(struct perf_event_context, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

@@ -5198,7 +5198,7 @@ find_get_pmu_context(struct pmu *pmu, struct perf_event_context *ctx,
 		return epc;
 	}

-	new = kzalloc(sizeof(*epc), GFP_KERNEL);
+	new = kzalloc_obj(*epc, GFP_KERNEL);
 	if (!new)
 		return ERR_PTR(-ENOMEM);

@@ -5374,7 +5374,7 @@ alloc_perf_ctx_data(struct kmem_cache *ctx_cache, bool global)
 {
 	struct perf_ctx_data *cd;

-	cd = kzalloc(sizeof(*cd), GFP_KERNEL);
+	cd = kzalloc_obj(*cd, GFP_KERNEL);
 	if (!cd)
 		return NULL;

@@ -11111,7 +11111,7 @@ static int swevent_hlist_get_cpu(int cpu)
 	    cpumask_test_cpu(cpu, perf_online_mask)) {
 		struct swevent_hlist *hlist;

-		hlist = kzalloc(sizeof(*hlist), GFP_KERNEL);
+		hlist = kzalloc_obj(*hlist, GFP_KERNEL);
 		if (!hlist) {
 			err = -ENOMEM;
 			goto exit;
@@ -12634,7 +12634,7 @@ static int pmu_dev_alloc(struct pmu *pmu)
 {
 	int ret = -ENOMEM;

-	pmu->dev = kzalloc(sizeof(struct device), GFP_KERNEL);
+	pmu->dev = kzalloc_obj(struct device, GFP_KERNEL);
 	if (!pmu->dev)
 		goto out;

@@ -15269,7 +15269,7 @@ perf_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
 {
 	struct perf_cgroup *jc;

-	jc = kzalloc(sizeof(*jc), GFP_KERNEL);
+	jc = kzalloc_obj(*jc, GFP_KERNEL);
 	if (!jc)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c
index 8ec2cb688903..6c44fbdcfa4d 100644
--- a/kernel/events/hw_breakpoint.c
+++ b/kernel/events/hw_breakpoint.c
@@ -185,7 +185,8 @@ static inline int hw_breakpoint_slots_cached(int type)
 static __init bool
 bp_slots_histogram_alloc(struct bp_slots_histogram *hist, enum bp_type_idx type)
 {
-	hist->count = kcalloc(hw_breakpoint_slots_cached(type), sizeof(*hist->count), GFP_KERNEL);
+	hist->count = kzalloc_objs(*hist->count,
+				   hw_breakpoint_slots_cached(type), GFP_KERNEL);
 	return hist->count;
 }

diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
index 424ef2235b07..d39dcc19d21e 100644
--- a/kernel/events/uprobes.c
+++ b/kernel/events/uprobes.c
@@ -238,7 +238,7 @@ static int delayed_uprobe_add(struct uprobe *uprobe, struct mm_struct *mm)
 	if (delayed_uprobe_check(uprobe, mm))
 		return 0;

-	du  = kzalloc(sizeof(*du), GFP_KERNEL);
+	du = kzalloc_obj(*du, GFP_KERNEL);
 	if (!du)
 		return -ENOMEM;

@@ -994,7 +994,7 @@ static struct uprobe *alloc_uprobe(struct inode *inode, loff_t offset,
 {
 	struct uprobe *uprobe, *cur_uprobe;

-	uprobe = kzalloc(sizeof(struct uprobe), GFP_KERNEL);
+	uprobe = kzalloc_obj(struct uprobe, GFP_KERNEL);
 	if (!uprobe)
 		return ERR_PTR(-ENOMEM);

@@ -1219,8 +1219,8 @@ build_map_info(struct address_space *mapping, loff_t offset, bool is_register)
 			 * Needs GFP_NOWAIT to avoid i_mmap_rwsem recursion through
 			 * reclaim. This is optimistic, no harm done if it fails.
 			 */
-			prev = kmalloc(sizeof(struct map_info),
-					GFP_NOWAIT | __GFP_NOMEMALLOC);
+			prev = kmalloc_obj(struct map_info,
+					   GFP_NOWAIT | __GFP_NOMEMALLOC);
 			if (prev)
 				prev->next = NULL;
 		}
@@ -1252,7 +1252,7 @@ build_map_info(struct address_space *mapping, loff_t offset, bool is_register)
 	}

 	do {
-		info = kmalloc(sizeof(struct map_info), GFP_KERNEL);
+		info = kmalloc_obj(struct map_info, GFP_KERNEL);
 		if (!info) {
 			curr = ERR_PTR(-ENOMEM);
 			goto out;
@@ -1755,7 +1755,7 @@ static struct xol_area *__create_xol_area(unsigned long vaddr)
 	struct xol_area *area;
 	void *insns;

-	area = kzalloc(sizeof(*area), GFP_KERNEL);
+	area = kzalloc_obj(*area, GFP_KERNEL);
 	if (unlikely(!area))
 		goto out;

@@ -2069,7 +2069,7 @@ static struct uprobe_task *alloc_utask(void)
 {
 	struct uprobe_task *utask;

-	utask = kzalloc(sizeof(*utask), GFP_KERNEL);
+	utask = kzalloc_obj(*utask, GFP_KERNEL);
 	if (!utask)
 		return NULL;

@@ -2102,7 +2102,7 @@ static struct return_instance *alloc_return_instance(struct uprobe_task *utask)
 	if (ri)
 		return ri;

-	ri = kzalloc(sizeof(*ri), GFP_KERNEL);
+	ri = kzalloc_obj(*ri, GFP_KERNEL);
 	if (!ri)
 		return ZERO_SIZE_PTR;

diff --git a/kernel/fail_function.c b/kernel/fail_function.c
index d971a0189319..18993fcbdbda 100644
--- a/kernel/fail_function.c
+++ b/kernel/fail_function.c
@@ -57,7 +57,7 @@ static struct fei_attr *fei_attr_new(const char *sym, unsigned long addr)
 {
 	struct fei_attr *attr;

-	attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	attr = kzalloc_obj(*attr, GFP_KERNEL);
 	if (attr) {
 		attr->kp.symbol_name = kstrdup(sym, GFP_KERNEL);
 		if (!attr->kp.symbol_name) {
diff --git a/kernel/futex/pi.c b/kernel/futex/pi.c
index dacb2330f1fb..a73b6c713d83 100644
--- a/kernel/futex/pi.c
+++ b/kernel/futex/pi.c
@@ -17,7 +17,7 @@ int refill_pi_state_cache(void)
 	if (likely(current->pi_state_cache))
 		return 0;

-	pi_state = kzalloc(sizeof(*pi_state), GFP_KERNEL);
+	pi_state = kzalloc_obj(*pi_state, GFP_KERNEL);

 	if (!pi_state)
 		return -ENOMEM;
diff --git a/kernel/futex/syscalls.c b/kernel/futex/syscalls.c
index 880c9bf2f315..aec0495adabe 100644
--- a/kernel/futex/syscalls.c
+++ b/kernel/futex/syscalls.c
@@ -333,7 +333,7 @@ SYSCALL_DEFINE5(futex_waitv, struct futex_waitv __user *, waiters,
 	if (timeout && (ret = futex2_setup_timeout(timeout, clockid, &to)))
 		return ret;

-	futexv = kcalloc(nr_futexes, sizeof(*futexv), GFP_KERNEL);
+	futexv = kzalloc_objs(*futexv, nr_futexes, GFP_KERNEL);
 	if (!futexv) {
 		ret = -ENOMEM;
 		goto destroy_timer;
diff --git a/kernel/gcov/clang.c b/kernel/gcov/clang.c
index 8b888a6193cc..4cfdeb2c9dc2 100644
--- a/kernel/gcov/clang.c
+++ b/kernel/gcov/clang.c
@@ -81,7 +81,7 @@ static LIST_HEAD(clang_gcov_list);

 void llvm_gcov_init(llvm_gcov_callback writeout, llvm_gcov_callback flush)
 {
-	struct gcov_info *info = kzalloc(sizeof(*info), GFP_KERNEL);
+	struct gcov_info *info = kzalloc_obj(*info, GFP_KERNEL);

 	if (!info)
 		return;
@@ -112,7 +112,7 @@ EXPORT_SYMBOL(llvm_gcda_start_file);

 void llvm_gcda_emit_function(u32 ident, u32 func_checksum, u32 cfg_checksum)
 {
-	struct gcov_fn_info *info = kzalloc(sizeof(*info), GFP_KERNEL);
+	struct gcov_fn_info *info = kzalloc_obj(*info, GFP_KERNEL);

 	if (!info)
 		return;
diff --git a/kernel/gcov/fs.c b/kernel/gcov/fs.c
index 01520689b57c..8430f5cd21b6 100644
--- a/kernel/gcov/fs.c
+++ b/kernel/gcov/fs.c
@@ -116,7 +116,7 @@ static struct gcov_iterator *gcov_iter_new(struct gcov_info *info)
 	/* Dry-run to get the actual buffer size. */
 	size = convert_to_gcda(NULL, info);

-	iter = kvmalloc(struct_size(iter, buffer, size), GFP_KERNEL);
+	iter = kvmalloc_flex(*iter, buffer, size, GFP_KERNEL);
 	if (!iter)
 		return NULL;

@@ -482,7 +482,7 @@ static void add_links(struct gcov_node *node, struct dentry *parent)

 	for (num = 0; gcov_link[num].ext; num++)
 		/* Nothing. */;
-	node->links = kcalloc(num, sizeof(struct dentry *), GFP_KERNEL);
+	node->links = kzalloc_objs(struct dentry *, num, GFP_KERNEL);
 	if (!node->links)
 		return;
 	for (i = 0; i < num; i++) {
@@ -545,8 +545,8 @@ static struct gcov_node *new_node(struct gcov_node *parent,
 	if (!node)
 		goto err_nomem;
 	if (info) {
-		node->loaded_info = kcalloc(1, sizeof(struct gcov_info *),
-					   GFP_KERNEL);
+		node->loaded_info = kzalloc_objs(struct gcov_info *, 1,
+						 GFP_KERNEL);
 		if (!node->loaded_info)
 			goto err_nomem;
 	}
@@ -731,7 +731,7 @@ static void add_info(struct gcov_node *node, struct gcov_info *info)
 	 * case the new data set is incompatible, the node only contains
 	 * unloaded data sets and there's not enough memory for the array.
 	 */
-	loaded_info = kcalloc(num + 1, sizeof(struct gcov_info *), GFP_KERNEL);
+	loaded_info = kzalloc_objs(struct gcov_info *, num + 1, GFP_KERNEL);
 	if (!loaded_info) {
 		pr_warn("could not add '%s' (out of memory)\n",
 			gcov_info_filename(info));
diff --git a/kernel/gcov/gcc_4_7.c b/kernel/gcov/gcc_4_7.c
index ffde93d051a4..46dbba7b0efd 100644
--- a/kernel/gcov/gcc_4_7.c
+++ b/kernel/gcov/gcc_4_7.c
@@ -298,8 +298,8 @@ struct gcov_info *gcov_info_dup(struct gcov_info *info)
 	if (!dup->filename)
 		goto err_free;

-	dup->functions = kcalloc(info->n_functions,
-				 sizeof(struct gcov_fn_info *), GFP_KERNEL);
+	dup->functions = kzalloc_objs(struct gcov_fn_info *, info->n_functions,
+				      GFP_KERNEL);
 	if (!dup->functions)
 		goto err_free;

diff --git a/kernel/groups.c b/kernel/groups.c
index 9b43da22647d..b5e3be6a6b1f 100644
--- a/kernel/groups.c
+++ b/kernel/groups.c
@@ -15,7 +15,7 @@
 struct group_info *groups_alloc(int gidsetsize)
 {
 	struct group_info *gi;
-	gi = kvmalloc(struct_size(gi, gid, gidsetsize), GFP_KERNEL_ACCOUNT);
+	gi = kvmalloc_flex(*gi, gid, gidsetsize, GFP_KERNEL_ACCOUNT);
 	if (!gi)
 		return NULL;

diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c
index 4013e6ad2b2f..cf6729888ee3 100644
--- a/kernel/irq/affinity.c
+++ b/kernel/irq/affinity.c
@@ -56,7 +56,7 @@ irq_create_affinity_masks(unsigned int nvecs, struct irq_affinity *affd)
 	if (!affvecs)
 		return NULL;

-	masks = kcalloc(nvecs, sizeof(*masks), GFP_KERNEL);
+	masks = kzalloc_objs(*masks, nvecs, GFP_KERNEL);
 	if (!masks)
 		return NULL;

diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c
index 3cd0c40282c0..da1da1a4b2d0 100644
--- a/kernel/irq/generic-chip.c
+++ b/kernel/irq/generic-chip.c
@@ -240,7 +240,7 @@ irq_alloc_generic_chip(const char *name, int num_ct, unsigned int irq_base,
 {
 	struct irq_chip_generic *gc;

-	gc = kzalloc(struct_size(gc, chip_types, num_ct), GFP_KERNEL);
+	gc = kzalloc_flex(*gc, chip_types, num_ct, GFP_KERNEL);
 	if (gc) {
 		irq_init_generic_chip(gc, name, num_ct, irq_base, reg_base,
 				      handler);
diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c
index ae4c9cbd1b4b..59b84a10465c 100644
--- a/kernel/irq/irq_sim.c
+++ b/kernel/irq/irq_sim.c
@@ -148,7 +148,7 @@ static int irq_sim_domain_map(struct irq_domain *domain,
 	struct irq_sim_work_ctx *work_ctx = domain->host_data;
 	struct irq_sim_irq_ctx *irq_ctx;

-	irq_ctx = kzalloc(sizeof(*irq_ctx), GFP_KERNEL);
+	irq_ctx = kzalloc_obj(*irq_ctx, GFP_KERNEL);
 	if (!irq_ctx)
 		return -ENOMEM;

@@ -202,7 +202,7 @@ struct irq_domain *irq_domain_create_sim_full(struct fwnode_handle *fwnode,
 					      void *data)
 {
 	struct irq_sim_work_ctx *work_ctx __free(kfree) =
-				kzalloc(sizeof(*work_ctx), GFP_KERNEL);
+				kzalloc_obj(*work_ctx, GFP_KERNEL);

 	if (!work_ctx)
 		return ERR_PTR(-ENOMEM);
diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
index 022b3741dd7a..ddc9d01b3091 100644
--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -969,7 +969,7 @@ int irq_set_percpu_devid(unsigned int irq)
 	if (!desc || desc->percpu_enabled)
 		return -EINVAL;

-	desc->percpu_enabled = kzalloc(sizeof(*desc->percpu_enabled), GFP_KERNEL);
+	desc->percpu_enabled = kzalloc_obj(*desc->percpu_enabled, GFP_KERNEL);

 	if (!desc->percpu_enabled)
 		return -ENOMEM;
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index c2258b133939..857fcd74ebda 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -92,7 +92,7 @@ struct fwnode_handle *__irq_domain_alloc_fwnode(unsigned int type, int id,
 	struct irqchip_fwid *fwid;
 	char *n;

-	fwid = kzalloc(sizeof(*fwid), GFP_KERNEL);
+	fwid = kzalloc_obj(*fwid, GFP_KERNEL);

 	switch (type) {
 	case IRQCHIP_FWNODE_NAMED:
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index cded3d960eb7..2b05c45be1b3 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -1332,7 +1332,7 @@ static int irq_setup_forced_threading(struct irqaction *new)
 	 */
 	if (new->handler && new->thread_fn) {
 		/* Allocate the secondary action */
-		new->secondary = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
+		new->secondary = kzalloc_obj(struct irqaction, GFP_KERNEL);
 		if (!new->secondary)
 			return -ENOMEM;
 		new->secondary->handler = irq_forced_secondary_handler;
@@ -2156,7 +2156,7 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler,
 		handler = irq_default_primary_handler;
 	}

-	action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
+	action = kzalloc_obj(struct irqaction, GFP_KERNEL);
 	if (!action)
 		return -ENOMEM;

@@ -2486,7 +2486,7 @@ struct irqaction *create_percpu_irqaction(irq_handler_t handler, unsigned long f
 	if (!affinity)
 		affinity = cpu_possible_mask;

-	action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
+	action = kzalloc_obj(struct irqaction, GFP_KERNEL);
 	if (!action)
 		return NULL;

diff --git a/kernel/irq/matrix.c b/kernel/irq/matrix.c
index a50f2305a8dc..8151c14ca35a 100644
--- a/kernel/irq/matrix.c
+++ b/kernel/irq/matrix.c
@@ -51,7 +51,7 @@ __init struct irq_matrix *irq_alloc_matrix(unsigned int matrix_bits,
 	unsigned int cpu, matrix_size = BITS_TO_LONGS(matrix_bits);
 	struct irq_matrix *m;

-	m = kzalloc(struct_size(m, scratch_map, matrix_size * 2), GFP_KERNEL);
+	m = kzalloc_flex(*m, scratch_map, matrix_size * 2, GFP_KERNEL);
 	if (!m)
 		return NULL;

diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 68886881fe10..e4bae8f1c414 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -76,7 +76,7 @@ static int msi_domain_prepare_irqs(struct irq_domain *domain, struct device *dev
 static struct msi_desc *msi_alloc_desc(struct device *dev, int nvec,
 				       const struct irq_affinity_desc *affinity)
 {
-	struct msi_desc *desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	struct msi_desc *desc = kzalloc_obj(*desc, GFP_KERNEL);

 	if (!desc)
 		return NULL;
@@ -530,7 +530,7 @@ static int msi_sysfs_populate_desc(struct device *dev, struct msi_desc *desc)
 	struct device_attribute *attrs;
 	int ret, i;

-	attrs = kcalloc(desc->nvec_used, sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_objs(*attrs, desc->nvec_used, GFP_KERNEL);
 	if (!attrs)
 		return -ENOMEM;

diff --git a/kernel/kallsyms_selftest.c b/kernel/kallsyms_selftest.c
index 2b082a7e24a2..d2aeb6b7c393 100644
--- a/kernel/kallsyms_selftest.c
+++ b/kernel/kallsyms_selftest.c
@@ -264,7 +264,7 @@ static int test_kallsyms_basic_function(void)
 	char namebuf[KSYM_NAME_LEN];
 	struct test_stat *stat, *stat2;

-	stat = kmalloc_array(2, sizeof(*stat), GFP_KERNEL);
+	stat = kmalloc_objs(*stat, 2, GFP_KERNEL);
 	if (!stat)
 		return -ENOMEM;
 	stat2 = stat + 1;
diff --git a/kernel/kcov.c b/kernel/kcov.c
index 5397d0c14127..b9d4db7ea439 100644
--- a/kernel/kcov.c
+++ b/kernel/kcov.c
@@ -122,7 +122,7 @@ static struct kcov_remote *kcov_remote_add(struct kcov *kcov, u64 handle)

 	if (kcov_remote_find(handle))
 		return ERR_PTR(-EEXIST);
-	remote = kmalloc(sizeof(*remote), GFP_ATOMIC);
+	remote = kmalloc_obj(*remote, GFP_ATOMIC);
 	if (!remote)
 		return ERR_PTR(-ENOMEM);
 	remote->handle = handle;
@@ -527,7 +527,7 @@ static int kcov_open(struct inode *inode, struct file *filep)
 {
 	struct kcov *kcov;

-	kcov = kzalloc(sizeof(*kcov), GFP_KERNEL);
+	kcov = kzalloc_obj(*kcov, GFP_KERNEL);
 	if (!kcov)
 		return -ENOMEM;
 	guard(spinlock_init)(&kcov->lock);
diff --git a/kernel/kcsan/kcsan_test.c b/kernel/kcsan/kcsan_test.c
index 8ef8167be745..edb062fb43b4 100644
--- a/kernel/kcsan/kcsan_test.c
+++ b/kernel/kcsan/kcsan_test.c
@@ -168,7 +168,7 @@ static bool __report_matches(const struct expect_report *r)
 	if (!report_available())
 		return false;

-	expect = kmalloc(sizeof(observed.lines), GFP_KERNEL);
+	expect = kmalloc_obj(observed.lines, GFP_KERNEL);
 	if (WARN_ON(!expect))
 		return false;

@@ -1538,7 +1538,7 @@ static int test_init(struct kunit *test)
 	if (WARN_ON(!nthreads))
 		goto err;

-	threads = kcalloc(nthreads + 1, sizeof(struct task_struct *), GFP_KERNEL);
+	threads = kzalloc_objs(struct task_struct *, nthreads + 1, GFP_KERNEL);
 	if (WARN_ON(!threads))
 		goto err;

diff --git a/kernel/kexec.c b/kernel/kexec.c
index 28008e3d462e..3902e7bb99fe 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -284,8 +284,7 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
 	if ((flags & KEXEC_ARCH_MASK) == KEXEC_ARCH_DEFAULT)
 		return -EINVAL;

-	ksegments = kmalloc_array(nr_segments, sizeof(ksegments[0]),
-			GFP_KERNEL);
+	ksegments = kmalloc_objs(ksegments[0], nr_segments, GFP_KERNEL);
 	if (!ksegments)
 		return -ENOMEM;

diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
index 95c585c6ddc3..76e4287a4f1d 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -231,7 +231,7 @@ struct kimage *do_kimage_alloc_init(void)
 	struct kimage *image;

 	/* Allocate a controlling structure */
-	image = kzalloc(sizeof(*image), GFP_KERNEL);
+	image = kzalloc_obj(*image, GFP_KERNEL);
 	if (!image)
 		return NULL;

@@ -975,7 +975,7 @@ void *kimage_map_segment(struct kimage *image, int idx)
 	 * Collect the source pages and map them in a contiguous VA range.
 	 */
 	npages = PFN_UP(eaddr) - PFN_DOWN(addr);
-	src_pages = kmalloc_array(npages, sizeof(*src_pages), GFP_KERNEL);
+	src_pages = kmalloc_objs(*src_pages, npages, GFP_KERNEL);
 	if (!src_pages) {
 		pr_err("Could not allocate ima pages array.\n");
 		return NULL;
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index e2cd01cf5968..b6744137b11e 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -172,7 +172,7 @@ kprobe_opcode_t *__get_insn_slot(struct kprobe_insn_cache *c)
 	} while (c->nr_garbage && collect_garbage_slots(c) == 0);

 	/* All out of space.  Need to allocate a new page. */
-	kip = kmalloc(struct_size(kip, slot_used, slots_per_page(c)), GFP_KERNEL);
+	kip = kmalloc_flex(*kip, slot_used, slots_per_page(c), GFP_KERNEL);
 	if (!kip)
 		return NULL;

@@ -900,7 +900,7 @@ static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
 {
 	struct optimized_kprobe *op;

-	op = kzalloc(sizeof(struct optimized_kprobe), GFP_KERNEL);
+	op = kzalloc_obj(struct optimized_kprobe, GFP_KERNEL);
 	if (!op)
 		return NULL;

@@ -1117,7 +1117,7 @@ static void free_aggr_kprobe(struct kprobe *p)

 static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)
 {
-	return kzalloc(sizeof(struct kprobe), GFP_KERNEL);
+	return kzalloc_obj(struct kprobe, GFP_KERNEL);
 }
 #endif /* CONFIG_OPTPROBES */

@@ -2295,7 +2295,7 @@ int register_kretprobe(struct kretprobe *rp)
 		rp->rh = NULL;
 	}
 #else	/* !CONFIG_KRETPROBE_ON_RETHOOK */
-	rp->rph = kzalloc(sizeof(struct kretprobe_holder), GFP_KERNEL);
+	rp->rph = kzalloc_obj(struct kretprobe_holder, GFP_KERNEL);
 	if (!rp->rph)
 		return -ENOMEM;

@@ -2499,7 +2499,7 @@ int kprobe_add_ksym_blacklist(unsigned long entry)
 	    !kallsyms_lookup_size_offset(entry, &size, &offset))
 		return -EINVAL;

-	ent = kmalloc(sizeof(*ent), GFP_KERNEL);
+	ent = kmalloc_obj(*ent, GFP_KERNEL);
 	if (!ent)
 		return -ENOMEM;
 	ent->start_addr = entry;
diff --git a/kernel/kthread.c b/kernel/kthread.c
index c9507689e181..0b4f7328096f 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -122,7 +122,7 @@ bool set_kthread_struct(struct task_struct *p)
 	if (WARN_ON_ONCE(to_kthread(p)))
 		return false;

-	kthread = kzalloc(sizeof(*kthread), GFP_KERNEL);
+	kthread = kzalloc_obj(*kthread, GFP_KERNEL);
 	if (!kthread)
 		return false;

@@ -511,8 +511,7 @@ struct task_struct *__kthread_create_on_node(int (*threadfn)(void *data),
 {
 	DECLARE_COMPLETION_ONSTACK(done);
 	struct task_struct *task;
-	struct kthread_create_info *create = kmalloc(sizeof(*create),
-						     GFP_KERNEL);
+	struct kthread_create_info *create = kmalloc_obj(*create, GFP_KERNEL);

 	if (!create)
 		return ERR_PTR(-ENOMEM);
@@ -1084,7 +1083,7 @@ __kthread_create_worker_on_node(unsigned int flags, int node,
 	struct kthread_worker *worker;
 	struct task_struct *task;

-	worker = kzalloc(sizeof(*worker), GFP_KERNEL);
+	worker = kzalloc_obj(*worker, GFP_KERNEL);
 	if (!worker)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index 1acbad2dbfdf..0d52e48918eb 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -525,7 +525,7 @@ static struct klp_object *klp_alloc_object_dynamic(const char *name,
 {
 	struct klp_object *obj;

-	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+	obj = kzalloc_obj(*obj, GFP_KERNEL);
 	if (!obj)
 		return NULL;

@@ -554,7 +554,7 @@ static struct klp_func *klp_alloc_func_nop(struct klp_func *old_func,
 {
 	struct klp_func *func;

-	func = kzalloc(sizeof(*func), GFP_KERNEL);
+	func = kzalloc_obj(*func, GFP_KERNEL);
 	if (!func)
 		return NULL;

diff --git a/kernel/livepatch/patch.c b/kernel/livepatch/patch.c
index 90408500e5a3..1149840cd538 100644
--- a/kernel/livepatch/patch.c
+++ b/kernel/livepatch/patch.c
@@ -179,7 +179,7 @@ static int klp_patch_func(struct klp_func *func)
 			return -EINVAL;
 		}

-		ops = kzalloc(sizeof(*ops), GFP_KERNEL);
+		ops = kzalloc_obj(*ops, GFP_KERNEL);
 		if (!ops)
 			return -ENOMEM;

diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_handover.c
index 95601623b4d6..23d76678d233 100644
--- a/kernel/liveupdate/kexec_handover.c
+++ b/kernel/liveupdate/kexec_handover.c
@@ -187,7 +187,7 @@ static int __kho_preserve_order(struct kho_mem_track *track, unsigned long pfn,
 	if (!physxa) {
 		int err;

-		new_physxa = kzalloc(sizeof(*physxa), GFP_KERNEL);
+		new_physxa = kzalloc_obj(*physxa, GFP_KERNEL);
 		if (!new_physxa)
 			return -ENOMEM;

@@ -1090,7 +1090,7 @@ void *kho_restore_vmalloc(const struct kho_vmalloc *preservation)
 		return NULL;

 	total_pages = preservation->total_pages;
-	pages = kvmalloc_array(total_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kvmalloc_objs(*pages, total_pages, GFP_KERNEL);
 	if (!pages)
 		return NULL;
 	order = preservation->order;
diff --git a/kernel/liveupdate/kexec_handover_debugfs.c b/kernel/liveupdate/kexec_handover_debugfs.c
index 2abbf62ba942..d42fc940d14d 100644
--- a/kernel/liveupdate/kexec_handover_debugfs.c
+++ b/kernel/liveupdate/kexec_handover_debugfs.c
@@ -29,7 +29,7 @@ static int __kho_debugfs_fdt_add(struct list_head *list, struct dentry *dir,
 	struct fdt_debugfs *f;
 	struct dentry *file;

-	f = kmalloc(sizeof(*f), GFP_KERNEL);
+	f = kmalloc_obj(*f, GFP_KERNEL);
 	if (!f)
 		return -ENOMEM;

diff --git a/kernel/liveupdate/luo_file.c b/kernel/liveupdate/luo_file.c
index 4c7df52a6507..ca96edb3b4e5 100644
--- a/kernel/liveupdate/luo_file.c
+++ b/kernel/liveupdate/luo_file.c
@@ -289,7 +289,7 @@ int luo_preserve_file(struct luo_file_set *file_set, u64 token, int fd)
 	if (err)
 		goto err_free_files_mem;

-	luo_file = kzalloc(sizeof(*luo_file), GFP_KERNEL);
+	luo_file = kzalloc_obj(*luo_file, GFP_KERNEL);
 	if (!luo_file) {
 		err = -ENOMEM;
 		goto err_flb_unpreserve;
@@ -780,7 +780,7 @@ int luo_file_deserialize(struct luo_file_set *file_set,
 			return -ENOENT;
 		}

-		luo_file = kzalloc(sizeof(*luo_file), GFP_KERNEL);
+		luo_file = kzalloc_obj(*luo_file, GFP_KERNEL);
 		if (!luo_file)
 			return -ENOMEM;

diff --git a/kernel/liveupdate/luo_flb.c b/kernel/liveupdate/luo_flb.c
index 4c437de5c0b0..5f2cdf9caa7b 100644
--- a/kernel/liveupdate/luo_flb.c
+++ b/kernel/liveupdate/luo_flb.c
@@ -343,7 +343,7 @@ int liveupdate_register_flb(struct liveupdate_file_handler *fh,
 	if (WARN_ON(list_empty(&ACCESS_PRIVATE(fh, list))))
 		return -EINVAL;

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;

diff --git a/kernel/liveupdate/luo_session.c b/kernel/liveupdate/luo_session.c
index dbdbc3bd7929..c0262ca00533 100644
--- a/kernel/liveupdate/luo_session.c
+++ b/kernel/liveupdate/luo_session.c
@@ -119,7 +119,7 @@ static struct luo_session_global luo_session_global = {

 static struct luo_session *luo_session_alloc(const char *name)
 {
-	struct luo_session *session = kzalloc(sizeof(*session), GFP_KERNEL);
+	struct luo_session *session = kzalloc_obj(*session, GFP_KERNEL);

 	if (!session)
 		return ERR_PTR(-ENOMEM);
diff --git a/kernel/locking/locktorture.c b/kernel/locking/locktorture.c
index 6567e5eeacc0..96a8647a0074 100644
--- a/kernel/locking/locktorture.c
+++ b/kernel/locking/locktorture.c
@@ -610,9 +610,8 @@ static void torture_ww_mutex_init(void)
 	ww_mutex_init(&torture_ww_mutex_1, &torture_ww_class);
 	ww_mutex_init(&torture_ww_mutex_2, &torture_ww_class);

-	ww_acquire_ctxs = kmalloc_array(cxt.nrealwriters_stress,
-					sizeof(*ww_acquire_ctxs),
-					GFP_KERNEL);
+	ww_acquire_ctxs = kmalloc_objs(*ww_acquire_ctxs,
+				       cxt.nrealwriters_stress, GFP_KERNEL);
 	if (!ww_acquire_ctxs)
 		VERBOSE_TOROUT_STRING("ww_acquire_ctx: Out of memory");
 }
@@ -1129,7 +1128,8 @@ static int call_rcu_chain_init(void)

 	if (call_rcu_chains <= 0)
 		return 0;
-	call_rcu_chain_list = kcalloc(call_rcu_chains, sizeof(*call_rcu_chain_list), GFP_KERNEL);
+	call_rcu_chain_list = kzalloc_objs(*call_rcu_chain_list,
+					   call_rcu_chains, GFP_KERNEL);
 	if (!call_rcu_chain_list)
 		return -ENOMEM;
 	for (i = 0; i < call_rcu_chains; i++) {
@@ -1293,9 +1293,8 @@ static int __init lock_torture_init(void)
 	/* Initialize the statistics so that each run gets its own numbers. */
 	if (nwriters_stress) {
 		lock_is_write_held = false;
-		cxt.lwsa = kmalloc_array(cxt.nrealwriters_stress,
-					 sizeof(*cxt.lwsa),
-					 GFP_KERNEL);
+		cxt.lwsa = kmalloc_objs(*cxt.lwsa, cxt.nrealwriters_stress,
+					GFP_KERNEL);
 		if (cxt.lwsa == NULL) {
 			VERBOSE_TOROUT_STRING("cxt.lwsa: Out of memory");
 			firsterr = -ENOMEM;
@@ -1323,9 +1322,9 @@ static int __init lock_torture_init(void)
 		}

 		if (nreaders_stress) {
-			cxt.lrsa = kmalloc_array(cxt.nrealreaders_stress,
-						 sizeof(*cxt.lrsa),
-						 GFP_KERNEL);
+			cxt.lrsa = kmalloc_objs(*cxt.lrsa,
+						cxt.nrealreaders_stress,
+						GFP_KERNEL);
 			if (cxt.lrsa == NULL) {
 				VERBOSE_TOROUT_STRING("cxt.lrsa: Out of memory");
 				firsterr = -ENOMEM;
@@ -1372,9 +1371,8 @@ static int __init lock_torture_init(void)
 	}

 	if (nwriters_stress) {
-		writer_tasks = kcalloc(cxt.nrealwriters_stress,
-				       sizeof(writer_tasks[0]),
-				       GFP_KERNEL);
+		writer_tasks = kzalloc_objs(writer_tasks[0],
+					    cxt.nrealwriters_stress, GFP_KERNEL);
 		if (writer_tasks == NULL) {
 			TOROUT_ERRSTRING("writer_tasks: Out of memory");
 			firsterr = -ENOMEM;
@@ -1387,9 +1385,8 @@ static int __init lock_torture_init(void)
 		nested_locks = MAX_NESTED_LOCKS;

 	if (cxt.cur_ops->readlock) {
-		reader_tasks = kcalloc(cxt.nrealreaders_stress,
-				       sizeof(reader_tasks[0]),
-				       GFP_KERNEL);
+		reader_tasks = kzalloc_objs(reader_tasks[0],
+					    cxt.nrealreaders_stress, GFP_KERNEL);
 		if (reader_tasks == NULL) {
 			TOROUT_ERRSTRING("reader_tasks: Out of memory");
 			kfree(writer_tasks);
diff --git a/kernel/locking/test-ww_mutex.c b/kernel/locking/test-ww_mutex.c
index 79b5e45f8d4c..2cc6d1937670 100644
--- a/kernel/locking/test-ww_mutex.c
+++ b/kernel/locking/test-ww_mutex.c
@@ -324,7 +324,7 @@ static int __test_cycle(struct ww_class *class, unsigned int nthreads)
 	unsigned int n, last = nthreads - 1;
 	int ret;

-	cycles = kmalloc_array(nthreads, sizeof(*cycles), GFP_KERNEL);
+	cycles = kmalloc_objs(*cycles, nthreads, GFP_KERNEL);
 	if (!cycles)
 		return -ENOMEM;

@@ -412,7 +412,7 @@ static int *get_random_order(int count)
 	int *order;
 	int n, r;

-	order = kmalloc_array(count, sizeof(*order), GFP_KERNEL);
+	order = kmalloc_objs(*order, count, GFP_KERNEL);
 	if (!order)
 		return order;

@@ -506,7 +506,7 @@ static void stress_reorder_work(struct work_struct *work)
 		return;

 	for (n = 0; n < stress->nlocks; n++) {
-		ll = kmalloc(sizeof(*ll), GFP_KERNEL);
+		ll = kmalloc_obj(*ll, GFP_KERNEL);
 		if (!ll)
 			goto out;

@@ -582,12 +582,11 @@ static int stress(struct ww_class *class, int nlocks, int nthreads, unsigned int
 	struct stress *stress_array;
 	int n, count;

-	locks = kmalloc_array(nlocks, sizeof(*locks), GFP_KERNEL);
+	locks = kmalloc_objs(*locks, nlocks, GFP_KERNEL);
 	if (!locks)
 		return -ENOMEM;

-	stress_array = kmalloc_array(nthreads, sizeof(*stress_array),
-				     GFP_KERNEL);
+	stress_array = kmalloc_objs(*stress_array, nthreads, GFP_KERNEL);
 	if (!stress_array) {
 		kfree(locks);
 		return -ENOMEM;
diff --git a/kernel/module/dups.c b/kernel/module/dups.c
index 0b633f2edda6..bbc72ad93058 100644
--- a/kernel/module/dups.c
+++ b/kernel/module/dups.c
@@ -125,7 +125,7 @@ bool kmod_dup_request_exists_wait(char *module_name, bool wait, int *dup_ret)
 	 * Pre-allocate the entry in case we have to use it later
 	 * to avoid contention with the mutex.
 	 */
-	new_kmod_req = kzalloc(sizeof(*new_kmod_req), GFP_KERNEL);
+	new_kmod_req = kzalloc_obj(*new_kmod_req, GFP_KERNEL);
 	if (!new_kmod_req)
 		return false;

diff --git a/kernel/module/main.c b/kernel/module/main.c
index 710ee30b3bea..b2ac20299915 100644
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -662,7 +662,7 @@ static int add_module_usage(struct module *a, struct module *b)
 	struct module_use *use;

 	pr_debug("Allocating new usage for %s.\n", a->name);
-	use = kmalloc(sizeof(*use), GFP_ATOMIC);
+	use = kmalloc_obj(*use, GFP_ATOMIC);
 	if (!use)
 		return -ENOMEM;

@@ -3024,7 +3024,7 @@ static noinline int do_init_module(struct module *mod)
 	}
 #endif

-	freeinit = kmalloc(sizeof(*freeinit), GFP_KERNEL);
+	freeinit = kmalloc_obj(*freeinit, GFP_KERNEL);
 	if (!freeinit) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/kernel/module/stats.c b/kernel/module/stats.c
index 3ba0e98b3c91..2fc64f2729e6 100644
--- a/kernel/module/stats.c
+++ b/kernel/module/stats.c
@@ -250,7 +250,7 @@ int try_add_failed_module(const char *name, enum fail_dup_mod_reason reason)
 		}
 	}

-	mod_fail = kzalloc(sizeof(*mod_fail), GFP_KERNEL);
+	mod_fail = kzalloc_obj(*mod_fail, GFP_KERNEL);
 	if (!mod_fail)
 		return -ENOMEM;
 	memcpy(mod_fail->name, name, strlen(name));
diff --git a/kernel/module/sysfs.c b/kernel/module/sysfs.c
index c7622ff5226a..734ea3180478 100644
--- a/kernel/module/sysfs.c
+++ b/kernel/module/sysfs.c
@@ -74,11 +74,11 @@ static int add_sect_attrs(struct module *mod, const struct load_info *info)
 	for (i = 0; i < info->hdr->e_shnum; i++)
 		if (!sect_empty(&info->sechdrs[i]))
 			nloaded++;
-	sect_attrs = kzalloc(struct_size(sect_attrs, attrs, nloaded), GFP_KERNEL);
+	sect_attrs = kzalloc_flex(*sect_attrs, attrs, nloaded, GFP_KERNEL);
 	if (!sect_attrs)
 		return -ENOMEM;

-	gattr = kcalloc(nloaded + 1, sizeof(*gattr), GFP_KERNEL);
+	gattr = kzalloc_objs(*gattr, nloaded + 1, GFP_KERNEL);
 	if (!gattr) {
 		kfree(sect_attrs);
 		return -ENOMEM;
@@ -166,12 +166,11 @@ static int add_notes_attrs(struct module *mod, const struct load_info *info)
 	if (notes == 0)
 		return 0;

-	notes_attrs = kzalloc(struct_size(notes_attrs, attrs, notes),
-			      GFP_KERNEL);
+	notes_attrs = kzalloc_flex(*notes_attrs, attrs, notes, GFP_KERNEL);
 	if (!notes_attrs)
 		return -ENOMEM;

-	gattr = kcalloc(notes + 1, sizeof(*gattr), GFP_KERNEL);
+	gattr = kzalloc_objs(*gattr, notes + 1, GFP_KERNEL);
 	if (!gattr) {
 		kfree(notes_attrs);
 		return -ENOMEM;
diff --git a/kernel/module/tracking.c b/kernel/module/tracking.c
index 4fefec5b683c..41425054a97a 100644
--- a/kernel/module/tracking.c
+++ b/kernel/module/tracking.c
@@ -33,7 +33,7 @@ int try_add_tainted_module(struct module *mod)
 		}
 	}

-	mod_taint = kmalloc(sizeof(*mod_taint), GFP_KERNEL);
+	mod_taint = kmalloc_obj(*mod_taint, GFP_KERNEL);
 	if (unlikely(!mod_taint))
 		return -ENOMEM;
 	strscpy(mod_taint->name, mod->name, MODULE_NAME_LEN);
diff --git a/kernel/padata.c b/kernel/padata.c
index db7c75787a2b..f0bf62e9a1f2 100644
--- a/kernel/padata.c
+++ b/kernel/padata.c
@@ -540,7 +540,7 @@ static struct parallel_data *padata_alloc_pd(struct padata_shell *ps)
 	struct padata_instance *pinst = ps->pinst;
 	struct parallel_data *pd;

-	pd = kzalloc(sizeof(struct parallel_data), GFP_KERNEL);
+	pd = kzalloc_obj(struct parallel_data, GFP_KERNEL);
 	if (!pd)
 		goto err;

@@ -952,7 +952,7 @@ struct padata_instance *padata_alloc(const char *name)
 {
 	struct padata_instance *pinst;

-	pinst = kzalloc(sizeof(struct padata_instance), GFP_KERNEL);
+	pinst = kzalloc_obj(struct padata_instance, GFP_KERNEL);
 	if (!pinst)
 		goto err;

@@ -1038,7 +1038,7 @@ struct padata_shell *padata_alloc_shell(struct padata_instance *pinst)
 	struct parallel_data *pd;
 	struct padata_shell *ps;

-	ps = kzalloc(sizeof(*ps), GFP_KERNEL);
+	ps = kzalloc_obj(*ps, GFP_KERNEL);
 	if (!ps)
 		goto out;

@@ -1106,8 +1106,8 @@ void __init padata_init(void)
 #endif

 	possible_cpus = num_possible_cpus();
-	padata_works = kmalloc_array(possible_cpus, sizeof(struct padata_work),
-				     GFP_KERNEL);
+	padata_works = kmalloc_objs(struct padata_work, possible_cpus,
+				    GFP_KERNEL);
 	if (!padata_works)
 		goto remove_dead_state;

diff --git a/kernel/params.c b/kernel/params.c
index 7c2242f64bf0..d26bdfae96e5 100644
--- a/kernel/params.c
+++ b/kernel/params.c
@@ -633,13 +633,13 @@ static __init_or_module int add_sysfs_param(struct module_kobject *mk,

 	if (!mk->mp) {
 		/* First allocation. */
-		mk->mp = kzalloc(sizeof(*mk->mp), GFP_KERNEL);
+		mk->mp = kzalloc_obj(*mk->mp, GFP_KERNEL);
 		if (!mk->mp)
 			return -ENOMEM;
 		mk->mp->grp.name = "parameters";
 		/* NULL-terminated attribute array. */
-		mk->mp->grp.attrs = kzalloc(sizeof(mk->mp->grp.attrs[0]),
-					    GFP_KERNEL);
+		mk->mp->grp.attrs = kzalloc_obj(mk->mp->grp.attrs[0],
+						GFP_KERNEL);
 		/* Caller will cleanup via free_module_param_attrs */
 		if (!mk->mp->grp.attrs)
 			return -ENOMEM;
@@ -766,7 +766,7 @@ lookup_or_create_module_kobject(const char *name)
 	if (kobj)
 		return to_module_kobject(kobj);

-	mk = kzalloc(sizeof(struct module_kobject), GFP_KERNEL);
+	mk = kzalloc_obj(struct module_kobject, GFP_KERNEL);
 	if (!mk)
 		return NULL;

diff --git a/kernel/power/console.c b/kernel/power/console.c
index a906a0ac0f9b..5ed9e1be1560 100644
--- a/kernel/power/console.c
+++ b/kernel/power/console.c
@@ -58,7 +58,7 @@ int pm_vt_switch_required(struct device *dev, bool required)
 		}
 	}

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c
index 5b055cbe5341..43ddfc11b84a 100644
--- a/kernel/power/energy_model.c
+++ b/kernel/power/energy_model.c
@@ -439,7 +439,7 @@ static int em_create_pd(struct device *dev, int nr_states,

 		cpumask_copy(em_span_cpus(pd), cpus);
 	} else {
-		pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+		pd = kzalloc_obj(*pd, GFP_KERNEL);
 		if (!pd)
 			return -ENOMEM;
 	}
diff --git a/kernel/power/qos.c b/kernel/power/qos.c
index f7d8064e9adc..750b80f45b9f 100644
--- a/kernel/power/qos.c
+++ b/kernel/power/qos.c
@@ -341,7 +341,7 @@ static int cpu_latency_qos_open(struct inode *inode, struct file *filp)
 {
 	struct pm_qos_request *req;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -440,7 +440,7 @@ static int cpu_wakeup_latency_qos_open(struct inode *inode, struct file *filp)
 {
 	struct pm_qos_request *req;

-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c
index 0a946932d5c1..be0b3304339f 100644
--- a/kernel/power/snapshot.c
+++ b/kernel/power/snapshot.c
@@ -646,7 +646,7 @@ static int create_mem_extents(struct list_head *list, gfp_t gfp_mask)
 			/* New extent is necessary */
 			struct mem_extent *new_ext;

-			new_ext = kzalloc(sizeof(struct mem_extent), gfp_mask);
+			new_ext = kzalloc_obj(struct mem_extent, gfp_mask);
 			if (!new_ext) {
 				free_mem_extents(list);
 				return -ENOMEM;
@@ -1124,7 +1124,7 @@ int create_basic_memory_bitmaps(void)
 	else
 		BUG_ON(forbidden_pages_map || free_pages_map);

-	bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
+	bm1 = kzalloc_obj(struct memory_bitmap, GFP_KERNEL);
 	if (!bm1)
 		return -ENOMEM;

@@ -1132,7 +1132,7 @@ int create_basic_memory_bitmaps(void)
 	if (error)
 		goto Free_first_object;

-	bm2 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
+	bm2 = kzalloc_obj(struct memory_bitmap, GFP_KERNEL);
 	if (!bm2)
 		goto Free_first_bitmap;

diff --git a/kernel/power/swap.c b/kernel/power/swap.c
index c4eb284b8e72..9bc1241259d3 100644
--- a/kernel/power/swap.c
+++ b/kernel/power/swap.c
@@ -155,7 +155,7 @@ static int swsusp_extents_insert(unsigned long swap_offset)
 		}
 	}
 	/* Add the new node and rebalance the tree. */
-	ext = kzalloc(sizeof(struct swsusp_extent), GFP_KERNEL);
+	ext = kzalloc_obj(struct swsusp_extent, GFP_KERNEL);
 	if (!ext)
 		return -ENOMEM;

@@ -577,7 +577,7 @@ static struct crc_data *alloc_crc_data(int nr_threads)
 {
 	struct crc_data *crc;

-	crc = kzalloc(sizeof(*crc), GFP_KERNEL);
+	crc = kzalloc_obj(*crc, GFP_KERNEL);
 	if (!crc)
 		return NULL;

@@ -585,7 +585,7 @@ static struct crc_data *alloc_crc_data(int nr_threads)
 	if (!crc->unc)
 		goto err_free_crc;

-	crc->unc_len = kcalloc(nr_threads, sizeof(*crc->unc_len), GFP_KERNEL);
+	crc->unc_len = kzalloc_objs(*crc->unc_len, nr_threads, GFP_KERNEL);
 	if (!crc->unc_len)
 		goto err_free_unc;

@@ -1016,7 +1016,7 @@ static int get_swap_reader(struct swap_map_handle *handle,
 	last = handle->maps = NULL;
 	offset = swsusp_header->image;
 	while (offset) {
-		tmp = kzalloc(sizeof(*handle->maps), GFP_KERNEL);
+		tmp = kzalloc_obj(*handle->maps, GFP_KERNEL);
 		if (!tmp) {
 			release_swap_reader(handle);
 			return -ENOMEM;
diff --git a/kernel/power/wakelock.c b/kernel/power/wakelock.c
index 4e941999a53b..49712d9e7cfa 100644
--- a/kernel/power/wakelock.c
+++ b/kernel/power/wakelock.c
@@ -178,7 +178,7 @@ static struct wakelock *wakelock_lookup_add(const char *name, size_t len,
 		return ERR_PTR(-ENOSPC);

 	/* Not found, we have to add a new one. */
-	wl = kzalloc(sizeof(*wl), GFP_KERNEL);
+	wl = kzalloc_obj(*wl, GFP_KERNEL);
 	if (!wl)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/printk/nbcon.c b/kernel/printk/nbcon.c
index d558b18505cd..c98241238f2a 100644
--- a/kernel/printk/nbcon.c
+++ b/kernel/printk/nbcon.c
@@ -1801,7 +1801,7 @@ bool nbcon_alloc(struct console *con)
 		 */
 		con->pbufs = &printk_shared_pbufs;
 	} else {
-		con->pbufs = kmalloc(sizeof(*con->pbufs), GFP_KERNEL);
+		con->pbufs = kmalloc_obj(*con->pbufs, GFP_KERNEL);
 		if (!con->pbufs) {
 			con_printk(KERN_ERR, con, "failed to allocate printing buffer\n");
 			return false;
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index a181394604d1..599d56300ded 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -933,7 +933,7 @@ static int devkmsg_open(struct inode *inode, struct file *file)
 			return err;
 	}

-	user = kvmalloc(sizeof(struct devkmsg_user), GFP_KERNEL);
+	user = kvmalloc_obj(struct devkmsg_user, GFP_KERNEL);
 	if (!user)
 		return -ENOMEM;

diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c
index 1c50f89fbd6f..5512686be5d0 100644
--- a/kernel/rcu/rcuscale.c
+++ b/kernel/rcu/rcuscale.c
@@ -755,7 +755,8 @@ kfree_scale_thread(void *arg)
 		}

 		for (i = 0; i < kfree_alloc_num; i++) {
-			alloc_ptr = kcalloc(kfree_mult, sizeof(struct kfree_obj), GFP_KERNEL);
+			alloc_ptr = kzalloc_objs(struct kfree_obj, kfree_mult,
+						 GFP_KERNEL);
 			if (!alloc_ptr)
 				return -ENOMEM;

@@ -908,8 +909,8 @@ kfree_scale_init(void)
 			kfree_mult * sizeof(struct kfree_obj),
 			kfree_by_call_rcu);

-	kfree_reader_tasks = kcalloc(kfree_nrealthreads, sizeof(kfree_reader_tasks[0]),
-			       GFP_KERNEL);
+	kfree_reader_tasks = kzalloc_objs(kfree_reader_tasks[0],
+					  kfree_nrealthreads, GFP_KERNEL);
 	if (kfree_reader_tasks == NULL) {
 		firsterr = -ENOMEM;
 		goto unwind;
@@ -1129,8 +1130,7 @@ rcu_scale_init(void)
 			goto unwind;
 		schedule_timeout_uninterruptible(1);
 	}
-	reader_tasks = kcalloc(nrealreaders, sizeof(reader_tasks[0]),
-			       GFP_KERNEL);
+	reader_tasks = kzalloc_objs(reader_tasks[0], nrealreaders, GFP_KERNEL);
 	if (reader_tasks == NULL) {
 		SCALEOUT_ERRSTRING("out of memory");
 		firsterr = -ENOMEM;
@@ -1144,10 +1144,11 @@ rcu_scale_init(void)
 	}
 	while (atomic_read(&n_rcu_scale_reader_started) < nrealreaders)
 		schedule_timeout_uninterruptible(1);
-	writer_tasks = kcalloc(nrealwriters, sizeof(writer_tasks[0]), GFP_KERNEL);
+	writer_tasks = kzalloc_objs(writer_tasks[0], nrealwriters, GFP_KERNEL);
 	writer_durations = kcalloc(nrealwriters, sizeof(*writer_durations), GFP_KERNEL);
-	writer_n_durations = kcalloc(nrealwriters, sizeof(*writer_n_durations), GFP_KERNEL);
-	writer_done = kcalloc(nrealwriters, sizeof(writer_done[0]), GFP_KERNEL);
+	writer_n_durations = kzalloc_objs(*writer_n_durations, nrealwriters,
+					  GFP_KERNEL);
+	writer_done = kzalloc_objs(writer_done[0], nrealwriters, GFP_KERNEL);
 	if (gp_async) {
 		if (gp_async_max <= 0) {
 			pr_warn("%s: gp_async_max = %d must be greater than zero.\n",
@@ -1156,7 +1157,8 @@ rcu_scale_init(void)
 			firsterr = -EINVAL;
 			goto unwind;
 		}
-		writer_freelists = kcalloc(nrealwriters, sizeof(writer_freelists[0]), GFP_KERNEL);
+		writer_freelists = kzalloc_objs(writer_freelists[0],
+						nrealwriters, GFP_KERNEL);
 	}
 	if (!writer_tasks || !writer_durations || !writer_n_durations || !writer_done ||
 	    (gp_async && !writer_freelists)) {
@@ -1177,8 +1179,9 @@ rcu_scale_init(void)

 			init_llist_head(&wflp->ws_lhg);
 			init_llist_head(&wflp->ws_lhp);
-			wflp->ws_mblocks = kcalloc(gp_async_max, sizeof(wflp->ws_mblocks[0]),
-						   GFP_KERNEL);
+			wflp->ws_mblocks = kzalloc_objs(wflp->ws_mblocks[0],
+							gp_async_max,
+							GFP_KERNEL);
 			if (!wflp->ws_mblocks) {
 				firsterr = -ENOMEM;
 				goto unwind;
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 47ce7f49b52c..d2e673771295 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1626,7 +1626,7 @@ rcu_torture_writer(void *arg)
 			ulo_size = cur_ops->poll_active;
 	}
 	if (cur_ops->poll_active_full > 0) {
-		rgo = kcalloc(cur_ops->poll_active_full, sizeof(*rgo), GFP_KERNEL);
+		rgo = kzalloc_objs(*rgo, cur_ops->poll_active_full, GFP_KERNEL);
 		if (!WARN_ON(!rgo))
 			rgo_size = cur_ops->poll_active_full;
 	}
@@ -2462,7 +2462,7 @@ static void rcu_torture_timer(struct timer_list *unused)

 	/* Test call_rcu() invocation from interrupt handler. */
 	if (cur_ops->call) {
-		struct rcu_head *rhp = kmalloc(sizeof(*rhp), GFP_NOWAIT);
+		struct rcu_head *rhp = kmalloc_obj(*rhp, GFP_NOWAIT);

 		if (rhp)
 			cur_ops->call(rhp, rcu_torture_timer_cb);
@@ -2558,7 +2558,7 @@ static int rcu_torture_updown_init(void)
 		VERBOSE_TOROUT_STRING("rcu_torture_updown_init: Disabling up/down reader tests due to lack of primitives");
 		return 0;
 	}
-	updownreaders = kcalloc(n_up_down, sizeof(*updownreaders), GFP_KERNEL);
+	updownreaders = kzalloc_objs(*updownreaders, n_up_down, GFP_KERNEL);
 	if (!updownreaders) {
 		VERBOSE_TOROUT_STRING("rcu_torture_updown_init: Out of memory, disabling up/down reader tests");
 		return -ENOMEM;
@@ -2891,7 +2891,7 @@ static void rcu_torture_mem_dump_obj(void)
 	mem_dump_obj(&z);
 	kmem_cache_free(kcp, rhp);
 	kmem_cache_destroy(kcp);
-	rhp = kmalloc(sizeof(*rhp), GFP_KERNEL);
+	rhp = kmalloc_obj(*rhp, GFP_KERNEL);
 	if (WARN_ON_ONCE(!rhp))
 		return;
 	pr_alert("mem_dump_obj() kmalloc test: rcu_torture_stats = %px, &rhp = %px, rhp = %px\n", stats_task, &rhp, rhp);
@@ -3399,7 +3399,7 @@ static void rcu_torture_fwd_prog_cr(struct rcu_fwd *rfp)
 			n_launders++;
 			n_launders_sa++;
 		} else if (!cur_ops->cbflood_max || cur_ops->cbflood_max > n_max_cbs) {
-			rfcp = kmalloc(sizeof(*rfcp), GFP_KERNEL);
+			rfcp = kmalloc_obj(*rfcp, GFP_KERNEL);
 			if (WARN_ON_ONCE(!rfcp)) {
 				schedule_timeout_interruptible(1);
 				continue;
@@ -3587,8 +3587,8 @@ static int __init rcu_torture_fwd_prog_init(void)
 		fwd_progress_holdoff = 1;
 	if (fwd_progress_div <= 0)
 		fwd_progress_div = 4;
-	rfp = kcalloc(fwd_progress, sizeof(*rfp), GFP_KERNEL);
-	fwd_prog_tasks = kcalloc(fwd_progress, sizeof(*fwd_prog_tasks), GFP_KERNEL);
+	rfp = kzalloc_objs(*rfp, fwd_progress, GFP_KERNEL);
+	fwd_prog_tasks = kzalloc_objs(*fwd_prog_tasks, fwd_progress, GFP_KERNEL);
 	if (!rfp || !fwd_prog_tasks) {
 		kfree(rfp);
 		kfree(fwd_prog_tasks);
@@ -3754,10 +3754,9 @@ static int rcu_torture_barrier_init(void)
 	atomic_set(&barrier_cbs_count, 0);
 	atomic_set(&barrier_cbs_invoked, 0);
 	barrier_cbs_tasks =
-		kcalloc(n_barrier_cbs, sizeof(barrier_cbs_tasks[0]),
-			GFP_KERNEL);
+		kzalloc_objs(barrier_cbs_tasks[0], n_barrier_cbs, GFP_KERNEL);
 	barrier_cbs_wq =
-		kcalloc(n_barrier_cbs, sizeof(barrier_cbs_wq[0]), GFP_KERNEL);
+		kzalloc_objs(barrier_cbs_wq[0], n_barrier_cbs, GFP_KERNEL);
 	if (barrier_cbs_tasks == NULL || !barrier_cbs_wq)
 		return -ENOMEM;
 	for (i = 0; i < n_barrier_cbs; i++) {
@@ -4224,7 +4223,7 @@ static void rcu_test_debug_objects(void)
 			(!cur_ops->call || !cur_ops->cb_barrier)))
 		return;

-	struct rcu_head *rhp = kmalloc(sizeof(*rhp), GFP_KERNEL);
+	struct rcu_head *rhp = kmalloc_obj(*rhp, GFP_KERNEL);

 	init_rcu_head_on_stack(&rh1);
 	init_rcu_head_on_stack(&rh2);
@@ -4549,9 +4548,8 @@ rcu_torture_init(void)

 	rcu_torture_write_types();
 	if (nrealfakewriters > 0) {
-		fakewriter_tasks = kcalloc(nrealfakewriters,
-					   sizeof(fakewriter_tasks[0]),
-					   GFP_KERNEL);
+		fakewriter_tasks = kzalloc_objs(fakewriter_tasks[0],
+						nrealfakewriters, GFP_KERNEL);
 		if (fakewriter_tasks == NULL) {
 			TOROUT_ERRSTRING("out of memory");
 			firsterr = -ENOMEM;
@@ -4564,10 +4562,9 @@ rcu_torture_init(void)
 		if (torture_init_error(firsterr))
 			goto unwind;
 	}
-	reader_tasks = kcalloc(nrealreaders, sizeof(reader_tasks[0]),
-			       GFP_KERNEL);
-	rcu_torture_reader_mbchk = kcalloc(nrealreaders, sizeof(*rcu_torture_reader_mbchk),
-					   GFP_KERNEL);
+	reader_tasks = kzalloc_objs(reader_tasks[0], nrealreaders, GFP_KERNEL);
+	rcu_torture_reader_mbchk = kzalloc_objs(*rcu_torture_reader_mbchk,
+						nrealreaders, GFP_KERNEL);
 	if (!reader_tasks || !rcu_torture_reader_mbchk) {
 		TOROUT_ERRSTRING("out of memory");
 		firsterr = -ENOMEM;
@@ -4595,7 +4592,8 @@ rcu_torture_init(void)
 	if (WARN_ON(nocbs_toggle < 0))
 		nocbs_toggle = HZ;
 	if (nrealnocbers > 0) {
-		nocb_tasks = kcalloc(nrealnocbers, sizeof(nocb_tasks[0]), GFP_KERNEL);
+		nocb_tasks = kzalloc_objs(nocb_tasks[0], nrealnocbers,
+					  GFP_KERNEL);
 		if (nocb_tasks == NULL) {
 			TOROUT_ERRSTRING("out of memory");
 			firsterr = -ENOMEM;
diff --git a/kernel/rcu/refscale.c b/kernel/rcu/refscale.c
index 07a313782dfd..39d679a4c17e 100644
--- a/kernel/rcu/refscale.c
+++ b/kernel/rcu/refscale.c
@@ -1143,7 +1143,7 @@ static bool typesafe_init(void)
 	else if (si == 0)
 		si = nr_cpu_ids;
 	rtsarray_size = si;
-	rtsarray = kcalloc(si, sizeof(*rtsarray), GFP_KERNEL);
+	rtsarray = kzalloc_objs(*rtsarray, si, GFP_KERNEL);
 	if (!rtsarray)
 		return false;
 	for (idx = 0; idx < rtsarray_size; idx++) {
@@ -1575,8 +1575,7 @@ ref_scale_init(void)
 		      "%s: nreaders * loops will overflow, adjusted loops to %d",
 		      __func__, INT_MAX / nreaders))
 		loops = INT_MAX / nreaders;
-	reader_tasks = kcalloc(nreaders, sizeof(reader_tasks[0]),
-			       GFP_KERNEL);
+	reader_tasks = kzalloc_objs(reader_tasks[0], nreaders, GFP_KERNEL);
 	if (!reader_tasks) {
 		SCALEOUT_ERRSTRING("out of memory");
 		firsterr = -ENOMEM;
diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
index 66ba6a2f83d3..0faf35f393a3 100644
--- a/kernel/rcu/srcutree.c
+++ b/kernel/rcu/srcutree.c
@@ -173,7 +173,8 @@ static bool init_srcu_struct_nodes(struct srcu_struct *ssp, gfp_t gfp_flags)

 	/* Initialize geometry if it has not already been initialized. */
 	rcu_init_geometry();
-	ssp->srcu_sup->node = kcalloc(rcu_num_nodes, sizeof(*ssp->srcu_sup->node), gfp_flags);
+	ssp->srcu_sup->node = kzalloc_objs(*ssp->srcu_sup->node, rcu_num_nodes,
+					   gfp_flags);
 	if (!ssp->srcu_sup->node)
 		return false;

@@ -237,7 +238,7 @@ static bool init_srcu_struct_nodes(struct srcu_struct *ssp, gfp_t gfp_flags)
 static int init_srcu_struct_fields(struct srcu_struct *ssp, bool is_static)
 {
 	if (!is_static)
-		ssp->srcu_sup = kzalloc(sizeof(*ssp->srcu_sup), GFP_KERNEL);
+		ssp->srcu_sup = kzalloc_obj(*ssp->srcu_sup, GFP_KERNEL);
 	if (!ssp->srcu_sup)
 		return -ENOMEM;
 	if (!is_static)
diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h
index 76f952196a29..d9ccf18eb035 100644
--- a/kernel/rcu/tasks.h
+++ b/kernel/rcu/tasks.h
@@ -259,7 +259,8 @@ static void cblist_init_generic(struct rcu_tasks *rtp)
 	}
 	lim = rcu_task_enqueue_lim;

-	rtp->rtpcp_array = kcalloc(num_possible_cpus(), sizeof(struct rcu_tasks_percpu *), GFP_KERNEL);
+	rtp->rtpcp_array = kzalloc_objs(struct rcu_tasks_percpu *,
+					num_possible_cpus(), GFP_KERNEL);
 	BUG_ON(!rtp->rtpcp_array);

 	for_each_possible_cpu(cpu) {
diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
index dfeba9b35395..14150f09fd61 100644
--- a/kernel/rcu/update.c
+++ b/kernel/rcu/update.c
@@ -614,7 +614,7 @@ static void early_boot_test_call_rcu(void)
 	call_rcu(&head, test_callback);
 	early_srcu_cookie = start_poll_synchronize_srcu(&early_srcu);
 	call_srcu(&early_srcu, &shead, test_callback);
-	rhp = kmalloc(sizeof(*rhp), GFP_KERNEL);
+	rhp = kmalloc_obj(*rhp, GFP_KERNEL);
 	if (!WARN_ON_ONCE(!rhp))
 		kfree_rcu(rhp, rh);
 }
diff --git a/kernel/reboot.c b/kernel/reboot.c
index ec087827c85c..695c33e75efd 100644
--- a/kernel/reboot.c
+++ b/kernel/reboot.c
@@ -374,7 +374,7 @@ static struct sys_off_handler *alloc_sys_off_handler(int priority)
 		else
 			flags = GFP_KERNEL;

-		handler = kzalloc(sizeof(*handler), flags);
+		handler = kzalloc_obj(*handler, flags);
 		if (!handler)
 			return ERR_PTR(-ENOMEM);
 	}
diff --git a/kernel/relay.c b/kernel/relay.c
index 5c665b729132..c28fc5dd3ded 100644
--- a/kernel/relay.c
+++ b/kernel/relay.c
@@ -59,7 +59,7 @@ static const struct vm_operations_struct relay_file_mmap_ops = {
  */
 static struct page **relay_alloc_page_array(unsigned int n_pages)
 {
-	return kvcalloc(n_pages, sizeof(struct page *), GFP_KERNEL);
+	return kvzalloc_objs(struct page *, n_pages, GFP_KERNEL);
 }

 /*
@@ -150,11 +150,10 @@ static struct rchan_buf *relay_create_buf(struct rchan *chan)
 	if (chan->n_subbufs > KMALLOC_MAX_SIZE / sizeof(size_t))
 		return NULL;

-	buf = kzalloc(sizeof(struct rchan_buf), GFP_KERNEL);
+	buf = kzalloc_obj(struct rchan_buf, GFP_KERNEL);
 	if (!buf)
 		return NULL;
-	buf->padding = kmalloc_array(chan->n_subbufs, sizeof(size_t),
-				     GFP_KERNEL);
+	buf->padding = kmalloc_objs(size_t, chan->n_subbufs, GFP_KERNEL);
 	if (!buf->padding)
 		goto free_buf;

@@ -490,7 +489,7 @@ struct rchan *relay_open(const char *base_filename,
 	if (!cb || !cb->create_buf_file || !cb->remove_buf_file)
 		return NULL;

-	chan = kzalloc(sizeof(struct rchan), GFP_KERNEL);
+	chan = kzalloc_obj(struct rchan, GFP_KERNEL);
 	if (!chan)
 		return NULL;

diff --git a/kernel/resource.c b/kernel/resource.c
index 31341bdd7707..d591e76c1535 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -182,7 +182,7 @@ static void free_resource(struct resource *res)

 static struct resource *alloc_resource(gfp_t flags)
 {
-	return kzalloc(sizeof(struct resource), flags);
+	return kzalloc_obj(struct resource, flags);
 }

 /* Return the conflict entry if you can't request it */
@@ -502,7 +502,7 @@ int walk_system_ram_res_rev(u64 start, u64 end, void *arg,
 	int ret = -1;

 	/* create a list */
-	rams = kvcalloc(rams_size, sizeof(struct resource), GFP_KERNEL);
+	rams = kvzalloc_objs(struct resource, rams_size, GFP_KERNEL);
 	if (!rams)
 		return ret;

diff --git a/kernel/resource_kunit.c b/kernel/resource_kunit.c
index b8ef75b99eb2..378218df2427 100644
--- a/kernel/resource_kunit.c
+++ b/kernel/resource_kunit.c
@@ -204,7 +204,7 @@ static void resource_test_insert_resource(struct kunit *test, struct resource *p
 {
 	struct resource *res;

-	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	res = kzalloc_obj(*res, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_NULL(test, res);

 	res->name = name;
diff --git a/kernel/scftorture.c b/kernel/scftorture.c
index d86d2d9c4624..02b3a5d2f0aa 100644
--- a/kernel/scftorture.c
+++ b/kernel/scftorture.c
@@ -350,7 +350,7 @@ static void scftorture_invoke_one(struct scf_statistics *scfp, struct torture_ra
 	struct scf_selector *scfsp = scf_sel_rand(trsp);

 	if (scfsp->scfs_prim == SCF_PRIM_SINGLE || scfsp->scfs_wait) {
-		scfcp = kmalloc(sizeof(*scfcp), GFP_ATOMIC);
+		scfcp = kmalloc_obj(*scfcp, GFP_ATOMIC);
 		if (!scfcp) {
 			WARN_ON_ONCE(!IS_ENABLED(CONFIG_KASAN));
 			atomic_inc(&n_alloc_errs);
@@ -661,7 +661,7 @@ static int __init scf_torture_init(void)
 	// Worker tasks invoking smp_call_function().
 	if (nthreads < 0)
 		nthreads = num_online_cpus();
-	scf_stats_p = kcalloc(nthreads, sizeof(scf_stats_p[0]), GFP_KERNEL);
+	scf_stats_p = kzalloc_objs(scf_stats_p[0], nthreads, GFP_KERNEL);
 	if (!scf_stats_p) {
 		SCFTORTOUT_ERRSTRING("out of memory");
 		firsterr = -ENOMEM;
diff --git a/kernel/sched/autogroup.c b/kernel/sched/autogroup.c
index 954137775f38..c5a1019cbe83 100644
--- a/kernel/sched/autogroup.c
+++ b/kernel/sched/autogroup.c
@@ -86,7 +86,7 @@ static inline struct autogroup *autogroup_task_get(struct task_struct *p)

 static inline struct autogroup *autogroup_create(void)
 {
-	struct autogroup *ag = kzalloc(sizeof(*ag), GFP_KERNEL);
+	struct autogroup *ag = kzalloc_obj(*ag, GFP_KERNEL);
 	struct task_group *tg;

 	if (!ag)
diff --git a/kernel/sched/core_sched.c b/kernel/sched/core_sched.c
index 9ede71ecba7f..6065cf725eee 100644
--- a/kernel/sched/core_sched.c
+++ b/kernel/sched/core_sched.c
@@ -12,7 +12,7 @@ struct sched_core_cookie {

 static unsigned long sched_core_alloc_cookie(void)
 {
-	struct sched_core_cookie *ck = kmalloc(sizeof(*ck), GFP_KERNEL);
+	struct sched_core_cookie *ck = kmalloc_obj(*ck, GFP_KERNEL);
 	if (!ck)
 		return 0;

diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c
index 23a56ba12d81..6e9a2e067886 100644
--- a/kernel/sched/cpuacct.c
+++ b/kernel/sched/cpuacct.c
@@ -61,7 +61,7 @@ cpuacct_css_alloc(struct cgroup_subsys_state *parent_css)
 	if (!parent_css)
 		return &root_cpuacct.css;

-	ca = kzalloc(sizeof(*ca), GFP_KERNEL);
+	ca = kzalloc_obj(*ca, GFP_KERNEL);
 	if (!ca)
 		goto out;

diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c
index 37b572cc8aca..bbb2d68df86a 100644
--- a/kernel/sched/cpudeadline.c
+++ b/kernel/sched/cpudeadline.c
@@ -252,9 +252,7 @@ int cpudl_init(struct cpudl *cp)
 	raw_spin_lock_init(&cp->lock);
 	cp->size = 0;

-	cp->elements = kcalloc(nr_cpu_ids,
-			       sizeof(struct cpudl_item),
-			       GFP_KERNEL);
+	cp->elements = kzalloc_objs(struct cpudl_item, nr_cpu_ids, GFP_KERNEL);
 	if (!cp->elements)
 		return -ENOMEM;

diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index cfc40181f66e..d71d09ed1b3b 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -638,7 +638,7 @@ static struct sugov_policy *sugov_policy_alloc(struct cpufreq_policy *policy)
 {
 	struct sugov_policy *sg_policy;

-	sg_policy = kzalloc(sizeof(*sg_policy), GFP_KERNEL);
+	sg_policy = kzalloc_obj(*sg_policy, GFP_KERNEL);
 	if (!sg_policy)
 		return NULL;

@@ -722,7 +722,7 @@ static struct sugov_tunables *sugov_tunables_alloc(struct sugov_policy *sg_polic
 {
 	struct sugov_tunables *tunables;

-	tunables = kzalloc(sizeof(*tunables), GFP_KERNEL);
+	tunables = kzalloc_obj(*tunables, GFP_KERNEL);
 	if (tunables) {
 		gov_attr_set_init(&tunables->attr_set, &sg_policy->tunables_hook);
 		if (!have_governor_per_policy())
diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c
index 76a9ac5eb794..c2642deeaabc 100644
--- a/kernel/sched/cpupri.c
+++ b/kernel/sched/cpupri.c
@@ -288,7 +288,7 @@ int cpupri_init(struct cpupri *cp)
 			goto cleanup;
 	}

-	cp->cpu_to_pri = kcalloc(nr_cpu_ids, sizeof(int), GFP_KERNEL);
+	cp->cpu_to_pri = kzalloc_objs(int, nr_cpu_ids, GFP_KERNEL);
 	if (!cp->cpu_to_pri)
 		goto cleanup;

diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index c18e81e8ef51..b9fadb2583ea 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -4223,11 +4223,11 @@ static struct scx_exit_info *alloc_exit_info(size_t exit_dump_len)
 {
 	struct scx_exit_info *ei;

-	ei = kzalloc(sizeof(*ei), GFP_KERNEL);
+	ei = kzalloc_obj(*ei, GFP_KERNEL);
 	if (!ei)
 		return NULL;

-	ei->bt = kcalloc(SCX_EXIT_BT_LEN, sizeof(ei->bt[0]), GFP_KERNEL);
+	ei->bt = kzalloc_objs(ei->bt[0], SCX_EXIT_BT_LEN, GFP_KERNEL);
 	ei->msg = kzalloc(SCX_EXIT_MSG_LEN, GFP_KERNEL);
 	ei->dump = kvzalloc(exit_dump_len, GFP_KERNEL);

@@ -4824,7 +4824,7 @@ static struct scx_sched *scx_alloc_and_add_sched(struct sched_ext_ops *ops)
 	struct scx_sched *sch;
 	int node, ret;

-	sch = kzalloc(sizeof(*sch), GFP_KERNEL);
+	sch = kzalloc_obj(*sch, GFP_KERNEL);
 	if (!sch)
 		return ERR_PTR(-ENOMEM);

@@ -4838,8 +4838,8 @@ static struct scx_sched *scx_alloc_and_add_sched(struct sched_ext_ops *ops)
 	if (ret < 0)
 		goto err_free_ei;

-	sch->global_dsqs = kcalloc(nr_node_ids, sizeof(sch->global_dsqs[0]),
-				   GFP_KERNEL);
+	sch->global_dsqs = kzalloc_objs(sch->global_dsqs[0], nr_node_ids,
+					GFP_KERNEL);
 	if (!sch->global_dsqs) {
 		ret = -ENOMEM;
 		goto err_free_hash;
diff --git a/kernel/sched/ext_idle.c b/kernel/sched/ext_idle.c
index 3d9d404d5cd2..cd630772e164 100644
--- a/kernel/sched/ext_idle.c
+++ b/kernel/sched/ext_idle.c
@@ -664,8 +664,8 @@ void scx_idle_init_masks(void)
 	BUG_ON(!alloc_cpumask_var(&scx_idle_global_masks.smt, GFP_KERNEL));

 	/* Allocate per-node idle cpumasks */
-	scx_idle_node_masks = kcalloc(num_possible_nodes(),
-				      sizeof(*scx_idle_node_masks), GFP_KERNEL);
+	scx_idle_node_masks = kzalloc_objs(*scx_idle_node_masks,
+					   num_possible_nodes(), GFP_KERNEL);
 	BUG_ON(!scx_idle_node_masks);

 	for_each_node(i) {
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 1e22b7fadd70..f6f050f2faec 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -3427,7 +3427,7 @@ static void task_numa_work(struct callback_head *work)
 		if (!vma->numab_state) {
 			struct vma_numab_state *ptr;

-			ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+			ptr = kzalloc_obj(*ptr, GFP_KERNEL);
 			if (!ptr)
 				continue;

@@ -13622,10 +13622,10 @@ int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
 	struct cfs_rq *cfs_rq;
 	int i;

-	tg->cfs_rq = kcalloc(nr_cpu_ids, sizeof(cfs_rq), GFP_KERNEL);
+	tg->cfs_rq = kzalloc_objs(cfs_rq, nr_cpu_ids, GFP_KERNEL);
 	if (!tg->cfs_rq)
 		goto err;
-	tg->se = kcalloc(nr_cpu_ids, sizeof(se), GFP_KERNEL);
+	tg->se = kzalloc_objs(se, nr_cpu_ids, GFP_KERNEL);
 	if (!tg->se)
 		goto err;

diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c
index 59fdb7ebbf22..bf8a70598a09 100644
--- a/kernel/sched/psi.c
+++ b/kernel/sched/psi.c
@@ -1114,7 +1114,7 @@ int psi_cgroup_alloc(struct cgroup *cgroup)
 	if (!static_branch_likely(&psi_cgroups_enabled))
 		return 0;

-	cgroup->psi = kzalloc(sizeof(struct psi_group), GFP_KERNEL);
+	cgroup->psi = kzalloc_obj(struct psi_group, GFP_KERNEL);
 	if (!cgroup->psi)
 		return -ENOMEM;

@@ -1340,7 +1340,7 @@ struct psi_trigger *psi_trigger_create(struct psi_group *group, char *buf,
 	if (threshold_us == 0 || threshold_us > window_us)
 		return ERR_PTR(-EINVAL);

-	t = kmalloc(sizeof(*t), GFP_KERNEL);
+	t = kmalloc_obj(*t, GFP_KERNEL);
 	if (!t)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index a7680477fa6f..e72df7045592 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -259,10 +259,10 @@ int alloc_rt_sched_group(struct task_group *tg, struct task_group *parent)
 	if (!rt_group_sched_enabled())
 		return 1;

-	tg->rt_rq = kcalloc(nr_cpu_ids, sizeof(rt_rq), GFP_KERNEL);
+	tg->rt_rq = kzalloc_objs(rt_rq, nr_cpu_ids, GFP_KERNEL);
 	if (!tg->rt_rq)
 		goto err;
-	tg->rt_se = kcalloc(nr_cpu_ids, sizeof(rt_se), GFP_KERNEL);
+	tg->rt_se = kzalloc_objs(rt_se, nr_cpu_ids, GFP_KERNEL);
 	if (!tg->rt_se)
 		goto err;

diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index ac268da91778..ac54fcae5de7 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -350,7 +350,7 @@ static struct perf_domain *pd_init(int cpu)
 		return NULL;
 	}

-	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+	pd = kzalloc_obj(*pd, GFP_KERNEL);
 	if (!pd)
 		return NULL;
 	pd->em_pd = obj;
@@ -589,7 +589,7 @@ static struct root_domain *alloc_rootdomain(void)
 {
 	struct root_domain *rd;

-	rd = kzalloc(sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_obj(*rd, GFP_KERNEL);
 	if (!rd)
 		return NULL;

@@ -1998,7 +1998,7 @@ static int sched_record_numa_dist(int offline_node, int (*n_dist)(int, int),
 	 */
 	nr_levels = bitmap_weight(distance_map, NR_DISTANCE_VALUES);

-	distances = kcalloc(nr_levels, sizeof(int), GFP_KERNEL);
+	distances = kzalloc_objs(int, nr_levels, GFP_KERNEL);
 	if (!distances)
 		return -ENOMEM;

@@ -2734,7 +2734,7 @@ cpumask_var_t *alloc_sched_domains(unsigned int ndoms)
 	int i;
 	cpumask_var_t *doms;

-	doms = kmalloc_array(ndoms, sizeof(*doms), GFP_KERNEL);
+	doms = kmalloc_objs(*doms, ndoms, GFP_KERNEL);
 	if (!doms)
 		return NULL;
 	for (i = 0; i < ndoms; i++) {
diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index 25f62867a16d..b2297243071d 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -693,7 +693,7 @@ static struct seccomp_filter *seccomp_prepare_filter(struct sock_fprog *fprog)
 		return ERR_PTR(-EACCES);

 	/* Allocate a new seccomp_filter */
-	sfilter = kzalloc(sizeof(*sfilter), GFP_KERNEL | __GFP_NOWARN);
+	sfilter = kzalloc_obj(*sfilter, GFP_KERNEL | __GFP_NOWARN);
 	if (!sfilter)
 		return ERR_PTR(-ENOMEM);

@@ -1893,7 +1893,7 @@ static struct file *init_listener(struct seccomp_filter *filter)
 	struct file *ret;

 	ret = ERR_PTR(-ENOMEM);
-	filter->notif = kzalloc(sizeof(*(filter->notif)), GFP_KERNEL);
+	filter->notif = kzalloc_obj(*(filter->notif), GFP_KERNEL);
 	if (!filter->notif)
 		goto out;

diff --git a/kernel/static_call_inline.c b/kernel/static_call_inline.c
index 269683d41aa9..864ae2da708f 100644
--- a/kernel/static_call_inline.c
+++ b/kernel/static_call_inline.c
@@ -255,7 +255,7 @@ static int __static_call_init(struct module *mod,
 				goto do_transform;
 			}

-			site_mod = kzalloc(sizeof(*site_mod), GFP_KERNEL);
+			site_mod = kzalloc_obj(*site_mod, GFP_KERNEL);
 			if (!site_mod)
 				return -ENOMEM;

@@ -271,7 +271,7 @@ static int __static_call_init(struct module *mod,

 				key->mods = site_mod;

-				site_mod = kzalloc(sizeof(*site_mod), GFP_KERNEL);
+				site_mod = kzalloc_obj(*site_mod, GFP_KERNEL);
 				if (!site_mod)
 					return -ENOMEM;
 			}
diff --git a/kernel/time/namespace.c b/kernel/time/namespace.c
index e76be24b132c..652744e00eb4 100644
--- a/kernel/time/namespace.c
+++ b/kernel/time/namespace.c
@@ -89,7 +89,7 @@ static struct time_namespace *clone_time_ns(struct user_namespace *user_ns,
 		goto fail;

 	err = -ENOMEM;
-	ns = kzalloc(sizeof(*ns), GFP_KERNEL_ACCOUNT);
+	ns = kzalloc_obj(*ns, GFP_KERNEL_ACCOUNT);
 	if (!ns)
 		goto fail_dec;

diff --git a/kernel/time/posix-clock.c b/kernel/time/posix-clock.c
index 101a0f7c43e0..3a67e7e4c875 100644
--- a/kernel/time/posix-clock.c
+++ b/kernel/time/posix-clock.c
@@ -103,7 +103,7 @@ static int posix_clock_open(struct inode *inode, struct file *fp)
 		err = -ENODEV;
 		goto out;
 	}
-	pccontext = kzalloc(sizeof(*pccontext), GFP_KERNEL);
+	pccontext = kzalloc_obj(*pccontext, GFP_KERNEL);
 	if (!pccontext) {
 		err = -ENOMEM;
 		goto out;
diff --git a/kernel/time/timer_migration.c b/kernel/time/timer_migration.c
index 6da9cd562b20..21e72318aeb8 100644
--- a/kernel/time/timer_migration.c
+++ b/kernel/time/timer_migration.c
@@ -1766,7 +1766,7 @@ static int tmigr_setup_groups(unsigned int cpu, unsigned int node,
 	int i, top = 0, err = 0, start_lvl = 0;
 	bool root_mismatch = false;

-	stack = kcalloc(tmigr_hierarchy_levels, sizeof(*stack), GFP_KERNEL);
+	stack = kzalloc_objs(*stack, tmigr_hierarchy_levels, GFP_KERNEL);
 	if (!stack)
 		return -ENOMEM;

@@ -2001,7 +2001,8 @@ static int __init tmigr_init(void)
 	 */
 	tmigr_crossnode_level = cpulvl;

-	tmigr_level_list = kcalloc(tmigr_hierarchy_levels, sizeof(struct list_head), GFP_KERNEL);
+	tmigr_level_list = kzalloc_objs(struct list_head,
+					tmigr_hierarchy_levels, GFP_KERNEL);
 	if (!tmigr_level_list)
 		goto err;

diff --git a/kernel/torture.c b/kernel/torture.c
index 1ea9f67953a7..27c9bb6122d8 100644
--- a/kernel/torture.c
+++ b/kernel/torture.c
@@ -494,7 +494,7 @@ void torture_shuffle_task_register(struct task_struct *tp)

 	if (WARN_ON_ONCE(tp == NULL))
 		return;
-	stp = kmalloc(sizeof(*stp), GFP_KERNEL);
+	stp = kmalloc_obj(*stp, GFP_KERNEL);
 	if (WARN_ON_ONCE(stp == NULL))
 		return;
 	stp->st_t = tp;
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index e6988929ead2..5526b141b433 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -671,7 +671,7 @@ static struct blk_trace *blk_trace_setup_prepare(struct request_queue *q,
 		return ERR_PTR(-EBUSY);
 	}

-	bt = kzalloc(sizeof(*bt), GFP_KERNEL);
+	bt = kzalloc_obj(*bt, GFP_KERNEL);
 	if (!bt)
 		return ERR_PTR(-ENOMEM);

@@ -1904,7 +1904,7 @@ static int blk_trace_setup_queue(struct request_queue *q,
 	struct blk_trace *bt = NULL;
 	int ret = -ENOMEM;

-	bt = kzalloc(sizeof(*bt), GFP_KERNEL);
+	bt = kzalloc_obj(*bt, GFP_KERNEL);
 	if (!bt)
 		return -ENOMEM;

diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index eadaef8592a3..c09268c6e9b7 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -2243,7 +2243,7 @@ static int bpf_event_notify(struct notifier_block *nb, unsigned long op,

 	switch (op) {
 	case MODULE_STATE_COMING:
-		btm = kzalloc(sizeof(*btm), GFP_KERNEL);
+		btm = kzalloc_obj(*btm, GFP_KERNEL);
 		if (btm) {
 			btm->module = module;
 			list_add(&btm->list, &bpf_trace_modules);
@@ -2819,7 +2819,7 @@ int bpf_kprobe_multi_link_attach(const union bpf_attr *attr, struct bpf_prog *pr
 		goto error;
 	}

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (!link) {
 		err = -ENOMEM;
 		goto error;
@@ -3238,8 +3238,8 @@ int bpf_uprobe_multi_link_attach(const union bpf_attr *attr, struct bpf_prog *pr

 	err = -ENOMEM;

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
-	uprobes = kvcalloc(cnt, sizeof(*uprobes), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
+	uprobes = kvzalloc_objs(*uprobes, cnt, GFP_KERNEL);

 	if (!uprobes || !link)
 		goto error_free;
diff --git a/kernel/trace/fprobe.c b/kernel/trace/fprobe.c
index 1188eefef07c..0d649ca71ce0 100644
--- a/kernel/trace/fprobe.c
+++ b/kernel/trace/fprobe.c
@@ -749,7 +749,7 @@ static int fprobe_init(struct fprobe *fp, unsigned long *addrs, int num)
 		return -E2BIG;
 	fp->entry_data_size = size;

-	hlist_array = kzalloc(struct_size(hlist_array, array, num), GFP_KERNEL);
+	hlist_array = kzalloc_flex(*hlist_array, array, num, GFP_KERNEL);
 	if (!hlist_array)
 		return -ENOMEM;

@@ -805,7 +805,7 @@ int register_fprobe(struct fprobe *fp, const char *filter, const char *notfilter
 	if (!addrs)
 		return -ENOMEM;

-	mods = kcalloc(num, sizeof(*mods), GFP_KERNEL);
+	mods = kzalloc_objs(*mods, num, GFP_KERNEL);
 	if (!mods)
 		return -ENOMEM;

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 1ce17c8af409..fb3915a67013 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -702,7 +702,7 @@ static int ftrace_profile_init_cpu(int cpu)
 	 */
 	size = FTRACE_PROFILE_HASH_SIZE;

-	stat->hash = kcalloc(size, sizeof(struct hlist_head), GFP_KERNEL);
+	stat->hash = kzalloc_objs(struct hlist_head, size, GFP_KERNEL);

 	if (!stat->hash)
 		return -ENOMEM;
@@ -1215,7 +1215,7 @@ add_ftrace_hash_entry_direct(struct ftrace_hash *hash, unsigned long ip, unsigne
 {
 	struct ftrace_func_entry *entry;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return NULL;

@@ -1335,12 +1335,12 @@ struct ftrace_hash *alloc_ftrace_hash(int size_bits)
 	struct ftrace_hash *hash;
 	int size;

-	hash = kzalloc(sizeof(*hash), GFP_KERNEL);
+	hash = kzalloc_obj(*hash, GFP_KERNEL);
 	if (!hash)
 		return NULL;

 	size = 1 << size_bits;
-	hash->buckets = kcalloc(size, sizeof(*hash->buckets), GFP_KERNEL);
+	hash->buckets = kzalloc_objs(*hash->buckets, size, GFP_KERNEL);

 	if (!hash->buckets) {
 		kfree(hash);
@@ -1360,7 +1360,7 @@ static int ftrace_add_mod(struct trace_array *tr,
 	struct ftrace_mod_load *ftrace_mod;
 	struct list_head *mod_head = enable ? &tr->mod_trace : &tr->mod_notrace;

-	ftrace_mod = kzalloc(sizeof(*ftrace_mod), GFP_KERNEL);
+	ftrace_mod = kzalloc_obj(*ftrace_mod, GFP_KERNEL);
 	if (!ftrace_mod)
 		return -ENOMEM;

@@ -3911,7 +3911,7 @@ ftrace_allocate_pages(unsigned long num_to_init, unsigned long *num_pages)
 	if (!num_to_init)
 		return NULL;

-	start_pg = pg = kzalloc(sizeof(*pg), GFP_KERNEL);
+	start_pg = pg = kzalloc_obj(*pg, GFP_KERNEL);
 	if (!pg)
 		return NULL;

@@ -3929,7 +3929,7 @@ ftrace_allocate_pages(unsigned long num_to_init, unsigned long *num_pages)
 		if (!num_to_init)
 			break;

-		pg->next = kzalloc(sizeof(*pg), GFP_KERNEL);
+		pg->next = kzalloc_obj(*pg, GFP_KERNEL);
 		if (!pg->next)
 			goto free_pages;

@@ -4686,7 +4686,7 @@ ftrace_regex_open(struct ftrace_ops *ops, int flag,
 	if (tracing_check_open_get_tr(tr))
 		return -ENODEV;

-	iter = kzalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kzalloc_obj(*iter, GFP_KERNEL);
 	if (!iter)
 		goto out;

@@ -5334,7 +5334,7 @@ int ftrace_func_mapper_add_ip(struct ftrace_func_mapper *mapper,
 	if (entry)
 		return -EBUSY;

-	map = kmalloc(sizeof(*map), GFP_KERNEL);
+	map = kmalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

@@ -5474,7 +5474,7 @@ register_ftrace_function_probe(char *glob, struct trace_array *tr,
 		}
 	}
 	if (!probe) {
-		probe = kzalloc(sizeof(*probe), GFP_KERNEL);
+		probe = kzalloc_obj(*probe, GFP_KERNEL);
 		if (!probe) {
 			mutex_unlock(&ftrace_lock);
 			return -ENOMEM;
@@ -7223,7 +7223,7 @@ ftrace_graph_open(struct inode *inode, struct file *file)
 	if (unlikely(ftrace_disabled))
 		return -ENODEV;

-	fgd = kmalloc(sizeof(*fgd), GFP_KERNEL);
+	fgd = kmalloc_obj(*fgd, GFP_KERNEL);
 	if (fgd == NULL)
 		return -ENOMEM;

@@ -7251,7 +7251,7 @@ ftrace_graph_notrace_open(struct inode *inode, struct file *file)
 	if (unlikely(ftrace_disabled))
 		return -ENODEV;

-	fgd = kmalloc(sizeof(*fgd), GFP_KERNEL);
+	fgd = kmalloc_obj(*fgd, GFP_KERNEL);
 	if (fgd == NULL)
 		return -ENOMEM;

@@ -8041,7 +8041,7 @@ static void save_ftrace_mod_rec(struct ftrace_mod_map *mod_map,
 	if (!ret)
 		return;

-	mod_func = kmalloc(sizeof(*mod_func), GFP_KERNEL);
+	mod_func = kmalloc_obj(*mod_func, GFP_KERNEL);
 	if (!mod_func)
 		return;

@@ -8068,7 +8068,7 @@ allocate_ftrace_mod_map(struct module *mod,
 	if (ftrace_disabled)
 		return NULL;

-	mod_map = kmalloc(sizeof(*mod_map), GFP_KERNEL);
+	mod_map = kmalloc_obj(*mod_map, GFP_KERNEL);
 	if (!mod_map)
 		return NULL;

@@ -8241,7 +8241,7 @@ static void add_to_clear_hash_list(struct list_head *clear_list,
 {
 	struct ftrace_init_func *func;

-	func = kmalloc(sizeof(*func), GFP_KERNEL);
+	func = kmalloc_obj(*func, GFP_KERNEL);
 	if (!func) {
 		MEM_FAIL(1, "alloc failure, ftrace filter could be stale\n");
 		return;
diff --git a/kernel/trace/pid_list.c b/kernel/trace/pid_list.c
index dbee72d69d0a..6d12855b0277 100644
--- a/kernel/trace/pid_list.c
+++ b/kernel/trace/pid_list.c
@@ -359,7 +359,7 @@ static void pid_list_refill_irq(struct irq_work *iwork)
 	while (upper_count-- > 0) {
 		union upper_chunk *chunk;

-		chunk = kzalloc(sizeof(*chunk), GFP_NOWAIT);
+		chunk = kzalloc_obj(*chunk, GFP_NOWAIT);
 		if (!chunk)
 			break;
 		*upper_next = chunk;
@@ -370,7 +370,7 @@ static void pid_list_refill_irq(struct irq_work *iwork)
 	while (lower_count-- > 0) {
 		union lower_chunk *chunk;

-		chunk = kzalloc(sizeof(*chunk), GFP_NOWAIT);
+		chunk = kzalloc_obj(*chunk, GFP_NOWAIT);
 		if (!chunk)
 			break;
 		*lower_next = chunk;
@@ -423,7 +423,7 @@ struct trace_pid_list *trace_pid_list_alloc(void)
 	/* According to linux/thread.h, pids can be no bigger that 30 bits */
 	WARN_ON_ONCE(init_pid_ns.pid_max > (1 << 30));

-	pid_list = kzalloc(sizeof(*pid_list), GFP_KERNEL);
+	pid_list = kzalloc_obj(*pid_list, GFP_KERNEL);
 	if (!pid_list)
 		return NULL;

@@ -435,7 +435,7 @@ struct trace_pid_list *trace_pid_list_alloc(void)
 	for (i = 0; i < CHUNK_ALLOC; i++) {
 		union upper_chunk *chunk;

-		chunk = kzalloc(sizeof(*chunk), GFP_KERNEL);
+		chunk = kzalloc_obj(*chunk, GFP_KERNEL);
 		if (!chunk)
 			break;
 		chunk->next = pid_list->upper_list;
@@ -446,7 +446,7 @@ struct trace_pid_list *trace_pid_list_alloc(void)
 	for (i = 0; i < CHUNK_ALLOC; i++) {
 		union lower_chunk *chunk;

-		chunk = kzalloc(sizeof(*chunk), GFP_KERNEL);
+		chunk = kzalloc_obj(*chunk, GFP_KERNEL);
 		if (!chunk)
 			break;
 		chunk->next = pid_list->lower_list;
diff --git a/kernel/trace/rethook.c b/kernel/trace/rethook.c
index 30d224946881..d09d5a204627 100644
--- a/kernel/trace/rethook.c
+++ b/kernel/trace/rethook.c
@@ -108,7 +108,7 @@ struct rethook *rethook_alloc(void *data, rethook_handler_t handler,
 	if (!handler || num <= 0 || size < sizeof(struct rethook_node))
 		return ERR_PTR(-EINVAL);

-	rh = kzalloc(sizeof(struct rethook), GFP_KERNEL);
+	rh = kzalloc_obj(struct rethook, GFP_KERNEL);
 	if (!rh)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 1e7a34a31851..e1395834886e 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -6001,7 +6001,7 @@ ring_buffer_read_start(struct trace_buffer *buffer, int cpu, gfp_t flags)
 	if (!cpumask_test_cpu(cpu, buffer->cpumask))
 		return NULL;

-	iter = kzalloc(sizeof(*iter), flags);
+	iter = kzalloc_obj(*iter, flags);
 	if (!iter)
 		return NULL;

@@ -6509,7 +6509,7 @@ ring_buffer_alloc_read_page(struct trace_buffer *buffer, int cpu)
 	if (!cpumask_test_cpu(cpu, buffer->cpumask))
 		return ERR_PTR(-ENODEV);

-	bpage = kzalloc(sizeof(*bpage), GFP_KERNEL);
+	bpage = kzalloc_obj(*bpage, GFP_KERNEL);
 	if (!bpage)
 		return ERR_PTR(-ENOMEM);

@@ -7190,7 +7190,7 @@ static int __rb_map_vma(struct ring_buffer_per_cpu *cpu_buffer,

 	nr_pages = nr_vma_pages;

-	pages = kcalloc(nr_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kzalloc_objs(*pages, nr_pages, GFP_KERNEL);
 	if (!pages)
 		return -ENOMEM;

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 2f6fbf9e7caf..83ae2e8e931c 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -1064,7 +1064,7 @@ int tracing_snapshot_cond_enable(struct trace_array *tr, void *cond_data,
 				 cond_update_fn_t update)
 {
 	struct cond_snapshot *cond_snapshot __free(kfree) =
-		kzalloc(sizeof(*cond_snapshot), GFP_KERNEL);
+		kzalloc_obj(*cond_snapshot, GFP_KERNEL);
 	int ret;

 	if (!cond_snapshot)
@@ -3903,8 +3903,8 @@ __tracing_open(struct inode *inode, struct file *file, bool snapshot)
 	if (!iter)
 		return ERR_PTR(-ENOMEM);

-	iter->buffer_iter = kcalloc(nr_cpu_ids, sizeof(*iter->buffer_iter),
-				    GFP_KERNEL);
+	iter->buffer_iter = kzalloc_objs(*iter->buffer_iter, nr_cpu_ids,
+					 GFP_KERNEL);
 	if (!iter->buffer_iter)
 		goto release;

@@ -5132,7 +5132,7 @@ trace_insert_eval_map_file(struct module *mod, struct trace_eval_map **start,
 	 * where the head holds the module and length of array, and the
 	 * tail holds a pointer to the next list.
 	 */
-	map_array = kmalloc_array(len + 2, sizeof(*map_array), GFP_KERNEL);
+	map_array = kmalloc_objs(*map_array, len + 2, GFP_KERNEL);
 	if (!map_array) {
 		pr_warn("Unable to allocate trace eval mapping\n");
 		return;
@@ -5809,7 +5809,7 @@ static int tracing_open_pipe(struct inode *inode, struct file *filp)
 		goto fail_pipe_on_cpu;

 	/* create a buffer to store the information to pass to userspace */
-	iter = kzalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kzalloc_obj(*iter, GFP_KERNEL);
 	if (!iter) {
 		ret = -ENOMEM;
 		goto fail_alloc_iter;
@@ -6628,7 +6628,7 @@ static int user_buffer_init(struct trace_user_buf_info **tinfo, size_t size)

 	if (!*tinfo) {
 		alloc = true;
-		*tinfo = kzalloc(sizeof(**tinfo), GFP_KERNEL);
+		*tinfo = kzalloc_obj(**tinfo, GFP_KERNEL);
 		if (!*tinfo)
 			return -ENOMEM;
 	}
@@ -7153,10 +7153,10 @@ static int tracing_snapshot_open(struct inode *inode, struct file *file)
 	} else {
 		/* Writes still need the seq_file to hold the private data */
 		ret = -ENOMEM;
-		m = kzalloc(sizeof(*m), GFP_KERNEL);
+		m = kzalloc_obj(*m, GFP_KERNEL);
 		if (!m)
 			goto out;
-		iter = kzalloc(sizeof(*iter), GFP_KERNEL);
+		iter = kzalloc_obj(*iter, GFP_KERNEL);
 		if (!iter) {
 			kfree(m);
 			goto out;
@@ -7545,7 +7545,7 @@ static struct tracing_log_err *alloc_tracing_log_err(int len)
 {
 	struct tracing_log_err *err;

-	err = kzalloc(sizeof(*err), GFP_KERNEL);
+	err = kzalloc_obj(*err, GFP_KERNEL);
 	if (!err)
 		return ERR_PTR(-ENOMEM);

@@ -7804,7 +7804,7 @@ static int tracing_buffers_open(struct inode *inode, struct file *filp)
 	if (ret)
 		return ret;

-	info = kvzalloc(sizeof(*info), GFP_KERNEL);
+	info = kvzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		trace_array_put(tr);
 		return -ENOMEM;
@@ -8065,7 +8065,7 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
 		struct page *page;
 		int r;

-		ref = kzalloc(sizeof(*ref), GFP_KERNEL);
+		ref = kzalloc_obj(*ref, GFP_KERNEL);
 		if (!ref) {
 			ret = -ENOMEM;
 			break;
@@ -8284,7 +8284,7 @@ tracing_stats_read(struct file *filp, char __user *ubuf,
 	unsigned long long t;
 	unsigned long usec_rem;

-	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	s = kmalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

@@ -8878,7 +8878,7 @@ create_trace_option_files(struct trace_array *tr, struct tracer *tracer,
 	for (cnt = 0; opts[cnt].name; cnt++)
 		;

-	topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL);
+	topts = kzalloc_objs(*topts, cnt + 1, GFP_KERNEL);
 	if (!topts)
 		return 0;

@@ -8950,7 +8950,7 @@ static int add_tracer(struct trace_array *tr, struct tracer *tracer)
 	if (!trace_ok_for_array(tracer, tr))
 		return 0;

-	t = kmalloc(sizeof(*t), GFP_KERNEL);
+	t = kmalloc_obj(*t, GFP_KERNEL);
 	if (!t)
 		return -ENOMEM;

@@ -8967,7 +8967,7 @@ static int add_tracer(struct trace_array *tr, struct tracer *tracer)
 		 * If the tracer defines default flags, it means the flags are
 		 * per trace instance.
 		 */
-		flags = kmalloc(sizeof(*flags), GFP_KERNEL);
+		flags = kmalloc_obj(*flags, GFP_KERNEL);
 		if (!flags)
 			return -ENOMEM;

@@ -9310,7 +9310,8 @@ static void setup_trace_scratch(struct trace_array *tr,
 	       mod_addr_comp, NULL, NULL);

 	if (IS_ENABLED(CONFIG_MODULES)) {
-		module_delta = kzalloc(struct_size(module_delta, delta, nr_entries), GFP_KERNEL);
+		module_delta = kzalloc_flex(*module_delta, delta, nr_entries,
+					    GFP_KERNEL);
 		if (!module_delta) {
 			pr_info("module_delta allocation failed. Not able to decode module address.");
 			goto reset;
@@ -9537,7 +9538,7 @@ trace_array_create_systems(const char *name, const char *systems,
 	int ret;

 	ret = -ENOMEM;
-	tr = kzalloc(sizeof(*tr), GFP_KERNEL);
+	tr = kzalloc_obj(*tr, GFP_KERNEL);
 	if (!tr)
 		return ERR_PTR(ret);

@@ -10928,8 +10929,8 @@ void __init ftrace_boot_snapshot(void)
 void __init early_trace_init(void)
 {
 	if (tracepoint_printk) {
-		tracepoint_print_iter =
-			kzalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
+		tracepoint_print_iter = kzalloc_obj(*tracepoint_print_iter,
+						    GFP_KERNEL);
 		if (MEM_FAIL(!tracepoint_print_iter,
 			     "Failed to allocate trace iterator\n"))
 			tracepoint_printk = 0;
diff --git a/kernel/trace/trace_btf.c b/kernel/trace/trace_btf.c
index 5bbdbcbbde3c..1d3c42527736 100644
--- a/kernel/trace/trace_btf.c
+++ b/kernel/trace/trace_btf.c
@@ -78,7 +78,7 @@ const struct btf_member *btf_find_struct_member(struct btf *btf,
 	const char *name;
 	int i, top = 0;

-	anon_stack = kcalloc(BTF_ANON_STACK_MAX, sizeof(*anon_stack), GFP_KERNEL);
+	anon_stack = kzalloc_objs(*anon_stack, BTF_ANON_STACK_MAX, GFP_KERNEL);
 	if (!anon_stack)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c
index 3ee39715d5e4..3adc9a8c29a9 100644
--- a/kernel/trace/trace_eprobe.c
+++ b/kernel/trace/trace_eprobe.c
@@ -211,7 +211,7 @@ static struct trace_eprobe *alloc_event_probe(const char *group,
 	sys_name = event->class->system;
 	event_name = trace_event_name(event);

-	ep = kzalloc(struct_size(ep, tp.args, nargs), GFP_KERNEL);
+	ep = kzalloc_flex(*ep, tp.args, nargs, GFP_KERNEL);
 	if (!ep) {
 		trace_event_put_ref(event);
 		return ERR_PTR(-ENOMEM);
@@ -529,8 +529,8 @@ new_eprobe_trigger(struct trace_eprobe *ep, struct trace_event_file *file)
 	struct eprobe_data *edata;
 	int ret;

-	edata = kzalloc(sizeof(*edata), GFP_KERNEL);
-	trigger = kzalloc(sizeof(*trigger), GFP_KERNEL);
+	edata = kzalloc_obj(*edata, GFP_KERNEL);
+	trigger = kzalloc_obj(*trigger, GFP_KERNEL);
 	if (!trigger || !edata) {
 		ret = -ENOMEM;
 		goto error;
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index b659653dc03a..1d5ce0244f8c 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -976,7 +976,7 @@ static int cache_mod(struct trace_array *tr, const char *mod, int set,
 	if (!set)
 		return remove_cache_mod(tr, mod, match, system, event);

-	event_mod = kzalloc(sizeof(*event_mod), GFP_KERNEL);
+	event_mod = kzalloc_obj(*event_mod, GFP_KERNEL);
 	if (!event_mod)
 		return -ENOMEM;

@@ -1648,7 +1648,7 @@ static void *s_start(struct seq_file *m, loff_t *pos)
 	struct set_event_iter *iter;
 	loff_t l;

-	iter = kzalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kzalloc_obj(*iter, GFP_KERNEL);
 	mutex_lock(&event_mutex);
 	if (!iter)
 		return NULL;
@@ -2206,7 +2206,7 @@ event_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
 	if (*ppos)
 		return 0;

-	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	s = kmalloc_obj(*s, GFP_KERNEL);

 	if (!s)
 		return -ENOMEM;
@@ -2320,7 +2320,7 @@ static int system_tr_open(struct inode *inode, struct file *filp)
 	int ret;

 	/* Make a temporary dir that has no system but points to tr */
-	dir = kzalloc(sizeof(*dir), GFP_KERNEL);
+	dir = kzalloc_obj(*dir, GFP_KERNEL);
 	if (!dir)
 		return -ENOMEM;

@@ -2366,7 +2366,7 @@ subsystem_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
 	if (*ppos)
 		return 0;

-	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	s = kmalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

@@ -2416,7 +2416,7 @@ show_header_page_file(struct file *filp, char __user *ubuf, size_t cnt, loff_t *
 	if (*ppos)
 		return 0;

-	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	s = kmalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

@@ -2440,7 +2440,7 @@ show_header_event_file(struct file *filp, char __user *ubuf, size_t cnt, loff_t
 	if (*ppos)
 		return 0;

-	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	s = kmalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

@@ -2881,7 +2881,7 @@ create_new_subsystem(const char *name)
 	struct event_subsystem *system;

 	/* need to create new entry */
-	system = kmalloc(sizeof(*system), GFP_KERNEL);
+	system = kmalloc_obj(*system, GFP_KERNEL);
 	if (!system)
 		return NULL;

@@ -2892,7 +2892,7 @@ create_new_subsystem(const char *name)
 	if (!system->name)
 		goto out_free;

-	system->filter = kzalloc(sizeof(struct event_filter), GFP_KERNEL);
+	system->filter = kzalloc_obj(struct event_filter, GFP_KERNEL);
 	if (!system->filter)
 		goto out_free;

@@ -2960,7 +2960,7 @@ event_subsystem_dir(struct trace_array *tr, const char *name,
 		}
 	}

-	dir = kmalloc(sizeof(*dir), GFP_KERNEL);
+	dir = kmalloc_obj(*dir, GFP_KERNEL);
 	if (!dir)
 		goto out_fail;

@@ -3403,7 +3403,7 @@ static void add_str_to_module(struct module *module, char *str)
 {
 	struct module_string *modstr;

-	modstr = kmalloc(sizeof(*modstr), GFP_KERNEL);
+	modstr = kmalloc_obj(*modstr, GFP_KERNEL);

 	/*
 	 * If we failed to allocate memory here, then we'll just
@@ -4365,7 +4365,7 @@ event_enable_func(struct trace_array *tr, struct ftrace_hash *hash,
 		goto out_put;

 	ret = -ENOMEM;
-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		goto out_put;

diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 7001e34476ee..b84bdad362e9 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -485,10 +485,10 @@ predicate_parse(const char *str, int nr_parens, int nr_preds,

 	nr_preds += 2; /* For TRUE and FALSE */

-	op_stack = kmalloc_array(nr_parens, sizeof(*op_stack), GFP_KERNEL);
+	op_stack = kmalloc_objs(*op_stack, nr_parens, GFP_KERNEL);
 	if (!op_stack)
 		return ERR_PTR(-ENOMEM);
-	prog_stack = kcalloc(nr_preds, sizeof(*prog_stack), GFP_KERNEL);
+	prog_stack = kzalloc_objs(*prog_stack, nr_preds, GFP_KERNEL);
 	if (!prog_stack) {
 		parse_error(pe, -ENOMEM, 0);
 		goto out_free;
@@ -1213,7 +1213,7 @@ static void append_filter_err(struct trace_array *tr,
 	if (WARN_ON(!filter->filter_string))
 		return;

-	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	s = kmalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return;
 	trace_seq_init(s);
@@ -1394,13 +1394,13 @@ static void try_delay_free_filter(struct event_filter *filter)
 	struct filter_head *head;
 	struct filter_list *item;

-	head = kmalloc(sizeof(*head), GFP_KERNEL);
+	head = kmalloc_obj(*head, GFP_KERNEL);
 	if (!head)
 		goto free_now;

 	INIT_LIST_HEAD(&head->list);

-	item = kmalloc(sizeof(*item), GFP_KERNEL);
+	item = kmalloc_obj(*item, GFP_KERNEL);
 	if (!item) {
 		kfree(head);
 		goto free_now;
@@ -1442,7 +1442,7 @@ static void filter_free_subsystem_filters(struct trace_subsystem_dir *dir,
 	struct filter_head *head;
 	struct filter_list *item;

-	head = kmalloc(sizeof(*head), GFP_KERNEL);
+	head = kmalloc_obj(*head, GFP_KERNEL);
 	if (!head)
 		goto free_now;

@@ -1451,7 +1451,7 @@ static void filter_free_subsystem_filters(struct trace_subsystem_dir *dir,
 	list_for_each_entry(file, &tr->events, list) {
 		if (file->system != dir)
 			continue;
-		item = kmalloc(sizeof(*item), GFP_KERNEL);
+		item = kmalloc_obj(*item, GFP_KERNEL);
 		if (!item)
 			goto free_now;
 		item->filter = event_filter(file);
@@ -1459,7 +1459,7 @@ static void filter_free_subsystem_filters(struct trace_subsystem_dir *dir,
 		event_clear_filter(file);
 	}

-	item = kmalloc(sizeof(*item), GFP_KERNEL);
+	item = kmalloc_obj(*item, GFP_KERNEL);
 	if (!item)
 		goto free_now;

@@ -1708,7 +1708,7 @@ static int parse_pred(const char *str, void *data,

 	s = i;

-	pred = kzalloc(sizeof(*pred), GFP_KERNEL);
+	pred = kzalloc_obj(*pred, GFP_KERNEL);
 	if (!pred)
 		return -ENOMEM;

@@ -1819,7 +1819,7 @@ static int parse_pred(const char *str, void *data,
 			goto err_free;
 		}

-		pred->regex = kzalloc(sizeof(*pred->regex), GFP_KERNEL);
+		pred->regex = kzalloc_obj(*pred->regex, GFP_KERNEL);
 		if (!pred->regex)
 			goto err_mem;
 		pred->regex->len = len;
@@ -1984,7 +1984,7 @@ static int parse_pred(const char *str, void *data,
 			goto err_free;
 		}

-		pred->regex = kzalloc(sizeof(*pred->regex), GFP_KERNEL);
+		pred->regex = kzalloc_obj(*pred->regex, GFP_KERNEL);
 		if (!pred->regex)
 			goto err_mem;
 		pred->regex->len = len;
@@ -2261,7 +2261,7 @@ static int process_system_preds(struct trace_subsystem_dir *dir,
 	bool fail = true;
 	int err;

-	filter_list = kmalloc(sizeof(*filter_list), GFP_KERNEL);
+	filter_list = kmalloc_obj(*filter_list, GFP_KERNEL);
 	if (!filter_list)
 		return -ENOMEM;

@@ -2272,7 +2272,7 @@ static int process_system_preds(struct trace_subsystem_dir *dir,
 		if (file->system != dir)
 			continue;

-		filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+		filter = kzalloc_obj(*filter, GFP_KERNEL);
 		if (!filter)
 			goto fail_mem;

@@ -2289,7 +2289,7 @@ static int process_system_preds(struct trace_subsystem_dir *dir,
 			event_set_filtered_flag(file);


-		filter_item = kzalloc(sizeof(*filter_item), GFP_KERNEL);
+		filter_item = kzalloc_obj(*filter_item, GFP_KERNEL);
 		if (!filter_item)
 			goto fail_mem;

@@ -2343,14 +2343,14 @@ static int create_filter_start(char *filter_string, bool set_str,
 	if (WARN_ON_ONCE(*pse || *filterp))
 		return -EINVAL;

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (filter && set_str) {
 		filter->filter_string = kstrdup(filter_string, GFP_KERNEL);
 		if (!filter->filter_string)
 			err = -ENOMEM;
 	}

-	pe = kzalloc(sizeof(*pe), GFP_KERNEL);
+	pe = kzalloc_obj(*pe, GFP_KERNEL);

 	if (!filter || !pe || err) {
 		kfree(pe);
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 768df987419e..da42a087d646 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -732,7 +732,7 @@ static struct track_data *track_data_alloc(unsigned int key_len,
 					   struct action_data *action_data,
 					   struct hist_trigger_data *hist_data)
 {
-	struct track_data *data = kzalloc(sizeof(*data), GFP_KERNEL);
+	struct track_data *data = kzalloc_obj(*data, GFP_KERNEL);
 	struct hist_elt_data *elt_data;

 	if (!data)
@@ -748,7 +748,7 @@ static struct track_data *track_data_alloc(unsigned int key_len,
 	data->action_data = action_data;
 	data->hist_data = hist_data;

-	elt_data = kzalloc(sizeof(*elt_data), GFP_KERNEL);
+	elt_data = kzalloc_obj(*elt_data, GFP_KERNEL);
 	if (!elt_data) {
 		track_data_free(data);
 		return ERR_PTR(-ENOMEM);
@@ -1086,7 +1086,7 @@ static int save_hist_vars(struct hist_trigger_data *hist_data)
 	if (tracing_check_open_get_tr(tr))
 		return -ENODEV;

-	var_data = kzalloc(sizeof(*var_data), GFP_KERNEL);
+	var_data = kzalloc_obj(*var_data, GFP_KERNEL);
 	if (!var_data) {
 		trace_array_put(tr);
 		return -ENOMEM;
@@ -1548,7 +1548,7 @@ parse_hist_trigger_attrs(struct trace_array *tr, char *trigger_str)
 	struct hist_trigger_attrs *attrs;
 	int ret = 0;

-	attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_obj(*attrs, GFP_KERNEL);
 	if (!attrs)
 		return ERR_PTR(-ENOMEM);

@@ -1646,7 +1646,7 @@ static int hist_trigger_elt_data_alloc(struct tracing_map_elt *elt)
 	struct hist_field *hist_field;
 	unsigned int i, n_str;

-	elt_data = kzalloc(sizeof(*elt_data), GFP_KERNEL);
+	elt_data = kzalloc_obj(*elt_data, GFP_KERNEL);
 	if (!elt_data)
 		return -ENOMEM;

@@ -1962,7 +1962,7 @@ static struct hist_field *create_hist_field(struct hist_trigger_data *hist_data,
 	if (field && is_function_field(field))
 		return NULL;

-	hist_field = kzalloc(sizeof(struct hist_field), GFP_KERNEL);
+	hist_field = kzalloc_obj(struct hist_field, GFP_KERNEL);
 	if (!hist_field)
 		return NULL;

@@ -3049,7 +3049,7 @@ create_field_var_hist(struct hist_trigger_data *target_hist_data,
 	if (!IS_ERR_OR_NULL(event_var))
 		return event_var;

-	var_hist = kzalloc(sizeof(*var_hist), GFP_KERNEL);
+	var_hist = kzalloc_obj(*var_hist, GFP_KERNEL);
 	if (!var_hist)
 		return ERR_PTR(-ENOMEM);

@@ -3231,7 +3231,7 @@ static struct hist_field *create_var(struct hist_trigger_data *hist_data,
 		goto out;
 	}

-	var = kzalloc(sizeof(struct hist_field), GFP_KERNEL);
+	var = kzalloc_obj(struct hist_field, GFP_KERNEL);
 	if (!var) {
 		var = ERR_PTR(-ENOMEM);
 		goto out;
@@ -3292,7 +3292,7 @@ static struct field_var *create_field_var(struct hist_trigger_data *hist_data,
 		goto err;
 	}

-	field_var = kzalloc(sizeof(struct field_var), GFP_KERNEL);
+	field_var = kzalloc_obj(struct field_var, GFP_KERNEL);
 	if (!field_var) {
 		destroy_hist_field(val, 0);
 		kfree_const(var->type);
@@ -3831,7 +3831,7 @@ static struct action_data *track_data_parse(struct hist_trigger_data *hist_data,
 	int ret = -EINVAL;
 	char *var_str;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return ERR_PTR(-ENOMEM);

@@ -4198,7 +4198,7 @@ static struct action_data *onmatch_parse(struct trace_array *tr, char *str)
 	struct action_data *data;
 	int ret = -EINVAL;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return ERR_PTR(-ENOMEM);

@@ -5136,7 +5136,7 @@ create_hist_data(unsigned int map_bits,
 	struct hist_trigger_data *hist_data;
 	int ret = 0;

-	hist_data = kzalloc(sizeof(*hist_data), GFP_KERNEL);
+	hist_data = kzalloc_obj(*hist_data, GFP_KERNEL);
 	if (!hist_data)
 		return ERR_PTR(-ENOMEM);

@@ -5674,8 +5674,8 @@ static int print_entries(struct seq_file *m,
 			(HIST_FIELD_FL_PERCENT | HIST_FIELD_FL_GRAPH)))
 			continue;
 		if (!stats) {
-			stats = kcalloc(hist_data->n_vals, sizeof(*stats),
-				       GFP_KERNEL);
+			stats = kzalloc_objs(*stats, hist_data->n_vals,
+					     GFP_KERNEL);
 			if (!stats) {
 				n_entries = -ENOMEM;
 				goto out;
@@ -5828,7 +5828,7 @@ static int event_hist_open(struct inode *inode, struct file *file)
 		goto err;
 	}

-	hist_file = kzalloc(sizeof(*hist_file), GFP_KERNEL);
+	hist_file = kzalloc_obj(*hist_file, GFP_KERNEL);
 	if (!hist_file) {
 		ret = -ENOMEM;
 		goto err;
@@ -6602,7 +6602,7 @@ static int hist_register_trigger(char *glob,
 		data->private_data = named_data->private_data;
 		set_named_trigger_data(data, named_data);
 		/* Copy the command ops and update some of the functions */
-		cmd_ops = kmalloc(sizeof(*cmd_ops), GFP_KERNEL);
+		cmd_ops = kmalloc_obj(*cmd_ops, GFP_KERNEL);
 		if (!cmd_ops) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/kernel/trace/trace_events_synth.c b/kernel/trace/trace_events_synth.c
index ce42fbf16f4a..db74b2c663f8 100644
--- a/kernel/trace/trace_events_synth.c
+++ b/kernel/trace/trace_events_synth.c
@@ -711,7 +711,7 @@ static struct synth_field *parse_synth_field(int argc, char **argv,

 	*field_version = check_field_version(prefix, field_type, field_name);

-	field = kzalloc(sizeof(*field), GFP_KERNEL);
+	field = kzalloc_obj(*field, GFP_KERNEL);
 	if (!field)
 		return ERR_PTR(-ENOMEM);

@@ -819,7 +819,7 @@ static struct tracepoint *alloc_synth_tracepoint(char *name)
 {
 	struct tracepoint *tp;

-	tp = kzalloc(sizeof(*tp), GFP_KERNEL);
+	tp = kzalloc_obj(*tp, GFP_KERNEL);
 	if (!tp)
 		return ERR_PTR(-ENOMEM);

@@ -973,7 +973,7 @@ static struct synth_event *alloc_synth_event(const char *name, int n_fields,
 	unsigned int i, j, n_dynamic_fields = 0;
 	struct synth_event *event;

-	event = kzalloc(sizeof(*event), GFP_KERNEL);
+	event = kzalloc_obj(*event, GFP_KERNEL);
 	if (!event) {
 		event = ERR_PTR(-ENOMEM);
 		goto out;
@@ -986,7 +986,7 @@ static struct synth_event *alloc_synth_event(const char *name, int n_fields,
 		goto out;
 	}

-	event->fields = kcalloc(n_fields, sizeof(*event->fields), GFP_KERNEL);
+	event->fields = kzalloc_objs(*event->fields, n_fields, GFP_KERNEL);
 	if (!event->fields) {
 		free_synth_event(event);
 		event = ERR_PTR(-ENOMEM);
@@ -998,9 +998,9 @@ static struct synth_event *alloc_synth_event(const char *name, int n_fields,
 			n_dynamic_fields++;

 	if (n_dynamic_fields) {
-		event->dynamic_fields = kcalloc(n_dynamic_fields,
-						sizeof(*event->dynamic_fields),
-						GFP_KERNEL);
+		event->dynamic_fields = kzalloc_objs(*event->dynamic_fields,
+						     n_dynamic_fields,
+						     GFP_KERNEL);
 		if (!event->dynamic_fields) {
 			free_synth_event(event);
 			event = ERR_PTR(-ENOMEM);
diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
index 7fa26327c9c7..7ba3548a2f60 100644
--- a/kernel/trace/trace_events_trigger.c
+++ b/kernel/trace/trace_events_trigger.c
@@ -914,7 +914,7 @@ struct event_trigger_data *trigger_data_alloc(struct event_command *cmd_ops,
 {
 	struct event_trigger_data *trigger_data;

-	trigger_data = kzalloc(sizeof(*trigger_data), GFP_KERNEL);
+	trigger_data = kzalloc_obj(*trigger_data, GFP_KERNEL);
 	if (!trigger_data)
 		return NULL;

@@ -1724,7 +1724,7 @@ int event_enable_trigger_parse(struct event_command *cmd_ops,
 #endif
 	ret = -ENOMEM;

-	enable_data = kzalloc(sizeof(*enable_data), GFP_KERNEL);
+	enable_data = kzalloc_obj(*enable_data, GFP_KERNEL);
 	if (!enable_data)
 		return ret;

diff --git a/kernel/trace/trace_events_user.c b/kernel/trace/trace_events_user.c
index dca6e50b3b21..c35182cb7286 100644
--- a/kernel/trace/trace_events_user.c
+++ b/kernel/trace/trace_events_user.c
@@ -370,7 +370,7 @@ static struct user_event_group *user_event_group_create(void)
 {
 	struct user_event_group *group;

-	group = kzalloc(sizeof(*group), GFP_KERNEL);
+	group = kzalloc_obj(*group, GFP_KERNEL);

 	if (!group)
 		return NULL;
@@ -637,7 +637,7 @@ static bool user_event_enabler_dup(struct user_event_enabler *orig,
 	if (unlikely(test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(orig))))
 		return true;

-	enabler = kzalloc(sizeof(*enabler), GFP_NOWAIT | __GFP_ACCOUNT);
+	enabler = kzalloc_obj(*enabler, GFP_NOWAIT | __GFP_ACCOUNT);

 	if (!enabler)
 		return false;
@@ -706,7 +706,7 @@ static struct user_event_mm *user_event_mm_alloc(struct task_struct *t)
 {
 	struct user_event_mm *user_mm;

-	user_mm = kzalloc(sizeof(*user_mm), GFP_KERNEL_ACCOUNT);
+	user_mm = kzalloc_obj(*user_mm, GFP_KERNEL_ACCOUNT);

 	if (!user_mm)
 		return NULL;
@@ -892,7 +892,7 @@ static struct user_event_enabler
 	if (!user_mm)
 		return NULL;

-	enabler = kzalloc(sizeof(*enabler), GFP_KERNEL_ACCOUNT);
+	enabler = kzalloc_obj(*enabler, GFP_KERNEL_ACCOUNT);

 	if (!enabler)
 		goto out;
@@ -1113,7 +1113,7 @@ static int user_event_add_field(struct user_event *user, const char *type,
 	struct ftrace_event_field *field;
 	int validator_flags = 0;

-	field = kmalloc(sizeof(*field), GFP_KERNEL_ACCOUNT);
+	field = kmalloc_obj(*field, GFP_KERNEL_ACCOUNT);

 	if (!field)
 		return -ENOMEM;
@@ -1132,7 +1132,7 @@ static int user_event_add_field(struct user_event *user, const char *type,
 	if (strstr(type, "char") != NULL)
 		validator_flags |= VALIDATOR_ENSURE_NULL;

-	validator = kmalloc(sizeof(*validator), GFP_KERNEL_ACCOUNT);
+	validator = kmalloc_obj(*validator, GFP_KERNEL_ACCOUNT);

 	if (!validator) {
 		kfree(field);
@@ -2105,7 +2105,7 @@ static int user_event_parse(struct user_event_group *group, char *name,
 		return 0;
 	}

-	user = kzalloc(sizeof(*user), GFP_KERNEL_ACCOUNT);
+	user = kzalloc_obj(*user, GFP_KERNEL_ACCOUNT);

 	if (!user)
 		return -ENOMEM;
@@ -2315,7 +2315,7 @@ static int user_events_open(struct inode *node, struct file *file)
 	if (!group)
 		return -ENOENT;

-	info = kzalloc(sizeof(*info), GFP_KERNEL_ACCOUNT);
+	info = kzalloc_obj(*info, GFP_KERNEL_ACCOUNT);

 	if (!info)
 		return -ENOMEM;
diff --git a/kernel/trace/trace_fprobe.c b/kernel/trace/trace_fprobe.c
index 262c0556e4af..7decd8383d67 100644
--- a/kernel/trace/trace_fprobe.c
+++ b/kernel/trace/trace_fprobe.c
@@ -99,7 +99,7 @@ static struct tracepoint_user *__tracepoint_user_init(const char *name, struct t
 	struct tracepoint_user *tuser __free(tuser_free) = NULL;
 	int ret;

-	tuser = kzalloc(sizeof(*tuser), GFP_KERNEL);
+	tuser = kzalloc_obj(*tuser, GFP_KERNEL);
 	if (!tuser)
 		return NULL;
 	tuser->name = kstrdup(name, GFP_KERNEL);
@@ -579,7 +579,7 @@ static struct trace_fprobe *alloc_trace_fprobe(const char *group,
 	struct trace_fprobe *tf __free(free_trace_fprobe) = NULL;
 	int ret = -ENOMEM;

-	tf = kzalloc(struct_size(tf, tp.args, nargs), GFP_KERNEL);
+	tf = kzalloc_flex(*tf, tp.args, nargs, GFP_KERNEL);
 	if (!tf)
 		return ERR_PTR(ret);

@@ -1403,7 +1403,7 @@ static int trace_fprobe_create_cb(int argc, const char *argv[])
 	struct traceprobe_parse_context *ctx __free(traceprobe_parse_context) = NULL;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c
index c12795c2fb39..a7e4ad088acf 100644
--- a/kernel/trace/trace_functions.c
+++ b/kernel/trace/trace_functions.c
@@ -61,7 +61,7 @@ int ftrace_allocate_ftrace_ops(struct trace_array *tr)
 	if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
 		return 0;

-	ops = kzalloc(sizeof(*ops), GFP_KERNEL);
+	ops = kzalloc_obj(*ops, GFP_KERNEL);
 	if (!ops)
 		return -ENOMEM;

diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index 1de6f1573621..73f0479aeac0 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
@@ -434,7 +434,7 @@ int allocate_fgraph_ops(struct trace_array *tr, struct ftrace_ops *ops)
 {
 	struct fgraph_ops *gops;

-	gops = kzalloc(sizeof(*gops), GFP_KERNEL);
+	gops = kzalloc_obj(*gops, GFP_KERNEL);
 	if (!gops)
 		return -ENOMEM;

@@ -1613,7 +1613,7 @@ void graph_trace_open(struct trace_iterator *iter)
 	/* We can be called in atomic context via ftrace_dump() */
 	gfpflags = (in_atomic() || irqs_disabled()) ? GFP_ATOMIC : GFP_KERNEL;

-	data = kzalloc(sizeof(*data), gfpflags);
+	data = kzalloc_obj(*data, gfpflags);
 	if (!data)
 		goto out_err;

diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index b4f62d2e41ed..808b91873bd6 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -275,7 +275,7 @@ static struct trace_kprobe *alloc_trace_kprobe(const char *group,
 	struct trace_kprobe *tk __free(free_trace_kprobe) = NULL;
 	int ret = -ENOMEM;

-	tk = kzalloc(struct_size(tk, tp.args, nargs), GFP_KERNEL);
+	tk = kzalloc_flex(*tk, tp.args, nargs, GFP_KERNEL);
 	if (!tk)
 		return ERR_PTR(ret);

@@ -1082,7 +1082,7 @@ static int trace_kprobe_create_cb(int argc, const char *argv[])
 	struct traceprobe_parse_context *ctx __free(traceprobe_parse_context) = NULL;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx->flags = TPARG_FL_KERNEL;
diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c
index c706544be60c..1c752a691317 100644
--- a/kernel/trace/trace_mmiotrace.c
+++ b/kernel/trace/trace_mmiotrace.c
@@ -101,7 +101,7 @@ static void mmio_pipe_open(struct trace_iterator *iter)

 	trace_seq_puts(s, "VERSION 20070824\n");

-	hiter = kzalloc(sizeof(*hiter), GFP_KERNEL);
+	hiter = kzalloc_obj(*hiter, GFP_KERNEL);
 	if (!hiter)
 		return;

diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c
index 827104d00bc0..51e7b0476a7f 100644
--- a/kernel/trace/trace_osnoise.c
+++ b/kernel/trace/trace_osnoise.c
@@ -122,7 +122,7 @@ static int osnoise_register_instance(struct trace_array *tr)
 	 */
 	lockdep_assert_held(&trace_types_lock);

-	inst = kmalloc(sizeof(*inst), GFP_KERNEL);
+	inst = kmalloc_obj(*inst, GFP_KERNEL);
 	if (!inst)
 		return -ENOMEM;

diff --git a/kernel/trace/trace_printk.c b/kernel/trace/trace_printk.c
index 6a29e4350b55..05b61ec67622 100644
--- a/kernel/trace/trace_printk.c
+++ b/kernel/trace/trace_printk.c
@@ -69,7 +69,7 @@ void hold_module_trace_bprintk_format(const char **start, const char **end)
 		}

 		fmt = NULL;
-		tb_fmt = kmalloc(sizeof(*tb_fmt), GFP_KERNEL);
+		tb_fmt = kmalloc_obj(*tb_fmt, GFP_KERNEL);
 		if (tb_fmt) {
 			fmt = kmalloc(strlen(*iter) + 1, GFP_KERNEL);
 			if (fmt) {
diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
index 2f571083ce9e..fff0879cb0e9 100644
--- a/kernel/trace/trace_probe.c
+++ b/kernel/trace/trace_probe.c
@@ -838,12 +838,12 @@ static int __store_entry_arg(struct trace_probe *tp, int argnum)
 	int i, offset, last_offset = 0;

 	if (!earg) {
-		earg = kzalloc(sizeof(*tp->entry_arg), GFP_KERNEL);
+		earg = kzalloc_obj(*tp->entry_arg, GFP_KERNEL);
 		if (!earg)
 			return -ENOMEM;
 		earg->size = 2 * tp->nr_args + 1;
-		earg->code = kcalloc(earg->size, sizeof(struct fetch_insn),
-				     GFP_KERNEL);
+		earg->code = kzalloc_objs(struct fetch_insn, earg->size,
+					  GFP_KERNEL);
 		if (!earg->code) {
 			kfree(earg);
 			return -ENOMEM;
@@ -1499,7 +1499,7 @@ static int traceprobe_parse_probe_arg_body(const char *argv, ssize_t *size,
 	if (IS_ERR(type))
 		return PTR_ERR(type);

-	code = tmp = kcalloc(FETCH_INSN_MAX, sizeof(*code), GFP_KERNEL);
+	code = tmp = kzalloc_objs(*code, FETCH_INSN_MAX, GFP_KERNEL);
 	if (!code)
 		return -ENOMEM;
 	code[FETCH_INSN_MAX - 1].op = FETCH_OP_END;
@@ -1543,7 +1543,7 @@ static int traceprobe_parse_probe_arg_body(const char *argv, ssize_t *size,
 		if (code->op == FETCH_OP_END)
 			break;
 	/* Shrink down the code buffer */
-	parg->code = kcalloc(code - tmp + 1, sizeof(*code), GFP_KERNEL);
+	parg->code = kzalloc_objs(*code, code - tmp + 1, GFP_KERNEL);
 	if (!parg->code)
 		ret = -ENOMEM;
 	else
@@ -2149,7 +2149,7 @@ int trace_probe_add_file(struct trace_probe *tp, struct trace_event_file *file)
 {
 	struct event_file_link *link;

-	link = kmalloc(sizeof(*link), GFP_KERNEL);
+	link = kmalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return -ENOMEM;

diff --git a/kernel/trace/trace_recursion_record.c b/kernel/trace/trace_recursion_record.c
index a520b11afb0d..852069484060 100644
--- a/kernel/trace/trace_recursion_record.c
+++ b/kernel/trace/trace_recursion_record.c
@@ -129,7 +129,7 @@ static void *recursed_function_seq_start(struct seq_file *m, loff_t *pos)
 		ret = &recursed_functions[*pos];
 	}

-	tseq = kzalloc(sizeof(*tseq), GFP_KERNEL);
+	tseq = kzalloc_obj(*tseq, GFP_KERNEL);
 	if (!tseq)
 		return ERR_PTR(-ENOMEM);

diff --git a/kernel/trace/trace_sched_switch.c b/kernel/trace/trace_sched_switch.c
index c46d584ded3b..ded84f1d8121 100644
--- a/kernel/trace/trace_sched_switch.c
+++ b/kernel/trace/trace_sched_switch.c
@@ -444,8 +444,7 @@ int trace_alloc_tgid_map(void)
 		return 0;

 	tgid_map_max = init_pid_ns.pid_max;
-	map = kvcalloc(tgid_map_max + 1, sizeof(*tgid_map),
-		       GFP_KERNEL);
+	map = kvzalloc_objs(*tgid_map, tgid_map_max + 1, GFP_KERNEL);
 	if (!map)
 		return -ENOMEM;

diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c
index be53fe6fee6a..43ed16b3b160 100644
--- a/kernel/trace/trace_selftest.c
+++ b/kernel/trace/trace_selftest.c
@@ -248,7 +248,7 @@ static int trace_selftest_ops(struct trace_array *tr, int cnt)
 		goto out;

 	/* Add a dynamic probe */
-	dyn_ops = kzalloc(sizeof(*dyn_ops), GFP_KERNEL);
+	dyn_ops = kzalloc_obj(*dyn_ops, GFP_KERNEL);
 	if (!dyn_ops) {
 		printk("MEMORY ERROR ");
 		goto out;
diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c
index b3b5586f104d..3fec69e8a6d4 100644
--- a/kernel/trace/trace_stat.c
+++ b/kernel/trace/trace_stat.c
@@ -77,7 +77,7 @@ static int insert_stat(struct rb_root *root, void *stat, cmp_func_t cmp)
 	struct rb_node **new = &(root->rb_node), *parent = NULL;
 	struct stat_node *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 	data->stat = stat;
@@ -322,7 +322,7 @@ int register_stat_tracer(struct tracer_stat *trace)
 	}

 	/* Init the session */
-	session = kzalloc(sizeof(*session), GFP_KERNEL);
+	session = kzalloc_obj(*session, GFP_KERNEL);
 	if (!session)
 		return -ENOMEM;

diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
index e96d0063cbcf..2f495e46034f 100644
--- a/kernel/trace/trace_syscalls.c
+++ b/kernel/trace/trace_syscalls.c
@@ -617,7 +617,7 @@ static int syscall_fault_buffer_enable(void)
 		return 0;
 	}

-	sbuf = kmalloc(sizeof(*sbuf), GFP_KERNEL);
+	sbuf = kmalloc_obj(*sbuf, GFP_KERNEL);
 	if (!sbuf)
 		return -ENOMEM;

@@ -1337,9 +1337,8 @@ void __init init_ftrace_syscalls(void)
 	void *ret;

 	if (!IS_ENABLED(CONFIG_HAVE_SPARSE_SYSCALL_NR)) {
-		syscalls_metadata = kcalloc(NR_syscalls,
-					sizeof(*syscalls_metadata),
-					GFP_KERNEL);
+		syscalls_metadata = kzalloc_objs(*syscalls_metadata,
+						 NR_syscalls, GFP_KERNEL);
 		if (!syscalls_metadata) {
 			WARN_ON(1);
 			return;
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
index 1b4f32e2b9bd..83c17b90daad 100644
--- a/kernel/trace/trace_uprobe.c
+++ b/kernel/trace/trace_uprobe.c
@@ -338,7 +338,7 @@ alloc_trace_uprobe(const char *group, const char *event, int nargs, bool is_ret)
 	struct trace_uprobe *tu;
 	int ret;

-	tu = kzalloc(struct_size(tu, tp.args, nargs), GFP_KERNEL);
+	tu = kzalloc_flex(*tu, tp.args, nargs, GFP_KERNEL);
 	if (!tu)
 		return ERR_PTR(-ENOMEM);

@@ -699,7 +699,7 @@ static int __trace_uprobe_create(int argc, const char **argv)
 	memset(&path, 0, sizeof(path));
 	tu->filename = no_free_ptr(filename);

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	ctx->flags = (is_return ? TPARG_FL_RETURN : 0) | TPARG_FL_USER;
diff --git a/kernel/trace/tracing_map.c b/kernel/trace/tracing_map.c
index 7f8da4dab69d..ef28c6c52295 100644
--- a/kernel/trace/tracing_map.c
+++ b/kernel/trace/tracing_map.c
@@ -324,7 +324,7 @@ static struct tracing_map_array *tracing_map_array_alloc(unsigned int n_elts,
 	struct tracing_map_array *a;
 	unsigned int i;

-	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	a = kzalloc_obj(*a, GFP_KERNEL);
 	if (!a)
 		return NULL;

@@ -405,7 +405,7 @@ static struct tracing_map_elt *tracing_map_elt_alloc(struct tracing_map *map)
 	struct tracing_map_elt *elt;
 	int err = 0;

-	elt = kzalloc(sizeof(*elt), GFP_KERNEL);
+	elt = kzalloc_obj(*elt, GFP_KERNEL);
 	if (!elt)
 		return ERR_PTR(-ENOMEM);

@@ -417,19 +417,19 @@ static struct tracing_map_elt *tracing_map_elt_alloc(struct tracing_map *map)
 		goto free;
 	}

-	elt->fields = kcalloc(map->n_fields, sizeof(*elt->fields), GFP_KERNEL);
+	elt->fields = kzalloc_objs(*elt->fields, map->n_fields, GFP_KERNEL);
 	if (!elt->fields) {
 		err = -ENOMEM;
 		goto free;
 	}

-	elt->vars = kcalloc(map->n_vars, sizeof(*elt->vars), GFP_KERNEL);
+	elt->vars = kzalloc_objs(*elt->vars, map->n_vars, GFP_KERNEL);
 	if (!elt->vars) {
 		err = -ENOMEM;
 		goto free;
 	}

-	elt->var_set = kcalloc(map->n_vars, sizeof(*elt->var_set), GFP_KERNEL);
+	elt->var_set = kzalloc_objs(*elt->var_set, map->n_vars, GFP_KERNEL);
 	if (!elt->var_set) {
 		err = -ENOMEM;
 		goto free;
@@ -777,7 +777,7 @@ struct tracing_map *tracing_map_create(unsigned int map_bits,
 	    map_bits > TRACING_MAP_BITS_MAX)
 		return ERR_PTR(-EINVAL);

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return ERR_PTR(-ENOMEM);

@@ -949,7 +949,7 @@ create_sort_entry(void *key, struct tracing_map_elt *elt)
 {
 	struct tracing_map_sort_entry *sort_entry;

-	sort_entry = kzalloc(sizeof(*sort_entry), GFP_KERNEL);
+	sort_entry = kzalloc_obj(*sort_entry, GFP_KERNEL);
 	if (!sort_entry)
 		return NULL;

diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index fd2ee879815c..8287a4ff3f18 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -103,8 +103,7 @@ static void tp_stub_func(void)

 static inline void *allocate_probes(int count)
 {
-	struct tp_probes *p  = kmalloc(struct_size(p, probes, count),
-				       GFP_KERNEL);
+	struct tp_probes *p  = kmalloc_flex(*p, probes, count, GFP_KERNEL);
 	return p == NULL ? NULL : p->probes;
 }

@@ -615,7 +614,7 @@ static int tracepoint_module_coming(struct module *mod)
 	if (trace_module_has_bad_taint(mod))
 		return 0;

-	tp_mod = kmalloc(sizeof(struct tp_module), GFP_KERNEL);
+	tp_mod = kmalloc_obj(struct tp_module, GFP_KERNEL);
 	if (!tp_mod)
 		return -ENOMEM;
 	tp_mod->mod = mod;
diff --git a/kernel/ucount.c b/kernel/ucount.c
index fc4a8f2d3096..d1f723805c6d 100644
--- a/kernel/ucount.c
+++ b/kernel/ucount.c
@@ -163,7 +163,7 @@ struct ucounts *alloc_ucounts(struct user_namespace *ns, kuid_t uid)
 	if (ucounts)
 		return ucounts;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;

diff --git a/kernel/umh.c b/kernel/umh.c
index b4da45a3a7cf..cffda97d961c 100644
--- a/kernel/umh.c
+++ b/kernel/umh.c
@@ -359,7 +359,7 @@ struct subprocess_info *call_usermodehelper_setup(const char *path, char **argv,
 		void *data)
 {
 	struct subprocess_info *sub_info;
-	sub_info = kzalloc(sizeof(struct subprocess_info), gfp_mask);
+	sub_info = kzalloc_obj(struct subprocess_info, gfp_mask);
 	if (!sub_info)
 		goto out;

diff --git a/kernel/unwind/deferred.c b/kernel/unwind/deferred.c
index a88fb481c4a3..23a7d7ea93d4 100644
--- a/kernel/unwind/deferred.c
+++ b/kernel/unwind/deferred.c
@@ -120,8 +120,8 @@ int unwind_user_faultable(struct unwind_stacktrace *trace)
 		return -EINVAL;

 	if (!info->cache) {
-		info->cache = kzalloc(struct_size(cache, entries, UNWIND_MAX_ENTRIES),
-				      GFP_KERNEL);
+		info->cache = kzalloc_flex(*cache, entries, UNWIND_MAX_ENTRIES,
+					   GFP_KERNEL);
 		if (!info->cache)
 			return -ENOMEM;
 	}
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
index 03cb63883d04..bb42a4c35dd3 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -794,9 +794,8 @@ static int insert_extent(struct uid_gid_map *map, struct uid_gid_extent *extent)
 		struct uid_gid_extent *forward;

 		/* Allocate memory for 340 mappings. */
-		forward = kmalloc_array(UID_GID_MAP_MAX_EXTENTS,
-					sizeof(struct uid_gid_extent),
-					GFP_KERNEL);
+		forward = kmalloc_objs(struct uid_gid_extent,
+				       UID_GID_MAP_MAX_EXTENTS, GFP_KERNEL);
 		if (!forward)
 			return -ENOMEM;

diff --git a/kernel/vhost_task.c b/kernel/vhost_task.c
index 27107dcc1cbf..bf84af48dce8 100644
--- a/kernel/vhost_task.c
+++ b/kernel/vhost_task.c
@@ -132,7 +132,7 @@ struct vhost_task *vhost_task_create(bool (*fn)(void *),
 	struct vhost_task *vtsk;
 	struct task_struct *tsk;

-	vtsk = kzalloc(sizeof(*vtsk), GFP_KERNEL);
+	vtsk = kzalloc_obj(*vtsk, GFP_KERNEL);
 	if (!vtsk)
 		return ERR_PTR(-ENOMEM);
 	init_completion(&vtsk->exited);
diff --git a/kernel/watch_queue.c b/kernel/watch_queue.c
index 52f89f1137da..d966b8c99052 100644
--- a/kernel/watch_queue.c
+++ b/kernel/watch_queue.c
@@ -278,7 +278,7 @@ long watch_queue_set_size(struct pipe_inode_info *pipe, unsigned int nr_notes)
 	pipe->nr_accounted = nr_pages;

 	ret = -ENOMEM;
-	pages = kcalloc(nr_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kzalloc_objs(struct page *, nr_pages, GFP_KERNEL);
 	if (!pages)
 		goto error;

@@ -358,7 +358,7 @@ long watch_queue_set_filter(struct pipe_inode_info *pipe,
 	 * user-specified filters.
 	 */
 	ret = -ENOMEM;
-	wfilter = kzalloc(struct_size(wfilter, filters, nr_filter), GFP_KERNEL);
+	wfilter = kzalloc_flex(*wfilter, filters, nr_filter, GFP_KERNEL);
 	if (!wfilter)
 		goto err_filter;
 	wfilter->nr_filters = nr_filter;
@@ -692,7 +692,7 @@ int watch_queue_init(struct pipe_inode_info *pipe)
 {
 	struct watch_queue *wqueue;

-	wqueue = kzalloc(sizeof(*wqueue), GFP_KERNEL);
+	wqueue = kzalloc_obj(*wqueue, GFP_KERNEL);
 	if (!wqueue)
 		return -ENOMEM;

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index c515cff01828..ee3e81133f78 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -4714,7 +4714,7 @@ struct workqueue_attrs *alloc_workqueue_attrs_noprof(void)
 {
 	struct workqueue_attrs *attrs;

-	attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);
+	attrs = kzalloc_obj(*attrs, GFP_KERNEL);
 	if (!attrs)
 		goto fail;
 	if (!alloc_cpumask_var(&attrs->cpumask, GFP_KERNEL))
@@ -5370,7 +5370,7 @@ apply_wqattrs_prepare(struct workqueue_struct *wq,
 		    attrs->affn_scope >= WQ_AFFN_NR_TYPES))
 		return ERR_PTR(-EINVAL);

-	ctx = kzalloc(struct_size(ctx, pwq_tbl, nr_cpu_ids), GFP_KERNEL);
+	ctx = kzalloc_flex(*ctx, pwq_tbl, nr_cpu_ids, GFP_KERNEL);

 	new_attrs = alloc_workqueue_attrs();
 	if (!ctx || !new_attrs)
@@ -7486,7 +7486,7 @@ int workqueue_sysfs_register(struct workqueue_struct *wq)
 	if (WARN_ON(wq->flags & __WQ_ORDERED))
 		return -EINVAL;

-	wq->wq_dev = wq_dev = kzalloc(sizeof(*wq_dev), GFP_KERNEL);
+	wq->wq_dev = wq_dev = kzalloc_obj(*wq_dev, GFP_KERNEL);
 	if (!wq_dev)
 		return -ENOMEM;

@@ -7879,9 +7879,9 @@ void __init workqueue_init_early(void)
 		wq_power_efficient = true;

 	/* initialize WQ_AFFN_SYSTEM pods */
-	pt->pod_cpus = kcalloc(1, sizeof(pt->pod_cpus[0]), GFP_KERNEL);
-	pt->pod_node = kcalloc(1, sizeof(pt->pod_node[0]), GFP_KERNEL);
-	pt->cpu_pod = kcalloc(nr_cpu_ids, sizeof(pt->cpu_pod[0]), GFP_KERNEL);
+	pt->pod_cpus = kzalloc_objs(pt->pod_cpus[0], 1, GFP_KERNEL);
+	pt->pod_node = kzalloc_objs(pt->pod_node[0], 1, GFP_KERNEL);
+	pt->cpu_pod = kzalloc_objs(pt->cpu_pod[0], nr_cpu_ids, GFP_KERNEL);
 	BUG_ON(!pt->pod_cpus || !pt->pod_node || !pt->cpu_pod);

 	BUG_ON(!zalloc_cpumask_var_node(&pt->pod_cpus[0], GFP_KERNEL, NUMA_NO_NODE));
@@ -8063,7 +8063,7 @@ static void __init init_pod_type(struct wq_pod_type *pt,
 	pt->nr_pods = 0;

 	/* init @pt->cpu_pod[] according to @cpus_share_pod() */
-	pt->cpu_pod = kcalloc(nr_cpu_ids, sizeof(pt->cpu_pod[0]), GFP_KERNEL);
+	pt->cpu_pod = kzalloc_objs(pt->cpu_pod[0], nr_cpu_ids, GFP_KERNEL);
 	BUG_ON(!pt->cpu_pod);

 	for_each_possible_cpu(cur) {
@@ -8080,8 +8080,8 @@ static void __init init_pod_type(struct wq_pod_type *pt,
 	}

 	/* init the rest to match @pt->cpu_pod[] */
-	pt->pod_cpus = kcalloc(pt->nr_pods, sizeof(pt->pod_cpus[0]), GFP_KERNEL);
-	pt->pod_node = kcalloc(pt->nr_pods, sizeof(pt->pod_node[0]), GFP_KERNEL);
+	pt->pod_cpus = kzalloc_objs(pt->pod_cpus[0], pt->nr_pods, GFP_KERNEL);
+	pt->pod_node = kzalloc_objs(pt->pod_node[0], pt->nr_pods, GFP_KERNEL);
 	BUG_ON(!pt->pod_cpus || !pt->pod_node);

 	for (pod = 0; pod < pt->nr_pods; pod++)
diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
index 00ae4673a271..58991ab09d84 100644
--- a/lib/alloc_tag.c
+++ b/lib/alloc_tag.c
@@ -669,8 +669,9 @@ static int __init alloc_mod_tags_mem(void)
 		return -ENOMEM;
 	}

-	vm_module_tags->pages = kmalloc_array(get_vm_area_size(vm_module_tags) >> PAGE_SHIFT,
-					sizeof(struct page *), GFP_KERNEL | __GFP_ZERO);
+	vm_module_tags->pages = kmalloc_objs(struct page *,
+					     get_vm_area_size(vm_module_tags) >> PAGE_SHIFT,
+					     GFP_KERNEL | __GFP_ZERO);
 	if (!vm_module_tags->pages) {
 		free_vm_area(vm_module_tags);
 		return -ENOMEM;
diff --git a/lib/assoc_array.c b/lib/assoc_array.c
index 388e656ac974..6cd376ad5030 100644
--- a/lib/assoc_array.c
+++ b/lib/assoc_array.c
@@ -454,7 +454,7 @@ static bool assoc_array_insert_in_empty_tree(struct assoc_array_edit *edit)

 	pr_devel("-->%s()\n", __func__);

-	new_n0 = kzalloc(sizeof(struct assoc_array_node), GFP_KERNEL);
+	new_n0 = kzalloc_obj(struct assoc_array_node, GFP_KERNEL);
 	if (!new_n0)
 		return false;

@@ -536,11 +536,11 @@ static bool assoc_array_insert_into_terminal_node(struct assoc_array_edit *edit,
 	 * those now.  We may also need a new shortcut, but we deal with that
 	 * when we need it.
 	 */
-	new_n0 = kzalloc(sizeof(struct assoc_array_node), GFP_KERNEL);
+	new_n0 = kzalloc_obj(struct assoc_array_node, GFP_KERNEL);
 	if (!new_n0)
 		return false;
 	edit->new_meta[0] = assoc_array_node_to_ptr(new_n0);
-	new_n1 = kzalloc(sizeof(struct assoc_array_node), GFP_KERNEL);
+	new_n1 = kzalloc_obj(struct assoc_array_node, GFP_KERNEL);
 	if (!new_n1)
 		return false;
 	edit->new_meta[1] = assoc_array_node_to_ptr(new_n1);
@@ -741,7 +741,7 @@ static bool assoc_array_insert_into_terminal_node(struct assoc_array_edit *edit,
 	keylen = round_up(diff, ASSOC_ARRAY_KEY_CHUNK_SIZE);
 	keylen >>= ASSOC_ARRAY_KEY_CHUNK_SHIFT;

-	new_s0 = kzalloc(struct_size(new_s0, index_key, keylen), GFP_KERNEL);
+	new_s0 = kzalloc_flex(*new_s0, index_key, keylen, GFP_KERNEL);
 	if (!new_s0)
 		return false;
 	edit->new_meta[2] = assoc_array_shortcut_to_ptr(new_s0);
@@ -832,7 +832,7 @@ static bool assoc_array_insert_mid_shortcut(struct assoc_array_edit *edit,
 	edit->excised_meta[0] = assoc_array_shortcut_to_ptr(shortcut);

 	/* Create a new node now since we're going to need it anyway */
-	new_n0 = kzalloc(sizeof(struct assoc_array_node), GFP_KERNEL);
+	new_n0 = kzalloc_obj(struct assoc_array_node, GFP_KERNEL);
 	if (!new_n0)
 		return false;
 	edit->new_meta[0] = assoc_array_node_to_ptr(new_n0);
@@ -848,8 +848,7 @@ static bool assoc_array_insert_mid_shortcut(struct assoc_array_edit *edit,
 		keylen = round_up(diff, ASSOC_ARRAY_KEY_CHUNK_SIZE);
 		keylen >>= ASSOC_ARRAY_KEY_CHUNK_SHIFT;

-		new_s0 = kzalloc(struct_size(new_s0, index_key, keylen),
-				 GFP_KERNEL);
+		new_s0 = kzalloc_flex(*new_s0, index_key, keylen, GFP_KERNEL);
 		if (!new_s0)
 			return false;
 		edit->new_meta[1] = assoc_array_shortcut_to_ptr(new_s0);
@@ -898,8 +897,7 @@ static bool assoc_array_insert_mid_shortcut(struct assoc_array_edit *edit,
 		keylen = round_up(shortcut->skip_to_level, ASSOC_ARRAY_KEY_CHUNK_SIZE);
 		keylen >>= ASSOC_ARRAY_KEY_CHUNK_SHIFT;

-		new_s1 = kzalloc(struct_size(new_s1, index_key, keylen),
-				 GFP_KERNEL);
+		new_s1 = kzalloc_flex(*new_s1, index_key, keylen, GFP_KERNEL);
 		if (!new_s1)
 			return false;
 		edit->new_meta[2] = assoc_array_shortcut_to_ptr(new_s1);
@@ -977,7 +975,7 @@ struct assoc_array_edit *assoc_array_insert(struct assoc_array *array,
 	 */
 	BUG_ON(assoc_array_ptr_is_meta(object));

-	edit = kzalloc(sizeof(struct assoc_array_edit), GFP_KERNEL);
+	edit = kzalloc_obj(struct assoc_array_edit, GFP_KERNEL);
 	if (!edit)
 		return ERR_PTR(-ENOMEM);
 	edit->array = array;
@@ -1089,7 +1087,7 @@ struct assoc_array_edit *assoc_array_delete(struct assoc_array *array,

 	pr_devel("-->%s()\n", __func__);

-	edit = kzalloc(sizeof(struct assoc_array_edit), GFP_KERNEL);
+	edit = kzalloc_obj(struct assoc_array_edit, GFP_KERNEL);
 	if (!edit)
 		return ERR_PTR(-ENOMEM);
 	edit->array = array;
@@ -1206,7 +1204,8 @@ struct assoc_array_edit *assoc_array_delete(struct assoc_array *array,
 			node = parent;

 			/* Create a new node to collapse into */
-			new_n0 = kzalloc(sizeof(struct assoc_array_node), GFP_KERNEL);
+			new_n0 = kzalloc_obj(struct assoc_array_node,
+					     GFP_KERNEL);
 			if (!new_n0)
 				goto enomem;
 			edit->new_meta[0] = assoc_array_node_to_ptr(new_n0);
@@ -1281,7 +1280,7 @@ struct assoc_array_edit *assoc_array_clear(struct assoc_array *array,
 	if (!array->root)
 		return NULL;

-	edit = kzalloc(sizeof(struct assoc_array_edit), GFP_KERNEL);
+	edit = kzalloc_obj(struct assoc_array_edit, GFP_KERNEL);
 	if (!edit)
 		return ERR_PTR(-ENOMEM);
 	edit->array = array;
@@ -1469,7 +1468,7 @@ int assoc_array_gc(struct assoc_array *array,
 	if (!array->root)
 		return 0;

-	edit = kzalloc(sizeof(struct assoc_array_edit), GFP_KERNEL);
+	edit = kzalloc_obj(struct assoc_array_edit, GFP_KERNEL);
 	if (!edit)
 		return -ENOMEM;
 	edit->array = array;
@@ -1490,8 +1489,7 @@ int assoc_array_gc(struct assoc_array *array,
 		shortcut = assoc_array_ptr_to_shortcut(cursor);
 		keylen = round_up(shortcut->skip_to_level, ASSOC_ARRAY_KEY_CHUNK_SIZE);
 		keylen >>= ASSOC_ARRAY_KEY_CHUNK_SHIFT;
-		new_s = kmalloc(struct_size(new_s, index_key, keylen),
-				GFP_KERNEL);
+		new_s = kmalloc_flex(*new_s, index_key, keylen, GFP_KERNEL);
 		if (!new_s)
 			goto enomem;
 		pr_devel("dup shortcut %p -> %p\n", shortcut, new_s);
@@ -1505,7 +1503,7 @@ int assoc_array_gc(struct assoc_array *array,

 	/* Duplicate the node at this position */
 	node = assoc_array_ptr_to_node(cursor);
-	new_n = kzalloc(sizeof(struct assoc_array_node), GFP_KERNEL);
+	new_n = kzalloc_obj(struct assoc_array_node, GFP_KERNEL);
 	if (!new_n)
 		goto enomem;
 	pr_devel("dup node %p -> %p\n", node, new_n);
diff --git a/lib/bch.c b/lib/bch.c
index 1c0cb07cdfeb..82a363dc73c4 100644
--- a/lib/bch.c
+++ b/lib/bch.c
@@ -1320,7 +1320,7 @@ struct bch_control *bch_init(int m, int t, unsigned int prim_poly,
 	if (prim_poly == 0)
 		prim_poly = prim_poly_tab[m-min_m];

-	bch = kzalloc(sizeof(*bch), GFP_KERNEL);
+	bch = kzalloc_obj(*bch, GFP_KERNEL);
 	if (bch == NULL)
 		goto fail;

diff --git a/lib/bucket_locks.c b/lib/bucket_locks.c
index 64b92e1dbace..d29516ca0554 100644
--- a/lib/bucket_locks.c
+++ b/lib/bucket_locks.c
@@ -31,7 +31,7 @@ int __alloc_bucket_spinlocks(spinlock_t **locks, unsigned int *locks_mask,
 	}

 	if (sizeof(spinlock_t) != 0) {
-		tlocks = kvmalloc_array(size, sizeof(spinlock_t), gfp);
+		tlocks = kvmalloc_objs(spinlock_t, size, gfp);
 		if (!tlocks)
 			return -ENOMEM;
 		for (i = 0; i < size; i++) {
diff --git a/lib/codetag.c b/lib/codetag.c
index 545911cebd25..465952125bcb 100644
--- a/lib/codetag.c
+++ b/lib/codetag.c
@@ -193,7 +193,7 @@ static int codetag_module_init(struct codetag_type *cttype, struct module *mod)

 	BUG_ON(range.start > range.stop);

-	cmod = kmalloc(sizeof(*cmod), GFP_KERNEL);
+	cmod = kmalloc_obj(*cmod, GFP_KERNEL);
 	if (unlikely(!cmod))
 		return -ENOMEM;

@@ -383,7 +383,7 @@ codetag_register_type(const struct codetag_type_desc *desc)

 	BUG_ON(desc->tag_size <= 0);

-	cttype = kzalloc(sizeof(*cttype), GFP_KERNEL);
+	cttype = kzalloc_obj(*cttype, GFP_KERNEL);
 	if (unlikely(!cttype))
 		return ERR_PTR(-ENOMEM);

diff --git a/lib/cpu_rmap.c b/lib/cpu_rmap.c
index f03d9be3f06b..dfc6219532b9 100644
--- a/lib/cpu_rmap.c
+++ b/lib/cpu_rmap.c
@@ -309,7 +309,7 @@ EXPORT_SYMBOL(irq_cpu_rmap_remove);
  */
 int irq_cpu_rmap_add(struct cpu_rmap *rmap, int irq)
 {
-	struct irq_glue *glue = kzalloc(sizeof(*glue), GFP_KERNEL);
+	struct irq_glue *glue = kzalloc_obj(*glue, GFP_KERNEL);
 	int rc;

 	if (!glue)
diff --git a/lib/crypto/gf128mul.c b/lib/crypto/gf128mul.c
index 2a34590fe3f1..42c5fdc2d4ca 100644
--- a/lib/crypto/gf128mul.c
+++ b/lib/crypto/gf128mul.c
@@ -245,12 +245,12 @@ struct gf128mul_64k *gf128mul_init_64k_bbe(const be128 *g)
 	struct gf128mul_64k *t;
 	int i, j, k;

-	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc_obj(*t, GFP_KERNEL);
 	if (!t)
 		goto out;

 	for (i = 0; i < 16; i++) {
-		t->t[i] = kzalloc(sizeof(*t->t[i]), GFP_KERNEL);
+		t->t[i] = kzalloc_obj(*t->t[i], GFP_KERNEL);
 		if (!t->t[i]) {
 			gf128mul_free_64k(t);
 			t = NULL;
@@ -326,7 +326,7 @@ struct gf128mul_4k *gf128mul_init_4k_lle(const be128 *g)
 	struct gf128mul_4k *t;
 	int j, k;

-	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc_obj(*t, GFP_KERNEL);
 	if (!t)
 		goto out;

diff --git a/lib/crypto/mpi/mpih-mul.c b/lib/crypto/mpi/mpih-mul.c
index a93647564054..9cd0843e9d36 100644
--- a/lib/crypto/mpi/mpih-mul.c
+++ b/lib/crypto/mpi/mpih-mul.c
@@ -372,7 +372,7 @@ mpihelp_mul_karatsuba_case(mpi_ptr_t prodp,
 				return -ENOMEM;
 		} else {
 			if (!ctx->next) {
-				ctx->next = kzalloc(sizeof *ctx, GFP_KERNEL);
+				ctx->next = kzalloc_obj(*ctx, GFP_KERNEL);
 				if (!ctx->next)
 					return -ENOMEM;
 			}
diff --git a/lib/crypto/mpi/mpiutil.c b/lib/crypto/mpi/mpiutil.c
index 7f2db830f404..4999f756f50e 100644
--- a/lib/crypto/mpi/mpiutil.c
+++ b/lib/crypto/mpi/mpiutil.c
@@ -33,7 +33,7 @@ MPI mpi_alloc(unsigned nlimbs)
 {
 	MPI a;

-	a = kmalloc(sizeof *a, GFP_KERNEL);
+	a = kmalloc_obj(*a, GFP_KERNEL);
 	if (!a)
 		return a;

@@ -93,14 +93,14 @@ int mpi_resize(MPI a, unsigned nlimbs)
 		return 0;	/* no need to do it */

 	if (a->d) {
-		p = kcalloc(nlimbs, sizeof(mpi_limb_t), GFP_KERNEL);
+		p = kzalloc_objs(mpi_limb_t, nlimbs, GFP_KERNEL);
 		if (!p)
 			return -ENOMEM;
 		memcpy(p, a->d, a->alloced * sizeof(mpi_limb_t));
 		kfree_sensitive(a->d);
 		a->d = p;
 	} else {
-		a->d = kcalloc(nlimbs, sizeof(mpi_limb_t), GFP_KERNEL);
+		a->d = kzalloc_objs(mpi_limb_t, nlimbs, GFP_KERNEL);
 		if (!a->d)
 			return -ENOMEM;
 	}
diff --git a/lib/dhry_1.c b/lib/dhry_1.c
index ca6c87232c58..134cc1c746c2 100644
--- a/lib/dhry_1.c
+++ b/lib/dhry_1.c
@@ -139,11 +139,11 @@ int dhry(int n)

 	/* Initializations */

-	Next_Ptr_Glob = (Rec_Pointer)kzalloc(sizeof(Rec_Type), GFP_ATOMIC);
+	Next_Ptr_Glob = (Rec_Pointer) kzalloc_obj(Rec_Type, GFP_ATOMIC);
 	if (!Next_Ptr_Glob)
 		return -ENOMEM;

-	Ptr_Glob = (Rec_Pointer)kzalloc(sizeof(Rec_Type), GFP_ATOMIC);
+	Ptr_Glob = (Rec_Pointer) kzalloc_obj(Rec_Type, GFP_ATOMIC);
 	if (!Ptr_Glob) {
 		kfree(Next_Ptr_Glob);
 		return -ENOMEM;
diff --git a/lib/dim/net_dim.c b/lib/dim/net_dim.c
index d6aa09a979b3..d66940b0c165 100644
--- a/lib/dim/net_dim.c
+++ b/lib/dim/net_dim.c
@@ -105,7 +105,7 @@ int net_dim_init_irq_moder(struct net_device *dev, u8 profile_flags,
 	struct dim_irq_moder *moder;
 	int len;

-	dev->irq_moder = kzalloc(sizeof(*dev->irq_moder), GFP_KERNEL);
+	dev->irq_moder = kzalloc_obj(*dev->irq_moder, GFP_KERNEL);
 	if (!dev->irq_moder)
 		return -ENOMEM;

diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index 7d7892e57a01..a5b5e936e2ab 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -1241,7 +1241,7 @@ static int ddebug_add_module(struct _ddebug_info *di, const char *modname)
 		return 0;
 	}

-	dt = kzalloc(sizeof(*dt), GFP_KERNEL);
+	dt = kzalloc_obj(*dt, GFP_KERNEL);
 	if (dt == NULL) {
 		pr_err("error adding module: %s\n", modname);
 		return -ENOMEM;
diff --git a/lib/error-inject.c b/lib/error-inject.c
index 887acd9a6ea6..06c913ec2c1f 100644
--- a/lib/error-inject.c
+++ b/lib/error-inject.c
@@ -80,7 +80,7 @@ static void populate_error_injection_list(struct error_injection_entry *start,
 			continue;
 		}

-		ent = kmalloc(sizeof(*ent), GFP_KERNEL);
+		ent = kmalloc_obj(*ent, GFP_KERNEL);
 		if (!ent)
 			break;
 		ent->start_addr = entry;
diff --git a/lib/group_cpus.c b/lib/group_cpus.c
index d496c5001961..5d1758a05407 100644
--- a/lib/group_cpus.c
+++ b/lib/group_cpus.c
@@ -47,7 +47,7 @@ static cpumask_var_t *alloc_node_to_cpumask(void)
 	cpumask_var_t *masks;
 	int node;

-	masks = kcalloc(nr_node_ids, sizeof(cpumask_var_t), GFP_KERNEL);
+	masks = kzalloc_objs(cpumask_var_t, nr_node_ids, GFP_KERNEL);
 	if (!masks)
 		return NULL;

@@ -320,10 +320,10 @@ static int alloc_cluster_groups(unsigned int ncpus,
 		goto no_cluster;

 	/* Allocate memory based on cluster number. */
-	clusters = kcalloc(ncluster, sizeof(*clusters), GFP_KERNEL);
+	clusters = kzalloc_objs(*clusters, ncluster, GFP_KERNEL);
 	if (!clusters)
 		goto no_cluster;
-	cluster_groups = kcalloc(ncluster, sizeof(struct node_groups), GFP_KERNEL);
+	cluster_groups = kzalloc_objs(struct node_groups, ncluster, GFP_KERNEL);
 	if (!cluster_groups)
 		goto fail_cluster_groups;

@@ -432,9 +432,7 @@ static int __group_cpus_evenly(unsigned int startgrp, unsigned int numgrps,
 		return numgrps;
 	}

-	node_groups = kcalloc(nr_node_ids,
-			       sizeof(struct node_groups),
-			       GFP_KERNEL);
+	node_groups = kzalloc_objs(struct node_groups, nr_node_ids, GFP_KERNEL);
 	if (!node_groups)
 		return -ENOMEM;

@@ -508,7 +506,7 @@ struct cpumask *group_cpus_evenly(unsigned int numgrps, unsigned int *nummasks)
 	if (!node_to_cpumask)
 		goto fail_npresmsk;

-	masks = kcalloc(numgrps, sizeof(*masks), GFP_KERNEL);
+	masks = kzalloc_objs(*masks, numgrps, GFP_KERNEL);
 	if (!masks)
 		goto fail_node_to_cpumask;

@@ -574,7 +572,7 @@ struct cpumask *group_cpus_evenly(unsigned int numgrps, unsigned int *nummasks)
 	if (numgrps == 0)
 		return NULL;

-	masks = kcalloc(numgrps, sizeof(*masks), GFP_KERNEL);
+	masks = kzalloc_objs(*masks, numgrps, GFP_KERNEL);
 	if (!masks)
 		return NULL;

diff --git a/lib/idr.c b/lib/idr.c
index 457430cff8c5..69bee5369670 100644
--- a/lib/idr.c
+++ b/lib/idr.c
@@ -417,7 +417,7 @@ int ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max,
 		}
 		bitmap = alloc;
 		if (!bitmap)
-			bitmap = kzalloc(sizeof(*bitmap), GFP_NOWAIT);
+			bitmap = kzalloc_obj(*bitmap, GFP_NOWAIT);
 		if (!bitmap)
 			goto alloc;
 		bitmap->bitmap[0] = tmp;
@@ -444,7 +444,7 @@ int ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max,
 		} else {
 			bitmap = alloc;
 			if (!bitmap)
-				bitmap = kzalloc(sizeof(*bitmap), GFP_NOWAIT);
+				bitmap = kzalloc_obj(*bitmap, GFP_NOWAIT);
 			if (!bitmap)
 				goto alloc;
 			__set_bit(bit, bitmap->bitmap);
@@ -465,7 +465,7 @@ int ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max,
 	return xas.xa_index * IDA_BITMAP_BITS + bit;
 alloc:
 	xas_unlock_irqrestore(&xas, flags);
-	alloc = kzalloc(sizeof(*bitmap), gfp);
+	alloc = kzalloc_obj(*bitmap, gfp);
 	if (!alloc)
 		return -ENOMEM;
 	xas_set(&xas, min / IDA_BITMAP_BITS);
diff --git a/lib/interval_tree_test.c b/lib/interval_tree_test.c
index 5fd62656f42e..d1ab3d40a645 100644
--- a/lib/interval_tree_test.c
+++ b/lib/interval_tree_test.c
@@ -311,8 +311,7 @@ static inline int span_iteration_check(void) {return 0; }

 static int interval_tree_test_init(void)
 {
-	nodes = kmalloc_array(nnodes, sizeof(struct interval_tree_node),
-			      GFP_KERNEL);
+	nodes = kmalloc_objs(struct interval_tree_node, nnodes, GFP_KERNEL);
 	if (!nodes)
 		return -ENOMEM;

diff --git a/lib/iov_iter.c b/lib/iov_iter.c
index 545250507f08..a9768fae1f44 100644
--- a/lib/iov_iter.c
+++ b/lib/iov_iter.c
@@ -903,7 +903,7 @@ static int want_pages_array(struct page ***res, size_t size,
 		count = maxpages;
 	WARN_ON(!count);	// caller should've prevented that
 	if (!*res) {
-		*res = kvmalloc_array(count, sizeof(struct page *), GFP_KERNEL);
+		*res = kvmalloc_objs(struct page *, count, GFP_KERNEL);
 		if (!*res)
 			return 0;
 	}
@@ -1318,7 +1318,7 @@ struct iovec *iovec_from_user(const struct iovec __user *uvec,
 	if (nr_segs > UIO_MAXIOV)
 		return ERR_PTR(-EINVAL);
 	if (nr_segs > fast_segs) {
-		iov = kmalloc_array(nr_segs, sizeof(struct iovec), GFP_KERNEL);
+		iov = kmalloc_objs(struct iovec, nr_segs, GFP_KERNEL);
 		if (!iov)
 			return ERR_PTR(-ENOMEM);
 	}
diff --git a/lib/kobject.c b/lib/kobject.c
index abe5f5b856ce..b178d248617b 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -765,7 +765,7 @@ static struct kobject *kobject_create(void)
 {
 	struct kobject *kobj;

-	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
+	kobj = kzalloc_obj(*kobj, GFP_KERNEL);
 	if (!kobj)
 		return NULL;

@@ -962,7 +962,7 @@ static struct kset *kset_create(const char *name,
 	struct kset *kset;
 	int retval;

-	kset = kzalloc(sizeof(*kset), GFP_KERNEL);
+	kset = kzalloc_obj(*kset, GFP_KERNEL);
 	if (!kset)
 		return NULL;
 	retval = kobject_set_name(&kset->kobj, "%s", name);
diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c
index 78e16b95d210..29a28a3b957f 100644
--- a/lib/kobject_uevent.c
+++ b/lib/kobject_uevent.c
@@ -124,7 +124,7 @@ static int kobject_action_args(const char *buf, size_t count,
 	if (!count)
 		return -EINVAL;

-	env = kzalloc(sizeof(*env), GFP_KERNEL);
+	env = kzalloc_obj(*env, GFP_KERNEL);
 	if (!env)
 		return -ENOMEM;

@@ -537,7 +537,7 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
 	}

 	/* environment buffer */
-	env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL);
+	env = kzalloc_obj(struct kobj_uevent_env, GFP_KERNEL);
 	if (!env)
 		return -ENOMEM;

@@ -776,7 +776,7 @@ static int uevent_net_init(struct net *net)
 		.flags	= NL_CFG_F_NONROOT_RECV
 	};

-	ue_sk = kzalloc(sizeof(*ue_sk), GFP_KERNEL);
+	ue_sk = kzalloc_obj(*ue_sk, GFP_KERNEL);
 	if (!ue_sk)
 		return -ENOMEM;

diff --git a/lib/kunit/attributes.c b/lib/kunit/attributes.c
index 2cf04cc09372..6b7803a16e22 100644
--- a/lib/kunit/attributes.c
+++ b/lib/kunit/attributes.c
@@ -410,7 +410,7 @@ struct kunit_suite *kunit_filter_attr_tests(const struct kunit_suite *const suit

 	kunit_suite_for_each_test_case(suite, test_case) { n++; }

-	filtered = kcalloc(n + 1, sizeof(*filtered), GFP_KERNEL);
+	filtered = kzalloc_objs(*filtered, n + 1, GFP_KERNEL);
 	if (!filtered) {
 		kfree(copy);
 		return ERR_PTR(-ENOMEM);
diff --git a/lib/kunit/device.c b/lib/kunit/device.c
index f201aaacd4cf..7c18d4ae2de3 100644
--- a/lib/kunit/device.c
+++ b/lib/kunit/device.c
@@ -111,7 +111,7 @@ static struct kunit_device *kunit_device_register_internal(struct kunit *test,
 	struct kunit_device *kunit_dev;
 	int err = -ENOMEM;

-	kunit_dev = kzalloc(sizeof(*kunit_dev), GFP_KERNEL);
+	kunit_dev = kzalloc_obj(*kunit_dev, GFP_KERNEL);
 	if (!kunit_dev)
 		return ERR_PTR(err);

diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c
index 02ff380ab793..27740d975082 100644
--- a/lib/kunit/executor.c
+++ b/lib/kunit/executor.c
@@ -131,7 +131,7 @@ kunit_filter_glob_tests(const struct kunit_suite *const suite, const char *test_
 	if (!copy)
 		return ERR_PTR(-ENOMEM);

-	filtered = kcalloc(n + 1, sizeof(*filtered), GFP_KERNEL);
+	filtered = kzalloc_objs(*filtered, n + 1, GFP_KERNEL);
 	if (!filtered) {
 		kfree(copy);
 		return ERR_PTR(-ENOMEM);
@@ -179,7 +179,7 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set,

 	const size_t max = suite_set->end - suite_set->start;

-	copy = kcalloc(max, sizeof(*copy), GFP_KERNEL);
+	copy = kzalloc_objs(*copy, max, GFP_KERNEL);
 	if (!copy) { /* won't be able to run anything, return an empty set */
 		return filtered;
 	}
@@ -194,7 +194,8 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set,
 	/* Parse attribute filters */
 	if (filters) {
 		filter_count = kunit_get_filter_count(filters);
-		parsed_filters = kcalloc(filter_count, sizeof(*parsed_filters), GFP_KERNEL);
+		parsed_filters = kzalloc_objs(*parsed_filters, filter_count,
+					      GFP_KERNEL);
 		if (!parsed_filters) {
 			*err = -ENOMEM;
 			goto free_parsed_glob;
diff --git a/lib/kunit/executor_test.c b/lib/kunit/executor_test.c
index f0090c2729cd..f28093153516 100644
--- a/lib/kunit/executor_test.c
+++ b/lib/kunit/executor_test.c
@@ -272,7 +272,7 @@ static void free_suite_set_at_end(struct kunit *test, const void *to_free)
 	if (!((struct kunit_suite_set *)to_free)->start)
 		return;

-	free = kzalloc(sizeof(struct kunit_suite_set), GFP_KERNEL);
+	free = kzalloc_obj(struct kunit_suite_set, GFP_KERNEL);
 	*free = *(struct kunit_suite_set *)to_free;

 	kunit_add_action(test, free_suite_set, (void *)free);
diff --git a/lib/kunit/kunit-example-test.c b/lib/kunit/kunit-example-test.c
index 9452b163956f..34ba0bd74504 100644
--- a/lib/kunit/kunit-example-test.c
+++ b/lib/kunit/kunit-example-test.c
@@ -283,7 +283,7 @@ static void example_slow_test(struct kunit *test)
  */
 static int example_resource_init(struct kunit_resource *res, void *context)
 {
-	int *info = kmalloc(sizeof(*info), GFP_KERNEL);
+	int *info = kmalloc_obj(*info, GFP_KERNEL);

 	if (!info)
 		return -ENOMEM;
diff --git a/lib/kunit/kunit-test.c b/lib/kunit/kunit-test.c
index 63130a48e237..393b90bd2ec2 100644
--- a/lib/kunit/kunit-test.c
+++ b/lib/kunit/kunit-test.c
@@ -538,8 +538,7 @@ static void kunit_resource_test_action_ordering(struct kunit *test)

 static int kunit_resource_test_init(struct kunit *test)
 {
-	struct kunit_test_resource_context *ctx =
-			kzalloc(sizeof(*ctx), GFP_KERNEL);
+	struct kunit_test_resource_context *ctx = kzalloc_obj(*ctx, GFP_KERNEL);

 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);

diff --git a/lib/kunit/resource.c b/lib/kunit/resource.c
index f0209252b179..08a16622a2c9 100644
--- a/lib/kunit/resource.c
+++ b/lib/kunit/resource.c
@@ -98,7 +98,7 @@ int kunit_add_action(struct kunit *test, void (*action)(void *), void *ctx)

 	KUNIT_ASSERT_NOT_NULL_MSG(test, action, "Tried to action a NULL function!");

-	action_ctx = kzalloc(sizeof(*action_ctx), GFP_KERNEL);
+	action_ctx = kzalloc_obj(*action_ctx, GFP_KERNEL);
 	if (!action_ctx)
 		return -ENOMEM;

diff --git a/lib/kunit/static_stub.c b/lib/kunit/static_stub.c
index 484fd85251b4..29a91129d7a3 100644
--- a/lib/kunit/static_stub.c
+++ b/lib/kunit/static_stub.c
@@ -111,7 +111,7 @@ void __kunit_activate_static_stub(struct kunit *test,
 		/* We got an extra reference from find_resource(), so put it. */
 		kunit_put_resource(res);
 	} else {
-		ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+		ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
 		ctx->real_fn_addr = real_fn_addr;
 		ctx->replacement_addr = replacement_addr;
diff --git a/lib/kunit/string-stream.c b/lib/kunit/string-stream.c
index 54f4fdcbfac8..0d8f1b30559b 100644
--- a/lib/kunit/string-stream.c
+++ b/lib/kunit/string-stream.c
@@ -18,7 +18,7 @@ static struct string_stream_fragment *alloc_string_stream_fragment(int len, gfp_
 {
 	struct string_stream_fragment *frag;

-	frag = kzalloc(sizeof(*frag), gfp);
+	frag = kzalloc_obj(*frag, gfp);
 	if (!frag)
 		return ERR_PTR(-ENOMEM);

@@ -158,7 +158,7 @@ struct string_stream *alloc_string_stream(gfp_t gfp)
 {
 	struct string_stream *stream;

-	stream = kzalloc(sizeof(*stream), gfp);
+	stream = kzalloc_obj(*stream, gfp);
 	if (!stream)
 		return ERR_PTR(-ENOMEM);

diff --git a/lib/logic_iomem.c b/lib/logic_iomem.c
index b247d412ddef..d0ba023f79fb 100644
--- a/lib/logic_iomem.c
+++ b/lib/logic_iomem.c
@@ -48,7 +48,7 @@ int logic_iomem_add_region(struct resource *resource,
 	if (WARN_ON((resource->flags & IORESOURCE_TYPE_BITS) != IORESOURCE_MEM))
 		return -EINVAL;

-	rreg = kzalloc(sizeof(*rreg), GFP_KERNEL);
+	rreg = kzalloc_obj(*rreg, GFP_KERNEL);
 	if (!rreg)
 		return -ENOMEM;

diff --git a/lib/lru_cache.c b/lib/lru_cache.c
index 9e0d469c7658..b1ee3b2540c9 100644
--- a/lib/lru_cache.c
+++ b/lib/lru_cache.c
@@ -94,14 +94,14 @@ struct lru_cache *lc_create(const char *name, struct kmem_cache *cache,
 	if (e_count > LC_MAX_ACTIVE)
 		return NULL;

-	slot = kcalloc(e_count, sizeof(struct hlist_head), GFP_KERNEL);
+	slot = kzalloc_objs(struct hlist_head, e_count, GFP_KERNEL);
 	if (!slot)
 		goto out_fail;
-	element = kcalloc(e_count, sizeof(struct lc_element *), GFP_KERNEL);
+	element = kzalloc_objs(struct lc_element *, e_count, GFP_KERNEL);
 	if (!element)
 		goto out_fail;

-	lc = kzalloc(sizeof(*lc), GFP_KERNEL);
+	lc = kzalloc_obj(*lc, GFP_KERNEL);
 	if (!lc)
 		goto out_fail;

diff --git a/lib/lwq.c b/lib/lwq.c
index 57d080a4d53d..3a8fc05d9420 100644
--- a/lib/lwq.c
+++ b/lib/lwq.c
@@ -110,7 +110,7 @@ static int lwq_test(void)
 	for (i = 0; i < ARRAY_SIZE(threads); i++)
 		threads[i] = kthread_run(lwq_exercise, &q, "lwq-test-%d", i);
 	for (i = 0; i < 100; i++) {
-		t = kmalloc(sizeof(*t), GFP_KERNEL);
+		t = kmalloc_obj(*t, GFP_KERNEL);
 		if (!t)
 			break;
 		t->i = i;
diff --git a/lib/objagg.c b/lib/objagg.c
index 363e43e849ac..c508b78850c0 100644
--- a/lib/objagg.c
+++ b/lib/objagg.c
@@ -525,7 +525,7 @@ struct objagg *objagg_create(const struct objagg_ops *ops,
 		    !ops->delta_destroy))
 		return ERR_PTR(-EINVAL);

-	objagg = kzalloc(sizeof(*objagg), GFP_KERNEL);
+	objagg = kzalloc_obj(*objagg, GFP_KERNEL);
 	if (!objagg)
 		return ERR_PTR(-ENOMEM);
 	objagg->ops = ops;
@@ -610,8 +610,8 @@ const struct objagg_stats *objagg_stats_get(struct objagg *objagg)
 	struct objagg_obj *objagg_obj;
 	int i;

-	objagg_stats = kzalloc(struct_size(objagg_stats, stats_info,
-					   objagg->obj_count), GFP_KERNEL);
+	objagg_stats = kzalloc_flex(*objagg_stats, stats_info,
+				    objagg->obj_count, GFP_KERNEL);
 	if (!objagg_stats)
 		return ERR_PTR(-ENOMEM);

@@ -786,11 +786,11 @@ static struct objagg_tmp_graph *objagg_tmp_graph_create(struct objagg *objagg)
 	struct objagg_obj *objagg_obj;
 	int i, j;

-	graph = kzalloc(sizeof(*graph), GFP_KERNEL);
+	graph = kzalloc_obj(*graph, GFP_KERNEL);
 	if (!graph)
 		return NULL;

-	graph->nodes = kcalloc(nodes_count, sizeof(*graph->nodes), GFP_KERNEL);
+	graph->nodes = kzalloc_objs(*graph->nodes, nodes_count, GFP_KERNEL);
 	if (!graph->nodes)
 		goto err_nodes_alloc;
 	graph->nodes_count = nodes_count;
@@ -930,7 +930,7 @@ struct objagg_hints *objagg_hints_get(struct objagg *objagg,
 	struct objagg_hints *objagg_hints;
 	int err;

-	objagg_hints = kzalloc(sizeof(*objagg_hints), GFP_KERNEL);
+	objagg_hints = kzalloc_obj(*objagg_hints, GFP_KERNEL);
 	if (!objagg_hints)
 		return ERR_PTR(-ENOMEM);

@@ -1010,9 +1010,8 @@ objagg_hints_stats_get(struct objagg_hints *objagg_hints)
 	struct objagg_hints_node *hnode;
 	int i;

-	objagg_stats = kzalloc(struct_size(objagg_stats, stats_info,
-					   objagg_hints->node_count),
-			       GFP_KERNEL);
+	objagg_stats = kzalloc_flex(*objagg_stats, stats_info,
+				    objagg_hints->node_count, GFP_KERNEL);
 	if (!objagg_stats)
 		return ERR_PTR(-ENOMEM);

diff --git a/lib/once.c b/lib/once.c
index 8557eb489f34..d801bfa945e6 100644
--- a/lib/once.c
+++ b/lib/once.c
@@ -26,7 +26,7 @@ static void once_disable_jump(struct static_key_true *key, struct module *mod)
 {
 	struct once_work *w;

-	w = kmalloc(sizeof(*w), GFP_ATOMIC);
+	w = kmalloc_obj(*w, GFP_ATOMIC);
 	if (!w)
 		return;

diff --git a/lib/parman.c b/lib/parman.c
index 3f8f8d422e62..e93b82b73522 100644
--- a/lib/parman.c
+++ b/lib/parman.c
@@ -268,7 +268,7 @@ struct parman *parman_create(const struct parman_ops *ops, void *priv)
 {
 	struct parman *parman;

-	parman = kzalloc(sizeof(*parman), GFP_KERNEL);
+	parman = kzalloc_obj(*parman, GFP_KERNEL);
 	if (!parman)
 		return NULL;
 	INIT_LIST_HEAD(&parman->prio_list);
diff --git a/lib/percpu-refcount.c b/lib/percpu-refcount.c
index 668f6aa6a75d..97772e42b9b2 100644
--- a/lib/percpu-refcount.c
+++ b/lib/percpu-refcount.c
@@ -73,7 +73,7 @@ int percpu_ref_init(struct percpu_ref *ref, percpu_ref_func_t *release,
 	if (!ref->percpu_count_ptr)
 		return -ENOMEM;

-	data = kzalloc(sizeof(*ref->data), gfp);
+	data = kzalloc_obj(*ref->data, gfp);
 	if (!data) {
 		free_percpu((void __percpu *)ref->percpu_count_ptr);
 		ref->percpu_count_ptr = 0;
diff --git a/lib/pldmfw/pldmfw.c b/lib/pldmfw/pldmfw.c
index b45ceb725780..c1222c11f6a8 100644
--- a/lib/pldmfw/pldmfw.c
+++ b/lib/pldmfw/pldmfw.c
@@ -287,7 +287,7 @@ pldm_parse_desc_tlvs(struct pldmfw_priv *data, struct pldmfw_record *record, u8
 		if (err)
 			return err;

-		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+		desc = kzalloc_obj(*desc, GFP_KERNEL);
 		if (!desc)
 			return -ENOMEM;

@@ -328,7 +328,7 @@ pldm_parse_one_record(struct pldmfw_priv *data,
 	int i;

 	/* Make a copy and insert it into the record list */
-	record = kzalloc(sizeof(*record), GFP_KERNEL);
+	record = kzalloc_obj(*record, GFP_KERNEL);
 	if (!record)
 		return -ENOMEM;

@@ -465,7 +465,7 @@ static int pldm_parse_components(struct pldmfw_priv *data)
 		if (err)
 			return err;

-		component = kzalloc(sizeof(*component), GFP_KERNEL);
+		component = kzalloc_obj(*component, GFP_KERNEL);
 		if (!component)
 			return -ENOMEM;

@@ -848,7 +848,7 @@ int pldmfw_flash_image(struct pldmfw *context, const struct firmware *fw)
 	struct pldmfw_priv *data;
 	int err;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/lib/rbtree_test.c b/lib/rbtree_test.c
index 690cede46ac2..862318e99c9a 100644
--- a/lib/rbtree_test.c
+++ b/lib/rbtree_test.c
@@ -399,7 +399,7 @@ static int augmented_check(void)

 static int __init rbtree_test_init(void)
 {
-	nodes = kmalloc_array(nnodes, sizeof(*nodes), GFP_KERNEL);
+	nodes = kmalloc_objs(*nodes, nnodes, GFP_KERNEL);
 	if (!nodes)
 		return -ENOMEM;

diff --git a/lib/reed_solomon/reed_solomon.c b/lib/reed_solomon/reed_solomon.c
index a9e2dcb6f2a7..864484c01827 100644
--- a/lib/reed_solomon/reed_solomon.c
+++ b/lib/reed_solomon/reed_solomon.c
@@ -73,7 +73,7 @@ static struct rs_codec *codec_init(int symsize, int gfpoly, int (*gffunc)(int),
 	int i, j, sr, root, iprim;
 	struct rs_codec *rs;

-	rs = kzalloc(sizeof(*rs), gfp);
+	rs = kzalloc_obj(*rs, gfp);
 	if (!rs)
 		return NULL;

diff --git a/lib/reed_solomon/test_rslib.c b/lib/reed_solomon/test_rslib.c
index 75cb1adac884..3c17b04a0a0a 100644
--- a/lib/reed_solomon/test_rslib.c
+++ b/lib/reed_solomon/test_rslib.c
@@ -111,7 +111,7 @@ static struct wspace *alloc_ws(struct rs_codec *rs)
 	struct wspace *ws;
 	int nn = rs->nn;

-	ws = kzalloc(sizeof(*ws), GFP_KERNEL);
+	ws = kzalloc_obj(*ws, GFP_KERNEL);
 	if (!ws)
 		return NULL;

@@ -124,7 +124,7 @@ static struct wspace *alloc_ws(struct rs_codec *rs)
 	ws->s = ws->r + nn;
 	ws->corr = ws->s + nroots;

-	ws->errlocs = kmalloc_array(nn + nroots, sizeof(int), GFP_KERNEL);
+	ws->errlocs = kmalloc_objs(int, nn + nroots, GFP_KERNEL);
 	if (!ws->errlocs)
 		goto err;

diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c
index 258fb0e7abdf..30c999d57b10 100644
--- a/lib/ref_tracker.c
+++ b/lib/ref_tracker.c
@@ -74,8 +74,7 @@ ref_tracker_get_stats(struct ref_tracker_dir *dir, unsigned int limit)
 	struct ref_tracker_dir_stats *stats;
 	struct ref_tracker *tracker;

-	stats = kmalloc(struct_size(stats, stacks, limit),
-			GFP_NOWAIT);
+	stats = kmalloc_flex(*stats, stacks, limit, GFP_NOWAIT);
 	if (!stats)
 		return ERR_PTR(-ENOMEM);
 	stats->total = 0;
@@ -268,7 +267,7 @@ int ref_tracker_alloc(struct ref_tracker_dir *dir,
 	}
 	if (gfp & __GFP_DIRECT_RECLAIM)
 		gfp_mask |= __GFP_NOFAIL;
-	*trackerp = tracker = kzalloc(sizeof(*tracker), gfp_mask);
+	*trackerp = tracker = kzalloc_obj(*tracker, gfp_mask);
 	if (unlikely(!tracker)) {
 		pr_err_once("memory allocation failure, unreliable refcount tracker.\n");
 		refcount_inc(&dir->untracked);
diff --git a/lib/scatterlist.c b/lib/scatterlist.c
index 21bc9c1f7c06..d773720d11bf 100644
--- a/lib/scatterlist.c
+++ b/lib/scatterlist.c
@@ -168,8 +168,7 @@ static struct scatterlist *sg_kmalloc(unsigned int nents, gfp_t gfp_mask)
 		kmemleak_alloc(ptr, PAGE_SIZE, 1, gfp_mask);
 		return ptr;
 	} else
-		return kmalloc_array(nents, sizeof(struct scatterlist),
-				     gfp_mask);
+		return kmalloc_objs(struct scatterlist, nents, gfp_mask);
 }

 static void sg_kfree(struct scatterlist *sg, unsigned int nents)
@@ -632,8 +631,7 @@ struct scatterlist *sgl_alloc_order(unsigned long long length,
 			return NULL;
 		nalloc++;
 	}
-	sgl = kmalloc_array(nalloc, sizeof(struct scatterlist),
-			    gfp & ~GFP_DMA);
+	sgl = kmalloc_objs(struct scatterlist, nalloc, gfp & ~GFP_DMA);
 	if (!sgl)
 		return NULL;

diff --git a/lib/sg_split.c b/lib/sg_split.c
index 0f89aab5c671..24e8f5e48e63 100644
--- a/lib/sg_split.c
+++ b/lib/sg_split.c
@@ -152,7 +152,7 @@ int sg_split(struct scatterlist *in, const int in_mapped_nents,
 	int i, ret;
 	struct sg_splitter *splitters;

-	splitters = kcalloc(nb_splits, sizeof(*splitters), gfp_mask);
+	splitters = kzalloc_objs(*splitters, nb_splits, gfp_mask);
 	if (!splitters)
 		return -ENOMEM;

@@ -163,9 +163,8 @@ int sg_split(struct scatterlist *in, const int in_mapped_nents,

 	ret = -ENOMEM;
 	for (i = 0; i < nb_splits; i++) {
-		splitters[i].out_sg = kmalloc_array(splitters[i].nents,
-						    sizeof(struct scatterlist),
-						    gfp_mask);
+		splitters[i].out_sg = kmalloc_objs(struct scatterlist,
+						   splitters[i].nents, gfp_mask);
 		if (!splitters[i].out_sg)
 			goto err;
 	}
diff --git a/lib/stackdepot.c b/lib/stackdepot.c
index 166f50ad8391..b58f01c2ca7e 100644
--- a/lib/stackdepot.c
+++ b/lib/stackdepot.c
@@ -260,7 +260,7 @@ int stack_depot_init(void)
 		entries = 1UL << STACK_BUCKET_NUMBER_ORDER_MAX;

 	pr_info("allocating hash table of %lu entries via kvcalloc\n", entries);
-	stack_table = kvcalloc(entries, sizeof(struct list_head), GFP_KERNEL);
+	stack_table = kvzalloc_objs(struct list_head, entries, GFP_KERNEL);
 	if (!stack_table) {
 		pr_err("hash table allocation failed, disabling\n");
 		stack_depot_disabled = true;
diff --git a/lib/string_helpers.c b/lib/string_helpers.c
index 8cb6f66c9c2b..72a15e7132b9 100644
--- a/lib/string_helpers.c
+++ b/lib/string_helpers.c
@@ -147,7 +147,7 @@ int parse_int_array(const char *buf, size_t count, int **array)
 	if (!nints)
 		return -ENOENT;

-	ints = kcalloc(nints + 1, sizeof(*ints), GFP_KERNEL);
+	ints = kzalloc_objs(*ints, nints + 1, GFP_KERNEL);
 	if (!ints)
 		return -ENOMEM;

diff --git a/lib/test_bpf.c b/lib/test_bpf.c
index af0041df2b72..e4cb339f322e 100644
--- a/lib/test_bpf.c
+++ b/lib/test_bpf.c
@@ -94,7 +94,7 @@ static int bpf_fill_maxinsns1(struct bpf_test *self)
 	__u32 k = ~0;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -113,7 +113,7 @@ static int bpf_fill_maxinsns2(struct bpf_test *self)
 	struct sock_filter *insn;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -133,7 +133,7 @@ static int bpf_fill_maxinsns3(struct bpf_test *self)
 	struct rnd_state rnd;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -159,7 +159,7 @@ static int bpf_fill_maxinsns4(struct bpf_test *self)
 	struct sock_filter *insn;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -178,7 +178,7 @@ static int bpf_fill_maxinsns5(struct bpf_test *self)
 	struct sock_filter *insn;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -201,7 +201,7 @@ static int bpf_fill_maxinsns6(struct bpf_test *self)
 	struct sock_filter *insn;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -223,7 +223,7 @@ static int bpf_fill_maxinsns7(struct bpf_test *self)
 	struct sock_filter *insn;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -249,7 +249,7 @@ static int bpf_fill_maxinsns8(struct bpf_test *self)
 	struct sock_filter *insn;
 	int i, jmp_off = len - 3;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -272,7 +272,7 @@ static int bpf_fill_maxinsns9(struct bpf_test *self)
 	struct bpf_insn *insn;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -298,7 +298,7 @@ static int bpf_fill_maxinsns10(struct bpf_test *self)
 	struct bpf_insn *insn;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -324,7 +324,7 @@ static int __bpf_fill_ja(struct bpf_test *self, unsigned int len,
 	unsigned int rlen;
 	int i, j;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -358,7 +358,7 @@ static int bpf_fill_maxinsns12(struct bpf_test *self)
 	struct sock_filter *insn;
 	int i = 0;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -381,7 +381,7 @@ static int bpf_fill_maxinsns13(struct bpf_test *self)
 	struct sock_filter *insn;
 	int i = 0;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -410,7 +410,7 @@ static int bpf_fill_ld_abs_get_processor_id(struct bpf_test *self)
 	struct sock_filter *insn;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -434,7 +434,7 @@ static int __bpf_fill_stxdw(struct bpf_test *self, int size)
 	struct bpf_insn *insn;
 	int i;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -484,7 +484,7 @@ static int __bpf_fill_max_jmp(struct bpf_test *self, int jmp, int imm, bool alu3
 	int len = S16_MAX + 5;
 	int i;

-	insns = kmalloc_array(len, sizeof(*insns), GFP_KERNEL);
+	insns = kmalloc_objs(*insns, len, GFP_KERNEL);
 	if (!insns)
 		return -ENOMEM;

@@ -626,7 +626,7 @@ static int __bpf_fill_alu_shift(struct bpf_test *self, u8 op,
 	int imm, k;
 	int i = 0;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -759,7 +759,7 @@ static int __bpf_fill_alu_shift_same_reg(struct bpf_test *self, u8 op,
 	int i = 0;
 	u64 val;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -1244,7 +1244,7 @@ static int __bpf_fill_alu_imm_regs(struct bpf_test *self, u8 op, bool alu32)
 	u32 imm;
 	int rd;

-	insns = kmalloc_array(len, sizeof(*insns), GFP_KERNEL);
+	insns = kmalloc_objs(*insns, len, GFP_KERNEL);
 	if (!insns)
 		return -ENOMEM;

@@ -1426,7 +1426,7 @@ static int __bpf_fill_alu_reg_pairs(struct bpf_test *self, u8 op, bool alu32)
 	int rd, rs;
 	int i = 0;

-	insns = kmalloc_array(len, sizeof(*insns), GFP_KERNEL);
+	insns = kmalloc_objs(*insns, len, GFP_KERNEL);
 	if (!insns)
 		return -ENOMEM;

@@ -1917,7 +1917,7 @@ static int __bpf_fill_atomic_reg_pairs(struct bpf_test *self, u8 width, u8 op)
 	u64 mem, upd, res;
 	int rd, rs, i = 0;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -2163,7 +2163,7 @@ static int bpf_fill_ld_imm64_magn(struct bpf_test *self)
 	int bit, adj, sign;
 	int i = 0;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -2217,7 +2217,7 @@ static int __bpf_fill_ld_imm64_bytes(struct bpf_test *self,
 	u32 rand = 1;
 	int i = 0;

-	insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
+	insn = kmalloc_objs(*insn, len, GFP_KERNEL);
 	if (!insn)
 		return -ENOMEM;

@@ -2724,7 +2724,7 @@ static int __bpf_fill_staggered_jumps(struct bpf_test *self,
 	struct bpf_insn *insns;
 	int off, ind;

-	insns = kmalloc_array(len, sizeof(*insns), GFP_KERNEL);
+	insns = kmalloc_objs(*insns, len, GFP_KERNEL);
 	if (!insns)
 		return -ENOMEM;

@@ -15461,7 +15461,7 @@ static __init int prepare_tail_call_tests(struct bpf_array **pprogs)
 	int which, err;

 	/* Allocate the table of programs to be used for tail calls */
-	progs = kzalloc(struct_size(progs, ptrs, ntests + 1), GFP_KERNEL);
+	progs = kzalloc_flex(*progs, ptrs, ntests + 1, GFP_KERNEL);
 	if (!progs)
 		goto out_nomem;

diff --git a/lib/test_debug_virtual.c b/lib/test_debug_virtual.c
index b7cc0aaee173..288d5510406c 100644
--- a/lib/test_debug_virtual.c
+++ b/lib/test_debug_virtual.c
@@ -29,7 +29,7 @@ static int __init test_debug_virtual_init(void)

 	pr_info("PA: %pa for VA: 0x%lx\n", &pa, (unsigned long)va);

-	foo = kzalloc(sizeof(*foo), GFP_KERNEL);
+	foo = kzalloc_obj(*foo, GFP_KERNEL);
 	if (!foo)
 		return -ENOMEM;

diff --git a/lib/test_firmware.c b/lib/test_firmware.c
index be4f93124901..1a933a874148 100644
--- a/lib/test_firmware.c
+++ b/lib/test_firmware.c
@@ -1309,7 +1309,7 @@ static ssize_t upload_register_store(struct device *dev,
 		goto free_name;
 	}

-	tst = kzalloc(sizeof(*tst), GFP_KERNEL);
+	tst = kzalloc_obj(*tst, GFP_KERNEL);
 	if (!tst) {
 		ret = -ENOMEM;
 		goto free_name;
@@ -1526,7 +1526,7 @@ static int __init test_firmware_init(void)
 {
 	int rc;

-	test_fw_config = kzalloc(sizeof(struct test_config), GFP_KERNEL);
+	test_fw_config = kzalloc_obj(struct test_config, GFP_KERNEL);
 	if (!test_fw_config)
 		return -ENOMEM;

diff --git a/lib/test_hmm.c b/lib/test_hmm.c
index 455a6862ae50..0f9eb1c16ef0 100644
--- a/lib/test_hmm.c
+++ b/lib/test_hmm.c
@@ -166,7 +166,7 @@ static int dmirror_fops_open(struct inode *inode, struct file *filp)
 	int ret;

 	/* Mirror this process address space */
-	dmirror = kzalloc(sizeof(*dmirror), GFP_KERNEL);
+	dmirror = kzalloc_obj(*dmirror, GFP_KERNEL);
 	if (dmirror == NULL)
 		return -ENOMEM;

@@ -504,7 +504,7 @@ static int dmirror_allocate_chunk(struct dmirror_device *mdevice,
 	void *ptr;
 	int ret = -ENOMEM;

-	devmem = kzalloc(sizeof(*devmem), GFP_KERNEL);
+	devmem = kzalloc_obj(*devmem, GFP_KERNEL);
 	if (!devmem)
 		return ret;

diff --git a/lib/test_kho.c b/lib/test_kho.c
index a20fafaf9846..601f2323ef7e 100644
--- a/lib/test_kho.c
+++ b/lib/test_kho.c
@@ -211,7 +211,7 @@ static int kho_test_save(void)
 	max_mem = PAGE_ALIGN(max_mem);
 	max_nr = max_mem >> PAGE_SHIFT;

-	folios = kvmalloc_array(max_nr, sizeof(*state->folios), GFP_KERNEL);
+	folios = kvmalloc_objs(*state->folios, max_nr, GFP_KERNEL);
 	if (!folios)
 		return -ENOMEM;
 	state->folios = folios;
diff --git a/lib/test_memcat_p.c b/lib/test_memcat_p.c
index 7e0797a6bebf..0f0a15fea6e2 100644
--- a/lib/test_memcat_p.c
+++ b/lib/test_memcat_p.c
@@ -24,20 +24,20 @@ static int __init test_memcat_p_init(void)
 	struct test_struct **in0, **in1, **out, **p;
 	int err = -ENOMEM, i, r, total = 0;

-	in0 = kcalloc(INPUT_MAX, sizeof(*in0), GFP_KERNEL);
+	in0 = kzalloc_objs(*in0, INPUT_MAX, GFP_KERNEL);
 	if (!in0)
 		return err;

-	in1 = kcalloc(INPUT_MAX, sizeof(*in1), GFP_KERNEL);
+	in1 = kzalloc_objs(*in1, INPUT_MAX, GFP_KERNEL);
 	if (!in1)
 		goto err_free_in0;

 	for (i = 0, r = 1; i < INPUT_MAX - 1; i++) {
-		in0[i] = kmalloc(sizeof(**in0), GFP_KERNEL);
+		in0[i] = kmalloc_obj(**in0, GFP_KERNEL);
 		if (!in0[i])
 			goto err_free_elements;

-		in1[i] = kmalloc(sizeof(**in1), GFP_KERNEL);
+		in1[i] = kmalloc_obj(**in1, GFP_KERNEL);
 		if (!in1[i]) {
 			kfree(in0[i]);
 			goto err_free_elements;
diff --git a/lib/test_objagg.c b/lib/test_objagg.c
index ce5c4c36a084..a391f0b998c9 100644
--- a/lib/test_objagg.c
+++ b/lib/test_objagg.c
@@ -107,7 +107,7 @@ static void *delta_create(void *priv, void *parent_obj, void *obj)
 	if (!delta_check(priv, parent_obj, obj))
 		return ERR_PTR(-EINVAL);

-	delta = kzalloc(sizeof(*delta), GFP_KERNEL);
+	delta = kzalloc_obj(*delta, GFP_KERNEL);
 	if (!delta)
 		return ERR_PTR(-ENOMEM);
 	delta->key_id_diff = diff;
@@ -130,7 +130,7 @@ static void *root_create(void *priv, void *obj, unsigned int id)
 	struct tokey *key = obj;
 	struct root *root;

-	root = kzalloc(sizeof(*root), GFP_KERNEL);
+	root = kzalloc_obj(*root, GFP_KERNEL);
 	if (!root)
 		return ERR_PTR(-ENOMEM);
 	memcpy(&root->key, key, sizeof(root->key));
diff --git a/lib/test_parman.c b/lib/test_parman.c
index f9b97426a337..ae5a0a2f63c3 100644
--- a/lib/test_parman.c
+++ b/lib/test_parman.c
@@ -219,7 +219,7 @@ static struct test_parman *test_parman_create(const struct parman_ops *ops)
 	struct test_parman *test_parman;
 	int err;

-	test_parman = kzalloc(sizeof(*test_parman), GFP_KERNEL);
+	test_parman = kzalloc_obj(*test_parman, GFP_KERNEL);
 	if (!test_parman)
 		return ERR_PTR(-ENOMEM);
 	err = test_parman_resize(test_parman, TEST_PARMAN_BASE_COUNT);
diff --git a/lib/test_rhashtable.c b/lib/test_rhashtable.c
index c63db03ebb9d..12de6388cd9b 100644
--- a/lib/test_rhashtable.c
+++ b/lib/test_rhashtable.c
@@ -524,7 +524,7 @@ static int __init test_insert_dup(struct test_obj_rhl *rhl_test_objects,
 	const char *key;
 	int err = 0;

-	rhlt = kmalloc(sizeof(*rhlt), GFP_KERNEL);
+	rhlt = kmalloc_obj(*rhlt, GFP_KERNEL);
 	if (WARN_ON(!rhlt))
 		return -EINVAL;

diff --git a/lib/test_vmalloc.c b/lib/test_vmalloc.c
index 270b6f7ca807..5ed369a92c75 100644
--- a/lib/test_vmalloc.c
+++ b/lib/test_vmalloc.c
@@ -396,7 +396,7 @@ vm_map_ram_test(void)
 	int i;

 	map_nr_pages = nr_pages > 0 ? nr_pages:1;
-	pages = kcalloc(map_nr_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kzalloc_objs(struct page *, map_nr_pages, GFP_KERNEL);
 	if (!pages)
 		return -1;

@@ -542,7 +542,7 @@ init_test_configuration(void)
 	nr_threads = clamp(nr_threads, 1, (int) USHRT_MAX);

 	/* Allocate the space for test instances. */
-	tdriver = kvcalloc(nr_threads, sizeof(*tdriver), GFP_KERNEL);
+	tdriver = kvzalloc_objs(*tdriver, nr_threads, GFP_KERNEL);
 	if (tdriver == NULL)
 		return -1;

diff --git a/lib/tests/kunit_iov_iter.c b/lib/tests/kunit_iov_iter.c
index 48342736d016..500565631cbd 100644
--- a/lib/tests/kunit_iov_iter.c
+++ b/lib/tests/kunit_iov_iter.c
@@ -387,7 +387,7 @@ static void __init iov_kunit_load_folioq(struct kunit *test,

 	for (i = 0; i < npages; i++) {
 		if (folioq_full(p)) {
-			p->next = kzalloc(sizeof(struct folio_queue), GFP_KERNEL);
+			p->next = kzalloc_obj(struct folio_queue, GFP_KERNEL);
 			KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p->next);
 			folioq_init(p->next, 0);
 			p->next->prev = p;
@@ -403,7 +403,7 @@ static struct folio_queue *iov_kunit_create_folioq(struct kunit *test)
 {
 	struct folio_queue *folioq;

-	folioq = kzalloc(sizeof(struct folio_queue), GFP_KERNEL);
+	folioq = kzalloc_obj(struct folio_queue, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, folioq);
 	kunit_add_action_or_reset(test, iov_kunit_destroy_folioq, folioq);
 	folioq_init(folioq, 0);
@@ -565,7 +565,7 @@ static struct xarray *iov_kunit_create_xarray(struct kunit *test)
 {
 	struct xarray *xarray;

-	xarray = kzalloc(sizeof(struct xarray), GFP_KERNEL);
+	xarray = kzalloc_obj(struct xarray, GFP_KERNEL);
 	xa_init(xarray);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xarray);
 	kunit_add_action_or_reset(test, iov_kunit_destroy_xarray, xarray);
diff --git a/lib/tests/list-test.c b/lib/tests/list-test.c
index 9135cdc1bb39..6d9227a2b204 100644
--- a/lib/tests/list-test.c
+++ b/lib/tests/list-test.c
@@ -26,10 +26,10 @@ static void list_test_list_init(struct kunit *test)

 	INIT_LIST_HEAD(&list2);

-	list4 = kzalloc(sizeof(*list4), GFP_KERNEL | __GFP_NOFAIL);
+	list4 = kzalloc_obj(*list4, GFP_KERNEL | __GFP_NOFAIL);
 	INIT_LIST_HEAD(list4);

-	list5 = kmalloc(sizeof(*list5), GFP_KERNEL | __GFP_NOFAIL);
+	list5 = kmalloc_obj(*list5, GFP_KERNEL | __GFP_NOFAIL);
 	memset(list5, 0xFF, sizeof(*list5));
 	INIT_LIST_HEAD(list5);

@@ -829,10 +829,10 @@ static void hlist_test_init(struct kunit *test)

 	INIT_HLIST_HEAD(&list2);

-	list4 = kzalloc(sizeof(*list4), GFP_KERNEL | __GFP_NOFAIL);
+	list4 = kzalloc_obj(*list4, GFP_KERNEL | __GFP_NOFAIL);
 	INIT_HLIST_HEAD(list4);

-	list5 = kmalloc(sizeof(*list5), GFP_KERNEL | __GFP_NOFAIL);
+	list5 = kmalloc_obj(*list5, GFP_KERNEL | __GFP_NOFAIL);
 	memset(list5, 0xFF, sizeof(*list5));
 	INIT_HLIST_HEAD(list5);

diff --git a/lib/tests/test_ratelimit.c b/lib/tests/test_ratelimit.c
index bfaeca49304a..365f1fc1f256 100644
--- a/lib/tests/test_ratelimit.c
+++ b/lib/tests/test_ratelimit.c
@@ -104,7 +104,8 @@ static void test_ratelimit_stress(struct kunit *test)
 	int i;
 	const int n_stress_kthread = cpumask_weight(cpu_online_mask);
 	struct stress_kthread skt = { 0 };
-	struct stress_kthread *sktp = kcalloc(n_stress_kthread, sizeof(*sktp), GFP_KERNEL);
+	struct stress_kthread *sktp = kzalloc_objs(*sktp, n_stress_kthread,
+						   GFP_KERNEL);

 	KUNIT_EXPECT_NOT_NULL_MSG(test, sktp, "Memory allocation failure");
 	for (i = 0; i < n_stress_kthread; i++) {
diff --git a/lib/xz/xz_dec_bcj.c b/lib/xz/xz_dec_bcj.c
index 610d58d947ab..6e0fa5bef841 100644
--- a/lib/xz/xz_dec_bcj.c
+++ b/lib/xz/xz_dec_bcj.c
@@ -591,7 +591,7 @@ enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, struct xz_dec_lzma2 *lzma2,

 struct xz_dec_bcj *xz_dec_bcj_create(bool single_call)
 {
-	struct xz_dec_bcj *s = kmalloc(sizeof(*s), GFP_KERNEL);
+	struct xz_dec_bcj *s = kmalloc_obj(*s, GFP_KERNEL);
 	if (s != NULL)
 		s->single_call = single_call;

diff --git a/lib/xz/xz_dec_lzma2.c b/lib/xz/xz_dec_lzma2.c
index 83bb66b6016d..02fccb7795b5 100644
--- a/lib/xz/xz_dec_lzma2.c
+++ b/lib/xz/xz_dec_lzma2.c
@@ -1138,7 +1138,7 @@ enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, struct xz_buf *b)

 struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, uint32_t dict_max)
 {
-	struct xz_dec_lzma2 *s = kmalloc(sizeof(*s), GFP_KERNEL);
+	struct xz_dec_lzma2 *s = kmalloc_obj(*s, GFP_KERNEL);
 	if (s == NULL)
 		return NULL;

@@ -1296,7 +1296,7 @@ struct xz_dec_microlzma *xz_dec_microlzma_alloc(enum xz_mode mode,
 	if (dict_size < 4096 || dict_size > (3U << 30))
 		return NULL;

-	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	s = kmalloc_obj(*s, GFP_KERNEL);
 	if (s == NULL)
 		return NULL;

diff --git a/lib/xz/xz_dec_stream.c b/lib/xz/xz_dec_stream.c
index f9d003684d56..0844eb6e990c 100644
--- a/lib/xz/xz_dec_stream.c
+++ b/lib/xz/xz_dec_stream.c
@@ -784,7 +784,7 @@ enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b)

 struct xz_dec *xz_dec_init(enum xz_mode mode, uint32_t dict_max)
 {
-	struct xz_dec *s = kmalloc(sizeof(*s), GFP_KERNEL);
+	struct xz_dec *s = kmalloc_obj(*s, GFP_KERNEL);
 	if (s == NULL)
 		return NULL;

diff --git a/lib/zlib_inflate/infutil.c b/lib/zlib_inflate/infutil.c
index 4824c2cc7a09..d5f9a77e41c6 100644
--- a/lib/zlib_inflate/infutil.c
+++ b/lib/zlib_inflate/infutil.c
@@ -14,7 +14,7 @@ int zlib_inflate_blob(void *gunzip_buf, unsigned int sz,
 	int rc;

 	rc = -ENOMEM;
-	strm = kmalloc(sizeof(*strm), GFP_KERNEL);
+	strm = kmalloc_obj(*strm, GFP_KERNEL);
 	if (strm == NULL)
 		goto gunzip_nomem1;
 	strm->workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index e319bd5e8b75..7a18fa6c7272 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -689,7 +689,7 @@ static int cgwb_create(struct backing_dev_info *bdi,
 		goto out_put;

 	/* need to create a new one */
-	wb = kmalloc(sizeof(*wb), gfp);
+	wb = kmalloc_obj(*wb, gfp);
 	if (!wb) {
 		ret = -ENOMEM;
 		goto out_put;
diff --git a/mm/cma_debug.c b/mm/cma_debug.c
index 8c7d7f8e8fbd..cb94f897169d 100644
--- a/mm/cma_debug.c
+++ b/mm/cma_debug.c
@@ -131,7 +131,7 @@ static int cma_alloc_mem(struct cma *cma, int count)
 	struct cma_mem *mem;
 	struct page *p;

-	mem = kzalloc(sizeof(*mem), GFP_KERNEL);
+	mem = kzalloc_obj(*mem, GFP_KERNEL);
 	if (!mem)
 		return -ENOMEM;

diff --git a/mm/cma_sysfs.c b/mm/cma_sysfs.c
index 97acd3e5a6a5..ee76baaf843c 100644
--- a/mm/cma_sysfs.c
+++ b/mm/cma_sysfs.c
@@ -117,7 +117,7 @@ static int __init cma_sysfs_init(void)
 		return -ENOMEM;

 	for (i = 0; i < cma_area_count; i++) {
-		cma_kobj = kzalloc(sizeof(*cma_kobj), GFP_KERNEL);
+		cma_kobj = kzalloc_obj(*cma_kobj, GFP_KERNEL);
 		if (!cma_kobj) {
 			err = -ENOMEM;
 			goto out;
diff --git a/mm/damon/core.c b/mm/damon/core.c
index 5e2724a4f285..2d73d7effa3b 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -273,7 +273,7 @@ struct damos_filter *damos_new_filter(enum damos_filter_type type,
 {
 	struct damos_filter *filter;

-	filter = kmalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kmalloc_obj(*filter, GFP_KERNEL);
 	if (!filter)
 		return NULL;
 	filter->type = type;
@@ -332,7 +332,7 @@ struct damos_quota_goal *damos_new_quota_goal(
 {
 	struct damos_quota_goal *goal;

-	goal = kmalloc(sizeof(*goal), GFP_KERNEL);
+	goal = kmalloc_obj(*goal, GFP_KERNEL);
 	if (!goal)
 		return NULL;
 	goal->metric = metric;
@@ -385,7 +385,7 @@ struct damos *damon_new_scheme(struct damos_access_pattern *pattern,
 {
 	struct damos *scheme;

-	scheme = kmalloc(sizeof(*scheme), GFP_KERNEL);
+	scheme = kmalloc_obj(*scheme, GFP_KERNEL);
 	if (!scheme)
 		return NULL;
 	scheme->pattern = *pattern;
@@ -473,7 +473,7 @@ struct damon_target *damon_new_target(void)
 {
 	struct damon_target *t;

-	t = kmalloc(sizeof(*t), GFP_KERNEL);
+	t = kmalloc_obj(*t, GFP_KERNEL);
 	if (!t)
 		return NULL;

@@ -529,7 +529,7 @@ struct damon_ctx *damon_new_ctx(void)
 {
 	struct damon_ctx *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return NULL;

@@ -1153,7 +1153,7 @@ static int damon_commit_target_regions(struct damon_target *dst,
 	if (!i)
 		return 0;

-	ranges = kmalloc_array(i, sizeof(*ranges), GFP_KERNEL | __GFP_NOWARN);
+	ranges = kmalloc_objs(*ranges, i, GFP_KERNEL | __GFP_NOWARN);
 	if (!ranges)
 		return -ENOMEM;
 	i = 0;
diff --git a/mm/damon/stat.c b/mm/damon/stat.c
index bcf6c8ae9b90..06fc95861dd4 100644
--- a/mm/damon/stat.c
+++ b/mm/damon/stat.c
@@ -90,8 +90,8 @@ static int damon_stat_sort_regions(struct damon_ctx *c,

 	damon_for_each_target(t, c) {
 		/* there is only one target */
-		region_pointers = kmalloc_array(damon_nr_regions(t),
-				sizeof(*region_pointers), GFP_KERNEL);
+		region_pointers = kmalloc_objs(*region_pointers,
+					       damon_nr_regions(t), GFP_KERNEL);
 		if (!region_pointers)
 			return -ENOMEM;
 		damon_for_each_region(r, t) {
diff --git a/mm/damon/sysfs-common.c b/mm/damon/sysfs-common.c
index ffaf285e241a..2149008135ef 100644
--- a/mm/damon/sysfs-common.c
+++ b/mm/damon/sysfs-common.c
@@ -19,8 +19,7 @@ struct damon_sysfs_ul_range *damon_sysfs_ul_range_alloc(
 		unsigned long min,
 		unsigned long max)
 {
-	struct damon_sysfs_ul_range *range = kmalloc(sizeof(*range),
-			GFP_KERNEL);
+	struct damon_sysfs_ul_range *range = kmalloc_obj(*range, GFP_KERNEL);

 	if (!range)
 		return NULL;
diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c
index 2b05a6477188..ba700da545af 100644
--- a/mm/damon/sysfs-schemes.c
+++ b/mm/damon/sysfs-schemes.c
@@ -26,8 +26,8 @@ struct damon_sysfs_scheme_region {
 static struct damon_sysfs_scheme_region *damon_sysfs_scheme_region_alloc(
 		struct damon_region *region)
 {
-	struct damon_sysfs_scheme_region *sysfs_region = kmalloc(
-			sizeof(*sysfs_region), GFP_KERNEL);
+	struct damon_sysfs_scheme_region *sysfs_region = kmalloc_obj(*sysfs_region,
+								     GFP_KERNEL);

 	if (!sysfs_region)
 		return NULL;
@@ -138,8 +138,8 @@ struct damon_sysfs_scheme_regions {
 static struct damon_sysfs_scheme_regions *
 damon_sysfs_scheme_regions_alloc(void)
 {
-	struct damon_sysfs_scheme_regions *regions = kmalloc(sizeof(*regions),
-			GFP_KERNEL);
+	struct damon_sysfs_scheme_regions *regions = kmalloc_obj(*regions,
+								 GFP_KERNEL);

 	if (!regions)
 		return NULL;
@@ -210,7 +210,7 @@ struct damon_sysfs_stats {

 static struct damon_sysfs_stats *damon_sysfs_stats_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_stats), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_stats, GFP_KERNEL);
 }

 static ssize_t nr_tried_show(struct kobject *kobj, struct kobj_attribute *attr,
@@ -376,7 +376,7 @@ static struct damon_sysfs_scheme_filter *damon_sysfs_scheme_filter_alloc(
 {
 	struct damon_sysfs_scheme_filter *filter;

-	filter = kzalloc(sizeof(struct damon_sysfs_scheme_filter), GFP_KERNEL);
+	filter = kzalloc_obj(struct damon_sysfs_scheme_filter, GFP_KERNEL);
 	if (filter)
 		filter->handle_layer = layer;
 	return filter;
@@ -724,7 +724,7 @@ damon_sysfs_scheme_filters_alloc(enum damos_sysfs_filter_handle_layer layer)
 {
 	struct damon_sysfs_scheme_filters *filters;

-	filters = kzalloc(sizeof(struct damon_sysfs_scheme_filters), GFP_KERNEL);
+	filters = kzalloc_obj(struct damon_sysfs_scheme_filters, GFP_KERNEL);
 	if (filters)
 		filters->handle_layer = layer;
 	return filters;
@@ -753,8 +753,8 @@ static int damon_sysfs_scheme_filters_add_dirs(
 	if (!nr_filters)
 		return 0;

-	filters_arr = kmalloc_array(nr_filters, sizeof(*filters_arr),
-			GFP_KERNEL | __GFP_NOWARN);
+	filters_arr = kmalloc_objs(*filters_arr, nr_filters,
+				   GFP_KERNEL | __GFP_NOWARN);
 	if (!filters_arr)
 		return -ENOMEM;
 	filters->filters_arr = filters_arr;
@@ -851,8 +851,8 @@ static struct damon_sysfs_watermarks *damon_sysfs_watermarks_alloc(
 		enum damos_wmark_metric metric, unsigned long interval_us,
 		unsigned long high, unsigned long mid, unsigned long low)
 {
-	struct damon_sysfs_watermarks *watermarks = kmalloc(
-			sizeof(*watermarks), GFP_KERNEL);
+	struct damon_sysfs_watermarks *watermarks = kmalloc_obj(*watermarks,
+								GFP_KERNEL);

 	if (!watermarks)
 		return NULL;
@@ -1045,7 +1045,7 @@ struct damos_sysfs_quota_goal {

 static struct damos_sysfs_quota_goal *damos_sysfs_quota_goal_alloc(void)
 {
-	return kzalloc(sizeof(struct damos_sysfs_quota_goal), GFP_KERNEL);
+	return kzalloc_obj(struct damos_sysfs_quota_goal, GFP_KERNEL);
 }

 struct damos_sysfs_qgoal_metric_name {
@@ -1263,7 +1263,7 @@ struct damos_sysfs_quota_goals {

 static struct damos_sysfs_quota_goals *damos_sysfs_quota_goals_alloc(void)
 {
-	return kzalloc(sizeof(struct damos_sysfs_quota_goals), GFP_KERNEL);
+	return kzalloc_obj(struct damos_sysfs_quota_goals, GFP_KERNEL);
 }

 static void damos_sysfs_quota_goals_rm_dirs(
@@ -1289,8 +1289,8 @@ static int damos_sysfs_quota_goals_add_dirs(
 	if (!nr_goals)
 		return 0;

-	goals_arr = kmalloc_array(nr_goals, sizeof(*goals_arr),
-			GFP_KERNEL | __GFP_NOWARN);
+	goals_arr = kmalloc_objs(*goals_arr, nr_goals,
+				 GFP_KERNEL | __GFP_NOWARN);
 	if (!goals_arr)
 		return -ENOMEM;
 	goals->goals_arr = goals_arr;
@@ -1383,8 +1383,7 @@ struct damon_sysfs_weights {
 static struct damon_sysfs_weights *damon_sysfs_weights_alloc(unsigned int sz,
 		unsigned int nr_accesses, unsigned int age)
 {
-	struct damon_sysfs_weights *weights = kmalloc(sizeof(*weights),
-			GFP_KERNEL);
+	struct damon_sysfs_weights *weights = kmalloc_obj(*weights, GFP_KERNEL);

 	if (!weights)
 		return NULL;
@@ -1496,7 +1495,7 @@ struct damon_sysfs_quotas {

 static struct damon_sysfs_quotas *damon_sysfs_quotas_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_quotas), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_quotas, GFP_KERNEL);
 }

 static int damon_sysfs_quotas_add_dirs(struct damon_sysfs_quotas *quotas)
@@ -1660,8 +1659,8 @@ struct damon_sysfs_access_pattern {
 static
 struct damon_sysfs_access_pattern *damon_sysfs_access_pattern_alloc(void)
 {
-	struct damon_sysfs_access_pattern *access_pattern =
-		kmalloc(sizeof(*access_pattern), GFP_KERNEL);
+	struct damon_sysfs_access_pattern *access_pattern = kmalloc_obj(*access_pattern,
+									GFP_KERNEL);

 	if (!access_pattern)
 		return NULL;
@@ -1757,7 +1756,7 @@ struct damos_sysfs_dest {

 static struct damos_sysfs_dest *damos_sysfs_dest_alloc(void)
 {
-	return kzalloc(sizeof(struct damos_sysfs_dest), GFP_KERNEL);
+	return kzalloc_obj(struct damos_sysfs_dest, GFP_KERNEL);
 }

 static ssize_t id_show(
@@ -1837,7 +1836,7 @@ struct damos_sysfs_dests {
 static struct damos_sysfs_dests *
 damos_sysfs_dests_alloc(void)
 {
-	return kzalloc(sizeof(struct damos_sysfs_dests), GFP_KERNEL);
+	return kzalloc_obj(struct damos_sysfs_dests, GFP_KERNEL);
 }

 static void damos_sysfs_dests_rm_dirs(
@@ -1863,8 +1862,8 @@ static int damos_sysfs_dests_add_dirs(
 	if (!nr_dests)
 		return 0;

-	dests_arr = kmalloc_array(nr_dests, sizeof(*dests_arr),
-			GFP_KERNEL | __GFP_NOWARN);
+	dests_arr = kmalloc_objs(*dests_arr, nr_dests,
+				 GFP_KERNEL | __GFP_NOWARN);
 	if (!dests_arr)
 		return -ENOMEM;
 	dests->dests_arr = dests_arr;
@@ -2014,8 +2013,7 @@ static struct damos_sysfs_action_name damos_sysfs_action_names[] = {
 static struct damon_sysfs_scheme *damon_sysfs_scheme_alloc(
 		enum damos_action action, unsigned long apply_interval_us)
 {
-	struct damon_sysfs_scheme *scheme = kmalloc(sizeof(*scheme),
-				GFP_KERNEL);
+	struct damon_sysfs_scheme *scheme = kmalloc_obj(*scheme, GFP_KERNEL);

 	if (!scheme)
 		return NULL;
@@ -2376,7 +2374,7 @@ static const struct kobj_type damon_sysfs_scheme_ktype = {

 struct damon_sysfs_schemes *damon_sysfs_schemes_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_schemes), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_schemes, GFP_KERNEL);
 }

 void damon_sysfs_schemes_rm_dirs(struct damon_sysfs_schemes *schemes)
@@ -2403,8 +2401,8 @@ static int damon_sysfs_schemes_add_dirs(struct damon_sysfs_schemes *schemes,
 	if (!nr_schemes)
 		return 0;

-	schemes_arr = kmalloc_array(nr_schemes, sizeof(*schemes_arr),
-			GFP_KERNEL | __GFP_NOWARN);
+	schemes_arr = kmalloc_objs(*schemes_arr, nr_schemes,
+				   GFP_KERNEL | __GFP_NOWARN);
 	if (!schemes_arr)
 		return -ENOMEM;
 	schemes->schemes_arr = schemes_arr;
@@ -2683,12 +2681,12 @@ static int damos_sysfs_add_migrate_dest(struct damos *scheme,
 	struct damos_migrate_dests *dests = &scheme->migrate_dests;
 	int i;

-	dests->node_id_arr = kmalloc_array(sysfs_dests->nr,
-			sizeof(*dests->node_id_arr), GFP_KERNEL);
+	dests->node_id_arr = kmalloc_objs(*dests->node_id_arr, sysfs_dests->nr,
+					  GFP_KERNEL);
 	if (!dests->node_id_arr)
 		return -ENOMEM;
-	dests->weight_arr = kmalloc_array(sysfs_dests->nr,
-			sizeof(*dests->weight_arr), GFP_KERNEL);
+	dests->weight_arr = kmalloc_objs(*dests->weight_arr, sysfs_dests->nr,
+					 GFP_KERNEL);
 	if (!dests->weight_arr)
 		/* ->node_id_arr will be freed by scheme destruction */
 		return -ENOMEM;
diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c
index b7f66196bec4..9561ad8b7852 100644
--- a/mm/damon/sysfs.c
+++ b/mm/damon/sysfs.c
@@ -22,7 +22,7 @@ struct damon_sysfs_region {

 static struct damon_sysfs_region *damon_sysfs_region_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_region), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_region, GFP_KERNEL);
 }

 static ssize_t start_show(struct kobject *kobj, struct kobj_attribute *attr,
@@ -99,7 +99,7 @@ struct damon_sysfs_regions {

 static struct damon_sysfs_regions *damon_sysfs_regions_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_regions), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_regions, GFP_KERNEL);
 }

 static void damon_sysfs_regions_rm_dirs(struct damon_sysfs_regions *regions)
@@ -124,8 +124,8 @@ static int damon_sysfs_regions_add_dirs(struct damon_sysfs_regions *regions,
 	if (!nr_regions)
 		return 0;

-	regions_arr = kmalloc_array(nr_regions, sizeof(*regions_arr),
-			GFP_KERNEL | __GFP_NOWARN);
+	regions_arr = kmalloc_objs(*regions_arr, nr_regions,
+				   GFP_KERNEL | __GFP_NOWARN);
 	if (!regions_arr)
 		return -ENOMEM;
 	regions->regions_arr = regions_arr;
@@ -217,7 +217,7 @@ struct damon_sysfs_target {

 static struct damon_sysfs_target *damon_sysfs_target_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_target), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_target, GFP_KERNEL);
 }

 static int damon_sysfs_target_add_dirs(struct damon_sysfs_target *target)
@@ -323,7 +323,7 @@ struct damon_sysfs_targets {

 static struct damon_sysfs_targets *damon_sysfs_targets_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_targets), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_targets, GFP_KERNEL);
 }

 static void damon_sysfs_targets_rm_dirs(struct damon_sysfs_targets *targets)
@@ -350,8 +350,8 @@ static int damon_sysfs_targets_add_dirs(struct damon_sysfs_targets *targets,
 	if (!nr_targets)
 		return 0;

-	targets_arr = kmalloc_array(nr_targets, sizeof(*targets_arr),
-			GFP_KERNEL | __GFP_NOWARN);
+	targets_arr = kmalloc_objs(*targets_arr, nr_targets,
+				   GFP_KERNEL | __GFP_NOWARN);
 	if (!targets_arr)
 		return -ENOMEM;
 	targets->targets_arr = targets_arr;
@@ -452,8 +452,7 @@ static struct damon_sysfs_intervals_goal *damon_sysfs_intervals_goal_alloc(
 		unsigned long access_bp, unsigned long aggrs,
 		unsigned long min_sample_us, unsigned long max_sample_us)
 {
-	struct damon_sysfs_intervals_goal *goal = kmalloc(sizeof(*goal),
-			GFP_KERNEL);
+	struct damon_sysfs_intervals_goal *goal = kmalloc_obj(*goal, GFP_KERNEL);

 	if (!goal)
 		return NULL;
@@ -610,8 +609,8 @@ static struct damon_sysfs_intervals *damon_sysfs_intervals_alloc(
 		unsigned long sample_us, unsigned long aggr_us,
 		unsigned long update_us)
 {
-	struct damon_sysfs_intervals *intervals = kmalloc(sizeof(*intervals),
-			GFP_KERNEL);
+	struct damon_sysfs_intervals *intervals = kmalloc_obj(*intervals,
+							      GFP_KERNEL);

 	if (!intervals)
 		return NULL;
@@ -761,7 +760,7 @@ struct damon_sysfs_attrs {

 static struct damon_sysfs_attrs *damon_sysfs_attrs_alloc(void)
 {
-	struct damon_sysfs_attrs *attrs = kmalloc(sizeof(*attrs), GFP_KERNEL);
+	struct damon_sysfs_attrs *attrs = kmalloc_obj(*attrs, GFP_KERNEL);

 	if (!attrs)
 		return NULL;
@@ -873,8 +872,7 @@ struct damon_sysfs_context {
 static struct damon_sysfs_context *damon_sysfs_context_alloc(
 		enum damon_ops_id ops_id)
 {
-	struct damon_sysfs_context *context = kmalloc(sizeof(*context),
-				GFP_KERNEL);
+	struct damon_sysfs_context *context = kmalloc_obj(*context, GFP_KERNEL);

 	if (!context)
 		return NULL;
@@ -1096,7 +1094,7 @@ struct damon_sysfs_contexts {

 static struct damon_sysfs_contexts *damon_sysfs_contexts_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_contexts), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_contexts, GFP_KERNEL);
 }

 static void damon_sysfs_contexts_rm_dirs(struct damon_sysfs_contexts *contexts)
@@ -1123,8 +1121,8 @@ static int damon_sysfs_contexts_add_dirs(struct damon_sysfs_contexts *contexts,
 	if (!nr_contexts)
 		return 0;

-	contexts_arr = kmalloc_array(nr_contexts, sizeof(*contexts_arr),
-			GFP_KERNEL | __GFP_NOWARN);
+	contexts_arr = kmalloc_objs(*contexts_arr, nr_contexts,
+				    GFP_KERNEL | __GFP_NOWARN);
 	if (!contexts_arr)
 		return -ENOMEM;
 	contexts->contexts_arr = contexts_arr;
@@ -1223,7 +1221,7 @@ struct damon_sysfs_kdamond {

 static struct damon_sysfs_kdamond *damon_sysfs_kdamond_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_kdamond), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_kdamond, GFP_KERNEL);
 }

 static int damon_sysfs_kdamond_add_dirs(struct damon_sysfs_kdamond *kdamond)
@@ -1367,8 +1365,9 @@ static int damon_sysfs_set_regions(struct damon_target *t,
 		struct damon_sysfs_regions *sysfs_regions,
 		unsigned long min_region_sz)
 {
-	struct damon_addr_range *ranges = kmalloc_array(sysfs_regions->nr,
-			sizeof(*ranges), GFP_KERNEL | __GFP_NOWARN);
+	struct damon_addr_range *ranges = kmalloc_objs(*ranges,
+						       sysfs_regions->nr,
+						       GFP_KERNEL | __GFP_NOWARN);
 	int i, err = -EINVAL;

 	if (!ranges)
@@ -1643,8 +1642,7 @@ static int damon_sysfs_turn_damon_on(struct damon_sysfs_kdamond *kdamond)
 		damon_destroy_ctx(kdamond->damon_ctx);
 	kdamond->damon_ctx = NULL;

-	repeat_call_control = kmalloc(sizeof(*repeat_call_control),
-			GFP_KERNEL);
+	repeat_call_control = kmalloc_obj(*repeat_call_control, GFP_KERNEL);
 	if (!repeat_call_control)
 		return -ENOMEM;

@@ -1897,7 +1895,7 @@ struct damon_sysfs_kdamonds {

 static struct damon_sysfs_kdamonds *damon_sysfs_kdamonds_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_kdamonds), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_kdamonds, GFP_KERNEL);
 }

 static void damon_sysfs_kdamonds_rm_dirs(struct damon_sysfs_kdamonds *kdamonds)
@@ -1940,8 +1938,8 @@ static int damon_sysfs_kdamonds_add_dirs(struct damon_sysfs_kdamonds *kdamonds,
 	if (!nr_kdamonds)
 		return 0;

-	kdamonds_arr = kmalloc_array(nr_kdamonds, sizeof(*kdamonds_arr),
-			GFP_KERNEL | __GFP_NOWARN);
+	kdamonds_arr = kmalloc_objs(*kdamonds_arr, nr_kdamonds,
+				    GFP_KERNEL | __GFP_NOWARN);
 	if (!kdamonds_arr)
 		return -ENOMEM;
 	kdamonds->kdamonds_arr = kdamonds_arr;
@@ -2038,7 +2036,7 @@ struct damon_sysfs_ui_dir {

 static struct damon_sysfs_ui_dir *damon_sysfs_ui_dir_alloc(void)
 {
-	return kzalloc(sizeof(struct damon_sysfs_ui_dir), GFP_KERNEL);
+	return kzalloc_obj(struct damon_sysfs_ui_dir, GFP_KERNEL);
 }

 static int damon_sysfs_ui_dir_add_dirs(struct damon_sysfs_ui_dir *ui_dir)
diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index 92ea25e2dc9e..d3a30b170564 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -725,12 +725,12 @@ static int damos_test_help_dests_setup(struct damos_migrate_dests *dests,
 {
 	size_t i;

-	dests->node_id_arr = kmalloc_array(nr_dests,
-			sizeof(*dests->node_id_arr), GFP_KERNEL);
+	dests->node_id_arr = kmalloc_objs(*dests->node_id_arr, nr_dests,
+					  GFP_KERNEL);
 	if (!dests->node_id_arr)
 		return -ENOMEM;
-	dests->weight_arr = kmalloc_array(nr_dests,
-			sizeof(*dests->weight_arr), GFP_KERNEL);
+	dests->weight_arr = kmalloc_objs(*dests->weight_arr, nr_dests,
+					 GFP_KERNEL);
 	if (!dests->weight_arr) {
 		kfree(dests->node_id_arr);
 		dests->node_id_arr = NULL;
diff --git a/mm/damon/tests/sysfs-kunit.h b/mm/damon/tests/sysfs-kunit.h
index 0c665ed255a3..8dcd4a01684e 100644
--- a/mm/damon/tests/sysfs-kunit.h
+++ b/mm/damon/tests/sysfs-kunit.h
@@ -48,8 +48,8 @@ static void damon_sysfs_test_add_targets(struct kunit *test)
 	if (!sysfs_targets)
 		kunit_skip(test, "sysfs_targets alloc fail");
 	sysfs_targets->nr = 1;
-	sysfs_targets->targets_arr = kmalloc_array(1,
-			sizeof(*sysfs_targets->targets_arr), GFP_KERNEL);
+	sysfs_targets->targets_arr = kmalloc_objs(*sysfs_targets->targets_arr,
+						  1, GFP_KERNEL);
 	if (!sysfs_targets->targets_arr) {
 		kfree(sysfs_targets);
 		kunit_skip(test, "targets_arr alloc fail");
diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c
index 83ab3d8c3792..862835d69af1 100644
--- a/mm/damon/vaddr.c
+++ b/mm/damon/vaddr.c
@@ -821,8 +821,8 @@ static unsigned long damos_va_migrate(struct damon_target *target,
 	use_target_nid = dests->nr_dests == 0;
 	nr_dests = use_target_nid ? 1 : dests->nr_dests;
 	priv.scheme = s;
-	priv.migration_lists = kmalloc_array(nr_dests,
-		sizeof(*priv.migration_lists), GFP_KERNEL);
+	priv.migration_lists = kmalloc_objs(*priv.migration_lists, nr_dests,
+					    GFP_KERNEL);
 	if (!priv.migration_lists)
 		return 0;

diff --git a/mm/dmapool_test.c b/mm/dmapool_test.c
index e8172d708308..454952ac9f0e 100644
--- a/mm/dmapool_test.c
+++ b/mm/dmapool_test.c
@@ -67,7 +67,7 @@ static int dmapool_test_block(const struct dmapool_parms *parms)
 	struct dma_pool_pair *p;
 	int i, ret;

-	p = kcalloc(blocks, sizeof(*p), GFP_KERNEL);
+	p = kzalloc_objs(*p, blocks, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/mm/hmm.c b/mm/hmm.c
index 4ec74c18bef6..f6c4ddff4bd6 100644
--- a/mm/hmm.c
+++ b/mm/hmm.c
@@ -723,8 +723,8 @@ int hmm_dma_map_alloc(struct device *dev, struct hmm_dma_map *map,
 	use_iova = dma_iova_try_alloc(dev, &map->state, 0,
 			nr_entries * PAGE_SIZE);
 	if (!use_iova && dma_need_unmap(dev)) {
-		map->dma_list = kvcalloc(nr_entries, sizeof(*map->dma_list),
-					 GFP_KERNEL | __GFP_NOWARN);
+		map->dma_list = kvzalloc_objs(*map->dma_list, nr_entries,
+					      GFP_KERNEL | __GFP_NOWARN);
 		if (!map->dma_list)
 			goto err_dma;
 	}
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 0d487649e4de..809c99ee81b9 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -718,7 +718,7 @@ static struct thpsize *thpsize_create(int order, struct kobject *parent)
 	struct thpsize *thpsize;
 	int ret = -ENOMEM;

-	thpsize = kzalloc(sizeof(*thpsize), GFP_KERNEL);
+	thpsize = kzalloc_obj(*thpsize, GFP_KERNEL);
 	if (!thpsize)
 		goto err;

diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 6e855a32de3d..6793a5b07882 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -154,7 +154,7 @@ struct hugepage_subpool *hugepage_new_subpool(struct hstate *h, long max_hpages,
 {
 	struct hugepage_subpool *spool;

-	spool = kzalloc(sizeof(*spool), GFP_KERNEL);
+	spool = kzalloc_obj(*spool, GFP_KERNEL);
 	if (!spool)
 		return NULL;

@@ -429,7 +429,7 @@ int hugetlb_vma_lock_alloc(struct vm_area_struct *vma)
 	if (vma->vm_private_data)
 		return -EINVAL;

-	vma_lock = kmalloc(sizeof(*vma_lock), GFP_KERNEL);
+	vma_lock = kmalloc_obj(*vma_lock, GFP_KERNEL);
 	if (!vma_lock) {
 		/*
 		 * If we can not allocate structure, then vma can not
@@ -687,7 +687,7 @@ static int allocate_file_region_entries(struct resv_map *resv,

 		spin_unlock(&resv->lock);
 		for (i = 0; i < to_allocate; i++) {
-			trg = kmalloc(sizeof(*trg), GFP_KERNEL);
+			trg = kmalloc_obj(*trg, GFP_KERNEL);
 			if (!trg)
 				goto out_of_memory;
 			list_add(&trg->link, &allocated_regions);
@@ -891,7 +891,7 @@ static long region_del(struct resv_map *resv, long f, long t)

 			if (!nrg) {
 				spin_unlock(&resv->lock);
-				nrg = kmalloc(sizeof(*nrg), GFP_KERNEL);
+				nrg = kmalloc_obj(*nrg, GFP_KERNEL);
 				if (!nrg)
 					return -ENOMEM;
 				goto retry;
@@ -1105,8 +1105,8 @@ resv_map_set_hugetlb_cgroup_uncharge_info(struct resv_map *resv_map,

 struct resv_map *resv_map_alloc(void)
 {
-	struct resv_map *resv_map = kmalloc(sizeof(*resv_map), GFP_KERNEL);
-	struct file_region *rg = kmalloc(sizeof(*rg), GFP_KERNEL);
+	struct resv_map *resv_map = kmalloc_obj(*resv_map, GFP_KERNEL);
+	struct file_region *rg = kmalloc_obj(*rg, GFP_KERNEL);

 	if (!resv_map || !rg) {
 		kfree(resv_map);
@@ -4190,8 +4190,7 @@ static int __init hugetlb_init(void)
 	num_fault_mutexes = 1;
 #endif
 	hugetlb_fault_mutex_table =
-		kmalloc_array(num_fault_mutexes, sizeof(struct mutex),
-			      GFP_KERNEL);
+		kmalloc_objs(struct mutex, num_fault_mutexes, GFP_KERNEL);
 	BUG_ON(!hugetlb_fault_mutex_table);

 	for (i = 0; i < num_fault_mutexes; i++)
diff --git a/mm/hugetlb_cgroup.c b/mm/hugetlb_cgroup.c
index 792d06538fa9..6e4706d6ee82 100644
--- a/mm/hugetlb_cgroup.c
+++ b/mm/hugetlb_cgroup.c
@@ -139,8 +139,7 @@ hugetlb_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
 	struct hugetlb_cgroup *h_cgroup;
 	int node;

-	h_cgroup = kzalloc(struct_size(h_cgroup, nodeinfo, nr_node_ids),
-			   GFP_KERNEL);
+	h_cgroup = kzalloc_flex(*h_cgroup, nodeinfo, nr_node_ids, GFP_KERNEL);

 	if (!h_cgroup)
 		return ERR_PTR(-ENOMEM);
@@ -857,10 +856,10 @@ static void __init __hugetlb_cgroup_file_pre_init(void)
 	int cft_count;

 	cft_count = hugetlb_max_hstate * DFL_TMPL_SIZE + 1; /* add terminator */
-	dfl_files = kcalloc(cft_count, sizeof(struct cftype), GFP_KERNEL);
+	dfl_files = kzalloc_objs(struct cftype, cft_count, GFP_KERNEL);
 	BUG_ON(!dfl_files);
 	cft_count = hugetlb_max_hstate * LEGACY_TMPL_SIZE + 1; /* add terminator */
-	legacy_files = kcalloc(cft_count, sizeof(struct cftype), GFP_KERNEL);
+	legacy_files = kzalloc_objs(struct cftype, cft_count, GFP_KERNEL);
 	BUG_ON(!legacy_files);
 }

diff --git a/mm/kasan/kasan_test_c.c b/mm/kasan/kasan_test_c.c
index b4d157962121..cb9c95ed7821 100644
--- a/mm/kasan/kasan_test_c.c
+++ b/mm/kasan/kasan_test_c.c
@@ -511,7 +511,7 @@ static void kmalloc_oob_16(struct kunit *test)
 	ptr1 = RELOC_HIDE(kmalloc(sizeof(*ptr1) - 3, GFP_KERNEL), 0);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1);

-	ptr2 = kmalloc(sizeof(*ptr2), GFP_KERNEL);
+	ptr2 = kmalloc_obj(*ptr2, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2);

 	OPTIMIZER_HIDE_VAR(ptr1);
@@ -529,10 +529,10 @@ static void kmalloc_uaf_16(struct kunit *test)

 	KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test);

-	ptr1 = kmalloc(sizeof(*ptr1), GFP_KERNEL);
+	ptr1 = kmalloc_obj(*ptr1, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1);

-	ptr2 = kmalloc(sizeof(*ptr2), GFP_KERNEL);
+	ptr2 = kmalloc_obj(*ptr2, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2);
 	kfree(ptr2);

@@ -859,7 +859,7 @@ static void kasan_atomics(struct kunit *test)
 	 */
 	a1 = kzalloc(48, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, a1);
-	a2 = kzalloc(sizeof(atomic_long_t), GFP_KERNEL);
+	a2 = kzalloc_obj(atomic_long_t, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, a2);

 	/* Use atomics to access the redzone. */
@@ -954,7 +954,7 @@ static void rcu_uaf(struct kunit *test)
 {
 	struct kasan_rcu_info *ptr;

-	ptr = kmalloc(sizeof(struct kasan_rcu_info), GFP_KERNEL);
+	ptr = kmalloc_obj(struct kasan_rcu_info, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr);

 	global_rcu_ptr = rcu_dereference_protected(
@@ -978,7 +978,7 @@ static void workqueue_uaf(struct kunit *test)
 	workqueue = create_workqueue("kasan_workqueue_test");
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, workqueue);

-	work = kmalloc(sizeof(struct work_struct), GFP_KERNEL);
+	work = kmalloc_obj(struct work_struct, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, work);

 	INIT_WORK(work, workqueue_uaf_work);
diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index eff9e3061925..f2f95b32317c 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -2769,7 +2769,7 @@ int madvise_collapse(struct vm_area_struct *vma, unsigned long start,
 	if (!thp_vma_allowable_order(vma, vma->vm_flags, TVA_FORCED_COLLAPSE, PMD_ORDER))
 		return -EINVAL;

-	cc = kmalloc(sizeof(*cc), GFP_KERNEL);
+	cc = kmalloc_obj(*cc, GFP_KERNEL);
 	if (!cc)
 		return -ENOMEM;
 	cc->is_khugepaged = false;
diff --git a/mm/kmsan/kmsan_test.c b/mm/kmsan/kmsan_test.c
index 7a7fbaff7350..27cc936176ea 100644
--- a/mm/kmsan/kmsan_test.c
+++ b/mm/kmsan/kmsan_test.c
@@ -168,7 +168,7 @@ static void test_uninit_kmalloc(struct kunit *test)
 	int *ptr;

 	kunit_info(test, "uninitialized kmalloc test (UMR report)\n");
-	ptr = kmalloc(sizeof(*ptr), GFP_KERNEL);
+	ptr = kmalloc_obj(*ptr, GFP_KERNEL);
 	USE(*ptr);
 	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
 }
@@ -182,7 +182,7 @@ static void test_init_kmalloc(struct kunit *test)
 	int *ptr;

 	kunit_info(test, "initialized kmalloc test (no reports)\n");
-	ptr = kmalloc(sizeof(*ptr), GFP_KERNEL);
+	ptr = kmalloc_obj(*ptr, GFP_KERNEL);
 	memset(ptr, 0, sizeof(*ptr));
 	USE(*ptr);
 	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
@@ -195,7 +195,7 @@ static void test_init_kzalloc(struct kunit *test)
 	int *ptr;

 	kunit_info(test, "initialized kzalloc test (no reports)\n");
-	ptr = kzalloc(sizeof(*ptr), GFP_KERNEL);
+	ptr = kzalloc_obj(*ptr, GFP_KERNEL);
 	USE(*ptr);
 	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
 }
@@ -322,7 +322,7 @@ static void test_init_kmsan_vmap_vunmap(struct kunit *test)

 	kunit_info(test, "pages initialized via vmap (no reports)\n");

-	pages = kmalloc_array(npages, sizeof(*pages), GFP_KERNEL);
+	pages = kmalloc_objs(*pages, npages, GFP_KERNEL);
 	for (int i = 0; i < npages; i++)
 		pages[i] = alloc_page(GFP_KERNEL);
 	vbuf = vmap(pages, npages, VM_MAP, PAGE_KERNEL);
diff --git a/mm/kmsan/shadow.c b/mm/kmsan/shadow.c
index 9e1c5f2b7a41..8fde939784a7 100644
--- a/mm/kmsan/shadow.c
+++ b/mm/kmsan/shadow.c
@@ -230,8 +230,8 @@ int kmsan_vmap_pages_range_noflush(unsigned long start, unsigned long end,
 		return 0;

 	nr = (end - start) / PAGE_SIZE;
-	s_pages = kcalloc(nr, sizeof(*s_pages), gfp_mask);
-	o_pages = kcalloc(nr, sizeof(*o_pages), gfp_mask);
+	s_pages = kzalloc_objs(*s_pages, nr, gfp_mask);
+	o_pages = kzalloc_objs(*o_pages, nr, gfp_mask);
 	if (!s_pages || !o_pages) {
 		err = -ENOMEM;
 		goto ret;
diff --git a/mm/ksm.c b/mm/ksm.c
index 2d89a7c8b4eb..85481c3e3f2c 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -3586,8 +3586,8 @@ static ssize_t merge_across_nodes_store(struct kobject *kobj,
 			 * Allocate stable and unstable together:
 			 * MAXSMP NODES_SHIFT 10 will use 16kB.
 			 */
-			buf = kcalloc(nr_node_ids + nr_node_ids, sizeof(*buf),
-				      GFP_KERNEL);
+			buf = kzalloc_objs(*buf, nr_node_ids + nr_node_ids,
+					   GFP_KERNEL);
 			/* Let us assume that RB_ROOT is NULL is zero */
 			if (!buf)
 				err = -ENOMEM;
diff --git a/mm/list_lru.c b/mm/list_lru.c
index 13b9f66d950e..16526b9d71b5 100644
--- a/mm/list_lru.c
+++ b/mm/list_lru.c
@@ -407,7 +407,7 @@ static struct list_lru_memcg *memcg_init_list_lru_one(struct list_lru *lru, gfp_
 	int nid;
 	struct list_lru_memcg *mlru;

-	mlru = kmalloc(struct_size(mlru, node, nr_node_ids), gfp);
+	mlru = kmalloc_flex(*mlru, node, nr_node_ids, gfp);
 	if (!mlru)
 		return NULL;

@@ -585,7 +585,7 @@ int __list_lru_init(struct list_lru *lru, bool memcg_aware, struct shrinker *shr
 		memcg_aware = false;
 #endif

-	lru->node = kcalloc(nr_node_ids, sizeof(*lru->node), GFP_KERNEL);
+	lru->node = kzalloc_objs(*lru->node, nr_node_ids, GFP_KERNEL);
 	if (!lru->node)
 		return -ENOMEM;

diff --git a/mm/madvise.c b/mm/madvise.c
index 8debb2d434aa..30c7a642e7fc 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -91,7 +91,7 @@ struct anon_vma_name *anon_vma_name_alloc(const char *name)

 	/* Add 1 for NUL terminator at the end of the anon_name->name */
 	count = strlen(name) + 1;
-	anon_name = kmalloc(struct_size(anon_name, name, count), GFP_KERNEL);
+	anon_name = kmalloc_flex(*anon_name, name, count, GFP_KERNEL);
 	if (anon_name) {
 		kref_init(&anon_name->kref);
 		memcpy(anon_name->name, name, count);
diff --git a/mm/memcontrol-v1.c b/mm/memcontrol-v1.c
index c6078cd7f7e5..597af8a80163 100644
--- a/mm/memcontrol-v1.c
+++ b/mm/memcontrol-v1.c
@@ -783,7 +783,7 @@ static int __mem_cgroup_usage_register_event(struct mem_cgroup *memcg,
 	size = thresholds->primary ? thresholds->primary->size + 1 : 1;

 	/* Allocate memory for new array of thresholds */
-	new = kmalloc(struct_size(new, entries, size), GFP_KERNEL_ACCOUNT);
+	new = kmalloc_flex(*new, entries, size, GFP_KERNEL_ACCOUNT);
 	if (!new) {
 		ret = -ENOMEM;
 		goto unlock;
@@ -946,7 +946,7 @@ static int mem_cgroup_oom_register_event(struct mem_cgroup *memcg,
 {
 	struct mem_cgroup_eventfd_list *event;

-	event = kmalloc(sizeof(*event),	GFP_KERNEL_ACCOUNT);
+	event = kmalloc_obj(*event, GFP_KERNEL_ACCOUNT);
 	if (!event)
 		return -ENOMEM;

@@ -1109,7 +1109,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,

 	CLASS(fd, cfile)(cfd);

-	event = kzalloc(sizeof(*event), GFP_KERNEL_ACCOUNT);
+	event = kzalloc_obj(*event, GFP_KERNEL_ACCOUNT);
 	if (!event)
 		return -ENOMEM;

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index f2b87e02574e..63773a0b91f7 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -192,7 +192,7 @@ static struct obj_cgroup *obj_cgroup_alloc(void)
 	struct obj_cgroup *objcg;
 	int ret;

-	objcg = kzalloc(sizeof(struct obj_cgroup), GFP_KERNEL);
+	objcg = kzalloc_obj(struct obj_cgroup, GFP_KERNEL);
 	if (!objcg)
 		return NULL;

@@ -3761,8 +3761,7 @@ static struct mem_cgroup *mem_cgroup_alloc(struct mem_cgroup *parent)
 		goto fail;
 	error = -ENOMEM;

-	memcg->vmstats = kzalloc(sizeof(struct memcg_vmstats),
-				 GFP_KERNEL_ACCOUNT);
+	memcg->vmstats = kzalloc_obj(struct memcg_vmstats, GFP_KERNEL_ACCOUNT);
 	if (!memcg->vmstats)
 		goto fail;

diff --git a/mm/memfd_luo.c b/mm/memfd_luo.c
index a34fccc23b6a..c69774c19c88 100644
--- a/mm/memfd_luo.c
+++ b/mm/memfd_luo.c
@@ -112,7 +112,7 @@ static int memfd_luo_preserve_folios(struct file *file,
 	 * up being smaller if there are higher order folios.
 	 */
 	max_folios = PAGE_ALIGN(size) / PAGE_SIZE;
-	folios = kvmalloc_array(max_folios, sizeof(*folios), GFP_KERNEL);
+	folios = kvmalloc_objs(*folios, max_folios, GFP_KERNEL);
 	if (!folios)
 		return -ENOMEM;

diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index ba4231858a36..ee42d4361309 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -387,7 +387,7 @@ static void __add_to_kill(struct task_struct *tsk, const struct page *p,
 {
 	struct to_kill *tk;

-	tk = kmalloc(sizeof(struct to_kill), GFP_ATOMIC);
+	tk = kmalloc_obj(struct to_kill, GFP_ATOMIC);
 	if (!tk) {
 		pr_err("Out of memory while machine check handling\n");
 		return;
@@ -1917,7 +1917,7 @@ static int hugetlb_update_hwpoison(struct folio *folio, struct page *page)
 			return MF_HUGETLB_PAGE_PRE_POISONED;
 	}

-	raw_hwp = kmalloc(sizeof(struct raw_hwp_page), GFP_ATOMIC);
+	raw_hwp = kmalloc_obj(struct raw_hwp_page, GFP_ATOMIC);
 	if (raw_hwp) {
 		raw_hwp->page = page;
 		llist_add(&raw_hwp->node, head);
@@ -2214,7 +2214,7 @@ static void add_to_kill_pgoff(struct task_struct *tsk,
 {
 	struct to_kill *tk;

-	tk = kmalloc(sizeof(*tk), GFP_ATOMIC);
+	tk = kmalloc_obj(*tk, GFP_ATOMIC);
 	if (!tk) {
 		pr_info("Unable to kill proc %d\n", tsk->pid);
 		return;
diff --git a/mm/memory-tiers.c b/mm/memory-tiers.c
index 545e34626df7..b05c916fa5f4 100644
--- a/mm/memory-tiers.c
+++ b/mm/memory-tiers.c
@@ -227,7 +227,7 @@ static struct memory_tier *find_create_memory_tier(struct memory_dev_type *memty
 		}
 	}

-	new_memtier = kzalloc(sizeof(struct memory_tier), GFP_KERNEL);
+	new_memtier = kzalloc_obj(struct memory_tier, GFP_KERNEL);
 	if (!new_memtier)
 		return ERR_PTR(-ENOMEM);

@@ -625,7 +625,7 @@ struct memory_dev_type *alloc_memory_type(int adistance)
 {
 	struct memory_dev_type *memtype;

-	memtype = kmalloc(sizeof(*memtype), GFP_KERNEL);
+	memtype = kmalloc_obj(*memtype, GFP_KERNEL);
 	if (!memtype)
 		return ERR_PTR(-ENOMEM);

@@ -912,8 +912,8 @@ static int __init memory_tier_init(void)
 		panic("%s() failed to register memory tier subsystem\n", __func__);

 #ifdef CONFIG_MIGRATION
-	node_demotion = kcalloc(nr_node_ids, sizeof(struct demotion_nodes),
-				GFP_KERNEL);
+	node_demotion = kzalloc_objs(struct demotion_nodes, nr_node_ids,
+				     GFP_KERNEL);
 	WARN_ON(!node_demotion);
 #endif

diff --git a/mm/memory.c b/mm/memory.c
index 876bf73959c6..144e30d2825f 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3035,7 +3035,7 @@ static inline struct pfnmap_track_ctx *pfnmap_track_ctx_alloc(unsigned long pfn,
 	if (pfnmap_track(pfn, size, prot))
 		return ERR_PTR(-EINVAL);

-	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 	if (unlikely(!ctx)) {
 		pfnmap_untrack(pfn, size);
 		return ERR_PTR(-ENOMEM);
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index dbd48502ac24..0835743f6575 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -229,8 +229,8 @@ int mempolicy_set_node_perf(unsigned int node, struct access_coordinate *coords)
 	if (!new_bw)
 		return -ENOMEM;

-	new_wi_state = kmalloc(struct_size(new_wi_state, iw_table, nr_node_ids),
-			       GFP_KERNEL);
+	new_wi_state = kmalloc_flex(*new_wi_state, iw_table, nr_node_ids,
+				    GFP_KERNEL);
 	if (!new_wi_state) {
 		kfree(new_bw);
 		return -ENOMEM;
@@ -3642,8 +3642,8 @@ static ssize_t node_store(struct kobject *kobj, struct kobj_attribute *attr,
 	    kstrtou8(buf, 0, &weight) || weight == 0)
 		return -EINVAL;

-	new_wi_state = kzalloc(struct_size(new_wi_state, iw_table, nr_node_ids),
-			       GFP_KERNEL);
+	new_wi_state = kzalloc_flex(*new_wi_state, iw_table, nr_node_ids,
+				    GFP_KERNEL);
 	if (!new_wi_state)
 		return -ENOMEM;

@@ -3695,8 +3695,8 @@ static ssize_t weighted_interleave_auto_store(struct kobject *kobj,
 	if (kstrtobool(buf, &input))
 		return -EINVAL;

-	new_wi_state = kzalloc(struct_size(new_wi_state, iw_table, nr_node_ids),
-			       GFP_KERNEL);
+	new_wi_state = kzalloc_flex(*new_wi_state, iw_table, nr_node_ids,
+				    GFP_KERNEL);
 	if (!new_wi_state)
 		return -ENOMEM;
 	for (i = 0; i < nr_node_ids; i++)
@@ -3815,7 +3815,7 @@ static int sysfs_wi_node_add(int nid)
 		return -EINVAL;
 	}

-	new_attr = kzalloc(sizeof(*new_attr), GFP_KERNEL);
+	new_attr = kzalloc_obj(*new_attr, GFP_KERNEL);
 	if (!new_attr)
 		return -ENOMEM;

@@ -3880,8 +3880,7 @@ static int __init add_weighted_interleave_group(struct kobject *mempolicy_kobj)
 {
 	int nid, err;

-	wi_group = kzalloc(struct_size(wi_group, nattrs, nr_node_ids),
-			   GFP_KERNEL);
+	wi_group = kzalloc_flex(*wi_group, nattrs, nr_node_ids, GFP_KERNEL);
 	if (!wi_group)
 		return -ENOMEM;
 	mutex_init(&wi_group->kobj_lock);
diff --git a/mm/mempool.c b/mm/mempool.c
index c290e5261b47..c22c63ccbbcd 100644
--- a/mm/mempool.c
+++ b/mm/mempool.c
@@ -371,8 +371,7 @@ int mempool_resize(struct mempool *pool, int new_min_nr)
 	spin_unlock_irqrestore(&pool->lock, flags);

 	/* Grow the pool */
-	new_elements = kmalloc_array(new_min_nr, sizeof(*new_elements),
-				     GFP_KERNEL);
+	new_elements = kmalloc_objs(*new_elements, new_min_nr, GFP_KERNEL);
 	if (!new_elements)
 		return -ENOMEM;

diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c
index 8e0125dc0522..1aa561a055eb 100644
--- a/mm/mmu_notifier.c
+++ b/mm/mmu_notifier.c
@@ -618,8 +618,8 @@ int __mmu_notifier_register(struct mmu_notifier *subscription,
 		 * know that mm->notifier_subscriptions can't change while we
 		 * hold the write side of the mmap_lock.
 		 */
-		subscriptions = kzalloc(
-			sizeof(struct mmu_notifier_subscriptions), GFP_KERNEL);
+		subscriptions = kzalloc_obj(struct mmu_notifier_subscriptions,
+					    GFP_KERNEL);
 		if (!subscriptions)
 			return -ENOMEM;

diff --git a/mm/page_owner.c b/mm/page_owner.c
index b6a394a130ec..8178e0be557f 100644
--- a/mm/page_owner.c
+++ b/mm/page_owner.c
@@ -181,7 +181,7 @@ static void add_stack_record_to_list(struct stack_record *stack_record,
 		return;

 	set_current_in_page_owner();
-	stack = kmalloc(sizeof(*stack), gfp_nested_mask(gfp_mask));
+	stack = kmalloc_obj(*stack, gfp_nested_mask(gfp_mask));
 	if (!stack) {
 		unset_current_in_page_owner();
 		return;
diff --git a/mm/page_reporting.c b/mm/page_reporting.c
index 8a03effda749..7323284d2f7d 100644
--- a/mm/page_reporting.c
+++ b/mm/page_reporting.c
@@ -322,7 +322,7 @@ static void page_reporting_process(struct work_struct *work)
 	atomic_set(&prdev->state, state);

 	/* allocate scatterlist to store pages being reported on */
-	sgl = kmalloc_array(PAGE_REPORTING_CAPACITY, sizeof(*sgl), GFP_KERNEL);
+	sgl = kmalloc_objs(*sgl, PAGE_REPORTING_CAPACITY, GFP_KERNEL);
 	if (!sgl)
 		goto err_out;

diff --git a/mm/shmem.c b/mm/shmem.c
index d129f4eb5ca9..5f2e8e3d5b75 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -5328,7 +5328,7 @@ int shmem_init_fs_context(struct fs_context *fc)
 {
 	struct shmem_options *ctx;

-	ctx = kzalloc(sizeof(struct shmem_options), GFP_KERNEL);
+	ctx = kzalloc_obj(struct shmem_options, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/mm/shmem_quota.c b/mm/shmem_quota.c
index d1e32ac01407..d0b92d6da50f 100644
--- a/mm/shmem_quota.c
+++ b/mm/shmem_quota.c
@@ -67,7 +67,7 @@ static int shmem_read_file_info(struct super_block *sb, int type)
 	struct quota_info *dqopt = sb_dqopt(sb);
 	struct mem_dqinfo *info = &dqopt->info[type];

-	info->dqi_priv = kzalloc(sizeof(struct rb_root), GFP_NOFS);
+	info->dqi_priv = kzalloc_obj(struct rb_root, GFP_NOFS);
 	if (!info->dqi_priv)
 		return -ENOMEM;

@@ -190,7 +190,7 @@ static int shmem_acquire_dquot(struct dquot *dquot)
 	}

 	/* We don't have entry for this id yet, create it */
-	new_entry = kzalloc(sizeof(struct quota_id), GFP_NOFS);
+	new_entry = kzalloc_obj(struct quota_id, GFP_NOFS);
 	if (!new_entry) {
 		ret = -ENOMEM;
 		goto out_unlock;
diff --git a/mm/shrinker.c b/mm/shrinker.c
index 4a93fd433689..52e7bebe4579 100644
--- a/mm/shrinker.c
+++ b/mm/shrinker.c
@@ -682,7 +682,7 @@ struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...)
 	va_list ap;
 	int err;

-	shrinker = kzalloc(sizeof(struct shrinker), GFP_KERNEL);
+	shrinker = kzalloc_obj(struct shrinker, GFP_KERNEL);
 	if (!shrinker)
 		return NULL;

diff --git a/mm/slub.c b/mm/slub.c
index 865bc050f654..b8e9c0b62435 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -2636,7 +2636,7 @@ bool slab_free_hook(struct kmem_cache *s, void *x, bool init,
 	if (still_accessible) {
 		struct rcu_delayed_free *delayed_free;

-		delayed_free = kmalloc(sizeof(*delayed_free), GFP_NOWAIT);
+		delayed_free = kmalloc_obj(*delayed_free, GFP_NOWAIT);
 		if (delayed_free) {
 			/*
 			 * Let KASAN track our call stack as a "related work
@@ -4928,7 +4928,7 @@ kmem_cache_prefill_sheaf(struct kmem_cache *s, gfp_t gfp, unsigned int size)

 	if (unlikely(size > s->sheaf_capacity)) {

-		sheaf = kzalloc(struct_size(sheaf, objects, size), gfp);
+		sheaf = kzalloc_flex(*sheaf, objects, size, gfp);
 		if (!sheaf)
 			return NULL;

@@ -9139,7 +9139,7 @@ static int show_stat(struct kmem_cache *s, char *buf, enum stat_item si)
 	unsigned long sum  = 0;
 	int cpu;
 	int len = 0;
-	int *data = kmalloc_array(nr_cpu_ids, sizeof(int), GFP_KERNEL);
+	int *data = kmalloc_objs(int, nr_cpu_ids, GFP_KERNEL);

 	if (!data)
 		return -ENOMEM;
@@ -9510,7 +9510,7 @@ int sysfs_slab_alias(struct kmem_cache *s, const char *name)
 		return sysfs_create_link(&slab_kset->kobj, &s->kobj, name);
 	}

-	al = kmalloc(sizeof(struct saved_alias), GFP_KERNEL);
+	al = kmalloc_obj(struct saved_alias, GFP_KERNEL);
 	if (!al)
 		return -ENOMEM;

diff --git a/mm/swapfile.c b/mm/swapfile.c
index c2377c4b6bb9..8a1e2af356ba 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -2575,7 +2575,7 @@ add_swap_extent(struct swap_info_struct *sis, unsigned long start_page,
 	}

 	/* No merge, insert a new extent. */
-	new_se = kmalloc(sizeof(*se), GFP_KERNEL);
+	new_se = kmalloc_obj(*se, GFP_KERNEL);
 	if (new_se == NULL)
 		return -ENOMEM;
 	new_se->start_page = start_page;
@@ -3048,7 +3048,7 @@ static struct swap_info_struct *alloc_swap_info(void)
 	struct swap_info_struct *defer = NULL;
 	unsigned int type;

-	p = kvzalloc(sizeof(struct swap_info_struct), GFP_KERNEL);
+	p = kvzalloc_obj(struct swap_info_struct, GFP_KERNEL);
 	if (!p)
 		return ERR_PTR(-ENOMEM);

@@ -3257,7 +3257,7 @@ static struct swap_cluster_info *setup_clusters(struct swap_info_struct *si,
 	int err = -ENOMEM;
 	unsigned long i;

-	cluster_info = kvcalloc(nr_clusters, sizeof(*cluster_info), GFP_KERNEL);
+	cluster_info = kvzalloc_objs(*cluster_info, nr_clusters, GFP_KERNEL);
 	if (!cluster_info)
 		goto err;

@@ -3265,8 +3265,8 @@ static struct swap_cluster_info *setup_clusters(struct swap_info_struct *si,
 		spin_lock_init(&cluster_info[i].lock);

 	if (!(si->flags & SWP_SOLIDSTATE)) {
-		si->global_cluster = kmalloc(sizeof(*si->global_cluster),
-				     GFP_KERNEL);
+		si->global_cluster = kmalloc_obj(*si->global_cluster,
+						 GFP_KERNEL);
 		if (!si->global_cluster)
 			goto err;
 		for (i = 0; i < SWAP_NR_ORDERS; i++)
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 03e1117480d5..672c56d8bfe1 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -4920,14 +4920,14 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets,
 		return NULL;
 	}

-	vms = kcalloc(nr_vms, sizeof(vms[0]), GFP_KERNEL);
-	vas = kcalloc(nr_vms, sizeof(vas[0]), GFP_KERNEL);
+	vms = kzalloc_objs(vms[0], nr_vms, GFP_KERNEL);
+	vas = kzalloc_objs(vas[0], nr_vms, GFP_KERNEL);
 	if (!vas || !vms)
 		goto err_free2;

 	for (area = 0; area < nr_vms; area++) {
 		vas[area] = kmem_cache_zalloc(vmap_area_cachep, GFP_KERNEL);
-		vms[area] = kzalloc(sizeof(struct vm_struct), GFP_KERNEL);
+		vms[area] = kzalloc_obj(struct vm_struct, GFP_KERNEL);
 		if (!vas[area] || !vms[area])
 			goto err_free;
 	}
@@ -5366,7 +5366,7 @@ static void vmap_init_nodes(void)
 	int n = clamp_t(unsigned int, num_possible_cpus(), 1, 128);

 	if (n > 1) {
-		vn = kmalloc_array(n, sizeof(*vn), GFP_NOWAIT);
+		vn = kmalloc_objs(*vn, n, GFP_NOWAIT);
 		if (vn) {
 			/* Node partition is 16 pages. */
 			vmap_zone_size = (1 << 4) * PAGE_SIZE;
diff --git a/mm/vmpressure.c b/mm/vmpressure.c
index c197ed47bcc4..035e0384e39b 100644
--- a/mm/vmpressure.c
+++ b/mm/vmpressure.c
@@ -402,7 +402,7 @@ int vmpressure_register_event(struct mem_cgroup *memcg,
 		mode = ret;
 	}

-	ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+	ev = kzalloc_obj(*ev, GFP_KERNEL);
 	if (!ev) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 44e4fcd6463c..0fc9373e8251 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -3821,7 +3821,8 @@ static struct lru_gen_mm_walk *set_mm_walk(struct pglist_data *pgdat, bool force
 	} else if (!walk && force_alloc) {
 		VM_WARN_ON_ONCE(current_is_kswapd());

-		walk = kzalloc(sizeof(*walk), __GFP_HIGH | __GFP_NOMEMALLOC | __GFP_NOWARN);
+		walk = kzalloc_obj(*walk,
+				   __GFP_HIGH | __GFP_NOMEMALLOC | __GFP_NOWARN);
 	}

 	current->reclaim_state->mm_walk = walk;
diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
index d5d1c27b3852..fa0b726dcec7 100644
--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -2062,7 +2062,7 @@ struct zs_pool *zs_create_pool(const char *name)
 	struct zs_pool *pool;
 	struct size_class *prev_class = NULL;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;

@@ -2128,7 +2128,7 @@ struct zs_pool *zs_create_pool(const char *name)
 			}
 		}

-		class = kzalloc(sizeof(struct size_class), GFP_KERNEL);
+		class = kzalloc_obj(struct size_class, GFP_KERNEL);
 		if (!class)
 			goto err;

diff --git a/mm/zswap.c b/mm/zswap.c
index af3f0fbb0558..bbfd8a51e4c8 100644
--- a/mm/zswap.c
+++ b/mm/zswap.c
@@ -251,7 +251,7 @@ static struct zswap_pool *zswap_pool_create(char *compressor)
 	if (!zswap_has_pool && !strcmp(compressor, ZSWAP_PARAM_UNSET))
 		return NULL;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;

@@ -1665,7 +1665,7 @@ int zswap_swapon(int type, unsigned long nr_pages)
 	unsigned int nr, i;

 	nr = DIV_ROUND_UP(nr_pages, ZSWAP_ADDRESS_SPACE_PAGES);
-	trees = kvcalloc(nr, sizeof(*tree), GFP_KERNEL);
+	trees = kvzalloc_objs(*tree, nr, GFP_KERNEL);
 	if (!trees) {
 		pr_err("alloc failed, zswap disabled for swap type %d\n", type);
 		return -ENOMEM;
diff --git a/net/802/garp.c b/net/802/garp.c
index 2d1ffc4d9462..ceeb5f5fac02 100644
--- a/net/802/garp.c
+++ b/net/802/garp.c
@@ -547,7 +547,7 @@ static int garp_init_port(struct net_device *dev)
 {
 	struct garp_port *port;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;
 	rcu_assign_pointer(dev->garp_port, port);
@@ -581,7 +581,7 @@ int garp_init_applicant(struct net_device *dev, struct garp_application *appl)
 	}

 	err = -ENOMEM;
-	app = kzalloc(sizeof(*app), GFP_KERNEL);
+	app = kzalloc_obj(*app, GFP_KERNEL);
 	if (!app)
 		goto err2;

diff --git a/net/802/mrp.c b/net/802/mrp.c
index 23a88305f900..f65c95d43a4e 100644
--- a/net/802/mrp.c
+++ b/net/802/mrp.c
@@ -832,7 +832,7 @@ static int mrp_init_port(struct net_device *dev)
 {
 	struct mrp_port *port;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;
 	rcu_assign_pointer(dev->mrp_port, port);
@@ -866,7 +866,7 @@ int mrp_init_applicant(struct net_device *dev, struct mrp_application *appl)
 	}

 	err = -ENOMEM;
-	app = kzalloc(sizeof(*app), GFP_KERNEL);
+	app = kzalloc_obj(*app, GFP_KERNEL);
 	if (!app)
 		goto err2;

diff --git a/net/802/psnap.c b/net/802/psnap.c
index 389df460c8c4..8ae835e1cbae 100644
--- a/net/802/psnap.c
+++ b/net/802/psnap.c
@@ -132,7 +132,7 @@ struct datalink_proto *register_snap_client(const unsigned char *desc,
 	if (find_snap_client(desc))
 		goto out;

-	proto = kmalloc(sizeof(*proto), GFP_ATOMIC);
+	proto = kmalloc_obj(*proto, GFP_ATOMIC);
 	if (proto) {
 		memcpy(proto->type, desc, 5);
 		proto->rcvfunc		= rcvfunc;
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
index 9404dd551dfd..d7849667ddf0 100644
--- a/net/8021q/vlan_core.c
+++ b/net/8021q/vlan_core.c
@@ -150,7 +150,7 @@ static struct vlan_info *vlan_info_alloc(struct net_device *dev)
 {
 	struct vlan_info *vlan_info;

-	vlan_info = kzalloc(sizeof(struct vlan_info), GFP_KERNEL);
+	vlan_info = kzalloc_obj(struct vlan_info, GFP_KERNEL);
 	if (!vlan_info)
 		return NULL;

@@ -193,7 +193,7 @@ static struct vlan_vid_info *vlan_vid_info_alloc(__be16 proto, u16 vid)
 {
 	struct vlan_vid_info *vid_info;

-	vid_info = kzalloc(sizeof(struct vlan_vid_info), GFP_KERNEL);
+	vid_info = kzalloc_obj(struct vlan_vid_info, GFP_KERNEL);
 	if (!vid_info)
 		return NULL;
 	vid_info->proto = proto;
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index fbf296137b09..176912c62915 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -192,7 +192,7 @@ int vlan_dev_set_egress_priority(const struct net_device *dev,

 	/* Create a new mapping then. */
 	mp = vlan->egress_priority_map[skb_prio & 0xF];
-	np = kmalloc(sizeof(struct vlan_priority_tci_mapping), GFP_KERNEL);
+	np = kmalloc_obj(struct vlan_priority_tci_mapping, GFP_KERNEL);
 	if (!np)
 		return -ENOBUFS;

@@ -708,7 +708,7 @@ static int vlan_dev_netpoll_setup(struct net_device *dev)
 	struct netpoll *netpoll;
 	int err = 0;

-	netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
+	netpoll = kzalloc_obj(*netpoll, GFP_KERNEL);
 	err = -ENOMEM;
 	if (!netpoll)
 		goto out;
diff --git a/net/9p/client.c b/net/9p/client.c
index 1b475525ac5b..3e8de85c7f7f 100644
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -730,7 +730,7 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)
 	struct p9_fid *fid;

 	p9_debug(P9_DEBUG_FID, "clnt %p\n", clnt);
-	fid = kzalloc(sizeof(*fid), GFP_KERNEL);
+	fid = kzalloc_obj(*fid, GFP_KERNEL);
 	if (!fid)
 		return NULL;

@@ -859,7 +859,7 @@ struct p9_client *p9_client_create(struct fs_context *fc)
 	char *client_id;
 	char *cache_name;

-	clnt = kmalloc(sizeof(*clnt), GFP_KERNEL);
+	clnt = kmalloc_obj(*clnt, GFP_KERNEL);
 	if (!clnt)
 		return ERR_PTR(-ENOMEM);

@@ -1615,7 +1615,7 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid)

 	p9_debug(P9_DEBUG_9P, ">>> TSTAT fid %d\n", fid->fid);

-	ret = kmalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kmalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return ERR_PTR(-ENOMEM);

@@ -1667,7 +1667,7 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid,
 	p9_debug(P9_DEBUG_9P, ">>> TGETATTR fid %d, request_mask %lld\n",
 		 fid->fid, request_mask);

-	ret = kmalloc(sizeof(*ret), GFP_KERNEL);
+	ret = kmalloc_obj(*ret, GFP_KERNEL);
 	if (!ret)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/9p/protocol.c b/net/9p/protocol.c
index 0e6603b1ec90..67b0586d807f 100644
--- a/net/9p/protocol.c
+++ b/net/9p/protocol.c
@@ -451,9 +451,8 @@ p9pdu_vreadf(struct p9_fcall *pdu, int proto_version, const char *fmt,
 				    p9pdu_readf(pdu, proto_version, "w", nwqid);
 				if (!errcode) {
 					*wqids =
-					    kmalloc_array(*nwqid,
-							  sizeof(struct p9_qid),
-							  GFP_NOFS);
+					    kmalloc_objs(struct p9_qid, *nwqid,
+							 GFP_NOFS);
 					if (*wqids == NULL)
 						errcode = -ENOMEM;
 				}
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c
index 0e331c1b2112..4e0f4a382ac4 100644
--- a/net/9p/trans_fd.c
+++ b/net/9p/trans_fd.c
@@ -719,8 +719,7 @@ static int p9_fd_show_options(struct seq_file *m, struct p9_client *clnt)

 static int p9_fd_open(struct p9_client *client, int rfd, int wfd)
 {
-	struct p9_trans_fd *ts = kzalloc(sizeof(struct p9_trans_fd),
-					   GFP_KERNEL);
+	struct p9_trans_fd *ts = kzalloc_obj(struct p9_trans_fd, GFP_KERNEL);
 	if (!ts)
 		return -ENOMEM;

@@ -764,7 +763,7 @@ static int p9_socket_open(struct p9_client *client, struct socket *csocket)
 	struct p9_trans_fd *p;
 	struct file *file;

-	p = kzalloc(sizeof(struct p9_trans_fd), GFP_KERNEL);
+	p = kzalloc_obj(struct p9_trans_fd, GFP_KERNEL);
 	if (!p) {
 		sock_release(csocket);
 		return -ENOMEM;
diff --git a/net/9p/trans_rdma.c b/net/9p/trans_rdma.c
index 4d406479f83b..c8e27c08a3a2 100644
--- a/net/9p/trans_rdma.c
+++ b/net/9p/trans_rdma.c
@@ -334,7 +334,7 @@ static int rdma_request(struct p9_client *client, struct p9_req_t *req)
 	}

 	/* Allocate an fcall for the reply */
-	rpl_context = kmalloc(sizeof *rpl_context, GFP_NOFS);
+	rpl_context = kmalloc_obj(*rpl_context, GFP_NOFS);
 	if (!rpl_context) {
 		err = -ENOMEM;
 		goto recv_error;
@@ -363,7 +363,7 @@ static int rdma_request(struct p9_client *client, struct p9_req_t *req)

 dont_need_post_recv:
 	/* Post the request */
-	c = kmalloc(sizeof *c, GFP_NOFS);
+	c = kmalloc_obj(*c, GFP_NOFS);
 	if (!c) {
 		err = -ENOMEM;
 		goto send_error;
@@ -460,7 +460,7 @@ static struct p9_trans_rdma *alloc_rdma(struct p9_rdma_opts *opts)
 {
 	struct p9_trans_rdma *rdma;

-	rdma = kzalloc(sizeof(struct p9_trans_rdma), GFP_KERNEL);
+	rdma = kzalloc_obj(struct p9_trans_rdma, GFP_KERNEL);
 	if (!rdma)
 		return NULL;

diff --git a/net/9p/trans_usbg.c b/net/9p/trans_usbg.c
index 93547637deae..e167f9f23d65 100644
--- a/net/9p/trans_usbg.c
+++ b/net/9p/trans_usbg.c
@@ -757,7 +757,7 @@ static struct usb_function *usb9pfs_alloc(struct usb_function_instance *fi)
 	struct f_usb9pfs_opts *usb9pfs_opts;
 	struct f_usb9pfs *usb9pfs;

-	usb9pfs = kzalloc(sizeof(*usb9pfs), GFP_KERNEL);
+	usb9pfs = kzalloc_obj(*usb9pfs, GFP_KERNEL);
 	if (!usb9pfs)
 		return ERR_PTR(-ENOMEM);

@@ -910,7 +910,7 @@ static struct usb_function_instance *usb9pfs_alloc_instance(void)
 	struct f_usb9pfs_opts *usb9pfs_opts;
 	struct f_usb9pfs_dev *dev;

-	usb9pfs_opts = kzalloc(sizeof(*usb9pfs_opts), GFP_KERNEL);
+	usb9pfs_opts = kzalloc_obj(*usb9pfs_opts, GFP_KERNEL);
 	if (!usb9pfs_opts)
 		return ERR_PTR(-ENOMEM);

@@ -921,7 +921,7 @@ static struct usb_function_instance *usb9pfs_alloc_instance(void)

 	usb9pfs_opts->buflen = DEFAULT_BUFLEN;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		kfree(usb9pfs_opts);
 		return ERR_PTR(-ENOMEM);
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
index 370f4f37dcec..0577bdcb67bf 100644
--- a/net/9p/trans_virtio.c
+++ b/net/9p/trans_virtio.c
@@ -358,8 +358,7 @@ static int p9_get_mapped_pages(struct virtio_chan *chan,
 		nr_pages = DIV_ROUND_UP((unsigned long)p + len, PAGE_SIZE) -
 			   (unsigned long)p / PAGE_SIZE;

-		*pages = kmalloc_array(nr_pages, sizeof(struct page *),
-				       GFP_NOFS);
+		*pages = kmalloc_objs(struct page *, nr_pages, GFP_NOFS);
 		if (!*pages)
 			return -ENOMEM;

@@ -602,7 +601,7 @@ static int p9_virtio_probe(struct virtio_device *vdev)
 		return -EINVAL;
 	}

-	chan = kmalloc(sizeof(struct virtio_chan), GFP_KERNEL);
+	chan = kmalloc_obj(struct virtio_chan, GFP_KERNEL);
 	if (!chan) {
 		pr_err("Failed to allocate virtio 9P channel\n");
 		err = -ENOMEM;
@@ -642,7 +641,7 @@ static int p9_virtio_probe(struct virtio_device *vdev)
 	if (err) {
 		goto out_free_tag;
 	}
-	chan->vc_wq = kmalloc(sizeof(wait_queue_head_t), GFP_KERNEL);
+	chan->vc_wq = kmalloc_obj(wait_queue_head_t, GFP_KERNEL);
 	if (!chan->vc_wq) {
 		err = -ENOMEM;
 		goto out_remove_file;
diff --git a/net/9p/trans_xen.c b/net/9p/trans_xen.c
index dde9cbf1426c..fd6ac8658549 100644
--- a/net/9p/trans_xen.c
+++ b/net/9p/trans_xen.c
@@ -417,12 +417,11 @@ static int xen_9pfs_front_init(struct xenbus_device *dev)
 	if (p9_xen_trans.maxsize > XEN_FLEX_RING_SIZE(max_ring_order))
 		p9_xen_trans.maxsize = XEN_FLEX_RING_SIZE(max_ring_order) / 2;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
 	priv->dev = dev;
-	priv->rings = kcalloc(XEN_9PFS_NUM_RINGS, sizeof(*priv->rings),
-			      GFP_KERNEL);
+	priv->rings = kzalloc_objs(*priv->rings, XEN_9PFS_NUM_RINGS, GFP_KERNEL);
 	if (!priv->rings) {
 		kfree(priv);
 		return -ENOMEM;
diff --git a/net/appletalk/aarp.c b/net/appletalk/aarp.c
index 4744e3fd4544..e7315c01a299 100644
--- a/net/appletalk/aarp.c
+++ b/net/appletalk/aarp.c
@@ -393,7 +393,7 @@ static void aarp_purge(void)
  */
 static struct aarp_entry *aarp_alloc(void)
 {
-	struct aarp_entry *a = kmalloc(sizeof(*a), GFP_ATOMIC);
+	struct aarp_entry *a = kmalloc_obj(*a, GFP_ATOMIC);
 	if (!a)
 		return NULL;

diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
index 2a01fff46c9d..53c613e36245 100644
--- a/net/appletalk/ddp.c
+++ b/net/appletalk/ddp.c
@@ -233,7 +233,7 @@ static void atif_drop_device(struct net_device *dev)
 static struct atalk_iface *atif_add_device(struct net_device *dev,
 					   struct atalk_addr *sa)
 {
-	struct atalk_iface *iface = kzalloc(sizeof(*iface), GFP_KERNEL);
+	struct atalk_iface *iface = kzalloc_obj(*iface, GFP_KERNEL);

 	if (!iface)
 		goto out;
@@ -564,7 +564,7 @@ static int atrtr_create(struct rtentry *r, struct net_device *devhint)
 	}

 	if (!rt) {
-		rt = kzalloc(sizeof(*rt), GFP_ATOMIC);
+		rt = kzalloc_obj(*rt, GFP_ATOMIC);

 		retval = -ENOBUFS;
 		if (!rt)
diff --git a/net/atm/addr.c b/net/atm/addr.c
index 0530b63f509a..938f360ae230 100644
--- a/net/atm/addr.c
+++ b/net/atm/addr.c
@@ -87,7 +87,7 @@ int atm_add_addr(struct atm_dev *dev, const struct sockaddr_atmsvc *addr,
 			return -EEXIST;
 		}
 	}
-	this = kmalloc(sizeof(struct atm_dev_addr), GFP_ATOMIC);
+	this = kmalloc_obj(struct atm_dev_addr, GFP_ATOMIC);
 	if (!this) {
 		spin_unlock_irqrestore(&dev->lock, flags);
 		return -ENOMEM;
diff --git a/net/atm/br2684.c b/net/atm/br2684.c
index f666f2f98ba5..8fdc25271708 100644
--- a/net/atm/br2684.c
+++ b/net/atm/br2684.c
@@ -538,7 +538,7 @@ static int br2684_regvcc(struct atm_vcc *atmvcc, void __user * arg)

 	if (copy_from_user(&be, arg, sizeof be))
 		return -EFAULT;
-	brvcc = kzalloc(sizeof(struct br2684_vcc), GFP_KERNEL);
+	brvcc = kzalloc_obj(struct br2684_vcc, GFP_KERNEL);
 	if (!brvcc)
 		return -ENOMEM;
 	/*
diff --git a/net/atm/clip.c b/net/atm/clip.c
index 8f152e5fa659..40553fcab389 100644
--- a/net/atm/clip.c
+++ b/net/atm/clip.c
@@ -431,7 +431,7 @@ static int clip_mkip(struct atm_vcc *vcc, int timeout)
 		return -EBADFD;
 	if (vcc->user_back)
 		return -EINVAL;
-	clip_vcc = kmalloc(sizeof(struct clip_vcc), GFP_KERNEL);
+	clip_vcc = kmalloc_obj(struct clip_vcc, GFP_KERNEL);
 	if (!clip_vcc)
 		return -ENOMEM;
 	pr_debug("%p vcc %p\n", clip_vcc, vcc);
diff --git a/net/atm/lec.c b/net/atm/lec.c
index afb8d3eb2185..cba26158c4ad 100644
--- a/net/atm/lec.c
+++ b/net/atm/lec.c
@@ -696,7 +696,7 @@ static int lec_vcc_attach(struct atm_vcc *vcc, void __user *arg)
 	ioc_data.dev_num = array_index_nospec(ioc_data.dev_num, MAX_LEC_ITF);
 	if (!dev_lec[ioc_data.dev_num])
 		return -EINVAL;
-	vpriv = kmalloc(sizeof(struct lec_vcc_priv), GFP_KERNEL);
+	vpriv = kmalloc_obj(struct lec_vcc_priv, GFP_KERNEL);
 	if (!vpriv)
 		return -ENOMEM;
 	vpriv->xoff = 0;
@@ -1541,7 +1541,7 @@ static struct lec_arp_table *make_entry(struct lec_priv *priv,
 {
 	struct lec_arp_table *to_return;

-	to_return = kzalloc(sizeof(struct lec_arp_table), GFP_ATOMIC);
+	to_return = kzalloc_obj(struct lec_arp_table, GFP_ATOMIC);
 	if (!to_return)
 		return NULL;
 	ether_addr_copy(to_return->mac_addr, mac_addr);
@@ -2125,7 +2125,7 @@ static int lec_mcast_make(struct lec_priv *priv, struct atm_vcc *vcc)
 	struct lec_vcc_priv *vpriv;
 	int err = 0;

-	vpriv = kmalloc(sizeof(struct lec_vcc_priv), GFP_KERNEL);
+	vpriv = kmalloc_obj(struct lec_vcc_priv, GFP_KERNEL);
 	if (!vpriv)
 		return -ENOMEM;
 	vpriv->xoff = 0;
diff --git a/net/atm/mpc.c b/net/atm/mpc.c
index f6b447bba329..3e2b13734fc4 100644
--- a/net/atm/mpc.c
+++ b/net/atm/mpc.c
@@ -184,7 +184,7 @@ struct atm_mpoa_qos *atm_mpoa_add_qos(__be32 dst_ip, struct atm_qos *qos)
 		return entry;
 	}

-	entry = kmalloc(sizeof(struct atm_mpoa_qos), GFP_KERNEL);
+	entry = kmalloc_obj(struct atm_mpoa_qos, GFP_KERNEL);
 	if (entry == NULL) {
 		pr_info("mpoa: out of memory\n");
 		return entry;
@@ -282,7 +282,7 @@ static struct mpoa_client *alloc_mpc(void)
 {
 	struct mpoa_client *mpc;

-	mpc = kzalloc(sizeof(struct mpoa_client), GFP_KERNEL);
+	mpc = kzalloc_obj(struct mpoa_client, GFP_KERNEL);
 	if (mpc == NULL)
 		return NULL;
 	rwlock_init(&mpc->ingress_lock);
diff --git a/net/atm/mpoa_caches.c b/net/atm/mpoa_caches.c
index f7a2f0e41105..b584ab72ed2f 100644
--- a/net/atm/mpoa_caches.c
+++ b/net/atm/mpoa_caches.c
@@ -97,7 +97,7 @@ static in_cache_entry *in_cache_get_by_vcc(struct atm_vcc *vcc,
 static in_cache_entry *in_cache_add_entry(__be32 dst_ip,
 					  struct mpoa_client *client)
 {
-	in_cache_entry *entry = kzalloc(sizeof(in_cache_entry), GFP_KERNEL);
+	in_cache_entry *entry = kzalloc_obj(in_cache_entry, GFP_KERNEL);

 	if (entry == NULL) {
 		pr_info("mpoa: mpoa_caches.c: new_in_cache_entry: out of memory\n");
@@ -456,7 +456,7 @@ static void eg_cache_remove_entry(eg_cache_entry *entry,
 static eg_cache_entry *eg_cache_add_entry(struct k_message *msg,
 					  struct mpoa_client *client)
 {
-	eg_cache_entry *entry = kzalloc(sizeof(eg_cache_entry), GFP_KERNEL);
+	eg_cache_entry *entry = kzalloc_obj(eg_cache_entry, GFP_KERNEL);

 	if (entry == NULL) {
 		pr_info("out of memory\n");
diff --git a/net/atm/pppoatm.c b/net/atm/pppoatm.c
index 3e4f17d335fe..133b0cda7063 100644
--- a/net/atm/pppoatm.c
+++ b/net/atm/pppoatm.c
@@ -397,7 +397,7 @@ static int pppoatm_assign_vcc(struct atm_vcc *atmvcc, void __user *arg)
 	if (be.encaps != PPPOATM_ENCAPS_AUTODETECT &&
 	    be.encaps != PPPOATM_ENCAPS_VC && be.encaps != PPPOATM_ENCAPS_LLC)
 		return -EINVAL;
-	pvcc = kzalloc(sizeof(*pvcc), GFP_KERNEL);
+	pvcc = kzalloc_obj(*pvcc, GFP_KERNEL);
 	if (pvcc == NULL)
 		return -ENOMEM;
 	pvcc->atmvcc = atmvcc;
diff --git a/net/atm/resources.c b/net/atm/resources.c
index 7c6fdedbcf4e..9849521feaf3 100644
--- a/net/atm/resources.c
+++ b/net/atm/resources.c
@@ -36,7 +36,7 @@ static struct atm_dev *__alloc_atm_dev(const char *type)
 {
 	struct atm_dev *dev;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;
 	dev->type = type;
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
index 7ebbff2f0020..855ae9df824d 100644
--- a/net/ax25/af_ax25.c
+++ b/net/ax25/af_ax25.c
@@ -528,7 +528,7 @@ ax25_cb *ax25_create_cb(void)
 {
 	ax25_cb *ax25;

-	if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
+	if ((ax25 = kzalloc_obj(*ax25, GFP_ATOMIC)) == NULL)
 		return NULL;

 	refcount_set(&ax25->refcount, 1);
@@ -1249,7 +1249,7 @@ static int __must_check ax25_connect(struct socket *sock,
 			goto out_release;
 		}

-		if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
+		if ((digi = kmalloc_obj(ax25_digi, GFP_KERNEL)) == NULL) {
 			err = -ENOBUFS;
 			goto out_release;
 		}
diff --git a/net/ax25/ax25_dev.c b/net/ax25/ax25_dev.c
index c504ed9c3a88..56f605ddd88d 100644
--- a/net/ax25/ax25_dev.c
+++ b/net/ax25/ax25_dev.c
@@ -54,7 +54,7 @@ void ax25_dev_device_up(struct net_device *dev)
 {
 	ax25_dev *ax25_dev;

-	ax25_dev = kzalloc(sizeof(*ax25_dev), GFP_KERNEL);
+	ax25_dev = kzalloc_obj(*ax25_dev, GFP_KERNEL);
 	if (!ax25_dev) {
 		printk(KERN_ERR "AX.25: ax25_dev_device_up - out of memory\n");
 		return;
diff --git a/net/ax25/ax25_iface.c b/net/ax25/ax25_iface.c
index 979bc4b828a0..3ad454416a5c 100644
--- a/net/ax25/ax25_iface.c
+++ b/net/ax25/ax25_iface.c
@@ -105,7 +105,7 @@ int ax25_listen_register(const ax25_address *callsign, struct net_device *dev)
 	if (ax25_listen_mine(callsign, dev))
 		return 0;

-	if ((listen = kmalloc(sizeof(*listen), GFP_ATOMIC)) == NULL)
+	if ((listen = kmalloc_obj(*listen, GFP_ATOMIC)) == NULL)
 		return -ENOMEM;

 	listen->callsign = *callsign;
diff --git a/net/ax25/ax25_in.c b/net/ax25/ax25_in.c
index f2d66af86359..d75b3e9ed93d 100644
--- a/net/ax25/ax25_in.c
+++ b/net/ax25/ax25_in.c
@@ -377,7 +377,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
 	 *	Sort out any digipeated paths.
 	 */
 	if (dp.ndigi && !ax25->digipeat &&
-	    (ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
+	    (ax25->digipeat = kmalloc_obj(ax25_digi, GFP_ATOMIC)) == NULL) {
 		kfree_skb(skb);
 		ax25_destroy_socket(ax25);
 		if (sk)
diff --git a/net/ax25/ax25_route.c b/net/ax25/ax25_route.c
index 10577434f40b..1d5c59ccf142 100644
--- a/net/ax25/ax25_route.c
+++ b/net/ax25/ax25_route.c
@@ -91,7 +91,7 @@ static int __must_check ax25_rt_add(struct ax25_routes_struct *route)
 			kfree(ax25_rt->digipeat);
 			ax25_rt->digipeat = NULL;
 			if (route->digi_count != 0) {
-				if ((ax25_rt->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
+				if ((ax25_rt->digipeat = kmalloc_obj(ax25_digi, GFP_ATOMIC)) == NULL) {
 					write_unlock_bh(&ax25_route_lock);
 					ax25_dev_put(ax25_dev);
 					return -ENOMEM;
@@ -110,7 +110,7 @@ static int __must_check ax25_rt_add(struct ax25_routes_struct *route)
 		ax25_rt = ax25_rt->next;
 	}

-	if ((ax25_rt = kmalloc(sizeof(ax25_route), GFP_ATOMIC)) == NULL) {
+	if ((ax25_rt = kmalloc_obj(ax25_route, GFP_ATOMIC)) == NULL) {
 		write_unlock_bh(&ax25_route_lock);
 		ax25_dev_put(ax25_dev);
 		return -ENOMEM;
@@ -121,7 +121,7 @@ static int __must_check ax25_rt_add(struct ax25_routes_struct *route)
 	ax25_rt->digipeat     = NULL;
 	ax25_rt->ip_mode      = ' ';
 	if (route->digi_count != 0) {
-		if ((ax25_rt->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
+		if ((ax25_rt->digipeat = kmalloc_obj(ax25_digi, GFP_ATOMIC)) == NULL) {
 			write_unlock_bh(&ax25_route_lock);
 			kfree(ax25_rt);
 			ax25_dev_put(ax25_dev);
diff --git a/net/ax25/ax25_uid.c b/net/ax25/ax25_uid.c
index 241e4680ecb1..95c5915f1ab9 100644
--- a/net/ax25/ax25_uid.c
+++ b/net/ax25/ax25_uid.c
@@ -101,7 +101,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
 		}
 		if (sax->sax25_uid == 0)
 			return -EINVAL;
-		if ((ax25_uid = kmalloc(sizeof(*ax25_uid), GFP_KERNEL)) == NULL)
+		if ((ax25_uid = kmalloc_obj(*ax25_uid, GFP_KERNEL)) == NULL)
 			return -ENOMEM;

 		refcount_set(&ax25_uid->refcount, 1);
diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c
index cb16c1ed2a58..2ce4e5bf9292 100644
--- a/net/batman-adv/bat_v_elp.c
+++ b/net/batman-adv/bat_v_elp.c
@@ -355,7 +355,7 @@ static void batadv_v_elp_periodic_work(struct work_struct *work)
 		 * context. Therefore add it to metric_queue and process it
 		 * outside rcu protected context.
 		 */
-		metric_entry = kzalloc(sizeof(*metric_entry), GFP_ATOMIC);
+		metric_entry = kzalloc_obj(*metric_entry, GFP_ATOMIC);
 		if (!metric_entry) {
 			batadv_hardif_neigh_put(hardif_neigh);
 			continue;
diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
index 3dc791c15bf7..49ae92b9a152 100644
--- a/net/batman-adv/bridge_loop_avoidance.c
+++ b/net/batman-adv/bridge_loop_avoidance.c
@@ -505,7 +505,7 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, const u8 *orig,
 		   "%s(): not found (%pM, %d), creating new entry\n", __func__,
 		   orig, batadv_print_vid(vid));

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return NULL;

@@ -699,7 +699,7 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv,

 	/* create a new claim entry if it does not exist yet. */
 	if (!claim) {
-		claim = kzalloc(sizeof(*claim), GFP_ATOMIC);
+		claim = kzalloc_obj(*claim, GFP_ATOMIC);
 		if (!claim)
 			return;

diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c
index 8b8132eb0a79..3efc4cf50b46 100644
--- a/net/batman-adv/distributed-arp-table.c
+++ b/net/batman-adv/distributed-arp-table.c
@@ -381,7 +381,7 @@ static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip,
 		goto out;
 	}

-	dat_entry = kmalloc(sizeof(*dat_entry), GFP_ATOMIC);
+	dat_entry = kmalloc_obj(*dat_entry, GFP_ATOMIC);
 	if (!dat_entry)
 		goto out;

@@ -635,8 +635,7 @@ batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst,
 	if (!bat_priv->orig_hash)
 		return NULL;

-	res = kmalloc_array(BATADV_DAT_CANDIDATES_NUM, sizeof(*res),
-			    GFP_ATOMIC);
+	res = kmalloc_objs(*res, BATADV_DAT_CANDIDATES_NUM, GFP_ATOMIC);
 	if (!res)
 		return NULL;

diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
index cc14bc41381e..f4e45cc25816 100644
--- a/net/batman-adv/fragmentation.c
+++ b/net/batman-adv/fragmentation.c
@@ -156,7 +156,7 @@ static bool batadv_frag_insert_packet(struct batadv_orig_node *orig_node,
 	seqno = ntohs(frag_packet->seqno);
 	bucket = seqno % BATADV_FRAG_BUFFER_COUNT;

-	frag_entry_new = kmalloc(sizeof(*frag_entry_new), GFP_ATOMIC);
+	frag_entry_new = kmalloc_obj(*frag_entry_new, GFP_ATOMIC);
 	if (!frag_entry_new)
 		goto err;

diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
index 7a11b245e9f4..51e9c081a2a4 100644
--- a/net/batman-adv/gateway_client.c
+++ b/net/batman-adv/gateway_client.c
@@ -332,7 +332,7 @@ static void batadv_gw_node_add(struct batadv_priv *bat_priv,
 	if (gateway->bandwidth_down == 0)
 		return;

-	gw_node = kzalloc(sizeof(*gw_node), GFP_ATOMIC);
+	gw_node = kzalloc_obj(*gw_node, GFP_ATOMIC);
 	if (!gw_node)
 		return;

diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index 5113f879736b..7b7640f3ffe2 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -871,7 +871,7 @@ batadv_hardif_add_interface(struct net_device *net_dev)
 	if (!batadv_is_valid_iface(net_dev))
 		return NULL;

-	hard_iface = kzalloc(sizeof(*hard_iface), GFP_ATOMIC);
+	hard_iface = kzalloc_obj(*hard_iface, GFP_ATOMIC);
 	if (!hard_iface)
 		return NULL;

diff --git a/net/batman-adv/hash.c b/net/batman-adv/hash.c
index 8016e619787f..759fa29176db 100644
--- a/net/batman-adv/hash.c
+++ b/net/batman-adv/hash.c
@@ -45,16 +45,15 @@ struct batadv_hashtable *batadv_hash_new(u32 size)
 {
 	struct batadv_hashtable *hash;

-	hash = kmalloc(sizeof(*hash), GFP_ATOMIC);
+	hash = kmalloc_obj(*hash, GFP_ATOMIC);
 	if (!hash)
 		return NULL;

-	hash->table = kmalloc_array(size, sizeof(*hash->table), GFP_ATOMIC);
+	hash->table = kmalloc_objs(*hash->table, size, GFP_ATOMIC);
 	if (!hash->table)
 		goto free_hash;

-	hash->list_locks = kmalloc_array(size, sizeof(*hash->list_locks),
-					 GFP_ATOMIC);
+	hash->list_locks = kmalloc_objs(*hash->list_locks, size, GFP_ATOMIC);
 	if (!hash->list_locks)
 		goto free_table;

diff --git a/net/batman-adv/mesh-interface.c b/net/batman-adv/mesh-interface.c
index df7e95811ef5..56ca1c1b83f2 100644
--- a/net/batman-adv/mesh-interface.c
+++ b/net/batman-adv/mesh-interface.c
@@ -555,7 +555,7 @@ int batadv_meshif_create_vlan(struct batadv_priv *bat_priv, unsigned short vid)
 		return -EEXIST;
 	}

-	vlan = kzalloc(sizeof(*vlan), GFP_ATOMIC);
+	vlan = kzalloc_obj(*vlan, GFP_ATOMIC);
 	if (!vlan) {
 		spin_unlock_bh(&bat_priv->meshif_vlan_list_lock);
 		return -ENOMEM;
diff --git a/net/batman-adv/multicast.c b/net/batman-adv/multicast.c
index e8c6b0bf670f..a3d3efe22d30 100644
--- a/net/batman-adv/multicast.c
+++ b/net/batman-adv/multicast.c
@@ -399,7 +399,7 @@ batadv_mcast_mla_meshif_get_ipv4(struct net_device *dev,
 		if (batadv_mcast_mla_is_duplicate(mcast_addr, mcast_list))
 			continue;

-		new = kmalloc(sizeof(*new), GFP_ATOMIC);
+		new = kmalloc_obj(*new, GFP_ATOMIC);
 		if (!new) {
 			ret = -ENOMEM;
 			break;
@@ -472,7 +472,7 @@ batadv_mcast_mla_meshif_get_ipv6(struct net_device *dev,
 		if (batadv_mcast_mla_is_duplicate(mcast_addr, mcast_list))
 			continue;

-		new = kmalloc(sizeof(*new), GFP_ATOMIC);
+		new = kmalloc_obj(*new, GFP_ATOMIC);
 		if (!new) {
 			ret = -ENOMEM;
 			break;
@@ -632,7 +632,7 @@ static int batadv_mcast_mla_bridge_get(struct net_device *dev,
 		if (batadv_mcast_mla_is_duplicate(mcast_addr, mcast_list))
 			continue;

-		new = kmalloc(sizeof(*new), GFP_ATOMIC);
+		new = kmalloc_obj(*new, GFP_ATOMIC);
 		if (!new) {
 			ret = -ENOMEM;
 			break;
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index a662408ad867..b3468ccab535 100644
--- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -179,7 +179,7 @@ batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node,
 	if (vlan)
 		goto out;

-	vlan = kzalloc(sizeof(*vlan), GFP_ATOMIC);
+	vlan = kzalloc_obj(*vlan, GFP_ATOMIC);
 	if (!vlan)
 		goto out;

@@ -417,7 +417,7 @@ batadv_orig_ifinfo_new(struct batadv_orig_node *orig_node,
 	if (orig_ifinfo)
 		goto out;

-	orig_ifinfo = kzalloc(sizeof(*orig_ifinfo), GFP_ATOMIC);
+	orig_ifinfo = kzalloc_obj(*orig_ifinfo, GFP_ATOMIC);
 	if (!orig_ifinfo)
 		goto out;

@@ -495,7 +495,7 @@ batadv_neigh_ifinfo_new(struct batadv_neigh_node *neigh,
 	if (neigh_ifinfo)
 		goto out;

-	neigh_ifinfo = kzalloc(sizeof(*neigh_ifinfo), GFP_ATOMIC);
+	neigh_ifinfo = kzalloc_obj(*neigh_ifinfo, GFP_ATOMIC);
 	if (!neigh_ifinfo)
 		goto out;

@@ -575,7 +575,7 @@ batadv_hardif_neigh_create(struct batadv_hard_iface *hard_iface,
 	if (hardif_neigh)
 		goto out;

-	hardif_neigh = kzalloc(sizeof(*hardif_neigh), GFP_ATOMIC);
+	hardif_neigh = kzalloc_obj(*hardif_neigh, GFP_ATOMIC);
 	if (!hardif_neigh)
 		goto out;

@@ -683,7 +683,7 @@ batadv_neigh_node_create(struct batadv_orig_node *orig_node,
 	if (!hardif_neigh)
 		goto out;

-	neigh_node = kzalloc(sizeof(*neigh_node), GFP_ATOMIC);
+	neigh_node = kzalloc_obj(*neigh_node, GFP_ATOMIC);
 	if (!neigh_node)
 		goto out;

@@ -947,7 +947,7 @@ struct batadv_orig_node *batadv_orig_node_new(struct batadv_priv *bat_priv,
 	batadv_dbg(BATADV_DBG_BATMAN, bat_priv,
 		   "Creating new originator: %pM\n", addr);

-	orig_node = kzalloc(sizeof(*orig_node), GFP_ATOMIC);
+	orig_node = kzalloc_obj(*orig_node, GFP_ATOMIC);
 	if (!orig_node)
 		return NULL;

diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
index 20d85c681064..60cd67ec9cea 100644
--- a/net/batman-adv/send.c
+++ b/net/batman-adv/send.c
@@ -503,7 +503,7 @@ batadv_forw_packet_alloc(struct batadv_hard_iface *if_incoming,
 		return NULL;
 	}

-	forw_packet = kmalloc(sizeof(*forw_packet), GFP_ATOMIC);
+	forw_packet = kmalloc_obj(*forw_packet, GFP_ATOMIC);
 	if (!forw_packet)
 		goto err;

diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c
index 350b149e48be..2e42f6b348c8 100644
--- a/net/batman-adv/tp_meter.c
+++ b/net/batman-adv/tp_meter.c
@@ -967,7 +967,7 @@ void batadv_tp_start(struct batadv_priv *bat_priv, const u8 *dst,
 		return;
 	}

-	tp_vars = kmalloc(sizeof(*tp_vars), GFP_ATOMIC);
+	tp_vars = kmalloc_obj(*tp_vars, GFP_ATOMIC);
 	if (!tp_vars) {
 		spin_unlock_bh(&bat_priv->tp_list_lock);
 		batadv_dbg(BATADV_DBG_TP_METER, bat_priv,
@@ -1228,7 +1228,7 @@ static bool batadv_tp_handle_out_of_order(struct batadv_tp_vars *tp_vars,
 	u32 payload_len;
 	bool added = false;

-	new = kmalloc(sizeof(*new), GFP_ATOMIC);
+	new = kmalloc_obj(*new, GFP_ATOMIC);
 	if (unlikely(!new))
 		return false;

@@ -1343,7 +1343,7 @@ batadv_tp_init_recv(struct batadv_priv *bat_priv,
 		goto out_unlock;
 	}

-	tp_vars = kmalloc(sizeof(*tp_vars), GFP_ATOMIC);
+	tp_vars = kmalloc_obj(*tp_vars, GFP_ATOMIC);
 	if (!tp_vars)
 		goto out_unlock;

diff --git a/net/batman-adv/tvlv.c b/net/batman-adv/tvlv.c
index 76dff1f9c559..8129a3f9c44d 100644
--- a/net/batman-adv/tvlv.c
+++ b/net/batman-adv/tvlv.c
@@ -557,7 +557,7 @@ void batadv_tvlv_handler_register(struct batadv_priv *bat_priv,
 		return;
 	}

-	tvlv_handler = kzalloc(sizeof(*tvlv_handler), GFP_ATOMIC);
+	tvlv_handler = kzalloc_obj(*tvlv_handler, GFP_ATOMIC);
 	if (!tvlv_handler) {
 		spin_unlock_bh(&bat_priv->tvlv.handler_list_lock);
 		return;
diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
index 2c21ae8abadc..acaf7c9e4a69 100644
--- a/net/bluetooth/6lowpan.c
+++ b/net/bluetooth/6lowpan.c
@@ -645,7 +645,7 @@ static struct l2cap_chan *add_peer_chan(struct l2cap_chan *chan,
 {
 	struct lowpan_peer *peer;

-	peer = kzalloc(sizeof(*peer), GFP_ATOMIC);
+	peer = kzalloc_obj(*peer, GFP_ATOMIC);
 	if (!peer)
 		return NULL;

@@ -1107,7 +1107,7 @@ static int lowpan_enable_set(void *data, u64 val)
 {
 	struct set_enable *set_enable;

-	set_enable = kzalloc(sizeof(*set_enable), GFP_KERNEL);
+	set_enable = kzalloc_obj(*set_enable, GFP_KERNEL);
 	if (!set_enable)
 		return -ENOMEM;

@@ -1245,7 +1245,7 @@ static void disconnect_devices(void)
 	rcu_read_lock();

 	list_for_each_entry_rcu(entry, &bt_6lowpan_devices, list) {
-		new_dev = kmalloc(sizeof(*new_dev), GFP_ATOMIC);
+		new_dev = kmalloc_obj(*new_dev, GFP_ATOMIC);
 		if (!new_dev)
 			break;

diff --git a/net/bluetooth/cmtp/capi.c b/net/bluetooth/cmtp/capi.c
index 884703fda979..df4edd43176e 100644
--- a/net/bluetooth/cmtp/capi.c
+++ b/net/bluetooth/cmtp/capi.c
@@ -72,7 +72,7 @@

 static struct cmtp_application *cmtp_application_add(struct cmtp_session *session, __u16 appl)
 {
-	struct cmtp_application *app = kzalloc(sizeof(*app), GFP_KERNEL);
+	struct cmtp_application *app = kzalloc_obj(*app, GFP_KERNEL);

 	BT_DBG("session %p application %p appl %u", session, app, appl);

diff --git a/net/bluetooth/cmtp/core.c b/net/bluetooth/cmtp/core.c
index 90d130588a3e..ebfa049598dc 100644
--- a/net/bluetooth/cmtp/core.c
+++ b/net/bluetooth/cmtp/core.c
@@ -341,7 +341,7 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)
 	if (req->flags & ~valid_flags)
 		return -EINVAL;

-	session = kzalloc(sizeof(struct cmtp_session), GFP_KERNEL);
+	session = kzalloc_obj(struct cmtp_session, GFP_KERNEL);
 	if (!session)
 		return -ENOMEM;

diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
index 0795818963a5..02d33fe11042 100644
--- a/net/bluetooth/hci_conn.c
+++ b/net/bluetooth/hci_conn.c
@@ -462,7 +462,7 @@ bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
 	struct conn_handle_t *conn_handle;

 	if (enhanced_sync_conn_capable(conn->hdev)) {
-		conn_handle = kzalloc(sizeof(*conn_handle), GFP_KERNEL);
+		conn_handle = kzalloc_obj(*conn_handle, GFP_KERNEL);

 		if (!conn_handle)
 			return false;
@@ -726,7 +726,7 @@ static int hci_le_terminate_big(struct hci_dev *hdev, struct hci_conn *conn)
 	bt_dev_dbg(hdev, "big 0x%2.2x bis 0x%2.2x", conn->iso_qos.bcast.big,
 		   conn->iso_qos.bcast.bis);

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d)
 		return -ENOMEM;

@@ -777,7 +777,7 @@ static int hci_le_big_terminate(struct hci_dev *hdev, struct hci_conn *conn)
 	bt_dev_dbg(hdev, "hcon %p big 0x%2.2x sync_handle 0x%4.4x", conn,
 		   conn->iso_qos.bcast.big, conn->sync_handle);

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (!d)
 		return -ENOMEM;

@@ -960,7 +960,7 @@ static struct hci_conn *__hci_conn_add(struct hci_dev *hdev, int type,

 	bt_dev_dbg(hdev, "dst %pMR handle 0x%4.4x", dst, handle);

-	conn = kzalloc(sizeof(*conn), GFP_KERNEL);
+	conn = kzalloc_obj(*conn, GFP_KERNEL);
 	if (!conn)
 		return ERR_PTR(-ENOMEM);

@@ -1739,7 +1739,7 @@ static struct hci_link *hci_conn_link(struct hci_conn *parent,
 	if (conn->parent)
 		return NULL;

-	link = kzalloc(sizeof(*link), GFP_KERNEL);
+	link = kzalloc_obj(*link, GFP_KERNEL);
 	if (!link)
 		return NULL;

@@ -2781,7 +2781,7 @@ struct hci_chan *hci_chan_create(struct hci_conn *conn)
 		return NULL;
 	}

-	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
+	chan = kzalloc_obj(*chan, GFP_KERNEL);
 	if (!chan)
 		return NULL;

diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index b069607b145b..a0cad792be0b 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -262,7 +262,7 @@ u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
 	}

 	/* Entry not in the cache. Add new one. */
-	ie = kzalloc(sizeof(*ie), GFP_KERNEL);
+	ie = kzalloc_obj(*ie, GFP_KERNEL);
 	if (!ie) {
 		flags |= MGMT_DEV_FOUND_CONFIRM_NAME;
 		goto done;
@@ -797,7 +797,7 @@ int hci_get_dev_list(void __user *arg)
 	if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
 		return -EINVAL;

-	dl = kzalloc(struct_size(dl, dev_req, dev_num), GFP_KERNEL);
+	dl = kzalloc_flex(*dl, dev_req, dev_num, GFP_KERNEL);
 	if (!dl)
 		return -ENOMEM;

@@ -1286,7 +1286,7 @@ struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
 		key = old_key;
 	} else {
 		old_key_type = conn ? conn->key_type : 0xff;
-		key = kzalloc(sizeof(*key), GFP_KERNEL);
+		key = kzalloc_obj(*key, GFP_KERNEL);
 		if (!key)
 			return NULL;
 		list_add_rcu(&key->list, &hdev->link_keys);
@@ -1331,7 +1331,7 @@ struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
 	if (old_key)
 		key = old_key;
 	else {
-		key = kzalloc(sizeof(*key), GFP_KERNEL);
+		key = kzalloc_obj(*key, GFP_KERNEL);
 		if (!key)
 			return NULL;
 		list_add_rcu(&key->list, &hdev->long_term_keys);
@@ -1356,7 +1356,7 @@ struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,

 	irk = hci_find_irk_by_addr(hdev, bdaddr, addr_type);
 	if (!irk) {
-		irk = kzalloc(sizeof(*irk), GFP_KERNEL);
+		irk = kzalloc_obj(*irk, GFP_KERNEL);
 		if (!irk)
 			return NULL;

@@ -1550,7 +1550,7 @@ int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,

 	data = hci_find_remote_oob_data(hdev, bdaddr, bdaddr_type);
 	if (!data) {
-		data = kmalloc(sizeof(*data), GFP_KERNEL);
+		data = kmalloc_obj(*data, GFP_KERNEL);
 		if (!data)
 			return -ENOMEM;

@@ -1718,7 +1718,7 @@ struct adv_info *hci_add_adv_instance(struct hci_dev *hdev, u8 instance,
 		    instance < 1 || instance > hdev->le_num_of_adv_sets + 1)
 			return ERR_PTR(-EOVERFLOW);

-		adv = kzalloc(sizeof(*adv), GFP_KERNEL);
+		adv = kzalloc_obj(*adv, GFP_KERNEL);
 		if (!adv)
 			return ERR_PTR(-ENOMEM);

@@ -2107,7 +2107,7 @@ int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type)
 	if (hci_bdaddr_list_lookup(list, bdaddr, type))
 		return -EEXIST;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -2130,7 +2130,7 @@ int hci_bdaddr_list_add_with_irk(struct list_head *list, bdaddr_t *bdaddr,
 	if (hci_bdaddr_list_lookup(list, bdaddr, type))
 		return -EEXIST;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -2159,7 +2159,7 @@ int hci_bdaddr_list_add_with_flags(struct list_head *list, bdaddr_t *bdaddr,
 	if (hci_bdaddr_list_lookup(list, bdaddr, type))
 		return -EEXIST;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -2276,7 +2276,7 @@ struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
 	if (params)
 		return params;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params) {
 		bt_dev_err(hdev, "out of memory");
 		return NULL;
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index f04a90bce4a9..ed5db3eb3df3 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -711,7 +711,7 @@ int hci_cmd_sync_submit(struct hci_dev *hdev, hci_cmd_sync_work_func_t func,
 		goto unlock;
 	}

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		err = -ENOMEM;
 		goto unlock;
@@ -2685,7 +2685,7 @@ static struct conn_params *conn_params_copy(struct list_head *list, size_t *n)

 	rcu_read_unlock();

-	p = kvcalloc(*n, sizeof(struct conn_params), GFP_KERNEL);
+	p = kvzalloc_objs(struct conn_params, *n, GFP_KERNEL);
 	if (!p)
 		return NULL;

@@ -7341,7 +7341,7 @@ int hci_past_sync(struct hci_conn *conn, struct hci_conn *le)
 	if (!past_sender_capable(conn->hdev))
 		return -EOPNOTSUPP;

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -7473,7 +7473,7 @@ int hci_acl_change_pkt_type(struct hci_conn *conn, u16 pkt_type)
 	struct hci_dev *hdev = conn->hdev;
 	struct hci_cp_change_conn_ptype *cp;

-	cp = kmalloc(sizeof(*cp), GFP_KERNEL);
+	cp = kmalloc_obj(*cp, GFP_KERNEL);
 	if (!cp)
 		return -ENOMEM;

@@ -7508,7 +7508,7 @@ int hci_le_set_phy(struct hci_conn *conn, u8 tx_phys, u8 rx_phys)
 	struct hci_dev *hdev = conn->hdev;
 	struct hci_cp_le_set_phy *cp;

-	cp = kmalloc(sizeof(*cp), GFP_KERNEL);
+	cp = kmalloc_obj(*cp, GFP_KERNEL);
 	if (!cp)
 		return -ENOMEM;

diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
index 6724adce615b..a91d5452f24a 100644
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -920,7 +920,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
 	ctrl = bt_sk(ctrl_sock->sk);
 	intr = bt_sk(intr_sock->sk);

-	session = kzalloc(sizeof(*session), GFP_KERNEL);
+	session = kzalloc_obj(*session, GFP_KERNEL);
 	if (!session)
 		return -ENOMEM;

diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c
index 1459ab161fd2..693271af6c22 100644
--- a/net/bluetooth/iso.c
+++ b/net/bluetooth/iso.c
@@ -212,7 +212,7 @@ static struct iso_conn *iso_conn_add(struct hci_conn *hcon)
 		return conn;
 	}

-	conn = kzalloc(sizeof(*conn), GFP_KERNEL);
+	conn = kzalloc_obj(*conn, GFP_KERNEL);
 	if (!conn)
 		return NULL;

diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index b628b0fa39b2..4804377781b6 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -442,7 +442,7 @@ struct l2cap_chan *l2cap_chan_create(void)
 {
 	struct l2cap_chan *chan;

-	chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
+	chan = kzalloc_obj(*chan, GFP_ATOMIC);
 	if (!chan)
 		return NULL;

@@ -6902,7 +6902,7 @@ static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
 	if (!hchan)
 		return NULL;

-	conn = kzalloc(sizeof(*conn), GFP_KERNEL);
+	conn = kzalloc_obj(*conn, GFP_KERNEL);
 	if (!conn) {
 		hci_chan_del(hchan);
 		return NULL;
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index 3ba3ce7eaa98..66ab920d8f50 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -1564,8 +1564,8 @@ static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
 	    (chan->mode == L2CAP_MODE_ERTM ||
 	     chan->mode == L2CAP_MODE_LE_FLOWCTL ||
 	     chan->mode == L2CAP_MODE_EXT_FLOWCTL)) {
-		struct l2cap_rx_busy *rx_busy =
-			kmalloc(sizeof(*rx_busy), GFP_KERNEL);
+		struct l2cap_rx_busy *rx_busy = kmalloc_obj(*rx_busy,
+							    GFP_KERNEL);
 		if (!rx_busy) {
 			err = -ENOMEM;
 			goto done;
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 0e46f9e08b10..c9725ca3356c 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -560,7 +560,7 @@ static int read_ext_index_list(struct sock *sk, struct hci_dev *hdev,
 	list_for_each_entry(d, &hci_dev_list, list)
 		count++;

-	rp = kmalloc(struct_size(rp, entry, count), GFP_ATOMIC);
+	rp = kmalloc_flex(*rp, entry, count, GFP_ATOMIC);
 	if (!rp) {
 		read_unlock(&hci_dev_list_lock);
 		return -ENOMEM;
@@ -2767,7 +2767,7 @@ static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
 		goto failed;
 	}

-	uuid = kmalloc(sizeof(*uuid), GFP_KERNEL);
+	uuid = kmalloc_obj(*uuid, GFP_KERNEL);
 	if (!uuid) {
 		err = -ENOMEM;
 		goto failed;
@@ -3360,7 +3360,7 @@ static int get_connections(struct sock *sk, struct hci_dev *hdev, void *data,
 			i++;
 	}

-	rp = kmalloc(struct_size(rp, addr, i), GFP_KERNEL);
+	rp = kmalloc_flex(*rp, addr, i, GFP_KERNEL);
 	if (!rp) {
 		err = -ENOMEM;
 		goto unlock;
@@ -4377,7 +4377,7 @@ static int set_blocked_keys(struct sock *sk, struct hci_dev *hdev, void *data,
 	hci_blocked_keys_clear(hdev);

 	for (i = 0; i < key_count; ++i) {
-		struct blocked_key *b = kzalloc(sizeof(*b), GFP_KERNEL);
+		struct blocked_key *b = kzalloc_obj(*b, GFP_KERNEL);

 		if (!b) {
 			err = MGMT_STATUS_NO_RESOURCES;
@@ -5490,7 +5490,7 @@ static u8 parse_adv_monitor_pattern(struct adv_monitor *m, u8 pattern_count,
 		    (offset + length) > HCI_MAX_AD_LENGTH)
 			return MGMT_STATUS_INVALID_PARAMS;

-		p = kmalloc(sizeof(*p), GFP_KERNEL);
+		p = kmalloc_obj(*p, GFP_KERNEL);
 		if (!p)
 			return MGMT_STATUS_NO_RESOURCES;

@@ -5527,7 +5527,7 @@ static int add_adv_patterns_monitor(struct sock *sk, struct hci_dev *hdev,
 		goto done;
 	}

-	m = kzalloc(sizeof(*m), GFP_KERNEL);
+	m = kzalloc_obj(*m, GFP_KERNEL);
 	if (!m) {
 		status = MGMT_STATUS_NO_RESOURCES;
 		goto done;
@@ -5564,7 +5564,7 @@ static int add_adv_patterns_monitor_rssi(struct sock *sk, struct hci_dev *hdev,
 		goto done;
 	}

-	m = kzalloc(sizeof(*m), GFP_KERNEL);
+	m = kzalloc_obj(*m, GFP_KERNEL);
 	if (!m) {
 		status = MGMT_STATUS_NO_RESOURCES;
 		goto done;
diff --git a/net/bluetooth/mgmt_util.c b/net/bluetooth/mgmt_util.c
index aa7b5585cb26..4ed16ca8771d 100644
--- a/net/bluetooth/mgmt_util.c
+++ b/net/bluetooth/mgmt_util.c
@@ -266,7 +266,7 @@ struct mgmt_pending_cmd *mgmt_pending_new(struct sock *sk, u16 opcode,
 {
 	struct mgmt_pending_cmd *cmd;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return NULL;

@@ -413,7 +413,7 @@ struct mgmt_mesh_tx *mgmt_mesh_add(struct sock *sk, struct hci_dev *hdev,
 {
 	struct mgmt_mesh_tx *mesh_tx;

-	mesh_tx = kzalloc(sizeof(*mesh_tx), GFP_KERNEL);
+	mesh_tx = kzalloc_obj(*mesh_tx, GFP_KERNEL);
 	if (!mesh_tx)
 		return NULL;

diff --git a/net/bluetooth/msft.c b/net/bluetooth/msft.c
index c560d8467669..25cde1ea5d23 100644
--- a/net/bluetooth/msft.c
+++ b/net/bluetooth/msft.c
@@ -276,7 +276,7 @@ static int msft_le_monitor_advertisement_cb(struct hci_dev *hdev, u16 opcode,
 	if (status)
 		goto unlock;

-	handle_data = kmalloc(sizeof(*handle_data), GFP_KERNEL);
+	handle_data = kmalloc_obj(*handle_data, GFP_KERNEL);
 	if (!handle_data) {
 		status = HCI_ERROR_UNSPECIFIED;
 		goto unlock;
@@ -756,7 +756,7 @@ void msft_register(struct hci_dev *hdev)

 	bt_dev_dbg(hdev, "Register MSFT extension");

-	msft = kzalloc(sizeof(*msft), GFP_KERNEL);
+	msft = kzalloc_obj(*msft, GFP_KERNEL);
 	if (!msft) {
 		bt_dev_err(hdev, "Failed to register MSFT extension");
 		return;
@@ -790,7 +790,7 @@ static void msft_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr,
 {
 	struct monitored_device *dev;

-	dev = kmalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kmalloc_obj(*dev, GFP_KERNEL);
 	if (!dev) {
 		bt_dev_err(hdev, "MSFT vendor event %u: no memory",
 			   MSFT_EV_LE_MONITOR_DEVICE);
@@ -932,7 +932,7 @@ static struct msft_monitor_addr_filter_data *msft_add_address_filter
 	struct msft_data *msft = hdev->msft_data;
 	int err;

-	address_filter = kzalloc(sizeof(*address_filter), GFP_KERNEL);
+	address_filter = kzalloc_obj(*address_filter, GFP_KERNEL);
 	if (!address_filter)
 		return NULL;

diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c
index 57b1dca8141f..d7718844c520 100644
--- a/net/bluetooth/rfcomm/core.c
+++ b/net/bluetooth/rfcomm/core.c
@@ -302,7 +302,7 @@ static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)

 struct rfcomm_dlc *rfcomm_dlc_alloc(gfp_t prio)
 {
-	struct rfcomm_dlc *d = kzalloc(sizeof(*d), prio);
+	struct rfcomm_dlc *d = kzalloc_obj(*d, prio);

 	if (!d)
 		return NULL;
@@ -680,7 +680,7 @@ int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
 /* ---- RFCOMM sessions ---- */
 static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
 {
-	struct rfcomm_session *s = kzalloc(sizeof(*s), GFP_KERNEL);
+	struct rfcomm_session *s = kzalloc_obj(*s, GFP_KERNEL);

 	if (!s)
 		return NULL;
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
index b783526ab588..4d8ab1a49e92 100644
--- a/net/bluetooth/rfcomm/tty.c
+++ b/net/bluetooth/rfcomm/tty.c
@@ -221,7 +221,7 @@ static struct rfcomm_dev *__rfcomm_dev_add(struct rfcomm_dev_req *req,
 	struct list_head *head = &rfcomm_dev_list;
 	int err = 0;

-	dev = kzalloc(sizeof(struct rfcomm_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct rfcomm_dev, GFP_KERNEL);
 	if (!dev)
 		return ERR_PTR(-ENOMEM);

@@ -510,7 +510,7 @@ static int rfcomm_get_dev_list(void __user *arg)
 	if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di))
 		return -EINVAL;

-	dl = kzalloc(struct_size(dl, dev_info, dev_num), GFP_KERNEL);
+	dl = kzalloc_flex(*dl, dev_info, dev_num, GFP_KERNEL);
 	if (!dl)
 		return -ENOMEM;

diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
index 87ba90336e80..26c5c5fe7c5a 100644
--- a/net/bluetooth/sco.c
+++ b/net/bluetooth/sco.c
@@ -204,7 +204,7 @@ static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
 		return conn;
 	}

-	conn = kzalloc(sizeof(struct sco_conn), GFP_KERNEL);
+	conn = kzalloc_obj(struct sco_conn, GFP_KERNEL);
 	if (!conn)
 		return NULL;

diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index bf61e8841535..e0e66dc95007 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -1344,7 +1344,7 @@ static void smp_distribute_keys(struct smp_chan *smp)
 		/* Generate a new random key */
 		get_random_bytes(sign.csrk, sizeof(sign.csrk));

-		csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
+		csrk = kzalloc_obj(*csrk, GFP_KERNEL);
 		if (csrk) {
 			if (hcon->sec_level > BT_SECURITY_MEDIUM)
 				csrk->type = MGMT_CSRK_LOCAL_AUTHENTICATED;
@@ -1388,7 +1388,7 @@ static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
 	struct l2cap_chan *chan = conn->smp;
 	struct smp_chan *smp;

-	smp = kzalloc(sizeof(*smp), GFP_ATOMIC);
+	smp = kzalloc_obj(*smp, GFP_ATOMIC);
 	if (!smp)
 		return NULL;

@@ -2664,7 +2664,7 @@ static int smp_cmd_sign_info(struct l2cap_conn *conn, struct sk_buff *skb)

 	skb_pull(skb, sizeof(*rp));

-	csrk = kzalloc(sizeof(*csrk), GFP_KERNEL);
+	csrk = kzalloc_obj(*csrk, GFP_KERNEL);
 	if (csrk) {
 		if (conn->hcon->sec_level > BT_SECURITY_MEDIUM)
 			csrk->type = MGMT_CSRK_REMOTE_AUTHENTICATED;
@@ -3293,7 +3293,7 @@ static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
 		goto create_chan;
 	}

-	smp = kzalloc(sizeof(*smp), GFP_KERNEL);
+	smp = kzalloc_obj(*smp, GFP_KERNEL);
 	if (!smp)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/bpf/bpf_dummy_struct_ops.c b/net/bpf/bpf_dummy_struct_ops.c
index 812457819b5a..52117422e0f2 100644
--- a/net/bpf/bpf_dummy_struct_ops.c
+++ b/net/bpf/bpf_dummy_struct_ops.c
@@ -36,7 +36,7 @@ dummy_ops_init_args(const union bpf_attr *kattr, unsigned int nr)
 	if (size_in != sizeof(u64) * nr)
 		return ERR_PTR(-EINVAL);

-	args = kzalloc(sizeof(*args), GFP_KERNEL);
+	args = kzalloc_obj(*args, GFP_KERNEL);
 	if (!args)
 		return ERR_PTR(-ENOMEM);

@@ -158,13 +158,13 @@ int bpf_struct_ops_test_run(struct bpf_prog *prog, const union bpf_attr *kattr,
 	if (err)
 		goto out;

-	tlinks = kcalloc(BPF_TRAMP_MAX, sizeof(*tlinks), GFP_KERNEL);
+	tlinks = kzalloc_objs(*tlinks, BPF_TRAMP_MAX, GFP_KERNEL);
 	if (!tlinks) {
 		err = -ENOMEM;
 		goto out;
 	}

-	link = kzalloc(sizeof(*link), GFP_USER);
+	link = kzalloc_obj(*link, GFP_USER);
 	if (!link) {
 		err = -ENOMEM;
 		goto out;
diff --git a/net/bridge/br_cfm.c b/net/bridge/br_cfm.c
index c2c1c7d44c61..a2276ce350fa 100644
--- a/net/bridge/br_cfm.c
+++ b/net/bridge/br_cfm.c
@@ -547,7 +547,7 @@ int br_cfm_mep_create(struct net_bridge *br,
 		}
 	}

-	mep = kzalloc(sizeof(*mep), GFP_KERNEL);
+	mep = kzalloc_obj(*mep, GFP_KERNEL);
 	if (!mep)
 		return -ENOMEM;

@@ -693,7 +693,7 @@ int br_cfm_cc_peer_mep_add(struct net_bridge *br, const u32 instance,
 		return -EEXIST;
 	}

-	peer_mep = kzalloc(sizeof(*peer_mep), GFP_KERNEL);
+	peer_mep = kzalloc_obj(*peer_mep, GFP_KERNEL);
 	if (!peer_mep)
 		return -ENOMEM;

diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index a818fdc22da9..1a3bcb5dd955 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -308,7 +308,7 @@ static int __br_netpoll_enable(struct net_bridge_port *p)
 	struct netpoll *np;
 	int err;

-	np = kzalloc(sizeof(*p->np), GFP_KERNEL);
+	np = kzalloc_obj(*p->np, GFP_KERNEL);
 	if (!np)
 		return -ENOMEM;

diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index 4c67a32745f6..4737ee16bebb 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -429,7 +429,7 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br,
 	if (index < 0)
 		return ERR_PTR(index);

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (p == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c
index 6bc0a11f2ed3..7245ca29c5ea 100644
--- a/net/bridge/br_ioctl.c
+++ b/net/bridge/br_ioctl.c
@@ -204,7 +204,7 @@ int br_dev_siocdevprivate(struct net_device *dev, struct ifreq *rq,
 		if (num > BR_MAX_PORTS)
 			num = BR_MAX_PORTS;

-		indices = kcalloc(num, sizeof(int), GFP_KERNEL);
+		indices = kzalloc_objs(int, num, GFP_KERNEL);
 		if (indices == NULL)
 			return -ENOMEM;

@@ -357,7 +357,7 @@ static int old_deviceless(struct net *net, void __user *data)

 		if (args[2] >= 2048)
 			return -ENOMEM;
-		indices = kcalloc(args[2], sizeof(int), GFP_KERNEL);
+		indices = kzalloc_objs(int, args[2], GFP_KERNEL);
 		if (indices == NULL)
 			return -ENOMEM;

diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c
index 400eb872b403..a5f0b74b59f3 100644
--- a/net/bridge/br_mdb.c
+++ b/net/bridge/br_mdb.c
@@ -1133,8 +1133,8 @@ static int br_mdb_config_src_list_init(struct nlattr *src_list,
 		return -EINVAL;
 	}

-	cfg->src_entries = kcalloc(cfg->num_src_entries,
-				   sizeof(struct br_mdb_src_entry), GFP_KERNEL);
+	cfg->src_entries = kzalloc_objs(struct br_mdb_src_entry,
+					cfg->num_src_entries, GFP_KERNEL);
 	if (!cfg->src_entries)
 		return -ENOMEM;

diff --git a/net/bridge/br_mrp.c b/net/bridge/br_mrp.c
index 3c36fa24bc05..d587f99afef6 100644
--- a/net/bridge/br_mrp.c
+++ b/net/bridge/br_mrp.c
@@ -516,7 +516,7 @@ int br_mrp_add(struct net_bridge *br, struct br_mrp_instance *instance)
 	    !br_mrp_unique_ifindex(br, instance->s_ifindex))
 		return -EINVAL;

-	mrp = kzalloc(sizeof(*mrp), GFP_KERNEL);
+	mrp = kzalloc_obj(*mrp, GFP_KERNEL);
 	if (!mrp)
 		return -ENOMEM;

diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index b6a5147886ca..881d866d687a 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -1290,7 +1290,7 @@ struct net_bridge_mdb_entry *br_multicast_new_group(struct net_bridge *br,
 		return ERR_PTR(-E2BIG);
 	}

-	mp = kzalloc(sizeof(*mp), GFP_ATOMIC);
+	mp = kzalloc_obj(*mp, GFP_ATOMIC);
 	if (unlikely(!mp))
 		return ERR_PTR(-ENOMEM);

@@ -1381,7 +1381,7 @@ br_multicast_new_group_src(struct net_bridge_port_group *pg, struct br_ip *src_i
 #endif
 	}

-	grp_src = kzalloc(sizeof(*grp_src), GFP_ATOMIC);
+	grp_src = kzalloc_obj(*grp_src, GFP_ATOMIC);
 	if (unlikely(!grp_src))
 		return NULL;

@@ -1414,7 +1414,7 @@ struct net_bridge_port_group *br_multicast_new_port_group(
 	if (err)
 		return NULL;

-	p = kzalloc(sizeof(*p), GFP_ATOMIC);
+	p = kzalloc_obj(*p, GFP_ATOMIC);
 	if (unlikely(!p)) {
 		NL_SET_ERR_MSG_MOD(extack, "Couldn't allocate new port group");
 		goto dec_out;
@@ -4891,7 +4891,7 @@ int br_multicast_list_adjacent(struct net_device *dev,
 			continue;

 		hlist_for_each_entry_rcu(group, &port->mglist, mglist) {
-			entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+			entry = kmalloc_obj(*entry, GFP_ATOMIC);
 			if (!entry)
 				goto unlock;

diff --git a/net/bridge/br_multicast_eht.c b/net/bridge/br_multicast_eht.c
index adfd74102019..18eaf9c0dada 100644
--- a/net/bridge/br_multicast_eht.c
+++ b/net/bridge/br_multicast_eht.c
@@ -266,7 +266,7 @@ __eht_lookup_create_host(struct net_bridge_port_group *pg,
 	if (br_multicast_eht_hosts_over_limit(pg))
 		return NULL;

-	eht_host = kzalloc(sizeof(*eht_host), GFP_ATOMIC);
+	eht_host = kzalloc_obj(*eht_host, GFP_ATOMIC);
 	if (!eht_host)
 		return NULL;

@@ -313,7 +313,7 @@ __eht_lookup_create_set_entry(struct net_bridge *br,
 	if (!allow_zero_src && eht_host->num_entries >= PG_SRC_ENT_LIMIT)
 		return NULL;

-	set_h = kzalloc(sizeof(*set_h), GFP_ATOMIC);
+	set_h = kzalloc_obj(*set_h, GFP_ATOMIC);
 	if (!set_h)
 		return NULL;

@@ -360,7 +360,7 @@ __eht_lookup_create_set(struct net_bridge_port_group *pg,
 			return this;
 	}

-	eht_set = kzalloc(sizeof(*eht_set), GFP_ATOMIC);
+	eht_set = kzalloc_obj(*eht_set, GFP_ATOMIC);
 	if (!eht_set)
 		return NULL;

diff --git a/net/bridge/br_switchdev.c b/net/bridge/br_switchdev.c
index fe3f7bbe86ee..4fac002922d2 100644
--- a/net/bridge/br_switchdev.c
+++ b/net/bridge/br_switchdev.c
@@ -661,7 +661,7 @@ void br_switchdev_mdb_notify(struct net_device *dev,
 	mdb.obj.orig_dev = pg->key.port->dev;
 	switch (type) {
 	case RTM_NEWMDB:
-		complete_info = kmalloc(sizeof(*complete_info), GFP_ATOMIC);
+		complete_info = kmalloc_obj(*complete_info, GFP_ATOMIC);
 		if (!complete_info)
 			break;
 		complete_info->port = pg->key.port;
diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c
index ce72b837ff8e..e3a5eb9e6ed1 100644
--- a/net/bridge/br_vlan.c
+++ b/net/bridge/br_vlan.c
@@ -787,7 +787,7 @@ int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags, bool *changed,
 		return br_vlan_add_existing(br, vg, vlan, flags, changed,
 					    extack);

-	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan)
 		return -ENOMEM;

@@ -1224,7 +1224,7 @@ int br_vlan_init(struct net_bridge *br)
 	struct net_bridge_vlan_group *vg;
 	int ret = -ENOMEM;

-	vg = kzalloc(sizeof(*vg), GFP_KERNEL);
+	vg = kzalloc_obj(*vg, GFP_KERNEL);
 	if (!vg)
 		goto out;
 	ret = rhashtable_init(&vg->vlan_hash, &br_vlan_rht_params);
@@ -1260,7 +1260,7 @@ int nbp_vlan_init(struct net_bridge_port *p, struct netlink_ext_ack *extack)
 	struct net_bridge_vlan_group *vg;
 	int ret = -ENOMEM;

-	vg = kzalloc(sizeof(struct net_bridge_vlan_group), GFP_KERNEL);
+	vg = kzalloc_obj(struct net_bridge_vlan_group, GFP_KERNEL);
 	if (!vg)
 		goto out;

@@ -1334,7 +1334,7 @@ int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
 		return 0;
 	}

-	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan)
 		return -ENOMEM;

diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
index a04fc1757528..f01efd0b139e 100644
--- a/net/bridge/netfilter/ebtables.c
+++ b/net/bridge/netfilter/ebtables.c
@@ -1303,7 +1303,7 @@ int ebt_register_template(const struct ebt_table *t, int (*table_init)(struct ne
 		}
 	}

-	tmpl = kzalloc(sizeof(*tmpl), GFP_KERNEL);
+	tmpl = kzalloc_obj(*tmpl, GFP_KERNEL);
 	if (!tmpl) {
 		mutex_unlock(&ebt_mutex);
 		return -ENOMEM;
diff --git a/net/caif/caif_dev.c b/net/caif/caif_dev.c
index 24e85c5487ef..18f7769405f9 100644
--- a/net/caif/caif_dev.c
+++ b/net/caif/caif_dev.c
@@ -94,7 +94,7 @@ static struct caif_device_entry *caif_device_alloc(struct net_device *dev)
 {
 	struct caif_device_entry *caifd;

-	caifd = kzalloc(sizeof(*caifd), GFP_KERNEL);
+	caifd = kzalloc_obj(*caifd, GFP_KERNEL);
 	if (!caifd)
 		return NULL;
 	caifd->pcpu_refcnt = alloc_percpu(int);
diff --git a/net/caif/caif_usb.c b/net/caif/caif_usb.c
index 5dc05a1e3178..4d44960d4c2f 100644
--- a/net/caif/caif_usb.c
+++ b/net/caif/caif_usb.c
@@ -85,7 +85,7 @@ static void cfusbl_ctrlcmd(struct cflayer *layr, enum caif_ctrlcmd ctrl,
 static struct cflayer *cfusbl_create(int phyid, const u8 ethaddr[ETH_ALEN],
 				      u8 braddr[ETH_ALEN])
 {
-	struct cfusbl *this = kmalloc(sizeof(struct cfusbl), GFP_ATOMIC);
+	struct cfusbl *this = kmalloc_obj(struct cfusbl, GFP_ATOMIC);

 	if (!this)
 		return NULL;
diff --git a/net/caif/cfcnfg.c b/net/caif/cfcnfg.c
index 52509e185960..8a80914783e8 100644
--- a/net/caif/cfcnfg.c
+++ b/net/caif/cfcnfg.c
@@ -77,7 +77,7 @@ struct cfcnfg *cfcnfg_create(void)
 	might_sleep();

 	/* Initiate this layer */
-	this = kzalloc(sizeof(struct cfcnfg), GFP_ATOMIC);
+	this = kzalloc_obj(struct cfcnfg, GFP_ATOMIC);
 	if (!this)
 		return NULL;
 	this->mux = cfmuxl_create();
@@ -477,7 +477,7 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg,
 	goto out;

 got_phyid:
-	phyinfo = kzalloc(sizeof(struct cfcnfg_phyinfo), GFP_ATOMIC);
+	phyinfo = kzalloc_obj(struct cfcnfg_phyinfo, GFP_ATOMIC);
 	if (!phyinfo) {
 		res = -ENOMEM;
 		goto out;
diff --git a/net/caif/cfctrl.c b/net/caif/cfctrl.c
index 2aa1e7d46eb2..566546da4152 100644
--- a/net/caif/cfctrl.c
+++ b/net/caif/cfctrl.c
@@ -36,7 +36,7 @@ struct cflayer *cfctrl_create(void)
 {
 	struct dev_info dev_info;
 	struct cfctrl *this =
-		kzalloc(sizeof(struct cfctrl), GFP_ATOMIC);
+		kzalloc_obj(struct cfctrl, GFP_ATOMIC);
 	if (!this)
 		return NULL;
 	caif_assert(offsetof(struct cfctrl, serv.layer) == 0);
@@ -270,7 +270,7 @@ int cfctrl_linkup_request(struct cflayer *layer,
 		cfpkt_destroy(pkt);
 		return -EINVAL;
 	}
-	req = kzalloc(sizeof(*req), GFP_KERNEL);
+	req = kzalloc_obj(*req, GFP_KERNEL);
 	if (!req) {
 		cfpkt_destroy(pkt);
 		return -ENOMEM;
diff --git a/net/caif/cfdbgl.c b/net/caif/cfdbgl.c
index 77f428428b47..57ad3f82e004 100644
--- a/net/caif/cfdbgl.c
+++ b/net/caif/cfdbgl.c
@@ -19,7 +19,7 @@ static int cfdbgl_transmit(struct cflayer *layr, struct cfpkt *pkt);

 struct cflayer *cfdbgl_create(u8 channel_id, struct dev_info *dev_info)
 {
-	struct cfsrvl *dbg = kzalloc(sizeof(struct cfsrvl), GFP_ATOMIC);
+	struct cfsrvl *dbg = kzalloc_obj(struct cfsrvl, GFP_ATOMIC);
 	if (!dbg)
 		return NULL;
 	caif_assert(offsetof(struct cfsrvl, layer) == 0);
diff --git a/net/caif/cfdgml.c b/net/caif/cfdgml.c
index eb6f8ef47a79..c451ddd155a7 100644
--- a/net/caif/cfdgml.c
+++ b/net/caif/cfdgml.c
@@ -26,7 +26,7 @@ static int cfdgml_transmit(struct cflayer *layr, struct cfpkt *pkt);

 struct cflayer *cfdgml_create(u8 channel_id, struct dev_info *dev_info)
 {
-	struct cfsrvl *dgm = kzalloc(sizeof(struct cfsrvl), GFP_ATOMIC);
+	struct cfsrvl *dgm = kzalloc_obj(struct cfsrvl, GFP_ATOMIC);
 	if (!dgm)
 		return NULL;
 	caif_assert(offsetof(struct cfsrvl, layer) == 0);
diff --git a/net/caif/cffrml.c b/net/caif/cffrml.c
index d4d63586053a..0f4979d89fcb 100644
--- a/net/caif/cffrml.c
+++ b/net/caif/cffrml.c
@@ -34,7 +34,7 @@ static u32 cffrml_rcv_error;
 static u32 cffrml_rcv_checsum_error;
 struct cflayer *cffrml_create(u16 phyid, bool use_fcs)
 {
-	struct cffrml *this = kzalloc(sizeof(struct cffrml), GFP_ATOMIC);
+	struct cffrml *this = kzalloc_obj(struct cffrml, GFP_ATOMIC);
 	if (!this)
 		return NULL;
 	this->pcpu_refcnt = alloc_percpu(int);
diff --git a/net/caif/cfmuxl.c b/net/caif/cfmuxl.c
index 4172b0d0db63..77a1f31639b7 100644
--- a/net/caif/cfmuxl.c
+++ b/net/caif/cfmuxl.c
@@ -47,7 +47,7 @@ static struct cflayer *get_up(struct cfmuxl *muxl, u16 id);

 struct cflayer *cfmuxl_create(void)
 {
-	struct cfmuxl *this = kzalloc(sizeof(struct cfmuxl), GFP_ATOMIC);
+	struct cfmuxl *this = kzalloc_obj(struct cfmuxl, GFP_ATOMIC);

 	if (!this)
 		return NULL;
diff --git a/net/caif/cfrfml.c b/net/caif/cfrfml.c
index 3c335057f255..93732ebbd1e2 100644
--- a/net/caif/cfrfml.c
+++ b/net/caif/cfrfml.c
@@ -46,7 +46,7 @@ struct cflayer *cfrfml_create(u8 channel_id, struct dev_info *dev_info,
 			      int mtu_size)
 {
 	int tmp;
-	struct cfrfml *this = kzalloc(sizeof(struct cfrfml), GFP_ATOMIC);
+	struct cfrfml *this = kzalloc_obj(struct cfrfml, GFP_ATOMIC);

 	if (!this)
 		return NULL;
diff --git a/net/caif/cfserl.c b/net/caif/cfserl.c
index aee11c74d3c8..faf78fb754e2 100644
--- a/net/caif/cfserl.c
+++ b/net/caif/cfserl.c
@@ -38,7 +38,7 @@ void cfserl_release(struct cflayer *layer)

 struct cflayer *cfserl_create(int instance, bool use_stx)
 {
-	struct cfserl *this = kzalloc(sizeof(struct cfserl), GFP_ATOMIC);
+	struct cfserl *this = kzalloc_obj(struct cfserl, GFP_ATOMIC);
 	if (!this)
 		return NULL;
 	caif_assert(offsetof(struct cfserl, layer) == 0);
diff --git a/net/caif/cfutill.c b/net/caif/cfutill.c
index b2e47ede912f..5111090bb2c0 100644
--- a/net/caif/cfutill.c
+++ b/net/caif/cfutill.c
@@ -26,7 +26,7 @@ static int cfutill_transmit(struct cflayer *layr, struct cfpkt *pkt);

 struct cflayer *cfutill_create(u8 channel_id, struct dev_info *dev_info)
 {
-	struct cfsrvl *util = kzalloc(sizeof(struct cfsrvl), GFP_ATOMIC);
+	struct cfsrvl *util = kzalloc_obj(struct cfsrvl, GFP_ATOMIC);
 	if (!util)
 		return NULL;
 	caif_assert(offsetof(struct cfsrvl, layer) == 0);
diff --git a/net/caif/cfveil.c b/net/caif/cfveil.c
index db2274b94a5d..53f844c49bbb 100644
--- a/net/caif/cfveil.c
+++ b/net/caif/cfveil.c
@@ -25,7 +25,7 @@ static int cfvei_transmit(struct cflayer *layr, struct cfpkt *pkt);

 struct cflayer *cfvei_create(u8 channel_id, struct dev_info *dev_info)
 {
-	struct cfsrvl *vei = kzalloc(sizeof(struct cfsrvl), GFP_ATOMIC);
+	struct cfsrvl *vei = kzalloc_obj(struct cfsrvl, GFP_ATOMIC);
 	if (!vei)
 		return NULL;
 	caif_assert(offsetof(struct cfsrvl, layer) == 0);
diff --git a/net/caif/cfvidl.c b/net/caif/cfvidl.c
index 134bad43196c..39e075b0a259 100644
--- a/net/caif/cfvidl.c
+++ b/net/caif/cfvidl.c
@@ -21,7 +21,7 @@ static int cfvidl_transmit(struct cflayer *layr, struct cfpkt *pkt);

 struct cflayer *cfvidl_create(u8 channel_id, struct dev_info *dev_info)
 {
-	struct cfsrvl *vid = kzalloc(sizeof(struct cfsrvl), GFP_ATOMIC);
+	struct cfsrvl *vid = kzalloc_obj(struct cfsrvl, GFP_ATOMIC);
 	if (!vid)
 		return NULL;
 	caif_assert(offsetof(struct cfsrvl, layer) == 0);
diff --git a/net/can/af_can.c b/net/can/af_can.c
index 22c65a014861..6fa0dd649d0c 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
@@ -798,14 +798,15 @@ EXPORT_SYMBOL(can_proto_unregister);
 static int can_pernet_init(struct net *net)
 {
 	spin_lock_init(&net->can.rcvlists_lock);
-	net->can.rx_alldev_list =
-		kzalloc(sizeof(*net->can.rx_alldev_list), GFP_KERNEL);
+	net->can.rx_alldev_list = kzalloc_obj(*net->can.rx_alldev_list,
+					      GFP_KERNEL);
 	if (!net->can.rx_alldev_list)
 		goto out;
-	net->can.pkg_stats = kzalloc(sizeof(*net->can.pkg_stats), GFP_KERNEL);
+	net->can.pkg_stats = kzalloc_obj(*net->can.pkg_stats, GFP_KERNEL);
 	if (!net->can.pkg_stats)
 		goto out_free_rx_alldev_list;
-	net->can.rcv_lists_stats = kzalloc(sizeof(*net->can.rcv_lists_stats), GFP_KERNEL);
+	net->can.rcv_lists_stats = kzalloc_obj(*net->can.rcv_lists_stats,
+					       GFP_KERNEL);
 	if (!net->can.rcv_lists_stats)
 		goto out_free_pkg_stats;

diff --git a/net/can/gw.c b/net/can/gw.c
index 61a1e6b1b83f..c6cf4cb72891 100644
--- a/net/can/gw.c
+++ b/net/can/gw.c
@@ -1099,7 +1099,7 @@ static int cgw_create_job(struct sk_buff *skb,  struct nlmsghdr *nlh,
 	if (r->gwtype != CGW_TYPE_CAN_CAN)
 		return -EINVAL;

-	mod = kmalloc(sizeof(*mod), GFP_KERNEL);
+	mod = kmalloc_obj(*mod, GFP_KERNEL);
 	if (!mod)
 		return -ENOMEM;

diff --git a/net/can/j1939/bus.c b/net/can/j1939/bus.c
index 797719cb227e..dc374286eeb6 100644
--- a/net/can/j1939/bus.c
+++ b/net/can/j1939/bus.c
@@ -151,7 +151,7 @@ struct j1939_ecu *j1939_ecu_create_locked(struct j1939_priv *priv, name_t name)

 	lockdep_assert_held(&priv->lock);

-	ecu = kzalloc(sizeof(*ecu), gfp_any());
+	ecu = kzalloc_obj(*ecu, gfp_any());
 	if (!ecu)
 		return ERR_PTR(-ENOMEM);
 	kref_init(&ecu->kref);
diff --git a/net/can/j1939/main.c b/net/can/j1939/main.c
index a93af55df5fd..45b718c680e0 100644
--- a/net/can/j1939/main.c
+++ b/net/can/j1939/main.c
@@ -128,7 +128,7 @@ static struct j1939_priv *j1939_priv_create(struct net_device *ndev)
 {
 	struct j1939_priv *priv;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return NULL;

diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
index 2cbe94fc487a..df93d57907da 100644
--- a/net/can/j1939/transport.c
+++ b/net/can/j1939/transport.c
@@ -1508,7 +1508,7 @@ static struct j1939_session *j1939_session_new(struct j1939_priv *priv,
 	struct j1939_session *session;
 	struct j1939_sk_buff_cb *skcb;

-	session = kzalloc(sizeof(*session), gfp_any());
+	session = kzalloc_obj(*session, gfp_any());
 	if (!session)
 		return NULL;

diff --git a/net/ceph/auth.c b/net/ceph/auth.c
index d38c9eadbe2f..343c841784ce 100644
--- a/net/ceph/auth.c
+++ b/net/ceph/auth.c
@@ -59,7 +59,7 @@ struct ceph_auth_client *ceph_auth_init(const char *name,
 {
 	struct ceph_auth_client *ac;

-	ac = kzalloc(sizeof(*ac), GFP_NOFS);
+	ac = kzalloc_obj(*ac, GFP_NOFS);
 	if (!ac)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/ceph/auth_none.c b/net/ceph/auth_none.c
index 77b5519bc45f..99e1f3e10a4c 100644
--- a/net/ceph/auth_none.c
+++ b/net/ceph/auth_none.c
@@ -97,7 +97,7 @@ static int ceph_auth_none_create_authorizer(
 	struct ceph_none_authorizer *au;
 	int ret;

-	au = kmalloc(sizeof(*au), GFP_NOFS);
+	au = kmalloc_obj(*au, GFP_NOFS);
 	if (!au)
 		return -ENOMEM;

@@ -133,7 +133,7 @@ int ceph_auth_none_init(struct ceph_auth_client *ac)
 	struct ceph_auth_none_info *xi;

 	dout("ceph_auth_none_init %p\n", ac);
-	xi = kzalloc(sizeof(*xi), GFP_NOFS);
+	xi = kzalloc_obj(*xi, GFP_NOFS);
 	if (!xi)
 		return -ENOMEM;

diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c
index 13b3df9af0ac..692e0b868822 100644
--- a/net/ceph/auth_x.c
+++ b/net/ceph/auth_x.c
@@ -166,7 +166,7 @@ get_ticket_handler(struct ceph_auth_client *ac, int service)
 	}

 	/* add it */
-	th = kzalloc(sizeof(*th), GFP_NOFS);
+	th = kzalloc_obj(*th, GFP_NOFS);
 	if (!th)
 		return ERR_PTR(-ENOMEM);
 	th->service = service;
@@ -808,7 +808,7 @@ static int ceph_x_create_authorizer(
 	if (IS_ERR(th))
 		return PTR_ERR(th);

-	au = kzalloc(sizeof(*au), GFP_NOFS);
+	au = kzalloc_obj(*au, GFP_NOFS);
 	if (!au)
 		return -ENOMEM;

@@ -1174,7 +1174,7 @@ int ceph_x_init(struct ceph_auth_client *ac)
 	int ret;

 	dout("ceph_x_init %p\n", ac);
-	xi = kzalloc(sizeof(*xi), GFP_NOFS);
+	xi = kzalloc_obj(*xi, GFP_NOFS);
 	if (!xi)
 		return -ENOMEM;

diff --git a/net/ceph/buffer.c b/net/ceph/buffer.c
index 7e51f128045d..98c2ac4387ae 100644
--- a/net/ceph/buffer.c
+++ b/net/ceph/buffer.c
@@ -13,7 +13,7 @@ struct ceph_buffer *ceph_buffer_new(size_t len, gfp_t gfp)
 {
 	struct ceph_buffer *b;

-	b = kmalloc(sizeof(*b), gfp);
+	b = kmalloc_obj(*b, gfp);
 	if (!b)
 		return NULL;

diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c
index e734e57be083..455787422784 100644
--- a/net/ceph/ceph_common.c
+++ b/net/ceph/ceph_common.c
@@ -309,13 +309,12 @@ struct ceph_options *ceph_alloc_options(void)
 {
 	struct ceph_options *opt;

-	opt = kzalloc(sizeof(*opt), GFP_KERNEL);
+	opt = kzalloc_obj(*opt, GFP_KERNEL);
 	if (!opt)
 		return NULL;

 	opt->crush_locs = RB_ROOT;
-	opt->mon_addr = kcalloc(CEPH_MAX_MON, sizeof(*opt->mon_addr),
-				GFP_KERNEL);
+	opt->mon_addr = kzalloc_objs(*opt->mon_addr, CEPH_MAX_MON, GFP_KERNEL);
 	if (!opt->mon_addr) {
 		kfree(opt);
 		return NULL;
@@ -456,7 +455,7 @@ int ceph_parse_param(struct fs_parameter *param, struct ceph_options *opt,
 		ceph_crypto_key_destroy(opt->key);
 		kfree(opt->key);

-		opt->key = kzalloc(sizeof(*opt->key), GFP_KERNEL);
+		opt->key = kzalloc_obj(*opt->key, GFP_KERNEL);
 		if (!opt->key)
 			return -ENOMEM;
 		err = ceph_crypto_key_unarmor(opt->key, param->string);
@@ -469,7 +468,7 @@ int ceph_parse_param(struct fs_parameter *param, struct ceph_options *opt,
 		ceph_crypto_key_destroy(opt->key);
 		kfree(opt->key);

-		opt->key = kzalloc(sizeof(*opt->key), GFP_KERNEL);
+		opt->key = kzalloc_obj(*opt->key, GFP_KERNEL);
 		if (!opt->key)
 			return -ENOMEM;
 		return get_secret(opt->key, param->string, &log);
@@ -714,7 +713,7 @@ struct ceph_client *ceph_create_client(struct ceph_options *opt, void *private)
 	if (err < 0)
 		return ERR_PTR(err);

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (client == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/ceph/cls_lock_client.c b/net/ceph/cls_lock_client.c
index 66136a4c1ce7..c6956f1df333 100644
--- a/net/ceph/cls_lock_client.c
+++ b/net/ceph/cls_lock_client.c
@@ -300,7 +300,7 @@ static int decode_lockers(void **p, void *end, u8 *type, char **tag,
 		return ret;

 	*num_lockers = ceph_decode_32(p);
-	*lockers = kcalloc(*num_lockers, sizeof(**lockers), GFP_NOIO);
+	*lockers = kzalloc_objs(**lockers, *num_lockers, GFP_NOIO);
 	if (!*lockers)
 		return -ENOMEM;

diff --git a/net/ceph/crypto.c b/net/ceph/crypto.c
index b2067ea6c38a..ef8a98c1174f 100644
--- a/net/ceph/crypto.c
+++ b/net/ceph/crypto.c
@@ -466,7 +466,7 @@ static int ceph_key_preparse(struct key_preparsed_payload *prep)
 		goto err;

 	ret = -ENOMEM;
-	ckey = kzalloc(sizeof(*ckey), GFP_KERNEL);
+	ckey = kzalloc_obj(*ckey, GFP_KERNEL);
 	if (!ckey)
 		goto err;

diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index 70b25f4ecba6..108adb583744 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -1993,8 +1993,7 @@ struct ceph_msg *ceph_msg_new2(int type, int front_len, int max_data_items,
 	m->front_alloc_len = m->front.iov_len = front_len;

 	if (max_data_items) {
-		m->data = kmalloc_array(max_data_items, sizeof(*m->data),
-					flags);
+		m->data = kmalloc_objs(*m->data, max_data_items, flags);
 		if (!m->data)
 			goto out2;

diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c
index fa8dd2a20f7d..2e2fd241dd19 100644
--- a/net/ceph/mon_client.c
+++ b/net/ceph/mon_client.c
@@ -117,7 +117,7 @@ static struct ceph_monmap *ceph_monmap_decode(void **p, void *end, bool msgr2)
 	if (num_mon > CEPH_MAX_MON)
 		goto e_inval;

-	monmap = kmalloc(struct_size(monmap, mon_inst, num_mon), GFP_NOIO);
+	monmap = kmalloc_flex(*monmap, mon_inst, num_mon, GFP_NOIO);
 	if (!monmap) {
 		ret = -ENOMEM;
 		goto fail;
@@ -611,7 +611,7 @@ alloc_generic_request(struct ceph_mon_client *monc, gfp_t gfp)
 {
 	struct ceph_mon_generic_request *req;

-	req = kzalloc(sizeof(*req), gfp);
+	req = kzalloc_obj(*req, gfp);
 	if (!req)
 		return NULL;

@@ -1140,8 +1140,8 @@ static int build_initial_monmap(struct ceph_mon_client *monc)
 	int i;

 	/* build initial monmap */
-	monc->monmap = kzalloc(struct_size(monc->monmap, mon_inst, num_mon),
-			       GFP_KERNEL);
+	monc->monmap = kzalloc_flex(*monc->monmap, mon_inst, num_mon,
+				    GFP_KERNEL);
 	if (!monc->monmap)
 		return -ENOMEM;
 	monc->monmap->num_mon = num_mon;
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index 610e584524d1..2ff00070c181 100644
--- a/net/ceph/osd_client.c
+++ b/net/ceph/osd_client.c
@@ -556,7 +556,7 @@ struct ceph_osd_request *ceph_osdc_alloc_request(struct ceph_osd_client *osdc,
 		req = kmem_cache_alloc(ceph_osd_request_cache, gfp_flags);
 	} else {
 		BUG_ON(num_ops > CEPH_OSD_MAX_OPS);
-		req = kmalloc(struct_size(req, r_ops, num_ops), gfp_flags);
+		req = kmalloc_flex(*req, r_ops, num_ops, gfp_flags);
 	}
 	if (unlikely(!req))
 		return NULL;
@@ -1153,9 +1153,8 @@ int __ceph_alloc_sparse_ext_map(struct ceph_osd_req_op *op, int cnt)
 	WARN_ON(op->op != CEPH_OSD_OP_SPARSE_READ);

 	op->extent.sparse_ext_cnt = cnt;
-	op->extent.sparse_ext = kmalloc_array(cnt,
-					      sizeof(*op->extent.sparse_ext),
-					      GFP_NOFS);
+	op->extent.sparse_ext = kmalloc_objs(*op->extent.sparse_ext, cnt,
+					     GFP_NOFS);
 	if (!op->extent.sparse_ext)
 		return -ENOMEM;
 	return 0;
@@ -1264,7 +1263,7 @@ static struct ceph_osd *create_osd(struct ceph_osd_client *osdc, int onum)

 	WARN_ON(onum == CEPH_HOMELESS_OSD);

-	osd = kzalloc(sizeof(*osd), GFP_NOIO | __GFP_NOFAIL);
+	osd = kzalloc_obj(*osd, GFP_NOIO | __GFP_NOFAIL);
 	osd_init(osd);
 	osd->o_osdc = osdc;
 	osd->o_osd = onum;
@@ -1718,7 +1717,7 @@ static struct ceph_spg_mapping *alloc_spg_mapping(void)
 {
 	struct ceph_spg_mapping *spg;

-	spg = kmalloc(sizeof(*spg), GFP_NOIO);
+	spg = kmalloc_obj(*spg, GFP_NOIO);
 	if (!spg)
 		return NULL;

@@ -1913,7 +1912,7 @@ static struct ceph_osd_backoff *alloc_backoff(void)
 {
 	struct ceph_osd_backoff *backoff;

-	backoff = kzalloc(sizeof(*backoff), GFP_NOIO);
+	backoff = kzalloc_obj(*backoff, GFP_NOIO);
 	if (!backoff)
 		return NULL;

@@ -2806,7 +2805,7 @@ linger_alloc(struct ceph_osd_client *osdc)
 {
 	struct ceph_osd_linger_request *lreq;

-	lreq = kzalloc(sizeof(*lreq), GFP_NOIO);
+	lreq = kzalloc_obj(*lreq, GFP_NOIO);
 	if (!lreq)
 		return NULL;

@@ -2948,7 +2947,7 @@ static struct linger_work *lwork_alloc(struct ceph_osd_linger_request *lreq,
 {
 	struct linger_work *lwork;

-	lwork = kzalloc(sizeof(*lwork), GFP_NOIO);
+	lwork = kzalloc_obj(*lwork, GFP_NOIO);
 	if (!lwork)
 		return NULL;

@@ -4329,7 +4328,7 @@ static int decode_MOSDBackoff(const struct ceph_msg *msg, struct MOSDBackoff *m)
 	ceph_decode_8_safe(&p, end, m->op, e_inval);
 	ceph_decode_64_safe(&p, end, m->id, e_inval);

-	m->begin = kzalloc(sizeof(*m->begin), GFP_NOIO);
+	m->begin = kzalloc_obj(*m->begin, GFP_NOIO);
 	if (!m->begin)
 		return -ENOMEM;

@@ -4339,7 +4338,7 @@ static int decode_MOSDBackoff(const struct ceph_msg *msg, struct MOSDBackoff *m)
 		return ret;
 	}

-	m->end = kzalloc(sizeof(*m->end), GFP_NOIO);
+	m->end = kzalloc_obj(*m->end, GFP_NOIO);
 	if (!m->end) {
 		free_hoid(m->begin);
 		return -ENOMEM;
@@ -5032,7 +5031,7 @@ static int decode_watchers(void **p, void *end,
 		return ret;

 	*num_watchers = ceph_decode_32(p);
-	*watchers = kcalloc(*num_watchers, sizeof(**watchers), GFP_NOIO);
+	*watchers = kzalloc_objs(**watchers, *num_watchers, GFP_NOIO);
 	if (!*watchers)
 		return -ENOMEM;

@@ -5832,9 +5831,8 @@ static int osd_sparse_read(struct ceph_connection *con,
 			if (!sr->sr_extent || count > sr->sr_ext_len) {
 				/* no extent array provided, or too short */
 				kfree(sr->sr_extent);
-				sr->sr_extent = kmalloc_array(count,
-							      sizeof(*sr->sr_extent),
-							      GFP_NOIO);
+				sr->sr_extent = kmalloc_objs(*sr->sr_extent,
+							     count, GFP_NOIO);
 				if (!sr->sr_extent) {
 					pr_err("%s: failed to allocate %u extents\n",
 					       __func__, count);
diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
index 92a44026de29..c89e66d4fcb7 100644
--- a/net/ceph/osdmap.c
+++ b/net/ceph/osdmap.c
@@ -231,7 +231,7 @@ static struct crush_choose_arg_map *alloc_choose_arg_map(void)
 {
 	struct crush_choose_arg_map *arg_map;

-	arg_map = kzalloc(sizeof(*arg_map), GFP_NOIO);
+	arg_map = kzalloc_obj(*arg_map, GFP_NOIO);
 	if (!arg_map)
 		return NULL;

@@ -320,9 +320,8 @@ static int decode_choose_arg(void **p, void *end, struct crush_choose_arg *arg)
 	if (arg->weight_set_size) {
 		u32 i;

-		arg->weight_set = kmalloc_array(arg->weight_set_size,
-						sizeof(*arg->weight_set),
-						GFP_NOIO);
+		arg->weight_set = kmalloc_objs(*arg->weight_set,
+					       arg->weight_set_size, GFP_NOIO);
 		if (!arg->weight_set)
 			return -ENOMEM;

@@ -368,8 +367,8 @@ static int decode_choose_args(void **p, void *end, struct crush_map *c)
 		ceph_decode_64_safe(p, end, arg_map->choose_args_index,
 				    e_inval);
 		arg_map->size = c->max_buckets;
-		arg_map->args = kcalloc(arg_map->size, sizeof(*arg_map->args),
-					GFP_NOIO);
+		arg_map->args = kzalloc_objs(*arg_map->args, arg_map->size,
+					     GFP_NOIO);
 		if (!arg_map->args) {
 			ret = -ENOMEM;
 			goto fail;
@@ -443,7 +442,7 @@ static struct crush_map *crush_decode(void *pbyval, void *end)

 	dout("crush_decode %p to %p len %d\n", *p, end, (int)(end - *p));

-	c = kzalloc(sizeof(*c), GFP_NOFS);
+	c = kzalloc_obj(*c, GFP_NOFS);
 	if (c == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -468,10 +467,10 @@ static struct crush_map *crush_decode(void *pbyval, void *end)
 	c->max_rules = ceph_decode_32(p);
 	c->max_devices = ceph_decode_32(p);

-	c->buckets = kcalloc(c->max_buckets, sizeof(*c->buckets), GFP_NOFS);
+	c->buckets = kzalloc_objs(*c->buckets, c->max_buckets, GFP_NOFS);
 	if (c->buckets == NULL)
 		goto badmem;
-	c->rules = kcalloc(c->max_rules, sizeof(*c->rules), GFP_NOFS);
+	c->rules = kzalloc_objs(*c->rules, c->max_rules, GFP_NOFS);
 	if (c->rules == NULL)
 		goto badmem;

@@ -524,7 +523,7 @@ static struct crush_map *crush_decode(void *pbyval, void *end)
 		dout("crush_decode bucket size %d off %x %p to %p\n",
 		     b->size, (int)(*p-start), *p, end);

-		b->items = kcalloc(b->size, sizeof(__s32), GFP_NOFS);
+		b->items = kzalloc_objs(__s32, b->size, GFP_NOFS);
 		if (b->items == NULL)
 			goto badmem;

@@ -590,7 +589,7 @@ static struct crush_map *crush_decode(void *pbyval, void *end)
 			  / sizeof(struct crush_rule_step))
 			goto bad;
 #endif
-		r = kmalloc(struct_size(r, steps, yes), GFP_NOFS);
+		r = kmalloc_flex(*r, steps, yes, GFP_NOFS);
 		if (r == NULL)
 			goto badmem;
 		dout(" rule %d is at %p\n", i, r);
@@ -1116,7 +1115,7 @@ struct ceph_osdmap *ceph_osdmap_alloc(void)
 {
 	struct ceph_osdmap *map;

-	map = kzalloc(sizeof(*map), GFP_NOIO);
+	map = kzalloc_obj(*map, GFP_NOIO);
 	if (!map)
 		return NULL;

@@ -1343,7 +1342,7 @@ static int __decode_pools(void **p, void *end, struct ceph_osdmap *map,

 		pi = lookup_pg_pool(&map->pg_pools, pool);
 		if (!incremental || !pi) {
-			pi = kzalloc(sizeof(*pi), GFP_NOFS);
+			pi = kzalloc_obj(*pi, GFP_NOFS);
 			if (!pi)
 				return -ENOMEM;

diff --git a/net/ceph/pagelist.c b/net/ceph/pagelist.c
index 5a9c4be5f222..40847d873cff 100644
--- a/net/ceph/pagelist.c
+++ b/net/ceph/pagelist.c
@@ -10,7 +10,7 @@ struct ceph_pagelist *ceph_pagelist_alloc(gfp_t gfp_flags)
 {
 	struct ceph_pagelist *pl;

-	pl = kmalloc(sizeof(*pl), gfp_flags);
+	pl = kmalloc_obj(*pl, gfp_flags);
 	if (!pl)
 		return NULL;

diff --git a/net/ceph/pagevec.c b/net/ceph/pagevec.c
index 4509757d8b3b..858359873c4d 100644
--- a/net/ceph/pagevec.c
+++ b/net/ceph/pagevec.c
@@ -41,7 +41,7 @@ struct page **ceph_alloc_page_vector(int num_pages, gfp_t flags)
 	struct page **pages;
 	int i;

-	pages = kmalloc_array(num_pages, sizeof(*pages), flags);
+	pages = kmalloc_objs(*pages, num_pages, flags);
 	if (!pages)
 		return ERR_PTR(-ENOMEM);
 	for (i = 0; i < num_pages; i++) {
diff --git a/net/ceph/striper.c b/net/ceph/striper.c
index 3b3fa75d1189..2b8288858079 100644
--- a/net/ceph/striper.c
+++ b/net/ceph/striper.c
@@ -230,8 +230,8 @@ int ceph_extent_to_file(struct ceph_file_layout *l,

 	*num_file_extents = DIV_ROUND_UP_ULL(objoff + objlen, l->stripe_unit) -
 				     DIV_ROUND_DOWN_ULL(objoff, l->stripe_unit);
-	*file_extents = kmalloc_array(*num_file_extents, sizeof(**file_extents),
-				      GFP_NOIO);
+	*file_extents = kmalloc_objs(**file_extents, *num_file_extents,
+				     GFP_NOIO);
 	if (!*file_extents)
 		return -ENOMEM;

diff --git a/net/core/bpf_sk_storage.c b/net/core/bpf_sk_storage.c
index 1eb3e060994e..8165d606bfd4 100644
--- a/net/core/bpf_sk_storage.c
+++ b/net/core/bpf_sk_storage.c
@@ -500,7 +500,7 @@ bpf_sk_storage_diag_alloc(const struct nlattr *nla_stgs)
 		nr_maps++;
 	}

-	diag = kzalloc(struct_size(diag, maps, nr_maps), GFP_KERNEL);
+	diag = kzalloc_flex(*diag, maps, nr_maps, GFP_KERNEL);
 	if (!diag)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/core/dev.c b/net/core/dev.c
index 096b3ff13f6b..525cf5952101 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -273,7 +273,7 @@ static struct netdev_name_node *netdev_name_node_alloc(struct net_device *dev,
 {
 	struct netdev_name_node *name_node;

-	name_node = kmalloc(sizeof(*name_node), GFP_KERNEL);
+	name_node = kmalloc_obj(*name_node, GFP_KERNEL);
 	if (!name_node)
 		return NULL;
 	INIT_HLIST_NODE(&name_node->hlist);
@@ -6510,8 +6510,7 @@ struct flush_backlogs {

 static struct flush_backlogs *flush_backlogs_alloc(void)
 {
-	return kmalloc(struct_size_t(struct flush_backlogs, w, nr_cpu_ids),
-		       GFP_KERNEL);
+	return kmalloc_flex(struct flush_backlogs, w, nr_cpu_ids, GFP_KERNEL);
 }

 static struct flush_backlogs *flush_backlogs_fallback;
@@ -8694,7 +8693,7 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,
 		return 0;
 	}

-	adj = kmalloc(sizeof(*adj), GFP_KERNEL);
+	adj = kmalloc_obj(*adj, GFP_KERNEL);
 	if (!adj)
 		return -ENOMEM;

@@ -9134,8 +9133,8 @@ static int netdev_offload_xstats_enable_l3(struct net_device *dev,
 	int err;
 	int rc;

-	dev->offload_xstats_l3 = kzalloc(sizeof(*dev->offload_xstats_l3),
-					 GFP_KERNEL);
+	dev->offload_xstats_l3 = kzalloc_obj(*dev->offload_xstats_l3,
+					     GFP_KERNEL);
 	if (!dev->offload_xstats_l3)
 		return -ENOMEM;

@@ -10660,7 +10659,7 @@ int bpf_xdp_link_attach(const union bpf_attr *attr, struct bpf_prog *prog)
 		return -EINVAL;
 	}

-	link = kzalloc(sizeof(*link), GFP_USER);
+	link = kzalloc_obj(*link, GFP_USER);
 	if (!link) {
 		err = -ENOMEM;
 		goto unlock;
@@ -11941,7 +11940,7 @@ struct netdev_queue *dev_ingress_queue_create(struct net_device *dev)
 #ifdef CONFIG_NET_CLS_ACT
 	if (queue)
 		return queue;
-	queue = kzalloc(sizeof(*queue), GFP_KERNEL);
+	queue = kzalloc_obj(*queue, GFP_KERNEL);
 	if (!queue)
 		return NULL;
 	netdev_init_one_queue(dev, queue, NULL);
@@ -12016,8 +12015,8 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,

 	maxqs = max(txqs, rxqs);

-	dev = kvzalloc(struct_size(dev, priv, sizeof_priv),
-		       GFP_KERNEL_ACCOUNT | __GFP_RETRY_MAYFAIL);
+	dev = kvzalloc_flex(*dev, priv, sizeof_priv,
+			    GFP_KERNEL_ACCOUNT | __GFP_RETRY_MAYFAIL);
 	if (!dev)
 		return NULL;

@@ -12088,11 +12087,11 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
 	dev->real_num_rx_queues = rxqs;
 	if (netif_alloc_rx_queues(dev))
 		goto free_all;
-	dev->ethtool = kzalloc(sizeof(*dev->ethtool), GFP_KERNEL_ACCOUNT);
+	dev->ethtool = kzalloc_obj(*dev->ethtool, GFP_KERNEL_ACCOUNT);
 	if (!dev->ethtool)
 		goto free_all;

-	dev->cfg = kzalloc(sizeof(*dev->cfg), GFP_KERNEL_ACCOUNT);
+	dev->cfg = kzalloc_obj(*dev->cfg, GFP_KERNEL_ACCOUNT);
 	if (!dev->cfg)
 		goto free_all;
 	dev->cfg_pending = dev->cfg;
@@ -12858,7 +12857,7 @@ static struct hlist_head * __net_init netdev_create_hash(void)
 	int i;
 	struct hlist_head *hash;

-	hash = kmalloc_array(NETDEV_HASHENTRIES, sizeof(*hash), GFP_KERNEL);
+	hash = kmalloc_objs(*hash, NETDEV_HASHENTRIES, GFP_KERNEL);
 	if (hash != NULL)
 		for (i = 0; i < NETDEV_HASHENTRIES; i++)
 			INIT_HLIST_HEAD(&hash[i]);
diff --git a/net/core/devmem.c b/net/core/devmem.c
index 63f093f7d2b2..16a1949dbed1 100644
--- a/net/core/devmem.c
+++ b/net/core/devmem.c
@@ -241,9 +241,9 @@ net_devmem_bind_dmabuf(struct net_device *dev,
 	}

 	if (direction == DMA_TO_DEVICE) {
-		binding->tx_vec = kvmalloc_array(dmabuf->size / PAGE_SIZE,
-						 sizeof(struct net_iov *),
-						 GFP_KERNEL);
+		binding->tx_vec = kvmalloc_objs(struct net_iov *,
+						dmabuf->size / PAGE_SIZE,
+						GFP_KERNEL);
 		if (!binding->tx_vec) {
 			err = -ENOMEM;
 			goto err_unmap;
@@ -289,9 +289,9 @@ net_devmem_bind_dmabuf(struct net_device *dev,
 			goto err_free_chunks;
 		}

-		owner->area.niovs = kvmalloc_array(owner->area.num_niovs,
-						   sizeof(*owner->area.niovs),
-						   GFP_KERNEL);
+		owner->area.niovs = kvmalloc_objs(*owner->area.niovs,
+						  owner->area.num_niovs,
+						  GFP_KERNEL);
 		if (!owner->area.niovs) {
 			err = -ENOMEM;
 			goto err_free_chunks;
diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c
index 60d31c2feed3..99f9d4dfb866 100644
--- a/net/core/drop_monitor.c
+++ b/net/core/drop_monitor.c
@@ -306,8 +306,8 @@ net_dm_hw_reset_per_cpu_data(struct per_cpu_dm_data *hw_data)
 	struct net_dm_hw_entries *hw_entries;
 	unsigned long flags;

-	hw_entries = kzalloc(struct_size(hw_entries, entries, dm_hit_limit),
-			     GFP_KERNEL);
+	hw_entries = kzalloc_flex(*hw_entries, entries, dm_hit_limit,
+				  GFP_KERNEL);
 	if (!hw_entries) {
 		/* If the memory allocation failed, we try to perform another
 		 * allocation in 1/10 second. Otherwise, the probe function
@@ -856,7 +856,7 @@ net_dm_hw_metadata_copy(const struct devlink_trap_metadata *metadata)
 	const char *trap_group_name;
 	const char *trap_name;

-	hw_metadata = kzalloc(sizeof(*hw_metadata), GFP_ATOMIC);
+	hw_metadata = kzalloc_obj(*hw_metadata, GFP_ATOMIC);
 	if (!hw_metadata)
 		return NULL;

@@ -1583,7 +1583,7 @@ static int dropmon_net_event(struct notifier_block *ev_block,
 	case NETDEV_REGISTER:
 		if (WARN_ON_ONCE(rtnl_dereference(dev->dm_private)))
 			break;
-		stat = kzalloc(sizeof(*stat), GFP_KERNEL);
+		stat = kzalloc_obj(*stat, GFP_KERNEL);
 		if (!stat)
 			break;

diff --git a/net/core/dst.c b/net/core/dst.c
index 1dae26c51ebe..092861133023 100644
--- a/net/core/dst.c
+++ b/net/core/dst.c
@@ -191,7 +191,7 @@ EXPORT_SYMBOL(dst_release_immediate);

 u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old)
 {
-	struct dst_metrics *p = kmalloc(sizeof(*p), GFP_ATOMIC);
+	struct dst_metrics *p = kmalloc_obj(*p, GFP_ATOMIC);

 	if (p) {
 		struct dst_metrics *old_p = (struct dst_metrics *)__DST_METRICS_PTR(old);
@@ -295,8 +295,7 @@ struct metadata_dst *metadata_dst_alloc(u8 optslen, enum metadata_type type,
 {
 	struct metadata_dst *md_dst;

-	md_dst = kmalloc(struct_size(md_dst, u.tun_info.options, optslen),
-			 flags);
+	md_dst = kmalloc_flex(*md_dst, u.tun_info.options, optslen, flags);
 	if (!md_dst)
 		return NULL;

diff --git a/net/core/failover.c b/net/core/failover.c
index 2a140b3ea669..fcc04e6995d0 100644
--- a/net/core/failover.c
+++ b/net/core/failover.c
@@ -247,7 +247,7 @@ struct failover *failover_register(struct net_device *dev,
 	if (dev->type != ARPHRD_ETHER)
 		return ERR_PTR(-EINVAL);

-	failover = kzalloc(sizeof(*failover), GFP_KERNEL);
+	failover = kzalloc_obj(*failover, GFP_KERNEL);
 	if (!failover)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/core/filter.c b/net/core/filter.c
index ba019ded773d..6957d3449f2c 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -600,8 +600,7 @@ static int bpf_convert_filter(struct sock_filter *prog, int len,

 	if (new_prog) {
 		first_insn = new_prog->insnsi;
-		addrs = kcalloc(len, sizeof(*addrs),
-				GFP_KERNEL | __GFP_NOWARN);
+		addrs = kzalloc_objs(*addrs, len, GFP_KERNEL | __GFP_NOWARN);
 		if (!addrs)
 			return -ENOMEM;
 	}
@@ -1162,7 +1161,7 @@ static int bpf_prog_store_orig_filter(struct bpf_prog *fp,
 	unsigned int fsize = bpf_classic_proglen(fprog);
 	struct sock_fprog_kern *fkprog;

-	fp->orig_prog = kmalloc(sizeof(*fkprog), GFP_KERNEL);
+	fp->orig_prog = kmalloc_obj(*fkprog, GFP_KERNEL);
 	if (!fp->orig_prog)
 		return -ENOMEM;

@@ -1482,7 +1481,7 @@ static int __sk_attach_prog(struct bpf_prog *prog, struct sock *sk)
 {
 	struct sk_filter *fp, *old_fp;

-	fp = kmalloc(sizeof(*fp), GFP_KERNEL);
+	fp = kmalloc_obj(*fp, GFP_KERNEL);
 	if (!fp)
 		return -ENOMEM;

diff --git a/net/core/flow_offload.c b/net/core/flow_offload.c
index bc5169482710..630f94e2c2c1 100644
--- a/net/core/flow_offload.c
+++ b/net/core/flow_offload.c
@@ -12,8 +12,7 @@ struct flow_rule *flow_rule_alloc(unsigned int num_actions)
 	struct flow_rule *rule;
 	int i;

-	rule = kzalloc(struct_size(rule, action.entries, num_actions),
-		       GFP_KERNEL);
+	rule = kzalloc_flex(*rule, action.entries, num_actions, GFP_KERNEL);
 	if (!rule)
 		return NULL;

@@ -33,8 +32,8 @@ struct flow_offload_action *offload_action_alloc(unsigned int num_actions)
 	struct flow_offload_action *fl_action;
 	int i;

-	fl_action = kzalloc(struct_size(fl_action, action.entries, num_actions),
-			    GFP_KERNEL);
+	fl_action = kzalloc_flex(*fl_action, action.entries, num_actions,
+				 GFP_KERNEL);
 	if (!fl_action)
 		return NULL;

@@ -264,7 +263,7 @@ struct flow_block_cb *flow_block_cb_alloc(flow_setup_cb_t *cb,
 {
 	struct flow_block_cb *block_cb;

-	block_cb = kzalloc(sizeof(*block_cb), GFP_KERNEL);
+	block_cb = kzalloc_obj(*block_cb, GFP_KERNEL);
 	if (!block_cb)
 		return ERR_PTR(-ENOMEM);

@@ -391,7 +390,7 @@ static struct flow_indr_dev *flow_indr_dev_alloc(flow_indr_block_bind_cb_t *cb,
 {
 	struct flow_indr_dev *indr_dev;

-	indr_dev = kmalloc(sizeof(*indr_dev), GFP_KERNEL);
+	indr_dev = kmalloc_obj(*indr_dev, GFP_KERNEL);
 	if (!indr_dev)
 		return NULL;

@@ -571,7 +570,7 @@ static int indir_dev_add(void *data, struct net_device *dev, struct Qdisc *sch,
 	if (info)
 		return -EEXIST;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/net/core/gen_estimator.c b/net/core/gen_estimator.c
index f112156db587..64d0d55fa2b2 100644
--- a/net/core/gen_estimator.c
+++ b/net/core/gen_estimator.c
@@ -154,7 +154,7 @@ int gen_new_estimator(struct gnet_stats_basic_sync *bstats,
 	if (parm->ewma_log == 0 || parm->ewma_log >= 31)
 		return -EINVAL;

-	est = kzalloc(sizeof(*est), GFP_KERNEL);
+	est = kzalloc_obj(*est, GFP_KERNEL);
 	if (!est)
 		return -ENOBUFS;

diff --git a/net/core/gro_cells.c b/net/core/gro_cells.c
index a725d21159a6..1b84385c04bd 100644
--- a/net/core/gro_cells.c
+++ b/net/core/gro_cells.c
@@ -132,7 +132,7 @@ void gro_cells_destroy(struct gro_cells *gcells)
 	 * because we might be called from cleanup_net(), and we
 	 * definitely do not want to block this critical task.
 	 */
-	defer = kmalloc(sizeof(*defer), GFP_KERNEL | __GFP_NOWARN);
+	defer = kmalloc_obj(*defer, GFP_KERNEL | __GFP_NOWARN);
 	if (likely(defer)) {
 		defer->ptr = gcells->cells;
 		call_rcu(&defer->rcu, percpu_free_defer_callback);
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index e0897eb41c8d..a95cfe77f7f0 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -562,7 +562,7 @@ static struct neigh_hash_table *neigh_hash_alloc(unsigned int shift)
 	struct neigh_hash_table *ret;
 	int i;

-	ret = kmalloc(sizeof(*ret), GFP_ATOMIC);
+	ret = kmalloc_obj(*ret, GFP_ATOMIC);
 	if (!ret)
 		return NULL;

diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index aef44e617361..7a040a9233e7 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -492,7 +492,7 @@ static struct net *net_alloc(void)
 		goto out_free;

 #ifdef CONFIG_KEYS
-	net->key_domain = kzalloc(sizeof(struct key_tag), GFP_KERNEL);
+	net->key_domain = kzalloc_obj(struct key_tag, GFP_KERNEL);
 	if (!net->key_domain)
 		goto out_free_2;
 	refcount_set(&net->key_domain->usage, 1);
diff --git a/net/core/netclassid_cgroup.c b/net/core/netclassid_cgroup.c
index db9a5354f9de..9267880a0a17 100644
--- a/net/core/netclassid_cgroup.c
+++ b/net/core/netclassid_cgroup.c
@@ -32,7 +32,7 @@ cgrp_css_alloc(struct cgroup_subsys_state *parent_css)
 {
 	struct cgroup_cls_state *cs;

-	cs = kzalloc(sizeof(*cs), GFP_KERNEL);
+	cs = kzalloc_obj(*cs, GFP_KERNEL);
 	if (!cs)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index 09f72f10813c..70e458893ea5 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -565,7 +565,7 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev)

 	npinfo = rtnl_dereference(ndev->npinfo);
 	if (!npinfo) {
-		npinfo = kmalloc(sizeof(*npinfo), GFP_KERNEL);
+		npinfo = kmalloc_obj(*npinfo, GFP_KERNEL);
 		if (!npinfo) {
 			err = -ENOMEM;
 			goto out;
diff --git a/net/core/netprio_cgroup.c b/net/core/netprio_cgroup.c
index 8456dfbe2eb4..fb3cd2886e1f 100644
--- a/net/core/netprio_cgroup.c
+++ b/net/core/netprio_cgroup.c
@@ -135,7 +135,7 @@ cgrp_css_alloc(struct cgroup_subsys_state *parent_css)
 {
 	struct cgroup_subsys_state *css;

-	css = kzalloc(sizeof(*css), GFP_KERNEL);
+	css = kzalloc_obj(*css, GFP_KERNEL);
 	if (!css)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index b1ed55141d8a..da268fc45356 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -414,7 +414,7 @@ static int rtnl_register_internal(struct module *owner,
 		if (!link)
 			goto unlock;
 	} else {
-		link = kzalloc(sizeof(*link), GFP_KERNEL);
+		link = kzalloc_obj(*link, GFP_KERNEL);
 		if (!link)
 			goto unlock;
 	}
@@ -3969,7 +3969,7 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
 	int ops_srcu_index;
 	int ret;

-	tbs = kmalloc(sizeof(*tbs), GFP_KERNEL);
+	tbs = kmalloc_obj(*tbs, GFP_KERNEL);
 	if (!tbs)
 		return -ENOMEM;

diff --git a/net/core/scm.c b/net/core/scm.c
index cd87f66671aa..a29aa8fb8065 100644
--- a/net/core/scm.c
+++ b/net/core/scm.c
@@ -83,7 +83,7 @@ static int scm_fp_copy(struct cmsghdr *cmsg, struct scm_fp_list **fplp)

 	if (!fpl)
 	{
-		fpl = kmalloc(sizeof(struct scm_fp_list), GFP_KERNEL_ACCOUNT);
+		fpl = kmalloc_obj(struct scm_fp_list, GFP_KERNEL_ACCOUNT);
 		if (!fpl)
 			return -ENOMEM;
 		*fplp = fpl;
diff --git a/net/core/selftests.c b/net/core/selftests.c
index 8b81feb82c4a..248112bd51a8 100644
--- a/net/core/selftests.c
+++ b/net/core/selftests.c
@@ -237,7 +237,7 @@ static int __net_test_loopback(struct net_device *ndev,
 	struct sk_buff *skb = NULL;
 	int ret = 0;

-	tpriv = kzalloc(sizeof(*tpriv), GFP_KERNEL);
+	tpriv = kzalloc_obj(*tpriv, GFP_KERNEL);
 	if (!tpriv)
 		return -ENOMEM;

diff --git a/net/core/skmsg.c b/net/core/skmsg.c
index ddde93dd8bc6..2e26174c9919 100644
--- a/net/core/skmsg.c
+++ b/net/core/skmsg.c
@@ -522,7 +522,7 @@ static struct sk_msg *alloc_sk_msg(gfp_t gfp)
 {
 	struct sk_msg *msg;

-	msg = kzalloc(sizeof(*msg), gfp | __GFP_NOWARN);
+	msg = kzalloc_obj(*msg, gfp | __GFP_NOWARN);
 	if (unlikely(!msg))
 		return NULL;
 	sg_init_marker(msg->sg.data, NR_MSG_FRAG_IDS);
diff --git a/net/core/sock.c b/net/core/sock.c
index 693e6d80f501..b62e509e06d9 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1097,7 +1097,7 @@ sock_devmem_dontneed(struct sock *sk, sockptr_t optval, unsigned int optlen)
 		return -EINVAL;

 	num_tokens = optlen / sizeof(*tokens);
-	tokens = kvmalloc_array(num_tokens, sizeof(*tokens), GFP_KERNEL);
+	tokens = kvmalloc_objs(*tokens, num_tokens, GFP_KERNEL);
 	if (!tokens)
 		return -ENOMEM;

diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c
index 026ce9bd9e5e..c83335c62360 100644
--- a/net/core/sock_diag.c
+++ b/net/core/sock_diag.c
@@ -177,7 +177,7 @@ void sock_diag_broadcast_destroy(struct sock *sk)
 {
 	/* Note, this function is often called from an interrupt context. */
 	struct broadcast_sk *bsk =
-		kmalloc(sizeof(struct broadcast_sk), GFP_ATOMIC);
+		kmalloc_obj(struct broadcast_sk, GFP_ATOMIC);
 	if (!bsk)
 		return sk_destruct(sk);
 	bsk->sk = sk;
diff --git a/net/core/sock_map.c b/net/core/sock_map.c
index 5947b38e4f8b..b0e96337a269 100644
--- a/net/core/sock_map.c
+++ b/net/core/sock_map.c
@@ -1858,7 +1858,7 @@ int sock_map_link_create(const union bpf_attr *attr, struct bpf_prog *prog)
 		goto out;
 	}

-	sockmap_link = kzalloc(sizeof(*sockmap_link), GFP_USER);
+	sockmap_link = kzalloc_obj(*sockmap_link, GFP_USER);
 	if (!sockmap_link) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/net/core/sock_reuseport.c b/net/core/sock_reuseport.c
index 4211710393a8..29948cb44b7d 100644
--- a/net/core/sock_reuseport.c
+++ b/net/core/sock_reuseport.c
@@ -175,7 +175,7 @@ static struct sock_reuseport *__reuseport_alloc(unsigned int max_socks)
 {
 	struct sock_reuseport *reuse;

-	reuse = kzalloc(struct_size(reuse, socks, max_socks), GFP_ATOMIC);
+	reuse = kzalloc_flex(*reuse, socks, max_socks, GFP_ATOMIC);
 	if (!reuse)
 		return NULL;

diff --git a/net/core/xdp.c b/net/core/xdp.c
index fee6d080ee85..8c65d7dafd89 100644
--- a/net/core/xdp.c
+++ b/net/core/xdp.c
@@ -214,7 +214,7 @@ static int __mem_id_init_hash_table(void)
 	if (unlikely(mem_id_init))
 		return 0;

-	rht = kzalloc(sizeof(*rht), GFP_KERNEL);
+	rht = kzalloc_obj(*rht, GFP_KERNEL);
 	if (!rht)
 		return -ENOMEM;

@@ -297,7 +297,7 @@ static struct xdp_mem_allocator *__xdp_reg_mem_model(struct xdp_mem_info *mem,
 			return ERR_PTR(ret);
 	}

-	xdp_alloc = kzalloc(sizeof(*xdp_alloc), gfp);
+	xdp_alloc = kzalloc_obj(*xdp_alloc, gfp);
 	if (!xdp_alloc)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c
index 03eb1d941fca..ff2198133213 100644
--- a/net/dcb/dcbnl.c
+++ b/net/dcb/dcbnl.c
@@ -1021,8 +1021,7 @@ static int dcbnl_build_peer_app(struct net_device *netdev, struct sk_buff* skb,
 	 */
 	err = ops->peer_getappinfo(netdev, &info, &app_count);
 	if (!err && app_count) {
-		table = kmalloc_array(app_count, sizeof(struct dcb_app),
-				      GFP_KERNEL);
+		table = kmalloc_objs(struct dcb_app, app_count, GFP_KERNEL);
 		if (!table)
 			return -ENOMEM;

@@ -2004,7 +2003,7 @@ static int dcb_app_add(struct list_head *list, const struct dcb_app *app,
 {
 	struct dcb_app_type *entry;

-	entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kmalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return -ENOMEM;

diff --git a/net/devlink/core.c b/net/devlink/core.c
index da56e2b8afc1..44584f3613ca 100644
--- a/net/devlink/core.c
+++ b/net/devlink/core.c
@@ -111,7 +111,7 @@ static struct devlink_rel *devlink_rel_alloc(void)
 	static u32 next;
 	int err;

-	rel = kzalloc(sizeof(*rel), GFP_KERNEL);
+	rel = kzalloc_obj(*rel, GFP_KERNEL);
 	if (!rel)
 		return ERR_PTR(-ENOMEM);

@@ -418,7 +418,7 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops,
 	if (!devlink_reload_actions_valid(ops))
 		return NULL;

-	devlink = kvzalloc(struct_size(devlink, priv, priv_size), GFP_KERNEL);
+	devlink = kvzalloc_flex(*devlink, priv, priv_size, GFP_KERNEL);
 	if (!devlink)
 		return NULL;

diff --git a/net/devlink/dpipe.c b/net/devlink/dpipe.c
index e55701b007f0..3b86dc25e7f2 100644
--- a/net/devlink/dpipe.c
+++ b/net/devlink/dpipe.c
@@ -851,7 +851,7 @@ int devl_dpipe_table_register(struct devlink *devlink,
 				     devlink))
 		return -EEXIST;

-	table = kzalloc(sizeof(*table), GFP_KERNEL);
+	table = kzalloc_obj(*table, GFP_KERNEL);
 	if (!table)
 		return -ENOMEM;

diff --git a/net/devlink/health.c b/net/devlink/health.c
index 136a67c36a20..0578f7b460f5 100644
--- a/net/devlink/health.c
+++ b/net/devlink/health.c
@@ -32,7 +32,7 @@ static struct devlink_fmsg *devlink_fmsg_alloc(void)
 {
 	struct devlink_fmsg *fmsg;

-	fmsg = kzalloc(sizeof(*fmsg), GFP_KERNEL);
+	fmsg = kzalloc_obj(*fmsg, GFP_KERNEL);
 	if (!fmsg)
 		return NULL;

@@ -119,7 +119,7 @@ __devlink_health_reporter_create(struct devlink *devlink,
 	if (WARN_ON(ops->default_burst_period && !ops->default_graceful_period))
 		return ERR_PTR(-EINVAL);

-	reporter = kzalloc(sizeof(*reporter), GFP_KERNEL);
+	reporter = kzalloc_obj(*reporter, GFP_KERNEL);
 	if (!reporter)
 		return ERR_PTR(-ENOMEM);

@@ -738,7 +738,7 @@ static void devlink_fmsg_nest_common(struct devlink_fmsg *fmsg, int attrtype)
 	if (fmsg->err)
 		return;

-	item = kzalloc(sizeof(*item), GFP_KERNEL);
+	item = kzalloc_obj(*item, GFP_KERNEL);
 	if (!item) {
 		fmsg->err = -ENOMEM;
 		return;
diff --git a/net/devlink/linecard.c b/net/devlink/linecard.c
index 67f70a621d27..110f1347b9c6 100644
--- a/net/devlink/linecard.c
+++ b/net/devlink/linecard.c
@@ -404,8 +404,7 @@ static int devlink_linecard_types_init(struct devlink_linecard *linecard)
 	int i;

 	count = linecard->ops->types_count(linecard, linecard->priv);
-	linecard->types = kmalloc_array(count, sizeof(*linecard_type),
-					GFP_KERNEL);
+	linecard->types = kmalloc_objs(*linecard_type, count, GFP_KERNEL);
 	if (!linecard->types)
 		return -ENOMEM;
 	linecard->types_count = count;
@@ -451,7 +450,7 @@ devl_linecard_create(struct devlink *devlink, unsigned int linecard_index,
 	if (devlink_linecard_index_exists(devlink, linecard_index))
 		return ERR_PTR(-EEXIST);

-	linecard = kzalloc(sizeof(*linecard), GFP_KERNEL);
+	linecard = kzalloc_obj(*linecard, GFP_KERNEL);
 	if (!linecard)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/devlink/param.c b/net/devlink/param.c
index e0ea93eded43..74adb0fdb5f7 100644
--- a/net/devlink/param.c
+++ b/net/devlink/param.c
@@ -718,7 +718,7 @@ static int devlink_param_register(struct devlink *devlink,
 	else
 		WARN_ON(!param->get || !param->set);

-	param_item = kzalloc(sizeof(*param_item), GFP_KERNEL);
+	param_item = kzalloc_obj(*param_item, GFP_KERNEL);
 	if (!param_item)
 		return -ENOMEM;

diff --git a/net/devlink/rate.c b/net/devlink/rate.c
index 0d68b5c477dc..8d8a688ad140 100644
--- a/net/devlink/rate.c
+++ b/net/devlink/rate.c
@@ -627,7 +627,7 @@ int devlink_nl_rate_new_doit(struct sk_buff *skb, struct genl_info *info)
 	else if (rate_node == ERR_PTR(-EINVAL))
 		return -EINVAL;

-	rate_node = kzalloc(sizeof(*rate_node), GFP_KERNEL);
+	rate_node = kzalloc_obj(*rate_node, GFP_KERNEL);
 	if (!rate_node)
 		return -ENOMEM;

@@ -721,7 +721,7 @@ devl_rate_node_create(struct devlink *devlink, void *priv, char *node_name,
 	if (!IS_ERR(rate_node))
 		return ERR_PTR(-EEXIST);

-	rate_node = kzalloc(sizeof(*rate_node), GFP_KERNEL);
+	rate_node = kzalloc_obj(*rate_node, GFP_KERNEL);
 	if (!rate_node)
 		return ERR_PTR(-ENOMEM);

@@ -766,7 +766,7 @@ int devl_rate_leaf_create(struct devlink_port *devlink_port, void *priv,
 	if (WARN_ON(devlink_port->devlink_rate))
 		return -EBUSY;

-	devlink_rate = kzalloc(sizeof(*devlink_rate), GFP_KERNEL);
+	devlink_rate = kzalloc_obj(*devlink_rate, GFP_KERNEL);
 	if (!devlink_rate)
 		return -ENOMEM;

diff --git a/net/devlink/region.c b/net/devlink/region.c
index d6e5805cf3a0..654e3766710f 100644
--- a/net/devlink/region.c
+++ b/net/devlink/region.c
@@ -428,7 +428,7 @@ __devlink_region_snapshot_create(struct devlink_region *region,
 	if (devlink_region_snapshot_get_by_id(region, snapshot_id))
 		return -EEXIST;

-	snapshot = kzalloc(sizeof(*snapshot), GFP_KERNEL);
+	snapshot = kzalloc_obj(*snapshot, GFP_KERNEL);
 	if (!snapshot)
 		return -ENOMEM;

@@ -1055,7 +1055,7 @@ struct devlink_region *devl_region_create(struct devlink *devlink,
 	if (devlink_region_get_by_name(devlink, ops->name))
 		return ERR_PTR(-EEXIST);

-	region = kzalloc(sizeof(*region), GFP_KERNEL);
+	region = kzalloc_obj(*region, GFP_KERNEL);
 	if (!region)
 		return ERR_PTR(-ENOMEM);

@@ -1128,7 +1128,7 @@ devlink_port_region_create(struct devlink_port *port,
 		goto unlock;
 	}

-	region = kzalloc(sizeof(*region), GFP_KERNEL);
+	region = kzalloc_obj(*region, GFP_KERNEL);
 	if (!region) {
 		err = -ENOMEM;
 		goto unlock;
diff --git a/net/devlink/resource.c b/net/devlink/resource.c
index 2d6324f3d91f..aa3621c28a00 100644
--- a/net/devlink/resource.c
+++ b/net/devlink/resource.c
@@ -347,7 +347,7 @@ int devl_resource_register(struct devlink *devlink,
 	if (resource)
 		return -EEXIST;

-	resource = kzalloc(sizeof(*resource), GFP_KERNEL);
+	resource = kzalloc_obj(*resource, GFP_KERNEL);
 	if (!resource)
 		return -ENOMEM;

diff --git a/net/devlink/sb.c b/net/devlink/sb.c
index 0a76bb32502b..bcfeed079433 100644
--- a/net/devlink/sb.c
+++ b/net/devlink/sb.c
@@ -943,7 +943,7 @@ int devl_sb_register(struct devlink *devlink, unsigned int sb_index,
 	if (devlink_sb_index_exists(devlink, sb_index))
 		return -EEXIST;

-	devlink_sb = kzalloc(sizeof(*devlink_sb), GFP_KERNEL);
+	devlink_sb = kzalloc_obj(*devlink_sb, GFP_KERNEL);
 	if (!devlink_sb)
 		return -ENOMEM;
 	devlink_sb->index = sb_index;
diff --git a/net/devlink/trap.c b/net/devlink/trap.c
index f36087f90db5..e4255c0a6a30 100644
--- a/net/devlink/trap.c
+++ b/net/devlink/trap.c
@@ -1271,7 +1271,7 @@ devlink_trap_register(struct devlink *devlink,
 	if (devlink_trap_item_lookup(devlink, trap->name))
 		return -EEXIST;

-	trap_item = kzalloc(sizeof(*trap_item), GFP_KERNEL);
+	trap_item = kzalloc_obj(*trap_item, GFP_KERNEL);
 	if (!trap_item)
 		return -ENOMEM;

@@ -1545,7 +1545,7 @@ devlink_trap_group_register(struct devlink *devlink,
 	if (devlink_trap_group_item_lookup(devlink, group->name))
 		return -EEXIST;

-	group_item = kzalloc(sizeof(*group_item), GFP_KERNEL);
+	group_item = kzalloc_obj(*group_item, GFP_KERNEL);
 	if (!group_item)
 		return -ENOMEM;

@@ -1751,7 +1751,7 @@ devlink_trap_policer_register(struct devlink *devlink,
 	if (devlink_trap_policer_item_lookup(devlink, policer->id))
 		return -EEXIST;

-	policer_item = kzalloc(sizeof(*policer_item), GFP_KERNEL);
+	policer_item = kzalloc_obj(*policer_item, GFP_KERNEL);
 	if (!policer_item)
 		return -ENOMEM;

diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index 35ce3941fae3..b0ae980ca684 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -213,7 +213,7 @@ static struct dsa_switch_tree *dsa_tree_alloc(int index)
 {
 	struct dsa_switch_tree *dst;

-	dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+	dst = kzalloc_obj(*dst, GFP_KERNEL);
 	if (!dst)
 		return NULL;

@@ -298,7 +298,7 @@ static struct dsa_link *dsa_link_touch(struct dsa_port *dp,
 		if (dl->dp == dp && dl->link_dp == link_dp)
 			return dl;

-	dl = kzalloc(sizeof(*dl), GFP_KERNEL);
+	dl = kzalloc_obj(*dl, GFP_KERNEL);
 	if (!dl)
 		return NULL;

@@ -844,7 +844,7 @@ static int dsa_tree_setup_lags(struct dsa_switch_tree *dst)
 	if (!len)
 		return 0;

-	dst->lags = kcalloc(len, sizeof(*dst->lags), GFP_KERNEL);
+	dst->lags = kzalloc_objs(*dst->lags, len, GFP_KERNEL);
 	if (!dst->lags)
 		return -ENOMEM;

@@ -1092,7 +1092,7 @@ static struct dsa_port *dsa_port_touch(struct dsa_switch *ds, int index)
 		if (dp->index == index)
 			return dp;

-	dp = kzalloc(sizeof(*dp), GFP_KERNEL);
+	dp = kzalloc_obj(*dp, GFP_KERNEL);
 	if (!dp)
 		return NULL;

diff --git a/net/dsa/port.c b/net/dsa/port.c
index ca3a7f52229b..4da911edc512 100644
--- a/net/dsa/port.c
+++ b/net/dsa/port.c
@@ -431,7 +431,7 @@ static int dsa_port_bridge_create(struct dsa_port *dp,
 		return 0;
 	}

-	bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
+	bridge = kzalloc_obj(*bridge, GFP_KERNEL);
 	if (!bridge)
 		return -ENOMEM;

@@ -617,7 +617,7 @@ static int dsa_port_lag_create(struct dsa_port *dp,
 		return 0;
 	}

-	lag = kzalloc(sizeof(*lag), GFP_KERNEL);
+	lag = kzalloc_obj(*lag, GFP_KERNEL);
 	if (!lag)
 		return -ENOMEM;

diff --git a/net/dsa/switch.c b/net/dsa/switch.c
index 3d2feeea897b..e00997977c93 100644
--- a/net/dsa/switch.c
+++ b/net/dsa/switch.c
@@ -182,7 +182,7 @@ static int dsa_port_do_mdb_add(struct dsa_port *dp,
 		goto out;
 	}

-	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	a = kzalloc_obj(*a, GFP_KERNEL);
 	if (!a) {
 		err = -ENOMEM;
 		goto out;
@@ -280,7 +280,7 @@ static int dsa_port_do_fdb_add(struct dsa_port *dp, const unsigned char *addr,
 		goto out;
 	}

-	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	a = kzalloc_obj(*a, GFP_KERNEL);
 	if (!a) {
 		err = -ENOMEM;
 		goto out;
@@ -368,7 +368,7 @@ static int dsa_switch_do_lag_fdb_add(struct dsa_switch *ds, struct dsa_lag *lag,
 		goto out;
 	}

-	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	a = kzalloc_obj(*a, GFP_KERNEL);
 	if (!a) {
 		err = -ENOMEM;
 		goto out;
@@ -719,7 +719,7 @@ static int dsa_port_do_vlan_add(struct dsa_port *dp,
 		goto out;
 	}

-	v = kzalloc(sizeof(*v), GFP_KERNEL);
+	v = kzalloc_obj(*v, GFP_KERNEL);
 	if (!v) {
 		err = -ENOMEM;
 		goto out;
diff --git a/net/dsa/tag_8021q.c b/net/dsa/tag_8021q.c
index 53e03fd8071b..c9bea6808da3 100644
--- a/net/dsa/tag_8021q.c
+++ b/net/dsa/tag_8021q.c
@@ -158,7 +158,7 @@ static int dsa_port_do_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid,
 		return 0;
 	}

-	v = kzalloc(sizeof(*v), GFP_KERNEL);
+	v = kzalloc_obj(*v, GFP_KERNEL);
 	if (!v)
 		return -ENOMEM;

@@ -420,7 +420,7 @@ int dsa_tag_8021q_register(struct dsa_switch *ds, __be16 proto)
 	struct dsa_8021q_context *ctx;
 	int err;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/net/dsa/tag_ksz.c b/net/dsa/tag_ksz.c
index 9170a0148cc4..15aa44478807 100644
--- a/net/dsa/tag_ksz.c
+++ b/net/dsa/tag_ksz.c
@@ -62,7 +62,7 @@ static int ksz_connect(struct dsa_switch *ds)
 	struct ksz_tagger_private *priv;
 	int ret;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

@@ -258,7 +258,7 @@ static struct sk_buff *ksz_defer_xmit(struct dsa_port *dp, struct sk_buff *skb)
 	if (!xmit_work_fn || !xmit_worker)
 		return NULL;

-	xmit_work = kzalloc(sizeof(*xmit_work), GFP_ATOMIC);
+	xmit_work = kzalloc_obj(*xmit_work, GFP_ATOMIC);
 	if (!xmit_work)
 		return NULL;

diff --git a/net/dsa/tag_ocelot_8021q.c b/net/dsa/tag_ocelot_8021q.c
index 3929584791e4..b9bf2895309a 100644
--- a/net/dsa/tag_ocelot_8021q.c
+++ b/net/dsa/tag_ocelot_8021q.c
@@ -43,7 +43,7 @@ static struct sk_buff *ocelot_defer_xmit(struct dsa_port *dp,
 	if (skb->ip_summed == CHECKSUM_PARTIAL && skb_checksum_help(skb))
 		return NULL;

-	xmit_work = kzalloc(sizeof(*xmit_work), GFP_ATOMIC);
+	xmit_work = kzalloc_obj(*xmit_work, GFP_ATOMIC);
 	if (!xmit_work)
 		return NULL;

@@ -106,7 +106,7 @@ static int ocelot_connect(struct dsa_switch *ds)
 	struct ocelot_8021q_tagger_private *priv;
 	int err;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/net/dsa/tag_qca.c b/net/dsa/tag_qca.c
index 6d56a28c914c..4326487c1f29 100644
--- a/net/dsa/tag_qca.c
+++ b/net/dsa/tag_qca.c
@@ -92,7 +92,7 @@ static int qca_tag_connect(struct dsa_switch *ds)
 {
 	struct qca_tagger_data *tagger_data;

-	tagger_data = kzalloc(sizeof(*tagger_data), GFP_KERNEL);
+	tagger_data = kzalloc_obj(*tagger_data, GFP_KERNEL);
 	if (!tagger_data)
 		return -ENOMEM;

diff --git a/net/dsa/tag_sja1105.c b/net/dsa/tag_sja1105.c
index 02adec693811..2083ef3b4b90 100644
--- a/net/dsa/tag_sja1105.c
+++ b/net/dsa/tag_sja1105.c
@@ -152,7 +152,7 @@ static struct sk_buff *sja1105_defer_xmit(struct dsa_port *dp,
 	if (!xmit_work_fn || !xmit_worker)
 		return NULL;

-	xmit_work = kzalloc(sizeof(*xmit_work), GFP_ATOMIC);
+	xmit_work = kzalloc_obj(*xmit_work, GFP_ATOMIC);
 	if (!xmit_work)
 		return NULL;

@@ -701,7 +701,7 @@ static int sja1105_connect(struct dsa_switch *ds)
 	struct kthread_worker *xmit_worker;
 	int err;

-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/net/dsa/user.c b/net/dsa/user.c
index 5697291d43cf..5df8cb69295d 100644
--- a/net/dsa/user.c
+++ b/net/dsa/user.c
@@ -147,7 +147,7 @@ static int dsa_user_schedule_standalone_work(struct net_device *dev,
 {
 	struct dsa_standalone_event_work *standalone_work;

-	standalone_work = kzalloc(sizeof(*standalone_work), GFP_ATOMIC);
+	standalone_work = kzalloc_obj(*standalone_work, GFP_ATOMIC);
 	if (!standalone_work)
 		return -ENOMEM;

@@ -1318,7 +1318,7 @@ static int dsa_user_netpoll_setup(struct net_device *dev)
 	struct netpoll *netpoll;
 	int err = 0;

-	netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
+	netpoll = kzalloc_obj(*netpoll, GFP_KERNEL);
 	if (!netpoll)
 		return -ENOMEM;

@@ -1430,7 +1430,7 @@ dsa_user_add_cls_matchall_mirred(struct net_device *dev,
 		return -EOPNOTSUPP;
 	}

-	mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
+	mall_tc_entry = kzalloc_obj(*mall_tc_entry, GFP_KERNEL);
 	if (!mall_tc_entry)
 		return -ENOMEM;

@@ -1490,7 +1490,7 @@ dsa_user_add_cls_matchall_police(struct net_device *dev,

 	act = &cls->rule->action.entries[0];

-	mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
+	mall_tc_entry = kzalloc_obj(*mall_tc_entry, GFP_KERNEL);
 	if (!mall_tc_entry)
 		return -ENOMEM;

@@ -1823,7 +1823,7 @@ static int dsa_user_vlan_rx_add_vid(struct net_device *dev, __be16 proto,
 	    !dsa_switch_supports_mc_filtering(ds))
 		return 0;

-	v = kzalloc(sizeof(*v), GFP_KERNEL);
+	v = kzalloc_obj(*v, GFP_KERNEL);
 	if (!v) {
 		ret = -ENOMEM;
 		goto rollback;
@@ -2070,7 +2070,7 @@ static void dsa_bridge_mtu_normalization(struct dsa_port *dp)
 			if (min_mtu > user->mtu)
 				min_mtu = user->mtu;

-			hw_port = kzalloc(sizeof(*hw_port), GFP_KERNEL);
+			hw_port = kzalloc_obj(*hw_port, GFP_KERNEL);
 			if (!hw_port)
 				goto out;

@@ -3738,7 +3738,7 @@ static int dsa_user_fdb_event(struct net_device *dev,
 			return -EOPNOTSUPP;
 	}

-	switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
+	switchdev_work = kzalloc_obj(*switchdev_work, GFP_ATOMIC);
 	if (!switchdev_work)
 		return -ENOMEM;

diff --git a/net/ethtool/cmis_cdb.c b/net/ethtool/cmis_cdb.c
index 3057576bc81e..674439bedd49 100644
--- a/net/ethtool/cmis_cdb.c
+++ b/net/ethtool/cmis_cdb.c
@@ -276,7 +276,7 @@ ethtool_cmis_cdb_init(struct net_device *dev,
 	struct ethtool_cmis_cdb *cdb;
 	int err;

-	cdb = kzalloc(sizeof(*cdb), GFP_KERNEL);
+	cdb = kzalloc_obj(*cdb, GFP_KERNEL);
 	if (!cdb)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/ethtool/common.c b/net/ethtool/common.c
index 5fae329795c8..7a302a93f52c 100644
--- a/net/ethtool/common.c
+++ b/net/ethtool/common.c
@@ -687,7 +687,7 @@ static int ethtool_get_max_rxnfc_channel(struct net_device *dev, u64 *max)
 	if (rule_cnt <= 0)
 		return -EINVAL;

-	info = kvzalloc(struct_size(info, rule_locs, rule_cnt), GFP_KERNEL);
+	info = kvzalloc_flex(*info, rule_locs, rule_cnt, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

@@ -770,7 +770,7 @@ static u32 ethtool_get_max_rxfh_channel(struct net_device *dev)
 	if (dev_size == 0)
 		return current_max;

-	rxfh.indir = kcalloc(dev_size, sizeof(rxfh.indir[0]), GFP_USER);
+	rxfh.indir = kzalloc_objs(rxfh.indir[0], dev_size, GFP_USER);
 	if (!rxfh.indir)
 		return U32_MAX;

@@ -841,7 +841,7 @@ int ethtool_check_rss_ctx_busy(struct net_device *dev, u32 rss_context)
 	if (rule_cnt < 0)
 		return -EINVAL;

-	info = kvzalloc(struct_size(info, rule_locs, rule_cnt), GFP_KERNEL);
+	info = kvzalloc_flex(*info, rule_locs, rule_cnt, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
index 9431e305b233..b4e7c6ccf9f3 100644
--- a/net/ethtool/ioctl.c
+++ b/net/ethtool/ioctl.c
@@ -3040,7 +3040,7 @@ ethtool_set_per_queue_coalesce(struct net_device *dev,

 	bitmap_from_arr32(queue_mask, per_queue_opt->queue_mask, MAX_NUM_QUEUE);
 	n_queue = bitmap_weight(queue_mask, MAX_NUM_QUEUE);
-	tmp = backup = kmalloc_array(n_queue, sizeof(*backup), GFP_KERNEL);
+	tmp = backup = kmalloc_objs(*backup, n_queue, GFP_KERNEL);
 	if (!backup)
 		return -ENOMEM;

@@ -3554,7 +3554,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr, void __user *useraddr)
 	if (copy_from_user(&ethcmd, useraddr, sizeof(ethcmd)))
 		return -EFAULT;

-	state = kzalloc(sizeof(*state), GFP_KERNEL);
+	state = kzalloc_obj(*state, GFP_KERNEL);
 	if (!state)
 		return -ENOMEM;

diff --git a/net/ethtool/module.c b/net/ethtool/module.c
index 4d4e0a82579a..d033a20aa48c 100644
--- a/net/ethtool/module.c
+++ b/net/ethtool/module.c
@@ -301,7 +301,7 @@ module_flash_fw_schedule(struct net_device *dev, const char *file_name,
 	struct ethtool_module_fw_flash *module_fw;
 	int err;

-	module_fw = kzalloc(sizeof(*module_fw), GFP_KERNEL);
+	module_fw = kzalloc_obj(*module_fw, GFP_KERNEL);
 	if (!module_fw)
 		return -ENOMEM;

diff --git a/net/ethtool/mse.c b/net/ethtool/mse.c
index 6aac004c3ffc..4de15aad543b 100644
--- a/net/ethtool/mse.c
+++ b/net/ethtool/mse.c
@@ -64,8 +64,8 @@ static int mse_get_channels(struct phy_device *phydev,
 	if (!data->capability.supported_caps)
 		return 0;

-	data->snapshots = kcalloc(PHY_MSE_CHANNEL_COUNT,
-				  sizeof(*data->snapshots), GFP_KERNEL);
+	data->snapshots = kzalloc_objs(*data->snapshots, PHY_MSE_CHANNEL_COUNT,
+				       GFP_KERNEL);
 	if (!data->snapshots)
 		return -ENOMEM;

diff --git a/net/ethtool/tsconfig.c b/net/ethtool/tsconfig.c
index 169b413b31fc..acd0477b3a2d 100644
--- a/net/ethtool/tsconfig.c
+++ b/net/ethtool/tsconfig.c
@@ -202,10 +202,10 @@ static int tsconfig_send_reply(struct net_device *dev, struct genl_info *info)
 	int reply_len = 0;
 	int ret;

-	req_info = kzalloc(sizeof(*req_info), GFP_KERNEL);
+	req_info = kzalloc_obj(*req_info, GFP_KERNEL);
 	if (!req_info)
 		return -ENOMEM;
-	reply_data = kmalloc(sizeof(*reply_data), GFP_KERNEL);
+	reply_data = kmalloc_obj(*reply_data, GFP_KERNEL);
 	if (!reply_data) {
 		kfree(req_info);
 		return -ENOMEM;
@@ -280,7 +280,7 @@ tsconfig_set_hwprov_from_desc(struct net_device *dev,
 		source = HWTSTAMP_SOURCE_PHYLIB;
 	}

-	hwprov = kzalloc(sizeof(*hwprov), GFP_KERNEL);
+	hwprov = kzalloc_obj(*hwprov, GFP_KERNEL);
 	if (!hwprov)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/ethtool/tsinfo.c b/net/ethtool/tsinfo.c
index 8c654caa6805..df9c7de9a640 100644
--- a/net/ethtool/tsinfo.c
+++ b/net/ethtool/tsinfo.c
@@ -505,10 +505,10 @@ int ethnl_tsinfo_start(struct netlink_callback *cb)

 	BUILD_BUG_ON(sizeof(*ctx) > sizeof(cb->ctx));

-	req_info = kzalloc(sizeof(*req_info), GFP_KERNEL);
+	req_info = kzalloc_obj(*req_info, GFP_KERNEL);
 	if (!req_info)
 		return -ENOMEM;
-	reply_data = kzalloc(sizeof(*reply_data), GFP_KERNEL);
+	reply_data = kzalloc_obj(*reply_data, GFP_KERNEL);
 	if (!reply_data) {
 		ret = -ENOMEM;
 		goto free_req_info;
diff --git a/net/handshake/request.c b/net/handshake/request.c
index 6b7e3e0bf399..2829adbeb149 100644
--- a/net/handshake/request.c
+++ b/net/handshake/request.c
@@ -119,7 +119,7 @@ struct handshake_req *handshake_req_alloc(const struct handshake_proto *proto,
 	if (!proto->hp_accept || !proto->hp_done)
 		return NULL;

-	req = kzalloc(struct_size(req, hr_priv, proto->hp_privsize), flags);
+	req = kzalloc_flex(*req, hr_priv, proto->hp_privsize, flags);
 	if (!req)
 		return NULL;

diff --git a/net/hsr/hsr_framereg.c b/net/hsr/hsr_framereg.c
index 7d87f304ded4..d5a742cb77d1 100644
--- a/net/hsr/hsr_framereg.c
+++ b/net/hsr/hsr_framereg.c
@@ -80,7 +80,7 @@ int hsr_create_self_node(struct hsr_priv *hsr,
 {
 	struct hsr_self_node *sn, *old;

-	sn = kmalloc(sizeof(*sn), GFP_KERNEL);
+	sn = kmalloc_obj(*sn, GFP_KERNEL);
 	if (!sn)
 		return -ENOMEM;

@@ -159,7 +159,7 @@ static struct hsr_node *hsr_add_node(struct hsr_priv *hsr,
 	size_t block_sz;
 	int i;

-	new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC);
+	new_node = kzalloc_obj(*new_node, GFP_ATOMIC);
 	if (!new_node)
 		return NULL;

diff --git a/net/hsr/hsr_slave.c b/net/hsr/hsr_slave.c
index afe06ba00ea4..9a3f3add4b47 100644
--- a/net/hsr/hsr_slave.c
+++ b/net/hsr/hsr_slave.c
@@ -198,7 +198,7 @@ int hsr_add_port(struct hsr_priv *hsr, struct net_device *dev,
 	if (port)
 		return -EBUSY;	/* This port already exists */

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
index 5a024ca60d35..f743d1568f3f 100644
--- a/net/ieee802154/nl802154.c
+++ b/net/ieee802154/nl802154.c
@@ -603,7 +603,7 @@ nl802154_dump_wpan_phy(struct sk_buff *skb, struct netlink_callback *cb)

 	rtnl_lock();
 	if (!state) {
-		state = kzalloc(sizeof(*state), GFP_KERNEL);
+		state = kzalloc_obj(*state, GFP_KERNEL);
 		if (!state) {
 			rtnl_unlock();
 			return -ENOMEM;
@@ -1418,7 +1418,7 @@ static int nl802154_trigger_scan(struct sk_buff *skb, struct genl_info *info)
 		return -EOPNOTSUPP;
 	}

-	request = kzalloc(sizeof(*request), GFP_KERNEL);
+	request = kzalloc_obj(*request, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;

@@ -1586,7 +1586,7 @@ nl802154_send_beacons(struct sk_buff *skb, struct genl_info *info)
 		return -EOPNOTSUPP;
 	}

-	request = kzalloc(sizeof(*request), GFP_KERNEL);
+	request = kzalloc_obj(*request, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;

diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 08d811f11896..6e62e80236a4 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -1737,8 +1737,8 @@ static __net_init int ipv4_mib_init_net(struct net *net)
 	net->mib.icmp_statistics = alloc_percpu(struct icmp_mib);
 	if (!net->mib.icmp_statistics)
 		goto err_icmp_mib;
-	net->mib.icmpmsg_statistics = kzalloc(sizeof(struct icmpmsg_mib),
-					      GFP_KERNEL);
+	net->mib.icmpmsg_statistics = kzalloc_obj(struct icmpmsg_mib,
+						  GFP_KERNEL);
 	if (!net->mib.icmpmsg_statistics)
 		goto err_icmpmsg_mib;

diff --git a/net/ipv4/ah4.c b/net/ipv4/ah4.c
index 64aec3dff8ec..f4a207c7cfc6 100644
--- a/net/ipv4/ah4.c
+++ b/net/ipv4/ah4.c
@@ -484,7 +484,7 @@ static int ah_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack)
 		goto error;
 	}

-	ahp = kzalloc(sizeof(*ahp), GFP_KERNEL);
+	ahp = kzalloc_obj(*ahp, GFP_KERNEL);
 	if (!ahp)
 		return -ENOMEM;

diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c
index 32b951ebc0c2..3fb181a3f3c0 100644
--- a/net/ipv4/cipso_ipv4.c
+++ b/net/ipv4/cipso_ipv4.c
@@ -168,9 +168,8 @@ static int __init cipso_v4_cache_init(void)
 {
 	u32 iter;

-	cipso_v4_cache = kcalloc(CIPSO_V4_CACHE_BUCKETS,
-				 sizeof(struct cipso_v4_map_cache_bkt),
-				 GFP_KERNEL);
+	cipso_v4_cache = kzalloc_objs(struct cipso_v4_map_cache_bkt,
+				      CIPSO_V4_CACHE_BUCKETS, GFP_KERNEL);
 	if (!cipso_v4_cache)
 		return -ENOMEM;

@@ -308,7 +307,7 @@ int cipso_v4_cache_add(const unsigned char *cipso_ptr,

 	cipso_ptr_len = cipso_ptr[1];

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return -ENOMEM;
 	entry->key = kmemdup(cipso_ptr, cipso_ptr_len, GFP_ATOMIC);
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index 942a887bf089..9fd41dfbe788 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -209,7 +209,7 @@ static struct in_ifaddr *inet_alloc_ifa(struct in_device *in_dev)
 {
 	struct in_ifaddr *ifa;

-	ifa = kzalloc(sizeof(*ifa), GFP_KERNEL_ACCOUNT);
+	ifa = kzalloc_obj(*ifa, GFP_KERNEL_ACCOUNT);
 	if (!ifa)
 		return NULL;

@@ -270,7 +270,7 @@ static struct in_device *inetdev_init(struct net_device *dev)

 	ASSERT_RTNL();

-	in_dev = kzalloc(sizeof(*in_dev), GFP_KERNEL);
+	in_dev = kzalloc_obj(*in_dev, GFP_KERNEL);
 	if (!in_dev)
 		goto out;
 	memcpy(&in_dev->cnf, dev_net(dev)->ipv4.devconf_dflt,
@@ -2754,9 +2754,8 @@ static __net_init int devinet_init_net(struct net *net)
 	int i;

 	err = -ENOMEM;
-	net->ipv4.inet_addr_lst = kmalloc_array(IN4_ADDR_HSIZE,
-						sizeof(struct hlist_head),
-						GFP_KERNEL);
+	net->ipv4.inet_addr_lst = kmalloc_objs(struct hlist_head,
+					       IN4_ADDR_HSIZE, GFP_KERNEL);
 	if (!net->ipv4.inet_addr_lst)
 		goto err_alloc_hash;

diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index 0caf38e44c73..ceef080112a9 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -365,8 +365,8 @@ static struct hlist_head *fib_info_laddrhash_bucket(const struct net *net,
 static struct hlist_head *fib_info_hash_alloc(unsigned int hash_bits)
 {
 	/* The second half is used for prefsrc */
-	return kvcalloc((1 << hash_bits) * 2, sizeof(struct hlist_head),
-			GFP_KERNEL);
+	return kvzalloc_objs(struct hlist_head, (1 << hash_bits) * 2,
+			     GFP_KERNEL);
 }

 static void fib_info_hash_free(struct hlist_head *head)
@@ -1399,7 +1399,7 @@ struct fib_info *fib_create_info(struct fib_config *cfg,

 	fib_info_hash_grow(net);

-	fi = kzalloc(struct_size(fi, fib_nh, nhs), GFP_KERNEL);
+	fi = kzalloc_flex(*fi, fib_nh, nhs, GFP_KERNEL);
 	if (!fi) {
 		err = -ENOBUFS;
 		goto failure;
diff --git a/net/ipv4/fou_core.c b/net/ipv4/fou_core.c
index ab8f309f8925..885f3b06f6e9 100644
--- a/net/ipv4/fou_core.c
+++ b/net/ipv4/fou_core.c
@@ -581,7 +581,7 @@ static int fou_create(struct net *net, struct fou_cfg *cfg,
 		goto error;

 	/* Allocate FOU port structure */
-	fou = kzalloc(sizeof(*fou), GFP_KERNEL);
+	fou = kzalloc_obj(*fou, GFP_KERNEL);
 	if (!fou) {
 		err = -ENOMEM;
 		goto error;
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 0adc993c211d..a674fb44ec25 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -1187,7 +1187,7 @@ static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im,
 	 * for deleted items allows change reports to use common code with
 	 * non-deleted or query-response MCA's.
 	 */
-	pmc = kzalloc(sizeof(*pmc), gfp);
+	pmc = kzalloc_obj(*pmc, gfp);
 	if (!pmc)
 		return;
 	spin_lock_init(&pmc->lock);
@@ -1532,7 +1532,7 @@ static void ____ip_mc_inc_group(struct in_device *in_dev, __be32 addr,
 		goto out;
 	}

-	im = kzalloc(sizeof(*im), gfp);
+	im = kzalloc_obj(*im, gfp);
 	if (!im)
 		goto out;

@@ -2075,7 +2075,7 @@ static int ip_mc_add1_src(struct ip_mc_list *pmc, int sfmode,
 		psf_prev = psf;
 	}
 	if (!psf) {
-		psf = kzalloc(sizeof(*psf), GFP_ATOMIC);
+		psf = kzalloc_obj(*psf, GFP_ATOMIC);
 		if (!psf)
 			return -ENOBUFS;
 		psf->sf_inaddr = *psfsrc;
@@ -2150,7 +2150,7 @@ static int sf_setstate(struct ip_mc_list *pmc)
 				if (dpsf->sf_inaddr == psf->sf_inaddr)
 					break;
 			if (!dpsf) {
-				dpsf = kmalloc(sizeof(*dpsf), GFP_ATOMIC);
+				dpsf = kmalloc_obj(*dpsf, GFP_ATOMIC);
 				if (!dpsf)
 					continue;
 				*dpsf = *psf;
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
index 3f5b1418a610..89f99c7ee69e 100644
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
@@ -845,7 +845,7 @@ static int __inet_diag_dump_start(struct netlink_callback *cb, int hdrlen)
 	struct nlattr *nla;
 	int err;

-	cb_data = kzalloc(sizeof(*cb_data), GFP_KERNEL);
+	cb_data = kzalloc_obj(*cb_data, GFP_KERNEL);
 	if (!cb_data)
 		return -ENOMEM;

diff --git a/net/ipv4/inet_fragment.c b/net/ipv4/inet_fragment.c
index 4e6d7467ed44..b006606ebb1d 100644
--- a/net/ipv4/inet_fragment.c
+++ b/net/ipv4/inet_fragment.c
@@ -188,7 +188,7 @@ static void fqdir_work_fn(struct work_struct *work)

 int fqdir_init(struct fqdir **fqdirp, struct inet_frags *f, struct net *net)
 {
-	struct fqdir *fqdir = kzalloc(sizeof(*fqdir), GFP_KERNEL);
+	struct fqdir *fqdir = kzalloc_obj(*fqdir, GFP_KERNEL);
 	int res;

 	if (!fqdir)
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
index f5826ec4bcaa..50bf4ec8213a 100644
--- a/net/ipv4/inet_hashtables.c
+++ b/net/ipv4/inet_hashtables.c
@@ -1284,7 +1284,7 @@ void __init inet_hashinfo2_init(struct inet_hashinfo *h, const char *name,

 int inet_hashinfo2_init_mod(struct inet_hashinfo *h)
 {
-	h->lhash2 = kmalloc_array(INET_LHTABLE_SIZE, sizeof(*h->lhash2), GFP_KERNEL);
+	h->lhash2 = kmalloc_objs(*h->lhash2, INET_LHTABLE_SIZE, GFP_KERNEL);
 	if (!h->lhash2)
 		return -ENOMEM;

diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index c062d9519818..d09377780942 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -350,7 +350,7 @@ int ip_ra_control(struct sock *sk, unsigned char on,
 	if (sk->sk_type != SOCK_RAW || inet_sk(sk)->inet_num == IPPROTO_RAW)
 		return -EINVAL;

-	new_ra = on ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL;
+	new_ra = on ? kmalloc_obj(*new_ra, GFP_KERNEL) : NULL;
 	if (on && !new_ra)
 		return -ENOMEM;

diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index b1e1be00ff8b..5dcac1fb4209 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -244,7 +244,7 @@ static int __init ic_open_devs(void)
 				       dev->name);
 				continue;
 			}
-			if (!(d = kmalloc(sizeof(struct ic_device), GFP_KERNEL))) {
+			if (!(d = kmalloc_obj(struct ic_device, GFP_KERNEL))) {
 				rtnl_unlock();
 				return -ENOMEM;
 			}
diff --git a/net/ipv4/ipmr_base.c b/net/ipv4/ipmr_base.c
index 28d77d454d44..77b7717b9c14 100644
--- a/net/ipv4/ipmr_base.c
+++ b/net/ipv4/ipmr_base.c
@@ -38,7 +38,7 @@ mr_table_alloc(struct net *net, u32 id,
 	struct mr_table *mrt;
 	int err;

-	mrt = kzalloc(sizeof(*mrt), GFP_KERNEL);
+	mrt = kzalloc_obj(*mrt, GFP_KERNEL);
 	if (!mrt)
 		return ERR_PTR(-ENOMEM);
 	mrt->id = id;
diff --git a/net/ipv4/metrics.c b/net/ipv4/metrics.c
index 82cf8a9e5ded..8b88d674a1ea 100644
--- a/net/ipv4/metrics.c
+++ b/net/ipv4/metrics.c
@@ -73,7 +73,7 @@ struct dst_metrics *ip_fib_metrics_init(struct nlattr *fc_mx,
 	if (!fc_mx)
 		return (struct dst_metrics *)&dst_default_metrics;

-	fib_metrics = kzalloc(sizeof(*fib_metrics), GFP_KERNEL);
+	fib_metrics = kzalloc_obj(*fib_metrics, GFP_KERNEL);
 	if (unlikely(!fib_metrics))
 		return ERR_PTR(-ENOMEM);

diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c
index 7b9d70f9b31c..36b52a92e999 100644
--- a/net/ipv4/nexthop.c
+++ b/net/ipv4/nexthop.c
@@ -116,7 +116,7 @@ static int nh_notifier_single_info_init(struct nh_notifier_info *info,
 	struct nh_info *nhi = rtnl_dereference(nh->nh_info);

 	info->type = NH_NOTIFIER_INFO_TYPE_SINGLE;
-	info->nh = kzalloc(sizeof(*info->nh), GFP_KERNEL);
+	info->nh = kzalloc_obj(*info->nh, GFP_KERNEL);
 	if (!info->nh)
 		return -ENOMEM;

@@ -137,8 +137,8 @@ static int nh_notifier_mpath_info_init(struct nh_notifier_info *info,
 	int i;

 	info->type = NH_NOTIFIER_INFO_TYPE_GRP;
-	info->nh_grp = kzalloc(struct_size(info->nh_grp, nh_entries, num_nh),
-			       GFP_KERNEL);
+	info->nh_grp = kzalloc_flex(*info->nh_grp, nh_entries, num_nh,
+				    GFP_KERNEL);
 	if (!info->nh_grp)
 		return -ENOMEM;

@@ -318,8 +318,7 @@ static int nh_notifier_res_bucket_info_init(struct nh_notifier_info *info,
 		return err;

 	info->type = NH_NOTIFIER_INFO_TYPE_RES_BUCKET;
-	info->nh_res_bucket = kzalloc(sizeof(*info->nh_res_bucket),
-				      GFP_KERNEL);
+	info->nh_res_bucket = kzalloc_obj(*info->nh_res_bucket, GFP_KERNEL);
 	if (!info->nh_res_bucket)
 		return -ENOMEM;

@@ -535,7 +534,7 @@ static struct nexthop *nexthop_alloc(void)
 {
 	struct nexthop *nh;

-	nh = kzalloc(sizeof(struct nexthop), GFP_KERNEL);
+	nh = kzalloc_obj(struct nexthop, GFP_KERNEL);
 	if (nh) {
 		INIT_LIST_HEAD(&nh->fi_list);
 		INIT_LIST_HEAD(&nh->f6i_list);
@@ -550,7 +549,7 @@ static struct nh_group *nexthop_grp_alloc(u16 num_nh)
 {
 	struct nh_group *nhg;

-	nhg = kzalloc(struct_size(nhg, nh_entries, num_nh), GFP_KERNEL);
+	nhg = kzalloc_flex(*nhg, nh_entries, num_nh, GFP_KERNEL);
 	if (nhg)
 		nhg->num_nh = num_nh;

@@ -715,9 +714,8 @@ static int nh_notifier_grp_hw_stats_init(struct nh_notifier_info *info,

 	info->id = nh->id;
 	info->type = NH_NOTIFIER_INFO_TYPE_GRP_HW_STATS;
-	info->nh_grp_hw_stats = kzalloc(struct_size(info->nh_grp_hw_stats,
-						    stats, nhg->num_nh),
-					GFP_KERNEL);
+	info->nh_grp_hw_stats = kzalloc_flex(*info->nh_grp_hw_stats, stats,
+					     nhg->num_nh, GFP_KERNEL);
 	if (!info->nh_grp_hw_stats)
 		return -ENOMEM;

@@ -2897,7 +2895,7 @@ static struct nexthop *nexthop_create(struct net *net, struct nh_config *cfg,
 	if (!nh)
 		return ERR_PTR(-ENOMEM);

-	nhi = kzalloc(sizeof(*nhi), GFP_KERNEL);
+	nhi = kzalloc_obj(*nhi, GFP_KERNEL);
 	if (!nhi) {
 		kfree(nh);
 		return ERR_PTR(-ENOMEM);
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 06aa39ae80d6..c75b92f60742 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -315,7 +315,7 @@ static int rt_acct_proc_show(struct seq_file *m, void *v)
 	struct ip_rt_acct *dst, *src;
 	unsigned int i, j;

-	dst = kcalloc(256, sizeof(struct ip_rt_acct), GFP_KERNEL);
+	dst = kzalloc_objs(struct ip_rt_acct, 256, GFP_KERNEL);
 	if (!dst)
 		return -ENOMEM;

@@ -659,7 +659,7 @@ static void update_or_create_fnhe(struct fib_nh_common *nhc, __be32 daddr,

 	hash = rcu_dereference(nhc->nhc_exceptions);
 	if (!hash) {
-		hash = kcalloc(FNHE_HASH_SIZE, sizeof(*hash), GFP_ATOMIC);
+		hash = kzalloc_objs(*hash, FNHE_HASH_SIZE, GFP_ATOMIC);
 		if (!hash)
 			goto out_unlock;
 		rcu_assign_pointer(nhc->nhc_exceptions, hash);
@@ -702,7 +702,7 @@ static void update_or_create_fnhe(struct fib_nh_common *nhc, __be32 daddr,
 			depth--;
 		}

-		fnhe = kzalloc(sizeof(*fnhe), GFP_ATOMIC);
+		fnhe = kzalloc_obj(*fnhe, GFP_ATOMIC);
 		if (!fnhe)
 			goto out_unlock;

@@ -3687,7 +3687,7 @@ static __net_initdata struct pernet_operations rt_genid_ops = {

 static int __net_init ipv4_inetpeer_init(struct net *net)
 {
-	struct inet_peer_base *bp = kmalloc(sizeof(*bp), GFP_KERNEL);
+	struct inet_peer_base *bp = kmalloc_obj(*bp, GFP_KERNEL);

 	if (!bp)
 		return -ENOMEM;
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 6ce03a9adb4a..f84d9a45cc9d 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1077,8 +1077,8 @@ int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg, int *copied,
 	if (tp->fastopen_req)
 		return -EALREADY; /* Another Fast Open is in progress */

-	tp->fastopen_req = kzalloc(sizeof(struct tcp_fastopen_request),
-				   sk->sk_allocation);
+	tp->fastopen_req = kzalloc_obj(struct tcp_fastopen_request,
+				       sk->sk_allocation);
 	if (unlikely(!tp->fastopen_req))
 		return -ENOBUFS;
 	tp->fastopen_req->data = msg;
diff --git a/net/ipv4/tcp_ao.c b/net/ipv4/tcp_ao.c
index 34b8450829d0..4980caddb0fc 100644
--- a/net/ipv4/tcp_ao.c
+++ b/net/ipv4/tcp_ao.c
@@ -227,7 +227,7 @@ static struct tcp_ao_info *tcp_ao_alloc_info(gfp_t flags)
 {
 	struct tcp_ao_info *ao;

-	ao = kzalloc(sizeof(*ao), flags);
+	ao = kzalloc_obj(*ao, flags);
 	if (!ao)
 		return NULL;
 	INIT_HLIST_HEAD(&ao->head);
diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c
index ca8a5cb8e569..c449a044895e 100644
--- a/net/ipv4/tcp_bpf.c
+++ b/net/ipv4/tcp_bpf.c
@@ -39,7 +39,7 @@ static int bpf_tcp_ingress(struct sock *sk, struct sk_psock *psock,
 	struct sk_msg *tmp;
 	int i, ret = 0;

-	tmp = kzalloc(sizeof(*tmp), __GFP_NOWARN | GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, __GFP_NOWARN | GFP_KERNEL);
 	if (unlikely(!tmp))
 		return -ENOMEM;

@@ -426,8 +426,8 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock,
 	    msg->cork_bytes > msg->sg.size && !enospc) {
 		psock->cork_bytes = msg->cork_bytes - msg->sg.size;
 		if (!psock->cork) {
-			psock->cork = kzalloc(sizeof(*psock->cork),
-					      GFP_ATOMIC | __GFP_NOWARN);
+			psock->cork = kzalloc_obj(*psock->cork,
+						  GFP_ATOMIC | __GFP_NOWARN);
 			if (!psock->cork) {
 				sk_msg_free(sk, msg);
 				*copied = 0;
diff --git a/net/ipv4/tcp_cdg.c b/net/ipv4/tcp_cdg.c
index fbad6c35dee9..ceabfd690a29 100644
--- a/net/ipv4/tcp_cdg.c
+++ b/net/ipv4/tcp_cdg.c
@@ -378,8 +378,8 @@ static void tcp_cdg_init(struct sock *sk)
 	ca->gradients = NULL;
 	/* We silently fall back to window = 1 if allocation fails. */
 	if (window > 1)
-		ca->gradients = kcalloc(window, sizeof(ca->gradients[0]),
-					GFP_NOWAIT);
+		ca->gradients = kzalloc_objs(ca->gradients[0], window,
+					     GFP_NOWAIT);
 	ca->rtt_seq = tp->snd_nxt;
 	ca->shadow_wnd = tcp_snd_cwnd(tp);
 }
diff --git a/net/ipv4/tcp_fastopen.c b/net/ipv4/tcp_fastopen.c
index b30090cff3cf..b4309dc4b9c5 100644
--- a/net/ipv4/tcp_fastopen.c
+++ b/net/ipv4/tcp_fastopen.c
@@ -149,7 +149,7 @@ int tcp_fastopen_reset_cipher(struct net *net, struct sock *sk,
 	struct fastopen_queue *q;
 	int err = 0;

-	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kmalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx) {
 		err = -ENOMEM;
 		goto out;
@@ -549,8 +549,8 @@ bool tcp_fastopen_defer_connect(struct sock *sk, int *err)
 		/* Alloc fastopen_req in order for FO option to be included
 		 * in SYN
 		 */
-		tp->fastopen_req = kzalloc(sizeof(*tp->fastopen_req),
-					   sk->sk_allocation);
+		tp->fastopen_req = kzalloc_obj(*tp->fastopen_req,
+					       sk->sk_allocation);
 		if (tp->fastopen_req)
 			tp->fastopen_req->cookie = cookie;
 		else
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index e7b41abb82aa..65a7a5ea8eb7 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -7598,8 +7598,7 @@ static void tcp_reqsk_record_syn(const struct sock *sk,
 			mac_hdrlen = 0;
 		}

-		saved_syn = kmalloc(struct_size(saved_syn, data, len),
-				    GFP_ATOMIC);
+		saved_syn = kmalloc_flex(*saved_syn, data, len, GFP_ATOMIC);
 		if (saved_syn) {
 			saved_syn->mac_hdrlen = mac_hdrlen;
 			saved_syn->network_hdrlen = skb_network_header_len(skb);
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 6264fc0b2be5..63a8b174cf99 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1354,7 +1354,7 @@ static int tcp_md5sig_info_add(struct sock *sk, gfp_t gfp)
 	struct tcp_sock *tp = tcp_sk(sk);
 	struct tcp_md5sig_info *md5sig;

-	md5sig = kmalloc(sizeof(*md5sig), gfp);
+	md5sig = kmalloc_obj(*md5sig, gfp);
 	if (!md5sig)
 		return -ENOMEM;

diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
index 45b6ecd16412..06b1d5d3b6df 100644
--- a/net/ipv4/tcp_metrics.c
+++ b/net/ipv4/tcp_metrics.c
@@ -197,7 +197,7 @@ static struct tcp_metrics_block *tcpm_new(struct dst_entry *dst,
 		}
 		tm = oldest;
 	} else {
-		tm = kzalloc(sizeof(*tm), GFP_ATOMIC);
+		tm = kzalloc_obj(*tm, GFP_ATOMIC);
 		if (!tm)
 			goto out_unlock;
 	}
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index b96e47f1c8a2..5fcf81a833e8 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -3859,7 +3859,7 @@ static struct udp_table __net_init *udp_pernet_table_alloc(unsigned int hash_ent
 	unsigned int slot_size;
 	int i;

-	udptable = kmalloc(sizeof(*udptable), GFP_KERNEL);
+	udptable = kmalloc_obj(*udptable, GFP_KERNEL);
 	if (!udptable)
 		goto out;

@@ -3972,8 +3972,8 @@ static int bpf_iter_udp_realloc_batch(struct bpf_udp_iter_state *iter,
 {
 	union bpf_udp_iter_batch_item *new_batch;

-	new_batch = kvmalloc_array(new_batch_sz, sizeof(*new_batch),
-				   flags | __GFP_NOWARN);
+	new_batch = kvmalloc_objs(*new_batch, new_batch_sz,
+				  flags | __GFP_NOWARN);
 	if (!new_batch)
 		return -ENOMEM;

diff --git a/net/ipv4/udp_tunnel_nic.c b/net/ipv4/udp_tunnel_nic.c
index 944b3cf25468..ae674e3ed9b8 100644
--- a/net/ipv4/udp_tunnel_nic.c
+++ b/net/ipv4/udp_tunnel_nic.c
@@ -753,7 +753,7 @@ udp_tunnel_nic_alloc(const struct udp_tunnel_nic_info *info,
 	struct udp_tunnel_nic *utn;
 	unsigned int i;

-	utn = kzalloc(struct_size(utn, entries, n_tables), GFP_KERNEL);
+	utn = kzalloc_flex(*utn, entries, n_tables, GFP_KERNEL);
 	if (!utn)
 		return NULL;
 	utn->n_tables = n_tables;
@@ -761,8 +761,9 @@ udp_tunnel_nic_alloc(const struct udp_tunnel_nic_info *info,
 	mutex_init(&utn->lock);

 	for (i = 0; i < n_tables; i++) {
-		utn->entries[i] = kcalloc(info->tables[i].n_entries,
-					  sizeof(*utn->entries[i]), GFP_KERNEL);
+		utn->entries[i] = kzalloc_objs(*utn->entries[i],
+					       info->tables[i].n_entries,
+					       GFP_KERNEL);
 		if (!utn->entries[i])
 			goto err_free_prev_entries;
 	}
@@ -820,7 +821,7 @@ static int udp_tunnel_nic_register(struct net_device *dev)

 	/* Create UDP tunnel state structures */
 	if (info->shared) {
-		node = kzalloc(sizeof(*node), GFP_KERNEL);
+		node = kzalloc_obj(*node, GFP_KERNEL);
 		if (!node)
 			return -ENOMEM;

diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 6db9cf9e2a50..5696ceb09dc7 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -355,12 +355,12 @@ static int snmp6_alloc_dev(struct inet6_dev *idev)
 	}


-	idev->stats.icmpv6dev = kzalloc(sizeof(struct icmpv6_mib_device),
-					GFP_KERNEL);
+	idev->stats.icmpv6dev = kzalloc_obj(struct icmpv6_mib_device,
+					    GFP_KERNEL);
 	if (!idev->stats.icmpv6dev)
 		goto err_icmp;
-	idev->stats.icmpv6msgdev = kzalloc(sizeof(struct icmpv6msg_mib_device),
-					   GFP_KERNEL_ACCOUNT);
+	idev->stats.icmpv6msgdev = kzalloc_obj(struct icmpv6msg_mib_device,
+					       GFP_KERNEL_ACCOUNT);
 	if (!idev->stats.icmpv6msgdev)
 		goto err_icmpmsg;

@@ -385,7 +385,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
 	if (dev->mtu < IPV6_MIN_MTU && dev != blackhole_netdev)
 		return ERR_PTR(-EINVAL);

-	ndev = kzalloc(sizeof(*ndev), GFP_KERNEL_ACCOUNT);
+	ndev = kzalloc_obj(*ndev, GFP_KERNEL_ACCOUNT);
 	if (!ndev)
 		return ERR_PTR(err);

@@ -1117,7 +1117,7 @@ ipv6_add_addr(struct inet6_dev *idev, struct ifa6_config *cfg,
 			goto out;
 	}

-	ifa = kzalloc(sizeof(*ifa), gfp_flags | __GFP_ACCOUNT);
+	ifa = kzalloc_obj(*ifa, gfp_flags | __GFP_ACCOUNT);
 	if (!ifa) {
 		err = -ENOBUFS;
 		goto out;
@@ -7398,9 +7398,8 @@ static int __net_init addrconf_init_net(struct net *net)

 	spin_lock_init(&net->ipv6.addrconf_hash_lock);
 	INIT_DEFERRABLE_WORK(&net->ipv6.addr_chk_work, addrconf_verify_work);
-	net->ipv6.inet6_addr_lst = kcalloc(IN6_ADDR_HSIZE,
-					   sizeof(struct hlist_head),
-					   GFP_KERNEL);
+	net->ipv6.inet6_addr_lst = kzalloc_objs(struct hlist_head,
+						IN6_ADDR_HSIZE, GFP_KERNEL);
 	if (!net->ipv6.inet6_addr_lst)
 		goto err_alloc_addr;

diff --git a/net/ipv6/addrlabel.c b/net/ipv6/addrlabel.c
index 567efd626ab4..e3b6b9a3f02e 100644
--- a/net/ipv6/addrlabel.c
+++ b/net/ipv6/addrlabel.c
@@ -180,7 +180,7 @@ static struct ip6addrlbl_entry *ip6addrlbl_alloc(const struct in6_addr *prefix,
 		break;
 	}

-	newp = kmalloc(sizeof(*newp), GFP_KERNEL);
+	newp = kmalloc_obj(*newp, GFP_KERNEL);
 	if (!newp)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 69be0a67a140..25ff5148c926 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -921,8 +921,8 @@ static int __net_init ipv6_init_mibs(struct net *net)
 	net->mib.icmpv6_statistics = alloc_percpu(struct icmpv6_mib);
 	if (!net->mib.icmpv6_statistics)
 		goto err_icmp_mib;
-	net->mib.icmpv6msg_statistics = kzalloc(sizeof(struct icmpv6msg_mib),
-						GFP_KERNEL);
+	net->mib.icmpv6msg_statistics = kzalloc_obj(struct icmpv6msg_mib,
+						    GFP_KERNEL);
 	if (!net->mib.icmpv6msg_statistics)
 		goto err_icmpmsg_mib;
 	return 0;
diff --git a/net/ipv6/ah6.c b/net/ipv6/ah6.c
index 95372e0f1d21..7ad0c894f2fd 100644
--- a/net/ipv6/ah6.c
+++ b/net/ipv6/ah6.c
@@ -691,7 +691,7 @@ static int ah6_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack)
 		goto error;
 	}

-	ahp = kzalloc(sizeof(*ahp), GFP_KERNEL);
+	ahp = kzalloc_obj(*ahp, GFP_KERNEL);
 	if (!ahp)
 		return -ENOMEM;

diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c
index 52599584422b..67a42e01dfc3 100644
--- a/net/ipv6/anycast.c
+++ b/net/ipv6/anycast.c
@@ -279,7 +279,7 @@ static struct ifacaddr6 *aca_alloc(struct fib6_info *f6i,
 {
 	struct ifacaddr6 *aca;

-	aca = kzalloc(sizeof(*aca), GFP_ATOMIC);
+	aca = kzalloc_obj(*aca, GFP_ATOMIC);
 	if (!aca)
 		return NULL;

diff --git a/net/ipv6/calipso.c b/net/ipv6/calipso.c
index 21f6ed126253..ff39220fef8a 100644
--- a/net/ipv6/calipso.c
+++ b/net/ipv6/calipso.c
@@ -133,9 +133,8 @@ static int __init calipso_cache_init(void)
 {
 	u32 iter;

-	calipso_cache = kcalloc(CALIPSO_CACHE_BUCKETS,
-				sizeof(struct calipso_map_cache_bkt),
-				GFP_KERNEL);
+	calipso_cache = kzalloc_objs(struct calipso_map_cache_bkt,
+				     CALIPSO_CACHE_BUCKETS, GFP_KERNEL);
 	if (!calipso_cache)
 		return -ENOMEM;

@@ -275,7 +274,7 @@ static int calipso_cache_add(const unsigned char *calipso_ptr,

 	calipso_ptr_len = calipso_ptr[1];

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return -ENOMEM;
 	entry->key = kmemdup(calipso_ptr + 2, calipso_ptr_len, GFP_ATOMIC);
diff --git a/net/ipv6/ila/ila_xlat.c b/net/ipv6/ila/ila_xlat.c
index 1d41b2ab4884..c5ff34040175 100644
--- a/net/ipv6/ila/ila_xlat.c
+++ b/net/ipv6/ila/ila_xlat.c
@@ -220,7 +220,7 @@ static int ila_add_mapping(struct net *net, struct ila_xlat_params *xp)
 			return err;
 	}

-	ila = kzalloc(sizeof(*ila), GFP_KERNEL);
+	ila = kzalloc_obj(*ila, GFP_KERNEL);
 	if (!ila)
 		return -ENOMEM;

@@ -509,7 +509,7 @@ int ila_xlat_nl_dump_start(struct netlink_callback *cb)
 	struct ila_net *ilan = net_generic(net, ila_net_id);
 	struct ila_dump_iter *iter;

-	iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+	iter = kmalloc_obj(*iter, GFP_KERNEL);
 	if (!iter)
 		return -ENOMEM;

diff --git a/net/ipv6/ioam6.c b/net/ipv6/ioam6.c
index 08b7ac8c99b7..b6c9e48891fe 100644
--- a/net/ipv6/ioam6.c
+++ b/net/ipv6/ioam6.c
@@ -127,7 +127,7 @@ static int ioam6_genl_addns(struct sk_buff *skb, struct genl_info *info)
 		goto out_unlock;
 	}

-	ns = kzalloc(sizeof(*ns), GFP_KERNEL);
+	ns = kzalloc_obj(*ns, GFP_KERNEL);
 	if (!ns) {
 		err = -ENOMEM;
 		goto out_unlock;
@@ -245,7 +245,7 @@ static int ioam6_genl_dumpns_start(struct netlink_callback *cb)
 	struct rhashtable_iter *iter = (struct rhashtable_iter *)cb->args[0];

 	if (!iter) {
-		iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+		iter = kmalloc_obj(*iter, GFP_KERNEL);
 		if (!iter)
 			return -ENOMEM;

@@ -431,7 +431,7 @@ static int ioam6_genl_dumpsc_start(struct netlink_callback *cb)
 	struct rhashtable_iter *iter = (struct rhashtable_iter *)cb->args[0];

 	if (!iter) {
-		iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+		iter = kmalloc_obj(*iter, GFP_KERNEL);
 		if (!iter)
 			return -ENOMEM;

@@ -975,7 +975,7 @@ static int __net_init ioam6_net_init(struct net *net)
 	struct ioam6_pernet_data *nsdata;
 	int err = -ENOMEM;

-	nsdata = kzalloc(sizeof(*nsdata), GFP_KERNEL);
+	nsdata = kzalloc_obj(*nsdata, GFP_KERNEL);
 	if (!nsdata)
 		goto out;

diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
index 56058e6de490..6a26d9448395 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -234,7 +234,7 @@ static struct fib6_table *fib6_alloc_table(struct net *net, u32 id)
 {
 	struct fib6_table *table;

-	table = kzalloc(sizeof(*table), GFP_ATOMIC);
+	table = kzalloc_obj(*table, GFP_ATOMIC);
 	if (table) {
 		table->tb6_id = id;
 		rcu_assign_pointer(table->tb6_root.leaf,
@@ -494,7 +494,7 @@ int fib6_tables_dump(struct net *net, struct notifier_block *nb,
 	unsigned int h;
 	int err = 0;

-	w = kzalloc(sizeof(*w), GFP_ATOMIC);
+	w = kzalloc_obj(*w, GFP_ATOMIC);
 	if (!w)
 		return -ENOMEM;

@@ -659,7 +659,7 @@ static int inet6_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)
 		 *
 		 * 1. allocate and initialize walker.
 		 */
-		w = kzalloc(sizeof(*w), GFP_ATOMIC);
+		w = kzalloc_obj(*w, GFP_ATOMIC);
 		if (!w) {
 			err = -ENOMEM;
 			goto unlock;
@@ -731,7 +731,7 @@ void fib6_metric_set(struct fib6_info *f6i, int metric, u32 val)
 		return;

 	if (f6i->fib6_metrics == &dst_default_metrics) {
-		struct dst_metrics *p = kzalloc(sizeof(*p), GFP_ATOMIC);
+		struct dst_metrics *p = kzalloc_obj(*p, GFP_ATOMIC);

 		if (!p)
 			return;
@@ -2464,7 +2464,7 @@ static int __net_init fib6_net_init(struct net *net)
 	INIT_LIST_HEAD(&net->ipv6.fib6_walkers);
 	timer_setup(&net->ipv6.ip6_fib_timer, fib6_gc_timer_cb, 0);

-	net->ipv6.rt6_stats = kzalloc(sizeof(*net->ipv6.rt6_stats), GFP_KERNEL);
+	net->ipv6.rt6_stats = kzalloc_obj(*net->ipv6.rt6_stats, GFP_KERNEL);
 	if (!net->ipv6.rt6_stats)
 		goto out_notifier;

@@ -2477,8 +2477,8 @@ static int __net_init fib6_net_init(struct net *net)

 	spin_lock_init(&net->ipv6.fib_table_hash_lock);

-	net->ipv6.fib6_main_tbl = kzalloc(sizeof(*net->ipv6.fib6_main_tbl),
-					  GFP_KERNEL);
+	net->ipv6.fib6_main_tbl = kzalloc_obj(*net->ipv6.fib6_main_tbl,
+					      GFP_KERNEL);
 	if (!net->ipv6.fib6_main_tbl)
 		goto out_fib_table_hash;

@@ -2491,8 +2491,8 @@ static int __net_init fib6_net_init(struct net *net)
 	INIT_HLIST_HEAD(&net->ipv6.fib6_main_tbl->tb6_gc_hlist);

 #ifdef CONFIG_IPV6_MULTIPLE_TABLES
-	net->ipv6.fib6_local_tbl = kzalloc(sizeof(*net->ipv6.fib6_local_tbl),
-					   GFP_KERNEL);
+	net->ipv6.fib6_local_tbl = kzalloc_obj(*net->ipv6.fib6_local_tbl,
+					       GFP_KERNEL);
 	if (!net->ipv6.fib6_local_tbl)
 		goto out_fib6_main_tbl;
 	net->ipv6.fib6_local_tbl->tb6_id = RT6_TABLE_LOCAL;
diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c
index 60d0be47a9f3..f89e0af5a9ed 100644
--- a/net/ipv6/ip6_flowlabel.c
+++ b/net/ipv6/ip6_flowlabel.c
@@ -386,7 +386,7 @@ fl_create(struct net *net, struct sock *sk, struct in6_flowlabel_req *freq,
 		goto done;

 	err = -ENOMEM;
-	fl = kzalloc(sizeof(*fl), GFP_KERNEL);
+	fl = kzalloc_obj(*fl, GFP_KERNEL);
 	if (!fl)
 		goto done;

@@ -638,7 +638,7 @@ static int ipv6_flowlabel_get(struct sock *sk, struct in6_flowlabel_req *freq,
 	if (!fl)
 		return err;

-	sfl1 = kmalloc(sizeof(*sfl1), GFP_KERNEL);
+	sfl1 = kmalloc_obj(*sfl1, GFP_KERNEL);

 	if (freq->flr_label) {
 		err = -EEXIST;
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 769c39fed1f3..8e2a6b28cea7 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1359,7 +1359,7 @@ static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork,
 		if (WARN_ON(v6_cork->opt))
 			return -EINVAL;

-		nopt = v6_cork->opt = kzalloc(sizeof(*opt), sk->sk_allocation);
+		nopt = v6_cork->opt = kzalloc_obj(*opt, sk->sk_allocation);
 		if (unlikely(!nopt))
 			return -ENOBUFS;

diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
index d784a8644ff2..152388dc96ec 100644
--- a/net/ipv6/ipv6_sockglue.c
+++ b/net/ipv6/ipv6_sockglue.c
@@ -66,7 +66,7 @@ int ip6_ra_control(struct sock *sk, int sel)
 	if (sk->sk_type != SOCK_RAW || inet_sk(sk)->inet_num != IPPROTO_RAW)
 		return -ENOPROTOOPT;

-	new_ra = (sel >= 0) ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL;
+	new_ra = (sel >= 0) ? kmalloc_obj(*new_ra, GFP_KERNEL) : NULL;
 	if (sel >= 0 && !new_ra)
 		return -ENOMEM;

diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index 016b572e7d6f..f982f3b71435 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -740,7 +740,7 @@ static void mld_add_delrec(struct inet6_dev *idev, struct ifmcaddr6 *im)
 	 * for deleted items allows change reports to use common code with
 	 * non-deleted or query-response MCA's.
 	 */
-	pmc = kzalloc(sizeof(*pmc), GFP_KERNEL);
+	pmc = kzalloc_obj(*pmc, GFP_KERNEL);
 	if (!pmc)
 		return;

@@ -868,7 +868,7 @@ static struct ifmcaddr6 *mca_alloc(struct inet6_dev *idev,

 	mc_assert_locked(idev);

-	mc = kzalloc(sizeof(*mc), GFP_KERNEL);
+	mc = kzalloc_obj(*mc, GFP_KERNEL);
 	if (!mc)
 		return NULL;

@@ -2415,7 +2415,7 @@ static int ip6_mc_add1_src(struct ifmcaddr6 *pmc, int sfmode,
 		psf_prev = psf;
 	}
 	if (!psf) {
-		psf = kzalloc(sizeof(*psf), GFP_KERNEL);
+		psf = kzalloc_obj(*psf, GFP_KERNEL);
 		if (!psf)
 			return -ENOBUFS;

@@ -2500,7 +2500,7 @@ static int sf_setstate(struct ifmcaddr6 *pmc)
 				    &psf->sf_addr))
 					break;
 			if (!dpsf) {
-				dpsf = kmalloc(sizeof(*dpsf), GFP_KERNEL);
+				dpsf = kmalloc_obj(*dpsf, GFP_KERNEL);
 				if (!dpsf)
 					continue;
 				*dpsf = *psf;
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index c0350d97307e..dd50cf2bf6ef 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -684,14 +684,14 @@ static void rt6_probe(struct fib6_nh *fib6_nh)
 		    time_after(jiffies,
 			       neigh->updated +
 			       READ_ONCE(idev->cnf.rtr_probe_interval))) {
-			work = kmalloc(sizeof(*work), GFP_ATOMIC);
+			work = kmalloc_obj(*work, GFP_ATOMIC);
 			if (work)
 				__neigh_set_probe_once(neigh);
 		}
 		write_unlock_bh(&neigh->lock);
 	} else if (time_after(jiffies, last_probe +
 				       READ_ONCE(idev->cnf.rtr_probe_interval))) {
-		work = kmalloc(sizeof(*work), GFP_ATOMIC);
+		work = kmalloc_obj(*work, GFP_ATOMIC);
 	}

 	if (!work || cmpxchg(&fib6_nh->last_probe,
@@ -1723,8 +1723,8 @@ static int rt6_insert_exception(struct rt6_info *nrt,
 	bucket = rcu_dereference_protected(nh->rt6i_exception_bucket,
 					  lockdep_is_held(&rt6_exception_lock));
 	if (!bucket) {
-		bucket = kcalloc(FIB6_EXCEPTION_BUCKET_SIZE, sizeof(*bucket),
-				 GFP_ATOMIC);
+		bucket = kzalloc_objs(*bucket, FIB6_EXCEPTION_BUCKET_SIZE,
+				      GFP_ATOMIC);
 		if (!bucket) {
 			err = -ENOMEM;
 			goto out;
@@ -1759,7 +1759,7 @@ static int rt6_insert_exception(struct rt6_info *nrt,
 	if (rt6_ex)
 		rt6_remove_exception(bucket, rt6_ex);

-	rt6_ex = kzalloc(sizeof(*rt6_ex), GFP_ATOMIC);
+	rt6_ex = kzalloc_obj(*rt6_ex, GFP_ATOMIC);
 	if (!rt6_ex) {
 		err = -ENOMEM;
 		goto out;
@@ -5331,7 +5331,7 @@ static int ip6_route_info_append(struct list_head *rt6_nh_list,
 			return -EEXIST;
 	}

-	nh = kzalloc(sizeof(*nh), GFP_KERNEL);
+	nh = kzalloc_obj(*nh, GFP_KERNEL);
 	if (!nh)
 		return -ENOMEM;

@@ -6778,7 +6778,7 @@ static struct pernet_operations ip6_route_net_ops = {

 static int __net_init ipv6_inetpeer_init(struct net *net)
 {
-	struct inet_peer_base *bp = kmalloc(sizeof(*bp), GFP_KERNEL);
+	struct inet_peer_base *bp = kmalloc_obj(*bp, GFP_KERNEL);

 	if (!bp)
 		return -ENOMEM;
diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
index a5c4c629b788..b53c491079cd 100644
--- a/net/ipv6/seg6.c
+++ b/net/ipv6/seg6.c
@@ -202,7 +202,7 @@ static int seg6_genl_sethmac(struct sk_buff *skb, struct genl_info *info)

 	secret = (char *)nla_data(info->attrs[SEG6_ATTR_SECRET]);

-	hinfo = kzalloc(sizeof(*hinfo), GFP_KERNEL);
+	hinfo = kzalloc_obj(*hinfo, GFP_KERNEL);
 	if (!hinfo) {
 		err = -ENOMEM;
 		goto out_unlock;
@@ -339,7 +339,7 @@ static int seg6_genl_dumphmac_start(struct netlink_callback *cb)
 	iter = (struct rhashtable_iter *)cb->args[0];

 	if (!iter) {
-		iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+		iter = kmalloc_obj(*iter, GFP_KERNEL);
 		if (!iter)
 			return -ENOMEM;

@@ -421,13 +421,13 @@ static int __net_init seg6_net_init(struct net *net)
 {
 	struct seg6_pernet_data *sdata;

-	sdata = kzalloc(sizeof(*sdata), GFP_KERNEL);
+	sdata = kzalloc_obj(*sdata, GFP_KERNEL);
 	if (!sdata)
 		return -ENOMEM;

 	mutex_init(&sdata->lock);

-	sdata->tun_src = kzalloc(sizeof(*sdata->tun_src), GFP_KERNEL);
+	sdata->tun_src = kzalloc_obj(*sdata->tun_src, GFP_KERNEL);
 	if (!sdata->tun_src) {
 		kfree(sdata);
 		return -ENOMEM;
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index 439c8a1c6625..ca7955831c28 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -323,7 +323,7 @@ static int ipip6_tunnel_get_prl(struct net_device *dev, struct ip_tunnel_prl __u
 	 * we try harder to allocate.
 	 */
 	kp = (cmax <= 1 || capable(CAP_NET_ADMIN)) ?
-		kcalloc(cmax, sizeof(*kp), GFP_KERNEL_ACCOUNT | __GFP_NOWARN) :
+		kzalloc_objs(*kp, cmax, GFP_KERNEL_ACCOUNT | __GFP_NOWARN) :
 		NULL;

 	ca = min(t->prl_count, cmax);
@@ -334,8 +334,8 @@ static int ipip6_tunnel_get_prl(struct net_device *dev, struct ip_tunnel_prl __u
 		 * For root users, retry allocating enough memory for
 		 * the answer.
 		 */
-		kp = kcalloc(ca, sizeof(*kp), GFP_ATOMIC | __GFP_ACCOUNT |
-					      __GFP_NOWARN);
+		kp = kzalloc_objs(*kp, ca,
+				  GFP_ATOMIC | __GFP_ACCOUNT | __GFP_NOWARN);
 		if (!kp) {
 			ret = -ENOMEM;
 			goto out;
@@ -394,7 +394,7 @@ ipip6_tunnel_add_prl(struct ip_tunnel *t, struct ip_tunnel_prl *a, int chg)
 		goto out;
 	}

-	p = kzalloc(sizeof(struct ip_tunnel_prl_entry), GFP_KERNEL);
+	p = kzalloc_obj(struct ip_tunnel_prl_entry, GFP_KERNEL);
 	if (!p) {
 		err = -ENOBUFS;
 		goto out;
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
index 1e62fbc22cb7..6554d2cffc19 100644
--- a/net/iucv/af_iucv.c
+++ b/net/iucv/af_iucv.c
@@ -1719,7 +1719,7 @@ static void iucv_callback_rx(struct iucv_path *path, struct iucv_message *msg)
 	goto out_unlock;

 save_message:
-	save_msg = kzalloc(sizeof(struct sock_msg_q), GFP_ATOMIC | GFP_DMA);
+	save_msg = kzalloc_obj(struct sock_msg_q, GFP_ATOMIC | GFP_DMA);
 	if (!save_msg)
 		goto out_unlock;
 	save_msg->path = path;
diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c
index b43b1059eea8..0c3492c873ca 100644
--- a/net/iucv/iucv.c
+++ b/net/iucv/iucv.c
@@ -90,7 +90,7 @@ struct device *iucv_alloc_device(const struct attribute_group **attrs,
 	char buf[20];
 	int rc;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		goto out_error;
 	va_start(vargs, fmt);
@@ -378,7 +378,7 @@ static int iucv_query_maxconn(void)
 	void *param;
 	int ccode;

-	param = kzalloc(sizeof(union iucv_param), GFP_KERNEL | GFP_DMA);
+	param = kzalloc_obj(union iucv_param, GFP_KERNEL | GFP_DMA);
 	if (!param)
 		return -ENOMEM;
 	ccode = __iucv_query_maxconn(param, &max_pathid);
@@ -1808,7 +1808,7 @@ static void iucv_external_interrupt(struct ext_code ext_code,
 		return;
 	}
 	BUG_ON(p->iptype  < 0x01 || p->iptype > 0x09);
-	work = kmalloc(sizeof(struct iucv_irq_list), GFP_ATOMIC);
+	work = kmalloc_obj(struct iucv_irq_list, GFP_ATOMIC);
 	if (!work) {
 		pr_warn("iucv_external_interrupt: out of memory\n");
 		return;
diff --git a/net/key/af_key.c b/net/key/af_key.c
index 571200433aa9..83c7697c679a 100644
--- a/net/key/af_key.c
+++ b/net/key/af_key.c
@@ -1196,7 +1196,7 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
 				err = -ENOSYS;
 				goto out;
 			}
-			x->calg = kmalloc(sizeof(*x->calg), GFP_KERNEL);
+			x->calg = kmalloc_obj(*x->calg, GFP_KERNEL);
 			if (!x->calg) {
 				err = -ENOMEM;
 				goto out;
@@ -1261,7 +1261,7 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
 		const struct sadb_x_nat_t_type* n_type;
 		struct xfrm_encap_tmpl *natt;

-		x->encap = kzalloc(sizeof(*x->encap), GFP_KERNEL);
+		x->encap = kzalloc_obj(*x->encap, GFP_KERNEL);
 		if (!x->encap) {
 			err = -ENOMEM;
 			goto out;
@@ -1855,7 +1855,7 @@ static int pfkey_dump(struct sock *sk, struct sk_buff *skb, const struct sadb_ms
 			mutex_unlock(&pfk->dump_lock);
 			return -EINVAL;
 		}
-		filter = kmalloc(sizeof(*filter), GFP_KERNEL);
+		filter = kmalloc_obj(*filter, GFP_KERNEL);
 		if (filter == NULL) {
 			mutex_unlock(&pfk->dump_lock);
 			return -ENOMEM;
diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
index f9b0f666600f..1b84338f2a90 100644
--- a/net/l2tp/l2tp_core.c
+++ b/net/l2tp/l2tp_core.c
@@ -487,7 +487,7 @@ static int l2tp_session_collision_add(struct l2tp_net *pn,
 		/* First collision. Allocate list to manage the collided sessions
 		 * and add the existing session to the list.
 		 */
-		clist = kmalloc(sizeof(*clist), GFP_ATOMIC);
+		clist = kmalloc_obj(*clist, GFP_ATOMIC);
 		if (!clist)
 			return -ENOMEM;

@@ -1572,7 +1572,7 @@ int l2tp_tunnel_create(int fd, int version, u32 tunnel_id, u32 peer_tunnel_id,
 	if (cfg)
 		encap = cfg->encap;

-	tunnel = kzalloc(sizeof(*tunnel), GFP_KERNEL);
+	tunnel = kzalloc_obj(*tunnel, GFP_KERNEL);
 	if (!tunnel) {
 		err = -ENOMEM;
 		goto err;
diff --git a/net/l2tp/l2tp_debugfs.c b/net/l2tp/l2tp_debugfs.c
index 5cfaab7d0890..56ea3ed20581 100644
--- a/net/l2tp/l2tp_debugfs.c
+++ b/net/l2tp/l2tp_debugfs.c
@@ -269,7 +269,7 @@ static int l2tp_dfs_seq_open(struct inode *inode, struct file *file)
 	struct seq_file *seq;
 	int rc = -ENOMEM;

-	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+	pd = kzalloc_obj(*pd, GFP_KERNEL);
 	if (!pd)
 		goto out;

diff --git a/net/lapb/lapb_iface.c b/net/lapb/lapb_iface.c
index a0596e1f91da..670e0859a3e6 100644
--- a/net/lapb/lapb_iface.c
+++ b/net/lapb/lapb_iface.c
@@ -110,7 +110,7 @@ static struct lapb_cb *lapb_devtostruct(struct net_device *dev)
  */
 static struct lapb_cb *lapb_create_cb(void)
 {
-	struct lapb_cb *lapb = kzalloc(sizeof(*lapb), GFP_ATOMIC);
+	struct lapb_cb *lapb = kzalloc_obj(*lapb, GFP_ATOMIC);

 	if (!lapb)
 		goto out;
diff --git a/net/llc/llc_core.c b/net/llc/llc_core.c
index 4f16d9c88350..d73f5414d8ce 100644
--- a/net/llc/llc_core.c
+++ b/net/llc/llc_core.c
@@ -32,7 +32,7 @@ static DEFINE_SPINLOCK(llc_sap_list_lock);
  */
 static struct llc_sap *llc_sap_alloc(void)
 {
-	struct llc_sap *sap = kzalloc(sizeof(*sap), GFP_ATOMIC);
+	struct llc_sap *sap = kzalloc_obj(*sap, GFP_ATOMIC);
 	int i;

 	if (sap) {
diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c
index 7da909d78c68..e8670a46371c 100644
--- a/net/mac80211/agg-rx.c
+++ b/net/mac80211/agg-rx.c
@@ -395,7 +395,7 @@ void __ieee80211_start_rx_ba_session(struct sta_info *sta,
 	}

 	/* prepare A-MPDU MLME for Rx aggregation */
-	tid_agg_rx = kzalloc(sizeof(*tid_agg_rx), GFP_KERNEL);
+	tid_agg_rx = kzalloc_obj(*tid_agg_rx, GFP_KERNEL);
 	if (!tid_agg_rx)
 		goto end;

@@ -411,7 +411,7 @@ void __ieee80211_start_rx_ba_session(struct sta_info *sta,

 	/* prepare reordering buffer */
 	tid_agg_rx->reorder_buf =
-		kcalloc(buf_size, sizeof(struct sk_buff_head), GFP_KERNEL);
+		kzalloc_objs(struct sk_buff_head, buf_size, GFP_KERNEL);
 	tid_agg_rx->reorder_time =
 		kcalloc(buf_size, sizeof(unsigned long), GFP_KERNEL);
 	if (!tid_agg_rx->reorder_buf || !tid_agg_rx->reorder_time) {
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index d981b0fc57bf..93b47a7ba9c4 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -710,7 +710,7 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
 	}

 	/* prepare A-MPDU MLME for Tx aggregation */
-	tid_tx = kzalloc(sizeof(struct tid_ampdu_tx), GFP_ATOMIC);
+	tid_tx = kzalloc_obj(struct tid_ampdu_tx, GFP_ATOMIC);
 	if (!tid_tx) {
 		ret = -ENOMEM;
 		goto err_unlock_sta;
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 5d04d7d550b0..d1adbc4984d1 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -3940,9 +3940,8 @@ cfg80211_beacon_dup(struct cfg80211_beacon_data *beacon)

 	if (beacon->mbssid_ies && beacon->mbssid_ies->cnt) {
 		new_beacon->mbssid_ies =
-			kzalloc(struct_size(new_beacon->mbssid_ies,
-					    elem, beacon->mbssid_ies->cnt),
-				GFP_KERNEL);
+			kzalloc_flex(*new_beacon->mbssid_ies, elem,
+				     beacon->mbssid_ies->cnt, GFP_KERNEL);
 		if (!new_beacon->mbssid_ies) {
 			kfree(new_beacon);
 			return NULL;
@@ -3950,9 +3949,8 @@ cfg80211_beacon_dup(struct cfg80211_beacon_data *beacon)

 		if (beacon->rnr_ies && beacon->rnr_ies->cnt) {
 			new_beacon->rnr_ies =
-				kzalloc(struct_size(new_beacon->rnr_ies,
-						    elem, beacon->rnr_ies->cnt),
-					GFP_KERNEL);
+				kzalloc_flex(*new_beacon->rnr_ies, elem,
+					     beacon->rnr_ies->cnt, GFP_KERNEL);
 			if (!new_beacon->rnr_ies) {
 				kfree(new_beacon->mbssid_ies);
 				kfree(new_beacon);
@@ -4744,7 +4742,7 @@ static int ieee80211_set_qos_map(struct wiphy *wiphy,
 	struct mac80211_qos_map *new_qos_map, *old_qos_map;

 	if (qos_map) {
-		new_qos_map = kzalloc(sizeof(*new_qos_map), GFP_KERNEL);
+		new_qos_map = kzalloc_obj(*new_qos_map, GFP_KERNEL);
 		if (!new_qos_map)
 			return -ENOMEM;
 		memcpy(&new_qos_map->qos_map, qos_map, sizeof(*qos_map));
diff --git a/net/mac80211/chan.c b/net/mac80211/chan.c
index d8c5f11afc15..60654b0b542d 100644
--- a/net/mac80211/chan.c
+++ b/net/mac80211/chan.c
@@ -1612,7 +1612,7 @@ static int ieee80211_chsw_switch_vifs(struct ieee80211_local *local,

 	lockdep_assert_wiphy(local->hw.wiphy);

-	vif_chsw = kcalloc(n_vifs, sizeof(vif_chsw[0]), GFP_KERNEL);
+	vif_chsw = kzalloc_objs(vif_chsw[0], n_vifs, GFP_KERNEL);
 	if (!vif_chsw)
 		return -ENOMEM;

diff --git a/net/mac80211/led.c b/net/mac80211/led.c
index fabbffdd3ac2..f93fe928c4bc 100644
--- a/net/mac80211/led.c
+++ b/net/mac80211/led.c
@@ -298,7 +298,7 @@ __ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw,
 	if (WARN_ON(local->tpt_led_trigger))
 		return NULL;

-	tpt_trig = kzalloc(sizeof(struct tpt_led_trigger), GFP_KERNEL);
+	tpt_trig = kzalloc_obj(struct tpt_led_trigger, GFP_KERNEL);
 	if (!tpt_trig)
 		return NULL;

diff --git a/net/mac80211/link.c b/net/mac80211/link.c
index 17bf55dabd31..7102d113d89d 100644
--- a/net/mac80211/link.c
+++ b/net/mac80211/link.c
@@ -295,7 +295,7 @@ static int ieee80211_vif_update_links(struct ieee80211_sub_if_data *sdata,

 	/* allocate new link structures first */
 	for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
-		link = kzalloc(sizeof(*link), GFP_KERNEL);
+		link = kzalloc_obj(*link, GFP_KERNEL);
 		if (!link) {
 			ret = -ENOMEM;
 			goto free;
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index bedc81956fbc..9825d7c70cbc 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -1359,9 +1359,8 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
 	hw->wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);


-	local->int_scan_req = kzalloc(struct_size(local->int_scan_req,
-						  channels, channels),
-				      GFP_KERNEL);
+	local->int_scan_req = kzalloc_flex(*local->int_scan_req, channels,
+					   channels, GFP_KERNEL);
 	if (!local->int_scan_req)
 		return -ENOMEM;

diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
index 68901f1def0d..a7bd4dd9aa19 100644
--- a/net/mac80211/mesh.c
+++ b/net/mac80211/mesh.c
@@ -178,7 +178,7 @@ int mesh_rmc_init(struct ieee80211_sub_if_data *sdata)
 {
 	int i;

-	sdata->u.mesh.rmc = kmalloc(sizeof(struct mesh_rmc), GFP_KERNEL);
+	sdata->u.mesh.rmc = kmalloc_obj(struct mesh_rmc, GFP_KERNEL);
 	if (!sdata->u.mesh.rmc)
 		return -ENOMEM;
 	sdata->u.mesh.rmc->idx_mask = RMC_BUCKETS - 1;
@@ -1560,8 +1560,7 @@ int ieee80211_mesh_csa_beacon(struct ieee80211_sub_if_data *sdata,

 	lockdep_assert_wiphy(sdata->local->hw.wiphy);

-	tmp_csa_settings = kmalloc(sizeof(*tmp_csa_settings),
-				   GFP_ATOMIC);
+	tmp_csa_settings = kmalloc_obj(*tmp_csa_settings, GFP_ATOMIC);
 	if (!tmp_csa_settings)
 		return -ENOMEM;

diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
index a41b57bd11ff..98d5aaa36d00 100644
--- a/net/mac80211/mesh_hwmp.c
+++ b/net/mac80211/mesh_hwmp.c
@@ -1005,7 +1005,7 @@ static void mesh_queue_preq(struct mesh_path *mpath, u8 flags)
 	struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
 	struct mesh_preq_queue *preq_node;

-	preq_node = kmalloc(sizeof(struct mesh_preq_queue), GFP_ATOMIC);
+	preq_node = kmalloc_obj(struct mesh_preq_queue, GFP_ATOMIC);
 	if (!preq_node) {
 		mhwmp_dbg(sdata, "could not allocate PREQ node\n");
 		return;
diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c
index 0319674be832..03171cf00855 100644
--- a/net/mac80211/mesh_pathtbl.c
+++ b/net/mac80211/mesh_pathtbl.c
@@ -405,7 +405,7 @@ struct mesh_path *mesh_path_new(struct ieee80211_sub_if_data *sdata,
 {
 	struct mesh_path *new_mpath;

-	new_mpath = kzalloc(sizeof(struct mesh_path), gfp_flags);
+	new_mpath = kzalloc_obj(struct mesh_path, gfp_flags);
 	if (!new_mpath)
 		return NULL;

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index e83582b2c377..c1d0808f2545 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -10839,7 +10839,7 @@ int ieee80211_mgd_assoc_ml_reconf(struct ieee80211_sub_if_data *sdata,
 	if (added_links) {
 		bool uapsd_supported;

-		data = kzalloc(sizeof(*data), GFP_KERNEL);
+		data = kzalloc_obj(*data, GFP_KERNEL);
 		if (!data)
 			return -ENOMEM;

diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c
index ae82533e3c02..00ef339f7de4 100644
--- a/net/mac80211/offchannel.c
+++ b/net/mac80211/offchannel.c
@@ -579,7 +579,7 @@ static int ieee80211_start_roc_work(struct ieee80211_local *local,
 	if (!local->emulate_chanctx && !local->ops->remain_on_channel)
 		return -EOPNOTSUPP;

-	roc = kzalloc(sizeof(*roc), GFP_KERNEL);
+	roc = kzalloc_obj(*roc, GFP_KERNEL);
 	if (!roc)
 		return -ENOMEM;

diff --git a/net/mac80211/parse.c b/net/mac80211/parse.c
index 8260f6bdd5b2..2b3632c6008a 100644
--- a/net/mac80211/parse.c
+++ b/net/mac80211/parse.c
@@ -1048,8 +1048,8 @@ ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params)
 	if (WARN_ON(params->link_id >= 0 && params->bss))
 		return NULL;

-	elems_parse = kzalloc(struct_size(elems_parse, scratch, scratch_len),
-			      GFP_ATOMIC);
+	elems_parse = kzalloc_flex(*elems_parse, scratch, scratch_len,
+				   GFP_ATOMIC);
 	if (!elems_parse)
 		return NULL;

diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
index e441f8541603..3ae891be800b 100644
--- a/net/mac80211/rate.c
+++ b/net/mac80211/rate.c
@@ -163,7 +163,7 @@ int ieee80211_rate_control_register(const struct rate_control_ops *ops)
 		}
 	}

-	alg = kzalloc(sizeof(*alg), GFP_KERNEL);
+	alg = kzalloc_obj(*alg, GFP_KERNEL);
 	if (alg == NULL) {
 		mutex_unlock(&rate_ctrl_mutex);
 		return -ENOMEM;
@@ -263,7 +263,7 @@ rate_control_alloc(const char *name, struct ieee80211_local *local)
 {
 	struct rate_control_ref *ref;

-	ref = kmalloc(sizeof(struct rate_control_ref), GFP_KERNEL);
+	ref = kmalloc_obj(struct rate_control_ref, GFP_KERNEL);
 	if (!ref)
 		return NULL;
 	ref->ops = ieee80211_rate_control_ops_get(name);
diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index f66910013218..62745ca00e06 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -1553,7 +1553,7 @@ minstrel_ht_update_rates(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
 	int i = 0;
 	int max_rates = min_t(int, mp->hw->max_rates, IEEE80211_TX_RATE_TABLE_SIZE);

-	rates = kzalloc(sizeof(*rates), GFP_ATOMIC);
+	rates = kzalloc_obj(*rates, GFP_ATOMIC);
 	if (!rates)
 		return;

@@ -1862,7 +1862,7 @@ minstrel_ht_alloc_sta(void *priv, struct ieee80211_sta *sta, gfp_t gfp)
 			max_rates = sband->n_bitrates;
 	}

-	return kzalloc(sizeof(*mi), gfp);
+	return kzalloc_obj(*mi, gfp);
 }

 static void
@@ -1930,7 +1930,7 @@ minstrel_ht_alloc(struct ieee80211_hw *hw)
 	struct minstrel_priv *mp;
 	int i;

-	mp = kzalloc(sizeof(struct minstrel_priv), GFP_ATOMIC);
+	mp = kzalloc_obj(struct minstrel_priv, GFP_ATOMIC);
 	if (!mp)
 		return NULL;

diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index a79ebeb43585..6abcf410a0ca 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -644,7 +644,7 @@ __sta_info_alloc(struct ieee80211_sub_if_data *sdata,
 	wiphy_work_init(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
 #ifdef CONFIG_MAC80211_MESH
 	if (ieee80211_vif_is_mesh(&sdata->vif)) {
-		sta->mesh = kzalloc(sizeof(*sta->mesh), gfp);
+		sta->mesh = kzalloc_obj(*sta->mesh, gfp);
 		if (!sta->mesh)
 			goto free;
 		sta->mesh->plink_sta = sta;
@@ -903,7 +903,7 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
 		goto out_cleanup;
 	}

-	sinfo = kzalloc(sizeof(struct station_info), GFP_KERNEL);
+	sinfo = kzalloc_obj(struct station_info, GFP_KERNEL);
 	if (!sinfo) {
 		err = -ENOMEM;
 		goto out_cleanup;
@@ -1545,7 +1545,7 @@ static void __sta_info_destroy_part2(struct sta_info *sta, bool recalc)
 		}
 	}

-	sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
+	sinfo = kzalloc_obj(*sinfo, GFP_KERNEL);
 	if (sinfo)
 		sta_set_sinfo(sta, sinfo, true);

@@ -3306,7 +3306,7 @@ int ieee80211_sta_allocate_link(struct sta_info *sta, unsigned int link_id)
 		    sta->link[link_id]))
 		return -EBUSY;

-	alloc = kzalloc(sizeof(*alloc), GFP_KERNEL);
+	alloc = kzalloc_obj(*alloc, GFP_KERNEL);
 	if (!alloc)
 		return -ENOMEM;

diff --git a/net/mac80211/tests/util.c b/net/mac80211/tests/util.c
index 9c2d63a5cd2b..cddc46eeb648 100644
--- a/net/mac80211/tests/util.c
+++ b/net/mac80211/tests/util.c
@@ -195,16 +195,16 @@ int t_sdata_init(struct kunit_resource *resource, void *ctx)
 	struct kunit *test = kunit_get_current_test();
 	struct t_sdata *t_sdata;

-	t_sdata = kzalloc(sizeof(*t_sdata), GFP_KERNEL);
+	t_sdata = kzalloc_obj(*t_sdata, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_NULL(test, t_sdata);

 	resource->data = t_sdata;
 	resource->name = "sdata";

-	t_sdata->sdata = kzalloc(sizeof(*t_sdata->sdata), GFP_KERNEL);
+	t_sdata->sdata = kzalloc_obj(*t_sdata->sdata, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_NULL(test, t_sdata->sdata);

-	t_sdata->wiphy = kzalloc(sizeof(*t_sdata->wiphy), GFP_KERNEL);
+	t_sdata->wiphy = kzalloc_obj(*t_sdata->wiphy, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_NULL(test, t_sdata->wiphy);

 	strscpy(t_sdata->sdata->name, "kunit");
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 007f5a368d41..a3113e1d9829 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1611,8 +1611,7 @@ int ieee80211_txq_setup_flows(struct ieee80211_local *local)
 	local->cparams.target = MS2TIME(20);
 	local->cparams.ecn = true;

-	local->cvars = kvcalloc(fq->flows_cnt, sizeof(local->cvars[0]),
-				GFP_KERNEL);
+	local->cvars = kvzalloc_objs(local->cvars[0], fq->flows_cnt, GFP_KERNEL);
 	if (!local->cvars) {
 		spin_lock_bh(&fq->lock);
 		fq_reset(fq, fq_skb_free_func);
@@ -5549,8 +5548,7 @@ ieee80211_beacon_get_ap_ema_list(struct ieee80211_hw *hw,
 	if (!beacon->mbssid_ies || !beacon->mbssid_ies->cnt)
 		return NULL;

-	ema = kzalloc(struct_size(ema, bcn, beacon->mbssid_ies->cnt),
-		      GFP_ATOMIC);
+	ema = kzalloc_flex(*ema, bcn, beacon->mbssid_ies->cnt, GFP_ATOMIC);
 	if (!ema)
 		return NULL;

diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index a5e09c0fa6b3..22efb399b5bc 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1742,9 +1742,8 @@ static int ieee80211_reconfig_nan(struct ieee80211_sub_if_data *sdata)
 	if (WARN_ON(res))
 		return res;

-	funcs = kcalloc(sdata->local->hw.max_nan_de_entries + 1,
-			sizeof(*funcs),
-			GFP_KERNEL);
+	funcs = kzalloc_objs(*funcs, sdata->local->hw.max_nan_de_entries + 1,
+			     GFP_KERNEL);
 	if (!funcs)
 		return -ENOMEM;

diff --git a/net/mac802154/cfg.c b/net/mac802154/cfg.c
index ef7f23af043f..44ad05726db3 100644
--- a/net/mac802154/cfg.c
+++ b/net/mac802154/cfg.c
@@ -339,7 +339,7 @@ static int mac802154_associate(struct wpan_phy *wpan_phy,
 	if (coord->mode == IEEE802154_SHORT_ADDRESSING)
 		return -EINVAL;

-	parent = kzalloc(sizeof(*parent), GFP_KERNEL);
+	parent = kzalloc_obj(*parent, GFP_KERNEL);
 	if (!parent)
 		return -ENOMEM;

diff --git a/net/mac802154/llsec.c b/net/mac802154/llsec.c
index f13b07ebfb98..0489f2515eb6 100644
--- a/net/mac802154/llsec.c
+++ b/net/mac802154/llsec.c
@@ -117,7 +117,7 @@ llsec_key_alloc(const struct ieee802154_llsec_key *template)
 	struct mac802154_llsec_key *key;
 	int i;

-	key = kzalloc(sizeof(*key), GFP_KERNEL);
+	key = kzalloc_obj(*key, GFP_KERNEL);
 	if (!key)
 		return NULL;

@@ -241,7 +241,7 @@ int mac802154_llsec_key_add(struct mac802154_llsec *sec,
 		break;
 	}

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return -ENOMEM;

@@ -369,7 +369,7 @@ int mac802154_llsec_dev_add(struct mac802154_llsec *sec,
 	     llsec_dev_find_long(sec, dev->hwaddr))
 		return -EEXIST;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -441,7 +441,7 @@ int mac802154_llsec_devkey_add(struct mac802154_llsec *sec,
 	if (llsec_devkey_find(dev, &key->key_id))
 		return -EEXIST;

-	devkey = kmalloc(sizeof(*devkey), GFP_KERNEL);
+	devkey = kmalloc_obj(*devkey, GFP_KERNEL);
 	if (!devkey)
 		return -ENOMEM;

@@ -500,7 +500,7 @@ int mac802154_llsec_seclevel_add(struct mac802154_llsec *sec,
 	if (llsec_find_seclevel(sec, sl))
 		return -EEXIST;

-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kmalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -925,7 +925,7 @@ llsec_update_devkey_record(struct mac802154_llsec_device *dev,
 	if (!devkey) {
 		struct mac802154_llsec_device_key *next;

-		next = kzalloc(sizeof(*devkey), GFP_ATOMIC);
+		next = kzalloc_obj(*devkey, GFP_ATOMIC);
 		if (!next)
 			return -ENOMEM;

diff --git a/net/mac802154/rx.c b/net/mac802154/rx.c
index aac359b5c71d..cd8f2a11920d 100644
--- a/net/mac802154/rx.c
+++ b/net/mac802154/rx.c
@@ -213,7 +213,7 @@ ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata,
 		if (!mac802154_is_scanning(sdata->local))
 			goto fail;

-		mac_pkt = kzalloc(sizeof(*mac_pkt), GFP_ATOMIC);
+		mac_pkt = kzalloc_obj(*mac_pkt, GFP_ATOMIC);
 		if (!mac_pkt)
 			goto fail;

@@ -227,7 +227,7 @@ ieee802154_subif_frame(struct ieee802154_sub_if_data *sdata,

 	case IEEE802154_FC_TYPE_MAC_CMD:
 		dev_dbg(&sdata->dev->dev, "MAC COMMAND received\n");
-		mac_pkt = kzalloc(sizeof(*mac_pkt), GFP_ATOMIC);
+		mac_pkt = kzalloc_obj(*mac_pkt, GFP_ATOMIC);
 		if (!mac_pkt)
 			goto fail;

diff --git a/net/mac802154/scan.c b/net/mac802154/scan.c
index a6dab3cc3ad8..583178784c9b 100644
--- a/net/mac802154/scan.c
+++ b/net/mac802154/scan.c
@@ -798,7 +798,7 @@ int mac802154_process_association_req(struct ieee802154_sub_if_data *sdata,
 		goto unlock;
 	}

-	child = kzalloc(sizeof(*child), GFP_KERNEL);
+	child = kzalloc_obj(*child, GFP_KERNEL);
 	if (!child) {
 		ret = -ENOMEM;
 		goto unlock;
diff --git a/net/mctp/device.c b/net/mctp/device.c
index 04c5570bacff..08f3d35fa45b 100644
--- a/net/mctp/device.c
+++ b/net/mctp/device.c
@@ -336,7 +336,7 @@ static struct mctp_dev *mctp_add_dev(struct net_device *dev)

 	ASSERT_RTNL();

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/mctp/neigh.c b/net/mctp/neigh.c
index fc85f0e69301..5894433535eb 100644
--- a/net/mctp/neigh.c
+++ b/net/mctp/neigh.c
@@ -40,7 +40,7 @@ static int mctp_neigh_add(struct mctp_dev *mdev, mctp_eid_t eid,
 		goto out;
 	}

-	neigh = kzalloc(sizeof(*neigh), GFP_KERNEL);
+	neigh = kzalloc_obj(*neigh, GFP_KERNEL);
 	if (!neigh) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/net/mctp/route.c b/net/mctp/route.c
index ecbbe4beb213..349fc650a805 100644
--- a/net/mctp/route.c
+++ b/net/mctp/route.c
@@ -227,7 +227,7 @@ static struct mctp_sk_key *mctp_key_alloc(struct mctp_sock *msk,
 {
 	struct mctp_sk_key *key;

-	key = kzalloc(sizeof(*key), gfp);
+	key = kzalloc_obj(*key, gfp);
 	if (!key)
 		return NULL;

@@ -675,7 +675,7 @@ static struct mctp_route *mctp_route_alloc(void)
 {
 	struct mctp_route *rt;

-	rt = kzalloc(sizeof(*rt), GFP_KERNEL);
+	rt = kzalloc_obj(*rt, GFP_KERNEL);
 	if (!rt)
 		return NULL;

diff --git a/net/mctp/test/utils.c b/net/mctp/test/utils.c
index 37f1ba62a2ab..922b2c353a4e 100644
--- a/net/mctp/test/utils.c
+++ b/net/mctp/test/utils.c
@@ -106,7 +106,7 @@ static struct mctp_test_route *mctp_route_test_alloc(void)
 {
 	struct mctp_test_route *rt;

-	rt = kzalloc(sizeof(*rt), GFP_KERNEL);
+	rt = kzalloc_obj(*rt, GFP_KERNEL);
 	if (!rt)
 		return NULL;

diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
index 580aac112dd2..82d885b8478a 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
@@ -1470,7 +1470,7 @@ static struct mpls_dev *mpls_add_dev(struct net_device *dev)
 	int err = -ENOMEM;
 	int i;

-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return ERR_PTR(err);

@@ -1977,7 +1977,7 @@ static int mpls_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh,
 	struct mpls_route_config *cfg;
 	int err;

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return -ENOMEM;

@@ -2002,7 +2002,7 @@ static int mpls_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh,
 	struct mpls_route_config *cfg;
 	int err;

-	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
+	cfg = kzalloc_obj(*cfg, GFP_KERNEL);
 	if (!cfg)
 		return -ENOMEM;

diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
index e2040c327af6..7298836469b3 100644
--- a/net/mptcp/pm.c
+++ b/net/mptcp/pm.c
@@ -388,7 +388,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
 		goto reset_timer;
 	}

-	add_entry = kmalloc(sizeof(*add_entry), GFP_ATOMIC);
+	add_entry = kmalloc_obj(*add_entry, GFP_ATOMIC);
 	if (!add_entry)
 		return false;

diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index f66129f1e649..7ef1d2bd26e4 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -1842,7 +1842,7 @@ static struct mptcp_subflow_context *subflow_create_ctx(struct sock *sk,
 	struct inet_connection_sock *icsk = inet_csk(sk);
 	struct mptcp_subflow_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), priority);
+	ctx = kzalloc_obj(*ctx, priority);
 	if (!ctx)
 		return NULL;

diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c
index 446e4e3b9553..dec9812c3fbb 100644
--- a/net/ncsi/ncsi-manage.c
+++ b/net/ncsi/ncsi-manage.c
@@ -211,7 +211,7 @@ struct ncsi_channel *ncsi_add_channel(struct ncsi_package *np, unsigned char id)
 	int index;
 	unsigned long flags;

-	nc = kzalloc(sizeof(*nc), GFP_ATOMIC);
+	nc = kzalloc_obj(*nc, GFP_ATOMIC);
 	if (!nc)
 		return NULL;

@@ -285,7 +285,7 @@ struct ncsi_package *ncsi_add_package(struct ncsi_dev_priv *ndp,
 	struct ncsi_package *np, *tmp;
 	unsigned long flags;

-	np = kzalloc(sizeof(*np), GFP_ATOMIC);
+	np = kzalloc_obj(*np, GFP_ATOMIC);
 	if (!np)
 		return NULL;

@@ -1697,7 +1697,7 @@ int ncsi_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)
 		return -ENOSPC;
 	}

-	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
+	vlan = kzalloc_obj(*vlan, GFP_KERNEL);
 	if (!vlan)
 		return -ENOMEM;

@@ -1767,7 +1767,7 @@ struct ncsi_dev *ncsi_register_dev(struct net_device *dev,
 		return nd;

 	/* Create NCSI device */
-	ndp = kzalloc(sizeof(*ndp), GFP_ATOMIC);
+	ndp = kzalloc_obj(*ndp, GFP_ATOMIC);
 	if (!ndp)
 		return NULL;

diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
index cc20e6d56807..c3beef6155b6 100644
--- a/net/netfilter/ipset/ip_set_core.c
+++ b/net/netfilter/ipset/ip_set_core.c
@@ -1077,7 +1077,7 @@ static int ip_set_create(struct sk_buff *skb, const struct nfnl_info *info,
 	/* First, and without any locks, allocate and initialize
 	 * a normal base set structure.
 	 */
-	set = kzalloc(sizeof(*set), GFP_KERNEL);
+	set = kzalloc_obj(*set, GFP_KERNEL);
 	if (!set)
 		return -ENOMEM;
 	spin_lock_init(&set->lock);
@@ -1135,7 +1135,7 @@ static int ip_set_create(struct sk_buff *skb, const struct nfnl_info *info,
 			/* Wraparound */
 			goto cleanup;

-		list = kvcalloc(i, sizeof(struct ip_set *), GFP_KERNEL);
+		list = kvzalloc_objs(struct ip_set *, i, GFP_KERNEL);
 		if (!list)
 			goto cleanup;
 		/* nfnl mutex is held, both lists are valid */
@@ -2377,7 +2377,7 @@ ip_set_net_init(struct net *net)
 	if (inst->ip_set_max >= IPSET_INVALID_ID)
 		inst->ip_set_max = IPSET_INVALID_ID - 1;

-	list = kvcalloc(inst->ip_set_max, sizeof(struct ip_set *), GFP_KERNEL);
+	list = kvzalloc_objs(struct ip_set *, inst->ip_set_max, GFP_KERNEL);
 	if (!list)
 		return -ENOMEM;
 	inst->is_deleted = false;
diff --git a/net/netfilter/ipset/ip_set_hash_gen.h b/net/netfilter/ipset/ip_set_hash_gen.h
index 5e4453e9ef8e..181daa9c2019 100644
--- a/net/netfilter/ipset/ip_set_hash_gen.h
+++ b/net/netfilter/ipset/ip_set_hash_gen.h
@@ -998,7 +998,7 @@ mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext,
 		/* Resize is in process and kernel side add, save values */
 		struct mtype_resize_ad *x;

-		x = kzalloc(sizeof(struct mtype_resize_ad), GFP_ATOMIC);
+		x = kzalloc_obj(struct mtype_resize_ad, GFP_ATOMIC);
 		if (!x)
 			/* Don't bother */
 			goto out;
@@ -1086,8 +1086,7 @@ mtype_del(struct ip_set *set, void *value, const struct ip_set_ext *ext,
 			/* Resize is in process and kernel side del,
 			 * save values
 			 */
-			x = kzalloc(sizeof(struct mtype_resize_ad),
-				    GFP_ATOMIC);
+			x = kzalloc_obj(struct mtype_resize_ad, GFP_ATOMIC);
 			if (x) {
 				x->ad = IPSET_DEL;
 				memcpy(&x->d, value,
diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
index 13c7a08aa868..39165c014bd9 100644
--- a/net/netfilter/ipset/ip_set_list_set.c
+++ b/net/netfilter/ipset/ip_set_list_set.c
@@ -598,7 +598,7 @@ init_list_set(struct net *net, struct ip_set *set, u32 size)
 {
 	struct list_set *map;

-	map = kzalloc(sizeof(*map), GFP_KERNEL);
+	map = kzalloc_obj(*map, GFP_KERNEL);
 	if (!map)
 		return false;

diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
index 50cc492c7553..e05991ec49f3 100644
--- a/net/netfilter/ipvs/ip_vs_conn.c
+++ b/net/netfilter/ipvs/ip_vs_conn.c
@@ -1510,8 +1510,8 @@ int __init ip_vs_conn_init(void)
 	 */
 	tab_array_size = array_size(ip_vs_conn_tab_size,
 				    sizeof(*ip_vs_conn_tab));
-	ip_vs_conn_tab = kvmalloc_array(ip_vs_conn_tab_size,
-					sizeof(*ip_vs_conn_tab), GFP_KERNEL);
+	ip_vs_conn_tab = kvmalloc_objs(*ip_vs_conn_tab, ip_vs_conn_tab_size,
+				       GFP_KERNEL);
 	if (!ip_vs_conn_tab)
 		return -ENOMEM;

diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
index 068702894377..d38867c52180 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -938,7 +938,7 @@ int ip_vs_stats_init_alloc(struct ip_vs_stats *s)

 struct ip_vs_stats *ip_vs_stats_alloc(void)
 {
-	struct ip_vs_stats *s = kzalloc(sizeof(*s), GFP_KERNEL);
+	struct ip_vs_stats *s = kzalloc_obj(*s, GFP_KERNEL);

 	if (s && ip_vs_stats_init_alloc(s) >= 0)
 		return s;
@@ -1079,7 +1079,7 @@ ip_vs_new_dest(struct ip_vs_service *svc, struct ip_vs_dest_user_kern *udest)
 			return -EINVAL;
 	}

-	dest = kzalloc(sizeof(struct ip_vs_dest), GFP_KERNEL);
+	dest = kzalloc_obj(struct ip_vs_dest, GFP_KERNEL);
 	if (dest == NULL)
 		return -ENOMEM;

@@ -1421,7 +1421,7 @@ ip_vs_add_service(struct netns_ipvs *ipvs, struct ip_vs_service_user_kern *u,
 		ret_hooks = ret;
 	}

-	svc = kzalloc(sizeof(struct ip_vs_service), GFP_KERNEL);
+	svc = kzalloc_obj(struct ip_vs_service, GFP_KERNEL);
 	if (svc == NULL) {
 		IP_VS_DBG(1, "%s(): no memory\n", __func__);
 		ret = -ENOMEM;
@@ -4439,7 +4439,7 @@ int __net_init ip_vs_control_net_init(struct netns_ipvs *ipvs)
 	INIT_DELAYED_WORK(&ipvs->est_reload_work, est_reload_work_handler);

 	/* procfs stats */
-	ipvs->tot_stats = kzalloc(sizeof(*ipvs->tot_stats), GFP_KERNEL);
+	ipvs->tot_stats = kzalloc_obj(*ipvs->tot_stats, GFP_KERNEL);
 	if (!ipvs->tot_stats)
 		goto out;
 	if (ip_vs_stats_init_alloc(&ipvs->tot_stats->s) < 0)
diff --git a/net/netfilter/ipvs/ip_vs_dh.c b/net/netfilter/ipvs/ip_vs_dh.c
index bb7aca4601ff..ac1d6f5bfe8a 100644
--- a/net/netfilter/ipvs/ip_vs_dh.c
+++ b/net/netfilter/ipvs/ip_vs_dh.c
@@ -153,7 +153,7 @@ static int ip_vs_dh_init_svc(struct ip_vs_service *svc)
 	struct ip_vs_dh_state *s;

 	/* allocate the DH table for this service */
-	s = kzalloc(sizeof(struct ip_vs_dh_state), GFP_KERNEL);
+	s = kzalloc_obj(struct ip_vs_dh_state, GFP_KERNEL);
 	if (s == NULL)
 		return -ENOMEM;

diff --git a/net/netfilter/ipvs/ip_vs_est.c b/net/netfilter/ipvs/ip_vs_est.c
index 77f4f637ff67..06999a17519b 100644
--- a/net/netfilter/ipvs/ip_vs_est.c
+++ b/net/netfilter/ipvs/ip_vs_est.c
@@ -325,7 +325,7 @@ static int ip_vs_est_add_kthread(struct netns_ipvs *ipvs)
 		id = i;
 	}

-	kd = kzalloc(sizeof(*kd), GFP_KERNEL);
+	kd = kzalloc_obj(*kd, GFP_KERNEL);
 	if (!kd)
 		goto out;
 	kd->ipvs = ipvs;
@@ -443,7 +443,7 @@ static int ip_vs_enqueue_estimator(struct netns_ipvs *ipvs,

 	td = rcu_dereference_protected(kd->ticks[row], 1);
 	if (!td) {
-		td = kzalloc(sizeof(*td), GFP_KERNEL);
+		td = kzalloc_obj(*td, GFP_KERNEL);
 		if (!td) {
 			ret = -ENOMEM;
 			goto out;
diff --git a/net/netfilter/ipvs/ip_vs_lblc.c b/net/netfilter/ipvs/ip_vs_lblc.c
index e6c8ed0c92f6..36d91153712c 100644
--- a/net/netfilter/ipvs/ip_vs_lblc.c
+++ b/net/netfilter/ipvs/ip_vs_lblc.c
@@ -204,7 +204,7 @@ ip_vs_lblc_new(struct ip_vs_lblc_table *tbl, const union nf_inet_addr *daddr,
 			return en;
 		ip_vs_lblc_del(en);
 	}
-	en = kmalloc(sizeof(*en), GFP_ATOMIC);
+	en = kmalloc_obj(*en, GFP_ATOMIC);
 	if (!en)
 		return NULL;

@@ -347,7 +347,7 @@ static int ip_vs_lblc_init_svc(struct ip_vs_service *svc)
 	/*
 	 *    Allocate the ip_vs_lblc_table for this service
 	 */
-	tbl = kmalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kmalloc_obj(*tbl, GFP_KERNEL);
 	if (tbl == NULL)
 		return -ENOMEM;

diff --git a/net/netfilter/ipvs/ip_vs_lblcr.c b/net/netfilter/ipvs/ip_vs_lblcr.c
index a25cf7bb6185..eba6600decbe 100644
--- a/net/netfilter/ipvs/ip_vs_lblcr.c
+++ b/net/netfilter/ipvs/ip_vs_lblcr.c
@@ -107,7 +107,7 @@ static void ip_vs_dest_set_insert(struct ip_vs_dest_set *set,
 		}
 	}

-	e = kmalloc(sizeof(*e), GFP_ATOMIC);
+	e = kmalloc_obj(*e, GFP_ATOMIC);
 	if (e == NULL)
 		return;

@@ -363,7 +363,7 @@ ip_vs_lblcr_new(struct ip_vs_lblcr_table *tbl, const union nf_inet_addr *daddr,

 	en = ip_vs_lblcr_get(af, tbl, daddr);
 	if (!en) {
-		en = kmalloc(sizeof(*en), GFP_ATOMIC);
+		en = kmalloc_obj(*en, GFP_ATOMIC);
 		if (!en)
 			return NULL;

@@ -510,7 +510,7 @@ static int ip_vs_lblcr_init_svc(struct ip_vs_service *svc)
 	/*
 	 *    Allocate the ip_vs_lblcr_table for this service
 	 */
-	tbl = kmalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kmalloc_obj(*tbl, GFP_KERNEL);
 	if (tbl == NULL)
 		return -ENOMEM;

diff --git a/net/netfilter/ipvs/ip_vs_mh.c b/net/netfilter/ipvs/ip_vs_mh.c
index f61f54004c9e..7f5be86bab4d 100644
--- a/net/netfilter/ipvs/ip_vs_mh.c
+++ b/net/netfilter/ipvs/ip_vs_mh.c
@@ -293,9 +293,8 @@ static int ip_vs_mh_reassign(struct ip_vs_mh_state *s,
 		return -EINVAL;

 	if (svc->num_dests >= 1) {
-		s->dest_setup = kcalloc(svc->num_dests,
-					sizeof(struct ip_vs_mh_dest_setup),
-					GFP_KERNEL);
+		s->dest_setup = kzalloc_objs(struct ip_vs_mh_dest_setup,
+					     svc->num_dests, GFP_KERNEL);
 		if (!s->dest_setup)
 			return -ENOMEM;
 	}
@@ -383,12 +382,12 @@ static int ip_vs_mh_init_svc(struct ip_vs_service *svc)
 	struct ip_vs_mh_state *s;

 	/* Allocate the MH table for this service */
-	s = kzalloc(sizeof(*s), GFP_KERNEL);
+	s = kzalloc_obj(*s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;

-	s->lookup = kcalloc(IP_VS_MH_TAB_SIZE, sizeof(struct ip_vs_mh_lookup),
-			    GFP_KERNEL);
+	s->lookup = kzalloc_objs(struct ip_vs_mh_lookup, IP_VS_MH_TAB_SIZE,
+				 GFP_KERNEL);
 	if (!s->lookup) {
 		kfree(s);
 		return -ENOMEM;
diff --git a/net/netfilter/ipvs/ip_vs_proto.c b/net/netfilter/ipvs/ip_vs_proto.c
index fd9dbca24c85..a62c1e8fc1da 100644
--- a/net/netfilter/ipvs/ip_vs_proto.c
+++ b/net/netfilter/ipvs/ip_vs_proto.c
@@ -66,7 +66,7 @@ register_ip_vs_proto_netns(struct netns_ipvs *ipvs, struct ip_vs_protocol *pp)
 {
 	unsigned int hash = IP_VS_PROTO_HASH(pp->protocol);
 	struct ip_vs_proto_data *pd =
-			kzalloc(sizeof(struct ip_vs_proto_data), GFP_KERNEL);
+			kzalloc_obj(struct ip_vs_proto_data, GFP_KERNEL);

 	if (!pd)
 		return -ENOMEM;
diff --git a/net/netfilter/ipvs/ip_vs_sh.c b/net/netfilter/ipvs/ip_vs_sh.c
index 0e85e07e23b9..a4616433b445 100644
--- a/net/netfilter/ipvs/ip_vs_sh.c
+++ b/net/netfilter/ipvs/ip_vs_sh.c
@@ -229,7 +229,7 @@ static int ip_vs_sh_init_svc(struct ip_vs_service *svc)
 	struct ip_vs_sh_state *s;

 	/* allocate the SH table for this service */
-	s = kzalloc(sizeof(struct ip_vs_sh_state), GFP_KERNEL);
+	s = kzalloc_obj(struct ip_vs_sh_state, GFP_KERNEL);
 	if (s == NULL)
 		return -ENOMEM;

diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
index 54dd1514ac45..f83732777228 100644
--- a/net/netfilter/ipvs/ip_vs_sync.c
+++ b/net/netfilter/ipvs/ip_vs_sync.c
@@ -329,7 +329,7 @@ ip_vs_sync_buff_create(struct netns_ipvs *ipvs, unsigned int len)
 {
 	struct ip_vs_sync_buff *sb;

-	if (!(sb=kmalloc(sizeof(struct ip_vs_sync_buff), GFP_ATOMIC)))
+	if (!(sb=kmalloc_obj(struct ip_vs_sync_buff, GFP_ATOMIC)))
 		return NULL;

 	len = max_t(unsigned int, len + sizeof(struct ip_vs_sync_mesg),
@@ -417,7 +417,7 @@ ip_vs_sync_buff_create_v0(struct netns_ipvs *ipvs, unsigned int len)
 	struct ip_vs_sync_buff *sb;
 	struct ip_vs_sync_mesg_v0 *mesg;

-	if (!(sb=kmalloc(sizeof(struct ip_vs_sync_buff), GFP_ATOMIC)))
+	if (!(sb=kmalloc_obj(struct ip_vs_sync_buff, GFP_ATOMIC)))
 		return NULL;

 	len = max_t(unsigned int, len + sizeof(struct ip_vs_sync_mesg_v0),
@@ -1827,7 +1827,7 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
 		struct ipvs_master_sync_state *ms;

 		result = -ENOMEM;
-		ipvs->ms = kcalloc(count, sizeof(ipvs->ms[0]), GFP_KERNEL);
+		ipvs->ms = kzalloc_objs(ipvs->ms[0], count, GFP_KERNEL);
 		if (!ipvs->ms)
 			goto out;
 		ms = ipvs->ms;
@@ -1841,8 +1841,7 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
 		}
 	}
 	result = -ENOMEM;
-	ti = kcalloc(count, sizeof(struct ip_vs_sync_thread_data),
-		     GFP_KERNEL);
+	ti = kzalloc_objs(struct ip_vs_sync_thread_data, count, GFP_KERNEL);
 	if (!ti)
 		goto out;

diff --git a/net/netfilter/ipvs/ip_vs_wrr.c b/net/netfilter/ipvs/ip_vs_wrr.c
index 99f09cbf2d9b..58c65af9830a 100644
--- a/net/netfilter/ipvs/ip_vs_wrr.c
+++ b/net/netfilter/ipvs/ip_vs_wrr.c
@@ -109,7 +109,7 @@ static int ip_vs_wrr_init_svc(struct ip_vs_service *svc)
 	/*
 	 *    Allocate the mark variable for WRR scheduling
 	 */
-	mark = kmalloc(sizeof(struct ip_vs_wrr_mark), GFP_KERNEL);
+	mark = kmalloc_obj(struct ip_vs_wrr_mark, GFP_KERNEL);
 	if (mark == NULL)
 		return -ENOMEM;

diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c
index 4389bfe3050d..3601eb86d025 100644
--- a/net/netfilter/ipvs/ip_vs_xmit.c
+++ b/net/netfilter/ipvs/ip_vs_xmit.c
@@ -57,7 +57,7 @@ enum {

 static inline struct ip_vs_dest_dst *ip_vs_dest_dst_alloc(void)
 {
-	return kmalloc(sizeof(struct ip_vs_dest_dst), GFP_ATOMIC);
+	return kmalloc_obj(struct ip_vs_dest_dst, GFP_ATOMIC);
 }

 static inline void ip_vs_dest_dst_free(struct ip_vs_dest_dst *dest_dst)
diff --git a/net/netfilter/nf_bpf_link.c b/net/netfilter/nf_bpf_link.c
index 46e667a50d98..6f3a6411f4af 100644
--- a/net/netfilter/nf_bpf_link.c
+++ b/net/netfilter/nf_bpf_link.c
@@ -221,7 +221,7 @@ int bpf_nf_link_attach(const union bpf_attr *attr, struct bpf_prog *prog)
 	if (err)
 		return err;

-	link = kzalloc(sizeof(*link), GFP_USER);
+	link = kzalloc_obj(*link, GFP_USER);
 	if (!link)
 		return -ENOMEM;

diff --git a/net/netfilter/nf_conncount.c b/net/netfilter/nf_conncount.c
index 14e62b3263cd..520781335fc8 100644
--- a/net/netfilter/nf_conncount.c
+++ b/net/netfilter/nf_conncount.c
@@ -632,7 +632,7 @@ struct nf_conncount_data *nf_conncount_init(struct net *net, unsigned int keylen

 	net_get_random_once(&conncount_rnd, sizeof(conncount_rnd));

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index d1f8eb725d42..42da155ab028 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -536,7 +536,7 @@ struct nf_conn *nf_ct_tmpl_alloc(struct net *net,
 		if (tmpl != p)
 			tmpl->proto.tmpl_padto = (char *)tmpl - (char *)p;
 	} else {
-		tmpl = kzalloc(sizeof(*tmpl), flags);
+		tmpl = kzalloc_obj(*tmpl, flags);
 		if (!tmpl)
 			return NULL;
 	}
@@ -2535,7 +2535,7 @@ void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls)
 	if (nr_slots > (INT_MAX / sizeof(struct hlist_nulls_head)))
 		return NULL;

-	hash = kvcalloc(nr_slots, sizeof(struct hlist_nulls_head), GFP_KERNEL);
+	hash = kvzalloc_objs(struct hlist_nulls_head, nr_slots, GFP_KERNEL);

 	if (hash && nulls)
 		for (i = 0; i < nr_slots; i++)
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
index 662f6bbfa805..cd1ab584fb2f 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -999,7 +999,7 @@ ctnetlink_alloc_filter(const struct nlattr * const cda[], u8 family)
 		return ERR_PTR(-EOPNOTSUPP);
 #endif

-	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
+	filter = kzalloc_obj(*filter, GFP_KERNEL);
 	if (filter == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/netfilter/nf_conntrack_proto_gre.c b/net/netfilter/nf_conntrack_proto_gre.c
index b894bb7a97ad..94c19bc4edc5 100644
--- a/net/netfilter/nf_conntrack_proto_gre.c
+++ b/net/netfilter/nf_conntrack_proto_gre.c
@@ -108,7 +108,7 @@ int nf_ct_gre_keymap_add(struct nf_conn *ct, enum ip_conntrack_dir dir,
 		return -EEXIST;
 	}

-	km = kmalloc(sizeof(*km), GFP_ATOMIC);
+	km = kmalloc_obj(*km, GFP_ATOMIC);
 	if (!km)
 		return -ENOMEM;
 	memcpy(&km->tuple, t, sizeof(*t));
diff --git a/net/netfilter/nf_flow_table_offload.c b/net/netfilter/nf_flow_table_offload.c
index b1966b68c48a..c95a18ca178b 100644
--- a/net/netfilter/nf_flow_table_offload.c
+++ b/net/netfilter/nf_flow_table_offload.c
@@ -741,7 +741,7 @@ nf_flow_offload_rule_alloc(struct net *net,
 	struct nf_flow_rule *flow_rule;
 	int err = -ENOMEM;

-	flow_rule = kzalloc(sizeof(*flow_rule), GFP_KERNEL);
+	flow_rule = kzalloc_obj(*flow_rule, GFP_KERNEL);
 	if (!flow_rule)
 		goto err_flow;

@@ -1022,7 +1022,7 @@ nf_flow_offload_work_alloc(struct nf_flowtable *flowtable,
 	if (test_and_set_bit(NF_FLOW_HW_PENDING, &flow->flags))
 		return NULL;

-	offload = kmalloc(sizeof(struct flow_offload_work), GFP_ATOMIC);
+	offload = kmalloc_obj(struct flow_offload_work, GFP_ATOMIC);
 	if (!offload) {
 		clear_bit(NF_FLOW_HW_PENDING, &flow->flags);
 		return NULL;
diff --git a/net/netfilter/nf_flow_table_xdp.c b/net/netfilter/nf_flow_table_xdp.c
index e1252d042699..86ac65e9b579 100644
--- a/net/netfilter/nf_flow_table_xdp.c
+++ b/net/netfilter/nf_flow_table_xdp.c
@@ -54,7 +54,7 @@ static int nf_flowtable_by_dev_insert(struct nf_flowtable *ft,
 	unsigned long key = (unsigned long)dev;
 	struct flow_offload_xdp_ft *ft_elem;

-	ft_elem = kzalloc(sizeof(*ft_elem), GFP_KERNEL_ACCOUNT);
+	ft_elem = kzalloc_obj(*ft_elem, GFP_KERNEL_ACCOUNT);
 	if (!ft_elem)
 		return -ENOMEM;

@@ -70,7 +70,7 @@ static int nf_flowtable_by_dev_insert(struct nf_flowtable *ft,
 	}

 	if (!elem) {
-		elem = kzalloc(sizeof(*elem), GFP_KERNEL_ACCOUNT);
+		elem = kzalloc_obj(*elem, GFP_KERNEL_ACCOUNT);
 		if (!elem)
 			goto err_unlock;

diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
index 62cf6a30875e..f4d80654dfe6 100644
--- a/net/netfilter/nf_log.c
+++ b/net/netfilter/nf_log.c
@@ -317,7 +317,7 @@ EXPORT_SYMBOL_GPL(nf_log_buf_add);

 struct nf_log_buf *nf_log_buf_open(void)
 {
-	struct nf_log_buf *m = kmalloc(sizeof(*m), GFP_ATOMIC);
+	struct nf_log_buf *m = kmalloc_obj(*m, GFP_ATOMIC);

 	if (unlikely(!m)) {
 		local_bh_disable();
diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c
index e6b24586d2fe..b4053e5ee07f 100644
--- a/net/netfilter/nf_nat_core.c
+++ b/net/netfilter/nf_nat_core.c
@@ -1213,7 +1213,7 @@ int nf_nat_register_fn(struct net *net, u8 pf, const struct nf_hook_ops *ops,
 		}

 		for (i = 0; i < ops_count; i++) {
-			priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+			priv = kzalloc_obj(*priv, GFP_KERNEL);
 			if (priv) {
 				nat_ops[i].priv = priv;
 				continue;
diff --git a/net/netfilter/nf_nat_masquerade.c b/net/netfilter/nf_nat_masquerade.c
index 1a506b0c6511..a5a23c03fda9 100644
--- a/net/netfilter/nf_nat_masquerade.c
+++ b/net/netfilter/nf_nat_masquerade.c
@@ -115,7 +115,7 @@ static void nf_nat_masq_schedule(struct net *net, union nf_inet_addr *addr,
 	if (!try_module_get(THIS_MODULE))
 		goto err_module;

-	w = kzalloc(sizeof(*w), gfp_flags);
+	w = kzalloc_obj(*w, gfp_flags);
 	if (w) {
 		/* We can overshoot MAX_MASQ_WORKER_COUNT, no big deal */
 		atomic_inc(&masq_worker_count);
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index 0c5a4855b97d..6044f1ec6953 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -1104,7 +1104,7 @@ __printf(2, 3) int nft_request_module(struct net *net, const char *fmt,
 		}
 	}

-	req = kmalloc(sizeof(*req), GFP_KERNEL);
+	req = kmalloc_obj(*req, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;

@@ -1624,7 +1624,7 @@ static int nf_tables_newtable(struct sk_buff *skb, const struct nfnl_info *info,
 	}

 	err = -ENOMEM;
-	table = kzalloc(sizeof(*table), GFP_KERNEL_ACCOUNT);
+	table = kzalloc_obj(*table, GFP_KERNEL_ACCOUNT);
 	if (table == NULL)
 		goto err_kzalloc;

@@ -2348,7 +2348,7 @@ static struct nft_hook *nft_netdev_hook_alloc(struct net *net,
 	struct nft_hook *hook;
 	int err;

-	hook = kzalloc(sizeof(struct nft_hook), GFP_KERNEL_ACCOUNT);
+	hook = kzalloc_obj(struct nft_hook, GFP_KERNEL_ACCOUNT);
 	if (!hook)
 		return ERR_PTR(-ENOMEM);

@@ -2369,7 +2369,7 @@ static struct nft_hook *nft_netdev_hook_alloc(struct net *net,
 		if (strncmp(dev->name, hook->ifname, hook->ifnamelen))
 			continue;

-		ops = kzalloc(sizeof(struct nf_hook_ops), GFP_KERNEL_ACCOUNT);
+		ops = kzalloc_obj(struct nf_hook_ops, GFP_KERNEL_ACCOUNT);
 		if (!ops) {
 			err = -ENOMEM;
 			goto err_hook_free;
@@ -2716,7 +2716,7 @@ static int nf_tables_addchain(struct nft_ctx *ctx, u8 family, u8 policy,
 		if (err < 0)
 			return err;

-		basechain = kzalloc(sizeof(*basechain), GFP_KERNEL_ACCOUNT);
+		basechain = kzalloc_obj(*basechain, GFP_KERNEL_ACCOUNT);
 		if (basechain == NULL) {
 			nft_chain_release_hook(&hook);
 			return -ENOMEM;
@@ -2748,7 +2748,7 @@ static int nf_tables_addchain(struct nft_ctx *ctx, u8 family, u8 policy,
 		if (flags & NFT_CHAIN_HW_OFFLOAD)
 			return -EOPNOTSUPP;

-		chain = kzalloc(sizeof(*chain), GFP_KERNEL_ACCOUNT);
+		chain = kzalloc_obj(*chain, GFP_KERNEL_ACCOUNT);
 		if (chain == NULL)
 			return -ENOMEM;

@@ -4315,9 +4315,8 @@ static int nf_tables_newrule(struct sk_buff *skb, const struct nfnl_info *info,
 	n = 0;
 	size = 0;
 	if (nla[NFTA_RULE_EXPRESSIONS]) {
-		expr_info = kvmalloc_array(NFT_RULE_MAXEXPRS,
-					   sizeof(struct nft_expr_info),
-					   GFP_KERNEL);
+		expr_info = kvmalloc_objs(struct nft_expr_info,
+					  NFT_RULE_MAXEXPRS, GFP_KERNEL);
 		if (!expr_info)
 			return -ENOMEM;

@@ -6929,7 +6928,7 @@ static int nft_setelem_catchall_insert(const struct net *net,
 		}
 	}

-	catchall = kmalloc(sizeof(*catchall), GFP_KERNEL_ACCOUNT);
+	catchall = kmalloc_obj(*catchall, GFP_KERNEL_ACCOUNT);
 	if (!catchall)
 		return -ENOMEM;

@@ -8076,7 +8075,7 @@ static struct nft_object *nft_obj_init(const struct nft_ctx *ctx,
 	struct nft_object *obj;
 	int err = -ENOMEM;

-	tb = kmalloc_array(type->maxattr + 1, sizeof(*tb), GFP_KERNEL);
+	tb = kmalloc_objs(*tb, type->maxattr + 1, GFP_KERNEL);
 	if (!tb)
 		goto err1;

@@ -9145,7 +9144,7 @@ static int nf_tables_newflowtable(struct sk_buff *skb,
 	if (!nft_use_inc(&table->use))
 		return -EMFILE;

-	flowtable = kzalloc(sizeof(*flowtable), GFP_KERNEL_ACCOUNT);
+	flowtable = kzalloc_obj(*flowtable, GFP_KERNEL_ACCOUNT);
 	if (!flowtable) {
 		err = -ENOMEM;
 		goto flowtable_alloc;
@@ -9465,7 +9464,7 @@ static int nf_tables_dump_flowtable_start(struct netlink_callback *cb)
 	struct nft_flowtable_filter *filter = NULL;

 	if (nla[NFTA_FLOWTABLE_TABLE]) {
-		filter = kzalloc(sizeof(*filter), GFP_ATOMIC);
+		filter = kzalloc_obj(*filter, GFP_ATOMIC);
 		if (!filter)
 			return -ENOMEM;

@@ -9682,8 +9681,8 @@ static int nft_flowtable_event(unsigned long event, struct net_device *dev,
 			if (!match || (changename && ops))
 				continue;

-			ops = kzalloc(sizeof(struct nf_hook_ops),
-				      GFP_KERNEL_ACCOUNT);
+			ops = kzalloc_obj(struct nf_hook_ops,
+					  GFP_KERNEL_ACCOUNT);
 			if (!ops)
 				return 1;

@@ -10453,7 +10452,7 @@ struct nft_trans_gc *nft_trans_gc_alloc(struct nft_set *set,
 	struct net *net = read_pnet(&set->net);
 	struct nft_trans_gc *trans;

-	trans = kzalloc(sizeof(*trans), gfp);
+	trans = kzalloc_obj(*trans, gfp);
 	if (!trans)
 		return NULL;

@@ -10689,7 +10688,7 @@ static int nf_tables_commit_audit_alloc(struct list_head *adl,
 		if (adp->table == table)
 			return 0;
 	}
-	adp = kzalloc(sizeof(*adp), GFP_KERNEL);
+	adp = kzalloc_obj(*adp, GFP_KERNEL);
 	if (!adp)
 		return -ENOMEM;
 	adp->table = table;
diff --git a/net/netfilter/nf_tables_offload.c b/net/netfilter/nf_tables_offload.c
index fd30e205de84..42f11cb0c0f5 100644
--- a/net/netfilter/nf_tables_offload.c
+++ b/net/netfilter/nf_tables_offload.c
@@ -11,7 +11,7 @@ static struct nft_flow_rule *nft_flow_rule_alloc(int num_actions)
 {
 	struct nft_flow_rule *flow;

-	flow = kzalloc(sizeof(struct nft_flow_rule), GFP_KERNEL);
+	flow = kzalloc_obj(struct nft_flow_rule, GFP_KERNEL);
 	if (!flow)
 		return NULL;

@@ -111,7 +111,7 @@ struct nft_flow_rule *nft_flow_rule_create(struct net *net,

 	expr = nft_expr_first(rule);

-	ctx = kzalloc(sizeof(struct nft_offload_ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(struct nft_offload_ctx, GFP_KERNEL);
 	if (!ctx) {
 		err = -ENOMEM;
 		goto err_out;
diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c
index 811d02b4c4f7..39c3d54de9f6 100644
--- a/net/netfilter/nfnetlink.c
+++ b/net/netfilter/nfnetlink.c
@@ -325,7 +325,7 @@ static int nfnl_err_add(struct list_head *list, struct nlmsghdr *nlh, int err,
 {
 	struct nfnl_err *nfnl_err;

-	nfnl_err = kmalloc(sizeof(struct nfnl_err), GFP_KERNEL);
+	nfnl_err = kmalloc_obj(struct nfnl_err, GFP_KERNEL);
 	if (nfnl_err == NULL)
 		return -ENOMEM;

diff --git a/net/netfilter/nfnetlink_acct.c b/net/netfilter/nfnetlink_acct.c
index 505f46a32173..bd3d960a1adb 100644
--- a/net/netfilter/nfnetlink_acct.c
+++ b/net/netfilter/nfnetlink_acct.c
@@ -260,7 +260,7 @@ static int nfnl_acct_start(struct netlink_callback *cb)
 	if (!tb[NFACCT_FILTER_MASK] || !tb[NFACCT_FILTER_VALUE])
 		return -EINVAL;

-	filter = kzalloc(sizeof(struct nfacct_filter), GFP_KERNEL);
+	filter = kzalloc_obj(struct nfacct_filter, GFP_KERNEL);
 	if (!filter)
 		return -ENOMEM;

diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index 97248963a7d3..1a3d333e45dd 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -192,9 +192,8 @@ nfnl_cthelper_parse_expect_policy(struct nf_conntrack_helper *helper,
 	if (class_max > NF_CT_MAX_EXPECT_CLASSES)
 		return -EOVERFLOW;

-	expect_policy = kcalloc(class_max,
-				sizeof(struct nf_conntrack_expect_policy),
-				GFP_KERNEL);
+	expect_policy = kzalloc_objs(struct nf_conntrack_expect_policy,
+				     class_max, GFP_KERNEL);
 	if (expect_policy == NULL)
 		return -ENOMEM;

@@ -228,7 +227,7 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 	if (!tb[NFCTH_TUPLE] || !tb[NFCTH_POLICY] || !tb[NFCTH_PRIV_DATA_LEN])
 		return -EINVAL;

-	nfcth = kzalloc(sizeof(*nfcth), GFP_KERNEL);
+	nfcth = kzalloc_obj(*nfcth, GFP_KERNEL);
 	if (nfcth == NULL)
 		return -ENOMEM;
 	helper = &nfcth->helper;
@@ -323,8 +322,8 @@ static int nfnl_cthelper_update_policy_all(struct nlattr *tb[],
 	struct nf_conntrack_expect_policy *policy;
 	int i, ret = 0;

-	new_policy = kmalloc_array(helper->expect_class_max + 1,
-				   sizeof(*new_policy), GFP_KERNEL);
+	new_policy = kmalloc_objs(*new_policy, helper->expect_class_max + 1,
+				  GFP_KERNEL);
 	if (!new_policy)
 		return -ENOMEM;

diff --git a/net/netfilter/nfnetlink_cttimeout.c b/net/netfilter/nfnetlink_cttimeout.c
index 38d75484e531..6b91f9d3161a 100644
--- a/net/netfilter/nfnetlink_cttimeout.c
+++ b/net/netfilter/nfnetlink_cttimeout.c
@@ -74,8 +74,7 @@ ctnl_timeout_parse_policy(void *timeout,
 	struct nlattr **tb;
 	int ret = 0;

-	tb = kcalloc(l4proto->ctnl_timeout.nlattr_max + 1, sizeof(*tb),
-		     GFP_KERNEL);
+	tb = kzalloc_objs(*tb, l4proto->ctnl_timeout.nlattr_max + 1, GFP_KERNEL);

 	if (!tb)
 		return -ENOMEM;
diff --git a/net/netfilter/nfnetlink_hook.c b/net/netfilter/nfnetlink_hook.c
index 92d869317cba..c2a572d86853 100644
--- a/net/netfilter/nfnetlink_hook.c
+++ b/net/netfilter/nfnetlink_hook.c
@@ -408,7 +408,7 @@ static int nfnl_hook_dump_start(struct netlink_callback *cb)
 	if (head && IS_ERR(head))
 		return PTR_ERR(head);

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
index bfcb9cd335bf..b35a90955e2e 100644
--- a/net/netfilter/nfnetlink_log.c
+++ b/net/netfilter/nfnetlink_log.c
@@ -179,7 +179,7 @@ instance_create(struct net *net, u_int16_t group_num,
 		goto out_unlock;
 	}

-	inst = kzalloc(sizeof(*inst), GFP_ATOMIC);
+	inst = kzalloc_obj(*inst, GFP_ATOMIC);
 	if (!inst) {
 		err = -ENOMEM;
 		goto out_unlock;
diff --git a/net/netfilter/nfnetlink_osf.c b/net/netfilter/nfnetlink_osf.c
index c0fc431991e8..1ba43e562a5e 100644
--- a/net/netfilter/nfnetlink_osf.c
+++ b/net/netfilter/nfnetlink_osf.c
@@ -323,7 +323,7 @@ static int nfnl_osf_add_callback(struct sk_buff *skb,
 	    !memchr(f->version, 0, MAXGENRELEN))
 		return -EINVAL;

-	kf = kmalloc(sizeof(struct nf_osf_finger), GFP_KERNEL);
+	kf = kmalloc_obj(struct nf_osf_finger, GFP_KERNEL);
 	if (!kf)
 		return -ENOMEM;

diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
index f1c8049861a6..7f5248b5f1ee 100644
--- a/net/netfilter/nfnetlink_queue.c
+++ b/net/netfilter/nfnetlink_queue.c
@@ -178,7 +178,7 @@ instance_create(struct nfnl_queue_net *q, u_int16_t queue_num, u32 portid)
 	unsigned int h;
 	int err;

-	inst = kzalloc(sizeof(*inst), GFP_KERNEL_ACCOUNT);
+	inst = kzalloc_obj(*inst, GFP_KERNEL_ACCOUNT);
 	if (!inst)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/netfilter/nft_compat.c b/net/netfilter/nft_compat.c
index 08f620311b03..27cc983a7cdf 100644
--- a/net/netfilter/nft_compat.c
+++ b/net/netfilter/nft_compat.c
@@ -815,7 +815,7 @@ nft_match_select_ops(const struct nft_ctx *ctx,
 		goto err;
 	}

-	ops = kzalloc(sizeof(struct nft_expr_ops), GFP_KERNEL_ACCOUNT);
+	ops = kzalloc_obj(struct nft_expr_ops, GFP_KERNEL_ACCOUNT);
 	if (!ops) {
 		err = -ENOMEM;
 		goto err;
@@ -905,7 +905,7 @@ nft_target_select_ops(const struct nft_ctx *ctx,
 		goto err;
 	}

-	ops = kzalloc(sizeof(struct nft_expr_ops), GFP_KERNEL_ACCOUNT);
+	ops = kzalloc_obj(struct nft_expr_ops, GFP_KERNEL_ACCOUNT);
 	if (!ops) {
 		err = -ENOMEM;
 		goto err;
diff --git a/net/netfilter/nft_connlimit.c b/net/netfilter/nft_connlimit.c
index 657764774a2d..43357f99eb00 100644
--- a/net/netfilter/nft_connlimit.c
+++ b/net/netfilter/nft_connlimit.c
@@ -71,7 +71,7 @@ static int nft_connlimit_do_init(const struct nft_ctx *ctx,
 			invert = true;
 	}

-	priv->list = kmalloc(sizeof(*priv->list), GFP_KERNEL_ACCOUNT);
+	priv->list = kmalloc_obj(*priv->list, GFP_KERNEL_ACCOUNT);
 	if (!priv->list)
 		return -ENOMEM;

@@ -220,7 +220,7 @@ static int nft_connlimit_clone(struct nft_expr *dst, const struct nft_expr *src,
 	struct nft_connlimit *priv_dst = nft_expr_priv(dst);
 	struct nft_connlimit *priv_src = nft_expr_priv(src);

-	priv_dst->list = kmalloc(sizeof(*priv_dst->list), gfp);
+	priv_dst->list = kmalloc_obj(*priv_dst->list, gfp);
 	if (!priv_dst->list)
 		return -ENOMEM;

diff --git a/net/netfilter/nft_ct.c b/net/netfilter/nft_ct.c
index 6f2ae7cad731..8d7f6c8e8aad 100644
--- a/net/netfilter/nft_ct.c
+++ b/net/netfilter/nft_ct.c
@@ -894,8 +894,7 @@ nft_ct_timeout_parse_policy(void *timeouts,
 	struct nlattr **tb;
 	int ret = 0;

-	tb = kcalloc(l4proto->ctnl_timeout.nlattr_max + 1, sizeof(*tb),
-		     GFP_KERNEL);
+	tb = kzalloc_objs(*tb, l4proto->ctnl_timeout.nlattr_max + 1, GFP_KERNEL);

 	if (!tb)
 		return -ENOMEM;
diff --git a/net/netfilter/nft_last.c b/net/netfilter/nft_last.c
index de1b6066bfa8..20706be12807 100644
--- a/net/netfilter/nft_last.c
+++ b/net/netfilter/nft_last.c
@@ -30,7 +30,7 @@ static int nft_last_init(const struct nft_ctx *ctx, const struct nft_expr *expr,
 	u64 last_jiffies;
 	int err;

-	last = kzalloc(sizeof(*last), GFP_KERNEL_ACCOUNT);
+	last = kzalloc_obj(*last, GFP_KERNEL_ACCOUNT);
 	if (!last)
 		return -ENOMEM;

@@ -107,7 +107,7 @@ static int nft_last_clone(struct nft_expr *dst, const struct nft_expr *src, gfp_
 	struct nft_last_priv *priv_dst = nft_expr_priv(dst);
 	struct nft_last_priv *priv_src = nft_expr_priv(src);

-	priv_dst->last = kzalloc(sizeof(*priv_dst->last), gfp);
+	priv_dst->last = kzalloc_obj(*priv_dst->last, gfp);
 	if (!priv_dst->last)
 		return -ENOMEM;

diff --git a/net/netfilter/nft_limit.c b/net/netfilter/nft_limit.c
index 21d26b79b460..f3b1f791942b 100644
--- a/net/netfilter/nft_limit.c
+++ b/net/netfilter/nft_limit.c
@@ -110,7 +110,7 @@ static int nft_limit_init(struct nft_limit_priv *priv,
 			invert = true;
 	}

-	priv->limit = kmalloc(sizeof(*priv->limit), GFP_KERNEL_ACCOUNT);
+	priv->limit = kmalloc_obj(*priv->limit, GFP_KERNEL_ACCOUNT);
 	if (!priv->limit)
 		return -ENOMEM;

@@ -158,7 +158,7 @@ static int nft_limit_clone(struct nft_limit_priv *priv_dst,
 	priv_dst->burst = priv_src->burst;
 	priv_dst->invert = priv_src->invert;

-	priv_dst->limit = kmalloc(sizeof(*priv_dst->limit), gfp);
+	priv_dst->limit = kmalloc_obj(*priv_dst->limit, gfp);
 	if (!priv_dst->limit)
 		return -ENOMEM;

diff --git a/net/netfilter/nft_numgen.c b/net/netfilter/nft_numgen.c
index bd058babfc82..0a39e51ec9b7 100644
--- a/net/netfilter/nft_numgen.c
+++ b/net/netfilter/nft_numgen.c
@@ -66,7 +66,7 @@ static int nft_ng_inc_init(const struct nft_ctx *ctx,
 	if (priv->offset + priv->modulus - 1 < priv->offset)
 		return -EOVERFLOW;

-	priv->counter = kmalloc(sizeof(*priv->counter), GFP_KERNEL_ACCOUNT);
+	priv->counter = kmalloc_obj(*priv->counter, GFP_KERNEL_ACCOUNT);
 	if (!priv->counter)
 		return -ENOMEM;

diff --git a/net/netfilter/nft_quota.c b/net/netfilter/nft_quota.c
index cb6c0e04ff67..2390a993aed9 100644
--- a/net/netfilter/nft_quota.c
+++ b/net/netfilter/nft_quota.c
@@ -96,7 +96,7 @@ static int nft_quota_do_init(const struct nlattr * const tb[],
 			return -EOPNOTSUPP;
 	}

-	priv->consumed = kmalloc(sizeof(*priv->consumed), GFP_KERNEL_ACCOUNT);
+	priv->consumed = kmalloc_obj(*priv->consumed, GFP_KERNEL_ACCOUNT);
 	if (!priv->consumed)
 		return -ENOMEM;

@@ -248,7 +248,7 @@ static int nft_quota_clone(struct nft_expr *dst, const struct nft_expr *src, gfp
 	priv_dst->quota = priv_src->quota;
 	priv_dst->flags = priv_src->flags;

-	priv_dst->consumed = kmalloc(sizeof(*priv_dst->consumed), gfp);
+	priv_dst->consumed = kmalloc_obj(*priv_dst->consumed, gfp);
 	if (!priv_dst->consumed)
 		return -ENOMEM;

diff --git a/net/netfilter/nft_set_pipapo.c b/net/netfilter/nft_set_pipapo.c
index 18e1903b1d3d..6341b5bcb4cf 100644
--- a/net/netfilter/nft_set_pipapo.c
+++ b/net/netfilter/nft_set_pipapo.c
@@ -652,7 +652,7 @@ static int pipapo_realloc_mt(struct nft_pipapo_field *f,
 	if (rules_alloc > (INT_MAX / sizeof(*new_mt)))
 		return -ENOMEM;

-	new_mt = kvmalloc_array(rules_alloc, sizeof(*new_mt), GFP_KERNEL_ACCOUNT);
+	new_mt = kvmalloc_objs(*new_mt, rules_alloc, GFP_KERNEL_ACCOUNT);
 	if (!new_mt)
 		return -ENOMEM;

@@ -1413,7 +1413,7 @@ static struct nft_pipapo_match *pipapo_clone(struct nft_pipapo_match *old)
 	struct nft_pipapo_match *new;
 	int i;

-	new = kmalloc(struct_size(new, f, old->field_count), GFP_KERNEL_ACCOUNT);
+	new = kmalloc_flex(*new, f, old->field_count, GFP_KERNEL_ACCOUNT);
 	if (!new)
 		return NULL;

@@ -1460,9 +1460,8 @@ static struct nft_pipapo_match *pipapo_clone(struct nft_pipapo_match *old)
 			if (src->rules_alloc > (INT_MAX / sizeof(*src->mt)))
 				goto out_mt;

-			dst->mt = kvmalloc_array(src->rules_alloc,
-						 sizeof(*src->mt),
-						 GFP_KERNEL_ACCOUNT);
+			dst->mt = kvmalloc_objs(*src->mt, src->rules_alloc,
+						GFP_KERNEL_ACCOUNT);
 			if (!dst->mt)
 				goto out_mt;

@@ -2237,7 +2236,7 @@ static int nft_pipapo_init(const struct nft_set *set,
 	if (field_count > NFT_PIPAPO_MAX_FIELDS)
 		return -EINVAL;

-	m = kmalloc(struct_size(m, f, field_count), GFP_KERNEL);
+	m = kmalloc_flex(*m, f, field_count, GFP_KERNEL);
 	if (!m)
 		return -ENOMEM;

diff --git a/net/netfilter/nft_set_rbtree.c b/net/netfilter/nft_set_rbtree.c
index 644d4b916705..3f02e4478216 100644
--- a/net/netfilter/nft_set_rbtree.c
+++ b/net/netfilter/nft_set_rbtree.c
@@ -586,8 +586,8 @@ static int nft_array_intervals_alloc(struct nft_array *array, u32 max_intervals)
 {
 	struct nft_array_interval *intervals;

-	intervals = kvcalloc(max_intervals, sizeof(struct nft_array_interval),
-			     GFP_KERNEL_ACCOUNT);
+	intervals = kvzalloc_objs(struct nft_array_interval, max_intervals,
+				  GFP_KERNEL_ACCOUNT);
 	if (!intervals)
 		return -ENOMEM;

@@ -604,7 +604,7 @@ static struct nft_array *nft_array_alloc(u32 max_intervals)
 {
 	struct nft_array *array;

-	array = kzalloc(sizeof(*array), GFP_KERNEL_ACCOUNT);
+	array = kzalloc_obj(*array, GFP_KERNEL_ACCOUNT);
 	if (!array)
 		return NULL;

diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
index 48105ea3df15..f5d720c9ee32 100644
--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -1742,7 +1742,7 @@ xt_hook_ops_alloc(const struct xt_table *table, nf_hookfn *fn)
 	if (!num_hooks)
 		return ERR_PTR(-EINVAL);

-	ops = kcalloc(num_hooks, sizeof(*ops), GFP_KERNEL);
+	ops = kzalloc_objs(*ops, num_hooks, GFP_KERNEL);
 	if (ops == NULL)
 		return ERR_PTR(-ENOMEM);

@@ -1775,7 +1775,7 @@ int xt_register_template(const struct xt_table *table,
 	}

 	ret = -ENOMEM;
-	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc_obj(*t, GFP_KERNEL);
 	if (!t)
 		goto out_unlock;

@@ -1993,7 +1993,7 @@ static int __init xt_init(void)
 		}
 	}

-	xt = kcalloc(NFPROTO_NUMPROTO, sizeof(struct xt_af), GFP_KERNEL);
+	xt = kzalloc_objs(struct xt_af, NFPROTO_NUMPROTO, GFP_KERNEL);
 	if (!xt)
 		return -ENOMEM;

diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c
index d73957592c9d..746abeee6775 100644
--- a/net/netfilter/xt_IDLETIMER.c
+++ b/net/netfilter/xt_IDLETIMER.c
@@ -135,7 +135,7 @@ static int idletimer_tg_create(struct idletimer_tg_info *info)
 {
 	int ret;

-	info->timer = kzalloc(sizeof(*info->timer), GFP_KERNEL);
+	info->timer = kzalloc_obj(*info->timer, GFP_KERNEL);
 	if (!info->timer) {
 		ret = -ENOMEM;
 		goto out;
@@ -184,7 +184,7 @@ static int idletimer_tg_create_v1(struct idletimer_tg_info_v1 *info)
 {
 	int ret;

-	info->timer = kmalloc(sizeof(*info->timer), GFP_KERNEL);
+	info->timer = kmalloc_obj(*info->timer, GFP_KERNEL);
 	if (!info->timer) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/net/netfilter/xt_LED.c b/net/netfilter/xt_LED.c
index 90dcf088071a..6b21810e1b97 100644
--- a/net/netfilter/xt_LED.c
+++ b/net/netfilter/xt_LED.c
@@ -111,7 +111,7 @@ static int led_tg_check(const struct xt_tgchk_param *par)
 	}

 	err = -ENOMEM;
-	ledinternal = kzalloc(sizeof(struct xt_led_info_internal), GFP_KERNEL);
+	ledinternal = kzalloc_obj(struct xt_led_info_internal, GFP_KERNEL);
 	if (!ledinternal)
 		goto exit_mutex_only;

diff --git a/net/netfilter/xt_RATEEST.c b/net/netfilter/xt_RATEEST.c
index 4f49cfc27831..d75b1e101a5b 100644
--- a/net/netfilter/xt_RATEEST.c
+++ b/net/netfilter/xt_RATEEST.c
@@ -139,7 +139,7 @@ static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par)
 	}

 	ret = -ENOMEM;
-	est = kzalloc(sizeof(*est), GFP_KERNEL);
+	est = kzalloc_obj(*est, GFP_KERNEL);
 	if (!est)
 		goto err1;

diff --git a/net/netfilter/xt_TEE.c b/net/netfilter/xt_TEE.c
index a5ebd5640457..c6044ea31d16 100644
--- a/net/netfilter/xt_TEE.c
+++ b/net/netfilter/xt_TEE.c
@@ -106,7 +106,7 @@ static int tee_tg_check(const struct xt_tgchk_param *par)
 		if (info->oif[sizeof(info->oif)-1] != '\0')
 			return -EINVAL;

-		priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+		priv = kzalloc_obj(*priv, GFP_KERNEL);
 		if (priv == NULL)
 			return -ENOMEM;

diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c
index 3b507694e81e..64ed12a32906 100644
--- a/net/netfilter/xt_hashlimit.c
+++ b/net/netfilter/xt_hashlimit.c
@@ -293,7 +293,7 @@ static int htable_create(struct net *net, struct hashlimit_cfg3 *cfg,
 		if (size < 16)
 			size = 16;
 	}
-	hinfo = kvmalloc(struct_size(hinfo, hash, size), GFP_KERNEL);
+	hinfo = kvmalloc_flex(*hinfo, hash, size, GFP_KERNEL);
 	if (hinfo == NULL)
 		return -ENOMEM;
 	*out_hinfo = hinfo;
diff --git a/net/netfilter/xt_limit.c b/net/netfilter/xt_limit.c
index 8b4fd27857f2..203f8bb28132 100644
--- a/net/netfilter/xt_limit.c
+++ b/net/netfilter/xt_limit.c
@@ -115,7 +115,7 @@ static int limit_mt_check(const struct xt_mtchk_param *par)
 		return -ERANGE;
 	}

-	priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kmalloc_obj(*priv, GFP_KERNEL);
 	if (priv == NULL)
 		return -ENOMEM;

diff --git a/net/netfilter/xt_quota.c b/net/netfilter/xt_quota.c
index 4452cc93b990..7952a4ef4c51 100644
--- a/net/netfilter/xt_quota.c
+++ b/net/netfilter/xt_quota.c
@@ -50,7 +50,7 @@ static int quota_mt_check(const struct xt_mtchk_param *par)
 	if (q->flags & ~XT_QUOTA_MASK)
 		return -EINVAL;

-	q->master = kmalloc(sizeof(*q->master), GFP_KERNEL);
+	q->master = kmalloc_obj(*q->master, GFP_KERNEL);
 	if (q->master == NULL)
 		return -ENOMEM;

diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c
index 588a5e6ad899..c9a1cc591171 100644
--- a/net/netfilter/xt_recent.c
+++ b/net/netfilter/xt_recent.c
@@ -188,7 +188,7 @@ recent_entry_init(struct recent_table *t, const union nf_inet_addr *addr,
 	}

 	nstamps_max += 1;
-	e = kmalloc(struct_size(e, stamps, nstamps_max), GFP_ATOMIC);
+	e = kmalloc_flex(*e, stamps, nstamps_max, GFP_ATOMIC);
 	if (e == NULL)
 		return NULL;
 	memcpy(&e->addr, addr, sizeof(e->addr));
@@ -391,7 +391,7 @@ static int recent_mt_check(const struct xt_mtchk_param *par,
 		goto out;
 	}

-	t = kvzalloc(struct_size(t, iphash, ip_list_hash_size), GFP_KERNEL);
+	t = kvzalloc_flex(*t, iphash, ip_list_hash_size, GFP_KERNEL);
 	if (t == NULL) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/net/netfilter/xt_statistic.c b/net/netfilter/xt_statistic.c
index b26c1dcfc27b..e80ddc317ca5 100644
--- a/net/netfilter/xt_statistic.c
+++ b/net/netfilter/xt_statistic.c
@@ -58,7 +58,7 @@ static int statistic_mt_check(const struct xt_mtchk_param *par)
 	    info->flags & ~XT_STATISTIC_MASK)
 		return -EINVAL;

-	info->master = kzalloc(sizeof(*info->master), GFP_KERNEL);
+	info->master = kzalloc_obj(*info->master, GFP_KERNEL);
 	if (info->master == NULL)
 		return -ENOMEM;
 	atomic_set(&info->master->count, info->u.nth.count);
diff --git a/net/netlabel/netlabel_calipso.c b/net/netlabel/netlabel_calipso.c
index a07c2216d28b..fae0bee5c065 100644
--- a/net/netlabel/netlabel_calipso.c
+++ b/net/netlabel/netlabel_calipso.c
@@ -95,7 +95,7 @@ static int netlbl_calipso_add_pass(struct genl_info *info,
 	int ret_val;
 	struct calipso_doi *doi_def = NULL;

-	doi_def = kmalloc(sizeof(*doi_def), GFP_KERNEL);
+	doi_def = kmalloc_obj(*doi_def, GFP_KERNEL);
 	if (!doi_def)
 		return -ENOMEM;
 	doi_def->type = CALIPSO_MAP_PASS;
diff --git a/net/netlabel/netlabel_cipso_v4.c b/net/netlabel/netlabel_cipso_v4.c
index fa08ee75ac06..526f3dc3e67a 100644
--- a/net/netlabel/netlabel_cipso_v4.c
+++ b/net/netlabel/netlabel_cipso_v4.c
@@ -139,10 +139,10 @@ static int netlbl_cipsov4_add_std(struct genl_info *info,
 					   NULL) != 0)
 		return -EINVAL;

-	doi_def = kmalloc(sizeof(*doi_def), GFP_KERNEL);
+	doi_def = kmalloc_obj(*doi_def, GFP_KERNEL);
 	if (doi_def == NULL)
 		return -ENOMEM;
-	doi_def->map.std = kzalloc(sizeof(*doi_def->map.std), GFP_KERNEL);
+	doi_def->map.std = kzalloc_obj(*doi_def->map.std, GFP_KERNEL);
 	if (doi_def->map.std == NULL) {
 		kfree(doi_def);
 		return -ENOMEM;
@@ -332,7 +332,7 @@ static int netlbl_cipsov4_add_pass(struct genl_info *info,
 	if (!info->attrs[NLBL_CIPSOV4_A_TAGLST])
 		return -EINVAL;

-	doi_def = kmalloc(sizeof(*doi_def), GFP_KERNEL);
+	doi_def = kmalloc_obj(*doi_def, GFP_KERNEL);
 	if (doi_def == NULL)
 		return -ENOMEM;
 	doi_def->type = CIPSO_V4_MAP_PASS;
@@ -371,7 +371,7 @@ static int netlbl_cipsov4_add_local(struct genl_info *info,
 	if (!info->attrs[NLBL_CIPSOV4_A_TAGLST])
 		return -EINVAL;

-	doi_def = kmalloc(sizeof(*doi_def), GFP_KERNEL);
+	doi_def = kmalloc_obj(*doi_def, GFP_KERNEL);
 	if (doi_def == NULL)
 		return -ENOMEM;
 	doi_def->type = CIPSO_V4_MAP_LOCAL;
diff --git a/net/netlabel/netlabel_domainhash.c b/net/netlabel/netlabel_domainhash.c
index 8158a25972b4..fc014849d6b3 100644
--- a/net/netlabel/netlabel_domainhash.c
+++ b/net/netlabel/netlabel_domainhash.c
@@ -367,13 +367,11 @@ int __init netlbl_domhsh_init(u32 size)
 	if (size == 0)
 		return -EINVAL;

-	hsh_tbl = kmalloc(sizeof(*hsh_tbl), GFP_KERNEL);
+	hsh_tbl = kmalloc_obj(*hsh_tbl, GFP_KERNEL);
 	if (hsh_tbl == NULL)
 		return -ENOMEM;
 	hsh_tbl->size = 1 << size;
-	hsh_tbl->tbl = kcalloc(hsh_tbl->size,
-			       sizeof(struct list_head),
-			       GFP_KERNEL);
+	hsh_tbl->tbl = kzalloc_objs(struct list_head, hsh_tbl->size, GFP_KERNEL);
 	if (hsh_tbl->tbl == NULL) {
 		kfree(hsh_tbl);
 		return -ENOMEM;
@@ -453,7 +451,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry,
 					ret_val = -EINVAL;
 					goto add_return;
 				}
-				entry_b = kzalloc(sizeof(*entry_b), GFP_ATOMIC);
+				entry_b = kzalloc_obj(*entry_b, GFP_ATOMIC);
 				if (entry_b == NULL) {
 					ret_val = -ENOMEM;
 					goto add_return;
diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c
index 33b77084a4e5..3583fa63dd01 100644
--- a/net/netlabel/netlabel_kapi.c
+++ b/net/netlabel/netlabel_kapi.c
@@ -104,7 +104,7 @@ int netlbl_cfg_unlbl_map_add(const char *domain,
 	struct netlbl_domaddr4_map *map4 = NULL;
 	struct netlbl_domaddr6_map *map6 = NULL;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (entry == NULL)
 		return -ENOMEM;
 	if (domain != NULL) {
@@ -117,7 +117,7 @@ int netlbl_cfg_unlbl_map_add(const char *domain,
 	if (addr == NULL && mask == NULL)
 		entry->def.type = NETLBL_NLTYPE_UNLABELED;
 	else if (addr != NULL && mask != NULL) {
-		addrmap = kzalloc(sizeof(*addrmap), GFP_ATOMIC);
+		addrmap = kzalloc_obj(*addrmap, GFP_ATOMIC);
 		if (addrmap == NULL)
 			goto cfg_unlbl_map_add_failure;
 		INIT_LIST_HEAD(&addrmap->list4);
@@ -127,7 +127,7 @@ int netlbl_cfg_unlbl_map_add(const char *domain,
 		case AF_INET: {
 			const struct in_addr *addr4 = addr;
 			const struct in_addr *mask4 = mask;
-			map4 = kzalloc(sizeof(*map4), GFP_ATOMIC);
+			map4 = kzalloc_obj(*map4, GFP_ATOMIC);
 			if (map4 == NULL)
 				goto cfg_unlbl_map_add_failure;
 			map4->def.type = NETLBL_NLTYPE_UNLABELED;
@@ -144,7 +144,7 @@ int netlbl_cfg_unlbl_map_add(const char *domain,
 		case AF_INET6: {
 			const struct in6_addr *addr6 = addr;
 			const struct in6_addr *mask6 = mask;
-			map6 = kzalloc(sizeof(*map6), GFP_ATOMIC);
+			map6 = kzalloc_obj(*map6, GFP_ATOMIC);
 			if (map6 == NULL)
 				goto cfg_unlbl_map_add_failure;
 			map6->def.type = NETLBL_NLTYPE_UNLABELED;
@@ -336,7 +336,7 @@ int netlbl_cfg_cipsov4_map_add(u32 doi,
 	if (doi_def == NULL)
 		return -ENOENT;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (entry == NULL)
 		goto out_entry;
 	entry->family = AF_INET;
@@ -350,13 +350,13 @@ int netlbl_cfg_cipsov4_map_add(u32 doi,
 		entry->def.cipso = doi_def;
 		entry->def.type = NETLBL_NLTYPE_CIPSOV4;
 	} else if (addr != NULL && mask != NULL) {
-		addrmap = kzalloc(sizeof(*addrmap), GFP_ATOMIC);
+		addrmap = kzalloc_obj(*addrmap, GFP_ATOMIC);
 		if (addrmap == NULL)
 			goto out_addrmap;
 		INIT_LIST_HEAD(&addrmap->list4);
 		INIT_LIST_HEAD(&addrmap->list6);

-		addrinfo = kzalloc(sizeof(*addrinfo), GFP_ATOMIC);
+		addrinfo = kzalloc_obj(*addrinfo, GFP_ATOMIC);
 		if (addrinfo == NULL)
 			goto out_addrinfo;
 		addrinfo->def.cipso = doi_def;
@@ -462,7 +462,7 @@ int netlbl_cfg_calipso_map_add(u32 doi,
 	if (doi_def == NULL)
 		return -ENOENT;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (entry == NULL)
 		goto out_entry;
 	entry->family = AF_INET6;
@@ -476,13 +476,13 @@ int netlbl_cfg_calipso_map_add(u32 doi,
 		entry->def.calipso = doi_def;
 		entry->def.type = NETLBL_NLTYPE_CALIPSO;
 	} else if (addr != NULL && mask != NULL) {
-		addrmap = kzalloc(sizeof(*addrmap), GFP_ATOMIC);
+		addrmap = kzalloc_obj(*addrmap, GFP_ATOMIC);
 		if (addrmap == NULL)
 			goto out_addrmap;
 		INIT_LIST_HEAD(&addrmap->list4);
 		INIT_LIST_HEAD(&addrmap->list6);

-		addrinfo = kzalloc(sizeof(*addrinfo), GFP_ATOMIC);
+		addrinfo = kzalloc_obj(*addrinfo, GFP_ATOMIC);
 		if (addrinfo == NULL)
 			goto out_addrinfo;
 		addrinfo->def.calipso = doi_def;
diff --git a/net/netlabel/netlabel_mgmt.c b/net/netlabel/netlabel_mgmt.c
index 079fe72a6384..13f45fbff824 100644
--- a/net/netlabel/netlabel_mgmt.c
+++ b/net/netlabel/netlabel_mgmt.c
@@ -84,7 +84,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info,
 	struct calipso_doi *calipso = NULL;
 #endif
 	u32 tmp_val;
-	struct netlbl_dom_map *entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	struct netlbl_dom_map *entry = kzalloc_obj(*entry, GFP_KERNEL);

 	if (!entry)
 		return -ENOMEM;
@@ -148,7 +148,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info,
 		struct in_addr *mask;
 		struct netlbl_domaddr4_map *map;

-		addrmap = kzalloc(sizeof(*addrmap), GFP_KERNEL);
+		addrmap = kzalloc_obj(*addrmap, GFP_KERNEL);
 		if (addrmap == NULL) {
 			ret_val = -ENOMEM;
 			goto add_doi_put_def;
@@ -169,7 +169,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info,
 		addr = nla_data(info->attrs[NLBL_MGMT_A_IPV4ADDR]);
 		mask = nla_data(info->attrs[NLBL_MGMT_A_IPV4MASK]);

-		map = kzalloc(sizeof(*map), GFP_KERNEL);
+		map = kzalloc_obj(*map, GFP_KERNEL);
 		if (map == NULL) {
 			ret_val = -ENOMEM;
 			goto add_free_addrmap;
@@ -195,7 +195,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info,
 		struct in6_addr *mask;
 		struct netlbl_domaddr6_map *map;

-		addrmap = kzalloc(sizeof(*addrmap), GFP_KERNEL);
+		addrmap = kzalloc_obj(*addrmap, GFP_KERNEL);
 		if (addrmap == NULL) {
 			ret_val = -ENOMEM;
 			goto add_doi_put_def;
@@ -216,7 +216,7 @@ static int netlbl_mgmt_add_common(struct genl_info *info,
 		addr = nla_data(info->attrs[NLBL_MGMT_A_IPV6ADDR]);
 		mask = nla_data(info->attrs[NLBL_MGMT_A_IPV6MASK]);

-		map = kzalloc(sizeof(*map), GFP_KERNEL);
+		map = kzalloc_obj(*map, GFP_KERNEL);
 		if (map == NULL) {
 			ret_val = -ENOMEM;
 			goto add_free_addrmap;
diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c
index dfda9ea61971..ab68324c08d9 100644
--- a/net/netlabel/netlabel_unlabeled.c
+++ b/net/netlabel/netlabel_unlabeled.c
@@ -236,7 +236,7 @@ static int netlbl_unlhsh_add_addr4(struct netlbl_unlhsh_iface *iface,
 	int ret_val;
 	struct netlbl_unlhsh_addr4 *entry;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (entry == NULL)
 		return -ENOMEM;

@@ -276,7 +276,7 @@ static int netlbl_unlhsh_add_addr6(struct netlbl_unlhsh_iface *iface,
 	int ret_val;
 	struct netlbl_unlhsh_addr6 *entry;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (entry == NULL)
 		return -ENOMEM;

@@ -314,7 +314,7 @@ static struct netlbl_unlhsh_iface *netlbl_unlhsh_add_iface(int ifindex)
 	u32 bkt;
 	struct netlbl_unlhsh_iface *iface;

-	iface = kzalloc(sizeof(*iface), GFP_ATOMIC);
+	iface = kzalloc_obj(*iface, GFP_ATOMIC);
 	if (iface == NULL)
 		return NULL;

@@ -1413,13 +1413,11 @@ int __init netlbl_unlabel_init(u32 size)
 	if (size == 0)
 		return -EINVAL;

-	hsh_tbl = kmalloc(sizeof(*hsh_tbl), GFP_KERNEL);
+	hsh_tbl = kmalloc_obj(*hsh_tbl, GFP_KERNEL);
 	if (hsh_tbl == NULL)
 		return -ENOMEM;
 	hsh_tbl->size = 1 << size;
-	hsh_tbl->tbl = kcalloc(hsh_tbl->size,
-			       sizeof(struct list_head),
-			       GFP_KERNEL);
+	hsh_tbl->tbl = kzalloc_objs(struct list_head, hsh_tbl->size, GFP_KERNEL);
 	if (hsh_tbl->tbl == NULL) {
 		kfree(hsh_tbl);
 		return -ENOMEM;
@@ -1534,7 +1532,7 @@ int __init netlbl_unlabel_defconf(void)
 	audit_info.loginuid = GLOBAL_ROOT_UID;
 	audit_info.sessionid = 0;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (entry == NULL)
 		return -ENOMEM;
 	entry->family = AF_UNSPEC;
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index 8e5151f0c6e4..2d91b8b8ba9a 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -2927,7 +2927,7 @@ static int __init netlink_proto_init(void)

 	BUILD_BUG_ON(sizeof(struct netlink_skb_parms) > sizeof_field(struct sk_buff, cb));

-	nl_table = kcalloc(MAX_LINKS, sizeof(*nl_table), GFP_KERNEL);
+	nl_table = kzalloc_objs(*nl_table, MAX_LINKS, GFP_KERNEL);
 	if (!nl_table)
 		goto panic;

diff --git a/net/netlink/diag.c b/net/netlink/diag.c
index b8e58132e8af..25e930a64d07 100644
--- a/net/netlink/diag.c
+++ b/net/netlink/diag.c
@@ -107,7 +107,7 @@ static int __netlink_diag_dump(struct sk_buff *skb, struct netlink_callback *cb,
 	num--;

 	if (!hti) {
-		hti = kmalloc(sizeof(*hti), GFP_KERNEL);
+		hti = kmalloc_obj(*hti, GFP_KERNEL);
 		if (!hti)
 			return -ENOMEM;

diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
index 978c129c6095..ac1fdf7d7327 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
@@ -659,7 +659,7 @@ static int genl_sk_privs_alloc(struct genl_family *family)
 	if (!family->sock_priv_size)
 		return 0;

-	family->sock_privs = kzalloc(sizeof(*family->sock_privs), GFP_KERNEL);
+	family->sock_privs = kzalloc_obj(*family->sock_privs, GFP_KERNEL);
 	if (!family->sock_privs)
 		return -ENOMEM;
 	xa_init(family->sock_privs);
@@ -912,7 +912,7 @@ EXPORT_SYMBOL(genlmsg_put);

 static struct genl_dumpit_info *genl_dumpit_info_alloc(void)
 {
-	return kmalloc(sizeof(struct genl_dumpit_info), GFP_KERNEL);
+	return kmalloc_obj(struct genl_dumpit_info, GFP_KERNEL);
 }

 static void genl_dumpit_info_free(const struct genl_dumpit_info *info)
@@ -937,8 +937,7 @@ genl_family_rcv_msg_attrs_parse(const struct genl_family *family,
 	if (!ops->maxattr)
 		return NULL;

-	attrbuf = kmalloc_array(ops->maxattr + 1,
-				sizeof(struct nlattr *), GFP_KERNEL);
+	attrbuf = kmalloc_objs(struct nlattr *, ops->maxattr + 1, GFP_KERNEL);
 	if (!attrbuf)
 		return ERR_PTR(-ENOMEM);

@@ -1591,7 +1590,7 @@ static int ctrl_dumppolicy_start(struct netlink_callback *cb)
 		return 0;
 	}

-	ctx->op_iter = kmalloc(sizeof(*ctx->op_iter), GFP_KERNEL);
+	ctx->op_iter = kmalloc_obj(*ctx->op_iter, GFP_KERNEL);
 	if (!ctx->op_iter)
 		return -ENOMEM;

diff --git a/net/netlink/policy.c b/net/netlink/policy.c
index 99458da6be32..a3e818c7c0cf 100644
--- a/net/netlink/policy.c
+++ b/net/netlink/policy.c
@@ -102,8 +102,8 @@ static struct netlink_policy_dump_state *alloc_state(void)
 {
 	struct netlink_policy_dump_state *state;

-	state = kzalloc(struct_size(state, policies, INITIAL_POLICIES_ALLOC),
-			GFP_KERNEL);
+	state = kzalloc_flex(*state, policies, INITIAL_POLICIES_ALLOC,
+			     GFP_KERNEL);
 	if (!state)
 		return ERR_PTR(-ENOMEM);
 	state->n_alloc = INITIAL_POLICIES_ALLOC;
diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
index 5ed1a71ceec1..d7090dad8113 100644
--- a/net/netrom/af_netrom.c
+++ b/net/netrom/af_netrom.c
@@ -1401,7 +1401,7 @@ static int __init nr_proto_init(void)
 		goto unregister_proto;
 	}

-	dev_nr = kcalloc(nr_ndevs, sizeof(struct net_device *), GFP_KERNEL);
+	dev_nr = kzalloc_objs(struct net_device *, nr_ndevs, GFP_KERNEL);
 	if (!dev_nr) {
 		pr_err("NET/ROM: %s - unable to allocate device array\n",
 		       __func__);
diff --git a/net/nfc/core.c b/net/nfc/core.c
index f50e5bab35d8..c39d00b2a0d7 100644
--- a/net/nfc/core.c
+++ b/net/nfc/core.c
@@ -879,7 +879,7 @@ int nfc_add_se(struct nfc_dev *dev, u32 se_idx, u16 type)
 	if (se)
 		return -EALREADY;

-	se = kzalloc(sizeof(struct nfc_se), GFP_KERNEL);
+	se = kzalloc_obj(struct nfc_se, GFP_KERNEL);
 	if (!se)
 		return -ENOMEM;

@@ -1062,7 +1062,7 @@ struct nfc_dev *nfc_allocate_device(const struct nfc_ops *ops,
 	if (!supported_protocols)
 		return NULL;

-	dev = kzalloc(sizeof(struct nfc_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct nfc_dev, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/net/nfc/digital_core.c b/net/nfc/digital_core.c
index dae378f1d52b..be9a048b583b 100644
--- a/net/nfc/digital_core.c
+++ b/net/nfc/digital_core.c
@@ -231,7 +231,7 @@ int digital_send_cmd(struct nfc_digital_dev *ddev, u8 cmd_type,
 {
 	struct digital_cmd *cmd;

-	cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+	cmd = kzalloc_obj(*cmd, GFP_KERNEL);
 	if (!cmd)
 		return -ENOMEM;

@@ -279,7 +279,7 @@ static int digital_tg_listen_mdaa(struct nfc_digital_dev *ddev, u8 rf_tech)
 	struct digital_tg_mdaa_params *params;
 	int rc;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -706,7 +706,7 @@ static int digital_in_send(struct nfc_dev *nfc_dev, struct nfc_target *target,
 	struct digital_data_exch *data_exch;
 	int rc;

-	data_exch = kzalloc(sizeof(*data_exch), GFP_KERNEL);
+	data_exch = kzalloc_obj(*data_exch, GFP_KERNEL);
 	if (!data_exch)
 		return -ENOMEM;

@@ -762,7 +762,7 @@ struct nfc_digital_dev *nfc_digital_allocate_device(const struct nfc_digital_ops
 	    !ops->switch_rf || (ops->tg_listen_md && !ops->tg_get_rf_tech))
 		return NULL;

-	ddev = kzalloc(sizeof(*ddev), GFP_KERNEL);
+	ddev = kzalloc_obj(*ddev, GFP_KERNEL);
 	if (!ddev)
 		return NULL;

diff --git a/net/nfc/digital_technology.c b/net/nfc/digital_technology.c
index 3adf4589852a..df2bfb4734c5 100644
--- a/net/nfc/digital_technology.c
+++ b/net/nfc/digital_technology.c
@@ -490,7 +490,7 @@ static void digital_in_recv_sens_res(struct nfc_digital_dev *ddev, void *arg,
 		goto exit;
 	}

-	target = kzalloc(sizeof(struct nfc_target), GFP_KERNEL);
+	target = kzalloc_obj(struct nfc_target, GFP_KERNEL);
 	if (!target) {
 		rc = -ENOMEM;
 		goto exit;
@@ -688,7 +688,7 @@ static void digital_in_recv_sensb_res(struct nfc_digital_dev *ddev, void *arg,
 	else
 		ddev->target_fsc = digital_ats_fsc[fsci];

-	target = kzalloc(sizeof(struct nfc_target), GFP_KERNEL);
+	target = kzalloc_obj(struct nfc_target, GFP_KERNEL);
 	if (!target) {
 		rc = -ENOMEM;
 		goto exit;
@@ -863,7 +863,7 @@ static void digital_in_recv_iso15693_inv_res(struct nfc_digital_dev *ddev,
 		goto out_free_skb;
 	}

-	target = kzalloc(sizeof(*target), GFP_KERNEL);
+	target = kzalloc_obj(*target, GFP_KERNEL);
 	if (!target) {
 		rc = -ENOMEM;
 		goto out_free_skb;
diff --git a/net/nfc/hci/core.c b/net/nfc/hci/core.c
index 8618d57c23da..10bcd9d2576a 100644
--- a/net/nfc/hci/core.c
+++ b/net/nfc/hci/core.c
@@ -291,7 +291,7 @@ int nfc_hci_target_discovered(struct nfc_hci_dev *hdev, u8 gate)

 	pr_debug("from gate %d\n", gate);

-	targets = kzalloc(sizeof(struct nfc_target), GFP_KERNEL);
+	targets = kzalloc_obj(struct nfc_target, GFP_KERNEL);
 	if (targets == NULL)
 		return -ENOMEM;

@@ -964,7 +964,7 @@ struct nfc_hci_dev *nfc_hci_allocate_device(const struct nfc_hci_ops *ops,
 	if (protocols == 0)
 		return NULL;

-	hdev = kzalloc(sizeof(struct nfc_hci_dev), GFP_KERNEL);
+	hdev = kzalloc_obj(struct nfc_hci_dev, GFP_KERNEL);
 	if (hdev == NULL)
 		return NULL;

diff --git a/net/nfc/hci/hcp.c b/net/nfc/hci/hcp.c
index 4902f5064098..903fb134cd80 100644
--- a/net/nfc/hci/hcp.c
+++ b/net/nfc/hci/hcp.c
@@ -30,7 +30,7 @@ int nfc_hci_hcp_message_tx(struct nfc_hci_dev *hdev, u8 pipe,
 	int hci_len, err;
 	bool firstfrag = true;

-	cmd = kzalloc(sizeof(struct hci_msg), GFP_KERNEL);
+	cmd = kzalloc_obj(struct hci_msg, GFP_KERNEL);
 	if (cmd == NULL)
 		return -ENOMEM;

diff --git a/net/nfc/hci/llc.c b/net/nfc/hci/llc.c
index e6cf4eb06b46..12d7940c6217 100644
--- a/net/nfc/hci/llc.c
+++ b/net/nfc/hci/llc.c
@@ -49,7 +49,7 @@ int nfc_llc_register(const char *name, const struct nfc_llc_ops *ops)
 {
 	struct nfc_llc_engine *llc_engine;

-	llc_engine = kzalloc(sizeof(struct nfc_llc_engine), GFP_KERNEL);
+	llc_engine = kzalloc_obj(struct nfc_llc_engine, GFP_KERNEL);
 	if (llc_engine == NULL)
 		return -ENOMEM;

@@ -90,7 +90,7 @@ struct nfc_llc *nfc_llc_allocate(const char *name, struct nfc_hci_dev *hdev,
 	if (llc_engine == NULL)
 		return NULL;

-	llc = kzalloc(sizeof(struct nfc_llc), GFP_KERNEL);
+	llc = kzalloc_obj(struct nfc_llc, GFP_KERNEL);
 	if (llc == NULL)
 		return NULL;

diff --git a/net/nfc/hci/llc_nop.c b/net/nfc/hci/llc_nop.c
index a58716f16954..eb940330fd5d 100644
--- a/net/nfc/hci/llc_nop.c
+++ b/net/nfc/hci/llc_nop.c
@@ -28,7 +28,7 @@ static void *llc_nop_init(struct nfc_hci_dev *hdev, xmit_to_drv_t xmit_to_drv,
 	*rx_headroom = 0;
 	*rx_tailroom = 0;

-	llc_nop = kzalloc(sizeof(struct llc_nop), GFP_KERNEL);
+	llc_nop = kzalloc_obj(struct llc_nop, GFP_KERNEL);
 	if (llc_nop == NULL)
 		return NULL;

diff --git a/net/nfc/hci/llc_shdlc.c b/net/nfc/hci/llc_shdlc.c
index 08c8aa1530d8..7e0d84c29cb1 100644
--- a/net/nfc/hci/llc_shdlc.c
+++ b/net/nfc/hci/llc_shdlc.c
@@ -728,7 +728,7 @@ static void *llc_shdlc_init(struct nfc_hci_dev *hdev, xmit_to_drv_t xmit_to_drv,
 	*rx_headroom = SHDLC_LLC_HEAD_ROOM;
 	*rx_tailroom = 0;

-	shdlc = kzalloc(sizeof(struct llc_shdlc), GFP_KERNEL);
+	shdlc = kzalloc_obj(struct llc_shdlc, GFP_KERNEL);
 	if (shdlc == NULL)
 		return NULL;

diff --git a/net/nfc/llcp_commands.c b/net/nfc/llcp_commands.c
index b652323bc2c1..90f68199ecca 100644
--- a/net/nfc/llcp_commands.c
+++ b/net/nfc/llcp_commands.c
@@ -108,7 +108,7 @@ struct nfc_llcp_sdp_tlv *nfc_llcp_build_sdres_tlv(u8 tid, u8 sap)
 	struct nfc_llcp_sdp_tlv *sdres;
 	u8 value[2];

-	sdres = kzalloc(sizeof(struct nfc_llcp_sdp_tlv), GFP_KERNEL);
+	sdres = kzalloc_obj(struct nfc_llcp_sdp_tlv, GFP_KERNEL);
 	if (sdres == NULL)
 		return NULL;

@@ -141,7 +141,7 @@ struct nfc_llcp_sdp_tlv *nfc_llcp_build_sdreq_tlv(u8 tid, const char *uri,
 	if (WARN_ON_ONCE(uri_len > U8_MAX - 4))
 		return NULL;

-	sdreq = kzalloc(sizeof(struct nfc_llcp_sdp_tlv), GFP_KERNEL);
+	sdreq = kzalloc_obj(struct nfc_llcp_sdp_tlv, GFP_KERNEL);
 	if (sdreq == NULL)
 		return NULL;

diff --git a/net/nfc/llcp_core.c b/net/nfc/llcp_core.c
index 444a3774c8e8..98f0c3281281 100644
--- a/net/nfc/llcp_core.c
+++ b/net/nfc/llcp_core.c
@@ -1621,7 +1621,7 @@ int nfc_llcp_register_device(struct nfc_dev *ndev)
 {
 	struct nfc_llcp_local *local;

-	local = kzalloc(sizeof(struct nfc_llcp_local), GFP_KERNEL);
+	local = kzalloc_obj(struct nfc_llcp_local, GFP_KERNEL);
 	if (local == NULL)
 		return -ENOMEM;

diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index e419e020a70a..dc17ed8be242 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -1171,7 +1171,7 @@ struct nci_dev *nci_allocate_device(const struct nci_ops *ops,
 	if (!supported_protocols)
 		return NULL;

-	ndev = kzalloc(sizeof(struct nci_dev), GFP_KERNEL);
+	ndev = kzalloc_obj(struct nci_dev, GFP_KERNEL);
 	if (!ndev)
 		return NULL;

diff --git a/net/nfc/nci/hci.c b/net/nfc/nci/hci.c
index 082ab66f120b..cd3e87b2dd3e 100644
--- a/net/nfc/nci/hci.c
+++ b/net/nfc/nci/hci.c
@@ -777,7 +777,7 @@ struct nci_hci_dev *nci_hci_allocate(struct nci_dev *ndev)
 {
 	struct nci_hci_dev *hdev;

-	hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
+	hdev = kzalloc_obj(*hdev, GFP_KERNEL);
 	if (!hdev)
 		return NULL;

diff --git a/net/nfc/nci/uart.c b/net/nfc/nci/uart.c
index aab107727f18..25dc2868fd27 100644
--- a/net/nfc/nci/uart.c
+++ b/net/nfc/nci/uart.c
@@ -113,7 +113,7 @@ static int nci_uart_set_driver(struct tty_struct *tty, unsigned int driver)
 	if (!nci_uart_drivers[driver])
 		return -ENOENT;

-	nu = kzalloc(sizeof(*nu), GFP_KERNEL);
+	nu = kzalloc_obj(*nu, GFP_KERNEL);
 	if (!nu)
 		return -ENOMEM;

diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c
index a18e2c503da6..a69322721c31 100644
--- a/net/nfc/netlink.c
+++ b/net/nfc/netlink.c
@@ -604,7 +604,7 @@ static int nfc_genl_dump_devices(struct sk_buff *skb,

 	if (!iter) {
 		first_call = true;
-		iter = kmalloc(sizeof(struct class_dev_iter), GFP_KERNEL);
+		iter = kmalloc_obj(struct class_dev_iter, GFP_KERNEL);
 		if (!iter)
 			return -ENOMEM;
 		cb->args[0] = (long) iter;
@@ -1370,7 +1370,7 @@ static int nfc_genl_dump_ses(struct sk_buff *skb,

 	if (!iter) {
 		first_call = true;
-		iter = kmalloc(sizeof(struct class_dev_iter), GFP_KERNEL);
+		iter = kmalloc_obj(struct class_dev_iter, GFP_KERNEL);
 		if (!iter)
 			return -ENOMEM;
 		cb->args[0] = (long) iter;
@@ -1541,7 +1541,7 @@ static int nfc_genl_se_io(struct sk_buff *skb, struct genl_info *info)

 	apdu = nla_data(info->attrs[NFC_ATTR_SE_APDU]);

-	ctx = kzalloc(sizeof(struct se_io_ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(struct se_io_ctx, GFP_KERNEL);
 	if (!ctx) {
 		rc = -ENOMEM;
 		goto put_dev;
@@ -1875,7 +1875,7 @@ static int nfc_genl_rcv_nl_event(struct notifier_block *this,

 	pr_debug("NETLINK_URELEASE event from id %d\n", n->portid);

-	w = kmalloc(sizeof(*w), GFP_ATOMIC);
+	w = kmalloc_obj(*w, GFP_ATOMIC);
 	if (w) {
 		INIT_WORK(&w->w, nfc_urelease_event_work);
 		w->portid = n->portid;
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
index a0811e1fba65..8051e3127d2c 100644
--- a/net/openvswitch/conntrack.c
+++ b/net/openvswitch/conntrack.c
@@ -1586,15 +1586,15 @@ static int ovs_ct_limit_init(struct net *net, struct ovs_net *ovs_net)
 {
 	int i, err;

-	ovs_net->ct_limit_info = kmalloc(sizeof(*ovs_net->ct_limit_info),
-					 GFP_KERNEL);
+	ovs_net->ct_limit_info = kmalloc_obj(*ovs_net->ct_limit_info,
+					     GFP_KERNEL);
 	if (!ovs_net->ct_limit_info)
 		return -ENOMEM;

 	ovs_net->ct_limit_info->default_limit = OVS_CT_LIMIT_DEFAULT;
 	ovs_net->ct_limit_info->limits =
-		kmalloc_array(CT_LIMIT_HASH_BUCKETS, sizeof(struct hlist_head),
-			      GFP_KERNEL);
+		kmalloc_objs(struct hlist_head, CT_LIMIT_HASH_BUCKETS,
+			     GFP_KERNEL);
 	if (!ovs_net->ct_limit_info->limits) {
 		kfree(ovs_net->ct_limit_info);
 		return -ENOMEM;
@@ -1688,8 +1688,7 @@ static int ovs_ct_limit_set_zone_limit(struct nlattr *nla_zone_limit,
 		} else {
 			struct ovs_ct_limit *ct_limit;

-			ct_limit = kmalloc(sizeof(*ct_limit),
-					   GFP_KERNEL_ACCOUNT);
+			ct_limit = kmalloc_obj(*ct_limit, GFP_KERNEL_ACCOUNT);
 			if (!ct_limit)
 				return -ENOMEM;

diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index d5b6e2002bc1..b4fb83c3c0f9 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -1029,7 +1029,7 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info)
 	}

 	/* Extract key. */
-	key = kzalloc(sizeof(*key), GFP_KERNEL);
+	key = kzalloc_obj(*key, GFP_KERNEL);
 	if (!key) {
 		error = -ENOMEM;
 		goto err_kfree_flow;
@@ -1797,9 +1797,8 @@ static int ovs_dp_vport_init(struct datapath *dp)
 {
 	int i;

-	dp->ports = kmalloc_array(DP_VPORT_HASH_BUCKETS,
-				  sizeof(struct hlist_head),
-				  GFP_KERNEL);
+	dp->ports = kmalloc_objs(struct hlist_head, DP_VPORT_HASH_BUCKETS,
+				 GFP_KERNEL);
 	if (!dp->ports)
 		return -ENOMEM;

@@ -1828,7 +1827,7 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct genl_info *info)
 		return -ENOMEM;

 	err = -ENOMEM;
-	dp = kzalloc(sizeof(*dp), GFP_KERNEL);
+	dp = kzalloc_obj(*dp, GFP_KERNEL);
 	if (dp == NULL)
 		goto err_destroy_reply;

diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c
index 2d536901309e..54fd208a1a68 100644
--- a/net/openvswitch/flow_netlink.c
+++ b/net/openvswitch/flow_netlink.c
@@ -1890,7 +1890,7 @@ int ovs_nla_get_identifier(struct sw_flow_id *sfid, const struct nlattr *ufid,
 		return 0;

 	/* If UFID was not provided, use unmasked key. */
-	new_key = kmalloc(sizeof(*new_key), GFP_KERNEL);
+	new_key = kmalloc_obj(*new_key, GFP_KERNEL);
 	if (!new_key)
 		return -ENOMEM;
 	memcpy(new_key, key, sizeof(*key));
diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
index ffc72a741a50..b75236aa4414 100644
--- a/net/openvswitch/flow_table.c
+++ b/net/openvswitch/flow_table.c
@@ -150,14 +150,13 @@ static void __table_instance_destroy(struct table_instance *ti)

 static struct table_instance *table_instance_alloc(int new_size)
 {
-	struct table_instance *ti = kmalloc(sizeof(*ti), GFP_KERNEL);
+	struct table_instance *ti = kmalloc_obj(*ti, GFP_KERNEL);
 	int i;

 	if (!ti)
 		return NULL;

-	ti->buckets = kvmalloc_array(new_size, sizeof(struct hlist_head),
-				     GFP_KERNEL);
+	ti->buckets = kvmalloc_objs(struct hlist_head, new_size, GFP_KERNEL);
 	if (!ti->buckets) {
 		kfree(ti);
 		return NULL;
@@ -367,7 +366,7 @@ static struct mask_cache *tbl_mask_cache_alloc(u32 size)
 	    (size * sizeof(struct mask_cache_entry)) > PCPU_MIN_UNIT_SIZE)
 		return NULL;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return NULL;

@@ -965,7 +964,7 @@ static struct sw_flow_mask *mask_alloc(void)
 {
 	struct sw_flow_mask *mask;

-	mask = kmalloc(sizeof(*mask), GFP_KERNEL);
+	mask = kmalloc_obj(*mask, GFP_KERNEL);
 	if (mask)
 		mask->ref_count = 1;

@@ -1110,8 +1109,7 @@ void ovs_flow_masks_rebalance(struct flow_table *table)
 	int i;

 	/* Build array of all current entries with use counters. */
-	masks_and_count = kmalloc_array(ma->max, sizeof(*masks_and_count),
-					GFP_KERNEL);
+	masks_and_count = kmalloc_objs(*masks_and_count, ma->max, GFP_KERNEL);
 	if (!masks_and_count)
 		return;

diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c
index cc08e0403909..0c2db78bb71e 100644
--- a/net/openvswitch/meter.c
+++ b/net/openvswitch/meter.c
@@ -69,7 +69,7 @@ static struct dp_meter_instance *dp_meter_instance_alloc(const u32 size)
 {
 	struct dp_meter_instance *ti;

-	ti = kvzalloc(struct_size(ti, dp_meters, size), GFP_KERNEL);
+	ti = kvzalloc_flex(*ti, dp_meters, size, GFP_KERNEL);
 	if (!ti)
 		return NULL;

@@ -341,7 +341,7 @@ static struct dp_meter *dp_meter_create(struct nlattr **a)
 			return ERR_PTR(-EINVAL);

 	/* Allocate and set up the meter before locking anything. */
-	meter = kzalloc(struct_size(meter, bands, n_bands), GFP_KERNEL_ACCOUNT);
+	meter = kzalloc_flex(*meter, bands, n_bands, GFP_KERNEL_ACCOUNT);
 	if (!meter)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/openvswitch/vport.c b/net/openvswitch/vport.c
index f0ce8ce1dce0..4b83512cbc65 100644
--- a/net/openvswitch/vport.c
+++ b/net/openvswitch/vport.c
@@ -34,8 +34,8 @@ static struct hlist_head *dev_table;
  */
 int ovs_vport_init(void)
 {
-	dev_table = kcalloc(VPORT_HASH_BUCKETS, sizeof(struct hlist_head),
-			    GFP_KERNEL);
+	dev_table = kzalloc_objs(struct hlist_head, VPORT_HASH_BUCKETS,
+				 GFP_KERNEL);
 	if (!dev_table)
 		return -ENOMEM;

diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index a1005359085a..a78c5122a3d7 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -1711,7 +1711,7 @@ static int fanout_add(struct sock *sk, struct fanout_args *args)
 	if (type == PACKET_FANOUT_ROLLOVER ||
 	    (type_flags & PACKET_FANOUT_FLAG_ROLLOVER)) {
 		err = -ENOMEM;
-		rollover = kzalloc(sizeof(*rollover), GFP_KERNEL);
+		rollover = kzalloc_obj(*rollover, GFP_KERNEL);
 		if (!rollover)
 			goto out;
 		atomic_long_set(&rollover->num, 0);
@@ -1754,8 +1754,8 @@ static int fanout_add(struct sock *sk, struct fanout_args *args)
 			/* legacy PACKET_FANOUT_MAX */
 			args->max_num_members = 256;
 		err = -ENOMEM;
-		match = kvzalloc(struct_size(match, arr, args->max_num_members),
-				 GFP_KERNEL);
+		match = kvzalloc_flex(*match, arr, args->max_num_members,
+				      GFP_KERNEL);
 		if (!match)
 			goto out;
 		write_pnet(&match->net, sock_net(sk));
@@ -3693,7 +3693,7 @@ static int packet_mc_add(struct sock *sk, struct packet_mreq_max *mreq)
 		goto done;

 	err = -ENOBUFS;
-	i = kmalloc(sizeof(*i), GFP_KERNEL);
+	i = kmalloc_obj(*i, GFP_KERNEL);
 	if (i == NULL)
 		goto done;

@@ -4390,7 +4390,7 @@ static struct pgv *alloc_pg_vec(struct tpacket_req *req, int order)
 	struct pgv *pg_vec;
 	int i;

-	pg_vec = kcalloc(block_nr, sizeof(struct pgv), GFP_KERNEL | __GFP_NOWARN);
+	pg_vec = kzalloc_objs(struct pgv, block_nr, GFP_KERNEL | __GFP_NOWARN);
 	if (unlikely(!pg_vec))
 		goto out;

diff --git a/net/phonet/pn_dev.c b/net/phonet/pn_dev.c
index 5c36bae37b8f..86325b7fc1b6 100644
--- a/net/phonet/pn_dev.c
+++ b/net/phonet/pn_dev.c
@@ -48,7 +48,7 @@ struct phonet_device_list *phonet_device_list(struct net *net)
 static struct phonet_device *__phonet_device_alloc(struct net_device *dev)
 {
 	struct phonet_device_list *pndevs = phonet_device_list(dev_net(dev));
-	struct phonet_device *pnd = kmalloc(sizeof(*pnd), GFP_ATOMIC);
+	struct phonet_device *pnd = kmalloc_obj(*pnd, GFP_ATOMIC);
 	if (pnd == NULL)
 		return NULL;
 	pnd->netdev = dev;
diff --git a/net/psample/psample.c b/net/psample/psample.c
index 25f92ba0840c..7763662036fb 100644
--- a/net/psample/psample.c
+++ b/net/psample/psample.c
@@ -143,7 +143,7 @@ static struct psample_group *psample_group_create(struct net *net,
 {
 	struct psample_group *group;

-	group = kzalloc(sizeof(*group), GFP_ATOMIC);
+	group = kzalloc_obj(*group, GFP_ATOMIC);
 	if (!group)
 		return NULL;

diff --git a/net/psp/psp_main.c b/net/psp/psp_main.c
index a8534124f626..08decafee7a6 100644
--- a/net/psp/psp_main.c
+++ b/net/psp/psp_main.c
@@ -64,7 +64,7 @@ psp_dev_create(struct net_device *netdev,
 		    !psd_ops->get_stats))
 		return ERR_PTR(-EINVAL);

-	psd = kzalloc(sizeof(*psd), GFP_KERNEL);
+	psd = kzalloc_obj(*psd, GFP_KERNEL);
 	if (!psd)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/psp/psp_sock.c b/net/psp/psp_sock.c
index f785672b7df6..a85b0ed88842 100644
--- a/net/psp/psp_sock.c
+++ b/net/psp/psp_sock.c
@@ -50,8 +50,8 @@ struct psp_assoc *psp_assoc_create(struct psp_dev *psd)

 	lockdep_assert_held(&psd->lock);

-	pas = kzalloc(struct_size(pas, drv_data, psd->caps->assoc_drv_spc),
-		      GFP_KERNEL_ACCOUNT);
+	pas = kzalloc_flex(*pas, drv_data, psd->caps->assoc_drv_spc,
+			   GFP_KERNEL_ACCOUNT);
 	if (!pas)
 		return NULL;

diff --git a/net/qrtr/af_qrtr.c b/net/qrtr/af_qrtr.c
index dab839f61ee9..70e7a210fd42 100644
--- a/net/qrtr/af_qrtr.c
+++ b/net/qrtr/af_qrtr.c
@@ -271,7 +271,7 @@ static int qrtr_tx_wait(struct qrtr_node *node, int dest_node, int dest_port,
 	mutex_lock(&node->qrtr_tx_lock);
 	flow = radix_tree_lookup(&node->qrtr_tx_flow, key);
 	if (!flow) {
-		flow = kzalloc(sizeof(*flow), GFP_KERNEL);
+		flow = kzalloc_obj(*flow, GFP_KERNEL);
 		if (flow) {
 			init_waitqueue_head(&flow->resume_tx);
 			if (radix_tree_insert(&node->qrtr_tx_flow, key, flow)) {
@@ -589,7 +589,7 @@ int qrtr_endpoint_register(struct qrtr_endpoint *ep, unsigned int nid)
 	if (!ep || !ep->xmit)
 		return -EINVAL;

-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return -ENOMEM;

diff --git a/net/qrtr/ns.c b/net/qrtr/ns.c
index bfcc1a453f23..36b5c1990bf5 100644
--- a/net/qrtr/ns.c
+++ b/net/qrtr/ns.c
@@ -78,7 +78,7 @@ static struct qrtr_node *node_get(unsigned int node_id)
 		return node;

 	/* If node didn't exist, allocate and insert it to the tree */
-	node = kzalloc(sizeof(*node), GFP_KERNEL);
+	node = kzalloc_obj(*node, GFP_KERNEL);
 	if (!node)
 		return NULL;

@@ -229,7 +229,7 @@ static struct qrtr_server *server_add(unsigned int service,
 	if (!service || !port)
 		return NULL;

-	srv = kzalloc(sizeof(*srv), GFP_KERNEL);
+	srv = kzalloc_obj(*srv, GFP_KERNEL);
 	if (!srv)
 		return NULL;

@@ -534,7 +534,7 @@ static int ctrl_cmd_new_lookup(struct sockaddr_qrtr *from,
 	if (from->sq_node != qrtr_ns.local_node)
 		return -EINVAL;

-	lookup = kzalloc(sizeof(*lookup), GFP_KERNEL);
+	lookup = kzalloc_obj(*lookup, GFP_KERNEL);
 	if (!lookup)
 		return -ENOMEM;

diff --git a/net/qrtr/tun.c b/net/qrtr/tun.c
index 304b41fea5ab..9ad17a773593 100644
--- a/net/qrtr/tun.c
+++ b/net/qrtr/tun.c
@@ -33,7 +33,7 @@ static int qrtr_tun_open(struct inode *inode, struct file *filp)
 	struct qrtr_tun *tun;
 	int ret;

-	tun = kzalloc(sizeof(*tun), GFP_KERNEL);
+	tun = kzalloc_obj(*tun, GFP_KERNEL);
 	if (!tun)
 		return -ENOMEM;

diff --git a/net/rds/cong.c b/net/rds/cong.c
index ac1f120c10f9..e7f019c3a625 100644
--- a/net/rds/cong.c
+++ b/net/rds/cong.c
@@ -143,7 +143,7 @@ static struct rds_cong_map *rds_cong_from_addr(const struct in6_addr *addr)
 	unsigned long i;
 	unsigned long flags;

-	map = kzalloc(sizeof(struct rds_cong_map), GFP_KERNEL);
+	map = kzalloc_obj(struct rds_cong_map, GFP_KERNEL);
 	if (!map)
 		return NULL;

diff --git a/net/rds/connection.c b/net/rds/connection.c
index 185f73b01694..e23fd9a628ac 100644
--- a/net/rds/connection.c
+++ b/net/rds/connection.c
@@ -197,7 +197,7 @@ static struct rds_connection *__rds_conn_create(struct net *net,
 		conn = ERR_PTR(-ENOMEM);
 		goto out;
 	}
-	conn->c_path = kcalloc(npaths, sizeof(struct rds_conn_path), gfp);
+	conn->c_path = kzalloc_objs(struct rds_conn_path, npaths, gfp);
 	if (!conn->c_path) {
 		kmem_cache_free(rds_conn_slab, conn);
 		conn = ERR_PTR(-ENOMEM);
diff --git a/net/rds/ib.c b/net/rds/ib.c
index 9826fe7f9d00..8457ec7c3ab8 100644
--- a/net/rds/ib.c
+++ b/net/rds/ib.c
@@ -172,9 +172,8 @@ static int rds_ib_add_one(struct ib_device *device)
 	rds_ibdev->max_initiator_depth = device->attrs.max_qp_init_rd_atom;
 	rds_ibdev->max_responder_resources = device->attrs.max_qp_rd_atom;

-	rds_ibdev->vector_load = kcalloc(device->num_comp_vectors,
-					 sizeof(int),
-					 GFP_KERNEL);
+	rds_ibdev->vector_load = kzalloc_objs(int, device->num_comp_vectors,
+					      GFP_KERNEL);
 	if (!rds_ibdev->vector_load) {
 		pr_err("RDS/IB: %s failed to allocate vector memory\n",
 			__func__);
diff --git a/net/rds/ib_cm.c b/net/rds/ib_cm.c
index 26b069e1999d..0c64c504f79d 100644
--- a/net/rds/ib_cm.c
+++ b/net/rds/ib_cm.c
@@ -1203,7 +1203,7 @@ int rds_ib_conn_alloc(struct rds_connection *conn, gfp_t gfp)
 	int ret;

 	/* XXX too lazy? */
-	ic = kzalloc(sizeof(struct rds_ib_connection), gfp);
+	ic = kzalloc_obj(struct rds_ib_connection, gfp);
 	if (!ic)
 		return -ENOMEM;

diff --git a/net/rds/ib_rdma.c b/net/rds/ib_rdma.c
index 6585164c7059..651f658a6a0a 100644
--- a/net/rds/ib_rdma.c
+++ b/net/rds/ib_rdma.c
@@ -67,7 +67,7 @@ static int rds_ib_add_ipaddr(struct rds_ib_device *rds_ibdev, __be32 ipaddr)
 {
 	struct rds_ib_ipaddr *i_ipaddr;

-	i_ipaddr = kmalloc(sizeof *i_ipaddr, GFP_KERNEL);
+	i_ipaddr = kmalloc_obj(*i_ipaddr, GFP_KERNEL);
 	if (!i_ipaddr)
 		return -ENOMEM;

@@ -585,7 +585,7 @@ void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents,
 		if (key_ret)
 			*key_ret = ib_mr->rkey;

-		ibmr = kzalloc(sizeof(*ibmr), GFP_KERNEL);
+		ibmr = kzalloc_obj(*ibmr, GFP_KERNEL);
 		if (!ibmr) {
 			ib_dereg_mr(ib_mr);
 			ret = -ENOMEM;
@@ -641,7 +641,7 @@ struct rds_ib_mr_pool *rds_ib_create_mr_pool(struct rds_ib_device *rds_ibdev,
 {
 	struct rds_ib_mr_pool *pool;

-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/rds/info.c b/net/rds/info.c
index b6b46a8214a0..696e957c41a9 100644
--- a/net/rds/info.c
+++ b/net/rds/info.c
@@ -187,7 +187,7 @@ int rds_info_getsockopt(struct socket *sock, int optname, char __user *optval,
 	nr_pages = (PAGE_ALIGN(start + len) - (start & PAGE_MASK))
 			>> PAGE_SHIFT;

-	pages = kmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kmalloc_objs(struct page *, nr_pages, GFP_KERNEL);
 	if (!pages) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/net/rds/loop.c b/net/rds/loop.c
index 1d73ad79c847..ac9295a766b1 100644
--- a/net/rds/loop.c
+++ b/net/rds/loop.c
@@ -137,7 +137,7 @@ static int rds_loop_conn_alloc(struct rds_connection *conn, gfp_t gfp)
 	struct rds_loop_connection *lc;
 	unsigned long flags;

-	lc = kzalloc(sizeof(struct rds_loop_connection), gfp);
+	lc = kzalloc_obj(struct rds_loop_connection, gfp);
 	if (!lc)
 		return -ENOMEM;

diff --git a/net/rds/message.c b/net/rds/message.c
index 54fd000806ea..e367ca4f4f31 100644
--- a/net/rds/message.c
+++ b/net/rds/message.c
@@ -415,7 +415,7 @@ static int rds_message_zcopy_from_user(struct rds_message *rm, struct iov_iter *
 	 */
 	sg = rm->data.op_sg;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&info->rs_zcookie_next);
diff --git a/net/rds/rdma.c b/net/rds/rdma.c
index 00dbcd4d28e6..0015531aff05 100644
--- a/net/rds/rdma.c
+++ b/net/rds/rdma.c
@@ -228,13 +228,13 @@ static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args,
 		args->vec.addr, args->vec.bytes, nr_pages);

 	/* XXX clamp nr_pages to limit the size of this alloc? */
-	pages = kcalloc(nr_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kzalloc_objs(struct page *, nr_pages, GFP_KERNEL);
 	if (!pages) {
 		ret = -ENOMEM;
 		goto out;
 	}

-	mr = kzalloc(sizeof(struct rds_mr), GFP_KERNEL);
+	mr = kzalloc_obj(struct rds_mr, GFP_KERNEL);
 	if (!mr) {
 		ret = -ENOMEM;
 		goto out;
@@ -269,7 +269,7 @@ static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args,
 		goto out;
 	} else {
 		nents = ret;
-		sg = kmalloc_array(nents, sizeof(*sg), GFP_KERNEL);
+		sg = kmalloc_objs(*sg, nents, GFP_KERNEL);
 		if (!sg) {
 			ret = -ENOMEM;
 			goto out;
@@ -571,9 +571,7 @@ int rds_rdma_extra_size(struct rds_rdma_args *args,
 	if (args->nr_local > UIO_MAXIOV)
 		return -EMSGSIZE;

-	iov->iov = kcalloc(args->nr_local,
-			   sizeof(struct rds_iovec),
-			   GFP_KERNEL);
+	iov->iov = kzalloc_objs(struct rds_iovec, args->nr_local, GFP_KERNEL);
 	if (!iov->iov)
 		return -ENOMEM;

@@ -654,7 +652,7 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
 		goto out_ret;
 	}

-	pages = kcalloc(nr_pages, sizeof(struct page *), GFP_KERNEL);
+	pages = kzalloc_objs(struct page *, nr_pages, GFP_KERNEL);
 	if (!pages) {
 		ret = -ENOMEM;
 		goto out_ret;
@@ -681,7 +679,7 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
 		 * would have to use GFP_ATOMIC there, and don't want to deal
 		 * with failed allocations.
 		 */
-		op->op_notifier = kmalloc(sizeof(struct rds_notifier), GFP_KERNEL);
+		op->op_notifier = kmalloc_obj(struct rds_notifier, GFP_KERNEL);
 		if (!op->op_notifier) {
 			ret = -ENOMEM;
 			goto out_pages;
@@ -730,8 +728,7 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
 				ret = -EOPNOTSUPP;
 				goto out_pages;
 			}
-			local_odp_mr =
-				kzalloc(sizeof(*local_odp_mr), GFP_KERNEL);
+			local_odp_mr = kzalloc_obj(*local_odp_mr, GFP_KERNEL);
 			if (!local_odp_mr) {
 				ret = -ENOMEM;
 				goto out_pages;
@@ -937,7 +934,8 @@ int rds_cmsg_atomic(struct rds_sock *rs, struct rds_message *rm,
 		 * would have to use GFP_ATOMIC there, and don't want to deal
 		 * with failed allocations.
 		 */
-		rm->atomic.op_notifier = kmalloc(sizeof(*rm->atomic.op_notifier), GFP_KERNEL);
+		rm->atomic.op_notifier = kmalloc_obj(*rm->atomic.op_notifier,
+						     GFP_KERNEL);
 		if (!rm->atomic.op_notifier) {
 			ret = -ENOMEM;
 			goto err;
diff --git a/net/rfkill/core.c b/net/rfkill/core.c
index 7d3e82e4c2fc..0f64aa4797f7 100644
--- a/net/rfkill/core.c
+++ b/net/rfkill/core.c
@@ -279,7 +279,7 @@ static void rfkill_send_events(struct rfkill *rfkill, enum rfkill_operation op)
 	struct rfkill_int_event *ev;

 	list_for_each_entry(data, &rfkill_fds, list) {
-		ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+		ev = kzalloc_obj(*ev, GFP_KERNEL);
 		if (!ev)
 			continue;
 		rfkill_fill_event(&ev->ev, rfkill, op);
@@ -1165,7 +1165,7 @@ static int rfkill_fop_open(struct inode *inode, struct file *file)
 	struct rfkill *rfkill;
 	struct rfkill_int_event *ev, *tmp;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -1182,7 +1182,7 @@ static int rfkill_fop_open(struct inode *inode, struct file *file)
 	 */

 	list_for_each_entry(rfkill, &rfkill_list, node) {
-		ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+		ev = kzalloc_obj(*ev, GFP_KERNEL);
 		if (!ev)
 			goto free;
 		rfkill_sync(rfkill);
diff --git a/net/rfkill/input.c b/net/rfkill/input.c
index 53d286b10843..2be6d13ba6ba 100644
--- a/net/rfkill/input.c
+++ b/net/rfkill/input.c
@@ -221,7 +221,7 @@ static int rfkill_connect(struct input_handler *handler, struct input_dev *dev,
 	struct input_handle *handle;
 	int error;

-	handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
+	handle = kzalloc_obj(struct input_handle, GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
index c0f5a515a8ce..83c62af80d7c 100644
--- a/net/rose/af_rose.c
+++ b/net/rose/af_rose.c
@@ -1571,8 +1571,7 @@ static int __init rose_proto_init(void)

 	rose_callsign = null_ax25_address;

-	dev_rose = kcalloc(rose_ndevs, sizeof(struct net_device *),
-			   GFP_KERNEL);
+	dev_rose = kzalloc_objs(struct net_device *, rose_ndevs, GFP_KERNEL);
 	if (dev_rose == NULL) {
 		printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate device structure\n");
 		rc = -ENOMEM;
diff --git a/net/rose/rose_route.c b/net/rose/rose_route.c
index a1e9b05ef6f5..4330df1b1b59 100644
--- a/net/rose/rose_route.c
+++ b/net/rose/rose_route.c
@@ -82,7 +82,7 @@ static int __must_check rose_add_node(struct rose_route_struct *rose_route,
 	}

 	if (rose_neigh == NULL) {
-		rose_neigh = kmalloc(sizeof(*rose_neigh), GFP_ATOMIC);
+		rose_neigh = kmalloc_obj(*rose_neigh, GFP_ATOMIC);
 		if (rose_neigh == NULL) {
 			res = -ENOMEM;
 			goto out;
@@ -106,7 +106,7 @@ static int __must_check rose_add_node(struct rose_route_struct *rose_route,

 		if (rose_route->ndigis != 0) {
 			rose_neigh->digipeat =
-				kmalloc(sizeof(ax25_digi), GFP_ATOMIC);
+				kmalloc_obj(ax25_digi, GFP_ATOMIC);
 			if (rose_neigh->digipeat == NULL) {
 				kfree(rose_neigh);
 				res = -ENOMEM;
@@ -148,7 +148,7 @@ static int __must_check rose_add_node(struct rose_route_struct *rose_route,
 		}

 		/* create new node */
-		rose_node = kmalloc(sizeof(*rose_node), GFP_ATOMIC);
+		rose_node = kmalloc_obj(*rose_node, GFP_ATOMIC);
 		if (rose_node == NULL) {
 			res = -ENOMEM;
 			goto out;
@@ -368,7 +368,7 @@ void rose_add_loopback_neigh(void)
 {
 	struct rose_neigh *sn;

-	rose_loopback_neigh = kmalloc(sizeof(struct rose_neigh), GFP_KERNEL);
+	rose_loopback_neigh = kmalloc_obj(struct rose_neigh, GFP_KERNEL);
 	if (!rose_loopback_neigh)
 		return;
 	sn = rose_loopback_neigh;
@@ -417,7 +417,7 @@ int rose_add_loopback_node(const rose_address *address)
 	if (rose_node != NULL)
 		goto out;

-	if ((rose_node = kmalloc(sizeof(*rose_node), GFP_ATOMIC)) == NULL) {
+	if ((rose_node = kmalloc_obj(*rose_node, GFP_ATOMIC)) == NULL) {
 		err = -ENOMEM;
 		goto out;
 	}
@@ -1055,7 +1055,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
 		goto put_neigh;
 	}

-	if ((rose_route = kmalloc(sizeof(*rose_route), GFP_ATOMIC)) == NULL) {
+	if ((rose_route = kmalloc_obj(*rose_route, GFP_ATOMIC)) == NULL) {
 		rose_transmit_clear_request(rose_neigh, lci, ROSE_NETWORK_CONGESTION, 120);
 		goto put_neigh;
 	}
diff --git a/net/rxrpc/call_accept.c b/net/rxrpc/call_accept.c
index 00982a030744..ee2d1319e69a 100644
--- a/net/rxrpc/call_accept.c
+++ b/net/rxrpc/call_accept.c
@@ -164,7 +164,7 @@ int rxrpc_service_prealloc(struct rxrpc_sock *rx, gfp_t gfp)
 	struct rxrpc_backlog *b = rx->backlog;

 	if (!b) {
-		b = kzalloc(sizeof(struct rxrpc_backlog), gfp);
+		b = kzalloc_obj(struct rxrpc_backlog, gfp);
 		if (!b)
 			return -ENOMEM;
 		rx->backlog = b;
diff --git a/net/rxrpc/conn_client.c b/net/rxrpc/conn_client.c
index 63bbcc567f59..9b757798dedd 100644
--- a/net/rxrpc/conn_client.c
+++ b/net/rxrpc/conn_client.c
@@ -76,7 +76,7 @@ static struct rxrpc_bundle *rxrpc_alloc_bundle(struct rxrpc_call *call,
 	static atomic_t rxrpc_bundle_id;
 	struct rxrpc_bundle *bundle;

-	bundle = kzalloc(sizeof(*bundle), gfp);
+	bundle = kzalloc_obj(*bundle, gfp);
 	if (bundle) {
 		bundle->local		= call->local;
 		bundle->peer		= rxrpc_get_peer(call->peer, rxrpc_peer_get_bundle);
diff --git a/net/rxrpc/conn_object.c b/net/rxrpc/conn_object.c
index 37340becb224..0ece717db0f8 100644
--- a/net/rxrpc/conn_object.c
+++ b/net/rxrpc/conn_object.c
@@ -59,7 +59,7 @@ struct rxrpc_connection *rxrpc_alloc_connection(struct rxrpc_net *rxnet,

 	_enter("");

-	conn = kzalloc(sizeof(struct rxrpc_connection), gfp);
+	conn = kzalloc_obj(struct rxrpc_connection, gfp);
 	if (conn) {
 		INIT_LIST_HEAD(&conn->cache_link);
 		timer_setup(&conn->timer, &rxrpc_connection_timer, 0);
diff --git a/net/rxrpc/key.c b/net/rxrpc/key.c
index 9fdc1f031c9d..cd65bff97a8e 100644
--- a/net/rxrpc/key.c
+++ b/net/rxrpc/key.c
@@ -75,7 +75,7 @@ static int rxrpc_preparse_xdr_rxkad(struct key_preparsed_payload *prep,
 	prep->quotalen = datalen + plen;

 	plen -= sizeof(*token);
-	token = kzalloc(sizeof(*token), GFP_KERNEL);
+	token = kzalloc_obj(*token, GFP_KERNEL);
 	if (!token)
 		return -ENOMEM;

@@ -202,7 +202,7 @@ static int rxrpc_preparse_xdr_yfs_rxgk(struct key_preparsed_payload *prep,
 	prep->quotalen = datalen + plen;

 	plen -= sizeof(*token);
-	token = kzalloc(sizeof(*token), GFP_KERNEL);
+	token = kzalloc_obj(*token, GFP_KERNEL);
 	if (!token)
 		goto nomem;

@@ -500,7 +500,7 @@ static int rxrpc_preparse(struct key_preparsed_payload *prep)
 	prep->quotalen = plen + sizeof(*token);

 	ret = -ENOMEM;
-	token = kzalloc(sizeof(*token), GFP_KERNEL);
+	token = kzalloc_obj(*token, GFP_KERNEL);
 	if (!token)
 		goto error;
 	token->kad = kzalloc(plen, GFP_KERNEL);
diff --git a/net/rxrpc/local_object.c b/net/rxrpc/local_object.c
index a74a4b43904f..6f799b26d4d5 100644
--- a/net/rxrpc/local_object.c
+++ b/net/rxrpc/local_object.c
@@ -112,7 +112,7 @@ static struct rxrpc_local *rxrpc_alloc_local(struct net *net,
 	struct rxrpc_local *local;
 	u32 tmp;

-	local = kzalloc(sizeof(struct rxrpc_local), GFP_KERNEL);
+	local = kzalloc_obj(struct rxrpc_local, GFP_KERNEL);
 	if (local) {
 		refcount_set(&local->ref, 1);
 		atomic_set(&local->active_users, 1);
diff --git a/net/rxrpc/peer_object.c b/net/rxrpc/peer_object.c
index 366431b0736c..fa9a406e1168 100644
--- a/net/rxrpc/peer_object.c
+++ b/net/rxrpc/peer_object.c
@@ -226,7 +226,7 @@ struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *local, gfp_t gfp,

 	_enter("");

-	peer = kzalloc(sizeof(struct rxrpc_peer), gfp);
+	peer = kzalloc_obj(struct rxrpc_peer, gfp);
 	if (peer) {
 		refcount_set(&peer->ref, 1);
 		peer->local = rxrpc_get_local(local, rxrpc_local_get_peer);
diff --git a/net/rxrpc/rxgk.c b/net/rxrpc/rxgk.c
index 43cbf9efd89f..f9f5a2dc62ed 100644
--- a/net/rxrpc/rxgk.c
+++ b/net/rxrpc/rxgk.c
@@ -351,7 +351,7 @@ static int rxgk_secure_packet_integrity(const struct rxrpc_call *call,

 	_enter("");

-	hdr = kzalloc(sizeof(*hdr), GFP_NOFS);
+	hdr = kzalloc_obj(*hdr, GFP_NOFS);
 	if (!hdr)
 		goto error_gk;

@@ -483,7 +483,7 @@ static int rxgk_verify_packet_integrity(struct rxrpc_call *call,
 	crypto_krb5_where_is_the_data(gk->krb5, KRB5_CHECKSUM_MODE,
 				      &data_offset, &data_len);

-	hdr = kzalloc(sizeof(*hdr), GFP_NOFS);
+	hdr = kzalloc_obj(*hdr, GFP_NOFS);
 	if (!hdr)
 		goto put_gk;

diff --git a/net/rxrpc/rxgk_kdf.c b/net/rxrpc/rxgk_kdf.c
index b4db5aa30e5b..6011fa7cf221 100644
--- a/net/rxrpc/rxgk_kdf.c
+++ b/net/rxrpc/rxgk_kdf.c
@@ -213,7 +213,7 @@ struct rxgk_context *rxgk_generate_transport_key(struct rxrpc_connection *conn,

 	_enter("");

-	gk = kzalloc(sizeof(*gk), GFP_KERNEL);
+	gk = kzalloc_obj(*gk, GFP_KERNEL);
 	if (!gk)
 		return ERR_PTR(-ENOMEM);
 	refcount_set(&gk->usage, 1);
diff --git a/net/rxrpc/rxkad.c b/net/rxrpc/rxkad.c
index a756855a0a62..e923d6829008 100644
--- a/net/rxrpc/rxkad.c
+++ b/net/rxrpc/rxkad.c
@@ -511,7 +511,7 @@ static int rxkad_verify_packet_2(struct rxrpc_call *call, struct sk_buff *skb,
 	if (nsg <= 4) {
 		nsg = 4;
 	} else {
-		sg = kmalloc_array(nsg, sizeof(*sg), GFP_NOIO);
+		sg = kmalloc_objs(*sg, nsg, GFP_NOIO);
 		if (!sg)
 			return -ENOMEM;
 	}
@@ -1139,7 +1139,7 @@ static int rxkad_verify_response(struct rxrpc_connection *conn,
 	}

 	ret = -ENOMEM;
-	response = kzalloc(sizeof(struct rxkad_response), GFP_NOFS);
+	response = kzalloc_obj(struct rxkad_response, GFP_NOFS);
 	if (!response)
 		goto temporary_error;

diff --git a/net/rxrpc/rxperf.c b/net/rxrpc/rxperf.c
index 98ea76fae70f..1345ffffb109 100644
--- a/net/rxrpc/rxperf.c
+++ b/net/rxrpc/rxperf.c
@@ -151,7 +151,7 @@ static void rxperf_charge_preallocation(struct work_struct *work)
 	struct rxperf_call *call;

 	for (;;) {
-		call = kzalloc(sizeof(*call), GFP_KERNEL);
+		call = kzalloc_obj(*call, GFP_KERNEL);
 		if (!call)
 			break;

diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c
index ebbb78b842de..04f9c5f2dc24 100644
--- a/net/rxrpc/sendmsg.c
+++ b/net/rxrpc/sendmsg.c
@@ -282,7 +282,7 @@ static int rxrpc_alloc_txqueue(struct sock *sk, struct rxrpc_call *call)
 {
 	struct rxrpc_txqueue *tq;

-	tq = kzalloc(sizeof(*tq), sk->sk_allocation);
+	tq = kzalloc_obj(*tq, sk->sk_allocation);
 	if (!tq)
 		return -ENOMEM;

diff --git a/net/rxrpc/txbuf.c b/net/rxrpc/txbuf.c
index 29767038691a..55ef7a04852e 100644
--- a/net/rxrpc/txbuf.c
+++ b/net/rxrpc/txbuf.c
@@ -23,7 +23,7 @@ struct rxrpc_txbuf *rxrpc_alloc_data_txbuf(struct rxrpc_call *call, size_t data_
 	size_t total, doff, jsize = sizeof(struct rxrpc_jumbo_header);
 	void *buf;

-	txb = kzalloc(sizeof(*txb), gfp);
+	txb = kzalloc_obj(*txb, gfp);
 	if (!txb)
 		return NULL;

diff --git a/net/sched/act_api.c b/net/sched/act_api.c
index e1ab0faeb811..389874842982 100644
--- a/net/sched/act_api.c
+++ b/net/sched/act_api.c
@@ -985,7 +985,7 @@ static int tcf_pernet_add_id_list(unsigned int id)
 		}
 	}

-	id_ptr = kzalloc(sizeof(*id_ptr), GFP_KERNEL);
+	id_ptr = kzalloc_obj(*id_ptr, GFP_KERNEL);
 	if (!id_ptr) {
 		ret = -ENOMEM;
 		goto err_out;
@@ -1272,7 +1272,7 @@ int tcf_action_dump(struct sk_buff *skb, struct tc_action *actions[],

 static struct tc_cookie *nla_memdup_cookie(struct nlattr **tb)
 {
-	struct tc_cookie *c = kzalloc(sizeof(*c), GFP_KERNEL);
+	struct tc_cookie *c = kzalloc_obj(*c, GFP_KERNEL);
 	if (!c)
 		return NULL;

diff --git a/net/sched/act_connmark.c b/net/sched/act_connmark.c
index 26ba8c2d20ab..19eea8daa6b5 100644
--- a/net/sched/act_connmark.c
+++ b/net/sched/act_connmark.c
@@ -121,7 +121,7 @@ static int tcf_connmark_init(struct net *net, struct nlattr *nla,
 	if (!tb[TCA_CONNMARK_PARMS])
 		return -EINVAL;

-	nparms = kzalloc(sizeof(*nparms), GFP_KERNEL);
+	nparms = kzalloc_obj(*nparms, GFP_KERNEL);
 	if (!nparms)
 		return -ENOMEM;

diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c
index 0939e6b2ba4d..1cd3336eeeea 100644
--- a/net/sched/act_csum.c
+++ b/net/sched/act_csum.c
@@ -93,7 +93,7 @@ static int tcf_csum_init(struct net *net, struct nlattr *nla,

 	p = to_tcf_csum(*a);

-	params_new = kzalloc(sizeof(*params_new), GFP_KERNEL);
+	params_new = kzalloc_obj(*params_new, GFP_KERNEL);
 	if (unlikely(!params_new)) {
 		err = -ENOMEM;
 		goto put_chain;
diff --git a/net/sched/act_ct.c b/net/sched/act_ct.c
index 81d488655793..5f45bec69c50 100644
--- a/net/sched/act_ct.c
+++ b/net/sched/act_ct.c
@@ -332,7 +332,7 @@ static int tcf_ct_flow_table_get(struct net *net, struct tcf_ct_params *params)
 	if (ct_ft && refcount_inc_not_zero(&ct_ft->ref))
 		goto out_unlock;

-	ct_ft = kzalloc(sizeof(*ct_ft), GFP_KERNEL);
+	ct_ft = kzalloc_obj(*ct_ft, GFP_KERNEL);
 	if (!ct_ft)
 		goto err_alloc;
 	refcount_set(&ct_ft->ref, 1);
@@ -1397,7 +1397,7 @@ static int tcf_ct_init(struct net *net, struct nlattr *nla,

 	c = to_ct(*a);

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (unlikely(!params)) {
 		err = -ENOMEM;
 		goto cleanup;
diff --git a/net/sched/act_ctinfo.c b/net/sched/act_ctinfo.c
index d2c750bab1d3..00e303a01241 100644
--- a/net/sched/act_ctinfo.c
+++ b/net/sched/act_ctinfo.c
@@ -236,7 +236,7 @@ static int tcf_ctinfo_init(struct net *net, struct nlattr *nla,

 	ci = to_ctinfo(*a);

-	cp_new = kzalloc(sizeof(*cp_new), GFP_KERNEL);
+	cp_new = kzalloc_obj(*cp_new, GFP_KERNEL);
 	if (unlikely(!cp_new)) {
 		err = -ENOMEM;
 		goto put_chain;
diff --git a/net/sched/act_gate.c b/net/sched/act_gate.c
index c1f75f272757..686eaed81b81 100644
--- a/net/sched/act_gate.c
+++ b/net/sched/act_gate.c
@@ -243,7 +243,7 @@ static int parse_gate_list(struct nlattr *list_attr,
 			continue;
 		}

-		entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+		entry = kzalloc_obj(*entry, GFP_ATOMIC);
 		if (!entry) {
 			NL_SET_ERR_MSG(extack, "Not enough memory for entry");
 			err = -ENOMEM;
diff --git a/net/sched/act_ife.c b/net/sched/act_ife.c
index 8e8f6af731d5..6895834a929c 100644
--- a/net/sched/act_ife.c
+++ b/net/sched/act_ife.c
@@ -299,7 +299,7 @@ static int __add_metainfo(const struct tcf_meta_ops *ops,
 	struct tcf_meta_info *mi = NULL;
 	int ret = 0;

-	mi = kzalloc(sizeof(*mi), atomic ? GFP_ATOMIC : GFP_KERNEL);
+	mi = kzalloc_obj(*mi, atomic ? GFP_ATOMIC : GFP_KERNEL);
 	if (!mi)
 		return -ENOMEM;

@@ -520,7 +520,7 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,
 	if (parm->flags & ~IFE_ENCODE)
 		return -EINVAL;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

diff --git a/net/sched/act_mpls.c b/net/sched/act_mpls.c
index 6654011dcd2b..30c915d43432 100644
--- a/net/sched/act_mpls.c
+++ b/net/sched/act_mpls.c
@@ -279,7 +279,7 @@ static int tcf_mpls_init(struct net *net, struct nlattr *nla,

 	m = to_mpls(*a);

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p) {
 		err = -ENOMEM;
 		goto put_chain;
diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c
index 26241d80ebe0..7ca2af5a10c3 100644
--- a/net/sched/act_nat.c
+++ b/net/sched/act_nat.c
@@ -81,7 +81,7 @@ static int tcf_nat_init(struct net *net, struct nlattr *nla, struct nlattr *est,
 	if (err < 0)
 		goto release_idr;

-	nparm = kzalloc(sizeof(*nparm), GFP_KERNEL);
+	nparm = kzalloc_obj(*nparm, GFP_KERNEL);
 	if (!nparm) {
 		err = -ENOMEM;
 		goto release_idr;
diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c
index 4b65901397a8..fb960a05cbc8 100644
--- a/net/sched/act_pedit.c
+++ b/net/sched/act_pedit.c
@@ -51,7 +51,7 @@ static struct tcf_pedit_key_ex *tcf_pedit_keys_ex_parse(struct nlattr *nla,
 	if (!nla)
 		return NULL;

-	keys_ex = kcalloc(n, sizeof(*k), GFP_KERNEL);
+	keys_ex = kzalloc_objs(*k, n, GFP_KERNEL);
 	if (!keys_ex)
 		return ERR_PTR(-ENOMEM);

@@ -223,7 +223,7 @@ static int tcf_pedit_init(struct net *net, struct nlattr *nla,
 		goto out_release;
 	}

-	nparms = kzalloc(sizeof(*nparms), GFP_KERNEL);
+	nparms = kzalloc_obj(*nparms, GFP_KERNEL);
 	if (!nparms) {
 		ret = -ENOMEM;
 		goto out_release;
diff --git a/net/sched/act_police.c b/net/sched/act_police.c
index 0e1c61183379..4778c3ebd5db 100644
--- a/net/sched/act_police.c
+++ b/net/sched/act_police.c
@@ -151,7 +151,7 @@ static int tcf_police_init(struct net *net, struct nlattr *nla,
 		goto failure;
 	}

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (unlikely(!new)) {
 		err = -ENOMEM;
 		goto failure;
diff --git a/net/sched/act_skbedit.c b/net/sched/act_skbedit.c
index 5450c1293eb5..e3764d9862ad 100644
--- a/net/sched/act_skbedit.c
+++ b/net/sched/act_skbedit.c
@@ -242,7 +242,7 @@ static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
 	if (err < 0)
 		goto release_idr;

-	params_new = kzalloc(sizeof(*params_new), GFP_KERNEL);
+	params_new = kzalloc_obj(*params_new, GFP_KERNEL);
 	if (unlikely(!params_new)) {
 		err = -ENOMEM;
 		goto put_chain;
diff --git a/net/sched/act_skbmod.c b/net/sched/act_skbmod.c
index a9e0c1326e2a..2eaf82dc2179 100644
--- a/net/sched/act_skbmod.c
+++ b/net/sched/act_skbmod.c
@@ -185,7 +185,7 @@ static int tcf_skbmod_init(struct net *net, struct nlattr *nla,

 	d = to_skbmod(*a);

-	p = kzalloc(sizeof(struct tcf_skbmod_params), GFP_KERNEL);
+	p = kzalloc_obj(struct tcf_skbmod_params, GFP_KERNEL);
 	if (unlikely(!p)) {
 		err = -ENOMEM;
 		goto put_chain;
diff --git a/net/sched/act_vlan.c b/net/sched/act_vlan.c
index a74621797d69..51ac783f7d6c 100644
--- a/net/sched/act_vlan.c
+++ b/net/sched/act_vlan.c
@@ -233,7 +233,7 @@ static int tcf_vlan_init(struct net *net, struct nlattr *nla,

 	v = to_vlan(*a);

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p) {
 		err = -ENOMEM;
 		goto put_chain;
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index ebca4b926dcf..22e8527657af 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -84,7 +84,7 @@ tcf_exts_miss_cookie_base_alloc(struct tcf_exts *exts, struct tcf_proto *tp,
 	if (WARN_ON(!handle || !tp->ops->get_exts))
 		return -EINVAL;

-	n = kzalloc(sizeof(*n), GFP_KERNEL);
+	n = kzalloc_obj(*n, GFP_KERNEL);
 	if (!n)
 		return -ENOMEM;

@@ -377,7 +377,7 @@ static struct tcf_proto *tcf_proto_create(const char *kind, u32 protocol,
 	struct tcf_proto *tp;
 	int err;

-	tp = kzalloc(sizeof(*tp), GFP_KERNEL);
+	tp = kzalloc_obj(*tp, GFP_KERNEL);
 	if (!tp)
 		return ERR_PTR(-ENOBUFS);

@@ -502,7 +502,7 @@ static struct tcf_chain *tcf_chain_create(struct tcf_block *block,

 	ASSERT_BLOCK_LOCKED(block);

-	chain = kzalloc(sizeof(*chain), GFP_KERNEL);
+	chain = kzalloc_obj(*chain, GFP_KERNEL);
 	if (!chain)
 		return NULL;
 	list_add_tail_rcu(&chain->list, &block->chain_list);
@@ -918,7 +918,7 @@ tcf_chain0_head_change_cb_add(struct tcf_block *block,
 	struct tcf_filter_chain_list_item *item;
 	struct tcf_chain *chain0;

-	item = kmalloc(sizeof(*item), GFP_KERNEL);
+	item = kmalloc_obj(*item, GFP_KERNEL);
 	if (!item) {
 		NL_SET_ERR_MSG(extack, "Memory allocation for head change callback item failed");
 		return -ENOMEM;
@@ -1016,7 +1016,7 @@ static struct tcf_block *tcf_block_create(struct net *net, struct Qdisc *q,
 {
 	struct tcf_block *block;

-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (!block) {
 		NL_SET_ERR_MSG(extack, "Memory allocation for block failed");
 		return ERR_PTR(-ENOMEM);
@@ -1428,7 +1428,7 @@ static int tcf_block_owner_add(struct tcf_block *block,
 {
 	struct tcf_block_owner_item *item;

-	item = kmalloc(sizeof(*item), GFP_KERNEL);
+	item = kmalloc_obj(*item, GFP_KERNEL);
 	if (!item)
 		return -ENOMEM;
 	item->q = q;
@@ -3341,8 +3341,8 @@ int tcf_exts_init_ex(struct tcf_exts *exts, struct net *net, int action,
 	 * This reference might be taken later from tcf_exts_get_net().
 	 */
 	exts->net = net;
-	exts->actions = kcalloc(TCA_ACT_MAX_PRIO, sizeof(struct tc_action *),
-				GFP_KERNEL);
+	exts->actions = kzalloc_objs(struct tc_action *, TCA_ACT_MAX_PRIO,
+				     GFP_KERNEL);
 	if (!exts->actions)
 		return -ENOMEM;
 #endif
diff --git a/net/sched/cls_basic.c b/net/sched/cls_basic.c
index ecfaa4f9a04e..5479fd5341b2 100644
--- a/net/sched/cls_basic.c
+++ b/net/sched/cls_basic.c
@@ -77,7 +77,7 @@ static int basic_init(struct tcf_proto *tp)
 {
 	struct basic_head *head;

-	head = kzalloc(sizeof(*head), GFP_KERNEL);
+	head = kzalloc_obj(*head, GFP_KERNEL);
 	if (head == NULL)
 		return -ENOBUFS;
 	INIT_LIST_HEAD(&head->flist);
@@ -193,7 +193,7 @@ static int basic_change(struct net *net, struct sk_buff *in_skb,
 			return -EINVAL;
 	}

-	fnew = kzalloc(sizeof(*fnew), GFP_KERNEL);
+	fnew = kzalloc_obj(*fnew, GFP_KERNEL);
 	if (!fnew)
 		return -ENOBUFS;

diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c
index a32754a2658b..f42b89ba10a8 100644
--- a/net/sched/cls_bpf.c
+++ b/net/sched/cls_bpf.c
@@ -242,7 +242,7 @@ static int cls_bpf_init(struct tcf_proto *tp)
 {
 	struct cls_bpf_head *head;

-	head = kzalloc(sizeof(*head), GFP_KERNEL);
+	head = kzalloc_obj(*head, GFP_KERNEL);
 	if (head == NULL)
 		return -ENOBUFS;

@@ -427,7 +427,7 @@ static int cls_bpf_change(struct net *net, struct sk_buff *in_skb,
 	if (ret < 0)
 		return ret;

-	prog = kzalloc(sizeof(*prog), GFP_KERNEL);
+	prog = kzalloc_obj(*prog, GFP_KERNEL);
 	if (!prog)
 		return -ENOBUFS;

diff --git a/net/sched/cls_cgroup.c b/net/sched/cls_cgroup.c
index 424252982d6a..d177b1cfde60 100644
--- a/net/sched/cls_cgroup.c
+++ b/net/sched/cls_cgroup.c
@@ -95,7 +95,7 @@ static int cls_cgroup_change(struct net *net, struct sk_buff *in_skb,
 	if (head && handle != head->handle)
 		return -ENOENT;

-	new = kzalloc(sizeof(*head), GFP_KERNEL);
+	new = kzalloc_obj(*head, GFP_KERNEL);
 	if (!new)
 		return -ENOBUFS;

diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c
index 5693b41b093f..83d837c4bced 100644
--- a/net/sched/cls_flow.c
+++ b/net/sched/cls_flow.c
@@ -433,7 +433,7 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
 			return -EOPNOTSUPP;
 	}

-	fnew = kzalloc(sizeof(*fnew), GFP_KERNEL);
+	fnew = kzalloc_obj(*fnew, GFP_KERNEL);
 	if (!fnew)
 		return -ENOBUFS;

@@ -583,7 +583,7 @@ static int flow_init(struct tcf_proto *tp)
 {
 	struct flow_head *head;

-	head = kzalloc(sizeof(*head), GFP_KERNEL);
+	head = kzalloc_obj(*head, GFP_KERNEL);
 	if (head == NULL)
 		return -ENOBUFS;
 	INIT_LIST_HEAD(&head->filters);
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index 7669371c1354..3c930039bacb 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -363,7 +363,7 @@ static int fl_init(struct tcf_proto *tp)
 {
 	struct cls_fl_head *head;

-	head = kzalloc(sizeof(*head), GFP_KERNEL);
+	head = kzalloc_obj(*head, GFP_KERNEL);
 	if (!head)
 		return -ENOBUFS;

@@ -2237,7 +2237,7 @@ static struct fl_flow_mask *fl_create_new_mask(struct cls_fl_head *head,
 	struct fl_flow_mask *newmask;
 	int err;

-	newmask = kzalloc(sizeof(*newmask), GFP_KERNEL);
+	newmask = kzalloc_obj(*newmask, GFP_KERNEL);
 	if (!newmask)
 		return ERR_PTR(-ENOMEM);

@@ -2376,13 +2376,13 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
 		goto errout_fold;
 	}

-	mask = kzalloc(sizeof(struct fl_flow_mask), GFP_KERNEL);
+	mask = kzalloc_obj(struct fl_flow_mask, GFP_KERNEL);
 	if (!mask) {
 		err = -ENOBUFS;
 		goto errout_fold;
 	}

-	tb = kcalloc(TCA_FLOWER_MAX + 1, sizeof(struct nlattr *), GFP_KERNEL);
+	tb = kzalloc_objs(struct nlattr *, TCA_FLOWER_MAX + 1, GFP_KERNEL);
 	if (!tb) {
 		err = -ENOBUFS;
 		goto errout_mask_alloc;
@@ -2398,7 +2398,7 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
 		goto errout_tb;
 	}

-	fnew = kzalloc(sizeof(*fnew), GFP_KERNEL);
+	fnew = kzalloc_obj(*fnew, GFP_KERNEL);
 	if (!fnew) {
 		err = -ENOBUFS;
 		goto errout_tb;
@@ -2815,7 +2815,7 @@ static void *fl_tmplt_create(struct net *net, struct tcf_chain *chain,
 	if (!tca_opts)
 		return ERR_PTR(-EINVAL);

-	tb = kcalloc(TCA_FLOWER_MAX + 1, sizeof(struct nlattr *), GFP_KERNEL);
+	tb = kzalloc_objs(struct nlattr *, TCA_FLOWER_MAX + 1, GFP_KERNEL);
 	if (!tb)
 		return ERR_PTR(-ENOBUFS);
 	err = nla_parse_nested_deprecated(tb, TCA_FLOWER_MAX,
@@ -2823,7 +2823,7 @@ static void *fl_tmplt_create(struct net *net, struct tcf_chain *chain,
 	if (err)
 		goto errout_tb;

-	tmplt = kzalloc(sizeof(*tmplt), GFP_KERNEL);
+	tmplt = kzalloc_obj(*tmplt, GFP_KERNEL);
 	if (!tmplt) {
 		err = -ENOMEM;
 		goto errout_tb;
diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c
index cdddc8695228..8eb3bea06e3b 100644
--- a/net/sched/cls_fw.c
+++ b/net/sched/cls_fw.c
@@ -262,7 +262,7 @@ static int fw_change(struct net *net, struct sk_buff *in_skb,
 		if (f->id != handle && handle)
 			return -EINVAL;

-		fnew = kzalloc(sizeof(struct fw_filter), GFP_KERNEL);
+		fnew = kzalloc_obj(struct fw_filter, GFP_KERNEL);
 		if (!fnew)
 			return -ENOBUFS;

@@ -308,7 +308,7 @@ static int fw_change(struct net *net, struct sk_buff *in_skb,
 		if (tb[TCA_FW_MASK])
 			mask = nla_get_u32(tb[TCA_FW_MASK]);

-		head = kzalloc(sizeof(*head), GFP_KERNEL);
+		head = kzalloc_obj(*head, GFP_KERNEL);
 		if (!head)
 			return -ENOBUFS;
 		head->mask = mask;
@@ -316,7 +316,7 @@ static int fw_change(struct net *net, struct sk_buff *in_skb,
 		rcu_assign_pointer(tp->root, head);
 	}

-	f = kzalloc(sizeof(struct fw_filter), GFP_KERNEL);
+	f = kzalloc_obj(struct fw_filter, GFP_KERNEL);
 	if (f == NULL)
 		return -ENOBUFS;

diff --git a/net/sched/cls_matchall.c b/net/sched/cls_matchall.c
index f03bf5da39ee..e78b6da59782 100644
--- a/net/sched/cls_matchall.c
+++ b/net/sched/cls_matchall.c
@@ -189,7 +189,7 @@ static int mall_change(struct net *net, struct sk_buff *in_skb,
 			return -EINVAL;
 	}

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return -ENOBUFS;

diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
index b9c58c040c30..6e16819ba91f 100644
--- a/net/sched/cls_route.c
+++ b/net/sched/cls_route.c
@@ -244,7 +244,7 @@ static int route4_init(struct tcf_proto *tp)
 {
 	struct route4_head *head;

-	head = kzalloc(sizeof(struct route4_head), GFP_KERNEL);
+	head = kzalloc_obj(struct route4_head, GFP_KERNEL);
 	if (head == NULL)
 		return -ENOBUFS;

@@ -438,7 +438,7 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,
 	h1 = to_hash(nhandle);
 	b = rtnl_dereference(head->table[h1]);
 	if (!b) {
-		b = kzalloc(sizeof(struct route4_bucket), GFP_KERNEL);
+		b = kzalloc_obj(struct route4_bucket, GFP_KERNEL);
 		if (b == NULL)
 			return -ENOBUFS;

@@ -507,7 +507,7 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
 			return -EINVAL;

 	err = -ENOBUFS;
-	f = kzalloc(sizeof(struct route4_filter), GFP_KERNEL);
+	f = kzalloc_obj(struct route4_filter, GFP_KERNEL);
 	if (!f)
 		goto errout;

diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
index 58e849c0acf4..2bdc14c5e533 100644
--- a/net/sched/cls_u32.c
+++ b/net/sched/cls_u32.c
@@ -364,7 +364,7 @@ static int u32_init(struct tcf_proto *tp)
 	void *key = tc_u_common_ptr(tp);
 	struct tc_u_common *tp_c = tc_u_common_find(key);

-	root_ht = kzalloc(struct_size(root_ht, ht, 1), GFP_KERNEL);
+	root_ht = kzalloc_flex(*root_ht, ht, 1, GFP_KERNEL);
 	if (root_ht == NULL)
 		return -ENOBUFS;

@@ -375,7 +375,7 @@ static int u32_init(struct tcf_proto *tp)
 	idr_init(&root_ht->handle_idr);

 	if (tp_c == NULL) {
-		tp_c = kzalloc(sizeof(*tp_c), GFP_KERNEL);
+		tp_c = kzalloc_obj(*tp_c, GFP_KERNEL);
 		if (tp_c == NULL) {
 			kfree(root_ht);
 			return -ENOBUFS;
@@ -825,7 +825,7 @@ static struct tc_u_knode *u32_init_knode(struct net *net, struct tcf_proto *tp,
 	struct tc_u32_sel *s = &n->sel;
 	struct tc_u_knode *new;

-	new = kzalloc(struct_size(new, sel.keys, s->nkeys), GFP_KERNEL);
+	new = kzalloc_flex(*new, sel.keys, s->nkeys, GFP_KERNEL);
 	if (!new)
 		return NULL;

@@ -974,7 +974,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
 			NL_SET_ERR_MSG_MOD(extack, "Divisor can only be used on a hash table");
 			return -EINVAL;
 		}
-		ht = kzalloc(struct_size(ht, ht, divisor + 1), GFP_KERNEL);
+		ht = kzalloc_flex(*ht, ht, divisor + 1, GFP_KERNEL);
 		if (ht == NULL)
 			return -ENOBUFS;
 		if (handle == 0) {
@@ -1104,7 +1104,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
 		goto erridr;
 	}

-	n = kzalloc(struct_size(n, sel.keys, s->nkeys), GFP_KERNEL);
+	n = kzalloc_flex(*n, sel.keys, s->nkeys, GFP_KERNEL);
 	if (n == NULL) {
 		err = -ENOBUFS;
 		goto erridr;
@@ -1417,7 +1417,7 @@ static int u32_dump(struct net *net, struct tcf_proto *tp, void *fh,
 				goto nla_put_failure;
 		}
 #ifdef CONFIG_CLS_U32_PERF
-		gpf = kzalloc(struct_size(gpf, kcnts, n->sel.nkeys), GFP_KERNEL);
+		gpf = kzalloc_flex(*gpf, kcnts, n->sel.nkeys, GFP_KERNEL);
 		if (!gpf)
 			goto nla_put_failure;

@@ -1480,9 +1480,8 @@ static int __init init_u32(void)
 #ifdef CONFIG_NET_CLS_ACT
 	pr_info("    Actions configured\n");
 #endif
-	tc_u_common_hash = kvmalloc_array(U32_HASH_SIZE,
-					  sizeof(struct hlist_head),
-					  GFP_KERNEL);
+	tc_u_common_hash = kvmalloc_objs(struct hlist_head, U32_HASH_SIZE,
+					 GFP_KERNEL);
 	if (!tc_u_common_hash)
 		return -ENOMEM;

diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c
index 3f2e707a11d1..bc47af8a45c6 100644
--- a/net/sched/em_meta.c
+++ b/net/sched/em_meta.c
@@ -927,7 +927,7 @@ static int em_meta_change(struct net *net, void *data, int len,
 	    TCF_META_ID(hdr->right.kind) > TCF_META_ID_MAX)
 		goto errout;

-	meta = kzalloc(sizeof(*meta), GFP_KERNEL);
+	meta = kzalloc_obj(*meta, GFP_KERNEL);
 	if (meta == NULL) {
 		err = -ENOMEM;
 		goto errout;
diff --git a/net/sched/em_text.c b/net/sched/em_text.c
index 692e2be1793e..a69889159537 100644
--- a/net/sched/em_text.c
+++ b/net/sched/em_text.c
@@ -84,7 +84,7 @@ static int em_text_change(struct net *net, void *data, int len,
 		return -EAGAIN;
 	}

-	tm = kmalloc(sizeof(*tm), GFP_KERNEL);
+	tm = kmalloc_obj(*tm, GFP_KERNEL);
 	if (tm == NULL) {
 		textsearch_destroy(ts_conf);
 		return -ENOBUFS;
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 443c116e8663..bcf82bbc60fd 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -437,7 +437,7 @@ struct qdisc_rate_table *qdisc_get_rtab(struct tc_ratespec *r,
 		}
 	}

-	rtab = kmalloc(sizeof(*rtab), GFP_KERNEL);
+	rtab = kmalloc_obj(*rtab, GFP_KERNEL);
 	if (rtab) {
 		rtab->rate = *r;
 		rtab->refcnt = 1;
@@ -530,7 +530,7 @@ static struct qdisc_size_table *qdisc_get_stab(struct nlattr *opt,
 		return ERR_PTR(-EINVAL);
 	}

-	stab = kmalloc(struct_size(stab, data, tsize), GFP_KERNEL);
+	stab = kmalloc_flex(*stab, data, tsize, GFP_KERNEL);
 	if (!stab)
 		return ERR_PTR(-ENOMEM);

@@ -668,7 +668,7 @@ static struct hlist_head *qdisc_class_hash_alloc(unsigned int n)
 	struct hlist_head *h;
 	unsigned int i;

-	h = kvmalloc_array(n, sizeof(struct hlist_head), GFP_KERNEL);
+	h = kvmalloc_objs(struct hlist_head, n, GFP_KERNEL);

 	if (h != NULL) {
 		for (i = 0; i < n; i++)
diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
index d2bbd5654d5b..7c7a068513e7 100644
--- a/net/sched/sch_cake.c
+++ b/net/sched/sch_cake.c
@@ -2849,8 +2849,8 @@ static int cake_init(struct Qdisc *sch, struct nlattr *opt,
 	for (i = 1; i <= CAKE_QUEUES; i++)
 		quantum_div[i] = 65535 / i;

-	qd->tins = kvcalloc(CAKE_MAX_TINS, sizeof(struct cake_tin_data),
-			    GFP_KERNEL);
+	qd->tins = kvzalloc_objs(struct cake_tin_data, CAKE_MAX_TINS,
+				 GFP_KERNEL);
 	if (!qd->tins)
 		return -ENOMEM;

diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
index 59e7bdf5063e..8d2dd1c4f3dc 100644
--- a/net/sched/sch_choke.c
+++ b/net/sched/sch_choke.c
@@ -370,7 +370,7 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt,
 	if (mask != q->tab_mask) {
 		struct sk_buff **ntab;

-		ntab = kvcalloc(mask + 1, sizeof(struct sk_buff *), GFP_KERNEL);
+		ntab = kvzalloc_objs(struct sk_buff *, mask + 1, GFP_KERNEL);
 		if (!ntab)
 			return -ENOMEM;

diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c
index 9b6d79bd8737..80d845dfbe80 100644
--- a/net/sched/sch_drr.c
+++ b/net/sched/sch_drr.c
@@ -105,7 +105,7 @@ static int drr_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
 		return 0;
 	}

-	cl = kzalloc(sizeof(struct drr_class), GFP_KERNEL);
+	cl = kzalloc_obj(struct drr_class, GFP_KERNEL);
 	if (cl == NULL)
 		return -ENOBUFS;

diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c
index dc187c7f06b1..16cd38a179e5 100644
--- a/net/sched/sch_fq_codel.c
+++ b/net/sched/sch_fq_codel.c
@@ -496,9 +496,8 @@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt,
 		goto init_failure;

 	if (!q->flows) {
-		q->flows = kvcalloc(q->flows_cnt,
-				    sizeof(struct fq_codel_flow),
-				    GFP_KERNEL);
+		q->flows = kvzalloc_objs(struct fq_codel_flow, q->flows_cnt,
+					 GFP_KERNEL);
 		if (!q->flows) {
 			err = -ENOMEM;
 			goto init_failure;
diff --git a/net/sched/sch_fq_pie.c b/net/sched/sch_fq_pie.c
index 7b96bc3ff891..8784f89619d0 100644
--- a/net/sched/sch_fq_pie.c
+++ b/net/sched/sch_fq_pie.c
@@ -448,8 +448,7 @@ static int fq_pie_init(struct Qdisc *sch, struct nlattr *opt,
 	if (err)
 		goto init_failure;

-	q->flows = kvcalloc(q->flows_cnt, sizeof(struct fq_pie_flow),
-			    GFP_KERNEL);
+	q->flows = kvzalloc_objs(struct fq_pie_flow, q->flows_cnt, GFP_KERNEL);
 	if (!q->flows) {
 		err = -ENOMEM;
 		goto init_failure;
diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c
index 532fde548b88..ec4c8513e617 100644
--- a/net/sched/sch_gred.c
+++ b/net/sched/sch_gred.c
@@ -359,7 +359,7 @@ static int gred_offload_dump_stats(struct Qdisc *sch)
 	unsigned int i;
 	int ret;

-	hw_stats = kzalloc(sizeof(*hw_stats), GFP_KERNEL);
+	hw_stats = kzalloc_obj(*hw_stats, GFP_KERNEL);
 	if (!hw_stats)
 		return -ENOMEM;

@@ -700,7 +700,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt,
 			prio = ctl->prio;
 	}

-	prealloc = kzalloc(sizeof(*prealloc), GFP_KERNEL);
+	prealloc = kzalloc_obj(*prealloc, GFP_KERNEL);
 	sch_tree_lock(sch);

 	err = gred_change_vq(sch, ctl->DP, ctl, prio, stab, max_P, &prealloc,
@@ -757,7 +757,7 @@ static int gred_init(struct Qdisc *sch, struct nlattr *opt,
 		             * psched_mtu(qdisc_dev(sch));

 	if (qdisc_dev(sch)->netdev_ops->ndo_setup_tc) {
-		table->opt = kzalloc(sizeof(*table->opt), GFP_KERNEL);
+		table->opt = kzalloc_obj(*table->opt, GFP_KERNEL);
 		if (!table->opt)
 			return -ENOMEM;
 	}
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c
index d8fd35da32a7..3f08daae26d8 100644
--- a/net/sched/sch_hfsc.c
+++ b/net/sched/sch_hfsc.c
@@ -1025,7 +1025,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
 	if (rsc == NULL && fsc == NULL)
 		return -EINVAL;

-	cl = kzalloc(sizeof(struct hfsc_class), GFP_KERNEL);
+	cl = kzalloc_obj(struct hfsc_class, GFP_KERNEL);
 	if (cl == NULL)
 		return -ENOBUFS;

diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c
index 2d4855e28a28..a386c40b67da 100644
--- a/net/sched/sch_hhf.c
+++ b/net/sched/sch_hhf.c
@@ -230,7 +230,7 @@ static struct hh_flow_state *alloc_new_hh(struct list_head *head,
 		return NULL;
 	}
 	/* Create new entry. */
-	flow = kzalloc(sizeof(struct hh_flow_state), GFP_ATOMIC);
+	flow = kzalloc_obj(struct hh_flow_state, GFP_ATOMIC);
 	if (!flow)
 		return NULL;

@@ -604,8 +604,8 @@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt,

 	if (!q->hh_flows) {
 		/* Initialize heavy-hitter flow table. */
-		q->hh_flows = kvcalloc(HH_FLOWS_CNT, sizeof(struct list_head),
-				       GFP_KERNEL);
+		q->hh_flows = kvzalloc_objs(struct list_head, HH_FLOWS_CNT,
+					    GFP_KERNEL);
 		if (!q->hh_flows)
 			return -ENOMEM;
 		for (i = 0; i < HH_FLOWS_CNT; i++)
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
index b5e40c51655a..7b34e40d4bd2 100644
--- a/net/sched/sch_htb.c
+++ b/net/sched/sch_htb.c
@@ -1095,9 +1095,9 @@ static int htb_init(struct Qdisc *sch, struct nlattr *opt,
 		}

 		q->num_direct_qdiscs = dev->real_num_tx_queues;
-		q->direct_qdiscs = kcalloc(q->num_direct_qdiscs,
-					   sizeof(*q->direct_qdiscs),
-					   GFP_KERNEL);
+		q->direct_qdiscs = kzalloc_objs(*q->direct_qdiscs,
+						q->num_direct_qdiscs,
+						GFP_KERNEL);
 		if (!q->direct_qdiscs)
 			return -ENOMEM;
 	}
@@ -1845,7 +1845,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
 			goto failure;
 		}
 		err = -ENOBUFS;
-		cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+		cl = kzalloc_obj(*cl, GFP_KERNEL);
 		if (!cl)
 			goto failure;

diff --git a/net/sched/sch_mq.c b/net/sched/sch_mq.c
index bb94cd577943..4dd8379c97b6 100644
--- a/net/sched/sch_mq.c
+++ b/net/sched/sch_mq.c
@@ -82,8 +82,8 @@ int mq_init_common(struct Qdisc *sch, struct nlattr *opt,
 		return -EOPNOTSUPP;

 	/* pre-allocate qdiscs, attachment can't fail */
-	priv->qdiscs = kcalloc(dev->num_tx_queues, sizeof(priv->qdiscs[0]),
-			       GFP_KERNEL);
+	priv->qdiscs = kzalloc_objs(priv->qdiscs[0], dev->num_tx_queues,
+				    GFP_KERNEL);
 	if (!priv->qdiscs)
 		return -ENOMEM;

diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c
index f3e5ef9a9592..ddb18e97bb91 100644
--- a/net/sched/sch_mqprio.c
+++ b/net/sched/sch_mqprio.c
@@ -388,8 +388,8 @@ static int mqprio_init(struct Qdisc *sch, struct nlattr *opt,
 	}

 	/* pre-allocate qdisc, attachment can't fail */
-	priv->qdiscs = kcalloc(dev->num_tx_queues, sizeof(priv->qdiscs[0]),
-			       GFP_KERNEL);
+	priv->qdiscs = kzalloc_objs(priv->qdiscs[0], dev->num_tx_queues,
+				    GFP_KERNEL);
 	if (!priv->qdiscs)
 		return -ENOMEM;

diff --git a/net/sched/sch_multiq.c b/net/sched/sch_multiq.c
index 06e03f5cd7ce..e61e53e3711f 100644
--- a/net/sched/sch_multiq.c
+++ b/net/sched/sch_multiq.c
@@ -249,7 +249,7 @@ static int multiq_init(struct Qdisc *sch, struct nlattr *opt,

 	q->max_bands = qdisc_dev(sch)->num_tx_queues;

-	q->queues = kcalloc(q->max_bands, sizeof(struct Qdisc *), GFP_KERNEL);
+	q->queues = kzalloc_objs(struct Qdisc *, q->max_bands, GFP_KERNEL);
 	if (!q->queues)
 		return -ENOBUFS;
 	for (i = 0; i < q->max_bands; i++)
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index 32a5f3304046..334d2f93ae89 100644
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -814,7 +814,7 @@ static int get_dist_table(struct disttable **tbl, const struct nlattr *attr)
 	if (!n || n > NETEM_DIST_MAX)
 		return -EINVAL;

-	d = kvmalloc(struct_size(d, table, n), GFP_KERNEL);
+	d = kvmalloc_flex(*d, table, n, GFP_KERNEL);
 	if (!d)
 		return -ENOMEM;

diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
index e7778413e72f..6eb71d3f03dd 100644
--- a/net/sched/sch_qfq.c
+++ b/net/sched/sch_qfq.c
@@ -392,7 +392,7 @@ static int qfq_change_agg(struct Qdisc *sch, struct qfq_class *cl, u32 weight,

 	new_agg = qfq_find_agg(q, lmax, weight);
 	if (new_agg == NULL) { /* create new aggregate */
-		new_agg = kzalloc(sizeof(*new_agg), GFP_ATOMIC);
+		new_agg = kzalloc_obj(*new_agg, GFP_ATOMIC);
 		if (new_agg == NULL)
 			return -ENOBUFS;
 		qfq_init_agg(q, new_agg, lmax, weight);
@@ -476,7 +476,7 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
 	}

 	/* create and init new class */
-	cl = kzalloc(sizeof(struct qfq_class), GFP_KERNEL);
+	cl = kzalloc_obj(struct qfq_class, GFP_KERNEL);
 	if (cl == NULL)
 		return -ENOBUFS;

@@ -508,7 +508,7 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
 	new_agg = qfq_find_agg(q, lmax, weight);
 	if (new_agg == NULL) { /* create new aggregate */
 		sch_tree_unlock(sch);
-		new_agg = kzalloc(sizeof(*new_agg), GFP_KERNEL);
+		new_agg = kzalloc_obj(*new_agg, GFP_KERNEL);
 		if (new_agg == NULL) {
 			err = -ENOBUFS;
 			gen_kill_estimator(&cl->rate_est);
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
index 96eb2f122973..31ee70314431 100644
--- a/net/sched/sch_sfq.c
+++ b/net/sched/sch_sfq.c
@@ -668,7 +668,7 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt,
 					ctl_v1->Wlog, ctl_v1->Scell_log, NULL))
 		return -EINVAL;
 	if (ctl_v1 && ctl_v1->qth_min) {
-		p = kmalloc(sizeof(*p), GFP_KERNEL);
+		p = kmalloc_obj(*p, GFP_KERNEL);
 		if (!p)
 			return -ENOMEM;
 	}
diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c
index 300d577b3286..31e59e875932 100644
--- a/net/sched/sch_taprio.c
+++ b/net/sched/sch_taprio.c
@@ -1103,7 +1103,7 @@ static int parse_sched_list(struct taprio_sched *q, struct nlattr *list,
 			continue;
 		}

-		entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+		entry = kzalloc_obj(*entry, GFP_KERNEL);
 		if (!entry) {
 			NL_SET_ERR_MSG(extack, "Not enough memory for entry");
 			return -ENOMEM;
@@ -1376,8 +1376,8 @@ static struct tc_taprio_qopt_offload *taprio_offload_alloc(int num_entries)
 {
 	struct __tc_taprio_qopt_offload *__offload;

-	__offload = kzalloc(struct_size(__offload, offload.entries, num_entries),
-			    GFP_KERNEL);
+	__offload = kzalloc_flex(*__offload, offload.entries, num_entries,
+				 GFP_KERNEL);
 	if (!__offload)
 		return NULL;

@@ -1870,7 +1870,7 @@ static int taprio_change(struct Qdisc *sch, struct nlattr *opt,
 	if (err)
 		return err;

-	new_admin = kzalloc(sizeof(*new_admin), GFP_KERNEL);
+	new_admin = kzalloc_obj(*new_admin, GFP_KERNEL);
 	if (!new_admin) {
 		NL_SET_ERR_MSG(extack, "Not enough memory for a new schedule");
 		return -ENOMEM;
@@ -2091,8 +2091,7 @@ static int taprio_init(struct Qdisc *sch, struct nlattr *opt,
 		return -EOPNOTSUPP;
 	}

-	q->qdiscs = kcalloc(dev->num_tx_queues, sizeof(q->qdiscs[0]),
-			    GFP_KERNEL);
+	q->qdiscs = kzalloc_objs(q->qdiscs[0], dev->num_tx_queues, GFP_KERNEL);
 	if (!q->qdiscs)
 		return -ENOMEM;

diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index 5793d71852b8..62d3cc155809 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -289,7 +289,7 @@ struct sctp_association *sctp_association_new(const struct sctp_endpoint *ep,
 {
 	struct sctp_association *asoc;

-	asoc = kzalloc(sizeof(*asoc), gfp);
+	asoc = kzalloc_obj(*asoc, gfp);
 	if (!asoc)
 		goto fail;

diff --git a/net/sctp/auth.c b/net/sctp/auth.c
index 82aad477590e..be9782760f50 100644
--- a/net/sctp/auth.c
+++ b/net/sctp/auth.c
@@ -82,7 +82,7 @@ struct sctp_shared_key *sctp_auth_shkey_create(__u16 key_id, gfp_t gfp)
 	struct sctp_shared_key *new;

 	/* Allocate the shared key container */
-	new = kzalloc(sizeof(struct sctp_shared_key), gfp);
+	new = kzalloc_obj(struct sctp_shared_key, gfp);
 	if (!new)
 		return NULL;

@@ -931,8 +931,8 @@ int sctp_auth_init(struct sctp_endpoint *ep, gfp_t gfp)
 	if (!ep->auth_hmacs_list) {
 		struct sctp_hmac_algo_param *auth_hmacs;

-		auth_hmacs = kzalloc(struct_size(auth_hmacs, hmac_ids,
-						 SCTP_AUTH_NUM_HMACS), gfp);
+		auth_hmacs = kzalloc_flex(*auth_hmacs, hmac_ids,
+					  SCTP_AUTH_NUM_HMACS, gfp);
 		if (!auth_hmacs)
 			goto nomem;
 		/* Initialize the HMACS parameter.
diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c
index 6b95d3ba8fe1..75e3e61d494e 100644
--- a/net/sctp/bind_addr.c
+++ b/net/sctp/bind_addr.c
@@ -147,7 +147,7 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new,
 	struct sctp_sockaddr_entry *addr;

 	/* Add the address to the bind address list.  */
-	addr = kzalloc(sizeof(*addr), gfp);
+	addr = kzalloc_obj(*addr, gfp);
 	if (!addr)
 		return -ENOMEM;

diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c
index c655b571ca01..5b889e89e9f2 100644
--- a/net/sctp/chunk.c
+++ b/net/sctp/chunk.c
@@ -47,7 +47,7 @@ static void sctp_datamsg_init(struct sctp_datamsg *msg)
 static struct sctp_datamsg *sctp_datamsg_new(gfp_t gfp)
 {
 	struct sctp_datamsg *msg;
-	msg = kmalloc(sizeof(struct sctp_datamsg), gfp);
+	msg = kmalloc_obj(struct sctp_datamsg, gfp);
 	if (msg) {
 		sctp_datamsg_init(msg);
 		SCTP_DBG_OBJCNT_INC(datamsg);
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index 31e989dfe846..8d342b514142 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -135,7 +135,7 @@ struct sctp_endpoint *sctp_endpoint_new(struct sock *sk, gfp_t gfp)
 	struct sctp_endpoint *ep;

 	/* Build a local endpoint. */
-	ep = kzalloc(sizeof(*ep), gfp);
+	ep = kzalloc_obj(*ep, gfp);
 	if (!ep)
 		goto fail;

diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
index 531cb0690007..53a5c027f8e3 100644
--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -83,7 +83,7 @@ static int sctp_inet6addr_event(struct notifier_block *this, unsigned long ev,

 	switch (ev) {
 	case NETDEV_UP:
-		addr = kzalloc(sizeof(*addr), GFP_ATOMIC);
+		addr = kzalloc_obj(*addr, GFP_ATOMIC);
 		if (addr) {
 			addr->a.v6.sin6_family = AF_INET6;
 			addr->a.v6.sin6_addr = ifa->addr;
@@ -471,7 +471,7 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
 	read_lock_bh(&in6_dev->lock);
 	list_for_each_entry(ifp, &in6_dev->addr_list, if_list) {
 		/* Add the address to the local list.  */
-		addr = kzalloc(sizeof(*addr), GFP_ATOMIC);
+		addr = kzalloc_obj(*addr, GFP_ATOMIC);
 		if (addr) {
 			addr->a.v6.sin6_family = AF_INET6;
 			addr->a.v6.sin6_addr = ifp->addr;
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
index 2c3398f75d76..0723cbdbc366 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -86,7 +86,7 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist,

 	in_dev_for_each_ifa_rcu(ifa, in_dev) {
 		/* Add the address to the local list.  */
-		addr = kzalloc(sizeof(*addr), GFP_ATOMIC);
+		addr = kzalloc_obj(*addr, GFP_ATOMIC);
 		if (addr) {
 			addr->a.v4.sin_family = AF_INET;
 			addr->a.v4.sin_addr.s_addr = ifa->ifa_local;
@@ -774,7 +774,7 @@ static int sctp_inetaddr_event(struct notifier_block *this, unsigned long ev,

 	switch (ev) {
 	case NETDEV_UP:
-		addr = kzalloc(sizeof(*addr), GFP_ATOMIC);
+		addr = kzalloc_obj(*addr, GFP_ATOMIC);
 		if (addr) {
 			addr->a.v4.sin_family = AF_INET;
 			addr->a.v4.sin_addr.s_addr = ifa->ifa_local;
@@ -1538,7 +1538,7 @@ static __init int sctp_init(void)
 	/* Allocate and initialize the endpoint hash table.  */
 	sctp_ep_hashsize = 64;
 	sctp_ep_hashtable =
-		kmalloc_array(64, sizeof(struct sctp_hashbucket), GFP_KERNEL);
+		kmalloc_objs(struct sctp_hashbucket, 64, GFP_KERNEL);
 	if (!sctp_ep_hashtable) {
 		pr_err("Failed endpoint_hash alloc\n");
 		status = -ENOMEM;
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 2493a5b1fa3c..05fb00c9c335 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -828,7 +828,7 @@ static int sctp_send_asconf_del_ip(struct sock		*sk,
 			if (asoc->asconf_addr_del_pending)
 				continue;
 			asoc->asconf_addr_del_pending =
-			    kzalloc(sizeof(union sctp_addr), GFP_ATOMIC);
+			    kzalloc_obj(union sctp_addr, GFP_ATOMIC);
 			if (asoc->asconf_addr_del_pending == NULL) {
 				retval = -ENOMEM;
 				goto out;
diff --git a/net/sctp/stream.c b/net/sctp/stream.c
index 0615e4426341..03636bed60ff 100644
--- a/net/sctp/stream.c
+++ b/net/sctp/stream.c
@@ -166,7 +166,7 @@ int sctp_stream_init_ext(struct sctp_stream *stream, __u16 sid)
 	struct sctp_stream_out_ext *soute;
 	int ret;

-	soute = kzalloc(sizeof(*soute), GFP_KERNEL);
+	soute = kzalloc_obj(*soute, GFP_KERNEL);
 	if (!soute)
 		return -ENOMEM;
 	SCTP_SO(stream, sid)->ext = soute;
diff --git a/net/sctp/stream_sched_prio.c b/net/sctp/stream_sched_prio.c
index fb6c55e5615d..bd4f98db2822 100644
--- a/net/sctp/stream_sched_prio.c
+++ b/net/sctp/stream_sched_prio.c
@@ -42,7 +42,7 @@ static struct sctp_stream_priorities *sctp_sched_prio_new_head(
 {
 	struct sctp_stream_priorities *p;

-	p = kmalloc(sizeof(*p), gfp);
+	p = kmalloc_obj(*p, gfp);
 	if (!p)
 		return NULL;

diff --git a/net/sctp/transport.c b/net/sctp/transport.c
index 0c56d9673cc1..6ea55b9fbde4 100644
--- a/net/sctp/transport.c
+++ b/net/sctp/transport.c
@@ -92,7 +92,7 @@ struct sctp_transport *sctp_transport_new(struct net *net,
 {
 	struct sctp_transport *transport;

-	transport = kzalloc(sizeof(*transport), gfp);
+	transport = kzalloc_obj(*transport, gfp);
 	if (!transport)
 		return NULL;

diff --git a/net/shaper/shaper.c b/net/shaper/shaper.c
index 7101a48bce54..ca7a6167702d 100644
--- a/net/shaper/shaper.c
+++ b/net/shaper/shaper.c
@@ -272,7 +272,7 @@ net_shaper_hierarchy_setup(struct net_shaper_binding *binding)
 	if (hierarchy)
 		return hierarchy;

-	hierarchy = kmalloc(sizeof(*hierarchy), GFP_KERNEL);
+	hierarchy = kmalloc_obj(*hierarchy, GFP_KERNEL);
 	if (!hierarchy)
 		return NULL;

@@ -329,7 +329,7 @@ static int net_shaper_pre_insert(struct net_shaper_binding *binding,
 		id_allocated = true;
 	}

-	cur = kzalloc(sizeof(*cur), GFP_KERNEL);
+	cur = kzalloc_obj(*cur, GFP_KERNEL);
 	if (!cur) {
 		ret = -ENOMEM;
 		goto free_id;
@@ -1033,8 +1033,7 @@ static int net_shaper_pre_del_node(struct net_shaper_binding *binding,
 			return -EINVAL;
 	}

-	leaves = kcalloc(shaper->leaves, sizeof(struct net_shaper),
-			 GFP_KERNEL);
+	leaves = kzalloc_objs(struct net_shaper, shaper->leaves, GFP_KERNEL);
 	if (!leaves)
 		return -ENOMEM;

diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
index d8201eb3ac5f..242101f269c3 100644
--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -1195,7 +1195,7 @@ void smc_fill_gid_list(struct smc_link_group *lgr,
 	memset(gidlist, 0, sizeof(*gidlist));
 	memcpy(gidlist->list[gidlist->len++], known_gid, SMC_GID_SIZE);

-	alt_ini = kzalloc(sizeof(*alt_ini), GFP_KERNEL);
+	alt_ini = kzalloc_obj(*alt_ini, GFP_KERNEL);
 	if (!alt_ini)
 		goto out;

@@ -1522,7 +1522,7 @@ static int __smc_connect(struct smc_sock *smc)
 		return smc_connect_decline_fallback(smc, SMC_CLC_DECL_IPSEC,
 						    version);

-	ini = kzalloc(sizeof(*ini), GFP_KERNEL);
+	ini = kzalloc_obj(*ini, GFP_KERNEL);
 	if (!ini)
 		return smc_connect_decline_fallback(smc, SMC_CLC_DECL_MEM,
 						    version);
@@ -2470,7 +2470,7 @@ static void smc_listen_work(struct work_struct *work)
 	/* do inband token exchange -
 	 * wait for and receive SMC Proposal CLC message
 	 */
-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf) {
 		rc = SMC_CLC_DECL_MEM;
 		goto out_decl;
@@ -2490,7 +2490,7 @@ static void smc_listen_work(struct work_struct *work)
 		goto out_decl;
 	}

-	ini = kzalloc(sizeof(*ini), GFP_KERNEL);
+	ini = kzalloc_obj(*ini, GFP_KERNEL);
 	if (!ini) {
 		rc = SMC_CLC_DECL_MEM;
 		goto out_decl;
diff --git a/net/smc/smc_clc.c b/net/smc/smc_clc.c
index 87c87edadde7..992fd2b9f05f 100644
--- a/net/smc/smc_clc.c
+++ b/net/smc/smc_clc.c
@@ -88,7 +88,7 @@ static int smc_clc_ueid_add(char *ueid)
 		return -EINVAL;

 	/* add a new ueid entry to the ueid table if there isn't one */
-	new_ueid = kzalloc(sizeof(*new_ueid), GFP_KERNEL);
+	new_ueid = kzalloc_obj(*new_ueid, GFP_KERNEL);
 	if (!new_ueid)
 		return -ENOMEM;
 	memcpy(new_ueid->eid, ueid, SMC_MAX_EID_LEN);
@@ -861,7 +861,7 @@ int smc_clc_send_proposal(struct smc_sock *smc, struct smc_init_info *ini)
 	struct kvec vec[8];
 	struct msghdr msg;

-	pclc = kzalloc(sizeof(*pclc), GFP_KERNEL);
+	pclc = kzalloc_obj(*pclc, GFP_KERNEL);
 	if (!pclc)
 		return -ENOMEM;

diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c
index e4eabc83719e..50d01a573042 100644
--- a/net/smc/smc_core.c
+++ b/net/smc/smc_core.c
@@ -905,7 +905,7 @@ static int smc_lgr_create(struct smc_sock *smc, struct smc_init_info *ini)
 		}
 	}

-	lgr = kzalloc(sizeof(*lgr), GFP_KERNEL);
+	lgr = kzalloc_obj(*lgr, GFP_KERNEL);
 	if (!lgr) {
 		rc = SMC_CLC_DECL_MEM;
 		goto ism_put_vlan;
@@ -2320,7 +2320,7 @@ static struct smc_buf_desc *smcr_new_buf_create(struct smc_link_group *lgr,
 	struct smc_buf_desc *buf_desc;

 	/* try to alloc a new buffer */
-	buf_desc = kzalloc(sizeof(*buf_desc), GFP_KERNEL);
+	buf_desc = kzalloc_obj(*buf_desc, GFP_KERNEL);
 	if (!buf_desc)
 		return ERR_PTR(-ENOMEM);

@@ -2394,7 +2394,7 @@ static struct smc_buf_desc *smcd_new_buf_create(struct smc_link_group *lgr,
 	int rc;

 	/* try to alloc a new DMB */
-	buf_desc = kzalloc(sizeof(*buf_desc), GFP_KERNEL);
+	buf_desc = kzalloc_obj(*buf_desc, GFP_KERNEL);
 	if (!buf_desc)
 		return ERR_PTR(-ENOMEM);
 	if (is_dmb) {
@@ -2578,7 +2578,7 @@ int smcd_buf_attach(struct smc_sock *smc)
 	struct smc_buf_desc *buf_desc;
 	int rc;

-	buf_desc = kzalloc(sizeof(*buf_desc), GFP_KERNEL);
+	buf_desc = kzalloc_obj(*buf_desc, GFP_KERNEL);
 	if (!buf_desc)
 		return -ENOMEM;

diff --git a/net/smc/smc_ib.c b/net/smc/smc_ib.c
index 1154907c5c05..5a1384126f91 100644
--- a/net/smc/smc_ib.c
+++ b/net/smc/smc_ib.c
@@ -944,7 +944,7 @@ static int smc_ib_add_dev(struct ib_device *ibdev)
 	if (ibdev->node_type != RDMA_NODE_IB_CA)
 		return -EOPNOTSUPP;

-	smcibdev = kzalloc(sizeof(*smcibdev), GFP_KERNEL);
+	smcibdev = kzalloc_obj(*smcibdev, GFP_KERNEL);
 	if (!smcibdev)
 		return -ENOMEM;

diff --git a/net/smc/smc_ism.c b/net/smc/smc_ism.c
index 7b228ca2f96a..4ee7362e91c5 100644
--- a/net/smc/smc_ism.c
+++ b/net/smc/smc_ism.c
@@ -142,7 +142,7 @@ int smc_ism_get_vlan(struct smcd_dev *smcd, unsigned short vlanid)
 		return -EOPNOTSUPP;

 	/* create new vlan entry, in case we need it */
-	new_vlan = kzalloc(sizeof(*new_vlan), GFP_KERNEL);
+	new_vlan = kzalloc_obj(*new_vlan, GFP_KERNEL);
 	if (!new_vlan)
 		return -ENOMEM;
 	new_vlan->vlanid = vlanid;
@@ -467,11 +467,10 @@ static struct smcd_dev *smcd_alloc_dev(const char *name, int max_dmbs)
 {
 	struct smcd_dev *smcd;

-	smcd = kzalloc(sizeof(*smcd), GFP_KERNEL);
+	smcd = kzalloc_obj(*smcd, GFP_KERNEL);
 	if (!smcd)
 		return NULL;
-	smcd->conn = kcalloc(max_dmbs, sizeof(struct smc_connection *),
-			     GFP_KERNEL);
+	smcd->conn = kzalloc_objs(struct smc_connection *, max_dmbs, GFP_KERNEL);
 	if (!smcd->conn)
 		goto free_smcd;

@@ -582,7 +581,7 @@ static void smcd_handle_event(struct dibs_dev *dibs,
 	if (smcd->going_away)
 		return;
 	/* copy event to event work queue, and let it be handled there */
-	wrk = kmalloc(sizeof(*wrk), GFP_ATOMIC);
+	wrk = kmalloc_obj(*wrk, GFP_ATOMIC);
 	if (!wrk)
 		return;
 	INIT_WORK(&wrk->work, smc_ism_event_work);
diff --git a/net/smc/smc_llc.c b/net/smc/smc_llc.c
index f5d5eb617526..f82d5fc7f068 100644
--- a/net/smc/smc_llc.c
+++ b/net/smc/smc_llc.c
@@ -1040,7 +1040,7 @@ int smc_llc_cli_add_link(struct smc_link *link, struct smc_llc_qentry *qentry)
 	if (!llc->qp_mtu)
 		goto out_reject;

-	ini = kzalloc(sizeof(*ini), GFP_KERNEL);
+	ini = kzalloc_obj(*ini, GFP_KERNEL);
 	if (!ini) {
 		rc = -ENOMEM;
 		goto out_reject;
@@ -1180,7 +1180,7 @@ static void smc_llc_cli_add_link_invite(struct smc_link *link,
 	if (lgr->type == SMC_LGR_SINGLE && lgr->max_links <= 1)
 		goto out;

-	ini = kzalloc(sizeof(*ini), GFP_KERNEL);
+	ini = kzalloc_obj(*ini, GFP_KERNEL);
 	if (!ini)
 		goto out;

@@ -1419,7 +1419,7 @@ int smc_llc_srv_add_link(struct smc_link *link,
 	    req_qentry->msg.raw.hdr.common.llc_type == SMC_LLC_REQ_ADD_LINK)
 		send_req_add_link_resp = true;

-	ini = kzalloc(sizeof(*ini), GFP_KERNEL);
+	ini = kzalloc_obj(*ini, GFP_KERNEL);
 	if (!ini) {
 		rc = -ENOMEM;
 		goto out;
@@ -2069,7 +2069,7 @@ static void smc_llc_enqueue(struct smc_link *link, union smc_llc_msg *llc)
 	struct smc_llc_qentry *qentry;
 	unsigned long flags;

-	qentry = kmalloc(sizeof(*qentry), GFP_ATOMIC);
+	qentry = kmalloc_obj(*qentry, GFP_ATOMIC);
 	if (!qentry)
 		return;
 	qentry->link = link;
diff --git a/net/smc/smc_pnet.c b/net/smc/smc_pnet.c
index a3a1e1fde8eb..239da54ba01c 100644
--- a/net/smc/smc_pnet.c
+++ b/net/smc/smc_pnet.c
@@ -368,7 +368,7 @@ static int smc_pnet_add_eth(struct smc_pnettable *pnettable, struct net *net,

 	/* add a new netdev entry to the pnet table if there isn't one */
 	rc = -ENOMEM;
-	new_pe = kzalloc(sizeof(*new_pe), GFP_KERNEL);
+	new_pe = kzalloc_obj(*new_pe, GFP_KERNEL);
 	if (!new_pe)
 		goto out_put;
 	new_pe->type = SMC_PNET_ETH;
@@ -445,7 +445,7 @@ static int smc_pnet_add_ib(struct smc_pnettable *pnettable, char *ib_name,
 		return -EEXIST;

 	/* add a new ib entry to the pnet table if there isn't one */
-	new_pe = kzalloc(sizeof(*new_pe), GFP_KERNEL);
+	new_pe = kzalloc_obj(*new_pe, GFP_KERNEL);
 	if (!new_pe)
 		return -ENOMEM;
 	new_pe->type = SMC_PNET_IB;
@@ -747,7 +747,7 @@ static int smc_pnet_add_pnetid(struct net *net, u8 *pnetid)
 	struct smc_net *sn = net_generic(net, smc_net_id);
 	struct smc_pnetids_ndev_entry *pe, *pi;

-	pe = kzalloc(sizeof(*pe), GFP_KERNEL);
+	pe = kzalloc_obj(*pe, GFP_KERNEL);
 	if (!pe)
 		return -ENOMEM;

diff --git a/net/smc/smc_rx.c b/net/smc/smc_rx.c
index e7f1134453ef..bde9bc1ed4c0 100644
--- a/net/smc/smc_rx.c
+++ b/net/smc/smc_rx.c
@@ -161,17 +161,17 @@ static int smc_rx_splice(struct pipe_inode_info *pipe, char *src, size_t len,
 	nr_pages = !lgr->is_smcd && smc->conn.rmb_desc->is_vm ?
 		   PAGE_ALIGN(len + offset) / PAGE_SIZE : 1;

-	pages = kcalloc(nr_pages, sizeof(*pages), GFP_KERNEL);
+	pages = kzalloc_objs(*pages, nr_pages, GFP_KERNEL);
 	if (!pages)
 		goto out;
-	partial = kcalloc(nr_pages, sizeof(*partial), GFP_KERNEL);
+	partial = kzalloc_objs(*partial, nr_pages, GFP_KERNEL);
 	if (!partial)
 		goto out_page;
-	priv = kcalloc(nr_pages, sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_objs(*priv, nr_pages, GFP_KERNEL);
 	if (!priv)
 		goto out_part;
 	for (i = 0; i < nr_pages; i++) {
-		priv[i] = kzalloc(sizeof(**priv), GFP_KERNEL);
+		priv[i] = kzalloc_obj(**priv, GFP_KERNEL);
 		if (!priv[i])
 			goto out_priv;
 	}
diff --git a/net/smc/smc_stats.c b/net/smc/smc_stats.c
index e71b17d1e21c..aeb462dbbb2c 100644
--- a/net/smc/smc_stats.c
+++ b/net/smc/smc_stats.c
@@ -20,7 +20,7 @@

 int smc_stats_init(struct net *net)
 {
-	net->smc.fback_rsn = kzalloc(sizeof(*net->smc.fback_rsn), GFP_KERNEL);
+	net->smc.fback_rsn = kzalloc_obj(*net->smc.fback_rsn, GFP_KERNEL);
 	if (!net->smc.fback_rsn)
 		goto err_fback;
 	net->smc.smc_stats = alloc_percpu(struct smc_stats);
@@ -285,7 +285,7 @@ int smc_nl_get_stats(struct sk_buff *skb,
 	attrs = nla_nest_start(skb, SMC_GEN_STATS);
 	if (!attrs)
 		goto errnest;
-	stats = kzalloc(sizeof(*stats), GFP_KERNEL);
+	stats = kzalloc_obj(*stats, GFP_KERNEL);
 	if (!stats)
 		goto erralloc;
 	size = sizeof(*stats) / sizeof(u64);
diff --git a/net/smc/smc_wr.c b/net/smc/smc_wr.c
index 5feafa98ab1a..bad014f353b3 100644
--- a/net/smc/smc_wr.c
+++ b/net/smc/smc_wr.c
@@ -749,27 +749,24 @@ int smc_wr_alloc_link_mem(struct smc_link *link)
 				   GFP_KERNEL);
 	if (!link->wr_rx_bufs)
 		goto no_mem_wr_tx_bufs;
-	link->wr_tx_ibs = kcalloc(link->max_send_wr,
-				  sizeof(link->wr_tx_ibs[0]), GFP_KERNEL);
+	link->wr_tx_ibs = kzalloc_objs(link->wr_tx_ibs[0], link->max_send_wr,
+				       GFP_KERNEL);
 	if (!link->wr_tx_ibs)
 		goto no_mem_wr_rx_bufs;
-	link->wr_rx_ibs = kcalloc(link->max_recv_wr,
-				  sizeof(link->wr_rx_ibs[0]),
-				  GFP_KERNEL);
+	link->wr_rx_ibs = kzalloc_objs(link->wr_rx_ibs[0], link->max_recv_wr,
+				       GFP_KERNEL);
 	if (!link->wr_rx_ibs)
 		goto no_mem_wr_tx_ibs;
-	link->wr_tx_rdmas = kcalloc(link->max_send_wr,
-				    sizeof(link->wr_tx_rdmas[0]),
-				    GFP_KERNEL);
+	link->wr_tx_rdmas = kzalloc_objs(link->wr_tx_rdmas[0],
+					 link->max_send_wr, GFP_KERNEL);
 	if (!link->wr_tx_rdmas)
 		goto no_mem_wr_rx_ibs;
-	link->wr_tx_rdma_sges = kcalloc(link->max_send_wr,
-					sizeof(link->wr_tx_rdma_sges[0]),
-					GFP_KERNEL);
+	link->wr_tx_rdma_sges = kzalloc_objs(link->wr_tx_rdma_sges[0],
+					     link->max_send_wr, GFP_KERNEL);
 	if (!link->wr_tx_rdma_sges)
 		goto no_mem_wr_tx_rdmas;
-	link->wr_tx_sges = kcalloc(link->max_send_wr, sizeof(link->wr_tx_sges[0]),
-				   GFP_KERNEL);
+	link->wr_tx_sges = kzalloc_objs(link->wr_tx_sges[0], link->max_send_wr,
+					GFP_KERNEL);
 	if (!link->wr_tx_sges)
 		goto no_mem_wr_tx_rdma_sges;
 	link->wr_rx_sges = kcalloc(link->max_recv_wr,
@@ -780,28 +777,25 @@ int smc_wr_alloc_link_mem(struct smc_link *link)
 	link->wr_tx_mask = bitmap_zalloc(link->max_send_wr, GFP_KERNEL);
 	if (!link->wr_tx_mask)
 		goto no_mem_wr_rx_sges;
-	link->wr_tx_pends = kcalloc(link->max_send_wr,
-				    sizeof(link->wr_tx_pends[0]),
-				    GFP_KERNEL);
+	link->wr_tx_pends = kzalloc_objs(link->wr_tx_pends[0],
+					 link->max_send_wr, GFP_KERNEL);
 	if (!link->wr_tx_pends)
 		goto no_mem_wr_tx_mask;
-	link->wr_tx_compl = kcalloc(link->max_send_wr,
-				    sizeof(link->wr_tx_compl[0]),
-				    GFP_KERNEL);
+	link->wr_tx_compl = kzalloc_objs(link->wr_tx_compl[0],
+					 link->max_send_wr, GFP_KERNEL);
 	if (!link->wr_tx_compl)
 		goto no_mem_wr_tx_pends;

 	if (link->lgr->smc_version == SMC_V2) {
-		link->wr_tx_v2_ib = kzalloc(sizeof(*link->wr_tx_v2_ib),
-					    GFP_KERNEL);
+		link->wr_tx_v2_ib = kzalloc_obj(*link->wr_tx_v2_ib, GFP_KERNEL);
 		if (!link->wr_tx_v2_ib)
 			goto no_mem_tx_compl;
-		link->wr_tx_v2_sge = kzalloc(sizeof(*link->wr_tx_v2_sge),
-					     GFP_KERNEL);
+		link->wr_tx_v2_sge = kzalloc_obj(*link->wr_tx_v2_sge,
+						 GFP_KERNEL);
 		if (!link->wr_tx_v2_sge)
 			goto no_mem_v2_ib;
-		link->wr_tx_v2_pend = kzalloc(sizeof(*link->wr_tx_v2_pend),
-					      GFP_KERNEL);
+		link->wr_tx_v2_pend = kzalloc_obj(*link->wr_tx_v2_pend,
+						  GFP_KERNEL);
 		if (!link->wr_tx_v2_pend)
 			goto no_mem_v2_sge;
 	}
diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c
index 5a827afd8e3b..fb33a4d0cdc7 100644
--- a/net/sunrpc/auth.c
+++ b/net/sunrpc/auth.c
@@ -290,12 +290,12 @@ rpcauth_init_credcache(struct rpc_auth *auth)
 	struct rpc_cred_cache *new;
 	unsigned int hashsize;

-	new = kmalloc(sizeof(*new), GFP_KERNEL);
+	new = kmalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		goto out_nocache;
 	new->hashbits = auth_hashbits;
 	hashsize = 1U << new->hashbits;
-	new->hashtable = kcalloc(hashsize, sizeof(new->hashtable[0]), GFP_KERNEL);
+	new->hashtable = kzalloc_objs(new->hashtable[0], hashsize, GFP_KERNEL);
 	if (!new->hashtable)
 		goto out_nohashtbl;
 	spin_lock_init(&new->lock);
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
index bb3c3db2713b..f8a0d6386635 100644
--- a/net/sunrpc/auth_gss/auth_gss.c
+++ b/net/sunrpc/auth_gss/auth_gss.c
@@ -164,7 +164,7 @@ gss_alloc_context(void)
 {
 	struct gss_cl_ctx *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (ctx != NULL) {
 		ctx->gc_proc = RPC_GSS_PROC_DATA;
 		ctx->gc_seq = 1;	/* NetApp 6.4R1 doesn't accept seq. no. 0 */
@@ -529,7 +529,7 @@ gss_alloc_msg(struct gss_auth *gss_auth,
 	int vers;
 	int err = -ENOMEM;

-	gss_msg = kzalloc(sizeof(*gss_msg), GFP_KERNEL);
+	gss_msg = kzalloc_obj(*gss_msg, GFP_KERNEL);
 	if (gss_msg == NULL)
 		goto err;
 	vers = get_pipe_version(gss_auth->net);
@@ -914,7 +914,7 @@ static struct gss_pipe *gss_pipe_alloc(struct rpc_clnt *clnt,
 	struct gss_pipe *p;
 	int err = -ENOMEM;

-	p = kmalloc(sizeof(*p), GFP_KERNEL);
+	p = kmalloc_obj(*p, GFP_KERNEL);
 	if (p == NULL)
 		goto err;
 	p->pipe = rpc_mkpipe_data(upcall_ops, RPC_PIPE_WAIT_FOR_OPEN);
@@ -1029,7 +1029,7 @@ gss_create_new(const struct rpc_auth_create_args *args, struct rpc_clnt *clnt)

 	if (!try_module_get(THIS_MODULE))
 		return ERR_PTR(err);
-	if (!(gss_auth = kmalloc(sizeof(*gss_auth), GFP_KERNEL)))
+	if (!(gss_auth = kmalloc_obj(*gss_auth, GFP_KERNEL)))
 		goto out_dec;
 	INIT_HLIST_NODE(&gss_auth->hash);
 	gss_auth->target_name = NULL;
@@ -1246,7 +1246,7 @@ gss_dup_cred(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
 	struct gss_cred *new;

 	/* Make a copy of the cred so that we can reference count it */
-	new = kzalloc(sizeof(*gss_cred), GFP_KERNEL);
+	new = kzalloc_obj(*gss_cred, GFP_KERNEL);
 	if (new) {
 		struct auth_cred acred = {
 			.cred = gss_cred->gc_base.cr_cred,
@@ -1380,7 +1380,7 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags, gfp_t
 	struct gss_cred	*cred = NULL;
 	int err = -ENOMEM;

-	if (!(cred = kzalloc(sizeof(*cred), gfp)))
+	if (!(cred = kzalloc_obj(*cred, gfp)))
 		goto out_err;

 	rpcauth_init_cred(&cred->gc_base, acred, auth, &gss_credops);
@@ -1817,9 +1817,8 @@ alloc_enc_pages(struct rpc_rqst *rqstp)
 	last = (snd_buf->page_base + snd_buf->page_len - 1) >> PAGE_SHIFT;
 	rqstp->rq_enc_pages_num = last - first + 1 + 1;
 	rqstp->rq_enc_pages
-		= kmalloc_array(rqstp->rq_enc_pages_num,
-				sizeof(struct page *),
-				GFP_KERNEL);
+		= kmalloc_objs(struct page *, rqstp->rq_enc_pages_num,
+			       GFP_KERNEL);
 	if (!rqstp->rq_enc_pages)
 		goto out;
 	for (i=0; i < rqstp->rq_enc_pages_num; i++) {
diff --git a/net/sunrpc/auth_gss/gss_krb5_mech.c b/net/sunrpc/auth_gss/gss_krb5_mech.c
index 3366505bc669..6db64a9111a9 100644
--- a/net/sunrpc/auth_gss/gss_krb5_mech.c
+++ b/net/sunrpc/auth_gss/gss_krb5_mech.c
@@ -473,7 +473,7 @@ gss_krb5_import_sec_context(const void *p, size_t len, struct gss_ctx *ctx_id,
 	struct  krb5_ctx *ctx;
 	int ret;

-	ctx = kzalloc(sizeof(*ctx), gfp_mask);
+	ctx = kzalloc_obj(*ctx, gfp_mask);
 	if (ctx == NULL)
 		return -ENOMEM;

diff --git a/net/sunrpc/auth_gss/gss_mech_switch.c b/net/sunrpc/auth_gss/gss_mech_switch.c
index c84d0cf61980..78eab245f94a 100644
--- a/net/sunrpc/auth_gss/gss_mech_switch.c
+++ b/net/sunrpc/auth_gss/gss_mech_switch.c
@@ -355,7 +355,7 @@ gss_import_sec_context(const void *input_token, size_t bufsize,
 		       time64_t			*endtime,
 		       gfp_t gfp_mask)
 {
-	if (!(*ctx_id = kzalloc(sizeof(**ctx_id), gfp_mask)))
+	if (!(*ctx_id = kzalloc_obj(**ctx_id, gfp_mask)))
 		return -ENOMEM;
 	(*ctx_id)->mech_type = gss_mech_get(mech);

diff --git a/net/sunrpc/auth_gss/gss_rpc_upcall.c b/net/sunrpc/auth_gss/gss_rpc_upcall.c
index f549e4c05def..e02e6d4a3185 100644
--- a/net/sunrpc/auth_gss/gss_rpc_upcall.c
+++ b/net/sunrpc/auth_gss/gss_rpc_upcall.c
@@ -214,7 +214,7 @@ static int gssp_alloc_receive_pages(struct gssx_arg_accept_sec_context *arg)
 	unsigned int i;

 	arg->npages = DIV_ROUND_UP(NGROUPS_MAX * 4, PAGE_SIZE);
-	arg->pages = kcalloc(arg->npages, sizeof(struct page *), GFP_KERNEL);
+	arg->pages = kzalloc_objs(struct page *, arg->npages, GFP_KERNEL);
 	if (!arg->pages)
 		return -ENOMEM;
 	for (i = 0; i < arg->npages; i++) {
diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.c b/net/sunrpc/auth_gss/gss_rpc_xdr.c
index f320c0a8e604..e1e01965ef58 100644
--- a/net/sunrpc/auth_gss/gss_rpc_xdr.c
+++ b/net/sunrpc/auth_gss/gss_rpc_xdr.c
@@ -244,11 +244,11 @@ static int gssx_dec_option_array(struct xdr_stream *xdr,
 	/* we recognize only 1 currently: CREDS_VALUE */
 	oa->count = 1;

-	oa->data = kmalloc(sizeof(struct gssx_option), GFP_KERNEL);
+	oa->data = kmalloc_obj(struct gssx_option, GFP_KERNEL);
 	if (!oa->data)
 		return -ENOMEM;

-	creds = kzalloc(sizeof(struct svc_cred), GFP_KERNEL);
+	creds = kzalloc_obj(struct svc_cred, GFP_KERNEL);
 	if (!creds) {
 		err = -ENOMEM;
 		goto free_oa;
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
index e2f0df8cdaa6..411297c9527d 100644
--- a/net/sunrpc/auth_gss/svcauth_gss.c
+++ b/net/sunrpc/auth_gss/svcauth_gss.c
@@ -197,7 +197,7 @@ static void update_rsi(struct cache_head *cnew, struct cache_head *citem)

 static struct cache_head *rsi_alloc(void)
 {
-	struct rsi *rsii = kmalloc(sizeof(*rsii), GFP_KERNEL);
+	struct rsi *rsii = kmalloc_obj(*rsii, GFP_KERNEL);
 	if (rsii)
 		return &rsii->h;
 	else
@@ -449,7 +449,7 @@ update_rsc(struct cache_head *cnew, struct cache_head *ctmp)
 static struct cache_head *
 rsc_alloc(void)
 {
-	struct rsc *rsci = kmalloc(sizeof(*rsci), GFP_KERNEL);
+	struct rsc *rsci = kmalloc_obj(*rsci, GFP_KERNEL);
 	if (rsci)
 		return &rsci->h;
 	else
@@ -814,7 +814,7 @@ svcauth_gss_register_pseudoflavor(u32 pseudoflavor, char * name)
 	struct auth_domain	*test;
 	int			stat = -ENOMEM;

-	new = kmalloc(sizeof(*new), GFP_KERNEL);
+	new = kmalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		goto out;
 	kref_init(&new->h.ref);
@@ -1069,7 +1069,7 @@ static int gss_read_proxy_verf(struct svc_rqst *rqstp,
 		goto out_denied_free;

 	pages = DIV_ROUND_UP(inlen, PAGE_SIZE);
-	in_token->pages = kcalloc(pages + 1, sizeof(struct page *), GFP_KERNEL);
+	in_token->pages = kzalloc_objs(struct page *, pages + 1, GFP_KERNEL);
 	if (!in_token->pages)
 		goto out_denied_free;
 	in_token->page_base = 0;
@@ -1631,7 +1631,7 @@ svcauth_gss_accept(struct svc_rqst *rqstp)

 	rqstp->rq_auth_stat = rpc_autherr_failed;
 	if (!svcdata)
-		svcdata = kmalloc(sizeof(*svcdata), GFP_KERNEL);
+		svcdata = kmalloc_obj(*svcdata, GFP_KERNEL);
 	if (!svcdata)
 		goto auth_err;
 	rqstp->rq_auth_data = svcdata;
diff --git a/net/sunrpc/auth_unix.c b/net/sunrpc/auth_unix.c
index 1e091d3fa607..6c742a3400c4 100644
--- a/net/sunrpc/auth_unix.c
+++ b/net/sunrpc/auth_unix.c
@@ -45,7 +45,7 @@ static struct rpc_cred *unx_lookup_cred(struct rpc_auth *auth,
 {
 	struct rpc_cred *ret;

-	ret = kmalloc(sizeof(*ret), rpc_task_gfp_mask());
+	ret = kmalloc_obj(*ret, rpc_task_gfp_mask());
 	if (!ret) {
 		if (!(flags & RPCAUTH_LOOKUP_ASYNC))
 			return ERR_PTR(-ENOMEM);
diff --git a/net/sunrpc/backchannel_rqst.c b/net/sunrpc/backchannel_rqst.c
index 6b9dee4119d5..0ffa4d01a938 100644
--- a/net/sunrpc/backchannel_rqst.c
+++ b/net/sunrpc/backchannel_rqst.c
@@ -94,7 +94,7 @@ static struct rpc_rqst *xprt_alloc_bc_req(struct rpc_xprt *xprt)
 	struct rpc_rqst *req;

 	/* Pre-allocate one backchannel rpc_rqst */
-	req = kzalloc(sizeof(*req), gfp_flags);
+	req = kzalloc_obj(*req, gfp_flags);
 	if (req == NULL)
 		return NULL;

diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
index d808c0b63f30..5129f3dace8c 100644
--- a/net/sunrpc/cache.c
+++ b/net/sunrpc/cache.c
@@ -1038,7 +1038,7 @@ static int cache_open(struct inode *inode, struct file *filp,
 		return -EACCES;
 	nonseekable_open(inode, filp);
 	if (filp->f_mode & FMODE_READ) {
-		rp = kmalloc(sizeof(*rp), GFP_KERNEL);
+		rp = kmalloc_obj(*rp, GFP_KERNEL);
 		if (!rp) {
 			module_put(cd->owner);
 			return -ENOMEM;
@@ -1225,7 +1225,7 @@ static int cache_pipe_upcall(struct cache_detail *detail, struct cache_head *h)
 	if (!buf)
 		return -EAGAIN;

-	crq = kmalloc(sizeof (*crq), GFP_KERNEL);
+	crq = kmalloc_obj(*crq, GFP_KERNEL);
 	if (!crq) {
 		kfree(buf);
 		return -EAGAIN;
@@ -1745,8 +1745,8 @@ struct cache_detail *cache_create_net(const struct cache_detail *tmpl, struct ne
 	if (cd == NULL)
 		return ERR_PTR(-ENOMEM);

-	cd->hash_table = kcalloc(cd->hash_size, sizeof(struct hlist_head),
-				 GFP_KERNEL);
+	cd->hash_table = kzalloc_objs(struct hlist_head, cd->hash_size,
+				      GFP_KERNEL);
 	if (cd->hash_table == NULL) {
 		kfree(cd);
 		return ERR_PTR(-ENOMEM);
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 58442ae1c2da..f6e086b62053 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -374,7 +374,7 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args,
 		goto out_err;

 	err = -ENOMEM;
-	clnt = kzalloc(sizeof(*clnt), GFP_KERNEL);
+	clnt = kzalloc_obj(*clnt, GFP_KERNEL);
 	if (!clnt)
 		goto out_err;
 	clnt->cl_parent = parent ? : clnt;
@@ -2976,7 +2976,7 @@ int rpc_clnt_test_and_add_xprt(struct rpc_clnt *clnt,
 		return -EINVAL;
 	}

-	data = kmalloc(sizeof(*data), GFP_KERNEL);
+	data = kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 	data->xps = xprt_switch_get(xps);
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
index 379daefc4847..a4b3c51be0f3 100644
--- a/net/sunrpc/rpc_pipe.c
+++ b/net/sunrpc/rpc_pipe.c
@@ -511,7 +511,7 @@ struct rpc_pipe *rpc_mkpipe_data(const struct rpc_pipe_ops *ops, int flags)
 {
 	struct rpc_pipe *pipe;

-	pipe = kzalloc(sizeof(struct rpc_pipe), GFP_KERNEL);
+	pipe = kzalloc_obj(struct rpc_pipe, GFP_KERNEL);
 	if (!pipe)
 		return ERR_PTR(-ENOMEM);
 	init_pipe(pipe);
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index 53bcca365fb1..6aa372188c86 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -737,7 +737,7 @@ void rpcb_getport_async(struct rpc_task *task)
 		goto bailout_nofree;
 	}

-	map = kzalloc(sizeof(struct rpcbind_args), rpc_task_gfp_mask());
+	map = kzalloc_obj(struct rpcbind_args, rpc_task_gfp_mask());
 	if (!map) {
 		status = -ENOMEM;
 		goto bailout_release_client;
diff --git a/net/sunrpc/stats.c b/net/sunrpc/stats.c
index 383860cb1d5b..36308711e0e9 100644
--- a/net/sunrpc/stats.c
+++ b/net/sunrpc/stats.c
@@ -126,7 +126,7 @@ struct rpc_iostats *rpc_alloc_iostats(struct rpc_clnt *clnt)
 	struct rpc_iostats *stats;
 	int i;

-	stats = kcalloc(clnt->cl_maxproc, sizeof(*stats), GFP_KERNEL);
+	stats = kzalloc_objs(*stats, clnt->cl_maxproc, GFP_KERNEL);
 	if (stats) {
 		for (i = 0; i < clnt->cl_maxproc; i++)
 			spin_lock_init(&stats[i].om_lock);
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
index 346ac560dcc2..bc160368a7dc 100644
--- a/net/sunrpc/svc.c
+++ b/net/sunrpc/svc.c
@@ -488,7 +488,7 @@ __svc_create(struct svc_program *prog, int nprogs, struct svc_stat *stats,
 	unsigned int xdrsize;
 	unsigned int i;

-	if (!(serv = kzalloc(sizeof(*serv), GFP_KERNEL)))
+	if (!(serv = kzalloc_obj(*serv, GFP_KERNEL)))
 		return NULL;
 	serv->sv_name      = prog->pg_name;
 	serv->sv_programs  = prog;
@@ -523,8 +523,7 @@ __svc_create(struct svc_program *prog, int nprogs, struct svc_stat *stats,

 	serv->sv_nrpools = npools;
 	serv->sv_pools =
-		kcalloc(serv->sv_nrpools, sizeof(struct svc_pool),
-			GFP_KERNEL);
+		kzalloc_objs(struct svc_pool, serv->sv_nrpools, GFP_KERNEL);
 	if (!serv->sv_pools) {
 		kfree(serv);
 		return NULL;
diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
index 8ca98b146ec8..7f952d9201f5 100644
--- a/net/sunrpc/svcauth_unix.c
+++ b/net/sunrpc/svcauth_unix.c
@@ -72,7 +72,7 @@ struct auth_domain *unix_domain_find(char *name)
 			return rv;
 		}

-		new = kmalloc(sizeof(*new), GFP_KERNEL);
+		new = kmalloc_obj(*new, GFP_KERNEL);
 		if (new == NULL)
 			return NULL;
 		kref_init(&new->h.ref);
@@ -143,7 +143,7 @@ static void update(struct cache_head *cnew, struct cache_head *citem)
 }
 static struct cache_head *ip_map_alloc(void)
 {
-	struct ip_map *i = kmalloc(sizeof(*i), GFP_KERNEL);
+	struct ip_map *i = kmalloc_obj(*i, GFP_KERNEL);
 	if (i)
 		return &i->h;
 	else
@@ -458,7 +458,7 @@ static void unix_gid_update(struct cache_head *cnew, struct cache_head *citem)
 }
 static struct cache_head *unix_gid_alloc(void)
 {
-	struct unix_gid *g = kmalloc(sizeof(*g), GFP_KERNEL);
+	struct unix_gid *g = kmalloc_obj(*g, GFP_KERNEL);
 	if (g)
 		return &g->h;
 	else
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index d61cd9b40491..e1576c807e07 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -1436,12 +1436,13 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv,
 		return ERR_PTR(sendpages);

 	pages = svc_serv_maxpages(serv);
-	svsk = kzalloc(struct_size(svsk, sk_pages, pages), GFP_KERNEL);
+	svsk = kzalloc_flex(*svsk, sk_pages, pages, GFP_KERNEL);
 	if (!svsk)
 		return ERR_PTR(-ENOMEM);

 	if (sendpages) {
-		svsk->sk_bvec = kcalloc(sendpages, sizeof(*svsk->sk_bvec), GFP_KERNEL);
+		svsk->sk_bvec = kzalloc_objs(*svsk->sk_bvec, sendpages,
+					     GFP_KERNEL);
 		if (!svsk->sk_bvec) {
 			kfree(svsk);
 			return ERR_PTR(-ENOMEM);
diff --git a/net/sunrpc/sysfs.c b/net/sunrpc/sysfs.c
index 8b01b7ae2690..ec6ddfa11f86 100644
--- a/net/sunrpc/sysfs.c
+++ b/net/sunrpc/sysfs.c
@@ -48,7 +48,7 @@ static struct kobject *rpc_sysfs_object_alloc(const char *name,
 {
 	struct kobject *kobj;

-	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
+	kobj = kzalloc_obj(*kobj, GFP_KERNEL);
 	if (kobj) {
 		kobj->kset = kset;
 		if (kobject_init_and_add(kobj, &rpc_sysfs_object_type,
@@ -397,7 +397,7 @@ static ssize_t rpc_sysfs_xprt_dstaddr_store(struct kobject *kobj,
 	dst_addr = kstrndup(buf, buf_len, GFP_KERNEL);
 	if (!dst_addr)
 		goto out_err;
-	saved_addr = kzalloc(sizeof(*saved_addr), GFP_KERNEL);
+	saved_addr = kzalloc_obj(*saved_addr, GFP_KERNEL);
 	if (!saved_addr)
 		goto out_err_free;
 	saved_addr->addr =
@@ -663,7 +663,7 @@ static struct rpc_sysfs_client *rpc_sysfs_client_alloc(struct kobject *parent,
 {
 	struct rpc_sysfs_client *p;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (p) {
 		p->net = net;
 		p->kobject.kset = rpc_sunrpc_kset;
@@ -683,7 +683,7 @@ rpc_sysfs_xprt_switch_alloc(struct kobject *parent,
 {
 	struct rpc_sysfs_xprt_switch *p;

-	p = kzalloc(sizeof(*p), gfp_flags);
+	p = kzalloc_obj(*p, gfp_flags);
 	if (p) {
 		p->net = net;
 		p->kobject.kset = rpc_sunrpc_kset;
@@ -703,7 +703,7 @@ static struct rpc_sysfs_xprt *rpc_sysfs_xprt_alloc(struct kobject *parent,
 {
 	struct rpc_sysfs_xprt *p;

-	p = kzalloc(sizeof(*p), gfp_flags);
+	p = kzalloc_obj(*p, gfp_flags);
 	if (!p)
 		goto out;
 	p->kobject.kset = rpc_sunrpc_kset;
diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c
index 70efc727a9cd..e83d5d0be78b 100644
--- a/net/sunrpc/xdr.c
+++ b/net/sunrpc/xdr.c
@@ -118,7 +118,7 @@ xdr_alloc_bvec(struct xdr_buf *buf, gfp_t gfp)
 	size_t i, n = xdr_buf_pagecount(buf);

 	if (n != 0 && buf->bvec == NULL) {
-		buf->bvec = kmalloc_array(n, sizeof(buf->bvec[0]), gfp);
+		buf->bvec = kmalloc_objs(buf->bvec[0], n, gfp);
 		if (!buf->bvec)
 			return -ENOMEM;
 		for (i = 0; i < n; i++) {
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 1023361845f9..16f6989a0a2d 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -1709,7 +1709,7 @@ static struct rpc_rqst *xprt_dynamic_alloc_slot(struct rpc_xprt *xprt)
 		goto out;
 	++xprt->num_reqs;
 	spin_unlock(&xprt->reserve_lock);
-	req = kzalloc(sizeof(*req), rpc_task_gfp_mask());
+	req = kzalloc_obj(*req, rpc_task_gfp_mask());
 	spin_lock(&xprt->reserve_lock);
 	if (req != NULL)
 		goto out;
@@ -1829,7 +1829,7 @@ struct rpc_xprt *xprt_alloc(struct net *net, size_t size,
 	xprt_init(xprt, net);

 	for (i = 0; i < num_prealloc; i++) {
-		req = kzalloc(sizeof(struct rpc_rqst), GFP_KERNEL);
+		req = kzalloc_obj(struct rpc_rqst, GFP_KERNEL);
 		if (!req)
 			goto out_free;
 		list_add(&req->rq_list, &xprt->free);
diff --git a/net/sunrpc/xprtmultipath.c b/net/sunrpc/xprtmultipath.c
index 4c5e08b0aa64..3ba818d637be 100644
--- a/net/sunrpc/xprtmultipath.c
+++ b/net/sunrpc/xprtmultipath.c
@@ -150,7 +150,7 @@ struct rpc_xprt_switch *xprt_switch_alloc(struct rpc_xprt *xprt,
 {
 	struct rpc_xprt_switch *xps;

-	xps = kmalloc(sizeof(*xps), gfp_flags);
+	xps = kmalloc_obj(*xps, gfp_flags);
 	if (xps != NULL) {
 		spin_lock_init(&xps->xps_lock);
 		kref_init(&xps->xps_kref);
diff --git a/net/sunrpc/xprtrdma/ib_client.c b/net/sunrpc/xprtrdma/ib_client.c
index 28c68b5f6823..e5b6dfaf01aa 100644
--- a/net/sunrpc/xprtrdma/ib_client.c
+++ b/net/sunrpc/xprtrdma/ib_client.c
@@ -108,7 +108,7 @@ static int rpcrdma_add_one(struct ib_device *device)
 {
 	struct rpcrdma_device *rd;

-	rd = kzalloc(sizeof(*rd), GFP_KERNEL);
+	rd = kzalloc_obj(*rd, GFP_KERNEL);
 	if (!rd)
 		return -ENOMEM;

diff --git a/net/sunrpc/xprtrdma/svc_rdma_pcl.c b/net/sunrpc/xprtrdma/svc_rdma_pcl.c
index b63cfeaa2923..b7c09a1f1c62 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_pcl.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_pcl.c
@@ -29,7 +29,7 @@ static struct svc_rdma_chunk *pcl_alloc_chunk(u32 segcount, u32 position)
 {
 	struct svc_rdma_chunk *chunk;

-	chunk = kmalloc(struct_size(chunk, ch_segments, segcount), GFP_KERNEL);
+	chunk = kmalloc_flex(*chunk, ch_segments, segcount, GFP_KERNEL);
 	if (!chunk)
 		return NULL;

diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index 63262ef0c2e3..15bbf953dfad 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -383,7 +383,7 @@ static int rpcrdma_ep_create(struct rpcrdma_xprt *r_xprt)
 	struct rpcrdma_ep *ep;
 	int rc;

-	ep = kzalloc(sizeof(*ep), XPRTRDMA_GFP_FLAGS);
+	ep = kzalloc_obj(*ep, XPRTRDMA_GFP_FLAGS);
 	if (!ep)
 		return -ENOTCONN;
 	ep->re_xprt = &r_xprt->rx_xprt;
@@ -615,8 +615,8 @@ static struct rpcrdma_sendctx *rpcrdma_sendctx_create(struct rpcrdma_ep *ep)
 {
 	struct rpcrdma_sendctx *sc;

-	sc = kzalloc(struct_size(sc, sc_sges, ep->re_attr.cap.max_send_sge),
-		     XPRTRDMA_GFP_FLAGS);
+	sc = kzalloc_flex(*sc, sc_sges, ep->re_attr.cap.max_send_sge,
+			  XPRTRDMA_GFP_FLAGS);
 	if (!sc)
 		return NULL;

@@ -639,7 +639,7 @@ static int rpcrdma_sendctxs_create(struct rpcrdma_xprt *r_xprt)
 	 * Sends are posted.
 	 */
 	i = r_xprt->rx_ep->re_max_requests + RPCRDMA_MAX_BC_REQUESTS;
-	buf->rb_sc_ctxs = kcalloc(i, sizeof(sc), XPRTRDMA_GFP_FLAGS);
+	buf->rb_sc_ctxs = kzalloc_objs(sc, i, XPRTRDMA_GFP_FLAGS);
 	if (!buf->rb_sc_ctxs)
 		return -ENOMEM;

@@ -822,7 +822,7 @@ struct rpcrdma_req *rpcrdma_req_create(struct rpcrdma_xprt *r_xprt,
 	struct rpcrdma_buffer *buffer = &r_xprt->rx_buf;
 	struct rpcrdma_req *req;

-	req = kzalloc(sizeof(*req), XPRTRDMA_GFP_FLAGS);
+	req = kzalloc_obj(*req, XPRTRDMA_GFP_FLAGS);
 	if (req == NULL)
 		goto out1;

@@ -952,7 +952,7 @@ struct rpcrdma_rep *rpcrdma_rep_create(struct rpcrdma_xprt *r_xprt)
 	struct ib_device *device = ep->re_id->device;
 	struct rpcrdma_rep *rep;

-	rep = kzalloc(sizeof(*rep), XPRTRDMA_GFP_FLAGS);
+	rep = kzalloc_obj(*rep, XPRTRDMA_GFP_FLAGS);
 	if (rep == NULL)
 		goto out;

diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
index 4d5fbacef496..b55df183e6d5 100644
--- a/net/switchdev/switchdev.c
+++ b/net/switchdev/switchdev.c
@@ -114,7 +114,7 @@ static int switchdev_deferred_enqueue(struct net_device *dev,
 {
 	struct switchdev_deferred_item *dfitem;

-	dfitem = kmalloc(struct_size(dfitem, data, data_len), GFP_ATOMIC);
+	dfitem = kmalloc_flex(*dfitem, data, data_len, GFP_ATOMIC);
 	if (!dfitem)
 		return -ENOMEM;
 	dfitem->dev = dev;
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c
index 114fef65f92e..c7c7f08eee9a 100644
--- a/net/tipc/bcast.c
+++ b/net/tipc/bcast.c
@@ -692,7 +692,7 @@ int tipc_bcast_init(struct net *net)
 	struct tipc_bc_base *bb = NULL;
 	struct tipc_link *l = NULL;

-	bb = kzalloc(sizeof(*bb), GFP_KERNEL);
+	bb = kzalloc_obj(*bb, GFP_KERNEL);
 	if (!bb)
 		goto enomem;
 	tn->bcbase = bb;
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index ae1ddbf71853..a3bd1ef17558 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -322,7 +322,7 @@ static int tipc_enable_bearer(struct net *net, const char *name,
 		goto rejected;
 	}

-	b = kzalloc(sizeof(*b), GFP_ATOMIC);
+	b = kzalloc_obj(*b, GFP_ATOMIC);
 	if (!b)
 		return -ENOMEM;

diff --git a/net/tipc/crypto.c b/net/tipc/crypto.c
index a3f9ca28c3d5..abd191a3ac4a 100644
--- a/net/tipc/crypto.c
+++ b/net/tipc/crypto.c
@@ -524,7 +524,7 @@ static int tipc_aead_init(struct tipc_aead **aead, struct tipc_aead_key *ukey,
 		return -EEXIST;

 	/* Allocate a new AEAD */
-	tmp = kzalloc(sizeof(*tmp), GFP_ATOMIC);
+	tmp = kzalloc_obj(*tmp, GFP_ATOMIC);
 	if (unlikely(!tmp))
 		return -ENOMEM;

@@ -560,7 +560,7 @@ static int tipc_aead_init(struct tipc_aead **aead, struct tipc_aead_key *ukey,
 			break;
 		}

-		tfm_entry = kmalloc(sizeof(*tfm_entry), GFP_KERNEL);
+		tfm_entry = kmalloc_obj(*tfm_entry, GFP_KERNEL);
 		if (unlikely(!tfm_entry)) {
 			crypto_free_aead(tfm);
 			err = -ENOMEM;
@@ -637,7 +637,7 @@ static int tipc_aead_clone(struct tipc_aead **dst, struct tipc_aead *src)
 	if (unlikely(*dst))
 		return -EEXIST;

-	aead = kzalloc(sizeof(*aead), GFP_ATOMIC);
+	aead = kzalloc_obj(*aead, GFP_ATOMIC);
 	if (unlikely(!aead))
 		return -ENOMEM;

@@ -1472,7 +1472,7 @@ int tipc_crypto_start(struct tipc_crypto **crypto, struct net *net,
 		return -EEXIST;

 	/* Allocate crypto */
-	c = kzalloc(sizeof(*c), GFP_ATOMIC);
+	c = kzalloc_obj(*c, GFP_ATOMIC);
 	if (!c)
 		return -ENOMEM;

diff --git a/net/tipc/discover.c b/net/tipc/discover.c
index 775fd4f3f072..3e54d2df5683 100644
--- a/net/tipc/discover.c
+++ b/net/tipc/discover.c
@@ -353,7 +353,7 @@ int tipc_disc_create(struct net *net, struct tipc_bearer *b,
 	struct tipc_net *tn = tipc_net(net);
 	struct tipc_discoverer *d;

-	d = kmalloc(sizeof(*d), GFP_ATOMIC);
+	d = kmalloc_obj(*d, GFP_ATOMIC);
 	if (!d)
 		return -ENOMEM;
 	d->skb = tipc_buf_acquire(MAX_H_SIZE + NODE_ID_LEN, GFP_ATOMIC);
diff --git a/net/tipc/group.c b/net/tipc/group.c
index 3e137d8c9d2f..e0e6227b433b 100644
--- a/net/tipc/group.c
+++ b/net/tipc/group.c
@@ -169,7 +169,7 @@ struct tipc_group *tipc_group_create(struct net *net, u32 portid,
 	struct tipc_group *grp;
 	u32 type = mreq->type;

-	grp = kzalloc(sizeof(*grp), GFP_ATOMIC);
+	grp = kzalloc_obj(*grp, GFP_ATOMIC);
 	if (!grp)
 		return NULL;
 	tipc_nlist_init(&grp->dests, tipc_own_addr(net));
@@ -306,7 +306,7 @@ static struct tipc_member *tipc_group_create_member(struct tipc_group *grp,
 	struct tipc_member *m;
 	int ret;

-	m = kzalloc(sizeof(*m), GFP_ATOMIC);
+	m = kzalloc_obj(*m, GFP_ATOMIC);
 	if (!m)
 		return NULL;
 	INIT_LIST_HEAD(&m->list);
diff --git a/net/tipc/link.c b/net/tipc/link.c
index 931f55f781a1..49dfc098d89b 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -487,7 +487,7 @@ bool tipc_link_create(struct net *net, char *if_name, int bearer_id,
 	char self_str[NODE_ID_STR_LEN] = {0,};
 	struct tipc_link *l;

-	l = kzalloc(sizeof(*l), GFP_ATOMIC);
+	l = kzalloc_obj(*l, GFP_ATOMIC);
 	if (!l)
 		return false;
 	*link = l;
diff --git a/net/tipc/monitor.c b/net/tipc/monitor.c
index 572b79bf76ce..a94b9b36a700 100644
--- a/net/tipc/monitor.c
+++ b/net/tipc/monitor.c
@@ -393,7 +393,7 @@ static bool tipc_mon_add_peer(struct tipc_monitor *mon, u32 addr,
 	struct tipc_peer *self = mon->self;
 	struct tipc_peer *cur, *prev, *p;

-	p = kzalloc(sizeof(*p), GFP_ATOMIC);
+	p = kzalloc_obj(*p, GFP_ATOMIC);
 	*peer = p;
 	if (!p)
 		return false;
@@ -654,9 +654,9 @@ int tipc_mon_create(struct net *net, int bearer_id)
 	if (tn->monitors[bearer_id])
 		return 0;

-	mon = kzalloc(sizeof(*mon), GFP_ATOMIC);
-	self = kzalloc(sizeof(*self), GFP_ATOMIC);
-	dom = kzalloc(sizeof(*dom), GFP_ATOMIC);
+	mon = kzalloc_obj(*mon, GFP_ATOMIC);
+	self = kzalloc_obj(*self, GFP_ATOMIC);
+	dom = kzalloc_obj(*dom, GFP_ATOMIC);
 	if (!mon || !self || !dom) {
 		kfree(mon);
 		kfree(self);
diff --git a/net/tipc/name_table.c b/net/tipc/name_table.c
index e74940eab3a4..ec0ac85ca70b 100644
--- a/net/tipc/name_table.c
+++ b/net/tipc/name_table.c
@@ -230,7 +230,7 @@ static struct publication *tipc_publ_create(struct tipc_uaddr *ua,
 					    struct tipc_socket_addr *sk,
 					    u32 key)
 {
-	struct publication *p = kzalloc(sizeof(*p), GFP_ATOMIC);
+	struct publication *p = kzalloc_obj(*p, GFP_ATOMIC);

 	if (!p)
 		return NULL;
@@ -261,7 +261,7 @@ static struct tipc_service *tipc_service_create(struct net *net,
 	struct tipc_service *service;
 	struct hlist_head *hd;

-	service = kzalloc(sizeof(*service), GFP_ATOMIC);
+	service = kzalloc_obj(*service, GFP_ATOMIC);
 	if (!service) {
 		pr_warn("Service creation failed, no memory\n");
 		return NULL;
@@ -314,7 +314,7 @@ static struct service_range *tipc_service_create_range(struct tipc_service *sc,
 		else
 			n = &parent->rb_right;
 	}
-	sr = kzalloc(sizeof(*sr), GFP_ATOMIC);
+	sr = kzalloc_obj(*sr, GFP_ATOMIC);
 	if (!sr)
 		return NULL;
 	sr->lower = lower;
@@ -888,7 +888,7 @@ int tipc_nametbl_init(struct net *net)
 	struct name_table *nt;
 	int i;

-	nt = kzalloc(sizeof(*nt), GFP_KERNEL);
+	nt = kzalloc_obj(*nt, GFP_KERNEL);
 	if (!nt)
 		return -ENOMEM;

@@ -1156,7 +1156,7 @@ bool tipc_dest_push(struct list_head *l, u32 node, u32 port)
 	if (tipc_dest_find(l, node, port))
 		return false;

-	dst = kmalloc(sizeof(*dst), GFP_ATOMIC);
+	dst = kmalloc_obj(*dst, GFP_ATOMIC);
 	if (unlikely(!dst))
 		return false;
 	dst->node = node;
diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c
index 079aebb16ed8..f64f03ab4933 100644
--- a/net/tipc/netlink_compat.c
+++ b/net/tipc/netlink_compat.c
@@ -202,8 +202,8 @@ static int __tipc_nl_compat_dumpit(struct tipc_nl_compat_cmd_dump *cmd,
 		return -ENOMEM;
 	}

-	attrbuf = kcalloc(tipc_genl_family.maxattr + 1,
-			  sizeof(struct nlattr *), GFP_KERNEL);
+	attrbuf = kzalloc_objs(struct nlattr *, tipc_genl_family.maxattr + 1,
+			       GFP_KERNEL);
 	if (!attrbuf) {
 		err = -ENOMEM;
 		goto err_out;
@@ -338,9 +338,8 @@ static int __tipc_nl_compat_doit(struct tipc_nl_compat_cmd_doit *cmd,
 	if (!trans_buf)
 		return -ENOMEM;

-	attrbuf = kmalloc_array(tipc_genl_family.maxattr + 1,
-				sizeof(struct nlattr *),
-				GFP_KERNEL);
+	attrbuf = kmalloc_objs(struct nlattr *, tipc_genl_family.maxattr + 1,
+			       GFP_KERNEL);
 	if (!attrbuf) {
 		err = -ENOMEM;
 		goto trans_out;
diff --git a/net/tipc/node.c b/net/tipc/node.c
index a07fb073368c..af442a5ef8f3 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -535,7 +535,7 @@ struct tipc_node *tipc_node_create(struct net *net, u32 addr, u8 *peer_id,

 		goto exit;
 	}
-	n = kzalloc(sizeof(*n), GFP_ATOMIC);
+	n = kzalloc_obj(*n, GFP_ATOMIC);
 	if (!n) {
 		pr_warn("Node creation failed, no memory\n");
 		goto exit;
@@ -703,7 +703,7 @@ int tipc_node_add_conn(struct net *net, u32 dnode, u32 port, u32 peer_port)
 		pr_warn("Connecting sock to node 0x%x failed\n", dnode);
 		return -EHOSTUNREACH;
 	}
-	conn = kmalloc(sizeof(*conn), GFP_ATOMIC);
+	conn = kmalloc_obj(*conn, GFP_ATOMIC);
 	if (!conn) {
 		err = -EHOSTUNREACH;
 		goto exit;
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 817b07d95a91..d52f700b5493 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -3595,7 +3595,7 @@ int __tipc_dump_start(struct netlink_callback *cb, struct net *net)
 	struct tipc_net *tn = tipc_net(net);

 	if (!iter) {
-		iter = kmalloc(sizeof(*iter), GFP_KERNEL);
+		iter = kmalloc_obj(*iter, GFP_KERNEL);
 		if (!iter)
 			return -ENOMEM;

diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
index f8490d94e323..352d304c3acd 100644
--- a/net/tipc/subscr.c
+++ b/net/tipc/subscr.c
@@ -143,7 +143,7 @@ struct tipc_subscription *tipc_sub_subscribe(struct net *net,
 		pr_warn("Subscription rejected, illegal request\n");
 		return NULL;
 	}
-	sub = kmalloc(sizeof(*sub), GFP_ATOMIC);
+	sub = kmalloc_obj(*sub, GFP_ATOMIC);
 	if (!sub) {
 		pr_warn("Subscription rejected, no memory\n");
 		return NULL;
diff --git a/net/tipc/topsrv.c b/net/tipc/topsrv.c
index aad7f96b6009..af530c9ed840 100644
--- a/net/tipc/topsrv.c
+++ b/net/tipc/topsrv.c
@@ -182,7 +182,7 @@ static struct tipc_conn *tipc_conn_alloc(struct tipc_topsrv *s, struct socket *s
 	struct tipc_conn *con;
 	int ret;

-	con = kzalloc(sizeof(*con), GFP_ATOMIC);
+	con = kzalloc_obj(*con, GFP_ATOMIC);
 	if (!con)
 		return ERR_PTR(-ENOMEM);

@@ -325,7 +325,7 @@ void tipc_topsrv_queue_evt(struct net *net, int conid,
 	if (!connected(con))
 		goto err;

-	e = kmalloc(sizeof(*e), GFP_ATOMIC);
+	e = kmalloc_obj(*e, GFP_ATOMIC);
 	if (!e)
 		goto err;
 	e->inactive = (event == TIPC_SUBSCR_TIMEOUT);
@@ -661,7 +661,7 @@ static int tipc_topsrv_start(struct net *net)
 	struct tipc_topsrv *srv;
 	int ret;

-	srv = kzalloc(sizeof(*srv), GFP_ATOMIC);
+	srv = kzalloc_obj(*srv, GFP_ATOMIC);
 	if (!srv)
 		return -ENOMEM;

diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c
index b85ab0fb3b8c..2b8e385d1e51 100644
--- a/net/tipc/udp_media.c
+++ b/net/tipc/udp_media.c
@@ -309,7 +309,7 @@ static int tipc_udp_rcast_add(struct tipc_bearer *b,
 	if (!ub)
 		return -ENODEV;

-	rcast = kmalloc(sizeof(*rcast), GFP_ATOMIC);
+	rcast = kmalloc_obj(*rcast, GFP_ATOMIC);
 	if (!rcast)
 		return -ENOMEM;

@@ -675,7 +675,7 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,
 	struct net_device *dev;
 	int rmcast = 0;

-	ub = kzalloc(sizeof(*ub), GFP_ATOMIC);
+	ub = kzalloc_obj(*ub, GFP_ATOMIC);
 	if (!ub)
 		return -ENOMEM;

diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c
index 82ea407e520a..7a85ef064e4c 100644
--- a/net/tls/tls_device.c
+++ b/net/tls/tls_device.c
@@ -346,7 +346,7 @@ static int tls_create_new_record(struct tls_offload_context_tx *offload_ctx,
 	struct tls_record_info *record;
 	skb_frag_t *frag;

-	record = kmalloc(sizeof(*record), GFP_KERNEL);
+	record = kmalloc_obj(*record, GFP_KERNEL);
 	if (!record)
 		return -ENOMEM;

@@ -1040,7 +1040,7 @@ static struct tls_offload_context_tx *alloc_offload_ctx_tx(struct tls_context *c
 	struct tls_offload_context_tx *offload_ctx;
 	__be64 rcd_sn;

-	offload_ctx = kzalloc(sizeof(*offload_ctx), GFP_KERNEL);
+	offload_ctx = kzalloc_obj(*offload_ctx, GFP_KERNEL);
 	if (!offload_ctx)
 		return NULL;

@@ -1110,7 +1110,7 @@ int tls_set_device_offload(struct sock *sk)
 	memcpy(ctx->tx.iv + cipher_desc->salt, iv, cipher_desc->iv);
 	memcpy(ctx->tx.rec_seq, rec_seq, cipher_desc->rec_seq);

-	start_marker_record = kmalloc(sizeof(*start_marker_record), GFP_KERNEL);
+	start_marker_record = kmalloc_obj(*start_marker_record, GFP_KERNEL);
 	if (!start_marker_record) {
 		rc = -ENOMEM;
 		goto release_netdev;
@@ -1224,7 +1224,7 @@ int tls_set_device_offload_rx(struct sock *sk, struct tls_context *ctx)
 		goto release_lock;
 	}

-	context = kzalloc(sizeof(*context), GFP_KERNEL);
+	context = kzalloc_obj(*context, GFP_KERNEL);
 	if (!context) {
 		rc = -ENOMEM;
 		goto release_lock;
diff --git a/net/tls/tls_device_fallback.c b/net/tls/tls_device_fallback.c
index 03d508a45aae..d3c72f509baa 100644
--- a/net/tls/tls_device_fallback.c
+++ b/net/tls/tls_device_fallback.c
@@ -383,7 +383,7 @@ static struct sk_buff *tls_sw_fallback(struct sock *sk, struct sk_buff *skb)
 	if (!payload_len)
 		return skb;

-	sg_in = kmalloc_array(sg_in_max_elements, sizeof(*sg_in), GFP_ATOMIC);
+	sg_in = kmalloc_objs(*sg_in, sg_in_max_elements, GFP_ATOMIC);
 	if (!sg_in)
 		goto free_orig;

diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c
index 56ce0bc8317b..fd39acf41a61 100644
--- a/net/tls/tls_main.c
+++ b/net/tls/tls_main.c
@@ -915,7 +915,7 @@ struct tls_context *tls_ctx_create(struct sock *sk)
 	struct inet_connection_sock *icsk = inet_csk(sk);
 	struct tls_context *ctx;

-	ctx = kzalloc(sizeof(*ctx), GFP_ATOMIC);
+	ctx = kzalloc_obj(*ctx, GFP_ATOMIC);
 	if (!ctx)
 		return NULL;

diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
index 9937d4c810f2..36bacedd6177 100644
--- a/net/tls/tls_sw.c
+++ b/net/tls/tls_sw.c
@@ -2698,7 +2698,7 @@ static struct tls_sw_context_tx *init_ctx_tx(struct tls_context *ctx, struct soc
 	struct tls_sw_context_tx *sw_ctx_tx;

 	if (!ctx->priv_ctx_tx) {
-		sw_ctx_tx = kzalloc(sizeof(*sw_ctx_tx), GFP_KERNEL);
+		sw_ctx_tx = kzalloc_obj(*sw_ctx_tx, GFP_KERNEL);
 		if (!sw_ctx_tx)
 			return NULL;
 	} else {
@@ -2719,7 +2719,7 @@ static struct tls_sw_context_rx *init_ctx_rx(struct tls_context *ctx)
 	struct tls_sw_context_rx *sw_ctx_rx;

 	if (!ctx->priv_ctx_rx) {
-		sw_ctx_rx = kzalloc(sizeof(*sw_ctx_rx), GFP_KERNEL);
+		sw_ctx_rx = kzalloc_obj(*sw_ctx_rx, GFP_KERNEL);
 		if (!sw_ctx_rx)
 			return NULL;
 	} else {
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index f6d56e70c7a2..1c4d298a9eb3 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -3798,14 +3798,13 @@ static int __net_init unix_net_init(struct net *net)
 		goto err_sysctl;
 #endif

-	net->unx.table.locks = kvmalloc_array(UNIX_HASH_SIZE,
-					      sizeof(spinlock_t), GFP_KERNEL);
+	net->unx.table.locks = kvmalloc_objs(spinlock_t, UNIX_HASH_SIZE,
+					     GFP_KERNEL);
 	if (!net->unx.table.locks)
 		goto err_proc;

-	net->unx.table.buckets = kvmalloc_array(UNIX_HASH_SIZE,
-						sizeof(struct hlist_head),
-						GFP_KERNEL);
+	net->unx.table.buckets = kvmalloc_objs(struct hlist_head,
+					       UNIX_HASH_SIZE, GFP_KERNEL);
 	if (!net->unx.table.buckets)
 		goto free_locks;

diff --git a/net/unix/garbage.c b/net/unix/garbage.c
index 25f65817faab..a15e7eb50851 100644
--- a/net/unix/garbage.c
+++ b/net/unix/garbage.c
@@ -288,15 +288,15 @@ int unix_prepare_fpl(struct scm_fp_list *fpl)
 		return 0;

 	for (i = 0; i < fpl->count_unix; i++) {
-		vertex = kmalloc(sizeof(*vertex), GFP_KERNEL);
+		vertex = kmalloc_obj(*vertex, GFP_KERNEL);
 		if (!vertex)
 			goto err;

 		list_add(&vertex->entry, &fpl->vertices);
 	}

-	fpl->edges = kvmalloc_array(fpl->count_unix, sizeof(*fpl->edges),
-				    GFP_KERNEL_ACCOUNT);
+	fpl->edges = kvmalloc_objs(*fpl->edges, fpl->count_unix,
+				   GFP_KERNEL_ACCOUNT);
 	if (!fpl->edges)
 		goto err;

diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
index c3010c874308..b1bf64b5cc97 100644
--- a/net/vmw_vsock/hyperv_transport.c
+++ b/net/vmw_vsock/hyperv_transport.c
@@ -444,7 +444,7 @@ static int hvs_sock_init(struct vsock_sock *vsk, struct vsock_sock *psk)
 	struct hvsock *hvs;
 	struct sock *sk = sk_vsock(vsk);

-	hvs = kzalloc(sizeof(*hvs), GFP_KERNEL);
+	hvs = kzalloc_obj(*hvs, GFP_KERNEL);
 	if (!hvs)
 		return -ENOMEM;

@@ -655,7 +655,7 @@ static ssize_t hvs_stream_enqueue(struct vsock_sock *vsk, struct msghdr *msg,

 	BUILD_BUG_ON(sizeof(*send_buf) != HV_HYP_PAGE_SIZE);

-	send_buf = kmalloc(sizeof(*send_buf), GFP_KERNEL);
+	send_buf = kmalloc_obj(*send_buf, GFP_KERNEL);
 	if (!send_buf)
 		return -ENOMEM;

diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index 357e80ac3f3a..d6c07334bf94 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -805,7 +805,7 @@ static int virtio_vsock_probe(struct virtio_device *vdev)
 		goto out;
 	}

-	vsock = kzalloc(sizeof(*vsock), GFP_KERNEL);
+	vsock = kzalloc_obj(*vsock, GFP_KERNEL);
 	if (!vsock) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index d017ab318a7e..925ed086058c 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -920,7 +920,7 @@ int virtio_transport_do_socket_init(struct vsock_sock *vsk,
 {
 	struct virtio_vsock_sock *vvs;

-	vvs = kzalloc(sizeof(*vvs), GFP_KERNEL);
+	vvs = kzalloc_obj(*vvs, GFP_KERNEL);
 	if (!vvs)
 		return -ENOMEM;

diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index a64522be1bad..3e80639b7c08 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -262,7 +262,7 @@ vmci_transport_alloc_send_control_pkt(struct sockaddr_vm *src,
 	struct vmci_transport_packet *pkt;
 	int err;

-	pkt = kmalloc(sizeof(*pkt), GFP_KERNEL);
+	pkt = kmalloc_obj(*pkt, GFP_KERNEL);
 	if (!pkt)
 		return -ENOMEM;

@@ -779,7 +779,7 @@ static int vmci_transport_recv_stream_cb(void *data, struct vmci_datagram *dg)
 	if (!bh_process_pkt) {
 		struct vmci_transport_recv_pkt_info *recv_pkt_info;

-		recv_pkt_info = kmalloc(sizeof(*recv_pkt_info), GFP_ATOMIC);
+		recv_pkt_info = kmalloc_obj(*recv_pkt_info, GFP_ATOMIC);
 		if (!recv_pkt_info) {
 			if (vmci_transport_send_reset_bh(&dst, &src, pkt) < 0)
 				pr_err("unable to send reset\n");
@@ -1583,7 +1583,7 @@ static int vmci_transport_recv_connected(struct sock *sk,
 static int vmci_transport_socket_init(struct vsock_sock *vsk,
 				      struct vsock_sock *psk)
 {
-	vsk->trans = kmalloc(sizeof(struct vmci_transport), GFP_KERNEL);
+	vsk->trans = kmalloc_obj(struct vmci_transport, GFP_KERNEL);
 	if (!vsk->trans)
 		return -ENOMEM;

diff --git a/net/wireless/core.c b/net/wireless/core.c
index 9af85d655027..bd53317e44ef 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -1000,9 +1000,8 @@ int wiphy_register(struct wiphy *wiphy)
 	if (wiphy->n_radio > 0) {
 		int idx;

-		wiphy->radio_cfg = kcalloc(wiphy->n_radio,
-					   sizeof(*wiphy->radio_cfg),
-					   GFP_KERNEL);
+		wiphy->radio_cfg = kzalloc_objs(*wiphy->radio_cfg,
+						wiphy->n_radio, GFP_KERNEL);
 		if (!wiphy->radio_cfg)
 			return -ENOMEM;
 		/*
@@ -1446,7 +1445,7 @@ void cfg80211_stop_link(struct wiphy *wiphy, struct wireless_dev *wdev,

 	trace_cfg80211_stop_link(wiphy, wdev, link_id);

-	ev = kzalloc(sizeof(*ev), gfp);
+	ev = kzalloc_obj(*ev, gfp);
 	if (!ev)
 		return;

diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c
index 1e3ed29f7cfc..a7024af39b40 100644
--- a/net/wireless/ibss.c
+++ b/net/wireless/ibss.c
@@ -69,7 +69,7 @@ void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid,
 	if (WARN_ON(!channel))
 		return;

-	ev = kzalloc(sizeof(*ev), gfp);
+	ev = kzalloc_obj(*ev, gfp);
 	if (!ev)
 		return;

diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 6e58b238a1f8..33782370fbaf 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1106,8 +1106,8 @@ static int nl80211_prepare_wdev_dump(struct netlink_callback *cb,
 		struct nlattr **attrbuf_free = NULL;

 		if (!attrbuf) {
-			attrbuf = kcalloc(NUM_NL80211_ATTR, sizeof(*attrbuf),
-					  GFP_KERNEL);
+			attrbuf = kzalloc_objs(*attrbuf, NUM_NL80211_ATTR,
+					       GFP_KERNEL);
 			if (!attrbuf)
 				return -ENOMEM;
 			attrbuf_free = attrbuf;
@@ -1615,7 +1615,7 @@ nl80211_parse_connkeys(struct cfg80211_registered_device *rdev,
 	if (!have_key)
 		return NULL;

-	result = kzalloc(sizeof(*result), GFP_KERNEL);
+	result = kzalloc_obj(*result, GFP_KERNEL);
 	if (!result)
 		return ERR_PTR(-ENOMEM);

@@ -3367,7 +3367,7 @@ static int nl80211_dump_wiphy_parse(struct sk_buff *skb,
 				    struct netlink_callback *cb,
 				    struct nl80211_dump_wiphy_state *state)
 {
-	struct nlattr **tb = kcalloc(NUM_NL80211_ATTR, sizeof(*tb), GFP_KERNEL);
+	struct nlattr **tb = kzalloc_objs(*tb, NUM_NL80211_ATTR, GFP_KERNEL);
 	int ret;

 	if (!tb)
@@ -3419,7 +3419,7 @@ static int nl80211_dump_wiphy(struct sk_buff *skb, struct netlink_callback *cb)

 	rtnl_lock();
 	if (!state) {
-		state = kzalloc(sizeof(*state), GFP_KERNEL);
+		state = kzalloc_obj(*state, GFP_KERNEL);
 		if (!state) {
 			rtnl_unlock();
 			return -ENOMEM;
@@ -5333,7 +5333,7 @@ static struct cfg80211_acl_data *parse_acl_data(struct wiphy *wiphy,
 	if (n_entries > wiphy->max_acl_mac_addrs)
 		return ERR_PTR(-EOPNOTSUPP);

-	acl = kzalloc(struct_size(acl, mac_addrs, n_entries), GFP_KERNEL);
+	acl = kzalloc_flex(*acl, mac_addrs, n_entries, GFP_KERNEL);
 	if (!acl)
 		return ERR_PTR(-ENOMEM);
 	acl->n_acl_entries = n_entries;
@@ -6113,7 +6113,7 @@ nl80211_parse_mbssid_elems(struct wiphy *wiphy, struct nlattr *attrs)
 		num_elems++;
 	}

-	elems = kzalloc(struct_size(elems, elem, num_elems), GFP_KERNEL);
+	elems = kzalloc_flex(*elems, elem, num_elems, GFP_KERNEL);
 	if (!elems)
 		return ERR_PTR(-ENOMEM);
 	elems->cnt = num_elems;
@@ -6145,7 +6145,7 @@ nl80211_parse_rnr_elems(struct wiphy *wiphy, struct nlattr *attrs,
 		num_elems++;
 	}

-	elems = kzalloc(struct_size(elems, elem, num_elems), GFP_KERNEL);
+	elems = kzalloc_flex(*elems, elem, num_elems, GFP_KERNEL);
 	if (!elems)
 		return ERR_PTR(-ENOMEM);
 	elems->cnt = num_elems;
@@ -6702,7 +6702,7 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 	    nla_get_u8(info->attrs[NL80211_ATTR_SMPS_MODE]) != NL80211_SMPS_OFF)
 		return -EOPNOTSUPP;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -6995,7 +6995,7 @@ static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info)
 	if (!wdev->links[link_id].ap.beacon_interval)
 		return -EINVAL;

-	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	params = kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -7985,7 +7985,7 @@ static int nl80211_dump_station(struct sk_buff *skb,

 		for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
 			sinfo.links[i] =
-				kzalloc(sizeof(*sinfo.links[0]), GFP_KERNEL);
+				kzalloc_obj(*sinfo.links[0], GFP_KERNEL);
 			if (!sinfo.links[i]) {
 				err = -ENOMEM;
 				goto out_err;
@@ -8049,7 +8049,7 @@ static int nl80211_get_station(struct sk_buff *skb, struct genl_info *info)
 		return -EOPNOTSUPP;

 	for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
-		sinfo.links[i] = kzalloc(sizeof(*sinfo.links[0]), GFP_KERNEL);
+		sinfo.links[i] = kzalloc_obj(*sinfo.links[0], GFP_KERNEL);
 		if (!sinfo.links[i]) {
 			cfg80211_sinfo_release_content(&sinfo);
 			return -ENOMEM;
@@ -10157,7 +10157,7 @@ static int nl80211_set_reg(struct sk_buff *skb, struct genl_info *info)
 		goto out;
 	}

-	rd = kzalloc(struct_size(rd, reg_rules, num_rules), GFP_KERNEL);
+	rd = kzalloc_flex(*rd, reg_rules, num_rules, GFP_KERNEL);
 	if (!rd) {
 		r = -ENOMEM;
 		goto out;
@@ -11520,8 +11520,7 @@ static int nl80211_channel_switch(struct sk_buff *skb, struct genl_info *info)
 	if (err)
 		goto free;

-	csa_attrs = kcalloc(NL80211_ATTR_MAX + 1, sizeof(*csa_attrs),
-			    GFP_KERNEL);
+	csa_attrs = kzalloc_objs(*csa_attrs, NL80211_ATTR_MAX + 1, GFP_KERNEL);
 	if (!csa_attrs) {
 		err = -ENOMEM;
 		goto free;
@@ -11781,7 +11780,7 @@ static int nl80211_dump_scan(struct sk_buff *skb, struct netlink_callback *cb)
 	bool dump_include_use_data;
 	int err;

-	attrbuf = kcalloc(NUM_NL80211_ATTR, sizeof(*attrbuf), GFP_KERNEL);
+	attrbuf = kzalloc_objs(*attrbuf, NUM_NL80211_ATTR, GFP_KERNEL);
 	if (!attrbuf)
 		return -ENOMEM;

@@ -11921,7 +11920,7 @@ static int nl80211_dump_survey(struct sk_buff *skb, struct netlink_callback *cb)
 	int res;
 	bool radio_stats;

-	attrbuf = kcalloc(NUM_NL80211_ATTR, sizeof(*attrbuf), GFP_KERNEL);
+	attrbuf = kzalloc_objs(*attrbuf, NUM_NL80211_ATTR, GFP_KERNEL);
 	if (!attrbuf)
 		return -ENOMEM;

@@ -13112,8 +13111,7 @@ static int nl80211_testmode_dump(struct sk_buff *skb,
 			goto out_err;
 		}
 	} else {
-		attrbuf = kcalloc(NUM_NL80211_ATTR, sizeof(*attrbuf),
-				  GFP_KERNEL);
+		attrbuf = kzalloc_objs(*attrbuf, NUM_NL80211_ATTR, GFP_KERNEL);
 		if (!attrbuf) {
 			err = -ENOMEM;
 			goto out_err;
@@ -14310,9 +14308,8 @@ static int nl80211_set_cqm_rssi(struct genl_info *info,
 	}

 	if (n_thresholds) {
-		cqm_config = kzalloc(struct_size(cqm_config, rssi_thresholds,
-						 n_thresholds),
-				     GFP_KERNEL);
+		cqm_config = kzalloc_flex(*cqm_config, rssi_thresholds,
+					  n_thresholds, GFP_KERNEL);
 		if (!cqm_config)
 			return -ENOMEM;

@@ -14938,7 +14935,7 @@ static int nl80211_parse_wowlan_nd(struct cfg80211_registered_device *rdev,
 	struct nlattr **tb;
 	int err;

-	tb = kcalloc(NUM_NL80211_ATTR, sizeof(*tb), GFP_KERNEL);
+	tb = kzalloc_objs(*tb, NUM_NL80211_ATTR, GFP_KERNEL);
 	if (!tb)
 		return -ENOMEM;

@@ -15054,9 +15051,8 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info)
 		if (n_patterns > wowlan->n_patterns)
 			return -EINVAL;

-		new_triggers.patterns = kcalloc(n_patterns,
-						sizeof(new_triggers.patterns[0]),
-						GFP_KERNEL);
+		new_triggers.patterns = kzalloc_objs(new_triggers.patterns[0],
+						     n_patterns, GFP_KERNEL);
 		if (!new_triggers.patterns)
 			return -ENOMEM;

@@ -15303,8 +15299,8 @@ static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev,
 	if (n_patterns > coalesce->n_patterns)
 		return -EINVAL;

-	new_rule->patterns = kcalloc(n_patterns, sizeof(new_rule->patterns[0]),
-				     GFP_KERNEL);
+	new_rule->patterns = kzalloc_objs(new_rule->patterns[0], n_patterns,
+					  GFP_KERNEL);
 	if (!new_rule->patterns)
 		return -ENOMEM;

@@ -15382,8 +15378,7 @@ static int nl80211_set_coalesce(struct sk_buff *skb, struct genl_info *info)
 	if (n_rules > coalesce->n_rules)
 		return -EINVAL;

-	new_coalesce = kzalloc(struct_size(new_coalesce, rules, n_rules),
-			       GFP_KERNEL);
+	new_coalesce = kzalloc_flex(*new_coalesce, rules, n_rules, GFP_KERNEL);
 	if (!new_coalesce)
 		return -ENOMEM;

@@ -15543,7 +15538,7 @@ static int nl80211_register_beacons(struct sk_buff *skb, struct genl_info *info)
 	if (!(rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS))
 		return -EOPNOTSUPP;

-	nreg = kzalloc(sizeof(*nreg), GFP_KERNEL);
+	nreg = kzalloc_obj(*nreg, GFP_KERNEL);
 	if (!nreg)
 		return -ENOMEM;

@@ -15900,7 +15895,7 @@ static int handle_nan_filter(struct nlattr *attr_filter,

 	BUILD_BUG_ON(sizeof(*func->rx_filters) != sizeof(*func->tx_filters));

-	filter = kcalloc(n_entries, sizeof(*func->rx_filters), GFP_KERNEL);
+	filter = kzalloc_objs(*func->rx_filters, n_entries, GFP_KERNEL);
 	if (!filter)
 		return -ENOMEM;

@@ -15960,7 +15955,7 @@ static int nl80211_nan_add_func(struct sk_buff *skb,
 	if (err)
 		return err;

-	func = kzalloc(sizeof(*func), GFP_KERNEL);
+	func = kzalloc_obj(*func, GFP_KERNEL);
 	if (!func)
 		return -ENOMEM;

@@ -16099,8 +16094,8 @@ static int nl80211_nan_add_func(struct sk_buff *skb,

 			func->srf_num_macs = n_entries;
 			func->srf_macs =
-				kcalloc(n_entries, sizeof(*func->srf_macs),
-					GFP_KERNEL);
+				kzalloc_objs(*func->srf_macs, n_entries,
+					     GFP_KERNEL);
 			if (!func->srf_macs) {
 				err = -ENOMEM;
 				goto out;
@@ -16602,7 +16597,7 @@ static int nl80211_prepare_vendor_dump(struct sk_buff *skb,
 		return 0;
 	}

-	attrbuf = kcalloc(NUM_NL80211_ATTR, sizeof(*attrbuf), GFP_KERNEL);
+	attrbuf = kzalloc_objs(*attrbuf, NUM_NL80211_ATTR, GFP_KERNEL);
 	if (!attrbuf)
 		return -ENOMEM;

@@ -16833,7 +16828,7 @@ static int nl80211_set_qos_map(struct sk_buff *skb,
 		if (len % 2)
 			return -EINVAL;

-		qos_map = kzalloc(sizeof(struct cfg80211_qos_map), GFP_KERNEL);
+		qos_map = kzalloc_obj(struct cfg80211_qos_map, GFP_KERNEL);
 		if (!qos_map)
 			return -ENOMEM;

@@ -17467,8 +17462,7 @@ static int nl80211_set_tid_config(struct sk_buff *skb,
 			    rem_conf)
 		num_conf++;

-	tid_config = kzalloc(struct_size(tid_config, tid_conf, num_conf),
-			     GFP_KERNEL);
+	tid_config = kzalloc_flex(*tid_config, tid_conf, num_conf, GFP_KERNEL);
 	if (!tid_config)
 		return -ENOMEM;

@@ -17534,7 +17528,7 @@ static int nl80211_color_change(struct sk_buff *skb, struct genl_info *info)
 	if (err)
 		return err;

-	tb = kcalloc(NL80211_ATTR_MAX + 1, sizeof(*tb), GFP_KERNEL);
+	tb = kzalloc_objs(*tb, NL80211_ATTR_MAX + 1, GFP_KERNEL);
 	if (!tb)
 		return -ENOMEM;

@@ -18262,7 +18256,7 @@ static int nl80211_set_sar_specs(struct sk_buff *skb, struct genl_info *info)
 	if (specs > rdev->wiphy.sar_capa->num_freq_ranges)
 		return -EINVAL;

-	sar_spec = kzalloc(struct_size(sar_spec, sub_specs, specs), GFP_KERNEL);
+	sar_spec = kzalloc_flex(*sar_spec, sub_specs, specs, GFP_KERNEL);
 	if (!sar_spec)
 		return -ENOMEM;

diff --git a/net/wireless/of.c b/net/wireless/of.c
index de221f0edca5..35a3bcd84b6f 100644
--- a/net/wireless/of.c
+++ b/net/wireless/of.c
@@ -98,7 +98,7 @@ void wiphy_read_of_freq_limits(struct wiphy *wiphy)
 	}
 	n_freq_limits = len / sizeof(u32) / 2;

-	freq_limits = kcalloc(n_freq_limits, sizeof(*freq_limits), GFP_KERNEL);
+	freq_limits = kzalloc_objs(*freq_limits, n_freq_limits, GFP_KERNEL);
 	if (!freq_limits) {
 		err = -ENOMEM;
 		goto out_kfree;
diff --git a/net/wireless/pmsr.c b/net/wireless/pmsr.c
index 60e1e31c2185..41aa8636a243 100644
--- a/net/wireless/pmsr.c
+++ b/net/wireless/pmsr.c
@@ -312,7 +312,7 @@ int nl80211_pmsr_start(struct sk_buff *skb, struct genl_info *info)
 		}
 	}

-	req = kzalloc(struct_size(req, peers, count), GFP_KERNEL);
+	req = kzalloc_flex(*req, peers, count, GFP_KERNEL);
 	if (!req)
 		return -ENOMEM;
 	req->n_peers = count;
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 139cb27e5a81..d6f3282fe986 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -452,8 +452,7 @@ reg_copy_regd(const struct ieee80211_regdomain *src_regd)
 	struct ieee80211_regdomain *regd;
 	unsigned int i;

-	regd = kzalloc(struct_size(regd, reg_rules, src_regd->n_reg_rules),
-		       GFP_KERNEL);
+	regd = kzalloc_flex(*regd, reg_rules, src_regd->n_reg_rules, GFP_KERNEL);
 	if (!regd)
 		return ERR_PTR(-ENOMEM);

@@ -510,7 +509,7 @@ static int reg_schedule_apply(const struct ieee80211_regdomain *regdom)
 {
 	struct reg_regdb_apply_request *request;

-	request = kzalloc(sizeof(struct reg_regdb_apply_request), GFP_KERNEL);
+	request = kzalloc_obj(struct reg_regdb_apply_request, GFP_KERNEL);
 	if (!request) {
 		kfree(regdom);
 		return -ENOMEM;
@@ -933,8 +932,7 @@ static int regdb_query_country(const struct fwdb_header *db,
 	struct ieee80211_regdomain *regdom;
 	unsigned int i;

-	regdom = kzalloc(struct_size(regdom, reg_rules, coll->n_rules),
-			 GFP_KERNEL);
+	regdom = kzalloc_flex(*regdom, reg_rules, coll->n_rules, GFP_KERNEL);
 	if (!regdom)
 		return -ENOMEM;

@@ -1100,7 +1098,7 @@ int reg_reload_regdb(void)
 	/* reset regulatory domain */
 	current_regdomain = get_cfg80211_regdom();

-	request = kzalloc(sizeof(*request), GFP_KERNEL);
+	request = kzalloc_obj(*request, GFP_KERNEL);
 	if (!request) {
 		err = -ENOMEM;
 		goto out_unlock;
@@ -1532,7 +1530,7 @@ regdom_intersect(const struct ieee80211_regdomain *rd1,
 	if (!num_rules)
 		return NULL;

-	rd = kzalloc(struct_size(rd, reg_rules, num_rules), GFP_KERNEL);
+	rd = kzalloc_flex(*rd, reg_rules, num_rules, GFP_KERNEL);
 	if (!rd)
 		return NULL;

@@ -3224,7 +3222,7 @@ static int regulatory_hint_core(const char *alpha2)
 {
 	struct regulatory_request *request;

-	request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL);
+	request = kzalloc_obj(struct regulatory_request, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;

@@ -3250,7 +3248,7 @@ int regulatory_hint_user(const char *alpha2,
 	if (!is_world_regdom(alpha2) && !is_an_alpha2(alpha2))
 		return -EINVAL;

-	request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL);
+	request = kzalloc_obj(struct regulatory_request, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;

@@ -3320,7 +3318,7 @@ int regulatory_hint(struct wiphy *wiphy, const char *alpha2)

 	wiphy->regulatory_flags &= ~REGULATORY_CUSTOM_REG;

-	request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL);
+	request = kzalloc_obj(struct regulatory_request, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;

@@ -3353,7 +3351,7 @@ void regulatory_hint_country_ie(struct wiphy *wiphy, enum nl80211_band band,
 	if (country_ie_len < IEEE80211_COUNTRY_IE_MIN_LEN)
 		return;

-	request = kzalloc(sizeof(*request), GFP_KERNEL);
+	request = kzalloc_obj(*request, GFP_KERNEL);
 	if (!request)
 		return;

@@ -3666,7 +3664,7 @@ void regulatory_hint_found_beacon(struct wiphy *wiphy,
 	if (processing)
 		return;

-	reg_beacon = kzalloc(sizeof(struct reg_beacon), gfp);
+	reg_beacon = kzalloc_obj(struct reg_beacon, gfp);
 	if (!reg_beacon)
 		return;

diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index eb0e77813d46..89174a9049a3 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -729,7 +729,7 @@ cfg80211_parse_colocated_ap_iter(void *_data, u8 type,
 					   bss_params)))
 		return RNR_ITER_CONTINUE;

-	entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+	entry = kzalloc_obj(*entry, GFP_ATOMIC);
 	if (!entry)
 		return RNR_ITER_ERROR;

@@ -895,7 +895,7 @@ static int cfg80211_scan_6ghz(struct cfg80211_registered_device *rdev,
 			if (ret)
 				continue;

-			entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+			entry = kzalloc_obj(*entry, GFP_ATOMIC);
 			if (!entry)
 				continue;

@@ -1085,8 +1085,7 @@ int cfg80211_scan(struct cfg80211_registered_device *rdev)
 	if (!n_channels)
 		return cfg80211_scan_6ghz(rdev, true);

-	request = kzalloc(struct_size(request, req.channels, n_channels),
-			  GFP_KERNEL);
+	request = kzalloc_flex(*request, req.channels, n_channels, GFP_KERNEL);
 	if (!request)
 		return -ENOMEM;

@@ -2694,7 +2693,7 @@ cfg80211_defrag_mle(const struct element *mle, const u8 *ie, size_t ielen,
 		buf_len += elem->datalen;
 	}

-	res = kzalloc(struct_size(res, data, buf_len), gfp);
+	res = kzalloc_flex(*res, data, buf_len, gfp);
 	if (!res)
 		return NULL;

@@ -2910,9 +2909,8 @@ cfg80211_gen_reporter_rnr(struct cfg80211_bss *source_bss, bool is_mbssid,
 		le16_encode_bits(bss_change_count,
 				 IEEE80211_RNR_MLD_PARAMS_BSS_CHANGE_COUNT);

-	res = kzalloc(struct_size(res, data,
-				  sizeof(ap_info) + ap_info.tbtt_info_len),
-		      gfp);
+	res = kzalloc_flex(*res, data, sizeof(ap_info) + ap_info.tbtt_info_len,
+			   gfp);
 	if (!res)
 		return NULL;

diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 4e629ca305bc..cb1a75fda5ca 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -570,7 +570,7 @@ static int cfg80211_sme_connect(struct wireless_dev *wdev,
 	if (wdev->conn)
 		return -EINPROGRESS;

-	wdev->conn = kzalloc(sizeof(*wdev->conn), GFP_KERNEL);
+	wdev->conn = kzalloc_obj(*wdev->conn, GFP_KERNEL);
 	if (!wdev->conn)
 		return -ENOMEM;

diff --git a/net/wireless/tests/util.c b/net/wireless/tests/util.c
index 8abdaeb820ce..6f870b06307d 100644
--- a/net/wireless/tests/util.c
+++ b/net/wireless/tests/util.c
@@ -17,7 +17,7 @@ int t_wiphy_init(struct kunit_resource *resource, void *ctx)
 	struct wiphy *wiphy;
 	struct t_wiphy_priv *priv;

-	ops = kzalloc(sizeof(*ops), GFP_KERNEL);
+	ops = kzalloc_obj(*ops, GFP_KERNEL);
 	KUNIT_ASSERT_NOT_NULL(test, ops);

 	wiphy = wiphy_new_nm(ops, sizeof(*priv), "kunit");
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 404fe604a8db..b78530c3e3f8 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -2713,8 +2713,8 @@ bool cfg80211_does_bw_fit_range(const struct ieee80211_freq_range *freq_range,
 int cfg80211_link_sinfo_alloc_tid_stats(struct link_station_info *link_sinfo,
 					gfp_t gfp)
 {
-	link_sinfo->pertid = kcalloc(IEEE80211_NUM_TIDS + 1,
-				     sizeof(*link_sinfo->pertid), gfp);
+	link_sinfo->pertid = kzalloc_objs(*link_sinfo->pertid,
+					  IEEE80211_NUM_TIDS + 1, gfp);
 	if (!link_sinfo->pertid)
 		return -ENOMEM;

@@ -2724,9 +2724,8 @@ EXPORT_SYMBOL(cfg80211_link_sinfo_alloc_tid_stats);

 int cfg80211_sinfo_alloc_tid_stats(struct station_info *sinfo, gfp_t gfp)
 {
-	sinfo->pertid = kcalloc(IEEE80211_NUM_TIDS + 1,
-				sizeof(*(sinfo->pertid)),
-				gfp);
+	sinfo->pertid = kzalloc_objs(*(sinfo->pertid), IEEE80211_NUM_TIDS + 1,
+				     gfp);
 	if (!sinfo->pertid)
 		return -ENOMEM;

diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
index 1241fda78a68..3ce845cd1936 100644
--- a/net/wireless/wext-compat.c
+++ b/net/wireless/wext-compat.c
@@ -414,8 +414,7 @@ static int cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
 	 * to do it first in case the allocation fails. Don't use wext.
 	 */
 	if (!wdev->wext.keys) {
-		wdev->wext.keys = kzalloc(sizeof(*wdev->wext.keys),
-					  GFP_KERNEL);
+		wdev->wext.keys = kzalloc_obj(*wdev->wext.keys, GFP_KERNEL);
 		if (!wdev->wext.keys)
 			return -ENOMEM;
 		for (i = 0; i < 4; i++)
diff --git a/net/x25/x25_forward.c b/net/x25/x25_forward.c
index 21b30b56e889..3b406906eb9e 100644
--- a/net/x25/x25_forward.c
+++ b/net/x25/x25_forward.c
@@ -55,8 +55,7 @@ int x25_forward_call(struct x25_address *dest_addr, struct x25_neigh *from,

 	/* Save the forwarding details for future traffic */
 	if (!same_lci){
-		if ((new_frwd = kmalloc(sizeof(struct x25_forward),
-						GFP_ATOMIC)) == NULL){
+		if ((new_frwd = kmalloc_obj(struct x25_forward, GFP_ATOMIC)) == NULL){
 			rc = -ENOMEM;
 			goto out_put_nb;
 		}
diff --git a/net/x25/x25_link.c b/net/x25/x25_link.c
index 4608aa5b4f31..d1e8cd81c214 100644
--- a/net/x25/x25_link.c
+++ b/net/x25/x25_link.c
@@ -262,7 +262,7 @@ void x25_link_terminated(struct x25_neigh *nb)
  */
 void x25_link_device_up(struct net_device *dev)
 {
-	struct x25_neigh *nb = kmalloc(sizeof(*nb), GFP_ATOMIC);
+	struct x25_neigh *nb = kmalloc_obj(*nb, GFP_ATOMIC);

 	if (!nb)
 		return;
diff --git a/net/x25/x25_route.c b/net/x25/x25_route.c
index 647f325ed867..b28055f852df 100644
--- a/net/x25/x25_route.c
+++ b/net/x25/x25_route.c
@@ -37,7 +37,7 @@ static int x25_add_route(struct x25_address *address, unsigned int sigdigits,
 			goto out;
 	}

-	rt = kmalloc(sizeof(*rt), GFP_ATOMIC);
+	rt = kmalloc_obj(*rt, GFP_ATOMIC);
 	rc = -ENOMEM;
 	if (!rt)
 		goto out;
diff --git a/net/xdp/xdp_umem.c b/net/xdp/xdp_umem.c
index 9f76ca591d54..4c94ec312d75 100644
--- a/net/xdp/xdp_umem.c
+++ b/net/xdp/xdp_umem.c
@@ -97,7 +97,8 @@ static int xdp_umem_pin_pages(struct xdp_umem *umem, unsigned long address)
 	long npgs;
 	int err;

-	umem->pgs = kvcalloc(umem->npgs, sizeof(*umem->pgs), GFP_KERNEL | __GFP_NOWARN);
+	umem->pgs = kvzalloc_objs(*umem->pgs, umem->npgs,
+				  GFP_KERNEL | __GFP_NOWARN);
 	if (!umem->pgs)
 		return -ENOMEM;

@@ -249,7 +250,7 @@ struct xdp_umem *xdp_umem_create(struct xdp_umem_reg *mr)
 	struct xdp_umem *umem;
 	int err;

-	umem = kzalloc(sizeof(*umem), GFP_KERNEL);
+	umem = kzalloc_obj(*umem, GFP_KERNEL);
 	if (!umem)
 		return ERR_PTR(-ENOMEM);

diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c
index cd5125b6af53..a8f932b28ee3 100644
--- a/net/xdp/xsk_buff_pool.c
+++ b/net/xdp/xsk_buff_pool.c
@@ -42,8 +42,8 @@ void xp_destroy(struct xsk_buff_pool *pool)

 int xp_alloc_tx_descs(struct xsk_buff_pool *pool, struct xdp_sock *xs)
 {
-	pool->tx_descs = kvcalloc(xs->tx->nentries, sizeof(*pool->tx_descs),
-				  GFP_KERNEL);
+	pool->tx_descs = kvzalloc_objs(*pool->tx_descs, xs->tx->nentries,
+				       GFP_KERNEL);
 	if (!pool->tx_descs)
 		return -ENOMEM;

@@ -59,11 +59,11 @@ struct xsk_buff_pool *xp_create_and_assign_umem(struct xdp_sock *xs,
 	u32 i, entries;

 	entries = unaligned ? umem->chunks : 0;
-	pool = kvzalloc(struct_size(pool, free_heads, entries),	GFP_KERNEL);
+	pool = kvzalloc_flex(*pool, free_heads, entries, GFP_KERNEL);
 	if (!pool)
 		goto out;

-	pool->heads = kvcalloc(umem->chunks, sizeof(*pool->heads), GFP_KERNEL);
+	pool->heads = kvzalloc_objs(*pool->heads, umem->chunks, GFP_KERNEL);
 	if (!pool->heads)
 		goto out;

@@ -328,11 +328,12 @@ static struct xsk_dma_map *xp_create_dma_map(struct device *dev, struct net_devi
 {
 	struct xsk_dma_map *dma_map;

-	dma_map = kzalloc(sizeof(*dma_map), GFP_KERNEL);
+	dma_map = kzalloc_obj(*dma_map, GFP_KERNEL);
 	if (!dma_map)
 		return NULL;

-	dma_map->dma_pages = kvcalloc(nr_pages, sizeof(*dma_map->dma_pages), GFP_KERNEL);
+	dma_map->dma_pages = kvzalloc_objs(*dma_map->dma_pages, nr_pages,
+					   GFP_KERNEL);
 	if (!dma_map->dma_pages) {
 		kfree(dma_map);
 		return NULL;
@@ -420,7 +421,8 @@ static int xp_init_dma_info(struct xsk_buff_pool *pool, struct xsk_dma_map *dma_
 		}
 	}

-	pool->dma_pages = kvcalloc(dma_map->dma_pages_cnt, sizeof(*pool->dma_pages), GFP_KERNEL);
+	pool->dma_pages = kvzalloc_objs(*pool->dma_pages,
+					dma_map->dma_pages_cnt, GFP_KERNEL);
 	if (!pool->dma_pages)
 		return -ENOMEM;

diff --git a/net/xdp/xsk_queue.c b/net/xdp/xsk_queue.c
index d2c264030017..ef089b9c4fc8 100644
--- a/net/xdp/xsk_queue.c
+++ b/net/xdp/xsk_queue.c
@@ -26,7 +26,7 @@ struct xsk_queue *xskq_create(u32 nentries, bool umem_queue)
 	struct xsk_queue *q;
 	size_t size;

-	q = kzalloc(sizeof(*q), GFP_KERNEL);
+	q = kzalloc_obj(*q, GFP_KERNEL);
 	if (!q)
 		return NULL;

diff --git a/net/xfrm/espintcp.c b/net/xfrm/espintcp.c
index bf744ac9d5a7..3f6eda9364ec 100644
--- a/net/xfrm/espintcp.c
+++ b/net/xfrm/espintcp.c
@@ -465,7 +465,7 @@ static int espintcp_init_sk(struct sock *sk)
 	if (sk->sk_user_data)
 		return -EBUSY;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;

diff --git a/net/xfrm/xfrm_ipcomp.c b/net/xfrm/xfrm_ipcomp.c
index 43fdc6ed8dd1..35f8236059a7 100644
--- a/net/xfrm/xfrm_ipcomp.c
+++ b/net/xfrm/xfrm_ipcomp.c
@@ -336,7 +336,7 @@ int ipcomp_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack)
 	}

 	err = -ENOMEM;
-	ipcd = kzalloc(sizeof(*ipcd), GFP_KERNEL);
+	ipcd = kzalloc_obj(*ipcd, GFP_KERNEL);
 	if (!ipcd)
 		goto out;

diff --git a/net/xfrm/xfrm_iptfs.c b/net/xfrm/xfrm_iptfs.c
index 3b6d7284fc70..92b9a5b80804 100644
--- a/net/xfrm/xfrm_iptfs.c
+++ b/net/xfrm/xfrm_iptfs.c
@@ -2526,8 +2526,8 @@ static int iptfs_user_init(struct net *net, struct xfrm_state *x,
 			nla_get_u16(attrs[XFRMA_IPTFS_REORDER_WINDOW]);
 	/* saved array is for saving 1..N seq nums from wantseq */
 	if (xc->reorder_win_size) {
-		xtfs->w_saved = kcalloc(xc->reorder_win_size,
-					sizeof(*xtfs->w_saved), GFP_KERNEL);
+		xtfs->w_saved = kzalloc_objs(*xtfs->w_saved,
+					     xc->reorder_win_size, GFP_KERNEL);
 		if (!xtfs->w_saved) {
 			NL_SET_ERR_MSG(extack, "Cannot alloc reorder window");
 			return -ENOMEM;
@@ -2658,8 +2658,9 @@ static int iptfs_clone_state(struct xfrm_state *x, struct xfrm_state *orig)

 	xtfs->ra_newskb = NULL;
 	if (xtfs->cfg.reorder_win_size) {
-		xtfs->w_saved = kcalloc(xtfs->cfg.reorder_win_size,
-					sizeof(*xtfs->w_saved), GFP_KERNEL);
+		xtfs->w_saved = kzalloc_objs(*xtfs->w_saved,
+					     xtfs->cfg.reorder_win_size,
+					     GFP_KERNEL);
 		if (!xtfs->w_saved) {
 			kfree_sensitive(xtfs);
 			return -ENOMEM;
@@ -2677,7 +2678,7 @@ static int iptfs_init_state(struct xfrm_state *x)
 		/* We have arrived here from xfrm_state_clone() */
 		xtfs = x->mode_data;
 	} else {
-		xtfs = kzalloc(sizeof(*xtfs), GFP_KERNEL);
+		xtfs = kzalloc_obj(*xtfs, GFP_KERNEL);
 		if (!xtfs)
 			return -ENOMEM;
 	}
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index 62486f866975..ee8bb445c4d3 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -429,7 +429,7 @@ struct xfrm_policy *xfrm_policy_alloc(struct net *net, gfp_t gfp)
 {
 	struct xfrm_policy *policy;

-	policy = kzalloc(sizeof(struct xfrm_policy), gfp);
+	policy = kzalloc_obj(struct xfrm_policy, gfp);

 	if (policy) {
 		write_pnet(&policy->xp_net, net);
@@ -765,7 +765,7 @@ xfrm_policy_inexact_alloc_bin(const struct xfrm_policy *pol, u8 dir)
 	if (bin)
 		return bin;

-	bin = kzalloc(sizeof(*bin), GFP_ATOMIC);
+	bin = kzalloc_obj(*bin, GFP_ATOMIC);
 	if (!bin)
 		return NULL;

@@ -836,7 +836,7 @@ xfrm_pol_inexact_node_alloc(const xfrm_address_t *addr, u8 prefixlen)
 {
 	struct xfrm_pol_inexact_node *node;

-	node = kzalloc(sizeof(*node), GFP_ATOMIC);
+	node = kzalloc_obj(*node, GFP_ATOMIC);
 	if (node)
 		xfrm_pol_inexact_node_init(node, addr, prefixlen);

diff --git a/scripts/livepatch/init.c b/scripts/livepatch/init.c
index 638c95cffe76..bbfd2e479099 100644
--- a/scripts/livepatch/init.c
+++ b/scripts/livepatch/init.c
@@ -28,7 +28,7 @@ static int __init livepatch_mod_init(void)
 		goto err;
 	}

-	patch = kzalloc(sizeof(*patch), GFP_KERNEL);
+	patch = kzalloc_obj(*patch, GFP_KERNEL);
 	if (!patch) {
 		ret = -ENOMEM;
 		goto err;
diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c
index 5a848c1be056..283e622a7ccc 100644
--- a/security/apparmor/apparmorfs.c
+++ b/security/apparmor/apparmorfs.c
@@ -570,7 +570,7 @@ static ssize_t ns_revision_read(struct file *file, char __user *buf,

 static int ns_revision_open(struct inode *inode, struct file *file)
 {
-	struct aa_revision *rev = kzalloc(sizeof(*rev), GFP_KERNEL);
+	struct aa_revision *rev = kzalloc_obj(*rev, GFP_KERNEL);

 	if (!rev)
 		return -ENOMEM;
diff --git a/security/apparmor/audit.c b/security/apparmor/audit.c
index ac89602aa2d9..4a60b6fda75f 100644
--- a/security/apparmor/audit.c
+++ b/security/apparmor/audit.c
@@ -230,7 +230,7 @@ int aa_audit_rule_init(u32 field, u32 op, char *rulestr, void **vrule, gfp_t gfp
 		return -EINVAL;
 	}

-	rule = kzalloc(sizeof(struct aa_audit_rule), gfp);
+	rule = kzalloc_obj(struct aa_audit_rule, gfp);

 	if (!rule)
 		return -ENOMEM;
diff --git a/security/apparmor/label.c b/security/apparmor/label.c
index 03a92a52acf9..e478283bc514 100644
--- a/security/apparmor/label.c
+++ b/security/apparmor/label.c
@@ -61,7 +61,7 @@ struct aa_proxy *aa_alloc_proxy(struct aa_label *label, gfp_t gfp)
 {
 	struct aa_proxy *new;

-	new = kzalloc(sizeof(struct aa_proxy), gfp);
+	new = kzalloc_obj(struct aa_proxy, gfp);
 	if (new) {
 		kref_init(&new->count);
 		rcu_assign_pointer(new->label, aa_get_label(label));
@@ -434,7 +434,7 @@ struct aa_label *aa_label_alloc(int size, struct aa_proxy *proxy, gfp_t gfp)
 	AA_BUG(size < 1);

 	/*  + 1 for null terminator entry on vec */
-	new = kzalloc(struct_size(new, vec, size + 1), gfp);
+	new = kzalloc_flex(*new, vec, size + 1, gfp);
 	AA_DEBUG(DEBUG_LABEL, "%s (%p)\n", __func__, new);
 	if (!new)
 		goto fail;
diff --git a/security/apparmor/lib.c b/security/apparmor/lib.c
index d0b82771df01..e41ff57798b2 100644
--- a/security/apparmor/lib.c
+++ b/security/apparmor/lib.c
@@ -125,7 +125,7 @@ bool aa_resize_str_table(struct aa_str_table *t, int newsize, gfp_t gfp)

 	if (t->size == newsize)
 		return true;
-	n = kcalloc(newsize, sizeof(*n), gfp);
+	n = kzalloc_objs(*n, newsize, gfp);
 	if (!n)
 		return false;
 	for (i = 0; i < min(t->size, newsize); i++)
@@ -235,7 +235,7 @@ __counted char *aa_str_alloc(int size, gfp_t gfp)
 {
 	struct counted_str *str;

-	str = kmalloc(struct_size(str, name, size), gfp);
+	str = kmalloc_flex(*str, name, size, gfp);
 	if (!str)
 		return NULL;

diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
index dcd066e04d2b..92ea1bc7b9e0 100644
--- a/security/apparmor/lsm.c
+++ b/security/apparmor/lsm.c
@@ -2468,7 +2468,7 @@ static int __init aa_setup_dfa_engine(void)
 		goto fail;
 	}
 	nullpdb->dfa = aa_get_dfa(nulldfa);
-	nullpdb->perms = kcalloc(2, sizeof(struct aa_perms), GFP_KERNEL);
+	nullpdb->perms = kzalloc_objs(struct aa_perms, 2, GFP_KERNEL);
 	if (!nullpdb->perms)
 		goto fail;
 	nullpdb->size = 2;
diff --git a/security/apparmor/match.c b/security/apparmor/match.c
index bbeb3be68572..5ee25d4016e0 100644
--- a/security/apparmor/match.c
+++ b/security/apparmor/match.c
@@ -301,7 +301,7 @@ struct aa_dfa *aa_dfa_unpack(void *blob, size_t size, int flags)
 	int error = -ENOMEM;
 	char *data = blob;
 	struct table_header *table = NULL;
-	struct aa_dfa *dfa = kzalloc(sizeof(struct aa_dfa), GFP_KERNEL);
+	struct aa_dfa *dfa = kzalloc_obj(struct aa_dfa, GFP_KERNEL);
 	if (!dfa)
 		goto fail;

diff --git a/security/apparmor/policy.c b/security/apparmor/policy.c
index a64cfd24cedc..9108d74c6b46 100644
--- a/security/apparmor/policy.c
+++ b/security/apparmor/policy.c
@@ -131,7 +131,7 @@ void aa_pdb_free_kref(struct kref *kref)

 struct aa_policydb *aa_alloc_pdb(gfp_t gfp)
 {
-	struct aa_policydb *pdb = kzalloc(sizeof(struct aa_policydb), gfp);
+	struct aa_policydb *pdb = kzalloc_obj(struct aa_policydb, gfp);

 	if (!pdb)
 		return NULL;
@@ -275,7 +275,7 @@ struct aa_ruleset *aa_alloc_ruleset(gfp_t gfp)
 {
 	struct aa_ruleset *rules;

-	rules = kzalloc(sizeof(*rules), gfp);
+	rules = kzalloc_obj(*rules, gfp);

 	return rules;
 }
@@ -349,7 +349,7 @@ struct aa_profile *aa_alloc_profile(const char *hname, struct aa_proxy *proxy,
 	 * this adds space for a single ruleset in the rules section of the
 	 * label
 	 */
-	profile = kzalloc(struct_size(profile, label.rules, 1), gfp);
+	profile = kzalloc_flex(*profile, label.rules, 1, gfp);
 	if (!profile)
 		return NULL;

diff --git a/security/apparmor/policy_compat.c b/security/apparmor/policy_compat.c
index c863fc10a6f7..928dbb10cec1 100644
--- a/security/apparmor/policy_compat.c
+++ b/security/apparmor/policy_compat.c
@@ -158,7 +158,7 @@ static struct aa_perms *compute_fperms(struct aa_dfa *dfa,

 	state_count = dfa->tables[YYTD_ID_BASE]->td_lolen;
 	/* DFAs are restricted from having a state_count of less than 2 */
-	table = kvcalloc(state_count * 2, sizeof(struct aa_perms), GFP_KERNEL);
+	table = kvzalloc_objs(struct aa_perms, state_count * 2, GFP_KERNEL);
 	if (!table)
 		return NULL;
 	*size = state_count * 2;
@@ -182,7 +182,7 @@ static struct aa_perms *compute_xmatch_perms(struct aa_dfa *xmatch,

 	state_count = xmatch->tables[YYTD_ID_BASE]->td_lolen;
 	/* DFAs are restricted from having a state_count of less than 2 */
-	perms = kvcalloc(state_count, sizeof(struct aa_perms), GFP_KERNEL);
+	perms = kvzalloc_objs(struct aa_perms, state_count, GFP_KERNEL);
 	if (!perms)
 		return NULL;
 	*size = state_count;
@@ -257,7 +257,7 @@ static struct aa_perms *compute_perms(struct aa_dfa *dfa, u32 version,

 	state_count = dfa->tables[YYTD_ID_BASE]->td_lolen;
 	/* DFAs are restricted from having a state_count of less than 2 */
-	table = kvcalloc(state_count, sizeof(struct aa_perms), GFP_KERNEL);
+	table = kvzalloc_objs(struct aa_perms, state_count, GFP_KERNEL);
 	if (!table)
 		return NULL;
 	*size = state_count;
diff --git a/security/apparmor/policy_ns.c b/security/apparmor/policy_ns.c
index 64783ca3b0f2..099b71957ccb 100644
--- a/security/apparmor/policy_ns.c
+++ b/security/apparmor/policy_ns.c
@@ -106,7 +106,7 @@ static struct aa_ns *alloc_ns(const char *prefix, const char *name)
 {
 	struct aa_ns *ns;

-	ns = kzalloc(sizeof(*ns), GFP_KERNEL);
+	ns = kzalloc_obj(*ns, GFP_KERNEL);
 	AA_DEBUG(DEBUG_POLICY, "%s(%p)\n", __func__, ns);
 	if (!ns)
 		return NULL;
diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c
index dc908e1f5a88..9001c6ebc235 100644
--- a/security/apparmor/policy_unpack.c
+++ b/security/apparmor/policy_unpack.c
@@ -145,7 +145,7 @@ struct aa_loaddata *aa_loaddata_alloc(size_t size)
 {
 	struct aa_loaddata *d;

-	d = kzalloc(sizeof(*d), GFP_KERNEL);
+	d = kzalloc_obj(*d, GFP_KERNEL);
 	if (d == NULL)
 		return ERR_PTR(-ENOMEM);
 	d->data = kvzalloc(size, GFP_KERNEL);
@@ -528,8 +528,7 @@ static int unpack_strs_table(struct aa_ext *e, const char *name, bool multi,
 			 * for size check here
 			 */
 			goto fail;
-		table = kcalloc(size, sizeof(struct aa_str_table_ent),
-				GFP_KERNEL);
+		table = kzalloc_objs(struct aa_str_table_ent, size, GFP_KERNEL);
 		if (!table) {
 			error = -ENOMEM;
 			goto fail;
@@ -612,8 +611,8 @@ static bool unpack_secmark(struct aa_ext *e, struct aa_ruleset *rules)
 		if (!aa_unpack_array(e, NULL, &size))
 			goto fail;

-		rules->secmark = kcalloc(size, sizeof(struct aa_secmark),
-					   GFP_KERNEL);
+		rules->secmark = kzalloc_objs(struct aa_secmark, size,
+					      GFP_KERNEL);
 		if (!rules->secmark)
 			goto fail;

@@ -810,7 +809,7 @@ static int unpack_tag_headers(struct aa_ext *e, struct aa_tags_struct *tags)

 	if (!aa_unpack_array(e, "hdrs", &size))
 		goto fail_reset;
-	hdrs = kcalloc(size, sizeof(struct aa_tags_header), GFP_KERNEL);
+	hdrs = kzalloc_objs(struct aa_tags_header, size, GFP_KERNEL);
 	if (!hdrs) {
 		error = -ENOMEM;
 		goto fail_reset;
@@ -923,7 +922,7 @@ static ssize_t unpack_perms_table(struct aa_ext *e, struct aa_perms **perms)
 			goto fail_reset;
 		if (!aa_unpack_array(e, NULL, &size))
 			goto fail_reset;
-		*perms = kcalloc(size, sizeof(struct aa_perms), GFP_KERNEL);
+		*perms = kzalloc_objs(struct aa_perms, size, GFP_KERNEL);
 		if (!*perms) {
 			e->pos = pos;
 			return -ENOMEM;
@@ -1321,7 +1320,7 @@ static struct aa_profile *unpack_profile(struct aa_ext *e, char **ns_name)
 	error = -EPROTO;
 	if (aa_unpack_nameX(e, AA_STRUCT, "data")) {
 		info = "out of memory";
-		profile->data = kzalloc(sizeof(*profile->data), GFP_KERNEL);
+		profile->data = kzalloc_obj(*profile->data, GFP_KERNEL);
 		if (!profile->data) {
 			error = -ENOMEM;
 			goto fail;
@@ -1339,7 +1338,7 @@ static struct aa_profile *unpack_profile(struct aa_ext *e, char **ns_name)
 		}

 		while (aa_unpack_strdup(e, &key, NULL)) {
-			data = kzalloc(sizeof(*data), GFP_KERNEL);
+			data = kzalloc_obj(*data, GFP_KERNEL);
 			if (!data) {
 				kfree_sensitive(key);
 				error = -ENOMEM;
@@ -1584,7 +1583,7 @@ void aa_load_ent_free(struct aa_load_ent *ent)

 struct aa_load_ent *aa_load_ent_alloc(void)
 {
-	struct aa_load_ent *ent = kzalloc(sizeof(*ent), GFP_KERNEL);
+	struct aa_load_ent *ent = kzalloc_obj(*ent, GFP_KERNEL);
 	if (ent)
 		INIT_LIST_HEAD(&ent->list);
 	return ent;
diff --git a/security/device_cgroup.c b/security/device_cgroup.c
index 7fec575d32d6..27610fa31b61 100644
--- a/security/device_cgroup.c
+++ b/security/device_cgroup.c
@@ -223,7 +223,7 @@ devcgroup_css_alloc(struct cgroup_subsys_state *parent_css)
 {
 	struct dev_cgroup *dev_cgroup;

-	dev_cgroup = kzalloc(sizeof(*dev_cgroup), GFP_KERNEL);
+	dev_cgroup = kzalloc_obj(*dev_cgroup, GFP_KERNEL);
 	if (!dev_cgroup)
 		return ERR_PTR(-ENOMEM);
 	INIT_LIST_HEAD(&dev_cgroup->exceptions);
diff --git a/security/integrity/digsig.c b/security/integrity/digsig.c
index 45c3e5dda355..aec350abad86 100644
--- a/security/integrity/digsig.c
+++ b/security/integrity/digsig.c
@@ -141,7 +141,7 @@ int __init integrity_init_keyring(const unsigned int id)
 	if (!IS_ENABLED(CONFIG_INTEGRITY_TRUSTED_KEYRING))
 		return 0;

-	restriction = kzalloc(sizeof(struct key_restriction), GFP_KERNEL);
+	restriction = kzalloc_obj(struct key_restriction, GFP_KERNEL);
 	if (!restriction)
 		return -ENOMEM;

diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c
index 73d500a375cb..41b053c900f2 100644
--- a/security/integrity/evm/evm_main.c
+++ b/security/integrity/evm/evm_main.c
@@ -1045,7 +1045,7 @@ int evm_inode_init_security(struct inode *inode, struct inode *dir,
 		  "%s: xattrs terminator is not the first non-filled slot\n",
 		  __func__);

-	xattr_data = kzalloc(sizeof(*xattr_data), GFP_NOFS);
+	xattr_data = kzalloc_obj(*xattr_data, GFP_NOFS);
 	if (!xattr_data)
 		return -ENOMEM;

diff --git a/security/integrity/evm/evm_secfs.c b/security/integrity/evm/evm_secfs.c
index c26724690cec..a8893b90a0fa 100644
--- a/security/integrity/evm/evm_secfs.c
+++ b/security/integrity/evm/evm_secfs.c
@@ -199,7 +199,7 @@ static ssize_t evm_write_xattrs(struct file *file, const char __user *buf,
 	if (!ab && IS_ENABLED(CONFIG_AUDIT))
 		return -ENOMEM;

-	xattr = kmalloc(sizeof(struct xattr_list), GFP_KERNEL);
+	xattr = kmalloc_obj(struct xattr_list, GFP_KERNEL);
 	if (!xattr) {
 		err = -ENOMEM;
 		goto out;
diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c
index c6d1c7be8a3e..d15becc8c640 100644
--- a/security/integrity/ima/ima_api.c
+++ b/security/integrity/ima/ima_api.c
@@ -48,13 +48,14 @@ int ima_alloc_init_template(struct ima_event_data *event_data,
 	else
 		template_desc = ima_template_desc_current();

-	*entry = kzalloc(struct_size(*entry, template_data,
-				     template_desc->num_fields), GFP_NOFS);
+	*entry = kzalloc_flex(**entry, template_data, template_desc->num_fields,
+			      GFP_NOFS);
 	if (!*entry)
 		return -ENOMEM;

-	digests = kcalloc(NR_BANKS(ima_tpm_chip) + ima_extra_slots,
-			  sizeof(*digests), GFP_NOFS);
+	digests = kzalloc_objs(*digests,
+			       NR_BANKS(ima_tpm_chip) + ima_extra_slots,
+			       GFP_NOFS);
 	if (!digests) {
 		kfree(*entry);
 		*entry = NULL;
diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c
index 6f5696d999d0..d4af5f0e7d6c 100644
--- a/security/integrity/ima/ima_crypto.c
+++ b/security/integrity/ima/ima_crypto.c
@@ -138,8 +138,9 @@ int __init ima_init_crypto(void)
 	if (ima_hash_algo_idx < 0)
 		ima_hash_algo_idx = NR_BANKS(ima_tpm_chip) + ima_extra_slots++;

-	ima_algo_array = kcalloc(NR_BANKS(ima_tpm_chip) + ima_extra_slots,
-				 sizeof(*ima_algo_array), GFP_KERNEL);
+	ima_algo_array = kzalloc_objs(*ima_algo_array,
+				      NR_BANKS(ima_tpm_chip) + ima_extra_slots,
+				      GFP_KERNEL);
 	if (!ima_algo_array) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/security/integrity/ima/ima_modsig.c b/security/integrity/ima/ima_modsig.c
index 3265d744d5ce..daeeddae3878 100644
--- a/security/integrity/ima/ima_modsig.c
+++ b/security/integrity/ima/ima_modsig.c
@@ -65,7 +65,7 @@ int ima_read_modsig(enum ima_hooks func, const void *buf, loff_t buf_len,
 	buf_len -= sig_len + sizeof(*sig);

 	/* Allocate sig_len additional bytes to hold the raw PKCS#7 data. */
-	hdr = kzalloc(struct_size(hdr, raw_pkcs7, sig_len), GFP_KERNEL);
+	hdr = kzalloc_flex(*hdr, raw_pkcs7, sig_len, GFP_KERNEL);
 	if (!hdr)
 		return -ENOMEM;

diff --git a/security/integrity/ima/ima_mok.c b/security/integrity/ima/ima_mok.c
index 95cc31525c57..c647f4fd114d 100644
--- a/security/integrity/ima/ima_mok.c
+++ b/security/integrity/ima/ima_mok.c
@@ -27,7 +27,7 @@ static __init int ima_mok_init(void)

 	pr_notice("Allocating IMA blacklist keyring.\n");

-	restriction = kzalloc(sizeof(struct key_restriction), GFP_KERNEL);
+	restriction = kzalloc_obj(struct key_restriction, GFP_KERNEL);
 	if (!restriction)
 		panic("Can't allocate IMA blacklist restriction.");

diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c
index 8fbd8755f5bc..c99f52458cd5 100644
--- a/security/integrity/ima/ima_policy.c
+++ b/security/integrity/ima/ima_policy.c
@@ -342,7 +342,7 @@ static struct ima_rule_opt_list *ima_alloc_rule_opt_list(const substring_t *src)
 		return ERR_PTR(-EINVAL);
 	}

-	opt_list = kzalloc(struct_size(opt_list, items, count), GFP_KERNEL);
+	opt_list = kzalloc_flex(*opt_list, items, count, GFP_KERNEL);
 	if (!opt_list) {
 		kfree(src_copy);
 		return ERR_PTR(-ENOMEM);
@@ -921,8 +921,8 @@ static int __init ima_init_arch_policy(void)
 	for (rules = arch_rules; *rules != NULL; rules++)
 		arch_entries++;

-	arch_policy_entry = kcalloc(arch_entries + 1,
-				    sizeof(*arch_policy_entry), GFP_KERNEL);
+	arch_policy_entry = kzalloc_objs(*arch_policy_entry, arch_entries + 1,
+					 GFP_KERNEL);
 	if (!arch_policy_entry)
 		return 0;

@@ -1976,7 +1976,7 @@ ssize_t ima_parse_add_rule(char *rule)
 	if (*p == '#' || *p == '\0')
 		return len;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		integrity_audit_msg(AUDIT_INTEGRITY_STATUS, NULL,
 				    NULL, op, "-ENOMEM", -ENOMEM, audit_info);
diff --git a/security/integrity/ima/ima_queue.c b/security/integrity/ima/ima_queue.c
index 590637e81ad1..859c83ab5a2b 100644
--- a/security/integrity/ima/ima_queue.c
+++ b/security/integrity/ima/ima_queue.c
@@ -103,7 +103,7 @@ static int ima_add_digest_entry(struct ima_template_entry *entry,
 	struct ima_queue_entry *qe;
 	unsigned int key;

-	qe = kmalloc(sizeof(*qe), GFP_KERNEL);
+	qe = kmalloc_obj(*qe, GFP_KERNEL);
 	if (qe == NULL) {
 		pr_err("OUT OF MEMORY ERROR creating queue entry\n");
 		return -ENOMEM;
@@ -269,8 +269,8 @@ int __init ima_init_digests(void)
 	if (!ima_tpm_chip)
 		return 0;

-	digests = kcalloc(ima_tpm_chip->nr_allocated_banks, sizeof(*digests),
-			  GFP_NOFS);
+	digests = kzalloc_objs(*digests, ima_tpm_chip->nr_allocated_banks,
+			       GFP_NOFS);
 	if (!digests)
 		return -ENOMEM;

diff --git a/security/integrity/ima/ima_queue_keys.c b/security/integrity/ima/ima_queue_keys.c
index 4f0aea155bf9..da29e5b8f6df 100644
--- a/security/integrity/ima/ima_queue_keys.c
+++ b/security/integrity/ima/ima_queue_keys.c
@@ -72,7 +72,7 @@ static struct ima_key_entry *ima_alloc_key_entry(struct key *keyring,
 	const char *audit_cause = "ENOMEM";
 	struct ima_key_entry *entry;

-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (entry) {
 		entry->payload = kmemdup(payload, payload_len, GFP_KERNEL);
 		entry->keyring_name = kstrdup(keyring->description,
diff --git a/security/integrity/ima/ima_template.c b/security/integrity/ima/ima_template.c
index 04c49f05cb74..9712eb6b4b88 100644
--- a/security/integrity/ima/ima_template.c
+++ b/security/integrity/ima/ima_template.c
@@ -245,7 +245,7 @@ int template_desc_init_fields(const char *template_fmt,
 	}

 	if (fields && num_fields) {
-		*fields = kmalloc_array(i, sizeof(**fields), GFP_KERNEL);
+		*fields = kmalloc_objs(**fields, i, GFP_KERNEL);
 		if (*fields == NULL)
 			return -ENOMEM;

@@ -334,7 +334,7 @@ static struct ima_template_desc *restore_template_fmt(char *template_name)
 		goto out;
 	}

-	template_desc = kzalloc(sizeof(*template_desc), GFP_KERNEL);
+	template_desc = kzalloc_obj(*template_desc, GFP_KERNEL);
 	if (!template_desc)
 		goto out;

@@ -362,13 +362,14 @@ static int ima_restore_template_data(struct ima_template_desc *template_desc,
 	int ret = 0;
 	int i;

-	*entry = kzalloc(struct_size(*entry, template_data,
-				     template_desc->num_fields), GFP_NOFS);
+	*entry = kzalloc_flex(**entry, template_data, template_desc->num_fields,
+			      GFP_NOFS);
 	if (!*entry)
 		return -ENOMEM;

-	digests = kcalloc(NR_BANKS(ima_tpm_chip) + ima_extra_slots,
-			  sizeof(*digests), GFP_NOFS);
+	digests = kzalloc_objs(*digests,
+			       NR_BANKS(ima_tpm_chip) + ima_extra_slots,
+			       GFP_NOFS);
 	if (!digests) {
 		kfree(*entry);
 		return -ENOMEM;
diff --git a/security/ipe/digest.c b/security/ipe/digest.c
index 5006366837ba..747768ba0e52 100644
--- a/security/ipe/digest.c
+++ b/security/ipe/digest.c
@@ -29,7 +29,7 @@ struct digest_info *ipe_digest_parse(const char *valstr)
 	char *alg = NULL;
 	int rc = 0;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);

diff --git a/security/ipe/hooks.c b/security/ipe/hooks.c
index 603abdc9ce3b..b8d677f87845 100644
--- a/security/ipe/hooks.c
+++ b/security/ipe/hooks.c
@@ -287,7 +287,7 @@ int ipe_bdev_setintegrity(struct block_device *bdev, enum lsm_integrity_type typ
 	}
 	digest = value;

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/security/ipe/policy.c b/security/ipe/policy.c
index 1c58c29886e8..c2ff142aed37 100644
--- a/security/ipe/policy.c
+++ b/security/ipe/policy.c
@@ -162,7 +162,7 @@ struct ipe_policy *ipe_new_policy(const char *text, size_t textlen,
 	struct ipe_policy *new = NULL;
 	int rc = 0;

-	new = kzalloc(sizeof(*new), GFP_KERNEL);
+	new = kzalloc_obj(*new, GFP_KERNEL);
 	if (!new)
 		return ERR_PTR(-ENOMEM);

diff --git a/security/ipe/policy_parser.c b/security/ipe/policy_parser.c
index 7f27e39931d6..180de3e5f200 100644
--- a/security/ipe/policy_parser.c
+++ b/security/ipe/policy_parser.c
@@ -30,7 +30,7 @@ static struct ipe_parsed_policy *new_parsed_policy(void)
 	struct ipe_op_table *t = NULL;
 	size_t i = 0;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return ERR_PTR(-ENOMEM);

@@ -305,7 +305,7 @@ static int parse_property(char *t, struct ipe_rule *r)
 	int token;
 	char *dup = NULL;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;

@@ -373,7 +373,7 @@ static int parse_rule(char *line, struct ipe_parsed_policy *p)
 	if (IS_ERR_OR_NULL(line))
 		return -EBADMSG;

-	r = kzalloc(sizeof(*r), GFP_KERNEL);
+	r = kzalloc_obj(*r, GFP_KERNEL);
 	if (!r)
 		return -ENOMEM;

diff --git a/security/keys/key.c b/security/keys/key.c
index 3bbdde778631..8ca0777f22d3 100644
--- a/security/keys/key.c
+++ b/security/keys/key.c
@@ -77,7 +77,7 @@ struct key_user *key_user_lookup(kuid_t uid)
 		spin_unlock(&key_user_lock);

 		user = NULL;
-		candidate = kmalloc(sizeof(struct key_user), GFP_KERNEL);
+		candidate = kmalloc_obj(struct key_user, GFP_KERNEL);
 		if (unlikely(!candidate))
 			goto out;

diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
index ab927a142f51..7d8a0de7c7c4 100644
--- a/security/keys/keyctl.c
+++ b/security/keys/keyctl.c
@@ -1796,13 +1796,13 @@ long keyctl_watch_key(key_serial_t id, int watch_queue_fd, int watch_id)
 	if (watch_id >= 0) {
 		ret = -ENOMEM;
 		if (!key->watchers) {
-			wlist = kzalloc(sizeof(*wlist), GFP_KERNEL);
+			wlist = kzalloc_obj(*wlist, GFP_KERNEL);
 			if (!wlist)
 				goto err_wqueue;
 			init_watch_list(wlist, NULL);
 		}

-		watch = kzalloc(sizeof(*watch), GFP_KERNEL);
+		watch = kzalloc_obj(*watch, GFP_KERNEL);
 		if (!watch)
 			goto err_wlist;

diff --git a/security/keys/keyring.c b/security/keys/keyring.c
index f331725d5a37..9a1685035be5 100644
--- a/security/keys/keyring.c
+++ b/security/keys/keyring.c
@@ -977,7 +977,7 @@ static struct key_restriction *keyring_restriction_alloc(
 	key_restrict_link_func_t check)
 {
 	struct key_restriction *keyres =
-		kzalloc(sizeof(struct key_restriction), GFP_KERNEL);
+		kzalloc_obj(struct key_restriction, GFP_KERNEL);

 	if (!keyres)
 		return ERR_PTR(-ENOMEM);
diff --git a/security/keys/request_key_auth.c b/security/keys/request_key_auth.c
index 8f33cd170e42..f0de3e9d9743 100644
--- a/security/keys/request_key_auth.c
+++ b/security/keys/request_key_auth.c
@@ -171,7 +171,7 @@ struct key *request_key_auth_new(struct key *target, const char *op,
 	kenter("%d,", target->serial);

 	/* allocate a auth record */
-	rka = kzalloc(sizeof(*rka), GFP_KERNEL);
+	rka = kzalloc_obj(*rka, GFP_KERNEL);
 	if (!rka)
 		goto error;
 	rka->callout_info = kmemdup(callout_info, callout_len, GFP_KERNEL);
diff --git a/security/keys/trusted-keys/trusted_core.c b/security/keys/trusted-keys/trusted_core.c
index 9046123d94de..fb9ff3d18292 100644
--- a/security/keys/trusted-keys/trusted_core.c
+++ b/security/keys/trusted-keys/trusted_core.c
@@ -134,7 +134,7 @@ static struct trusted_key_payload *trusted_payload_alloc(struct key *key)
 	ret = key_payload_reserve(key, sizeof(*p));
 	if (ret < 0)
 		goto err;
-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		goto err;

diff --git a/security/keys/trusted-keys/trusted_pkwm.c b/security/keys/trusted-keys/trusted_pkwm.c
index 4f391b77a907..aab8fbc49280 100644
--- a/security/keys/trusted-keys/trusted_pkwm.c
+++ b/security/keys/trusted-keys/trusted_pkwm.c
@@ -62,10 +62,10 @@ static struct trusted_key_options *trusted_options_alloc(void)
 	struct trusted_key_options *options;
 	struct trusted_pkwm_options *pkwm;

-	options = kzalloc(sizeof(*options), GFP_KERNEL);
+	options = kzalloc_obj(*options, GFP_KERNEL);

 	if (options) {
-		pkwm = kzalloc(sizeof(*pkwm), GFP_KERNEL);
+		pkwm = kzalloc_obj(*pkwm, GFP_KERNEL);

 		if (!pkwm) {
 			kfree_sensitive(options);
diff --git a/security/keys/trusted-keys/trusted_tpm1.c b/security/keys/trusted-keys/trusted_tpm1.c
index c865c97aa1b4..ce9b26dd846e 100644
--- a/security/keys/trusted-keys/trusted_tpm1.c
+++ b/security/keys/trusted-keys/trusted_tpm1.c
@@ -440,7 +440,7 @@ static int tpm_seal(struct tpm_buf *tb, uint16_t keytype,
 	int i;

 	/* alloc some work space for all the hashes */
-	td = kmalloc(sizeof *td, GFP_KERNEL);
+	td = kmalloc_obj(*td, GFP_KERNEL);
 	if (!td)
 		return -ENOMEM;

@@ -838,7 +838,7 @@ static struct trusted_key_options *trusted_options_alloc(void)
 	if (tpm2 < 0)
 		return NULL;

-	options = kzalloc(sizeof *options, GFP_KERNEL);
+	options = kzalloc_obj(*options, GFP_KERNEL);
 	if (options) {
 		/* set any non-zero defaults */
 		options->keytype = SRK_keytype;
@@ -946,8 +946,7 @@ static int __init init_digests(void)
 {
 	int i;

-	digests = kcalloc(chip->nr_allocated_banks, sizeof(*digests),
-			  GFP_KERNEL);
+	digests = kzalloc_objs(*digests, chip->nr_allocated_banks, GFP_KERNEL);
 	if (!digests)
 		return -ENOMEM;

diff --git a/security/landlock/domain.c b/security/landlock/domain.c
index 79cb3bbdf4c5..29a0f9789eee 100644
--- a/security/landlock/domain.c
+++ b/security/landlock/domain.c
@@ -95,7 +95,7 @@ static struct landlock_details *get_current_details(void)
 	 * caller.
 	 */
 	details =
-		kzalloc(struct_size(details, exe_path, path_size), GFP_KERNEL);
+		kzalloc_flex(*details, exe_path, path_size, GFP_KERNEL);
 	if (!details)
 		return ERR_PTR(-ENOMEM);

diff --git a/security/landlock/object.c b/security/landlock/object.c
index 1f50612f0185..0d6e159ef8b5 100644
--- a/security/landlock/object.c
+++ b/security/landlock/object.c
@@ -25,7 +25,7 @@ landlock_create_object(const struct landlock_object_underops *const underops,

 	if (WARN_ON_ONCE(!underops || !underobj))
 		return ERR_PTR(-ENOENT);
-	new_object = kzalloc(sizeof(*new_object), GFP_KERNEL_ACCOUNT);
+	new_object = kzalloc_obj(*new_object, GFP_KERNEL_ACCOUNT);
 	if (!new_object)
 		return ERR_PTR(-ENOMEM);
 	refcount_set(&new_object->usage, 1);
diff --git a/security/landlock/ruleset.c b/security/landlock/ruleset.c
index 419b237de635..319873586385 100644
--- a/security/landlock/ruleset.c
+++ b/security/landlock/ruleset.c
@@ -33,8 +33,8 @@ static struct landlock_ruleset *create_ruleset(const u32 num_layers)
 	struct landlock_ruleset *new_ruleset;

 	new_ruleset =
-		kzalloc(struct_size(new_ruleset, access_masks, num_layers),
-			GFP_KERNEL_ACCOUNT);
+		kzalloc_flex(*new_ruleset, access_masks, num_layers,
+			     GFP_KERNEL_ACCOUNT);
 	if (!new_ruleset)
 		return ERR_PTR(-ENOMEM);
 	refcount_set(&new_ruleset->usage, 1);
@@ -123,8 +123,8 @@ create_rule(const struct landlock_id id,
 	} else {
 		new_num_layers = num_layers;
 	}
-	new_rule = kzalloc(struct_size(new_rule, layers, new_num_layers),
-			   GFP_KERNEL_ACCOUNT);
+	new_rule = kzalloc_flex(*new_rule, layers, new_num_layers,
+				GFP_KERNEL_ACCOUNT);
 	if (!new_rule)
 		return ERR_PTR(-ENOMEM);
 	RB_CLEAR_NODE(&new_rule->node);
@@ -559,8 +559,8 @@ landlock_merge_ruleset(struct landlock_ruleset *const parent,
 	if (IS_ERR(new_dom))
 		return new_dom;

-	new_dom->hierarchy =
-		kzalloc(sizeof(*new_dom->hierarchy), GFP_KERNEL_ACCOUNT);
+	new_dom->hierarchy = kzalloc_obj(*new_dom->hierarchy,
+					 GFP_KERNEL_ACCOUNT);
 	if (!new_dom->hierarchy)
 		return ERR_PTR(-ENOMEM);

diff --git a/security/landlock/tsync.c b/security/landlock/tsync.c
index 0d2b9c646030..de01aa899751 100644
--- a/security/landlock/tsync.c
+++ b/security/landlock/tsync.c
@@ -237,7 +237,7 @@ static int tsync_works_grow_by(struct tsync_works *s, size_t n, gfp_t flags)
 	s->works = works;

 	for (i = s->capacity; i < new_capacity; i++) {
-		work = kzalloc(sizeof(*work), flags);
+		work = kzalloc_obj(*work, flags);
 		if (!work) {
 			/*
 			 * Leave the object in a consistent state,
diff --git a/security/loadpin/loadpin.c b/security/loadpin/loadpin.c
index 6d5f3208f9ca..62b9ee7caefb 100644
--- a/security/loadpin/loadpin.c
+++ b/security/loadpin/loadpin.c
@@ -327,7 +327,7 @@ static int read_trusted_verity_root_digests(unsigned int fd)

 		len /= 2;

-		trd = kzalloc(struct_size(trd, data, len), GFP_KERNEL);
+		trd = kzalloc_flex(*trd, data, len, GFP_KERNEL);
 		if (!trd) {
 			rc = -ENOMEM;
 			goto err;
diff --git a/security/safesetid/securityfs.c b/security/safesetid/securityfs.c
index ece259f75b0d..8cc2bcb07324 100644
--- a/security/safesetid/securityfs.c
+++ b/security/safesetid/securityfs.c
@@ -118,7 +118,7 @@ static int verify_ruleset(struct setid_ruleset *pol)
 			res = -EINVAL;

 			/* fix it up */
-			nrule = kmalloc(sizeof(struct setid_rule), GFP_KERNEL);
+			nrule = kmalloc_obj(struct setid_rule, GFP_KERNEL);
 			if (!nrule)
 				return -ENOMEM;
 			if (pol->type == UID){
@@ -146,7 +146,7 @@ static ssize_t handle_policy_update(struct file *file,
 	if (len >= KMALLOC_MAX_SIZE)
 		return -EINVAL;

-	pol = kmalloc(sizeof(struct setid_ruleset), GFP_KERNEL);
+	pol = kmalloc_obj(struct setid_ruleset, GFP_KERNEL);
 	if (!pol)
 		return -ENOMEM;
 	pol->policy_str = NULL;
@@ -175,7 +175,7 @@ static ssize_t handle_policy_update(struct file *file,
 		}
 		*end = '\0';

-		rule = kmalloc(sizeof(struct setid_rule), GFP_KERNEL);
+		rule = kmalloc_obj(struct setid_rule, GFP_KERNEL);
 		if (!rule) {
 			err = -ENOMEM;
 			goto out_free_buf;
diff --git a/security/selinux/avc.c b/security/selinux/avc.c
index 8f77b9a732e1..584b1d6bdff1 100644
--- a/security/selinux/avc.c
+++ b/security/selinux/avc.c
@@ -794,7 +794,7 @@ int __init avc_add_callback(int (*callback)(u32 event), u32 events)
 	struct avc_callback_node *c;
 	int rc = 0;

-	c = kmalloc(sizeof(*c), GFP_KERNEL);
+	c = kmalloc_obj(*c, GFP_KERNEL);
 	if (!c) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index feda34b18d83..58ce110272ef 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -1030,7 +1030,7 @@ static int selinux_add_opt(int token, const char *s, void **mnt_opts)
 	}

 	if (!opts) {
-		opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+		opts = kzalloc_obj(*opts, GFP_KERNEL);
 		if (!opts)
 			return -ENOMEM;
 		*mnt_opts = opts;
@@ -2822,7 +2822,7 @@ static int selinux_fs_context_submount(struct fs_context *fc,
 	if (!(sbsec->flags & (FSCONTEXT_MNT|CONTEXT_MNT|DEFCONTEXT_MNT)))
 		return 0;

-	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
+	opts = kzalloc_obj(*opts, GFP_KERNEL);
 	if (!opts)
 		return -ENOMEM;

diff --git a/security/selinux/ibpkey.c b/security/selinux/ibpkey.c
index ea1d9b2c7d2b..93a5637fbcd8 100644
--- a/security/selinux/ibpkey.c
+++ b/security/selinux/ibpkey.c
@@ -147,7 +147,7 @@ static int sel_ib_pkey_sid_slow(u64 subnet_prefix, u16 pkey_num, u32 *sid)
 	if (ret)
 		goto out;

-	new = kmalloc(sizeof(*new), GFP_ATOMIC);
+	new = kmalloc_obj(*new, GFP_ATOMIC);
 	if (!new) {
 		/* If this memory allocation fails still return 0. The SID
 		 * is valid, it just won't be added to the cache.
diff --git a/security/selinux/netif.c b/security/selinux/netif.c
index e24b2cba28ea..fa6d24a37c39 100644
--- a/security/selinux/netif.c
+++ b/security/selinux/netif.c
@@ -161,7 +161,7 @@ static int sel_netif_sid_slow(struct net *ns, int ifindex, u32 *sid)
 	/* If this memory allocation fails still return 0. The SID
 	 * is valid, it just won't be added to the cache.
 	 */
-	new = kmalloc(sizeof(*new), GFP_ATOMIC);
+	new = kmalloc_obj(*new, GFP_ATOMIC);
 	if (new) {
 		new->nsec.ns = ns;
 		new->nsec.ifindex = ifindex;
diff --git a/security/selinux/netnode.c b/security/selinux/netnode.c
index 9b3da5ce8d39..adb93003b8c4 100644
--- a/security/selinux/netnode.c
+++ b/security/selinux/netnode.c
@@ -205,7 +205,7 @@ static int sel_netnode_sid_slow(const void *addr, u16 family, u32 *sid)
 	/* If this memory allocation fails still return 0. The SID
 	 * is valid, it just won't be added to the cache.
 	 */
-	new = kmalloc(sizeof(*new), GFP_ATOMIC);
+	new = kmalloc_obj(*new, GFP_ATOMIC);
 	switch (family) {
 	case PF_INET:
 		ret = security_node_sid(PF_INET,
diff --git a/security/selinux/netport.c b/security/selinux/netport.c
index 9e62f7285e81..006a6ec71319 100644
--- a/security/selinux/netport.c
+++ b/security/selinux/netport.c
@@ -150,7 +150,7 @@ static int sel_netport_sid_slow(u8 protocol, u16 pnum, u32 *sid)
 	/* If this memory allocation fails still return 0. The SID
 	 * is valid, it just won't be added to the cache.
 	 */
-	new = kmalloc(sizeof(*new), GFP_ATOMIC);
+	new = kmalloc_obj(*new, GFP_ATOMIC);
 	if (new) {
 		new->psec.port = pnum;
 		new->psec.protocol = protocol;
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index 4d58c7ad1a23..010499520d38 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -85,7 +85,7 @@ static int selinux_fs_info_create(struct super_block *sb)
 {
 	struct selinux_fs_info *fsi;

-	fsi = kzalloc(sizeof(*fsi), GFP_KERNEL);
+	fsi = kzalloc_obj(*fsi, GFP_KERNEL);
 	if (!fsi)
 		return -ENOMEM;

@@ -380,7 +380,7 @@ static int sel_open_policy(struct inode *inode, struct file *filp)
 		goto err;

 	rc = -ENOMEM;
-	plm = kzalloc(sizeof(*plm), GFP_KERNEL);
+	plm = kzalloc_obj(*plm, GFP_KERNEL);
 	if (!plm)
 		goto err;

diff --git a/security/selinux/ss/conditional.c b/security/selinux/ss/conditional.c
index 1bebfcb9c6a1..b238fa9756cf 100644
--- a/security/selinux/ss/conditional.c
+++ b/security/selinux/ss/conditional.c
@@ -165,8 +165,8 @@ void cond_policydb_destroy(struct policydb *p)
 int cond_init_bool_indexes(struct policydb *p)
 {
 	kfree(p->bool_val_to_struct);
-	p->bool_val_to_struct = kmalloc_array(
-		p->p_bools.nprim, sizeof(*p->bool_val_to_struct), GFP_KERNEL);
+	p->bool_val_to_struct = kmalloc_objs(*p->bool_val_to_struct,
+					     p->p_bools.nprim, GFP_KERNEL);
 	if (!p->bool_val_to_struct)
 		return -ENOMEM;

@@ -214,7 +214,7 @@ int cond_read_bool(struct policydb *p, struct symtab *s, struct policy_file *fp)
 	u32 len;
 	int rc;

-	booldatum = kzalloc(sizeof(*booldatum), GFP_KERNEL);
+	booldatum = kzalloc_obj(*booldatum, GFP_KERNEL);
 	if (!booldatum)
 		return -ENOMEM;

@@ -334,7 +334,7 @@ static int cond_read_av_list(struct policydb *p, struct policy_file *fp,
 	if (len == 0)
 		return 0;

-	list->nodes = kcalloc(len, sizeof(*list->nodes), GFP_KERNEL);
+	list->nodes = kzalloc_objs(*list->nodes, len, GFP_KERNEL);
 	if (!list->nodes)
 		return -ENOMEM;

@@ -383,7 +383,7 @@ static int cond_read_node(struct policydb *p, struct cond_node *node, struct pol

 	/* expr */
 	len = le32_to_cpu(buf[1]);
-	node->expr.nodes = kcalloc(len, sizeof(*node->expr.nodes), GFP_KERNEL);
+	node->expr.nodes = kzalloc_objs(*node->expr.nodes, len, GFP_KERNEL);
 	if (!node->expr.nodes)
 		return -ENOMEM;

@@ -421,7 +421,7 @@ int cond_read_list(struct policydb *p, struct policy_file *fp)

 	len = le32_to_cpu(buf[0]);

-	p->cond_list = kcalloc(len, sizeof(*p->cond_list), GFP_KERNEL);
+	p->cond_list = kzalloc_objs(*p->cond_list, len, GFP_KERNEL);
 	if (!p->cond_list)
 		return -ENOMEM;

@@ -605,7 +605,7 @@ static int cond_dup_av_list(struct cond_av_list *new,

 	memset(new, 0, sizeof(*new));

-	new->nodes = kcalloc(orig->len, sizeof(*new->nodes), GFP_KERNEL);
+	new->nodes = kzalloc_objs(*new->nodes, orig->len, GFP_KERNEL);
 	if (!new->nodes)
 		return -ENOMEM;

@@ -631,8 +631,8 @@ static int duplicate_policydb_cond_list(struct policydb *newp,
 		return rc;

 	newp->cond_list_len = 0;
-	newp->cond_list = kcalloc(origp->cond_list_len,
-				  sizeof(*newp->cond_list), GFP_KERNEL);
+	newp->cond_list = kzalloc_objs(*newp->cond_list, origp->cond_list_len,
+				       GFP_KERNEL);
 	if (!newp->cond_list)
 		goto error;

@@ -710,9 +710,8 @@ static int duplicate_policydb_bools(struct policydb *newdb,
 	struct cond_bool_datum **cond_bool_array;
 	int rc;

-	cond_bool_array = kmalloc_array(orig->p_bools.nprim,
-					sizeof(*orig->bool_val_to_struct),
-					GFP_KERNEL);
+	cond_bool_array = kmalloc_objs(*orig->bool_val_to_struct,
+				       orig->p_bools.nprim, GFP_KERNEL);
 	if (!cond_bool_array)
 		return -ENOMEM;

diff --git a/security/selinux/ss/hashtab.c b/security/selinux/ss/hashtab.c
index 1382eb3bfde1..1eb542725c94 100644
--- a/security/selinux/ss/hashtab.c
+++ b/security/selinux/ss/hashtab.c
@@ -40,8 +40,8 @@ int hashtab_init(struct hashtab *h, u32 nel_hint)
 	h->htable = NULL;

 	if (size) {
-		h->htable = kcalloc(size, sizeof(*h->htable),
-				    GFP_KERNEL | __GFP_NOWARN);
+		h->htable = kzalloc_objs(*h->htable, size,
+					 GFP_KERNEL | __GFP_NOWARN);
 		if (!h->htable)
 			return -ENOMEM;
 		h->size = size;
@@ -149,7 +149,7 @@ int hashtab_duplicate(struct hashtab *new, const struct hashtab *orig,

 	memset(new, 0, sizeof(*new));

-	new->htable = kcalloc(orig->size, sizeof(*new->htable), GFP_KERNEL);
+	new->htable = kzalloc_objs(*new->htable, orig->size, GFP_KERNEL);
 	if (!new->htable)
 		return -ENOMEM;

diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c
index 91df3db6a88c..a96c671d0d51 100644
--- a/security/selinux/ss/policydb.c
+++ b/security/selinux/ss/policydb.c
@@ -390,7 +390,7 @@ static int roles_init(struct policydb *p)
 	int rc;
 	struct role_datum *role;

-	role = kzalloc(sizeof(*role), GFP_KERNEL);
+	role = kzalloc_obj(*role, GFP_KERNEL);
 	if (!role)
 		return -ENOMEM;

@@ -738,24 +738,23 @@ static int policydb_index(struct policydb *p)
 	avtab_hash_eval(&p->te_avtab, "rules");
 	symtab_hash_eval(p->symtab);

-	p->class_val_to_struct = kcalloc(p->p_classes.nprim,
-					 sizeof(*p->class_val_to_struct),
-					 GFP_KERNEL);
+	p->class_val_to_struct = kzalloc_objs(*p->class_val_to_struct,
+					      p->p_classes.nprim, GFP_KERNEL);
 	if (!p->class_val_to_struct)
 		return -ENOMEM;

-	p->role_val_to_struct = kcalloc(
-		p->p_roles.nprim, sizeof(*p->role_val_to_struct), GFP_KERNEL);
+	p->role_val_to_struct = kzalloc_objs(*p->role_val_to_struct,
+					     p->p_roles.nprim, GFP_KERNEL);
 	if (!p->role_val_to_struct)
 		return -ENOMEM;

-	p->user_val_to_struct = kcalloc(
-		p->p_users.nprim, sizeof(*p->user_val_to_struct), GFP_KERNEL);
+	p->user_val_to_struct = kzalloc_objs(*p->user_val_to_struct,
+					     p->p_users.nprim, GFP_KERNEL);
 	if (!p->user_val_to_struct)
 		return -ENOMEM;

-	p->type_val_to_struct = kvcalloc(
-		p->p_types.nprim, sizeof(*p->type_val_to_struct), GFP_KERNEL);
+	p->type_val_to_struct = kvzalloc_objs(*p->type_val_to_struct,
+					      p->p_types.nprim, GFP_KERNEL);
 	if (!p->type_val_to_struct)
 		return -ENOMEM;

@@ -1131,7 +1130,7 @@ static int perm_read(struct policydb *p, struct symtab *s, struct policy_file *f
 	__le32 buf[2];
 	u32 len;

-	perdatum = kzalloc(sizeof(*perdatum), GFP_KERNEL);
+	perdatum = kzalloc_obj(*perdatum, GFP_KERNEL);
 	if (!perdatum)
 		return -ENOMEM;

@@ -1164,7 +1163,7 @@ static int common_read(struct policydb *p, struct symtab *s, struct policy_file
 	u32 i, len, nel;
 	int rc;

-	comdatum = kzalloc(sizeof(*comdatum), GFP_KERNEL);
+	comdatum = kzalloc_obj(*comdatum, GFP_KERNEL);
 	if (!comdatum)
 		return -ENOMEM;

@@ -1237,7 +1236,7 @@ static int read_cons_helper(struct policydb *p, struct constraint_node **nodep,

 	lc = NULL;
 	for (i = 0; i < ncons; i++) {
-		c = kzalloc(sizeof(*c), GFP_KERNEL);
+		c = kzalloc_obj(*c, GFP_KERNEL);
 		if (!c)
 			return -ENOMEM;

@@ -1254,7 +1253,7 @@ static int read_cons_helper(struct policydb *p, struct constraint_node **nodep,
 		le = NULL;
 		depth = -1;
 		for (j = 0; j < nexpr; j++) {
-			e = kzalloc(sizeof(*e), GFP_KERNEL);
+			e = kzalloc_obj(*e, GFP_KERNEL);
 			if (!e)
 				return -ENOMEM;

@@ -1297,9 +1296,8 @@ static int read_cons_helper(struct policydb *p, struct constraint_node **nodep,
 					return rc;
 				if (p->policyvers >=
 				    POLICYDB_VERSION_CONSTRAINT_NAMES) {
-					e->type_names =
-						kzalloc(sizeof(*e->type_names),
-							GFP_KERNEL);
+					e->type_names = kzalloc_obj(*e->type_names,
+								    GFP_KERNEL);
 					if (!e->type_names)
 						return -ENOMEM;
 					type_set_init(e->type_names);
@@ -1329,7 +1327,7 @@ static int class_read(struct policydb *p, struct symtab *s, struct policy_file *
 	u32 i, len, len2, ncons, nel;
 	int rc;

-	cladatum = kzalloc(sizeof(*cladatum), GFP_KERNEL);
+	cladatum = kzalloc_obj(*cladatum, GFP_KERNEL);
 	if (!cladatum)
 		return -ENOMEM;

@@ -1427,7 +1425,7 @@ static int role_read(struct policydb *p, struct symtab *s, struct policy_file *f
 	__le32 buf[3];
 	u32 len;

-	role = kzalloc(sizeof(*role), GFP_KERNEL);
+	role = kzalloc_obj(*role, GFP_KERNEL);
 	if (!role)
 		return -ENOMEM;

@@ -1484,7 +1482,7 @@ static int type_read(struct policydb *p, struct symtab *s, struct policy_file *f
 	__le32 buf[4];
 	u32 len;

-	typdatum = kzalloc(sizeof(*typdatum), GFP_KERNEL);
+	typdatum = kzalloc_obj(*typdatum, GFP_KERNEL);
 	if (!typdatum)
 		return -ENOMEM;

@@ -1558,7 +1556,7 @@ static int user_read(struct policydb *p, struct symtab *s, struct policy_file *f
 	__le32 buf[3];
 	u32 len;

-	usrdatum = kzalloc(sizeof(*usrdatum), GFP_KERNEL);
+	usrdatum = kzalloc_obj(*usrdatum, GFP_KERNEL);
 	if (!usrdatum)
 		return -ENOMEM;

@@ -1608,7 +1606,7 @@ static int sens_read(struct policydb *p, struct symtab *s, struct policy_file *f
 	__le32 buf[2];
 	u32 len;

-	levdatum = kzalloc(sizeof(*levdatum), GFP_KERNEL);
+	levdatum = kzalloc_obj(*levdatum, GFP_KERNEL);
 	if (!levdatum)
 		return -ENOMEM;

@@ -1644,7 +1642,7 @@ static int cat_read(struct policydb *p, struct symtab *s, struct policy_file *fp
 	__le32 buf[3];
 	u32 len;

-	catdatum = kzalloc(sizeof(*catdatum), GFP_KERNEL);
+	catdatum = kzalloc_obj(*catdatum, GFP_KERNEL);
 	if (!catdatum)
 		return -ENOMEM;

@@ -1864,7 +1862,7 @@ static int range_read(struct policydb *p, struct policy_file *fp)

 	for (i = 0; i < nel; i++) {
 		rc = -ENOMEM;
-		rt = kzalloc(sizeof(*rt), GFP_KERNEL);
+		rt = kzalloc_obj(*rt, GFP_KERNEL);
 		if (!rt)
 			goto out;

@@ -1889,7 +1887,7 @@ static int range_read(struct policydb *p, struct policy_file *fp)
 			goto out;

 		rc = -ENOMEM;
-		r = kzalloc(sizeof(*r), GFP_KERNEL);
+		r = kzalloc_obj(*r, GFP_KERNEL);
 		if (!r)
 			goto out;

@@ -1965,7 +1963,7 @@ static int filename_trans_read_helper_compat(struct policydb *p, struct policy_f
 	}
 	if (!datum) {
 		rc = -ENOMEM;
-		datum = kmalloc(sizeof(*datum), GFP_KERNEL);
+		datum = kmalloc_obj(*datum, GFP_KERNEL);
 		if (!datum)
 			goto out;

@@ -2040,7 +2038,7 @@ static int filename_trans_read_helper(struct policydb *p, struct policy_file *fp
 	dst = &first;
 	for (i = 0; i < ndatum; i++) {
 		rc = -ENOMEM;
-		datum = kmalloc(sizeof(*datum), GFP_KERNEL);
+		datum = kmalloc_obj(*datum, GFP_KERNEL);
 		if (!datum)
 			goto out;

@@ -2062,7 +2060,7 @@ static int filename_trans_read_helper(struct policydb *p, struct policy_file *fp
 	}

 	rc = -ENOMEM;
-	ft = kmalloc(sizeof(*ft), GFP_KERNEL);
+	ft = kmalloc_obj(*ft, GFP_KERNEL);
 	if (!ft)
 		goto out;

@@ -2155,7 +2153,7 @@ static int genfs_read(struct policydb *p, struct policy_file *fp)
 		len = le32_to_cpu(buf[0]);

 		rc = -ENOMEM;
-		newgenfs = kzalloc(sizeof(*newgenfs), GFP_KERNEL);
+		newgenfs = kzalloc_obj(*newgenfs, GFP_KERNEL);
 		if (!newgenfs)
 			goto out;

@@ -2194,7 +2192,7 @@ static int genfs_read(struct policydb *p, struct policy_file *fp)
 			len = le32_to_cpu(buf[0]);

 			rc = -ENOMEM;
-			newc = kzalloc(sizeof(*newc), GFP_KERNEL);
+			newc = kzalloc_obj(*newc, GFP_KERNEL);
 			if (!newc)
 				goto out;

@@ -2266,7 +2264,7 @@ static int ocontext_read(struct policydb *p,
 		l = NULL;
 		for (j = 0; j < nel; j++) {
 			rc = -ENOMEM;
-			c = kzalloc(sizeof(*c), GFP_KERNEL);
+			c = kzalloc_obj(*c, GFP_KERNEL);
 			if (!c)
 				goto out;
 			if (l)
@@ -2623,12 +2621,12 @@ int policydb_read(struct policydb *p, struct policy_file *fp)
 		goto bad;
 	for (i = 0; i < nel; i++) {
 		rc = -ENOMEM;
-		rtk = kmalloc(sizeof(*rtk), GFP_KERNEL);
+		rtk = kmalloc_obj(*rtk, GFP_KERNEL);
 		if (!rtk)
 			goto bad;

 		rc = -ENOMEM;
-		rtd = kmalloc(sizeof(*rtd), GFP_KERNEL);
+		rtd = kmalloc_obj(*rtd, GFP_KERNEL);
 		if (!rtd)
 			goto bad;

@@ -2671,7 +2669,7 @@ int policydb_read(struct policydb *p, struct policy_file *fp)
 	lra = NULL;
 	for (i = 0; i < nel; i++) {
 		rc = -ENOMEM;
-		ra = kzalloc(sizeof(*ra), GFP_KERNEL);
+		ra = kzalloc_obj(*ra, GFP_KERNEL);
 		if (!ra)
 			goto bad;
 		if (lra)
@@ -2726,8 +2724,8 @@ int policydb_read(struct policydb *p, struct policy_file *fp)
 		goto bad;

 	rc = -ENOMEM;
-	p->type_attr_map_array = kvcalloc(
-		p->p_types.nprim, sizeof(*p->type_attr_map_array), GFP_KERNEL);
+	p->type_attr_map_array = kvzalloc_objs(*p->type_attr_map_array,
+					       p->p_types.nprim, GFP_KERNEL);
 	if (!p->type_attr_map_array)
 		goto bad;

diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index 13fc712d5923..6f20e941c059 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -108,7 +108,7 @@ static int selinux_set_mapping(struct policydb *pol,
 		i++;

 	/* Allocate space for the class records, plus one for class zero */
-	out_map->mapping = kcalloc(++i, sizeof(*out_map->mapping), GFP_ATOMIC);
+	out_map->mapping = kzalloc_objs(*out_map->mapping, ++i, GFP_ATOMIC);
 	if (!out_map->mapping)
 		return -ENOMEM;

@@ -2312,11 +2312,11 @@ int security_load_policy(void *data, size_t len,
 	int rc = 0;
 	struct policy_file file = { data, len }, *fp = &file;

-	newpolicy = kzalloc(sizeof(*newpolicy), GFP_KERNEL);
+	newpolicy = kzalloc_obj(*newpolicy, GFP_KERNEL);
 	if (!newpolicy)
 		return -ENOMEM;

-	newpolicy->sidtab = kzalloc(sizeof(*newpolicy->sidtab), GFP_KERNEL);
+	newpolicy->sidtab = kzalloc_obj(*newpolicy->sidtab, GFP_KERNEL);
 	if (!newpolicy->sidtab) {
 		rc = -ENOMEM;
 		goto err_policy;
@@ -2360,7 +2360,7 @@ int security_load_policy(void *data, size_t len,
 	 * in the new SID table.
 	 */

-	convert_data = kmalloc(sizeof(*convert_data), GFP_KERNEL);
+	convert_data = kmalloc_obj(*convert_data, GFP_KERNEL);
 	if (!convert_data) {
 		rc = -ENOMEM;
 		goto err_free_isids;
@@ -3065,7 +3065,7 @@ int security_get_bools(struct selinux_policy *policy,
 		goto err;

 	rc = -ENOMEM;
-	*values = kcalloc(*len, sizeof(int), GFP_ATOMIC);
+	*values = kzalloc_objs(int, *len, GFP_ATOMIC);
 	if (!*values)
 		goto err;

@@ -3629,7 +3629,7 @@ int selinux_audit_rule_init(u32 field, u32 op, char *rulestr, void **vrule,
 		return -EINVAL;
 	}

-	tmprule = kzalloc(sizeof(struct selinux_audit_rule), gfp);
+	tmprule = kzalloc_obj(struct selinux_audit_rule, gfp);
 	if (!tmprule)
 		return -ENOMEM;
 	context_init(&tmprule->au_ctxt);
@@ -3844,7 +3844,7 @@ static void security_netlbl_cache_add(struct netlbl_lsm_secattr *secattr,
 {
 	u32 *sid_cache;

-	sid_cache = kmalloc(sizeof(*sid_cache), GFP_ATOMIC);
+	sid_cache = kmalloc_obj(*sid_cache, GFP_ATOMIC);
 	if (sid_cache == NULL)
 		return;
 	secattr->cache = netlbl_secattr_cache_alloc(GFP_ATOMIC);
diff --git a/security/selinux/ss/sidtab.c b/security/selinux/ss/sidtab.c
index 59f8c09158ef..118af0aa2767 100644
--- a/security/selinux/ss/sidtab.c
+++ b/security/selinux/ss/sidtab.c
@@ -580,7 +580,7 @@ void sidtab_sid2str_put(struct sidtab *s, struct sidtab_entry *entry,
 		goto out_unlock;
 	}

-	cache = kmalloc(struct_size(cache, str, str_len), GFP_ATOMIC);
+	cache = kmalloc_flex(*cache, str, str_len, GFP_ATOMIC);
 	if (!cache)
 		goto out_unlock;

diff --git a/security/selinux/xfrm.c b/security/selinux/xfrm.c
index 61d56b0c2be1..8e00b3306574 100644
--- a/security/selinux/xfrm.c
+++ b/security/selinux/xfrm.c
@@ -88,7 +88,7 @@ static int selinux_xfrm_alloc_user(struct xfrm_sec_ctx **ctxp,
 	if (str_len >= PAGE_SIZE)
 		return -ENOMEM;

-	ctx = kmalloc(struct_size(ctx, ctx_str, str_len + 1), gfp);
+	ctx = kmalloc_flex(*ctx, ctx_str, str_len + 1, gfp);
 	if (!ctx)
 		return -ENOMEM;

@@ -354,7 +354,7 @@ int selinux_xfrm_state_alloc_acquire(struct xfrm_state *x,
 	if (rc)
 		return rc;

-	ctx = kmalloc(struct_size(ctx, ctx_str, str_len), GFP_ATOMIC);
+	ctx = kmalloc_flex(*ctx, ctx_str, str_len, GFP_ATOMIC);
 	if (!ctx) {
 		rc = -ENOMEM;
 		goto out;
diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c
index 86ad910d5631..350b88d582b3 100644
--- a/security/smack/smack_access.c
+++ b/security/smack/smack_access.c
@@ -592,7 +592,7 @@ smk_import_allocated_label(char *smack, gfp_t gfp)
 	if (skp != NULL)
 		goto freeout;

-	skp = kzalloc(sizeof(*skp), gfp);
+	skp = kzalloc_obj(*skp, gfp);
 	if (skp == NULL) {
 		skp = ERR_PTR(-ENOMEM);
 		goto freeout;
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index a0bd4919a9d9..e2add0c8c739 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -372,7 +372,7 @@ static int smk_copy_relabel(struct list_head *nhead, struct list_head *ohead,
 	struct smack_known_list_elem *oklep;

 	list_for_each_entry(oklep, ohead, list) {
-		nklep = kzalloc(sizeof(struct smack_known_list_elem), gfp);
+		nklep = kzalloc_obj(struct smack_known_list_elem, gfp);
 		if (nklep == NULL) {
 			smk_destroy_label_list(nhead);
 			return -ENOMEM;
@@ -562,7 +562,7 @@ static int smack_add_opt(int token, const char *s, void **mnt_opts)
 	struct smack_known *skp;

 	if (!opts) {
-		opts = kzalloc(sizeof(struct smack_mnt_opts), GFP_KERNEL);
+		opts = kzalloc_obj(struct smack_mnt_opts, GFP_KERNEL);
 		if (!opts)
 			return -ENOMEM;
 		*mnt_opts = opts;
@@ -622,7 +622,7 @@ static int smack_fs_context_submount(struct fs_context *fc,
 	struct smack_mnt_opts *ctx;
 	struct inode_smack *isp;

-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc_obj(*ctx, GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 	fc->security = ctx;
@@ -673,7 +673,7 @@ static int smack_fs_context_dup(struct fs_context *fc,
 	if (!src)
 		return 0;

-	fc->security = kzalloc(sizeof(struct smack_mnt_opts), GFP_KERNEL);
+	fc->security = kzalloc_obj(struct smack_mnt_opts, GFP_KERNEL);
 	if (!fc->security)
 		return -ENOMEM;

@@ -2817,7 +2817,7 @@ static void smk_ipv6_port_label(struct socket *sock, struct sockaddr *address)
 	/*
 	 * A new port entry is required.
 	 */
-	spp = kzalloc(sizeof(*spp), GFP_KERNEL);
+	spp = kzalloc_obj(*spp, GFP_KERNEL);
 	if (spp == NULL)
 		return;

diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
index 8919e330d2f6..35b98f11e32d 100644
--- a/security/smack/smackfs.c
+++ b/security/smack/smackfs.c
@@ -682,7 +682,7 @@ smk_cipso_doi(u32 ndoi, gfp_t gfp_flags)

 	smk_netlabel_audit_set(&nai);

-	doip = kmalloc(sizeof(struct cipso_v4_doi), gfp_flags);
+	doip = kmalloc_obj(struct cipso_v4_doi, gfp_flags);
 	if (!doip) {
 		rc = -ENOMEM;
 		goto clr_doi_lock;
@@ -1249,7 +1249,7 @@ static ssize_t smk_write_net4addr(struct file *file, const char __user *buf,
 	smk_netlabel_audit_set(&audit_info);

 	if (found == 0) {
-		snp = kzalloc(sizeof(*snp), GFP_KERNEL);
+		snp = kzalloc_obj(*snp, GFP_KERNEL);
 		if (snp == NULL)
 			rc = -ENOMEM;
 		else {
@@ -1526,7 +1526,7 @@ static ssize_t smk_write_net6addr(struct file *file, const char __user *buf,
 			break;
 	}
 	if (found == 0) {
-		snp = kzalloc(sizeof(*snp), GFP_KERNEL);
+		snp = kzalloc_obj(*snp, GFP_KERNEL);
 		if (snp == NULL)
 			rc = -ENOMEM;
 		else {
@@ -1970,7 +1970,7 @@ static int smk_parse_label_list(char *data, struct list_head *list)
 		if (IS_ERR(skp))
 			return PTR_ERR(skp);

-		sklep = kzalloc(sizeof(*sklep), GFP_KERNEL);
+		sklep = kzalloc_obj(*sklep, GFP_KERNEL);
 		if (sklep == NULL)
 			return -ENOMEM;

diff --git a/security/tomoyo/audit.c b/security/tomoyo/audit.c
index 610c1536cf70..bfacb3f2e2ed 100644
--- a/security/tomoyo/audit.c
+++ b/security/tomoyo/audit.c
@@ -376,7 +376,7 @@ void tomoyo_write_log2(struct tomoyo_request_info *r, int len, const char *fmt,
 	buf = tomoyo_init_log(r, len, fmt, args);
 	if (!buf)
 		goto out;
-	entry = kzalloc(sizeof(*entry), GFP_NOFS);
+	entry = kzalloc_obj(*entry, GFP_NOFS);
 	if (!entry) {
 		kfree(buf);
 		goto out;
diff --git a/security/tomoyo/common.c b/security/tomoyo/common.c
index 7e1f825d903b..fdaeaff01fc1 100644
--- a/security/tomoyo/common.c
+++ b/security/tomoyo/common.c
@@ -493,7 +493,7 @@ static struct tomoyo_profile *tomoyo_assign_profile
 	ptr = ns->profile_ptr[profile];
 	if (ptr)
 		return ptr;
-	entry = kzalloc(sizeof(*entry), GFP_NOFS | __GFP_NOWARN);
+	entry = kzalloc_obj(*entry, GFP_NOFS | __GFP_NOWARN);
 	if (mutex_lock_interruptible(&tomoyo_policy_lock))
 		goto out;
 	ptr = ns->profile_ptr[profile];
@@ -2553,7 +2553,7 @@ static int tomoyo_write_stat(struct tomoyo_io_buffer *head)
  */
 int tomoyo_open_control(const u8 type, struct file *file)
 {
-	struct tomoyo_io_buffer *head = kzalloc(sizeof(*head), GFP_NOFS);
+	struct tomoyo_io_buffer *head = kzalloc_obj(*head, GFP_NOFS);

 	if (!head)
 		return -ENOMEM;
diff --git a/security/tomoyo/domain.c b/security/tomoyo/domain.c
index 0612eac7f2f2..eeaad421f15b 100644
--- a/security/tomoyo/domain.c
+++ b/security/tomoyo/domain.c
@@ -708,7 +708,7 @@ int tomoyo_find_next_domain(struct linux_binprm *bprm)
 	bool reject_on_transition_failure = false;
 	const struct tomoyo_path_info *candidate;
 	struct tomoyo_path_info exename;
-	struct tomoyo_execve *ee = kzalloc(sizeof(*ee), GFP_NOFS);
+	struct tomoyo_execve *ee = kzalloc_obj(*ee, GFP_NOFS);

 	if (!ee)
 		return -ENOMEM;
diff --git a/security/yama/yama_lsm.c b/security/yama/yama_lsm.c
index 38b21ee0c560..57fd421f8c31 100644
--- a/security/yama/yama_lsm.c
+++ b/security/yama/yama_lsm.c
@@ -89,7 +89,7 @@ static void report_access(const char *access, struct task_struct *target,
 		return;
 	}

-	info = kmalloc(sizeof(*info), GFP_ATOMIC);
+	info = kmalloc_obj(*info, GFP_ATOMIC);
 	if (!info)
 		return;
 	init_task_work(&info->work, __report_access);
@@ -143,7 +143,7 @@ static int yama_ptracer_add(struct task_struct *tracer,
 {
 	struct ptrace_relation *relation, *added;

-	added = kmalloc(sizeof(*added), GFP_KERNEL);
+	added = kmalloc_obj(*added, GFP_KERNEL);
 	if (!added)
 		return -ENOMEM;

diff --git a/sound/ac97/bus.c b/sound/ac97/bus.c
index bb9b795e0226..0dda1f4d5cbd 100644
--- a/sound/ac97/bus.c
+++ b/sound/ac97/bus.c
@@ -104,7 +104,7 @@ static int ac97_codec_add(struct ac97_controller *ac97_ctrl, int idx,
 	struct ac97_codec_device *codec;
 	int ret;

-	codec = kzalloc(sizeof(*codec), GFP_KERNEL);
+	codec = kzalloc_obj(*codec, GFP_KERNEL);
 	if (!codec)
 		return -ENOMEM;
 	ac97_ctrl->codecs[idx] = codec;
@@ -351,7 +351,7 @@ struct ac97_controller *snd_ac97_controller_register(
 	struct ac97_controller *ac97_ctrl;
 	int ret, i;

-	ac97_ctrl = kzalloc(sizeof(*ac97_ctrl), GFP_KERNEL);
+	ac97_ctrl = kzalloc_obj(*ac97_ctrl, GFP_KERNEL);
 	if (!ac97_ctrl)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/ac97/snd_ac97_compat.c b/sound/ac97/snd_ac97_compat.c
index d2479bba75bf..e6c43556c8f6 100644
--- a/sound/ac97/snd_ac97_compat.c
+++ b/sound/ac97/snd_ac97_compat.c
@@ -69,7 +69,7 @@ struct snd_ac97 *snd_ac97_compat_alloc(struct ac97_codec_device *adev)
 	struct snd_ac97 *ac97;
 	int ret;

-	ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
+	ac97 = kzalloc_obj(struct snd_ac97, GFP_KERNEL);
 	if (ac97 == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/aoa/codecs/onyx.c b/sound/aoa/codecs/onyx.c
index 4cf959017c9d..bce8b35c5c27 100644
--- a/sound/aoa/codecs/onyx.c
+++ b/sound/aoa/codecs/onyx.c
@@ -855,7 +855,8 @@ static int onyx_init_codec(struct aoa_codec *codec)
 	/* if no inputs are present... */
 	if ((onyx->codec.connected & 0xC) == 0) {
 		if (!onyx->codec_info)
-			onyx->codec_info = kmalloc(sizeof(struct codec_info), GFP_KERNEL);
+			onyx->codec_info = kmalloc_obj(struct codec_info,
+						       GFP_KERNEL);
 		if (!onyx->codec_info)
 			return -ENOMEM;
 		ci = onyx->codec_info;
@@ -866,7 +867,8 @@ static int onyx_init_codec(struct aoa_codec *codec)
 	/* if no outputs are present... */
 	if ((onyx->codec.connected & 3) == 0) {
 		if (!onyx->codec_info)
-			onyx->codec_info = kmalloc(sizeof(struct codec_info), GFP_KERNEL);
+			onyx->codec_info = kmalloc_obj(struct codec_info,
+						       GFP_KERNEL);
 		if (!onyx->codec_info)
 			return -ENOMEM;
 		ci = onyx->codec_info;
@@ -957,7 +959,7 @@ static int onyx_i2c_probe(struct i2c_client *client)
 	struct onyx *onyx;
 	u8 dummy;

-	onyx = kzalloc(sizeof(struct onyx), GFP_KERNEL);
+	onyx = kzalloc_obj(struct onyx, GFP_KERNEL);

 	if (!onyx)
 		return -ENOMEM;
diff --git a/sound/aoa/codecs/tas.c b/sound/aoa/codecs/tas.c
index 7085e0b93e29..9c9b35cb5b6a 100644
--- a/sound/aoa/codecs/tas.c
+++ b/sound/aoa/codecs/tas.c
@@ -845,7 +845,7 @@ static int tas_i2c_probe(struct i2c_client *client)
 	struct device_node *node = client->dev.of_node;
 	struct tas *tas;

-	tas = kzalloc(sizeof(struct tas), GFP_KERNEL);
+	tas = kzalloc_obj(struct tas, GFP_KERNEL);

 	if (!tas)
 		return -ENOMEM;
diff --git a/sound/aoa/codecs/toonie.c b/sound/aoa/codecs/toonie.c
index b59967c49e0a..19653cf19292 100644
--- a/sound/aoa/codecs/toonie.c
+++ b/sound/aoa/codecs/toonie.c
@@ -121,7 +121,7 @@ static struct toonie *toonie;

 static int __init toonie_init(void)
 {
-	toonie = kzalloc(sizeof(struct toonie), GFP_KERNEL);
+	toonie = kzalloc_obj(struct toonie, GFP_KERNEL);

 	if (!toonie)
 		return -ENOMEM;
diff --git a/sound/aoa/core/gpio-pmf.c b/sound/aoa/core/gpio-pmf.c
index e76bde25e41a..155a503e1e9b 100644
--- a/sound/aoa/core/gpio-pmf.c
+++ b/sound/aoa/core/gpio-pmf.c
@@ -173,8 +173,7 @@ static int pmf_set_notify(struct gpio_runtime *rt,
 		notif->gpio_private = NULL;
 	}
 	if (!old && notify) {
-		irq_client = kzalloc(sizeof(struct pmf_irq_client),
-				     GFP_KERNEL);
+		irq_client = kzalloc_obj(struct pmf_irq_client, GFP_KERNEL);
 		if (!irq_client)
 			return -ENOMEM;
 		irq_client->data = notif;
diff --git a/sound/aoa/fabrics/layout.c b/sound/aoa/fabrics/layout.c
index bb2a0ef3004b..0b73ecda1b1d 100644
--- a/sound/aoa/fabrics/layout.c
+++ b/sound/aoa/fabrics/layout.c
@@ -1025,7 +1025,7 @@ static int aoa_fabric_layout_probe(struct soundbus_dev *sdev)
 		goto outnodev;
 	}

-	ldev = kzalloc(sizeof(struct layout_dev), GFP_KERNEL);
+	ldev = kzalloc_obj(struct layout_dev, GFP_KERNEL);
 	if (!ldev)
 		goto outnodev;

diff --git a/sound/aoa/soundbus/i2sbus/control.c b/sound/aoa/soundbus/i2sbus/control.c
index a003ef06de63..09e5070e0ae2 100644
--- a/sound/aoa/soundbus/i2sbus/control.c
+++ b/sound/aoa/soundbus/i2sbus/control.c
@@ -19,7 +19,7 @@

 int i2sbus_control_init(struct macio_dev* dev, struct i2sbus_control **c)
 {
-	*c = kzalloc(sizeof(struct i2sbus_control), GFP_KERNEL);
+	*c = kzalloc_obj(struct i2sbus_control, GFP_KERNEL);
 	if (!*c)
 		return -ENOMEM;

diff --git a/sound/aoa/soundbus/i2sbus/core.c b/sound/aoa/soundbus/i2sbus/core.c
index f4d43c854bbd..8941f3266947 100644
--- a/sound/aoa/soundbus/i2sbus/core.c
+++ b/sound/aoa/soundbus/i2sbus/core.c
@@ -171,7 +171,7 @@ static int i2sbus_add_dev(struct macio_dev *macio,
 	if (strncmp(node_name, "i2s-", 4))
 		return 0;

-	dev = kzalloc(sizeof(struct i2sbus_dev), GFP_KERNEL);
+	dev = kzalloc_obj(struct i2sbus_dev, GFP_KERNEL);
 	if (!dev)
 		return 0;

diff --git a/sound/aoa/soundbus/i2sbus/pcm.c b/sound/aoa/soundbus/i2sbus/pcm.c
index 4c480ad2c05d..ceee3320a932 100644
--- a/sound/aoa/soundbus/i2sbus/pcm.c
+++ b/sound/aoa/soundbus/i2sbus/pcm.c
@@ -879,7 +879,7 @@ i2sbus_attach_codec(struct soundbus_dev *dev, struct snd_card *card,
 		tmp++;
 	}

-	cii = kzalloc(sizeof(struct codec_info_item), GFP_KERNEL);
+	cii = kzalloc_obj(struct codec_info_item, GFP_KERNEL);
 	if (!cii)
 		return -ENOMEM;

diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
index ed2eeb914c6d..27d916c8fb29 100644
--- a/sound/core/compress_offload.c
+++ b/sound/core/compress_offload.c
@@ -519,7 +519,7 @@ snd_compr_get_codec_caps(struct snd_compr_stream *stream, unsigned long arg)
 		return -ENXIO;

 	struct snd_compr_codec_caps *caps __free(kfree) =
-		kzalloc(sizeof(*caps), GFP_KERNEL);
+		kzalloc_obj(*caps, GFP_KERNEL);
 	if (!caps)
 		return -ENOMEM;

@@ -539,7 +539,7 @@ int snd_compr_malloc_pages(struct snd_compr_stream *stream, size_t size)

 	if (snd_BUG_ON(!(stream) || !(stream)->runtime))
 		return -EINVAL;
-	dmab = kzalloc(sizeof(*dmab), GFP_KERNEL);
+	dmab = kzalloc_obj(*dmab, GFP_KERNEL);
 	if (!dmab)
 		return -ENOMEM;
 	dmab->dev = stream->dma_buffer.dev;
@@ -694,7 +694,7 @@ snd_compr_get_params(struct snd_compr_stream *stream, unsigned long arg)
 		return -EBADFD;

 	struct snd_codec *params __free(kfree) =
-		kzalloc(sizeof(*params), GFP_KERNEL);
+		kzalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;
 	retval = stream->ops->get_params(stream, params);
@@ -1066,7 +1066,7 @@ static int snd_compr_task_new(struct snd_compr_stream *stream, struct snd_compr_
 		return -EBUSY;
 	if (utask->origin_seqno != 0 || utask->input_size != 0)
 		return -EINVAL;
-	task = kzalloc(sizeof(*task), GFP_KERNEL);
+	task = kzalloc_obj(*task, GFP_KERNEL);
 	if (task == NULL)
 		return -ENOMEM;
 	task->seqno = utask->seqno = snd_compr_seqno_next(stream);
diff --git a/sound/core/control.c b/sound/core/control.c
index 486d1bc4dac2..eb4a3c1214fb 100644
--- a/sound/core/control.c
+++ b/sound/core/control.c
@@ -233,7 +233,7 @@ static int snd_ctl_new(struct snd_kcontrol **kctl, unsigned int count,
 	if (count == 0 || count > MAX_CONTROL_COUNT)
 		return -EINVAL;

-	*kctl = kzalloc(struct_size(*kctl, vd, count), GFP_KERNEL);
+	*kctl = kzalloc_flex(**kctl, vd, count, GFP_KERNEL);
 	if (!*kctl)
 		return -ENOMEM;

@@ -2057,7 +2057,7 @@ static int _snd_ctl_register_ioctl(snd_kctl_ioctl_func_t fcn, struct list_head *
 {
 	struct snd_kctl_ioctl *pn;

-	pn = kzalloc(sizeof(struct snd_kctl_ioctl), GFP_KERNEL);
+	pn = kzalloc_obj(struct snd_kctl_ioctl, GFP_KERNEL);
 	if (pn == NULL)
 		return -ENOMEM;
 	pn->fioctl = fcn;
diff --git a/sound/core/control_compat.c b/sound/core/control_compat.c
index b8988a4bcd9b..174395322c51 100644
--- a/sound/core/control_compat.c
+++ b/sound/core/control_compat.c
@@ -82,7 +82,7 @@ static int snd_ctl_elem_info_compat(struct snd_ctl_file *ctl,
 	struct snd_card *card = ctl->card;
 	int err;
 	struct snd_ctl_elem_info *data __free(kfree) =
-		kzalloc(sizeof(*data), GFP_KERNEL);
+		kzalloc_obj(*data, GFP_KERNEL);

 	if (! data)
 		return -ENOMEM;
@@ -177,7 +177,7 @@ static int get_ctl_type(struct snd_card *card, struct snd_ctl_elem_id *id,
 		return -ENOENT;

 	struct snd_ctl_elem_info *info __free(kfree) =
-		kzalloc(sizeof(*info), GFP_KERNEL);
+		kzalloc_obj(*info, GFP_KERNEL);
 	if (info == NULL)
 		return -ENOMEM;
 	info->id = *id;
@@ -283,7 +283,7 @@ static int __ctl_elem_read_user(struct snd_card *card,
 {
 	int err, type, count;
 	struct snd_ctl_elem_value *data __free(kfree) =
-		kzalloc(sizeof(*data), GFP_KERNEL);
+		kzalloc_obj(*data, GFP_KERNEL);

 	if (data == NULL)
 		return -ENOMEM;
@@ -318,7 +318,7 @@ static int __ctl_elem_write_user(struct snd_ctl_file *file,
 	struct snd_card *card = file->card;
 	int err, type, count;
 	struct snd_ctl_elem_value *data __free(kfree) =
-		kzalloc(sizeof(*data), GFP_KERNEL);
+		kzalloc_obj(*data, GFP_KERNEL);

 	if (data == NULL)
 		return -ENOMEM;
@@ -380,7 +380,7 @@ static int snd_ctl_elem_add_compat(struct snd_ctl_file *file,
 				   int replace)
 {
 	struct snd_ctl_elem_info *data __free(kfree) =
-		kzalloc(sizeof(*data), GFP_KERNEL);
+		kzalloc_obj(*data, GFP_KERNEL);

 	if (! data)
 		return -ENOMEM;
diff --git a/sound/core/control_led.c b/sound/core/control_led.c
index c7641d5084e7..07eebf849ae3 100644
--- a/sound/core/control_led.c
+++ b/sound/core/control_led.c
@@ -653,7 +653,7 @@ static void snd_ctl_led_sysfs_add(struct snd_card *card)

 	for (group = 0; group < MAX_LED; group++) {
 		led = &snd_ctl_leds[group];
-		led_card = kzalloc(sizeof(*led_card), GFP_KERNEL);
+		led_card = kzalloc_obj(*led_card, GFP_KERNEL);
 		if (!led_card)
 			goto cerr2;
 		led_card->number = card->number;
diff --git a/sound/core/device.c b/sound/core/device.c
index cdc5af526739..80c02914877f 100644
--- a/sound/core/device.c
+++ b/sound/core/device.c
@@ -34,7 +34,7 @@ int snd_device_new(struct snd_card *card, enum snd_device_type type,

 	if (snd_BUG_ON(!card || !device_data || !ops))
 		return -ENXIO;
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&dev->list);
diff --git a/sound/core/hrtimer.c b/sound/core/hrtimer.c
index 2d5f4d47071f..a98de8d9ce16 100644
--- a/sound/core/hrtimer.c
+++ b/sound/core/hrtimer.c
@@ -64,7 +64,7 @@ static int snd_hrtimer_open(struct snd_timer *t)
 {
 	struct snd_hrtimer *stime;

-	stime = kzalloc(sizeof(*stime), GFP_KERNEL);
+	stime = kzalloc_obj(*stime, GFP_KERNEL);
 	if (!stime)
 		return -ENOMEM;
 	stime->timer = t;
diff --git a/sound/core/hwdep.c b/sound/core/hwdep.c
index 09200df2932c..a493db2160ed 100644
--- a/sound/core/hwdep.c
+++ b/sound/core/hwdep.c
@@ -375,7 +375,7 @@ int snd_hwdep_new(struct snd_card *card, char *id, int device,
 		return -ENXIO;
 	if (rhwdep)
 		*rhwdep = NULL;
-	hwdep = kzalloc(sizeof(*hwdep), GFP_KERNEL);
+	hwdep = kzalloc_obj(*hwdep, GFP_KERNEL);
 	if (!hwdep)
 		return -ENOMEM;

diff --git a/sound/core/info.c b/sound/core/info.c
index 1f5b8a3d9e3b..de8ec34360ee 100644
--- a/sound/core/info.c
+++ b/sound/core/info.c
@@ -79,7 +79,7 @@ static int alloc_info_private(struct snd_info_entry *entry,
 		return -ENODEV;
 	if (!try_module_get(entry->module))
 		return -EFAULT;
-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data) {
 		module_put(entry->module);
 		return -ENOMEM;
@@ -311,7 +311,7 @@ static ssize_t snd_info_text_entry_write(struct file *file,
 	guard(mutex)(&entry->access);
 	buf = data->wbuffer;
 	if (!buf) {
-		data->wbuffer = buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+		data->wbuffer = buf = kzalloc_obj(*buf, GFP_KERNEL);
 		if (!buf)
 			return -ENOMEM;
 	}
@@ -355,7 +355,7 @@ static int snd_info_text_entry_open(struct inode *inode, struct file *file)
 	if (err < 0)
 		return err;

-	data->rbuffer = kzalloc(sizeof(*data->rbuffer), GFP_KERNEL);
+	data->rbuffer = kzalloc_obj(*data->rbuffer, GFP_KERNEL);
 	if (!data->rbuffer) {
 		err = -ENOMEM;
 		goto error;
@@ -663,7 +663,7 @@ snd_info_create_entry(const char *name, struct snd_info_entry *parent,
 		      struct module *module)
 {
 	struct snd_info_entry *entry;
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (entry == NULL)
 		return NULL;
 	entry->name = kstrdup(name, GFP_KERNEL);
diff --git a/sound/core/init.c b/sound/core/init.c
index c372b3228785..84c11bd49a95 100644
--- a/sound/core/init.c
+++ b/sound/core/init.c
@@ -129,7 +129,7 @@ int snd_device_alloc(struct device **dev_p, struct snd_card *card)
 	struct device *dev;

 	*dev_p = NULL;
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 	device_initialize(dev);
@@ -1060,7 +1060,7 @@ int snd_card_file_add(struct snd_card *card, struct file *file)
 {
 	struct snd_monitor_file *mfile;

-	mfile = kmalloc(sizeof(*mfile), GFP_KERNEL);
+	mfile = kmalloc_obj(*mfile, GFP_KERNEL);
 	if (mfile == NULL)
 		return -ENOMEM;
 	mfile->file = file;
diff --git a/sound/core/jack.c b/sound/core/jack.c
index 93e357a23f17..7160c260d06c 100644
--- a/sound/core/jack.c
+++ b/sound/core/jack.c
@@ -440,7 +440,7 @@ static struct snd_jack_kctl * snd_jack_kctl_new(struct snd_card *card, const cha
 	if (err < 0)
 		return NULL;

-	jack_kctl = kzalloc(sizeof(*jack_kctl), GFP_KERNEL);
+	jack_kctl = kzalloc_obj(*jack_kctl, GFP_KERNEL);

 	if (!jack_kctl)
 		goto error;
@@ -516,7 +516,7 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
 			return -ENOMEM;
 	}

-	jack = kzalloc(sizeof(struct snd_jack), GFP_KERNEL);
+	jack = kzalloc_obj(struct snd_jack, GFP_KERNEL);
 	if (jack == NULL)
 		return -ENOMEM;

diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c
index b3853583d2ae..bb483a2d7ff2 100644
--- a/sound/core/memalloc.c
+++ b/sound/core/memalloc.c
@@ -719,12 +719,12 @@ static void *snd_dma_sg_fallback_alloc(struct snd_dma_buffer *dmab, size_t size)
 	unsigned int idx, npages;
 	void *p;

-	sgbuf = kzalloc(sizeof(*sgbuf), GFP_KERNEL);
+	sgbuf = kzalloc_obj(*sgbuf, GFP_KERNEL);
 	if (!sgbuf)
 		return NULL;
 	size = PAGE_ALIGN(size);
 	sgbuf->count = size >> PAGE_SHIFT;
-	sgbuf->pages = kvcalloc(sgbuf->count, sizeof(*sgbuf->pages), GFP_KERNEL);
+	sgbuf->pages = kvzalloc_objs(*sgbuf->pages, sgbuf->count, GFP_KERNEL);
 	sgbuf->npages = kvcalloc(sgbuf->count, sizeof(*sgbuf->npages), GFP_KERNEL);
 	if (!sgbuf->pages || !sgbuf->npages)
 		goto error;
diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c
index f4ad0bfb4dac..05c8e44cd428 100644
--- a/sound/core/oss/mixer_oss.c
+++ b/sound/core/oss/mixer_oss.c
@@ -47,7 +47,7 @@ static int snd_mixer_oss_open(struct inode *inode, struct file *file)
 		snd_card_unref(card);
 		return err;
 	}
-	fmixer = kzalloc(sizeof(*fmixer), GFP_KERNEL);
+	fmixer = kzalloc_obj(*fmixer, GFP_KERNEL);
 	if (fmixer == NULL) {
 		snd_card_file_remove(card, file);
 		snd_card_unref(card);
@@ -530,9 +530,9 @@ static void snd_mixer_oss_get_volume1_vol(struct snd_mixer_oss_file *fmixer,
 		return;

 	struct snd_ctl_elem_info *uinfo __free(kfree) =
-		kzalloc(sizeof(*uinfo), GFP_KERNEL);
+		kzalloc_obj(*uinfo, GFP_KERNEL);
 	struct snd_ctl_elem_value *uctl __free(kfree) =
-		kzalloc(sizeof(*uctl), GFP_KERNEL);
+		kzalloc_obj(*uctl, GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		return;
 	if (kctl->info(kctl, uinfo))
@@ -566,9 +566,9 @@ static void snd_mixer_oss_get_volume1_sw(struct snd_mixer_oss_file *fmixer,
 		return;

 	struct snd_ctl_elem_info *uinfo __free(kfree) =
-		kzalloc(sizeof(*uinfo), GFP_KERNEL);
+		kzalloc_obj(*uinfo, GFP_KERNEL);
 	struct snd_ctl_elem_value *uctl __free(kfree) =
-		kzalloc(sizeof(*uctl), GFP_KERNEL);
+		kzalloc_obj(*uctl, GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		return;
 	if (kctl->info(kctl, uinfo))
@@ -629,9 +629,9 @@ static void snd_mixer_oss_put_volume1_vol(struct snd_mixer_oss_file *fmixer,
 		return;

 	struct snd_ctl_elem_info *uinfo __free(kfree) =
-		kzalloc(sizeof(*uinfo), GFP_KERNEL);
+		kzalloc_obj(*uinfo, GFP_KERNEL);
 	struct snd_ctl_elem_value *uctl __free(kfree) =
-		kzalloc(sizeof(*uctl), GFP_KERNEL);
+		kzalloc_obj(*uctl, GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		return;
 	if (kctl->info(kctl, uinfo))
@@ -669,9 +669,9 @@ static void snd_mixer_oss_put_volume1_sw(struct snd_mixer_oss_file *fmixer,
 		return;

 	struct snd_ctl_elem_info *uinfo __free(kfree) =
-		kzalloc(sizeof(*uinfo), GFP_KERNEL);
+		kzalloc_obj(*uinfo, GFP_KERNEL);
 	struct snd_ctl_elem_value *uctl __free(kfree) =
-		kzalloc(sizeof(*uctl), GFP_KERNEL);
+		kzalloc_obj(*uctl, GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		return;
 	if (kctl->info(kctl, uinfo))
@@ -798,9 +798,9 @@ static int snd_mixer_oss_get_recsrc2(struct snd_mixer_oss_file *fmixer, unsigned
 	int err, idx;

 	struct snd_ctl_elem_info *uinfo __free(kfree) =
-		kzalloc(sizeof(*uinfo), GFP_KERNEL);
+		kzalloc_obj(*uinfo, GFP_KERNEL);
 	struct snd_ctl_elem_value *uctl __free(kfree) =
-		kzalloc(sizeof(*uctl), GFP_KERNEL);
+		kzalloc_obj(*uctl, GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		return -ENOMEM;
 	guard(rwsem_read)(&card->controls_rwsem);
@@ -843,9 +843,9 @@ static int snd_mixer_oss_put_recsrc2(struct snd_mixer_oss_file *fmixer, unsigned
 	unsigned int idx;

 	struct snd_ctl_elem_info *uinfo __free(kfree) =
-		kzalloc(sizeof(*uinfo), GFP_KERNEL);
+		kzalloc_obj(*uinfo, GFP_KERNEL);
 	struct snd_ctl_elem_value *uctl __free(kfree) =
-		kzalloc(sizeof(*uctl), GFP_KERNEL);
+		kzalloc_obj(*uctl, GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		return -ENOMEM;
 	guard(rwsem_read)(&card->controls_rwsem);
@@ -1027,7 +1027,7 @@ static int snd_mixer_oss_build_input(struct snd_mixer_oss *mixer,
 		kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0);
 	if (kctl) {
 		struct snd_ctl_elem_info *uinfo __free(kfree) =
-			kzalloc(sizeof(*uinfo), GFP_KERNEL);
+			kzalloc_obj(*uinfo, GFP_KERNEL);

 		if (!uinfo)
 			return -ENOMEM;
@@ -1055,7 +1055,7 @@ static int snd_mixer_oss_build_input(struct snd_mixer_oss *mixer,
 		}
 	}
 	if (slot.present != 0) {
-		pslot = kmalloc(sizeof(slot), GFP_KERNEL);
+		pslot = kmalloc_obj(slot, GFP_KERNEL);
 		if (! pslot)
 			return -ENOMEM;
 		*pslot = slot;
@@ -1315,7 +1315,7 @@ static int snd_mixer_oss_notify_handler(struct snd_card *card, int cmd)
 	if (cmd == SND_MIXER_OSS_NOTIFY_REGISTER) {
 		int idx, err;

-		mixer = kcalloc(2, sizeof(*mixer), GFP_KERNEL);
+		mixer = kzalloc_objs(*mixer, 2, GFP_KERNEL);
 		if (mixer == NULL)
 			return -ENOMEM;
 		mutex_init(&mixer->reg_mutex);
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index 3bc94d34b35e..cf3509c2be15 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -398,7 +398,7 @@ static int snd_pcm_hw_param_near(struct snd_pcm_substream *pcm,
 	}

 	struct snd_pcm_hw_params *save __free(kfree) =
-		kmalloc(sizeof(*save), GFP_KERNEL);
+		kmalloc_obj(*save, GFP_KERNEL);
 	if (save == NULL)
 		return -ENOMEM;
 	*save = *params;
@@ -411,7 +411,7 @@ static int snd_pcm_hw_param_near(struct snd_pcm_substream *pcm,
 			goto _end;

 		struct snd_pcm_hw_params *params1 __free(kfree) =
-			kmalloc(sizeof(*params1), GFP_KERNEL);
+			kmalloc_obj(*params1, GFP_KERNEL);
 		if (params1 == NULL)
 			return -ENOMEM;
 		*params1 = *save;
@@ -786,7 +786,7 @@ static int choose_rate(struct snd_pcm_substream *substream,
 	unsigned int rate, prev;

 	struct snd_pcm_hw_params *save __free(kfree) =
-		kmalloc(sizeof(*save), GFP_KERNEL);
+		kmalloc_obj(*save, GFP_KERNEL);
 	if (save == NULL)
 		return -ENOMEM;
 	*save = *params;
@@ -861,9 +861,9 @@ static int snd_pcm_oss_change_params_locked(struct snd_pcm_substream *substream)

 	if (!runtime->oss.params)
 		return 0;
-	sw_params = kzalloc(sizeof(*sw_params), GFP_KERNEL);
-	params = kmalloc(sizeof(*params), GFP_KERNEL);
-	sparams = kmalloc(sizeof(*sparams), GFP_KERNEL);
+	sw_params = kzalloc_obj(*sw_params, GFP_KERNEL);
+	params = kmalloc_obj(*params, GFP_KERNEL);
+	sparams = kmalloc_obj(*sparams, GFP_KERNEL);
 	if (!sw_params || !params || !sparams) {
 		err = -ENOMEM;
 		goto failure;
@@ -1859,7 +1859,7 @@ static int snd_pcm_oss_get_formats(struct snd_pcm_oss_file *pcm_oss_file)
 			AFMT_S24_PACKED;

 	struct snd_pcm_hw_params *params __free(kfree) =
-		kmalloc(sizeof(*params), GFP_KERNEL);
+		kmalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;
 	_snd_pcm_hw_params_any(params);
@@ -2418,7 +2418,7 @@ static int snd_pcm_oss_open_file(struct file *file,
 	if (rpcm_oss_file)
 		*rpcm_oss_file = NULL;

-	pcm_oss_file = kzalloc(sizeof(*pcm_oss_file), GFP_KERNEL);
+	pcm_oss_file = kzalloc_obj(*pcm_oss_file, GFP_KERNEL);
 	if (pcm_oss_file == NULL)
 		return -ENOMEM;

@@ -3032,7 +3032,7 @@ static void snd_pcm_oss_proc_write(struct snd_info_entry *entry,
 			}
 		} while (*str);
 		if (setup == NULL) {
-			setup = kmalloc(sizeof(*setup), GFP_KERNEL);
+			setup = kmalloc_obj(*setup, GFP_KERNEL);
 			if (! setup) {
 				buffer->error = -ENOMEM;
 				return;
diff --git a/sound/core/oss/pcm_plugin.c b/sound/core/oss/pcm_plugin.c
index a4c8c9f538f1..e5a0e3c79f7e 100644
--- a/sound/core/oss/pcm_plugin.c
+++ b/sound/core/oss/pcm_plugin.c
@@ -163,7 +163,8 @@ int snd_pcm_plugin_build(struct snd_pcm_substream *plug,
 		channels = src_format->channels;
 	else
 		channels = dst_format->channels;
-	plugin->buf_channels = kcalloc(channels, sizeof(*plugin->buf_channels), GFP_KERNEL);
+	plugin->buf_channels = kzalloc_objs(*plugin->buf_channels, channels,
+					    GFP_KERNEL);
 	if (plugin->buf_channels == NULL) {
 		snd_pcm_plugin_free(plugin);
 		return -ENOMEM;
diff --git a/sound/core/pcm.c b/sound/core/pcm.c
index 0b512085eb63..e3c43b365207 100644
--- a/sound/core/pcm.c
+++ b/sound/core/pcm.c
@@ -334,7 +334,7 @@ static void snd_pcm_proc_info_read(struct snd_pcm_substream *substream,
 		return;

 	struct snd_pcm_info *info __free(kfree) =
-		kmalloc(sizeof(*info), GFP_KERNEL);
+		kmalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return;

@@ -657,7 +657,7 @@ int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count)
 	}
 	prev = NULL;
 	for (idx = 0, prev = NULL; idx < substream_count; idx++) {
-		substream = kzalloc(sizeof(*substream), GFP_KERNEL);
+		substream = kzalloc_obj(*substream, GFP_KERNEL);
 		if (!substream)
 			return -ENOMEM;
 		substream->pcm = pcm;
@@ -713,7 +713,7 @@ static int _snd_pcm_new(struct snd_card *card, const char *id, int device,
 		return -ENXIO;
 	if (rpcm)
 		*rpcm = NULL;
-	pcm = kzalloc(sizeof(*pcm), GFP_KERNEL);
+	pcm = kzalloc_obj(*pcm, GFP_KERNEL);
 	if (!pcm)
 		return -ENOMEM;
 	pcm->card = card;
@@ -935,7 +935,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream,
 	if (substream == NULL)
 		return -EAGAIN;

-	runtime = kzalloc(sizeof(*runtime), GFP_KERNEL);
+	runtime = kzalloc_obj(*runtime, GFP_KERNEL);
 	if (runtime == NULL)
 		return -ENOMEM;

diff --git a/sound/core/pcm_compat.c b/sound/core/pcm_compat.c
index e86f68f1f23c..71c74830083e 100644
--- a/sound/core/pcm_compat.c
+++ b/sound/core/pcm_compat.c
@@ -243,7 +243,7 @@ static int snd_pcm_ioctl_hw_params_compat(struct snd_pcm_substream *substream,
 		return -ENOTTY;

 	struct snd_pcm_hw_params *data __free(kfree) =
-		kmalloc(sizeof(*data), GFP_KERNEL);
+		kmalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/sound/core/pcm_dmaengine.c b/sound/core/pcm_dmaengine.c
index f0c17503df42..cc6ce33f4ff7 100644
--- a/sound/core/pcm_dmaengine.c
+++ b/sound/core/pcm_dmaengine.c
@@ -318,7 +318,7 @@ int snd_dmaengine_pcm_open(struct snd_pcm_substream *substream,
 	if (ret < 0)
 		return ret;

-	prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
+	prtd = kzalloc_obj(*prtd, GFP_KERNEL);
 	if (!prtd)
 		return -ENOMEM;

diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index 6eaa950504cf..70f279865adc 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -2601,7 +2601,7 @@ int snd_pcm_add_chmap_ctls(struct snd_pcm *pcm, int stream,

 	if (WARN_ON(pcm->streams[stream].chmap_kctl))
 		return -EBUSY;
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	info->pcm = pcm;
diff --git a/sound/core/pcm_memory.c b/sound/core/pcm_memory.c
index 56725d36825b..2ef02871f84f 100644
--- a/sound/core/pcm_memory.c
+++ b/sound/core/pcm_memory.c
@@ -448,7 +448,7 @@ int snd_pcm_lib_malloc_pages(struct snd_pcm_substream *substream, size_t size)
 		/* dma_max=0 means the fixed size preallocation */
 		if (substream->dma_buffer.area && !substream->dma_max)
 			return -ENOMEM;
-		dmab = kzalloc(sizeof(*dmab), GFP_KERNEL);
+		dmab = kzalloc_obj(*dmab, GFP_KERNEL);
 		if (! dmab)
 			return -ENOMEM;
 		dmab->dev = substream->dma_buffer.dev;
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 0a358d94b17c..a7e24be8c7db 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -244,7 +244,7 @@ int snd_pcm_info_user(struct snd_pcm_substream *substream,
 {
 	int err;
 	struct snd_pcm_info *info __free(kfree) =
-		kmalloc(sizeof(*info), GFP_KERNEL);
+		kmalloc_obj(*info, GFP_KERNEL);

 	if (! info)
 		return -ENOMEM;
@@ -2812,7 +2812,7 @@ static int snd_pcm_open_file(struct file *file,
 	if (err < 0)
 		return err;

-	pcm_file = kzalloc(sizeof(*pcm_file), GFP_KERNEL);
+	pcm_file = kzalloc_obj(*pcm_file, GFP_KERNEL);
 	if (pcm_file == NULL) {
 		snd_pcm_release_substream(substream);
 		return -ENOMEM;
@@ -4111,7 +4111,7 @@ static int snd_pcm_hw_refine_old_user(struct snd_pcm_substream *substream,
 	int err;

 	struct snd_pcm_hw_params *params __free(kfree) =
-		kmalloc(sizeof(*params), GFP_KERNEL);
+		kmalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

@@ -4140,7 +4140,7 @@ static int snd_pcm_hw_params_old_user(struct snd_pcm_substream *substream,
 	int err;

 	struct snd_pcm_hw_params *params __free(kfree) =
-		kmalloc(sizeof(*params), GFP_KERNEL);
+		kmalloc_obj(*params, GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
index 8969ee2757f1..ae93d968e083 100644
--- a/sound/core/rawmidi.c
+++ b/sound/core/rawmidi.c
@@ -159,7 +159,7 @@ static int snd_rawmidi_runtime_create(struct snd_rawmidi_substream *substream)
 {
 	struct snd_rawmidi_runtime *runtime;

-	runtime = kzalloc(sizeof(*runtime), GFP_KERNEL);
+	runtime = kzalloc_obj(*runtime, GFP_KERNEL);
 	if (!runtime)
 		return -ENOMEM;
 	runtime->substream = substream;
@@ -472,7 +472,7 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file)
 	fflags = snd_rawmidi_file_flags(file);
 	if ((file->f_flags & O_APPEND) || maj == SOUND_MAJOR) /* OSS emul? */
 		fflags |= SNDRV_RAWMIDI_LFLG_APPEND;
-	rawmidi_file = kmalloc(sizeof(*rawmidi_file), GFP_KERNEL);
+	rawmidi_file = kmalloc_obj(*rawmidi_file, GFP_KERNEL);
 	if (rawmidi_file == NULL) {
 		err = -ENOMEM;
 		goto __error;
@@ -1803,7 +1803,7 @@ static int snd_rawmidi_alloc_substreams(struct snd_rawmidi *rmidi,
 	int idx;

 	for (idx = 0; idx < count; idx++) {
-		substream = kzalloc(sizeof(*substream), GFP_KERNEL);
+		substream = kzalloc_obj(*substream, GFP_KERNEL);
 		if (!substream)
 			return -ENOMEM;
 		substream->stream = direction;
@@ -1891,7 +1891,7 @@ int snd_rawmidi_new(struct snd_card *card, char *id, int device,

 	if (rrawmidi)
 		*rrawmidi = NULL;
-	rmidi = kzalloc(sizeof(*rmidi), GFP_KERNEL);
+	rmidi = kzalloc_obj(*rmidi, GFP_KERNEL);
 	if (!rmidi)
 		return -ENOMEM;
 	err = snd_rawmidi_init(rmidi, card, id, device,
diff --git a/sound/core/seq/oss/seq_oss_init.c b/sound/core/seq/oss/seq_oss_init.c
index e0c368bd09cb..af8e14325239 100644
--- a/sound/core/seq/oss/seq_oss_init.c
+++ b/sound/core/seq/oss/seq_oss_init.c
@@ -65,7 +65,7 @@ snd_seq_oss_create_client(void)
 	int rc;
 	struct snd_seq_port_callback port_callback;
 	struct snd_seq_port_info *port __free(kfree) =
-		kzalloc(sizeof(*port), GFP_KERNEL);
+		kzalloc_obj(*port, GFP_KERNEL);

 	if (!port)
 		return -ENOMEM;
@@ -168,7 +168,7 @@ snd_seq_oss_open(struct file *file, int level)
 	int i, rc;
 	struct seq_oss_devinfo *dp;

-	dp = kzalloc(sizeof(*dp), GFP_KERNEL);
+	dp = kzalloc_obj(*dp, GFP_KERNEL);
 	if (!dp)
 		return -ENOMEM;

diff --git a/sound/core/seq/oss/seq_oss_midi.c b/sound/core/seq/oss/seq_oss_midi.c
index 2d48c25ff4df..989e9a7069e3 100644
--- a/sound/core/seq/oss/seq_oss_midi.c
+++ b/sound/core/seq/oss/seq_oss_midi.c
@@ -66,9 +66,9 @@ int
 snd_seq_oss_midi_lookup_ports(int client)
 {
 	struct snd_seq_client_info *clinfo __free(kfree) =
-		kzalloc(sizeof(*clinfo), GFP_KERNEL);
+		kzalloc_obj(*clinfo, GFP_KERNEL);
 	struct snd_seq_port_info *pinfo __free(kfree) =
-		kzalloc(sizeof(*pinfo), GFP_KERNEL);
+		kzalloc_obj(*pinfo, GFP_KERNEL);

 	if (!clinfo || !pinfo)
 		return -ENOMEM;
@@ -153,7 +153,7 @@ snd_seq_oss_midi_check_new_port(struct snd_seq_port_info *pinfo)
 	/*
 	 * allocate midi info record
 	 */
-	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
+	mdev = kzalloc_obj(*mdev, GFP_KERNEL);
 	if (!mdev)
 		return -ENOMEM;

diff --git a/sound/core/seq/oss/seq_oss_readq.c b/sound/core/seq/oss/seq_oss_readq.c
index bbaf72e70b35..014efc191c71 100644
--- a/sound/core/seq/oss/seq_oss_readq.c
+++ b/sound/core/seq/oss/seq_oss_readq.c
@@ -34,11 +34,11 @@ snd_seq_oss_readq_new(struct seq_oss_devinfo *dp, int maxlen)
 {
 	struct seq_oss_readq *q;

-	q = kzalloc(sizeof(*q), GFP_KERNEL);
+	q = kzalloc_obj(*q, GFP_KERNEL);
 	if (!q)
 		return NULL;

-	q->q = kcalloc(maxlen, sizeof(union evrec), GFP_KERNEL);
+	q->q = kzalloc_objs(union evrec, maxlen, GFP_KERNEL);
 	if (!q->q) {
 		kfree(q);
 		return NULL;
diff --git a/sound/core/seq/oss/seq_oss_synth.c b/sound/core/seq/oss/seq_oss_synth.c
index c7f81f2053a7..b19b8756638d 100644
--- a/sound/core/seq/oss/seq_oss_synth.c
+++ b/sound/core/seq/oss/seq_oss_synth.c
@@ -213,7 +213,8 @@ snd_seq_oss_synth_setup(struct seq_oss_devinfo *dp)
 		}
 		info->nr_voices = rec->nr_voices;
 		if (info->nr_voices > 0) {
-			info->ch = kcalloc(info->nr_voices, sizeof(struct seq_oss_chinfo), GFP_KERNEL);
+			info->ch = kzalloc_objs(struct seq_oss_chinfo,
+						info->nr_voices, GFP_KERNEL);
 			if (!info->ch) {
 				rec->oper.close(&info->arg);
 				module_put(rec->oper.owner);
diff --git a/sound/core/seq/oss/seq_oss_timer.c b/sound/core/seq/oss/seq_oss_timer.c
index f9f57232a83f..32f1ff225cf5 100644
--- a/sound/core/seq/oss/seq_oss_timer.c
+++ b/sound/core/seq/oss/seq_oss_timer.c
@@ -34,7 +34,7 @@ snd_seq_oss_timer_new(struct seq_oss_devinfo *dp)
 {
 	struct seq_oss_timer *rec;

-	rec = kzalloc(sizeof(*rec), GFP_KERNEL);
+	rec = kzalloc_obj(*rec, GFP_KERNEL);
 	if (rec == NULL)
 		return NULL;

diff --git a/sound/core/seq/oss/seq_oss_writeq.c b/sound/core/seq/oss/seq_oss_writeq.c
index a93ff8315b8e..dfc20d9bcc30 100644
--- a/sound/core/seq/oss/seq_oss_writeq.c
+++ b/sound/core/seq/oss/seq_oss_writeq.c
@@ -27,7 +27,7 @@ snd_seq_oss_writeq_new(struct seq_oss_devinfo *dp, int maxlen)
 	struct seq_oss_writeq *q;
 	struct snd_seq_client_pool pool;

-	q = kzalloc(sizeof(*q), GFP_KERNEL);
+	q = kzalloc_obj(*q, GFP_KERNEL);
 	if (!q)
 		return NULL;
 	q->dp = dp;
diff --git a/sound/core/seq/seq_compat.c b/sound/core/seq/seq_compat.c
index 260428747e33..a771684eac34 100644
--- a/sound/core/seq/seq_compat.c
+++ b/sound/core/seq/seq_compat.c
@@ -33,7 +33,7 @@ static int snd_seq_call_port_info_ioctl(struct snd_seq_client *client, unsigned
 {
 	int err;
 	struct snd_seq_port_info *data __free(kfree) =
-		kmalloc(sizeof(*data), GFP_KERNEL);
+		kmalloc_obj(*data, GFP_KERNEL);

 	if (!data)
 		return -ENOMEM;
diff --git a/sound/core/seq/seq_dummy.c b/sound/core/seq/seq_dummy.c
index 783fc72c2ef6..d8b77385aa3f 100644
--- a/sound/core/seq/seq_dummy.c
+++ b/sound/core/seq/seq_dummy.c
@@ -115,7 +115,7 @@ create_port(int idx, int type)
 	struct snd_seq_port_callback pcb;
 	struct snd_seq_dummy_port *rec;

-	rec = kzalloc(sizeof(*rec), GFP_KERNEL);
+	rec = kzalloc_obj(*rec, GFP_KERNEL);
 	if (!rec)
 		return NULL;

diff --git a/sound/core/seq/seq_fifo.c b/sound/core/seq/seq_fifo.c
index 91cce1890111..ad15d001cef7 100644
--- a/sound/core/seq/seq_fifo.c
+++ b/sound/core/seq/seq_fifo.c
@@ -19,7 +19,7 @@ struct snd_seq_fifo *snd_seq_fifo_new(int poolsize)
 {
 	struct snd_seq_fifo *f;

-	f = kzalloc(sizeof(*f), GFP_KERNEL);
+	f = kzalloc_obj(*f, GFP_KERNEL);
 	if (!f)
 		return NULL;

diff --git a/sound/core/seq/seq_memory.c b/sound/core/seq/seq_memory.c
index ccde0ca3d208..8a14d6e59c82 100644
--- a/sound/core/seq/seq_memory.c
+++ b/sound/core/seq/seq_memory.c
@@ -441,9 +441,8 @@ int snd_seq_pool_init(struct snd_seq_pool *pool)
 	if (snd_BUG_ON(!pool))
 		return -EINVAL;

-	cellptr = kvmalloc_array(pool->size,
-				 sizeof(struct snd_seq_event_cell),
-				 GFP_KERNEL);
+	cellptr = kvmalloc_objs(struct snd_seq_event_cell, pool->size,
+				GFP_KERNEL);
 	if (!cellptr)
 		return -ENOMEM;

@@ -518,7 +517,7 @@ struct snd_seq_pool *snd_seq_pool_new(int poolsize)
 	struct snd_seq_pool *pool;

 	/* create pool block */
-	pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+	pool = kzalloc_obj(*pool, GFP_KERNEL);
 	if (!pool)
 		return NULL;
 	spin_lock_init(&pool->lock);
diff --git a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c
index 88e930980f16..72e798ddbe4e 100644
--- a/sound/core/seq/seq_midi.c
+++ b/sound/core/seq/seq_midi.c
@@ -281,7 +281,7 @@ snd_seq_midisynth_probe(struct snd_seq_device *dev)
 		return -EINVAL;

 	struct snd_rawmidi_info *info __free(kfree) =
-		kmalloc(sizeof(*info), GFP_KERNEL);
+		kmalloc_obj(*info, GFP_KERNEL);
 	if (! info)
 		return -ENOMEM;
 	info->device = device;
@@ -305,7 +305,7 @@ snd_seq_midisynth_probe(struct snd_seq_device *dev)
 	client = synths[card->number];
 	if (client == NULL) {
 		newclient = 1;
-		client = kzalloc(sizeof(*client), GFP_KERNEL);
+		client = kzalloc_obj(*client, GFP_KERNEL);
 		if (client == NULL)
 			return -ENOMEM;
 		client->seq_client =
@@ -318,10 +318,10 @@ snd_seq_midisynth_probe(struct snd_seq_device *dev)
 		}
 	}

-	msynth = kcalloc(ports, sizeof(struct seq_midisynth), GFP_KERNEL);
+	msynth = kzalloc_objs(struct seq_midisynth, ports, GFP_KERNEL);

 	struct snd_seq_port_info *port __free(kfree) =
-		kmalloc(sizeof(*port), GFP_KERNEL);
+		kmalloc_obj(*port, GFP_KERNEL);
 	if (msynth == NULL || port == NULL)
 		goto __nomem;

diff --git a/sound/core/seq/seq_midi_emul.c b/sound/core/seq/seq_midi_emul.c
index 81d2ef5e5811..0e9461d0f9f8 100644
--- a/sound/core/seq/seq_midi_emul.c
+++ b/sound/core/seq/seq_midi_emul.c
@@ -650,7 +650,7 @@ static struct snd_midi_channel *snd_midi_channel_init_set(int n)
 	struct snd_midi_channel *chan;
 	int  i;

-	chan = kmalloc_array(n, sizeof(struct snd_midi_channel), GFP_KERNEL);
+	chan = kmalloc_objs(struct snd_midi_channel, n, GFP_KERNEL);
 	if (chan) {
 		for (i = 0; i < n; i++)
 			snd_midi_channel_init(chan+i, i);
@@ -688,7 +688,7 @@ struct snd_midi_channel_set *snd_midi_channel_alloc_set(int n)
 {
 	struct snd_midi_channel_set *chset;

-	chset = kmalloc(sizeof(*chset), GFP_KERNEL);
+	chset = kmalloc_obj(*chset, GFP_KERNEL);
 	if (chset) {
 		chset->channels = snd_midi_channel_init_set(n);
 		chset->private_data = NULL;
diff --git a/sound/core/seq/seq_midi_event.c b/sound/core/seq/seq_midi_event.c
index fa9dfc53c3fc..c2a9b0540c09 100644
--- a/sound/core/seq/seq_midi_event.c
+++ b/sound/core/seq/seq_midi_event.c
@@ -104,7 +104,7 @@ int snd_midi_event_new(int bufsize, struct snd_midi_event **rdev)
 	struct snd_midi_event *dev;

 	*rdev = NULL;
-	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc_obj(*dev, GFP_KERNEL);
 	if (dev == NULL)
 		return -ENOMEM;
 	if (bufsize > 0) {
diff --git a/sound/core/seq/seq_ports.c b/sound/core/seq/seq_ports.c
index bbec34bba4f9..1b395caaae49 100644
--- a/sound/core/seq/seq_ports.c
+++ b/sound/core/seq/seq_ports.c
@@ -129,7 +129,7 @@ int snd_seq_create_port(struct snd_seq_client *client, int port,
 	}

 	/* create a new port */
-	new_port = kzalloc(sizeof(*new_port), GFP_KERNEL);
+	new_port = kzalloc_obj(*new_port, GFP_KERNEL);
 	if (!new_port)
 		return -ENOMEM;	/* failure, out of memory */
 	/* init port data */
@@ -572,7 +572,7 @@ int snd_seq_port_connect(struct snd_seq_client *connector,
 	bool exclusive;
 	int err;

-	subs = kzalloc(sizeof(*subs), GFP_KERNEL);
+	subs = kzalloc_obj(*subs, GFP_KERNEL);
 	if (!subs)
 		return -ENOMEM;

diff --git a/sound/core/seq/seq_prioq.c b/sound/core/seq/seq_prioq.c
index e649485a8772..805c4ebbfdac 100644
--- a/sound/core/seq/seq_prioq.c
+++ b/sound/core/seq/seq_prioq.c
@@ -43,7 +43,7 @@ struct snd_seq_prioq *snd_seq_prioq_new(void)
 {
 	struct snd_seq_prioq *f;

-	f = kzalloc(sizeof(*f), GFP_KERNEL);
+	f = kzalloc_obj(*f, GFP_KERNEL);
 	if (!f)
 		return NULL;

diff --git a/sound/core/seq/seq_queue.c b/sound/core/seq/seq_queue.c
index c0c5e1424c5a..8c7b24a9421a 100644
--- a/sound/core/seq/seq_queue.c
+++ b/sound/core/seq/seq_queue.c
@@ -89,7 +89,7 @@ static struct snd_seq_queue *queue_new(int owner, int locked)
 {
 	struct snd_seq_queue *q;

-	q = kzalloc(sizeof(*q), GFP_KERNEL);
+	q = kzalloc_obj(*q, GFP_KERNEL);
 	if (!q)
 		return NULL;

diff --git a/sound/core/seq/seq_system.c b/sound/core/seq/seq_system.c
index 5b5603e5970b..d7d84576c3d6 100644
--- a/sound/core/seq/seq_system.c
+++ b/sound/core/seq/seq_system.c
@@ -130,7 +130,7 @@ int __init snd_seq_system_client_init(void)
 	struct snd_seq_port_info *port;
 	int err;

-	port = kzalloc(sizeof(*port), GFP_KERNEL);
+	port = kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

diff --git a/sound/core/seq/seq_timer.c b/sound/core/seq/seq_timer.c
index 29b018a212fc..c5728efa05af 100644
--- a/sound/core/seq/seq_timer.c
+++ b/sound/core/seq/seq_timer.c
@@ -43,7 +43,7 @@ struct snd_seq_timer *snd_seq_timer_new(void)
 {
 	struct snd_seq_timer *tmr;

-	tmr = kzalloc(sizeof(*tmr), GFP_KERNEL);
+	tmr = kzalloc_obj(*tmr, GFP_KERNEL);
 	if (!tmr)
 		return NULL;
 	spin_lock_init(&tmr->lock);
diff --git a/sound/core/seq/seq_ump_client.c b/sound/core/seq/seq_ump_client.c
index 7bc18415a540..3ca808c787e2 100644
--- a/sound/core/seq/seq_ump_client.c
+++ b/sound/core/seq/seq_ump_client.c
@@ -220,7 +220,7 @@ static int seq_ump_group_init(struct seq_ump_client *client, int group_index)
 		return 0;

 	struct snd_seq_port_info *port __free(kfree) =
-		kzalloc(sizeof(*port), GFP_KERNEL);
+		kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

@@ -246,9 +246,9 @@ static void update_port_infos(struct seq_ump_client *client)
 	int i, err;

 	struct snd_seq_port_info *old __free(kfree) =
-		kzalloc(sizeof(*old), GFP_KERNEL);
+		kzalloc_obj(*old, GFP_KERNEL);
 	struct snd_seq_port_info *new __free(kfree) =
-		kzalloc(sizeof(*new), GFP_KERNEL);
+		kzalloc_obj(*new, GFP_KERNEL);
 	if (!old || !new)
 		return;

@@ -283,7 +283,7 @@ static int create_ump_endpoint_port(struct seq_ump_client *client)
 	int err;

 	struct snd_seq_port_info *port __free(kfree) =
-		kzalloc(sizeof(*port), GFP_KERNEL);
+		kzalloc_obj(*port, GFP_KERNEL);
 	if (!port)
 		return -ENOMEM;

@@ -461,7 +461,7 @@ static int snd_seq_ump_probe(struct snd_seq_device *dev)
 	struct snd_seq_client *cptr;
 	int p, err;

-	client = kzalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc_obj(*client, GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;

diff --git a/sound/core/seq/seq_virmidi.c b/sound/core/seq/seq_virmidi.c
index 574493fbd50d..16d61847c7fe 100644
--- a/sound/core/seq/seq_virmidi.c
+++ b/sound/core/seq/seq_virmidi.c
@@ -216,7 +216,7 @@ static int snd_virmidi_output_open(struct snd_rawmidi_substream *substream)
 	struct snd_rawmidi_runtime *runtime = substream->runtime;
 	struct snd_virmidi *vmidi;

-	vmidi = kzalloc(sizeof(*vmidi), GFP_KERNEL);
+	vmidi = kzalloc_obj(*vmidi, GFP_KERNEL);
 	if (vmidi == NULL)
 		return -ENOMEM;
 	vmidi->substream = substream;
@@ -367,7 +367,7 @@ static int snd_virmidi_dev_attach_seq(struct snd_virmidi_dev *rdev)
 		return 0;

 	struct snd_seq_port_info *pinfo __free(kfree) =
-		kzalloc(sizeof(*pinfo), GFP_KERNEL);
+		kzalloc_obj(*pinfo, GFP_KERNEL);
 	if (!pinfo)
 		return -ENOMEM;

@@ -498,7 +498,7 @@ int snd_virmidi_new(struct snd_card *card, int device, struct snd_rawmidi **rrmi
 	if (err < 0)
 		return err;
 	strscpy(rmidi->name, rmidi->id);
-	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+	rdev = kzalloc_obj(*rdev, GFP_KERNEL);
 	if (rdev == NULL) {
 		snd_device_free(card, rmidi);
 		return -ENOMEM;
diff --git a/sound/core/sound.c b/sound/core/sound.c
index 6531a67f13b3..876fac770749 100644
--- a/sound/core/sound.c
+++ b/sound/core/sound.c
@@ -257,7 +257,7 @@ int snd_register_device(int type, struct snd_card *card, int dev,
 	if (snd_BUG_ON(!device))
 		return -EINVAL;

-	preg = kmalloc(sizeof *preg, GFP_KERNEL);
+	preg = kmalloc_obj(*preg, GFP_KERNEL);
 	if (preg == NULL)
 		return -ENOMEM;
 	preg->type = type;
diff --git a/sound/core/sound_oss.c b/sound/core/sound_oss.c
index d65cc6fee2e6..6d4e44656e19 100644
--- a/sound/core/sound_oss.c
+++ b/sound/core/sound_oss.c
@@ -96,7 +96,7 @@ int snd_register_oss_device(int type, struct snd_card *card, int dev,
 		return 0; /* ignore silently */
 	if (minor < 0)
 		return minor;
-	preg = kmalloc(sizeof(struct snd_minor), GFP_KERNEL);
+	preg = kmalloc_obj(struct snd_minor, GFP_KERNEL);
 	if (preg == NULL)
 		return -ENOMEM;
 	preg->type = type;
diff --git a/sound/core/timer.c b/sound/core/timer.c
index 9a4a1748ff80..7d10f079b5b3 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
@@ -151,7 +151,7 @@ struct snd_timer_instance *snd_timer_instance_new(const char *owner)
 {
 	struct snd_timer_instance *timeri;

-	timeri = kzalloc(sizeof(*timeri), GFP_KERNEL);
+	timeri = kzalloc_obj(*timeri, GFP_KERNEL);
 	if (timeri == NULL)
 		return NULL;
 	timeri->owner = kstrdup(owner, GFP_KERNEL);
@@ -930,7 +930,7 @@ int snd_timer_new(struct snd_card *card, char *id, struct snd_timer_id *tid,
 	}
 	if (rtimer)
 		*rtimer = NULL;
-	timer = kzalloc(sizeof(*timer), GFP_KERNEL);
+	timer = kzalloc_obj(*timer, GFP_KERNEL);
 	if (!timer)
 		return -ENOMEM;
 	timer->tmr_class = tid->dev_class;
@@ -1197,7 +1197,7 @@ static int snd_timer_register_system(void)
 		return err;
 	strscpy(timer->name, "system timer");
 	timer->hw = snd_timer_system;
-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+	priv = kzalloc_obj(*priv, GFP_KERNEL);
 	if (priv == NULL) {
 		snd_timer_free(timer);
 		return -ENOMEM;
@@ -1432,11 +1432,11 @@ static int realloc_user_queue(struct snd_timer_user *tu, int size)
 	struct snd_timer_tread64 *tqueue = NULL;

 	if (tu->tread) {
-		tqueue = kcalloc(size, sizeof(*tqueue), GFP_KERNEL);
+		tqueue = kzalloc_objs(*tqueue, size, GFP_KERNEL);
 		if (!tqueue)
 			return -ENOMEM;
 	} else {
-		queue = kcalloc(size, sizeof(*queue), GFP_KERNEL);
+		queue = kzalloc_objs(*queue, size, GFP_KERNEL);
 		if (!queue)
 			return -ENOMEM;
 	}
@@ -1461,7 +1461,7 @@ static int snd_timer_user_open(struct inode *inode, struct file *file)
 	if (err < 0)
 		return err;

-	tu = kzalloc(sizeof(*tu), GFP_KERNEL);
+	tu = kzalloc_obj(*tu, GFP_KERNEL);
 	if (tu == NULL)
 		return -ENOMEM;
 	spin_lock_init(&tu->qlock);
@@ -2128,7 +2128,7 @@ static int snd_utimer_create(struct snd_timer_uinfo *utimer_info,
 	if (!utimer_info || utimer_info->resolution == 0)
 		return -EINVAL;

-	utimer = kzalloc(sizeof(*utimer), GFP_KERNEL);
+	utimer = kzalloc_obj(*utimer, GFP_KERNEL);
 	if (!utimer)
 		return -ENOMEM;

diff --git a/sound/core/ump.c b/sound/core/ump.c
index 8d8681a42ca5..543330c67b69 100644
--- a/sound/core/ump.c
+++ b/sound/core/ump.c
@@ -166,7 +166,7 @@ int snd_ump_endpoint_new(struct snd_card *card, char *id, int device,
 	if (input && output)
 		info_flags |= SNDRV_RAWMIDI_INFO_DUPLEX;

-	ump = kzalloc(sizeof(*ump), GFP_KERNEL);
+	ump = kzalloc_obj(*ump, GFP_KERNEL);
 	if (!ump)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&ump->block_list);
@@ -408,7 +408,7 @@ int snd_ump_block_new(struct snd_ump_endpoint *ump, unsigned int blk,
 	if (snd_ump_get_block(ump, blk))
 		return -EBUSY;

-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	fb = kzalloc_obj(*fb, GFP_KERNEL);
 	if (!fb)
 		return -ENOMEM;

@@ -1352,8 +1352,8 @@ int snd_ump_attach_legacy_rawmidi(struct snd_ump_endpoint *ump,
 	bool input, output;
 	int err, num;

-	ump->out_cvts = kcalloc(SNDRV_UMP_MAX_GROUPS,
-				sizeof(*ump->out_cvts), GFP_KERNEL);
+	ump->out_cvts = kzalloc_objs(*ump->out_cvts, SNDRV_UMP_MAX_GROUPS,
+				     GFP_KERNEL);
 	if (!ump->out_cvts)
 		return -ENOMEM;

diff --git a/sound/core/vmaster.c b/sound/core/vmaster.c
index 76cc64245f5d..e4185c3a2629 100644
--- a/sound/core/vmaster.c
+++ b/sound/core/vmaster.c
@@ -58,7 +58,7 @@ static int follower_update(struct link_follower *follower)
 {
 	int err, ch;
 	struct snd_ctl_elem_value *uctl __free(kfree) =
-		kzalloc(sizeof(*uctl), GFP_KERNEL);
+		kzalloc_obj(*uctl, GFP_KERNEL);

 	if (!uctl)
 		return -ENOMEM;
@@ -84,7 +84,7 @@ static int follower_init(struct link_follower *follower)
 	}

 	struct snd_ctl_elem_info *uinfo __free(kfree) =
-		kmalloc(sizeof(*uinfo), GFP_KERNEL);
+		kmalloc_obj(*uinfo, GFP_KERNEL);
 	if (!uinfo)
 		return -ENOMEM;
 	uinfo->id = follower->follower.id;
@@ -256,8 +256,7 @@ int _snd_ctl_add_follower(struct snd_kcontrol *master,
 	struct link_master *master_link = snd_kcontrol_chip(master);
 	struct link_follower *srec;

-	srec = kzalloc(struct_size(srec, follower.vd, follower->count),
-		       GFP_KERNEL);
+	srec = kzalloc_flex(*srec, follower.vd, follower->count, GFP_KERNEL);
 	if (!srec)
 		return -ENOMEM;
 	srec->kctl = follower;
@@ -342,7 +341,7 @@ static int sync_followers(struct link_master *master, int old_val, int new_val)
 {
 	struct link_follower *follower;
 	struct snd_ctl_elem_value *uval __free(kfree) =
-		kmalloc(sizeof(*uval), GFP_KERNEL);
+		kmalloc_obj(*uval, GFP_KERNEL);

 	if (!uval)
 		return -ENOMEM;
@@ -430,7 +429,7 @@ struct snd_kcontrol *snd_ctl_make_virtual_master(char *name,
 	knew.name = name;
 	knew.info = master_info;

-	master = kzalloc(sizeof(*master), GFP_KERNEL);
+	master = kzalloc_obj(*master, GFP_KERNEL);
 	if (!master)
 		return NULL;
 	INIT_LIST_HEAD(&master->followers);
diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
index 1860ff75fe15..33323c1f8dfe 100644
--- a/sound/drivers/dummy.c
+++ b/sound/drivers/dummy.c
@@ -329,7 +329,7 @@ static int dummy_systimer_create(struct snd_pcm_substream *substream)
 {
 	struct dummy_systimer_pcm *dpcm;

-	dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL);
+	dpcm = kzalloc_obj(*dpcm, GFP_KERNEL);
 	if (!dpcm)
 		return -ENOMEM;
 	substream->runtime->private_data = dpcm;
@@ -450,7 +450,7 @@ static int dummy_hrtimer_create(struct snd_pcm_substream *substream)
 {
 	struct dummy_hrtimer_pcm *dpcm;

-	dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL);
+	dpcm = kzalloc_obj(*dpcm, GFP_KERNEL);
 	if (!dpcm)
 		return -ENOMEM;
 	substream->runtime->private_data = dpcm;
diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c
index 4af89822bf32..1b573969918f 100644
--- a/sound/drivers/mpu401/mpu401_uart.c
+++ b/sound/drivers/mpu401/mpu401_uart.c
@@ -518,7 +518,7 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
 			      out_enable, in_enable, &rmidi);
 	if (err < 0)
 		return err;
-	mpu = kzalloc(sizeof(*mpu), GFP_KERNEL);
+	mpu = kzalloc_obj(*mpu, GFP_KERNEL);
 	if (!mpu) {
 		err = -ENOMEM;
 		goto free_device;
diff --git a/sound/drivers/mts64.c b/sound/drivers/mts64.c
index fe50b48c10e7..eeaa05ad9e5b 100644
--- a/sound/drivers/mts64.c
+++ b/sound/drivers/mts64.c
@@ -75,7 +75,7 @@ static int snd_mts64_create(struct snd_card *card,

 	*rchip = NULL;

-	mts = kzalloc(sizeof(struct mts64), GFP_KERNEL);
+	mts = kzalloc_obj(struct mts64, GFP_KERNEL);
 	if (mts == NULL)
 		return -ENOMEM;

diff --git a/sound/drivers/opl3/opl3_lib.c b/sound/drivers/opl3/opl3_lib.c
index fa8a2ccbbd51..ce96b0fd1f43 100644
--- a/sound/drivers/opl3/opl3_lib.c
+++ b/sound/drivers/opl3/opl3_lib.c
@@ -324,7 +324,7 @@ int snd_opl3_new(struct snd_card *card,
 	int err;

 	*ropl3 = NULL;
-	opl3 = kzalloc(sizeof(*opl3), GFP_KERNEL);
+	opl3 = kzalloc_obj(*opl3, GFP_KERNEL);
 	if (!opl3)
 		return -ENOMEM;

diff --git a/sound/drivers/opl3/opl3_synth.c b/sound/drivers/opl3/opl3_synth.c
index 10f622b439a0..7cdd4abb0b7c 100644
--- a/sound/drivers/opl3/opl3_synth.c
+++ b/sound/drivers/opl3/opl3_synth.c
@@ -313,7 +313,7 @@ struct fm_patch *snd_opl3_find_patch(struct snd_opl3 *opl3, int prog, int bank,
 	if (!create_patch)
 		return NULL;

-	patch = kzalloc(sizeof(*patch), GFP_KERNEL);
+	patch = kzalloc_obj(*patch, GFP_KERNEL);
 	if (!patch)
 		return NULL;
 	patch->prog = prog;
diff --git a/sound/drivers/opl4/opl4_lib.c b/sound/drivers/opl4/opl4_lib.c
index 44fbc6bf0654..d476fb7be15e 100644
--- a/sound/drivers/opl4/opl4_lib.c
+++ b/sound/drivers/opl4/opl4_lib.c
@@ -187,7 +187,7 @@ int snd_opl4_create(struct snd_card *card,
 	if (ropl4)
 		*ropl4 = NULL;

-	opl4 = kzalloc(sizeof(*opl4), GFP_KERNEL);
+	opl4 = kzalloc_obj(*opl4, GFP_KERNEL);
 	if (!opl4)
 		return -ENOMEM;

diff --git a/sound/drivers/pcmtest.c b/sound/drivers/pcmtest.c
index b8474631f0b5..8d3a19b628a2 100644
--- a/sound/drivers/pcmtest.c
+++ b/sound/drivers/pcmtest.c
@@ -377,7 +377,7 @@ static int snd_pcmtst_pcm_open(struct snd_pcm_substream *substream)
 	if (inject_open_err)
 		return -EBUSY;

-	v_iter = kzalloc(sizeof(*v_iter), GFP_KERNEL);
+	v_iter = kzalloc_obj(*v_iter, GFP_KERNEL);
 	if (!v_iter)
 		return -ENOMEM;

@@ -575,7 +575,7 @@ static int snd_pcmtst_create(struct snd_card *card, struct platform_device *pdev
 		.dev_free = snd_pcmtst_dev_free,
 	};

-	pcmtst = kzalloc(sizeof(*pcmtst), GFP_KERNEL);
+	pcmtst = kzalloc_obj(*pcmtst, GFP_KERNEL);
 	if (!pcmtst)
 		return -ENOMEM;
 	pcmtst->card = card;
diff --git a/sound/drivers/portman2x4.c b/sound/drivers/portman2x4.c
index b903a138fc2a..3dac519c4c45 100644
--- a/sound/drivers/portman2x4.c
+++ b/sound/drivers/portman2x4.c
@@ -88,7 +88,7 @@ static int portman_create(struct snd_card *card,

 	*rchip = NULL;

-	pm = kzalloc(sizeof(struct portman), GFP_KERNEL);
+	pm = kzalloc_obj(struct portman, GFP_KERNEL);
 	if (pm == NULL)
 		return -ENOMEM;

diff --git a/sound/drivers/vx/vx_pcm.c b/sound/drivers/vx/vx_pcm.c
index 7fd8f413d6cf..0e7a4cdc1390 100644
--- a/sound/drivers/vx/vx_pcm.c
+++ b/sound/drivers/vx/vx_pcm.c
@@ -414,7 +414,7 @@ static int vx_alloc_pipe(struct vx_core *chip, int capture,
 		return err;

 	/* initialize the pipe record */
-	pipe = kzalloc(sizeof(*pipe), GFP_KERNEL);
+	pipe = kzalloc_obj(*pipe, GFP_KERNEL);
 	if (! pipe) {
 		/* release the pipe */
 		vx_init_rmh(&rmh, CMD_FREE_PIPE);
@@ -1154,10 +1154,12 @@ static int vx_init_audio_io(struct vx_core *chip)
 	chip->audio_info = rmh.Stat[1];

 	/* allocate pipes */
-	chip->playback_pipes = kcalloc(chip->audio_outs, sizeof(struct vx_pipe *), GFP_KERNEL);
+	chip->playback_pipes = kzalloc_objs(struct vx_pipe *, chip->audio_outs,
+					    GFP_KERNEL);
 	if (!chip->playback_pipes)
 		return -ENOMEM;
-	chip->capture_pipes = kcalloc(chip->audio_ins, sizeof(struct vx_pipe *), GFP_KERNEL);
+	chip->capture_pipes = kzalloc_objs(struct vx_pipe *, chip->audio_ins,
+					   GFP_KERNEL);
 	if (!chip->capture_pipes) {
 		kfree(chip->playback_pipes);
 		return -ENOMEM;
diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
index 223c880af802..3f9471694b04 100644
--- a/sound/firewire/amdtp-stream.c
+++ b/sound/firewire/amdtp-stream.c
@@ -1735,8 +1735,9 @@ static int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed,
 			s->ctx_data.tx.cache.size = max_t(unsigned int, s->syt_interval * 2,
 							  queue_size * 3 / 2);
 			s->ctx_data.tx.cache.pos = 0;
-			s->ctx_data.tx.cache.descs = kcalloc(s->ctx_data.tx.cache.size,
-						sizeof(*s->ctx_data.tx.cache.descs), GFP_KERNEL);
+			s->ctx_data.tx.cache.descs = kzalloc_objs(*s->ctx_data.tx.cache.descs,
+								  s->ctx_data.tx.cache.size,
+								  GFP_KERNEL);
 			if (!s->ctx_data.tx.cache.descs) {
 				err = -ENOMEM;
 				goto err_context;
@@ -1756,7 +1757,8 @@ static int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed,
 			[CIP_SFC_176400] = {  0,   67 },
 		};

-		s->ctx_data.rx.seq.descs = kcalloc(queue_size, sizeof(*s->ctx_data.rx.seq.descs), GFP_KERNEL);
+		s->ctx_data.rx.seq.descs = kzalloc_objs(*s->ctx_data.rx.seq.descs,
+							queue_size, GFP_KERNEL);
 		if (!s->ctx_data.rx.seq.descs) {
 			err = -ENOMEM;
 			goto err_context;
@@ -1781,7 +1783,7 @@ static int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed,
 	// for runtime of PCM substream in the interval equivalent to the size of PCM buffer. It
 	// could take a round over queue of AMDTP packet descriptors and small loss of history. For
 	// safe, keep more 8 elements for the queue, equivalent to 1 ms.
-	descs = kcalloc(s->queue_size + 8, sizeof(*descs), GFP_KERNEL);
+	descs = kzalloc_objs(*descs, s->queue_size + 8, GFP_KERNEL);
 	if (!descs) {
 		err = -ENOMEM;
 		goto err_context;
diff --git a/sound/firewire/bebob/bebob_proc.c b/sound/firewire/bebob/bebob_proc.c
index f659b888a6d1..c5e060728fdc 100644
--- a/sound/firewire/bebob/bebob_proc.c
+++ b/sound/firewire/bebob/bebob_proc.c
@@ -38,7 +38,7 @@ proc_read_hw_info(struct snd_info_entry *entry,
 	struct snd_bebob *bebob = entry->private_data;
 	struct hw_info *info;

-	info = kzalloc(sizeof(struct hw_info), GFP_KERNEL);
+	info = kzalloc_obj(struct hw_info, GFP_KERNEL);
 	if (info == NULL)
 		return;

diff --git a/sound/firewire/fireworks/fireworks.c b/sound/firewire/fireworks/fireworks.c
index 3378c7dce88a..8b6b0e5ba497 100644
--- a/sound/firewire/fireworks/fireworks.c
+++ b/sound/firewire/fireworks/fireworks.c
@@ -76,7 +76,7 @@ get_hardware_info(struct snd_efw *efw)
 	char version[12] = {0};
 	int err;

-	hwinfo = kzalloc(sizeof(struct snd_efw_hwinfo), GFP_KERNEL);
+	hwinfo = kzalloc_obj(struct snd_efw_hwinfo, GFP_KERNEL);
 	if (hwinfo == NULL)
 		return -ENOMEM;

diff --git a/sound/firewire/fireworks/fireworks_proc.c b/sound/firewire/fireworks/fireworks_proc.c
index 12288567b0cd..179b7110c8e2 100644
--- a/sound/firewire/fireworks/fireworks_proc.c
+++ b/sound/firewire/fireworks/fireworks_proc.c
@@ -31,7 +31,7 @@ proc_read_hwinfo(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 	unsigned short i;
 	struct snd_efw_hwinfo *hwinfo;

-	hwinfo = kmalloc(sizeof(struct snd_efw_hwinfo), GFP_KERNEL);
+	hwinfo = kmalloc_obj(struct snd_efw_hwinfo, GFP_KERNEL);
 	if (hwinfo == NULL)
 		return;

diff --git a/sound/firewire/motu/motu-hwdep.c b/sound/firewire/motu/motu-hwdep.c
index 89dc436a0652..ea7f5d215060 100644
--- a/sound/firewire/motu/motu-hwdep.c
+++ b/sound/firewire/motu/motu-hwdep.c
@@ -185,7 +185,7 @@ static int hwdep_ioctl(struct snd_hwdep *hwdep, struct file *file,
 		if (!(motu->spec->flags & SND_MOTU_SPEC_REGISTER_DSP))
 			return -ENXIO;

-		meter = kzalloc(sizeof(*meter), GFP_KERNEL);
+		meter = kzalloc_obj(*meter, GFP_KERNEL);
 		if (!meter)
 			return -ENOMEM;

@@ -207,7 +207,7 @@ static int hwdep_ioctl(struct snd_hwdep *hwdep, struct file *file,
 		if (!(motu->spec->flags & SND_MOTU_SPEC_COMMAND_DSP))
 			return -ENXIO;

-		meter = kzalloc(sizeof(*meter), GFP_KERNEL);
+		meter = kzalloc_obj(*meter, GFP_KERNEL);
 		if (!meter)
 			return -ENOMEM;

@@ -229,7 +229,7 @@ static int hwdep_ioctl(struct snd_hwdep *hwdep, struct file *file,
 		if (!(motu->spec->flags & SND_MOTU_SPEC_REGISTER_DSP))
 			return -ENXIO;

-		param = kzalloc(sizeof(*param), GFP_KERNEL);
+		param = kzalloc_obj(*param, GFP_KERNEL);
 		if (!param)
 			return -ENOMEM;

diff --git a/sound/firewire/packets-buffer.c b/sound/firewire/packets-buffer.c
index 0ecafd0c6722..3d5c3baf7e48 100644
--- a/sound/firewire/packets-buffer.c
+++ b/sound/firewire/packets-buffer.c
@@ -27,7 +27,7 @@ int iso_packets_buffer_init(struct iso_packets_buffer *b, struct fw_unit *unit,
 	void *p;
 	int err;

-	b->packets = kmalloc_array(count, sizeof(*b->packets), GFP_KERNEL);
+	b->packets = kmalloc_objs(*b->packets, count, GFP_KERNEL);
 	if (!b->packets) {
 		err = -ENOMEM;
 		goto error;
diff --git a/sound/hda/codecs/analog.c b/sound/hda/codecs/analog.c
index 357ad5a6c0db..122d14e57313 100644
--- a/sound/hda/codecs/analog.c
+++ b/sound/hda/codecs/analog.c
@@ -191,7 +191,7 @@ static int alloc_ad_spec(struct hda_codec *codec)
 {
 	struct ad198x_spec *spec;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	codec->spec = spec;
diff --git a/sound/hda/codecs/ca0110.c b/sound/hda/codecs/ca0110.c
index c75a9ff9460d..8638cef4ef20 100644
--- a/sound/hda/codecs/ca0110.c
+++ b/sound/hda/codecs/ca0110.c
@@ -35,7 +35,7 @@ static int ca0110_probe(struct hda_codec *codec, const struct hda_device_id *id)
 	struct hda_gen_spec *spec;
 	int err;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	snd_hda_gen_spec_init(spec);
diff --git a/sound/hda/codecs/ca0132.c b/sound/hda/codecs/ca0132.c
index dd054aedd501..af9236c56db4 100644
--- a/sound/hda/codecs/ca0132.c
+++ b/sound/hda/codecs/ca0132.c
@@ -3392,11 +3392,11 @@ static int dspxfr_image(struct hda_codec *codec,
 	if (fls_data == NULL)
 		return -EINVAL;

-	dma_engine = kzalloc(sizeof(*dma_engine), GFP_KERNEL);
+	dma_engine = kzalloc_obj(*dma_engine, GFP_KERNEL);
 	if (!dma_engine)
 		return -ENOMEM;

-	dma_engine->dmab = kzalloc(sizeof(*dma_engine->dmab), GFP_KERNEL);
+	dma_engine->dmab = kzalloc_obj(*dma_engine->dmab, GFP_KERNEL);
 	if (!dma_engine->dmab) {
 		kfree(dma_engine);
 		return -ENOMEM;
@@ -9831,9 +9831,8 @@ static int ca0132_prepare_verbs(struct hda_codec *codec)
 	 */
 	if (ca0132_use_pci_mmio(spec))
 		spec->desktop_init_verbs = ca0132_init_verbs1;
-	spec->spec_init_verbs = kcalloc(NUM_SPEC_VERBS,
-					sizeof(struct hda_verb),
-					GFP_KERNEL);
+	spec->spec_init_verbs = kzalloc_objs(struct hda_verb, NUM_SPEC_VERBS,
+					     GFP_KERNEL);
 	if (!spec->spec_init_verbs)
 		return -ENOMEM;

@@ -9900,7 +9899,7 @@ static int ca0132_codec_probe(struct hda_codec *codec,

 	codec_dbg(codec, "%s\n", __func__);

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	codec->spec = spec;
diff --git a/sound/hda/codecs/cirrus/cs420x.c b/sound/hda/codecs/cirrus/cs420x.c
index 13f5f1711fa4..454b6946b4a3 100644
--- a/sound/hda/codecs/cirrus/cs420x.c
+++ b/sound/hda/codecs/cirrus/cs420x.c
@@ -524,7 +524,7 @@ static struct cs_spec *cs_alloc_spec(struct hda_codec *codec, int vendor_nid)
 {
 	struct cs_spec *spec;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return NULL;
 	codec->spec = spec;
diff --git a/sound/hda/codecs/cirrus/cs421x.c b/sound/hda/codecs/cirrus/cs421x.c
index a93e2e0bb391..28f3317a9ffd 100644
--- a/sound/hda/codecs/cirrus/cs421x.c
+++ b/sound/hda/codecs/cirrus/cs421x.c
@@ -162,7 +162,7 @@ static struct cs_spec *cs_alloc_spec(struct hda_codec *codec, int vendor_nid)
 {
 	struct cs_spec *spec;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return NULL;
 	codec->spec = spec;
diff --git a/sound/hda/codecs/cirrus/cs8409.c b/sound/hda/codecs/cirrus/cs8409.c
index 61b6a15d6291..24b224c70e9f 100644
--- a/sound/hda/codecs/cirrus/cs8409.c
+++ b/sound/hda/codecs/cirrus/cs8409.c
@@ -61,7 +61,7 @@ static struct cs8409_spec *cs8409_alloc_spec(struct hda_codec *codec)
 {
 	struct cs8409_spec *spec;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return NULL;
 	codec->spec = spec;
diff --git a/sound/hda/codecs/cm9825.c b/sound/hda/codecs/cm9825.c
index 52ee431f2e2c..a5330cff42ec 100644
--- a/sound/hda/codecs/cm9825.c
+++ b/sound/hda/codecs/cm9825.c
@@ -488,7 +488,7 @@ static int cm9825_probe(struct hda_codec *codec, const struct hda_device_id *id)
 	struct auto_pin_cfg *cfg;
 	int err = 0;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (spec == NULL)
 		return -ENOMEM;

diff --git a/sound/hda/codecs/cmedia.c b/sound/hda/codecs/cmedia.c
index 15e5a1118a6e..0494bbe15431 100644
--- a/sound/hda/codecs/cmedia.c
+++ b/sound/hda/codecs/cmedia.c
@@ -24,7 +24,7 @@ static int cmedia_probe(struct hda_codec *codec, const struct hda_device_id *id)
 	bool is_cmi8888 = id->vendor_id == 0x13f68888;
 	int err;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (spec == NULL)
 		return -ENOMEM;

diff --git a/sound/hda/codecs/conexant.c b/sound/hda/codecs/conexant.c
index f71123a47546..8f032102e558 100644
--- a/sound/hda/codecs/conexant.c
+++ b/sound/hda/codecs/conexant.c
@@ -1187,7 +1187,7 @@ static int cx_probe(struct hda_codec *codec, const struct hda_device_id *id)

 	codec_info(codec, "%s: BIOS auto-probing.\n", codec->core.chip_name);

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	snd_hda_gen_spec_init(&spec->gen);
diff --git a/sound/hda/codecs/generic.c b/sound/hda/codecs/generic.c
index b75a5e9470df..147582c5e51f 100644
--- a/sound/hda/codecs/generic.c
+++ b/sound/hda/codecs/generic.c
@@ -1991,7 +1991,7 @@ static int parse_output_paths(struct hda_codec *codec)
 	bool best_wired = true, best_mio = true;
 	bool hp_spk_swapped = false;
 	struct auto_pin_cfg *best_cfg __free(kfree) =
-		kmalloc(sizeof(*best_cfg), GFP_KERNEL);
+		kmalloc_obj(*best_cfg, GFP_KERNEL);

 	if (!best_cfg)
 		return -ENOMEM;
@@ -6095,7 +6095,7 @@ static int snd_hda_gen_probe(struct hda_codec *codec,
 	struct hda_gen_spec *spec;
 	int err;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	snd_hda_gen_spec_init(spec);
diff --git a/sound/hda/codecs/hdmi/hdmi.c b/sound/hda/codecs/hdmi/hdmi.c
index c2e3adc7b3c0..bcc81018fff3 100644
--- a/sound/hda/codecs/hdmi/hdmi.c
+++ b/sound/hda/codecs/hdmi/hdmi.c
@@ -2105,7 +2105,7 @@ int snd_hda_hdmi_generic_alloc(struct hda_codec *codec)
 {
 	struct hdmi_spec *spec;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

diff --git a/sound/hda/codecs/hdmi/simplehdmi.c b/sound/hda/codecs/hdmi/simplehdmi.c
index 193c8dc882af..fe4e73c3d6e6 100644
--- a/sound/hda/codecs/hdmi/simplehdmi.c
+++ b/sound/hda/codecs/hdmi/simplehdmi.c
@@ -175,7 +175,7 @@ int snd_hda_hdmi_simple_probe(struct hda_codec *codec,
 	struct hdmi_spec_per_cvt *per_cvt;
 	struct hdmi_spec_per_pin *per_pin;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;

diff --git a/sound/hda/codecs/realtek/realtek.c b/sound/hda/codecs/realtek/realtek.c
index efe20b450529..3356fd95fb7f 100644
--- a/sound/hda/codecs/realtek/realtek.c
+++ b/sound/hda/codecs/realtek/realtek.c
@@ -221,7 +221,7 @@ void alc_update_knob_master(struct hda_codec *codec,
 		return;

 	struct snd_ctl_elem_value *uctl __free(kfree) =
-		kzalloc(sizeof(*uctl), GFP_KERNEL);
+		kzalloc_obj(*uctl, GFP_KERNEL);
 	if (!uctl)
 		return;
 	val = snd_hda_codec_read(codec, jack->nid, 0,
@@ -1028,7 +1028,7 @@ EXPORT_SYMBOL_NS_GPL(alc_parse_auto_config, "SND_HDA_CODEC_REALTEK");
 /* common preparation job for alc_spec */
 int alc_alloc_spec(struct hda_codec *codec, hda_nid_t mixer_nid)
 {
-	struct alc_spec *spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	struct alc_spec *spec = kzalloc_obj(*spec, GFP_KERNEL);
 	int err;

 	if (!spec)
diff --git a/sound/hda/codecs/senarytech.c b/sound/hda/codecs/senarytech.c
index 63cda57cf786..ed3d9cbb3ea6 100644
--- a/sound/hda/codecs/senarytech.c
+++ b/sound/hda/codecs/senarytech.c
@@ -170,7 +170,7 @@ static int senary_probe(struct hda_codec *codec, const struct hda_device_id *id)

 	codec_info(codec, "%s: BIOS auto-probing.\n", codec->core.chip_name);

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	snd_hda_gen_spec_init(&spec->gen);
diff --git a/sound/hda/codecs/si3054.c b/sound/hda/codecs/si3054.c
index 87cf9da9f3bf..9074c74a0ed0 100644
--- a/sound/hda/codecs/si3054.c
+++ b/sound/hda/codecs/si3054.c
@@ -256,7 +256,7 @@ static void si3054_remove(struct hda_codec *codec)

 static int si3054_probe(struct hda_codec *codec, const struct hda_device_id *id)
 {
-	codec->spec = kzalloc(sizeof(struct si3054_spec), GFP_KERNEL);
+	codec->spec = kzalloc_obj(struct si3054_spec, GFP_KERNEL);
 	if (!codec->spec)
 		return -ENOMEM;
 	return 0;
diff --git a/sound/hda/codecs/sigmatel.c b/sound/hda/codecs/sigmatel.c
index ecbee408d771..69d75cc63bd6 100644
--- a/sound/hda/codecs/sigmatel.c
+++ b/sound/hda/codecs/sigmatel.c
@@ -4456,7 +4456,7 @@ static int alloc_stac_spec(struct hda_codec *codec)
 {
 	struct sigmatel_spec *spec;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	snd_hda_gen_spec_init(&spec->gen);
diff --git a/sound/hda/codecs/via.c b/sound/hda/codecs/via.c
index 6becea9bb810..42cce9f51931 100644
--- a/sound/hda/codecs/via.c
+++ b/sound/hda/codecs/via.c
@@ -102,7 +102,7 @@ static struct via_spec *via_new_spec(struct hda_codec *codec)
 {
 	struct via_spec *spec;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (spec == NULL)
 		return NULL;

diff --git a/sound/hda/common/beep.c b/sound/hda/common/beep.c
index 13a7d92e8d8d..006eef5ceea8 100644
--- a/sound/hda/common/beep.c
+++ b/sound/hda/common/beep.c
@@ -220,7 +220,7 @@ int snd_hda_attach_beep_device(struct hda_codec *codec, int nid)
 			return 0; /* disabled by module option */
 	}

-	beep = kzalloc(sizeof(*beep), GFP_KERNEL);
+	beep = kzalloc_obj(*beep, GFP_KERNEL);
 	if (beep == NULL)
 		return -ENOMEM;
 	snprintf(beep->phys, sizeof(beep->phys),
diff --git a/sound/hda/common/codec.c b/sound/hda/common/codec.c
index ffe7c69d5a32..6c787b603179 100644
--- a/sound/hda/common/codec.c
+++ b/sound/hda/common/codec.c
@@ -117,7 +117,7 @@ static int add_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
 {
 	struct hda_conn_list *p;

-	p = kmalloc(struct_size(p, conns, len), GFP_KERNEL);
+	p = kmalloc_flex(*p, conns, len, GFP_KERNEL);
 	if (!p)
 		return -ENOMEM;
 	p->len = len;
@@ -147,7 +147,7 @@ static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid)
 	len = snd_hda_get_raw_connections(codec, nid, list, ARRAY_SIZE(list));
 	if (len == -ENOSPC) {
 		len = snd_hda_get_num_raw_conns(codec, nid);
-		result = kmalloc_array(len, sizeof(hda_nid_t), GFP_KERNEL);
+		result = kmalloc_objs(hda_nid_t, len, GFP_KERNEL);
 		if (!result)
 			return -ENOMEM;
 		len = snd_hda_get_raw_connections(codec, nid, result, len);
@@ -703,7 +703,7 @@ struct hda_pcm *snd_hda_codec_pcm_new(struct hda_codec *codec,
 	struct hda_pcm *pcm;
 	va_list args;

-	pcm = kzalloc(sizeof(*pcm), GFP_KERNEL);
+	pcm = kzalloc_obj(*pcm, GFP_KERNEL);
 	if (!pcm)
 		return NULL;

@@ -895,7 +895,7 @@ snd_hda_codec_device_init(struct hda_bus *bus, unsigned int codec_addr,
 	if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
 		return ERR_PTR(-EINVAL);

-	codec = kzalloc(sizeof(*codec), GFP_KERNEL);
+	codec = kzalloc_obj(*codec, GFP_KERNEL);
 	if (!codec)
 		return ERR_PTR(-ENOMEM);

@@ -1855,7 +1855,7 @@ static int check_follower_present(struct hda_codec *codec,
 static int put_kctl_with_value(struct snd_kcontrol *kctl, int val)
 {
 	struct snd_ctl_elem_value *ucontrol __free(kfree) =
-		kzalloc(sizeof(*ucontrol), GFP_KERNEL);
+		kzalloc_obj(*ucontrol, GFP_KERNEL);

 	if (!ucontrol)
 		return -ENOMEM;
diff --git a/sound/hda/common/controller.c b/sound/hda/common/controller.c
index b1cfd9bd4dcb..cf8502834484 100644
--- a/sound/hda/common/controller.c
+++ b/sound/hda/common/controller.c
@@ -715,7 +715,7 @@ int snd_hda_attach_pcm_stream(struct hda_bus *_bus, struct hda_codec *codec,
 	if (err < 0)
 		return err;
 	strscpy(pcm->name, cpcm->name, sizeof(pcm->name));
-	apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
+	apcm = kzalloc_obj(*apcm, GFP_KERNEL);
 	if (apcm == NULL) {
 		snd_device_free(chip->card, pcm);
 		return -ENOMEM;
@@ -1283,7 +1283,7 @@ int azx_init_streams(struct azx *chip)
 	 * and initialize
 	 */
 	for (i = 0; i < chip->num_streams; i++) {
-		struct azx_dev *azx_dev = kzalloc(sizeof(*azx_dev), GFP_KERNEL);
+		struct azx_dev *azx_dev = kzalloc_obj(*azx_dev, GFP_KERNEL);
 		int dir, tag;

 		if (!azx_dev)
diff --git a/sound/hda/common/jack.c b/sound/hda/common/jack.c
index 7d7786df60ea..87120868d123 100644
--- a/sound/hda/common/jack.c
+++ b/sound/hda/common/jack.c
@@ -329,7 +329,7 @@ snd_hda_jack_detect_enable_callback_mst(struct hda_codec *codec, hda_nid_t nid,
 	callback = find_callback_from_list(jack, func);

 	if (func && !callback) {
-		callback = kzalloc(sizeof(*callback), GFP_KERNEL);
+		callback = kzalloc_obj(*callback, GFP_KERNEL);
 		if (!callback)
 			return ERR_PTR(-ENOMEM);
 		callback->func = func;
diff --git a/sound/hda/common/proc.c b/sound/hda/common/proc.c
index 5f3f61519ba6..98cad7ea8cf1 100644
--- a/sound/hda/common/proc.c
+++ b/sound/hda/common/proc.c
@@ -689,7 +689,7 @@ static void print_dpmst_connections(struct snd_info_buffer *buffer, struct hda_c
 	if (conn_len <= 0)
 		return;

-	conn = kmalloc_array(conn_len, sizeof(hda_nid_t), GFP_KERNEL);
+	conn = kmalloc_objs(hda_nid_t, conn_len, GFP_KERNEL);
 	if (!conn)
 		return;

@@ -845,9 +845,8 @@ static void print_codec_info(struct snd_info_entry *entry,
 		if (wid_caps & AC_WCAP_CONN_LIST) {
 			conn_len = snd_hda_get_num_raw_conns(codec, nid);
 			if (conn_len > 0) {
-				conn = kmalloc_array(conn_len,
-						     sizeof(hda_nid_t),
-						     GFP_KERNEL);
+				conn = kmalloc_objs(hda_nid_t, conn_len,
+						    GFP_KERNEL);
 				if (!conn)
 					return;
 				if (snd_hda_get_raw_connections(codec, nid, conn,
diff --git a/sound/hda/core/ext/controller.c b/sound/hda/core/ext/controller.c
index 9eea3ea2dae0..0c12ff36d992 100644
--- a/sound/hda/core/ext/controller.c
+++ b/sound/hda/core/ext/controller.c
@@ -89,7 +89,7 @@ int snd_hdac_ext_bus_get_ml_capabilities(struct hdac_bus *bus)
 	dev_dbg(bus->dev, "In %s Link count: %d\n", __func__, link_count);

 	for (idx = 0; idx < link_count; idx++) {
-		hlink  = kzalloc(sizeof(*hlink), GFP_KERNEL);
+		hlink = kzalloc_obj(*hlink, GFP_KERNEL);
 		if (!hlink)
 			return -ENOMEM;
 		hlink->index = idx;
diff --git a/sound/hda/core/ext/stream.c b/sound/hda/core/ext/stream.c
index b4759198e51d..a213e5b06bdb 100644
--- a/sound/hda/core/ext/stream.c
+++ b/sound/hda/core/ext/stream.c
@@ -101,8 +101,8 @@ int snd_hdac_ext_stream_init_all(struct hdac_bus *bus, int start_idx,
 		setup_op = snd_hdac_stream_setup;

 	for (i = 0; i < num_stream; i++) {
-		struct hdac_ext_stream *hext_stream =
-				kzalloc(sizeof(*hext_stream), GFP_KERNEL);
+		struct hdac_ext_stream *hext_stream = kzalloc_obj(*hext_stream,
+								  GFP_KERNEL);
 		if (!hext_stream)
 			return -ENOMEM;
 		tag = ++stream_tag;
diff --git a/sound/hda/core/sysfs.c b/sound/hda/core/sysfs.c
index bffe52859dba..443f00d037a3 100644
--- a/sound/hda/core/sysfs.c
+++ b/sound/hda/core/sysfs.c
@@ -339,7 +339,7 @@ static int add_widget_node(struct kobject *parent, hda_nid_t nid,
 			   const struct attribute_group *group,
 			   struct kobject **res)
 {
-	struct kobject *kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
+	struct kobject *kobj = kzalloc_obj(*kobj, GFP_KERNEL);
 	int err;

 	if (!kobj)
@@ -366,7 +366,7 @@ static int widget_tree_create(struct hdac_device *codec)
 	int i, err;
 	hda_nid_t nid;

-	tree = codec->widgets = kzalloc(sizeof(*tree), GFP_KERNEL);
+	tree = codec->widgets = kzalloc_obj(*tree, GFP_KERNEL);
 	if (!tree)
 		return -ENOMEM;

@@ -374,8 +374,8 @@ static int widget_tree_create(struct hdac_device *codec)
 	if (!tree->root)
 		return -ENOMEM;

-	tree->nodes = kcalloc(codec->num_nodes + 1, sizeof(*tree->nodes),
-			      GFP_KERNEL);
+	tree->nodes = kzalloc_objs(*tree->nodes, codec->num_nodes + 1,
+				   GFP_KERNEL);
 	if (!tree->nodes)
 		return -ENOMEM;

@@ -436,7 +436,7 @@ int hda_widget_sysfs_reinit(struct hdac_device *codec,
 	if (!tree)
 		return -ENOMEM;

-	tree->nodes = kcalloc(num_nodes + 1, sizeof(*tree->nodes), GFP_KERNEL);
+	tree->nodes = kzalloc_objs(*tree->nodes, num_nodes + 1, GFP_KERNEL);
 	if (!tree->nodes) {
 		kfree(tree);
 		return -ENOMEM;
diff --git a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c
index 46f081268348..a4717449cc2f 100644
--- a/sound/i2c/cs8427.c
+++ b/sound/i2c/cs8427.c
@@ -269,7 +269,7 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 				    &device);
 	if (err < 0)
 		return err;
-	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = device->private_data = kzalloc_obj(*chip, GFP_KERNEL);
 	if (chip == NULL) {
 		snd_i2c_device_free(device);
 		return -ENOMEM;
diff --git a/sound/i2c/i2c.c b/sound/i2c/i2c.c
index 847e3b6ca601..8bb49f0d97e6 100644
--- a/sound/i2c/i2c.c
+++ b/sound/i2c/i2c.c
@@ -72,7 +72,7 @@ int snd_i2c_bus_create(struct snd_card *card, const char *name,
 	};

 	*ri2c = NULL;
-	bus = kzalloc(sizeof(*bus), GFP_KERNEL);
+	bus = kzalloc_obj(*bus, GFP_KERNEL);
 	if (bus == NULL)
 		return -ENOMEM;
 	mutex_init(&bus->lock_mutex);
@@ -104,7 +104,7 @@ int snd_i2c_device_create(struct snd_i2c_bus *bus, const char *name,
 	*rdevice = NULL;
 	if (snd_BUG_ON(!bus))
 		return -EINVAL;
-	device = kzalloc(sizeof(*device), GFP_KERNEL);
+	device = kzalloc_obj(*device, GFP_KERNEL);
 	if (device == NULL)
 		return -ENOMEM;
 	device->addr = addr;
diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c
index 70b3f7e17f9e..b1bfc71aab22 100644
--- a/sound/i2c/other/ak4113.c
+++ b/sound/i2c/other/ak4113.c
@@ -64,7 +64,7 @@ int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read,
 		.dev_free =     snd_ak4113_dev_free,
 	};

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->lock);
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
index 0e3a272c1490..6d51e2a8db2b 100644
--- a/sound/i2c/other/ak4114.c
+++ b/sound/i2c/other/ak4114.c
@@ -64,7 +64,7 @@ int snd_ak4114_create(struct snd_card *card,
 		.dev_free =     snd_ak4114_dev_free,
 	};

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->lock);
diff --git a/sound/i2c/other/ak4117.c b/sound/i2c/other/ak4117.c
index d2ec20f885f0..8f4657aa6525 100644
--- a/sound/i2c/other/ak4117.c
+++ b/sound/i2c/other/ak4117.c
@@ -57,7 +57,7 @@ int snd_ak4117_create(struct snd_card *card, ak4117_read_t *read, ak4117_write_t
 		.dev_free =     snd_ak4117_dev_free,
 	};

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->lock);
diff --git a/sound/i2c/tea6330t.c b/sound/i2c/tea6330t.c
index 676d58054944..b63dfc50c1c2 100644
--- a/sound/i2c/tea6330t.c
+++ b/sound/i2c/tea6330t.c
@@ -285,7 +285,7 @@ int snd_tea6330t_update_mixer(struct snd_card *card,
 	u8 default_treble, default_bass;
 	unsigned char bytes[7];

-	tea = kzalloc(sizeof(*tea), GFP_KERNEL);
+	tea = kzalloc_obj(*tea, GFP_KERNEL);
 	if (tea == NULL)
 		return -ENOMEM;
 	err = snd_i2c_device_create(bus, "TEA6330T", TEA6330T_ADDR, &device);
diff --git a/sound/isa/gus/gus_main.c b/sound/isa/gus/gus_main.c
index 5f50a39c6f16..0b6e56c16e38 100644
--- a/sound/isa/gus/gus_main.c
+++ b/sound/isa/gus/gus_main.c
@@ -116,7 +116,7 @@ int snd_gus_create(struct snd_card *card,
 	};

 	*rgus = NULL;
-	gus = kzalloc(sizeof(*gus), GFP_KERNEL);
+	gus = kzalloc_obj(*gus, GFP_KERNEL);
 	if (gus == NULL)
 		return -ENOMEM;
 	spin_lock_init(&gus->reg_lock);
diff --git a/sound/isa/gus/gus_mem.c b/sound/isa/gus/gus_mem.c
index 8d95d8d5abdf..65e5426a43fd 100644
--- a/sound/isa/gus/gus_mem.c
+++ b/sound/isa/gus/gus_mem.c
@@ -21,7 +21,7 @@ snd_gf1_mem_xalloc(struct snd_gf1_mem *alloc, struct snd_gf1_mem_block *block,
 {
 	struct snd_gf1_mem_block *pblock, *nblock;

-	nblock = kmalloc(sizeof(struct snd_gf1_mem_block), GFP_KERNEL);
+	nblock = kmalloc_obj(struct snd_gf1_mem_block, GFP_KERNEL);
 	if (nblock == NULL)
 		return NULL;
 	*nblock = *block;
diff --git a/sound/isa/gus/gus_mem_proc.c b/sound/isa/gus/gus_mem_proc.c
index b5e1d1649500..fdb14acaddcf 100644
--- a/sound/isa/gus/gus_mem_proc.c
+++ b/sound/isa/gus/gus_mem_proc.c
@@ -50,7 +50,7 @@ int snd_gf1_mem_proc_init(struct snd_gus_card * gus)

 	for (idx = 0; idx < 4; idx++) {
 		if (gus->gf1.mem_alloc.banks_8[idx].size > 0) {
-			priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+			priv = kzalloc_obj(*priv, GFP_KERNEL);
 			if (priv == NULL)
 				return -ENOMEM;
 			priv->gus = gus;
@@ -67,7 +67,7 @@ int snd_gf1_mem_proc_init(struct snd_gus_card * gus)
 	}
 	for (idx = 0; idx < 4; idx++) {
 		if (gus->gf1.rom_present & (1 << idx)) {
-			priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+			priv = kzalloc_obj(*priv, GFP_KERNEL);
 			if (priv == NULL)
 				return -ENOMEM;
 			priv->rom = 1;
diff --git a/sound/isa/gus/gus_pcm.c b/sound/isa/gus/gus_pcm.c
index 9249cbff30f3..b5da8d970b3f 100644
--- a/sound/isa/gus/gus_pcm.c
+++ b/sound/isa/gus/gus_pcm.c
@@ -638,7 +638,7 @@ static int snd_gf1_pcm_playback_open(struct snd_pcm_substream *substream)
 	struct snd_pcm_runtime *runtime = substream->runtime;
 	int err;

-	pcmp = kzalloc(sizeof(*pcmp), GFP_KERNEL);
+	pcmp = kzalloc_obj(*pcmp, GFP_KERNEL);
 	if (pcmp == NULL)
 		return -ENOMEM;
 	pcmp->gus = gus;
diff --git a/sound/isa/sb/emu8000_pcm.c b/sound/isa/sb/emu8000_pcm.c
index 656a655d618d..a3071cd2e9a8 100644
--- a/sound/isa/sb/emu8000_pcm.c
+++ b/sound/isa/sb/emu8000_pcm.c
@@ -221,7 +221,7 @@ static int emu8k_pcm_open(struct snd_pcm_substream *subs)
 	struct snd_emu8k_pcm *rec;
 	struct snd_pcm_runtime *runtime = subs->runtime;

-	rec = kzalloc(sizeof(*rec), GFP_KERNEL);
+	rec = kzalloc_obj(*rec, GFP_KERNEL);
 	if (! rec)
 		return -ENOMEM;

diff --git a/sound/isa/sb/sb16_csp.c b/sound/isa/sb/sb16_csp.c
index 9ad71a9fc18d..834b38de9afd 100644
--- a/sound/isa/sb/sb16_csp.c
+++ b/sound/isa/sb/sb16_csp.c
@@ -117,7 +117,7 @@ int snd_sb_csp_new(struct snd_sb *chip, int device, struct snd_hwdep ** rhwdep)
 	if (err < 0)
 		return err;

-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p) {
 		snd_device_free(chip->card, hw);
 		return -ENOMEM;
diff --git a/sound/isa/wavefront/wavefront_synth.c b/sound/isa/wavefront/wavefront_synth.c
index 0d78533e1cfd..0b91b3b28f7f 100644
--- a/sound/isa/wavefront/wavefront_synth.c
+++ b/sound/isa/wavefront/wavefront_synth.c
@@ -1381,7 +1381,7 @@ wavefront_load_patch (snd_wavefront_t *dev, const char __user *addr)
 	wavefront_patch_info *header;
 	int err;

-	header = kmalloc(sizeof(*header), GFP_KERNEL);
+	header = kmalloc_obj(*header, GFP_KERNEL);
 	if (! header)
 		return -ENOMEM;

diff --git a/sound/mips/hal2.c b/sound/mips/hal2.c
index f88e6a6733a5..c865c7ba3636 100644
--- a/sound/mips/hal2.c
+++ b/sound/mips/hal2.c
@@ -773,7 +773,7 @@ static int hal2_create(struct snd_card *card, struct snd_hal2 **rchip)
 	struct hpc3_regs *hpc3 = hpc3c0;
 	int err;

-	hal2 = kzalloc(sizeof(*hal2), GFP_KERNEL);
+	hal2 = kzalloc_obj(*hal2, GFP_KERNEL);
 	if (!hal2)
 		return -ENOMEM;

diff --git a/sound/mips/sgio2audio.c b/sound/mips/sgio2audio.c
index 077fdf2181c1..af2690d901b4 100644
--- a/sound/mips/sgio2audio.c
+++ b/sound/mips/sgio2audio.c
@@ -788,7 +788,7 @@ static int snd_sgio2audio_create(struct snd_card *card,
 	if (!(readq(&mace->perif.audio.control) & AUDIO_CONTROL_CODEC_PRESENT))
 		return -ENOENT;

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;

diff --git a/sound/parisc/harmony.c b/sound/parisc/harmony.c
index 4b5a54da25fb..e9f30201cf4b 100644
--- a/sound/parisc/harmony.c
+++ b/sound/parisc/harmony.c
@@ -852,7 +852,7 @@ snd_harmony_create(struct snd_card *card,

 	*rchip = NULL;

-	h = kzalloc(sizeof(*h), GFP_KERNEL);
+	h = kzalloc_obj(*h, GFP_KERNEL);
 	if (h == NULL)
 		return -ENOMEM;

diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
index c54bdefa5afe..7392bc15affa 100644
--- a/sound/pci/ac97/ac97_codec.c
+++ b/sound/pci/ac97/ac97_codec.c
@@ -1957,7 +1957,7 @@ int snd_ac97_bus(struct snd_card *card, int num,

 	if (snd_BUG_ON(!card))
 		return -EINVAL;
-	bus = kzalloc(sizeof(*bus), GFP_KERNEL);
+	bus = kzalloc_obj(*bus, GFP_KERNEL);
 	if (bus == NULL)
 		return -ENOMEM;
 	bus->card = card;
@@ -2069,7 +2069,7 @@ int snd_ac97_mixer(struct snd_ac97_bus *bus, struct snd_ac97_template *template,
 		return -EBUSY;

 	card = bus->card;
-	ac97 = kzalloc(sizeof(*ac97), GFP_KERNEL);
+	ac97 = kzalloc_obj(*ac97, GFP_KERNEL);
 	if (ac97 == NULL)
 		return -ENOMEM;
 	ac97->private_data = template->private_data;
diff --git a/sound/pci/ac97/ac97_pcm.c b/sound/pci/ac97/ac97_pcm.c
index 4715d88ff8f4..9df21c42d624 100644
--- a/sound/pci/ac97/ac97_pcm.c
+++ b/sound/pci/ac97/ac97_pcm.c
@@ -441,7 +441,7 @@ int snd_ac97_pcm_assign(struct snd_ac97_bus *bus,
 	unsigned int rates;
 	struct snd_ac97 *codec;

-	rpcms = kcalloc(pcms_count, sizeof(struct ac97_pcm), GFP_KERNEL);
+	rpcms = kzalloc_objs(struct ac97_pcm, pcms_count, GFP_KERNEL);
 	if (rpcms == NULL)
 		return -ENOMEM;
 	memset(avail_slots, 0, sizeof(avail_slots));
diff --git a/sound/pci/ak4531_codec.c b/sound/pci/ak4531_codec.c
index cdad47e4098d..c7f32b1de462 100644
--- a/sound/pci/ak4531_codec.c
+++ b/sound/pci/ak4531_codec.c
@@ -373,7 +373,7 @@ int snd_ak4531_mixer(struct snd_card *card,
 		return -EINVAL;
 	if (rak4531)
 		*rak4531 = NULL;
-	ak4531 = kzalloc(sizeof(*ak4531), GFP_KERNEL);
+	ak4531 = kzalloc_obj(*ak4531, GFP_KERNEL);
 	if (ak4531 == NULL)
 		return -ENOMEM;
 	*ak4531 = *_ak4531;
diff --git a/sound/pci/als300.c b/sound/pci/als300.c
index 733e84def5a7..5b82777522d8 100644
--- a/sound/pci/als300.c
+++ b/sound/pci/als300.c
@@ -342,8 +342,7 @@ static int snd_als300_playback_open(struct snd_pcm_substream *substream)
 {
 	struct snd_als300 *chip = snd_pcm_substream_chip(substream);
 	struct snd_pcm_runtime *runtime = substream->runtime;
-	struct snd_als300_substream_data *data = kzalloc(sizeof(*data),
-								GFP_KERNEL);
+	struct snd_als300_substream_data *data = kzalloc_obj(*data, GFP_KERNEL);

 	if (!data)
 		return -ENOMEM;
@@ -370,8 +369,7 @@ static int snd_als300_capture_open(struct snd_pcm_substream *substream)
 {
 	struct snd_als300 *chip = snd_pcm_substream_chip(substream);
 	struct snd_pcm_runtime *runtime = substream->runtime;
-	struct snd_als300_substream_data *data = kzalloc(sizeof(*data),
-								GFP_KERNEL);
+	struct snd_als300_substream_data *data = kzalloc_obj(*data, GFP_KERNEL);

 	if (!data)
 		return -ENOMEM;
diff --git a/sound/pci/asihpi/asihpi.c b/sound/pci/asihpi/asihpi.c
index fd0a67b772d1..c5f38fc88c86 100644
--- a/sound/pci/asihpi/asihpi.c
+++ b/sound/pci/asihpi/asihpi.c
@@ -975,7 +975,7 @@ static int snd_card_asihpi_playback_open(struct snd_pcm_substream *substream)
 	struct snd_pcm_hardware snd_card_asihpi_playback;
 	int err;

-	dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL);
+	dpcm = kzalloc_obj(*dpcm, GFP_KERNEL);
 	if (dpcm == NULL)
 		return -ENOMEM;

@@ -1145,7 +1145,7 @@ static int snd_card_asihpi_capture_open(struct snd_pcm_substream *substream)
 	struct snd_pcm_hardware snd_card_asihpi_capture;
 	int err;

-	dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL);
+	dpcm = kzalloc_obj(*dpcm, GFP_KERNEL);
 	if (dpcm == NULL)
 		return -ENOMEM;

diff --git a/sound/pci/asihpi/hpi6000.c b/sound/pci/asihpi/hpi6000.c
index b08578c93c6a..41b2892a9312 100644
--- a/sound/pci/asihpi/hpi6000.c
+++ b/sound/pci/asihpi/hpi6000.c
@@ -406,7 +406,7 @@ static void subsys_create_adapter(struct hpi_message *phm,

 	memset(&ao, 0, sizeof(ao));

-	ao.priv = kzalloc(sizeof(struct hpi_hw_obj), GFP_KERNEL);
+	ao.priv = kzalloc_obj(struct hpi_hw_obj, GFP_KERNEL);
 	if (!ao.priv) {
 		HPI_DEBUG_LOG(ERROR, "can't get mem for adapter object\n");
 		phr->error = HPI_ERROR_MEMORY_ALLOC;
diff --git a/sound/pci/asihpi/hpi6205.c b/sound/pci/asihpi/hpi6205.c
index c7d7eff86727..c484d929d6da 100644
--- a/sound/pci/asihpi/hpi6205.c
+++ b/sound/pci/asihpi/hpi6205.c
@@ -461,7 +461,7 @@ static void subsys_create_adapter(struct hpi_message *phm,

 	memset(&ao, 0, sizeof(ao));

-	ao.priv = kzalloc(sizeof(struct hpi_hw_obj), GFP_KERNEL);
+	ao.priv = kzalloc_obj(struct hpi_hw_obj, GFP_KERNEL);
 	if (!ao.priv) {
 		HPI_DEBUG_LOG(ERROR, "can't get mem for adapter object\n");
 		phr->error = HPI_ERROR_MEMORY_ALLOC;
diff --git a/sound/pci/asihpi/hpicmn.c b/sound/pci/asihpi/hpicmn.c
index 7d1abaedb46a..2378bdeb1f23 100644
--- a/sound/pci/asihpi/hpicmn.c
+++ b/sound/pci/asihpi/hpicmn.c
@@ -641,13 +641,12 @@ void hpi_cmn_control_cache_sync_to_msg(struct hpi_control_cache *p_cache,
 struct hpi_control_cache *hpi_alloc_control_cache(const u32 control_count,
 	const u32 size_in_bytes, u8 *p_dsp_control_buffer)
 {
-	struct hpi_control_cache *p_cache =
-		kmalloc(sizeof(*p_cache), GFP_KERNEL);
+	struct hpi_control_cache *p_cache = kmalloc_obj(*p_cache, GFP_KERNEL);
 	if (!p_cache)
 		return NULL;

 	p_cache->p_info =
-		kcalloc(control_count, sizeof(*p_cache->p_info), GFP_KERNEL);
+		kzalloc_objs(*p_cache->p_info, control_count, GFP_KERNEL);
 	if (!p_cache->p_info) {
 		kfree(p_cache);
 		return NULL;
diff --git a/sound/pci/asihpi/hpidspcd.c b/sound/pci/asihpi/hpidspcd.c
index 9acc0ac75eca..8eda87107b28 100644
--- a/sound/pci/asihpi/hpidspcd.c
+++ b/sound/pci/asihpi/hpidspcd.c
@@ -69,7 +69,7 @@ short hpi_dsp_code_open(u32 adapter, void *os_data, struct dsp_code *dsp_code,
 	}

 	HPI_DEBUG_LOG(DEBUG, "dsp code %s opened\n", fw_name);
-	dsp_code->pvt = kmalloc(sizeof(*dsp_code->pvt), GFP_KERNEL);
+	dsp_code->pvt = kmalloc_obj(*dsp_code->pvt, GFP_KERNEL);
 	if (!dsp_code->pvt) {
 		err_ret = HPI_ERROR_MEMORY_ALLOC;
 		goto error2;
diff --git a/sound/pci/asihpi/hpioctl.c b/sound/pci/asihpi/hpioctl.c
index 9fb0c8e503df..24c116ab9cf5 100644
--- a/sound/pci/asihpi/hpioctl.c
+++ b/sound/pci/asihpi/hpioctl.c
@@ -105,8 +105,8 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 	if (cmd != HPI_IOCTL_LINUX)
 		return -EINVAL;

-	hm = kmalloc(sizeof(*hm), GFP_KERNEL);
-	hr = kzalloc(sizeof(*hr), GFP_KERNEL);
+	hm = kmalloc_obj(*hm, GFP_KERNEL);
+	hr = kzalloc_obj(*hr, GFP_KERNEL);
 	if (!hm || !hr) {
 		err = -ENOMEM;
 		goto out;
diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c
index 41774e2ef53f..bdf9453939f3 100644
--- a/sound/pci/ca0106/ca0106_main.c
+++ b/sound/pci/ca0106/ca0106_main.c
@@ -543,7 +543,7 @@ static int snd_ca0106_pcm_open_playback_channel(struct snd_pcm_substream *substr
 	struct snd_pcm_runtime *runtime = substream->runtime;
 	int err;

-	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
+	epcm = kzalloc_obj(*epcm, GFP_KERNEL);

 	if (epcm == NULL)
 		return -ENOMEM;
@@ -638,7 +638,7 @@ static int snd_ca0106_pcm_open_capture_channel(struct snd_pcm_substream *substre
 	struct snd_pcm_runtime *runtime = substream->runtime;
 	int err;

-	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
+	epcm = kzalloc_obj(*epcm, GFP_KERNEL);
 	if (!epcm)
 		return -ENOMEM;

diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
index 0666be543474..189948f70d84 100644
--- a/sound/pci/cmipci.c
+++ b/sound/pci/cmipci.c
@@ -1096,7 +1096,7 @@ static int save_mixer_state(struct cmipci *cm)
 		struct snd_ctl_elem_value *val;
 		unsigned int i;

-		val = kmalloc(sizeof(*val), GFP_KERNEL);
+		val = kmalloc_obj(*val, GFP_KERNEL);
 		if (!val)
 			return -ENOMEM;
 		for (i = 0; i < CM_SAVED_MIXERS; i++) {
@@ -1130,7 +1130,7 @@ static void restore_mixer_state(struct cmipci *cm)
 		struct snd_ctl_elem_value *val;
 		unsigned int i;

-		val = kmalloc(sizeof(*val), GFP_KERNEL);
+		val = kmalloc_obj(*val, GFP_KERNEL);
 		if (!val)
 			return;
 		cm->mixer_insensitive = 0; /* at first clear this;
diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c
index b96ab7fd464c..d7bed722d939 100644
--- a/sound/pci/cs46xx/cs46xx_lib.c
+++ b/sound/pci/cs46xx/cs46xx_lib.c
@@ -401,7 +401,7 @@ static int load_firmware(struct snd_cs46xx *chip,
 	}

 	err = -ENOMEM;
-	module = kzalloc(sizeof(*module), GFP_KERNEL);
+	module = kzalloc_obj(*module, GFP_KERNEL);
 	if (!module)
 		goto error;
 	module->module_name = kstrdup(fw_name, GFP_KERNEL);
@@ -414,7 +414,7 @@ static int load_firmware(struct snd_cs46xx *chip,
 	if (nums >= 40)
 		goto error_inval;
 	module->symbol_table.symbols =
-		kcalloc(nums, sizeof(struct dsp_symbol_entry), GFP_KERNEL);
+		kzalloc_objs(struct dsp_symbol_entry, nums, GFP_KERNEL);
 	if (!module->symbol_table.symbols)
 		goto error;
 	for (i = 0; i < nums; i++) {
@@ -434,7 +434,7 @@ static int load_firmware(struct snd_cs46xx *chip,
 	if (nums > 10)
 		goto error_inval;
 	module->segments =
-		kcalloc(nums, sizeof(struct dsp_segment_desc), GFP_KERNEL);
+		kzalloc_objs(struct dsp_segment_desc, nums, GFP_KERNEL);
 	if (!module->segments)
 		goto error;
 	for (i = 0; i < nums; i++) {
diff --git a/sound/pci/cs46xx/dsp_spos.c b/sound/pci/cs46xx/dsp_spos.c
index 3d34575a0e8f..f106f46aeb87 100644
--- a/sound/pci/cs46xx/dsp_spos.c
+++ b/sound/pci/cs46xx/dsp_spos.c
@@ -221,7 +221,8 @@ add_symbol (struct snd_cs46xx * chip, char * symbol_name, u32 address, int type)

 struct dsp_spos_instance *cs46xx_dsp_spos_create (struct snd_cs46xx * chip)
 {
-	struct dsp_spos_instance * ins = kzalloc(sizeof(struct dsp_spos_instance), GFP_KERNEL);
+	struct dsp_spos_instance * ins = kzalloc_obj(struct dsp_spos_instance,
+						     GFP_KERNEL);

 	if (ins == NULL)
 		return NULL;
@@ -231,9 +232,8 @@ struct dsp_spos_instance *cs46xx_dsp_spos_create (struct snd_cs46xx * chip)
 		vmalloc(array_size(DSP_MAX_SYMBOLS,
 				   sizeof(struct dsp_symbol_entry)));
 	ins->code.data = kmalloc(DSP_CODE_BYTE_SIZE, GFP_KERNEL);
-	ins->modules = kmalloc_array(DSP_MAX_MODULES,
-				     sizeof(struct dsp_module_desc),
-				     GFP_KERNEL);
+	ins->modules = kmalloc_objs(struct dsp_module_desc, DSP_MAX_MODULES,
+				    GFP_KERNEL);
 	if (!ins->symbol_table.symbols || !ins->code.data || !ins->modules) {
 		cs46xx_dsp_spos_destroy(chip);
 		goto error;
diff --git a/sound/pci/cs46xx/dsp_spos_scb_lib.c b/sound/pci/cs46xx/dsp_spos_scb_lib.c
index 32ed415bf427..c55ff043d1d7 100644
--- a/sound/pci/cs46xx/dsp_spos_scb_lib.c
+++ b/sound/pci/cs46xx/dsp_spos_scb_lib.c
@@ -234,7 +234,7 @@ void cs46xx_dsp_proc_register_scb_desc (struct snd_cs46xx *chip,
 		entry = snd_info_create_card_entry(ins->snd_card, scb->scb_name,
 						   ins->proc_dsp_dir);
 		if (entry) {
-			scb_info = kmalloc(sizeof(struct proc_scb_info), GFP_KERNEL);
+			scb_info = kmalloc_obj(struct proc_scb_info, GFP_KERNEL);
 			if (!scb_info) {
 				snd_info_free_entry(entry);
 				entry = NULL;
diff --git a/sound/pci/ctxfi/ctamixer.c b/sound/pci/ctxfi/ctamixer.c
index c30162be27ee..c22e3173ec1b 100644
--- a/sound/pci/ctxfi/ctamixer.c
+++ b/sound/pci/ctxfi/ctamixer.c
@@ -296,7 +296,7 @@ int amixer_mgr_create(struct hw *hw, void **ramixer_mgr)
 	struct amixer_mgr *amixer_mgr;

 	*ramixer_mgr = NULL;
-	amixer_mgr = kzalloc(sizeof(*amixer_mgr), GFP_KERNEL);
+	amixer_mgr = kzalloc_obj(*amixer_mgr, GFP_KERNEL);
 	if (!amixer_mgr)
 		return -ENOMEM;

@@ -448,7 +448,7 @@ int sum_mgr_create(struct hw *hw, void **rsum_mgr)
 	struct sum_mgr *sum_mgr;

 	*rsum_mgr = NULL;
-	sum_mgr = kzalloc(sizeof(*sum_mgr), GFP_KERNEL);
+	sum_mgr = kzalloc_obj(*sum_mgr, GFP_KERNEL);
 	if (!sum_mgr)
 		return -ENOMEM;

diff --git a/sound/pci/ctxfi/ctatc.c b/sound/pci/ctxfi/ctatc.c
index a25a599fc5be..f130a2722a70 100644
--- a/sound/pci/ctxfi/ctatc.c
+++ b/sound/pci/ctxfi/ctatc.c
@@ -1723,7 +1723,7 @@ int ct_atc_create(struct snd_card *card, struct pci_dev *pci,

 	*ratc = NULL;

-	atc = kzalloc(sizeof(*atc), GFP_KERNEL);
+	atc = kzalloc_obj(*atc, GFP_KERNEL);
 	if (!atc)
 		return -ENOMEM;

diff --git a/sound/pci/ctxfi/ctdaio.c b/sound/pci/ctxfi/ctdaio.c
index 1c8f8efd836c..12653f7cd9e8 100644
--- a/sound/pci/ctxfi/ctdaio.c
+++ b/sound/pci/ctxfi/ctdaio.c
@@ -159,7 +159,7 @@ static int dao_set_left_input(struct dao *dao, struct rsc *input)
 	struct daio *daio = &dao->daio;
 	int i;

-	entry = kcalloc(daio->rscl.msr, sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_objs(*entry, daio->rscl.msr, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -188,7 +188,7 @@ static int dao_set_right_input(struct dao *dao, struct rsc *input)
 	struct daio *daio = &dao->daio;
 	int i;

-	entry = kcalloc(daio->rscr.msr, sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_objs(*entry, daio->rscr.msr, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

@@ -660,7 +660,7 @@ int daio_mgr_create(struct hw *hw, void **rdaio_mgr)
 	struct imapper *entry;

 	*rdaio_mgr = NULL;
-	daio_mgr = kzalloc(sizeof(*daio_mgr), GFP_KERNEL);
+	daio_mgr = kzalloc_obj(*daio_mgr, GFP_KERNEL);
 	if (!daio_mgr)
 		return -ENOMEM;

@@ -671,7 +671,7 @@ int daio_mgr_create(struct hw *hw, void **rdaio_mgr)
 	spin_lock_init(&daio_mgr->mgr_lock);
 	spin_lock_init(&daio_mgr->imap_lock);
 	INIT_LIST_HEAD(&daio_mgr->imappers);
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		err = -ENOMEM;
 		goto error2;
diff --git a/sound/pci/ctxfi/cthw20k1.c b/sound/pci/ctxfi/cthw20k1.c
index ea0a928937b6..0851453b8565 100644
--- a/sound/pci/ctxfi/cthw20k1.c
+++ b/sound/pci/ctxfi/cthw20k1.c
@@ -157,7 +157,7 @@ static int src_get_rsc_ctrl_blk(void **rblk)
 	struct src_rsc_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -483,7 +483,7 @@ static int src_mgr_get_ctrl_blk(void **rblk)
 	struct src_mgr_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -504,7 +504,7 @@ static int srcimp_mgr_get_ctrl_blk(void **rblk)
 	struct srcimp_mgr_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -691,7 +691,7 @@ static int amixer_rsc_get_ctrl_blk(void **rblk)
 	struct amixer_rsc_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -898,7 +898,7 @@ static int dai_get_ctrl_blk(void **rblk)
 	struct dai_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -947,7 +947,7 @@ static int dao_get_ctrl_blk(void **rblk)
 	struct dao_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -1141,7 +1141,7 @@ static int daio_mgr_get_ctrl_blk(struct hw *hw, void **rblk)
 	struct daio_mgr_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -2227,7 +2227,7 @@ int create_20k1_hw_obj(struct hw **rhw)
 	struct hw20k1 *hw20k1;

 	*rhw = NULL;
-	hw20k1 = kzalloc(sizeof(*hw20k1), GFP_KERNEL);
+	hw20k1 = kzalloc_obj(*hw20k1, GFP_KERNEL);
 	if (!hw20k1)
 		return -ENOMEM;

diff --git a/sound/pci/ctxfi/cthw20k2.c b/sound/pci/ctxfi/cthw20k2.c
index fac88f5590c9..1d558914a26a 100644
--- a/sound/pci/ctxfi/cthw20k2.c
+++ b/sound/pci/ctxfi/cthw20k2.c
@@ -157,7 +157,7 @@ static int src_get_rsc_ctrl_blk(void **rblk)
 	struct src_rsc_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -483,7 +483,7 @@ static int src_mgr_get_ctrl_blk(void **rblk)
 	struct src_mgr_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -504,7 +504,7 @@ static int srcimp_mgr_get_ctrl_blk(void **rblk)
 	struct srcimp_mgr_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -693,7 +693,7 @@ static int amixer_rsc_get_ctrl_blk(void **rblk)
 	struct amixer_rsc_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -882,7 +882,7 @@ static int dai_get_ctrl_blk(void **rblk)
 	struct dai_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -932,7 +932,7 @@ static int dao_get_ctrl_blk(void **rblk)
 	struct dao_ctrl_blk *blk;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -1084,7 +1084,7 @@ static int daio_mgr_get_ctrl_blk(struct hw *hw, void **rblk)
 	int i;

 	*rblk = NULL;
-	blk = kzalloc(sizeof(*blk), GFP_KERNEL);
+	blk = kzalloc_obj(*blk, GFP_KERNEL);
 	if (!blk)
 		return -ENOMEM;

@@ -2369,7 +2369,7 @@ int create_20k2_hw_obj(struct hw **rhw)
 	struct hw20k2 *hw20k2;

 	*rhw = NULL;
-	hw20k2 = kzalloc(sizeof(*hw20k2), GFP_KERNEL);
+	hw20k2 = kzalloc_obj(*hw20k2, GFP_KERNEL);
 	if (!hw20k2)
 		return -ENOMEM;

diff --git a/sound/pci/ctxfi/ctmixer.c b/sound/pci/ctxfi/ctmixer.c
index fc9fde284fb3..3c5b89f3eae3 100644
--- a/sound/pci/ctxfi/ctmixer.c
+++ b/sound/pci/ctxfi/ctmixer.c
@@ -969,7 +969,7 @@ static int ct_mixer_get_mem(struct ct_mixer **rmixer)

 	*rmixer = NULL;
 	/* Allocate mem for mixer obj */
-	mixer = kzalloc(sizeof(*mixer), GFP_KERNEL);
+	mixer = kzalloc_obj(*mixer, GFP_KERNEL);
 	if (!mixer)
 		return -ENOMEM;

diff --git a/sound/pci/ctxfi/ctpcm.c b/sound/pci/ctxfi/ctpcm.c
index 81dfc6a76b18..2b0f4130642c 100644
--- a/sound/pci/ctxfi/ctpcm.c
+++ b/sound/pci/ctxfi/ctpcm.c
@@ -119,7 +119,7 @@ static int ct_pcm_playback_open(struct snd_pcm_substream *substream)
 	struct ct_atc_pcm *apcm;
 	int err;

-	apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
+	apcm = kzalloc_obj(*apcm, GFP_KERNEL);
 	if (!apcm)
 		return -ENOMEM;

@@ -265,7 +265,7 @@ static int ct_pcm_capture_open(struct snd_pcm_substream *substream)
 	struct ct_atc_pcm *apcm;
 	int err;

-	apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
+	apcm = kzalloc_obj(*apcm, GFP_KERNEL);
 	if (!apcm)
 		return -ENOMEM;

diff --git a/sound/pci/ctxfi/ctsrc.c b/sound/pci/ctxfi/ctsrc.c
index 46afc9604c08..b781201c7f0e 100644
--- a/sound/pci/ctxfi/ctsrc.c
+++ b/sound/pci/ctxfi/ctsrc.c
@@ -540,7 +540,7 @@ int src_mgr_create(struct hw *hw, void **rsrc_mgr)
 	struct src_mgr *src_mgr;

 	*rsrc_mgr = NULL;
-	src_mgr = kzalloc(sizeof(*src_mgr), GFP_KERNEL);
+	src_mgr = kzalloc_obj(*src_mgr, GFP_KERNEL);
 	if (!src_mgr)
 		return -ENOMEM;

@@ -669,8 +669,7 @@ static int srcimp_rsc_init(struct srcimp *srcimp,
 		return err;

 	/* Reserve memory for imapper nodes */
-	srcimp->imappers = kcalloc(desc->msr, sizeof(struct imapper),
-				   GFP_KERNEL);
+	srcimp->imappers = kzalloc_objs(struct imapper, desc->msr, GFP_KERNEL);
 	if (!srcimp->imappers) {
 		err = -ENOMEM;
 		goto error1;
@@ -811,7 +810,7 @@ int srcimp_mgr_create(struct hw *hw, void **rsrcimp_mgr)
 	struct imapper *entry;

 	*rsrcimp_mgr = NULL;
-	srcimp_mgr = kzalloc(sizeof(*srcimp_mgr), GFP_KERNEL);
+	srcimp_mgr = kzalloc_obj(*srcimp_mgr, GFP_KERNEL);
 	if (!srcimp_mgr)
 		return -ENOMEM;

@@ -822,7 +821,7 @@ int srcimp_mgr_create(struct hw *hw, void **rsrcimp_mgr)
 	spin_lock_init(&srcimp_mgr->mgr_lock);
 	spin_lock_init(&srcimp_mgr->imap_lock);
 	INIT_LIST_HEAD(&srcimp_mgr->imappers);
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry) {
 		err = -ENOMEM;
 		goto error2;
diff --git a/sound/pci/ctxfi/cttimer.c b/sound/pci/ctxfi/cttimer.c
index 609b10320ff7..53d16f575c38 100644
--- a/sound/pci/ctxfi/cttimer.c
+++ b/sound/pci/ctxfi/cttimer.c
@@ -390,7 +390,7 @@ struct ct_timer *ct_timer_new(struct ct_atc *atc)
 	struct ct_timer *atimer;
 	struct hw *hw;

-	atimer = kzalloc(sizeof(*atimer), GFP_KERNEL);
+	atimer = kzalloc_obj(*atimer, GFP_KERNEL);
 	if (!atimer)
 		return NULL;
 	spin_lock_init(&atimer->lock);
diff --git a/sound/pci/ctxfi/ctvmem.c b/sound/pci/ctxfi/ctvmem.c
index 823d6e240a07..316072863dbf 100644
--- a/sound/pci/ctxfi/ctvmem.c
+++ b/sound/pci/ctxfi/ctvmem.c
@@ -55,7 +55,7 @@ get_vm_block(struct ct_vm *vm, unsigned int size, struct ct_atc *atc)
 		return entry;
 	}

-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (!block)
 		return NULL;

@@ -170,7 +170,7 @@ int ct_vm_create(struct ct_vm **rvm, struct pci_dev *pci)

 	*rvm = NULL;

-	vm = kzalloc(sizeof(*vm), GFP_KERNEL);
+	vm = kzalloc_obj(*vm, GFP_KERNEL);
 	if (!vm)
 		return -ENOMEM;

@@ -195,7 +195,7 @@ int ct_vm_create(struct ct_vm **rvm, struct pci_dev *pci)
 	vm->get_ptp_phys = ct_get_ptp_phys;
 	INIT_LIST_HEAD(&vm->unused);
 	INIT_LIST_HEAD(&vm->used);
-	block = kzalloc(sizeof(*block), GFP_KERNEL);
+	block = kzalloc_obj(*block, GFP_KERNEL);
 	if (NULL != block) {
 		block->addr = 0;
 		block->size = vm->size;
diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c
index 8b7b6838106f..fdf309633c8a 100644
--- a/sound/pci/echoaudio/echoaudio.c
+++ b/sound/pci/echoaudio/echoaudio.c
@@ -265,7 +265,7 @@ static int pcm_open(struct snd_pcm_substream *substream,
 	chip = snd_pcm_substream_chip(substream);
 	runtime = substream->runtime;

-	pipe = kzalloc(sizeof(struct audiopipe), GFP_KERNEL);
+	pipe = kzalloc_obj(struct audiopipe, GFP_KERNEL);
 	if (!pipe)
 		return -ENOMEM;
 	pipe->index = -1;		/* Not configured yet */
diff --git a/sound/pci/emu10k1/emu10k1x.c b/sound/pci/emu10k1/emu10k1x.c
index 9607a0f7174b..e79f773941cd 100644
--- a/sound/pci/emu10k1/emu10k1x.c
+++ b/sound/pci/emu10k1/emu10k1x.c
@@ -367,7 +367,7 @@ static int snd_emu10k1x_playback_open(struct snd_pcm_substream *substream)
 	if (err < 0)
                 return err;

-	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
+	epcm = kzalloc_obj(*epcm, GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = chip;
@@ -547,7 +547,7 @@ static int snd_emu10k1x_pcm_open_capture(struct snd_pcm_substream *substream)
 	if (err < 0)
 		return err;

-	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
+	epcm = kzalloc_obj(*epcm, GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;

diff --git a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c
index 37af7bf76347..a9c786fe638a 100644
--- a/sound/pci/emu10k1/emufx.c
+++ b/sound/pci/emu10k1/emufx.c
@@ -776,7 +776,7 @@ static int snd_emu10k1_verify_controls(struct snd_emu10k1 *emu,
 		if (snd_emu10k1_look_for_ctl(emu, &id) == NULL)
 			return -ENOENT;
 	}
-	gctl = kmalloc(sizeof(*gctl), GFP_KERNEL);
+	gctl = kmalloc_obj(*gctl, GFP_KERNEL);
 	if (! gctl)
 		return -ENOMEM;
 	err = 0;
@@ -864,9 +864,9 @@ static int snd_emu10k1_add_controls(struct snd_emu10k1 *emu,
 	struct snd_ctl_elem_value *val;
 	int err = 0;

-	val = kmalloc(sizeof(*val), GFP_KERNEL);
-	gctl = kmalloc(sizeof(*gctl), GFP_KERNEL);
-	nctl = kmalloc(sizeof(*nctl), GFP_KERNEL);
+	val = kmalloc_obj(*val, GFP_KERNEL);
+	gctl = kmalloc_obj(*gctl, GFP_KERNEL);
+	nctl = kmalloc_obj(*nctl, GFP_KERNEL);
 	if (!val || !gctl || !nctl) {
 		err = -ENOMEM;
 		goto __error;
@@ -914,7 +914,7 @@ static int snd_emu10k1_add_controls(struct snd_emu10k1 *emu,
 		nctl->max = gctl->max;
 		nctl->translation = gctl->translation;
 		if (ctl == NULL) {
-			ctl = kmalloc(sizeof(*ctl), GFP_KERNEL);
+			ctl = kmalloc_obj(*ctl, GFP_KERNEL);
 			if (ctl == NULL) {
 				err = -ENOMEM;
 				kfree(knew.tlv.p);
@@ -980,7 +980,7 @@ static int snd_emu10k1_list_controls(struct snd_emu10k1 *emu,
 	struct snd_emu10k1_fx8010_ctl *ctl;
 	struct snd_ctl_elem_id *id;

-	gctl = kmalloc(sizeof(*gctl), GFP_KERNEL);
+	gctl = kmalloc_obj(*gctl, GFP_KERNEL);
 	if (! gctl)
 		return -ENOMEM;

@@ -1282,16 +1282,15 @@ static int _snd_emu10k1_audigy_init_efx(struct snd_emu10k1 *emu)
 	u32 *gpr_map;

 	err = -ENOMEM;
-	icode = kzalloc(sizeof(*icode), GFP_KERNEL);
+	icode = kzalloc_obj(*icode, GFP_KERNEL);
 	if (!icode)
 		return err;

-	icode->gpr_map = kcalloc(512 + 256 + 256 + 2 * 1024,
-				 sizeof(u_int32_t), GFP_KERNEL);
+	icode->gpr_map = kzalloc_objs(u_int32_t, 512 + 256 + 256 + 2 * 1024,
+				      GFP_KERNEL);
 	if (!icode->gpr_map)
 		goto __err_gpr;
-	controls = kcalloc(SND_EMU10K1_GPR_CONTROLS,
-			   sizeof(*controls), GFP_KERNEL);
+	controls = kzalloc_objs(*controls, SND_EMU10K1_GPR_CONTROLS, GFP_KERNEL);
 	if (!controls)
 		goto __err_ctrls;

@@ -1800,22 +1799,21 @@ static int _snd_emu10k1_init_efx(struct snd_emu10k1 *emu)
 	u32 *gpr_map;

 	err = -ENOMEM;
-	icode = kzalloc(sizeof(*icode), GFP_KERNEL);
+	icode = kzalloc_obj(*icode, GFP_KERNEL);
 	if (!icode)
 		return err;

-	icode->gpr_map = kcalloc(256 + 160 + 160 + 2 * 512,
-				 sizeof(u_int32_t), GFP_KERNEL);
+	icode->gpr_map = kzalloc_objs(u_int32_t, 256 + 160 + 160 + 2 * 512,
+				      GFP_KERNEL);
 	if (!icode->gpr_map)
 		goto __err_gpr;

-	controls = kcalloc(SND_EMU10K1_GPR_CONTROLS,
-			   sizeof(struct snd_emu10k1_fx8010_control_gpr),
-			   GFP_KERNEL);
+	controls = kzalloc_objs(struct snd_emu10k1_fx8010_control_gpr,
+				SND_EMU10K1_GPR_CONTROLS, GFP_KERNEL);
 	if (!controls)
 		goto __err_ctrls;

-	ipcm = kzalloc(sizeof(*ipcm), GFP_KERNEL);
+	ipcm = kzalloc_obj(*ipcm, GFP_KERNEL);
 	if (!ipcm)
 		goto __err_ipcm;

diff --git a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c
index 071c75ba81fd..1a0fd2014691 100644
--- a/sound/pci/emu10k1/emupcm.c
+++ b/sound/pci/emu10k1/emupcm.c
@@ -1132,7 +1132,7 @@ static int snd_emu10k1_efx_playback_open(struct snd_pcm_substream *substream)
 	struct snd_pcm_runtime *runtime = substream->runtime;
 	int i, j, err;

-	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
+	epcm = kzalloc_obj(*epcm, GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = emu;
@@ -1171,7 +1171,7 @@ static int snd_emu10k1_playback_open(struct snd_pcm_substream *substream)
 	struct snd_pcm_runtime *runtime = substream->runtime;
 	int i, err, sample_rate;

-	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
+	epcm = kzalloc_obj(*epcm, GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = emu;
@@ -1222,7 +1222,7 @@ static int snd_emu10k1_capture_open(struct snd_pcm_substream *substream)
 	struct snd_pcm_runtime *runtime = substream->runtime;
 	struct snd_emu10k1_pcm *epcm;

-	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
+	epcm = kzalloc_obj(*epcm, GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = emu;
@@ -1259,7 +1259,7 @@ static int snd_emu10k1_capture_mic_open(struct snd_pcm_substream *substream)
 	struct snd_emu10k1_pcm *epcm;
 	struct snd_pcm_runtime *runtime = substream->runtime;

-	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
+	epcm = kzalloc_obj(*epcm, GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = emu;
@@ -1299,7 +1299,7 @@ static int snd_emu10k1_capture_efx_open(struct snd_pcm_substream *substream)
 	int nefx = emu->audigy ? 64 : 32;
 	int idx, err;

-	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
+	epcm = kzalloc_obj(*epcm, GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = emu;
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
index 51aee2c4d461..6650f0192281 100644
--- a/sound/pci/es1968.c
+++ b/sound/pci/es1968.c
@@ -1307,7 +1307,7 @@ static struct esm_memory *snd_es1968_new_memory(struct es1968 *chip, int size)

 __found:
 	if (buf->buf.bytes > size) {
-		struct esm_memory *chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
+		struct esm_memory *chunk = kmalloc_obj(*chunk, GFP_KERNEL);
 		if (chunk == NULL)
 			return NULL;
 		chunk->buf = buf->buf;
@@ -1385,7 +1385,7 @@ snd_es1968_init_dmabuf(struct es1968 *chip)

 	INIT_LIST_HEAD(&chip->buf_list);
 	/* allocate an empty chunk */
-	chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
+	chunk = kmalloc_obj(*chunk, GFP_KERNEL);
 	if (chunk == NULL) {
 		snd_es1968_free_dmabuf(chip);
 		return -ENOMEM;
@@ -1488,7 +1488,7 @@ static int snd_es1968_playback_open(struct snd_pcm_substream *substream)
 	if (apu1 < 0)
 		return apu1;

-	es = kzalloc(sizeof(*es), GFP_KERNEL);
+	es = kzalloc_obj(*es, GFP_KERNEL);
 	if (!es) {
 		snd_es1968_free_apu_pair(chip, apu1);
 		return -ENOMEM;
@@ -1529,7 +1529,7 @@ static int snd_es1968_capture_open(struct snd_pcm_substream *substream)
 		return apu2;
 	}

-	es = kzalloc(sizeof(*es), GFP_KERNEL);
+	es = kzalloc_obj(*es, GFP_KERNEL);
 	if (!es) {
 		snd_es1968_free_apu_pair(chip, apu1);
 		snd_es1968_free_apu_pair(chip, apu2);
diff --git a/sound/pci/ice1712/ak4xxx.c b/sound/pci/ice1712/ak4xxx.c
index cad33a2f26bc..e82bfc02599e 100644
--- a/sound/pci/ice1712/ak4xxx.c
+++ b/sound/pci/ice1712/ak4xxx.c
@@ -115,7 +115,7 @@ int snd_ice1712_akm4xxx_init(struct snd_akm4xxx *ak, const struct snd_akm4xxx *t
 	struct snd_ak4xxx_private *priv;

 	if (_priv != NULL) {
-		priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+		priv = kmalloc_obj(*priv, GFP_KERNEL);
 		if (priv == NULL)
 			return -ENOMEM;
 		*priv = *_priv;
diff --git a/sound/pci/ice1712/aureon.c b/sound/pci/ice1712/aureon.c
index b4c9e7d11609..92c4950137b0 100644
--- a/sound/pci/ice1712/aureon.c
+++ b/sound/pci/ice1712/aureon.c
@@ -2076,7 +2076,7 @@ static int aureon_init(struct snd_ice1712 *ice)
 	struct aureon_spec *spec;
 	int i, err;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
@@ -2091,7 +2091,7 @@ static int aureon_init(struct snd_ice1712 *ice)
 	}

 	/* to remember the register values of CS8415 */
-	ice->akm = kzalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ice->akm = kzalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 	if (!ice->akm)
 		return -ENOMEM;
 	ice->akm_codecs = 1;
diff --git a/sound/pci/ice1712/delta.c b/sound/pci/ice1712/delta.c
index e5a9585cba4c..5ea80bd596e6 100644
--- a/sound/pci/ice1712/delta.c
+++ b/sound/pci/ice1712/delta.c
@@ -707,7 +707,7 @@ static int snd_ice1712_delta_init(struct snd_ice1712 *ice)
 	}

 	/* second stage of initialization, analog parts and others */
-	ak = ice->akm = kmalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ak = ice->akm = kmalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 	if (! ak)
 		return -ENOMEM;
 	ice->akm_codecs = 1;
diff --git a/sound/pci/ice1712/ews.c b/sound/pci/ice1712/ews.c
index 1dffcb011deb..43a0a569de1b 100644
--- a/sound/pci/ice1712/ews.c
+++ b/sound/pci/ice1712/ews.c
@@ -431,7 +431,7 @@ static int snd_ice1712_ews_init(struct snd_ice1712 *ice)
 		break;
 	}

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
@@ -530,7 +530,7 @@ static int snd_ice1712_ews_init(struct snd_ice1712 *ice)
 	}

 	/* analog section */
-	ak = ice->akm = kzalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ak = ice->akm = kzalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 	if (! ak)
 		return -ENOMEM;
 	ice->akm_codecs = 1;
diff --git a/sound/pci/ice1712/hoontech.c b/sound/pci/ice1712/hoontech.c
index 071f94dc7390..ab651526aba9 100644
--- a/sound/pci/ice1712/hoontech.c
+++ b/sound/pci/ice1712/hoontech.c
@@ -156,7 +156,7 @@ static int hoontech_init(struct snd_ice1712 *ice, bool staudio)
 	ice->num_total_dacs = 8;
 	ice->num_total_adcs = 8;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
@@ -301,7 +301,7 @@ static int snd_ice1712_value_init(struct snd_ice1712 *ice)
 	ice->num_total_adcs = 2;

 	/* analog section */
-	ak = ice->akm = kmalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ak = ice->akm = kmalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 	if (! ak)
 		return -ENOMEM;
 	ice->akm_codecs = 1;
diff --git a/sound/pci/ice1712/juli.c b/sound/pci/ice1712/juli.c
index d679842ae1bd..10f0eb7b347d 100644
--- a/sound/pci/ice1712/juli.c
+++ b/sound/pci/ice1712/juli.c
@@ -560,7 +560,7 @@ static int juli_init(struct snd_ice1712 *ice)
 	struct juli_spec *spec;
 	struct snd_akm4xxx *ak;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
@@ -594,7 +594,7 @@ static int juli_init(struct snd_ice1712 *ice)
 		ice->num_total_dacs = 2;
 		ice->num_total_adcs = 2;

-		ice->akm = kzalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+		ice->akm = kzalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 		ak = ice->akm;
 		if (!ak)
 			return -ENOMEM;
diff --git a/sound/pci/ice1712/maya44.c b/sound/pci/ice1712/maya44.c
index 551f478c59c4..b854fec347c4 100644
--- a/sound/pci/ice1712/maya44.c
+++ b/sound/pci/ice1712/maya44.c
@@ -668,7 +668,7 @@ static int maya44_init(struct snd_ice1712 *ice)
 	int i;
 	struct snd_maya44 *chip;

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (!chip)
 		return -ENOMEM;
 	mutex_init(&chip->mutex);
diff --git a/sound/pci/ice1712/phase.c b/sound/pci/ice1712/phase.c
index 151b740ce66d..00f97b87b06c 100644
--- a/sound/pci/ice1712/phase.c
+++ b/sound/pci/ice1712/phase.c
@@ -125,7 +125,7 @@ static int phase22_init(struct snd_ice1712 *ice)
 	}

 	/* Initialize analog chips */
-	ice->akm = kzalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ice->akm = kzalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 	ak = ice->akm;
 	if (!ak)
 		return -ENOMEM;
@@ -411,13 +411,13 @@ static int phase28_init(struct snd_ice1712 *ice)
 	ice->num_total_dacs = 8;
 	ice->num_total_adcs = 2;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;

 	/* Initialize analog chips */
-	ice->akm = kzalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ice->akm = kzalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 	ak = ice->akm;
 	if (!ak)
 		return -ENOMEM;
diff --git a/sound/pci/ice1712/pontis.c b/sound/pci/ice1712/pontis.c
index 557473f0d59e..80f7bb3af420 100644
--- a/sound/pci/ice1712/pontis.c
+++ b/sound/pci/ice1712/pontis.c
@@ -728,7 +728,7 @@ static int pontis_init(struct snd_ice1712 *ice)
 	ice->num_total_adcs = 2;

 	/* to remember the register values */
-	ice->akm = kzalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ice->akm = kzalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 	if (! ice->akm)
 		return -ENOMEM;
 	ice->akm_codecs = 1;
diff --git a/sound/pci/ice1712/prodigy192.c b/sound/pci/ice1712/prodigy192.c
index cd7db2b65b51..039ead80dd64 100644
--- a/sound/pci/ice1712/prodigy192.c
+++ b/sound/pci/ice1712/prodigy192.c
@@ -713,7 +713,7 @@ static int prodigy192_init(struct snd_ice1712 *ice)
 	ice->num_total_adcs = 2;
 	ice->vt1720 = 0;  /* ice1724, e.g. 23 GPIOs */

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
diff --git a/sound/pci/ice1712/prodigy_hifi.c b/sound/pci/ice1712/prodigy_hifi.c
index eac233093865..105409daf071 100644
--- a/sound/pci/ice1712/prodigy_hifi.c
+++ b/sound/pci/ice1712/prodigy_hifi.c
@@ -1060,12 +1060,12 @@ static int prodigy_hifi_init(struct snd_ice1712 *ice)
 	ice->gpio.saved[0] = 0;
 	/* to remember the register values */

-	ice->akm = kzalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ice->akm = kzalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 	if (! ice->akm)
 		return -ENOMEM;
 	ice->akm_codecs = 1;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
@@ -1143,12 +1143,12 @@ static int prodigy_hd2_init(struct snd_ice1712 *ice)
 	ice->gpio.saved[0] = 0;
 	/* to remember the register values */

-	ice->akm = kzalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ice->akm = kzalloc_obj(struct snd_akm4xxx, GFP_KERNEL);
 	if (! ice->akm)
 		return -ENOMEM;
 	ice->akm_codecs = 1;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
diff --git a/sound/pci/ice1712/psc724.c b/sound/pci/ice1712/psc724.c
index 0818e42c94ca..bb69d5173983 100644
--- a/sound/pci/ice1712/psc724.c
+++ b/sound/pci/ice1712/psc724.c
@@ -383,7 +383,7 @@ static int psc724_init(struct snd_ice1712 *ice)
 {
 	struct psc724_spec *spec;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
diff --git a/sound/pci/ice1712/quartet.c b/sound/pci/ice1712/quartet.c
index 099601edf1d0..a4f13a3ed6cf 100644
--- a/sound/pci/ice1712/quartet.c
+++ b/sound/pci/ice1712/quartet.c
@@ -969,7 +969,7 @@ static int qtet_init(struct snd_ice1712 *ice)
 	val = inb(ICEMT1724(ice, RATE));
 	outb(val | VT1724_SPDIF_MASTER, ICEMT1724(ice, RATE));

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	/* qtet is clocked by Xilinx array */
@@ -1005,7 +1005,7 @@ static int qtet_init(struct snd_ice1712 *ice)
 	ice->num_total_dacs = 2;
 	ice->num_total_adcs = 2;

-	ice->akm = kcalloc(2, sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ice->akm = kzalloc_objs(struct snd_akm4xxx, 2, GFP_KERNEL);
 	ak = ice->akm;
 	if (!ak)
 		return -ENOMEM;
diff --git a/sound/pci/ice1712/revo.c b/sound/pci/ice1712/revo.c
index bcf114152dfd..37556ff6fb36 100644
--- a/sound/pci/ice1712/revo.c
+++ b/sound/pci/ice1712/revo.c
@@ -147,7 +147,7 @@ static int revo51_i2c_init(struct snd_ice1712 *ice,
 	struct revo51_spec *spec;
 	int err;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
@@ -470,7 +470,7 @@ static int ap192_ak4114_init(struct snd_ice1712 *ice)
 	int err;

 	struct revo51_spec *spec;
-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
@@ -515,7 +515,7 @@ static int revo_init(struct snd_ice1712 *ice)
 	}

 	/* second stage of initialization, analog parts and others */
-	ak = ice->akm = kcalloc(2, sizeof(struct snd_akm4xxx), GFP_KERNEL);
+	ak = ice->akm = kzalloc_objs(struct snd_akm4xxx, 2, GFP_KERNEL);
 	if (! ak)
 		return -ENOMEM;
 	switch (ice->eeprom.subvendor) {
diff --git a/sound/pci/ice1712/se.c b/sound/pci/ice1712/se.c
index ffa9d8860a5a..09f5085d2dde 100644
--- a/sound/pci/ice1712/se.c
+++ b/sound/pci/ice1712/se.c
@@ -660,7 +660,7 @@ static int se_init(struct snd_ice1712 *ice)
 {
 	struct se_spec *spec;

-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
diff --git a/sound/pci/ice1712/wtm.c b/sound/pci/ice1712/wtm.c
index 57a79536e7ba..0c961b588cd2 100644
--- a/sound/pci/ice1712/wtm.c
+++ b/sound/pci/ice1712/wtm.c
@@ -579,7 +579,7 @@ static int wtm_init(struct snd_ice1712 *ice)
 	ice->force_rdma1 = 1;

 	/*init mutex for dac mute conflict*/
-	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+	spec = kzalloc_obj(*spec, GFP_KERNEL);
 	if (!spec)
 		return -ENOMEM;
 	ice->spec = spec;
diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c
index c6319e75beab..bcf36b102f6f 100644
--- a/sound/pci/mixart/mixart.c
+++ b/sound/pci/mixart/mixart.c
@@ -255,7 +255,7 @@ snd_mixart_add_ref_pipe(struct snd_mixart *chip, int pcm_number, int capture,
 			"add_ref_pipe audio chip(%d) pcm(%d)\n",
 			chip->chip_idx, pcm_number);

-		buf = kmalloc(sizeof(*buf), GFP_KERNEL);
+		buf = kmalloc_obj(*buf, GFP_KERNEL);
 		if (!buf)
 			return NULL;

@@ -1017,7 +1017,7 @@ static int snd_mixart_create(struct mixart_mgr *mgr, struct snd_card *card, int
 		.dev_free = snd_mixart_chip_dev_free,
 	};

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (!chip)
 		return -ENOMEM;

@@ -1243,7 +1243,7 @@ static int snd_mixart_probe(struct pci_dev *pci,

 	/*
 	 */
-	mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
+	mgr = kzalloc_obj(*mgr, GFP_KERNEL);
 	if (! mgr) {
 		pci_disable_device(pci);
 		return -ENOMEM;
diff --git a/sound/pci/mixart/mixart_hwdep.c b/sound/pci/mixart/mixart_hwdep.c
index 689c0f995a9c..9b19c83a26c5 100644
--- a/sound/pci/mixart/mixart_hwdep.c
+++ b/sound/pci/mixart/mixart_hwdep.c
@@ -135,9 +135,9 @@ static int mixart_enum_connectors(struct mixart_mgr *mgr)
 	struct mixart_audio_info_req  *audio_info_req;
 	struct mixart_audio_info_resp *audio_info;

-	connector = kmalloc(sizeof(*connector), GFP_KERNEL);
-	audio_info_req = kmalloc(sizeof(*audio_info_req), GFP_KERNEL);
-	audio_info = kmalloc(sizeof(*audio_info), GFP_KERNEL);
+	connector = kmalloc_obj(*connector, GFP_KERNEL);
+	audio_info_req = kmalloc_obj(*audio_info_req, GFP_KERNEL);
+	audio_info = kmalloc_obj(*audio_info, GFP_KERNEL);
 	if (! connector || ! audio_info_req || ! audio_info) {
 		err = -ENOMEM;
 		goto __error;
diff --git a/sound/pci/pcxhr/pcxhr.c b/sound/pci/pcxhr/pcxhr.c
index 83066d08367e..66e71bdfbc77 100644
--- a/sound/pci/pcxhr/pcxhr.c
+++ b/sound/pci/pcxhr/pcxhr.c
@@ -1163,7 +1163,7 @@ static int pcxhr_create(struct pcxhr_mgr *mgr,
 		.dev_free = pcxhr_chip_dev_free,
 	};

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (!chip)
 		return -ENOMEM;

@@ -1488,7 +1488,7 @@ static int pcxhr_probe(struct pci_dev *pci,
 	}

 	/* alloc card manager */
-	mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
+	mgr = kzalloc_obj(*mgr, GFP_KERNEL);
 	if (! mgr) {
 		pci_disable_device(pci);
 		return -ENOMEM;
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c
index f91fe64bf4f9..8217a42c5bb7 100644
--- a/sound/pci/riptide/riptide.c
+++ b/sound/pci/riptide/riptide.c
@@ -1595,7 +1595,7 @@ static int snd_riptide_playback_open(struct snd_pcm_substream *substream)
 	chip->playback_substream[sub_num] = substream;
 	runtime->hw = snd_riptide_playback;

-	data = kzalloc(sizeof(struct pcmhw), GFP_KERNEL);
+	data = kzalloc_obj(struct pcmhw, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;
 	data->paths = lbus_play_paths[sub_num];
@@ -1618,7 +1618,7 @@ static int snd_riptide_capture_open(struct snd_pcm_substream *substream)
 	chip->capture_substream = substream;
 	runtime->hw = snd_riptide_capture;

-	data = kzalloc(sizeof(struct pcmhw), GFP_KERNEL);
+	data = kzalloc_obj(struct pcmhw, GFP_KERNEL);
 	if (data == NULL)
 		return -ENOMEM;
 	data->paths = lbus_rec_path;
@@ -1768,7 +1768,7 @@ static int snd_riptide_initialize(struct snd_riptide *chip)

 	cif = chip->cif;
 	if (!cif) {
-		cif = kzalloc(sizeof(struct cmdif), GFP_KERNEL);
+		cif = kzalloc_obj(struct cmdif, GFP_KERNEL);
 		if (!cif)
 			return -ENOMEM;
 		cif->dev = chip->card->dev;
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c
index 3ba5bdc96d9d..2978036aa8c5 100644
--- a/sound/pci/rme9652/hdspm.c
+++ b/sound/pci/rme9652/hdspm.c
@@ -6671,7 +6671,7 @@ static int snd_hdspm_create(struct snd_card *card,
 		if (hdspm_read(hdspm, HDSPM_statusRegister2) &
 				HDSPM_s2_tco_detect) {
 			hdspm->midiPorts++;
-			hdspm->tco = kzalloc(sizeof(*hdspm->tco), GFP_KERNEL);
+			hdspm->tco = kzalloc_obj(*hdspm->tco, GFP_KERNEL);
 			if (hdspm->tco)
 				hdspm_tco_write(hdspm);

@@ -6685,7 +6685,7 @@ static int snd_hdspm_create(struct snd_card *card,
 	case AES32:
 		if (hdspm_read(hdspm, HDSPM_statusRegister) & HDSPM_tco_detect) {
 			hdspm->midiPorts++;
-			hdspm->tco = kzalloc(sizeof(*hdspm->tco), GFP_KERNEL);
+			hdspm->tco = kzalloc_obj(*hdspm->tco, GFP_KERNEL);
 			if (hdspm->tco)
 				hdspm_tco_write(hdspm);

diff --git a/sound/pci/trident/trident_main.c b/sound/pci/trident/trident_main.c
index 55515c58b8aa..b0f1433e530f 100644
--- a/sound/pci/trident/trident_main.c
+++ b/sound/pci/trident/trident_main.c
@@ -2888,7 +2888,7 @@ static int snd_trident_mixer(struct snd_trident *trident, int pcm_spdif_device)
 		.read = snd_trident_codec_read,
 	};

-	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
+	uctl = kzalloc_obj(*uctl, GFP_KERNEL);
 	if (!uctl)
 		return -ENOMEM;

diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c
index 2b0f9e38863e..0290bf6b089d 100644
--- a/sound/pci/via82xx.c
+++ b/sound/pci/via82xx.c
@@ -423,9 +423,8 @@ static int build_via_table(struct viadev *dev, struct snd_pcm_substream *substre
 			return -ENOMEM;
 	}
 	if (! dev->idx_table) {
-		dev->idx_table = kmalloc_array(VIA_TABLE_SIZE,
-					       sizeof(*dev->idx_table),
-					       GFP_KERNEL);
+		dev->idx_table = kmalloc_objs(*dev->idx_table, VIA_TABLE_SIZE,
+					      GFP_KERNEL);
 		if (! dev->idx_table)
 			return -ENOMEM;
 	}
diff --git a/sound/pci/via82xx_modem.c b/sound/pci/via82xx_modem.c
index 6ce2cd88cda6..94430e87791d 100644
--- a/sound/pci/via82xx_modem.c
+++ b/sound/pci/via82xx_modem.c
@@ -278,9 +278,8 @@ static int build_via_table(struct viadev *dev, struct snd_pcm_substream *substre
 			return -ENOMEM;
 	}
 	if (! dev->idx_table) {
-		dev->idx_table = kmalloc_array(VIA_TABLE_SIZE,
-					       sizeof(*dev->idx_table),
-					       GFP_KERNEL);
+		dev->idx_table = kmalloc_objs(*dev->idx_table, VIA_TABLE_SIZE,
+					      GFP_KERNEL);
 		if (! dev->idx_table)
 			return -ENOMEM;
 	}
diff --git a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c
index eb373d9395e3..dc6f603160ac 100644
--- a/sound/pci/ymfpci/ymfpci_main.c
+++ b/sound/pci/ymfpci/ymfpci_main.c
@@ -864,7 +864,7 @@ static int snd_ymfpci_playback_open_1(struct snd_pcm_substream *substream)
 	if (err < 0)
 		return err;

-	ypcm = kzalloc(sizeof(*ypcm), GFP_KERNEL);
+	ypcm = kzalloc_obj(*ypcm, GFP_KERNEL);
 	if (ypcm == NULL)
 		return -ENOMEM;
 	ypcm->chip = chip;
@@ -990,7 +990,7 @@ static int snd_ymfpci_capture_open(struct snd_pcm_substream *substream,
 	if (err < 0)
 		return err;

-	ypcm = kzalloc(sizeof(*ypcm), GFP_KERNEL);
+	ypcm = kzalloc_obj(*ypcm, GFP_KERNEL);
 	if (ypcm == NULL)
 		return -ENOMEM;
 	ypcm->chip = chip;
diff --git a/sound/pcmcia/pdaudiocf/pdaudiocf_core.c b/sound/pcmcia/pdaudiocf/pdaudiocf_core.c
index a104baac3a94..c0ae099963c8 100644
--- a/sound/pcmcia/pdaudiocf/pdaudiocf_core.c
+++ b/sound/pcmcia/pdaudiocf/pdaudiocf_core.c
@@ -142,7 +142,7 @@ struct snd_pdacf *snd_pdacf_create(struct snd_card *card)
 {
 	struct snd_pdacf *chip;

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (chip == NULL)
 		return NULL;
 	chip->card = card;
diff --git a/sound/ppc/awacs.c b/sound/ppc/awacs.c
index c231a9d6d1de..5d5fccb71d70 100644
--- a/sound/ppc/awacs.c
+++ b/sound/ppc/awacs.c
@@ -896,7 +896,7 @@ snd_pmac_awacs_init(struct snd_pmac *chip)
 	chip->revision = (in_le32(&chip->awacs->codec_stat) >> 12) & 0xf;
 #ifdef PMAC_AMP_AVAIL
 	if (chip->revision == 3 && chip->has_iic && CHECK_CUDA_AMP()) {
-		struct awacs_amp *amp = kzalloc(sizeof(*amp), GFP_KERNEL);
+		struct awacs_amp *amp = kzalloc_obj(*amp, GFP_KERNEL);
 		if (! amp)
 			return -ENOMEM;
 		chip->mixer_data = amp;
diff --git a/sound/ppc/beep.c b/sound/ppc/beep.c
index ab2468790b0c..5e5370e83d56 100644
--- a/sound/ppc/beep.c
+++ b/sound/ppc/beep.c
@@ -208,7 +208,7 @@ int snd_pmac_attach_beep(struct snd_pmac *chip)
 	void *dmabuf;
 	int err = -ENOMEM;

-	beep = kzalloc(sizeof(*beep), GFP_KERNEL);
+	beep = kzalloc_obj(*beep, GFP_KERNEL);
 	if (! beep)
 		return -ENOMEM;
 	dmabuf = dma_alloc_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4,
diff --git a/sound/ppc/daca.c b/sound/ppc/daca.c
index a74114225b67..12829f724d86 100644
--- a/sound/ppc/daca.c
+++ b/sound/ppc/daca.c
@@ -244,7 +244,7 @@ int snd_pmac_daca_init(struct snd_pmac *chip)

 	request_module("i2c-powermac");

-	mix = kzalloc(sizeof(*mix), GFP_KERNEL);
+	mix = kzalloc_obj(*mix, GFP_KERNEL);
 	if (! mix)
 		return -ENOMEM;
 	chip->mixer_data = mix;
diff --git a/sound/ppc/pmac.c b/sound/ppc/pmac.c
index 6d7dab26ddf2..1384484fd996 100644
--- a/sound/ppc/pmac.c
+++ b/sound/ppc/pmac.c
@@ -1143,7 +1143,7 @@ int snd_pmac_new(struct snd_card *card, struct snd_pmac **chip_return)

 	*chip_return = NULL;

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	chip->card = card;
diff --git a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c
index 3c09660e1522..6cc51dcecb7e 100644
--- a/sound/ppc/tumbler.c
+++ b/sound/ppc/tumbler.c
@@ -1348,7 +1348,7 @@ int snd_pmac_tumbler_init(struct snd_pmac *chip)

 	request_module("i2c-powermac");

-	mix = kzalloc(sizeof(*mix), GFP_KERNEL);
+	mix = kzalloc_obj(*mix, GFP_KERNEL);
 	if (! mix)
 		return -ENOMEM;
 	mix->headphone_irq = -1;
diff --git a/sound/sh/aica.c b/sound/sh/aica.c
index fa81bfba59c1..f6a80f04d043 100644
--- a/sound/sh/aica.c
+++ b/sound/sh/aica.c
@@ -330,7 +330,7 @@ static int snd_aicapcm_pcm_open(struct snd_pcm_substream
 	if (!enable)
 		return -ENOENT;
 	dreamcastcard = substream->pcm->private_data;
-	channel = kmalloc(sizeof(struct aica_channel), GFP_KERNEL);
+	channel = kmalloc_obj(struct aica_channel, GFP_KERNEL);
 	if (!channel)
 		return -ENOMEM;
 	/* set defaults for channel */
@@ -559,7 +559,7 @@ static int snd_aica_probe(struct platform_device *devptr)
 {
 	int err;
 	struct snd_card_aica *dreamcastcard;
-	dreamcastcard = kzalloc(sizeof(struct snd_card_aica), GFP_KERNEL);
+	dreamcastcard = kzalloc_obj(struct snd_card_aica, GFP_KERNEL);
 	if (unlikely(!dreamcastcard))
 		return -ENOMEM;
 	err = snd_card_new(&devptr->dev, index, SND_AICA_DRIVER,
diff --git a/sound/sh/sh_dac_audio.c b/sound/sh/sh_dac_audio.c
index 164f91240d02..e0ba12662da1 100644
--- a/sound/sh/sh_dac_audio.c
+++ b/sound/sh/sh_dac_audio.c
@@ -306,7 +306,7 @@ static int snd_sh_dac_create(struct snd_card *card,

 	*rchip = NULL;

-	chip = kzalloc(sizeof(*chip), GFP_KERNEL);
+	chip = kzalloc_obj(*chip, GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;

diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c
index 897dde630022..19c09ba2b510 100644
--- a/sound/soc/amd/acp-pcm-dma.c
+++ b/sound/soc/amd/acp-pcm-dma.c
@@ -775,7 +775,7 @@ static int acp_dma_open(struct snd_soc_component *component,
 	struct snd_pcm_runtime *runtime = substream->runtime;
 	struct audio_drv_data *intr_data = dev_get_drvdata(component->dev);
 	struct audio_substream_data *adata =
-		kzalloc(sizeof(struct audio_substream_data), GFP_KERNEL);
+		kzalloc_obj(struct audio_substream_data, GFP_KERNEL);
 	if (!adata)
 		return -ENOMEM;

diff --git a/sound/soc/amd/acp/acp-platform.c b/sound/soc/amd/acp/acp-platform.c
index b25ac5612808..66a30da4b801 100644
--- a/sound/soc/amd/acp/acp-platform.c
+++ b/sound/soc/amd/acp/acp-platform.c
@@ -196,7 +196,7 @@ static int acp_dma_open(struct snd_soc_component *component, struct snd_pcm_subs
 	struct acp_stream *stream;
 	int ret;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		return -ENOMEM;

diff --git a/sound/soc/amd/acp/acp-sdw-legacy-mach.c b/sound/soc/amd/acp/acp-sdw-legacy-mach.c
index c93fc0920a3e..c1c28fee0496 100644
--- a/sound/soc/amd/acp/acp-sdw-legacy-mach.c
+++ b/sound/soc/amd/acp/acp-sdw-legacy-mach.c
@@ -395,13 +395,13 @@ static int soc_card_dai_links_create(struct snd_soc_card *card)

 	/* One per DAI link, worst case is a DAI link for every endpoint */
 	struct asoc_sdw_dailink *soc_dais __free(kfree) =
-		kcalloc(num_ends, sizeof(*soc_dais), GFP_KERNEL);
+		kzalloc_objs(*soc_dais, num_ends, GFP_KERNEL);
 	if (!soc_dais)
 		return -ENOMEM;

 	/* One per endpoint, ie. each DAI on each codec/amp */
 	struct asoc_sdw_endpoint *soc_ends __free(kfree) =
-		kcalloc(num_ends, sizeof(*soc_ends), GFP_KERNEL);
+		kzalloc_objs(*soc_ends, num_ends, GFP_KERNEL);
 	if (!soc_ends)
 		return -ENOMEM;

diff --git a/sound/soc/amd/acp/acp-sdw-sof-mach.c b/sound/soc/amd/acp/acp-sdw-sof-mach.c
index da815b3f6389..3319f0996fe6 100644
--- a/sound/soc/amd/acp/acp-sdw-sof-mach.c
+++ b/sound/soc/amd/acp/acp-sdw-sof-mach.c
@@ -288,13 +288,13 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)

 	/* One per DAI link, worst case is a DAI link for every endpoint */
 	struct asoc_sdw_dailink *sof_dais __free(kfree) =
-		kcalloc(num_ends, sizeof(*sof_dais), GFP_KERNEL);
+		kzalloc_objs(*sof_dais, num_ends, GFP_KERNEL);
 	if (!sof_dais)
 		return -ENOMEM;

 	/* One per endpoint, ie. each DAI on each codec/amp */
 	struct asoc_sdw_endpoint *sof_ends __free(kfree) =
-		kcalloc(num_ends, sizeof(*sof_ends), GFP_KERNEL);
+		kzalloc_objs(*sof_ends, num_ends, GFP_KERNEL);
 	if (!sof_ends)
 		return -ENOMEM;

diff --git a/sound/soc/amd/ps/ps-pdm-dma.c b/sound/soc/amd/ps/ps-pdm-dma.c
index 9cfbe05ad996..5a4ba65847fd 100644
--- a/sound/soc/amd/ps/ps-pdm-dma.c
+++ b/sound/soc/amd/ps/ps-pdm-dma.c
@@ -189,7 +189,7 @@ static int acp63_pdm_dma_open(struct snd_soc_component *component,

 	runtime = substream->runtime;
 	adata = dev_get_drvdata(component->dev);
-	pdm_data = kzalloc(sizeof(*pdm_data), GFP_KERNEL);
+	pdm_data = kzalloc_obj(*pdm_data, GFP_KERNEL);
 	if (!pdm_data)
 		return -EINVAL;

diff --git a/sound/soc/amd/ps/ps-sdw-dma.c b/sound/soc/amd/ps/ps-sdw-dma.c
index 5449323e2728..0c7af398de3a 100644
--- a/sound/soc/amd/ps/ps-sdw-dma.c
+++ b/sound/soc/amd/ps/ps-sdw-dma.c
@@ -318,7 +318,7 @@ static int acp63_sdw_dma_open(struct snd_soc_component *component,
 	runtime = substream->runtime;
 	cpu_dai = snd_soc_rtd_to_cpu(prtd, 0);
 	amd_manager = snd_soc_dai_get_drvdata(cpu_dai);
-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		return -ENOMEM;

diff --git a/sound/soc/amd/raven/acp3x-pcm-dma.c b/sound/soc/amd/raven/acp3x-pcm-dma.c
index bb9ed52d744d..2716c4e18c1f 100644
--- a/sound/soc/amd/raven/acp3x-pcm-dma.c
+++ b/sound/soc/amd/raven/acp3x-pcm-dma.c
@@ -218,7 +218,7 @@ static int acp3x_dma_open(struct snd_soc_component *component,
 	prtd = snd_soc_substream_to_rtd(substream);
 	component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
 	adata = dev_get_drvdata(component->dev);
-	i2s_data = kzalloc(sizeof(*i2s_data), GFP_KERNEL);
+	i2s_data = kzalloc_obj(*i2s_data, GFP_KERNEL);
 	if (!i2s_data)
 		return -EINVAL;

diff --git a/sound/soc/amd/renoir/acp3x-pdm-dma.c b/sound/soc/amd/renoir/acp3x-pdm-dma.c
index a560d06097d5..c2dd512118ad 100644
--- a/sound/soc/amd/renoir/acp3x-pdm-dma.c
+++ b/sound/soc/amd/renoir/acp3x-pdm-dma.c
@@ -211,7 +211,7 @@ static int acp_pdm_dma_open(struct snd_soc_component *component,

 	runtime = substream->runtime;
 	adata = dev_get_drvdata(component->dev);
-	pdm_data = kzalloc(sizeof(*pdm_data), GFP_KERNEL);
+	pdm_data = kzalloc_obj(*pdm_data, GFP_KERNEL);
 	if (!pdm_data)
 		return -EINVAL;

diff --git a/sound/soc/amd/vangogh/acp5x-pcm-dma.c b/sound/soc/amd/vangogh/acp5x-pcm-dma.c
index aa4726899434..c52d2bed5c6c 100644
--- a/sound/soc/amd/vangogh/acp5x-pcm-dma.c
+++ b/sound/soc/amd/vangogh/acp5x-pcm-dma.c
@@ -213,7 +213,7 @@ static int acp5x_dma_open(struct snd_soc_component *component,
 	component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
 	adata = dev_get_drvdata(component->dev);

-	i2s_data = kzalloc(sizeof(*i2s_data), GFP_KERNEL);
+	i2s_data = kzalloc_obj(*i2s_data, GFP_KERNEL);
 	if (!i2s_data)
 		return -ENOMEM;

diff --git a/sound/soc/amd/yc/acp6x-pdm-dma.c b/sound/soc/amd/yc/acp6x-pdm-dma.c
index ac758b90f441..b4fece9d3fac 100644
--- a/sound/soc/amd/yc/acp6x-pdm-dma.c
+++ b/sound/soc/amd/yc/acp6x-pdm-dma.c
@@ -187,7 +187,7 @@ static int acp6x_pdm_dma_open(struct snd_soc_component *component,

 	runtime = substream->runtime;
 	adata = dev_get_drvdata(component->dev);
-	pdm_data = kzalloc(sizeof(*pdm_data), GFP_KERNEL);
+	pdm_data = kzalloc_obj(*pdm_data, GFP_KERNEL);
 	if (!pdm_data)
 		return -EINVAL;

diff --git a/sound/soc/atmel/atmel-pcm-pdc.c b/sound/soc/atmel/atmel-pcm-pdc.c
index 7db8df85c54f..3b3e6b2b3a50 100644
--- a/sound/soc/atmel/atmel-pcm-pdc.c
+++ b/sound/soc/atmel/atmel-pcm-pdc.c
@@ -288,7 +288,7 @@ static int atmel_pcm_open(struct snd_soc_component *component,
 	if (ret < 0)
 		goto out;

-	prtd = kzalloc(sizeof(struct atmel_runtime_data), GFP_KERNEL);
+	prtd = kzalloc_obj(struct atmel_runtime_data, GFP_KERNEL);
 	if (prtd == NULL) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/sound/soc/atmel/mchp-pdmc.c b/sound/soc/atmel/mchp-pdmc.c
index 06dc3c48e7e8..d31508419fe3 100644
--- a/sound/soc/atmel/mchp-pdmc.c
+++ b/sound/soc/atmel/mchp-pdmc.c
@@ -706,7 +706,7 @@ static int mchp_pdmc_add_chmap_ctls(struct snd_pcm *pcm, struct mchp_pdmc *dd)

 	if (WARN_ON(pcm->streams[SNDRV_PCM_STREAM_CAPTURE].chmap_kctl))
 		return -EBUSY;
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;
 	info->pcm = pcm;
diff --git a/sound/soc/au1x/dma.c b/sound/soc/au1x/dma.c
index c9c2b1e71d55..46bcdaa0532c 100644
--- a/sound/soc/au1x/dma.c
+++ b/sound/soc/au1x/dma.c
@@ -81,7 +81,7 @@ static int au1000_setup_dma_link(struct audio_stream *stream,
 	stream->period_size = period_bytes;
 	stream->periods = periods;

-	stream->buffer = kmalloc(sizeof(struct pcm_period), GFP_KERNEL);
+	stream->buffer = kmalloc_obj(struct pcm_period, GFP_KERNEL);
 	if (!stream->buffer)
 		return -ENOMEM;
 	pointer = stream->buffer;
@@ -89,8 +89,8 @@ static int au1000_setup_dma_link(struct audio_stream *stream,
 		pointer->start = (u32)(dma_start + (i * period_bytes));
 		pointer->relative_end = (u32) (((i+1) * period_bytes) - 0x1);
 		if (i < periods - 1) {
-			pointer->next = kmalloc(sizeof(struct pcm_period),
-						GFP_KERNEL);
+			pointer->next = kmalloc_obj(struct pcm_period,
+						    GFP_KERNEL);
 			if (!pointer->next) {
 				au1000_release_dma_link(stream);
 				return -ENOMEM;
diff --git a/sound/soc/bcm/bcm63xx-pcm-whistler.c b/sound/soc/bcm/bcm63xx-pcm-whistler.c
index efeb06ddabeb..a7bc7060f742 100644
--- a/sound/soc/bcm/bcm63xx-pcm-whistler.c
+++ b/sound/soc/bcm/bcm63xx-pcm-whistler.c
@@ -48,7 +48,7 @@ static int bcm63xx_pcm_hw_params(struct snd_soc_component *component,
 	struct i2s_dma_desc *dma_desc;
 	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);

-	dma_desc = kzalloc(sizeof(*dma_desc), GFP_NOWAIT);
+	dma_desc = kzalloc_obj(*dma_desc, GFP_NOWAIT);
 	if (!dma_desc)
 		return -ENOMEM;

@@ -210,7 +210,7 @@ static int bcm63xx_pcm_open(struct snd_soc_component *component,
 		goto out;

 	ret = -ENOMEM;
-	prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
+	prtd = kzalloc_obj(*prtd, GFP_KERNEL);
 	if (!prtd)
 		goto out;

diff --git a/sound/soc/codecs/aw88395/aw88395_lib.c b/sound/soc/codecs/aw88395/aw88395_lib.c
index ceb7fc43d018..31799ca5bb0f 100644
--- a/sound/soc/codecs/aw88395/aw88395_lib.c
+++ b/sound/soc/codecs/aw88395/aw88395_lib.c
@@ -665,8 +665,8 @@ static int aw_dev_load_cfg_by_hdr(struct aw_device *aw_dev,
 {
 	int ret;

-	struct aw_all_prof_info *all_prof_info __free(kfree) = kzalloc(sizeof(*all_prof_info),
-								       GFP_KERNEL);
+	struct aw_all_prof_info *all_prof_info __free(kfree) = kzalloc_obj(*all_prof_info,
+									   GFP_KERNEL);
 	if (!all_prof_info)
 		return -ENOMEM;

diff --git a/sound/soc/codecs/cx20442.c b/sound/soc/codecs/cx20442.c
index d6121c0a2616..b0383eb47407 100644
--- a/sound/soc/codecs/cx20442.c
+++ b/sound/soc/codecs/cx20442.c
@@ -346,7 +346,7 @@ static int cx20442_component_probe(struct snd_soc_component *component)
 {
 	struct cx20442_priv *cx20442;

-	cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL);
+	cx20442 = kzalloc_obj(struct cx20442_priv, GFP_KERNEL);
 	if (cx20442 == NULL)
 		return -ENOMEM;

diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
index 298a626df3ad..1f890294064c 100644
--- a/sound/soc/codecs/da7219.c
+++ b/sound/soc/codecs/da7219.c
@@ -2143,8 +2143,8 @@ static int da7219_register_dai_clks(struct snd_soc_component *component)

 	/* For DT platforms allocate onecell data for clock registration */
 	if (np) {
-		clk_data = kzalloc(struct_size(clk_data, hws, DA7219_DAI_NUM_CLKS),
-				   GFP_KERNEL);
+		clk_data = kzalloc_flex(*clk_data, hws, DA7219_DAI_NUM_CLKS,
+					GFP_KERNEL);
 		if (!clk_data)
 			return -ENOMEM;

diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
index 0a8de5620e72..b6a2c39882ac 100644
--- a/sound/soc/codecs/lpass-rx-macro.c
+++ b/sound/soc/codecs/lpass-rx-macro.c
@@ -3820,7 +3820,8 @@ static int rx_macro_probe(struct platform_device *pdev)
 		rx->rxn_reg_stride = 0x80;
 		rx->rxn_reg_stride2 = 0xc;
 		def_count = ARRAY_SIZE(rx_defaults) + ARRAY_SIZE(rx_pre_2_5_defaults);
-		reg_defaults = kmalloc_array(def_count, sizeof(struct reg_default), GFP_KERNEL);
+		reg_defaults = kmalloc_objs(struct reg_default, def_count,
+					    GFP_KERNEL);
 		if (!reg_defaults)
 			return -ENOMEM;
 		memcpy(&reg_defaults[0], rx_defaults, sizeof(rx_defaults));
@@ -3834,7 +3835,8 @@ static int rx_macro_probe(struct platform_device *pdev)
 		rx->rxn_reg_stride = 0xc0;
 		rx->rxn_reg_stride2 = 0x0;
 		def_count = ARRAY_SIZE(rx_defaults) + ARRAY_SIZE(rx_2_5_defaults);
-		reg_defaults = kmalloc_array(def_count, sizeof(struct reg_default), GFP_KERNEL);
+		reg_defaults = kmalloc_objs(struct reg_default, def_count,
+					    GFP_KERNEL);
 		if (!reg_defaults)
 			return -ENOMEM;
 		memcpy(&reg_defaults[0], rx_defaults, sizeof(rx_defaults));
diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c
index b695c77c18ac..e26aaea450d6 100644
--- a/sound/soc/codecs/lpass-wsa-macro.c
+++ b/sound/soc/codecs/lpass-wsa-macro.c
@@ -2725,8 +2725,8 @@ static int wsa_macro_probe(struct platform_device *pdev)
 	case LPASS_CODEC_VERSION_2_1:
 		wsa->reg_layout = &wsa_codec_v2_1;
 		def_count = ARRAY_SIZE(wsa_defaults) + ARRAY_SIZE(wsa_defaults_v2_1);
-		reg_defaults = kmalloc_array(def_count, sizeof(*reg_defaults),
-					     GFP_KERNEL);
+		reg_defaults = kmalloc_objs(*reg_defaults, def_count,
+					    GFP_KERNEL);
 		if (!reg_defaults)
 			return -ENOMEM;
 		memcpy(&reg_defaults[0], wsa_defaults, sizeof(wsa_defaults));
@@ -2741,8 +2741,8 @@ static int wsa_macro_probe(struct platform_device *pdev)
 	case LPASS_CODEC_VERSION_2_9:
 		wsa->reg_layout = &wsa_codec_v2_5;
 		def_count = ARRAY_SIZE(wsa_defaults) + ARRAY_SIZE(wsa_defaults_v2_5);
-		reg_defaults = kmalloc_array(def_count, sizeof(*reg_defaults),
-					     GFP_KERNEL);
+		reg_defaults = kmalloc_objs(*reg_defaults, def_count,
+					    GFP_KERNEL);
 		if (!reg_defaults)
 			return -ENOMEM;
 		memcpy(&reg_defaults[0], wsa_defaults, sizeof(wsa_defaults));
diff --git a/sound/soc/codecs/pcm6240.c b/sound/soc/codecs/pcm6240.c
index bde190a659b1..6911de5a8c7e 100644
--- a/sound/soc/codecs/pcm6240.c
+++ b/sound/soc/codecs/pcm6240.c
@@ -1234,7 +1234,7 @@ static struct pcmdevice_config_info *pcmdevice_add_config(void *ctxt,
 	struct pcmdevice_block_data **bk_da;
 	unsigned int config_offset = 0, i;

-	cfg_info = kzalloc(sizeof(struct pcmdevice_config_info), GFP_KERNEL);
+	cfg_info = kzalloc_obj(struct pcmdevice_config_info, GFP_KERNEL);
 	if (!cfg_info) {
 		*status = -ENOMEM;
 		goto out;
@@ -1261,8 +1261,8 @@ static struct pcmdevice_config_info *pcmdevice_add_config(void *ctxt,
 		get_unaligned_be32(&config_data[config_offset]);
 	config_offset += 4;

-	bk_da = cfg_info->blk_data = kcalloc(cfg_info->nblocks,
-		sizeof(struct pcmdevice_block_data *), GFP_KERNEL);
+	bk_da = cfg_info->blk_data = kzalloc_objs(struct pcmdevice_block_data *,
+						  cfg_info->nblocks, GFP_KERNEL);
 	if (!bk_da) {
 		*status = -ENOMEM;
 		goto out;
@@ -1276,8 +1276,7 @@ static struct pcmdevice_config_info *pcmdevice_add_config(void *ctxt,
 				__func__, i, cfg_info->nblocks);
 			break;
 		}
-		bk_da[i] = kzalloc(sizeof(struct pcmdevice_block_data),
-			GFP_KERNEL);
+		bk_da[i] = kzalloc_obj(struct pcmdevice_block_data, GFP_KERNEL);
 		if (!bk_da[i]) {
 			*status = -ENOMEM;
 			break;
@@ -1549,7 +1548,7 @@ static int pcmdev_regbin_ready(const struct firmware *fmw, void *ctxt)
 		ret = -EINVAL;
 		goto out;
 	}
-	cfg_info = kcalloc(fw_hdr->nconfig, sizeof(*cfg_info), GFP_KERNEL);
+	cfg_info = kzalloc_objs(*cfg_info, fw_hdr->nconfig, GFP_KERNEL);
 	if (!cfg_info) {
 		pcm_dev->fw_state = PCMDEVICE_FW_LOAD_FAILED;
 		ret = -ENOMEM;
diff --git a/sound/soc/codecs/sigmadsp.c b/sound/soc/codecs/sigmadsp.c
index 201f74e3a7ae..c2a6a1f446d6 100644
--- a/sound/soc/codecs/sigmadsp.c
+++ b/sound/soc/codecs/sigmadsp.c
@@ -270,7 +270,7 @@ static int sigma_fw_load_data(struct sigmadsp *sigmadsp,

 	length -= sizeof(*data_chunk);

-	data = kzalloc(struct_size(data, data, length), GFP_KERNEL);
+	data = kzalloc_flex(*data, data, length, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -413,8 +413,7 @@ static int process_sigma_action(struct sigmadsp *sigmadsp,
 		if (len < 3)
 			return -EINVAL;

-		data = kzalloc(struct_size(data, data, size_sub(len, 2)),
-			       GFP_KERNEL);
+		data = kzalloc_flex(*data, data, size_sub(len, 2), GFP_KERNEL);
 		if (!data)
 			return -ENOMEM;

diff --git a/sound/soc/codecs/tas2781-fmwlib.c b/sound/soc/codecs/tas2781-fmwlib.c
index 0e084c3a162d..d3ded7d5efa1 100644
--- a/sound/soc/codecs/tas2781-fmwlib.c
+++ b/sound/soc/codecs/tas2781-fmwlib.c
@@ -176,7 +176,7 @@ static struct tasdevice_config_info *tasdevice_add_config(
 	 * of audio cases, flexible configs have been introduced in the
 	 * dsp firmware.
 	 */
-	cfg_info = kzalloc(sizeof(struct tasdevice_config_info), GFP_KERNEL);
+	cfg_info = kzalloc_obj(struct tasdevice_config_info, GFP_KERNEL);
 	if (!cfg_info) {
 		*status = -ENOMEM;
 		goto out;
@@ -217,8 +217,8 @@ static struct tasdevice_config_info *tasdevice_add_config(
 	 * the number and size of blk are not fixed and different among
 	 * these firmwares.
 	 */
-	bk_da = cfg_info->blk_data = kcalloc(cfg_info->nblocks,
-		sizeof(struct tasdev_blk_data *), GFP_KERNEL);
+	bk_da = cfg_info->blk_data = kzalloc_objs(struct tasdev_blk_data *,
+						  cfg_info->nblocks, GFP_KERNEL);
 	if (!bk_da) {
 		*status = -ENOMEM;
 		goto out;
@@ -232,7 +232,7 @@ static struct tasdevice_config_info *tasdevice_add_config(
 				__func__, i, cfg_info->nblocks);
 			break;
 		}
-		bk_da[i] = kzalloc(sizeof(struct tasdev_blk_data), GFP_KERNEL);
+		bk_da[i] = kzalloc_obj(struct tasdev_blk_data, GFP_KERNEL);
 		if (!bk_da[i]) {
 			*status = -ENOMEM;
 			break;
@@ -379,7 +379,7 @@ int tasdevice_rca_parser(void *context, const struct firmware *fmw)
 		goto out;
 	}

-	cfg_info = kcalloc(fw_hdr->nconfig, sizeof(*cfg_info), GFP_KERNEL);
+	cfg_info = kzalloc_objs(*cfg_info, fw_hdr->nconfig, GFP_KERNEL);
 	if (!cfg_info) {
 		ret = -ENOMEM;
 		tas_priv->fw_state = TASDEVICE_DSP_FW_FAIL;
@@ -509,8 +509,8 @@ static int fw_parse_data_kernel(struct tasdevice_fw *tas_fmw,
 	img_data->nr_blk = get_unaligned_be32(&data[offset]);
 	offset += 4;

-	img_data->dev_blks = kcalloc(img_data->nr_blk,
-		sizeof(struct tasdev_blk), GFP_KERNEL);
+	img_data->dev_blks = kzalloc_objs(struct tasdev_blk, img_data->nr_blk,
+					  GFP_KERNEL);
 	if (!img_data->dev_blks) {
 		offset = -ENOMEM;
 		goto out;
@@ -805,8 +805,8 @@ static int fw_parse_variable_header_kernel(
 		goto out;
 	}

-	tas_fmw->programs = kcalloc(tas_fmw->nr_programs,
-		sizeof(struct tasdevice_prog), GFP_KERNEL);
+	tas_fmw->programs = kzalloc_objs(struct tasdevice_prog,
+					 tas_fmw->nr_programs, GFP_KERNEL);
 	if (!tas_fmw->programs) {
 		offset = -ENOMEM;
 		goto out;
@@ -844,8 +844,8 @@ static int fw_parse_variable_header_kernel(
 		goto out;
 	}

-	tas_fmw->configs = kcalloc(tas_fmw->nr_configurations,
-		sizeof(struct tasdevice_config), GFP_KERNEL);
+	tas_fmw->configs = kzalloc_objs(struct tasdevice_config,
+					tas_fmw->nr_configurations, GFP_KERNEL);
 	if (!tas_fmw->configs) {
 		offset = -ENOMEM;
 		goto out;
@@ -1239,8 +1239,8 @@ static int fw_parse_data(struct tasdevice_fw *tas_fmw,
 	img_data->nr_blk = get_unaligned_be16(&data[offset]);
 	offset += 2;

-	img_data->dev_blks = kcalloc(img_data->nr_blk,
-		sizeof(struct tasdev_blk), GFP_KERNEL);
+	img_data->dev_blks = kzalloc_objs(struct tasdev_blk, img_data->nr_blk,
+					  GFP_KERNEL);
 	if (!img_data->dev_blks) {
 		offset = -ENOMEM;
 		goto out;
@@ -1284,8 +1284,8 @@ static int fw_parse_program_data(struct tasdevice_priv *tas_priv,
 	}

 	tas_fmw->programs =
-		kcalloc(tas_fmw->nr_programs, sizeof(struct tasdevice_prog),
-			GFP_KERNEL);
+		kzalloc_objs(struct tasdevice_prog, tas_fmw->nr_programs,
+			     GFP_KERNEL);
 	if (!tas_fmw->programs) {
 		offset = -ENOMEM;
 		goto out;
@@ -1348,8 +1348,8 @@ static int fw_parse_configuration_data(
 		/*Not error for calibration Data file, return directly*/
 		goto out;
 	}
-	tas_fmw->configs = kcalloc(tas_fmw->nr_configurations,
-			sizeof(struct tasdevice_config), GFP_KERNEL);
+	tas_fmw->configs = kzalloc_objs(struct tasdevice_config,
+					tas_fmw->nr_configurations, GFP_KERNEL);
 	if (!tas_fmw->configs) {
 		offset = -ENOMEM;
 		goto out;
@@ -2143,8 +2143,9 @@ static int fw_parse_calibration_data(struct tasdevice_priv *tas_priv,
 		goto out;
 	}

-	tas_fmw->calibrations = kcalloc(tas_fmw->nr_calibrations,
-		sizeof(struct tasdevice_calibration), GFP_KERNEL);
+	tas_fmw->calibrations = kzalloc_objs(struct tasdevice_calibration,
+					     tas_fmw->nr_calibrations,
+					     GFP_KERNEL);
 	if (!tas_fmw->calibrations) {
 		offset = -ENOMEM;
 		goto out;
@@ -2206,8 +2207,8 @@ int tas2781_load_calibration(void *context, char *file_name,
 	fmw.size = fw_entry->size;
 	fmw.data = fw_entry->data;

-	tas_fmw = tasdev->cali_data_fmw = kzalloc(sizeof(struct tasdevice_fw),
-		GFP_KERNEL);
+	tas_fmw = tasdev->cali_data_fmw = kzalloc_obj(struct tasdevice_fw,
+						      GFP_KERNEL);
 	if (!tasdev->cali_data_fmw) {
 		ret = -ENOMEM;
 		goto out;
@@ -2267,7 +2268,7 @@ static int tasdevice_dspfw_ready(const struct firmware *fmw,
 		return -EINVAL;
 	}

-	tas_priv->fmw = kzalloc(sizeof(struct tasdevice_fw), GFP_KERNEL);
+	tas_priv->fmw = kzalloc_obj(struct tasdevice_fw, GFP_KERNEL);
 	if (!tas_priv->fmw)
 		return -ENOMEM;

diff --git a/sound/soc/codecs/tas2783-sdw.c b/sound/soc/codecs/tas2783-sdw.c
index 84d45eab3523..ab3620761f5d 100644
--- a/sound/soc/codecs/tas2783-sdw.c
+++ b/sound/soc/codecs/tas2783-sdw.c
@@ -733,8 +733,8 @@ static void tas2783_fw_ready(const struct firmware *fmw, void *context)
 	s32  img_sz, ret = 0, cur_file = 0;
 	s32 offset = 0;

-	struct tas_fw_hdr *hdr __free(kfree) = kzalloc(sizeof(*hdr), GFP_KERNEL);
-	struct tas_fw_file *file __free(kfree) = kzalloc(sizeof(*file), GFP_KERNEL);
+	struct tas_fw_hdr *hdr __free(kfree) = kzalloc_obj(*hdr, GFP_KERNEL);
+	struct tas_fw_file *file __free(kfree) = kzalloc_obj(*file, GFP_KERNEL);
 	if (!file || !hdr) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/sound/soc/codecs/wcd-clsh-v2.c b/sound/soc/codecs/wcd-clsh-v2.c
index d96e23ec43d4..1da1a85cbe6b 100644
--- a/sound/soc/codecs/wcd-clsh-v2.c
+++ b/sound/soc/codecs/wcd-clsh-v2.c
@@ -883,7 +883,7 @@ struct wcd_clsh_ctrl *wcd_clsh_ctrl_alloc(struct snd_soc_component *comp,
 {
 	struct wcd_clsh_ctrl *ctrl;

-	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
+	ctrl = kzalloc_obj(*ctrl, GFP_KERNEL);
 	if (!ctrl)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/soc/codecs/wcd-mbhc-v2.c b/sound/soc/codecs/wcd-mbhc-v2.c
index 0c842aaa7eec..56b112946b37 100644
--- a/sound/soc/codecs/wcd-mbhc-v2.c
+++ b/sound/soc/codecs/wcd-mbhc-v2.c
@@ -1515,7 +1515,7 @@ struct wcd_mbhc *wcd_mbhc_init(struct snd_soc_component *component,
 		return ERR_PTR(-EINVAL);
 	}

-	mbhc = kzalloc(sizeof(*mbhc), GFP_KERNEL);
+	mbhc = kzalloc_obj(*mbhc, GFP_KERNEL);
 	if (!mbhc)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/soc/codecs/wm0010.c b/sound/soc/codecs/wm0010.c
index 6e097d8ed288..f6166428a000 100644
--- a/sound/soc/codecs/wm0010.c
+++ b/sound/soc/codecs/wm0010.c
@@ -396,7 +396,7 @@ static int wm0010_firmware_load(const char *name, struct snd_soc_component *comp
 			rec->command, rec->length);
 		len = rec->length + 8;

-		xfer = kzalloc(sizeof(*xfer), GFP_KERNEL);
+		xfer = kzalloc_obj(*xfer, GFP_KERNEL);
 		if (!xfer) {
 			ret = -ENOMEM;
 			goto abort;
diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index 17cec79245d4..8a584fd8f5de 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -542,7 +542,7 @@ static void wm_adsp_ctl_work(struct work_struct *work)
 					   cs_dsp);
 	struct snd_kcontrol_new *kcontrol;

-	kcontrol = kzalloc(sizeof(*kcontrol), GFP_KERNEL);
+	kcontrol = kzalloc_obj(*kcontrol, GFP_KERNEL);
 	if (!kcontrol)
 		return;

@@ -627,7 +627,7 @@ int wm_adsp_control_add(struct cs_dsp_coeff_ctl *cs_ctl)
 			 " %.*s", cs_ctl->subname_len - skip, cs_ctl->subname + skip);
 	}

-	ctl = kzalloc(sizeof(*ctl), GFP_KERNEL);
+	ctl = kzalloc_obj(*ctl, GFP_KERNEL);
 	if (!ctl)
 		return -ENOMEM;
 	ctl->cs_ctl = cs_ctl;
@@ -1259,7 +1259,7 @@ int wm_adsp_compr_open(struct wm_adsp *dsp, struct snd_compr_stream *stream)
 		}
 	}

-	compr = kzalloc(sizeof(*compr), GFP_KERNEL);
+	compr = kzalloc_obj(*compr, GFP_KERNEL);
 	if (!compr) {
 		ret = -ENOMEM;
 		goto out;
@@ -1430,8 +1430,8 @@ static int wm_adsp_buffer_populate(struct wm_adsp_compr_buf *buf)
 	u32 offset = 0;
 	int i, ret;

-	buf->regions = kcalloc(caps->num_regions, sizeof(*buf->regions),
-			       GFP_KERNEL);
+	buf->regions = kzalloc_objs(*buf->regions, caps->num_regions,
+				    GFP_KERNEL);
 	if (!buf->regions)
 		return -ENOMEM;

@@ -1477,7 +1477,7 @@ static struct wm_adsp_compr_buf *wm_adsp_buffer_alloc(struct wm_adsp *dsp)
 {
 	struct wm_adsp_compr_buf *buf;

-	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
+	buf = kzalloc_obj(*buf, GFP_KERNEL);
 	if (!buf)
 		return NULL;

diff --git a/sound/soc/fsl/fsl_asrc_m2m.c b/sound/soc/fsl/fsl_asrc_m2m.c
index 77999526dd9e..7a16a895cb0e 100644
--- a/sound/soc/fsl/fsl_asrc_m2m.c
+++ b/sound/soc/fsl/fsl_asrc_m2m.c
@@ -155,7 +155,7 @@ static int asrc_dmaconfig(struct fsl_asrc_pair *pair,
 	if (buf_len % max_period_size)
 		sg_len += 1;

-	sg = kmalloc_array(sg_len, sizeof(*sg), GFP_KERNEL);
+	sg = kmalloc_objs(*sg, sg_len, GFP_KERNEL);
 	if (!sg)
 		return -ENOMEM;

@@ -420,7 +420,7 @@ static struct sg_table *fsl_asrc_m2m_map_dma_buf(struct dma_buf_attachment *atta
 	struct snd_dma_buffer *dmab = attachment->dmabuf->priv;
 	struct sg_table *sgt;

-	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
+	sgt = kmalloc_obj(*sgt, GFP_KERNEL);
 	if (!sgt)
 		return NULL;

diff --git a/sound/soc/fsl/fsl_dma.c b/sound/soc/fsl/fsl_dma.c
index aca066b5a43c..44834dba4cb7 100644
--- a/sound/soc/fsl/fsl_dma.c
+++ b/sound/soc/fsl/fsl_dma.c
@@ -848,7 +848,7 @@ static int fsl_soc_dma_probe(struct platform_device *pdev)
 		return ret;
 	}

-	dma = kzalloc(sizeof(*dma), GFP_KERNEL);
+	dma = kzalloc_obj(*dma, GFP_KERNEL);
 	if (!dma) {
 		of_node_put(ssi_np);
 		return -ENOMEM;
diff --git a/sound/soc/fsl/fsl_qmc_audio.c b/sound/soc/fsl/fsl_qmc_audio.c
index 3de448ef724c..747c8253b77b 100644
--- a/sound/soc/fsl/fsl_qmc_audio.c
+++ b/sound/soc/fsl/fsl_qmc_audio.c
@@ -316,7 +316,7 @@ static int qmc_audio_pcm_open(struct snd_soc_component *component,
 	if (ret < 0)
 		return ret;

-	prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
+	prtd = kzalloc_obj(*prtd, GFP_KERNEL);
 	if (!prtd)
 		return -ENOMEM;

diff --git a/sound/soc/fsl/imx-pcm-fiq.c b/sound/soc/fsl/imx-pcm-fiq.c
index 83de3ae33691..8a1a7c89781f 100644
--- a/sound/soc/fsl/imx-pcm-fiq.c
+++ b/sound/soc/fsl/imx-pcm-fiq.c
@@ -176,7 +176,7 @@ static int snd_imx_open(struct snd_soc_component *component,
 	struct imx_pcm_runtime_data *iprtd;
 	int ret;

-	iprtd = kzalloc(sizeof(*iprtd), GFP_KERNEL);
+	iprtd = kzalloc_obj(*iprtd, GFP_KERNEL);
 	if (iprtd == NULL)
 		return -ENOMEM;
 	runtime->private_data = iprtd;
diff --git a/sound/soc/fsl/mpc5200_dma.c b/sound/soc/fsl/mpc5200_dma.c
index 345f338251ac..41255ff305b3 100644
--- a/sound/soc/fsl/mpc5200_dma.c
+++ b/sound/soc/fsl/mpc5200_dma.c
@@ -333,7 +333,7 @@ int mpc5200_audio_dma_create(struct platform_device *op)
 	}

 	/* Allocate and initialize the driver private data */
-	psc_dma = kzalloc(sizeof *psc_dma, GFP_KERNEL);
+	psc_dma = kzalloc_obj(*psc_dma, GFP_KERNEL);
 	if (!psc_dma) {
 		ret = -ENOMEM;
 		goto out_unmap;
diff --git a/sound/soc/fsl/p1022_ds.c b/sound/soc/fsl/p1022_ds.c
index 66db05970d82..44b62f5615f2 100644
--- a/sound/soc/fsl/p1022_ds.c
+++ b/sound/soc/fsl/p1022_ds.c
@@ -211,7 +211,7 @@ static int p1022_ds_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}

-	mdata = kzalloc(sizeof(struct machine_data), GFP_KERNEL);
+	mdata = kzalloc_obj(struct machine_data, GFP_KERNEL);
 	if (!mdata) {
 		ret = -ENOMEM;
 		goto error_put;
diff --git a/sound/soc/fsl/p1022_rdk.c b/sound/soc/fsl/p1022_rdk.c
index d4568346714f..43a95cd590cf 100644
--- a/sound/soc/fsl/p1022_rdk.c
+++ b/sound/soc/fsl/p1022_rdk.c
@@ -226,7 +226,7 @@ static int p1022_rdk_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}

-	mdata = kzalloc(sizeof(struct machine_data), GFP_KERNEL);
+	mdata = kzalloc_obj(struct machine_data, GFP_KERNEL);
 	if (!mdata) {
 		ret = -ENOMEM;
 		goto error_put;
diff --git a/sound/soc/generic/audio-graph-card.c b/sound/soc/generic/audio-graph-card.c
index 7720cf1fd6e1..965d7bb55929 100644
--- a/sound/soc/generic/audio-graph-card.c
+++ b/sound/soc/generic/audio-graph-card.c
@@ -553,7 +553,7 @@ int audio_graph_parse_of(struct simple_util_priv *priv, struct device *dev)
 	struct snd_soc_card *card = simple_priv_to_card(priv);
 	int ret = -ENOMEM;

-	struct link_info *li __free(kfree) = kzalloc(sizeof(*li), GFP_KERNEL);
+	struct link_info *li __free(kfree) = kzalloc_obj(*li, GFP_KERNEL);
 	if (!li)
 		goto end;

diff --git a/sound/soc/generic/audio-graph-card2.c b/sound/soc/generic/audio-graph-card2.c
index 5dcc78c551a2..85043bc3c3d3 100644
--- a/sound/soc/generic/audio-graph-card2.c
+++ b/sound/soc/generic/audio-graph-card2.c
@@ -1305,7 +1305,7 @@ int audio_graph2_parse_of(struct simple_util_priv *priv, struct device *dev,
 	struct snd_soc_card *card = simple_priv_to_card(priv);
 	int ret;

-	struct link_info *li __free(kfree) = kzalloc(sizeof(*li), GFP_KERNEL);
+	struct link_info *li __free(kfree) = kzalloc_obj(*li, GFP_KERNEL);
 	if (!li)
 		return -ENOMEM;

diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 5af6d1b308f2..5bc6d7cd1921 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -726,7 +726,7 @@ static int simple_probe(struct platform_device *pdev)
 	card->driver_name       = "simple-card";

 	ret = -ENOMEM;
-	struct link_info *li __free(kfree) = kzalloc(sizeof(*li), GFP_KERNEL);
+	struct link_info *li __free(kfree) = kzalloc_obj(*li, GFP_KERNEL);
 	if (!li)
 		goto end;

diff --git a/sound/soc/intel/atom/sst-mfld-platform-compress.c b/sound/soc/intel/atom/sst-mfld-platform-compress.c
index 9dfb0a814b94..877df5ce156d 100644
--- a/sound/soc/intel/atom/sst-mfld-platform-compress.c
+++ b/sound/soc/intel/atom/sst-mfld-platform-compress.c
@@ -47,7 +47,7 @@ static int sst_platform_compr_open(struct snd_soc_component *component,
 	struct snd_compr_runtime *runtime = cstream->runtime;
 	struct sst_runtime_stream *stream;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		return -ENOMEM;

diff --git a/sound/soc/intel/atom/sst-mfld-platform-pcm.c b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
index 373d68b4cf88..e007db432b49 100644
--- a/sound/soc/intel/atom/sst-mfld-platform-pcm.c
+++ b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
@@ -306,7 +306,7 @@ static int sst_media_open(struct snd_pcm_substream *substream,
 	struct snd_pcm_runtime *runtime = substream->runtime;
 	struct sst_runtime_stream *stream;

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		return -ENOMEM;
 	spin_lock_init(&stream->status_lock);
diff --git a/sound/soc/intel/atom/sst/sst.c b/sound/soc/intel/atom/sst/sst.c
index 3c47c8de04b7..5313c8ec605e 100644
--- a/sound/soc/intel/atom/sst/sst.c
+++ b/sound/soc/intel/atom/sst/sst.c
@@ -463,7 +463,7 @@ static int intel_sst_suspend(struct device *dev)
 		return -EBUSY;

 	/* save the memories */
-	fw_save = kzalloc(sizeof(*fw_save), GFP_KERNEL);
+	fw_save = kzalloc_obj(*fw_save, GFP_KERNEL);
 	if (!fw_save)
 		return -ENOMEM;
 	fw_save->iram = kvzalloc(ctx->iram_end - ctx->iram_base, GFP_KERNEL);
diff --git a/sound/soc/intel/atom/sst/sst_ipc.c b/sound/soc/intel/atom/sst/sst_ipc.c
index 0630e58b9d6b..bdf68d69127f 100644
--- a/sound/soc/intel/atom/sst/sst_ipc.c
+++ b/sound/soc/intel/atom/sst/sst_ipc.c
@@ -31,7 +31,7 @@ struct sst_block *sst_create_block(struct intel_sst_drv *ctx,
 	struct sst_block *msg;

 	dev_dbg(ctx->dev, "Enter\n");
-	msg = kzalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kzalloc_obj(*msg, GFP_KERNEL);
 	if (!msg)
 		return NULL;
 	msg->condition = false;
diff --git a/sound/soc/intel/atom/sst/sst_loader.c b/sound/soc/intel/atom/sst/sst_loader.c
index bf4ba6bcc429..60b73c9c2306 100644
--- a/sound/soc/intel/atom/sst/sst_loader.c
+++ b/sound/soc/intel/atom/sst/sst_loader.c
@@ -148,7 +148,7 @@ static int sst_fill_memcpy_list(struct list_head *memcpy_list,
 {
 	struct sst_memcpy_list *listnode;

-	listnode = kzalloc(sizeof(*listnode), GFP_KERNEL);
+	listnode = kzalloc_obj(*listnode, GFP_KERNEL);
 	if (listnode == NULL)
 		return -ENOMEM;
 	listnode->dstn = destn;
diff --git a/sound/soc/intel/atom/sst/sst_pvt.c b/sound/soc/intel/atom/sst/sst_pvt.c
index c01b29616ebc..67b1ab14239f 100644
--- a/sound/soc/intel/atom/sst/sst_pvt.c
+++ b/sound/soc/intel/atom/sst/sst_pvt.c
@@ -124,7 +124,7 @@ int sst_create_ipc_msg(struct ipc_post **arg, bool large)
 {
 	struct ipc_post *msg;

-	msg = kzalloc(sizeof(*msg), GFP_ATOMIC);
+	msg = kzalloc_obj(*msg, GFP_ATOMIC);
 	if (!msg)
 		return -ENOMEM;
 	if (large) {
diff --git a/sound/soc/intel/avs/path.c b/sound/soc/intel/avs/path.c
index 899906e0bcb4..a080d85d30a6 100644
--- a/sound/soc/intel/avs/path.c
+++ b/sound/soc/intel/avs/path.c
@@ -880,7 +880,7 @@ avs_path_module_create(struct avs_dev *adev,
 	if (module_id < 0)
 		return ERR_PTR(module_id);

-	mod = kzalloc(sizeof(*mod), GFP_KERNEL);
+	mod = kzalloc_obj(*mod, GFP_KERNEL);
 	if (!mod)
 		return ERR_PTR(-ENOMEM);

@@ -968,7 +968,7 @@ static struct avs_path_binding *avs_path_binding_create(struct avs_dev *adev,
 {
 	struct avs_path_binding *binding;

-	binding = kzalloc(sizeof(*binding), GFP_KERNEL);
+	binding = kzalloc_obj(*binding, GFP_KERNEL);
 	if (!binding)
 		return ERR_PTR(-ENOMEM);

@@ -1043,7 +1043,7 @@ avs_path_pipeline_create(struct avs_dev *adev, struct avs_path *owner,
 	struct avs_tplg_module *tmod;
 	int ret, i;

-	ppl = kzalloc(sizeof(*ppl), GFP_KERNEL);
+	ppl = kzalloc_obj(*ppl, GFP_KERNEL);
 	if (!ppl)
 		return ERR_PTR(-ENOMEM);

@@ -1173,7 +1173,7 @@ static struct avs_path *avs_path_create_unlocked(struct avs_dev *adev, u32 dma_i
 	struct avs_path *path;
 	int ret;

-	path = kzalloc(sizeof(*path), GFP_KERNEL);
+	path = kzalloc_obj(*path, GFP_KERNEL);
 	if (!path)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/soc/intel/avs/pcm.c b/sound/soc/intel/avs/pcm.c
index 4a6deb599c88..b8f5e1185a1a 100644
--- a/sound/soc/intel/avs/pcm.c
+++ b/sound/soc/intel/avs/pcm.c
@@ -130,7 +130,7 @@ static int avs_dai_startup(struct snd_pcm_substream *substream, struct snd_soc_d
 		return -EINVAL;
 	}

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/sound/soc/intel/avs/utils.c b/sound/soc/intel/avs/utils.c
index 81f9b67d8e29..df4d4e2f6c4f 100644
--- a/sound/soc/intel/avs/utils.c
+++ b/sound/soc/intel/avs/utils.c
@@ -124,7 +124,7 @@ avs_module_ida_alloc(struct avs_dev *adev, struct avs_mods_info *newinfo, bool p
 		tocopy_count = oldinfo->count;
 	}

-	ida_ptrs = kcalloc(newinfo->count, sizeof(*ida_ptrs), GFP_KERNEL);
+	ida_ptrs = kzalloc_objs(*ida_ptrs, newinfo->count, GFP_KERNEL);
 	if (!ida_ptrs)
 		return -ENOMEM;

@@ -132,7 +132,7 @@ avs_module_ida_alloc(struct avs_dev *adev, struct avs_mods_info *newinfo, bool p
 		memcpy(ida_ptrs, adev->mod_idas, tocopy_count * sizeof(*ida_ptrs));

 	for (i = tocopy_count; i < newinfo->count; i++) {
-		ida_ptrs[i] = kzalloc(sizeof(**ida_ptrs), GFP_KERNEL);
+		ida_ptrs[i] = kzalloc_obj(**ida_ptrs, GFP_KERNEL);
 		if (!ida_ptrs[i]) {
 			while (i--)
 				kfree(ida_ptrs[i]);
@@ -246,7 +246,7 @@ int avs_request_firmware(struct avs_dev *adev, const struct firmware **fw_p, con
 	}

 	/* FW is not loaded, let's load it now and add to the list */
-	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+	entry = kzalloc_obj(*entry, GFP_KERNEL);
 	if (!entry)
 		return -ENOMEM;

diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
index ee34282828e4..65bc023ab01b 100644
--- a/sound/soc/intel/boards/sof_sdw.c
+++ b/sound/soc/intel/boards/sof_sdw.c
@@ -1251,12 +1251,12 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
 	 * add one additional to act as a terminator such that code can iterate
 	 * until it hits an uninitialised DAI.
 	 */
-	sof_dais = kcalloc(num_ends + 1, sizeof(*sof_dais), GFP_KERNEL);
+	sof_dais = kzalloc_objs(*sof_dais, num_ends + 1, GFP_KERNEL);
 	if (!sof_dais)
 		return -ENOMEM;

 	/* One per endpoint, ie. each DAI on each codec/amp */
-	sof_ends = kcalloc(num_ends, sizeof(*sof_ends), GFP_KERNEL);
+	sof_ends = kzalloc_objs(*sof_ends, num_ends, GFP_KERNEL);
 	if (!sof_ends) {
 		ret = -ENOMEM;
 		goto err_dai;
diff --git a/sound/soc/intel/catpt/pcm.c b/sound/soc/intel/catpt/pcm.c
index 2c3405686f79..b3e8ea4b92b4 100644
--- a/sound/soc/intel/catpt/pcm.c
+++ b/sound/soc/intel/catpt/pcm.c
@@ -263,7 +263,7 @@ static int catpt_dai_startup(struct snd_pcm_substream *substream,

 	template = catpt_get_stream_template(substream);

-	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	stream = kzalloc_obj(*stream, GFP_KERNEL);
 	if (!stream)
 		return -ENOMEM;

diff --git a/sound/soc/loongson/loongson_dma.c b/sound/soc/loongson/loongson_dma.c
index 20e4a0641340..8cf0feb64ff9 100644
--- a/sound/soc/loongson/loongson_dma.c
+++ b/sound/soc/loongson/loongson_dma.c
@@ -243,7 +243,7 @@ static int loongson_pcm_open(struct snd_soc_component *component,
 				      SNDRV_PCM_HW_PARAM_PERIODS);
 	snd_soc_set_runtime_hwparams(substream, &ls_pcm_hardware);

-	prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
+	prtd = kzalloc_obj(*prtd, GFP_KERNEL);
 	if (!prtd)
 		return -ENOMEM;

diff --git a/sound/soc/mediatek/mt8186/mt8186-audsys-clk.c b/sound/soc/mediatek/mt8186/mt8186-audsys-clk.c
index 5666be6b1bd2..53f30d12195b 100644
--- a/sound/soc/mediatek/mt8186/mt8186-audsys-clk.c
+++ b/sound/soc/mediatek/mt8186/mt8186-audsys-clk.c
@@ -135,7 +135,7 @@ int mt8186_audsys_clk_register(struct mtk_base_afe *afe)
 		}

 		/* add clk_lookup for devm_clk_get(SND_SOC_DAPM_CLOCK_SUPPLY) */
-		cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+		cl = kzalloc_obj(*cl, GFP_KERNEL);
 		if (!cl)
 			return -ENOMEM;

diff --git a/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
index 40d2ab0a7677..2ef5ed3ee200 100644
--- a/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
+++ b/sound/soc/mediatek/mt8188/mt8188-audsys-clk.c
@@ -193,7 +193,7 @@ int mt8188_audsys_clk_register(struct mtk_base_afe *afe)
 		}

 		/* add clk_lookup for devm_clk_get(SND_SOC_DAPM_CLOCK_SUPPLY) */
-		cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+		cl = kzalloc_obj(*cl, GFP_KERNEL);
 		if (!cl)
 			return -ENOMEM;

diff --git a/sound/soc/mediatek/mt8195/mt8195-audsys-clk.c b/sound/soc/mediatek/mt8195/mt8195-audsys-clk.c
index 38594bc3f2f7..ec069729253e 100644
--- a/sound/soc/mediatek/mt8195/mt8195-audsys-clk.c
+++ b/sound/soc/mediatek/mt8195/mt8195-audsys-clk.c
@@ -199,7 +199,7 @@ int mt8195_audsys_clk_register(struct mtk_base_afe *afe)
 		}

 		/* add clk_lookup for devm_clk_get(SND_SOC_DAPM_CLOCK_SUPPLY) */
-		cl = kzalloc(sizeof(*cl), GFP_KERNEL);
+		cl = kzalloc_obj(*cl, GFP_KERNEL);
 		if (!cl)
 			return -ENOMEM;

diff --git a/sound/soc/meson/aiu-fifo.c b/sound/soc/meson/aiu-fifo.c
index b222bde1f61b..b17a62727fc7 100644
--- a/sound/soc/meson/aiu-fifo.c
+++ b/sound/soc/meson/aiu-fifo.c
@@ -196,7 +196,7 @@ int aiu_fifo_dai_probe(struct snd_soc_dai *dai)
 {
 	struct aiu_fifo *fifo;

-	fifo = kzalloc(sizeof(*fifo), GFP_KERNEL);
+	fifo = kzalloc_obj(*fifo, GFP_KERNEL);
 	if (!fifo)
 		return -ENOMEM;

diff --git a/sound/soc/meson/axg-tdm-formatter.c b/sound/soc/meson/axg-tdm-formatter.c
index a6579efd3775..1fd78790c967 100644
--- a/sound/soc/meson/axg-tdm-formatter.c
+++ b/sound/soc/meson/axg-tdm-formatter.c
@@ -368,7 +368,7 @@ struct axg_tdm_stream *axg_tdm_stream_alloc(struct axg_tdm_iface *iface)
 {
 	struct axg_tdm_stream *ts;

-	ts = kzalloc(sizeof(*ts), GFP_KERNEL);
+	ts = kzalloc_obj(*ts, GFP_KERNEL);
 	if (ts) {
 		INIT_LIST_HEAD(&ts->formatter_list);
 		mutex_init(&ts->lock);
diff --git a/sound/soc/meson/meson-codec-glue.c b/sound/soc/meson/meson-codec-glue.c
index f8c5643f3cfe..bd9a91d8bc3a 100644
--- a/sound/soc/meson/meson-codec-glue.c
+++ b/sound/soc/meson/meson-codec-glue.c
@@ -122,7 +122,7 @@ int meson_codec_glue_input_dai_probe(struct snd_soc_dai *dai)
 {
 	struct meson_codec_glue_input *data;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index b8a3cb8b7597..790e4db9d91b 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -85,7 +85,7 @@ static int pxa_ssp_startup(struct snd_pcm_substream *substream,

 	clk_prepare_enable(priv->extclk);

-	dma = kzalloc(sizeof(struct snd_dmaengine_dai_dma_data), GFP_KERNEL);
+	dma = kzalloc_obj(struct snd_dmaengine_dai_dma_data, GFP_KERNEL);
 	if (!dma)
 		return -ENOMEM;
 	dma->chan_name = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?
@@ -749,7 +749,7 @@ static int pxa_ssp_probe(struct snd_soc_dai *dai)
 	struct ssp_priv *priv;
 	int ret;

-	priv = kzalloc(sizeof(struct ssp_priv), GFP_KERNEL);
+	priv = kzalloc_obj(struct ssp_priv, GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;

diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c
index b456e096f138..84909af310b4 100644
--- a/sound/soc/qcom/lpass-platform.c
+++ b/sound/soc/qcom/lpass-platform.c
@@ -202,7 +202,7 @@ static int lpass_platform_pcmops_open(struct snd_soc_component *component,
 	struct regmap *map;
 	unsigned int dai_id = cpu_dai->driver->id;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

diff --git a/sound/soc/qcom/qdsp6/q6adm.c b/sound/soc/qcom/qdsp6/q6adm.c
index 40bc44003453..db0ae71f2983 100644
--- a/sound/soc/qcom/qdsp6/q6adm.c
+++ b/sound/soc/qcom/qdsp6/q6adm.c
@@ -284,7 +284,7 @@ static struct q6copp *q6adm_alloc_copp(struct q6adm *adm, int port_idx)
 	if (idx >= MAX_COPPS_PER_PORT)
 		return ERR_PTR(-EBUSY);

-	c = kzalloc(sizeof(*c), GFP_ATOMIC);
+	c = kzalloc_obj(*c, GFP_ATOMIC);
 	if (!c)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/soc/qcom/qdsp6/q6afe.c b/sound/soc/qcom/qdsp6/q6afe.c
index 76e14fc1b2b5..b1851dac61fa 100644
--- a/sound/soc/qcom/qdsp6/q6afe.c
+++ b/sound/soc/qcom/qdsp6/q6afe.c
@@ -1359,7 +1359,7 @@ void q6afe_tdm_port_prepare(struct q6afe_port *port,

 	pcfg->tdm_cfg.slot_width = cfg->slot_width;
 	pcfg->tdm_cfg.slot_mask = cfg->slot_mask;
-	port->scfg = kzalloc(sizeof(*port->scfg), GFP_KERNEL);
+	port->scfg = kzalloc_obj(*port->scfg, GFP_KERNEL);
 	if (!port->scfg)
 		return;

diff --git a/sound/soc/qcom/qdsp6/q6apm-dai.c b/sound/soc/qcom/qdsp6/q6apm-dai.c
index aaeeadded7aa..dcd960aeab2f 100644
--- a/sound/soc/qcom/qdsp6/q6apm-dai.c
+++ b/sound/soc/qcom/qdsp6/q6apm-dai.c
@@ -348,7 +348,7 @@ static int q6apm_dai_open(struct snd_soc_component *component,
 		return -EINVAL;
 	}

-	prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
+	prtd = kzalloc_obj(*prtd, GFP_KERNEL);
 	if (prtd == NULL)
 		return -ENOMEM;

@@ -490,7 +490,7 @@ static int q6apm_dai_compr_open(struct snd_soc_component *component,
 	if (!pdata)
 		return -EINVAL;

-	prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
+	prtd = kzalloc_obj(*prtd, GFP_KERNEL);
 	if (prtd == NULL)
 		return -ENOMEM;

diff --git a/sound/soc/qcom/qdsp6/q6apm.c b/sound/soc/qcom/qdsp6/q6apm.c
index 1d5edf285793..99d2dcdfac25 100644
--- a/sound/soc/qcom/qdsp6/q6apm.c
+++ b/sound/soc/qcom/qdsp6/q6apm.c
@@ -57,7 +57,7 @@ static struct audioreach_graph *q6apm_get_audioreach_graph(struct q6apm *apm, ui
 	if (!info)
 		return ERR_PTR(-ENODEV);

-	graph = kzalloc(sizeof(*graph), GFP_KERNEL);
+	graph = kzalloc_obj(*graph, GFP_KERNEL);
 	if (!graph)
 		return ERR_PTR(-ENOMEM);

@@ -220,7 +220,7 @@ int q6apm_map_memory_regions(struct q6apm_graph *graph, unsigned int dir, phys_a
 		return 0;
 	}

-	buf = kcalloc(periods, sizeof(struct audio_buffer), GFP_KERNEL);
+	buf = kzalloc_objs(struct audio_buffer, periods, GFP_KERNEL);
 	if (!buf) {
 		mutex_unlock(&graph->lock);
 		return -ENOMEM;
@@ -615,7 +615,7 @@ struct q6apm_graph *q6apm_graph_open(struct device *dev, q6apm_cb cb,
 		return ERR_CAST(ar_graph);
 	}

-	graph = kzalloc(sizeof(*graph), GFP_KERNEL);
+	graph = kzalloc_obj(*graph, GFP_KERNEL);
 	if (!graph) {
 		ret = -ENOMEM;
 		goto put_ar_graph;
diff --git a/sound/soc/qcom/qdsp6/q6asm-dai.c b/sound/soc/qcom/qdsp6/q6asm-dai.c
index 709b4f3318ff..99c1969d5cdc 100644
--- a/sound/soc/qcom/qdsp6/q6asm-dai.c
+++ b/sound/soc/qcom/qdsp6/q6asm-dai.c
@@ -378,7 +378,7 @@ static int q6asm_dai_open(struct snd_soc_component *component,
 		return -EINVAL;
 	}

-	prtd = kzalloc(sizeof(struct q6asm_dai_rtd), GFP_KERNEL);
+	prtd = kzalloc_obj(struct q6asm_dai_rtd, GFP_KERNEL);
 	if (prtd == NULL)
 		return -ENOMEM;

@@ -621,7 +621,7 @@ static int q6asm_dai_compr_open(struct snd_soc_component *component,
 		return -EINVAL;
 	}

-	prtd = kzalloc(sizeof(*prtd), GFP_KERNEL);
+	prtd = kzalloc_obj(*prtd, GFP_KERNEL);
 	if (!prtd)
 		return -ENOMEM;

diff --git a/sound/soc/qcom/qdsp6/q6asm.c b/sound/soc/qcom/qdsp6/q6asm.c
index 1bb295407c60..424306da4a25 100644
--- a/sound/soc/qcom/qdsp6/q6asm.c
+++ b/sound/soc/qcom/qdsp6/q6asm.c
@@ -506,7 +506,7 @@ int q6asm_map_memory_regions(unsigned int dir, struct audio_client *ac,
 		return 0;
 	}

-	buf = kcalloc(periods, sizeof(*buf), GFP_ATOMIC);
+	buf = kzalloc_objs(*buf, periods, GFP_ATOMIC);
 	if (!buf) {
 		spin_unlock_irqrestore(&ac->lock, flags);
 		return -ENOMEM;
@@ -850,7 +850,7 @@ struct audio_client *q6asm_audio_client_alloc(struct device *dev, q6asm_cb cb,
 		return ac;
 	}

-	ac = kzalloc(sizeof(*ac), GFP_KERNEL);
+	ac = kzalloc_obj(*ac, GFP_KERNEL);
 	if (!ac)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/soc/qcom/qdsp6/q6core.c b/sound/soc/qcom/qdsp6/q6core.c
index f4939302b88a..393488c571cd 100644
--- a/sound/soc/qcom/qdsp6/q6core.c
+++ b/sound/soc/qcom/qdsp6/q6core.c
@@ -327,7 +327,7 @@ EXPORT_SYMBOL_GPL(q6core_is_adsp_ready);

 static int q6core_probe(struct apr_device *adev)
 {
-	g_core = kzalloc(sizeof(*g_core), GFP_KERNEL);
+	g_core = kzalloc_obj(*g_core, GFP_KERNEL);
 	if (!g_core)
 		return -ENOMEM;

diff --git a/sound/soc/qcom/qdsp6/q6routing.c b/sound/soc/qcom/qdsp6/q6routing.c
index aaa3af9f1993..c3b26b318718 100644
--- a/sound/soc/qcom/qdsp6/q6routing.c
+++ b/sound/soc/qcom/qdsp6/q6routing.c
@@ -1133,7 +1133,7 @@ static int q6pcm_routing_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;

-	routing_data = kzalloc(sizeof(*routing_data), GFP_KERNEL);
+	routing_data = kzalloc_obj(*routing_data, GFP_KERNEL);
 	if (!routing_data)
 		return -ENOMEM;

diff --git a/sound/soc/qcom/qdsp6/topology.c b/sound/soc/qcom/qdsp6/topology.c
index 2e71eaa90441..076b55c1f729 100644
--- a/sound/soc/qcom/qdsp6/topology.c
+++ b/sound/soc/qcom/qdsp6/topology.c
@@ -42,7 +42,7 @@ static struct audioreach_graph_info *audioreach_tplg_alloc_graph_info(struct q6a
 	}

 	*found = false;
-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info)
 		return ERR_PTR(-ENOMEM);

@@ -92,7 +92,7 @@ static struct audioreach_sub_graph *audioreach_tplg_alloc_sub_graph(struct q6apm
 	}

 	*found = false;
-	sg = kzalloc(sizeof(*sg), GFP_KERNEL);
+	sg = kzalloc_obj(*sg, GFP_KERNEL);
 	if (!sg)
 		return ERR_PTR(-ENOMEM);

@@ -134,7 +134,7 @@ static struct audioreach_container *audioreach_tplg_alloc_container(struct q6apm
 	}
 	*found = false;

-	cont = kzalloc(sizeof(*cont), GFP_KERNEL);
+	cont = kzalloc_obj(*cont, GFP_KERNEL);
 	if (!cont)
 		return ERR_PTR(-ENOMEM);

@@ -176,7 +176,7 @@ static struct audioreach_module *audioreach_tplg_alloc_module(struct q6apm *apm,
 		return mod;
 	}
 	*found = false;
-	mod = kzalloc(sizeof(*mod), GFP_KERNEL);
+	mod = kzalloc_obj(*mod, GFP_KERNEL);
 	if (!mod)
 		return ERR_PTR(-ENOMEM);

@@ -317,8 +317,9 @@ audioreach_get_module_priv_data(const struct snd_soc_tplg_private *private)
 		if (le32_to_cpu(mod_array->type) == SND_SOC_AR_TPLG_MODULE_CFG_TYPE) {
 			struct audioreach_module_priv_data *pdata;

-			pdata = kzalloc(struct_size(pdata, data, le32_to_cpu(mod_array->size)),
-				       GFP_KERNEL);
+			pdata = kzalloc_flex(*pdata, data,
+					     le32_to_cpu(mod_array->size),
+					     GFP_KERNEL);
 			if (!pdata)
 				return ERR_PTR(-ENOMEM);

@@ -829,7 +830,7 @@ static int audioreach_widget_load_mixer(struct snd_soc_component *component,

 	w_array = &tplg_w->priv.array[0];

-	scontrol = kzalloc(sizeof(*scontrol), GFP_KERNEL);
+	scontrol = kzalloc_obj(*scontrol, GFP_KERNEL);
 	if (!scontrol)
 		return -ENOMEM;

@@ -1246,7 +1247,7 @@ static int audioreach_control_load(struct snd_soc_component *scomp, int index,
 	struct snd_soc_dobj *dobj;
 	int ret = 0;

-	scontrol = kzalloc(sizeof(*scontrol), GFP_KERNEL);
+	scontrol = kzalloc_obj(*scontrol, GFP_KERNEL);
 	if (!scontrol)
 		return -ENOMEM;

diff --git a/sound/soc/renesas/siu_dai.c b/sound/soc/renesas/siu_dai.c
index 7e771a164a80..5e7751c8b1e3 100644
--- a/sound/soc/renesas/siu_dai.c
+++ b/sound/soc/renesas/siu_dai.c
@@ -453,7 +453,7 @@ int siu_init_port(int port, struct siu_port **port_info, struct snd_card *card)
 	struct snd_kcontrol *kctrl;
 	int ret;

-	*port_info = kzalloc(sizeof(**port_info), GFP_KERNEL);
+	*port_info = kzalloc_obj(**port_info, GFP_KERNEL);
 	if (!*port_info)
 		return -ENOMEM;

diff --git a/sound/soc/samsung/idma.c b/sound/soc/samsung/idma.c
index 402ccadad46c..58fade080976 100644
--- a/sound/soc/samsung/idma.c
+++ b/sound/soc/samsung/idma.c
@@ -290,7 +290,7 @@ static int idma_open(struct snd_soc_component *component,

 	snd_soc_set_runtime_hwparams(substream, &idma_hardware);

-	prtd = kzalloc(sizeof(struct idma_ctrl), GFP_KERNEL);
+	prtd = kzalloc_obj(struct idma_ctrl, GFP_KERNEL);
 	if (prtd == NULL)
 		return -ENOMEM;

diff --git a/sound/soc/sdca/sdca_asoc.c b/sound/soc/sdca/sdca_asoc.c
index bb6e74e80a3e..51ccaa14b443 100644
--- a/sound/soc/sdca/sdca_asoc.c
+++ b/sound/soc/sdca/sdca_asoc.c
@@ -1349,7 +1349,7 @@ int sdca_asoc_set_constraints(struct device *dev, struct regmap *regmap,
 	dev_dbg(dev, "%s: set channel constraint mask: %#x\n",
 		entity->label, channel_mask);

-	constraint = kzalloc(sizeof(*constraint), GFP_KERNEL);
+	constraint = kzalloc_obj(*constraint, GFP_KERNEL);
 	if (!constraint)
 		return -ENOMEM;

diff --git a/sound/soc/sdca/sdca_function_device.c b/sound/soc/sdca/sdca_function_device.c
index c6cc880a150e..dd419f426ba6 100644
--- a/sound/soc/sdca/sdca_function_device.c
+++ b/sound/soc/sdca/sdca_function_device.c
@@ -39,7 +39,7 @@ static struct sdca_dev *sdca_dev_register(struct device *parent,
 	int ret;
 	int rc;

-	sdev = kzalloc(sizeof(*sdev), GFP_KERNEL);
+	sdev = kzalloc_obj(*sdev, GFP_KERNEL);
 	if (!sdev)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/soc/sdca/sdca_jack.c b/sound/soc/sdca/sdca_jack.c
index 605514f02045..0ce9cf8f850c 100644
--- a/sound/soc/sdca/sdca_jack.c
+++ b/sound/soc/sdca/sdca_jack.c
@@ -99,7 +99,7 @@ int sdca_jack_process(struct sdca_interrupt *interrupt)
 	if (kctl) {
 		struct soc_enum *soc_enum = (struct soc_enum *)kctl->private_value;

-		ucontrol = kzalloc(sizeof(*ucontrol), GFP_KERNEL);
+		ucontrol = kzalloc_obj(*ucontrol, GFP_KERNEL);
 		if (!ucontrol)
 			return -ENOMEM;

diff --git a/sound/soc/soc-ac97.c b/sound/soc/soc-ac97.c
index 37486d6a438e..f71413a186b8 100644
--- a/sound/soc/soc-ac97.c
+++ b/sound/soc/soc-ac97.c
@@ -181,7 +181,7 @@ struct snd_ac97 *snd_soc_alloc_ac97_component(struct snd_soc_component *componen
 {
 	struct snd_ac97 *ac97;

-	ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
+	ac97 = kzalloc_obj(struct snd_ac97, GFP_KERNEL);
 	if (ac97 == NULL)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 5811d053ce7a..7c1f2c93d5d3 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -507,7 +507,7 @@ static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
 	/*
 	 * for rtd->dev
 	 */
-	dev = kzalloc(sizeof(struct device), GFP_KERNEL);
+	dev = kzalloc_obj(struct device, GFP_KERNEL);
 	if (!dev)
 		return NULL;

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index c23ccf4a602d..54ee54dcba87 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -638,7 +638,7 @@ static int dapm_add_path(
 	if (ret)
 		return ret;

-	path = kzalloc(sizeof(struct snd_soc_dapm_path), GFP_KERNEL);
+	path = kzalloc_obj(struct snd_soc_dapm_path, GFP_KERNEL);
 	if (!path)
 		return -ENOMEM;

@@ -713,7 +713,7 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget,
 	const char *name;
 	int ret;

-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	data = kzalloc_obj(*data, GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;

@@ -1435,7 +1435,7 @@ static int dapm_widget_list_create(struct snd_soc_dapm_widget_list **list,
 	list_for_each(it, widgets)
 		size++;

-	*list = kzalloc(struct_size(*list, widgets, size), GFP_KERNEL);
+	*list = kzalloc_flex(**list, widgets, size, GFP_KERNEL);
 	if (*list == NULL)
 		return -ENOMEM;

@@ -3332,9 +3332,9 @@ int snd_soc_dapm_new_widgets(struct snd_soc_card *card)
 			continue;

 		if (w->num_kcontrols) {
-			w->kcontrols = kcalloc(w->num_kcontrols,
-						sizeof(struct snd_kcontrol *),
-						GFP_KERNEL);
+			w->kcontrols = kzalloc_objs(struct snd_kcontrol *,
+						    w->num_kcontrols,
+						    GFP_KERNEL);
 			if (!w->kcontrols) {
 				snd_soc_dapm_mutex_unlock(card);
 				return -ENOMEM;
@@ -3972,12 +3972,12 @@ static int dapm_dai_link_event_pre_pmu(struct snd_soc_dapm_widget *w,
 	 * stuff that increases stack usage.
 	 * So, we use kzalloc()/kfree() for params in this function.
 	 */
-	struct snd_pcm_hw_params *params __free(kfree) = kzalloc(sizeof(*params),
-								 GFP_KERNEL);
+	struct snd_pcm_hw_params *params __free(kfree) = kzalloc_obj(*params,
+								     GFP_KERNEL);
 	if (!params)
 		return -ENOMEM;

-	runtime = kzalloc(sizeof(*runtime), GFP_KERNEL);
+	runtime = kzalloc_obj(*runtime, GFP_KERNEL);
 	if (!runtime)
 		return -ENOMEM;

diff --git a/sound/soc/soc-generic-dmaengine-pcm.c b/sound/soc/soc-generic-dmaengine-pcm.c
index a63e942fdc0b..1a2b5a8fd198 100644
--- a/sound/soc/soc-generic-dmaengine-pcm.c
+++ b/sound/soc/soc-generic-dmaengine-pcm.c
@@ -437,7 +437,7 @@ int snd_dmaengine_pcm_register(struct device *dev,
 	struct dmaengine_pcm *pcm;
 	int ret;

-	pcm = kzalloc(sizeof(*pcm), GFP_KERNEL);
+	pcm = kzalloc_obj(*pcm, GFP_KERNEL);
 	if (!pcm)
 		return -ENOMEM;

diff --git a/sound/soc/soc-ops-test.c b/sound/soc/soc-ops-test.c
index 1bafa5626d48..0f924a6b0d15 100644
--- a/sound/soc/soc-ops-test.c
+++ b/sound/soc/soc-ops-test.c
@@ -486,7 +486,7 @@ static void soc_ops_test_access(struct kunit *test)
 	/* it is too large struct. use kzalloc() */
 	struct snd_ctl_elem_value *result;

-	result = kzalloc(sizeof(*result), GFP_KERNEL);
+	result = kzalloc_obj(*result, GFP_KERNEL);
 	if (!result)
 		return;

diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c
index ba42939d5f01..1d2ebb4f63e4 100644
--- a/sound/soc/soc-ops.c
+++ b/sound/soc/soc-ops.c
@@ -454,7 +454,7 @@ static int snd_soc_clip_to_platform_max(struct snd_kcontrol *kctl)
 	if (!mc->platform_max)
 		return 0;

-	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
+	uctl = kzalloc_obj(*uctl, GFP_KERNEL);
 	if (!uctl)
 		return -ENOMEM;

diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 6b134962c71c..b3e3ffdcce6f 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -1323,7 +1323,7 @@ static int dpcm_be_connect(struct snd_soc_pcm_runtime *fe,
 		be_substream->pcm->nonatomic = 1;
 	}

-	dpcm = kzalloc(sizeof(struct snd_soc_dpcm), GFP_KERNEL);
+	dpcm = kzalloc_obj(struct snd_soc_dpcm, GFP_KERNEL);
 	if (!dpcm)
 		return -ENOMEM;

diff --git a/sound/soc/soc-usb.c b/sound/soc/soc-usb.c
index 26baa66d29a8..57e537edb637 100644
--- a/sound/soc/soc-usb.c
+++ b/sound/soc/soc-usb.c
@@ -189,7 +189,7 @@ struct snd_soc_usb *snd_soc_usb_allocate_port(struct snd_soc_component *componen
 {
 	struct snd_soc_usb *usb;

-	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
+	usb = kzalloc_obj(*usb, GFP_KERNEL);
 	if (!usb)
 		return ERR_PTR(-ENOMEM);

diff --git a/sound/soc/sof/compress.c b/sound/soc/sof/compress.c
index 86d563c864e5..f68fa3551df8 100644
--- a/sound/soc/sof/compress.c
+++ b/sound/soc/sof/compress.c
@@ -101,7 +101,7 @@ static int sof_compr_open(struct snd_soc_component *component,
 	struct snd_sof_pcm *spcm;
 	int dir;

-	sstream = kzalloc(sizeof(*sstream), GFP_KERNEL);
+	sstream = kzalloc_obj(*sstream, GFP_KERNEL);
 	if (!sstream)
 		return -ENOMEM;

diff --git a/sound/soc/sof/intel/apl.c b/sound/soc/sof/intel/apl.c
index 0c68ae41a8a8..31494c686c72 100644
--- a/sound/soc/sof/intel/apl.c
+++ b/sound/soc/sof/intel/apl.c
@@ -54,7 +54,7 @@ int sof_apl_ops_init(struct snd_sof_dev *sdev)
 	if (sdev->pdata->ipc_type == SOF_IPC_TYPE_4) {
 		struct sof_ipc4_fw_data *ipc4_data;

-		sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
+		sdev->private = kzalloc_obj(*ipc4_data, GFP_KERNEL);
 		if (!sdev->private)
 			return -ENOMEM;

diff --git a/sound/soc/sof/intel/cnl.c b/sound/soc/sof/intel/cnl.c
index 69376fb5b20d..b55dd9ace41f 100644
--- a/sound/soc/sof/intel/cnl.c
+++ b/sound/soc/sof/intel/cnl.c
@@ -401,7 +401,7 @@ int sof_cnl_ops_init(struct snd_sof_dev *sdev)
 	if (sdev->pdata->ipc_type == SOF_IPC_TYPE_4) {
 		struct sof_ipc4_fw_data *ipc4_data;

-		sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
+		sdev->private = kzalloc_obj(*ipc4_data, GFP_KERNEL);
 		if (!sdev->private)
 			return -ENOMEM;

diff --git a/sound/soc/sof/intel/hda-mlink.c b/sound/soc/sof/intel/hda-mlink.c
index 6f15213937a3..c9790f37928f 100644
--- a/sound/soc/sof/intel/hda-mlink.c
+++ b/sound/soc/sof/intel/hda-mlink.c
@@ -392,7 +392,7 @@ static int hda_ml_alloc_h2link(struct hdac_bus *bus, int index)
 	struct hdac_ext_link *hlink;
 	int ret;

-	h2link  = kzalloc(sizeof(*h2link), GFP_KERNEL);
+	h2link = kzalloc_obj(*h2link, GFP_KERNEL);
 	if (!h2link)
 		return -ENOMEM;

diff --git a/sound/soc/sof/intel/icl.c b/sound/soc/sof/intel/icl.c
index dbc5ad62258b..8079a1363b45 100644
--- a/sound/soc/sof/intel/icl.c
+++ b/sound/soc/sof/intel/icl.c
@@ -122,7 +122,7 @@ int sof_icl_ops_init(struct snd_sof_dev *sdev)
 	if (sdev->pdata->ipc_type == SOF_IPC_TYPE_4) {
 		struct sof_ipc4_fw_data *ipc4_data;

-		sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
+		sdev->private = kzalloc_obj(*ipc4_data, GFP_KERNEL);
 		if (!sdev->private)
 			return -ENOMEM;

diff --git a/sound/soc/sof/intel/mtl.c b/sound/soc/sof/intel/mtl.c
index 4ac81537ca05..e46b0fd5746f 100644
--- a/sound/soc/sof/intel/mtl.c
+++ b/sound/soc/sof/intel/mtl.c
@@ -734,7 +734,7 @@ int sof_mtl_set_ops(struct snd_sof_dev *sdev, struct snd_sof_dsp_ops *dsp_ops)
 	dsp_ops->core_get = mtl_dsp_core_get;
 	dsp_ops->core_put = mtl_dsp_core_put;

-	sdev->private = kzalloc(sizeof(struct sof_ipc4_fw_data), GFP_KERNEL);
+	sdev->private = kzalloc_obj(struct sof_ipc4_fw_data, GFP_KERNEL);
 	if (!sdev->private)
 		return -ENOMEM;

diff --git a/sound/soc/sof/intel/skl.c b/sound/soc/sof/intel/skl.c
index 90a3c2e2334c..eb94027a5724 100644
--- a/sound/soc/sof/intel/skl.c
+++ b/sound/soc/sof/intel/skl.c
@@ -62,7 +62,7 @@ int sof_skl_ops_init(struct snd_sof_dev *sdev)
 	/* probe/remove/shutdown */
 	sof_skl_ops.shutdown	= hda_dsp_shutdown;

-	sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
+	sdev->private = kzalloc_obj(*ipc4_data, GFP_KERNEL);
 	if (!sdev->private)
 		return -ENOMEM;

diff --git a/sound/soc/sof/intel/telemetry.c b/sound/soc/sof/intel/telemetry.c
index dcaaf03599db..2e2cc6e2ea3a 100644
--- a/sound/soc/sof/intel/telemetry.c
+++ b/sound/soc/sof/intel/telemetry.c
@@ -29,7 +29,7 @@ void sof_ipc4_intel_dump_telemetry_state(struct snd_sof_dev *sdev, u32 flags)
 	if (!slot_offset)
 		return;

-	telemetry_data = kmalloc(sizeof(*telemetry_data), GFP_KERNEL);
+	telemetry_data = kmalloc_obj(*telemetry_data, GFP_KERNEL);
 	if (!telemetry_data)
 		return;
 	sof_mailbox_read(sdev, slot_offset, telemetry_data, sizeof(*telemetry_data));
@@ -39,7 +39,7 @@ void sof_ipc4_intel_dump_telemetry_state(struct snd_sof_dev *sdev, u32 flags)
 		goto free_telemetry_data;
 	}

-	block = kmalloc(sizeof(*block), GFP_KERNEL);
+	block = kmalloc_obj(*block, GFP_KERNEL);
 	if (!block)
 		goto free_telemetry_data;

@@ -71,7 +71,7 @@ void sof_ipc4_intel_dump_telemetry_state(struct snd_sof_dev *sdev, u32 flags)
 		break;
 	}

-	xoops = kzalloc(struct_size(xoops, ar, XTENSA_CORE_AR_REGS_COUNT), GFP_KERNEL);
+	xoops = kzalloc_flex(*xoops, ar, XTENSA_CORE_AR_REGS_COUNT, GFP_KERNEL);
 	if (!xoops)
 		goto free_block;

diff --git a/sound/soc/sof/intel/tgl.c b/sound/soc/sof/intel/tgl.c
index e68bbe685ba3..1c07f5882e1c 100644
--- a/sound/soc/sof/intel/tgl.c
+++ b/sound/soc/sof/intel/tgl.c
@@ -90,7 +90,7 @@ int sof_tgl_ops_init(struct snd_sof_dev *sdev)
 	if (sdev->pdata->ipc_type == SOF_IPC_TYPE_4) {
 		struct sof_ipc4_fw_data *ipc4_data;

-		sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
+		sdev->private = kzalloc_obj(*ipc4_data, GFP_KERNEL);
 		if (!sdev->private)
 			return -ENOMEM;

diff --git a/sound/soc/sof/ipc3-dtrace.c b/sound/soc/sof/ipc3-dtrace.c
index 50700f5cb0ef..d5cb86b2ad08 100644
--- a/sound/soc/sof/ipc3-dtrace.c
+++ b/sound/soc/sof/ipc3-dtrace.c
@@ -126,7 +126,7 @@ static int trace_filter_parse(struct snd_sof_dev *sdev, char *string,
 		capacity += TRACE_FILTER_ELEMENTS_PER_ENTRY;
 		entry = strchr(entry + 1, entry_delimiter[0]);
 	}
-	*out = kmalloc_array(capacity, sizeof(**out), GFP_KERNEL);
+	*out = kmalloc_objs(**out, capacity, GFP_KERNEL);
 	if (!*out)
 		return -ENOMEM;

diff --git a/sound/soc/sof/ipc3-topology.c b/sound/soc/sof/ipc3-topology.c
index 743f42fb26c0..b4fc27727106 100644
--- a/sound/soc/sof/ipc3-topology.c
+++ b/sound/soc/sof/ipc3-topology.c
@@ -524,7 +524,7 @@ static int sof_ipc3_widget_setup_comp_pipeline(struct snd_sof_widget *swidget)
 	struct snd_sof_widget *comp_swidget;
 	int ret;

-	pipeline = kzalloc(sizeof(*pipeline), GFP_KERNEL);
+	pipeline = kzalloc_obj(*pipeline, GFP_KERNEL);
 	if (!pipeline)
 		return -ENOMEM;

@@ -589,7 +589,7 @@ static int sof_ipc3_widget_setup_comp_buffer(struct snd_sof_widget *swidget)
 	struct sof_ipc_buffer *buffer;
 	int ret;

-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	buffer = kzalloc_obj(*buffer, GFP_KERNEL);
 	if (!buffer)
 		return -ENOMEM;

@@ -893,7 +893,7 @@ static int sof_process_load(struct snd_soc_component *scomp,

 	/* allocate struct for widget control data sizes and types */
 	if (widget->num_kcontrols) {
-		wdata = kcalloc(widget->num_kcontrols, sizeof(*wdata), GFP_KERNEL);
+		wdata = kzalloc_objs(*wdata, widget->num_kcontrols, GFP_KERNEL);
 		if (!wdata)
 			return -ENOMEM;

@@ -1567,7 +1567,7 @@ static int sof_ipc3_widget_setup_comp_dai(struct snd_sof_widget *swidget)
 	struct snd_sof_dai_link *slink;
 	int ret;

-	private = kzalloc(sizeof(*private), GFP_KERNEL);
+	private = kzalloc_obj(*private, GFP_KERNEL);
 	if (!private)
 		return -ENOMEM;

@@ -1622,7 +1622,8 @@ static int sof_ipc3_widget_setup_comp_dai(struct snd_sof_widget *swidget)
 			continue;

 		/* Reserve memory for all hw configs, eventually freed by widget */
-		config = kcalloc(slink->num_hw_configs, sizeof(*config), GFP_KERNEL);
+		config = kzalloc_objs(*config, slink->num_hw_configs,
+				      GFP_KERNEL);
 		if (!config) {
 			ret = -ENOMEM;
 			goto free_comp;
diff --git a/sound/soc/sof/ipc4-pcm.c b/sound/soc/sof/ipc4-pcm.c
index c3337c3f08c1..a21dc53e1026 100644
--- a/sound/soc/sof/ipc4-pcm.c
+++ b/sound/soc/sof/ipc4-pcm.c
@@ -476,8 +476,8 @@ static int sof_ipc4_trigger_pipelines(struct snd_soc_component *component,
 	}

 	/* allocate memory for the pipeline data */
-	trigger_list = kzalloc(struct_size(trigger_list, pipeline_instance_ids,
-					   pipeline_list->count), GFP_KERNEL);
+	trigger_list = kzalloc_flex(*trigger_list, pipeline_instance_ids,
+				    pipeline_list->count, GFP_KERNEL);
 	if (!trigger_list)
 		return -ENOMEM;

@@ -931,15 +931,15 @@ static int sof_ipc4_pcm_setup(struct snd_sof_dev *sdev, struct snd_sof_pcm *spcm
 		pipeline_list = &spcm->stream[stream].pipeline_list;

 		/* allocate memory for max number of pipeline IDs */
-		pipeline_list->pipelines = kcalloc(ipc4_data->max_num_pipelines,
-						   sizeof(*pipeline_list->pipelines),
-						   GFP_KERNEL);
+		pipeline_list->pipelines = kzalloc_objs(*pipeline_list->pipelines,
+							ipc4_data->max_num_pipelines,
+							GFP_KERNEL);
 		if (!pipeline_list->pipelines) {
 			sof_ipc4_pcm_free(sdev, spcm);
 			return -ENOMEM;
 		}

-		stream_priv = kzalloc(sizeof(*stream_priv), GFP_KERNEL);
+		stream_priv = kzalloc_obj(*stream_priv, GFP_KERNEL);
 		if (!stream_priv) {
 			sof_ipc4_pcm_free(sdev, spcm);
 			return -ENOMEM;
@@ -951,7 +951,7 @@ static int sof_ipc4_pcm_setup(struct snd_sof_dev *sdev, struct snd_sof_pcm *spcm
 		if (!support_info || stream == SNDRV_PCM_STREAM_CAPTURE)
 			continue;

-		time_info = kzalloc(sizeof(*time_info), GFP_KERNEL);
+		time_info = kzalloc_obj(*time_info, GFP_KERNEL);
 		if (!time_info) {
 			sof_ipc4_pcm_free(sdev, spcm);
 			return -ENOMEM;
diff --git a/sound/soc/sof/ipc4-topology.c b/sound/soc/sof/ipc4-topology.c
index 622bffb50a1c..051b02b222f9 100644
--- a/sound/soc/sof/ipc4-topology.c
+++ b/sound/soc/sof/ipc4-topology.c
@@ -436,8 +436,9 @@ static int sof_ipc4_get_audio_fmt(struct snd_soc_component *scomp,
 		module_base_cfg->is_pages);

 	if (available_fmt->num_input_formats) {
-		in_format = kcalloc(available_fmt->num_input_formats,
-				    sizeof(*in_format), GFP_KERNEL);
+		in_format = kzalloc_objs(*in_format,
+					 available_fmt->num_input_formats,
+					 GFP_KERNEL);
 		if (!in_format)
 			return -ENOMEM;
 		available_fmt->input_pin_fmts = in_format;
@@ -457,8 +458,9 @@ static int sof_ipc4_get_audio_fmt(struct snd_soc_component *scomp,
 	}

 	if (available_fmt->num_output_formats) {
-		out_format = kcalloc(available_fmt->num_output_formats, sizeof(*out_format),
-				     GFP_KERNEL);
+		out_format = kzalloc_objs(*out_format,
+					  available_fmt->num_output_formats,
+					  GFP_KERNEL);
 		if (!out_format) {
 			ret = -ENOMEM;
 			goto err_in;
@@ -627,7 +629,7 @@ static int sof_ipc4_widget_setup_pcm(struct snd_sof_widget *swidget)
 	int node_type = 0;
 	int ret, dir;

-	ipc4_copier = kzalloc(sizeof(*ipc4_copier), GFP_KERNEL);
+	ipc4_copier = kzalloc_obj(*ipc4_copier, GFP_KERNEL);
 	if (!ipc4_copier)
 		return -ENOMEM;

@@ -688,7 +690,7 @@ static int sof_ipc4_widget_setup_pcm(struct snd_sof_widget *swidget)
 	}

 skip_gtw_cfg:
-	ipc4_copier->gtw_attr = kzalloc(sizeof(*ipc4_copier->gtw_attr), GFP_KERNEL);
+	ipc4_copier->gtw_attr = kzalloc_obj(*ipc4_copier->gtw_attr, GFP_KERNEL);
 	if (!ipc4_copier->gtw_attr) {
 		ret = -ENOMEM;
 		goto free_available_fmt;
@@ -757,7 +759,7 @@ static int sof_ipc4_widget_setup_comp_dai(struct snd_sof_widget *swidget)
 	int node_type = 0;
 	int ret;

-	ipc4_copier = kzalloc(sizeof(*ipc4_copier), GFP_KERNEL);
+	ipc4_copier = kzalloc_obj(*ipc4_copier, GFP_KERNEL);
 	if (!ipc4_copier)
 		return -ENOMEM;

@@ -824,7 +826,7 @@ static int sof_ipc4_widget_setup_comp_dai(struct snd_sof_widget *swidget)
 			break;
 		}

-		blob = kzalloc(sizeof(*blob), GFP_KERNEL);
+		blob = kzalloc_obj(*blob, GFP_KERNEL);
 		if (!blob) {
 			ret = -ENOMEM;
 			goto free_available_fmt;
@@ -863,7 +865,8 @@ static int sof_ipc4_widget_setup_comp_dai(struct snd_sof_widget *swidget)
 			SOF_IPC4_NODE_INDEX_INTEL_DMIC(ipc4_copier->dai_index);
 		break;
 	default:
-		ipc4_copier->gtw_attr = kzalloc(sizeof(*ipc4_copier->gtw_attr), GFP_KERNEL);
+		ipc4_copier->gtw_attr = kzalloc_obj(*ipc4_copier->gtw_attr,
+						    GFP_KERNEL);
 		if (!ipc4_copier->gtw_attr) {
 			ret = -ENOMEM;
 			goto free_available_fmt;
@@ -930,7 +933,7 @@ static int sof_ipc4_widget_setup_comp_pipeline(struct snd_sof_widget *swidget)
 	struct snd_sof_pipeline *spipe = swidget->spipe;
 	int ret;

-	pipeline = kzalloc(sizeof(*pipeline), GFP_KERNEL);
+	pipeline = kzalloc_obj(*pipeline, GFP_KERNEL);
 	if (!pipeline)
 		return -ENOMEM;

@@ -989,7 +992,7 @@ static int sof_ipc4_widget_setup_comp_pga(struct snd_sof_widget *swidget)
 	struct sof_ipc4_gain *gain;
 	int ret;

-	gain = kzalloc(sizeof(*gain), GFP_KERNEL);
+	gain = kzalloc_obj(*gain, GFP_KERNEL);
 	if (!gain)
 		return -ENOMEM;

@@ -1048,7 +1051,7 @@ static int sof_ipc4_widget_setup_comp_mixer(struct snd_sof_widget *swidget)

 	dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name);

-	mixer = kzalloc(sizeof(*mixer), GFP_KERNEL);
+	mixer = kzalloc_obj(*mixer, GFP_KERNEL);
 	if (!mixer)
 		return -ENOMEM;

@@ -1080,7 +1083,7 @@ static int sof_ipc4_widget_setup_comp_src(struct snd_sof_widget *swidget)

 	dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name);

-	src = kzalloc(sizeof(*src), GFP_KERNEL);
+	src = kzalloc_obj(*src, GFP_KERNEL);
 	if (!src)
 		return -ENOMEM;

@@ -1123,7 +1126,7 @@ static int sof_ipc4_widget_setup_comp_asrc(struct snd_sof_widget *swidget)

 	dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name);

-	asrc = kzalloc(sizeof(*asrc), GFP_KERNEL);
+	asrc = kzalloc_obj(*asrc, GFP_KERNEL);
 	if (!asrc)
 		return -ENOMEM;

@@ -1206,7 +1209,7 @@ static int sof_ipc4_widget_setup_comp_process(struct snd_sof_widget *swidget)
 	void *cfg;
 	int ret;

-	process = kzalloc(sizeof(*process), GFP_KERNEL);
+	process = kzalloc_obj(*process, GFP_KERNEL);
 	if (!process)
 		return -ENOMEM;

diff --git a/sound/soc/sof/sof-client-probes-ipc4.c b/sound/soc/sof/sof-client-probes-ipc4.c
index d3fa37106b64..2ab282e98a61 100644
--- a/sound/soc/sof/sof-client-probes-ipc4.c
+++ b/sound/soc/sof/sof-client-probes-ipc4.c
@@ -327,7 +327,7 @@ static int ipc4_probes_points_add(struct sof_client_dev *cdev,
 	 * performance issue I wrote the conversion explicitly open for
 	 * future development.
 	 */
-	points = kcalloc(num_desc, sizeof(*points), GFP_KERNEL);
+	points = kzalloc_objs(*points, num_desc, GFP_KERNEL);
 	if (!points)
 		return -ENOMEM;

diff --git a/sound/soc/sof/sof-client.c b/sound/soc/sof/sof-client.c
index 38f1d7cec470..6cc9b7616100 100644
--- a/sound/soc/sof/sof-client.c
+++ b/sound/soc/sof/sof-client.c
@@ -554,7 +554,7 @@ int sof_client_register_ipc_rx_handler(struct sof_client_dev *cdev,
 		return -EINVAL;
 	}

-	event = kmalloc(sizeof(*event), GFP_KERNEL);
+	event = kmalloc_obj(*event, GFP_KERNEL);
 	if (!event)
 		return -ENOMEM;

@@ -608,7 +608,7 @@ int sof_client_register_fw_state_handler(struct sof_client_dev *cdev,
 	if (!callback)
 		return -EINVAL;

-	event = kmalloc(sizeof(*event), GFP_KERNEL);
+	event = kmalloc_obj(*event, GFP_KERNEL);
 	if (!event)
 		return -ENOMEM;

diff --git a/sound/soc/sof/stream-ipc.c b/sound/soc/sof/stream-ipc.c
index 8262443ac89a..e7541e1976b8 100644
--- a/sound/soc/sof/stream-ipc.c
+++ b/sound/soc/sof/stream-ipc.c
@@ -99,7 +99,7 @@ EXPORT_SYMBOL(sof_set_stream_data_offset);
 int sof_stream_pcm_open(struct snd_sof_dev *sdev,
 			struct snd_pcm_substream *substream)
 {
-	struct sof_stream *stream = kmalloc(sizeof(*stream), GFP_KERNEL);
+	struct sof_stream *stream = kmalloc_obj(*stream, GFP_KERNEL);

 	if (!stream)
 		return -ENOMEM;
diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c
index 9bf8ab610a7e..46d78de5d9da 100644
--- a/sound/soc/sof/topology.c
+++ b/sound/soc/sof/topology.c
@@ -973,7 +973,7 @@ static int sof_control_load(struct snd_soc_component *scomp, int index,
 	dev_dbg(scomp->dev, "tplg: load control type %d name : %s\n",
 		hdr->type, hdr->name);

-	scontrol = kzalloc(sizeof(*scontrol), GFP_KERNEL);
+	scontrol = kzalloc_obj(*scontrol, GFP_KERNEL);
 	if (!scontrol)
 		return -ENOMEM;

@@ -1233,7 +1233,7 @@ static int sof_widget_parse_tokens(struct snd_soc_component *scomp, struct snd_s
 		num_tuples += token_list[object_token_list[i]].count;

 	/* allocate memory for tuples array */
-	swidget->tuples = kcalloc(num_tuples, sizeof(*swidget->tuples), GFP_KERNEL);
+	swidget->tuples = kzalloc_objs(*swidget->tuples, num_tuples, GFP_KERNEL);
 	if (!swidget->tuples)
 		return -ENOMEM;

@@ -1420,7 +1420,7 @@ static int sof_widget_ready(struct snd_soc_component *scomp, int index,
 	int token_list_size = 0;
 	int ret = 0;

-	swidget = kzalloc(sizeof(*swidget), GFP_KERNEL);
+	swidget = kzalloc_obj(*swidget, GFP_KERNEL);
 	if (!swidget)
 		return -ENOMEM;

@@ -1496,7 +1496,7 @@ static int sof_widget_ready(struct snd_soc_component *scomp, int index,
 	switch (w->id) {
 	case snd_soc_dapm_dai_in:
 	case snd_soc_dapm_dai_out:
-		dai = kzalloc(sizeof(*dai), GFP_KERNEL);
+		dai = kzalloc_obj(*dai, GFP_KERNEL);
 		if (!dai) {
 			ret = -ENOMEM;
 			goto widget_free;
@@ -1586,7 +1586,7 @@ static int sof_widget_ready(struct snd_soc_component *scomp, int index,
 	if (w->id == snd_soc_dapm_scheduler) {
 		struct snd_sof_pipeline *spipe;

-		spipe = kzalloc(sizeof(*spipe), GFP_KERNEL);
+		spipe = kzalloc_obj(*spipe, GFP_KERNEL);
 		if (!spipe) {
 			ret = -ENOMEM;
 			goto free;
@@ -1739,7 +1739,7 @@ static int sof_dai_load(struct snd_soc_component *scomp, int index,
 	if (!pcm)
 		return 0;

-	spcm = kzalloc(sizeof(*spcm), GFP_KERNEL);
+	spcm = kzalloc_obj(*spcm, GFP_KERNEL);
 	if (!spcm)
 		return -ENOMEM;

@@ -1906,7 +1906,7 @@ static int sof_link_load(struct snd_soc_component *scomp, int index, struct snd_
 		return -EINVAL;
 	}

-	slink = kzalloc(sizeof(*slink), GFP_KERNEL);
+	slink = kzalloc_obj(*slink, GFP_KERNEL);
 	if (!slink)
 		return -ENOMEM;

@@ -1999,7 +1999,7 @@ static int sof_link_load(struct snd_soc_component *scomp, int index, struct snd_
 	}

 	/* allocate memory for tuples array */
-	slink->tuples = kcalloc(num_tuples, sizeof(*slink->tuples), GFP_KERNEL);
+	slink->tuples = kzalloc_objs(*slink->tuples, num_tuples, GFP_KERNEL);
 	if (!slink->tuples) {
 		kfree(slink->hw_configs);
 		kfree(slink);
@@ -2094,7 +2094,7 @@ static int sof_route_load(struct snd_soc_component *scomp, int index,
 	int ret = 0;

 	/* allocate memory for sroute and connect */
-	sroute = kzalloc(sizeof(*sroute), GFP_KERNEL);
+	sroute = kzalloc_obj(*sroute, GFP_KERNEL);
 	if (!sroute)
 		return -ENOMEM;

@@ -2398,11 +2398,11 @@ static int sof_dspless_widget_ready(struct snd_soc_component *scomp, int index,
 		struct snd_sof_widget *swidget;
 		struct snd_sof_dai *sdai;

-		swidget = kzalloc(sizeof(*swidget), GFP_KERNEL);
+		swidget = kzalloc_obj(*swidget, GFP_KERNEL);
 		if (!swidget)
 			return -ENOMEM;

-		sdai = kzalloc(sizeof(*sdai), GFP_KERNEL);
+		sdai = kzalloc_obj(*sdai, GFP_KERNEL);
 		if (!sdai) {
 			kfree(swidget);
 			return -ENOMEM;
diff --git a/sound/soc/sprd/sprd-pcm-compress.c b/sound/soc/sprd/sprd-pcm-compress.c
index 4b6ebfa5b033..0d544ff5a24f 100644
--- a/sound/soc/sprd/sprd-pcm-compress.c
+++ b/sound/soc/sprd/sprd-pcm-compress.c
@@ -160,7 +160,7 @@ static int sprd_platform_compr_dma_config(struct snd_soc_component *component,
 		return -ENODEV;
 	}

-	sgt = sg = kcalloc(sg_num, sizeof(*sg), GFP_KERNEL);
+	sgt = sg = kzalloc_objs(*sg, sg_num, GFP_KERNEL);
 	if (!sg) {
 		ret = -ENOMEM;
 		goto sg_err;
diff --git a/sound/soc/xilinx/xlnx_formatter_pcm.c b/sound/soc/xilinx/xlnx_formatter_pcm.c
index 17ef05309469..7cfe09fdd2a0 100644
--- a/sound/soc/xilinx/xlnx_formatter_pcm.c
+++ b/sound/soc/xilinx/xlnx_formatter_pcm.c
@@ -341,7 +341,7 @@ static int xlnx_formatter_pcm_open(struct snd_soc_component *component,
 		 !adata->s2mm_presence)
 		return -ENODEV;

-	stream_data = kzalloc(sizeof(*stream_data), GFP_KERNEL);
+	stream_data = kzalloc_obj(*stream_data, GFP_KERNEL);
 	if (!stream_data)
 		return -ENOMEM;

diff --git a/sound/sound_core.c b/sound/sound_core.c
index d81fed1c1226..741e62cffe6e 100644
--- a/sound/sound_core.c
+++ b/sound/sound_core.c
@@ -238,7 +238,7 @@ static DEFINE_SPINLOCK(sound_loader_lock);

 static int sound_insert_unit(struct sound_unit **list, const struct file_operations *fops, int index, int low, int top, const char *name, umode_t mode, struct device *dev)
 {
-	struct sound_unit *s = kmalloc(sizeof(*s), GFP_KERNEL);
+	struct sound_unit *s = kmalloc_obj(*s, GFP_KERNEL);
 	int r;

 	if (!s)
diff --git a/sound/synth/emux/emux.c b/sound/synth/emux/emux.c
index 01444fc960d0..f690e8f812d9 100644
--- a/sound/synth/emux/emux.c
+++ b/sound/synth/emux/emux.c
@@ -26,7 +26,7 @@ int snd_emux_new(struct snd_emux **remu)
 	struct snd_emux *emu;

 	*remu = NULL;
-	emu = kzalloc(sizeof(*emu), GFP_KERNEL);
+	emu = kzalloc_obj(*emu, GFP_KERNEL);
 	if (emu == NULL)
 		return -ENOMEM;

@@ -86,8 +86,8 @@ int snd_emux_register(struct snd_emux *emu, struct snd_card *card, int index, ch

 	emu->card = card;
 	emu->name = kstrdup_const(name, GFP_KERNEL);
-	emu->voices = kcalloc(emu->max_voices, sizeof(struct snd_emux_voice),
-			      GFP_KERNEL);
+	emu->voices = kzalloc_objs(struct snd_emux_voice, emu->max_voices,
+				   GFP_KERNEL);
 	if (emu->name == NULL || emu->voices == NULL)
 		return -ENOMEM;

diff --git a/sound/synth/emux/emux_effect.c b/sound/synth/emux/emux_effect.c
index bfe383fa90ba..dacbdf8cd39a 100644
--- a/sound/synth/emux/emux_effect.c
+++ b/sound/synth/emux/emux_effect.c
@@ -272,8 +272,8 @@ void
 snd_emux_create_effect(struct snd_emux_port *p)
 {
 	int i;
-	p->effect = kcalloc(p->chset.max_channels,
-			    sizeof(struct snd_emux_effect_table), GFP_KERNEL);
+	p->effect = kzalloc_objs(struct snd_emux_effect_table,
+				 p->chset.max_channels, GFP_KERNEL);
 	if (p->effect) {
 		for (i = 0; i < p->chset.max_channels; i++)
 			p->chset.channels[i].private = p->effect + i;
diff --git a/sound/synth/emux/emux_seq.c b/sound/synth/emux/emux_seq.c
index 9d63ac006aa5..9a279d07364d 100644
--- a/sound/synth/emux/emux_seq.c
+++ b/sound/synth/emux/emux_seq.c
@@ -132,12 +132,12 @@ snd_emux_create_port(struct snd_emux *emu, char *name,
 	int i, type, cap;

 	/* Allocate structures for this channel */
-	p = kzalloc(sizeof(*p), GFP_KERNEL);
+	p = kzalloc_obj(*p, GFP_KERNEL);
 	if (!p)
 		return NULL;

-	p->chset.channels = kcalloc(max_channels, sizeof(*p->chset.channels),
-				    GFP_KERNEL);
+	p->chset.channels = kzalloc_objs(*p->chset.channels, max_channels,
+					 GFP_KERNEL);
 	if (!p->chset.channels) {
 		kfree(p);
 		return NULL;
@@ -351,7 +351,7 @@ int snd_emux_init_virmidi(struct snd_emux *emu, struct snd_card *card)
 	if (emu->midi_ports <= 0)
 		return 0;

-	emu->vmidi = kcalloc(emu->midi_ports, sizeof(*emu->vmidi), GFP_KERNEL);
+	emu->vmidi = kzalloc_objs(*emu->vmidi, emu->midi_ports, GFP_KERNEL);
 	if (!emu->vmidi)
 		return -ENOMEM;

diff --git a/sound/synth/emux/soundfont.c b/sound/synth/emux/soundfont.c
index 59f3b1b6df4a..01996637d257 100644
--- a/sound/synth/emux/soundfont.c
+++ b/sound/synth/emux/soundfont.c
@@ -230,7 +230,7 @@ newsf(struct snd_sf_list *sflist, int type, char *name)
 	}

 	/* not found -- create a new one */
-	sf = kzalloc(sizeof(*sf), GFP_KERNEL);
+	sf = kzalloc_obj(*sf, GFP_KERNEL);
 	if (sf == NULL)
 		return NULL;
 	sf->id = sflist->fonts_size;
@@ -309,7 +309,7 @@ sf_zone_new(struct snd_sf_list *sflist, struct snd_soundfont *sf)
 {
 	struct snd_sf_zone *zp;

-	zp = kzalloc(sizeof(*zp), GFP_KERNEL);
+	zp = kzalloc_obj(*zp, GFP_KERNEL);
 	if (!zp)
 		return NULL;
 	zp->next = sf->zones;
@@ -342,7 +342,7 @@ sf_sample_new(struct snd_sf_list *sflist, struct snd_soundfont *sf)
 {
 	struct snd_sf_sample *sp;

-	sp = kzalloc(sizeof(*sp), GFP_KERNEL);
+	sp = kzalloc_obj(*sp, GFP_KERNEL);
 	if (!sp)
 		return NULL;

@@ -1391,7 +1391,7 @@ snd_sf_new(struct snd_sf_callback *callback, struct snd_util_memhdr *hdr)
 {
 	struct snd_sf_list *sflist;

-	sflist = kzalloc(sizeof(*sflist), GFP_KERNEL);
+	sflist = kzalloc_obj(*sflist, GFP_KERNEL);
 	if (!sflist)
 		return NULL;

diff --git a/sound/synth/util_mem.c b/sound/synth/util_mem.c
index 2fd577c2a8eb..36fa4fc9632c 100644
--- a/sound/synth/util_mem.c
+++ b/sound/synth/util_mem.c
@@ -26,7 +26,7 @@ snd_util_memhdr_new(int memsize)
 {
 	struct snd_util_memhdr *hdr;

-	hdr = kzalloc(sizeof(*hdr), GFP_KERNEL);
+	hdr = kzalloc_obj(*hdr, GFP_KERNEL);
 	if (hdr == NULL)
 		return NULL;
 	hdr->size = memsize;
diff --git a/sound/usb/6fire/comm.c b/sound/usb/6fire/comm.c
index 49629d4bb327..b7378a514e21 100644
--- a/sound/usb/6fire/comm.c
+++ b/sound/usb/6fire/comm.c
@@ -141,8 +141,7 @@ static int usb6fire_comm_write16(struct comm_runtime *rt, u8 request,

 int usb6fire_comm_init(struct sfire_chip *chip)
 {
-	struct comm_runtime *rt = kzalloc(sizeof(struct comm_runtime),
-			GFP_KERNEL);
+	struct comm_runtime *rt = kzalloc_obj(struct comm_runtime, GFP_KERNEL);
 	struct urb *urb;
 	int ret;

diff --git a/sound/usb/6fire/control.c b/sound/usb/6fire/control.c
index 9bd8dcbb68e4..0e8be4efbf44 100644
--- a/sound/usb/6fire/control.c
+++ b/sound/usb/6fire/control.c
@@ -551,8 +551,8 @@ int usb6fire_control_init(struct sfire_chip *chip)
 {
 	int i;
 	int ret;
-	struct control_runtime *rt = kzalloc(sizeof(struct control_runtime),
-			GFP_KERNEL);
+	struct control_runtime *rt = kzalloc_obj(struct control_runtime,
+						 GFP_KERNEL);
 	struct comm_runtime *comm_rt = chip->comm;

 	if (!rt)
diff --git a/sound/usb/6fire/firmware.c b/sound/usb/6fire/firmware.c
index cc8caec946cc..6707fb8a2d1e 100644
--- a/sound/usb/6fire/firmware.c
+++ b/sound/usb/6fire/firmware.c
@@ -195,8 +195,7 @@ static int usb6fire_fw_ezusb_upload(
 	u8 data;
 	struct usb_device *device = interface_to_usbdev(intf);
 	const struct firmware *fw = NULL;
-	struct ihex_record *rec = kmalloc(sizeof(struct ihex_record),
-			GFP_KERNEL);
+	struct ihex_record *rec = kmalloc_obj(struct ihex_record, GFP_KERNEL);

 	if (!rec)
 		return -ENOMEM;
diff --git a/sound/usb/6fire/midi.c b/sound/usb/6fire/midi.c
index 4d1eeb32c5fe..40c935fb7592 100644
--- a/sound/usb/6fire/midi.c
+++ b/sound/usb/6fire/midi.c
@@ -140,8 +140,7 @@ static const struct snd_rawmidi_ops in_ops = {
 int usb6fire_midi_init(struct sfire_chip *chip)
 {
 	int ret;
-	struct midi_runtime *rt = kzalloc(sizeof(struct midi_runtime),
-			GFP_KERNEL);
+	struct midi_runtime *rt = kzalloc_obj(struct midi_runtime, GFP_KERNEL);
 	struct comm_runtime *comm_rt = chip->comm;

 	if (!rt)
diff --git a/sound/usb/6fire/pcm.c b/sound/usb/6fire/pcm.c
index 08515da5dcc8..abd1338eb972 100644
--- a/sound/usb/6fire/pcm.c
+++ b/sound/usb/6fire/pcm.c
@@ -587,7 +587,7 @@ int usb6fire_pcm_init(struct sfire_chip *chip)
 	int ret;
 	struct snd_pcm *pcm;
 	struct pcm_runtime *rt =
-			kzalloc(sizeof(struct pcm_runtime), GFP_KERNEL);
+			kzalloc_obj(struct pcm_runtime, GFP_KERNEL);

 	if (!rt)
 		return -ENOMEM;
diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c
index 95d425dd9d70..06837b9f8bf8 100644
--- a/sound/usb/caiaq/audio.c
+++ b/sound/usb/caiaq/audio.c
@@ -681,7 +681,7 @@ static struct urb **alloc_urbs(struct snd_usb_caiaqdev *cdev, int dir, int *ret)
 		usb_sndisocpipe(usb_dev, ENDPOINT_PLAYBACK) :
 		usb_rcvisocpipe(usb_dev, ENDPOINT_CAPTURE);

-	urbs = kmalloc_array(N_URBS, sizeof(*urbs), GFP_KERNEL);
+	urbs = kmalloc_objs(*urbs, N_URBS, GFP_KERNEL);
 	if (!urbs) {
 		*ret = -ENOMEM;
 		return NULL;
@@ -813,8 +813,7 @@ int snd_usb_caiaq_audio_init(struct snd_usb_caiaqdev *cdev)
 				       NULL, 0, 0);

 	cdev->data_cb_info =
-		kmalloc_array(N_URBS, sizeof(struct snd_usb_caiaq_cb_info),
-					GFP_KERNEL);
+		kmalloc_objs(struct snd_usb_caiaq_cb_info, N_URBS, GFP_KERNEL);

 	if (!cdev->data_cb_info)
 		return -ENOMEM;
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
index a855b2cc60c7..8a2bb82c1a18 100644
--- a/sound/usb/endpoint.c
+++ b/sound/usb/endpoint.c
@@ -621,7 +621,7 @@ iface_ref_find(struct snd_usb_audio *chip, int iface)
 		if (ip->iface == iface)
 			return ip;

-	ip = kzalloc(sizeof(*ip), GFP_KERNEL);
+	ip = kzalloc_obj(*ip, GFP_KERNEL);
 	if (!ip)
 		return NULL;
 	ip->iface = iface;
@@ -639,7 +639,7 @@ clock_ref_find(struct snd_usb_audio *chip, int clock)
 		if (ref->clock == clock)
 			return ref;

-	ref = kzalloc(sizeof(*ref), GFP_KERNEL);
+	ref = kzalloc_obj(*ref, GFP_KERNEL);
 	if (!ref)
 		return NULL;
 	ref->clock = clock;
@@ -698,7 +698,7 @@ int snd_usb_add_endpoint(struct snd_usb_audio *chip, int ep_num, int type)
 	usb_audio_dbg(chip, "Creating new %s endpoint #%x\n",
 		      ep_type_name(type),
 		      ep_num);
-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;

diff --git a/sound/usb/fcp.c b/sound/usb/fcp.c
index 1f4595d1e217..2ca41460aa5b 100644
--- a/sound/usb/fcp.c
+++ b/sound/usb/fcp.c
@@ -329,7 +329,7 @@ static int fcp_add_new_ctl(struct usb_mixer_interface *mixer,
 	struct usb_mixer_elem_info *elem;
 	int err;

-	elem = kzalloc(sizeof(*elem), GFP_KERNEL);
+	elem = kzalloc_obj(*elem, GFP_KERNEL);
 	if (!elem)
 		return -ENOMEM;

@@ -654,7 +654,7 @@ static int fcp_ioctl_set_meter_map(struct usb_mixer_interface *mixer,
 	if (!private->meter_ctl) {
 		/* Allocate buffer for the map */
 		s16 *new_map __free(kfree) =
-			kmalloc_array(map.map_size, sizeof(s16), GFP_KERNEL);
+			kmalloc_objs(s16, map.map_size, GFP_KERNEL);
 		if (!new_map)
 			return -ENOMEM;

@@ -1045,7 +1045,7 @@ static int fcp_init(struct usb_mixer_interface *mixer,
 static int fcp_init_private(struct usb_mixer_interface *mixer)
 {
 	struct fcp_data *private =
-		kzalloc(sizeof(struct fcp_data), GFP_KERNEL);
+		kzalloc_obj(struct fcp_data, GFP_KERNEL);

 	if (!private)
 		return -ENOMEM;
diff --git a/sound/usb/hiface/pcm.c b/sound/usb/hiface/pcm.c
index 27cd427fbaa5..2603a88a9d27 100644
--- a/sound/usb/hiface/pcm.c
+++ b/sound/usb/hiface/pcm.c
@@ -547,7 +547,7 @@ int hiface_pcm_init(struct hiface_chip *chip, u8 extra_freq)
 	struct snd_pcm *pcm;
 	struct pcm_runtime *rt;

-	rt = kzalloc(sizeof(*rt), GFP_KERNEL);
+	rt = kzalloc_obj(*rt, GFP_KERNEL);
 	if (!rt)
 		return -ENOMEM;

diff --git a/sound/usb/line6/capture.c b/sound/usb/line6/capture.c
index 9ef4faa006a0..bad575fa4ed2 100644
--- a/sound/usb/line6/capture.c
+++ b/sound/usb/line6/capture.c
@@ -255,8 +255,8 @@ int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm)
 	struct usb_line6 *line6 = line6pcm->line6;
 	int i;

-	line6pcm->in.urbs = kcalloc(line6->iso_buffers, sizeof(struct urb *),
-				    GFP_KERNEL);
+	line6pcm->in.urbs = kzalloc_objs(struct urb *, line6->iso_buffers,
+					 GFP_KERNEL);
 	if (line6pcm->in.urbs == NULL)
 		return -ENOMEM;

diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c
index e97368c31417..191682894f04 100644
--- a/sound/usb/line6/driver.c
+++ b/sound/usb/line6/driver.c
@@ -202,7 +202,7 @@ int line6_send_raw_message_async(struct usb_line6 *line6, const char *buffer,
 	struct urb *urb;

 	/* create message: */
-	msg = kzalloc(sizeof(struct message), GFP_ATOMIC);
+	msg = kzalloc_obj(struct message, GFP_ATOMIC);
 	if (msg == NULL)
 		return -ENOMEM;

diff --git a/sound/usb/line6/midi.c b/sound/usb/line6/midi.c
index 4731293728e6..0e5cb8a86922 100644
--- a/sound/usb/line6/midi.c
+++ b/sound/usb/line6/midi.c
@@ -264,7 +264,7 @@ int line6_init_midi(struct usb_line6 *line6)
 	if (err < 0)
 		return err;

-	line6midi = kzalloc(sizeof(struct snd_line6_midi), GFP_KERNEL);
+	line6midi = kzalloc_obj(struct snd_line6_midi, GFP_KERNEL);
 	if (!line6midi)
 		return -ENOMEM;

diff --git a/sound/usb/line6/pcm.c b/sound/usb/line6/pcm.c
index f61d9f6cf754..ea1cea5d1105 100644
--- a/sound/usb/line6/pcm.c
+++ b/sound/usb/line6/pcm.c
@@ -528,7 +528,7 @@ int line6_init_pcm(struct usb_line6 *line6,
 	if (err < 0)
 		return err;

-	line6pcm = kzalloc(sizeof(*line6pcm), GFP_KERNEL);
+	line6pcm = kzalloc_obj(*line6pcm, GFP_KERNEL);
 	if (!line6pcm)
 		return -ENOMEM;

diff --git a/sound/usb/line6/playback.c b/sound/usb/line6/playback.c
index 9f26f66e6792..5d3666ebaf83 100644
--- a/sound/usb/line6/playback.c
+++ b/sound/usb/line6/playback.c
@@ -404,8 +404,8 @@ int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm)
 	struct usb_line6 *line6 = line6pcm->line6;
 	int i;

-	line6pcm->out.urbs = kcalloc(line6->iso_buffers, sizeof(struct urb *),
-				     GFP_KERNEL);
+	line6pcm->out.urbs = kzalloc_objs(struct urb *, line6->iso_buffers,
+					  GFP_KERNEL);
 	if (line6pcm->out.urbs == NULL)
 		return -ENOMEM;

diff --git a/sound/usb/line6/toneport.c b/sound/usb/line6/toneport.c
index 68cda7bf330c..abc1a750a921 100644
--- a/sound/usb/line6/toneport.c
+++ b/sound/usb/line6/toneport.c
@@ -363,7 +363,7 @@ static int toneport_setup(struct usb_line6_toneport *toneport)
 	struct usb_line6 *line6 = &toneport->line6;
 	struct usb_device *usbdev = line6->usbdev;

-	ticks = kmalloc(sizeof(*ticks), GFP_KERNEL);
+	ticks = kmalloc_obj(*ticks, GFP_KERNEL);
 	if (!ticks)
 		return -ENOMEM;

diff --git a/sound/usb/media.c b/sound/usb/media.c
index 0064f8d12422..0aab1eb5c4e9 100644
--- a/sound/usb/media.c
+++ b/sound/usb/media.c
@@ -49,7 +49,7 @@ int snd_media_stream_init(struct snd_usb_substream *subs, struct snd_pcm *pcm,
 		return 0;

 	/* allocate media_ctl */
-	mctl = kzalloc(sizeof(*mctl), GFP_KERNEL);
+	mctl = kzalloc_obj(*mctl, GFP_KERNEL);
 	if (!mctl)
 		return -ENOMEM;

@@ -188,7 +188,7 @@ static int snd_media_mixer_init(struct snd_usb_audio *chip)
 			continue;

 		/* allocate media_mixer_ctl */
-		mctl = kzalloc(sizeof(*mctl), GFP_KERNEL);
+		mctl = kzalloc_obj(*mctl, GFP_KERNEL);
 		if (!mctl)
 			return -ENOMEM;

diff --git a/sound/usb/midi.c b/sound/usb/midi.c
index dd8249e75970..c72434ac581d 100644
--- a/sound/usb/midi.c
+++ b/sound/usb/midi.c
@@ -1328,7 +1328,7 @@ static int snd_usbmidi_in_endpoint_create(struct snd_usb_midi *umidi,
 	int err;

 	rep->in = NULL;
-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;
 	ep->umidi = umidi;
@@ -1414,7 +1414,7 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi *umidi,
 	int err;

 	rep->out = NULL;
-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;
 	ep->umidi = umidi;
@@ -2506,7 +2506,7 @@ int __snd_usbmidi_create(struct snd_card *card,
 	int out_ports, in_ports;
 	int i, err;

-	umidi = kzalloc(sizeof(*umidi), GFP_KERNEL);
+	umidi = kzalloc_obj(*umidi, GFP_KERNEL);
 	if (!umidi)
 		return -ENOMEM;
 	umidi->dev = interface_to_usbdev(iface);
diff --git a/sound/usb/midi2.c b/sound/usb/midi2.c
index e6793f3bdfc3..cf05e4cb97b1 100644
--- a/sound/usb/midi2.c
+++ b/sound/usb/midi2.c
@@ -432,7 +432,7 @@ static int create_midi2_endpoint(struct snd_usb_midi2_interface *umidi,
 		      hostep->desc.bEndpointAddress,
 		      ms_ep->bNumGrpTrmBlock);

-	ep = kzalloc(sizeof(*ep), GFP_KERNEL);
+	ep = kzalloc_obj(*ep, GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;

@@ -693,7 +693,7 @@ static int create_midi2_ump(struct snd_usb_midi2_interface *umidi,
 	char idstr[16];
 	int err;

-	rmidi = kzalloc(sizeof(*rmidi), GFP_KERNEL);
+	rmidi = kzalloc_obj(*rmidi, GFP_KERNEL);
 	if (!rmidi)
 		return -ENOMEM;
 	INIT_LIST_HEAD(&rmidi->list);
@@ -1101,7 +1101,7 @@ int snd_usb_midi_v2_create(struct snd_usb_audio *chip,
 		      hostif->desc.bInterfaceNumber,
 		      hostif->desc.bAlternateSetting);

-	umidi = kzalloc(sizeof(*umidi), GFP_KERNEL);
+	umidi = kzalloc_obj(*umidi, GFP_KERNEL);
 	if (!umidi)
 		return -ENOMEM;
 	umidi->chip = chip;
diff --git a/sound/usb/misc/ua101.c b/sound/usb/misc/ua101.c
index 76b6eb55dcc2..62be8a00a826 100644
--- a/sound/usb/misc/ua101.c
+++ b/sound/usb/misc/ua101.c
@@ -1062,7 +1062,7 @@ static int alloc_stream_urbs(struct ua101 *ua, struct ua101_stream *stream,
 		while (size >= max_packet_size) {
 			if (u >= stream->queue_length)
 				goto bufsize_error;
-			urb = kmalloc(sizeof(*urb), GFP_KERNEL);
+			urb = kmalloc_obj(*urb, GFP_KERNEL);
 			if (!urb)
 				return -ENOMEM;
 			usb_init_urb(&urb->urb);
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index bfe15b1cb66c..1b66f9581b4a 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -1684,7 +1684,7 @@ static void __build_feature_ctl(struct usb_mixer_interface *mixer,
 	if (check_ignored_ctl(map))
 		return;

-	cval = kzalloc(sizeof(*cval), GFP_KERNEL);
+	cval = kzalloc_obj(*cval, GFP_KERNEL);
 	if (!cval)
 		return;
 	snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid);
@@ -1894,7 +1894,7 @@ static void build_connector_control(struct usb_mixer_interface *mixer,
 	if (check_ignored_ctl(map))
 		return;

-	cval = kzalloc(sizeof(*cval), GFP_KERNEL);
+	cval = kzalloc_obj(*cval, GFP_KERNEL);
 	if (!cval)
 		return;
 	snd_usb_mixer_elem_init_std(&cval->head, mixer, term->id);
@@ -1956,7 +1956,7 @@ static int parse_clock_source_unit(struct mixer_build *state, int unitid,
 				      UAC2_CS_CONTROL_CLOCK_VALID))
 		return 0;

-	cval = kzalloc(sizeof(*cval), GFP_KERNEL);
+	cval = kzalloc_obj(*cval, GFP_KERNEL);
 	if (!cval)
 		return -ENOMEM;

@@ -2177,7 +2177,7 @@ static void build_mixer_unit_ctl(struct mixer_build *state,
 	if (check_ignored_ctl(map))
 		return;

-	cval = kzalloc(sizeof(*cval), GFP_KERNEL);
+	cval = kzalloc_obj(*cval, GFP_KERNEL);
 	if (!cval)
 		return;

@@ -2525,7 +2525,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
 		map = find_map(state->map, unitid, valinfo->control);
 		if (check_ignored_ctl(map))
 			continue;
-		cval = kzalloc(sizeof(*cval), GFP_KERNEL);
+		cval = kzalloc_obj(*cval, GFP_KERNEL);
 		if (!cval)
 			return -ENOMEM;
 		snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid);
@@ -2771,7 +2771,7 @@ static int parse_audio_selector_unit(struct mixer_build *state, int unitid,
 	if (check_ignored_ctl(map))
 		return 0;

-	cval = kzalloc(sizeof(*cval), GFP_KERNEL);
+	cval = kzalloc_obj(*cval, GFP_KERNEL);
 	if (!cval)
 		return -ENOMEM;
 	snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid);
@@ -3598,13 +3598,13 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif)

 	strscpy(chip->card->mixername, "USB Mixer");

-	mixer = kzalloc(sizeof(*mixer), GFP_KERNEL);
+	mixer = kzalloc_obj(*mixer, GFP_KERNEL);
 	if (!mixer)
 		return -ENOMEM;
 	mixer->chip = chip;
 	mixer->ignore_ctl_error = !!(chip->quirk_flags & QUIRK_FLAG_IGNORE_CTL_ERROR);
-	mixer->id_elems = kcalloc(MAX_ID_ELEMS, sizeof(*mixer->id_elems),
-				  GFP_KERNEL);
+	mixer->id_elems = kzalloc_objs(*mixer->id_elems, MAX_ID_ELEMS,
+				       GFP_KERNEL);
 	if (!mixer->id_elems) {
 		kfree(mixer);
 		return -ENOMEM;
diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
index ec65e8a71919..dc538450f3b9 100644
--- a/sound/usb/mixer_quirks.c
+++ b/sound/usb/mixer_quirks.c
@@ -67,7 +67,7 @@ static int snd_create_std_mono_ctl_offset(struct usb_mixer_interface *mixer,
 	struct usb_mixer_elem_info *cval;
 	struct snd_kcontrol *kctl;

-	cval = kzalloc(sizeof(*cval), GFP_KERNEL);
+	cval = kzalloc_obj(*cval, GFP_KERNEL);
 	if (!cval)
 		return -ENOMEM;

@@ -151,7 +151,7 @@ static int add_single_ctl_with_resume(struct usb_mixer_interface *mixer,
 	struct usb_mixer_elem_list *list;
 	struct snd_kcontrol *kctl;

-	list = kzalloc(sizeof(*list), GFP_KERNEL);
+	list = kzalloc_obj(*list, GFP_KERNEL);
 	if (!list)
 		return -ENOMEM;
 	if (listp)
@@ -274,7 +274,8 @@ static int snd_usb_soundblaster_remote_init(struct usb_mixer_interface *mixer)
 	mixer->rc_urb = usb_alloc_urb(0, GFP_KERNEL);
 	if (!mixer->rc_urb)
 		return -ENOMEM;
-	mixer->rc_setup_packet = kmalloc(sizeof(*mixer->rc_setup_packet), GFP_KERNEL);
+	mixer->rc_setup_packet = kmalloc_obj(*mixer->rc_setup_packet,
+					     GFP_KERNEL);
 	if (!mixer->rc_setup_packet) {
 		usb_free_urb(mixer->rc_urb);
 		mixer->rc_urb = NULL;
@@ -616,7 +617,7 @@ static int snd_dualsense_ih_connect(struct input_handler *handler,
 	struct input_handle *handle;
 	int err;

-	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+	handle = kzalloc_obj(*handle, GFP_KERNEL);
 	if (!handle)
 		return -ENOMEM;

@@ -713,7 +714,7 @@ static int snd_dualsense_jack_create(struct usb_mixer_interface *mixer,
 	struct snd_kcontrol *kctl;
 	int err;

-	mei = kzalloc(sizeof(*mei), GFP_KERNEL);
+	mei = kzalloc_obj(*mei, GFP_KERNEL);
 	if (!mei)
 		return -ENOMEM;

@@ -2278,7 +2279,7 @@ static int realtek_add_jack(struct usb_mixer_interface *mixer,
 	struct usb_mixer_elem_info *cval;
 	struct snd_kcontrol *kctl;

-	cval = kzalloc(sizeof(*cval), GFP_KERNEL);
+	cval = kzalloc_obj(*cval, GFP_KERNEL);
 	if (!cval)
 		return -ENOMEM;
 	snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid);
diff --git a/sound/usb/mixer_s1810c.c b/sound/usb/mixer_s1810c.c
index b4ce89afb25b..f931643db1c5 100644
--- a/sound/usb/mixer_s1810c.c
+++ b/sound/usb/mixer_s1810c.c
@@ -534,7 +534,7 @@ snd_s1810c_switch_init(struct usb_mixer_interface *mixer,
 	struct snd_kcontrol *kctl;
 	struct usb_mixer_elem_info *elem;

-	elem = kzalloc(sizeof(struct usb_mixer_elem_info), GFP_KERNEL);
+	elem = kzalloc_obj(struct usb_mixer_elem_info, GFP_KERNEL);
 	if (!elem)
 		return -ENOMEM;

@@ -645,7 +645,7 @@ int snd_sc1810_init_mixer(struct usb_mixer_interface *mixer)
 	if (ret < 0)
 		return ret;

-	private = kzalloc(sizeof(struct s1810_mixer_state), GFP_KERNEL);
+	private = kzalloc_obj(struct s1810_mixer_state, GFP_KERNEL);
 	if (!private)
 		return -ENOMEM;

diff --git a/sound/usb/mixer_scarlett.c b/sound/usb/mixer_scarlett.c
index fa11f25288b7..8582153cb4a7 100644
--- a/sound/usb/mixer_scarlett.c
+++ b/sound/usb/mixer_scarlett.c
@@ -819,7 +819,7 @@ static int add_new_ctl(struct usb_mixer_interface *mixer,
 	struct usb_mixer_elem_info *elem;
 	int err;

-	elem = kzalloc(sizeof(*elem), GFP_KERNEL);
+	elem = kzalloc_obj(*elem, GFP_KERNEL);
 	if (!elem)
 		return -ENOMEM;

diff --git a/sound/usb/mixer_scarlett2.c b/sound/usb/mixer_scarlett2.c
index 88b7e42d159e..41a496adcc09 100644
--- a/sound/usb/mixer_scarlett2.c
+++ b/sound/usb/mixer_scarlett2.c
@@ -3197,7 +3197,7 @@ static int scarlett2_add_new_ctl(struct usb_mixer_interface *mixer,
 	struct usb_mixer_elem_info *elem;
 	int err;

-	elem = kzalloc(sizeof(*elem), GFP_KERNEL);
+	elem = kzalloc_obj(*elem, GFP_KERNEL);
 	if (!elem)
 		return -ENOMEM;

@@ -8272,7 +8272,7 @@ static int scarlett2_init_private(struct usb_mixer_interface *mixer,
 				  const struct scarlett2_device_entry *entry)
 {
 	struct scarlett2_data *private =
-		kzalloc(sizeof(struct scarlett2_data), GFP_KERNEL);
+		kzalloc_obj(struct scarlett2_data, GFP_KERNEL);

 	if (!private)
 		return -ENOMEM;
diff --git a/sound/usb/mixer_us16x08.c b/sound/usb/mixer_us16x08.c
index f9df40730eff..c7b63c29cbf6 100644
--- a/sound/usb/mixer_us16x08.c
+++ b/sound/usb/mixer_us16x08.c
@@ -969,7 +969,7 @@ static struct snd_us16x08_comp_store *snd_us16x08_create_comp_store(void)
 	int i;
 	struct snd_us16x08_comp_store *tmp;

-	tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kmalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return NULL;

@@ -991,7 +991,7 @@ static struct snd_us16x08_eq_store *snd_us16x08_create_eq_store(void)
 	int i, b_idx;
 	struct snd_us16x08_eq_store *tmp;

-	tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kmalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return NULL;

@@ -1027,7 +1027,7 @@ static struct snd_us16x08_meter_store *snd_us16x08_create_meter_store(void)
 {
 	struct snd_us16x08_meter_store *tmp;

-	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+	tmp = kzalloc_obj(*tmp, GFP_KERNEL);
 	if (!tmp)
 		return NULL;
 	tmp->comp_index = 1;
@@ -1059,7 +1059,7 @@ static int add_new_ctl(struct usb_mixer_interface *mixer,

 	usb_audio_dbg(mixer->chip, "us16x08 add mixer %s\n", name);

-	elem = kzalloc(sizeof(*elem), GFP_KERNEL);
+	elem = kzalloc_obj(*elem, GFP_KERNEL);
 	if (!elem)
 		return -ENOMEM;

diff --git a/sound/usb/power.c b/sound/usb/power.c
index 66bd4daa68fd..47863b688b4d 100644
--- a/sound/usb/power.c
+++ b/sound/usb/power.c
@@ -20,7 +20,7 @@ snd_usb_find_power_domain(struct usb_host_interface *ctrl_iface,
 	struct snd_usb_power_domain *pd;
 	void *p;

-	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+	pd = kzalloc_obj(*pd, GFP_KERNEL);
 	if (!pd)
 		return NULL;

diff --git a/sound/usb/qcom/qc_audio_offload.c b/sound/usb/qcom/qc_audio_offload.c
index cfb30a195364..b709b6cb3051 100644
--- a/sound/usb/qcom/qc_audio_offload.c
+++ b/sound/usb/qcom/qc_audio_offload.c
@@ -438,7 +438,7 @@ static unsigned long uaudio_get_iova(unsigned long *curr_iova,
 		}
 	}

-	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	info = kzalloc_obj(*info, GFP_KERNEL);
 	if (!info) {
 		iova = 0;
 		goto done;
@@ -1432,9 +1432,9 @@ static int prepare_qmi_response(struct snd_usb_substream *subs,
 		init_waitqueue_head(&uadev[card_num].disconnect_wq);
 		uadev[card_num].num_intf =
 			subs->dev->config->desc.bNumInterfaces;
-		uadev[card_num].info = kcalloc(uadev[card_num].num_intf,
-					       sizeof(struct intf_info),
-					       GFP_KERNEL);
+		uadev[card_num].info = kzalloc_objs(struct intf_info,
+						    uadev[card_num].num_intf,
+						    GFP_KERNEL);
 		if (!uadev[card_num].info) {
 			ret = -ENOMEM;
 			goto unmap_er;
@@ -1687,7 +1687,7 @@ static struct qmi_msg_handler uaudio_stream_req_handlers = {
  */
 static int qc_usb_audio_offload_init_qmi_dev(void)
 {
-	uaudio_qdev = kzalloc(sizeof(*uaudio_qdev), GFP_KERNEL);
+	uaudio_qdev = kzalloc_obj(*uaudio_qdev, GFP_KERNEL);
 	if (!uaudio_qdev)
 		return -ENOMEM;

@@ -1759,7 +1759,7 @@ static void qc_usb_audio_offload_probe(struct snd_usb_audio *chip)
 	guard(mutex)(&qdev_mutex);
 	guard(mutex)(&chip->mutex);
 	if (!uadev[chip->card->number].chip) {
-		sdev = kzalloc(sizeof(*sdev), GFP_KERNEL);
+		sdev = kzalloc_obj(*sdev, GFP_KERNEL);
 		if (!sdev)
 			return;

@@ -1914,11 +1914,11 @@ static int qc_usb_audio_probe(struct auxiliary_device *auxdev,
 	struct uaudio_qmi_svc *svc;
 	int ret;

-	svc = kzalloc(sizeof(*svc), GFP_KERNEL);
+	svc = kzalloc_obj(*svc, GFP_KERNEL);
 	if (!svc)
 		return -ENOMEM;

-	svc->uaudio_svc_hdl = kzalloc(sizeof(*svc->uaudio_svc_hdl), GFP_KERNEL);
+	svc->uaudio_svc_hdl = kzalloc_obj(*svc->uaudio_svc_hdl, GFP_KERNEL);
 	if (!svc->uaudio_svc_hdl) {
 		ret = -ENOMEM;
 		goto free_svc;
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index 17e49617218b..975b57adf2f4 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -566,7 +566,7 @@ static int snd_usb_extigy_boot_quirk(struct usb_device *dev, struct usb_interfac
 		if (err < 0)
 			dev_dbg(&dev->dev, "error sending boot message: %d\n", err);
 		struct usb_device_descriptor *new_device_descriptor __free(kfree) =
-			kmalloc(sizeof(*new_device_descriptor), GFP_KERNEL);
+			kmalloc_obj(*new_device_descriptor, GFP_KERNEL);
 		if (!new_device_descriptor)
 			return -ENOMEM;
 		err = usb_get_descriptor(dev, USB_DT_DEVICE, 0,
@@ -944,7 +944,7 @@ static int snd_usb_mbox2_boot_quirk(struct usb_device *dev)
 	dev_dbg(&dev->dev, "device initialised!\n");

 	struct usb_device_descriptor *new_device_descriptor __free(kfree) =
-		kmalloc(sizeof(*new_device_descriptor), GFP_KERNEL);
+		kmalloc_obj(*new_device_descriptor, GFP_KERNEL);
 	if (!new_device_descriptor)
 		return -ENOMEM;

@@ -1279,7 +1279,7 @@ static int snd_usb_mbox3_boot_quirk(struct usb_device *dev)
 	dev_dbg(&dev->dev, "MBOX3: device initialised!\n");

 	struct usb_device_descriptor *new_device_descriptor __free(kfree) =
-		kmalloc(sizeof(*new_device_descriptor), GFP_KERNEL);
+		kmalloc_obj(*new_device_descriptor, GFP_KERNEL);
 	if (!new_device_descriptor)
 		return -ENOMEM;

diff --git a/sound/usb/stream.c b/sound/usb/stream.c
index ec7d756d78d1..adf1827807d4 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -291,7 +291,7 @@ static struct snd_pcm_chmap_elem *convert_chmap(int channels, unsigned int bits,
 	if (channels > ARRAY_SIZE(chmap->map))
 		return NULL;

-	chmap = kzalloc(sizeof(*chmap), GFP_KERNEL);
+	chmap = kzalloc_obj(*chmap, GFP_KERNEL);
 	if (!chmap)
 		return NULL;

@@ -335,7 +335,7 @@ snd_pcm_chmap_elem *convert_chmap_v3(struct uac3_cluster_header_descriptor
 	if (channels > ARRAY_SIZE(chmap->map))
 		return NULL;

-	chmap = kzalloc(sizeof(*chmap), GFP_KERNEL);
+	chmap = kzalloc_obj(*chmap, GFP_KERNEL);
 	if (!chmap)
 		return NULL;

@@ -526,7 +526,7 @@ static int __snd_usb_add_audio_stream(struct snd_usb_audio *chip,
 	}

 	/* create a new pcm */
-	as = kzalloc(sizeof(*as), GFP_KERNEL);
+	as = kzalloc_obj(*as, GFP_KERNEL);
 	if (!as)
 		return -ENOMEM;
 	as->pcm_index = chip->pcm_devs;
@@ -693,7 +693,7 @@ audio_format_alloc_init(struct snd_usb_audio *chip,
 	struct usb_host_endpoint *ep = &alts->endpoint[0];
 	struct audioformat *fp;

-	fp = kzalloc(sizeof(*fp), GFP_KERNEL);
+	fp = kzalloc_obj(*fp, GFP_KERNEL);
 	if (!fp)
 		return NULL;

@@ -927,7 +927,7 @@ snd_usb_get_audioformat_uac3(struct snd_usb_audio *chip,
 			break;
 		}

-		chmap = kzalloc(sizeof(*chmap), GFP_KERNEL);
+		chmap = kzalloc_obj(*chmap, GFP_KERNEL);
 		if (!chmap)
 			return ERR_PTR(-ENOMEM);

@@ -1078,7 +1078,7 @@ snd_usb_get_audioformat_uac3(struct snd_usb_audio *chip,
 		fp->rate_max = UAC3_BADD_SAMPLING_RATE;
 		fp->rates = SNDRV_PCM_RATE_CONTINUOUS;

-		pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+		pd = kzalloc_obj(*pd, GFP_KERNEL);
 		if (!pd) {
 			audioformat_free(fp);
 			return NULL;
diff --git a/sound/usb/usx2y/usbusx2yaudio.c b/sound/usb/usx2y/usbusx2yaudio.c
index c7c7ec9c228b..c8f2f07d7f8d 100644
--- a/sound/usb/usx2y/usbusx2yaudio.c
+++ b/sound/usb/usx2y/usbusx2yaudio.c
@@ -657,15 +657,13 @@ static int usx2y_rate_set(struct usx2ydev *usx2y, int rate)
 	struct urb *urb;

 	if (usx2y->rate != rate) {
-		us = kzalloc(struct_size(us, urb, NOOF_SETRATE_URBS),
-			     GFP_KERNEL);
+		us = kzalloc_flex(*us, urb, NOOF_SETRATE_URBS, GFP_KERNEL);
 		if (!us) {
 			err = -ENOMEM;
 			goto cleanup;
 		}
 		us->len = NOOF_SETRATE_URBS;
-		usbdata = kmalloc_array(NOOF_SETRATE_URBS, sizeof(int),
-					GFP_KERNEL);
+		usbdata = kmalloc_objs(int, NOOF_SETRATE_URBS, GFP_KERNEL);
 		if (!usbdata) {
 			err = -ENOMEM;
 			goto cleanup;
@@ -944,7 +942,8 @@ static int usx2y_audio_stream_new(struct snd_card *card, int playback_endpoint,

 	for (i = playback_endpoint ? SNDRV_PCM_STREAM_PLAYBACK : SNDRV_PCM_STREAM_CAPTURE;
 	     i <= SNDRV_PCM_STREAM_CAPTURE; ++i) {
-		usx2y_substream[i] = kzalloc(sizeof(struct snd_usx2y_substream), GFP_KERNEL);
+		usx2y_substream[i] = kzalloc_obj(struct snd_usx2y_substream,
+						 GFP_KERNEL);
 		if (!usx2y_substream[i])
 			return -ENOMEM;

diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c
index 52c5757585c6..65abd8510ff4 100644
--- a/sound/virtio/virtio_card.c
+++ b/sound/virtio/virtio_card.c
@@ -137,8 +137,7 @@ static int virtsnd_find_vqs(struct virtio_snd *snd)

 	n = virtqueue_get_vring_size(vqs[VIRTIO_SND_VQ_EVENT]);

-	snd->event_msgs = kmalloc_array(n, sizeof(*snd->event_msgs),
-					GFP_KERNEL);
+	snd->event_msgs = kmalloc_objs(*snd->event_msgs, n, GFP_KERNEL);
 	if (!snd->event_msgs)
 		return -ENOMEM;

diff --git a/sound/virtio/virtio_jack.c b/sound/virtio/virtio_jack.c
index c69f1dcdcc84..2f1ec3ac02f0 100644
--- a/sound/virtio/virtio_jack.c
+++ b/sound/virtio/virtio_jack.c
@@ -144,7 +144,7 @@ int virtsnd_jack_parse_cfg(struct virtio_snd *snd)
 	if (!snd->jacks)
 		return -ENOMEM;

-	info = kcalloc(snd->njacks, sizeof(*info), GFP_KERNEL);
+	info = kzalloc_objs(*info, snd->njacks, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/sound/virtio/virtio_pcm.c b/sound/virtio/virtio_pcm.c
index 3602b6690fcd..ef5a8a507b24 100644
--- a/sound/virtio/virtio_pcm.c
+++ b/sound/virtio/virtio_pcm.c
@@ -354,7 +354,7 @@ int virtsnd_pcm_parse_cfg(struct virtio_snd *snd)
 		spin_lock_init(&vss->lock);
 	}

-	info = kcalloc(snd->nsubstreams, sizeof(*info), GFP_KERNEL);
+	info = kzalloc_objs(*info, snd->nsubstreams, GFP_KERNEL);
 	if (!info)
 		return -ENOMEM;

diff --git a/sound/virtio/virtio_pcm_msg.c b/sound/virtio/virtio_pcm_msg.c
index 9778020a7ba8..79af520ef12e 100644
--- a/sound/virtio/virtio_pcm_msg.c
+++ b/sound/virtio/virtio_pcm_msg.c
@@ -135,7 +135,7 @@ int virtsnd_pcm_msg_alloc(struct virtio_pcm_substream *vss,
 	struct snd_pcm_runtime *runtime = vss->substream->runtime;
 	unsigned int i;

-	vss->msgs = kcalloc(periods, sizeof(*vss->msgs), GFP_KERNEL);
+	vss->msgs = kzalloc_objs(*vss->msgs, periods, GFP_KERNEL);
 	if (!vss->msgs)
 		return -ENOMEM;

@@ -146,7 +146,7 @@ int virtsnd_pcm_msg_alloc(struct virtio_pcm_substream *vss,
 		int sg_num = virtsnd_pcm_sg_num(data, period_bytes);
 		struct virtio_pcm_msg *msg;

-		msg = kzalloc(struct_size(msg, sgs, sg_num + 2), GFP_KERNEL);
+		msg = kzalloc_flex(*msg, sgs, sg_num + 2, GFP_KERNEL);
 		if (!msg)
 			return -ENOMEM;

diff --git a/sound/x86/intel_hdmi_audio.c b/sound/x86/intel_hdmi_audio.c
index f5807fc73c54..dc7501c95b99 100644
--- a/sound/x86/intel_hdmi_audio.c
+++ b/sound/x86/intel_hdmi_audio.c
@@ -475,7 +475,7 @@ static void had_build_channel_allocation_map(struct snd_intelhad *intelhaddata)
 	kfree(intelhaddata->chmap->chmap);
 	intelhaddata->chmap->chmap = NULL;

-	chmap = kzalloc(sizeof(*chmap), GFP_KERNEL);
+	chmap = kzalloc_obj(*chmap, GFP_KERNEL);
 	if (!chmap)
 		return;

diff --git a/sound/xen/xen_snd_front_alsa.c b/sound/xen/xen_snd_front_alsa.c
index b229eb6f7057..379a4a1cb911 100644
--- a/sound/xen/xen_snd_front_alsa.c
+++ b/sound/xen/xen_snd_front_alsa.c
@@ -442,8 +442,8 @@ static int shbuf_setup_backstore(struct xen_snd_front_pcm_stream_info *stream,

 	stream->buffer_sz = buffer_sz;
 	stream->num_pages = DIV_ROUND_UP(stream->buffer_sz, PAGE_SIZE);
-	stream->pages = kcalloc(stream->num_pages, sizeof(struct page *),
-				GFP_KERNEL);
+	stream->pages = kzalloc_objs(struct page *, stream->num_pages,
+				     GFP_KERNEL);
 	if (!stream->pages)
 		return -ENOMEM;

diff --git a/sound/xen/xen_snd_front_evtchnl.c b/sound/xen/xen_snd_front_evtchnl.c
index 2fbed8e4a490..8a8807cbc80c 100644
--- a/sound/xen/xen_snd_front_evtchnl.c
+++ b/sound/xen/xen_snd_front_evtchnl.c
@@ -267,9 +267,8 @@ int xen_snd_front_evtchnl_create_all(struct xen_snd_front_info *front_info,
 	int d, ret = 0;

 	front_info->evt_pairs =
-			kcalloc(num_streams,
-				sizeof(struct xen_snd_front_evtchnl_pair),
-				GFP_KERNEL);
+			kzalloc_objs(struct xen_snd_front_evtchnl_pair,
+				     num_streams, GFP_KERNEL);
 	if (!front_info->evt_pairs)
 		return -ENOMEM;

diff --git a/virt/kvm/coalesced_mmio.c b/virt/kvm/coalesced_mmio.c
index 375d6285475e..6b1d90161099 100644
--- a/virt/kvm/coalesced_mmio.c
+++ b/virt/kvm/coalesced_mmio.c
@@ -128,8 +128,7 @@ int kvm_vm_ioctl_register_coalesced_mmio(struct kvm *kvm,
 	if (zone->pio != 1 && zone->pio != 0)
 		return -EINVAL;

-	dev = kzalloc(sizeof(struct kvm_coalesced_mmio_dev),
-		      GFP_KERNEL_ACCOUNT);
+	dev = kzalloc_obj(struct kvm_coalesced_mmio_dev, GFP_KERNEL_ACCOUNT);
 	if (!dev)
 		return -ENOMEM;

diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c
index a369b20d47f0..0e8b8a2c5b79 100644
--- a/virt/kvm/eventfd.c
+++ b/virt/kvm/eventfd.c
@@ -382,7 +382,7 @@ kvm_irqfd_assign(struct kvm *kvm, struct kvm_irqfd *args)
 	if (!kvm_arch_irqfd_allowed(kvm, args))
 		return -EINVAL;

-	irqfd = kzalloc(sizeof(*irqfd), GFP_KERNEL_ACCOUNT);
+	irqfd = kzalloc_obj(*irqfd, GFP_KERNEL_ACCOUNT);
 	if (!irqfd)
 		return -ENOMEM;

@@ -430,8 +430,7 @@ kvm_irqfd_assign(struct kvm *kvm, struct kvm_irqfd *args)
 		}

 		if (!irqfd->resampler) {
-			resampler = kzalloc(sizeof(*resampler),
-					    GFP_KERNEL_ACCOUNT);
+			resampler = kzalloc_obj(*resampler, GFP_KERNEL_ACCOUNT);
 			if (!resampler) {
 				ret = -ENOMEM;
 				mutex_unlock(&kvm->irqfds.resampler_lock);
@@ -874,7 +873,7 @@ static int kvm_assign_ioeventfd_idx(struct kvm *kvm,
 	if (IS_ERR(eventfd))
 		return PTR_ERR(eventfd);

-	p = kzalloc(sizeof(*p), GFP_KERNEL_ACCOUNT);
+	p = kzalloc_obj(*p, GFP_KERNEL_ACCOUNT);
 	if (!p) {
 		ret = -ENOMEM;
 		goto fail;
diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c
index 923c51a3a525..e73339295a44 100644
--- a/virt/kvm/guest_memfd.c
+++ b/virt/kvm/guest_memfd.c
@@ -568,7 +568,7 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags)
 	if (fd < 0)
 		return fd;

-	f = kzalloc(sizeof(*f), GFP_KERNEL);
+	f = kzalloc_obj(*f, GFP_KERNEL);
 	if (!f) {
 		err = -ENOMEM;
 		goto err_fd;
diff --git a/virt/kvm/irqchip.c b/virt/kvm/irqchip.c
index 6ccabfd32287..462c70621247 100644
--- a/virt/kvm/irqchip.c
+++ b/virt/kvm/irqchip.c
@@ -183,7 +183,7 @@ int kvm_set_irq_routing(struct kvm *kvm,

 	nr_rt_entries += 1;

-	new = kzalloc(struct_size(new, map, nr_rt_entries), GFP_KERNEL_ACCOUNT);
+	new = kzalloc_flex(*new, map, nr_rt_entries, GFP_KERNEL_ACCOUNT);
 	if (!new)
 		return -ENOMEM;

@@ -194,7 +194,7 @@ int kvm_set_irq_routing(struct kvm *kvm,

 	for (i = 0; i < nr; ++i) {
 		r = -ENOMEM;
-		e = kzalloc(sizeof(*e), GFP_KERNEL_ACCOUNT);
+		e = kzalloc_obj(*e, GFP_KERNEL_ACCOUNT);
 		if (!e)
 			goto out;

@@ -246,7 +246,7 @@ int kvm_init_irq_routing(struct kvm *kvm)
 	struct kvm_irq_routing_table *new;
 	int chip_size;

-	new = kzalloc(struct_size(new, map, 1), GFP_KERNEL_ACCOUNT);
+	new = kzalloc_flex(*new, map, 1, GFP_KERNEL_ACCOUNT);
 	if (!new)
 		return -ENOMEM;

diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 61dca8d37abc..b798903540b6 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1043,15 +1043,15 @@ static int kvm_create_vm_debugfs(struct kvm *kvm, const char *fdname)
 		return 0;

 	kvm->debugfs_dentry = dent;
-	kvm->debugfs_stat_data = kcalloc(kvm_debugfs_num_entries,
-					 sizeof(*kvm->debugfs_stat_data),
-					 GFP_KERNEL_ACCOUNT);
+	kvm->debugfs_stat_data = kzalloc_objs(*kvm->debugfs_stat_data,
+					      kvm_debugfs_num_entries,
+					      GFP_KERNEL_ACCOUNT);
 	if (!kvm->debugfs_stat_data)
 		goto out_err;

 	for (i = 0; i < kvm_vm_stats_header.num_desc; ++i) {
 		pdesc = &kvm_vm_stats_desc[i];
-		stat_data = kzalloc(sizeof(*stat_data), GFP_KERNEL_ACCOUNT);
+		stat_data = kzalloc_obj(*stat_data, GFP_KERNEL_ACCOUNT);
 		if (!stat_data)
 			goto out_err;

@@ -1066,7 +1066,7 @@ static int kvm_create_vm_debugfs(struct kvm *kvm, const char *fdname)

 	for (i = 0; i < kvm_vcpu_stats_header.num_desc; ++i) {
 		pdesc = &kvm_vcpu_stats_desc[i];
-		stat_data = kzalloc(sizeof(*stat_data), GFP_KERNEL_ACCOUNT);
+		stat_data = kzalloc_obj(*stat_data, GFP_KERNEL_ACCOUNT);
 		if (!stat_data)
 			goto out_err;

@@ -1185,7 +1185,7 @@ static struct kvm *kvm_create_vm(unsigned long type, const char *fdname)
 	r = -ENOMEM;
 	for (i = 0; i < KVM_NR_BUSES; i++) {
 		rcu_assign_pointer(kvm->buses[i],
-			kzalloc(sizeof(struct kvm_io_bus), GFP_KERNEL_ACCOUNT));
+			kzalloc_obj(struct kvm_io_bus, GFP_KERNEL_ACCOUNT));
 		if (!kvm->buses[i])
 			goto out_err_no_arch_destroy_vm;
 	}
@@ -1944,7 +1944,7 @@ static int kvm_set_memslot(struct kvm *kvm,
 	 * invalidation needs to be reverted.
 	 */
 	if (change == KVM_MR_DELETE || change == KVM_MR_MOVE) {
-		invalid_slot = kzalloc(sizeof(*invalid_slot), GFP_KERNEL_ACCOUNT);
+		invalid_slot = kzalloc_obj(*invalid_slot, GFP_KERNEL_ACCOUNT);
 		if (!invalid_slot) {
 			mutex_unlock(&kvm->slots_arch_lock);
 			return -ENOMEM;
@@ -2117,7 +2117,7 @@ static int kvm_set_memory_region(struct kvm *kvm,
 		return -EEXIST;

 	/* Allocate a slot that will persist in the memslot. */
-	new = kzalloc(sizeof(*new), GFP_KERNEL_ACCOUNT);
+	new = kzalloc_obj(*new, GFP_KERNEL_ACCOUNT);
 	if (!new)
 		return -ENOMEM;

@@ -4505,7 +4505,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
 		struct kvm_regs *kvm_regs;

 		r = -ENOMEM;
-		kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL);
+		kvm_regs = kzalloc_obj(struct kvm_regs, GFP_KERNEL);
 		if (!kvm_regs)
 			goto out;
 		r = kvm_arch_vcpu_ioctl_get_regs(vcpu, kvm_regs);
@@ -4532,7 +4532,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
 		break;
 	}
 	case KVM_GET_SREGS: {
-		kvm_sregs = kzalloc(sizeof(struct kvm_sregs), GFP_KERNEL);
+		kvm_sregs = kzalloc_obj(struct kvm_sregs, GFP_KERNEL);
 		r = -ENOMEM;
 		if (!kvm_sregs)
 			goto out;
@@ -4624,7 +4624,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
 		break;
 	}
 	case KVM_GET_FPU: {
-		fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL);
+		fpu = kzalloc_obj(struct kvm_fpu, GFP_KERNEL);
 		r = -ENOMEM;
 		if (!fpu)
 			goto out;
@@ -4844,7 +4844,7 @@ static int kvm_ioctl_create_device(struct kvm *kvm,
 	if (test)
 		return 0;

-	dev = kzalloc(sizeof(*dev), GFP_KERNEL_ACCOUNT);
+	dev = kzalloc_obj(*dev, GFP_KERNEL_ACCOUNT);
 	if (!dev)
 		return -ENOMEM;

@@ -6006,8 +6006,8 @@ int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
 	if (bus->dev_count - bus->ioeventfd_count > NR_IOBUS_DEVS - 1)
 		return -ENOSPC;

-	new_bus = kmalloc(struct_size(bus, range, bus->dev_count + 1),
-			  GFP_KERNEL_ACCOUNT);
+	new_bus = kmalloc_flex(*bus, range, bus->dev_count + 1,
+			       GFP_KERNEL_ACCOUNT);
 	if (!new_bus)
 		return -ENOMEM;

@@ -6053,8 +6053,8 @@ int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,
 	if (i == bus->dev_count)
 		return 0;

-	new_bus = kmalloc(struct_size(bus, range, bus->dev_count - 1),
-			  GFP_KERNEL_ACCOUNT);
+	new_bus = kmalloc_flex(*bus, range, bus->dev_count - 1,
+			       GFP_KERNEL_ACCOUNT);
 	if (new_bus) {
 		memcpy(new_bus, bus, struct_size(bus, range, i));
 		new_bus->dev_count--;
@@ -6326,7 +6326,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)
 	active = kvm_active_vms;
 	mutex_unlock(&kvm_lock);

-	env = kzalloc(sizeof(*env), GFP_KERNEL);
+	env = kzalloc_obj(*env, GFP_KERNEL);
 	if (!env)
 		return;

diff --git a/virt/kvm/vfio.c b/virt/kvm/vfio.c
index be50514bbd11..9f9acb66cc1e 100644
--- a/virt/kvm/vfio.c
+++ b/virt/kvm/vfio.c
@@ -166,7 +166,7 @@ static int kvm_vfio_file_add(struct kvm_device *dev, unsigned int fd)
 		}
 	}

-	kvf = kzalloc(sizeof(*kvf), GFP_KERNEL_ACCOUNT);
+	kvf = kzalloc_obj(*kvf, GFP_KERNEL_ACCOUNT);
 	if (!kvf) {
 		ret = -ENOMEM;
 		goto out_unlock;
@@ -364,7 +364,7 @@ static int kvm_vfio_create(struct kvm_device *dev, u32 type)
 		if (tmp->ops == &kvm_vfio_ops)
 			return -EBUSY;

-	kv = kzalloc(sizeof(*kv), GFP_KERNEL_ACCOUNT);
+	kv = kzalloc_obj(*kv, GFP_KERNEL_ACCOUNT);
 	if (!kv)
 		return -ENOMEM;